OmniAICreator/Qiita-1.07M huggingface dataset:
【javascript】jQuery-UI-dialogに独自ボタンを付ける方法

jQuery-UIのダイアログに独自のボタン（buttonsオプションでない）をつけて自由自在にイベントを呼びたい場合

保存して閉じるボタンとキャンセルして閉じるボタンの動きを分けたい場合

その他自在に呼び出す前にコールバック関数を渡したい場合



だいぶソースきたないですが
こう。

```js:javascript
$("<div><button onclick='parent.$(\".ui-dialog-content\").trigger(\"save\");'>ほぞん</a></div>").dialog({
  close:function(){
    alert("クローズなう")
  }
  ,buttons:{
    "保存": function() {
      $(this).trigger("save");
    }
    ,"閉じる":function(){
      $(this).trigger("abortme");
    }
  }
})
.on("save", function(){
  alert("セーブなう");
  $(this).dialog("close");
})
.on("abortme", function(){
  $(this).dialog("close");
})
```
要は

１．親ウインドウからダイアログ呼び出し時にonメソッドで独自イベント定義
２．buttonsオプションからイベントをセットするときは```$(this).trigger("/*event*/");```
　　dialogの中身のHTMLに直接イベント書くときは```parent.$(".ui-dialog-content").trigger("/*event*/")```とする

これでOK
Chrome乗り換え候補（Windows）

## 2015/9/10
しばらくKinzaを使っていたが、最近のアップデートでchromeの方が軽くなった印象


