OmniAICreator/Qiita-1.07M huggingface dataset:
Macにhomebrewを使ってmongodbをインストール

homebrewはインストールしておき、`brew` が通るようにしておいて下さい。

```brew install mongodb
```
> ==> Downloading
https://downloads.sf.net/project/machomebrew/Bottles/mongodb-2.6.1.mavericks.bottle.tar.gz
######################################################################## 100.0%
==> Pouring mongodb-2.6.1.mavericks.bottle.tar.gz
==> Caveats
To have launchd start mongodb at login:
    ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents
Then to load mongodb now:
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
Or, if you don't want/need launchctl, you can just run:
    mongod --config /usr/local/etc/mongod.conf
==> Summary
?  /usr/local/Cellar/mongodb/2.6.1: 17 files, 317M

* ログイン時に起動しておきたい場合

```ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents
```

* mongodb 起動

```launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
```

* launchctlを使わずに 起動

```mongod --config /usr/local/etc/mongod.conf
```

* 起動確認用接続

`mongo`

> MongoDB shell version: 2.6.1
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
	http://docs.mongodb.org/
Questions? Try the support group
	http://groups.google.com/group/mongodb-user
バックプロパゲーション

http://d.hatena.ne.jp/nowokay/20080701/1214915017

http://www.sist.ac.jp/~kanakubo/research/neuro/backpropagation.html

http://www-ailab.elcom.nitech.ac.jp/lecture/neuro/bp2.html

http://www.cs.ce.nihon-u.ac.jp/~matsui/research/bp/node5.html 

http://www.neuro.sfc.keio.ac.jp/~masato/study/SVM/BP.htm
自分用SPDY

#iOS 8 Safari supports SPDY

http://caniuse.com/spdy

#SPDYやっとiOS8対応…SPDYについて改めて再確認

現在SPDY使ってるサイト => FB、Twitter、Google、Medium etc..

PC: chrome, firefoxで普通に対応
Mobile: Android 3.0+
Will..
=> OSX safari
=> iOS 8 safari, Chrome?

実は、もうみんなSPDY普通に使ってる。
対応してないメジャーブラウザはiOSだけなので、AndroidとPCからは普通にSPDYです

# 60%が既に対応済み（ユーザベース）

現在60%+のユーザベース(Can I Use?より。Androidが大きい)
1年以内には 90%+ のユーザベースがSPDY対応になる計算

# めっちゃ速い

ベンチのせる予定。ググった方が早いかも。

# ちなみに、

- Webだと互換性の兼ね合いでhttps上でしかSPDY使えない
- 最新のnginxは標準でspdy対応
- CDNでは、CloudFrontが対応無し。MaxCDNが対応してる
- MaxCDNでドメインをSSLで使いたいなら、証明書登録費用が必要。$39/mo（共有なら必要なし）
- SPDYでは、例えばyahoo.co.jpにて、yimg.jpを参照するよりimg.yahoo.co.jpのほうが速い。これをするにはワイルドカードSSLが必要。
- SPDYだとドメインシャーディングすると遅くなる（DNS lookupが余分に必要なので…）
- ただし、サーバ毎の同時リクエスト数の制限の問題がある？（調査必要。SPDYでもあったと思う…50とか100とかの画像を配信するなら、ドメインシャーディングが必要。）
- SPDYだと色んなHackが不必要になる（！）並列リクエストが良くなったので、asset concatも逆効果になってくる…かも？
- 例えば：server side pushを用いると、各種assetを.htmlのレスポンスの中に埋め込む（ような）ことが出来る。inline化不要
- が、基本的にはチューニングしたほうがやっぱり速い
- リクエストも数を減らした方がサーバの負荷的にもいいし、クライアントも電池がしんどいかもしれない。
- 結論：今まで通り普通にチューニングはしたほうがいい。ただし、SPDYで逆効果になるチューニングについては知っておくべき
 
- あと、Appだと、昔のHTTP通信を考えなくて良いのでhttpで使える。というかCocoaSPDYはHTTP/1.1と共存出来ません。まあ特に問題になることもない。(see iOS:CocoaSPDY, Android:OkHTTP)

# Webパフォーマンスのビジネスへのインパクト

- ページの読込みに3秒かかれば、40%のユーザが離脱する。
- Amazonによると、ページの読込み時間が100 ms増えると、売上が1%落ちる。
- Googleは、検索結果の表示数を増やして、ページの読込み時間が0.5秒増加すると、売上とトラフィックが20%低下した。
- Akamaiによると、75%のオンライン購入者は、フリーズ / クラッシュ / ページ読込みが長過ぎる / 購入フローが複雑という経験をするとそのサイトでは購入しない。
- Googleでは、Google Mapsのサイズを100KBから80KBに削減したら、ユーザの再訪率が改善した。
- Etsyではモバイルページに160KBの画像を追加すると、12%の端末で直帰率が増えてしまった。
- DoubleClickでは、クライアント側でのリダイレクトを1箇所取り止めると、モバイル端末でのCTRが12%改善した。
- Amazonが画像ファイルを圧縮JPEGファイルに変更すると、モバイル端末でのバッテリー消費が20%減り、Facebookの場合は30%削減できるという研究結果もある。

from http://wazanova.jp/items/996

# 結論？

早く表示されることは正義

- 追記: MaxCDNはお手軽にSPDYが使えた
Ubuntuの無線LANが遅い時の対処


