OmniAICreator/Qiita-1.07M huggingface dataset:
Cygwin上のGitからWindowsのテキストエディタとWinMergeを利用する。

Cygwin上のGitからWindowsのテキストエディタとWinMergeを利用したかったので調べてみました。
今回はホームディレクトリ上の.gitconfigを直接設定しています。

#テキストエディタの設定

今回はテキストエディタとしてEmEditorを利用していますので、下記のようにしてみました。
coreセクションにeditorの行を追加します。

引数で新規プロセスで起動するオプションと、文字化け対策として、UTF8でオープンするように指定しています。
Gitから渡されるCygwinのPATHではEmEditor側がオープン出来ないため、cygpathで変換しています。
```
[core]
autoCRLF = false
whitespace = cr-at-eol
editor = 'C:/Program Files/EmEditor/EmEditor.exe' /sp /cp 65001 "$(cygpath -w "$*")"
```

#WinMergeの設定

.gitconfigに下記を追加します。
こちらもcygpathを利用するのがポイントです。

```
[merge]
    tool = WinMerge

[mergetool "WinMerge"]
    cmd = '/cygdrive/c/Program Files/WinMerge/WinMergeU.exe' -u -wl -wr \"$(cygpath --windows --absolute \"$REMOTE\")\" \"$(cygpath --windows --absolute \"$MERGED\")\" \"$(cygpath --windows --absolute \"$LOCAL\")\"

[mergetool]
    trustExitCode = false

[diff]
    tool = WinMerge

[difftool "WinMerge"]
    cmd = '/cygdrive/c/Program Files/WinMerge/WinMergeU.exe' -u -r \"$(cygpath --windows --absolute \"$LOCAL\")\" \"$(cygpath --windows --absolute \"$REMOTE\")\"

[alias]
    diffdir = difftool -d
```

#謝辞
下記のサイトを参考にさせていただきました。
http://qiita.com/whitebell/items/4d92bf0af9f4ccca7276
http://hiro-syumi.ldblog.jp/archives/36344168.html
https://github.com/agross/dotfiles/blob/master/profiles/cygwin/git/gitconfig
Homebrewのupdateを自動化する(launchd)


## 概要

Homebrewの各種コマンド `brew doctor` `brew update` `brew upgrade`を一日一回自動実行するようにし、homebrewでinstallしたアプリケーションを常に最新化する手順を記載します.

## 前提

Brefileファイルの管理は、brew-fileを利用しています.
https://github.com/rcmdnk/homebrew-file

なのでupdateコマンドに微妙に差異があるので、スクリプトは適宜読み替えて下さい.


## script準備

`brew update`等を実行するスクリプトを準備する.

https://github.com/kegamin/dotfiles/blob/master/bin/brew_update.sh

```bash
#!/bin/sh

launchctl setenv PATH /usr/local/bin:$PATH
log_dir=$HOME/Library/Logs/Homebrew/update
log_name=${log_dir}/`date "+%Y%m%d"`.log

if [ ! -d ${log_dir} ]; then
  mkdir -p ${log_dir}
fi

brew doctor >> ${log_name} 2>&1
if [ $? -eq 1 ]; then
    brew file update >> ${log_name} 2>&1
    brew file cask_upgrade >> ${log_name} 2>&1
fi
```

## 自動実行設定

### plist準備

macで自動実行するためにplistを用意する

```bash
$ cd $HOME/Library/LaunchAgents
# ファイルの中身については以下を参照
$ sudo vi homebrew_update.plist
```

### homebrew_update.plist

```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Disabled</key>
	<false/>
	<key>UserName</key>
		<string>user</string>
	<key>EnvironmentVariables</key>
	<dict>
		<key>PATH</key>
		<string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
		<key>HOME</key>
		<string>/Users/user</string>
	</dict>
	<key>Label</key>
	<string>homebrew_update</string>
	<key>ProgramArguments</key>
	<array>
		<string>/Users/user/dotfiles/bin/brew_update</string>
	</array>
	<key>RunAtLoad</key>
	<false/>
	<key>StartCalendarInterval</key>
	<array>
		<dict>
			<key>Hour</key>
			<integer>01</integer>
			<key>Minute</key>
			<integer>00</integer>
		</dict>
	</array>
</dict>
</plist>
```

以下注意点

* HOME  
  各ユーザのHOMEディレクトリを指定して下さい.  
  launchdには＄HOMEが引き継がれないので、この設定が必須...
* Label  
  各自お好きな名前に
* StartCalendarInterval  
  何時に定期実行したいか記述. 例の場合は1時に実行されるので、おこのみで変更する

### 登録

```bash
# plist登録
$ sudo launchctl load -w $HOME/Library/LaunchAgents/homebrew_update.plist
# 登録されているか確認
$ sudo launchctl list | grep homebrew_update
-       0       homebrew_update
```

### 実行確認

`$HOME/Library/Logs/Homebrew/update`のログを確認して、問題無いか確認する

## 苦労した点

### PATHがスクリプトに引き継がれてない

最初スクリプト/plistを作って実行したら以下のエラーがsystem.logにでた。

```
Aug  3 15:59:00 macbookair com.apple.xpc.launchd[1] (homebrew_update[4403]): Service exited with abnormal code: 1
```

`brew doctor`部分で実行できずにこけていたので、調べて`launchctl setenv PATH /usr/local/bin:$PATH`をスクリプト内に追加する事で解決

### HOMEがスクリプトに引き継がれてない

スクリプト内の`brew update`実行時に、以下のようなエラーがでて失敗していた.

```bash
$ git pull
Permission denied (publickey).
fatal: Could not read from remote repository.
```

原因はHOMEが引き継がれずに、.ssh/configが読めてなかったから.
どうもHOMEは認識できないようで、plistで明示的にHOMEを宣言してあげる事で解決
OS X のコマンドラインでCAFファイルをM4Aファイルに変換する方法


CAF (Core Audio Format) は圧縮率も高く便利だけど汎用性がない。
mp3化したいときなどは、まず他のフォーマットに変換する必要がある。

`afconvert -f m4af data.caf`

とすると、data.m4aが作成される。

`afplay data.m4a`

で鳴らしてみたり、

`afinfo data.m4a`

で内容確認。


Helpには以下のコマンドで利用できるフォーマットを確認できるとあるが、
`afconvert -hf`

> Audio file and data formats:
>    'm4af' = Apple MPEG-4 Audio (.m4a, .m4r)
>               data_formats: 'aac ' 'aace' 'aacf' 'aach' 'aacl' 'aacp'
>                             'alac' 'paac'
>    'caff' = CAF (.caf)
>               data_formats: '.mp1' '.mp2' '.mp3' 'QDM2' 'QDMC' 'Qclp'
>                             'Qclq' 'aac ' 'aace' 'aacf' 'aach' 'aacl'
>                             'aacp' 'alac' 'alaw' 'dvi8' 'ilbc' 'ima4'
>                             I8 BEI16 BEI24 BEI32 BEF32 BEF64 LEI16 LEI24
>                             LEI32 LEF32 LEF64 'ms\x00\x02' 'ms\x00\x11'
>                             'ms\x001' 'paac' 'qaac' 'qach' 'qacp' 'samr'
>                             'ulaw' 'zaac' 'zach' 'zacp'

他にもWAVEやAIFFやMPG3もリストに挙がるけれど、読み込みが可能なだけで出力できない。出力に対応しているのは試した中ではCAF、M4A、3GPP/3GPP2、AAC-ADTS。
phantomjs2.0のインストール

# phantomjsのインストール

## インストール方法

### 自分でコンパイルする場合

```
yum -y install gcc gcc-c++ make flex bison gperf ruby \
  openssl-devel freetype-devel fontconfig-devel libicu-devel sqlite-devel \
  libpng-devel libjpeg-devel
git clone git://github.com/ariya/phantomjs.git
cd phantomjs
git checkout 2.0
./build.sh
```

それなりの環境で３０分くらいかかる
出来上がったバイナリをパスの通ったディレクトリにコピーする(/usr/local/binなど)


### ビルド済みバイナリを使う場合

```
yum install http://you21979-storage.github.io/centos-rpm/centos6/phantomjs-2.0-0.x86_64.rpm
```

## fontのインストール

文字化けするのでフォントを入れる

```
yum install ipa-gothic-fonts.noarch ipa-mincho-fonts.noarch
fc-cache -fv
```

## 動作確認

```
phantomjs -v
```
シーケンス図をmscgenで生成する

シーケンス図を描く時はどんなツールを使ってますか？
PowerPoint? Eclipse? astah*? ペイント?

mscgenというシーケンス図を生成するツールがあることを知って目から鱗でした。
yumやapt-getでもインストールできるし、MacならHomebrewが使えます。

http://www.mcternan.me.uk/mscgen/

