OmniAICreator/Qiita-1.07M huggingface dataset:
2TB以上のHDDをCentOSにマウントする方法

解析サーバをCentOS6.7にして、バックアップ用にHDDを追加した時のメモです
基本的にOSが異なってもやることは同じです

## パーティション作成
SATAに3TB HDDを接続して、マシンを起動
`parted -l`で確認

```shell-session
$ sudo parted -l
~~
エラー: /dev/sdb: ディスクラベルが認識できません。
~~
```

2TB超だとGPTを使用することになるので、ラベルを付けます

```shell-session
$ sudo parted /dev/sdb
(parted) mklabel gpt
(parted) p                                                                
モデル: ATA WDC WD30EFRX-68E (scsi)
ディスク /dev/sdb: 5860533168s
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt

番号  開始  終了  サイズ  ファイルシステム  名前  フラグ
```

全容量をext4、１パーティションとして、切ります

```shell-session
(parted) mkpart primary ext4 0% 100% 
(parted) p
モデル: ATA WDC WD30EFRX-68E (scsi)
ディスク /dev/sdb: 5860533168s
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt

番号  開始   終了         サイズ       ファイルシステム  名前     フラグ
 1    2048s  5860532223s  5860530176s                    primary
```

これでパーティションが作成できましたので`parted`を抜けます
`/etc/fstab`の更新を促してくれるpartedさんに突っ込まずに入られない

```shell-session
(parted) quit                                                             
通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。
```

ちなみにパラメータ指定を0%ではなく0とすると警告が出るので注意してください

```shell-session
(parted) mkpart primary ext4 0 100%
警告: 0s から 5860533167s までのパーティションを指定されました。          
可能な中で最も近いものは 34s から 5860533134s になります。
それでもかまいませんか？
はい(Y)/Yes/いいえ(N)/No? y                                               
警告: The resulting partition is not properly aligned for best performance.
無視(I)/Ignore/取消(C)/Cancel? c
```

## フォーマット
パーティションが作れたので、ext4でフォーマットします


```shell-session
$ sudo mkfs.ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=1 blocks, Stripe width=0 blocks
183148544 inodes, 732566272 blocks
36628313 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
22357 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
        102400000, 214990848, 512000000, 550731776, 644972544

Writing inode tables:  8506/22357
```

##  マウントと自動マウントの設定
終わったらまずマウントポイントを作成して、そのあとHDDをマウントします

```shell-session
$ sudo mkdir /mnt/backup3TB
$ sudo mount -t ext4 /dev/sdb1 /mnt/backup3TB/
$ sudo mount
/dev/mapper/vg_linux3-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/sdc1 on /home type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/sdb1 on /mnt/backup3TB type ext4 (rw)
```

最後に`/etc/fstab`に追記しておきます

```shell-session
/dev/sdb1/          mnt/backup3TB                ext4    defaults        0 0
```

以上で完了です
backbone.stickit の select がうまくバインドされないとき