- [Kinza](http://www.kinza.jp) 2015/7/4 v2.3.0
  - chromeそっくり
  - でも軽い気がする
  - googleアカウントでchromeの設定を持ってこれるので移行が楽
  - 新しいタブを自由に設定できればいいのに
- [Vivaldi](https://vivaldi.com) 2015/7/4 TP3.1.0.162.9
  - ~~まだTPのせいか、とにかく重い~~
     - 64bit版を入れたら驚くほど軽くなった
  - 見た目は嫌いじゃない
  - サイドバーなんかはoperaを思い出す
  - スタンドアロンでインストールできる
- [Edge](http://www.microsoft.com/en-us/windows/browser-for-doing)

##ポイント

- 軽さ
 - Chromeが重く感じて困る
 - 原因はChromeじゃない可能性も
- 高解像度対応
 - Sony VAIO Fit15Aの高解像度でも文字が読めるように

###選外

- http://www.opera.com/ja
 - 高解像度対応が中途半端
- http://www.fenrir-inc.com/jp/sleipnir/
 - 高解像度対応する気は無さそう
 - 低価格Windowsタブレットユーザーがターゲットなのだろうか？
 - 実は対応済みだけど、設定の仕方がわからないだけとか？
WWDC 2015 - What's New in Notifications

WWDC-2015 「What's New in Notifications」で発表された内容をメモ。

# ソース

* [セッションページ](https://developer.apple.com/videos/wwdc/2015/?id=720)
* [SD動画](http://devstreaming.apple.com/videos/wwdc/2015/720xwbi9nl/720/720_sd_whats_new_in_notifications.mp4?dl=1)
* [HD動画](http://devstreaming.apple.com/videos/wwdc/2015/720xwbi9nl/720/720_hd_whats_new_in_notifications.mp4?dl=1)
* [PDF](http://devstreaming.apple.com/videos/wwdc/2015/720xwbi9nl/720/720_whats_new_in_notifications.pdf?dl=1)

# iOS

## 「Text Input Action」の追加!

通知内でテキスト入力できるようになりました！

![Text_Input_Action.png](https://qiita-image-store.s3.amazonaws.com/0/51734/1fcb950e-8ef8-3ff7-fbf9-9dada671520a.png)

## 実装方法

詳しくは、ページ上の動画/PDFを参照ください。

![Text_Input_Action_2.png](https://qiita-image-store.s3.amazonaws.com/0/51734/f0c5e549-fa05-5bd3-6f0a-b65052117fdc.png)

![Text_Input_Action_3.png](https://qiita-image-store.s3.amazonaws.com/0/51734/eeffb84a-2ea5-ccb7-a43f-e23d9bba42e5.png)

![Text_Input_Action_4.png](https://qiita-image-store.s3.amazonaws.com/0/51734/3e78a3aa-cd8f-5b6e-9e53-870fb3e821e9.png)

![Text_Input_Action_1.png](https://qiita-image-store.s3.amazonaws.com/0/51734/a6b8734e-27f3-f5e6-c22e-57e14225ecda.png)

# APNsの変更点

新しいプロバイダー向けのAPIをリリースします！！
(2016年)

## HTTP/2 request-response をサポート!

![スクリーンショット 2015-06-15 9.07.09.png](https://qiita-image-store.s3.amazonaws.com/0/51734/326833ae-c0b6-2e4a-a40b-c11ec2f5de83.png)

![HTTP2_request.png](https://qiita-image-store.s3.amazonaws.com/0/51734/f855cfa0-a76d-042b-fe2f-8be5268f6385.png)

HTTP/2通信をサポート！
APNS<->プロバイダー間の通信が効率的になります！

## Instant Feedback

### Before

![スクリーンショット 2015-06-15 8.56.43.png](https://qiita-image-store.s3.amazonaws.com/0/51734/a447e596-cb66-6482-3b01-009d56d6e7e0.png)

### After

![スクリーンショット 2015-06-15 8.56.51.png](https://qiita-image-store.s3.amazonaws.com/0/51734/7c1c3687-a44c-c0e0-664b-55594e1703b1.png)

今までは、通知依頼のリクエスト後にすぐ結果をレスポンスで取得することができなかったが、
すぐに受け取れるようになります！

## Simplified certificate handling

### Before

![スクリーンショット 2015-06-15 8.58.18.png](https://qiita-image-store.s3.amazonaws.com/0/51734/470d2484-c2cc-fd13-4d98-4ddb326cb0f2.png)

### After

![スクリーンショット 2015-06-15 8.58.23.png](https://qiita-image-store.s3.amazonaws.com/0/51734/b827251c-3d7a-d4e9-a8be-45ced90182f5.png)

APNs<->Provider間の認証周りの処理がもの凄くシンプルになります！

## payload 2KB -> 4KB

### Before

![スクリーンショット 2015-06-15 9.03.56.png](https://qiita-image-store.s3.amazonaws.com/0/51734/2753d5dc-042b-3b69-db89-91823ee6c6d6.png)

### After

![スクリーンショット 2015-06-15 9.04.03.png](https://qiita-image-store.s3.amazonaws.com/0/51734/d88c8bb4-bf8d-4471-ee41-f990827980a8.png)


プッシュ通知として送れる情報量が2KBから4KBに増えます！

## 詳しくは公式ドキュメントを見てね

https://developer.apple.com/notifications/

2015/06/15現在 まだ情報更新されていない模様。
JavaScriptで可変長数値表現を使う

#可変長数値表現とは
可変長数値表現とは、最上位ビットをフラグをして使う数値の表現方法です。
英語では*Variable-length quantity*といいます
この技術はMIDIで実装されており、時間管理に利用されています。


#数値の表現
最上位ビットをフラグに使うとは、次のようなことを意味します。

16進数 0x7F(10進数127)を、2進数で表すと、次のようになります。

````js
//わかりやすくするために4桁で区切っています。
0111 1111

````

16進数0x80(10進数128)は、2進数で表すと、次のようになります。

````js
1000 0000
````

一番左のビット(最上位ビット)が1になりました。
可変長数値表現では、最上位ビットに1である場合
、次のバイトにもデータがあることを示しています。
可変長数値表現で0x80を表すと

````js
1000 0001 0000 0000

````
このようになります。
各バイトの最上位ビットを削除するとこうなります

````js
000 0001 000 0000
=10000000
=0x80
````

単純に、各バイトの下位7ビットを連結すれば、実際の数値を取得することができます。
具体的には、ビット演算子を使えばこう書くことができます。

````js
//ar はバイト配列とする
function decode(ar){
    var value=0;
    //最上位ビットが1ならループ
    while(ar[i]>=0x80){
         //1.最上位ビットのみ反転(例：1000 0001 => 0000 0001にする)
        var a = ar[i] ^ (1<<7);
         //2.前回の値と連結
         value = value<<7 | a;
         i++;
    }
    //最後の値を連結
    value = value <<7 | ar[i]
    return value;
}

````

 `var a = ar[i] ^ (1<<7);`の部分について

>ビットごとの XOR	
オペランドの対応するビットがどちらか一方のみ 1 である各ビットについて 1 を返します。

これを使って、上位1ビットのみを0に反転しています。それ以外のビット(2～8ビット)に変化は起こりません。
ちなみに、`1<<7 = 10000000`
です。0x80と書いても同じです

前の値と連結するには、前の値を7ビット左にシフトさせ、ORします。
これにより、最上位ビットと、前の値の最下位ビット部分が重なります。
0x81 0x01 となっている可変数値表現を例にとるなら

````js
0x81 = 10000001
0x01 = 00000001

//0x81 と 1<<7 (0x80) のXOR (最上位ビットフラグを0にする)

10000001
10000000
---------
00000001

//0x01と上記の連結
//0000001を7ビット左にシフト
0000001 << 7 = 10000000

//0x01とOR
10000000
00000001
--------
10000001

=0x80
````
こんな感じです。わかりましたか？



なお、可変長数値表現に変換したい場合は、下記のようにすれば可能です

````js

function convert(val){ 
  var buffer = [];
  buffer.push((val & 0x7F));
  val = (val >> 7)
  while (val > 0) {
    buffer.push(0x80 + (val & 0x7f))
    val = (val >> 7)
  }
   array2hex(buffer.reverse());
 

    function array2hex(ar) {
      for (var i=0;i<ar.length;i++) {
        ar[i] = (ar[i].toString(16) == 0) ? "00" : ar[i].toString(16);
      } 
       return "0x" + ar.join('');
   }
  }
}

````
上記コードは下記より引用しました
https://gist.github.com/silentrob/440159
DockerでWebサーバー/コンテナホストからDBサーバー接続


[前回の続き](http://qiita.com/tsutorm/items/37fd2896cb40379345f0)

## dbサーバーのIPアドレスを調べる

```shell-session
$ sudo docker inspect <コンテナID or 名前>  | grep IPAddress
        "IPAddress": "172.17.0.8",
```

こんな感じで起動したdockerのIPが分かる。
Webサーバーとかから普段使いするユーザーを作成しておく。念のため調べたIPでちゃんとアクセスできるかも検証。

```shell-session
$ mysql -uroot -p -h172.17.0.8
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
(中略）
mysql> GRANT SELECT , INSERT , UPDATE , DELETE ON *.* TO <ユーザー名>  IDENTIFIED BY '<パスワード＞';
Query OK, 0 rows affected (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
```

新しく作ったユーザーで入れるかテスト
```shell-session
$ mysql -u<ユーザー> -p<パスワード> -h172.17.0.8
Welcome to the MySQL monitor.  Commands end with ; or \g.
(中略）
mysql>
```

おっけー。

## ウェブサーバーを用意する。

Webサーバーをイメージから実行。ここは適当に用意ください。(また書くかも）
docker webは80でWeb公開しているのをホスト側8000へ転送。

```shell-session
$ sudo docker run -it --name web -p 8000:80 tsutorm/web /bin/bash
```

あとは、webサーバー内の設定でDBを見に行くようにすればおっけー。
ホスト側のhttpdともポートがかぶってないので、適当にリバースプロキシすれば外部公開も完了します。

コンテナ間のtcp接続はinspectででてくるプライベートIPアドレス間で通信可能っぽい。[コンテナ間のリンクは docker link でやるのが筋](http://qiita.com/zembutsu/items/f361cad9be500950939f)だとは思うが、初学者には敷居が高い気がする。わからんので、わかるまではtcpベースでいいと思う。

ちなみにログとかの永続化の考慮は全然できていない。
fluentdとか使ってログ収集するとかっこいいきがする。
Turbo Boostを切りバッテリー持続時間を延ばす

## 参考

* [Ubuntuで省電力設定「TLP」編](http://zaka-think.com/linux/ubuntu/ubuntu%E3%81%A7%E7%9C%81%E9%9B%BB%E5%8A%9B%E8%A8%AD%E5%AE%9A%E3%80%8Ctlp%E3%80%8D%E7%B7%A8/)
* [CPU frequency scaling - ArchWiki](https://wiki.archlinux.org/index.php/CPU_frequency_scaling)
* [Is there any way to underclock my CPU or disable turbo boost? Lenovo Y50 - Ask Ubuntu](http://askubuntu.com/questions/587601/is-there-any-way-to-underclock-my-cpu-or-disable-turbo-boost-lenovo-y50)
* [TLP - ArchWiki](https://archlinuxjp.kusakata.com/wiki/TLP)

## 方法

```bash:root権限で実施
echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo
```

## ubuntuの場合

```bash:
sudo add-apt-repository ppa:linrunner/tlp
sudo apt-get update
sudo apt-get install -y tlp tlp-rdw
```

```diff:/etc/default/tlp
- #CPU_BOOST_ON_AC=1
- #CPU_BOOST_ON_BAT=0
+ CPU_BOOST_ON_AC=1
+ CPU_BOOST_ON_BAT=0
```

```
systemctl start tlp
systemctl enabled tlp
```
i7zでCPUの実クロックや温度を取得

## 参考

* [i7z - A better i7 (and now i3, i5) reporting tool for Linux - Google Project Hosting](https://code.google.com/p/i7z/)
* [i7zなるものがあるらしい。: たわごと](http://kaoru-linux.cocolog-nifty.com/blog/2012/11/i7z-3168.html)

`cat /proc/cpuinfo`ではTurbo boost時など、実クロックがわからない。
`/sys/devices/system/cpu?/`以下から読むこともできるが面倒である。

```bash:
apt-get install -y i7z i7z_GUI
```

## 使い方

```bash:
sudo i7z
```

```
Cpu speed from cpuinfo 3092.00Mhz
cpuinfo might be wrong if cpufreq is enabled. To guess correctly try estimating via tsc
Linux's inbuilt cpu_khz code emulated now
True Frequency (without accounting Turbo) 3092 MHz
  CPU Multiplier 31x || Bus clock frequency (BCLK) 99.74 MHz

Socket [0] - [physical cores=2, logical cores=4, max online cores ever=2]
  TURBO DISABLED on 2 Cores, Hyper Threading ON
  Max Frequency without considering Turbo 3092.00 MHz (99.74 x [31])
  Max TURBO Multiplier (if Enabled) with 1/2/3/4 Cores is  31x/31x/31x/31x
  Real Current Frequency 2066.39 MHz [99.74 x 20.72] (Max of below)
        Core [core-id]  :Actual Freq (Mult.)      C0%   Halt(C1)%  C3 %   C6 %  Temp      VCore
        Core 1 [0]:       1976.06 (19.81x)      3.29    35.3       1    61.6    37      1.0208
        Core 2 [1]:       2066.39 (20.72x)      21.1    60.6       1    24.3    40      1.0208





C0 = Processor running without halting
C1 = Processor running with halts (States >C0 are power saver modes with cores idling)
C3 = Cores running with PLL turned off and core cache turned off
C6, C7 = Everything in C3 + core state saved to last level cache, C7 is deeper than C6
  Above values in table are in percentage over the last 1 sec
[core-id] refers to core-id number in /proc/cpuinfo
'Garbage Values' message printed when garbage values are read
  Ctrl+C to exit
```

## GUI版もあるが

```bash:GUI版もあるが表示される情報が少ない
sudo i7z_GUI
```
greenDAOのサンプルコードを見てみた

AndroidのORMの一つであるgreenDAOを触る前にサンプルを読んでみたので。そのメモ。

まず、なんでたくさんあるORMの中からgreenDAOをいじったのかは、
以下の投稿からgreenDAOが一番高速とのことだったので。それだけです（汗

＊単語の使い方などが違っていたら指摘していただけると嬉しいです。。。

greenDAOの生成の流れ
--

まずはここを読んでみます。
[How to get started | greenDAO – Android ORM for SQLite](http://greendao-orm.com/documentation/how-to-get-started/)

他のORMがどのように導入しているのか、わかっていないので比較はできないです。。。

ざっくり言うと、サンプルの流れは以下の**2ステップ**です！
---

1. **自分用のスキーマ定義をしたオリジナルライブラリ**を生成する。
2. 作成したライブラリをAndroidプロジェクトで使う。

サンプルは２つあり、それぞれ見ていく。

* DAOExaple
* DaoExampleGenerator

まずは、`DAOExample`
----
mainActivityである`NoteActivity`を見てみた。特別に読み込んでいるのは、以下のファイルだけだなと確認できた。

```java:NoteActivity
import de.greenrobot.daoexample.DaoMaster.DevOpenHelper;
```

なので、読み込まれている`de.greenrobot.daoexample.DaoMaster`のファイルを見てみると以下のコメントがあった。

```java:DaoMaster.java
// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
```
「greenDAOが作ったので触んないで」とのこと。

次に、`DaoExampleGenerator`
----
まず、`AndroidManifest.iml`がないから、Androidプロジェクトじゃないんだなぁ。
あと、メインクラスである`ExampleDaoGenerator`を覗いてみると以下のコメントが書いてある。

```java:ExampleDaoGenerator.java
Generates entities and DAOs for the example project DaoExample.
Run it as a Java application (not Android).
@author Markus
```
「DAOExampleのDAOsを生成するgeneratorだよ。Javaで実行をしよう。」とのこと。
なので、`ExampleDaoGenerator`を使って先ほどの`DaoMaster.java`を生成しているんだなと憶測できる。


ということでサンプル読んでみて導入方法がわかったので、今度は自分用に作成してみる。
Android SDK Tools 24.3.2でNDKビルドできない問題をかわす

# 発生するエラーについて

Android SDK Tools 24.3.2をインストールした環境でNDKビルドすると以下のエラーが出る。

```
java.io.IOException: Cannot run program "/ほにゃらら/${aapt}" (in directory "ほにゃらら"): error=2, No such file or directory
```

# 原因

Android SDK Tools 24.3.2に付属するAntのbuild.xmlが壊れている。

* aapt/dx/zipalignに関してのパスの記述が消えている（？）

# 解決方法

Android SDK内 Tools/Ant/build.xmlにaapt/dx/zipalignへのパスを設定する
自分は以下の内容を155行目からのtools location部分に書き加えました
また、23.0.0-previewの部分は適宜ご自身の環境のBuild-Toolsのバージョンに置き換えてください。

```xml

<property name="aapt" location="${sdk.dir}/build-tools/23.0.0-preview/aapt" />
    <property name="dx" location="${sdk.dir}/build-tools/23.0.0-preview/dx" />
    <property name="zipalign" location="${sdk.dir}/build-tools/23.0.0-preview/zipalign" />
```
『Stuff Goes Bad: Erlang in Anger』の紹介

紹介
====

[『Stuff Goes Bad: Erlang in Anger』](http://www.erlang-in-anger.com/)は[『すごいErlangゆかいに学ぼう』](http://www.amazon.co.jp/dp/4274069125)の原著者のFred Hebertさんが書いた本。
ライセンスは[CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/)でオンラインでPDFとして公開されている。

Erlang/OTPで構築したシステムの運用や調査に役立つ情報が色々と書かれている割には、周りで読んだことのある人が少なさそうだったので、ここで紹介してみた。

当初は要約的なものを書こうかと思っていたが、ここに書くには分量が多くなり過ぎてしまいそうだったのと、PDF自体が100ページにも満たなく内容も分かりやすいと思うので、興味のある人は冒頭のリンク先のPDFを直接読んで貰えればと思う。
(そのためこの記事自体にはほとんど有益な情報はない...)

内容的には、実システムの運用時に発生するであろう問題に対処/調査するための方法や知見がかなり網羅的に書かれていた。
例えば、三章では過負荷(典型的にはメッセージキュー溢れ)を防ぐために設計時に気をつけるべきことが、五章/七章/八章/九章では稼働中のシステムを止めずに各種調査を行う方法が、六章ではVMダウン時に出力されるクラッシュダンプを解析する方法が、取り上げられていた。
この辺りは、他に類似の情報が少ないこともあって、個人的にはかなり参考となった。

時折、Erlangの内部(ex. メモリアロケータやスケジューラ)の仕組みについての言及があるのも面白い。

また著者は[recon](https://github.com/ferd/recon)というライブラリを作っており、本書の少なくない部分がこれの使い方の説明に当てられている(あまり深入りはされていないが、recon以外にも多数のライブラリが紹介されている)。
reconは問題調査時に役立つライブラリなので、他に類似のものを使っているのでもなければ、依存ライブラリにとりあえず含めておいても悪いことはないように思う。

なお参考として最後に目次の(てきとうな)日本語訳を載せさせて貰った。
基本的に各章は独立しているので、関心がある箇所だけを読むのでも大丈夫なはず。

目次
====

導入
----

第一部: アプリケーションを書く
---------------------------

### 第一章: コードベースへの潜り方

- 1.1 生Erlang
- 1.2 OTPアプリケーション
  - 1.2.1 ライブラリアプリケーション
  - 1.2.2 レギュラーアプリケーション
  - 1.2.3 依存関係
- 1.3 OTPリリース
- 1.4 演習問題

### 第二章: オープンソースErlangソフトウェアを構築する

- 2.1 プロジェクト構成
  - 2.1.1 OTPアプリケーション
  - 2.1.2 OTPリリース
- 2.2 supervisorとstart_linkのセマンティクス
  - 2.2.1 保証について
  - 2.2.2 副作用
  - 2.2.3 例: 接続保証無しで初期化する
  - 2.2.4 要するに
  - 2.2.5 アプリケーション戦略
- 2.3 演習問題

### 第三章: 過負荷のための計画を立てる

- 3.1 良くある過負荷の原因
  - 3.1.1 error_loggerの爆発
  - 3.1.2 ロックおよびブロック操作
  - 3.1.3 予期せぬメッセージ
- 3.2 入力を制限する
  - 3.2.1 どのくらいでタイムアウトすべきか
  - 3.2.2 パーミッションを尋ねる
  - 3.2.3 ユーザが見るもの
- 3.3 データを破棄する
  - 3.3.1 ランダム破棄
  - 3.3.2 キューバッファ
  - 3.3.3 スタックバッファ
  - 3.3.4 時間に敏感なバッファ
  - 3.3.5 定常的な過負荷に対処する
  - 3.3.6 どのように破棄するか
- 3.4 演習問題

第二部: アプリケーションを診断する
------------------------------

### 第四章: リモートノードに接続する

- 4.1 ジョブ制御モード
- 4.2 remsh
- 4.3 SSHデーモン
- 4.4 名前付きパイプ
- 4.5 演習問題

### 第五章: ランタイムメトリクス

- 5.1 外観
  - 5.1.1 メモリ
  - 5.1.2 CPU
  - 5.1.3 プロセス
  - 5.1.4 ポート
- 5.2 詳細を追う (Digging In)
  - 5.2.1 プロセス
  - 5.2.2 OTPプロセス
  - 5.2.3 ポート
- 5.3 演習問題

### 第六章: クラッシュダンプを読む

- 6.1 全体図
- 6.2 メールボックス溢れ
- 6.3 プロセスが多すぎる(or 少なすぎる)
- 6.4 ポートが多すぎる
- 6.5 メモリ割り当てが出来ない
- 6.6 演習問題

### 第七章: メモリリーク

- 7.1 良くあるリークの原因
  - 7.1.1 アトム
  - 7.1.2 バイナリ
  - 7.1.3 コード
  - 7.1.4 ETS
  - 7.1.5 プロセス
  - 7.1.6 どれにも当てはまらない場合
- 7.2 バイナリ
  - 7.2.1 リークを検出する
  - 7.2.2 リークを修正する
- 7.3 メモリ断片化
  - 7.3.1 断片化を見つける
  - 7.3.2 Erlangのメモリモデル
  - 7.3.3 異なる割当戦略によってメモリ断片化を修正する
- 7.4 演習問題

### 第八章: CPUとスケジューラの高消費

- 8.1 プロファイリングとリダクションカウント
- 8.2 システムモニタ
  - 8.2.1 サスペンドされたポート
- 8.3 演習問題

### 第九章: トレースする

- 9.1 トレースの原理
- 9.2 reconを使ったトレース
- 9.3 実例セッション
- 9.4 演習問題

結論
----
electron-starterのscript/bootstrapが失敗する

# 参考

* [electron-starterのbootstrap失敗](http://kenev.net/2015/05/07/electron-starterのbootstrap失敗/)

# エラー内容

~~~
$ script/bootstrap 
Node: v0.12.3
npm: v1.4.28
Installing build modules...
npm WARN package.json eightoheight-build@ No license field.
Installing apm...
dyld: lazy symbol binding failed: Symbol not found: _node_module_register
  Referenced from: /Users/kyamada/git/electron-starter/apm/node_modules/atom-package-manager/node_modules/keytar/build/Release/keytar.node
  Expected in: dynamic lookup

dyld: Symbol not found: _node_module_register
  Referenced from: /Users/kyamada/git/electron-starter/apm/node_modules/atom-package-manager/node_modules/keytar/build/Release/keytar.node
  Expected in: dynamic lookup

/Users/kyamada/git/electron-starter/apm/node_modules/atom-package-manager/bin/apm: line 40: 70699 Trace/BPT trap: 5       "$binDir/$nodeBin" --harmony_collections "$binDir/../lib/cli.js" "$@"
~~~

# 解決法

参考記事にも記載されている通り、nodeのバージョンが新しいのが原因なので、nodebrewで`v0.10.38`をインストールします

~~~
$ nodebrew install-binary v0.10.38
$ nodebrew use v0.10.38
use v0.10.38
~~~

以下のディレクトリを削除

~~~
$ rm -rf apm/node_modules/
$ rm -rf build/node_modules/
~~~

サイド`script/bootstrap`を実行

~~~
$ script/bootstrap 
...
Installing modules ✓
Deduping modules ✓
~~~
Sayonara NSURLConnection


# NSURLConnection is deprecated

iOS7でのNSURLSessionの登場により影を潜めていたNSURLConnectionですが、iOS9でついにDeprecatedになりました。iOS6以前から開発している方は感慨深いものがあるのではないでしょうか？

NSURLConnectionと同様のことはNSURLSessionでできるので、iOS7以上であれば、この際一斉にNSURLSessionへの移行をしてしまいましょう。後発だけあり、NSURLConnectionより扱いやすいクラスです。そしてついでにリファクタリングのチャンスです！

特にNSURLConnection#sendSynchronousRequestを使って同期通信している所があればついでに非同期化もしてしまいましょう。NSURLSessionは非同期処理のみで、同期通信は意図的に用意されていません。

ということで、ついにNSURLConnectionにお別れを告げる時がきました。
長いことお世話になったクラスが非推奨になるのはちょっと無駄に寂しい気分になりますが、新しいものを使っていきましょう！
久しぶりの自分のVagrantを別のパソコンに立てたらハマった話

### 頭悪そうな記事になっていますがご了承ください

# Vagrant のSynced FolderはVM側のホームディレクトリ全体を指定してはいけないです。

synced folder でシンボリックリンクを作成することは可能ですが、ハードリンクを作成することは出来ないので、
.rbenvを使ったrubyのインストールやらが出来なくなります。
というかパッケージマネージャー系はほぼ無理になります。

しかし、シンボリックリンクが張れているせいで、もう一度一から環境を作り直そうとして、`vagrant destroy`してもdotfiles関連の設定がホスト側のフォルダに残り、生きているために、一見`destroy`出来ていないように見えます。

### これに気づくまでに3回くらい`destory`と`up`を繰り返して、`Vagrantfile`をcloneし直すところからやり直したところで気づきましたorz

なんでホームディレクトリ全体を`synced folder`にしたんだ > 昔の自分

#### オチは特にないです。とりあえず時間を浪費してすごい残念な気分になりました
ffmpegthumbnailerでサムネイル生成

ffmpegthumbnailerを使うと、動画のサムネイルが簡単に生成できる。
https://github.com/dirkvdb/ffmpegthumbnailer

OSXのHomebrewだと一発。

```
brew install ffmpegthumbnailer
```

簡単じゃないのは名前が長いことくらい。

使い方は

```
ffmpegthumbnailer -i ファイル名 -o ファイル名.jpg -t 0 -s 512
```

という感じ。

ffmpegを使うともっと高画質にサムネイルが(連番で)作れる。

```
ffmpeg -i ファイル名 -f image2 ./thumbnail/%d.jpg
```
pixi.jsでサインカーブのアニメーションを描かせてみる

こんにちは。
WebGLで2Dアニメーションを動かすためのライブラリpixi.jsを試してみました。
[pixi.js公式サイト](http://www.pixijs.com/)

ビジュアルプログラミング系のフレームワークやライブラリはいろいろありますが、
それを試すときに僕がよくすることは「サインカーブを描かせてみる」ことです。
pixi.jsでも例のごとくサインカーブを描いてみました。

#準備
pixi.jsをダウンロードします。

```
git clone https://github.com/GoodBoyDigital/pixi.js.git
```

cloneしたディレクトリを開きて/bin/pixi.min.jsを使えばOKです。

あとは[公式サンプル](http://www.goodboydigital.com/pixijs/examples/)を参考にして適当に作っていきましょう。


#実装

今回使ったファイルはこれだけ。
![スクリーンショット 2015-06-15 1.54.33.png](https://qiita-image-store.s3.amazonaws.com/0/10283/7eb8629a-066f-e1b0-6da7-223bd61e566c.png)
画像も必要ですが、WebGLの仕様上ローカルの画像は描画できないため公式サンプルの画像を流用させていただきました。 -> http://www.goodboydigital.com/pixijs/examples/4/assets/bubble_32x32.png

```html
<!DOCTYPE HTML>
<html>
<head>
    <title>pixi.jsでサインカーブ</title>
    <script src="js/pixi.min.js"></script>
</head>
<body>
  <script>
    document.addEventListener('DOMContentLoaded', start, false);

    var w = 1024;
    var h = 768;
    var starCount = 10;
    var stars = [];
    // WebGLの仕様上ローカルの画像は使えないので注意
    var texture = new PIXI.Texture.fromImage("images/myFace.png");

    function start() {
        // ステージの作成
        renderer = PIXI.autoDetectRenderer(w, h);
        stage = new PIXI.Stage;
        document.body.appendChild(renderer.view);

        // 画像オブジェクトの作成
        for (var i = 0; i < starCount; i++) {
            var temp = new PIXI.Sprite(texture);
            temp.position.x = 1;
            temp.position.y = 1;
            temp.anchor.x = 0.5;
            temp.anchor.y = 0.5;
            stars.push({ sprite: temp, x: temp.position.x, y: temp.position.y });
            stage.addChild(temp);
        }
        requestAnimationFrame(update);
    }

    // 無限ループさせて画像オブジェクトの位置を更新する
    function update() {
        for (var i = 0; i < starCount; i++) {
            // 画像オブジェクトの動き
            stars[i].sprite.position.x = (new Date().getTime() + i*100)%w;
            stars[i].sprite.position.y = h/2 + h*0.3*Math.sin(i + (new Date().getTime())/200);
        }
        renderer.render(stage);
        requestAnimationFrame(update);
    }
  </script>
</body>
</html>
```

それらしい動きになりました。
![スクリーンショット 2015-06-15 1.40.33.png](https://qiita-image-store.s3.amazonaws.com/0/10283/80288eff-64d2-0904-8ab4-4098031e0ddf.png)
動作するサンプル: http://joytomo.lolipop.jp/pixijsStudy/

簡単ですし、いろいろ使い道がありそうですね！



#参考
* [Pixi.jsを初めて触って簡単にアニメーションを作成してみた話](http://liginc.co.jp/web/js/other-js/111336) 
* [簡単アニメーション！Pixi.jsを触ってみる！（1）テキストを動かしてみる](http://qiita.com/tadfmac/items/3684489e133320cd9d75)
SCSSでランダムな値を扱う方法

Sassでランダムな値を扱いたい場合にはどうしたらよいでしょうか？ JavaScriptの`Math.random()`メソッドのように**ランダムな値を返してくれる`random()`メソッドを使うと便利です。**

#random()メソッドについて
**random()は、0以上1未満の少数、または1以上引数未満の自然数を返します**。引数を指定する場合は後者になります。使いどころは**大量のDOM要素の位置や背景色をバラバラに設定したいようなケース**です。技術デモではありますが、CSSのみでパーティクル表現を行った[SCSSでランダム値を出力してパーティクル - jsdo.it](http://jsdo.it/tonkotsuboy/6b2f)では、random()メソッドを使って各パーティクルの位置やサイズをバラバラに指定しています。

#使い方
例えば、divタグのwidth属性をrandoｍ()関数を使って定義する例を見てみましょう。引数には100を指定しています。

```scss:SCSS
div {
  width: random(100) + px;
}

div {
  width: random(100) + px;
}

div {
  width: random(100) + px;
}

```

これをコンパイルすると、以下のようにrandom()メソッドにより1以上100以下の自然数が返ってきているのが確認できます。

```css:CSS
div {
  width: 69px;
}

div {
  width: 38px;
}

div {
  width: 35px;
}
```

#使用上の注意
SCSSのrandom()メソッドは、あくまでコンパイル時にランダムな値を出力するだけです。一度コンパイルされたCSSの値は再度コンパイルしない限り変わることはありません。

#最後に
たくさんのDOM要素に不規則な値を設定したいとき、手動で全て指定するのは大変です。そんなときはSCSSのrandom()メソッドを使って効率的にコーディングすると良いかと思います。

> 参考：[Module: Sass::Script::Functions — Sass Documentation](http://sass-lang.com/documentation/Sass/Script/Functions.html#random-instance_method)
実行中のiTweenの数

iTweenにアニメーションが実行中の数が取得できるみたいです。

```csharp
using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour {

	void Start () {
		Debug.Log ("Start1: " + iTween.Count ());

		iTween.MoveTo (
			gameObject,
			iTween.Hash ("y", 4.0f, "time", 1.0f, "oncomplete", "onComplete")
		);

		Debug.Log ("Start2: " + iTween.Count ());
	}

	void onComplete () {
		Debug.Log ("onComplete: " + iTween.Count());
	}

}
```

![itween_count.PNG](https://qiita-image-store.s3.amazonaws.com/0/17192/be749afb-9fca-a1cd-066d-61cd970a6f25.png)

実行中である"Start2"のログで1
アニメーションが終了した"onComplete"のログでは0
な感じです。

考えられる使用用途としては入力制御でしょうか。
アニメーションが実行中は入力操作を行えなくするとか？
パーフェクトRuby疑問確認メモ<言語仕様>編

読んでて　ん、　となったところを検証したりした結果をまとめた備忘録。Ruby最低限かけるってだけで何年も放置してしまって曖昧な知識しかなかったのでまとめなおす事に。

Q:レシーバー省略されてる場合`self`から呼ばれる事になるけどputsとかどうなってるんですか
=

A:ObjectクラスにincludeされているKernelモジュールで定義されている。望むならオーバーライドもどうぞ。(オススメしないけど)

```.rb
class Hoge
  def puts(arg)
    p "overrided puts"
  end

  def call_puts
    puts "hogehoge"
  end
end

Hoge.new.call_puts
# => "overrided puts"
```

Q:===って何
=
A:各クラスごとに独自に実装されてる気を利かせてくれた等価性を調べるメソッド。ただそのおかげで一部非直感的な動作をすることあり。

```.rb
case "hoge".class
when String
  puts "string class"
else
  puts "non string class?"
end
# => "non string class?"
```
case whenの比較は==でなく===で、`whenの横にあるやつ === の横にあるやつ`で行なわれている。そしてClassクラスの===は[デフォルトの===](http://rurema.clear-code.com/query:%3D%3D%3D/)になっている。ので、これは非直感的な動作をする。
正しくはこう。

```.rb
case "hoge"
when String
  puts "string class"
else
  puts "non string class?"
end
# => "string class"
```
===は各クラスによってオーバーライドされてるので交換法則が成り立たない(たとえば` String === "hoge"`はtrueで`"hoge" === String`はfalse)。気を利かせてくれてるのはわかるんだけど、ちょっとこわいなあという感じ。

Q:ensure節で例外起きたらどうなるんですか
=
A:例外が起きるまで場所まで実行されて、普通に例外吐いて死にます。

```.rb
begin
  puts a
ensure
  puts "ensure exexute"
  puts b
  puts "exexute?"
end

# hoge.rb:5:in `ensure in <main>': undefined local variable or method `b' for main:Object (NameError)
#        from hoge.rb:6:in `<main>'
```

Q:配列引数の要素数と引数の数が一致しなかったら？
=
A:普通に落ちます

```.rb
def puts_two(a,b)
  puts "a: #{a}"
  puts "b: #{b}"
end

array = ["あ", "い", "う"]
puts_two(*array)

#hoge.rb:1:in `puts_two': wrong number of arguments (3 for 2) (ArgumentError)
#        from hoge.rb:7:in `<main>'
```

Q:外部ファイル読み込みでよく出てくる`File.expand_path('relative_path', __FILE__)`が出てきてないですけど、これと`require_relative`で普通に指定するのって何が違うんですか
=
A: ……使い分けがわからない。実際例えば、

```
require File.expand_path('../config/application', __FILE__)
```

```
require_relative "./config/application"
```
(RailsのRakefileより)
は等価だ。慣習的なものなのだろうか。要調査。

Q:Enumeratorというものがよくわからん
=
A:Enumeratorを返すようなメソッドを実行すると返ってくるものです。Enumeratorを返すようなメソッドというのはブロックを渡して繰り返させるようなメソッドです。`each`とか、そんなの。

```.rb
first = [1,2,3,4,5].map
second = [6,4,2,1,5].each

#<Enumerator: [1, 2, 3, 4, 5]:map>
#<Enumerator: [6, 4, 2, 1, 5]:each>
```
このEnumeratorオブジェクトは生成されたメソッドによってEnumerableになっています。なんとも上手く言えないですね。以下の例を見ればなんとなくわかるんではないでしょうか。

```.rb
text = <<STR
Apple
Bob
Charlie
STR

enum_by_char = text.each_char
enum_by_line = text.each_line

3.times do
  puts enum_by_char.next
  puts enum_by_line.next
end

#A
#Apple
#p
#Bob
#p
#Charlie
```
STR文字列に対してcharごとや、lineごとなどの別のiteratorがそれぞれのメソッドによって作られたわけですね(日本語あってるんだろうか)。

各オブジェクトやメソッドによってどのようなEnumerableオブジェクトが生成されるかは異なりますが、このようにするとiterate部分をeachメソッドに出すことができるので(`.next`)、より柔軟に色々操作できるようになるということですね。
Jekyll でページのタイトルに '#' (半角ハッシュ・シャープ) を使いたいとき

以下の例のように、実体文字参照 `&#35;` を使うかクォーテーションマークで囲みます。

```yaml:example.markdown
---
title: ハッシュタグ &#35;qiita について
permalink: /about-hashtag/
---

# some page content ...
```

```yaml:example.markdown
---
title: 'ハッシュタグ #qiita について'
permalink: /about-hashtag/
---

# some page content ...
```
メモ：Raspberry Piの基板上のLEDを別の用途に使う

Raspberry Piの基板上にはLEDが2つあって、1つは電源(赤)、もう1つはGPIO接続のLED(緑)。
参考: [Raspberry Pi Schematics](https://www.raspberrypi.org/documentation/hardware/raspberrypi/schematics/README.md)
デフォルトの状態では点灯トリガが「mmc0アクセス時」になっている。これを変更することで別の使い方ができる。

sysfs経由で制御する。

```
$ cd /sys/class/leds/led0
$ ls -la
合計 0
drwxr-xr-x 3 root root    0  6月 15 00:27 .
drwxr-xr-x 3 root root    0  6月 15 00:27 ..
-rw-r--r-- 1 root root 4096  6月 15 00:27 brightness
lrwxrwxrwx 1 root root    0  6月 15 00:27 device -> ../../../leds-gpio
-r--r--r-- 1 root root 4096  6月 15 00:27 max_brightness
drwxr-xr-x 2 root root    0  6月 15 00:27 power
lrwxrwxrwx 1 root root    0  6月 15 00:27 subsystem -> ../../../../../class/leds
-rw-r--r-- 1 root root 4096  6月 15 00:29 trigger
-rw-r--r-- 1 root root 4096  6月 15 00:27 uevent
```

現在設定されている点灯トリガの確認をする。

```
$ cat trigger
none [mmc0] timer oneshot heartbeat backlight gpio cpu0 default-on input rfkill0 phy0rx phy0tx phy0assoc phy0radio
```
デフォルトで\[mmc0\]（mmc0アクセス時に点灯）に設定されている。
heartbeatに変更してみる。

```
$ sudo sh -c "echo heartbeat > trigger"
$ cat trigger
none mmc0 timer oneshot [heartbeat] backlight gpio cpu0 default-on input rfkill0 phy0rx phy0tx phy0assoc phy0radio
```

一定間隔でチカチカと点灯する(ハートビート)ようになる。
initスクリプトなどで設定してあげれば、kernelが起動できているかどうかの確認用に使える。

点灯トリガをnoneにし、brightnessに明るさの値を設定してあげることで、点灯状態を制御できる。明るさとして設定できる最大値はmax_brightnessの値となる。

```
$ cat max_brightness
255
$ cat brightness
0
$ sudo sh -c "echo none > trigger"
$ cat trigger
[none] mmc0 timer oneshot heartbeat backlight gpio cpu0 default-on input rfkill0 phy0rx phy0tx phy0assoc phy0radio
```

GPIO接続のため単純なON/OFF制御しかできないので、brightnessに書き込む値は、0以外で点灯、0で消灯になる。

```
$ sudo sh -c "echo 255 > brightness"
$ sudo sh -c "echo 0 > brightness"
```

/boot/config.txtにDevice Treeのパラメータを記述することで、点灯トリガの初期値を変更することができる。詳しくは[/boot/overlays/README](https://github.com/raspberrypi/firmware/blob/master/boot/overlays/README)を確認すること。
(Raspberry Pi 3 については、接続の関係で下記の方法と違う設定となる。/boot/overlays/README内のpi3-act-led設定を確認すること)

点灯トリガをheartbeat状態で起動するのであれば、

```
dtparam=act_led_trigger=heartbeat
```

none状態（消灯状態）で起動するのであれば、以下のように書いておく。

```
dtparam=act_led_trigger=none
```

sysfsのLEDクラスについては、kernelソースのドキュメントディレクトリ Documentation/leds/leds-class.txt に記載がある。
他の点灯トリガについては、kernelソースのディレクトリ drivers/leds/trigger を確認する。
あるいは、kernelソース全体から 関数 led_trigger_register() 、および関数 led_trigger_register_simple() を呼び出しているところを探す。
[Ruby] Qiitaでストックした記事全文をEvernoteのノートにするRakefile

# 追記

RakefileではなくGem化しました。  
`gem install qiita2evernote` でインストールできるようになります。
使い方は変わっておらず↓のような流れで使えます。

```bash
# トークンの設定
$ q2e init

# QiitaのストックをEvernoteのノートに
$ q2e q2e
```

# 概要

Qiitaでストックした記事を、EvernoteのノートにするためのRakefileを作りました。

https://github.com/yasuhiroki/qiita-to-evernote

Evernote Web Clipper でポチポチするのが面倒くさくなり、コマンド化したくて作成しました。

次の機能を持ちます。

1 Qiitaでスタックした記事のリストを取得
2 各記事を、Evernoteのノートとして作成、アップロード。

# 動作環境

`ruby 2.2.1p85` で動作確認をしております。

# Gem

* `gem 'qiita' '= 1.2.0'`
    * Qiitaでスタックした記事を取得するために使用しています
* `gem 'evernote-thrift'`
    * Evernoteのノートを作成するために使用しています
* `gem 'oga'`
    * Qiitaの記事を、Evernoteのフォーマット（ENML）に変換するために使用しています
* `gem 'dotenv'`
    * Qiita, Evernote の API Token を設定するためｎ使用しています

# 使い方

## コマンド

コマンドをベタッと貼ると、下のようになります。

```
$ git clone git@github.com:yasuhiroki/qiita-to-evernote.git
$ bundle install --path vendor/bundle
$ bundle exec rake init
What is your qiita API token?
  - If you have not API token, let's get it from [https://qiita.com/settings/applications].
your id: yasuhiroki
token: Your Qiita API Token

What is your evernote token?
  - If you have not token, let's get it from [https://www.evernote.com/api/DeveloperToken.action].
token: Your Evernote NoteStore API Token
note store: Your Evernote NoteStore URL

Evernote default notebook
default notebook: Your Default NoteBook Name
$ bundle exec rake qiita:stock:to:evernote
ドメイン取得からDDNS設定まで is exist. skip.
いちいちbundle execしたくない 決定版 is exist. skip.

(中略)

Created Javascriptでオブジェクト指向するときに覚えておくべきこと in evernote.
Created pacoでソースビルドをパッケージっぽく管理する in evernote.
```

## 作られるEvernoteノートの例

![qiita-stock-to-evernote-001.png](https://qiita-image-store.s3.amazonaws.com/0/27201/9ddf8a5e-2ac1-42a2-ae44-5975201e6ac0.png)

* テーブル
* リンク
* 画像

といった要素は、おおよそ記録できています。

## 必要なAPI Token

* QiitaのAPIは、https://qiita.com/settings/applications
* Evernoteは、https://www.evernote.com/api/DeveloperToken.action

から取得できます

# 課題

Qiitaの記事のうち、EvernoteにUploadできるないものがある可能性があります。
詳しくは、GithubのIssueにまとめています。
少しずつ対応していく予定です。

# ライセンス

ソースはMITライセンスです。
かなり未熟な出来ですが、何かのお役に立てば幸いです。

# 参考

evernote-thrift の使用方法について、下記記事を参考にしました。
http://qiita.com/yshr04hrk/items/ac05dee1c45c1543ed00

# 蛇足

Rubyで自前のコード書かなくても他に方法があるような気がしてなりません...
「library not found for -lPods」と言われてハマりまくる

ググると色々出てくるのだけど、なかなか解決せず。
わたしの場合は、
1) 自分のプロジェクトを選択して"TARGETS"の下の自プロジェクトを選択する
2)Buld Phaseタブを選択する
3)"Link Binary With Libraries"を広げる
4)赤くなっているライブラリがあるので削除する

で、うまくいきました。

下記参考にしました。
http://stackoverflow.com/questions/23489920/error-ld-library-not-found-for-lpods-with-cocoapods
Pythonでのウェブサイトへのログイン


## 流れ
1. ログインしたいサービスのログインページに行き、ログインフォームのパラメータを調べる
2. 必要な情報をログイン用のURLに送信し、セッションを開始する

以下では、Qiitaを例として話を進める。

## パラメータの調べ方
Qiitaのログインフォームのソースは次のようになっている:

```html
<form class="landingLoginForm" autocomplete="off" data-event_name="Login with password" action="/login" accept-charset="UTF-8" method="post">
  <input name="utf8" type="hidden" value="✓">
  <input type="hidden" name="authenticity_token" value="rYIMTVoDlb4eCzh6wZIRgiPQHmrr5ts9DyykDCE9FkHM7zQxX7WAhmUhW8y0BPIA3MvzH31KCFEyiPTVk4GBzQ==">
  <input type="text" name="identity" id="identity" placeholder="Username or email" autofocus="autofocus" class="form-control landingLoginForm_identity">
  <div class="row">
    <div class="col-sm-9 landingLoginForm_passwordColumn">
      <input type="password" name="password" id="password" placeholder="Password" class="form-control">
    </div>
    <div class="col-sm-3 landingLoginForm_submitColumn">
      <input type="submit" name="commit" value="Login" class="btn btn-primary btn-block" data-disable-with="Login">
    </div>
  </div>
  <div class="landingLoginForm_forgotPassword">
  	<a href="https://qiita.com/sessions/forgot_password">Forgot Password?</a>
  </div>
  <div class="help-block js-email-invalid-message" style="display: none"></div>
</form>
```

これより、ログインボタンを押すと```qiita.com/login```に

1. ```utf8```
2. ```authenticity_token```
3. ```identity```
4. ```password```

というデータが送信されることがわかる。このうち、```utf8```は規定値が与えられているのでそれを利用し、```authenticity_token```はアクセスごとに値が与えられるのでそれを取得する必要がある。残りの```identity```と```password```には手打ちで情報を入力する。

## サイトとの通信
Pythonには[requests](http://docs.python-requests.org/)というHTTP通信のための便利なライブラリがあるので、それを使うのが無難。ログイン後はsessionのための値を保存する必要があるので、```Session```オブジェクトを経由して通信する。

また、上述のようにログイン前に```authenticity_token```を取得しておく必要があるので、最初にトップページにアクセスし[BeautifulSoup](http://www.crummy.com/software/BeautifulSoup/)で値を取得する。

Qiitaにログインするサンプルスクリプトを以下に示す:

```python
from bs4 import BeautifulSoup
import requests

payload = {
    'utf8': '✓',
    'identity': 'username or email',
    'password': 'secret'
}

# authenticity_tokenの取得
s = requests.Session()
r = s.get('https://qiita.com')
soup = BeautifulSoup(r.text)
auth_token = soup.find(attrs={'name': 'authenticity_token'}).get('value')
payload['authenticity_token'] = auth_token

# ログイン
s.post('https://qiita.com/login', data=payload)

# 以下でログイン後に可能となる処理をおこなう
...
```

## 注意
以上のような素朴な方法が上手くいかない場合もあるので(例えば、Googleへとログインするには2段階の認証作業が必要)、その都度HTTPのヘッダー情報などを細かくチェックしていく必要がある。
WindowsのJuliaから呼べるようなCライブラリの共有ライブラリ（DLL）を作る

## やりたいこと

- Windows版Juliaから問題なく呼べるような、Cライブラリの共有ライブラリ（DLL）をコンパイルする

## 前提

- Windows版Juliaは、32bit版と64bit版のニ種類がある
- それぞれ、mingw 32/64 bit (thread `win32`) を使ってビルドされている

## まとめ

- DLLをビルドする環境は、WindowsでのJuliaコンパイル環境と揃える必要が（当然）あるので、注意が必要
- visual studio はだめです
- mingw 32/64bit, thread win32 (**NOT posix**) のgcc/g++でOK
- 基本的には、[README.windows.md | JuliaLang/Julia](https://github.com/JuliaLang/julia/blob/1356899b3f21c9ebb9d1788876e13aa5c2fab728/README.windows.md#compiling-with-mingwmsys2)を参考にすればOK

### コンパイラはどこで手にいればいいのか

現状のJuliaで使われているコンパイラと同じものは、

#### 64bit

```
curl -Ls -O https://sourceforge.net/projects/mingw-w64-dgn/files/mingw-w64/mingw-w64-bin-x86_64-20140102.7z
```

#### 32bit

```
curl -Ls -O https://sourceforge.net/projects/mingw-w64-dgn/files/mingw-w64/mingw-w32-bin-i686-20140102.7z
```

で手に入ります。参考: [msys_build.sh | JuliaLang/julia](https://github.com/JuliaLang/julia/blob/1356899b3f21c9ebb9d1788876e13aa5c2fab728/contrib/windows/msys_build.sh)

## ハマりどころ

- threadがposixのmingwや、msvcでビルドしたDLLをJuliaから使おうとすると（正確には`dlopen`を呼ぶと）、`%1 is not a valid win32 application` というあまりinformativeでないメッセージに悩まされることになります…
- [README.windows.md](https://github.com/JuliaLang/julia/blob/1356899b3f21c9ebb9d1788876e13aa5c2fab728/README.windows.md#compiling-with-mingwmsys2)の通りにやると、`mingw-builds`のインストールでコケる場合があるっぽい。少なくとも僕はインストールできませんでした… [参考](https://sourceforge.net/p/mingw-w64/bugs/413/)。まとめに書いたコマンドからダウンロードして、7zを解凍するだけでOKです。また、[ここのリンク](https://sourceforge.net/p/mingw-w64/mailman/message/32988620/) からmingwをインストールして試してみましたが、問題なさそうでした。
- AppVeyorにデフォルトでインストールされているmingwは、windows版Juliaのコンパイルに使われているものとは互換性がないので注意。参考: [appveyor.yml | JuliaLang/julia](https://github.com/JuliaLang/julia/blob/1356899b3f21c9ebb9d1788876e13aa5c2fab728/appveyor.yml#L41-L42)

### 例. AppVeyorでDLLをビルドするよう用のシェル

```sh:msys_build.sh
#!/bin/sh

set -e

if [ "$ARCH" = x86_64 ]; then
  bits=64
else
  bits=32
fi

f=mingw-w$bits-bin-$ARCH-20140102.7z
if ! [ -e $f ]; then
    echo "Downloading $f"
    curl -LsSO https://sourceforge.net/projects/mingw-w64-dgn/files/mingw-w64/$f
fi
7z x $f > /dev/null
export PATH=$PWD/mingw$bits/bin:$PATH

# 適当なビルドコマンド
# make or 
# waf configure && waf build 等
```

julia互換のmingwをダウンロードして、パスを通す、ってことをやっています。僕が書いた例の詳細は、以下のリンクを参考にどうぞ

- [appveyor.yml | r9y9/WORLD](https://github.com/r9y9/WORLD/blob/1355ca7dd501601fa0e5425a33e4580d6d4c8e2a/appveyor.yml)
- [msys_build.sh | r9y9/WORLD](https://github.com/r9y9/WORLD/blob/1355ca7dd501601fa0e5425a33e4580d6d4c8e2a/msys_build.sh)


おわり

## 参考

- [README.windows.md | JuliaLang/julia](https://github.com/JuliaLang/julia/blob/1356899b3f21c9ebb9d1788876e13aa5c2fab728/README.windows.md)
- [msys_build.sh | JuliaLang/julia](https://github.com/JuliaLang/julia/blob/1356899b3f21c9ebb9d1788876e13aa5c2fab728/contrib/windows/msys_build.sh)
- [r9y9/WORLD](https://github.com/r9y9/WORLD)
【Android】webViewで拡大縮小機能を実装する

#概要
AndroidのwebViewで拡大縮小機能を実装した時のメモ
レイアウトなどのxmlの編集はナシ。
1行を追加するだけ。

#メッソド　：setBuiltInZoomControls
```java
myWebView.getSettings().setBuiltInZoomControls(true);
```
このメソッドをMainActivity.javaにて記述する。
引数 ***true***で動きます。

```java
public class MainActivity extends Activity {

    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        //レイアウトで指定したWebViewのIDを指定する。
        WebView  myWebView = (WebView)findViewById(R.id.webView1);
        myWebView.getSettings().setUseWideViewPort(true);
        myWebView.getSettings().setJavaScriptEnabled(true);
        myWebView.setScrollBarStyle(WebView.SCROLLBARS_INSIDE_OVERLAY);
        //リンクをタップしたときに標準ブラウザを起動させない
        myWebView.setWebViewClient(new WebViewClient());
        //最初にGoogleのページを表示する。
        myWebView.loadUrl("http://google.co.jp");
        //jacascriptを許可する
        myWebView.getSettings().setJavaScriptEnabled(true);

        /*ズーム機能*/
        myWebView.getSettings().setBuiltInZoomControls(true);


    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
```
Objective-Cでジェネリクスが使えるようになるみたい - Xcode beta7


**追記：
すでに他の方がまとめてくださっていました！**

Xcode7時代のObjective-C
http://qiita.com/cross-xross/items/54b10b93e9026a02e356

---

>Generics. Allow you to specify type information for collection classes like NSArray, NSSet, and NSDictionary. The type information improves Swift access when you bridge from Objective-C and simplifies the code you have to write.

https://developer.apple.com/library/prerelease/ios/documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_7_0.html

（英語は弱いので）とりあえずXcode beta7でコード書いてみた。

```objc
@property (nonatomic, strong) NSMutableArray<NSString *> *strings; // Generics

...

self.strings = @[].mutableCopy;

// add
[self.strings addObject:@"1"];
[self.strings addObject:@(1)]; // Warning: Incompatible pointer types sending 'NSNumber *' to parameter of type 'NSString * __nonnull'

// get
NSString *string = self.strings[0];
NSNumber *number = self.strings[0]; // Warning: Incompatible pointer types initializing 'NSNumber *' with an expression of type 'NSString *'

// print
NSLog(@"string = %@", string);
NSLog(@"number = %@", number);
```

確かにGenericsが有効になっていて、間違った型を与えたり要求したりするとコンパイラが警告を出してくれる。（初期化では間違った型を与えても警告でなかったりして、完全ではなさそうだけれど）

SwiftとObjective-Cで共存するときに便利って話なのだろうけれども、Objective-Cだけで利用するのもありだと思った。
WOL(Wake On LAN)でハマりそうなポイント


## はじめに
WOLというのは、遠隔からマジックパケットを送って、パソコンの電源をONにする機能のことです。別にWindowsでなくてもできるし、どのOSにも対応しています。これは、パソコンのハード機能なので。

どのような仕組みになっているかというと、詳しい説明は省きますが、電源(特に通電)とパケットの仕組みになっています。具体的には、電源で言うと、S1,S3,S5という構造で、各々が通電されているならば、WOLを有効に動作させることができます。

ちなみに、S1,S3まではコンピュータのスリープやスタンバイ時の状態が対応します。S5はシャットダウンの状態が対応するわけですね。これを`ACPIステート`と言います。

ここで、知っておかなければならないのは、S5であるパソコンの電源を切っている時でも、通常は電力を微力ながら消費しているってことです。通電されている。そして、WOLはこの特徴を使って、パソコンの電源をONにする。

しかし、この通電を、例えば、BIOSメニューの設定などから変更し、切ることもできます。

## WOLで嵌りそうなポイント 

###BIOSメニューで以下の項目などによって、WOLを有効にしているか?

- WOL、Wake On LAN、Remote Wakeup などを [Enable]

- PCI Boot Device, PCIE Device などを [Enable]

###BIOSメニューで節電モードをOFFにできているか?

- Deep Sleep [Disabled]

###WindowsのLANアダプタの設定ができているか?

デバイスマネージャーから設定します。LANアダプタのデバイスを選択すればわかります。`電源管理`, `詳細設定`にて。

あと、LANアダプタのMACアドレスを確認しておいてください。マジックパケットを送るのに必要です。

確認方法は、`ipconfig /all`です。

## マジックパケットのルーター超え

WANからWOLを使って、コンピュータの電源をいれることは可能なのかというと、可能です。

これは、直接送りつけてということを意味し、WANからLAN内のコンピュータを遠隔操作して、マジックパケットを送るということではありません。

マジックパケットの仕組みは単純で、値自体も簡単です。具体的には以下の様な感じになります。

> IPヘッダに続いて、0xffffffffffff（6bytes）と、WOL対象コンピュータのネットワーク・アダプタのMAC アドレス（6bytes）が16回連続する102bytesのデータを持つUDPデータグラムとなっている

http://www.atmarkit.co.jp/ait/articles/0904/08/news117.html

↓↓↓↓↓↓↓ あなたの記事の内容
したがって、0xffffffffffffを6個、MAC Addressを16個書いたデータをUDPで送ったらいいよいらしい。起動してないマシンは、当然ながらローカルIPをもらってないので、ブロードキャストアドレスに送ればいいらしい。もちろん、ルータの設定で特定のポートへのアクセスを特定のマシンにつなげるっていう設定をしてもよいと思う。
───────
したがって、0xffffffffffffを6個、Mac Addressを16個書いたデータをUDPで送ったらいいよいらしい。起動してないマシンは、当然ながらローカルIPをもらってないので、ブロードキャストアドレスに送ればいいらしい。もちろん、ルータの設定で特定のポートへのアクセスを特定のマシンにつなげるっていう設定をしてもよいと思う。
↑↑↑↑↑↑↑ 編集リクエストの内容
  
##Linuxで使う場合

```bash:サーバー
$ sudo pacman -S ethtool

# wake up lanは、bならoff,gならonです
$ ethtool net0 | grep Wake-on
Wake-on: b

$ sudo ethtool -s net0 wol g

# 永続的に設定する
$ sudo vim /etc/udev/rules.d/50-wol.rules
ACTION=="add", SUBSYSTEM=="net", KERNEL=="net*", RUN+="/usr/bin/ethtool -s %k wol g"
```
https://wiki.archlinux.org/index.php/Wake-on-LAN

```bash:クライアント
$ sudo pacman -S wol

$ wol <MACADDRESS>
```

##追記

どういうわけかルータでポート変換した上で、WANからマジックパケットを送り(この時点では電源は入らない)、次に、WANからSSH接続を試みると、WOLが有効に動作し、コンピュータの電源がONになる動作を確認しました。

他のコンピュータでも確認できるかどうかわかりませんが一応報告です。
Androidで画面を回転させた時にActivityがリセットされてしまうトラブルを回避

#概要
Androidで画面を回転させた時にActivityがリセットされてしまうトラブルを回避する方法のメモ。

#内容
AndroidManifest.xmlのactivityに

```xml
android:configChanges="orientation|screenSize"

```
を加える。

**↓変更後↓**

```xml
<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    
    android:configChanges="orientation|screenSize">
    <!----------------↑------変更部分---------------------->
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
```

のようになります。
ssh

# ssh tunnel
## localport forwarding
### see https page which is prohibited to be seen from outside

```
ssh -i <private key path> -L <local machine port>:localhost:443 <ssh user>@<https site ip>
```

### ssh remote host that denies the direct connection from the client
```
ssh -i <private key path> -L <local machine port>:<remote host that denies the direct connection>:22 <ssh user>@<ssh server>
```

## remote port forwarding
### connect to intra site from remote host
```
ssh -i <private key path> -R <forwarding port>:<intra site url>:80 <remote site>
```

## reference
https://chamibuddhika.wordpress.com/2012/03/21/ssh-tunnelling-explained/


#ssh agent
## add private key on the agent
```
ssh-add ~/.ssh/bitbucket
```
## show registered ssh keys on the agent
```
ssh-add -l
```
Javaライブラリ「OkHttp」

# Okhttp
Androidアプリの開発者に人気のJava用ライブラリ
効率的なHTTPリクエストが可能


```lang:OkHttpを利用するJavaプログラム
import com.squareup.okhttp.*;
import java.io.IOException;

public class HttpReqTest {
    public static void main(String args[]) {

        OkHttpClient client = new OkHttpClient();  ------(1)

        Request request = new Request.Builder()
        .url("http://example.com").build(); ------(2)
        
        Call call = client.newCall(request); -----(3)
        calll.enquene(new Callback() {
            @Override
            public void onFailure(Request request, IOException e) {
               // リクエスト失敗した時の処理
            }

        @Override
        public void onResponse(Response response) throws IOException {  ----(4)
            if(!response.isSuccessful()) {
                // エラーが返ってきた時の処理
            }
　　　　　   // response.body()にレスポンス本体が戻ってくる
　　　　　　 System.out.println("response:" + response.body().string()) -----(5)
        }
     });
   }
}
```

(1)でクライアント、(2)でリクエスト先などを指定したオブジェクトを作成
(3)、(1)で作成したOkHttpClientインスタンスのnewCallメソッドを使ってリクエスト先を登録
(4)のonResponseメソッドによって処理結果を取得します
(5)bodyメソッドによって中身を取り出し、表示

実行すると、Webサイト「http://example.com」 にHTTP接続し、サーバー状のHTML文書を取得します。
Deep Learning のフレームワーク Chainerをインストールしてみた

PFN/PFIが公開した[Chainer](http://chainer.org "Chainer")をインストールしてみた

# Chainerとは
Chainer は、ニューラルネットを誤差逆伝播法で学習するためのフレームワークです。以下のような特徴を持っています。

* Python のライブラリとして提供（要 Python 2.7+）
* あらゆるニューラルネットの構造に柔軟に対応
* 動的な計算グラフ構築による直感的なコード
* GPU をサポートし、複数 GPU をつかった学習も直感的に記述可能

[詳細はこちら](http://research.preferred.jp/2015/06/deep-learning-chainer/)

# インストール
## インストール環境
* OS:Ubuntu 14.04 LTS
  *  [trusty-server-cloudimg-amd64-vagrant-disk1.box](https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box)を使用

## インストール手順
* Python関連パッケージをインストール  
```
# apt-get install python-devel
```
* pipをインストール  
```
# apt-get install python-pip
```
* chainerをインストール  
```
# pip install chainer
```  

これでおわり

##  感想
ものすごく簡単にインストールができた
次はexampleを使ってなにかやってみたい
Dockerのコンテナにファイルをコピーする

CentOS7上に作成したDockerのAptana Studio3をインストールしたかったので、
その一環でホスト側でダウンロードしたAptanaStudioのZipファイルをDockerの
コンテナにコピーする方法を覚書で残してみます。

## Aptana Studio3のインストーラをダウンロードする ##
インストーラは、[こちら](http://www.aptana.com/products/studio3/download.html)のサイトより取得しました。

ダウンロードしたファイルは任意のフォルダに保存しました。

## ホスト側からダウンロードしたファイルをdocker側にコピーする ##
以下のコマンドにて、ファイルのコピーを行いました。

```
docker exec -i [コンテナ名] /bin/bash -c 'cat > /root/Aptana.zip' < /root/ダウンロード/Aptana_Studio_3_Setup_Linux_x86_64_3.6.1.zip
```

ちょいっと解説を付け加えさせて頂きます。

```
'cat > /root/Aptana.zip'
```

この箇所はdockerのコンテナ上のパスと保存されるファイル名を表しています。

```
< /root/ダウンロード/Aptana_Studio_3_Setup_Linux_x86_64_3.6.1.zip'
```

で、この箇所がコピー元のパスとファイル名を表しています。

## コピーしたZipファイルを解凍する ##
解凍自体は普通にunzipコマンドを実行すればよいのだが、作成したばっかりのコンテナにはunzipがインストールされていないみたいなので、以下のコマンドにてunzipをインストールしました。

```
yum -y install unzip.x86_64
```

unzipインストール後に以下のコマンドにてコピーしたZipファイルを解凍しました。

```
unzip Aptana.zip
```

## 補足 ##
上記の方法にてAptana Studioの回答自体はできたのですが、実際にAptanaStudioをGUIで実行しようとしていますが、未だに実行方法を模索しております。
実行方法が分かりましたら、また投稿しようと思います。
ちなみに、ファイルコピーのコマンドにあった「'cat > '」や「-c」の定義がいまいち掴めていないので、これも分かったら更新したいと思います。
Windows Server 2012 R2 で日本語キー配列が認識されない問題への対処

AWS EC2 の Windows Server 2012 R2 をリモートデスクトップ経由で使ってみたが、デフォルトだと日本語キー配列がうまく認識されないっぽい。

## 試した環境
- サーバ … AWS EC2 / Windows Server 2012 R2
- クライアント … ThinkPad X1 Carbon / Windows 7 Home Premium / 日本語キーボード

## 最低限設定しておくと良いもの
### Control Panel - Change date, time, or number formats
- Administrative タブ
    - Change system locale... Current system locale = Japanese (Japan)

これで日本語キー配列が認識される。

## さらに設定しておくと良いもの
### Control Panel - Change date, time, or number formats
- Formats タブ
    - Format = Japanese (Japan)

- Location タブ
    - Home location = Japan

日時の表示形式等。

### Control Panel - Change the time zone
- Date and Time タブ
    - Time zone - Change time zone... - Time zone = (UTC+09:00) Osaka, Sapporo, Tokyo

タイムゾーン等。

## デバイスマネージャ周りの話
ググった情報だとキーボードのドライバを入れ替えればうまくいく等という情報があったが、自分が試した限りではそれで挙動が変わることは無かった。
PHP7でpreg_replaceのe修飾子の挙動が変わるので要注意です。

# TL;DR

* PHP5.5からpreg_replaceのe修飾子はDEPRECATED扱いとなっていたが、一応動いてはいた。
* PHP7では、preg_replaceのe修飾子を使うと、Warningを吐きつつNULLを返す。
* PHP5.5時代にpreg_replaceに`@`を書いてお茶を濁した人は、PHP7で地雷を踏む。

# 解説

このコードをご覧ください。

```php:a.php
$string = "hello world";
$string2 =  preg_replace('/(world)/e', "strtoupper('\$1')", $string);

var_dump($string2);
```

"hello world"のうちの"world"を大文字に変換するコードです。

# PHP5.5/5.6の場合

php5.5やPHP5.6だと実行結果はこうなります。

```
PHP Deprecated:  preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /Users/DQNEO/a.php on line 3

string(11) "hello WORLD"
```

Deprecatedが出つつも、ちゃんと適用されて"world"が大文字の"WORLD"になります。

# PHP7.0.0alpha1の場合

```a.php
PHP Warning:  preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /Users/DQNEO/a.php on line 3

NULL
```

おわかりでしょうか。
戻り値がNULLに変わっています。

# @でお茶を濁してた人は致命的バグになる

PHP5.5時代に、「Deprecatedが出なければそれでいいや」と考えて

```
@preg_replace
```
と頭に`@`をつけてごまかした人は、PHP7時代になるとWarningが出ないまま戻り値がNULLに変わってしまうので、わかりにくいバグの原因になることでしょう。

# まとめ

preg_replace_callback使え