```:shell
% brew search mscgen
homebrew/x11/mscgen
% brew install homebrew/x11/mscgen
==> Tapping Homebrew/x11
Cloning into '/usr/local/Library/Taps/homebrew/homebrew-x11'...
remote: Counting objects: 93, done.
remote: Compressing objects: 100% (93/93), done.
remote: Total 93 (delta 0), reused 33 (delta 0), pack-reused 0
Unpacking objects: 100% (93/93), done.
Checking connectivity... done.
Warning: Could not create link for homebrew/x11/xastir, as it
conflicts with Homebrew/homebrew/xastir. You will need to use the
fully-qualified name when referring this formula, e.g.
  brew install homebrew/x11/xastir
Tapped 90 formulae (205 files, 844K)
==> Installing mscgen from homebrew/homebrew-x11
==> Downloading http://www.mcternan.me.uk/mscgen/software/mscgen-src-0.20.tar.gz
######################################################################## 100.0%
==> ./configure --prefix=/usr/local/Cellar/mscgen/0.20
==> make install
🍺  /usr/local/Cellar/mscgen/0.20: 16 files, 200K, built in 13 seconds
```
anyenvでphpenvをインストールしてphp5.6系をインストールするまで

anyenvでphpenvをインストールして、php5.6.10をインストールする際にこけたのでメモ。

```
$ anyenv install phpenv
```

でphpenvを入れる。

```
$ phpenv install 5.6.10
```

エラーが出たので、色々入れてみる。

```
$ brew install re2c
$ brew install libjpeg
$ brew install libpng
$ brew install libmcrypt
```

再度トライ。

```
$ phpenv install 5.6.10
```

compilingでめちゃめちゃ時間がかかるけど、なんとかインストール完了。
グローバルを5.6.10に変更。

```
$ phpenv versions
* system
  5.6.10

$ phpenv global 5.6.10

$ phpenv versions
  system
* 5.6.10
```

忘れがちなphpenv rehash。

```
$ phpenv rehash
$ php -v
PHP 5.6.10
```

お疲れ様でした。

以下を参考にさせていただきました。ありがとうございます。