[backbone.stickit](https://nytimes.github.io/backbone.stickit/) で、`<select>`に数値型の値をバインドさせようとすると、単純にはうまくいきません。

具体的には、テンプレートが

```html
<select id="category">
  <option value="1">カテゴリ1</option>
  <option value="2">カテゴリ2</option>
</select>
```

で、JavaScript が

```js
var Model = Backbone.Model.extend({
  defaults: {
    categoryId: 2
  }
});

var View = Backbone.View.extend({
  el: document,

  bindings: {
    '#category': 'categoryId'
  },

  render: function() {
    this.stickit();
    return this;
  }
});

$(function() {
  var model = new Model();
  var view = new View({ model: model });
  view.render();
});
```

のようなとき、カテゴリ2 が選択されません。
categoryId が、文字列の `"2"` ならばバインドされますが、属性の型は変えたくない場合が多いと思います。

# 対処

`<option>` に `data-stickit-bind-val` 属性を追加することで解決します。

```html
<select id="category">
  <option value="1" data-stickit-bind-val="1">カテゴリ1</option>
  <option value="2" data-stickit-bind-val="2">カテゴリ2</option>
</select>
```

`value` の値と同じですが、`data-stickit-bind-val` は型変換されるので、数値を書いておくと数値型としてバインドされるようになります。
onlineTool > 状態遷移図作成 > FSM designer

状態遷移図をオンラインで作成できる。
http://madebyevan.com/fsm/

- PNG / SVG / Latex へのExportが可能
- PNGでExportしたら背景が透明のファイルになった
- 過去の編集内容はブラウザのキャッシュとして保持（しているようだ）

![test.png](https://qiita-image-store.s3.amazonaws.com/0/32870/866fbb70-0827-9b19-3c5d-09f9c45059cb.png)


以下の使い方がよさそう。
- A: 残しておきたい方: 通常の作成を行う。ブラウザのキャッシュに残る
- B: 一時的に作成したい方: Chromeのシークレットウィンドウで開いて作業

Aの作業中にBの作業を割り込みで行う場合のイメージ。


作者はWebGL Waterの人だった。
SVGが縦に伸びて高さを取る

# 縦に伸びる
Android4.2系にて、SVG画像がやたらめったら空白をとり、縦に長く伸びるという事象にぶち当たりました。
flexboxを使っていたので、 ベンダープレフィックスのつけ忘れかと思い、少しハマってしまったので覚書。

## 発生するOS
特にiOS 5.xやAndroid 4.x
（今回はAndroid4.2で発生）

## 原因
SVG作成時の保存形式が悪い

## 解決法
イラレでのSVG書き出し方法で
詳細設定にあるレスポンシブのチェックを外す
Unityの便利なAsset 〜番外編〜

### **[こちらに移転しました](https://qiita.com/tempura/items/856e369d3e953e5829e6)**

# 最後に
あくまで持論ですが、Assetって便利な分、もろ刃の剣だと思ってる。Asset作成者はどこの誰か分からないし、いついきなり更新が止まってもおかしくない。また、Unityのバージョンアップ等で動かなくなったAssetは更新を待たないといけない。自分はiOSの64bit対応でまさに冷や汗をかいたし。。。

Assetに頼りすぎてはいけないと思う。開発効率が段違いなので、使うなってことは言わないが、導入は慎重に検討すべきだと思う。例えば[NGUI](https://www.assetstore.unity3d.com/en/#!/content/2413)みたいな誰もが使うようなAssetは皆が使ってるので信頼性があるし、使えなくなったら皆困るのでいい(受け売りですがｗ)。導入前の調査はもちろんのこと、いろいろ使って、最終的に絞るのも検討すべきかと。

Assetって、大抵英語だし、買ったはいいけど意図した挙動じゃなかったり、買うのが怖いんだよね。。。だから事前に少しでも情報があると安心する。
もっと情報が増えるといいなぁ・・・(´・ω・`)ソンナキジ
Kotlin M14 -> 1.0.0-betaでやったこと

# size() -> size

`List().size() => List().size` に変更

# join => jointToString()

`arrayOf("a","b","c").join(",") => arrayOf("a","b","c").joinToString(",")`

# keySet() -> keys

`Set().keySet() -> Set().keys`

# remove(Int) -> removeAt(Int)

`listOf("1","2","3").remove(1) -> listOf("1","2","3").removeAt(1)`

# length() -> length

`"hoge".length() -> "hoge".length`
iTerms2とGoogle日本語入力の切り替えを滞りなくする方法

## 問題

iTerm2上でGoogle日本語入力を切り替えようとすると、セミコロンや改行が入ってしまう。

## 解決策

![image](https://qiita-image-store.s3.amazonaws.com/0/4244/8f788dc8-a1fe-6ad3-86fc-e807492ffa1e.png)

こんな感じで`Global Shortcut Keys`に`^⇧:`と`^⇧J`を`Do Not Remap Modifiers` と設定する

## 情報源

[iTerm で Ctrl + Shift + J でかな入力変換する方法](http://tech.portalshit.net/2012/02/28/chage-input-mode-in-iterm-with-ctrl+shift+j/)

ありがとうございました。
background-imageを横幅100%で綺麗に可変表示させる(レスポンシブ、スマホサイト制作時とかに)

レスポンシブやスマホサイトを制作していて、
背景画像を可変対応させたい時があります。
みなさんどうやっているでしょうか。


```css:sample

/* 例:幅640px高さ360pxの画像の場合 */

#targetElm{
    height: 0;
    /* 表示画像の高さ ÷ 表示画像の幅 × 100 */
    padding-top: 56.25%;
    background: url('bg.png') 0 0 no-repeat;
    background-size: contain;
}
```

高さを0に指定して、
paddingで領域を確保。

>paddingの高さの計算については下記の計算式で求められます。
表示画像の高さ ÷ 表示画像の幅 × 100


非常に便利でよく使用しているのですが、
計算式が独特なのでいつも他の知らない人が見てもわかるように

```css:sample
/* 表示画像の高さ ÷ 表示画像の幅 × 100 */
padding-top: 56.25%;
```

とコメントを入れています。
また計算もめんどうなので、他に方法ないかなと思ってます。

でも便利です。
おすすめのCUI環境～GitBashとConEmu～

「おすすめのCUI環境」と言いつつ覚書ですが。

個人的にWindowsが使い慣れていて好きですが、
Linuxコマンドの方が大好きだったりします。
ということで、

・Git for Windows
・ConEmu

以上の２つをいれて快適なCUI環境を作っております。


# Git for Windows

いわずもがな、Gitクライアントのセットなわけですが
Linuxコマンドも結構入っているので、インスコすると
lsコマンド・sshコマンド等々が使えるようになります。
Gitをコマンドで操作してみようかと思っていればこちらを導入することをお勧めします。

また、この中にGitBashというシェルも入っています。
Gitをコマンドで操作するのであればこのシェルは必須かと。
ただし、このシェルはペーストの操作がマウスでの操作になるので
非常にもったいない。マウス使いたくない。
ということでConEmuを導入します。

# ConEmu

コマンドプロンプト、PowerShell、Gitbash等々のシェルを一つのウィンドウで扱える
フリーソフトです。カラーリングの設定も細かくできてペーストの操作は、マウスの右クリック又はCtrl + Vでできます。

## ConEmu設定

ConEmuの右上のメニューから「Settings...」を選択し設定画面を開きます。

### ConEmu起動時に常にGitBashを開くようにする

[Start up]を選択し、右側のラジオボタンの中から[Specified named task]を選択
プルダウンから「Git bash」を選択する。

### GitBashの設定（ホットキーと作業ディレクトリの指定）

[Start up] -> [Tasks]を選択すると右側にシェルの一覧が出てくるので[Git bash]を選択。 
HotkeyにGitbashを新しく立ち上げるときのショートカットキーを設定（私はF1にしています）
テキストエリアに以下のテキストを貼り付け。

```
"%ProgramFiles%\Git\bin\sh.exe" --login -i -new_console:d:C:\Project\public_html
```

`"%ProgramFiles%\Git\bin\sh.exe"` はご自身のGitbashの保存先に書き換えてください。

`d:C:\Project\public_html` はご自身の作業ディレクトリに書き換えてください。


後は適当にいじっていくと楽しいかと思います。
設定ファイルをエクスポートすることもできるので、結構便利かと。

# ショートカット機能について

設定画面の「Keys & Macro」にショートカットのキー割り当てが載っています。
但し、Appsとか「Windowsってどうするん・・・」というキー割り当てがされています・・・
ConEmu使いやすく感じてきたら、この辺をもカスタムした方がよさそうですね^^

このセクションではショートカットキー割り当てをして、便利だと感じた機能を追記します。

## アクティブタブに名前を付ける(Description:Rename active tab)

恐らく初期割り当てキーが「Apps + R」とか。
私は「Alt + R」にしました。

# ConEmu上でのコマンド

## ビューの右側に新規タブを追加

Ctrl + Shift + E

# 複数行のクリップボード貼り付け（ペースト）

ConEmuデフォルトの設定だと、複数行のコード貼り付けが一行に変換されてしまいます。
これは設定で回避可能です。

設定画面の「Keys & Macro > Paste」を開くと「Paste mode#s(Ctrl+V)」という設定があります。
Single lineが選択されていると思うのでMulti linesを選択しましょう。
electronについて、appの作成まで5分で把握する

## 概要
* ちまたで流行りの electronについて、試してみました
* 設定からappの作成まで、最低限の確認をやりました

## この記事のターゲット
* electronにて appを作成する際に、最低限何が必要が、5分で知りたい人

## 必要なpackageのinstall

```
npm install -g electron-prebuilt 
npm install -g electron-packager
```

## 初期設定

```
# 必要なファイルの配置
mkdir electron_sample
cd electron_sample
npm install
touch main.js
touch index.html

#配置確認
[@electron_sample]$ tree
.
├── index.html
├── main.js
└── package.json
```

## コーディング
下記URLの通りです.
http://electron.atom.io/docs/latest/tutorial/quick-start/

### main.js
```main.js
var app = require('app');
var BrowserWindow = require('browser-window');
require('crash-reporter').start();

var mainWindow = null;

app.on('window-all-closed', function() {
  if (process.platform != 'darwin') {
    app.quit();
  }
});

app.on('ready', function() {
  mainWindow = new BrowserWindow({width: 800, height: 600});
  mainWindow.loadUrl('file://' + __dirname + '/index.html');
  mainWindow.openDevTools();
  mainWindow.on('closed', function() {
    mainWindow = null;
  });
});
```

### index.html
```index.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Hello World!</title>
  </head>
  <body>
    <h1>Hello World!</h1>
    We are using Node.js <script>document.write(process.version)</script>
    and Electron <script>document.write(process.versions['electron'])</script>.
  </body>
</html>
```

### package.json
```package.json
{
  "name": "electron_sample",
  "version": "0.1.0",
  "main": "main.js"
}
```


## appの作成

```
# mac用のapp作成
electron-packager electron_sample(directory名) sample(アプリ名) --platform=darwin --arch=x64 --version=0.34.0(electronのバージョン)
```
すると sample-darwin-x64 なるdirectoryが生成される.
確認してみると下記のファイルが生成されていることが分かる

```
[@sample-darwin-x64]$ ls
LICENSE		sample.app	version
```


## appの実行
上記 appの作成で作られた sample.app をopenしてみると、
hello world!が表示されます.!
![fmtkig.png](https://qiita-image-store.s3.amazonaws.com/0/23606/4f993d66-2c2d-2271-a147-d138a8a4ea47.png)

### 備考
この記事は個人blogから転載しました。
http://selmertsx.hatenablog.com/
OSSへのプルリク（Facebookの場合）

# 概要

[こちらの記事](http://qiita.com/yasuhiro-okada-aktsk/items/8293c916b736c4806964)を書いたきっかけは、[jest](https://github.com/facebook/jest) にある ```examples/react-es6``` が React 0.14 で動作しなかったため、試行錯誤した結果をまとめるためでした。

記事を書いたあとに、jest の examples を修正してプルリクした方がいいのではないかと思い、やってみることにしました。
やってみると簡単でした。
この記事が OSS へ貢献したいけど一歩踏み出せない人に役に立てれば幸いです。

# 感想

あまりに簡単だったので、先に感想を。

OSS の本体を実装している人は忙しくて、ドキュメントとかサンプルの更新が遅れがちです。
しかし、その OSS を使う初心者にとってはドキュメントやサンプルは結構重要です（サンプルが動かなくて使うのをあきらめることありませんか？）。
サンプルを最新の環境で（今回は react 0.14 と npm 3）動作させるように綺麗になおすことは、その OSS や周辺のプラットフォームを理解するのに非常に役にたちます。

プルリク受ける側もサンプルなら本体への修正ほど悩まないだろうし、自分のスキルアップにもなるし、初心者の助けになる（その OSS も拡がる）ということで、最初はサンプルの修正のプルリクはおすすめです。


# 準備

普段、仕事でも git とプルリクを使ってますが、プロジェクトによって次の２つに分かれます。

1. リポジトリは全員で共有で、main (or develoop) からブランチをつくり、ブランチから main (or develop) へのマージにプルリクを使う。
2. メインのリポジトリへの書き換えは制限されていて、各メンバーが fork を作り、fork 先で作業したあとプルリクする。

OSS では一般的に２番の方法になります。

仕事や知り合いのように閉ざされたところであれば気軽にプルリクできるのですが、相手が Facebook なのでびびってもう少し調べてみたところ、 ```examples/react``` で[同じような目的のプルリク](https://github.com/facebook/jest/pull/550)がされていました。

そのもととなった [issue](https://github.com/facebook/jest/issues/542) を見ると、Facebook の中の人が "It definitely does work with 0.14 but we haven't had time to update the jest examples. Feel free to send us a pull request! :)" （意訳：時間がないので、気軽にプルリクください :smile: ）と書いてあったので、気持ち的に楽になり一気に進めることにしました。

まず、Facebook の場合は、 [こちら](https://code.facebook.com/cla)からCLA という規約に同意する必要があります。
同意してなくても、プルリクのタイミングで bot が知らせてくれます([参考](https://github.com/facebook/jest/pull/550))。

# 修正・確認

普段、仕事で git + プルリク使っている人にとっては、基本的に同じです。

1. 右上のボタンから fork する。 => 自分のリポジトリにコピーができます。
2. (fork した) 自分リポジトリ上のプロジェクトを clone する。
3. 適当なブランチを作る。
4. 修正する。
5. 自動テストを実行。 （npm test とか）
6. commit + push
6. 自分のリポジトリにプルリクのボタンが表示されるので、押して適当に説明を入力。
7. facebook とかだと CI の travis がテストとか実行してくれるので、しばらくしてからプルリクを見てエラーになっていないか確認。
8. マージされる、またコメントされるのを待つ。

[こちら](https://github.com/facebook/jest/pull/562)がぼくのプルリクです。
ec2 instanceでremote のshellをsudo 実行するときに気をつけること

- /etc/sudersで
 　#Defaults      requiretty
　のようにコメントアウトする。

- ssh のoptionで -t を使う
- remote ec2 instanceを指定するときにec2-user@remoteで指定する
  ssh -t -i .ssh/[pem file] ec2-user@remote `sudo echo`
　これがないと動かない場合がある
変換アダプタ > モニタ:VGA / raspberry pi2: HDMI > SANWA AD-HD13VGA

```txt:動作環境
モニタ: FLATRON L1753S (VGA)
raspberry pi2 (HDMI)
```

まだまだ故障知らずのVGAモニタをpi2と接続できたらいいなぁと思っていたらできた。

別の用途で購入していたHDMI<->VGA変換アダプタ。
SANWA AD-HD13VGA
http://www.sanwa.co.jp/product/cable/hdmi_adapter/

上記のアダプタを
- PC側(VGA)、モニタ側(HDMI)
で使おうとして購入したのだが、
- PC側(HDMI)、モニタ側(VGA)
でないと使えないとのことだった。

箱の裏面に以下の結構大事なことが青文字で書かれている（目立たない）。

> 接続する機器のHDMI端子からの電力で動作します。

HDMIがモニタの場合、電力供給がされないようだ。

ふと思ったのは、pi2はHDMI出力で、まだまだ現役の17インチ液晶モニタ(VGA)がある。
- pi2(HDMI)、モニタ側(VGA)
としてつなげたら普通に使えた。
既存のクラスと同じ名前のcaseをもつenumを定義する

ちょっと合理性が思いつかないのでバグの類だと思うんだけど、こういうのがコンパイルエラーになる。

```swift
indirect enum Type {
  case Var(String)       // ここで Use of Undeclared Type 'String' とか言われる
  case String
  case Int
  case List(Type)
  case Bool
  case Function(Type, Type)
}
```

どうも列挙型を定義するときに既存の型名と同じ名前の`case`があるとダメみたい。`case`名を変えるか、型パラメータにする。

```swift
indirect enum TypeBase<T> {
  case Var(T)
  case String
  case Int
  case Bool
  case List(TypeBase<T>)
  case Function(TypeBase<T>, TypeBase<T>)
}

typealias Type = TypeBase<String>
```

Xcode 7.0.1のPlaygroundで確認してる。
Thread / GUI > グラフィックスのように、OSやハードウェアへの依存が強い部分は、往々にして単一スレッドでしか動作できないようになっています。この例のボタンの状態の変更も例外ではなく、UIスレッドの中で行う必要があります。

引用: 即効入門 C#プログラミング すぐに現場で使える知識 by 中 博俊さんら
2.2 GUIと非同期処理

> グラフィックスのように、OSやハードウェアへの依存が強い部分は、往々にして単一スレッドでしか動作できないようになっています。この例のボタンの状態の変更も例外ではなく、UIスレッドの中で行う必要があります。

```csharp
private void Button_Click(object sender, RoutedEventArgs e)
{
  this.OkButton.IsEnabled = false;
  this.Cursor = Cursors.Wait;

  Task.Factory.StartNew(() =>
  {
    System.Threading.Thread.Sleep(3000);
    MessageBox.Show("処理完了");
  }).ContinueWith(t =>
  {
    // UIスレッドで実行
    this.OkButton.IsEnabled = true;
    this.Cursor = Cursors.Arrow;
  },
  TaskScheduler.FromCurrentSynchronizationContext());
}
```

Unityにおいては、スレッド内でuGUIの変更処理はできず、OnGUIなどで処理しないといけない。

C++ Builderにおいても、TThreadからGUI(フォーム)関連の変更をする場合には Synchronize(関数)の形を使わないといけない。

GUI変更を色々なスレッドから直接されると対応が難しいのだろう。
技術英語 > but they have [adverse effects]. / counter effect / by‐product

@ LOE > March 16, 2012

LOEで耳に残ったフレーズ

http://loe.org/shows/shows.html?programID=12-P13-00011
> So these are chemicals that are used for a very particular purpose, but they have <font color=red>adverse effects</font>.

http://ejje.weblio.jp/content/adverse+effects
> adverse effects
> 逆効果

http://ejje.weblio.jp/sentence/content/counter+effect
> exert adverse effect on the bath quality.
> 浴の品質に不利な影響を与える

<hr>
http://ejje.weblio.jp/sentence/content/adverse
> adverse fate
> 不運.
> adverse circumstances
> 逆境.
> be adverse to one's interests
> 利害に反する

<hr>
関連して思い出したのは1

http://ejje.weblio.jp/content/counter+effect
> counter effect
反対効果

adverse effectとの使い分けについては未消化。

<hr>
関連して思い出したのは2
http://ejje.weblio.jp/content/by+product
> by‐product
1副産物 〔of〕.
2(思いがけない)副次的結果.
AndroidのTestCaseで、SQLのgetReadableDataBase()でNullPointerExceptionが発生する

AndroidのTestCaseで、SQLのgetReadableDataBase()でNullExceptionが発生した。

調べていく中で、contextの取得がうまくいっていないっぽかった。
ちなみに、使っていたのは ActivityUnitTestCase で、以下のように context を取得していた。 

```
 Context con = this.getActivity().getApplicationContext()
```

調べると、この記事に到達。

<a href="http://qiita.com/kitanoow/items/dd2189b74ecef9350990">Android の jUnit テストで Context が欲しい時</a>

下記のように取得するように書いてある。

```
 Context con = this.getInstrumentation().getTargetContext().getApplicationContext();
```

このコードを使って context を取得したら、NullPointerException は出なくなった。

やったね！
SSH鍵ファイルいろいろ

使うソフトの都合でいろんな形式の鍵ファイルが生じて混乱することがあるのでメモ。

## OpenSSH
### 秘密鍵
- ~/.ssh/id_rsa
- /etc/ssh/ssh_host_rsa_key
- *.pem
- 等等

```
-----BEGIN RSA PRIVATE KEY-----
xxxxxxxx
-----END RSA PRIVATE KEY-----
```

### 公開鍵
- ~/.ssh/id_rsa.pub
- /etc/ssh/ssh_host_rsa_key.pub
- 等等

```
ssh-rsa xxxxxxxxxxxxxxx== comment
```


## SECSH (ssh.com)
### 秘密鍵
```
---- BEGIN SSH2 ENCRYPTED PRIVATE KEY ----
Comment: "…"
xxxxxxxx
---- END SSH2 ENCRYPTED PRIVATE KEY ----
```

### 公開鍵
```
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "…"
xxxxxxxx
---- END SSH2 PUBLIC KEY ----
```

## PuTTY
### 秘密鍵
- *.ppk

```
PuTTY-User-Key-File-2: ssh-rsa
…
Public-Lines: 4
xxxxxxxx
Private-Lines: 8
xxxxxxxx
Private-MAC: xxxxxxxx
```

### 公開鍵
SECSH (ssh.com) と同じ。
JuliaでODEとか

Python、Matlabで不足しがちな速度をなんとかならないかと調べているうちにJuliaという言語を知ったので、Jupyter(ipython notebook)で書いてみた。
すぐに使うであろう常微分方程式の数値計算とグラフ化をやってみた。

ネタはロケットの飛翔。1次元（高さ方向のみ）解析。すごく単純化しているので、アテにはしないでもらいたい。
（Mac以外だと文字化けるかも）

記事はこちら
http://nbviewer.ipython.org/gist/ina111/2724e3f5de7825f9a5f3
javaからPAppletのインスタンスを作らずに、processingのメソッドを呼び出す方法

#processingとは?
>電子アートとビジュアルデザインのためのプログラミング言語であり、統合開発環境である。 視覚的なフィードバックが即座に得られるため、初心者がプログラミングを学習するのに適しており、電子スケッチブックの基盤としても利用できる。Java を単純化し、グラフィック機能に特化した言語といえる。(wikipediaより引用 https://ja.wikipedia.org/wiki/Processing)

#processingをインポートする
下記リンク等にしたがって各自
https://processing.org/tutorials/eclipse/
http://d.hatena.ne.jp/white_wheels/20100331/p2

#サンプル

```java:sample.java
import processing.data.XML;
import static processing.core.PApplet.println;
class Sample{
  Sample(){
    try {
      XML xml=XML.parse("<mammals><animal>Goat</animal></mammals>");
      XML firstChild = xml.getChild("animal");
      println(firstChild.getContent());
    } catch (IOException ex) {
    } catch (ParserConfigurationException ex) {
    } catch (SAXException ex) {
    }
  }
}
```
たったこれだけで、XMLを読み込んで、子要素のコンテンツを取得しています。
processingには優秀なメソッドがあるので、ぜひ使ってみてください。
#注意点
processingのPAppletのインスタンスを使わなければ実行できないメソッドもあります
描画に関するメソッドや、読み込みに関するメソッド等です。

#こちらも合わせてどうぞ
[PSurfaceまとめ](http://qiita.com/hotman78/items/27ff03df7d04ea0bd434)
scipyが突然読み込まれなくなった話

1週間ぐらいハマったので一応メモ．

環境は

* Windows 7 64bit
* Python 2.7

何がきっかけかはわからないが，`scipy.ndimage`や`scipy.misc`などを使おうとすると以下のようなエラーが表示されるようになった．

```
>>> import scipy.misc
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\scipy\misc\__init__.py", line 49, in <modu
le>
    from scipy.special import comb, factorial, factorial2, factorialk
  File "C:\Python27\lib\site-packages\scipy\special\__init__.py", line 601, in <
module>
    from ._ufuncs import *
ImportError: DLL load failed: 指定されたモジュールが見つかりません。
```

原因がさっぱりわからない．scipyをインストールし直してもダメ．途方に暮れていたところ，以下の質問を発見．

* "ImportError when importing certain modules from SciPY"
  * http://stackoverflow.com/questions/17480779/importerror-when-importing-certain-modules-from-scipy

この質問の回答によると[ここ](http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy)からnumpyを更新しろとのこと．更新すると確かにscipyが動くようになった．結局原因がなんだったのかよくわからないがnumpy側に問題があったようだ．
ContainerView(subview)を扱う際のメモ


ContainerViewの配置はwAny|hAnyだけでなくCompactやRegularサイズでも調整しておく。autoLayoutを使ってる場合は各サイズで制約をつけること。

親になるviewとsubviewの制約をつけておかないとsubview内で表示するviewのレイアウトが崩れるので注意。これに気付かず相当な時間を潰した。

embedでなくソースでContainerViewとViewControllerを紐づける場合はviewDidLayoutSubviews()内で処理する事。またContainerViewの中身の切り替えをする時もソース内でロジックを書くこと

```
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        
        let afterVc:UIViewController =
        (self.storyboard?.instantiateViewControllerWithIdentifier("childViewController"))!
        
        self.addChildViewController(afterVc)
        self.view.addSubview(afterVc.view)
        afterVc.didMoveToParentViewController(self)

    }
```
例)子view呼び出し


参考リンク
[Container View Controllerを正しく使おう](http://www.slideshare.net/asakahara/container-viewcontroller)



[[iOS6] AutoLayoutを使用すると、viewWillAppear: でframeが決定しないので注意](http://www.zero4racer.com/blog/988)

上記のリンクはiOS6上でObjective-Cで書いた内容ですが、iOS9でswift2でも当てはまる内容です。


個人的にはまったのがviewDidLayoutSubviewsは画面が再表示される度に呼び出されるので例えば別画面を呼び出して、呼び出した先から返ってくる時には元の画面の状態を維持してたいがviewDidLayoutSubviewsが呼び出されてしまうので画面の状態が初期化される、という事。

とりあえずの措置として以下のように対処。子viewがオンメモリしているかどうかで処理を場合分けしてみた。

```viewDidLayoutSubviews
if(self.childViewControllers.count == 0) {

//子viewController設置

}

```
漢字をローマ字に変換できるPythonライブラリ "pykakasi" を使ってみた。

## 初めに

漢字をローマ字に変換できるライブラリ[pykakasi](https://github.com/miurahr/pykakasi) を使おうとしたらちょっとハマったのでメモ

## pip install
requirements.txtに以下の記述を追加し

```bash:requirements.txt
pykakasi==0.23
```
通常通りinstall

```zsh
% pip3 install -r ./requirements.txt
```


## が、上手く動かない
インストール出来たが、実行時に落ちる。
*FileNotFoundError: [Errno 2] No such file or directory: '/Users/hira/.virtualenvs/env1/lib/python3.4/site-packages/pykakasi/hepburnhira2.pickle'*
らしい。変換テーブルがインストールされていない。

## 自前でビルド
仕方ないので、pipは使わず自前でビルドすることにした。

```zsh
% git clone https://github.com/miurahr/pykakasi.git
% workon env1
% python setup.py build install install_lib
```

## 動いた。
```py3
  from pykakasi import kakasi
  kakasi = kakasi()
  kakasi.setMode('H', 'a')
  kakasi.setMode('K', 'a')
  kakasi.setMode('J', 'a')
  conv = kakasi.getConverter()
  print(conv.do('本日は晴天なり')) // honjitsuhaseitennari
```

## 結局
pipは使わず自分でビルドすると上手く使えた。
requirements.txt に pykakasi==0.23 を残しておくと次にpip installしたときまた動かなくなるので、
requirements.txtを元に戻しておく。


## 終わりに
もしpipからインストールして普通に使えるやり方があったらご教示ください。
VMwareでInternet Sharingにするとgem installが失敗した話

## 環境

+ VMware Fusion 7.1.2
+ Ubuntu Server 14.04.3 64-bit
+ Ruby 2.2.3 (rbenv)

## 起ったこと

gemのグローバルインストールに失敗する。

```
hoge@hoge:~$ gem install pry
ERROR:  While executing gem ... (Errno::EMSGSIZE)
    Message too long - recvfrom(2)
```

gem自身のアップグレードにも失敗する。

```
hoge@hoge:~$ gem update --system
ERROR:  While executing gem ... (Errno::EMSGSIZE)
    Message too long - recvfrom(2)
```

## 原因

直接の原因はわからなかったが、VMwareのネットワーク設定を変えたら解決した。
Internet Sharingだと失敗して、Bridge Networkingだと問題なくインストールできる。

ちなみに、すべてのVMware内からの通信がおかしいわけではなかった。
実際、rbenvによるrubyのインストールは問題なく実行できたし、apt-get updateやapt-get upgradeも実行できた。
qw// は変数展開をしない


Perl の `qw//` はシジル (Perl の変数の初めにつく `$` などの記号) がついた変数をダブルクォート中のように展開することはありません。

```pl:qw.pl
#!/usr/bin/perl

use strict;
use warnings;

my @list = qw($foo @bar %baz);

print "@list\n";

```

これの実行結果は

```
$ perl qw.pl
$foo @bar %baz
```

です。

最初の頃は結構ハマるという話。私もそうでした。

`qw//` の中では、デリミタ以外の文字はほとんど意味を失います。

```pl:qw2.pl
#!/usr/bin/perl

use strict;
use warnings;

my @list = qw/' \' \ \\ \/ moge \x5C \n \\/;

print "@list\n";
```

これの実行結果は

```
$ perl qw2.pl
' \' \ \ / moge \x5C \n \
```

です。

特殊なのは、デリミタのエスケープのためにバックスラッシュが使えることで、バックスラッシュを2つ連続で書いた時にバックスラッシュが1つになってしまうことです。これはシングルクォート中のルールと同様です。

とはいえ、デリミタのエスケープが必要になったら別のデリミタを選べばよいという感じもするので、この機能は一種余計な感じがします。

その他、ダブルクォート中では使える `"\x文字コード"` や `"\n"` といった表記もシングルクォート中と同様 `qw//` ショートカットでは全て解釈されることはありません。

このあたりの話は [`perldoc perlop`](http://perldoc.jp/perlop) が詳しいです。


`qw//` がほとんどのリテラルをそれそのものとして扱う性質を利用すると、安心してリストを作成できます。

```pl:qw3.pl
#!/usr/bin/perl

use strict;
use warnings;

my %charname = ( qw/
> lt
< gt
" apos
' quot
# sharp
/);
```

ここまで記号まみれになるとエディタ等によってはシンタックスハイライトが狂う可能性がありますが、純粋に `qw/` から `/` が次に現れるまでが空白区切りの単語リストとなって解釈されます。

とはいえ、これを perl インタプリタで実行させると

```
$ perl qw3.pl 
Possible attempt to put comments in qw() list at qw3.pl line 12.
```

などと警告を言われてしまいます。「`qw()` の中ではコメント文字は使えないけど勘違いしていない？」ということです。`#` 記号を使ってしまったことで気を遣ってくれたわけですね。

エラーじゃなくて警告なので実行自体に問題はないのですが、とはいえ分かって書いているときには相当おせっかいな警告です。

これは以下のような `no warnings` を書くことで警告を抑制することが出来ます。

```pl
#!/usr/bin/perl

use strict;
use warnings;
no warnings 'qw';
```

これについての詳しい解説は `perldoc warnings` に書かれています。
AWS Lambdaでレコードの処理漏れしないために


DynamoDB Stream から RDSに登録する処理を書いていたところ、
微妙に件数にズレが出ていることが発覚した。
確率としては10000件に10件程度レコード抜けが発生してしまう。。

その時の環境は以下のとおり。

### DynamoDB Stream周りの設定

項目|値
----|----
Streamのレコード設定| 「新旧レコード」をストリームに流す 
Batch Size| 100 
Starting position| Trim horizon


### Lambdaファンクション（抜粋）

```javascript
// ..snip

exports.handler = function(event, context){
    // レコードごとの処理
    event.Records.forEach(function(record) {
      // 何かの処理
      hogehogefunc(function(err, data) {
        if (err) {
          console.error(err)
          context.fail(err)
        } else {
          // 何かの処理
          fugafugafunc(function(err, data) {
            if (err) {
              console.error(err)
              context.fail(err)
            } else {
              context.succeed("Successfully processed " + record_length + " records.");
            }
          });
        }
      });
    });
};
```

<br>  

## 原因

検証してもよくわからなかったのでサポートに聞いてみたところ
「きちんと全部処理してからsucceedしてね」
とアドバイスいただいた。
おそらくバッチサイズを1以上にして、複数レコードを返ってきた時に
現状のコードだと処理漏れしてしまうことがある？様子。

## 改善後のコード

```javascript
// ..snip

exports.handler = function(event, context){
    // レコード数保持しとく
    var record_length = event.Records.length
    var proc_count = 0

    // １レコードごとの終了処理
    function finish_handler(err) {
      proc_count++

      if(err) {
        // エラー出たら終了しちゃう
        //   場合によっては処理続行して、レコードの一番最後で判定したほうが良いかも
        console.error(err)
        context.fail(err)
      } else if(proc_count == record_length) {
        // 全レコードを処理したらイベント終了とする
        context.succeed("Successfully processed " + record_length + " records.");
      }
    }

    // レコードごとの処理
    event.Records.forEach(function(record) {
      // 何かの処理
      hogehogefunc(function(err, data) {
        if (err) {
          finish_handler(err)
        } else {
          // 何かの処理
          fugafugafunc(function(err, data) {
            finish_handler(err)
          });
        }
      });
    });
};
```

こちらのコードに置き換えたところ処理漏れはなくなりました :)
漏れなく処理したい時にはきちんと全レコード判定する処理を書きましょう〜、というお話でした。
WordPressのテーブルをSQLで検索しました。

WordPressのデータベーステーブルを検索したくなりました。どうするのでしょうか(☝ ՞ਊ ՞)

# wpdbクラスでテーブルを検索
WordPressではwpdbクラスというのが用意されており、テーブルへのアクセスにはwpdbクラスを使用するようです。

```php:SQLでテーブルデータを取得
global $wpdb;

$hoge = $wpdb->get_results( "SELECT * FROM pugiemonns WHERE = '2015-10-25' GROUP BY date" );

echo "<pre>";
print_r($hoge);
echo "<pre>";
```
pugiemonnsという名前のテーブルの中味を取得できました(☝ ՞ਊ ՞)

wpdbクラスは`global $wpdb;`というオブジェクトから使用するようです。
get_resultsの他にも<a href="http://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wpdb_Class" >関数リファレンス/wpdb Class</a>を見ると色々書いてあるので便利かもしれません。

# 参考
http://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wpdb_Class
MacにAndroid Studioを入れて、adbを使える状態にする

adbコマンドを使ってAndroidで色々テストするために、Android Studioを入れました。
その時の設定手順などをまとめました。
1年くらい前にもAndroidの開発ツールを入れた気がするのですが、色々変わっている部分もあったので、記録しておきます。
Androidの開発環境は結構頻繁に変わっている気がしますね。

#設定をした環境
iMac (27-inch, Mid 2010)
プロセッサ：2.8 GHz Intel Core i5
メモリ：12 GB 1333 MHz DDR3

#Android Studioをダウンロードする
公式の日本語のダウンロードサイトがあるのでそこから落とします。
https://developer.android.com/studio/index.html

ダウンロードしてきたディスクイメージを開くとAndroid Studioが出てくるのでドラッグ＆ドロップして”アプリケーション”に保存します。

#Android Studioを始めて起動する
始めて起動した時にJavaが入っていない場合は以下のようなダイアログが表示されます。（表示されなかった人はここはスルーしてOKです。）
その時はダイアログに従って、Javaをダウンロードしましょう！

https://support.apple.com/kb/DL1572?viewlocale=ja_JP&locale=en_US
![スクリーンショット 2015-10-25 19.53.18.png](https://qiita-image-store.s3.amazonaws.com/0/8222/fd5d21e6-8213-5b1d-3c09-3e2dee7e552c.png)

Javaはインストールパッケージになっているのでそれに従ってインストールすればOK

#インストールが完了したら、再びAndroid Studioを起動！

今回は特に引き継ぐ設定はないので、下を選択しました

![スクリーンショット 2018-09-02 19.29.54.png](https://qiita-image-store.s3.amazonaws.com/0/8222/c219e19c-a60f-a41c-d67d-24f9bfae477b.png)


##Javaの設定
まずは『Detect』をクリック。
JDKの場所が自動で設定されない場合は、青文字をクリックしてJDKをインストールします。
![スクリーンショット 2015-10-25 20.42.15.png](https://qiita-image-store.s3.amazonaws.com/0/8222/7d1ee3f8-f5be-31f6-5aff-30e7fd938d3b.png)

インストールし終えてから、もう一度、『Detect』を押すと自動でディレクトリが入ります。
ディレクトリが入ったら、Nextをクリック！

##インストールタイプの選択
今回は、普通の使い方をするので、『Standard』を選択します
![スクリーンショット 2015-10-25 20.50.47.png](https://qiita-image-store.s3.amazonaws.com/0/8222/65eb3f40-7834-4c75-ff19-2598c787876b.png)

そのまま手順に従って進めるとインストールが完了します！

#試しにプロジェクトを作成してみる
一番上を選択！
そのままNextをクリックしていって、環境構築が終わるとプロジェクト作成が完了です。

#adbコマンドを使える様にする
adbコマンドを使える様にするっていうのは、ターミナルの$のあとにadb ~~と入れるとadbの機能が使える様になることです。

例えば、

```sh
$ adb devices
```

で接続されている端末の状態を見るとかです。

Android SDK locationにパスを通せばadbコマンドが使える様になります。
SDKのパスを特に変えていなければ、以下のコマンドでパスが通せます。
adbでサーバーがスタートできれば、パスが通っていることを確認できます。

```sh
$ export PATH=$PATH:/Users/<自分のユーザー名のフォルダ>/Library/Android/sdk/platform-tools
$ adb kill-server                                                               
$ adb start-server                                                                                   
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
```

次回は、使ってみたadbについてなど、軽く書いてみようかと思います。
深層学習 (機械学習プロフェッショナルシリーズ) 


# どんな本
[深層学習](http://www.amazon.co.jp/dp/4061529021 "深層学習")

ディープラーニングの最初の一冊として、非常に良い本でした。この本を読むまではいろんな用語が全く意味不明だったのが、一冊読み切ることでなんとなく分かるようになりました。

一冊丸ごとディープラーニングで、歴史的な話を加えながらも、次のステップへ進むための事が広く書かれています。数式も多すぎず、少なすぎずちょうど良いと感じました。扱っているトピックにつちての妥当性は今の僕には判断は難しいですが、下に書いたように他のブログの内容が少し分かるようになっていました。

演習などは無く、手を動かすのは数式の変換くらいなので、実際に何かしようとするには他の本が必要です。

# 読み終えた結果
例えば、かずー氏のブログ
専門用語はだいたいこの本で聞いたことがあるなーくらいまで分かる。
http://kazoo04.hatenablog.com/entry/2015/10/09/120000

例えば、この記事
http://qiita.com/tkazusa/items/b8e4d287f94f8b87ed52
PRMLを4ページしか読んでいない僕でも、一気に219ページ目を開いて「あー、tanhね。隠れユニットね。なるほどー」くらいまで分かります。

最初の一冊にお勧めです。
Wordpressのプラグインbrowser-shotsが思ったように動いてくれないと思ったらJetpack-Photonの仕様だった


リンク先の画像を貼った所どうもアスペクト比がおかしくなってしまう。

<img src="https://qiita-image-store.s3.amazonaws.com/0/69007/9ad3a743-4d87-d8d2-830f-113e63aa5f03.png" width="600px">

## 画像のURLの生成

browser-shotsの中で画像のURL生成している関数

```
public function get_shot( $url = '', $width = 300, $height = 112 ) {
	// Image found.
	if ( '' !== $url ) {
		$query_args = array(
			'w' => intval($width),
			'h' => intval($height),
		);

		return add_query_arg(
			$query_args,
			'https://s0.wordpress.com/mshots/v1/' . urlencode( esc_url( $url ) )
		);

	}
	return '';

}
```

何故かwidthを上記の関数を

```
$width = 300
```

で呼び出すと

<img src="https://qiita-image-store.s3.amazonaws.com/0/69007/81b36486-cdd7-993c-71d4-4fa125c1a961.png" width="600px">

URLが書き換えられ、描画して欲しい大きさと，取得されるサイズが噛み合わなくなってしまう。

widthの値を変更して試した結果、600px以上に設定した場合は正常に動作する様子

## どのタイミングでURLが間違っているのか

JavaScriptのloadにBreakpointを置いてみる

<img src="https://qiita-image-store.s3.amazonaws.com/0/69007/d5865b52-bd06-5fc4-c92e-87da202ba0bf.png" width="600px">

StepOverで進めていくと

<img src="https://qiita-image-store.s3.amazonaws.com/0/69007/1c6639a4-554e-da1c-53d3-db946f696575.png" width="600px">

一旦は正しく表示されていることが確認できた

このことからJavaScriptで書き換えが発生していることが確定

StepOverで進めていくとJetpackのJavaScriptが画像のURLを書き換えていることが確認できた

## これらを手がかりに原因を探す

原因と解決策を発見

[WordPressの表示スピード改善と転送量を激減させるプラグインPhotonの紹介](http://keikenchi.com/wordpress-jetpack-photon)

JetpackのPhotonをアクティブにしている状態でwidthが600px以下の画像をロードするとリサイズされるらしい

widthだけリサイズされてしまうのでアスペクト比が合わなくなっていたようだ

## 対応
ロードするサイズを倍のサイズにしてwidthが600px以下にならないようにした。

```
public function get_shot( $url = '', $width = 300, $height = 112 ) {
	// Image found.
	if ( '' !== $url ) {
		$query_args = array(
			'w' => intval($width * 2), //必ず600px以上にする
			'h' => intval($height * 2),
		);

		return add_query_arg(
			$query_args,
			'https://s0.wordpress.com/mshots/v1/' . urlencode( esc_url( $url ) )
		);

	}
	return '';

}
```

<img src="https://qiita-image-store.s3.amazonaws.com/0/69007/2777b1f4-ebc7-3f79-deb4-191a5c6fee5a.png" width="600px">

アスペクト比治った
ChefでDockerコンテナー環境を判定

# 概要
DockerコンテナにCentOS7のイメージを利用した場合に、Dockerfileビルド時にchef側でserviceリソースを実行できずエラーとなる。

# Ohaiコマンドで仮想環境を調べる

コンテナにアタッチしてOhaiコマンドを実行

```
$ ohai | less

略

...json

  "virtualization": {
   "systems": {
     "docker": "guest"
   },
   "system": "docker",
   "role": "guest"
 },

...

略

```

`node[:virtualization][:system] == 'docker'`で判定できる。


# 条件の追加とサービスの設定

レシピのserviceリソース内に以下を追加することで、dockerコンテナ内の場合はserviceリソースが実行されない。

```ruby:default.rb
service "xxxx" do

  ....
  
  not_if { node[:virtualization][:system] == 'docker' }
end



```


dockerコンテナには起動後に接続して,サービスのenable,startを行う

 - コンテナ起動

```
$ docker run -d --privileged --name <container> <image>
```

 - コンテナへの接続

```
$ docker exec -it <container> /bin/bash
```

以下コンテナ内
 - サービスのenable,start

```
# systemctl enable service
# systemctl start service
```

他に良い方法がありそうなので、教えていただけますと幸いです。
XCode7.1に更新したところ、ParseでInclude of non-modular header inside frameworkのエラーが起きた

下記コードをPodfileに追加後、pod installで解決した。

```yaml:Podfile
post_install do |installer|
  `find Pods -regex 'Pods/Parse.*\\.h' -print0 | xargs -0 sed -i '' 's/\\(<\\)Parse\\/\\(.*\\)\\(>\\)/\\"\\2\\"/'`
end
```

CocoaPodsのissueでもGoogleMapsやGoogleMobileAdsなどで、同様の問題が起きていることが報告されています。
[XCode 7.1 - Include of non-modular header inside framework #4420](https://github.com/CocoaPods/CocoaPods/issues/4420)
Nagiosログのタイムスタンプ変換

通常、nagiosのログファイルは次のようになっている。

>[1445782626] EXTERNAL COMMAND: PROCESS_SERVICE_CHECK_RESULT;hostname;servicename;0;Service running OK

これを見やすくするためにperlで処理するコマンドが紹介されていて有名なのがこんなの

>perl -pe 's/(\d+)/localtime($1)/e'

処理した結果

>[Sun Oct 25 23:17:06 2015] EXTERNAL COMMAND: PROCESS_SERVICE_CHECK_RESULT;hostname;servicename;0;Service running OK

確かに読みやすくなるんだけど。。。
そこで、こっちを使うと

>perl -MPOSIX -pe 's/(\d+)/strftime("%F %X", localtime($1))/e'

こんな風になります。

>[2015-10-25 23:17:06] EXTERNAL COMMAND: PROCESS_SERVICE_CHECK_RESULT;hostname;servicename;0;Service running OK

フォーマットが自分で作ることができるので良いんじゃないかなと思う。
とりあえず、人間が読める形になればいいのであれば最初のコマンドでOKですけどね。
AngulaJSのテンプレート(ngBind)デリミタを変更したい

```html
<div>{{hoge}}</div>
```

↑を↓みたいにしたいとか、そういうアレね。

```html
<div>%%hoge%%</div>
```

ググっても出なかったから、ソースをgrepして探した話。
[>> 結論を見る](#%E7%B5%90%E8%AB%96)

[「angularjs デリミタ」でググった](https://www.google.co.jp/search?q=angularjs+%E3%83%87%E3%83%AA%E3%83%9F%E3%82%BF)ところ、曰く・・・
>* golangテンプレートとAngularJSのデリミタがぶつかった
>* Jinja2とAngularJSの変数スコープの競合を解決する方法
>* Golang+Revel環境でAngularJSを使うTips

でもこれ、全部 AngularJS じゃなくて、サーバサイド側（？）のデリミタを変更してたので、要件と違うわけです。


##1 
まず、angular.js (concat されてて minify/aglify されてないやつ) から素直に grep

```bash
$ grep "{{" angular.js | wc -l
    248
```

`wc -l` を書いてあるけど、要するに248行ある。しかもコメント行が多かった。

##2 
だもんで、次にコメント行を潰す。

```bash
$ grep -v "\s*\*" angular.js | grep "{{" | wc -l
    163
```

だいぶ減った。このあたりでまぁ、手がかりは見つかるんだけど、もうちょっとぶっ込んで見る。

##3
Angular.jsのコメント行には、サンプルを生成するための HTML が書かれているので、タグっぽいのを消すのと、変数へ `{{` の代入は行われているだろうということで `=` を条件に加えた。

```bash
$ grep -v "\s*\*" angular.js | grep -v "\s*<" | grep "{{" | grep "="  | wc -l
    8
$ grep -v "\s*\*" angular.js | grep -v "\s*<" | grep "{{" | grep "=" 
     I can add: {{a}} + {{b}} =  {{ a+b }}
           I can add: {{a}} + {{b}} =  {{ a+b }}
           I can add: {{a}} + {{b}} =  {{ a+b }}
        $scope.html = 'Hello {{name}}';
        denormalizeTemplate = (startSymbol == '{{' || endSymbol  == '}}')
  var startSymbol = '{{';
                     id="{{name}}"
          whenExp = attr.$attr.when && element.attr(attr.$attr.when), // we have {{}} in attrs
```

これで、どっからどう見ても `startSymbol` で検索すればわかる・・・ということがわかりますね。うん。

##4

```bash
$ grep -n "var startSymbol " angular.js 
7409:    var startSymbol = $interpolate.startSymbol(),
10773:  var startSymbol = '{{';
```

`$interpolate` に `startSymbol` メソッドがある。コレが怪しいですな。ぐぐった。
https://code.angularjs.org/1.4.7/docs/api/ng/service/$interpolate#startSymbol

##5
ご丁寧に、以下のように書いてあるわけです。
> Use $interpolateProvider.startSymbol to change the symbol.

コレを見に行くと、Exampleのところにやりたいことが書いてありました。
https://code.angularjs.org/1.4.7/docs/api/ng/provider/$interpolateProvider#example

#結論

定義した App の config で書き換えればおｋ

```js
var app = angular.module('hogeApp', []);

app.config(function($interpolateProvider) {
  $interpolateProvider.startSymbol('%%');
  $interpolateProvider.endSymbol('%%');
});
```

でもこれ、影響範囲でかすぎる気がするぞ。。。

#おまけ
[「angularjs delimiter」でググった](https://www.google.co.jp/search?q=angularjs+%E3%83%87%E3%83%AA%E3%83%9F%E3%82%BF)ところ、一発で出てきた。。。
[javascript - Angular JS custom delimiter - Stack Overflow](http://stackoverflow.com/questions/12923521/angular-js-custom-delimiter)
Googlemapをシンプルかつマーカーがちゃんと表示されるURLで指定するやり方


結論からいうと、GooglemapをURLで指定する際は以下のやり方がよいです。

http://maps.google.com/maps?q=緯度,経度

こうするとシンプルに指定でき、かつマーカーがちゃんと表示されます。
JSやWPと組み合わせてごにょごにょしたいときなんかに使えるかもです。
Mac用アンチウィルスソフトとHomebrewの所有権についてまとめ

最近嵌ったのですが、どうやら検索に掛かる情報が少ないようなので備忘録含めて書き残します。

# Sophos Anti-Virus編
10月のある日、`brew install`しようとしたらエラーを吐き、インストールができませんでした。
`brew doctor`してみれば、以下のようにメッセージが出ました。

```
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry and just ignore them. Thanks!

Warning: /usr/local/bin isn't writable.

This can happen if you "sudo make install" software that isn't managed by
by Homebrew. If a formula tries to write a file to this directory, the
install will fail during the link step.

You should probably `chown` /usr/local/bin

Warning: /usr/local/share isn't writable.

This can happen if you "sudo make install" software that isn't managed by
by Homebrew. If a formula tries to write a file to this directory, the
install will fail during the link step.

You should probably `chown` /usr/local/share

Warning: Some directories in /usr/local/share/man aren't writable.
This can happen if you "sudo make install" software that isn't managed
by Homebrew. If a brew tries to add locale information to one of these
directories, then the install will fail during the link step.
You should probably `chown` them:
    /usr/local/share/man
    /usr/local/share/man/man1

Warning: Your Homebrew is outdated.
You haven't updated for at least 24 hours. This is a long time in brewland!
To update Homebrew, run `brew update`.
```

つまりHomebrewに関わるディレクトリの所有権がおかしい（`[username]:admin`が`root:wheel`に変更されている）ということです。
こちらを参考に自動で`brew update`するスクリプトを仕込んでいたのですが、それにも関わらずoutdatedの警告も出るのもおかしいです。
[launchd で Homebrew を自動アップデート（Yosemite 編） - kymmt's note] (http://kymmt90.hatenablog.com/entry/launchd_brew_yosemite)

一旦は直すんですが、一定時間後にまた同じようになっていました。
先述したスクリプトの所有者が`root:wheel`になっていたのが関係しているのかと思ってスクリプトを削除しても、Homebrewを再インストールしても改善しません。
その後適当に検索したら、決定的な情報がありました。
[Macで/usr/local/binの所有者が勝手に変わる問題について](http://rcmdnk.github.io/blog/2015/10/13/computer-mac/)

Sophosのアップデートに、`/usr/local`以下の権限を勝手に変更してしまうというバグ（？）があるようでした。
対策として、Sophosをアンインストールし、代わりにAVGをインストールしました。さようなら。
というわけで自動スクリプトも仕込み直します。

# ClamXAV編
使っていませんが、ClamXAVでも同様のトラブルはあったようです。
インストール時だけのようで、Sophosほど悪質ではないですが…。
[ClamXAVインストールでhomebrewにトラブル発生 - 別館 子子子子子子（ねこのここねこ）] (http://d.hatena.ne.jp/riocampos+tech/20140203/p2)

# まとめ
今回2つのアンチウィルスソフトしか挙げていませんが、他にも`/usr/local`の所有権を変更するものがあるかもしれません。
ただ`chown`するだけでは根本的な解決にならないので注意してください。
Atom エディタの自作パッケージで子プロセスを呼ぶ方法

# 概要

Atom エディタの自作パッケージで子プロセスを呼んで、子プロセスのコンソール出力を取得するサンプルコードを紹介します。

# サンプルコード

結論としては、 Atom エディタは Node.js 動いているので、child_process モジュールを使って子プロセスを起動できるという話でした。下記コードでは `child_process.execFile` で実行ファイルを起動し、その結果を `callback` 関数で受け取って処理しています。

```coffeescript
    # 子プロセス実行後に呼ばれるコールバック関数
    callback = (err, stdout, stderr) ->
      # エラーの時
      if err
        console.log stderr
      # 成功時
      console.log stdout
      return

    exec = require('child_process').execFile
    # 子プロセスを呼ぶ
    exec '[実行ファイルのパス]', callback
```

# 参考サイト

[Execute an exe file using node.js](http://stackoverflow.com/questions/19762350/execute-an-exe-file-using-node-js)
[Node js child_process.execFile return](http://stackoverflow.com/questions/23590501/node-js-child-process-execfile-return)
[node.jsのchild_processのexecとexecFileとspawnの違い](http://www.axlight.com/mt/sundayhacking/2014/03/nodejschild-processexecexecfilespawn.html)

# 動機

Atom エディタを使っていて自分用の追加機能が欲しくなり、プラグイン（Atom ではパッケージと呼ばれる）を自作する方法を調べました。すると Node.js & coffee script で作成する必要があることが分かりました。

しかしちょっとした拡張機能を作るのに新しいライブラリと言語を覚えるのはしんどいと思い。主要な処理は自分の慣れた言語で作ることにして、 Atom エディタ側で標準出力だけ受け取ることができれば手間が少なくてすむなと思いました。
AWS LambdaのSchedule Taskを使ってエゴサーチをslackに流し込む

Lambdaでスケジュール機能（cron）が使えるようになったことで、一段とサーバレスでbotを実現できるようになってきました。
http://aws.typepad.com/aws_japan/2015/10/aws-lambda-update-python-vpc-increased-function-duration-scheduling-and-more.html

せっかくなので、twitterでエゴ・サーチした結果をslackに流し込むLambda Functionを作ってみました。

https://github.com/sparkgene/lambda_twitter_search

![lambda_twitter.png](https://qiita-image-store.s3.amazonaws.com/0/36184/15f4f51c-8d86-e718-11de-422c0fad461b.png "lambda_twitter.png")

作り的にはこんな感じで、LambdaからTwitter APIを使ってキーワード検索を行い、その結果をSlackへpostします。
DynamoDBは最後のつぶやきのidを保持し、次回のキーワード検索ではそのid以降につぶやかれたものだけを持ってくるために利用している。

slackではこんな感じでつぶやきが表示される。
![slack_post_image.png](https://qiita-image-store.s3.amazonaws.com/0/36184/77f43670-3d6f-01da-b695-cf3b4024cdb2.png "slack_post_image.png")
SOAP通信では例外を適切に処理しないと死ぬ


現在、CakePHPとSOAP通信を用いたAPIを公開しています。

そしてつい先日、「CLOSE_WAITコネクションが残りまくってCPU利用率が100％で張り付いてしまう」と言うログがありました。作業に着手したところ、その調査に約1日・修正に約10分という、膨大な時間の無駄遣いをしてしまったので、備忘録も兼ねて何が起きていたのかを共有しておきたいと思います。

## 例外の罠
基本的に、処理が成功した場合でも・失敗した場合でも何らかのSOAPレスポンスを返すよう、APIが設計されていました。ただ、いくつかのパターンの場合のみ、例外を投げて強制停止するようになっていました。

タダでさえなんで止まったのかをレスポンスとして返さないだけでも不親切ではあるのですが、強制的にスクリプトを停止させてしまうことが問題の根本的な原因だったのです。

どうやら、PHPとしては例外によって処理をクローズしたと思っていても、通信プロトコルとしては通信が終了していないものと判断し、httpdのプロセスを引き続き稼働させてしまうため、結果としてリソースが圧迫されたということのようなのです。

根本的な対策としてAPIのエンドポイント全体にtry-catchを張り、最終的にどこでも例外がキャッチされなかった場合はシステムエラーのレスポンスを返すよう修正することで、なんとか修正を完了したのでした。

## まとめ
検索をしていた過程では英語の情報はばんばん引っかかってきていたのですが、日本語の情報があんまりかかってこなかったため、このバグの供養のためにも今回この記事を書いてみました。皆さんも気をつけましょう。
angular2+electronメモ

# このメモについて

ほぼ自分用のメモ。
はまりどころ多かったので、覚えておくため用。
物の製作途中なので、throw new BusyError();

# はまりどころ箇条書き

## SystemJSのrequireとelectronのrequireの衝突

対策

* electron側をSystemJSから呼ぶときには `@node/` スコープにするとrequireでelectron側呼べる
* require("@node/remote")という感じ
* もちろんd.ts弄らないとtypescriptだと困ったことに。

## componentへの変更がview側に反映されない

原因はどうも非同期タイミングの変更を現在のangular2では検知できないらしい。(そういえば`Object.observe`とか提案してたなぁ)
変更を通知するには`NgZone`のインスタンスをDIで貰ってこないとダメ。

やり方。

```ts:app.ts
class HogeComponent {
    constructor(private _ngZone: NgZone) {}
    private someAsyncCallMethod() {
        this._ngZone.run(() => {/* 反映処理 */});
    }
}
```

Rxのdebounce使って思いっきりハマった。。。

## SystemJSでnode_modules内をrequire

これが参考になりました。http://mizuki-r.hatenablog.com/entry/2015/02/04/005832

現状この形がベスト感。

# 最後に

もうちょっといい方法あれば逆に教えてください
El Capitanでtherubyracerのbundle installがコケる件の対応


El Capitanで新しいRailsアプリケーションを作ろうとしたら失敗したのでメモ。

libv8まではインストール出来たんだけど、therubyracerがダメだった。

# 対処方法

古いバージョンのv8をインストールして、それを使うようにする。

```
brew tap homebrew/versions
brew install v8-315
brew link --force v8-315
bundle install
```

しかし毎度毎度面倒だな…

# 参考
[Fails Install OS X El Capitan - 10.11 Beta (15A215h) · Issue #359 · cowboyd/therubyracer](https://github.com/cowboyd/therubyracer/issues/359#issuecomment-121931643)
iPhoneでチェックボックスのタッチ反応を速くする方法

iPhoneでチェックボックスやラジオボタンをタッチしたときの反応が遅いので、タッチした瞬間に反応してくれるようjQueryを使って書いてみました。
iPhoneではクリックイベントが発火するのが指を離したときだそうです。
なので、タッチイベントを使ってタッチした瞬間に反応してくれるようにしてみました。

```js
    var isTouch = false;
    $(document)
        .on('touchstart', 'input[type="checkbox"]', function() {isTouch = true})
        // スクロールで反応しないようにする
        .on('touchmove', 'input[type="checkbox"]', function() {isTouch = false})
        .on('touchend', 'input[type="checkbox"]', function(e){
             // クリックイベントを強制発火
             if (isTouch) {
                $(this).trigger('click');
                e.preventDefault();
            }
        });
```

この書き方だとスクロールのときは反応しなくなります。
また、` $(document).on`で始めているのはjsで後から追加された要素にも対応できるようにするためです。
イベントの強制発火している部分、そもそも「` function(e)`て何や？」という方は
[こちら](http://shgam.hatenadiary.jp/entry/2013/06/27/022956)。
`preventDefault()`はイベントオブジェクトのメソッドで、イベントのデフォルトの動作を停止します。これがないと、チェックボックスが２回タッチされたような動作になってしまいます。

###以下の記事を参考にしました
[簡単！要素追加時のクリックイベント登録](http://blog.livedoor.jp/natsu820/archives/26562858.html)
[スマートフォンでのタッチイベントと移動を区別する方法](http://sterfield.co.jp/blog/other/programmer/%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%83%95%E3%82%A9%E3%83%B3%E3%81%A7%E3%81%AE%E3%82%BF%E3%83%83%E3%83%81%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%A8%E7%A7%BB%E5%8B%95%E3%82%92%E5%8C%BA%E5%88%A5.html)
モンティ・ホール問題をCoffeeScriptで検証

## モンティ・ホール問題とは

アメリカのTV番組で行われたあるゲームについての論争のこと。

1. 司会者側がドアを三枚用意し、その内ふたつにはヤギを、残りの一枚には新車を隠す。
2. 回答者はドアを一枚選ぶ。
3. 司会者は回答者の選んでいないドアから一枚を開けて、ヤギを見せる。
4. 司会者は回答者にドアを選び直したいか質問する。
5. この時、回答者はドアを選び直した方が確率的には新車を得やすくなる（その差は2倍）。

確率が直感に反するため、議論になったそうです。
（[モンティ・ホール問題 - Wikipedia](https://ja.wikipedia.org/wiki/モンティ・ホール問題)）

## 検証

```coffeescript:CoffeeScript
class MontyHall

  setDoor = (int)->
    arr = []
    while int
      arr.push('empty')
      int--
    return arr

  putCar = (doors)->
    int = parseInt(Math.random() * doors.length)
    arr = []
    for door, index in doors
      if index is int then arr.push('car') else arr.push('goat')
    return arr

  openDoor = (doors, firstChoice)->
    opened = false
    arr = []
    for door, index in doors
      if door is 'car' or index is firstChoice
        arr.push(door)
      else if !opened
        arr.push('opened')
        opened = true
      else
        arr.push('goat')
    return arr

  changeMind = (doors, firstChoice)->
    int = 0
    for door, index in doors
      unless index is firstChoice or door is 'opened'
        int = index
        break
    return int

  constructor: (@obj)->

  log: ()->
    conf =
      doors: if @obj and @obj.doors and typeof @obj.doors is 'number' then parseInt(@obj.doors) else 3
      tests: if @obj and @obj.tests and typeof @obj.tests is 'number' then parseInt(@obj.tests) else 2000
    tests = TESTS = conf.tests
    doors = setDoor(conf.doors)
    firstChoiceIsCorrect = secondChoiceIsCorrect = 0
    while tests
      doors = putCar(doors)
      firstChoice = parseInt(Math.random() * doors.length)
      doors = openDoor(doors, firstChoice)
      if doors[firstChoice] is 'car' then firstChoiceIsCorrect++
      secondChoice = changeMind(doors, firstChoice)
      if doors[secondChoice] is 'car' then secondChoiceIsCorrect++
      tests--
    console.log('firstChoiceIsCorrect', parseInt(firstChoiceIsCorrect / TESTS * 1000) / 10 + '%')
    console.log('secondChoiceIsCorrect', parseInt(secondChoiceIsCorrect / TESTS * 1000) / 10 + '%')
    return

new MontyHall
  doors: 3
  tests: 2000
.log()
```

## 結果

ドア3枚で、2000回のテスト結果です。

```
firstChoiceIsCorrect – "33.2%"
secondChoiceIsCorrect – "66.7%"
```

確率が2倍になりました。
ちなみに「ドアを4つに増やして、ヒントをひとつ与える」場合でも同様に、確率が2倍になります。

## 解説

3つドアがある場合、新車を当てる確率は1/3。ハズす確率は2/3。
ドアを選び直すことによって損をするのは、1/3の確率。
ドアを選び直すことによって得をするのは、その逆なので2/3の確率。
ということで、66%ほどの割合で新車をゲット。元の確率の2倍になります。
Start Developing iOS Apps (Swift) 1-1


#Start Developing iOS Apps (Swift)

参考URL http://qiita.com/edo_m18/items/ca8c9c21049c280d3328

##Basic types 

```
var myVariable = 42

myVariable = 50

let = myConstant = 42


var = 変数で値の変更が可能
let = 定数で値の変更ができない

```

常にSwiftの定数と変数には「型」があります。
ただ、あなたは常にその型を明示的に書く必要がありません
Swiftのコンパイラは対象の値が「integer」かどうかを推測します。
これを「型推論」という機能で行っています。
これら定数と変数の型は変わることがありません。

```

let implicitIntger = 70

let implicitDouble = 70.0

let explicitDouble: Double = 70


上記のimplicitIntgerが数値型、implicitDoubleは浮動小数点型
explicitDoubleは「:」で区切って型を明示、記述することもできます。

```

Swiftでは値を決して明示せずに他の型に変換してはいけません。
もし型の変換を行いたいなら明示的に行いましょう

```

let label = "The width is" /文字列型

let width = 94             /数値型

let WidthLabel = label + String(width) 変数widthを明示的に文字列型にしている

```


もっと簡単に文字列の値を含める方法があります。バックスラッシュ\の後に()で変数をくくることで明示的にそれらが文字列であることを示します。
これらは、「文字列の補間」という機能で行っています。

```

let apples = 3
let oranges = 5 

let applesummary = "I have \(apples) apples"

let fruitSummary = "I have \(apples + oranges) pieces of fruit."

```







optional型
対象の値に「?」を記述することで「nil」つまり、値が存在しない状態を許可します。
また、「!」の値を記述することで「nil」が存在しない状態を示します。

```optional型を宣言している
let optionalInt: Int? = 9　この場合値がnil(値が無い状態)を許可する
```

```optional型を利用するときの記述
// なにがしかのクラスのインスタンスを作る
var b: AnyClass = AnyClass()

b.hoge?.foo()
```


「?」Wrapと「!」Unwrapに違いに関しての説明

optional型は「宣言された型」か「nil」を保持しているため、「宣言された変数は2つの状態(型かnil)を持ち、参照するたびにその都度中身を確認しなければなりません」

つまり、このオプションのように2つの要素を持てる状態を「wrap」されていると言います。(ほかの言語でも同様の仕組みとして「オプション」というのがある)


その反対に、ある変数が一つ状態を確定している様を表す記号として「!」があり、 Unwrapされていると言います。


```wrapとunwrapに関して

? => wrapされていて二つの状態を保つ
! => unwrapされていて一つの状態を持つ(?で曖昧に宣言したものを!で確信に変えています、なんかゲームみたいです。)

```





Swiftに存在するデータ型に「Array」が存在します。
これはプログラミング言語における配列を意味してます。
ある変数を(インデックス)参照値としてその値に代入した文字列などを簡単に扱えるようにします。

```
var ratinglist = ["Pool", "Fine", "good", "Excellent"]
ratingList[1] = "OK"
print(ratinglist)

```

```
インデックス(索引) => データを検索するための索引情報

ファイルや文書の中の特定内容の位置を知るための「鍵」
```


空配列を生成する方法は下記のコードです。
//で一行コメントを書くことが可能です。
/* ...*/で複数行コメントと書くことが可能です。

```
// creates an empty array
let emptyArray = [String]()

```