OmniAICreator/Qiita-1.07M huggingface dataset:
ないと困る。サイト制作の際必要なショートカット

1年前はショートカットを全く使っていなかった私がここ最近ないと困るショートカットのリスト
思いついた順に足していく。

# PC:windows
### F11 
フルスクリーンモード
### F12
要素を検証
### alt + F4 
選択しているアプリケーションを閉じる
### (ウィンドウズマーク)　+ P
プロジェクター接続への変更
### windowsロゴキー + D 
表示されているウィンドウすべて非表示/表示
### control + shift + escape 
タスクマネージャー

#Browser

## Google Chrome
### alt + → or ←　
browser next/back
### ctrl + U
ページのソースを表示
### shift + alt + B　
お気に入りブックマークへフォーカス
（そのあと矢印キーで選択できます。）
### ctrl + shift + T 
以前消したタブを表示

### ctrl + shift + R
キャッシュを上書きして再読み込み（スーパーリロード）できる

## IE
### Shift + Ctrl + U
メモリ使用量など

# Editor

## sublime text
### ctrl + shift + D 
行コピー
### ctrl + shift + K
行削除

# Tools

## Googleスプレッドシート
### ctrl + ; 
現在時刻入力
### ctrl + shift + ;　
現在日時入力
ファイルの一括置換ワンライナー(複数行対応)

#### ソース

```bash
find src/ -type f -name '*pp' -print | xargs grep -l DEBUG_LOG | while read cppfile; do;perl -0777 -i -pe 'print s/DEBUG_LOG(.*?);//gs;' $cppfile; done;
```
#### 利用シーン
下記の様なデバッグログがあったとしてプロダクションなどではログを生成するコストすらも削ぎ落としたい場合
###### hoge.cpp
```cpp
DEBUG_LOG << "Debug log, as single line." << std::flush;

DEBUG_LOG 
  << "Debug log" 
  << ", as multiple line."
  << std::flush;
```
AWSの支払い通貨を"USD"から"JPY"へ変更する