* [Homebrewでphp-build及びphpenvインストール後に5.5系をインストールするための手順](http://qiita.com/tebonz/items/82ad7e57066650d43b28)
* [phpenv + php-build + composer で開発環境作ってみた](http://blog.kazu69.net/2013/02/06/phpenv-php-build-composer/)
【FileMaker】神業！タブコントロールがこんなに優秀だなんて！

悪戦苦闘していたとある案件で、「単なる表示だけ」で小計パートにめんどくさい計算結果を表示する仕様があったのですが、どうしてもうまくいかず悩んでいた時に出会った神業。

[寿商会](http://kotovuki.co.jp)さんのブログにあった、[マージフィールドならぬ、【マージ計算式(仮称)】](https://kotovuki.co.jp/archives/840)。

これがすんごい神業でして。。。

というか、タブコントロールに計算式をかけるということを、こうも裏技的に使えるとは目からウロコでした。（ただし、FM13以上）

ありがとう、寿商会の方。

テスト的に実装したのは、以下のような感じです。

![スクリーンショット 2015-08-03 16.24.36.png](https://qiita-image-store.s3.amazonaws.com/0/60538/4058c07a-c1e7-6996-f804-13ddb45e07a7.png)

赤枠の、数量の閾値によってアラートを表示したいという仮の仕様を考えました。
このとき、単に計算フィールドを追加するのではなく、タブで実装しています。

![スクリーンショット 2015-08-03 16.27.37.png](https://qiita-image-store.s3.amazonaws.com/0/60538/f00107b9-1b10-41a9-10ff-81883c9f103a.png)

↑タブ名の指定で、計算式を書いています。
ついでに、タブの背景は「無し」にして違和感なく実装しました。

ズーーーム。
![スクリーンショット 2015-08-03 16.27.45.png](https://qiita-image-store.s3.amazonaws.com/0/60538/c619df17-479b-d5f7-e768-9097cff7d3a5.png)

色付けに関しては、条件付き書式を使っています。
この記事のおかげでどんだけ助かったことか！
tsd導入方法メモ

TypeScriptの型定義ファイルを入れるのに管理ツールtsdを使った方が便利なので導入してみたのでそのメモ。v0.6.3基準。古いバージョンだとそもそもコマンドが違うので要注意。
[https://github.com/Diullei/tsd](https://github.com/Diullei/tsd)

# インストール

```
$ npm install -g tsd
```

# 初期化
tsd.jsonファイルを生成する

```
$ tsd init
```

tsd.jsonの中身を自分の環境用に書き換える

```
{
  "version": "v4",
  "repo": "borisyankov/DefinitelyTyped",
  "ref": "master",
  "path": "typings”,　//型定義ファイルのインストール先
  "bundle": "typings/tsd.d.ts”, //型定義への参照をひとまとめにしたファイルの生成先
  "installed": {}
}
```
tsd.jsonにインストールするファイルの設定が記述できるので、他環境との共有が可能。

# ファイルのインストール
検索

```
$ tsd query jquery
```

ファイルのインストール

```
$ tsd install jquery --save
```

tsd.jsonの設定からインスト−ル

```
$ tsd install
```

オプション等あるのでヘルプを一読しておくと吉。

```
$ tsd -v
```
でおおまかな説明が出力されている。
c++ builder > TThreadからFormのTButtonsをEnabledできなかった

```txt:動作確認
C++ Builder XE4
```

TThreadからSynchornize()を使ってForm上のTButtonsのEnabledを変更するなどよくやっていた。
でも、なぜかそれが機能しなくなっていた。

原因はプロジェクトファイルがおかしなことになっていたことだった。
以下のファイルにてFormMainのCreateForm()が2回記載されている。

```cpp
int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
	try
	{
		Application->Initialize();
		Application->MainFormOnTaskBar = true;
		Application->CreateForm(__classid(TFormMain), &FormMain);
		Application->CreateForm(__classid(TForm2), &Form2);
		Application->CreateForm(__classid(TFormMain), &FormMain);
		Application->Run();
	}
	catch (Exception &exception)
	{
		Application->ShowException(&exception);
	}
	catch (...)
	{
		try
		{
			throw Exception("");
		}
		catch (Exception &exception)
		{
			Application->ShowException(&exception);
		}
	}
	return 0;
}
```

少し前にFormMainの名前が"F"になっていて、それを修正した時に、今回の問題の種が混入したのかもしれない。

2つあるCreateForm()の1つを消したところ、TThreadからFormのTButtonsを変更できるようになった。
TransitionStyleをカスタマイズした時にStatusBarのスタイルを動的に変更できなかった話

イケイケな画面遷移を作りたい事、よくあると思います。
Facebookのインタラクティブな画面遷移アニメーションは使っててとってもきもちいいですね。

## StatusBarの色が変わらない！
また、画面遷移をカスタマイズする際に、StatusBarの文字色を動的に変更する事もよくある、と思います。
いろいろな諸事情のため、iOS7,iOS8両方対応しなければならなかったけども、
どうも **iOS7の時だけ、StatusBarの文字色が動的(各画面毎)に変更ができない！**
調べてみた所、UIWindowのrootViewControllerはうまく更新がされているみたい。
そして、遷移先のUIViewControllerにてsetNeedsStatusBarAppearanceUpdate()を呼ぶと、
rootViewControllerのpreferredStatusBarStyle()が呼ばれるみたいです。謎でした

こちらがStatusBarの更新がうまくいかなかったUIViewControllerです。

```swift:SecondViewController
    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        
        // Set Custom Transition Style
        self.modalPresentationStyle = .Custom
        self.transitioningDelegate = transDelegate
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        // Update Statusbar Style
        setNeedsStatusBarAppearanceUpdate()
    }

    // Override Statusbar Style
    override func preferredStatusBarStyle() -> UIStatusBarStyle {
        return .LightContent
    }
```

## modalPresentationCapturesStatusBarAppearance
問題はこれです。UIViewControllerのプロパティである
[modalPresentationCapturesStatusBarAppearance](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/#//apple_ref/occ/instp/UIViewController/modalPresentationCapturesStatusBarAppearance)。
遷移元のStatusBarAppearanceを遷移先で上書きするかどうかがBool値で定義できます。
ドキュメントをちゃんと見てみると、modalPresentationStyleがUIModalPresentationFullScreenでない限り、デフォルトでfalseが定義されているみたいです。
上記の処理は以下のようにすればうまくいくようです。

```swift:FixedSecondViewController
    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        
        // Set Custom Transition Style
        self.modalPresentationStyle = .Custom
        self.transitioningDelegate = transDelegate

        // Takeover StatusBar Appearance
        self.modalPresentationCapturesStatusBarAppearance = true
    }
```

## 結論
結果的には、通常のモーダル表示のような全画面が切り替わるような時には、
 **modalPresentationStyleに.Customを指定しない方がスマートっぽいです。**
遷移前のStatusBarStyleに左右されない、例えばUIAlertControllerのような画面遷移をする場合には.Customを指定し、
全画面差し代わるTransitionの場合は.FullScreenを指定し、各画面毎にStatusBarStyleを指定するようにしています。
yosemite & rails でnokogiriのインストールがうまくいかなかった件（備忘録）



私の持っているMacbookAirでなかなかRailsを試すことができなかったのだが、
なんとかそれをクリアできたので備忘録。

それは、一般的なrailsの開始コマンドである

```Command
$ ruby new [hogehoge]
```

や

```Command
$ bundle install --path=~/sample/vendor/bundle
```

を実行した際に、nokogiriのコンパイルに失敗したとエラーが起こるというもの。

みなさん同じエラーに悩まされているみたいで、

公式ページのトラブルシューティングの実例
[http://www.nokogiri.org/tutorials/installing_nokogiri.html]

も実行し、


[システムライブラリの使用]

```Command
$ bundle config build.nokogiri --use-system-libraries
```

[http://qiita.com/s_makinaga/items/4e04ac652b6b38ec63e9]

なども試したものの、結果うまくいかず。


ちなみに私の環境は以下のとおり。

| 環境情報　　 | バージョン等   |
|:-----------|:-------------|
| Mac OSX    | yosemite(10.10.4)     |
| ruby       | 2.2.2p95     |
| Rails      | 4.2.3        |
| rbenv      | 0.4.0-153    |
| libxml2    | 2.9.2        |
| libxslt    | 1.1.28_1     |
| libiconv   | 1.14         |


結局、ソフトウェアの問題ではなく、ミドルウェアの範疇かと調査範囲を広げた結果、
[同じ状態に直面して解決した方](http://qiita.com/mist_dev/items/be2efa5913fa0fc861af "Qiita")を発見して対処できた。

対応はこれ

```Command
$ bundle config build.nokogiri --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/libxml2 --use-system-libraries
```



これ、あんまり起こってない現象なのかな。それならなんで起きたんかな。
Ruby unless/case

```
unless 条件 then
　文
end

case 比較したいオブジェクト
 when 値1 then
  文1
 when 値2 
  文2
 when 値3
  文3
 else
  文4
 end

case.rb
tags = [ "A", "IMG", "PRE"]
tags.each do |tagname|
 case tagname
when "P", "A", "I", "B", "BLOCKQUOTE"
 puts "#{tagname} has child"
when "IMG", "BR"
puts "#{tagname} has no child"
else
puts "#{tagname} can not be used"
 end
end

> ruby case.rb
A has child, IMG has no child, PRE can not be used
Ruby if文

```
if 文
if 条件 then
 文
end

if 条件1 then
 文1
elsif 条件2 then
 文2
elsif 条件3 then
 文3
else
 文4
end

if_elsif.rb
a=10
b=20
if a > b
 puts "aはbよりも大きい"
elsif a < b
 puts "aはbよりも小さい"
else
 puts"aはbと同じ"
end
Ruby 条件判断

条件判断

```
ad2heisei.rb
ad = ARGV[0]to_i
heisei = ad - 1988
puts heisei
> ruby ad2heisei.rb 2013

p " ".empty? #=> true
p"AAA".empty? #=> false
p/Ruby/ = ~/Ruby/ #=> 0
p/Ruby/ = ~/Diamond/ #=> nil

```

Rubyの真偽値
真：falseとnil以外のオブジェクト全て
偽：false と nil

条件演算子
条件1 && 条件2 
if x>=1 && x<=10
条件1 || 条件2
if x <1 || x > 10
Ruby 配列の要素を取り出す

入れ子になった配列の要素を取り出す

```
ary = [ 1, [2,3], 4]
a,b,c = ary
p a #=> 1
p b #=> [2,3]
p c #=> 4

ary = [ 1, [2,3], 4]
a, (b1, b2), c = ary #配列に対応する形で代入する
p a #=> 1
p b1 #=> 2
p b2 #=> 3
p c #=> 4
```
Scalaの進捗どうですか

最近Scalaを勉強していて、Qiitaの進捗どうですかシリーズにScalaがなさそうだったので練習がてら書いてみた。

```scala:sinchoku.scala
import scala.util.Random

val a = Array("進捗", "どう", "です", "か")
val goal = s".*${a.mkString}".r

def doudesuka(text: String): String = {
  text match {
    case goal() => text + "???"
    case _ => doudesuka(text + Random.shuffle(a.toList).head)
  }
}

val text = doudesuka("")
println(text)
println(text.size + "文字で煽られました")

```

```
どうですどうどうですですか進捗かどう進捗かか進捗かかです進捗進捗です進捗ですどうどうどうかどう進捗進捗進捗どう進捗どうどうですどうか進捗ですどうかですですですどうかですです進捗かかですかかどう進捗進捗どう進捗か進捗ですどうかどうです進捗か進捗進捗進捗進捗どうかかか進捗進捗か進捗どうかどうかですかかです進捗ですかかかかですどうです進捗どうですか???
175文字で煽られました
```
なるべくScalaっぽさを出すためにループは使わなかったりmatchを使うようにしてみた。
Scala詳しい方はレビューしていただければ嬉しいです。
Pepperアプリにモジュールをいれる

## 概要

Pepperに標準インストールされていないpythonモジュールを使いたい場合の手順

## 環境

* Mac OS X 10.10
* Choreagraphe 2.3.1.25

## 手順

pipを使ってモジュールをインストールします。
pipが入ってない場合はインストール

```shell-session
$ brew install pip
```

### 1. pipでダウンロードする

pip install [module] --no-install --no-buildが使えなくなってたので
-dオプションをつかう

### 2. ダウンロードしたファイルを解凍する

tarで落ちてくるのでコマンドとかで解凍

```shell-session
$ pip install [module] -d ./
```

### 3. プロジェクトにつっこむ

Choregrapheのプロジェクトファイルから
+ マークでmoduleを追加する用のディレクトリを追加
ここではlibと名前をつけます。

### 4. アプリ内でモジュールのディレクトリをsys.pathに追加する

追加用のボックスを作成します。

```py
import sys
import os

class MyClass(GeneratedClass):
    def __init__(self):
        GeneratedClass.__init__(self)
        self.path = ALFrameManager.getBehaviorPath(self.behaviorId) + "/lib"

        if self.path not in sys.path:
            sys.path.append(self.path)

    def onUnload(self):
        sys.path.remove(self.path)

    def onInput_onStart(self):
        pass
```

GithubのボックスライブラリにAddLibというボックスを追加してます。

pythonではsys.pathにappendしたディレクトリにあるモジュールを
importできるようになるので先ほど追加したlibディレクトリのパスを追加しています。
AddLibボックスはrootにあるbehaviorように作ってあります。

また、Unload時にはパスを削除するようにしているので
rootに配置することをお勧めします。


### 5. ボックス内でimport

importする場合はボックスのclass外に書いてしまうと
起動時に走るロード処理でsys.path.appendが呼ばれる前にimportしようとしてしまうので
classのメソッド内にimportを記述するようにしてください。


Github
https://github.com/hws-hitorobo/custom_box
Azureの「Web サーバー ログ」をiLogScannerで解析する方法

#概要
![image](https://qiita-image-store.s3.amazonaws.com/0/67206/e0d2a918-f694-efcc-d17e-d2dfa8e7cad4.png)

Azureの「Web サーバー ログ」を取得をオンにすると、/LogFiles/http/RawLogs以下に[W3C 拡張ログ ファイル形式](https://azure.microsoft.com/ja-jp/documentation/articles/web-sites-enable-diagnostic-log/)のログテキストファイルが出力されます。

ログファイルの確認は、いろいろと方法があるかと思いますが、
IPAの[iLogScanner](http://www.ipa.go.jp/security/vuln/iLogScanner/index.html)で解析する方法をメモとして残します。

![image](https://qiita-image-store.s3.amazonaws.com/0/67206/a568152d-7adf-4bfc-9cbd-d0774ebd446e.png)


#方法
Azureから出力されるiis_w3cフォーマットを素のままでは、iLogScannerで読み込めません。いくつかのログ変換処理が必要です。

##変更箇所
### #Version,#Date行の追加
2,3行目に以下を加えます。値は適当で大丈夫だと思います。

```
  #Version: 1.0
  #Date: 2015-05-24 20:18:01
```

### Fieldsの項目順序変更
[iLogScannerで読み込める順番と項目](http://www.ipa.go.jp/security/vuln/iLogScanner/app/explainlog.html#top)が決まっているようです。#Fields行を以下の順序に変更します。
最後にスペースが必要です。

```
  #Fields: date time c-ip cs-username s-ip s-port cs-method cs-uri-stem cs-uri-query sc-status cs(User-Agent) 
```

### s-ipを用意する
Azureのログにs-ip(サーバのipアドレス）は含まれません。Azureの管理ポータル上でIPアドレスが見れるので、ひとまずそれを使います。

### 実際のログの順序をfields定義に合わせて変更
出力されたログ行をFields定義に合わせて順序を変更します。

以上の変更点を、適当に文字列操作スクリプトを書いて実行します。参考までにRubyコードです。

```
s_ip = "*.*.*.*"  #s-ip parameter

CustomizeLogFileName = "custom_" + ARGV[0]
puts(CustomizeLogFileName)

cFile = File.open(CustomizeLogFileName,"w")

File.open(ARGV[0]) do |file|
  while line = file.gets
    if /^#Software:/ =~line
      cFile.puts(line)
      cFile.puts("#Version: 1.0")               # temporary
      cFile.puts("#Date: 2015-05-24 20:18:01")  # temporary
    elsif /^#Fields:/ =~line 
      cFile.puts("#Fields: date time c-ip cs-username s-ip s-port cs-method cs-uri-stem cs-uri-query sc-status cs(User-Agent) ")
    else
      fieldsArray = line.split(' ')
      fields = fieldsArray[0] + " "   #date
      fields += fieldsArray[1] + " "  #time
      fields += fieldsArray[8] + " "  #c-ip
      fields += fieldsArray[7] + " "  #cs-username
      fields += s_ip + " "            #s-ip
      fields += fieldsArray[6] + " "  #s-port
      fields += fieldsArray[3] + " "  #cs-method
      fields += fieldsArray[4] + " "  #cs-uri-stem
      fields += fieldsArray[5] + " "  #cs-uri-query
      fields += fieldsArray[13] + " "  #sc-status
      fields += fieldsArray[9] + " "  #cs(User-Agent)
      cFile.puts(fields)
    end
  end
end

cFile.close
```


##以上の操作を実行すると、iLogScannerで解析できるようになりました。
Mac OS に CUDAサポート付きで OpenCV をインストールする

普通にインストールするなら、以下のようにする。[参考ページ](http://qiita.com/bird_nitryn/items/0b927e3682726f192fd1)。

    brew tap homebrew/science
    brew install opencv

NvidiaのGPUが使えるなら、GPUで処理を高速化できるかもしれないと思い以下の環境で試しました。
![スクリーンショット 2015-08-03 13.34.16.png](https://qiita-image-store.s3.amazonaws.com/0/42252/13243d8e-0bcd-0ff6-4a48-d15587f840b4.png)

OpenCVをインストールする前に、[CUDA Toolkit](https://developer.nvidia.com/cuda-downloads)をインストールします。CUDA 7をインストールしました。

次に、OpenCVをインストールします。オプション --with-cuda を付けます。
(これを書いた時点では OpevCV 2.4.11がインストールされた)

    brew install opencv --with-cuda

インストールはうまくいったようですが、プロジェクトをビルドすると、リンクで以下のエラーになりました。

    Undefined symbols for architecture x86_64

[このページ](http://stackoverflow.com/questions/24646215/error-of-linking-opencv-in-os-mavericks)を参考にして、CMakeLists.txtに以下の行を追加したところ、ビルドが成功しました。

    set (CMAKE_CXX_FLAGS "-stdlib=libstdc++")

以下のコードを実行します。

    std::cout << "GPU device count = " << cv::gpu::getCudaEnabledDeviceCount() << std::endl;

うまく行ったようです。

    GPU device count = 1
Wocker でテーマ作る時によく使うコマンド

基本的な使い方はこちらから

■Wocker Commands | Wocker
http://wckr.github.io/commands/

■wocker 使ってみた感レポ
http://qiita.com/mikakane/items/1bbabe4d27bebf28fd00

---
2016.01.12 追記

[@Next_Season](https://twitter.com/Next_Season) さんがイケてる方法書いてくれてます。

■wockerで初期設定をサクッと終わらせる
<http://note.next-season.net/cms/wordpress/808>

---

## コマンド一覧

### SSHでログイン

```
$ vagrant ssh
```

### 新規のコンテナ作成

既存のコンテナが起動していないか確認

```
core@wocker ~ $ wocker ps -a
```

コンテナが動いていなければ新規でコンテナ作成

```
core@wocker ~ $ wocker run --name CONTAINER_NAME
```

### WP-CLI でコアのアップデート

```
core@wocker ~ $ wocker wp core update

// 日本語環境
core@wocker ~ $ wocker wp core update --locale=ja
```

### 日本語で WordPress を使用する

```
core@wocker ~ $ wocker wp core language install ja --activate
```

日本語にしたら必ず「[WP Multibyte Patch](https://ja.wordpress.org/plugins/wp-multibyte-patch/)」をインストールして有効化

```
core@wocker ~ $ wocker wp plugin install wp-multibyte-patch --activate
```

### WP-CLI でプラグインをインストールして有効化

テーマ開発に役立つ以下のプラグインを一気にインストールして有効化する。

- [Theme Check](https://ja.wordpress.org/plugins/theme-check/)
- [Debug Bar](https://ja.wordpress.org/plugins/debug-bar/)
- [Debug-Bar-Extender](https://ja.wordpress.org/plugins/debug-bar-extender/)

```
core@wocker ~ $ wocker wp plugin install theme-check debug-bar debug-bar-extender --activate
```

### テーマユニットテストデータの日本語版をいれる

■jawordpressorg/theme-test-data-ja
https://github.com/jawordpressorg/theme-test-data-ja


```
core@wocker ~ $ wocker theme-test ja
```

### もう少し簡単な確認をしたい

こちらを使用します。

■コンテンツエリアのマークアップで必要なHTMLの要素。コピペすると使える。 | Shinichi Nishikawa's
<http://nskw-style.com/content-area-markup>

コピペするの大変なので txt ファイルにして、 Gist だと更新したら URL 変わるので GitHub に勝手にあげてあるので curl で保存します。

```bash
cid=$(docker ps -q) && docker exec -u wocker $cid curl -OL 'https://raw.githubusercontent.com/shimakyohsuke/wocker_wp_post_create/master/content-area-markup.txt'
```

`cid=$(docker ps -q)` で、今動いているコンテナの確認。
`docker exec -u wocker $cid curl -OL 'https://raw.githubusercontent.com/shimakyohsuke/wocker_wp_post_create/master/content-area-markup.txt'` で、Nishikawa さんのデータを動いているコンテナに保存しています。


テキストファイルはこちらに置いてます。
<https://github.com/shimakyohsuke/wp_post_create>

コンテナに保存したテキストファイルを WP-CLI を使って投稿を作成

■wp post create | WP-CLI
<http://wp-cli.org/commands/post/create/>

```
wocker wp post create content-area-markup.txt --post_title='Nishikawa さんが作成したテーマユニットテストデータ' --post_status=publish
```

さくっと確認するのはこちらのほうがいいかもしれませんね。
RailでCSVエクスポートする

毎度実装する度に、文字化けやらなんやらで調べることが多いのでまとめておきます。

## 環境
* ruby 2.1.0
* Ruby on Rails 4.2.0

## 実装
### Controller
ControllerではCSVにて出力したいデータを取得する処理を書きます。
今回は例として、ユーザーデータが入ったUser model(name: string, phone_number: string)の中身を全部出力するコードを書いていきます。

```users_controller.rb
class UsersController < ApplicationController

  def csv_download
    @users = User.all
    # ファイル名を指定するために以下の１行を追加しておく
    send_data render_to_string, filename: 'users.csv', type: :csv
  end

end
```

### View
次にControllerから取得したデータをCSVで出力するためのViewを作っていきます。

```csv_download.csv.ruby
# 以下２のモジュールを使用
require 'csv'
require 'nkf'

# １行目に表示する項目を設定
items = %w(No 名前 電話番号 登録日時)

csv_str = CSV.generate do |csv|
  csv << items
  i = 1
  @users.each_with_index(1) do |user, i|
    csv << [
      i,
      user.name,
      user.phone_number
      user.created_at.strftime("%Y-%m-%d %H:%M:%S")
    ]
  end
end

# 文字化けを防止するためにNKFで文字コード変換
NKF::nkf('--sjis -Lw', csv_str)
```

以上で実装は完了です。あとはダウンロードをリンクを該当のページに作るだけでCSVをダウンロードすることができます。



## 参考
* [Rails4で実装するCSVのインポート / エクスポート](https://www.imd-net.com/column/3534/)
【Laravel】配列のキーを変更する方法

まだまだLaravel初心者です。今回は、データベースから取得したCollectionの配列のキーを変更する方法について、備忘録としてまとめておきます。

# LaravelのCollectionのキーを変更したい

Modelから取得したCollectionは、配列になっている。ここから、`object_id`を指定したオブジェクトの`count`というデータを取りたいという状況だった。

今回のデータは、（dumpすると長くなるので、ざっくり）以下のような感じ。

```
array {
    [0] {
        object_id  = 2000,
        count = 1
    }
    [1] {
        object_id = 2001,
        count = 0
    }
}
```

この配列自体、`in_array`に、`object_id`の配列を渡して取得したarrayなので、`object_id`で配列の要素にアクセスできるのが効率的……。

# keyBy()を使って配列を作り直す

Laravelには配列の中の任意の属性名で配列を作ることができるようだ。
`keyBy`というメソッドだ。
ユニークである指定したkeyで、配列を作りなおしてくれる。
使い方としては、以下のような感じ。

```php
$collection->keyBy('object_id')[2000]->count;    // 1
```

これで、`object_id`をキーにして、配列にアクセスできるようになりました。


## Laravelの実装中に便利だったサイト

直接今回の実装では使用していませんが、使えると思ったサイトをここに置いておきます。
実装の際の参考になればと思います。

- [Laravel Cheat Sheat](http://cheats.jesse-obrien.ca/)
    - 困ったときに使える、メソッドやコマンドがまとめられています
- [これ１サーバー](http://kore1server.com/)
    - Laravel以外にも、様々な言語で実装事例が紹介されているので、とても参考になります。
c++ builder XE4, 10.2 Tokyo > 指定フォルダのサブフォルダに、ある名前パターンのファイルがある場合にそのうちの１つのファイル名を取得する > TDirectory::GetFile()

```txt:動作確認
C++ Builder XE4
RAD Studio 10.2 Tokyo Update 2 (追記: 2018/01/09)
```

同じ形式のファイルがサブフォルダのいくつかにある時、そのうちの一つのファイルを読み取りたい。
ファイル名取得は以下の処理でできる。

```cpp:function.cpp
#include <IOUtils.hpp> // for TDirectory.XXX
...
String __fastcall TForm1::getAnyFileInDir(String baseDir, String filePattern)
{

	TStringDynArray fileList;
	TSearchOption option = TSearchOption::soAllDirectories; // all folders

	fileList = TDirectory::GetFiles(baseDir, filePattern, option);

	String res;
	if (fileList.Length == 0) {
		return L"";
	}

	return fileList[0];
}
```

```cpp:usage.cpp
	String baseDir = L"D:\\AAA\\BBB\\";
	String filePattern = L"cn*.csv";

	String res = getAnyFileInDir(baseDir, filePattern);

	int nop = 1;
```

参考
http://www.gesource.jp/weblog/?p=5959
Goで64bitと32bitの実行ファイルを同一Windows機で作成するために講じたこと

ビルド時の必須作業
================

まず、コンパイラは 64bit バージョンをインストールすることにした。ただし、ライブラリも 64bit だけになってしまう。これに対してはビルド時の警告で親切に教えてくれるとおり：

```
cd "%GOROOT%"
cd src
set GOARCH=386
make.bat
```

で 32bit 版のライブラリも用意してやればよい。以後、

- 64bit 版のビルドは、そのままでよい
- 32bit 版のビルドは `set GOARCH=386` と環境変数を設定してやればよい

バイナリがごっちゃにならない工夫
=============================

ただ、これだけだと、作った32bit版と64bit版がごっちゃになってしまう恐れがあるので、以下のような対策を打った。

ソースディレクトリをを分ける
-------------------------

- 64bit版のソースのフォルダー(例：nyagos64) と、32bit版のソースのフォルダー(nyagos32)を別途用意。内容は git で同期
- `go build` を直接使わず、make.cmd というビルド用のバッチを用意する（これは前からそうしていた）。で、make.cmd の頭で

```
setlocal
if exist goarch.txt for /F %%I in (goarch.txt) do set "GOARCH=%%I"
```

というコマンドを追加しておく。32bit版のフォルダーにだけ「386」だけ書いた、goarch.txt を置いてやれば、32bit版のフォルダーでビルドした場合は自動で 32bit バージョンになる。

配布用の zip ファイル作成
-----------------------

また、配布用 zip ファイルを作る時も

```
setlocal
if exist goarch.txt for /F %%I in (goarch.txt) do set "GOARCH=%%I"
if "%GOARCH%" == "" for /F "delims=/ tokens=2" %%I in ('go version') do set "GOARCH=%%I"
zip -9 "nyagos-%VERSION%-%GOARCH%.zip" nyagos.exe …
```

と zip ファイル名の末尾に %GOARCH% をつけてやればバッチリ。
（%GOARCH% が分からない時は `go version` で go 自身に聞けばよい）

実行ファイル自身がアーキテクチャを分かっていたら便利
-----------------------------------------------

`runtime.GOARCH` という変数に「386」「amd64」というアーキテクチャ文字列(string)が入るので、それをそのまま用ればよい。起動時にどこかに表示しておきたい。

その他
------

- プログラムが起動したらタスクマネージャでプロセスを見る。32bitプロセスは「*32」という文字列がイメージ名の末尾につく
- 外部の DLL の類も 32bit と 64bit それぞれそろえなくてはいけない。間違えると実行時に panic になることが多い（たとえば、`lua53.dll` … LuaBinaries の DLL、正直 64bit版は `lua53x64.dll` とか適当に名前を変えてほしかった）
- EXEファイル自体のビット数を確認するのに、[APEC](https://bitbucket.org/yamorijp/apec/wiki/Home)というツールがありました。

以上
oh-my-zshを綺麗にするまで(agnoster.zsh-theme)


[zsh の初期設定がめんどくさい人のためのoh-my-zshを入れてみました](http://rikei-webmemo.hateblo.jp/entry/2014/04/21/113924)で紹介されていた
![agnoster](http://cdn-ak.f.st-hatena.com/images/fotolife/i/inagex/20140421/20140421111502.png)
が格好良かったので導入しようとした。しかし少し詰まったのでメモ。

上のリンクで紹介された通りにすると文字化けが起きていたので、検索すると
[A few invalid symbols in 'agnoster.zsh-theme' #1906](https://github.com/robbyrussell/oh-my-zsh/issues/1906) に解決法が書いてあり

```shell-session
cd ~/.oh-my-zsh/themes/
git checkout  d6a36b1 agnoster.zsh-theme
```

として`agnoster.zsh-theme` のバージョンを切り戻すことで無事正常に表示された(2年前のissueなのにまだ文字化けが起きてしまうとは・・・)
[php]配列データをimplodeで区切り、クオーテーションで囲む

自分用メモ
SQLのIN句をphp使って例えば以下のように書きたいとき、
IN句内のデータをどうやって入れようかという話。

```sql:
SELECT * FROM test_table where id IN("a0001","a0002","a0003");
```

#結論

```php:index.php
$id_list = array('a0001','a0002','a0003');
$sql = 'SELECT * FROM test_table where';

// ↓こう書く
$sql .= ' id IN("'.implode('","',$id_list).'")';
```

#思考手順
```php:index.php
// 1.配列データとsql用意
$id_list = array('a0001','a0002','a0003');

// 2.implodeで配列をカンマで区切って文字列にする
// a0001,a0002,a0003
$in = implode(',',$id_list);

// 3.区切りのカンマをクオーテーションで囲む
// a0001","a0002","a0003
$in = implode('","',$id_list);

// 4.implodeをクオーテーションで囲む
// "a0001","a0002","a0003"
$in = '"'.implode('","',$id_list).'"'; 

// 5.in()で囲む
// IN("a0001","a0002","a0003")
$sql = ' IN('.$in.')';

```
Azure VMのスケールアップを計画的・効率的に自動化する

AzureもAWS同様スケールアウトを推奨しているが、スケールアウトを考慮していないアプリケーションの場合、改修にそれなりのコストが必要となってしまいます。
このようなときにすぐに始められる手段として、スケールアップ、スケールダウン。
Azure REST APIでインスタンスのスケールアップ・ダウンを制御することは可能だが、事例がほとんどない（ニーズが無い？）ので、メモとして残しておく。


#【自動化事例】

◆Azure VMサイズを計画的にスケールアップしコストの最適化を実現する ［2015年8月］
　～A-AUTO 50とAzure REST AIPを連携させた自動化～
　https://a-auto50.unirita.co.jp/case_study5/
◆関連したブログ記事
　Azureのインスタンスサイズの変更をスケジューリングしインスタンスサイズを最適化する ［2015年6月］
　　http://a-auto50.blogspot.jp/2015/06/azure_23.html


#【非自動化】

◆Azure仮想マシンをスケールアップする［2015年6月］
　http://statemachine.hatenablog.com/entry/2014/03/05/090513
世界一わかりやすい Illustrator 操作とデザインの教科書


この前に購入した「世界一わかりやすいPhotoshop 操作とデザインの教科書」がとてもよかったので、それでは Illustrator もと思って購入しました。
これまでかなり分厚い参考書を使用していましたが、分厚いだけにやりたい機能を探すのがかなり大変でしたし、説明がアプリケーションのメニューに沿っているため、実際のワークフローとは違いうまく使いこなせていませんでした。
それに比べると本書は図形とか線とかといったオブジェクト毎に説明がまとめてあるため調べたい機能にもうまくたどり着けます。それほど情報量が多いわけではないのですが、うまく勘どころをついた構成になっているようです。
すでにある程度使いこなしている人には物足りないのかもしれませんが、使いながら習得していこうとしている私には適しているようです。


![IMG_0290.jpg](https://qiita-image-store.s3.amazonaws.com/0/60473/789e443f-db3d-612d-fb79-0c5388d7d973.jpeg "IMG_0290.jpg")
fluentd for WindowsをRuby 2.2で動かす


## 序

以下のアップデート的な記事として書きました。

* [Windowsでfluentdを動かす](http://qiita.com/okahashi117/items/0203badd77c9df564166)
* [fluentd WindowsブランチをRuby 2.1上で動かす](http://qiita.com/okahashi117/items/a0b55ea24a6ef7b6582b)

## 手順

以下に手順を書きますが、絵入りが欲しい方は[Fluentd が Windows を正式サポートしたので動かした](http://sqlazure.jp/r/tool/665/)もあわせてご覧ください。

なお、記載するバージョンは試した当時のものですので、適宜新しいものをお使いください。新しくした結果うまく動かなかった場合はコメント頂ければ記事を更新したいと思います。

### RubyInstaller

まず、[RubyInstaller Downloads](http://rubyinstaller.org/downloads/)からRuby、そしてC拡張ライブラリビルドのためのDevKitをインストールします。

* Ruby 2.2.x (x64)
  * 「Rubyの実行ファイルへ環境変数PATHを設定する」に チェックを入れます。 
* DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe
  * `ruby dk.rb init`
  * config.ymlの編集
  * `ruby dk.rb install`　

※ PATHをセットしたくない場合は、cmd.exeを起動してから`set PATH=%PATH%;C:\Ruby22-x64\bin;C:\Program Files\Git\bin`でもよいです。

### Git

[Download for Windows](http://www.git-scm.com/) から Windows版のGitをダウンロードしてインストールします。
途中「Adjusting your PATH environment」画面で、「Use Git from the Windows Command Prompt」を選択しましょう。

### fluentd v12 for Windows

gemは用意していないので、自分でgemを作成してからインストールを行います。

```dos
git clone https://github.com/fluent/fluentd.git
cd fluentd
gem install bundler
bundle
bundle exec rake build
gem install pkg\fluentd-0.12.25.gem -N
```

これでインストール完了です。

### 実行
設定ファイルを指定して実行しましょう。

```dos
fluentd -c ./fluent.conf
```

## あとがき

先に挙げた記事で書かれているいくつかの問題は修正したつもりですが、他にも何かお気づきの点があればコメントください。

## Ruby 2.3 や Windows 10でのメモ

ちゃんとやってないのでメモ代わり。

* ユーザー名で日本語を使うとうまくいかない。日本語の含まれないパスで操作すること。（一時ファイル置き場にも含まれてはいけないので、TMP環境変数を設定する）
* fluentd v14に必要なcool.io 1.4.4はバイナリgemがない（devkitがあればgem installでビルドされるとおもう）
* Ruby 2.3対応のffi.gemバイナリは未リリース。ただのgem installでは正しく入らないため、`gem uninstall ffi
gem install ffi --platform ruby`する
* Ruby 2.3バイナリ同梱のwin32-api.gemも未リリース。`gem install`だと正しく入らないので、`git clone`して`bundle rake gem:install`が必要
Robolectric を 3.0 にアップデートするときにハマる箇所

## 公式のやることリスト

https://github.com/robolectric/robolectric/wiki/2.4-to-3.0-Upgrade-Guide

公式が Wiki にガイドを用意してくれています。基本的にはこのガイドに従ってアップデートしていきます。

## 足りない部分

しかしアプリケーションによっては足りない部分があり、テストがテストケースとは関係ない部分でバッタバッタと死んでいく事があります。

### 1. targetSdk が 22 で落ちる

現状 Robolectric 3.0 で対応しているのは 21 までです。targetSdkVersion を 22 にしていると、`UnsupportedOperationException`でテストができません。

対応するには、`@Config`アノテーションでバージョンを指定します。

```java

@Config(constants = BuildConfig.class, sdk = 21)
public class SomeTest {}
```

### 2. MultiDex で落ちる

Multidex を使っているプロジェクトでは、`MultidexApplication`を継承した`Application`クラスを用意するか、`MultidexApplication`をそのまま使用するか、どちらかをすることになりますが、`attachBaseContext()`内での`Multidex#install()`はテストからはうまく実行できず例外で落ちます。

テストでは Multidex は関係ないので、例外を吐こうが影響はないですから、例外をキャッチするようにします。サポートライブラリの`MultidexApplication`を使用している場合、そちらのコードを丸パクリして try-catch 句を追記したクラスを自分で用意します。

```java

public class MultidexApplication extends Application {
  @Override
  protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);

    try {  // avoid robolectric error
      MultiDex.install(this);
    } catch (RuntimeException ignored) {
      // ok to ignore exception while testing
    }
  }
}
```

### 3. AndroidManifest やその他のリソースが見つからなくて落ちる

ApplicationId をビルドスクリプトで指定していて、それが実際のパッケージ構成と違う場合に起きるものです。すべてのテストで Resources$NotFoundException が出てきて、謎のリソースを参照しようとして無いと怒られるようなパターンはこれです。

パッケージ名を指定する設定が`@Config`アノテーションにはありますが、そうするとこんどは ResourceLoader が見つからないという理由でテストがクラッシュします。

さくっと解決するならば、以下のような`TestRunner`を用意してしまうことでテストが動くようになります。

```java

public class MyTestRunner extends RobolectricGradleTestRunner {
  public MyTestRunner(Class<?> testClass) throws InitializationError {
    super(testClass);
  }

  @Override
  protected AndroidManifest getAppManifest(Config config) {
    return new AndroidManifest(
        Fs.fileFromPath("../DriveMode/src/main/AndroidManifest.xml"),
        Fs.fileFromPath("../DriveMode/build/intermediates/res/" + BuildConfig.FLAVOR + "/debug"),
        Fs.fileFromPath("../DriveMode/build/intermediates/assets/" + BuildConfig.FLAVOR + "/debug/"));
  }
}

```

すべてのテストで以下のように`@RunWith`を指定すれば完了です。

```java

@Config(constants = BuildConfig.class, sdk = 21)
@RunWith(MyTestRunner.class)
public class SomeTest {}
```

これで、すべてのテストが一律同じ理由でバッタバッタと死んでいく現象は解消されます。
Gradients on UIView



```objectivec
#import <QuartzCore/QuartzCore.h>

CAGradientLayer *gradient = [CAGradientLayer layer];
    gradient.frame = self.view.frame;
    gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithRed:(112/255.0) green:(119/255.0) blue:(126/255.0) alpha:1] CGColor], (id)[[UIColor colorWithRed:(73/255.0) green:(81/255.0) blue:(90/255.0) alpha:1] CGColor], nil];
    [self.view.layer insertSublayer:gradient atIndex:0];

```
connectを使って静的なHTTPサーバーを実装する



## 目標

[connect](https://github.com/senchalabs/connect)を使って静的なファイルを配信するHTTPサーバーを作ります。

## 使うもの

[serve-static](https://github.com/expressjs/serve-static)を使います。
serveStaticはローカルに存在するファイルを返すmiddlewareです。

## 注意事項

昔のconnectは同様のmiddlewareを組み込み（staticプロパティ）で提供していました。
version 3.0以降、組み込みmiddlewareは外部モジュールに分離されました。
2013年頃の技術情報は組み込みモジュールを前提として書かれています、ご注意ください。

## ソースコード

```html:index.html
hello world
```

```js:index.js
const http = require('http')
const connect = require('connect')
const serveStatic = require('serve-static')

const app = connect()
  .use(serveStatic('.')) // 静的ファイルの置き場を指定します。

http.createServer(app).listen(3000)
```

## ライブラリをインストール
```
npm i connect serve-static
```


## サーバーを起動
```
node .
```

## 動作確認
```
curl 'http://localhost:3000'
```

`hello world`が表示されます。

## 詳細なレスポンス
```
curl 'http://localhost:3000/' -v
```
 
```
* * Hostname was NOT found in DNS cache
*   Trying ::1...
* Connected to localhost (::1) port 3000 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.37.1
> Host: localhost:3000
> Accept: */*
>
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: public, max-age=0
< Last-Modified: Wed, 29 Jul 2015 01:12:48 GMT
< ETag: W/"d-14ed75e7280"
< Content-Type: text/html; charset=UTF-8
< Content-Length: 13
< Date: Wed, 29 Jul 2015 01:22:06 GMT
< Connection: keep-alive
<
hello world
* Connection #0 to host localhost left intact
```

HTTPヘッダーをいい感じに設定してくれます。

## 存在しないファイルを要求


```
curl 'http://localhost:3000/a.html -v'
```

404レスポンスを返します。

```
* Hostname was NOT found in DNS cache
*   Trying ::1...
* Connected to localhost (::1) port 3000 (#0)
> GET /a.html HTTP/1.1
> User-Agent: curl/7.37.1
> Host: localhost:3000
> Accept: */*
>
< HTTP/1.1 404 Not Found
< X-Content-Type-Options: nosniff
< Content-Type: text/html; charset=utf-8
< Content-Length: 19
< Date: Wed, 29 Jul 2015 01:21:13 GMT
< Connection: keep-alive
<
Cannot GET /a.html
* Connection #0 to host localhost left intact
```

## 合わせて読みたい
- [Node.jsのHTTPサーバーフレームワーク（connect）を使ってHello Worldを返すHTTPサーバーを実装する](http://qiita.com/ledsun/items/4c9783d30df3170403db)
squarespaceのページでテーブルを作成する方法

みなさん、こんにちは。[株式会社アットウェア](http://http//www.atware.co.jp/)のKEYチームの矢納です。

今回はホームページ作成サイト「[squarespace](http://www.squarespace.com/)」で躓いたテーブルの作成方法を紹介します。

# Markdownでテーブルを書いてみる
書いてみたコードはこちら

    | 8月2日 | 最高気温(℃) | 最低気温(℃) |
    |--------|-------------|-------------|
    | 東京   | 35.1        | 26.3        |
    | 大阪   | 36.4        | 28.1        |

もちろんここでこのコードを書けばこの通りテーブルになります。

| 8月2日 | 最高気温(℃) | 最低気温(℃) |
|--------|-------------|-------------|
| 東京   | 35.1        | 26.3        |
| 大阪   | 36.4        | 28.1        |

実際にこのコードをsquarespaceで作成するページに貼り付けると
![table_not_working.png](https://qiita-image-store.s3.amazonaws.com/0/77947/e695738c-1ff4-c7cf-b5e0-0f175c6191d3.png)
となります。

# Codeブロックを使う
squarespaceのページはMarkdown以外にも直接codeを書くことも可能です。
ですが、色・大きさ・位置変更などを位置からコードを書くのは大変ですので、
[Tables Generator](http://www.tablesgenerator.com/html_tables)というサイトを利用します。
![HTML_Generator.png](https://qiita-image-store.s3.amazonaws.com/0/77947/fa68bc46-7a1d-c4c5-f269-5ca317d2fe93.png)
あとはコピーしたコードを貼り付けるだけで完成です。
[Leetcode] Sliding Window Maximum

Use `deque` to keep a decrease queue. Total run-time of O(n). 

```cpp
class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        typedef pair<int, int> pii;
        deque<pii> dq;
        int n = nums.size();
        vector<int> ans;
        for(int i = 0; i < n; i++) {
            while(!dq.empty() && dq.back().first < nums[i]) dq.pop_back();
            dq.push_back(make_pair(nums[i], i));
            while(dq.front().second <= i - k) dq.pop_front();
            if (i >= k - 1) ans.push_back(dq.front().first);
        }
        return ans;
    }
};
```

**Reference:**
[Sliding Window Minimum Implementations](http://people.cs.uct.ac.za/~ksmith/articles/sliding_window_minimum.html)
[Double ended queue](http://www.cplusplus.com/reference/deque/deque/?kw=deque)
Linux,Windowsのプロキシ設定あれこれ

気づいたら足していく。

## 全体設定
Linuxであれば`HTTP_PROXY`環境変数に設定する。不都合なければ`.bashrc`とかで設定してしまえばあとは楽。Windowsはインターネットオプションで設定する。

```bash
$ export HTTP_PROXY=http://proxyserver:8080
```


## Windows Update
Windows Updateに限らず、WinHTTPを利用したHTTP通信が発生する場合にはこれ。

```bat
rem IEからプロキシ設定を読み込む
> netsh winhttp import proxy source=ie
rem 手書きで設定する
> netsh winhttp set proxy proxy-server="http://proxyserver:8080" bypass-list="http://example.com;local"
```


## yum

```perl:/etc/yum.conf
# Proxy Setting
proxy=http://proxyserver:8080
proxy_username=user
proxy_password=password
```

## apt

## RPM

```bash
$ rpm -ivh --httpproxy http://proxyserver --httpport 8080 ~~
```


## wget

```perl:/etc/wgetrc
# コメントアウトを外して記入
http_proxy = http://proxyserver:8080
https_proxy = http://proxyserver:8080
```

## curl

```perl:$HOME/.curlrc
proxy-user = "user:password"
proxy = "http://proxyserver:8080"
```

もしくは`$ curl -U user:password -x http://proxyserver:8080 -L targeturl`


## Git

`HTTP_PROXY`環境変数を読むようだが、Git用に設定する場合は以下。

```bash
$ git config --global http.proxy http://proxyserver:8080
```


## RubyGems

`HTTP_PROXY`環境変数を読むが、`~/.gemrc`で設定もできる。

```yaml:~/.gemrc
http_proxy: http://proxyserver:8080
```

`gem install`するときにオプションで指定することも可能。

```bash
$ gem install foo -r -p http://proxyserver:8080
```

## pip

```bash
$  pip install foo --proxy=user@proxyserver:port
```

## npm

```bash
$ npm config set proxy http://proxyserver:8080
$ npm config set https-proxy https://proxyserver:8080
```

## golang

`go get`する際。`HTTP_PROXY`が参照される。
MySQL 5.6でmysqld_multi stopが動かない

ubuntuのmysql-community-server 5.6.26のmysqld_multi stopがなんか動かない。

SHUTDOWN権限つけたユーザを作って、

```
> CREATE USER 'XXXXX'@'localhost' IDENTIFIED BY 'YYYYY';
> GRANT SHUTDOWN ON *.* TO 'XXXXX'@'localhost';
```

my.cnfにuserとpasswordを記載する。

```
[mysqld_multi]
user = XXXXX
password = YYYYY
```

でmysqld_multi stopを実行してみるんだが、

```
# mysqld_multi stop
```

停止されない。

ログを見てみると、


```
# cat /usr/share/mysql/mysqld_multi.log

Stopping MySQL servers

Warning: Using a password on the command line interface can be insecure.
/usr/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'XXXXX'@'localhost' (using password: YES)'
mysqld_multi log file version 2.16; run: Mon Aug  3 10:36:34 2015
```

権限エラーになっている。

/usr/bin/mysqld_multiの中身を見てみるとmysql_admin shutdownで停止しているようなので、実行しているコマンドを出力してみると、


```perl
    $com= get_mysqladmin_options($i, @groups);
    $com.= " shutdown";
    $com.= " >> $opt_log 2>&1" if (!$opt_no_log);
    $com.= " &";
    print "$com\n"; ##追記
    system($com);
```

```
# mysqld_multi stop                                                                                                                             
/usr/bin/mysqladmin -u XXXXX -p'*****' --port=3306 --socket=/xxx/mysql/mysqld.sock shutdown >> /usr/share/mysql/mysqld_multi.log 2>&1 &
```

パスワードが`*****`にマスクされている・・・
内部で使ってるmy_print_defaultsのデフォルト動作っぽい。

```
# my_print_defaults --defaults-file=/etc/mysql/my.cnf mysqld_multi                                                                     
--user=XXXXX
--password=*****
```

-sつけるといけるっぽいがmysql_multiのオプションとしては指定できなそう。

```
# my_print_defaults --defaults-file=/etc/mysql/my.cnf mysqld_multi -s
--user=XXXXX
--password=YYYYY
```

このへんのコードいじればいけるんだろうけど、mysql-server-communityは頻繁にアップデートしたり複数バージョン運用したりするからあんま手パッチしたくないなぁ。

```perl
my $com= join ' ', 'my_print_defaults', @defaults_options, $group;
my @defaults = `$com`;
```

というわけでいったんmy.cnfのmysqld_multiエントリは消して、mysqld_multiのオプションとして渡すことにした。

オペレーションで毎回入力はつらいのでaliasに記載。

```
# cat .bash_aliases 
alias mysqld_multi="mysqld_multi --user=XXXXX --password='YYYYY'"
```

うーん、イケてない・・・
[Ruby] 特定の gem に依存している gem の一覧を調べる


とある gem 「が」 依存している gem の一覧を出すのは非常に簡単で、 `gem` コマンド一発で行うことができる。

```
$ gem dependency nokogiri
```

では、逆にとある gem 「に」 依存している gem の一覧を出すのはどうやるのだろうか？

ローカルで調査
--------------

ローカルにあるものであれば同様に `gem` コマンド一発で調べることができる。
`gem dependency` に `--reverse-dependencies` または `-R` を付ければよい。

```
$ gem dependency -R nokogiri
Gem nokogiri-1.6.6.2
  hoe (~> 3.13, development)
  hoe-bundler (>= 1.1, development)
  hoe-debugging (~> 1.2.0, development)
  hoe-gemspec (>= 1.0, development)
  hoe-git (>= 1.4, development)
  mini_portile (~> 0.6.0)
  minitest (~> 2.2.2, development)
  racc (>= 1.4.6, development)
  rake (>= 0.9, development)
  rake-compiler (~> 0.9.2, development)
  rake-compiler-dock (~> 0.3.0, development)
  rdoc (~> 4.0, development)
  rexical (>= 1.0.5, development)
  Used by
    capybara-2.4.4 (nokogiri (>= 1.3.3))
    loofah-2.0.2 (nokogiri (>= 1.5.9))
    mechanize-2.7.3 (nokogiri (~> 1.4))
    rails-dom-testing-1.0.6 (nokogiri (~> 1.6.0))
    roo-2.1.0 (nokogiri (~> 1))
    sequel-4.24.0 (nokogiri (>= 0, development))
    sprockets-3.2.0 (nokogiri (~> 1.3, development))
    webrobots-0.1.1 (nokogiri (>= 1.4.4, development))
    xpath-2.0.0 (nokogiri (~> 1.3))
```

このうち「Used by」以下が指定の gem に依存しているもののようだ。

リモートで調査
--------------

上記のコマンドではインストール済みのものしか調べられない。
では、インストールしていない、 Rubygems.org 上にアップロードされている全 gem を対象に調査するにはどうすればよいのだろうか？

### 誤ったやり方

コマンドで引けるのだから `--remote` (または `-r`)オプションを付ければ行けるのでは？と思ってやってみた。

```
$ gem dependency -R -r nokogiri
ERROR:  Only reverse dependencies for local gems are supported.
```

どうやら `gem dependency -R` はローカルしか対象とすることができないようだ。

### Rubygems.org APIを直接叩いてみる

何か方法はないものか...、とおもむろに Rubygems.org のAPIリファレンスを見に行ってみると、このようなものを見つけた。

[RubyGems.org API - RubyGems Guides](http://guides.rubygems.org/rubygems-org-api/#get---apiv1gemsgem-namereversedependenciesjson)

    GET - /api/v1/gems/[GEM NAME]/reverse_dependencies.json
    
    List gems that depends on specified gem. This is all the dependents of particular gem. Returns an array that includes names of dependent gems.

これを使えば行けるのではないか？と思い早速やってみた。

```
$ curl https://rubygems.org/api/v1/gems/nokogiri/reverse_dependencies.json
(長いので略)
```

どうやらこれで正解のようだ。
JSONの配列で返ってくるので、この結果をパースして利用するとよい。
残念ながら依存しているバージョンは分からないが、そこは更に調査する他なさそうだ。

### `gems` gem を利用してRuby上から調べる

このAPI周りを調べていて初めて知ったのだが、 Rubygems.org APIラッパーの `gems` という gem があるらしい。
上記APIが Rubygems.org に取り込まれたのが 2013/03/25 のようだが([このPR](https://github.com/rubygems/rubygems.org/pull/540)参照)、同PR内に「`gems` gemにも追加しておいてくれよ！」的なコメントがあった。
`gem install gems` をした後に下記のようなコードを書けばJSONをパースした後の配列を返してくれるようだ。

```ruby
require 'gems'

Gems.reverse_dependencies 'nokogiri' #=> ["carmens", "jekyll-toc", ...]
```

返り値はAPIを直接叩くのと当然変わらないし、同APIはAPIキーが必要なものでもないため、依存を調べるためだけに `gems` gem は導入しなくてもよいかな...と思わないでもない。
Rubygems.org には他にもAPIがあるので、色々叩いてみるのも面白いかもしれない。
で、オライリー本を全冊購入するといくらなのか

[オライリー・ジャパンの書籍380冊、全部買った](http://blog.animereview.jp/post/125664833521/oreilly)
という記事が話題になってましたが、合計金額がなかったので調べました。

```rb:oreilly.rb
require 'open-uri'
require 'nokogiri'

open("http://www.oreilly.co.jp/catalog/") do |f|
  doc = Nokogiri::HTML.parse f.read
  prices = doc.css(".price").map{|p| p.text.tr(?,, '').to_i }
  amount = prices.inject(:+).to_s.gsub(/(\d)(?=(\d{3})+(?!\d))/, '\1,')

  puts "合計 #{prices.size}冊 #{amount}円"
end
```

```text:結果
合計 419冊 1,442,556円
```

全巻一括購入で割引とかあるんでしょうか。分かりません。

てか、ブログの記事より40冊ほど多いですね。
ざっくり一冊平均3442円なので380冊で130万8318円ぐらいでしょうか。
cakePHPとFormタグが多すぎる場合のエラーがひどい

cakePHP使っているとエラーを隠す動きがデフォルトになっているためけっこう見落とすエラーが多いです。
今回ハマったのが、旧サーバーから新サーバーへの移行。
その際にphpも5.2から5.4にあげました。

このPHPのバージョンアップにおいての見落としがありました。

システムが動かなくなったのですが、それがtexboxやradio,checkbox,buttonがたくさん1画面内にあるページでの動作です。

PHPのドキュメントにあります。
> **max_input_vars integer**
> 入力変数 を最大で何個まで受け付けるかを指定します (この制限は、スーパーグローバル $_GET、$_POST そして $_COOKIE にそれぞれ個別に適用されます)。 このディレクティブを使うと、ハッシュの衝突を悪用したサービス不能攻撃を受ける可能性を軽減できます。 このディレクティブで設定した数を超える入力変数があった場合は E_WARNING が発生し、 それ以降の入力変数はリクエストから削除されます。

これが5.3.9以降でデフォルト1000という数字がセットされるようになりました。
知らずにphpのバージョンをアップした場合は、上限が勝手に設定されます。

つまり、INPUT等のFORMで渡される内容が上限が1000で残りはカットされるということです。勝手に。

まあ、設定されていてもドキュメントにはWARNINGが表示されるのですが、cakePHPでは、基本は表示しない。なのでまったく意図しない動きとなってしまっていた。

古くからPHPを使っていて久々に使ったわけですが、
cakePHPだからというこではないのですが、きっちりtry catchを入れて制御しておけば、いかなるwarningにも対応できるんじゃないかと。
PerlのArchive::ZipやArchive::Tarを試すワンライナー

# 概要

Perlの`Archive::Zip`や`Archive::Tar`モジュールを試用するためのワンライナー。これらのモジュールの動作や出力確認をしたい時用にメモしてます。

# 詳細

## Archive::Zip

### zipファイルの作成

`./data`ディレクトリを圧縮した`temp.zip`ファイルを作成する。

    perl -MArchive::Zip -e "$zip=Archive::Zip->new; $zip->addTree('./data','data');$zip->writeToFileNamed('temp.zip')"

メソッド`addTree`に渡している第一引数`./data`は圧縮対象ディレクトリ。第二引数`data`は、圧縮ファイル内でのこのディレクトリの名称。同じにしておけば混乱が少なそう。あえて変えることもできる（日次バックアップとして"元のディレクトリ名＋年月日"とするなど）。

### zipファイルの内容確認

`temp.zip`ファイルの内容を表示する。

    perl -MArchive::Zip -e "$zip=Archive::Zip->new('./temp.zip');print qq($_\n) foreach ($zip->memberNames)"

### zipファイルの展開

`temp.zip`ファイルを展開する。

    perl -MArchive::Zip -e "$zip=Archive::Zip->new('./temp.zip'; $zip->extractTree();"

展開対象を指定したいときは`extractMember`メソッド。

    perl -MArchive::Zip -e "$zip=Archive::Zip->new('./temp.zip');$zip->extractMember($_) foreach ($zip->memberNames)"

## Archive::Tar

### tarファイルの作成

`./temp.txt`ファイルを格納した`temp.tar`ファイルを作成する。`add_files`には、一度に複数のファイルを指定できる。

    perl -MArchive::Tar -e "$tar=Archive::Tar->new; $tar->add_files('temp.txt'); $tar->write('temp.tar')"

`./temp.txt`ディレクトリを格納、gzip圧縮した`temp.tgz`ファイルを作成する。

    perl -MArchive::Tar -e "$tar=Archive::Tar->new; $tar->add_files('temp.txt'); $tar->write('temp.tgz', COMPRESS_GZIP )"

オブジェクトを生成せずクラスメソッドを使うことも可能。第三引数以降で、複数のファイルを指定できる。

    perl -MArchive::Tar -e "Archive::Tar->create_archive('temp.tgz', COMPRESS_GZIP, 'temp.txt');
jQueryの formに対してのsubmitが効かない場合の対処方法　メモ

javascriptで、submitという要素を用意してしまうとsubmitがその要素を参照してしまうということですね。
以下のリンク先で書いてありました。納得です。
[javascriptでsubmitできない？](http://www.deftrash.com/blog/archives/2008/02/javascriptsubmit.html)


javascriptでそうであれば、もちろんjQueryでも同様ということですね。

input name=のところです。


対処方法としては、
mysubmitやsubmit1、sendでもsubmitを使わないこと。それだけです。
GMOクラウド VPSサーバーにconcrete5 5.7.4.2をインストールする際のエラー回避

GMOクラウド VPSサーバーにconcrete5 5.7.4.2をインストールする際にセッションハンドラに関するエラーが発生した場合は、下記のようにconcrete.phpを作成してから、インストールを実施するとエラーが回避される。

#セッションハンドラをデータベースに変更する方法

下記を記載したconcrete.phpを作成し、application/config/の下へ配置する。

<?php

return array(
    'session' => array(
        'handler' => 'database'
    )
);
c++ builder XE4, 10.2 Tokyo > TeeChart > 凡例を上部にする > Chart1->Legend->Alignment = laTop;

```txt:動作環境
C++ builder XE4
    TeeChart Lite v2013.08.130414
RAD Studio 10.2 Tokyo Update 2 (追記 2018/01/10)
    TeeChart v2016.17.160129 32bit VCL
```

グラフの凡例を上部にする設定。

```cpp
Chart1->Legend->Alignment = laTop;
```

以下が参考になった。
http://nary.cocolog-nifty.com/blog/2009/11/teechart-3aa2.html