OmniAICreator/Qiita-1.07M huggingface dataset:
Collectionの特定のカラムを主キーに指定する


```javascript:app/models/hoge.js
exports.definition = {
  config: {
    columns: {
      "fuga": "text",
      "piyo": "integer"
    },
    adapter: {
      type: "sql",
      collection_name: "hoge",
      idAttribute: "fuga"
    }
  }
}
```

主キーにしたいカラムを``config.adapter.idAttribute``で指定するとその指定したカラムが主キーになります．
iOS8からUIButtonの隠しAPIでCPU使用率が100%になる問題


# はじめに

一般的に、UIButtonクラスの`buttonWithType:`メソッドにはUIButtonTypeを指定しますが、ここに100以上の値を指定すると非公開のボタンを使用することができます。[参考URL](http://d.hatena.ne.jp/KishikawaKatsumi/20100507/1273198706)

# iOS8からレンダリング時にCPU使用率が100%になってしまうように

111番のボタンはiOS6か7にアップデートされた際に使用できなくなってしまいましたが、それ以外は正常に使用でき、審査にもはじかれなかったので、割と重宝していました。(Undocumentedなので本来は使用禁止ですが...)
しかし、iOS8からレンダリングする際にCPU使用率が100%になってしまい、iOSのビルドバージョンに関わらず、アプリがハングするようになってしまいました。

![スクリーンショット 2014-09-22 16.00.10.png](https://qiita-image-store.s3.amazonaws.com/0/31823/08ad9969-8ec3-b8fc-2deb-4dcc66cad2dd.png "スクリーンショット 2014-09-22 16.00.10.png")

# 終わりに

やはり隠しAPIを使うのはダメですね。(笑)
自前でボタンを実装するようにします。

# 参考資料
* [UIButton Class Reference](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIButton_Class/index.html#//apple_ref/occ/clm/UIButton/buttonWithType:)
* [UIButtonの隠しAPI](http://d.hatena.ne.jp/KishikawaKatsumi/20100507/1273198706)
VPS上でOpenStackをさくっとインストールする

勉強用にOpenStackを手軽にインストールしたいと思いましたが、自前のサーバを用意して、、というのは面倒なのでVPSで簡単にできればと思い、調べてみました。

ただし、仮想マシン上に仮想マシンを動かすわけなので、ホスト側のハイパーバイザが**ネストを許可している**必要があります。

そこで、ネスト可能なVPSを探したところ、**<a href="http://px.a8.net/svt/ejp?a8mat=2BWC57+92UZW2+50+4ATRV6" target="_blank">ConoHa VPS</a>**が可能であるようだったので、RDOを使ってインストールを試したところ動作しました。

<a href="https://openstack.redhat.com/Quickstart">RDOのQuickStart</a>の公式ページに動作要件が書かれていますが、今回はConoHaで用意されているFedora20を使って動作を確認しています。

ConoHaでFedora20をカスタムインストールしたら、公式ページの通りに、コマンドを実行するだけで問題なくインストールできました。

```
#yum update -y
#yum install -y https://rdo.fedorapeople.org/rdo-release.rpm
#yum install -y openstack-packstack
#packstack --allinone
```
Objective-CのenumをSwiftで使う

（自分用メモ）

`typedef enum`で定義していたenumはそのままではSwiftでは使えない。

[Interacting with C APIs](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithCAPIs.html)

```objc:Objective-C
typedef enum {
    STATUS_IDLE,
    STATUS_CONNECTED,
    STATUS_DISCONNECTED
} STATUS;
```

`NS_ENUM`を使って書き換える。

```objc:Objective-C
typedef NS_ENUM(NSInteger, STATUS) {
    STATUS_IDLE,
    STATUS_CONNECTED,
    STATUS_DISCONNECTED
};
```

Swiftではこう変換される。

```swift:Swift
enum STATUS: Int {
    case IDLE
    case CONNECTED
    case DISCONNECTED
}
```

この時に各メンバの接頭辞が**自動で省略される**ので注意。おそらく列挙子の名前をメンバ名に対してマッチングして一致する部分＋アンダースコア（あれば）までを省略していると思われる。

例えば、以下の場合、

```objc:Objective-C
typedef enum {
	WF_SENSOR_CONNECTION_STATUS_IDLE,
	WF_SENSOR_CONNECTION_STATUS_CONNECTING,
	WF_SENSOR_CONNECTION_STATUS_CONNECTED,
	WF_SENSOR_CONNECTION_STATUS_INTERRUPTED,
} WFSensorConnectionStatus_t;
```

`NS_ENUM`を使って以下のように書き換えると、

```objc:Objective-C
typedef NS_ENUM(NSInteger, WFSensorConnectionStatus_t) {
	WF_SENSOR_CONNECTION_STATUS_IDLE,
	WF_SENSOR_CONNECTION_STATUS_CONNECTING,
	WF_SENSOR_CONNECTION_STATUS_CONNECTED,
	WF_SENSOR_CONNECTION_STATUS_INTERRUPTED,
	WF_SENSOR_CONNECTION_STATUS_DISCONNECTING,	
};
```

Swiftからは以下のように見える。

```swift:Swift
enum WFSensorConnectionStatus_t {
    case SENSOR_CONNECTION_STATUS_IDLE
    case SENSOR_CONNECTION_STATUS_CONNECTING
    case SENSOR_CONNECTION_STATUS_CONNECTED
    case SENSOR_CONNECTION_STATUS_INTERRUPTED
    case SENSOR_CONNECTION_STATUS_DISCONNECTING
}
```

先頭の`WF_`の部分がアンダースコアを含めて省略されている。
要追加検証。
fork 直前にシグナルを受けると親と子の両方が受ける例

タイムラインに次のようなものが流れてきまして、Ruby と同じ原因かどうかわかりませんが PHP でもそうなるなーと思ったので試しました。

<blockquote class="twitter-tweet" lang="ja"><p>親プロセスに送ったシグナルが子プロセスに通知されるように見えるのは、やっぱりRubyの問題っぽいなぁ。システムコールトレース取っても、子プロセスには実際にはシグナルは来てない。シグナル受信と処理にタイムラグがあって、その間に fork すると子プロセス側で処理しちゃってる感じ？</p>&mdash; とみたまさひろ (@tmtms) <a href="https://twitter.com/tmtms/status/513898893847695360">2014, 9月 22</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

PHP の [`pcntl_signal`][pcntl_signal] で登録するシグナルハンドラは、実は本当のシグナルハンドラとして実行されるわけではなく、受けたシグナルを一旦 PHP の側で（というか pcntl 拡張の中で）キューに保存して [`pcntl_signal_dispatch`][pcntl_signal_dispatch] の呼び出し時に普通に PHP のコールバック関数を呼ぶような感じで呼ばれます（`declare(ticks=1)` していれば `pcntl_signal_dispatch` が無くても勝手に呼ばれます）。

なので本来であればシグナルハンドラではできないような処理も記述できるのですが、次のようなコードだと [`pcntl_signal_dispatch`][pcntl_signal_dispatch] を呼んでから [`pcntl_fork`][pcntl_fork] するまでに受けたシグナルは親と子の両方で処理されます。pcntl 拡張の中で保持されているシグナルのキューごと fork されるからです。

```php
<?php
pcntl_signal(SIGHUP, function () {
    $pid = posix_getpid();
    echo "SIGHUP [$pid]\n";
});

$pid = posix_getpid();
echo "I am [$pid]\n";

echo "ここで HUP を打つと親だけ処理する\n";
sleep(10);

pcntl_signal_dispatch();

echo "ここで HUP を打つと親と子の両方が処理する\n";
sleep(10);

$pid = pcntl_fork();

if ($pid < 0) {
    exit("!!!fork");
} else if ($pid > 0) {
    // 親
    echo "Forked child process [$pid]\n";
    for (;;) {
        pcntl_signal_dispatch();
        sleep(1);
    }
} else {
    // 子
    for (;;) {
        pcntl_signal_dispatch();
        sleep(1);
    }
}
```

## 解決方法

次のように fork の前に [`pcntl_sigprocmask`][pcntl_sigprocmask] でシグナルをブロックし、[`pcntl_signal_dispatch`][pcntl_signal_dispatch] でシグナルのキューを空にしたうえで [`pcntl_fork`][pcntl_fork] し、その後 [`pcntl_sigprocmask`][pcntl_sigprocmask] でブロックを解除するといいのではないでしょうか（ブロック中に受けたシグナルはブロックを解除したときに処理されます）。

```php
<?php
pcntl_signal(SIGHUP, function () {
    $pid = posix_getpid();
    echo "SIGHUP [$pid]\n";
});

$pid = posix_getpid();
echo "I am [$pid]\n";

echo "ここで HUP を打つと親だけ処理する\n";
sleep(10);

pcntl_sigprocmask(SIG_BLOCK, [SIGHUP]);
pcntl_signal_dispatch();

echo "ここで HUP を打ってもブロックされるのでブロックが解除されるまでペンディングされる\n";
sleep(10);

$pid = pcntl_fork();
pcntl_sigprocmask(SIG_UNBLOCK, [SIGHUP]);

if ($pid < 0) {
    exit("!!!fork");
} else if ($pid > 0) {
    // 親
    echo "Forked child process [$pid]\n";
    for (;;) {
        pcntl_signal_dispatch();
        sleep(1);
    }
} else {
    // 子
    for (;;) {
        pcntl_signal_dispatch();
        sleep(1);
    }
}
```

[pcntl_signal]: http://php.net/manual/ja/function.pcntl-signal.php "pcntl_signal"
[pcntl_signal_dispatch]: http://php.net/manual/ja/function.pcntl-signal-dispatch.php "pcntl_signal_dispatch"
[pcntl_fork]: http://php.net/manual/ja/function.pcntl-fork.php "pcntl_fork"
[pcntl_sigprocmask]: http://php.net/manual/ja/function.pcntl-sigprocmask.php "pcntl_sigprocmask"
Dgeniで簡単に始めるngdocドキュメント生成

[Dgeni](https://github.com/angular/dgeni)は[ngdoc](https://github.com/angular/angular.js/wiki/Writing-AngularJS-Documentation)（※1）に対応したドキュメントジェネレーターです。
ngdocに対応したドキュメントジェネレーターは他にもありますが、Dgeniは@ngdocに指定できる種類の多さや、拡張性の高さという点で他より優れています。

しかし、Dgeniは若いツールで日本語でも英語でも情報がなく、またインストールしただけでは使えないため、始めるの少し敷居が高いのが難点です。
そこで簡単にDgeniを始める方法のご紹介をしたいと思います。

# インストール

```shell
npm install --save-dev grunt grunt-dgeni
```

GruntJS経由でDgeniの実行を行えるように[grunt-dgeni](https://www.npmjs.org/package/grunt-dgeni)をインストールします。

# 設定

```js:Gruntfile.js
grunt.initConfig({
  dgeni: {
    options: {
      // 読み込むJavaScriptファイルのベースディレクトリ
      basePath: '/path/to'
    },
    // 読み込むJavaScriptファイル
    src: ['src/*.js'],
    // ドキュメントを出力するディレクトリ
    dest: '/path/to/build'
  },
});
grunt.loadNpmTasks('grunt-dgeni');
```

上記が```/path/to/src/```直下にJavaScriptファイルからドキュメントを設定し、```/path/to/build```に出力する場合のGruntfile.jsの書き方になります。
注意点として```src```を指定する場合は、```options.basePath```が必須になります。
これはDgeniの仕様でドックコメントでモジュール名が省略された場合に、```options.basePath```もしくは、その直下のディレクトリをモジュール名と認識するためです。
詳しくは下記のissueを確認してください。

[Module name becomes two names · Issue #105 · angular/dgeni](https://github.com/angular/dgeni/issues/105)

# 実行

```shell
grunt dgeni
```

設定を終えて、上記のコマンドを実行するとドキュメントが```dest```に指定したディレクトリに出力されます。

デフォルトではパッケージに[dgeni-markdown](https://github.com/k-kinzal/dgeni-markdown)が使用されます。
他のパッケージを使用したり、独自のパッケージを使用する場合は

```js:Gruntfile.js
dgeni: {
  options: {
    packages: [
      'packageName',
      '/path/to/config'
    ]
  },
},
```

のように```options.packages```を使用してください。

# まとめ

いかがでしたでしょうか。
Dgeniも他のngdocに対応したドキュメントジェネレーター並みに簡単に扱えるようにしました。
恐らく、これからのAngularJSアプリケーションでドキュメントを生成する本命はDgeniになりそうなので、これを機会に皆さんも触り始めていただけると幸いです。

# 参考リンク

* [angular/dgeni](https://github.com/angular/dgeni)
* [angular/dgeni-packages](https://github.com/angular/dgeni-packages)
* [petebacondarwin/dgeni-example](https://github.com/petebacondarwin/dgeni-example)
* [k-kinzal/dgeni-markdown](https://github.com/k-kinzal/dgeni-markdown)
* [k-kinzal/dgeni-markdown-example](https://github.com/k-kinzal/dgeni-markdown-example)
* [k-kinzal/grunt-dgeni](https://github.com/k-kinzal/grunt-dgeni)

## 日本語情報

* [AngularJSアプリケーションのドキュメントをdgeniで自動生成しよう](http://qiita.com/kinzal/items/80b7489d80bb3c4f5b9c)
* [AngularJSアプリケーションのドキュメントを生成するDgeni簡易リファレンス](http://qiita.com/kinzal/items/13be4f0c1b9e1c730f2d)

## ngdocに対応したドキュメントジェネレーター

* [grunt-ngdoc](https://www.npmjs.org/package/grunt-ngdoc)
* [grunt-ngdocs](https://www.npmjs.org/package/grunt-ngdocs)
* [docular](http://grunt-docular.com/)
* [dgeni](https://github.com/angular/dgeni)

---

<p id="※1">※1 AngularJSで使用されている独自のドックコメント</p>
TravisCIは10分間何もコンソール出力がなければビルド失敗と扱われる

## 情報共有
* [TravisCIのコンソール出力上限は10000行まで](http://qiita.com/oh_rusty_nail/items/052efbe68fd2f45899e3)で長すぎるとログ眺めるのに不便なときもあるので工夫して短くすればと言ったのですが
* 別ファイルにリダイレクトしてコンソールには表示させないようにしたら**「10分間何もコンソールにでてなかったので失敗にします！」**と言われた
* ビルド処理に10分かかるしコンソールにもドバっと出るってのはなくもない話かなと
* 尚、以下のメッセージをはいてお亡くなります！

```
...
No output has been received in the last 10 minutes, this potentially indicates a stalled build or something wrong with the build itself.
```

# ～ただの宣伝～
* [全国のSeleniumer必読](http://qiita.com/oh_rusty_nail/items/b8ba525d31ea7c522856)
* Seleniumerといっていますが、Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
EaselJSでドラッグしたらオブジェクトを回す


[サンプル](http://jsdo.it/matsui_q/yOwm/)

#ドラッグでオブジェクトを回す

てこの原理を使う。
しくみとしては

* 視点から離れた位置を持った方が力がかかる
* 垂直に力を加えるとより力が加わる
 
というかんじ。

計算については、力のモーメントという考え方を使うっぽい
[FN1009002 - 力のモーメント - Flash : テクニカルノート](http://www.fumiononaka.com/TechNotes/Flash/FN1009002.html)


公式をざっくりいうと

![_r2_c2.gif](https://qiita-image-store.s3.amazonaws.com/0/3140/45c143bb-841d-8816-54bc-b8b110eea8a1.gif)


インスタンスの中心とドラッグしている座標を結ぶ部分がてこ(radius)
ドラッグするマウスの動き(fource)がてこに加える力になる。
それらをベクトル（方向と大きさを表すやつ）として考える

２次元のベクトルの外積の求め方は
てこのベクトル(radius)の座標を

```math
 r_xr_y 
```

マウスの動きのベクトル(fource)を

```math
 f_xf_y 
```

とすると

```math
 r_xf_y - r_yf_x
```

で求められるらしい。

[FN1312003 | 平面上の2直線の交点を外積により求める | HTML5 : テクニカルノート](http://www.fumiononaka.com/Business/html5/FN1312003.html)


てこのベクトル(radius)とマウスの動きのベクトル(fource)をPointインスタンスで作って、
外積計算関数に渡す

```
//てこのベクトル(radius)
var radius = new createjs.Point(lastMouse.x - card.x, lastMouse.y - card.y);
//マウスの動きのベクトル(fource)
var force = new createjs.Point(mouseX - lastMouse.x, mouseY - lastMouse.y);

var moment = crossProduct2D(radius, force);
```

```
//外積計算関数
function crossProduct2D(point0, point1) {
     return point0.x * point1.y - point0.y * point1.x;
}
```

#慣性で移動させる


ドラッグ中とドラッグ後でアニメーションが切り替えることで、
マウスボタンを放した後も減速しつつアニメーションできる。

```
function startRotation(eventObject) {
     update = updateDrag;
}
function stopRotation(eventObject) {
     update = updateInertia;
}

function updateDrag(mouseX, mouseY) {
     angularVelocity *= deceleration;
}
function updateInertia(mouseX, mouseY) {
     var velocityX = velocity.x;
     var velocityY = velocity.y;
     if (Math.abs(velocityX) + Math.abs(velocityY) + Math.abs(angularVelocity) < 1) {
          createjs.Ticker.removeEventListener("tick", rotate);
     } else {
          lastMouse.x = mouseX + velocityX;
          lastMouse.y = mouseY + velocityY;
          velocity.x = velocityX * deceleration;
          velocity.y = velocityY * deceleration;
          angularVelocity *= deceleration;
     }
}
```



#他参考になりそうなの
* [intentionallies](http://www.intentionallies.co.jp/content_normal.html)
* [CreateJSでドラッグして回転させる動きに挑戦 | kudox.jp](http://kudox.jp/java-script/createjs-physics-image)
Goのイースターエッグ的な識別子（notwithstanding, thetruthofthematter, ...）

以下の識別子はGoコンパイラのイースターエッグ的な識別子になっていて、コメント文と同じように読み飛ばされる。

```go
notwithstanding
thetruthofthematter
despiteallobjections
whereas
insofaras
```

つまりたとえば[下のようなコード](http://play.golang.org/p/nwJFUKLbJx)はコンパイルできて実行もできる。

```go
package main notwithstanding

import "fmt"

func main(thetruthofthematter) {
	fmt.despiteallobjections Println(whereas "hello")
	insofaras
}
```

これって何？というと特に意味はない。Ken Thompsonさんは若気の至りのようなもの、あるいはIan Lance Taylorさんはあれ？と思うと消えてなくなる幻のようなものと言っていたけど、要するにただの冗談。
Ruby | Gviz で我が家の恋愛相関図を書いた

# Ruby | Gviz で我が家の恋愛相関図を書いた
## 概要
我が家の恋愛相関図が入り組んで来たので Gviz で可視化します。

## コード

~~~ruby
require "gviz"

Graph do
  global layout:'dot', overlap:false
  nodes width: 3, height: 2, fontname:'MS UI GOTHIC'
  edges fontsize: 20, fontname:'MS UI GOTHIC'

  node :Husband, {label: '私'}
  node :Wife, {label: "妻"}
  node :OldestDaughter, {label: "長女"}
  node :SecondDaughter, {label: "次女"}
  edge :Wife_OldestDaughter, {label: "結婚しないでずっとそばにいて"}
  edge :Wife_SecondDaughter, {label: "結婚しないでずっとそばにいて"}
  edge :OldestDaughter_Husband, {label: "パパ結婚して"}
  edge :SecondDaughter_OldestDaughter, {label: "お姉ちゃん結婚して"}
  edge :Husband_OldestDaughter, {label: "いいよ"}
  edge :Husband_Wife, {label: "結婚してる"}
  edge :Wife_Husband, {label: "結婚してる"}

  save :"family", :png
end
~~~

## 出力

![family.png](https://qiita-image-store.s3.amazonaws.com/0/43480/080c3543-d514-a3ec-d14c-0ab3999f056e.png)
Data.Vector型をリストのようにパターンマッチさせる


Data.Vector型をリストのようにパターンマッチできないかなと調べていた時に、2ちゃんねるのプログラム技術板に以下のようなコメントを目にした。

![スクリーンショット 2014-09-22 11.49.21.png](https://qiita-image-store.s3.amazonaws.com/0/38648/55f35398-dccf-c792-edd4-43a4a70ac99e.png "スクリーンショット 2014-09-22 11.49.21.png")

このヒントに基づいて、以下のように、データ列をData.Vector.UnboxedとしたIIRフィルタを実装してみた。が、Cで書いたものよりも、2000倍！ほど遅い。ただならぬ遅さである。データ列をData.Array.Unboxedにして実装してみたら、Cの約３倍ほど遅いが、まあ使える。
しかしVector型のものはどうしてこんなに遅いのだろう？？要検討

```haskell
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE ViewPatterns #-}

iir :: UV.Vector Double -> UV.Vector Double -> UV.Vector Double -> UV.Vector Double
iir b a x = y
  where
    y = iir' b a w x
    w = UV.replicate mn 0
    m = UV.length b
    n = UV.length a
    mn = max m n

iir' :: UV.Vector Double -> UV.Vector Double -> UV.Vector Double -> UV.Vector Double -> UV.Vector Double
iir' b a w v = do
  case v of
    Nils
      -> UV.fromList []
    Cons x xs
      -> UV.cons y (iir' b a w' xs)
      where y = UV.sum $ UV.zipWith (*) b w'
            w0 = x - (UV.sum $ UV.zipWith (*) (UV.tail a) (UV.init w))
            w' = UV.cons w0 (UV.init w)


uncons :: UV.Unbox a => UV.Vector a -> Maybe (a, UV.Vector a)
uncons v = do
  case UV.null v of
    False -> Just (UV.head v, UV.tail v)
    True  -> Nothing

pattern Cons x xs <- (uncons -> Just (x, xs))
pattern Nils <- (uncons -> Nothing)
bowerのインストールとコマンド

備忘録です。


##インストール
まずはHomebrewをインストールします。

```
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

インストールできたか確認します。

```
brew -v
```
バージョンが表示されればインストール成功です。

続いてnode.jsをインストールします。

```
brew install node.js
```

インストールできたか確認します。

```
node -v
```
バージョンが表示されればインストール成功です。

bowerをインストールします。

```
npm install bower -g
```

インストールできたか確認します。

```
bower -v
```

バージョンが表示されればインストール成功です。


##初期化

作業ディレクトリに移動し、下記のコマンドを実行します。

```
bower init
```

いくつかの質問が表示されるので、答えるとbower.jsonが作成されます。


##コマンド


####パッケージのインストール

```
boer install パッケージ名 --save
```

// 特定バージョンを指定する場合

```
bower install パッケージ名#バージョン --save
```

例)
>bower install jquery --save
>bower install jquery#1.11.1 --save


※--saveを付けることでbower.jsonに依存関係(dependencies)を記述します。


###パッケージの削除

```
bower uninstall パッケージ名 --save
```

例)
>bower uninstall jquery --save


※--saveを付けることでbower.jsonの依存関係(dependencies)からパッケージを消去します。


###インストール済みパッケージの表示

```
bower list
```

###パッケージの検索

```
bower search
```



###特定のパッケージの検索

```
bower search 検索キーワード
```




##アップデート

```
npm update -g bower
```
iOS標準キーボードの登録単語をMac経由でATOK for iOSへインポートする

先程，長年待望されていた [ATOK for iOS](http://www.justsystems.com/jp/products/atok_ios/) がとうとう公開されました！

しかし，これまで iOS の標準キーボードを鍛え込むため登録していた多数の単語は，ATOK for iOS へは反映されないようです。
自分はこれまで，固有名詞や顔文字をはじめ，「めーる」→自分のメールアドレス，「でんわ」→自分の電話番号 など，いろいろ単語登録することで入力を便利にしていましたので，これを引き継ぎたいと思い，登録単語のエクスポート・インポートを試みました。

# 1. iOS → iCloud → Mac 経由で辞書をエクスポート
iOS と Mac の「ことえり」は，iCloud を経由して登録単語を共有しています。普段Macで「ことえり」を使っていなくても，iCloudの「書類とデータ」の同期を有効にしていれば，登録単語は同期されています。
そこで，Mac 経由で登録単語一覧をファイルとしてエクスポートすることができます。

OS X 10.9 Mavericks では，ことえりの環境設定からではなく，システム環境設定の「キーボード→ユーザ辞書」から登録単語をエクスポートすることができます。
[こちらの記述](http://www.monochrome-photo.info/?p=18557)に従い，登録単語を全選択して画面外にドラッグ＆ドロップすると，「ユーザ辞書.plist」が生成されます。

![dic0a.png](https://qiita-image-store.s3.amazonaws.com/0/41739/cb770a67-6687-7f50-7103-a6d058624693.png)
![dic05a.png](https://qiita-image-store.s3.amazonaws.com/0/41739/a849fcce-b04a-0c43-ef59-06cba0fba3e8.png)
（[上記サイト](http://www.monochrome-photo.info/?p=18557)より説明用画像を引用）


# 2. plist をATOK辞書形式に変換
次のスクリプトを ユーザ辞書.plist と同じフォルダで実行します。
すると，ATOK形式の辞書ファイル user_word.txt が生成されます。

```rb:plist2atok.rb
#!/usr/bin/ruby
require 'rexml/document'

dict = REXML::Document.new(open("ユーザ辞書.plist"))

open("user_word.txt","w:UTF-16LE"){|f|
  f.print "\uFEFF!!ATOK_TANGO_TEXT_HEADER_1\r\n\r\n"
  dict.elements.each('plist/array/dict') do |element|
    phrase   = element.elements[2].text
    shortcut = element.elements[4].text 
    f.print sprintf("%s\t%s\t名詞*\r\n", shortcut, phrase).encode(Encoding::UTF_16)
  end
}
```
## スクリプト実行方法の詳細
1. 上記スクリプトを plist2atok.rb として保存します。上のをコピー&ペーストしてもよいですし，[Gist](https://gist.github.com/doraTeX/e5f7b438afacbc3c5edf#file-plist2atok-rb)からダウンロードしてもよいでしょう。
2. plist2atok.rb を ユーザ辞書.plist と同じフォルダに置きます。以下では例としてデスクトップに置いたとします。
3. Finderで Command+Shift+U を押して「ユーティリティ」フォルダに移動し，ターミナルを起動します。
4. 以下のコマンドを順に実行します。すると，デスクトップに user_word.txt が生成されます。

```shell-session
cd ~/Desktop
ruby plist2atok.rb
```

# 3. iTunes経由でiOS版ATOKにインポート
[公式サイトの記述](http://support.justsystems.com/faq/1032/app/servlet/qadoc?QID=054768#a02)に従い，

> iTunes → iPhone → App → ファイル共有 → ATOK

を選択し，［ATOKの書類］リストに user_word.txt をドラッグすると，iPhone 内にこのファイルがコピーされます。

![load.gif](https://qiita-image-store.s3.amazonaws.com/0/41739/92b18247-45c7-87bc-349d-8e8a2f80b943.gif)
（[公式サイト](http://support.justsystems.com/faq/1032/app/servlet/qadoc?QID=054768#a02)より説明用画像を引用）

# 4. iOS版ATOKで一括単語登録
iPhoneのホーム画面からATOKを起動し，

> ツール → 一括処理 → 一覧出力ファイルの読み込み

をタップすると，単語が取り込まれ，読み込み結果画面が表示されます。
これで完了です！

![f14e96c9-7e2d-9855-7ba8-4377fc5fb3b2.png](https://qiita-image-store.s3.amazonaws.com/0/41739/3367e4c1-1fe5-0215-82da-7983cd454bb3.png)
npmコマンド


備忘録です。

###npmのバージョン確認
```
npm -v
```

##package.jsonを作成
```
npm init
```

##パッケージをインストール
```
npm install パッケージ名
```

##パッケージをグローバルにインストール
```
npm install -g パッケージ名
```

##パッケージをアンインストール
```
npm uninstall パッケージ名
```

```
npm r パッケージ名
```

##パッケージをグローバルからアンインストール
```
npm uninstall -g パッケージ名
```

```
npm r -g パッケージ名
```

##グローバルにインストールされたパッケージを全て確認する
```
npm ls -g
```

##グローバルにインストールされた特定のパッケージを確認する
```
npm ls -g パッケージ名
```

##パッケージをアップデート
```
npm update -g パッケージ名
```
Replica pool で Google Compute Engine のインスタンスを一度にたくさん立てる


漢なら Google Compute Engine 10 万ノード立てて分散レイトレーシングしたいですよね!

でも GCE の標準機能だと, 同時に 16 instances までしかインスタンス起動のリクエストを発行できません…  1 バッチ 10 秒で出来たとしてもインスタンスの起動だけでも 10 sec * 100K / 16 = 62500 sec = 17 時間半もかかってしまいます…

そこで replica pool で練習してみましょう.


https://developers.google.com/compute/docs/replica-pool/


残念ながら replica pool はまだプレビュー版です.
Web から Replica Pool API を有効にしておきます.
以下のように gcloud cli もアップデートして機能を有効にしておきます.

```
$ gcloud components update preview
```

以下のような感じでレプリカ(インスタンス)のタイプなどを指定するテンプレートファイル my-replica-pool-template.json を作ります. 

```
{ "template": {
    "vmParams": {
      "machineType": "n1-standard-1",
      "baseInstanceName": "my-replica",
      "disksToCreate": [{
        "boot": "true",
        "initializeParams": {
          "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20131120",
          "diskSizeGb": "10"
         }
       }],
     "networkInterfaces": [{
       "network": "default",
       "accessConfigs": [{
         "type": "ONE_TO_ONE_NAT",
         "name": "External NAT"
       }]
     }]
   }
  }
}
```

## Replica pools でインスタンスの起動

my-pool という名前で 100 インスタンス(100 replicas)立ててみます.

```
$ gcloud preview replica-pools --zone us-central1-a create --size 100 --template my-replica-pool-template.json my-pool

Replica pool my-pool is being created.
```


Web console で確認してみます!

![gce-replica-pools.png](https://qiita-image-store.s3.amazonaws.com/0/36275/382f6d3e-f9fc-9837-8d96-bc997d0945e3.png "gce-replica-pools.png")


あら素敵. あっというまに 100 インスタンス立ちました. 素晴らしい.

ただし現在は 500 replicas per pool, 5 Pools per project(per project?)という制約があります.

## Replica pool の削除.

delete コマンドで pool 指定で replicas の一括削除ができます.

```
$ gcloud preview replica-pools --zone us-central1-a delete my-pool
```

Cool! これでインスタンス数多く立てたい日も安心ですね!

## TODO

* レプリカに名前はランダムで付くようなので, 特定のレプリカ単位の操作をしたいときにどうするか?
* 外部 IP 振ると大変なことになりそうなので外部 IP 振らなくても管理できる方法を探す.
XCode6+Swiftでif条件式中の比較演算がエラーになる


# 環境
* Xcode 6.0.1（ベータ版でも発生してた）
* Swift

# 現象
ifの条件式中でオブジェクトのnil比較をしようとすると以下のようなコンパイルエラーになる。

```swift:8項目にオブジェクトのnil比較
var nilobjs: [AnyObject!] = [AnyObject]()
for _ in 0..<10 {
    nilobjs.append(nil)
}

if nilobjs[0] != nil && nilobjs[1] != nil && nilobjs[2] != nil && nilobjs[3] != nil && nilobjs[4] != nil && nilobjs[5] != nil && nilobjs[6] != nil && nilobjs[7] != nil {
    println("hoge")
}
```

```:エラーメッセージ
Cannot invoke '&&' with an argument list of type '($T64, $T68)'
```

# 原因
そのまんまだけど、8項目にオブジェクトの比較式があるとエラーになる。上記の```&& nilobjs[7] != nil```を消せば通る。
Bool型の比較に関しても同じようなエラーが発生し、Bool型の場合は次の条件のいづれかを満たす場合に出るっぽい。

* 条件1
    * 9項目にBool変数の比較演算がある
    * 10項以上ある

* 条件2
    * 10項目以降にBool変数の比較演算がある


```swift:エラー（条件1）
var ifs = [Bool](count: 10, repeatedValue: true)
        
if ifs[0] && ifs[1] && ifs[2] && ifs[3] && ifs[4] && ifs[5] && ifs[6] && ifs[7] == true && ifs[8] == true && ifs[9] {
    println("all true")
}
```

```swift:エラー（条件2）
var ifs = [Bool](count: 10, repeatedValue: true)
        
if ifs[0] && ifs[1] && ifs[2] && ifs[3] && ifs[4] && ifs[5] && ifs[6] && ifs[7] == true && ifs[8] && ifs[9] == true {
    println("all true")
}
```

10項以上あっても、比較演算子がなければ通る

```swift:通る
var ifs = [Bool](count: 10, repeatedValue: true)
        
if ifs[0] && ifs[1] && ifs[2] && ifs[3] && ifs[4] && ifs[5] && ifs[6] && ifs[7] == true && ifs[8] && ifs[9]{
    println("all true")
}
```

また、Boolの比較でなければこれも通る

```swift:通る
var ifs = [Bool](count: 10, repeatedValue: true)
var hoge:Int = 3
        
if ifs[0] && ifs[1] && ifs[2] && ifs[3] && ifs[4] && ifs[5] && ifs[6] && ifs[7] == true && ifs[8] && hoge == 3 {
    println("all true")
}
```

まあBool型を```== true```とは書かないだろうけど、オブジェクトのnil比較は明示的に```!= nil```とするようになったのだから発生し得る問題なのかな、と思いますが、エラーメッセージからは理由が分かりづらいので注意です。

多数のオブジェクトのnilチェックをする場合はどのように書くのが望ましいんでしょう？
オープンの通信簿


準とか偽とかプレとかめんどくさくなったので、オープンの定義2版の内容をそのまま通信簿形式にしてみることにした。

なお、必須項目の部分を落とすと一発落第になる形式。

元になっているのは、[オープンの定義 2版](http://qiita.com/nyampire/items/5aa1b3fc91890b132ab9) [英語原本](https://github.com/okfn/opendefinition/blob/master/source/open-definition-2.0/open-definition-2.0.en.markdown)です。

* (必須) 特定のライセンスが明示されている

* 適用しているライセンスについて

* (必須) ライセンス以外に勘案すべき追加条項が無い
* (必須) ライセンス以外に勘案すべき特許条項が無い
* (必須) データ全体が利用可能な状態である。
* (必須) 実費以上の複製費用を課していない
* (オプション) インターネット経由でのダウンロードが可能である

* (必須) ライセンス以外に必要な条項がある場合、その文言が配布物に同梱されている (貢献者の名前指定などを、ZIPに含むなど)

* (必須) ファイルの内容閲覧を行なうために、特殊なソフトウェアを要しない(せめて閲覧用のソフトウェアが、インターネット経由でダウンロード可能である。PDFやExcelなど)

### 適用しているライセンスについて
#### 以下の条件をみたすこと
* (必須) 自由な利用を許可しなくてはならない
* (必須) 再配布・商用利用を認めなくてはならない
* (必須) 再配布を行う際に、一次配布時と同じライセンスを適用することを許可しなくてはならない
* (必須) 一部分のみを分割した配布や、改変行為を認めなくてはならない
* (必須) 他作品と同時に頒布する場合、同時に頒布されるデータに対しても効力を発揮するようなライセンスであってはならない

* (必須) 特定の個人やグループを優遇してはならない
* (必須) ライセンス対象を利用する際にライセンス外の関連法案・関連条例による規制があってはならない
* (必須) 使用、再配布、改変そして編集を行う場合の、利用目的制限を行ってはならない
* (必須) データ使用料金やロイヤリティの設定をライセンス内で行ってはならない

### ライセンスで制限してもよい内容
* (オプション) ライセンスで定めて良い制限事項は、以下のみである。これら以外を定めてはならない。
* (オプション) 出典の帰属表示を求めても良い
* (オプション) 再配布時に、名称の変更を求めても良い
* (オプション) 再配布時に、一次配布時と異なる版管理を行うよう求めても良い
* (オプション) 再配布時に、内容の改変を必須としてもよい(つまり、原本そのままの再配布を禁じても良い)
* (オプション) 再配布物に、一次配布時と同じライセンスを付与することを必須にしても良い (いわゆるSA条項)
* (オプション) 出典の帰属表示 (著作権注記の維持など)を必須にしても良い
* (オプション) 再配布時に、さらなる改変が可能な形式でも公開することを必須とさせても良い (バイナリ配布時にはソースやデータも同時配布にさせる)
* (オプション) 技術的に行ってはならないこと、を規定することを禁止させても良い (XXX形式への変換を禁止する、という条項をつけるのをNGと謳ってよい)
* (オプション) データを利用するにあたって必要となる、関連する特許利用の特別免除を与えて良い
pythonでjson出力する際に対応していない型(e.g. datetime)の値を変換しながら出力したい

pythonでjson出力する際に対応していない型(e.g. datetime)の値を変換しながら出力したい。

## 対応していない型を含んだ辞書でTypeErrorが発生

pythonでdictをjsonに変換しようとする際にはjson.dumps(json.dump)が使える。
この時、対応していない型の値が含まれていた場合には以下の様な例外が発生する。

```py
# TypeError: datetime.datetime(2000, 1, 1, 0, 0) is not JSON serializable
```

例えば、datetime objectを含んだ辞書personをjson.dumps仕様とした際には以下のような結果になってしまう。

```py3
import json
from datetime import datetime

person = {
    "name": "Foo",
    "age": 20,
    "created_at": datetime(2000, 1, 1)
}

json.dumps(person)
# TypeError: datetime.datetime(2000, 1, 1, 0, 0) is not JSON serializable
```

## default引数に関数を与えることで、対応していない型に対するコールバックを設定する事ができる

json.dumpsは幾つかの引数を取れる。

```
json.dumps = dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, inden
t=None, separators=None, encoding='utf-8', default=None, sort_keys=False, **kw)
    Serialize ``obj`` to a JSON formatted ``str``.
...
```

この内のdefault引数に以下のような関数を与えてあげると、対応していない方に対するマッピングを後付で指定することができる。

```py3
def support_datetime_default(o):
    if isinstance(o, datetime):
        return o.isoformat()
    raise TypeError(repr(o) + " is not JSON serializable")

```

今度はjson.dumpsで変換することができる。

```py3
person = {
    "name": "Foo",
    "age": 20,
    "created_at": datetime(2000, 1, 1)
}


json.dumps(person, default=support_datetime_default)
# {"created_at": "2000-01-01T00:00:00", "age": 20, "name": "Foo"}
```

## あるいはJSONEncoderを継承したクラスを作成する

json.dumpsにcls引数で変換に利用するクラスを変更できる(defaultではjson.JSONEncoderが使われる)
したがって、以下の様なJSONEncoderを継承したクラスを定義してclsに渡してもOK。

```py3
class DateTimeSupportJSONEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, datetime):
            return o.isoformat()
        return super(DateTimeSupportJSONEncoder, self).default(o)

json.dumps(person, cls=DateTimeSupportJSONEncoder)
# {"created_at": "2000-01-01T00:00:00", "age": 20, "name": "Foo"}
```
C# Action<Action,Action>のそれぞれの引数をラムダ式で入れる

やりたいこと：Action型の引数を2つ以上持ってるActionを引数でとって、ラムダ式で処理を入れる

```
void Sum( Action<Action,Action> onComplete )
{
onComplete( ()=> {Action1つ目の処理} , ()=>{Action2つ目の処理} );

}
```
dokku(docker)を使ったPR連動ステージング環境


## 必要要件
- ubuntu 14.04
- ruby 2.1
- sinatra
- [dokku](https://github.com/progrium/dokku)

## セットアップ
### 必要要件をインストール
dokkuが動作出来る環境と、dokku-github-webhookで必要となるrubyとsinatraをインストールする。
sinatraのバージョンは特に意識していない。（現在使用しているのは1.4.5）
[digitalOcean](https://www.digitalocean.com/?refcode=9ea4e85b08e8)を使うと、dokku環境がそろっているので便利。


HOSTNAMEとVHOSTに、example.comを記述

### dokku-github-webhookの設定
１．[dokku-github-webhook](https://github.com/kiyo-e/dokku-github-webhook)をインストールする。  

```
$ cd /home/dokku  
$ sudo -u dokku git clone https://github.com/kiyo-e/dokku-github-webhook.git  
```
２．/home/dokku/.ssh/id_rsaを生成
３．dokku-github-webhookフォルダ内の、nginx.confを変更し、webhookを受けられるようにする。（server_nameをwebhook.example.comに修正）

### githubの設定
１. githubのプライベートアカウントからcloneできるように、/home/dokku/.ssh/id_rsa.pubをデプロイキーとして、該当リポジトリに登録。
２. webhook.example.comに対して、pull request時に通知が飛ぶよう、githubのwebhookに登録する。
３.githubに登録してるキーをauthorized_keysに登録

### worker.rbを起動
デーモン化するために、起動スクリプトを作って起動する。

```
$ cd /home/dokku/dokku-github-webhook
$ sudo ./bootstrap.sh
```


## デフォルトのENVを設定できるように
通常のdokkuの使い方では、herokuと同じようにENVを設定できるが、PRベースだと環境の構築回数が増えるので、毎回個別に設定していくのは面倒。そこで、デフォルトを指定できるようなプラグインを作成。

### インストール
```
$ sudo git clone https://github.com/kiyo-e/dokku-default-env /var/lib/dokku/plugins/dokku-default-env/
```

### 設定
/home/dokku/ENVを編集する。
うちで使っているのは、こんな感じです。

```
DATABASE_URL=mysql2://hoge:page@127.0.0.1:3306/staging
RAILS_ENV=staging
RACK_ENV=staging
```

## その他
環境を作成後、URLがわからないので別途、通知が必要になる。
具体的には/var/lib/dokku/plugins/notification/post-deployに

```
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x

APP="$1"
PORT="$2"

URL_FILE="$DOKKU_ROOT/$APP/URL"
APP_URL=$(cat $URL_FILE)

echo $APP_URL
curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"app_name":"'$APP'","app_url":"'$APP_URL'"}' http://example.herokuapp.com/
```

こんな感じのものを作って、heroku経由でいろいろ通知させてます。

## TODO
- deployにあわせて通知するようにしているが、初回のpull request時には２回通知されてしまう。  
- pull requestが同時に送られてきたときの処理が若干怪しい。  
- マイグレーション処理をどうするか。

## その他
URL長くなりがちなので、nginxのURLの長さの設定を変更しておいたほうがいいかも。
Yosemite(beta) + homebrew + rbenv + ruby + nokogiri


## Yosemite(beta) で bundle install すると nokogiri でエラる件。

- ruby 2.1.2p95
- nokogiri-1.6.3.1

```bash:nokogiri-1.6.3.1/gem_make.out
Building nokogiri using packaged libraries.
-----
libiconv is missing.  please visit http://nokogiri.org/tutorials/installing_nokogiri.html for help with installing dependencies.
-----
*** extconf.rb failed ***
```


出来るだけシンプルな解決方法を探した結果
xcode_6.1_beta_2.dmg をインストールした状態で
（brew doctor でエラーが出ないような状態ならインストール済みのはず）

```bash
$ xcode-select --install
```


ググると見つかる以下のような操作は不要。

```bash
$ brew tap homebrew/dupes
$ brew install libxml2 libxslt
$ brew install libiconv
$ gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libx（省略）
```
TravisCIのコンソール出力上限は10000行まで

## 情報共有
* TravisCIを利用していると何でもできてしまうのでつい色々なことをさせてしまいますよね
* それは多いに結構なことだと思うのですが、一点だけご配慮を！
* Travisを使うメリットの１つにビルドのリンクへ飛べば結果やコンソール出力を簡単に見ることができます
* コンソール出力は折り畳んで表示されたり、色付けされていたり見やすい工夫がされています
* ところが、**10000行**を超えると以下のような表示が出て、未加工なコンソールログへのリンクがはられます
 * 本物のコンソールログでは末尾のrow logのところがリンクになっています 

```
...
This log is too long to be displayed. Please reduce the verbosity of your build or download the the raw log.
```

## どういった時に不便と感じるのか
* デバッグしているときやリアルタイムでコンソールを追いたいときに(10000行以降は)自動でコンソールログが更新されない
* 黒一色なので見やすくはない
* 行番号もふられない

## どうするのがよいのか
* 「いや、そもそも長すぎでしょ。見ないっしょそのログとか」という意見ももっともかもしれません
* ただ、本当に見たいときに見れないのは都合が悪いので、少し工夫を加えた方がいいのではないかと思います
* ちなみに折りたたみ表示になっているものもセクション内の行もカウントされています

### ログ出力するものを絞る
* 1. curlコマンドのように-sオプションでサイレントモードを指定する
* 2. 別ファイルに出力しておいて、失敗したときだけに表示する
 * これが一番簡単な手当かもしれないですね。Xcodeのビルドとか各種インストール系のログはめっちゃいい勢いでログがはかれるので

# ～ただの宣伝～
* [全国のSeleniumer必読](http://qiita.com/oh_rusty_nail/items/b8ba525d31ea7c522856)
* Seleniumerといっていますが、Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
AngularJSのフォームを、投稿後に再利用する際、手付かずの状態に戻したい


例えば記事へのコメント投稿後に、そのフォームを再利用する際に、データを初期化しただけだとエラー表示が出てしまう。
ので、\$dirtyがfalse(\$pristineがtrue)の状態に戻したい。

いわゆるブログのコメント投稿とかのよくあるやつ.

form.FormControllerの$setPristine()を使う。

```comment_new.html
  <div ng-controller="CommentNewCtrl">
    <form name="commentNewForm">
      <div class="form-group"
           ng-class="{'has-error': commentNewForm.content.$dirty && commentNewForm.content.$invalid }">
        <textarea class="form-control" ng-model="comment.content" placeholder="" tabindex="1" name="content"
                  required></textarea>
        <span ng-show="commentNewForm.content.$dirty&&commentNewForm.content.$error.required">
          必須です
        </span>
      </div>
      <button ng-disabled="!commentNewForm.$valid" ng-click="save()">コメントを投稿</button>
    </form>
  </div>

```

```comment_new.coffee
angular.module('myApp')
.controller 'CommentNewCtrl', ($scope, Comment) ->

# .........................

  $scope.save = ->
    $scope.comment.$create((data)->
      # .........................
      $scope.comment = new Comment(report_id: reportId) #<- 初期化
      $scope.commentNewForm.$setPristine()  # <- コレ
    )

```

OK.
Mavericks に pyaudioを入れるまで


## 環境
- OS X 10.9.5(Mavericks)
- Python 2.7.5


1. http://people.csail.mit.edu/hubert/pyaudio/でMac OSX用のdmgをダウンロード
2. pyaudio-0.2.8.dmgをダブルクリック
3. 「Install PyAudio」をコントロールを押しながらクリックでOpen
4. あとはよしなに



~~~確かめ
kanpe:>python
Python 2.7.5 (default, Mar  9 2014, 22:15:05)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyaudio
>>>
~~~

怒られない!!

### 3.で普通にダブルクリックで開いた場合
![Screen Shot 2014-09-22 at 9.49.52 AM.png](https://qiita-image-store.s3.amazonaws.com/0/10722/b249ab2d-252e-0b4e-d370-a83b1b106012.png "Screen Shot 2014-09-22 at 9.49.52 AM.png")

### 3.のコントロールを押しながらクリックでOpenとは
![Screen Shot 2014-09-22 at 9.51.07 AM.png](https://qiita-image-store.s3.amazonaws.com/0/10722/1cd97c9c-d592-842c-1d2c-9c35f7831a92.png "Screen Shot 2014-09-22 at 9.51.07 AM.png")

### 3.でコントロール+Openから開いた場合
![Screen Shot 2014-09-22 at 9.51.26 AM.png](https://qiita-image-store.s3.amazonaws.com/0/10722/46efdb1b-c629-598f-d10f-66ea878ecb7f.png "Screen Shot 2014-09-22 at 9.51.26 AM.png")


## 参考
- [Homebrewでインストールしたpython2.7でPyAudioを使えるように設定@Mountain Lion](http://sat0yu.hatenablog.jp/entry/20121026/1351261965)
【質問】二次配列を用いてのCSV化::NoMethodError: undefined method `map' for #<String:0x000001011faca0>

エラー内容を検索しても、海外の文献しか引っかからず理解に苦しんでおり質問させていただきます。
どのように対処すれば宜しいでしょうか？？？

require 'csv'
	f = open("test.txt").to_a
	CSV.open("test.csv","wb") do |csv|
		f.each do |bo| 
		csv << bo
		end
	end
f.close

Error:NoMethodError: undefined method `map' for #<String:0x000001011faca0>

すいません、ご教授下さいませ。
gruntを立ち上げても "ERR_EMPTY_RESPONSE" とか "ERR_SOCKET_NOT_CONNECTED" とか出ちゃうとき


おそらく、プロジェクトが大きくなってきて、扱うファイル数が増えたことに起因するものです。
ulimitコマンドによってシステムリソースを拡充してあげましょう。

```
ulimit -n 1024
``` 

※1024部分は任意

これで解決するはずです。
Xcode6シュミレータでNSURLErrorDomain Code=-1005

iPhone6実機では起きないのに、シュミレータでは起きるこの事象。
いろいろ調べていたら、

tetsuo6666さんのこの投稿を見つけ
http://qiita.com/tetsuo6666/items/0f30fffbfd312fe17220

現在、わたしのマシンに入っているウィルスバスターを調査中です。
Goのフルスライス式 a[x:y:z] は何のためにある？

Goの[フルスライス式](http://golang.org/ref/spec#Slice_expressions)を使うと、スライシングするときにキャパシティを指定することができる。

普通のスライス式ではスライスした範囲を超えて配列の値にアクセスしたり変更することができる。

```go
a := make([]int, 100) // 長さ100の配列
s := a[0:10]          // 長さ10のスライスsを切り出す
t := s[0:100]         // sからsより長いスライスtを切り出す
```

上のようにすると、短いスライスから長いスライスを切り出して、元の配列の本来触れてほしくなかったところもアクセスできてしまう。組み込み関数のappendはキャパシティがある限り元の配列を上書きすることになっているので、appendとサブスライスを使っていると知らない間にオーバーランしてしまっていることもありえる。

フルスライス式を使うとそのようなことを防止できる。

```go
a := make([]int, 100) // 長さ100の配列
s := a[0:10:10]       // 長さ10のスライスsを切り出す
t := s[0:100]         // ランタイムエラーになる
```

でもこの式って必要？ というと、ほとんど使う機会はない。配列は通常1つの目的のために別々にアロケートされるので、無関係なものがオーバーランして困るということがほとんどないからだ。

積極的にフルスライス式を使いたいケースは、大きな配列を確保して小さくそれを切り出して使うような、ある種のメモリアロケータを自前で書くときのようなケースだ。そういう機会はほとんどないと思うけど、文法上存在する機能なので覚えておいたほうが「これはなんだ？」とあとで思わなくて済む。でもまあその程度だ。
sandbox-execを利用しファイルの変更を抑止

なんかよくわからん実行ファイルを実行するハメになった場合、
sandbox-execが役に立ちます。

* [新・OS X ハッキング! (37) これから必須のセキュリティモデル「サンドボックス」 | マイナビニュース](http://news.mynavi.jp/column/osxhack/037/)

```bash:読み取り専用
$ sandbox-exec -n no-write /bin/bash
bash-3.2$ date > a.txt
bash: a.txt: Operation not permitted
```
MySQL to PostgreSQLへのマイグレーションツール起動手順メモ

###MySQLのデータ移行
MySQLは良く使うのだけど、PostgreSQLは使ったことなかったのでテーブル定義を書き直すのがめんどくさく、何かマイグレーションツールは無いものかと検索検索。

#####参考:
[Converting from other Databases to PostgreSQL](https://wiki.postgresql.org/wiki/Converting_from_other_Databases_to_PostgreSQL)

##MySQL to PostgreSQL Migration Wizard by EnterpriseDB v1.1

MySQL to PostgreSQL Migration Wizard by EnterpriseDB v1.1というものを使ってみることにした。
PostgreSQLのEnterpriseDBをFreeでインストールすれば、機能の一部として使えるみたいなのだけど、ユーザ登録をしないといけないらしい。配布されているソースコードから直接起動して使ってみることに。起動までの手順をメモ

###ソースコードのダウンロード

[Downloadページ](http://www.enterprisedb.com/downloads/postgres-postgresql-downloads)の、[Components & Other Downloads]タブをえらび、MySQL PostgreSQL Migration Wizard by EnterpriseDB v1.1をダウンロード。

![マイグレーションツール1.JPG](https://qiita-image-store.s3.amazonaws.com/0/36221/efce065d-932d-1c67-09c4-b4f4a603a305.jpeg)

適当なディレクトリに解凍しておく。
解凍するとwizardディレクトリが作成されるはず

wizard
　├─build
　│  ├─core
　│  └─wizard
　├─lib
　├─build.xml
　└─src



###java起動用batファイルの作成

wizardディレクトリにbatファイルを作成

```cpset.bat
@echo off
set CP=%CP%;%1
```

```wizard.bat
@echo off
set CP=.;build\core;build\wizard
for %%J in (lib\*.jar) do call cpset %%J

echo classpath = %CP%
java -cp %CP% com.enterprisedb.migration.WizardLauncher
```


あとは、コマンドで実行するだけ
`(解凍ディレクトリ)> wizard.bat`


## 使ってみて・・・
 マイグレーションの際、環境を合わせないとうまくデータ移行ができないのかもしれない。
 (今回の使用は、Amazon RDS(MySQL) -> Windows上のPostgreSQL)
 ＤＢのロケール設定が違うためにうまくデータが変換できてないような気がする。
セルの値からURLを抽出

![data1.png](https://qiita-image-store.s3.amazonaws.com/0/25728/168a868d-d324-6e23-b337-82db9d072e36.png)

## マクロ

参考: [エクセルでハイパーリンクのＵＲＬだけを文字抽出したい - オフィス系ソフト - 教えて！goo](http://oshiete.goo.ne.jp/qa/2356920.html)

```vbnet:マクロ登録
Public Sub GetURL()
    Dim h As Hyperlink
    For Each h In ActiveSheet.Hyperlinks
        h.Range.Offset(0, 1) = h.Address
    Next
End Sub
```

## 準備

![マクロ2.png](https://qiita-image-store.s3.amazonaws.com/0/25728/584ca822-3c37-1e5c-f756-6ef521454d12.png)

![マクロ1.png](https://qiita-image-store.s3.amazonaws.com/0/25728/0c1606ce-ab33-6e80-5bf1-1d316a4be503.png)

## 実行結果

![data2.png](https://qiita-image-store.s3.amazonaws.com/0/25728/8f4fc8ce-3e23-b03d-7b84-bc9b22de18f5.png)
Goでチャネルにブロードキャストするにはcloseを使う

クローズされたチャネルはゼロ値が常に送られてくるチャネルのように振る舞うので、これを利用して、チャネルの受信側に一斉通知するためにcloseを使うことができる。

チャネルがクローズされるとそのチャネルで待っているgoroutine（複数でも良い）は一斉にアンブロックされてゼロ値を受け取ることになる。

ブロックしているgoroutineの数だけ通常の値を送って全員を起こしてもよいけど、それだと何個のgoroutineが待っているのかという知識が必要になってしまうし、数え終わった後、かつ値を送る前に、ブロックしているgoroutineが増えるといけないので排他制御も必要になってしまう。これに対してチャネルをクローズする方法はただクローズすればよいだけなので使うのが簡単。
Xcode 6 で新規作成したプロジェクトを iPhone 5 or 5s w/ iOS 7 上で実行すると上下に黒帯が入る

ある程度書いてから気づいたので泣きそうになった。

結論としては、iPhone 4s -> 5 のときのように、起動画面用のリソースの有無によりアプリの表示サイズを決定しているようだ。

Asset Catalog 等で、LaunchImage として`@2x`と`-568h@2x`の画像(定義)を用意してあげれば、きちんとフルスクリーンでアプリが実行される。
同時に LaunchScreen も設定しておけば、iOS 8 ではそちらが使われる。

---

***Asset Catalog を使う例***

![ss 2014-09-22 5.54.13.png](https://qiita-image-store.s3.amazonaws.com/0/13151/c2ddd9ae-f5ae-d180-0245-9ca689c92120.png)


*[Use Asset Catalog] -> [Migrate]*


![ss 2014-09-22 5.54.40.png](https://qiita-image-store.s3.amazonaws.com/0/13151/35451146-902f-9a8f-2a22-e8b2cd6ea081.png)

![ss 2014-09-22 5.55.45.png](https://qiita-image-store.s3.amazonaws.com/0/13151/7d68c123-9b94-4db3-5c85-4b13222f9944.png)
話題のsixelを使い端末で画像表示してみた

# Sixel情報

* [Sixel Graphics復活への動き - Togetterまとめ](http://togetter.com/li/375434)

<blockquote class="twitter-tweet" lang="ja"><p>Sixel関連のリンク、対応ソフトウェア、シェルでの Sixelグラフィックス出力例をざっと書いてみた。抜けなどあったらごめんなさい。 <a href="https://twitter.com/hashtag/kernelvm?src=hash">#kernelvm</a> <a href="https://twitter.com/hashtag/sixel?src=hash">#sixel</a>&#10;Sixel 情報 - ダメ出し Blog&#10;<a href="https://t.co/jC71DYSOhq">https://t.co/jC71DYSOhq</a></p>&mdash; シェル魔王と呼ばれて (@satoh_fumiyasu) <a href="https://twitter.com/satoh_fumiyasu/status/513626087239065601">2014, 9月 21</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

## その他

* X + mltermが必要。(iTerm2では画像表示されない)
* [VT100.net Animation](http://vt100.net/animation/) 9600bpsで表示させないと一瞬で終わります。
* [VT100.net: VT330/VT340 Programmer Reference Manual Volume 2: Graphics Programming](http://vt100.net/docs/vt3xx-gp/)

# インストール

```bash:
brew tap aki017/sixel
brew install mlterm
brew install --HEAD libsixel
mlterm
```

* img2sixelはlibsixelに含まれています。

# 画像表示

```bash:
curl -s http://9oo.jp/image/logo_on.gif | img2sixel
```

![スクリーンショット 2014-09-22 5.34.42.png](https://qiita-image-store.s3.amazonaws.com/0/25728/81e62ef3-d92d-75c3-5506-cf1a91352ec9.png)

* GIF画像も行ける

```bash:gifの例。ctrl+cで終了
img2sixel http://goo.gl/YWPKxy
```

# muttで添付画像の表示してみた

## .mailcapで設定前

![wrong1.png](https://qiita-image-store.s3.amazonaws.com/0/25728/0a175ff1-5c59-6f47-30f3-4a66de27a76e.png)

## .mailcapで設定

```bash:~/.mailcap
image/png; img2sixel;
```

![スクリーンショット 2014-09-22 6.02.55.png](https://qiita-image-store.s3.amazonaws.com/0/25728/bd4ec5d9-d369-1dc7-d7bc-be3c385a11ff.png)

一瞬で表示終了するけど、見れるね。
Cocos2d-xでパズドラ風動作の作成

# 概要
[ツムツム動作](http://qiita.com/otmb/items/389b97967f2992a34d95)に引き続き試しにパズドラ風作ってみました。
まだリファクタリングも中途ですが公開してます。
土、日使って２日で作成。操作部分よりもブロックの判定がめんどくさかった。

# GitHub
https://github.com/otmb/cocoPuzdra

![Puzdra.gif](https://raw.githubusercontent.com/otmb/cocoPuzdra/master/Sample.gif)

# 処理内容
## 触ったSpriteの特定
ツムツムの場合SpriteにPhysicsをつけていたので触ったSpriteを特定できましたが、今回は物理演算を使わない為、配列に納めたSpriteで触ったSpriteを特定するロジックとしました。
## Spriteの並び判定
1. 揃ったSpriteの数に応じてSpriteにフラグを立てる
1. フラグの立っていないSpriteの順序を並び替えてずれた分下降させる
1. フラグを立てたSpriteを異なるSpriteに置き換えて最上段に移動して下降させる

配列に納めたSpriteを破棄せずリサイクルしています。
MacOS 10.9でgithubにつながらない


#現象
SSLの証明書エラー

- safariにてgithubにつながらない
- brewでSSL certificate問題と表示される。

辛うじて、Chromeでは強引に接続できる。

そして、brewでは、こんなエラーがでる。

```shell
$ brew tap homebrew/binary
Cloning into '/usr/local/Library/Taps/homebrew/homebrew-binary'...
fatal: unable to access 'https://github.com/Homebrew/homebrew-binary/': SSL certificate problem: Invalid certificate chain
```

#解決方法
正しいCA証明書を入れることにより解決しました。
いくつかのところで掲載されているCAを消せばOKかとおもいきや、復旧しなかったので、証明書に正しいものをいれました。

###以下のURLにアクセス
https://www.digicert.com/digicert-root-certificates.htm#roots

###この内容の証明書を入れる

![DigiCert_Root_Certificates____Download_and_Test_SSL_と_githubにつながらない.jpg](https://qiita-image-store.s3.amazonaws.com/0/44315/f86ecd84-9811-f01d-fd86-8a958522b0ea.jpeg "DigiCert_Root_Certificates____Download_and_Test_SSL_と_githubにつながらない.jpg")

「DigiCert High Assurance EV Root CA」


ダウンロードして、ダブルクリックすると。キーチェンーが開きます。
そこで、「システム」を選択していれました。

これで無事に解決！
RubyKaigi2014の知見 | Tracepoint #rubykaigi 

# RubyKaigi2014の知見 | Tracepoint

## 概要
RubyKaigi2014の知見シリーズ。
Tracepoint は標準ライブラリ。
Ruby インタプリタのイベントをトレースする。
Kernel#set_trace_func をオブジェクト指向的な API にしたもの。

## イベント一覧
|name|event|
|:--|:--|
|:b_call|ブロックの開始。|
|:b_return|ブロックの終了。|
|:c_call|C で記述されたメソッドの呼び出し。|
|:c_return|C で記述されたメソッド呼び出しからのリターン。|
|:call|Ruby で記述されたメソッドの呼び出し。|
|:class|クラス定義、特異クラス定義、モジュール定義への突入。|
|:end|クラス定義、特異クラス定義、モジュール定義の終了。|
|:line|式の評価。|
|:raise|例外の発生。|
|:return|Ruby で記述されたメソッド呼び出しからのリターン。|
|:thread_begin|スレッドの開始。|
|:thread_end|スレッドの終了。|

## サンプル集
### メソッド呼び出しをトレース
~~~ruby
trace = TracePoint.new(:call) do |tp|
  p [tp.lineno, tp.defined_class, tp.method_id, tp.event]
end
trace.enable

class Hoge
  def hoge
    "hoge"
  end
end

Hoge.new.hoge
~~~

出力

~~~
[7, Hoge, :hoge, :call]
~~~

### クラス定義開始、終了をトレース
~~~ruby
trace = TracePoint.new(:class, :end) do |tp|
  p [tp.lineno, tp.defined_class, tp.method_id, tp.event, tp.self]
end
trace.enable

class Hoge
  def hoge
    "hoge"
  end
end
~~~

出力

~~~
[6, nil, nil, :class, Hoge]
[10, nil, nil, :end, Hoge]
~~~

### メソッドの実行終了をトレース

~~~ruby
trace = TracePoint.new(:return) do |tp|
  print File.read(tp.path).each_line.select { |e|e =~ /\.hoge/ }.last.chomp
  print " # => "
  print tp.return_value , "\n"
end
trace.enable

class Hoge
  def hoge(msg)
    msg*3
  end
end

Hoge.new.hoge("hoge")
~~~

出力

~~~
Hoge.new.hoge("hoge") # => hogehogehoge
~~~

## 参照
http://docs.ruby-lang.org/ja/2.1.0/class/TracePoint.html
dashingまとめ

gem dashing( https://github.com/Shopify/dashing )の覚書き

## 概要
* sinatraを使ったデジタルサイネージ
* Rails版はこちら
    * https://github.com/gottfrois/dashing-rails
* 3つの要素で構成される
    1. ウィジット(widgets/)
        * 時計やテキストなどのサイネージのそれぞれの要素のフロント部分
    1. ダッシュボード(dashboards/)
        * ウィジットを集めたもの
    1. ジョブ(jobs/)
        * ウィジットにデータを送るバックエンド部分
* jobでデータを集め、widgetにデータを投げ、dashboardに表示する

## インストール
* http://blog.qnyp.com/2013/05/09/try-dashing/

## 使い方など
* http://blog.qnyp.com/2013/05/09/try-dashing/
* http://orangain.hatenablog.com/entry/dashing
* http://inokara.hateblo.jp/entry/2014/04/06/075413

## 追加のウィジット・ジョブ
* https://github.com/Shopify/dashing/wiki/Additional-Widgets

## デフォルトのウィジェット
### 共通
* `title`でウィジェット上部のタイトルを書き換える
* `moreinfo`でウィジェット下部の追加メッセージ部分を書き換える
* データの受け渡し・受け取り
 * ダッシュボードのerbからは`data-xxx`で受け渡し
 * jobのrbからは`xxx`で受け渡し
 * ウィジェットのerbは`data-bind=xxx`で受け取り
 * ウィジェットのcoffeeは`@get('xxx')`で受け取り

### data-view: Text
![text.png](https://qiita-image-store.s3.amazonaws.com/0/6892/c955333b-c875-66ad-8b97-c7bdda670de1.png)

### data-view: Meter
![meter.png](https://qiita-image-store.s3.amazonaws.com/0/6892/c1a1779c-9092-bece-0c85-0c64a16fde6b.png)

* 値を`value`
* 最大値を`max`
* 最小値を`min`
* 最大値・最小値を省略するとメーター部分が動かない

### data-view: List
![list.png](https://qiita-image-store.s3.amazonaws.com/0/6892/aaabb6c1-2e61-7742-1e86-be0189e6925c.png)


### data-view: Number
![number.png](https://qiita-image-store.s3.amazonaws.com/0/6892/428ca9a9-ff98-e0ca-a8d2-30251ee31a03.png)

* 中央の値は`current`
* その下の差分は`current`と`last`の差分の割り合い
 * %ではなく純粋な差分だけを出す場合はcoffeeを書き換える
* $は`prefix`で変更する


### data-view: Graph
![graph.png](https://qiita-image-store.s3.amazonaws.com/0/6892/a0f6e74f-9c1c-3482-48eb-e9a150a64eba.png)


### data-view: Clock
![clock.png](https://qiita-image-store.s3.amazonaws.com/0/6892/25b2d68b-bee9-2c79-de72-efa5e72ff931.png)

* 特に設定項目なし

### data-view: Image
![image.png](https://qiita-image-store.s3.amazonaws.com/0/6892/5922964b-db58-d972-1777-4a8606897563.png)

* `image`で画像を指定する
* coffeeには一応フェードイン・フェードアウトをやりたければこうしろみたいなのが書いてある

### data-view: Commnet
![comment.png](https://qiita-image-store.s3.amazonaws.com/0/6892/b54409ee-0647-836a-0f0d-1c2eddd635c0.png)
grunt を実行したけど、tasks ERROR が出て、にっちもさっちもな場合

次のようにGrantfileにタスクがエラーとか言われる。

`Loading "Gruntfile.js" tasks...ERROR`
`Error: Cannot find module 'load-grunt-tasks'`
`Warning: Task "default" not found. Use --force to continue.`

どうにもバージョンが違うのが原因らしい。

次の手順でアップデートして解決
`$ npm update npm -g`
or
`$ sudo npm update npm -g`

`$ npm install `
or
`$ sudo npm install `

仕上げに、念のため再度bower
`$ bower install`
Ruby | RubyKaigi2014で話題に。安全に Ruby のコードを変換できる Synvert gem をインストール #rubykaigi 

# Ruby | RubyKaigi2014で話題に。安全に Ruby のコードを変換できる Synvert gem をインストール

## 概要
RubyKaigi2014で話題になった安全にRubyのコードを変換できる Synvert gem をインストールして
簡単な動作確認をしてみます。

* [Synvert GitHub](https://github.com/xinminlabs/synvert)
* [Synvert Document](http://xinminlabs.github.io/synvert/)

## Synvert って？
Synvert は Ruby のコード変換用の gem です。
RubyKaigi 2014 の発表により注目度アップ中。

Rubyは動的言語の特性上、リファクタリングを行う際などに
ツールの補助を受けられない（or 受けにくい）ケースが多々あります。

そのため、 

* 正規表現などで文字列置換する
* ripper などで AST を操作する

などの方法がありますが、前者は誤った置換などの可能性があったり厳密さを欠くし、
後者は厳密に変換できるが、扱いがやや難しいです。

この両面を改善し、扱いやすく厳密な変換ができるツールがSynvert になります。

主な用途としては、各種ライブラリのバージョンアップに対応するための
コード修正などです。

## インストール

~~~bash
$ gem install synvert
$ synvert -v
0.6.3
$ synvert -h
Usage: synvert [project_path]
    -d, --load SNIPPET_PATHS         load custom snippets, snippet paths can be local file path or remote http url
    -l, --list                       list all available snippets
    -q, --query QUERY                query specified snippets
        --skip FILE_PATTERNS         skip specified files or directories, separated by comma, e.g. app/models/post.rb,vendor/plugins/**/*.rb
    -s, --show SNIPPET_NAME          show specified snippet description, SNIPPET_NAME is combined by group and name, e.g. ruby/new_hash_syntax
        --sync                       sync snippets
    -r, --run SNIPPET_NAMES          run specified snippets, each SNIPPET_NAME is combined by group and name, e.g. ruby/new_hash_syntax,ruby/new_lambda_syntax
    -v, --version                    show this version
~~~

## snippet を取得

~~~
$ synvert --sync
~~~

## Ruby1.9から導入された lambda 記法の変換を実行
### 変換前
~~~bash
$ cat hoge.rb 
lambda { test }
# lambda { test }
lambda { |a, b, c| a + b + c }
# lambda { |a, b, c| a + b + c }
~~~

### 変換実行＋確認
変換が正しく実行されます。
コメント部はそのままになっているところがポイント。

~~~bash
$ synvert -r ruby/new_lambda_syntax
===== ruby/new_lambda_syntax started =====
===== ruby/new_lambda_syntax done =====
$ cat hoge.rb 
-> { test }
# lambda { test }
->(a, b, c) { a + b + c }
# lambda { |a, b, c| a + b + c }
~~~

## 参照
* [Synvert GitHub](https://github.com/xinminlabs/synvert)
* [Synvert Document](http://xinminlabs.github.io/synvert/)
* [Synvert Snippets](https://github.com/xinminlabs/synvert-snippets/)
* [Synvert Demo](http://synvert-tools.herokuapp.com/)
k-meansでfeature learning

deep learning流行っているけど学習に時間かかるのとGPU持ってないのでCPUでも割と高速に動くっぽいk-meansでfeature learningする手法が気になっている。

- [An Analysis of Single-Layer Networks in Unsupervised Feature Learning [2011, coates et.al.]](http://web.stanford.edu/~acoates/papers/coatesleeng_aistats_2011.pdf)
- [Hierarchical
k
-Means for Unsupervised Learning [Harry Gifford]](http://www.andrew.cmu.edu/user/hgifford/projects/k_means.pdf)

検索した範囲だと上記あたり。
CIFAR-10でのベンチマークでは2層の畳み込みDBNよりaccuracy高いみたい。
【logrotateの実行タイミング】/etc/crontabに無い時の確認方法

#logrotate(daily, weekly,monthly)の実行タイミング
##/etc/crontabに無い時は/etc/anacrontabを確認する

```bash

# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22

#period in days   delay in minutes   job-identifier   command
1	5	cron.daily		nice run-parts /etc/cron.daily
7	25	cron.weekly		nice run-parts /etc/cron.weekly
@monthly 45	cron.monthly		nice run-parts /etc/cron.monthly
```

しかも実行タイミングが違います。
dailyを一例に取ると
3:11～3:50の間に実行されます。

ググッタら書いてありました。
###引用元

>https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/ch-Automating_System_Tasks.html

##何故/etc/crontabに書いていないのか
###答え
centos5以前であれば/etc/crontabに
centos6以降デフォルトでは/etc/anacrontabに
という事らしいです。

ありがとうございます!!!
###引用元
>http://hack.aipo.com/archives/420/

##旧logrotateのタイミング
```bash
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly



```