##背景
1. BeagleBoneBlack に Ubuntu14.04 をインストールした。
2. BeagleBoneBlack に USBタイプの無線LAN ([WLI-UC-GNM2] (http://buffalo.jp/product/wireless-lan/client/wli-uc-gnm2/ "WLI-UC-GNM2")) を増設することで、ワイヤレス接続を可能にした。
3. しかし有線LAN接続時と比較し、ラグが激しいため、ここでは解決策を述べる。

##手順

```iwconfig``` コマンドを用いて無線LANインタフェースの確認

```
% iwconfig
wlan0     IEEE ********  ESSID:"********"  
          Mode:Managed  Frequency:2.462 GHz  Access Point: 10:9A:DD:8C:D2:AF   
          Bit Rate=54 Mb/s   Tx-Power=20 dBm   
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality=70/70  Signal level=-19 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:35   Missed beacon:0

lo        no wireless extensions.

eth0      no wireless extensions.

usb0      no wireless extensions.

```


下記のコマンドをターミナル上で実行することでパワーマネジメント機能がOFFになり、無線LAN経由でSSH接続した時のラグがなくなった。

```
$ sbin/iwconfig wlan0 power off
```


## OS起動時にコマンドやプログラムを自動実行させる
次にパワーマネジメント機能を OFF にするスクリプトを OS 起動時に実行するように設定する。
ここでは ```/etc/rc.local``` にスクリプトを追加する。

```
$ emacs -nw /etc/rc.local
```
```
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel. 
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# wlan0 power management OFF
sbin/iwconfig wlan0 power off

# exit 0
```


※ この問題は OS(Ubuntu)　のパワーマネジメントにより、無線LANに適切な電力を供給できていないことが原因であるため、BeagleBone 固有の問題ではないことに注意していただきたい。
$_SESSIONを使うクラスのテストについて

クラス内部で```$_SESSION```を使う場合はよくある。ただし、```$_SESSION```をそのまま使うとPHPUnitなどのテストの時に面倒くさいという問題があって、何か良い解決法はないかと調べているところ。

正しい方法は、セッションをラップするクラスを作って、それをインジェクトする方法。テストの場合は、別のモックをインジェクトする。

この方法が正しいのだろうけど、ちょっとしたクラスを作る場合にもっと簡単な方法がないのか考えて、こんな方法を使ってみることにした。

```php
class NeedTest {
  protected $session;
  function __construct(&$session=null) {
    if( $session ) {
      $this->session = &$session;
    } else {
      $this->session = &$_SESSION;
    }
  }
}
```

「セッションをラップしたクラス」の代わりに配列をインジェクトしているだけだけど。

普通に使う場合は、普通にコンストラクトすると、普通にセッションを使う。

```php
session_start();
$prod = new NeedTest();
```

テストでは配列を渡してあげる。

```php
class NeedTestTest extends PHPUnit... {
  var $need;
  var $session=[];  
  function setup() {
    $this->need = new NeedTest( $this->session );
  }
}
```

すると、セッションとして受け渡しがテストのコードから自由に可能になるので便利。テストするぶんには十分だった。

メリットはコードが簡単で依存するオブジェクトがないところか。

今どき参照使うのかというのが最初の疑問で、PHPの正しい構文だけれど、何かPHP4時代の香りがするのがマイナス。

最大の欠点は、オブジェクトをシリアライズして保存するような場合。オブジェクトをアンシリアライズすると、```$this->session```の参照が壊れてしまう。こうなると、最新のセッションの値を受け取ることは出来ないし、また書き込んでもセッションに反映されない。
`adb devices`で出てくるデバイスが`no permissions`

`adb devices`で出てくるデバイスが`no permissions`

#こういう状態

```bash
$ adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached 
????????????	no permissions
```

#対処
1. `adb kill-server`する
2. `sudo adb devices`する
3. ｲｪｰｲ

`sudo adb`なのが重要。

#注意
`sudo adb`で`command not found`とか言われる事もある。
その時は`adb`の場所をきちんと指定して実行する。
`adb`のパスがわからない場合には`hash`コマンドが便利

```bash
$ hash
hits	command
   2	/home/hoge/android-sdk-linux/platform-tools/adb
```
AWS SQS + Node.jsサンプル


キューからメッセージを取り出すサンプル

    AWS = require "aws-sdk"
    AWS.config.loadFromPath "aws.json"

    sqs = new AWS.SQS().client

    queueUrl = "ここにキューのURL"

    options =
      QueueUrl: queueUrl
      MaxNumberOfMessages: 10
      VisibilityTimeout: 60
      WaitTimeSeconds: 20

    sqs.receiveMessage options, (err, data) =>

      console.log "### ERROR!", err if err

      if data?.Messages?.length > 0
        for message, i in data.Messages
          console.log "### メッセージ:#{i}: ###"
          console.log "Body:", message.Body

          params =
            QueueUrl: queueUrl
            ReceiptHandle: message.ReceiptHandle

          sqs.deleteMessage params, (err, data) =>
            console.log "### メッセージを削除 ###"
            console.log "ERROR!:", err if err

      else
        console.log "### メッセージがありません ###"
Live2D メモ



# 参考ブログ

* [Unityのlive2D入門（１）環境構築｜とあるプログラマーのブログ](http://ameblo.jp/chicktack123/entry-11752248273.html)

* [Unityのlive2D入門（２）モデリング｜とあるプログラマーのブログ](http://ameblo.jp/chicktack123/entry-11752324533.html)

* [Unityのlive2D入門（３）Unity導入｜とあるプログラマーのブログ](http://ameblo.jp/chicktack123/entry-11752448923.html)


# 公式

* [Unity を使ったモデルデータの制御 - Live2D Cubism Documents](http://sites.cybernoids.jp/cubism/home/special/20140327/session2)

## 動画

* [セミナー動画 - Live2D Cubism Documents](http://sites.cybernoids.jp/cubism/video/seminar_video)

* [チュートリアル動画 - Live2D Cubism Documents](http://sites.cybernoids.jp/cubism/video/tutorial)


## SDK

* [Cubism SDK - Live2D Cubism Documents](http://sites.cybernoids.jp/cubism/sdk_tutorial)

* [Unity - Live2D Cubism Documents](http://sites.cybernoids.jp/cubism/sdk_tutorial/platform-setting/unity)

* [Live2D C++ APIリファレンス](http://doc.live2d.com/api/core/cpp1.0j/)

## その他

* [モデルの切り替え方式の検討 - Live2D Cubism Documents](http://sites.cybernoids.jp/cubism/sdk_tutorial/live2d_library/load_to_display/model_change)

* [モデルテクスチャ番号について](http://sites.cybernoids.jp/cubism/sdk_tutorial/live2d_library/load_to_display/display_model/texture)

* [モデルのローカル座標について](http://sites.cybernoids.jp/cubism/sdk_tutorial/live2d_library/load_to_display/display_model/local)
カスタムディレクティブでAPIから受け取ったデータを表示する


APIから受け取ったデータを表示するカスタムディレクティブを作る場合、`$watch`でscopeのプロパティを監視し再描画を行うといった実装が必要になる。

```html:index.html
<div ng-controller="MyController">
  <my-directive data="users"></my-directive>
</div>
```

- `my-directive`というディレクティブを作る。表示したいデータを参照するscopeのプロパティを`data`属性に指定する。

```coffeescript:my_controller.coffee
window.ngApp.controller "MyController" ["$scope", "User", ($scope, User) ->
  $scope.users = User.query()
]
```

- APIから受け取ったデータを`users`というプロパティで参照する。このとき、APIからデータを受け取るのを待たずに空の参照が渡される。非同期に返ってきたデータはこの参照に追加される。

```coffeescript:my_directive.coffee
window.ngApp.directive "myDirective", ->
  restrict: "E"
  link: (scope, elements, attrs) ->
    render = (data) ->
      # 描画処理
    scope.$watch(attrs.data, ((newData, oldData) -> render(newData)), true)
```

- `scope.$watch`でscopeのプロパティや、scopeのコンテキストで評価した式の結果を監視する。
  - 第1引数に監視対象を指定する。`attrs.data`にはDOMで指定した`data`属性の値が入るので、今回は`"users"`となる。
  - 第2引数に監視対象が変更されたときに実行する処理を渡す。今回は描画処理を渡す。
  - 第3引数にtrueを指定すると、監視対象の値が更新されたときに処理が実行されるようになる。監視対象である`users`はまず空の参照が渡されその後APIから受け取ったデータをそこに追加する（参照は変更されない）ので、ここでtrueを指定する必要がある。ここを省略すると参照が更新されたときのみ処理が行われる。
Drupal7のクリーンURLを有効にするためのapache設定

Webサイト制作はもっぱらDrupalで作ってるsutekicut。
海外ではWordPressと並んで有名なCMS(最近はCMSというよりほとんどWebフレームワーク化してる)
最初は難しいけど、なれればかなり細かいカスタマイズがけっこう簡単にできるのでとてもよい。

Drupal初心者のときに
仮想サーバーをたてて、Drupal7をインストールしようとしたときのメモ。
※自分の勉強と将来迷われた方のためにメモを書いています。
まだまだ経験が浅く理解が足りない部分、間違っている部分はあると思いますが、そんなときはぜひ容赦のないツッコミを！(ドMなのでｗ)

>ハード構成
>Machine：Windows　Hyper-V
>OS：CentOS6
>Server：httpd2.2、PHP5.3、MySQL5.5

##クリーンURLが設定できない・・・

**クリーンURLとは？？**
DrupalにはクリーンURL機能が搭載されている。
クリーンURLとは、URLに記載されるGETパラメータを見かけの上で整形する。
※Drupal内部では、きちんとGETパラメータ付きのURLとして解釈される。

＜具体例＞
■内部的パス(Drupalが解釈するURL)
http://hoge.com/?q=node/83(←GETパラメータ)

■クリーンURL(ブラウザ上で表示されるURL)
http://hoge.com/node/83


環境構築設定画面で設定しようとしても、グレーアウトした状態で有効にできない！

##Apacheの設定をちゃんと書かねば・・・
クリーンURLの書き換え処理はDrupal内部の.htaccessで行うみたい。
=>ということは.htaccessの使用を許可する処理を書けばいいわけだな。

なんでApacheの設定でDirectoryディレクティブAllowOverride ALLをちゃんと記載する。

```lang:httpd.conf
<Directory "/var/www/drupal-7.15">
  AllowOverride All
</Directory>
```
・AllowOverrideは.htaccessによる制限を許可する
・`<Directory>`ディレクティブは中に書いた命令の適用範囲をサーバー内のディレクトリで指定する。
※`<Location>`ディレクティブもあって、こちらはURLで適用範囲を決める。
もし、DrupalのDocumentRootが/var/www/drupalだった場合。


```lang:httpd.conf
<VirtualHost *:80>
  DocumentRoot /var/www/drupal
  ServerName drupal-codeip.com
  ##こいつらは同じ適用範囲になる

  #サーバー内では/var/www/drupalでDocumentRootにしたので→http://drupal-codeip.com/以下
  <Directory "/var/www/drupal">
  </Directory>

  <Location "/">#(URL上の適用範囲→http://drupal-codeip.com/以下)
  </Location>
</VirtualHost>
```

これでクリーンURLが設定できるようになった！
svn:２つのリポジトリを統合する


リポジトリA から svnadnim dump。
※svndumpfilterを使うときは--drop-empty-revs --renumber-revsオプション忘れずに。
忘れると、「単に番号が飛ばないようにするための空のリビジョンです」という空白のリビジョンができる。みっともない。

リポジトリB に svnadmin load。
rspec3対応した時に使った正規表現メモ

rspec 2.14.1 から rspec 3.0.0 に対応したときに正規表現で一括で置換して大体何とかなった部分のメモ

下記以外では、be_true -> be_truthy, be_false -> be_falseyとas_null_objectを削除するくらいしかしてないので割愛

## stubの置き換え

### before
```rb
target.stub(:method).and_return(result)
```

### after 
```rb
allow(target).to receive(:method).and_return(result)
```

### 置換正規表現
`^(\s*)(.*)\.stub(.*)` =>`$1allow($2).to receive$3`

## should_receive, should_not_receiveの置き換え

### before
```rb
target.should_receive(:method).and_return(result)
target.should_not_receive(:method)
```

### after 
```rb
expect(target).to receive(:method).and_return(result)
expect(target).not_to receive(:method)
```

### 置換正規表現
`^(\s*)(.*)\.should_receive(.*)` => `$1expect($2).to receive$3`
`^(\s*)(.*)\.should_not_receive(.*)` => `$1expect($2).not_to receive$3`

## should, should_notの置き換え

### before
```rb
target.should == expected
target.should_not == not_expected
target.should be_true
target.should_not be_nil
```

### after 
```rb
expect(target).to eq(expected)
expect(target).not_to eq(expected)
expect(target).to be_true
expect(target).to be_nil
```

### 置換正規表現
`^(\s*)(.*)\.should\s==\s(.*)` => `$1expect($2).to eq($3)`
`^(\s*)(.*)\.should_not\s==\s(.*)` => `$1expect($2).not_to eq($3)`
`^(\s*)(.*)\.should\s(.*)` =>  `$1expect($2).to $3`
`^(\s*)(.*)\.should_not\s==\s(.*)` => `$1expect($2).not_to eq($3)`


## えーっと。。。。。

### before
```rb
target.is_a?(Array).should be_true
```

### after 
```rb
expect(target).to be_a(Array)
```

### 置換正規表現
`^(\s*)(.*)\.is_a\?\((.*)\).should be_true` =>  `$1expect($2).to be_a($3)`


# 追記
こんな感じでやったよーと伝えたら、後輩に「ご存知かも知れませんが」と教えてもらった。
[Transpec](http://yujinakayama.me/transpec/)

でもまあ、変なコードあったり、これテストになってないじゃん的なコードがあったりで
見直すいい機会ではあったので、手動でやるのもいいと思う。
VMごとにいちいち環境変数HOMEを GUI で設定するのが面倒なので

環境変数のほとんどは nyaos の設定ファイル(%HOME%\_nya) に定義しているが、基準となる HOME だけはマイコンピュータのプロパティー経由で設定してやらなくてはいけないのは面倒。そこでHOME を設定する VBScript を用意した。

```setHome.vbs
Set argv=WScript.Arguments

Set shell=CreateObject("WScript.Shell")
Set userEnv=shell.Environment("User")
if argv.Count < 1 then
    WScript.Echo("Current HOME=" & userEnv.Item("HOME"))
Else
    If Len(argv(0)) > 0 then
        userEnv.Item("HOME") = argv(0)
    Else
        userEnv.Remove("HOME")
    End If
End If
```

* `cscript setHome.vbs` で現在の内容を表示。
* `cscript setHome.vbs 新しい値` で環境変数の初期値を更新します。

----

* 2014.08.23(修正)""を引数として渡せば、%HOME%を削除できるようにした。
Emacs HEADのビルドを日課にしてしまう

自分を含む、Emacsの先端ビルド病の人向け。
（記事を書いている現在は、24.4.50.1, commit d3ff683）

## 事前準備

autogen, automake, autoconf が必要なので、 Homebrew でインストールしちゃう。

```shell-session:
$ brew install autogen automake autoconf
```

## リポジトリと git clone
savannah.gnu.org にリポジトリがあるので、今回はそこから。
任意の場所で、

```shell-session:
$ git clone http://git.savannah.gnu.org/r/emacs.git
```

と、まずは引っ張ってくる。

## ビルド

Make の ジョブ数は環境に合わせて。

```shell-session:
$ cd emacs
$ ./autogen.sh
$ CC=clang ./configure --with-ns --without-x
$ make clean
$ CC=clang make -j2 bootstrap
$ CC=clang make -j2 install
```

で、成功すると nextstep/Emacs.app が作成される。
失敗した場合は、エラーをちゃんと見るなり、少し前のコミットに戻ってみるなり頑張る。

あとは、 /Applications か ~/Applications に突っ込む。
（[Alfred (AppStore)](https://itunes.apple.com/jp/app/alfred/id405843582)を使っているので...）

```shell-session:
$ cd nextstep
$ mv Emacs.app /Applications/Emacs-xxx.app
```

xxx の部分はバージョン番号なりHEADなり、お好みで。

漢は、直接 ```open nextstep/Emacs.app``` でも可。

## 日課にする準備

[zawでzshを便利に使う](http://qiita.com/scalper/items/4728afaac9962bf91bfa) を見て、zsh を便利にしておく。

alias にビルドコマンド一式を登録しておく

```zsh:.zshrc
alias emacs_build='./autogen.sh;CC=clang ./configure --with-ns --without-x;make clean;CC=clang make -j2 bootstrap;CC=clang make -j2 install'
```

## 一日の始まり

- ターミナル起動（[iTerm2 (公式)](http://www.iterm2.com/)がオススメ）
- ```Meta-d emacs``` で zaw の候補から emacs の作業ディレクトリに移動
- ```git pull```
- ```build_emacs```
- エラーが無ければ nextstep/Emacs.app を移動
  - 漢は ```open nextstep/Emacs.app```

これで、先端ビルド病の人も、気持ちよく一日を始められる。
即売会サービスを作ろう１１(ドラッグでスクロールできるようにする)



##ユーザー特定処理の変更

サーバ側でユーザーを区別するIDをHTTPヘッダに入れていたのですが
挙動を確認するときに手間なのでURLパラメータとしてつけるようにしました。

https://freemarket-app.appspot.com/user/api/event/hall?clientid=2ac9df48-f264-406a-b231-aaf4b30edb0c&authtoken=8bebcd4b8afd30dba4b5d3839a6ead62

これならブラウザでわかりますね！
JSONのプレビューは JSONView(https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc) が便利です。




##スクロール

フィールドマップを一つのEntityにぶら下げるようにして、
このEntityを動かくことでスクロールを実現しています。

また小数点以下のスクロールをしてしまうと、バイリニア補完独特のモアレがでてしまったので
整数単位でスクロールするようにしています。

```Java

class TouchListener  implements IOnSceneTouchListener {
        
	float startX; 
	float startY;

 	float oldX;
	float oldY;

	@Override
	public boolean onSceneTouchEvent(Scene scene, TouchEvent event) {

		float x = event.getX();
		float y = event.getY();

		if( event.isActionDown() ){
			startX = x;
			startY = y;
		}

		if( event.isActionMove() ){
			float deltaX = x - oldX;
			float deltaY = y - oldY;

			float newX = fieldRoot.getX() + deltaX;
			float newY = fieldRoot.getY() + deltaY;

			// 整数単位の移動にすることで、床と床の隙間に発生するモアレをなくす
			newX = (int)newX;
			newY = (int)newY;

			fieldRoot.setPosition(newX, newY);
		}

		oldX = x;
		oldY = y;

		return false;
	}
}

```

こうですね。

![screen.png](https://qiita-image-store.s3.amazonaws.com/0/2029/8d547e58-8b0e-81be-0c43-48cdeb7af9de.png "screen.png")

綺麗になりました。


## lint編集

apkを作るときコンパイルエラーができなくなったのですが、ぐぐったらlintを編集することで対応できるそうです。
http://www.andengine.org/forums/gles2/new-lint-error-after-updating-the-sdk-to-latest-version-t15946.html



## まとめ

ということでスクロールができるようになって、なんとなくできてる感じしてきたので
記念にapkを作成。http://bit.ly/1kPVaAi
ソースはこちら https://github.com/nagai/freemarket/tree/qiita11


次回は机と壁を配置してみます。
ログへと動的に行数やメソッド名、クラス名を出力して、どこのログなのか一瞬でわかるようにする

ログへと動的に行数やメソッド名やクラス名を出力させてみました。

コードは次のようになります：


```java
new Throwable().printStackTrace(System.out);
```

この行のスタックトレースを出力させられます。
どういう経路でこの行まで来たかがわかるので便利です。

もしくは、


```java:LogTest.Java
package test;

public class LogTest {
	public static void main(String[] args) {
		StackTraceElement throwableStackTraceElement = new Throwable().getStackTrace()[0];
		System.out.println(throwableStackTraceElement.getClassName() + "#" + throwableStackTraceElement.getMethodName() + "(" + throwableStackTraceElement.getLineNumber() + ")");
	}
}
```

これを実行すると

> test.LogTest#main(5)

と、
クラスの完全修飾名#メソッド名(行数)というログを出力させることができます。


タイプするのは面倒ですが、Eclipseを使っているなら、
スニペットに登録すれば一瞬でコードに挿入することができます。

リファクタでメソッド名が変わったり、行数がずれたりしても、
動的にそれらが挿し換わるので、便利ですよ
WindowServerがCPU喰いまくる問題の対処療法

> うーん、ここ数日MacbookAirが超重くて仕事にならん…。WindowServerっていうプロセスがCPUを20-80%くらいずっと使ってるんだよな、でもググっても困ってる人は見つかっても解決策が見つからんのよね。

と困っていたのだが…。

> とりあえず、ログアウト（スクリーンロックじゃなくて）か、OS自体の再起動をするとWindowServerも再起動されて半日くらいは安定する。重くなったらまたログアウト＆ログインで凌ぐ…。ちなみにアクティビティモニタからWindowServer殺すと勝手にログアウトするので結果は同じぽ。

ということで __身も蓋もない対処__ で屁の役程度にしかならないけど、作業再開できるようになったので一応メモ。


# 思い当たる節

先週OSX10.10(Yosemite)βに上げてしまったというのが一番ありそうな原因。だがググってると昔からある症状っぽいしOSアップデートは関係なさそうな雰囲気でもある。

まだ原因分からんのが一番気持ち悪いなぁ。
Middlemanテンプレート中でurlエンコード

これだと動くっぽいんだけど、激しくタイプ数が多い。。

```erb
<%= ERB::Util.u 'http://example.com/' %>
http%3A%2F%2Fexample.com%2F
```

config.rbでカスタム定義ヘルパにしておけば、単に`u`と短く書けるようになる。

```rb:config.rb
# ↓を追記
helpers do
  def u(text)
    ERB::Util.u(text)
  end
end
# ...
```

```erb
<%# 上記設定がされていれば↓でいける %>
<%= u 'http://example.com/' %>
http%3A%2F%2Fexample.com%2F
```

うーん、相変わらずRubyの作法がよくわからない。。URLエンコードってよく使いそうだし、もっといいやり方がありそうな気がするんだけどな。
弊社Webデザイナーに何か作り始める時に頼みたいことまとめ


Topgate社で仕事してる時のログとしてまとめておく。
編集リクエスト歓迎です！

# 前提

弊社エンジニアは良いHTMLとか良いCSSとかほとんどかけない。
レイアウトとかUXをぶっ壊していいなら改変できるけど、最初から全部設計してもらったほうが良いものになるよね(たぶん
ただ、本当に完全に任せちゃうとエンジニアが後で困る場面が多いので、気をつけてほしい所をここにまとめておきたい。

なお、弊社はAngularJSを使っているのでidやclassについては好き勝手やってください。
好きな時につけたりはずしたりしてくれてOKです。それでプログラムがぶっ壊れることはありません。
DOMの組み換えも好きにやってください。`ng-`系のattributeの入れ子関係を変えるのはたまにヤバいので、繰り返し系(具体的には`ng-repeat`)の周りを変えた時は動作確認してください。

# 困ること

基本的に、"後から表示するものを追加する"時に困るものばっかりです。
以下に書くことはモックを作る時点で考慮してほしいです。
**考慮されてない** と **実現無理そう** の場合、実現無理そう のほうが80%ぐらいマシです。相談して適当な落とし所を見つけましょう。

## バリデーションエラーの考慮

例えば、姓名の入力項目があって、姓が入力されていない場合、`姓を入力してください`みたいなエラーをどこかに出したいです。
後から文字を出したり消したりするのを無造作に追加するとレイアウトが崩れる場合が多いと思います。

## i18nの考慮

要件に英語対応がある場合、日本語をベースに開発すると(英語だと文字列長が日本語よりも長くなって)不幸になるので気をつけたほうがいいと思った。

## データ0件の時の考慮

何らかのリストを表示する時、データが0件の時の表示を考えておいてください。
さもなくばなんかダサい表示つけちゃうぞ。

## サーバからエラーが返ってきた時の表示方法の検討

サーバが何らかのエラーを返してきた場合、どういう表示をユーザに行うかを(一緒に)検討しましょう。
最初にコレを決めておくと、後々の製造時にかかるエンジニアの工数にそれなりに響くので、最初に決めてあるとベターです。

なお、エンジニア的には`window.alert`とか使ってメッセージポンと表示するだけが一番実装が楽です(ｷﾘｯ

以下のパターンが考えられていればいいと思います。

* ユーザがなんかやらかした系 ([HTTPステータスコード 4xx系](http://ja.wikipedia.org/wiki/HTTP%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89#4xx_Client_Error_.E3.82.AF.E3.83.A9.E3.82.A4.E3.82.A2.E3.83.B3.E3.83.88.E3.82.A8.E3.83.A9.E3.83.BC))
  * 400, 401, 403 の3つ 401と403の挙動はエンジニア丸投げでもいいと思う。400は要するにサーバ側でのバリデーションエラーなのでどういう表示をしたいか案があると嬉しい。
* サーバがなんかやらかした系 ([HTTPステータスコード 5xx系](http://ja.wikipedia.org/wiki/HTTP%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89#5xx_Server_Error_.E3.82.B5.E3.83.BC.E3.83.90.E3.82.A8.E3.83.A9.E3.83.BC))
  * だいたいエンジニアに丸投げでいいけど、`window.alert`が嫌な場合どういうUIで実装してほしいか案がほしい。
perl コマンドラインオプション -s


perlの起動オプションに -s(switchオプション) をつけとくと それが変数でとれるようになる
例えば-XXX=ZZZ や -YYY といった引数をスクリプト内で変数として使えます。便利ですね。

```perl
#!/usr/bin/perl -s

# 普通に考えると定義してない変数2つ使ってるからうごかん
print $unko if $shif;
```

```sh
# しかしyesyes!
$ ./switch.pl -unko="yesyes!" -shit
yesyes!
```
VMWare ESXiのOpenSSL CCSインジェクション脆弱性(CVE-2014-0224)対策

VMWare ESXiのOpenSSL CCSインジェクション脆弱性への対策パッチがようやく出ました。
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2077361

ESXiサーバだけでなく管理クライアントであるvSphere Clientにも修正が入っています。vSphere Clientの最新版はこのページ内の【Download vSphere Client】リンクから入手します。

ESXiサーバの修正はパッチダウンロードページから自分で探してインストールします。
[https://my.vmware.com/group/vmware/patch#search](Product Patches)
このページ（要会員登録・ログイン、Javaアプレット）で
【ESXi】-【5.5.0】と選び、【Enter Bulletin Number】の欄に **ESXi550-201406401-SG** と入力して【Search】することで入手できます。

パッチ適用手順
==
1. 再起動が必要になるので、仮想マシンは止めておくか、VMWare Toolsを入れた上で連動シャットダウンするように設定しておきます。
1. SSHアクセスを有効にします。vSphere Clientでつないで【ホストマシン】-【構成】-【セキュリティ プロファイル】-【サービス/プロパティ】でSSHのオプションを開き、【開始】します。
2. ESXiサーバにSSHでログインします。
3. パッチファイルを適当なディレクトリに置きます。といってもホームディレクトリがないので /var/tmp あたりが適当なディレクトリになるでしょう。
4. パッチを実行します。<pre># esxcli software profile update -d /var/tmp/ESXi550-201406001.zip -p ESXi-5.5.0-20140604001-standard</pre>
5. ESXi550-201406001.zipはもう不要なので削除。
5. 再起動します。<pre># reboot -f</pre>
Salesforceにおける承認プロセスの設定取得とデプロイ


少し前のバージョンから承認プロセスの取得・デプロイがForce.com Migration Toolでできるようになっていたのを思い出したので。
管理パッケージをテストする際にアンインストール、インストールを繰り返す場合に便利です。

```xml:package.xml
<project name="Sample" basedir="." xmlns:sf="antlib:com.salesforce">
    <property file="build.properties"/>
    <property environment="env"/>

    <target name="deploy">
        <sf:deploy
            username="${sf.username}"
            password="${sf.password}"
            serverurl="${sf.serverurl}" 
            deployRoot="src" />
    </target>

    <target name="save">
        <mkdir dir="code"/>
        <sf:retrieve
            username="${sf.username}"
            password="${sf.password}"
            serverurl="${sf.serverurl}"
            retrieveTarget="code"
            unpackaged="src/package.xml"/>
    </target>
</project>
```

```xml:src/package.xml
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>*</members>
        <name>ApprovalProcess</name>
    </types>
    <version>30.0</version>
</Package>```
Swiftでポインタが指している値にアクセス

Cで書かれたライブラリを使う時に調べたのでメモ。
[Using Swift with Cocoa and Objective-C ](https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/buildingcocoaapps/InteractingWithCAPIs.html)を参考にしました。

## UnsafePointer\<T\>.memory
ポインタが指している値にアクセスするには memory を使うようです。

#### 構造体のポインタからメンバー変数にアクセスする例

```c:hoge.h
typedef struct tagHoge {
    int foo;
    int baa;
} Hoge;

Hoge *GetHoge();
```

```swift:test.swift
var a = GetHoge()
//a.foo = 10      // エラー
a.memory.foo = 10 // OK
println(a.memory.foo)
```

Swiftから見ると、GetHoge関数の戻り値の型はUnsafePointer\<Hoge\>となるので
これで良いようです。
MacOSX（10.8.5）にScalaの環境を構築する


## Javaがインストールされているか確認する。

```
$ java -version
java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)
```

インストールされてない場合は、ダイアログが表示されるのでインストールする。

## Homebrewを利用してインストール

### インストール

```
$ brew install scala
==> Downloading http://www.scala-lang.org/files/archive/scala-2.11.1.tgz
Already downloaded: /Library/Caches/Homebrew/scala-2.11.1.tgz
==> Downloading https://raw.githubusercontent.com/scala/scala-dist/27bc0c25145a83691e3678c7dda602e765e13413/completion.d/2.9.1/scala
Already downloaded: /Library/Caches/Homebrew/scala--completion-2.9.1
==> Caveats
To use with IntelliJ, set the Scala home to:
  /usr/local/opt/scala/idea

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d
==> Summary
?  /usr/local/Cellar/scala/2.11.1: 45 files, 28M, built in 2 seconds
```

### 確認

```
$ scala -version
Scala code runner version 2.11.1 -- Copyright 2002-2013, LAMP/EPFL
```


## 動作確認

### REPLを使用する

```
$ scala
Welcome to Scala version 2.11.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_65).
Type in expressions to have them evaluated.
Type :help for more information.

scala> println("Hello World")
Hello World

scala> 
```

### コンパイルして実行

**Hello.scalaを作成**

```Hello.scala
object Sample extends App {
    println("Hello World!")
}
```

**コンパイル**

```
$ scalac Samplle.scala
$ scala Sample
Hello World!
```

### 参考リンク

* http://qiita.com/shoma2da/items/b131c53ffa958c9386f7
【PHP】$_SESSIONで値が消えたりするときに確認すること

こんにちは。
昨日はセッションにかなり悩まされてました。

`$_COOKIE`の値は入っているのに、何故`$_SESSION`の値が急に消える・・・。
一つ画面を仲介、いわゆる確認画面とか、セレクトショップみたいなものですが
最初に

```php
session_start() ;
$_SESSION['test'] = "test" ;
```

ここで、

```php
var_dump($_SESSION) ;
```

すると上手く値を取得できているのに何故。

と、迷ってたところ
2つやらなくてはいけないところがありました。

##1. ファイル所有者の確認
セッションを書き込むところの権限がrootになっていたため、
書き出せないよ～！
と怒られているログを発見。

エラーログはこんな感じ

>PHP Warning:  session_start() [<a href='function.session-~:　open～
failed: Permission denied

>PHP Warning:  Unknown: open(/var/~/session/~) failed: Permission denied

書き込み権限がない（所有者がrootになってる）から
変更させなくては。
というものでした。
これは
/var/lib/php/session
ここの権限もしくは所有者、グループを変えればOKでした。

##2.session_start()の書く位置
さて、これでどうやら画面をまたぐことはできた。
と、思ったのですがまたどこか途中で値を落としてきた模様。

どうやら、session_start()は

```php
<?php
session_start();
```

と、<?phpの直下に書かなきゃいけないようです。
しらなかったです。

それでは今後ともよろしくお願いします。
iptables in docker

最近 docker 良く触っています。そうすると仕事柄 iptables を docker container 内で使いたくなることもある訳で。

結論から。「iptables LOG target は docker container 内では動作しない。」

そして「iptables自体は動作する。」

iptables のデバッグをするときには LOG target を仕込んでデバッグをするのが一般的かと思います。docker 内で iptables の動作確認をしつつルールを作ろうとしていたのですが、ログが出ないので作業が進まない！

原因をたどってみると、あっけないものでした。Linux net/netfilter/xt_LOG.c の `ipt_log_packet()` に次のように書いてあります。出力が無効化されています。今の最新版（mainline 3.15 HEAD）でもこのままなので、漏れなく無効でしょう。

```
	/* FIXME: Disabled from containers until syslog ns is supported */
	if (!net_eq(net, &init_net))
		return;

```

というわけで、コンテナ外でルールを作り終わってからコンテナ内に持ち込むことになりそうです。

あ、ちなみに iptables のルールを入れるには権限が必要なので、docker run の `--privileged` 引数を付けて起動します。

----

現在は[サポート追加](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/net/netfilter/xt_LOG.c?id=69b34fb996b2eee3970548cf6eb516d3ecb5eeed)されているようです。
Swiftは多重ループなどを一気にbreakできる


C言語（Objective-C）では、例えば二重ループからbreakで一気に抜ける事はできず、

* フラグを立てて抜ける（冗長）
* ループ箇所をまとめて関数化して`return`で抜ける
* `goto`で抜ける（嫌われがちですが、この場合においては有用だと個人的には思います）
* `for`や`while`の条件式で弾かれる値をループカウンタ等に突っ込む（ちょっと危険）

などなど工夫して抜けていたと思いますが、Swiftだと`for`や`while`の前にラベルを書いておく事で簡単に多重ループからbreakできるようです。

```swift:サンプルコード
println("start!")
    
for_i: for i in 1...5 {
    for j in 1...5 {
        println("i=\(i) j=\(j)")
        if i == 2 && j == 2 {
            println("break for_i")
            break for_i
        }
    }
}
    
println("end!")
```

```:実行結果
start!
i=1 j=1
i=1 j=2
i=1 j=3
i=1 j=4
i=1 j=5
i=2 j=1
i=2 j=2
break for_i
end!
```

`for`ループ中の`switch-case`の中で外側の`for`に対して`break`する事もできますので、覚えておくといざという時に役立つ予感です。

このラベル付けによる制御は`for`, `while`, `switch`構文に対して、それぞれ`break`, `continue`が出来るようです。

どうやらJavaでは同等の事が出来ていたようですので、この多重break(?)に対する既知の問題や論争などありましたらコメント頂ければ幸いです。
Windowsのvimで挿入モードのIMEをデフォルトオフにする

Windowsで素のvimを起動すると、挿入モードでいきなり全角入力になっていて、動作が直感的でなく躓くことが多々あります。
下記の設定を行うことで、IMEをデフォルトオフにすることができます。

```C:\Program Files\Vim\_vimrc```に下記を追記

```
set iminsert=0
set imsearch=-1
```


``` iminsert```は挿入モードのデフォルト値、``` imsearch```は検索時のデフォルト値です。

0 = オフ
1 = オン

``` imsearch ```の-1は```iminsert ```の値を参照するという意味です。

### 2016/02/26追記

こんなのもあるようです。

■ SSHを介してVimを使う人に感動的なESCキーを押すとESCキーが効きつつIMEがオフになる設定(Google日本語入力とVimの相性は最強！)
http://d.hatena.ne.jp/sifue/20120411/1334161078
jQuery pluginの書き方をいまさら

# jQuery pluginの書き方

## なんでいまさら？
いまさらですが、初めて書いたので備忘録的な感じです。
いままでは普通に素のJavaScriptを書いていましたが、汎用性とか使い回しを考えるとjQuery pluginになっていたほうが何かといいかなーと思ったのでした。


## pluginにすると何がいいの？

HTML側の記述を下記のようにできます。
よく見かけるjQuery pluginと同じような記述方法で、なんか良いですよね。

```html
<script type="text/javascript">
	$('.class-name').your_plugin_name();
</script>
```


で、js側の記述は下記のような感じです。

```js
(function($){
	$.fn.your_plugin_name = function(){
		var $self = $.fn.your_plugin_name;	//自分自身を保持しておくと、後の記述がすっきりするし何かといいみたい
		var $this = this;						//.class-nameのオブジェクトをこれで保持できるみたい
		
		//ここにやりたいことを書けばいいみたい
		
	};
})(jQuery);
```


## 引数で設定値を渡したい場合

HTML側で下記のような書き方をすることも割とよくやりますよね。

```html
<script type="text/javascript">
	$('.class-name').your_plugin_name({ hoge: 'fuga' });
</script>
```


その場合、js側は下記のように受け取ってあげれば大丈夫っぽいです。

```js
(function($){
	$.fn.your_plugin_name = function(config){
		var $self = $.fn.your_plugin_name;
		var $this = this;
		
		//受け取った値を保持しておく場合はこんな感じ
		//引数が無い場合は標準値が入るように三項にしておくと何かといいと思った
		//ほんとは引数の内容を検査しないといけないような気もしますが
		$self.config = {
			hoge: ( config.hoge ) ? config.hoge : 'default',
		};
		
		
		//ここにやりたいことを書けばいいみたい
		
		
	};
})(jQuery);
```


## メソッドがいろいろあったりする場合

とりあえず、こんな感じにしています。

```js
(function($){
	$.fn.your_plugin_name = function(config){
		var $self = $.fn.your_plugin_name;
		$self.$this = this;	//スコープ外から参照したいので、$selfの下に入れておいてみた
		$self.config = {
			hoge: ( config.hoge ) ? config.hoge : 'default',
		};
		
		
		//ここにやりたいことを書けばいいみたい
		
		
	};
	
	$.fn.your_plugin_name.function_name = function(){
		var $self = $.fn.your_plugin_name;	//スコープ外なので、再度$selfに代入しておいてみた
		
		//ここにやりたいことを書こう
	};
	
})(jQuery);
```


## おもったこと。

正しいとか理想的とかいうとまだまだ深みがあると思いますが、ちょっとした処理を書きたい場合は非常に簡単ですね。
素のJavaScriptでjQueryを使って書くより楽なような気がします。
やっぱりjQueryはステキ。
LabVIEW Tips:トップレベルVIとして実行されているか判定する

# VI
![トップレベルVIとして実行？.png](https://qiita-image-store.s3.amazonaws.com/0/36514/28a3f90c-0802-4cdc-6a58-ab6fe2080a04.png)

呼び出しチェーンは、発呼者を最上位VIまで呼び出し階層を辿り、自身を含む階層の全てのVI名を文字列の配列で返します。
この関数で得た配列の要素数をカウントすることで階層数が分かります。

#ユースケース
サブVIとして実行される前提のVIを単体デバッグする時
・トップレベルVIとして実行されたときだけ一部の動作を変更して動作させたい時
・明示的に自身のウィンドウを閉じる,アプリケーションを閉じる等の処理を入れたVIを単体デバッグする時(デバッグ中はウィンドウを閉じる動作を抑制したい)

#サブVI化するときの注意
サブVI化すると呼び出しチェーンに発呼者VIが加わるので、判定が変わってしまいます。
インライン展開をONにしておくと見掛けはサブVIのままでも実行時に展開した上で実行されるようになります。
本来はパフォーマンス向上のためのオプションですが、発呼者の階層に依存するという特殊な動作に対しても有効です。

![2014-06-12 09_51_29-VIプロパティ.png](https://qiita-image-store.s3.amazonaws.com/0/36514/3236df39-b52e-6417-6dd5-6670ba31f7ac.png)
ログアウトしてもバックグラウンドジョブがこの先生きのこるには

n番煎じなネタですが……。

### 概要

退社前にあるサーバに SSH 接続して時間のかかる処理を
バックグラウンド (コマンドの末尾に `&` を付加する) で実行し、
そのまま定時退社したいですよね。
でも SSH 接続を切るとジョブが死んじゃう！どうしたらいいの！

こんなときは [nohup](http://linuxjm.sourceforge.jp/html/GNU_sh-utils/man1/nohup.1.html) の出番でござる。

本来はログアウトの際に、そのとき実行していたプロセスに対して自動的に SIGHUP シグナルが送られてプロセスは終了します。
しかし nohup で実行すれば、この SIGHUP シグナルを無視してくれるようになります。

### How to Use

```
$ nohup ./sugoku_omoi_script.sh &
```

標準出力・標準エラー出力先を指定する場合
(この場合、標準入力を閉じておく必要があるそうです。)

```
$ nohup ./sugoku_omoi_script.sh > out.log 2> err.log < /dev/null &
```

### 参考

* [ログアウトしてもバックグラウンドジョブを継続する方法](http://www.codereading.com/notebook/moin.cgi/IgnoreTheHangupSignal)
* [SSH Frequently Asked Questions](http://www.snailbook.com/faq/background-jobs.auto.html)
* [SSH + nohup でバックグラウンドプロセスを実行してログアウトするときの注意点](http://d.hatena.ne.jp/takihiro/20081002/1222947161)
* [なぜnohupをバックグランドジョブとして起動するのが定番なのか？](http://www.glamenv-septzen.net/view/854) ※ nohup をとことん極めたい人向け
* [Linux シグナル入門 ＞ 4. SIGHUP, SIGINT, SIGTERM](http://www.oki-osk.jp/esc/linux/signal-4.html)
binding.pryは長すぎるからbpでブレイクポイントを設定しよう

ブレイクポイントを設定する度に`binding.pry`って打つのがだるいので、`bp`で設定できるようにしました（できるようにするgemを作りました（[経緯](http://kentaroimai.com/articles/6-binding.pry%E3%81%AF%E9%95%B7%E3%81%99%E3%81%8E%E3%82%8B)））。

### 方法
[pry-alias](http://rubygems.org/gems/pry-alias)というgemを入れる。

```rb
# Gemfile
gem 'pry-alias'
```

`bp`が気に入らなければ他の名前にすることもできます。

```sh
# ~/.bashrc or ~/.zshrc
export ALIAS_FOR_BINDING_PRY=bbb
```

カンマ区切りで複数指定することもできます。

```sh
# ~/.bashrc or ~/.zshrc
export ALIAS_FOR_BINDING_PRY=bbb,bp
```
Android NDK(gcc4.8) と std::stoi

cocos2d-xはv3の安定性にまだ不安があるという理由で、v2.2.3を使用しています。

# C++11で std::stoi を使いたい
それでも折角ならC++11でコーディングしたいと、そうしています。
XcodeでiOS向けに開発しているときは問題は無かったのですが、いざ、Android版をビルドしようとすると、以下のようなコードで問題が出ました。

```cpp
#include <string>

auto number = std::stoi("123");
```

# C++11対応
順を追って。

まず、C++11対応の設定。
Application.mk を編集して、"NDK_TOOLCHAIN_VERSION := 4.8"、"-std=c++11"を追加。

```:proj.android/jni/Application.mk
NDK_TOOLCHAIN_VERSION := 4.8
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -DCOCOS2D_DEBUG=1 -std=c++11
```
ライブラリやインクルードファイルのパスも4.8にします。

#ビルド

```:Console
jni/../../Classes/fp.cpp:692:9: error: 'stoi' is not a member of 'std'
```
そんなの知らないよとエラーになりました。

```cpp:basic_string.h
#if ((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \
     && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))
```

定義されているソースを眺めると、以上のような条件になっています。
それぞれを確認すると、_GLIBCXX_USE_C99 がdefineされていません。

試しに、std::stoi を使用するコードの先頭で、

```cpp
#define _GLIBCXX_USE_C99
#include <string>
```
と指定してビルドし直すと。

```:Console
.../android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/basic_string.h:2961:31: error: 'wcstold' is not a member of 'std'
```
……、
これ以上時間をかけてもしようが無いと判断して、std::stoi の利用をやめました。
他で代替はききますし。

# 結論、解決せず
いまのところこの他に、C++11 での問題には遭遇していません。

この問題、というか制限でしょうか？
cocos2d-x では無く gcc の問題のようです。検索すると同じような質問が散見します。
ただ、なぜこうなるかという解説はあっても解決方法には至りませんでした。

なお、この問題に悩み始めてから、cocos2d-x v3.x.x が C++11ベースのコードになっていることを知りました。
黒い画面入門

## ls (list segments)
- ファイルやディレクトリの一覧を取得する。
- option
	- -a 隠しファイルも表示
	- -l 詳細表示
		- dはディレクトリ、lはリンクファイル
		- -[種別]rw-[オーナー]r--[グループ]r--[その他] 
			- 読み書き実行権限[xなら実行できる]
			- ファイルのオーナーのみ読み書き実行できる（-rwx------）
			- だれでも読み書きできる。実行は不可。（-rw-rw-rw-）

## cd(change directory)
- ..1つ上のディレクトリ
- -1つ前のディレクトリ
- ~ホームディレクトリ

## pwd(print working directory)
- カレントディレクトリのフルパスを表示する。

## mkdir(make directory)
- ディレクトリを作成する。
- スペース区切りで複数作成可能
- 作成に成功すると何も帰ってこない。
	- unixはエラーでなければ何も返さない。
- option
	- -p パス形式でディレクトリを作成。

## touch
- ファイルの最終アクセス時刻と変更時刻を変更
- ファイルが存在しない場合は新規作成
- スペース区切りで複数作成可能
- option
	- -c ファイルが存在しない場合は新規作成しない。

## cat(catenate:連結)
- テキストファイルの内容を表示。
- テキストファイルを連結させる。
- option
	- n 行番号を付ける。

## clear
- 画面をきれいにする。
- ctrl + L

## cp(copy)
- ファイルを複製する。
- パターンマッチング使用可能。
- option
	- -i 上書きする前に確認する。
		- このオプションを付けないと上書きで消えるので注意。

## alias
- コマンドやオプションを別名で登録
	- alias cp='cp -i'
- 登録解除はunalias
	- unalias cp

## mv(move)
- ファイルを移動する。
- ファイル名を変更する。
- option
	- -i 上書きする前に確認する。
	- -n 上書きせず、確認もしない。

## rm(remove)
- ゴミ箱を経由せずファイルを削除する。
- 削除したファイルをもとに戻すことはできない。
- option
	- -i 削除する前に確認する。
	- -r ディレクトリを削除する。
- 死のコマンド
	- sudo rm -rf /

## vi
- ノーマルモード（カーソルの移動・削除）
	- カーソルキー
	- dd 行削除 gg 先頭 G 最後
	- a or i 挿入モードに移行
	- :w 保存 :q 終了 :wq or ZZ 保存して終了 :q! 保存せず終了 :e 指定したファイルを開く
- 挿入モード（テキストの入力）
	- 左下にI(INSERT)と表示される。
	- esc ノーマルモードに戻る。
- ビジュアルモード

## リダイレクト処理
- 出力結果をファイルに書き込む
- 追記も可能
- lsの出力結果をテキストファイルとして保存
	- ls > filelist.txt
- 現在の発をテキストファイルに追記
	- pwd >> filelist.txt

## Mac
- アプリケーションを起動
	- open
- 複数ファイル作成
	- touch {index, product, contact}.html
- 連番ファイルの作成
	- touch {a..e}.txt

## curl
- ファイルのダウンロード・アップロード
- ダウンロードするときは-Oを付ける

## unzip
- ZIPファイルの解凍
WolframAlphaで連立方程式を指定した変数について解く

# 背景

とある関数の逆変換を求めたくて、調べた。

# 連立方程式を指定した変数について代数的に解く

solve[{式1,式2,...},{変数1,変数2,...}]


## 例

```
solve[{a==0.836 * x + 0.044 * y,b==-0.044 * x + 0.836 * y + 0.169},{x,y}]
```

# 関連記事

- [東大の過去問をPerlに解かせようとしたらbignumとbigintの違いを知った](https://abrakatabura.hatenablog.com/entry/2014/11/27/073543)
- [東大の入試問題をNode.jsに解かせてみた](http://abrakatabura.hatenablog.com/entry/2014/11/28/175853)
- [node.jsで大きな数を扱う](https://abrakatabura.hatenablog.com/entry/2014/05/20/072903)
- [Maximaでリーマン予想のゼータ関数をプロットした](https://abrakatabura.hatenablog.com/entry/2012/10/12/112958)
- [複素数版のコラッツの問題](http://abrakatabura.hatenablog.com/entry/2012/06/04/072248)
- [#イクメン #2011aug_baby フーリエ記述子を息子のお絵かきソフトに](https://abrakatabura.hatenablog.com/entry/2012/03/06/232411)
- [DockerでIPython Notebookを動かして、数え上げおねえさんを救う](https://abrakatabura.hatenablog.com/entry/2014/11/30/214133)
- [Maximaで2018年のセンター試験、数学I・数学Ａの第1問を解いてみた](https://abrakatabura.hatenablog.com/entry/2018/01/30/204125)
node.jsでchrome.exeをオプション付きで起動して終了するには

# 背景

Atom ShellからChromeブラウザをオプション付きで起動する必要があった。
Windows環境ではchrome.exeが固定された場所に配置されないので、この辺りにも多少配慮したつもり。

# Chromeを起動する

## chrome.exeのありか

以下の環境変数?を使ってみた。

- process.env.LOCALAPPDATA
- process.env.ProgramFiles


```js
var spawn = require('child_process').spawn;

function getWin32ChromePath() {
  var path = [
    process.env.LOCALAPPDATA + "\\Google\\Chrome\\Application\\chrome.exe",
    process.env.ProgramFiles + "\\Google\\Chrome\\Application\\chrome.exe"
  ];

  for (var i = 0; i < path.length; i++) {
    if (fs.existsSync(path[i])) {
      return path[i];
    }
  }
  return null;
}

var chromeRuntimes = {
  win32: getWin32ChromePath(),
  darwin: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
  linux: "" //頑張ってください
};

var gChrome = spawn(chromeRuntimes[process.platform], [
    "--app=https://localhost:4430/webrtc.html",   // シンプルなウィンドウでURLを開く
    "--enable-usermedia-screen-capturing", // デスクトップキャプチャー機能を有効
    "--ignore-certificate-errors",   // オレオレ証明書の警告を無効
    "--window-size=320,128",   // キャプチャーボタンに必要な小さ目のサイズを指定
    "--user-data-dir=" + __dirname + "/chromeStuff" //
  ]);

```

# Chromeを終了する

child#kill([signal])でプロセスにシグナルを遅れる。

```
gChrome.kill();
```

引数なしがSIGTERMに相当。

# Link

- [http://nodejs.org/api/child_process.html](http://nodejs.org/api/child_process.html)

# 関連記事

- [Atom Shellでデスクトップキャプチャー（動画）アプリ](http://abrakatabura.hatenablog.com/entry/2014/05/29/075150)
- [祝！Electron V0.36.0でAdd desktopCapturer module.](http://abrakatabura.hatenablog.com/entry/2015/12/12/184103)
- [node.jsでシェーダーからGIFアニメを生成するツールglsl2imgにプルリク出した件](http://abrakatabura.hatenablog.com/entry/2017/05/22/071141)
Swiftに関するメモ その6 - メモリ管理と Optional Chaining


* [
Swiftに関するメモ - 一覧](http://qiita.com/takkyun/items/f34abf857deed808c610)

https://developer.apple.com/swift/ より

[The Swift Programming Language (iBooks Store)](https://itunes.apple.com/us/book/the-swift-programming-language/id881256329?mt=11)をざっくり目を通してつらつらと。

# ARC (Autometic Reference Counting)

Swift では Objective-C で採用された ARC という仕組みでメモリ管理を行います。

ARC についてはざっくり……

* 参照渡しのオブジェクトは strong が基本
* 循環参照 (相互参照) になるオブジェクトに関しては weak
* optional ではないオブジェクトに対して weak を利用したい場合は unowned
* クロージャで参照されるオブジェクトはクロージャ内部で strong
* なので、クロージャで `self` が循環参照になってしまうような場合にはクロージャ直前に `[unowned self]` と宣言してクロージャ内部で `self` を strong にならないようにする

# Optional Chaining
## 任意型変数 (Optinal Value)

Swift では、変数や定数に対して任意型 (Optional) として宣言することができます。

```swift
var isEnabled: Bool? = true
```

型の後に続けて、`?` をつけると任意型になります。

`Bool` な変数は `true` か `false` を取りますが、`Bool?` な変数はそれに加えて、値なし (No Value) な `nil` を取ります。

任意型な変数に対して初期値を設定しない場合、初期値は `nil` になります。

```swift
var isEnabled: Bool? // isEnabled は nil
```

また、任意型な変数を `if` などの条件式で検査した場合は `nil` かどうかを判断する挙動になることに注意。

例えば、次のようなコードを実行すると

```swift
var isEnabled: Bool? = false // isEnabled は false
if isEnabled {
  println("What!?") // 実行される
}
```

`isEnabled` は `false` で `nil` ではないので、`if` の条件式は「真」になり、"What!?" と出力されます。

この時に `isEnabled` の値そのもので条件式を実行したい場合、`!` をつけて任意形をアンラップ (unwrap) します。

```swift
var isEnabled: Bool? = false // isEnabled は false
if isEnabled! {
  println("What!?") // 実行されない
}
```

ただ、`nil` な値の変数をアンラップすると、実行時エラーとなるので注意。

```swift
var isEnabled: Bool? // isEnabled は nil
if isEnabled! { // エラー
  println("What!?")
}
```

## Optinal Chaining

任意型の変数 (プロパティ) に `?` をつけることで、次に続くプロパティやメソッドに値そのものを渡すように動作させることができます (暗黙的に `!` がついたような動作になる)。

ただし、`!` と異なり、`?` は対象が `nil` の場合、それ以降の評価を止めるように動作し、実行時エラーにはなりません。

この動作の仕組みを利用してプロパティやメソッドを数珠つなぎのように呼び出すような記述をすることができます。これを Optinal Chaining と呼ぶようです。

例えば、

```swift
if let firstName = aPerson.info?.name?.firstName {
  println("first name is \(firstName)")
}
```

というコードでは、

1. `aPerson` のプロパティ `info` に値が設定されていたら (`nil` ではなかったら)、
2. `info` の中のプロパティ `name` にアクセスし、それが `nil` ではなかったら、 
3. `name` の中のプロパティ `firstName` にアクセスして、
4. その内容をローカルな定数 `firstName` に格納します。

その結果、定数 `firstName` の値が `if` 文に対して評価されます。

したがって、以下のコードとほぼ同義です。

```swift
if aPerson.info {
  if aPerson.info!.name {
    let firstName = aPerson.info!.name!.firstName
    if firstName {
      println("first name is \(firstName)")
    }
  }
}
```

動作サンプル：

```swift
struct Address {
  var street:String?
  var postalCode:String?
}
struct Name {
  var firstName:String?
  var lastName:String?
}
struct Info {
  var name:Name?
  var address:Address?
}
class SomeClass {
  var info:Info?
  init(info:Info?) {
    self.info = info
  }
}
let name = Name(firstName:"Steve", lastName:"Jobs")
let address = Address(street:"1 Infinite Loop", postalCode:nil)
var aPerson = SomeClass(info:Info(name:name, address:address))
if let firstName = aPerson.info?.name?.firstName {
  println("first name is \(firstName)")
} else {
  println("No first name")
}
```
apt-getでMySQLを入れた時にlatin1が鬱陶しくて仕方がない方へ

# 概要
aptで導入したMySQLのlatin1をやっつける

## apt-getで入れるとlatin1なMySQLが
`apt-get install mysql-server`
でMySQLを導入する方の中にはキャラクターセットがlatin1になってたせいで「日本語が化けるｱｱｱｱｱｱｱｱｱ」って人がそこそこいるんじゃないかと思います。

`default-character-set=utf8`でやれって記事を見かけると思うんですが、[アレはMySQL5.5ではもう廃止されました。](http://dev.mysql.com/doc/refman/5.1/ja/server-options.html)「MySQLで文字化けしたからdefault-character-setしたんだけどうまくいかないよ～」はアカンです。バージョンを確認しましょう。

## 直し方
キャラクターセットを見てみるとデフォルトは多分こんなの

```
mysql> SHOW VARIABLES LIKE '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
```

このlatin1を駆逐するには
/etc/mysql/my.cnf を開いて、[mysqld]のところに
`character_set_server=utf8`
と書いて、mysqlをrestartすれば終わりです。`service mysql restart`

```
mysql> SHOW VARIABLES LIKE '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
```

クライアントの影響を受けずに常にutf8で返したいときは/etc/mysql/my.cnfに
`skip-character-set-client-handshake`
を加えましょう。

## 終わりに
Ubuntu14をVMに突っ込んでMySQLのキャラクターセットの設定をしている最中に
「キャラクターセット周りで困ったから調べたら"default-character-set=utf8"にすればいいって書いてあったのにトラブったことが昔あったなぁ」
というのを思い出して調べてたところ…
思いの外、default-charac(略)でやれってエントリが残ってたんで憤慨してこのエントリを書きました。もう5.5でいいじゃん
Go言語でグレースケールの画像に変換


`image`以下のパッケージを使うとピクセル単位で画像処理が行なえる。
`interface`で宣言された抽象的な型が用意されているので、色々拡張できそう。

今回は、png画像をグレースケールにしてみる。
下記のプログラムは、標準入力から画像を取得し、標準出力に書き出す。
`Image.Bounds()`で画像の領域を取得し、`Gray16Model`で`Gray16`に色を変換している。
`Gray16`以外にも`RGBA`などの色があり、色ごとに`-Model`がある。
もちろん、自前で`Color`インタフェースを実装することは可能である。

```
package main

import (
    "image"
    "image/color"
    "image/png"
    "os"
)

func main() {
    img, _ := png.Decode(os.Stdin)
    bounds := img.Bounds()
    dest := image.NewGray16(bounds)
    for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
        for x := bounds.Min.X; x < bounds.Max.X; x++ {
            c := color.Gray16Model.Convert(img.At(x, y))
            gray, _ := c.(color.Gray16)
            dest.Set(x, y, gray)
        }
    }
    png.Encode(os.Stdout, dest)
}
```

実行してみる。

```
$ go run gray.go < gopher.png > gopher_gray.png
```

以下のように変換される。

### 入力

![gopher.png](https://qiita-image-store.s3.amazonaws.com/0/14952/0282d580-7950-da50-37c9-60c4e25dc812.png "gopher.png")

### 出力

![gopher_gray.png](https://qiita-image-store.s3.amazonaws.com/0/14952/7291748c-da99-88f9-d593-a18a18463422.png "gopher_gray.png")
[Swift] convenienceイニシャライザとdesignated（指定）イニシャライザ


iBooksのSwift本を読んでいて、`convenience initializer`というのを見つけました。
また対比として、`designated initializer`という単語が出てきます。
要は指定イニシャライザです。

ちょっと文章とか曖昧なので、違ったら突っ込んでもらいたいんですが、`convenience initializer`は他のイニシャライザに処理を委譲（delegate）することができます。
つまりイニシャライザの中で別のイニシャライザを呼ぶことが出来ます。

```sample.swift
class SomeClass {
	var name: String
	init(name: String) {
		self.name = name
	}
	convenience init() {
		self.init(name: "default name")
	}
}

var aClass: SomeClass = SomeClass() // => "name: default name"
```

`convenience`の名前通り、デフォルトの処理があって、基本はそれに任せつつ、必要があれば引数を取って特別に処理をする、みたいなことを想定しているのでしょうか。


## Super classを含めたイニシャライザ

上の例だけならなるほど、で終わりだったんですが、継承を含めるとさらに複雑になります。
サブクラスのイニシャライザ内で、Super classで定義された変数にアクセスする場合は、まず最初に`super.init`を呼ばないとなりません。（Super classのイニシャライザを呼んでからならアクセスできる）

さらにこの`super.init`を呼ぶ際、`designated initializer`を呼び出す必要があります。
（つまり、`convenience initializer`は呼べない）

```ok.swift
class SubClass: SomeClass2 {
	var hoge: String
	init() {
		self.hoge = "foo" // Sub classで定義されている変数には`super.init`前にアクセス可能
		super.init(name: "hogehoge") // Super classのdesignated initializerは`init(name:)`
		self.name = "name" // Super classのinitializerを呼んだ後ならアクセスできる
	}
}
```


```ng.swift
class SubClass: SomeClass2 {
	init() {
		self.name = "name" // `super.init`前に、Super classの変数にはアクセスできない
		super.init() // `convenience initializer`はSub classから直接呼べない
	}
}
```
swiftでIBOutlet, IBAction


`@IBOutlet`、`@IBAction`で宣言するとstoryboardからも認識されます。
以下はタップしたUIButtonのタイトルを変更するサンプルです。
objective-cで書くときと同じようにstoryboardから`@IBOutlet`と`@IBAction`をつないであげて下さい。


```swift

import UIKit

class ViewController: UIViewController {
    
    @IBOutlet var button:UIButton
    @IBAction func buttonTapped(sender:AnyObject) {
        var tappedButton:UIButton = sender as UIButton
        tappedButton.setTitle("tapped", forState:UIControlState.Normal)
    }
                            
    override func viewDidLoad() {
        super.viewDidLoad()
        button.setTitle("tap me", forState:UIControlState.Normal)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

```