## はじめに
本日発表された、[AWSアカウントの支払い通貨変更](https://aws.amazon.com/jp/blogs/aws/new-set-preferred-payment-currency-for-your-aws-account/)について、私のアカウントで変更手順をまとめました。

今回のアップデートは、**『元の価格はドルのままであり為替リスクが無くなるわけではなく、カード支払いの際にドル支払いだけでなくユーザ自身に合わせた支払方法を選択することができるということ。』**

## 変更手順
**デフォルト設定は以下のようになっています。**
![Billing_Management_Console.png](https://qiita-image-store.s3.amazonaws.com/0/24337/a0b4b320-11c5-7592-8c94-e1d185dd8cd2.png)

**[Edit]ボタンをクリックして、"JPY"を選択します。**
![全画面_2015_02_17_9_07.png](https://qiita-image-store.s3.amazonaws.com/0/24337/00973613-3b80-9e4e-a96b-b2eb2ca5d52a.png)

**"JPY"を選択すると現在のレートが表示されます**
![Billing_Management_Console2.png](https://qiita-image-store.s3.amazonaws.com/0/24337/6472029c-2a1a-6e01-d840-11a16b871a0f.png)

**上記で[Update]ボタンクリックして、以下の画面で[Accept]ボタンクリック**
![Billing_Management_Console3.png](https://qiita-image-store.s3.amazonaws.com/0/24337/2db1c70a-b717-76c6-deb9-d775a35562ea.png)

**変更前は"USD"だったが、変更後は"JPY"になっていることが確認できます**
![全画面_2015_02_17_9_11.png](https://qiita-image-store.s3.amazonaws.com/0/24337/933a14eb-de05-71d9-a2c9-66ed7366ed45.png)

**Billsの部分もJPYで表示されています**
![全画面_2015_02_17_9_38.png](https://qiita-image-store.s3.amazonaws.com/0/24337/809050fc-ed9b-8702-509c-dd3bac321d4f.png)

## 追記
今回の私の手順ではJPYでしたが、別の通貨も選択できます。
FAQにも支払い通貨単位について記載されています。
[http://aws.amazon.com/jp/billing/faqs/#currency-1](http://aws.amazon.com/jp/billing/faqs/#currency-1)
Xcodeでテスト時にアプリを起動させない方法


これでもシミュレーターは起動してしまうので起動させない方法あれば教えて下さい。

# Targets > xxxTestsのBuild Settingの以下を削除

## Linking > Bundle Loader > Debug
$(TEST_HOST)

## Testing > Test Host > Debug
$(BUILT_PRODUCTS_DIR)/xxx.app/xxx
access_log.??.gzをaccess_log.YYYY-MM-DD.gzにリネームする君作った

## 説明

```bash:
access_log.10.gz
access_log.11.gz
...
```

を

```bash:
access_log.2014-12-03
access_log.2014-12-02
...
```

にリネームする君作った。

## download

* [tukiyo/file2modday_renamer](https://github.com/tukiyo/file2modday_renamer)

```bash:
#!/bin/sh
set -eu

error() {
  echo "[quit] command error."
  echo "example1: $0 access_log --noop"
  echo "example2: $0 access_log"
  exit 1
}

if [ $# -eq 0 ];then
  error
fi

BASENAME=$1

for i in ${BASENAME}.*.gz
do
  YMD=$(stat -c %y $i | cut -f 1 -d " ")
  if [ $# -eq 2 ];then
    if [ $2 = "--noop" ];then
      echo mv $i ${BASENAME}.${YMD}.gz
    else
      error
    fi
  else
    mv $i ${BASENAME}.${YMD}.gz
  fi
done
```

error_logとかにも使えます。
【Rails】SQLでTableを指定してJoinをする

多段ネストしている状態でWhere句を実施した場合
データを引っ張るテーブルの指定制御がずれる可能性がある。

ずれた場合は下記にてTableを指定すること
.where(issues: {project_id: project_id})

joinやincludeで書く方法もあるらしい
ruby on railsのディレクトリでコマンドを打つ度に以下エラーが出る時の対処法（warning: ignoring extraneous `ruby-' prefix in version `ruby-***'）

##現象
rbenvでrubyのバージョンを管理している時ふいに以下エラーが出た
``` warning: ignoring extraneous `ruby-' prefix in version `ruby-***'
         (set by /rubyonrailsのディレクトリ階層)
```
##対応方法
**原因**
シンボリックリンクが貼られていないため

**対策**
貼ってあげればよし
```ln -s "お使いのrubyのバージョン" "$(rbenv root)"/versions/ruby-"お使いのrubyのバージョン"```

**例えば**
```ln -s 2.0.0 "$(rbenv root)"/versions/ruby-2.0.0```

**参考リンク**
https://github.com/sstephenson/rbenv/issues/543
複雑怪奇な正規分布の数式の意味を読み解く

統計学において、正規分布というのは非常に重要な役割を果たしています。その正規分布をあらわす数式(密度関数)は

```math

\Phi(x) = \frac{1}{\sqrt{2\pi\sigma^2}}\exp \left( -\frac{(x-\mu)^2}{2\sigma^2} \right)
```

なのですが、これは非常に複雑な数式です・・・


分散$\sigma^2 = 1$, 平均$\mu=0$である標準正規分布にすると少し簡単に見えます。

```math

\phi(x) = \frac{1}{\sqrt{2\pi}}\exp \left( -\frac{x^2}{2} \right)
```

グラフにするとこんな感じです。いわゆる釣鐘型ですね。
(以下、pythonで適宜グラフを書いていきます)

```py
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-4,4, 100)
y = (1/np.sqrt(2*np.pi))*np.exp(-x**2/2)

plt.ylim(0,0.45)
plt.plot(x,y)
plt.show()
```

![normdist0.png](https://qiita-image-store.s3.amazonaws.com/0/50670/bd9146a9-8187-edee-89b0-ae1964ba5116.png)


そもそも正規分布は、なめらかかつ、左右対称で、どこか１点に集まっている関数で確率を表したい、というところが原点と思います。
なので、思い切って２次関数

```math

f(x) = x^2
```

としてグラフで描いみると、

```py
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-10,10, 100)
y = x**2

plt.plot(x,y)
plt.show()
```

![normdist.png](https://qiita-image-store.s3.amazonaws.com/0/50670/90e095f2-5bd5-be38-f1ea-fc9248b88651.png)

うーん、下むいちゃいましたね。これだと分布にならないのでマイナスをかけて上を向かせましょう。

```math

f(x) = -x^2
```

```py

x = np.linspace(-1,1, 100)
y = -x**2

plt.xlim(-1.2,1.2)
plt.ylim(-1,0.2)
plt.plot(x,y)
plt.show()
```

![normdist3.png](https://qiita-image-store.s3.amazonaws.com/0/50670/17ddd76d-237a-d74e-f612-c5d541b98535.png)


ちょっとそれっぽくなってきました。これを裾を伸ばして釣鐘型にするには$e$の上に乗っけます。


```math

f(x) = e^{-x^2}
```

```py
x = np.linspace(-1,1, 100)
y = np.exp(-x**2)

plt.xlim(-1.5,1.5)
plt.ylim(0,1.2)
plt.plot(x,y)
plt.show()
```

![normdist4.png](https://qiita-image-store.s3.amazonaws.com/0/50670/af639417-62e3-8664-a43e-d2ca314a2a13.png)

形はもう完全に正規分布です。この正規分布の形の大元は$e^{-x^2}$だったのです。

あとは、微分した時に計算しやすいように$x$を$1/\sqrt{2}$します。つまり、$y = \sqrt{2}x$と変数変換します。

```math

g(y) = \exp \left(-\frac{y^2}{2} \right)
```

```py
x = np.linspace(-3,3, 500)
y1 = np.exp(-(x**2))
y2 = np.exp(-(x**2)/2)

plt.xlim(-3,3)
plt.ylim(0,1.1)
plt.plot(x,y1,"b", label="exp(-x^2)")
plt.plot(x,y2,"g", label="exp(-(x^2)/2")
plt.legend()
plt.show()
```
![normdist5.png](https://qiita-image-store.s3.amazonaws.com/0/50670/1f09b15b-109b-fc24-6712-4aaaeafb2e65.png)

ちょっと横に広がりました。


このf(x)の面積が1となるように（確率なので、すべてのありえる事象をたすと100%になるので）積分して1となるようにする必要があります。

[ガウス積分(Wikipedia参照)](http://ja.m.wikipedia.org/wiki/ガウス積分)より、$x$の全範囲について積分した値は、

```math

\int_{-\infty}^{\infty} e^{-x^2}dx = \sqrt{\pi}
```
なので、変数変換$y = \sqrt{2}x$を適用すると

```math

\int_{-\infty}^{\infty} \exp \left( {-\frac{y^2}{2}}\right)dy = \sqrt{2\pi}
```
です。両辺を$\sqrt{2\pi}$で割って、

```math

\int_{-\infty}^{\infty} \frac{1}{\sqrt{2\pi}} \exp \left( {-\frac{y^2}{2}}\right)dy = １
```

標準正規分布の式が得られました :blush: 

```py

x = np.linspace(-1,1, 100)
y = np.exp(-(x**2)/2)

plt.xlim(-1.5,1.5)
plt.ylim(0,1.2)
plt.plot(x,y)
plt.show()
```

![normdist6.png](https://qiita-image-store.s3.amazonaws.com/0/50670/1e042d05-92dc-7c0f-bec3-fbd136bc1f73.png)

この式は、$e^{-x^2}$をもとに、積分して面積を求めると1になるように調整したものだったのです。
レゴでロボット作成

青山学院大学、津田塾大学の阿部先生に教えてもらって作成中のネタです。

# はじめに

レゴでロボットを作成しようとすると、レゴマインドストームがありますが高価になりなかなか手がでません。
レゴの歯車のセット[Lego Crazy Action](http://www.amazon.co.jp/dp/1591747694)を使用すると安価にロボ作成が楽しめます。

# 作品例

[こちら](http://scratch.mit.edu/studios/191786/)は阿部先生の作品です。
上述のLego Crazy Actionと[NanoBoardAG](http://tiisai.dip.jp/?page_id=935)とモーターを組み合わせて、ロボを制御してます。

# 挑戦してみました

子供に作ってもらってみましたが、自前で用意したモーターや、Legoテクニックに含まれていたモーターではギアボックス部分が大きすぎて、うまくロボに載せられなかったり、バランスが悪くすぐに転倒します。
現在、阿部先生が使っていたのと同じモーターを、「ちっちゃいものクラブ」に発注中です。

また、制御部はRaspberry Piと[wit.ai](http://wit.ai)という音声認識サービスを使って、音声でコントロールさせるべく準備中です。


# まとめ

Legoを使ったロボ作成について紹介しました。
何かとお金がかかりがちですが、安価なものが多くでていますので、それらの組み合わせで、コストパフォーマンスの高いものが作れそうです。
また、子供のプログラミング教育の一環として、実物を動かせる環境が作れればと思っています。
構造体が参照している位置を知りたい

```cpp:C++の構造体の例
struct Test
{
    char aa[10];
    char bb[10];
}
```

こういった構造体があったときに、[bb] を参照している位置が知りたい。

どうすればいいか？

```cpp:C++の構造体の例
struct Test
{
    char aa[10];
    char bb99[10];    // 名前を変えちゃう
}
```

そうすると、コンパイルエラーになって場所がわかる。
Slackで天気予報

# Slackで天気予報する

SLACKのインテグレーションのお勉強がてら。
エリアも自由指定できる天気予報のサンプルがなかなか見つからなかったので作ってみた。  

Weather Hacks
http://weather.livedoor.com/weather_hacks/webservice

GitHub@daisukean
https://github.com/daisukean/weather_to_slack

適当なコードでごめんなさい。

## 使い方

__プレフィックス__
「天気」から始まる文字列に続けて「エリア」「いつ」を入力すると天気予報をChannelへPOST。

__区切り文字__
スペース（全角・半角、どちらでもOK)

__エリア__
Weather Hackでidが振られてるエリアであれば任意に取得できる

__いつ__
「今日」「明日」のいずれか  
入力しない場合は「今日」の天気アイコンと詳細情報を表示

__取得できる入力例__
「天気 京都」
「天気 京都 明日」
「天気 明日 京都」

__取得できない入力例__
「天気京都」(スペース区切りじゃない)
「天気 明日」(エリアの指定がない)
「天気」(エリアもいつの指定もない)
小さなお友だちの為の　MacOsXでBASIC #18　コッホ曲線によるフラクタル

#記述する動機
私、とある専門学校でPGを教えています。はや８年。いまだにSEもやってます。
学生さんたちに読んでもらうために書いているのですが、悩めるプログラマ、悩めるSE、悩める教育関係者にも何かのヒントにはなると思い、あえて公開していきたいと思います。全て実例です。個人名は秘密！！

#BASIC
名前は「beginner's all-purpose symbolic instruction code」（「初心者向け汎用記号命令コード」を意味する）の頭字語である。

18歳以上はLinux,Macでc,Javaやりましょう。GCCを使えるようになりましょう。
14歳から18歳はOS問わず、IDEを使って、言語は何でもいい。
10歳から14歳は lua or BASIC おまけでscratch
10歳未満はコンピュータなんかやらんで良し。言語能力、身体能力を鍛えましょう。

#前提
http://qiita.com/ggggnonaka/items/8cf3b069594e684f9c0e
を御覧ください。

#フラクタル
数学的に厳密な定義は難しいのですが、ざっくりと自己相似形。
その中にコッホ曲線てのがあるのです。数学をまなびましょう。

##18.BAS
```bas:18.BAS
10 PICTURE Koch(s)
20    IF s<1/1000 THEN
30       PLOT POINTS: 0,0
40    ELSE
50       DRAW Koch(s*r) WITH SCALE(1,-1)*ROTATE(alfa)*SCALE(r)
60       DRAW Koch(s*r) WITH SHIFT(-3,0)*SCALE(1,-1)*ROTATE(-alfa)*SCALE(r)*SHIFT(3,0)
70    END IF
80 END PICTURE
90 LET r=SQR((3/2)^2+(SQR(3)/2)^2) / 3
100 LET alfa=ANGLE(3/2,SQR(3)/2)
110 SET WINDOW 0,3,0,3
120 SET POINT COLOR 2
130 SET POINT STYLE 1
140 DRAW Koch(1)
150 END
```

##実行結果
おお！きれいに描画できてます。
![スクリーンショット 2015-02-17 3.40.24.png](https://qiita-image-store.s3.amazonaws.com/0/33317/eba2e150-e9d8-8745-3279-0b948fa10919.png "スクリーンショット 2015-02-17 3.40.24.png")
Angular2 Todo Appを動作させてみた時のメモ

AngularのYoutubeチャンネル [An Angular2 Todo App: First look at App Development in Angular2](https://www.youtube.com/watch?v=uD6Okha_Yj0) で紹介されていた、[Angular2のTODOアプリ](https://github.com/davideast/ng2do)を動作させてみた時のメモ。
2015/2/16現在の情報です。

## インストール
まずはAngular2の取得

```
$ git clone https://github.com/angular/angular.git
$ cd angular
$ npm install
```
依存ライブラリインストール時に`node-gyp`でたくさんエラーがでたため、nodeのバージョンを`0.10.x`にしてみて再実行

```
$ nodebrew install-binary v0.10.36
fetch: http://nodejs.org/dist/v0.10.36/node-v0.10.36-darwin-x64.tar.gz
######################################################################## 100.0%
Install successful

$ nodebrew use v0.10.36
use v0.10.36
```
幾つかWARNは出てたけどうまく行ったぽい
gulpとprotractorもインストール

```
$ npm install -g gulp
$ npm install -g protractor
$ webdriver-manager update
```

## ビルド

```
$ gulp build
```

`Dart SDK is not available. Skipping task: build.dart`と出るけど無視
`/angular/dist/js/dev`ができているか確認

```
$ ls -l dist/js/dev
total 0
drwxr-xr-x 8 272  2 17 00:28 es5
drwxr-xr-x 7 238  2 17 00:28 es6
```
`es5`と`es6`ができているが、2/16時点の`README.md`では、

```
ln -s ~/angular/dist/js/dev ng
```
となっている。
[pull/3](https://github.com/davideast/ng2do/pull/3)にあるように、サブディレクトリを特定してシンボリックリンクを貼る。パスは適宜変更。

```
$ git clone https://github.com/davideast/ng2do.git
$ cd ng2do
$ ln -s ~/angular/dist/js/dev/es5 ng
```

## サーバ起動
サーバ起動し、ブラウザから`http://localhost:8000`にアクセス

```
$ python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
```
動かない。。
コンソールには以下のエラー

```
"Error during instantiation of Token(AppComponentAnnotatedType)!. ORIGINAL ERROR: TypeError: TemplateConfig is not a constructor
```
どうやら[pull/5](https://github.com/davideast/ng2do/pull/5)に上がっているのが原因ぽい。`TemplateConfig`を`Template`に変更

``` js:todo.js
import {Component, Template, bootstrap, Foreach} from 'angular2/angular2';
```

``` js:todo.js
  ]
})
@Template({
  url: '/todo.html',
  directives: [Foreach]
})
```

の2箇所を修正したところ、Chromeで動作した。
（がFirefoxでは動作せず）
assetsに置いたライセンステキスト群を読み込んで表示する

assets/licenses/ 以下に突っ込んだ、アプリで使わせてもらった色んなライブラリのライセンス表記をコピペしたテキストファイル（UTF-8エンコード）群を読み込んでリスト表示する。

毎回同じ作業やるのが面倒なのでテンプレ化してた
...のを勉強中のRxAndroidで書き直したので変なところあったら指摘して欲しいです。

```java
@Override protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  /* 中略 */

  Observable<String> licenseTextStream =
    licenseTextStream(getAssets(), "licenses", 8 * 1024, Charsets.UTF_8 /* guavaの便利定数 */);

  subscription = AppObservable.bindActivity(this, licenseTextStream)
      .subscribeOn(AndroidSchedulers.mainThread())
      .subscribe(new Action1<String>() {
        @Override public void call(String s) {
          // 1ファイル読み終わった
          adapter.addItem(s);// ListViewとかのアダプタに追加
        }
      }, new Action1<Throwable>() {
        @Override public void call(Throwable throwable) {
          // エラーが起きた
        }
      }, new Action0() {
        @Override public void call() {
          // 全部読み終わったかIOExceptionで処理を抜けた
        }
      });
}

@Override protected void onDestroy() {
  subscription.unsubscribe();
  super.onDestroy();
}

private static Observable<String> licenseTextStream(final AssetManager assetManager,
    final String path, final int bufSize, final Charset charset) {
  return Observable.create(new Observable.OnSubscribe<String>() {

    @Override public void call(Subscriber<? super String> subscriber) {

      BufferedReader reader = null;
      try {
        String[] fileNames = assetManager.list(path);

        for (String fileName : fileNames) {
          InputStream is = assetManager.open(path + "/" + fileName);

          reader = new BufferedReader(new InputStreamReader(is, charset));

          StringBuilder builder = new StringBuilder();
          char[] charBuffer = new char[bufSize];
          int r;
          while ((r = reader.read(charBuffer)) != -1) {
            builder.append(charBuffer, 0, r);
          }
          subscriber.onNext(builder.toString());
        }
      } catch (IOException e) {
        subscriber.onError(e);
      } finally {
        Closeables.closeQuietly(reader); /* guavaの便利クラス */
        subscriber.onCompleted();
      }
    }
  }).observeOn(Schedulers.io());
}
```

単純な処理だけれど、ディレクトリ内の各ファイルを読み込む部分とその経過（と結果）を受け取る部分をコールバックインターフェースを使わずに分離できるので書く側にも読む側にも優しいような気がします。
Rails3系にConcernsモジュールを導入しFat Modelを避ける


## Concernモジュールとは

Concernは日本語では関心事という意味です。関心事の中でも、複数のモデルや機能に影響するようなものを横断的関心事と呼びます。例としては、以下のようなものが挙げられます。

* ロギング
* タグによる分類(taggable)
* レコードの論理削除(soft_deletable)
* 外部サービスとの連携

このような機能はgemで提供されている場合もありますが、gemにロックインされる事を避けたり、自社のサービス固有の機能を実装したいこともあるでしょう。このような横断的関心事を実装するときに、Concernモジュールとして実装します。
Concernモジュール化する事により、Fat Modelを避けたり、DRYを実現する事にもなります。

## 横断的関心事ってスーパークラスでも扱えるんじゃ...

確かに、共通機能をスーパークラスに抽出しても、同じ事を実現できそうですが、Rubyは複数のスーパークラスを保持できません。既に継承を行っているクラスに対して共通機能を追加するには、複数のConcernモジュールを使ってincludeする方が柔軟に扱えると考えています。

## Rails3への導入手順

諸々の理由でRails3を用いている現場もあるでしょうから、ここではRails3への導入手順をご説明します。


プロジェクトのルートフォルダで、まずはモデルのconcerns用のフォルダを作成します。

``mkdir -p app/models/concerns``


オートロードのパスに、先ほど作成したディレクトリを追加

```ruby:config/applicatioin.rb
config.autoload_paths                  += %W(
      #{config.root}/app/models/concerns
    )
```

あと、
``touch tmp/restart.txt``
も必要だっけ?

## Concernsモジュールの実装 (例:論理削除)

では、concernsモジュールを実装してみましょう。
たとえば、論理削除の機能を実装したい場合は、
[soft_deletable.rb](https://github.com/jetabe/deletable/blob/master/soft_deletable.rb)を、wget等を用いてapp/models/concernsに配置してみましょう。

その後、[README](https://github.com/jetabe/deletable)に従ってマイグレーションを行えば、準備完了。

モデルの側では、このようにSoftDeletableモジュールをincludeできます。

```ruby:app/models/comment.rb
class Comment < ActiveRecord::Base
  include SoftDeletable
end

```

このようにして、Commentモデルに論理削除とリストアの機能を実装できました。
論理削除、リストアを実施するときには、以下のようにして用います。

```ruby
Comment.first.delete
Comment.first.restore
```

## 最後に

間違いなどございましたら、ご指摘ください。
OS X で Google Chrome の「今開いてる URL とタイトルを全て取得」

# はじめに

最近 Qiita で話題になってる。 OS X 10.10 Yosemite からの新機能だそうで、
今まで AppleScript で書いていたような機能が JavaScript で書けるようだ。面白い。

https://developer.apple.com/library/mac/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/

# 書いたもの

Google Chrome の全 Window の全タブを巡って、 TSV 形式で出力する。

```js:chromeurls
#!/usr/bin/env osascript -l JavaScript
Application("Google Chrome").windows().forEach(function (window) {
  window.tabs().forEach(function (tab) {
    var url = tab.url()
      , name = tab.name()
      ;
    console.log(url + "\t" + name);
  });
});
```

なんとなく、このポジションには Swift の方が相応しそうな雰囲気もする…。

# AppleScript 版

せっかくなので AppleScript で書いた ver

```applescript:chromeurls
#!/usr/bin/env osascript
set o to ""
tell application "Google Chrome"
    repeat with w in windows
        repeat with t in (tabs of w)
            set o to (o & (url of t) & "\t" & (name of t) & "\n")
        end repeat
    end repeat
end tell
return text 1 thru -2 of o
```

# 使い方

```shell-session
$ chmod +x chromeurls
$ ./chromeurls
```

~/.bin にでも置いて PATH 通しておこう。
Ruby on Rails チュートリアルって長いのでサマリー(1章)〜環境構築〜


Ruby on Rails チュートリアル
http://railstutorial.jp/

# 前提
* Mac OS X Yosemite
* Homebrewは入ってる
* gemは入ってる
* gitとかHerokuとかruby以外でも使うものは知ってる

# 環境構築

## rbenvのインストール

Rubyのバージョンを最新化したり、混在させたりするツール。
RVMよりrbenvの方が軽くていいらしい。

```
brew update
brew install rbenv ruby-build
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
```

※XAMPPをインストールしている人で、"Unknown option: 1"からはじまる長いエラーが続く人は[こちら](http://qiita.com/itagakishintaro/items/b80f8867d5f9cef73384)。

## rubyのインストール

次のコマンドで最新バージョンなどを調べる

```
rbenv install -l
```

ほしいバージョンをインストール

```
rbenv install 2.2.0
```

デフォルトで使うバージョンに設定


```
rbenv global 2.2.0
ruby -v
```

パスの設定

```
rbenv rehash
```

## railsのインストール

最新バージョンをチェックするとよい。
http://rubyonrails.org/

ちなみに、必要なrubyのバージョンもチェックするとよい。
http://rubyonrails.org/download/

```
gem install rails
※ターミナル再起動
rails -v
```

# アプリ作成、パッケージ管理、デプロイ

## Railsアプリ作成

```
mkdir rails_projects
cd rails_projects
rails new first_app
```

## Builderを使ったパッケージ管理

Gemfileを適宜更新。
sqlite3はherokuで使えなく、postgresをherokuで使うので以下のように変更するなど。

参考：http://railsgirls.jp/heroku/

```Gemfile

# 追加（HerokuデプロイでWARNINGがでるから）
ruby '2.2.0'

# gem 'sqlite3'
group :development do
  gem 'sqlite3'
end

# 追加
group :production do
  gem 'pg'
  gem 'rails_12factor'
end
```

--without productionオプションを追加すると、本番用のgemはローカルの環境にはインストールされない

```
bundle install --without production
bundle update
```

## rails server

railsの開発用webサーバー起動。

```
rails server
```

## herokuにデプロイ

git, githubのくだりやherokuのアカウント作成等は省略。

```.gitignore
# Ignore bundler config.
/.bundle

# Ignore the default SQLite database.
/db/*.sqlite3
/db/*.sqlite3-journal

# Ignore all logfiles and tempfiles.
/log/*.log
/tmp

# Ignore other unneeded files.
doc/
*.swp
*~
.project
.DS_Store
.idea
.secret
```

```
git init
git add .
git commit -m "first commit"
```

heroku openででる画面はこの時点ではエラー画面でOK。
heroku createは最初だけ。
何か直したらgit add, git commitするのを忘れないように。

```
heroku login
heroku create
git push heroku master
heroku open
```

以下のようにアプリ名を変更するとよい。
※既に使われている名前だと ! Name is already taken というエラーがでる。

```
heroku rename YOUR_FAVARITE_NAME
```
タスク管理ツールNight! タスク管理ツールの宴 リンク集 #TaskToolNight

## <i class="fa fa-cubes" style="font-size:1em;"></i> 概要
タスク管理ツールNight! のリンク集です。
現地には行けなかったのですが、ツイートを見ていて詳細の情報が気になりました。

見つかった範囲でリンクをまとめます。
もし、他のリンク先をご存知の方は編集リクエストをいただけると嬉しいです。

## <i class="fa fa-cube" style="font-size:1em;"></i> Twitter Hash Tag
`#TaskToolNight`

## <i class="fa fa-cube" style="font-size:1em;"></i> リンク
* [タスク管理ツールNight! connpass.com](http://connpass.com/event/11328/)
* [タスク管理ツールNight! Togetter](http://togetter.com/li/784063)
* [タスク管理ツールNight! に参加してきた | kakakakakku blog](http://kakakakakku.hatenablog.com/entry/2015/02/16/232405)
* [タスク管理Night　JIRA推し](http://www.slideshare.net/satotaku1983/night-44727400)
* [PivotalTrackerでシンプルなタスク管理のススメ](http://www.slideshare.net/TaiyoKojima/pivotaltracker)
* [esa会](http://esa-io.doorkeeper.jp/events/20620)
* [タスク管理ツールNight!に参加した | reizist's blog](http://reizist.hatenablog.com/entry/2015/02/17/024251)
* [タスク管理ツールNight行ってきた | 帰ってきたHolyGrailとHoryGrailの区別がつかない日記](http://holygrail.hatenablog.com/entry/2015/02/17/150656)
* [「タスク管理ツールNight」頼む、お前の推しツールを教えてくれ！に登壇してチャットワークについて語りました](http://gorian91.hatenadiary.jp/entry/2015/02/17/「タスク管理ツールNight」頼む、お前の推しツール)
* [満員御礼！「タスク管理ツールNight! - 頼む、お前の推しツールを教えてくれ！」開催レポート ](http://nextdeveloper.hatenablog.com/entry/2015/02/19/183212)
ジョブを予約実行するatコマンドもどきをrubyで



## atコマンド
- コマンドを未来の指定時間に実行
- cronとの違い：使用後に消さなくていい
  - atは時刻ベースのキュー
  - cronだと何月何日何時何分を指定する。使用後は消さないとダメ。消し忘れると１年後また動く

[atコマンドの使い方（指定時間にコマンドを実行する）でスケジュール実行。 - それマグで！](
http://takuya-1st.hatenablog.jp/entry/20120503/1336036427)

Unixのatコマンドの大きな弱点として/bin/shのシェルコマンドのみしか動かせないというのがあり、<del>シェルスクリプトわからないし</del> 何かと不便です。

そこでrubyでやってみようと思いました。
rubyなら、他のスクリプトを実行させたり、シェルスクリプトもどきにしたりできますし。


## 要件
- 指定時間に処理が実行される

## 実装


```ruby
require 'time'
def timer(arg, &proc)
  x = case arg
  when Numeric then arg
  when Time    then arg - Time.now
  when String  then Time.parse(arg) - Time.now
  else raise   end

  sleep x if block_given?
  yield
end
```

`timer`メソッドは、引数に対応する時間だけ`sleep`を行った後、与えられたブロックを処理します。
引数に渡すことができるのは、数値（秒数）、Timeオブジェクト、文字列（内部でTimeオブジェクトにパースされる）です。
戻り値は、ブロックの最後の値です。

## 処理を予約 :clock2: 

```rb:使用例
# 10秒後に実行
timer(10) do 
  puts "10秒経った"
end

# 3分後に実行
timer(3 * 60) do 
  puts "3分経った"
end

# 今日の22時に実行
timer(Time.parse("22:00")) do 
  puts "おやすみの時間"
end

# 今日の24時（明日の0時）に実行
timer("24:00") do 
  puts "よるほー"
end

timer("00:15"){} # 0時15分までsleep
#
# 0時15分になったら始めたい処理
# 
```

コードは上から順に実行されるので、複数の予約をする際には、実行時間順に並んでいる必要があります。
複数の予約を1スクリプトでする際には、絶対時間（文字列かTimeオブジェクト）で指定するのが良いかと思います。

過去に予約をすることはできません。引数が過去を示しているとき、sleepに負の値が渡されることになるため、エラーとなります。

```ruby
Time.now # => 2015-02-17 00:47:27 +0900
timer('0:40'){"piyoooo"} # => ArgumentError: time interval must be positive
```
JMockit MockUp 

@Mocked + Expectations（NonStrictExpectations）と何が違うの？って話です。

## BehaviorBasedとStateBased

[前述の通り](http://qiita.com/NewGyu/items/03f5ec400abf010d2b7b)通常は[BehaviorBased](http://jmockit.org/tutorial/BehaviorBasedTesting.html)で

```java
@Mocked
private Fuga fuga;
 :
 :
new Expectations(){{
   fuga.getName(); result="ホゲ男";
}}
```

こんな感じで書きますが、MockUp<T>という[StateBased](http://jmockit.org/tutorial/StateBasedTesting.html)な書き方もあります。

## StateBasedの書き方

```java:モックの宣言
 private PageEntityService pageEntityService = new PageEntityService();

 @BeforeClass
 public static void beforeClass() {
     new MockUp<PageEntityService>() {
        @Mock
        public Page createNewContent() {
            return new Page();
        }
    };
 }

```

```java:テストメソッド
@Test
public void test() {
    PageCreateAction pageCreator = new PageCreateAction();
    Deencapsulation.setField(pageCreator, pageEntityService);

    pageCreator.process(site);

    new Verifications() {{
        List<Page> pages;
        pageRepository.save(pages = withCapture());
        assertThat(pages.size(), is(0));
    }};
}

```

* 別に@BeforeClassで宣言しなければならないわけではないです
* PageEntityServiceをnewする前にMockUpをnewしておく必要があります
* 上記例では無名クラスをnewしていますが、```class MockPageEntityService extends MockUp<PageEntityService>```を宣言してnewする形でも構いません
* モック化したいメソッドをMockUpでも定義して、@Mockアノテーションをつけます

## BehaviorBasedと何が違うの？

```java
@Mocked
 private PageEntityService pageEntityService;
 :
 :
new Expectations(){{
   pageEntityService.createNewContent(); result=new Page();
}}
```

これでも「だいたい同じじゃね？」と思われるかもしれません。
決定的な違いは new Page() の呼ばれる回数です。

BehaviorBasedの例では１回しか呼ばれません。
すなわち、createNewContentを何回callしても毎回同じPageインスタンスが返されます。
（resultにはクロージャがセットされるわけではなく、newされたPageインスタンスがセットされるためです）

対してStateBasedの例では毎回new Page()が実行されて新しいインスタンスが返されます。
小さなお友だちの為の　MacOsXでBASIC #17　ドラゴン曲線によるフラクタル

#記述する動機
私、とある専門学校でPGを教えています。はや８年。いまだにSEもやってます。
学生さんたちに読んでもらうために書いているのですが、悩めるプログラマ、悩めるSE、悩める教育関係者にも何かのヒントにはなると思い、あえて公開していきたいと思います。全て実例です。個人名は秘密！！

#BASIC
名前は「beginner's all-purpose symbolic instruction code」（「初心者向け汎用記号命令コード」を意味する）の頭字語である。

18歳以上はLinux,Macでc,Javaやりましょう。GCCを使えるようになりましょう。
14歳から18歳はOS問わず、IDEを使って、言語は何でもいい。
10歳から14歳は lua or BASIC おまけでscratch
10歳未満はコンピュータなんかやらんで良し。言語能力、身体能力を鍛えましょう。

#前提
http://qiita.com/ggggnonaka/items/8cf3b069594e684f9c0e
を御覧ください。

#フラクタル
数学的に厳密な定義は難しいのですが、ざっくりと自己相似形。
その中にドラゴン曲線てのがあるのです。

##17.BAS
```bas:17.BAS
10 PICTURE D(n)
20    IF n=20 THEN
30       PLOT POINTS: 0,0
40    ELSE
50       DRAW D(n+1) WITH ROTATE(alfa)*SCALE(r)
60       DRAW D(n+1) WITH SHIFT(-1,0)*ROTATE(alfa)*SCALE(r)*SHIFT(1,0)
70    END IF
80 END PICTURE
90 SET WINDOW -1/2,3/2,-1,1
100 DRAW axes
110 SET POINT COLOR 3
120 SET POINT STYLE 1
130 LET alfa=PI/4
140 LET r=1/SQR(2)
150 DRAW D(1)
160 END
```

##実行結果
おお！きれいに描画できてます。
![スクリーンショット 2015-02-17 0.20.25.png](https://qiita-image-store.s3.amazonaws.com/0/33317/4601e64c-a17e-7804-e3f5-a9371255527e.png "スクリーンショット 2015-02-17 0.20.25.png")
リモートリポジトリとローカルリポジトリを強制一致させる方法

リモートリポジトリのブランチの状態をそっくりそのままカレントブランチに適用したい時に行う方法。
現状これが一番安全なのではと思うので書き残しておく。

この他に何かいい方法があれば教えてください。

```bash
# 追跡ブランチの更新
git fetch
# untrackedなファイルを作業スペースから削除
git clean -fdx
# to be committedなファイルを作業スペースから削除
git reset --hard HEAD
# 追跡ブランチをcheckout -Bする
git checkout -B master origin/master
```

git checkout -bではなく-Bにする事で既にローカルにブランチがある状態だと、
ブランチをリセットして指定したブランチに再構築してくれるそうです。


参考)
http://git-scm.com/docs/git-checkout

>If -B is given, \<new_branch\> is created if it doesn’t exist; otherwise, it is reset. This is the transactional equivalent of

>$ git branch -f \<branch\> [\<start point\>]
>$ git checkout \<branch\>
XAMPPをインストールしているMACでrbenvをインストールすると"Unknown option: 1"からはじまる長いエラーが続く


# 解決策

.bash_profileを以下のように変える

NG　export PATH="/Applications/XAMPP/xamppfiles/bin:$PATH"
OK　export PATH="$PATH:/Applications/XAMPP/xamppfiles/bin"

# エラーになる理由

/Applications/XAMPP/xamppfiles/bin/HEADがrbenvで使うheadと競合するためらしい。
大文字小文字を区別するZSHではこの問題は起きないらしい。

# 参考にしたサイト

http://stackoverflow.com/questions/21498991/head-usage-unknown-option-1-n-error-possibly-ruby-related
【Java】Document型をString型から生成する

DocumentBuilderクラスやDocumentクラスなどを使うことによってXML形式の文書を操作することができます。
String型をDocument型にパースするためには、InputSource型を使用するようです。


```lang:java
String xmlString = "<sample>AAA</Sample>";
InputSource inputSource = new InputSource(new StringReader(xmlString));
```

InputSourceをインスタンス化します。StringReaderはReaderのサブクラスです。


```lang:java
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(inputSource);
```

※上記のコードでは省略していますが、例外処理が必要になります。
Xcodeプラグイン「Alcatraz」の導入

# Alcatrazとは

Xcodeプラグインの「Alcatraz」【アルカトラズ】を導入してみましょう。
http://alcatraz.io/

Alcatrazをインストールすると、以降Xcodeから簡単にプラグインを入れることが出来るようになります。


# インストール
動作環境

- Mac OS X 10.9以上
- Xcode5以上

Alcatrazをインストールするには、**ターミナル**を開いて、以下のコマンドを実行します。

```hoge:ターミナル
curl -fsSL https://raw.github.com/supermarin/Alcatraz/master/Scripts/install.sh | sh
```

![スクリーンショット 2015-02-16 23.23.02.png](https://qiita-image-store.s3.amazonaws.com/0/46672/179fb423-c2e0-f62c-6c2d-4fb915aef42a.png)

インストールが完了したら、Xcodeを再起動します。

再起動したときに「bundleをインストールしますか?」と聞かれた場合は、「install bundle」(左側のボタン)を選びましょう。



# 使い方
Alcatrazをインストールすると、Xcodeの**「Window」**メニューに**「Package Manager」**が追加されているので、そこをクリックしましょう。Package Managerが追加されていない場合はXcodeを再起動しましょう。

![hogehogehoge.png](https://qiita-image-store.s3.amazonaws.com/0/46672/6782f5ea-f239-eb59-7e5e-591af3f0496b.png)

Package Managerを開いたら、Xcodeに入れたいプラグインを検索して、インストールします。手順は、検索して、扇子のようなマークをクリックするだけです。

![hhadsa.png](https://qiita-image-store.s3.amazonaws.com/0/46672/5983d999-27e1-c435-08fb-6eb63f48b000.png)


# アンインストール
**ターミナル**を開いて、以下のコマンドを実行します。

```hoge:ターミナル
rm -rf ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins/Alcatraz.xcplugin
```

# キャッシュの削除
もろもろバグり始めたときなどは、**ターミナル**を開いて、以下のコマンドを実行します。

```hoge:ターミナル
rm -rf ~/Library/Application\ Support/Alcatraz
```



Alcatrazを入れておくと、新世代データベースの「Realm(レルム)」などを使うときに色々と捗ります。
Realmの導入方法や使い方はまた別途記事で書きたいと思います。
SpriteKitを使ったプロジェクトが画面サイズに合わない

# SpriteKitを使ったプロジェクトが画面サイズに合わない

![Simulator Screen](https://qiita-image-store.s3.amazonaws.com/0/64235/a64e2300-52ca-0d20-f839-d7a4fcfb274e.png)



SpriteKitを使ったプロジェクトをiOS7でビルドすると、画面サイズに合わなくなる。
(上下、もしくは左右に黒いバーが出現する)

## 解決策

![screen.png](https://qiita-image-store.s3.amazonaws.com/0/64235/1b1cf202-fd88-7994-7a61-fe83b7777918.png)

Launch ImageをAsset Catalogより使うよう指定する。


調べてみるとどうも、SpriteKitではなくXcode6が原因らしい。

Xcode6より、Interface Builder(.xib)でLaunch Imageが作成できるようになったが、.xibで作ったスクリーンが呼び出されるのはiOS8以降のみで、iOS7では呼び出されないらしい。
iOS7から画面サイズの判定にLaunch Imageを使用していたため、判定するLaunch Imageがないためにこのようなことになっていた様子。

iOS7用に、Launch ImageをAsset catalogから使うように指定すると、画面サイズが検知できるようになり適切な画面サイズにしてくれる。
(画像を指定しなくても、画面サイズを検出して合わせてくれる)

### 参考資料
 - [ios7 - Xcode 6 storyboard screen size wrong in iPhone5s(iOS 7) but not
(iOS 8) - Stack Overflow][1]
 - [Xcode6でiOS7対応アプリを作るときのワナ][2]

[1]:http://stackoverflow.com/questions/25945194/xcode-6-storyboard-screen-size-wrong-in-iphone5sios-7-but-not-ios-8
[2]:http://www.dorapro.co.jp/engineerblog/?p=357
$http.jsonpができなかった俺はしぶしぶherokuデビューを決意しました。

####金曜の夜中に「軍勢RPG 蒼の三国志」に戦いを挑んだ話
---

週末のお勉強に、itunes APIを試してみた。AngularJSの``$http.jsonp``でRSSのデータを拾って、そのアプリのアイコンを並べるところまではさくっとできた。

```js:app.js

var app = angular.module('app',['ngResource']);

app.controller('mainController', ['$scope','$http', function(
	$scope,
	$http
	){

	$scope.idList=[];

	$scope.getList = function(){
	$http.jsonp('https://itunes.apple.com/jp/rss/topgrossingapplications/limit=10/json?callback=JSON_CALLBACK').
		success(function(data, status, headers, config) {
			console.log(data);

			$scope.items=data.feed.entry;

			data.feed.entry.forEach(function(e){

				var myId = e["id"].attributes["im:id"];
				var myTitle = e["im:name"].label;
				var myIcon = e["im:image"][0].label;

				$scope.idList.push({"myTitle":myTitle,"myIcon":myIcon});
			});

		}).

		error(function(data, status, headers, config) {
			console.log("error");
		});
	};

	$scope.getList();

}]);

```

で、アイコン並べるだけじゃなくて、形にしてみようと安易に思いついたのが「キーボードに見立てた」タイピングゲームっぽい何か。
とりあえずキーを26個並べるのに、APIのlimitを変えるとエラーが出るようになった・・・
トライアンドエラーしてるうちに、売り上げランキング（limit=25以上）の時にだけ発生していると判明。コンソールで見ると、``SyntaxError: Unexpected EOF``となってて、jsonの該当箇所は「軍勢RPG 蒼の三国志」のアイコンのあたり。構文的に間違っているようにはみえないけど、このアプリの入っていないランキングだとエラーは出ない。ちなみに他の国のランキングでも、同じエラーが出たり出なかったり。本当に特定部分の構文エラーなのかわからないけど、結局3時過ぎまで解決法を探して力尽きた。



####試されるPHP
---
疲れたけど釈然としないので、phpでデータ取得してみることにした。

```php

<?php

// header("content-type: application/json");

$data = file_get_contents("php://input");

$itunes_url = "https://itunes.apple.com/jp/rss/".$data."/limit=25/json";

$response = file_get_contents($itunes_url);

echo($response);


?>

```
これをこんなかんじでAngularJSと連携する。

```js
app.factory('getRankingFactory',function($q,$rootScope,$http){

	return{

		query: function(query){

			var deferred = $q.defer();

			$http(
			{
		method : 'POST',
		url : 'public/getrank.php',
		data : query
	}
				).
			success(function(data, status, headers, config) {
				console.log("success");
				deferred.resolve(data);


			}).
			error(function(data, status, headers, config) {
				console.log("error",status,headers,config);

			});

			return deferred.promise;

		}

	};

});
```

これでエラーは出ない。
原因はわからないけど（誰か教えてください）、体力的な理由で良しとした。
が、レスポンスが遅い。$http.jsonpと比べて、体感で数倍遅い。環境（vagrant + CentOS)のせいか知りたくなったので、phpが動く無料ホスティングとしてherokuを使ってみることにした。


###herokuデビュー！
---
Qiitaやブログ等で懇切丁寧なチュートが山ほどあるので、問題なくデプロイできました。ただ静的ファイルを置いて、``index.php``で呼んでくるだけですが。速度は、気持ち早めかなという感じでした（一時間ごとに起こすアドオンを入れていないので、最初のアクセスは除く）。

というわけで、herokuには興味がありつつも敬遠していたのですが、ひょんなことから一歩踏み出すことが出来ました。

http://appnamewriter.herokuapp.com

とりあえずここまで。
小さなお友だちの為の　MacOsXでBASIC #16　回転描画

#記述する動機
私、とある専門学校でPGを教えています。はや８年。いまだにSEもやってます。
学生さんたちに読んでもらうために書いているのですが、悩めるプログラマ、悩めるSE、悩める教育関係者にも何かのヒントにはなると思い、あえて公開していきたいと思います。全て実例です。個人名は秘密！！

#BASIC
名前は「beginner's all-purpose symbolic instruction code」（「初心者向け汎用記号命令コード」を意味する）の頭字語である。

18歳以上はLinux,Macでc,Javaやりましょう。GCCを使えるようになりましょう。
14歳から18歳はOS問わず、IDEを使って、言語は何でもいい。
10歳から14歳は lua or BASIC おまけでscratch
10歳未満はコンピュータなんかやらんで良し。言語能力、身体能力を鍛えましょう。

#前提
http://qiita.com/ggggnonaka/items/8cf3b069594e684f9c0e
を御覧ください。

#ソース概要
OPTION ANGLE DEGREES
デグリー角で扱います。

##16.BAS
```bas:15.BAS
10 OPTION BASE 0
20 OPTION ANGLE DEGREES
30 PICTURE ellipse
40    LET a=5
50    LET b=3
60    LET c=SQR(a^2-b^2)
70    DIM x(360),y(360)
80    FOR i=0 TO 360
90       LET x(i)=a*COS(i)
100       LET y(i)=b*SIN(i)
110    NEXT i
120    MAT PLOT LINES:x,y
130    SET LINE COLOR 3      ! 緑
140    PLOT LINES: -c,0; c,0 ! 焦点間を結ぶ直線（長軸）
150    SET LINE COLOR 4      ! 赤
160    PLOT LINES: 0,-b; 0,b ! 短軸
170 END PICTURE
180 SET WINDOW -6,6,-6,6
190 DRAW axes
200 DRAW ellipse WITH SHEAR(45)
210 END
```

##実行結果
おお！きれいに描画できてます。
![スクリーンショット 2015-02-16 23.05.31.png](https://qiita-image-store.s3.amazonaws.com/0/33317/be59ee08-9a11-d5b7-5c31-a40cc8a03f6f.png "スクリーンショット 2015-02-16 23.05.31.png")
with-time macro

Clojureの関数がどれくらい時間がかかるかを計測する場合には`time`を使うと手っ取り早い。

```clj

user=> (time (reduce + 0 (range 10000)))
"Elapsed time: 1.983 msecs"
49995000
```

timeは内部的に`nanoTime`を使っているので精度も高いが使っていて困ったことがあった。
結果の計測値を標準出力に出して終わってしまうことだ。これは実装を見てみてわかった。

```clj

user=> (source time)
(defmacro time
  "Evaluates expr and prints the time it took.  Returns the value of
 expr."
  {:added "1.0"}
  [expr]
  `(let [start# (. System (nanoTime))
         ret# ~expr]
     (prn (str "Elapsed time: " (/ (double (- (. System (nanoTime)) start#)) 1000000.0) " msecs"))
     ret#))
nil

```

この計測値を中で使いたい場合もある。メトリクスとしてとっておいて、何かの最適化とかデータとしてためておく場合など。そういった場合のマクロを書いてみた。

```clj

(defmacro with-time
  [expr]
  `(let [start# (. System (nanoTime))
         ret# ~expr
         elapsed# (/ (double (- (. System (nanoTime)) start#)) 1000000.0)]
         [elapsed# ret#]))
```

基本はtimeの実装をほとんど流用しているけれど、こうすることで返り値の第一引数に計測値が入ってくる。

```clj

user=> (with-time (reduce + 0 (range 10000)))
[1.161 49995000]
```
CloudformationでElastiCache for Redisを作ろうとしたらプチハマりした件

メモです。

[サンプルのCloudformationテンプレート](https://s3-ap-northeast-1.amazonaws.com/cloudformation-templates-ap-northeast-1/ElastiCache_Redis.template)で
ElastiCacheノード作ろうとしたら以下のエラーで作れなかった。

```
Use of cache security groups is not permitted in this API version for your account.
```

どうやらClusterNodeのセキュリティグループを作るところで怒られる様子。
かと言って CacheSecurityGroupNames を削除すると **必須です** と怒られる…どうしろと

## VpcSecurityGroupIds
CacheSecurityGroupNamesの代わりにVpcSecurityGroupIdsを指定したら正常に作ることが出来ました。
エラーメッセージもう少しわかりやすくして欲しい…

ちなみに完全に想像ですが、
Default-VPCで作ろうとするとこのエラーになるのかなと思いました。
pyenv環境でbyobuがクラッシュ

完全に自分のミスですがメモ。

```
$ byobu --version
byobu version 5.16
tmux 1.6
$ byobu
  File "/usr/bin/byobu-select-session", line 43
    if output[0] >= 0:
                     ^
TabError: inconsistent use of tabs and spaces in indentation
```

おや、byobu安定してると思ったのにと早合点したんですが、Python使いなんだから自分は気づけよ自明に直せるエラーだぞ、と。

ただ、直接ファイルをいじるのはおかしいと思われますゆえ、ググると以下のとおり。

https://bugs.launchpad.net/byobu/+bug/1043048

    With python3 as default python interpreter, on start of byobu byobu-select-session throws an exception due to python3's new tab/space inconsistency intolerance:

おや、Debian wheezyのデフォルトPythonが3系のはずないぞ？

```
$ python --version
Python 3.4.0
$ head -n 1 /usr/bin/byobu-select-session
#!/usr/bin/env python
$ pyenv versions
pyenv versions
  system
  2.7.6
* 3.4.0 (set by /home/dmiyakawa/.python-version)
```

失礼しました orz
swift,Xcodeの超基本 01

### printとprintlnの違い
printは改行なし
printlnは改行あり

```lang:
var str1 = "Hello," 
var str2 = "World" 

print(str1)
print(str2)

//結果
Hello,World
```


### AutoLayout
AutoLayoutは、プレビューを見ながら設定するとわかりやすい。

プレビューの出し方
１，Xcode右上の「Assistant editor」を選択。
２，Storyboardの右側にもう1つエディタエリアが表れるので、
　　そのエディタのオプションを「Preview」に変更。

![image](https://qiita-image-store.s3.amazonaws.com/0/67504/aa46e4c5-502a-f4a2-11b6-1ec65929f7e8.png)

　
　
storyboardと実際の位置がずれてエラーが出ることが多くあるので、
都度都度、「Resolve Auto Layout Issues」＞「Update Frames」で
位置をstoryboardにも反映するようにする。
　
![名称未設定 3.png](https://qiita-image-store.s3.amazonaws.com/0/67504/4cc7a162-e4d9-7a5f-ca9b-3c10ea958afe.png)
Rundeck コマンド実行のされ方を見る

Rundeskではどのような形でコマンドが実行されるのかを見ていきます。　
 　
Command メニューから、対象を指定して、アドホックなコマンド実行ができます。　
 　
localhost を対象に uname -a を実行してみます。　

[![](http://3.bp.blogspot.com/-kZK69bFhpLg/VNSUv9UuKkI/AAAAAAAAAgk/Mth6Rfuxjtw/s1600/test-drive-command.png)](http://3.bp.blogspot.com/-kZK69bFhpLg/VNSUv9UuKkI/AAAAAAAAAgk/Mth6Rfuxjtw/s1600/test-drive-command.png)

実行結果が表示されます。

[![](http://4.bp.blogspot.com/-9VJftLiM2uE/VNSUwqNaBNI/AAAAAAAAAf8/q5rDFXR14hU/s1600/test-drive-command2.png)](http://4.bp.blogspot.com/-9VJftLiM2uE/VNSUwqNaBNI/AAAAAAAAAf8/q5rDFXR14hU/s1600/test-drive-command2.png)

このコマンドがどのような形で実行されているのを確かめるために、pstree -p --show-parents $$ を実行してみます。　

[![](http://4.bp.blogspot.com/-jSPtna7TWtw/VNSUxudhP6I/AAAAAAAAAgE/1Mg3Pt_3Hus/s1600/test-drive-command3.png)](http://4.bp.blogspot.com/-jSPtna7TWtw/VNSUxudhP6I/AAAAAAAAAgE/1Mg3Pt_3Hus/s1600/test-drive-command3.png)

pstree の親プロセスはshで、さらにその親プロセスがjavaです。つまり、Rundeckのサービスを実行しているjavaプロセスから、直接コマンドが実行されています。localhostのときはsshを使わないのですね。　

[![](http://4.bp.blogspot.com/-fUc04igWg3c/VNSUzDvuKyI/AAAAAAAAAgM/_GPBMPkRxRE/s1600/test-drive-command4.png)](http://4.bp.blogspot.com/-fUc04igWg3c/VNSUzDvuKyI/AAAAAAAAAgM/_GPBMPkRxRE/s1600/test-drive-command4.png)

ノードにubuntu-hostというリモートホストを登録したので、このノードを対象に再びpstreeを実行してみます。　

[![](http://2.bp.blogspot.com/-f2Vw9GMi85k/VNSUzlVpejI/AAAAAAAAAgU/CwMq9LU9Vdk/s1600/test-drive-command5.png)](http://2.bp.blogspot.com/-f2Vw9GMi85k/VNSUzlVpejI/AAAAAAAAAgU/CwMq9LU9Vdk/s1600/test-drive-command5.png)

こんどは、親プロセスがsshdになっています。ssh経由で実行したようです。　

[![](http://2.bp.blogspot.com/-a0fU5hjgK6k/VNSU0TO2-AI/AAAAAAAAAgc/dwJcpWjl4hg/s1600/test-drive-command6.png)](http://2.bp.blogspot.com/-a0fU5hjgK6k/VNSU0TO2-AI/AAAAAAAAAgc/dwJcpWjl4hg/s1600/test-drive-command6.png)

Rundeckでは対象がlocalhostのときは、コマンドを直接実行し、それ以外のリモートホストではssh経由で実行していることがわかりました。　
どうやらlocalhostを特別扱いしているようです。　

対象ノードがlocalhostの場合には、コマンドの実行も少し変わるようで、コマンドリストを指定したときに、期待した実行結果になりません。　

この図は実行コマンドとして、 　

~~~~
LANG=ja_JP.UTF-8; export LANG; printenv LANG; date
~~~~

を実行した時のものですが、localhostの実行では日付の出力にロケール設定が効いていません。　

[![](http://2.bp.blogspot.com/-PjoTGGlY-tQ/VNimVBkdTVI/AAAAAAAAAnM/oXY_QI7gwhc/s1600/command-to-localhost.png)](http://2.bp.blogspot.com/-PjoTGGlY-tQ/VNimVBkdTVI/AAAAAAAAAnM/oXY_QI7gwhc/s1600/command-to-localhost.png)

ならばと、コマンドに　

~~~~
sh -c 'LANG=ja_JP.UTF-8; export LANG; printenv LANG; date'
~~~~

指定したときは、さらに不思議な結果になります。　
Commandでコマンドリストを使うときはかなり注意が必要なようです。　

[![](http://4.bp.blogspot.com/-UQ4ePdRm6N8/VNioLWu6NrI/AAAAAAAAAnk/1C5-it0TMiU/s1600/command-to-localhost2.png)](http://4.bp.blogspot.com/-UQ4ePdRm6N8/VNioLWu6NrI/AAAAAAAAAnk/1C5-it0TMiU/s1600/command-to-localhost2.png)
[swift]HTMLの取得


青空文庫からHTMLをダウンロードします。

```swift
//阿呆の一生をダウンロードURL
        let newsUrlString = "http://www.aozora.gr.jp/cards/000879/files/19_14618.html"
        
        //NSURLを作る
        var url = NSURL(string: newsUrlString)!
        
        //データをダウンロードする
        var task = NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler:{ data, response, error in
            //ダウンロードサイズの表示
        println("done, length \(data.length)")
        })
        
        task.resume()
```
ディバックに「done, lehgtn」にHTMLの容量が表示されればOKです。
『たのしいswift』より
Pythonで簡単に自作関数を使いまわす

まず自作関数を作ります．

```myplot.py
import matplotlib.pyplot as plt

def myplot(x):
    plt.plot(x, 'o-')
    plt.show()

if __name__ == '__main__':
    x = [i**2 for i in range(20)]
    myplot(x)
```

ここでファイル名と関数名を同じにするのが好きです．

![figure_1.png](https://qiita-image-store.s3.amazonaws.com/0/33318/3e925b68-a7b9-90ed-85bd-25a3684c6dfc.png)

これを自作の関数集フォルダに入れておきます．

```
mymodule/
  __init__.py
  myplot.py
```

中にこのファイルをおいておけば，

```__init__.py
from myplot import myplot
```

mymodule からストレスなく myplot をインポートできます．

```test_myplot.py
from mymodule import myplot

x = [(-0.5)**i for i in range(20)]
myplot(x)
```

![figure_1.png](https://qiita-image-store.s3.amazonaws.com/0/33318/0aee631f-b01c-0f5f-a62d-308a1bb3cd3a.png)

ただしこの場合，実行した test_myplot.py は mymodule と同じフォルダにある必要があります．

```
mymodule
test_myplot.py
```

そこで，自作関数集を特定のフォルダに集めておきます．

```
/home/okadate/pyfiles/
  mymodule
  mymodule2
```

自由な位置にある test_myplot.py をこうしておけば，

```test_myplot.py
import sys; sys.path.append('/home/okadate/pyfiles')
from mymodule import myplot

x = [i/(5.0+i) for i in range(30)]
myplot(x)
```

![figure_1.png](https://qiita-image-store.s3.amazonaws.com/0/33318/7d21a9c2-4735-8237-bd53-2e11597beaf6.png)

使えます！

他にもパッケージ化してしまうなどの方法があるみたいです．
簡単ならやってみたいけど．．
5分で出来るお手軽メール転送サーバ



## まずは…
####サーバを準備する
AWS EC2を利用する。
-AmazonLinux
-t2.micro
-StorageはMagnetic
-SecurityGroup設定
--SSH TCP 22 0.0.0.0/0
--SMTP TCP 25 0.0.0.0/0


####ドメインを用意する
-ドメイン取得する（お名前.com等で）
-レコード設定
--Aレコード：hogehoge.com / 111.111.111.111（用意したEC2のIP）
--MXレコード：hogehoge.com / 10 hogehoge.com



## インストール
```bash
$ sudo yum install postfix -y
```


<br/>
## 各種設定
```bash
$ sudo vi /etc/postfix/main.cf
```
```vi
myhostname = hogehoge.com
mydomain = hogehoge.com
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
alias_maps = hash:/etc/aliases,regexp:/etc/postfix/aliases.reg
```


<br/>
hoge@hogehoge.comに対してhoge+xxx@hogehoge.comが使えるようにする

```bash
$ sudo vi /etc/postfix/aliases.reg
```
```vi
/^hoge+[^@]+(@.*)?$/ hoge
```

<br/>
転送設定（例としてgmailに転送）

```bash
$ sudo vi /etc/aliases
```
``` vi
hoge	hoge@gmail.com
```
```bash
$ sudo newaliases
```

<br/>
メールを受信出来るようにする

```bash
$ sudo iptables -A INPUT -p tcp --dport 25 -j ACCEPT
$ sudo /etc/init.d/iptables save
$ sudo service iptables restart
```

<br/>
sendmailからの切り替え

```bash
$ sudo /etc/rc.d/init.d/saslauthd start
$ sudo chkconfig saslauthd on
$ sudo /etc/rc.d/init.d/sendmail stop
$ sudo chkconfig sendmail off
$ sudo alternatives --config mta
 -> postfixを選択
$ sudo /etc/rc.d/init.d/postfix start
$ sudo chkconfig postfix on
```
<br/>



<br/>
## 動作確認
hoge@hogehoge.comにメールを送信してみてください。
hoge@gmail.comに届けば成功です。
<br/>
UILabelで行間を調節したい。ただし、折り返しの場合は行間はデフォルトで。


UILabelの行間を調整する記事はよく見かけるのですが、行間を調整しつつ、折り返しの場合だけは行間をデフォルトで、ということがやりたかったです。

行間を調整したいだけならこちらの方法が使えます。
http://qiita.com/Jacminik/items/21f87aadc3a4363b9802

ただ、当然のことながら折り返しの時まで行間が調整されてしまいます。

色々と考えた結果、フォントサイズの小さい改行を行間の代わりに使うようにしてみました。

```Objective
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] init];
NSArray *texts = [text componentsSeparatedByString:@"\n"];
int i = 0;
for (NSString *text in texts) {
    if (i > 0) {
        // 行間用の改行を追加
        NSMutableAttributedString *lf = [[NSMutableAttributedString alloc] initWithString:@"\n\n"];
        UIFont *font = [UIFont systemFontOfSize:4.0f];
        [lf addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, lf.length)];
        [attributedString appendAttributedString:lf];
    }
    
    NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:text];
    UIFont *font = [UIFont systemFontOfSize:12.0f];
    [attributedText addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, attributedText.length)];
    [attributedString appendAttributedString:attributedText];

    i++;
}
```
CocoaPods、Rubyのアップデートメモ

## はじめに
今回、担当しているプロジェクトで初めてiOSの開発をすることになりました。
その際、CocoaPods関連でいろいろ時間をとられたので、メモを残しておきます。

## ライブラリのインストール
Podfileがあるディレクトリに移動して下記コマンド実行

```
$ pod install
```

そしたら下記エラーで怒られる

```
Setting up CocoaPods master repo
[!] The `master` repo requires CocoaPods 0.32.1 - 
Update CocoaPods, or checkout the appropriate tag in the repo.
```

cocoapodsのバージョンが0.32.1より低いよと。
一旦バージョン確認してみる。

```
$ pod --version
```

バージョンが0.29.0だったのでとりあえずバージョンをあげようかと。

## CocoaPodsのバージョンをあげてみる

下記コマンドでバージョンをあげてみる

```
$ sudo gem update cocoapods
```

そしたら、今度はrubyのバージョンが低いって怒られる。

```
cocoapods-core requires Ruby version >= 2.0.0.
```

まあ、今までフロントしかやってなかったので、Rubyのバージョンなんて全く気にしてなかったしと思いながらも、一応Rubyのバージョンを確認。

```
$ ruby -v
```

そしたら1.8.7だった。

## Rubyのバージョンをあげてみる
なんかググったら複数バージョンのRubyを切り替えることができる「rbenv」が便利とのことなので、インストールしてみる。
Homebrewでインストールする前に、念のために`brew update`  しておく。
その後に下記を実行。

```
$ brew install readline ruby-build rbenv
```

rbenvでインストール確認なバージョン一覧を表示してみる。

```
$ rbenv install -l
```

2.0.0より上であればいいので、2.0.0-p247をインストールする。

```
$ rbenv local 2.0.0-p247
```

インストール後にバージョン変更する。

```
$ rbenv local 2.0.0-p247
```
が、なぜか切り替わらない。

.bash_profileにパス等の設定を追記する。

```
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

$ echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.bash_profile

```
その後、設定をリロードする。

```
$ source ~/.bash_profile
```

これでバージョン変更は完了。

## 再度CocoaPodsのバージョンをあげてみる

再度`sudo gem update cocoapods`を叩く。
今度はエラーが出なかった。
念のため`pod --version`でバージョン確認
なぜか0.29.0のまま・・

いろいろググったところ、どうやらOS製のrubyを起動してるらしい。

/usr/bin/podの中身を見てみたらOS製のrubyを起動してた。

```

#!/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
```

パスをhomebrewのrubyから起動するように修正する。

```
#!/usr/bin/ruby
```

これでCocoaPodsのバージョンが最新版になってたので、`pod install`で無事インストールすることができました。
ATOMエディタのproxy設定

## 概要

proxy環境内で[ATOMエディタ](https://atom.io)のパッケージインストール等をするには、`apm`コマンドで`https-proxy`を設定する。またproxyがSSL証明書を自己署名証明書に置き換える場合などは、同様に`strict-ssl`に`false`を設定する。

## 詳細

proxy環境内でATOMエディタにパッケージをインストールするために、proxy設定方法を試行錯誤してみた。私の環境では、以下の認証proxyの設定＋proxyがSSL証明書を置き換える場合の追加設定を実施したところ、パッケージの追加ができた。

### proxy設定

proxy設定が必要な環境では、Settingsの「+Install」画面で、Install Packagesの検索結果、「Featured Packages」の表示部分ともエラーになり、出力表示は`connect ETIMEDOUT`だった。

![001_no-proxy-setting.png](https://qiita-image-store.s3.amazonaws.com/0/55718/4224c905-d511-96c4-b805-4e642f9ae358.png)

[「Is there any proxy settings?」のPOST#31](https://discuss.atom.io/t/is-there-any-proxy-settings/710/31)に従って、Windowsのコマンドプロンプトから`apm`コマンドでproxyを設定した。

![002_proxy-setting-with-apm.png](https://qiita-image-store.s3.amazonaws.com/0/55718/38547ace-05d0-75f6-683d-8945b3a9c491.png)

実行したコマンドは以下のようなもの。`proxy-server.example.com`はproxyの部分はサーバ名、`10080`の部分はproxyのポート番号を指定する。

    apm config set https-proxy http://proxy-server.example.com:10080

以下で現在の設定を確認できる。

    apm config get https-proxy

### 認証proxyの設定

proxyに認証が必要な場合、環境変数などでも使われる以下の書式で設定できた。`username`はproxy認証のユーザー名、`password`の部分はパスワードを指定する。

    apm config set https-proxy http://username:password@proxy-server.example.com:10080

### proxyがSSL証明書を置き換える場合の追加設定

proxyがSSL証明書を自己署名証明書に置き換える場合などは、前述のエラー表示部の出力が`UNABLE_TO_VERIFY_LEAF_SIGNATURE`になった。

「[UNABLE_TO_VERIFY_LEAF_SIGNATURE・Issue #103・atom/apm・GitHub](https://github.com/atom/apm/issues/103)」を参考に、以下の設定を行ったところ、解消した。

    apm config set strict-ssl false

なお「[ssl - Node.js HTTPS 400 Error - 'UNABLE_TO_VERIFY_LEAF_SIGNATURE' - Stack Overflow](http://stackoverflow.com/questions/9440166/node-js-https-400-error-unable-to-verify-leaf-signature)」および「[Node.js のクライアントからオレオレ証明書のサーバへ接続する方法 - Qiita](http://qiita.com/dkkoma/items/7f22769f3b3b69bf1d5f)」によれば、環境変数`NODE_TLS_REJECT_UNAUTHORIZED`を設定する方法もある様子。未実施。

### 設定結果

私の環境では、以下の認証proxyの設定＋proxyがSSL証明書を置き換える場合の追加設定を実施したところ、前述の二つのエラー出力が解消でき、パッケージの追加ができた。

![003_package-installed.png](https://qiita-image-store.s3.amazonaws.com/0/55718/c1eb40bf-62a0-e5d6-978a-b1814899437d.png)

## 確認環境

* ATOMエディタ 0.179
* Windows 7 Professional SP1

以下の環境でも、上記でパッケージインストールできるようになることが確認できた（画面は変わっていたしjapanese-wrapはもう不要だったけど）。

* ATOMエディタ 1.16.0
* Windows 10 Pro
Backbone.Collection に1つ以上の Model が格納できない問題を解決する

# 問題について
`Collection` に格納しようとしている `Model` の `attributes`、またはサーバからのレスポンスに、 **オブジェクト構造をもつ id というプロパティ** がありますか。
もしあるならば、十中八九それが原因とみて間違いないでしょう。

ここで重要なのは、オブジェクト構造を持つプロパティの名前が **id** であるということです。

```js:オブジェクト構造をもつidプロパティを抱えたオブジェクト
{
    id: {
        shopId : 'hogeShop',
        humanId: 'TaroYamada'
    }
}
```

このような構造を持つオブジェクトを `setメソッド`や `addメソッド` で `Collection` に複数詰めようとしても、`Collection` には1つの `Model` しか格納されません。

```js:問題が起きるコード
var attrs = [
    { id: { shopId : 'hogeShop', humanId: 'TaroYamada' } },
    { id: { shopId : 'hogeShop', humanId: 'JiroTanaka' } }
];
new Backbone.Collection(attrs);
```

### 実行結果（GoogleChrome for Windows 40.0.2214.111 m）
![hoge.PNG](https://qiita-image-store.s3.amazonaws.com/0/14557/be311a0f-19ce-ae55-0aab-833e7ef272d0.png)

配列の1番目だけが `Model` として格納されてしまいました。

# 調査しきれていない調査
`Collection.set` 周りのコードを調べてみたところ、`Collection` に `Model` を詰める過程で、詰めた履歴を変数に保持する際に `Model.id` を利用していました。

デフォルトの状態では、 `Model.id` は、`Model.attributes.id` を値に持ちます。 
このとき、`Model.id` の値がオブジェクト構造になってしまっていると、`Collection` へ格納する際に期待した振る舞いをすることができなくなってしまうようです。

**お恥ずかしながら、 `Collection.set` 周辺の挙動について詳細を読み解ききれませんでした。**
この部分についてご存じの方がいらっしゃいましたら、コメントにてご教授頂ければ幸いです。

# 対処法
`Model.id` にオブジェクト構造でない値を指定してあげれば良いので、 Backboneオブジェクトごとに自動生成される `cid` を指定して問題を回避するのが良いみたいです。
`Model.idAttribute` に任意の文字列を渡すと、 `Model.attributes` のどの値を `Model.id` として持たせたいか指定することができます。

```js:問題のないコード
var attrs = [
    { id: { shopId : 'hogeShop', humanId: 'TaroYamada' } },
    { id: { shopId : 'hogeShop', humanId: 'JiroTanaka' } }
];
new Backbone.Collection(attrs, { model: Backbone.Model.extend({ idAttribute: 'cid' }) });
```

### 実行結果（中身の確認のため、変数に取り出しています）
![kitai.PNG](https://qiita-image-store.s3.amazonaws.com/0/14557/6c7a3a3c-1b3a-0af9-a27d-59a4334b82c1.png)

今度はうまくできました。やったね。
実際のコードではこのような書き方になるのかな、と思います。

```collection.js
var Collection = Backbone.collection.extend({
    model: Backbone.Model.extend({ idAttribute: 'cid' });
});
var collection = new Collection(attrs);
```

突っ込みどころ、誤った認識をしている箇所がありましたら是非ご指摘ください。