OmniAICreator/Qiita-1.07M huggingface dataset:
GoogleスプレッドシートでTwitter検索結果のデータ収集


Googleスプレッドシートを使って、任意のキーワードでTwitter検索をした結果のデータを収集します。1度設定すれば、あとは勝手にデータを収集し続けてくれるので、お手軽で便利です。作成は基本的に、下記のブログで紹介されているスクリプトをベースとしており、そこから特定セルに検索キーワードを入れるなどの加工を行っています。また、手順1および2に関しても、下記のブログが詳しいため、そちらを参照していただければと思います。

- http://blog.hika69.com/blog/2014/01/28/google-apps-script/


## 手順
1. Twitterアプリの作成
2. GoogleスプレッドシートとTwitterアプリの連携
3. Googleスプレッドシートでスクリプトの編集


## Twitterアプリの作成
[Twitter Developers](https://dev.twitter.com/)の[Twitter Application Management](https://apps.twitter.com)にてアプリケーションを作成し、データ収集に必要なAPIキー等を取得します。作成すると、`API key`と`API secret`が発行されます。


## GoogleスプレッドシートとTwitterアプリの連携
任意の名前でGoogleスプレッドシートを作成します。その後、メニューバーから`ツール > スクリプトエディタ`を選択します。ここでも任意のプロジェクト名をつけてください。

続いて、スクリプトエディタのメニューバーから`リソース > ライブラリ`を選択し、「ライブラリを検索」に`MHGYgT-unu1fC7zXOkNfBUVSHJARy_IP7`と入力します。その後、選択ボタンを押して、Twitterのライブラリが表示されたら、バージョンを「1」として保存します。

その後、スクリプトエディタのメニューバーから`ファイル > プロジェクトのプロパティ`を選択し、ユーザープロパティのタブで、Twitterアプリ作成時に発行された`API key`と`API secret`を下記のように入力します。入力し終えたら、保存します。

- `TWITTER_CONSUMER_KEY` に `API key`
- `TWITTER_CONSUMER_SECRET` に `API secret`


## Googleスプレッドシートでスクリプトの編集
コード.gs上に、下記のGistスクリプトをコピーし、保存してください。

- https://gist.github.com/shirayuca/88c309c168052d35d29d

スプレッドシートに戻り、A1に検索キーワードを入力してください。データは、4行目以降(A4セル以降)に出力されます。そのため、下表のように、3行目のA3セルからF3列に、適宜列名を付与するといいでしょう。

|	セル	|	列名	|
|-----------|------------|
|	A3	|	ID	|
|	B3	|	日時	|
|	C3	|	tweet	|
|	D3	|	tweetURL	|
|	E3	|	USER	|
|	F3	|	tweet内URL	|

<img src="http://shirayuca.github.io/blog/2014/09/07/twitter-data/twitter3.png">

その後、スクリプトエディタに戻り、メニューバーから`実行 > myFunction`で、スクリプトを実行します。初回実行時のみ、色々な承認のアラートが出るので、OKとしてください。

定期的に検索し、データを蓄積していきたい場合は、スクリプトエディタのメニューバーから`リソース > すべてのトリガー`に移動し、「新しいトリガーを追加」して、myFunctionを定期的に実行するタイマーを指定します。下記の画像の例では、30分ごとに検索を行っています。トリガーの初回起動時にも承認アラーとが出るので、OKとしてください。

<img src="http://shirayuca.github.io/blog/2014/09/07/twitter-data/twitter4.png">


## 最後に
冒頭でも紹介しましたが、このTwitterデータ収集のスクリプトは、下記のブログのコードをベースに加工を行っています。大変お世話になりました、ありがとうございました。

- http://blog.hika69.com/blog/2014/01/28/google-apps-script/
TSF対応アプリケーションの実装で参考になるページ

TSF (Text Services Framework)に対応したアプリケーションの実装の参考になるページをメモしておく。

[Input Method Editor and Text Services Framework Accessibility in Windows XP](http://msdn.microsoft.com/en-us/library/ms971336.aspx)
IMEの未確定文字を取得する方法が載っている。ITfThreadMgrをCoCreateInstanceで取得してから、未確定文字にたどり着くまでの流れがわかる。

[Common Elements](http://msdn.microsoft.com/en-us/library/ms538057.aspx) ([日本語](http://msdn.microsoft.com/ja-jp/library/ms538057.aspx))
TSFの構成要素の説明。コンパートメントやコンポジションなどの用語がわかってないと話にならない。

[A Tour through TSF: TSF Managers](http://blogs.msdn.com/b/tsfaware/archive/2007/04/30/a-tour-through-tsf-tsf-managers.aspx)
TSFのインターフェイスの取得方法の一覧。どうやって取得するかはインターフェイスの仕様にたいてい書いてあるが、書いてない場合もあるのでここを見たほうが早い。

[TSF Application interfaces](http://blogs.msdn.com/b/tsfaware/archive/2007/04/27/tsf-application-interfaces.aspx)
TSF対応アプリケーションが実装しなければならないTSFインターフェイスの一覧。
debowerifyとjstifyを同時に適用時したときに発生するエラーの解決法

# 要約

debowerifyを利用している場合は，underscore/Lo-Dash系テンプレートの読み込みには[templateify]を使うのがよい．

解決法をGoogleで検索したが，私には見つけられなかったので，私の考えた解決法をここに記述することにした．

# 状況説明


* browserifyでフロントエンドのCoffeeScriptをコンパイル
* サーバーサイドのサードパーティ・ライブラリはnpmで，フロントエンドのサードパーティ・ライブラリをbowerで管理
    * 小さいプロジェクトなので分離せず，１つのプロジェクトとして管理している
    * bower管理下のライブラリの読み込みのため，debowerifyを適用
* フロントエンドのテンプレートとして，underscore/Lo-Dash系テンプレートを使用
    * そのため，jstifyも適用しようとした

# その結果

エラーが発生した．．．

以下，最小構成での再現手順．

```
$ cd /path/to/proj
$ npm install bower browerify debowerify jstify
$ node_modules/.bin/bower install underscore
$ echo "var t = require('./t.jst');" > a.js
$ echo -n foobar > t.jst
$ node_modules/.bin/browserify -t debowerify -t jstify a.js
Error: Cannot find module 'underscore' from '/path/to/proj'
    at /path/to/proj/node_modules/browserify/node_modules/resolve/lib/async.js:50:17
    at process (/path/to/proj/node_modules/browserify/node_modules/resolve/lib/async.js:119:43)
    at /path/to/proj/node_modules/browserify/node_modules/resolve/lib/async.js:128:21
    at load (/path/to/proj/node_modules/browserify/node_modules/resolve/lib/async.js:60:43)
    at /path/to/proj/node_modules/browserify/node_modules/resolve/lib/async.js:66:22
    at /path/to/proj/node_modules/browserify/node_modules/resolve/lib/async.js:21:47
    at Object.oncomplete (fs.js:107:15)
```

ちなみに，`echo "var _ = require('underscore');" > a.js`では問題は発生しない．

# 原因分析

以下の内容は，browserify/debowerify/jstifyのソースコードをくまなく調べた結果ではないので，誤りが含まれているかもしれない．誤りを見つけた方は，指摘していただけるとありがたい．

まず，jstifyのソースを確認した．変換後のファイルに`var _ = require('underscore');`が含まれており，これが見つからなというエラーであることがわかった．

* https://github.com/zertosh/jstify/blob/master/index.js#L49

次に，`console.log`などでdebowerifyとjstifyの呼び出しログを確認した．

* transformの適用順番と-tパラメーターによるtransformの指定順番の間には関係はないようだ
    * transformの名前の辞書順で適用しているように見える
    * 今回の場合だと，debowerify jstifyの順番で適用する
* １つのファイルに対するtransformは実行前に確定
    * そのため，再適用されないようだ
    * 今回の場合だと，jstify後に再び一連のtransformを適用するということはないようだ

どうにかしてtransformの順番を入れ替えることができれば問題が解決するのではないかと考えたが，transformの先頭で適用対象のファイルを拡張子で選別していることがわかった．

* https://github.com/eugeneware/debowerify/blob/master/index.js#L9
* https://github.com/zertosh/jstify/blob/master/index.js#L25

指定したtransformをファイルにすべて適用するみたいなので，当然と言えば当然か．

browserifyの用途から考えて，入力ファイルを改名する機能はなさそうだ．少し調べただけでは見つからない．

では，どうすればいいのか？

# 解決法１

templateifyを使う．

```
$ cd /path/to/proj
$ npm install bower browerify debowerify templateify
$ node_modules/.bin/bower install underscore
$ echo "var t = require('underscore').template(require('./t.template'));" > a.js
$ echo -n foobar > t.jst
$ node_modules/.bin/browserify -t debowerify -t templateify a.js
```

テンプレートファイルの拡張子は`.template`となる点に注意．

# 解決法２

bowerを使うのをやめて，フロントエンドのサードパーティ・ライブラリの管理にもnpmを使用する．

サーバーとフロントエンドのプロジェクトが分離されているなら，特に管理上の問題もないので，これでもいい気がする．

# 解決法３

変換を２回に分けてしまう．

1. テンプレートを変換し，一旦結果をJSファイルに出力
2. テンプレートのJSファイルを`require`するようにし，これをbrowserifyで変換

ソースファイルに変換後のテンプレートのJSファイル名を書くことになるため，おすすめはできない．

# 補足

jstify以外のtransform後の結果に`require`を含むようなtransformでは同じ問題が発生する．例えば，browserify-compile-templatesでも同じ問題が発生する．


[templateify]: https://github.com/sigod/node-templateify
CIDERがCIDER nREPLの警告を出してきた時の対処

# 問題と対策

`cider-jack-in`した時に、以下のようなWARNINGが出た場合の対処です。

```
WARNING: CIDER's version (0.8.0-snapshot) does not match cider-nrepl's version (not installed)
WARNING: The following required nREPL ops are not supported: 
classpath （略）
Please, install (or update) cider-nrepl 0.8.0-snapshot and restart CIDER
```

CIDERとバージョンの一致するCIDER nREPLEがインストールされていない、とお怒りなので入れて差し上げましょう。

`${HOME}/.lein/profiles.clj`に以下を記述します。

```clj
:plugins [[cider/cider-nrepl "0.8.0-SNAPSHOT"]]
```

バージョンをここでは`0.8.0-SNAPSHOT`としていますが、お使いのCIDERに合わせて下さい。

# オマケ: profiles.clj の設定全体

この記事の投稿次点で、自分の`${HOME}/.lein/profiles.clj`は以下の内容となっています。
何かの参考になれば。

```clj
{:user {:dependencies [[slamhound "RELEASE"]
                       [org.clojure/tools.trace "RELEASE"]
                       [criterium "0.4.3"]]
        :aliases {"slamhound" ["run" "-m" "slam.hound"]}
        :plugins [[lein-kibit "RELEASE"]
                  [cider/cider-nrepl "0.8.0-SNAPSHOT"]]}}
```
vital.vimにText.Tableモジュールが追加されました

Pull Requestが本家 [vital.vim](https://github.com/vim-jp/vital.vim) にマージされたので、紹介します。

## これは何か

vim scriptから文字テーブルを作成することが簡単にできます。
perlのText::UnicodeTable::Simpleと似た感じです。

# 使い方

簡単な使い方を以下に載せます。
なお、ここでは題材に私の使用しているプラグインからいくつか抜粋して記載していますが、適当に抽出しただけで特に他意はありません。

これだけ複雑な表が簡単に作れてしまう！

実装している機能は、

1. ヘッダの設定
1. フッタの設定
1. 列単位での水平/垂直方向の文字揃え
1. 列単位での幅指定
1. ボーダ有無の設定
1. 列幅指定時、セル内での文字列自動折り返し

となかなか高機能です。
セルの結合に関しては、要望があればそのうち実装するかもしれません。
バグ報告、要望については、[vital.vim](https://github.com/vim-jp/vital.vim)のissuesにお願いします。
もちろん私に連絡頂いても構いません。

```vim:
let s:V= vital#of('vital')
let s:T= s:V.import('Text.Table')
unlet s:V

" オブジェクトの作成
let s:table= s:T.new()

" カラムの設定
" 水平方向に右揃えの列を追加
call s:table.add_column({'halign': 'right'})
" デフォルト設定で列を追加
call s:table.add_column({})
" 垂直方向に中央揃えの列を追加
call s:table.add_column({'valign': 'center'})
" 幅20桁の列を追加
call s:table.add_column({'width': 20})

" ヘッダの設定
call s:table.header(['No.', 'プラグイン名', '作者', '説明'])
" フッタにはヘッダと同じものを表示
call s:table.footer(s:table.header())

" 行を追加していく
call s:table.add_row([1, 'gist-vim',     'mattn',      'vimからgistの投稿、閲覧、更新ができる。'])
call s:table.add_row([2, 'qiita-vim',    'mattn',      'vimからqiitaの投稿、閲覧、更新ができる。'])
call s:table.add_row([3, 'vim-ref',      'thinca',     'vimから各種ドキュメントを閲覧できる。'])
call s:table.add_row([4, 'vim-quickrun', 'thinca',     'これがないと仕事にならない。'])
call s:table.add_row([5, 'calendar.vim', 'itchyny',    'vimからgoogleカレンダーを閲覧、編集ができる。使い勝手と見た目がとても良い。'])
call s:table.add_row([6, 'w3m.vim',      'yuratomo',   'vim上でw3mを使ったブラウジングができる。'])
call s:table.add_row([7, 'j6uil.vim',    'basyura',    'vimからチャットサービスのlingrに接続できる。'])
call s:table.add_row([8, 'previm',       'kannokanno', 'vimからmarkdownのプレビューができる。'])

" 文字列化
" ※等幅フォントで閲覧ください。qiitaだと斜体になるので、あまり綺麗に見えないかも。
" +-----+--------------+------------+----------------------+
" | No. | プラグイン名 | 作者       | 説明                 |
" +-----+--------------+------------+----------------------+
" |   1 | gist-vim     | mattn      | vimからgistの投稿、  |
" |     |              |            | 閲覧、更新ができる。 |
" |   2 | qiita-vim    | mattn      | vimからqiitaの投稿、 |
" |     |              |            | 閲覧、更新ができる。 |
" |   3 | vim-ref      | thinca     | vimから各種ドキュメ  |
" |     |              |            | ントを閲覧できる。   |
" |   4 | vim-quickrun | thinca     | これがないと仕事にな |
" |     |              |            | らない。             |
" |   5 | calendar.vim |            | vimからgoogleカレン  |
" |     |              | itchyny    | ダーを閲覧、編集がで |
" |     |              |            | きる。使い勝手と見た |
" |     |              |            | 目がとても良い。     |
" |   6 | w3m.vim      | yuratomo   | vim上でw3mを使ったブ |
" |     |              |            | ラウジングができる。 |
" |   7 | j6uil.vim    |            | vimからチャットサー  |
" |     |              | basyura    | ビスのlingrに接続で  |
" |     |              |            | きる。               |
" |   8 | previm       | kannokanno | vimからmarkdownのプ  |
" |     |              |            | レビューができる。   |
" +-----+--------------+------------+----------------------+
" | No. | プラグイン名 | 作者       | 説明                 |
" +-----+--------------+------------+----------------------+
for row in s:table.stringify()
    echo row
endfor
```
共通のテンプレートを切り出す方法


htmlの共通ヘッダーとかページ全体のレイアウトをいちいち全てのviewに同じものを書くのは無駄なので別ファイルに切り出す方法。ちなみにテンプレートエンジン使えば簡単にできると思うが今回はControllerだけで解決する。公式は[こちら](http://fuelphp.com/docs/general/controllers/template.html)

1. 共通のviewを作る
2. \Fuel\Core\Contoller_Templateを継承する
3. Controllerでアサインする

1. 共通のviewを作る
---

デフォルトでは ```fuel/app/views/``` 以下に ```template.php``` という名前で配置する。

```php:fuel/app/views/template.php
<!DDCTYPE>
<html>
  <head>
    <title><?php echo $title; ?></title>
  </head>
  <body>
    <?php echo $content; ?>
  </body>
</html>
```

2. \Fuel\Core\Contoller_Templateを継承する
---

既存で ```\Fuel\Core\Contoller``` を継承してるControllerとかあったら ```\Fuel\Core\Contoller_Temaplte``` に変更すればそのまま使える。

```php:fuel/app/classes/controller/app.php
<?php

class Controller_App extends Controller_Template
{
}
```

3. Controllerでアサインする
---

共通のviewで描画しようとしてる変数に値をアサインする。今回の例だと ```$title``` と ```$content``` に値を挿入する。

```php:fuel/app/classes/controller/app.php
<?php

class Controller_App extends Controller_Template
{
    public function action_index()
    {
        $this->template->title = 'タイトル';
        $this->template->content = View::forge('hoge/fuga');
    }
}
```

Tips
---

### デフォルトの共通view名を変更したい

```fuel/core/classes/controller/template.php``` の ```$template``` を変更すればok

```php
<?php

namespace Fuel\Core;

abstract class Controller_Template extends \Controller
{
    /**
    * @var string page template
    */
    public $template = 'template';  //これ

/// 略 ///
}
```

### ページ毎に共通viewを変更したい

例えば管理者用ページとその他のページのレイアウトを変えたいとか。レイアウトを変えたいControllerで$template変数をオーバーライドすればok

```php:fuel/app/classes/controller/admin.php
<?php

class Controller_Admin extends Controller_Template
{

    $template = 'template_admin';  //管理者用レイアウト

    public function action_index()
    {
        $this->template->title = 'タイトル';
        $this->template->content = View::forge('hoge/fuga');
    }
}
```
UnityのSerializeFieldは、簡単に外部ファイルを実行できて便利

SerializeFieldを使えば外部から必要な処理を呼び出す事ができます。ちょっと、適切な例じゃないと思いますが
Cubeを動かすのに2つのスクリプトを用意して、片方にはアニメーションの実行文、もう片方には関数を呼び出して実行しています。

![スクリーンショット 2014-09-07 23.23.15.png](https://qiita-image-store.s3.amazonaws.com/0/38279/e50b4c2b-6d7e-ba2c-af56-419f2b5edcff.png)

スクリプトは、以下のような感じ。

![スクリーンショット 2014-09-07 23.23.36.png](https://qiita-image-store.s3.amazonaws.com/0/38279/0a0066de-45d3-3d74-c8e0-ec12aee58f5d.png)

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

public class MovePattern : MonoBehaviour {
    public float num=0;
    public GameObject gameobject;

    public void rote()
    {
        gameobject.transform.eulerAngles = new Vector3(num*5, num*5, 0);
    }
}
```

![スクリーンショット 2014-09-07 23.23.45.png](https://qiita-image-store.s3.amazonaws.com/0/38279/1ab597fc-7402-9824-a47a-bcd9168abfda.png)

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

public class TestSerializeField : MonoBehaviour {
    [SerializeField]
    MovePattern movepattern;
	void Update () {
        movepattern.rote();
	}
}
```
SerializeFieldでこんな簡単に呼び出せます。
AWS Amazon Linux に MySQL 5.6 をインストールする


## MySQL をインストールする
公式RPMリポジトリを追加して `yum install` する。

```
sudo yum install -y http://repo.mysql.com/mysql-community-release-el6-4.noarch.rpm
yum install mysql mysql-devel mysql-server mysql-utilities
```

## MySQL 起動に必要なライブラリをインストールする

```
yum -y install perl-Data-Dumper
```

## MySQL を起動する

```
sudo service mysqld start
```

ついでに自動起動設定をしておく

```
sudo chkconfig --add mysqld
sudo chkconfig mysqld on
```

## ポートを確認
`netstat` で 3306 ポートが開放されているか確認。

```
sudo netstat -antu
```
SwiftからObjective-C のヘッダファイルを読み込む方法


やはり、Swiftリリース初期の一番の問題は、そのライブラリの少なさなのかもしれない。
なので、一般的には過去の資産となる`Objective-C`のライブラリを使用することになる。

その場合、下記の名前でヘッダファイルを作成追加する。

`ProjectName-Bridging-Header.h`

プロジェクト設定の[Build Settings]-[Swift Compiler-Code Generation]項目内にある [Objective-C Bridging Header]に、作成したヘッダファイルを登録する。

![スクリーンショット 2014-09-07 22.56.25.png](https://qiita-image-store.s3.amazonaws.com/0/3184/38f60683-9a17-1973-57cc-f3e6a6f91582.png "スクリーンショット 2014-09-07 22.56.25.png")

`$(SRCROOT)/$(PROJECT)/ProjectName-Bridging-Header.h`


そして、ヘッダファイルに、お好みのライブラリのヘッダをインポートする。

```ProjectName-Bridging-Header.h
#ifndef SwiftSampleBeta7_SwiftSample_Bridging_Header_h
#define SwiftSampleBeta7_SwiftSample_Bridging_Header_h

#import <Parse/Parse.h>

#endif
```

ちなみにもっとわかりやすい[サイト](http://stackoverflow.com/questions/24002369/how-to-call-objective-c-code-from-swift/24005242#24005242)があった。


**※追記※**
ここで間違ったパスを登録してしまうと、少なくても`Xcode6.1-β版`以前において、設定したパスを変更できなくなるバグにハマる。
[参考サイト](http://stackoverflow.com/questions/25715269/xcode-6-beta-build-fails-after-moving-bridging-header-objective-c-swift-xcode6)

早く修正されることを祈る。

***Lovely Swift!!!***
Beego を触ってみる (Model)


## データベース接続の設定を行う
main.go にデータベース接続設定を追記する。

```
package main

import (
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/orm"
	_ "github.com/go-sql-driver/mysql"
	_ "github.com/macococo/sample/routers"
)

func init() {
	initDb()
}

func initDb() {
	orm.RegisterDriver("mysql", orm.DR_MySQL)
	orm.RegisterDataBase("default", "mysql", "hoge:hoge@tcp(127.0.0.1:3306)/hoge?charset=utf8")
	orm.SetMaxIdleConns("default", 100)
	orm.SetMaxOpenConns("default", 100)

	err := orm.RunSyncdb("default", false, true)
	if err != nil {
		panic(err)
	}
}

func main() {
	beego.Run()
}

```

## Model を追記する
サンプルとしてユーザー情報を表す `User` を `models/user.go` に追加してみる。
`User` を CRUD 操作する `UserManager` も一緒に記述する。
`t_user` という記述がベタになってしまうのがダサいのだが、実テーブル名をどう取れば良いかわからなかった。

```
package models

import (
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/orm"
)

type ModelManager struct {
	o orm.Ormer
}

func (this *ModelManager) GetOrm() orm.Ormer {
	if this.o == nil {
		this.o = orm.NewOrm()
	}
	return this.o
}

type User struct {
	Id   int
	Name string
}

type UserManager struct {
	ModelManager
}

func init() {
	orm.RegisterModelWithPrefix("t_", new(User))
}

func (this *UserManager) All() []*User {
	o := this.GetOrm()

	var users []*User
	_, err := o.QueryTable("t_user").All(&users)
	if err != nil {
		beego.Error(err)
	}

	return users
}

func (this *UserManager) Count() int64 {
	o := this.GetOrm()

	cnt, err := o.QueryTable("t_user").Count()
	if err != nil {
		beego.Error(err)
	}

	return cnt
}
func (this *UserManager) Create(user *User) *User {
	o := this.GetOrm()

	_, err := o.Insert(user)
	if err != nil {
		beego.Error(err)
		return nil
	}

	return user
}

func (this *UserManager) Update(user *User) *User {
	o := this.GetOrm()

	_, err := o.Update(user)
	if err != nil {
		beego.Error(err)
		return nil
	}

	return user
}

```

## Controller から Model を操作してみる
ユーザー一覧を取得して JSON で返してみる。

```
package controllers

import (
	"encoding/json"
	"github.com/astaxie/beego"
	"github.com/macococo/sample/models"
)

type UserListController struct {
	beego.Controller
}

func (this * UserListController) Get() {
	if !exist {
	userManager := models.UserManager{}
	users := userManager.All()

	content, err := json.Marshal(&users)
	if err != nil {
		beego.Error(err)
	}

	this.Ctx.Output.Body(content)
}
```
yumとかrpmについてまとめてみた

### 1.yumとは何か

サーバには色々なアプリケーションをインストールしていきます。
サーバももともとはただのOSが入ってるだけのものですので、
WEBサーバにしたければapacheを入れたり、PHPを入れたりとか。

で、これらのアプリケーションは`パッケージ`っていう単位にまとめられてます。
yumは、この`パッケージ`をインストールしたり、アップデートしたりしてくれるもの。
パッケージ管理システムというらしい。

### 2. yumとrpm

サーバをいじってると、yum以外にもrpmコマンドを使う機会もあると思います。
この2つの違いが何かというと、実は2つは別物ではなくて、yumは内部でrpmを呼び出しているのです。
で、yumはrpmよりも機能が優れているので、だいたいはyumを使って、yumが使えない時にrpmを使います。

ちなみに、大きな違いとして下記があります。

yum: 依存関係のあるパッケージも自動でインストール
rpm: 依存関係のあるパッケージは自動でインストールされない

### 3. 様々な用語について

#### 3-1. パッケージ

    ソフトウェアの一連のファイルをまとめたもの

#### 3-2. リポジトリ
    パッケージを集めて保管している場所。インターネットにはいろんなリポジトリがあります。

#### 3-3. RPMデータベース
    rpm形式のパッケージがインストールされると、`/usr/lib/rmp`に情報が格納されます。
    このデータのまとまりを、RPMデータベースと呼びます

### 4. リポジトリ

yumには、利用出来る様々なリポジトリがある。
`epel`や`remi`、`rpmforge`などが有名。

リポジトリは世界にたくさんあって、普通にyumでインストールしようとしてパッケージが存在しなかったり、最新版のパッケージが見つからなかった時などは、このリポジトリを使えばインストール出来る場合がある。

#### 4-1. リポジトリを使ったらインストールが出来る例

* リポジトリを使わずにhtopパッケージを調べてみる。

```
# yum info htop
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.tsukuba.wide.ad.jp
Error: No matching Packages to list
```

そんなパッケージはないと言われました。

* epelリポジトリを使ってみる

```
# yum --enablerepo=remi info htop
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * remi: remi.kazukioishi.net
 * updates: ftp.tsukuba.wide.ad.jp
Error: No matching Packages to list
[root@www12399ui ~]# yum --enablerepo=epel info htop
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.tsukuba.wide.ad.jp
Available Packages
Name        : htop
Arch        : x86_64
Version     : 1.0.1
Release     : 2.el6
Size        : 75 k
Repo        : epel
Summary     : Interactive process viewer
URL         : http://htop.sourceforge.net/
License     : GPL+
Description : htop is an interactive text-mode process viewer for Linux, similar to
            : top(1).
```

v1.0.1のhtopがインストール出来ると言われました。
AWS Amazon Linux に beego をインストールして起動するまでの手順メモ


## AWS コンソールからインスタンスを作成・起動
今回は Amazon Linux で試す。
手順は割愛。

## Git、Mercurial をインストールする
`go get` の実行に必要なため。

```
sudo yum install git mercurial
```

## Go の実行に必要なライブラリをインストールする
ld-linux 入れないと go 実行時にエラー吐いた。

```
yum install ld-linux.so.2
```

## Go をインストールする
[公式](http://golang.jp/install#freebsd_linux) に書いてる手順そのまま。

```
# root で実行
curl -L -O https://go.googlecode.com/files/go1.2.1.linux-386.tar.gz
tar zxvf go1.2.1.linux-386.tar.gz -C /usr/local
```

## 環境変数を設定する
`/etc/profile.d/go.sh` を作成し、以下の設定を記述した。

```
export GOROOT=/usr/local/go
export GOPATH=/var/local/gocode
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
```

## beego をインストールする
こちらも[公式](http://beego.me/quickstart)の手順まま。

```
go get github.com/astaxie/beego
go get github.com/beego/bee
```

## beego を起動
プロジェクトを `bee new` するか、自分のプロジェクト `go get` してきて `bee run` するだけ。
ArchLinuxでJVMを実行しようとするとエラーが出る件の対処

# 問題と対策

`pacman -Syu`したところ、`lein deps`を打ったら以下のエラーメッセージが出て怒られました。`java`コマンドがそもそもNGとなった模様。
ScalaやGroovy、その他JVMを使った各アプリケーションも恐らく起動していたらエラーが出ていたのではないでしょうか。

```
/usr/bin/java: 行 2: /usr/lib/jvm/default/bin/java: シンボリックリンクの階層が多すぎます
/usr/bin/java: 2 行: exec: /usr/lib/jvm/default/bin/java: 実行できません: シンボリックリンクの階層が多すぎます
```

ちなみに英メッセージは以下。

```
/usr/bin/java: line 2: /usr/lib/jvm/default/bin/java: Too many levels of symbolic links
/usr/bin/java: line 2: exec: /usr/lib/jvm/default/bin/java: cannot execute: Too many levels of symbolic links
```

https://bbs.archlinux.org/viewtopic.php?pid=1453803 にそのものズバリがあるのですが、対応方法は以下のコマンドを打つこと。

```
$ sudo archlinux-java fix
```

# 今回どのようにググったか

このやり方をとっくに実践している方は大勢いらっしゃるような気がしており、大袈裟な情報ではないのですが…。

エラーメッセージが日本語で出てくる方は、ロケールを変えて英語のエラーメッセージを出し、それでググるといいです。

```
$ export LANG=en_US
```

英語の情報の方が多くて早いので。

もしこの件に限らずトラブルシューティング時に日本語のエラーメッセージで戦っている方で、偶然このエントリをご覧になった方がいらしたのなら。一助になれば幸いです。

# ところで archlinux-java とは

rbenvみたいなもののようですね。今回のトラブルシューティングで初めて知りましたが。

https://wiki.archlinux.org/index.php/java

Arch Linuxでは複数のJVMがコンフリクトせず同時に入るので、このスクリプトがその管理をするようです。
build.gradleに設定するAndroid SDKやbuildTools,versionCode等について

※ 2015/08/24 情報追記しました。
build.gradleでAndroid SDK, buldTools,versioncodeなどのバージョンとかって何書いたらいいの？って時に。基本的なことかもしれないけど、結構混乱するのでメモ。

``` build.gradle
android {
    compileSdkVersion 19
    buildToolsVersion "19.1.0"

    defaultConfig {
        applicationId "com.hoge.hogeapp"
        minSdkVersion 14
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }    
}

```

##説明

### compileSdkVersion 
compileする API のバージョン。
Android L, Android 4系といったバージョンと紐付いています。
例)
API 20 -> Android 4.4W, L preview
API 19 -> Android 4.4.2
API 18 -> Android 4.3
SDK Managerを見れば、バージョンとAPIの対応が確認できます。

google I/Oで発表された最新のAPI 20には2種類ありますが、このうち4.4WはAndroid Wear用のAPIです。なので、今までのAPIにあるのに入ってないAPIがあるので、使う時は注意が必要です。
最新のバージョンになるべく合わせていくことが推奨されています。

### buildToolsVersion 
ビルドツール(Android SDK Build-tools)のバージョンです。
x.0.1のようにupdateされます。

### minSdkVersion
対応する一番下位のAPIバージョンとなります。
現在流通している8割以上が対応している4.X系に対応している、14に設定することをおすすめします。

### targetSdkVersion
アプリケーションが対応しているAPIのバージョンです。AndroidはAPIバージョンにより挙動が変わったりします。targetSdkVersionを設定することにより動作を担保するバージョンが指定できます。何も設定しない場合はminSdkVersionが適用されます。


### versionCode,versionName
* versioncodeはgoogle playにリリースする際に、ユニークにふるべき数字です。
例えばversion codeを1でリリースした後に、緊急リリースをした場合、version codeを2にしなくては、google playにアップロードできません。なお、この数字はユーザーからは見えません。

* versionName
ユーザーから見えるバージョンです。
例えば緊急リリースした場合でもこの数字は変更する必要はありません。しかるべきアップデートがあった場合にバージョンをあげます。
Herokuアプリを開発するときのgitブランチの使い分け


## はじめに
herokuアプリを本番用として、ローカル（または開発用サーバ）で開発アプリを動かすためのgit管理方法を備忘として残しておく。

## masterは使わない
特に`git clone`してきたとき、clone元（本家）を保持しておくため。

本家にアップデートがあったときには、まずmasterへ`git pull`して本家の変更を反映する。Changelog等も参考にしつつ、devへ`git merge`する。

## dev, prodというブランチを作る

| branch | 位置付け |
|:------:|:--------|
| master | 本家用。ここは変更しない |
| dev | 開発用。まずここを更新&テスト |
| prod | 本番用。herokuへプッシュする対象ブランチ|

ブランチの作り方は以下。

```bash:git
% git branch dev
% git branch prod
```

## 基本的なワークフロー

### devブランチで作業
1. `% git checkout dev` devブランチへ移動
2. `% emacs something.txt` ファイル更新
3. `% git add .` ファイルをgitへ登録
4. `% git commit -m` コミット

### prodブランチへ切替
5. `% git checkout prod` prodブランチへ切替
6. `% git merge dev` devブランチの内容をprodブランチへマージ
7. コンフリクトしたらがんばって直す
8. `% git commit -m` 本番用のコミット
9. `% git push heroku prod:master` リモートリポジトリherokuのmasterブランチへ、ローカルのprdoブランチをpush

### devブランチへ戻しておく
10. `% git checkout dev` 間違ってprodで開発しないよう、忘れずにdevブランチへ戻しておく。例えばリモートpushとブランチ変更を同時に行っておくと忘れづらくて良い。

	```bash:git
% git push heroku prod:master && git checkout dev
	```

## 環境情報

```bash:git
% git --version
git version 1.8.4.4
```

```bash:heroku
% heroku --version
heroku-toolbelt/3.10.6 (x86_64-linux) ruby/2.1.2
```

```bash:inxi
% inxi -SM
System:    Host: hakuba.vps.sakura.ne.jp Kernel: 2.6.32-279.11.1.el6.x86_64 x86_64 (64 bit)
           Console: tty 4 Distro: CentOS release 6.5 (Final)
Machine:   System: Red Hat product: KVM v: RHEL 6.2.0 PC
           Mobo: N/A model: N/A Bios: Sea v: 0.5.1 date: 01/01/2007
```
Iperfでネットワークのスループットを測定しよう！


#0.動機

お家でたてているファイルサーバへの通信が遅い時の調査や、ネットワーク機器を買い替えてどれだけ速くなったか知りたい時など、ネットワークのスループットがどれだけ出ているのか気になる時があります。そんな時に使えるのがIperfというネットワークスループット測定ツールです。

#1. Iperf事始め

Iperfは利用しているネットワークにテストデータを流し、スループットを測定します。測定には通信を送信する側（クライアント）と通信を受ける側（サーバ）が必要となります。つまりIperfを利用するためには、クライアント/サーバそれぞれにIperfをインストールして置く必要があります。

今回はMac OS X(10.9.4)をクライアント、CentOS(6.5)をサーバと見立ててやってみます。

![Network diagram-4.png](https://qiita-image-store.s3.amazonaws.com/0/38761/6b754b25-8fb2-0a85-3722-23cd09279f41.png "Network diagram-4.png")


（※ あとで見やすいようにクライアント/サーバそれぞれで利用するコマンドをノードの下に書いてあります。）

#2. インストール

それぞれyumとhome brewでコマンド一発さくっといけます:-)

##2.1. Cent OSでの導入

```bash:インストール
$ sudo yum install iperf
```

##2.2. Mac OS Xでの導入

```bash:インストール
$ brew install iperf
```

#3. 測定してみる

Iperfはコマンドのオプションでクライアントとして動作するか、サーバとして動作するかを指定します。それぞれデフォルト設定で動かしてみましょう。

##3.1. サーバ側

下記の通り、```-s```オプションでサーバ（通信を受ける側）として動作します。

```bash:サーバ
$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
```

表示で出ているようにデフォルトではTCP 5001で受付をし、windowサイズが85.3KByteとなります。この状態でクライアントからの通信を待ち続けます。

##3.2. クライアント側
下記の通り、```-c```オプションでクライアント(通信を送信する側)として動作します。クライアントの場合、サーバのIPアドレスを指定する必要があります。

```bash:クライアント
$ iperf -c 192.168.33.10
```

クライアント側のデフォルト値では、送信先ポートはTCP 5001で通信し、Windowサイズが129KByteで10秒間測定し、一度結果を表示します。

##3.3. 測定してみる

上述したコマンドで、サーバ側でIperfをサーバとして起動しておき、その後クライアントから通信を開始します。

結果は下記のとおりになりました。

```bash:サーバ
$ iperf  -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 192.168.33.10 port 5001 connected with 192.168.33.1 port 52659
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec   614 MBytes   515 Mbits/sec
```

```bash:クライアント
$ iperf -c 192.168.33.10
------------------------------------------------------------
Client connecting to 192.168.33.10, TCP port 5001
TCP window size:  129 KByte (default)
------------------------------------------------------------
[  5] local 192.168.33.1 port 52659 connected with 192.168.33.10 port 5001
[ ID] Interval       Transfer     Bandwidth
[  5]  0.0-10.0 sec   614 MBytes   515 Mbits/sec
$ 
```

結果から、10秒間の測定で 614MBytes送信し、スループットが秒間515Mbits出ていることがわかります。

#4. まとめ

Iperfは家の中のネットワークが遅い時の調査、ネットワーク機器を取り替えてどれだけ速くなったか知りたい場合など、定量的にスループットがわかるのでとっても便利です。

お仕事的に考えると、ユーザ部門にPCを仕掛けておいて、定期的にスループットを測定しておき、利用者からネットワークが遅いぞ(ﾟДﾟ)ｺﾞﾙｧ!!と言われた時、普段とどう違うのか定量的に把握できるので問題の切り分けが早くなるかもしれません。

さらにIperfはオプションでTCP/UDP、ポート番号、Windowsサイズ、測定時間、測定間隔を変更することができます。オプションについては後日追記するかもしれません。。。
Java 8 Lambda 性能測定の再検証

# まず結論
先日、「[Java 8 Lambda 性能測定](http://qiita.com/sipadan2003/items/77d6002a356ce129fe3a)」にて、Lambdaを使用すると性能がまるで違うことを述べたのですが、間違いだったようです。
プログラムを改修して再試行したら、次の2つの速度性能はほぼ同じものになりました。

1. 単純なfor文で総和を計算
2. 1をLambda経由で呼び出す

#改修後のプログラム

改修前は総和を計算しているものの、その結果をどこにも反映しない、意味のないコードなのです。
それゆえにJITによって処理が捨てられ、そのために劇的に高速になったのだろうと疑ってみました。
総和をちゃんと呼び出し側に返すように、改修前で使っていたIntConsumerをIntFunctionに変更します。
次は、改修後のプログラムです。

```java:Lambda1.java
import java.util.function.IntFunction;
 
public class Lambda1 {
    private static final int SIZE = 1_000_000;
 
    void process() {
        final IntFunction<Integer> c = i -> sum();
        //warming up
        for(int i=10000; i>0; i--){
            c.apply(0);
            sum();
        }
        //Call via lambda
        long start = System.nanoTime();
        for(int i=100; i>0; i--){
            int sum = c.apply(0);
            if(i==1){
                System.out.println("sum="+sum);
            }
        }
        long end = System.nanoTime();
        printResult("000", end - start);
        //Call directly
        start = System.nanoTime();
        for(int i=100; i>0; i--){
            int sum = sum();
            if(i==1){
                System.out.println("sum="+sum);
            }
        }
        end = System.nanoTime();
        printResult("001", end - start);
    }
 
    private int sum() {
        int sum = 0;
        for (int i = 0; i <= SIZE; i++) {
            sum += i;
        }
        return sum;
    }
    
    private void printResult(String prefix, long time) {
        System.err.println(prefix + ": elapsed=" + time / 1_000);
    }
 
    public static void main(String[] args) {
        new Lambda1().process();
    }
}
```

#測定結果

```
000: elapsed=144041
001: elapsed=141805
```

#まとめ
Lambdaを経由して呼び出すメソッドの性能が向上するという話はウソでしょう。
スミマセンでした(^^;
Ubuntu 12.04 LTS Serverのvirtualenvにnumpy scipyなどを入れる

VirtualBoxにUbuntu 12.04 LTS Serverを入れてみた。
virtualenvにnumpyとscripyを入れるのにちょっと手間取ったのでメモ。

※ グローバル環境に入れるなら、
http://www.scipy.org/install.html
こちらを参考にして、

```
$ sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose
```

とやるのが簡単なんだけど、今回はvirturlenvに入れる。

####source.listの編集

```
$ sudo vi /etc/apt/source.list
```

これを追記。

```:source.list
deb http://ftp.tsukuba.wide.ad.jp/Linux/ubuntu/ precise main universe
deb-src http://ftp.tsukuba.wide.ad.jp/Linux/ubuntu/ precise main universe
```

追記したらやっておく。

```
$ sudo apt-get update
$ sudo apt-get upgrade
```

####pipのインストール

```
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python get-pip.py
```

####virtualenvのインストール

```
$ sudo pip install virtualenv
```

####numpy, scipyに必要なパッケージをインストール

```
$ sudo apt-get install python-gtk2-dev
$ sudo apt-get install gfortran
$ sudo apt-get install swig
$ sudo apt-get install liblapack-dev
```

####virtualenvの作成

```
$ virtualenv venv2.7
$ cd vevn2.7
$ source bin/activate # virtualenv環境に入る
```

####numpy, scipyなどのインストール

```
(venv2.7)$ pip install numpy
(venv2.7)$ pip install scipy
(venv2.7)$ pip install matplotlib
(venv2.7)$ pip install pandas
(venv2.7)$ pip install ipython
(venv2.7)$ pip install tornado
(venv2.7)$ pip install pyzmq
(venv2.7)$ pip install jinja2
(venv2.7)$ pip install scikit-learn
```

####インストールの確認

```
(venv2.7)$ python
>>> import numpy
>>> import scipy
>>> import matplotlib
>>> import pandas
>>> import sklearn
```

これでエラーが出なければO.K.
必要なパッケージが分からなくて、その辺が手間取った原因だった。
Unable to run app in Simulator エラーの対応方法


Xcodeのビルドは上手くいくが、下記のエラーが出力されるときの対応。

```
Unable to run app in Simulator

An error was encountered while running (Domain = FBSOpenApplicationErrorDomain, Code = 4)
```

![スクリーンショット 2014-09-07 21.15.03.png](https://qiita-image-store.s3.amazonaws.com/0/3184/23b10277-72e9-6d24-2649-88138869e4c2.png "スクリーンショット 2014-09-07 21.15.03.png")



iOSシミュレータの下記メニューからコンテンツをリセットする。

　[iOS Simulator]-[Rest Contents and Settings...]-[Reset]

![スクリーンショット 2014-09-07 21.20.56.png](https://qiita-image-store.s3.amazonaws.com/0/3184/82660c73-c557-faec-f88b-3f540b3a148d.png "スクリーンショット 2014-09-07 21.20.56.png")

それでもダメな場合は、OS自体を再起動する。
B2Gビルド環境

[関西Firefox OS勉強会 7th GIG](https://atnd.org/events/54622)というのに参加してきたのだけど、@uniunix さんの発表で、ビルド環境に触れていて、他の人がどうしているのか気になった。

まずMozillaのドキュメントサイトに[記載されている条件](https://developer.mozilla.org/ja/docs/Mozilla/Boot_to_Gecko/B2G_build_prerequisites#GNU.2FLinux_.E3.81.A7.E3.81.AE.E5.BF.85.E8.A6.81.E6.9D.A1.E4.BB.B6 ) をよく読むといくつか数字がならんでいる。けれども、必ずしもあてはまらない。

@uniunix さんの環境はこんな感じらしい。

| 時間 | 2時間半ぐらい？ |
|:--|--:|
| Machine | MacOS Parallels |
| ディスク | 20GB (標準設定の 10GB を変更する)。下まわりはSSD |
| RAM | 2GB 割り当て |
| OS | Ubuntu |

わたしのメインの環境はこんな感じ。

| 時間 | 1時間半ぐらい？ |
|:--|--:|
| Machine | ThinkPad X200 |
| ディスク | 100GB SSD |
| RAM | 3GB |
| OS | Ubuntu 14.04 |

ちなみにダメなパターン

| 時間 | 6時間は確実に越える |
|:--|--:|
| Machine | EPSON AY320S |
| OS | Fedora 20 / docker |
| ディスク | system 10GB fedora docker image + /homeをホストのディレクトリを割り当て（docker device mapper driver経由）下まわりは Serial ATA |
| RAM | 4GB |

RAM が潤沢にあるのがベスト。ただし 2G～4G 程度であれば、いずれにせよリンカーが走るタイミングで確実にメモリを食い尽くしてswap outが発生するので、その時のためにSSDが控えていると持ちこたえられる、という感じか。それだけでなくてもswap outはちょこちょこ発生する。

懇親会の時の情報で記憶があやふやだけど、16GBぐらいRAMがあって、Core i7 SandyBridge な環境だと 20 分ぐらいだとか。さらにRAMが超潤沢なマシン上で、RAM ディスク上にソースツリーを展開してビルドすると8分でいけるらしい。（……ほんまかいな。速いマシンが欲しいなぁ）

あとAmazonとかで短時間ビルドするために調達する、という手も考えられるけれども、まったく割に合わないらしい。
UnityのuGUIで画面の固定位置にUIを表示

###概要
Unity4.6のuGUIで
画面の固定位置にUIを表示する方法

###設定
CanvasのRender Modeを
ScreenSpace-CameraにするとCameraが親になる。
![RenderMode.png](https://qiita-image-store.s3.amazonaws.com/0/49072/da32a028-5a1c-f690-e042-84bc86011214.png)


Cameraを移動しても、Canvasの下にあるUIは
同じ位置に描画されるため、画面内の位置は固定される。
![Camera-uGUI.png](https://qiita-image-store.s3.amazonaws.com/0/49072/bb8143e2-2424-4bd0-6e86-f16dfaa49444.png)

###雑感
画面の固定位置にHPゲージなどを表示したい場合は
この方法が簡単そうですね。
IIS7.0諸々設定

IIS7.0で諸々設定したので、忘れないうちにメモ。
デフォルトのままだとあまり使いものにならないという印象。

# 32bitアプリケーションの許可
利用DLLが32bitのみ対応なので、配置DLLを32bitで作成する必要あり。
アプリケーションプールの詳細設定にて、「32bitアプリケーションの許可」を falseからtrueに変更。

# コンテンツ圧縮化
IISはデフォルトだと、動的コンテンツは圧縮されない。
高速化の為、以下で圧縮対応。
1. IISの機能に「動的コンテンツを圧縮する」を追加。
2. 以下コマンド実行により、 application/json を圧縮するように設定変更。

```
C:\Windows\System32\inetsrv\appcmd.exe
 set config -section:system.webServer/httpCompression 
/+"dynamicTypes.[mimeType='application/json',enabled='True']" /commit:apphost
```

# アプリケーションプール常時起動
リサイクル後や再起動時もアプリケーションを常時起動にする。
1. アプリケーションプールの開始モードを AlwaysRunning に変更。
2. Webサイトの有効化されたプリロードを True に設定。

# アプリケーションプール設定変更
32bitの場合、そもそも2GBまでメモリが使えず、利用メモリを適切に設定しないと、メモリ不足エラーが頻発する。
1. CPU制限 75%(75000)
2. actionを Throttle に設定
3. リサイクルで"定期的な時間"、"利用メモリ"を設定。

# セッション管理をserverstateに切り替える
デフォルトはInProcだが、この場合、リサイクル発生時にセッションが切れてしまうので、変更する。
1. サービスの「ASP.NET State Service」を自動起動とし、開始する。
2. web.config を修正。

```
<sessionState mode="StateServer"
 stateConnectionString="tcpip=127.0.0.1:42424" 
 cookieless="false" timeout="240" stateNetworkTimeout="30" />
```

# アプリケーションプールの「ラピッドフェール設定」を無効にする
「ラピッドフェール設定」が有効の場合、複数回のアプリケーションプールリサイクル失敗でそのままシャットダウンされてしまうので、これを無効にする。
cliからbrew-caskでインストールしたatom呼びたい


何の気なしにbrew-caskでインストールしたatomをcliにて`atom`コマンドで呼ぼうとしたら

```
usage: dirname path
Cannot locate Atom.app, it is usually located in /Applications. Set the ATOM_PATH environment variable to the directory containing Atom.app.
```

とか言われてしまった時は

`.zprofile`などに（bashのひとは`.bash_profile`に）
`ATOM_PATH`として`atom.app`がある場所書いてあげればいい
（まんまですね）

私の場合は以下のディレクトリでした

```
export ATOM_PATH=/opt/homebrew-cask/Caskroom/atom/latest
```
東京メトロのリソースメモ

### color
```xml
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <color name="metro_ginza">#faa428</color>
    <color name="metro_marunouchi">#d70016</color>
    <color name="metro_hibiya">#8c9ea8</color>
    <color name="metro_tozai">#2595d2</color>
    <color name="metro_chiyoda">#1c8a36</color>
    <color name="metro_yurakucho">#cbba3c</color>
    <color name="metro_hanzomon">#8866a6</color>
    <color name="metro_nanboku">#239e98</color>
    <color name="metro_hukutoshin">#a9521b</color>

</resources>
```

### drawable
```xml
<?xml version="1.0" encoding="utf-8"?>
<shape
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="oval" >
    <solid
            android:color="@android:color/white" />

    <size
            android:width="30dp"
            android:height="30dp"/>

    <stroke
            android:width="5dp"
            android:color="@color/metro_ginza" />
</shape>
```
ClojureScript、Wisp、js_of_ocaml で いつもの window.addEventListener(...) を比較してみる

JavaScriptで何はともあれ書くコードに、window.addEventListenerがありますよね。

```javascript
window.addEventListener("load", function(){
  console.log("loaded");
});
```

DOMが初期化されるとコールバックが発火され、DOMがJavaScriptから読み書き可能になります。

jQueryを使う場合はこう。

```javascript
$(function(){
  console.log("loaded");
});
```

(正確にはjQueryが監視するイベントはloadではなくDOMContentLoadedですが)


## 関数型言語のアプローチで書き比べてみる

なぜ関数型AltJSで比較するか、それは、個人的な言語設計的な興味と、実用を志向するとどうなるのかが同時にわかっておいしい。関数型言語、副作用を意識してないのと、JSに型がないのでゆるふわな状態をどう管理するかが肝になります。


(僕のAltJSに対する興味は実用JavaScriptの為でもありますが、言語設計的な観点でもあるので)

## 比較対象

### clojure-script

[clojure/clojurescript](https://github.com/clojure/clojurescript "clojure/clojurescript")

ClojureのAltJS。他の言語のとの大きな違いは、Clojureプロジェクトの一環として開発されており、そこそこ枯れています。

### wisp

[Gozala/wisp](https://github.com/Gozala/wisp "Gozala/wisp")

個人的に昔から気になってたLispのAltJSで、最近使ってみたらかわいかった。

ClojureScriptと比べてコンパイル速度が高速なのと、JSとほぼ一対一に変換される可読性の高さがウリです。マクロも使えます。

wispifyというbrowserifyのtransformもあるので、こっそりプロジェクトに混ぜて使えますね！

### js_of_ocaml

[ocsigen/js_of_ocaml](https://github.com/ocsigen/js_of_ocaml "ocsigen/js_of_ocaml")

ocaml to js。ocaml界では結構使われているそうです。僕は全然使いこなせてませんが。
ocamlのバイナリ一歩手前の中間表現からJavaScriptに落としているそうです。


## 書き比べ！

JavaScript

```javascript
var onload = function(){
  console.log("loaded");
};

window.addEventListener("load", onload);
```

関数定義部分と、呼び出し部分をわけて見たいので、この定義をなぞることにします。



### ClojureScript

```lisp
(defn onload []
  (.log js/console "loaded"))
(.addEventListener js/window "load" onload)
```

`js/`の名前空間はほぼwindowに対応していると思って大丈夫です。

### Wisp

```lisp
(defn onload []
  (console.log "loaded"))
(window.addEventListener "load" onload)
```

js名前空間がなく、シンボルとして `.` を含んだものを指定可能です。これは変換後のJavaScriptと対応している点でも、非常にわかりやすい。S式最高ですね。


### js_of_ocaml

公式の例をいじってみるととこんな感じでした。

```ocaml
let onload ev =
  Js.Unsafe.eval_string "
    console.log(\"loaded\");
  ";
  Js._true

let () = ignore begin
  Dom_html.addEventListener
    Dom_html.window
    Dom_html.Event.load
    (Dom_html.handler onload)
    Js._true
end
```

組み込み用にラップされたものばっかりで、実体がよく見えないですね。無理やりUnsafeなオブジェクトで呼んでみましょう。

```ocaml
let () =
  ignore (Js.Unsafe.variable "window")##addEventListener((Js.string "load"), (Js.wrap_callback onload))
```

型が厳しい世界で無理に関数を呼び出してるのでignoreとかUnsafeが飛び交う、非常に危険そうにみえるコードです。まぁ、型が厳しい言語からみたら生のJSはこれぐらい危ないことをしているんだよって示唆でしょうが。


JavaScriptオブジェクトへの関数コールは、引数一つのタプルであることに注意してください。(これで今日三時間ぐらいハマってました… 普通に引数として渡そうとすると、部分適用しようとして落ちます)


## 比較表

|               |javascript                | clojure-script            | wisp             |js_of_ocaml |
|:--------------|:----|:---|:----|:---|:---|
|グローバル名前空間| window           | js/window                 | window            | Dom_html.window |
|関数呼び出し     | console.log(...) | (.log console ...)        | (console.log ...) | Dom_html.window##console##log((...)) |
|メンバーアクセス  | obj.name         | (.-name obj)          | obj.name           | obj##name |
|メンバー書き換え  | obj.name = 'value'| (set! (.-name obj) "value") | (set! obj.name "value") | obj##name <- "value" |


JavaScript側は言語仕様がそこまで複雑なわけではないので、これだけ知ってればあとはその言語の世界で完結できるんじゃないでしょうか。

僕はJS固有ドメインよりその言語のドメインで表現するのに苦労することが多いです。
Rassberry Pi B+初期動作までの手順

使用microSD
KINGMAX microSDHC 16GB

・Mac OS X の場合
SDカードをマウント後に、ディスクユーティリティで「MS-DOS(FAT)」フォーマットでSDカードを消去する。
http://www.e-ark.jp/2014/03/08/noobs-install/

ディスクユーティリティで「MS-DOS(FAT)」フォーマットでSDカードを消去する。がよくわからなかったので以下を
http://tokyo.secret.jp/macs/format.html

下記からNoobsをダウンロードします
http://www.raspberrypi.org/downloads/

公式がおもすぎたのでミラーを
http://ftp.jaist.ac.jp/pub/raspberrypi/NOOBS/images/NOOBS-2014-07-08/

失敗例
・フォーマットミス
・解凍したファイル直置きなのね・・・

固定IPに設定方法
http://www.hiramine.com/physicalcomputing/raspberrypi/setup_staticip.html

ここの説明で十分だった
http://www.myu.ac.jp/~xkozima/lab/raspTutorial1.html

この動画を見ればおおまかなRassberry Piの動作までの手順
がわかります
http://www.nicovideo.jp/watch/sm23775447
【プログラミング48(/2 -1)手】Chain of Responsibility


## ポイント

Chain of Responsibility（責任の鎖）パターン。
別名、課長がだめなら、部長パターン。。
「責任を持つものが、自分の裁量で判断できるものに関しては自分で判断し、自分で判断できないものに関しては、次の責任者に判断を任せる」


## サンプルコード
<script src="https://gist.github.com/onody/4929e0f6ace139cef016.js"></script>
https://gist.github.com/onody/4929e0f6ace139cef016

## 所感

* 「責任をもつもの」を、変更・削除・追加の頻度が高い場合はよいかも。
* あたりまえだけど、責任をたどって、最終の社長の責任の範囲外にならないように組まないといけないね。
　（最終はいったいだれなんだ。。）
　

## 参考にしたサイト

http://www.itsenka.com/contents/development/designpattern/chain_of_responsibility.html
ProtractorでngMockE2Eを読み込んでモックを使ってテストしている場合、build時にはngMockE2Eを除外したい



yeomanのgenerator-angularで作ったプロジェクトで、grunt-wiredepを使っているので、素直にE2Eテストでangular-mocksを使おうとすると、bower.jsonのdevDependenciesからdependenciesに移す必要がある。


```bower.json
{
  "name": "MyApp",
  "version": "0.0.1",
  "dependencies": {
    "angular": "1.2.23",
    "angular-resource": "1.2.23",
    "angular-cookies": "1.2.23",
    "angular-sanitize": "1.2.23",
    "angular-animate": "1.2.23",
    "angular-touch": "1.2.23",
    "angular-ui-router": "~0.2.11",
    "angular-i18n": "~1.2.23"
  },
  "devDependencies": {
    "angular-mocks": "1.2.23"    // dependenciesに移すと…
  },
  "overrides": {
    "angular-i18n": {
      "main": "angular-locale_ja-jp.js"
    }
  },
  "appPath": "app"
}

```
しかし、これだとテスト時はいいが、grunt buildして製品用に吐き出した時にangular-mocks.jsも一緒に結合、圧縮されてしまう。

```index.html
  <!-- build:js(.) scripts/vendor.js -->
  <!-- bower:js -->
  <script src="bower_components/jquery/dist/jquery.js"></script>
  <script src="bower_components/ng-file-upload-shim/angular-file-upload-shim.js"></script>
  <script src="bower_components/angular/angular.js"></script>
  <script src="bower_components/angular-resource/angular-resource.js"></script>
  <script src="bower_components/angular-cookies/angular-cookies.js"></script>
  <script src="bower_components/angular-sanitize/angular-sanitize.js"></script>
  <script src="bower_components/angular-animate/angular-animate.js"></script>
  <script src="bower_components/angular-touch/angular-touch.js"></script>
  <script src="bower_components/angular-ui-router/release/angular-ui-router.js"></script>
  <script src="bower_components/angular-i18n/angular-locale_ja-jp.js"></script>
  <script src="bower_components/angular-mocks/angular-mocks.js"></script>
  <!-- wiredepにより、ここに挿入されるので、一緒にまとめられてしまう！！ --> 
  <!-- endbower -->
  <!-- endbuild -->
```
何かいい方法はないかと調べたら、そのものずばりであった。

[…And $httpBackend Mock For All (Unit & E2E) Testings](http://blogs.burnsidedigital.com/2013/09/and-httpbackend-mock-for-all-unit-e2e-testings/)


ので、下のように<!-- build:js -->を、ファイル名指定なしで書いてangular-mocks.jsを囲う。

```index.html
  <!-- build:js(.) scripts/vendor.js -->
  <!-- bower:js -->
  <script src="bower_components/jquery/dist/jquery.js"></script>
  <script src="bower_components/ng-file-upload-shim/angular-file-upload-shim.js"></script>
  <script src="bower_components/angular/angular.js"></script>
  <script src="bower_components/angular-resource/angular-resource.js"></script>
  <script src="bower_components/angular-cookies/angular-cookies.js"></script>
  <script src="bower_components/angular-sanitize/angular-sanitize.js"></script>
  <script src="bower_components/angular-animate/angular-animate.js"></script>
  <script src="bower_components/angular-touch/angular-touch.js"></script>
  <script src="bower_components/angular-ui-router/release/angular-ui-router.js"></script>
  <script src="bower_components/angular-i18n/angular-locale_ja-jp.js"></script>
  <!-- endbower -->
  <!-- endbuild -->
  <!-- build:js -->
  <script src="bower_components/angular-mocks/angular-mocks.js"></script>
  <!-- endbuild -->
 ```

これでテスト時は普通にモックが使えて、grunt buildすると、angular-mocks.jsのセクションは消えている。
Railsプロジェクトにおけるgem管理


## **ずさんなgem管理**
gemの管理がずさんだったので, こんなエラーがでた.


```
✖^∀^✖ rails g migration add_event_image_to_event event_image

Could not find minitest-5.4.1 in any of the sources
Run `bundle install` to install missing gems.
```
gemはインストールされてるはずなのにinstallエラーがでてる. 
いろいろ記事みたけど, 治らない.
これまでは, versionごとに共通のgemをインストールしてた.
そもそもプロジェクトごとにgem管理できてないことが問題である.
コレを気にきちんと管理しようと思う.

## **rubyバージョン管理**
rbenvでバージョン管理をしている人はプロジェクト毎にバージョン管理するべき.

```
✖^∀^✖ rbenv local [ruby version]
```
でプロジェクトごとに管理できる.
一応, メモしとく.

## **gem管理**
プロジェクトごとにgemを管理するには

```
✖^∀^✖ bundle install --path <指定フォルダ>
```
こんな感じで, gemインストールする際にgemのインストール先を指定する. 
そうすると, .bundleが作られて./bundle/configにパス情報が残る.
なので, 一度インストールした後は

```
✖^∀^✖ bundle install
```
だけでおｋ.

## **参考文献**
http://qiita.com/muran001/items/a7bfeabe15f9900583a9
http://qiita.com/hisonl/items/162f70e612e8e96dba50  
  
  
プロジェクトごとに管理したら, 変なエラーは消えた.
bundlerについて知識不足なので, 勉強しようと思う.
ルーティングでワイルドカードを使うときの注意点

Laravelのルーティングでは、サブドメインの設定も可能で、ワイルドカードでも指定できます。
[Sub-Domain Routing](http://laravel.com/docs/routing#sub-domain-routing)

```php:routes.php
// {account}がワイルドカード
Route::group(['domain' => '{account}.example.com'], function()
{
    Route::get('user/{id}', function($account, $id)
    {
        //
    });

    // 名前付きルート
    Route::get('/login', ['as' => 'login', 'uses' => 'HomeController@login']);
});
```

上記の設定で、「johndoe.example.com」などに対応できるわけです。

## 注意点

ところが、`Redirect`や`Form`で**名前付きルート**が使えないという困ったことになります。

```php
Redirect::route('login');
// 文字通り、{account}.example.com/login にリダイレクトされる。

Form::open(['route' => 'login']);
// <form method="POST" action="http://{account}.example.com/login" ...
```

ワイルドカード指定が、そのまま出力されてしまい、「johndoe.example.com」なら
「johndoe.example.com/login」ではなく、「{account}.example.com/login」にリダイレクトされてしまうわけです。

## 対処方法
私が試した限りでは次の対処法があります。

### `Redirect::route()`の第2引数にワイルドカードの値を設定する

毎回、第2引数にワイルドカードの値を指定します。

```php
Redirect::route('login', ['account' => 'johndoe']);
// johndoe.example.com/login にリダイレクト
```

### (結局...)名前付きルートを使わない

上記の方法では、`Form::open()`に対応できてません。

```php
Redirect::to('/login');
Form::open(['url' => '/login']);
```

## 補足
ちなみに、[Prefix Routing](http://laravel.com/docs/routing#route-prefixing)でワイルドカードを使ったときも同じ感じです。

他に解決方法ご存じのかた、ぜひ教えてください！
msysGitのgit-gui日本語対応


この投稿に記載していた問題は、
Git for Windows 2.7.1
で修正されました。
今後、この記事の対処は不要となります。


Windowsで、Gitを使う場合、日本語の扱いで困ることがある。

*2015/1/10 追記* : Git-1.9.5-preview20141217でもこの対処が必要であった

ここでは、gitに付属のgit-guiの日本語対応について書く。
なお、その他日本語の諸問題については、「[msysgit で日本語を使いたい](http://qiita.com/kumazo@github/items/2169e1ee7be278f82b94)」が詳しい。

~~対象バージョンは、msysgit-1.8.5.2.msysgit.0 っと少し古いバージョンである。また、最新のバージョンの状況は未確認である。~~

事象
----

git-gui は、ある特定の日本語文字を含むフォルダを開けない問題があった。
(遭遇したのは、「指導」という文字を含んでいるとダメだった)

対処
----

対処方法は、以下のパッチの適用である。

```diff:
diff -u C:/Program Files/Git/libexec/git-core/git-gui.tcl.bak C:/Program Files/Git/libexec/git-core/git-gui.tcl
--- C:/Program Files/Git/libexec/git-core/git-gui.tcl.bak	Fri Dec 27 22:33:56 2013
+++ C:/Program Files/Git/libexec/git-core/git-gui.tcl	Tue Jun 24 17:29:11 2014
@@ -31,6 +31,8 @@
 ##
 ## Tcl/Tk sanity check
 
+encoding system utf-8
+
 if {[catch {package require Tcl 8.4} err]
  || [catch {package require Tk  8.4} err]
 } {
@@ -2168,6 +2170,7 @@
 			set old_GIT_DIR {}
 		}
 
+		encoding system cp932
 		set pwd [pwd]
 
 		if {!$is_submodule} {

```

前者のエンコーディングの変更は、git gui用、後者はgit guiからgitk起動用

パッチを当てるには、上記をgit-gui.patchに保存してカレントにgit-gui.tclとgit-gui.patchがある状態で
`patch -l git-gui.tcl git-gui.patch`
を実行する

以上
第25回オフラインリアルタイムどう書く「めぐるセル」の rubyによる実装


問題 http://nabetani.sakura.ne.jp/hena/ord25rotcell/
解答リンク集 http://qiita.com/Nabetani/items/636fce060e1ebbc95f9b
イベント http://yhpg.doorkeeper.jp/events/13947

当日お見せした実装。

```ruby
module RotCell
  class Rotater
    def initialize(board)
      @board = board
    end

    def rot_core(ix, cx, cy)
      ix = ix.sort_by{ |i|
        y, x = i.divmod(5)
        Math.atan2(y - cy, x - cx)
      }
      v = @board.values_at(*ix)
      v.size.times.each do |i|
        @board[ix[i]] = v[i - 1]
      end
    end

    def rot(cmd)
      positions = cmd.chars.map { |c| @board.index(c).divmod(5) }
      left, right = positions.map { |xy| xy[1] }.minmax
      top, bottom = positions.map { |xy| xy[0] }.minmax
      indices_from = @board.size.times.select{ |xy|
        y, x = xy.divmod(5)
        (((x == left - 1 || x == right + 1) && ((top - 1..bottom + 1) === y)) ||
            ((y == top - 1 || y == bottom + 1) && ((left - 1..right + 1) === x)))
      }
      rot_core(indices_from, (left + right) / 2r, (top + bottom) / 2r)
      indices_from.map { |ix| @board[ix] }.sort.join
    end
  end

  def self.solve(s)
    cells = ('a'..'y').to_a
    commands = s.split(',')
    ro = Rotater.new(cells)
    commands.each do |c|
      ro.rot(c)
    end
    r = ro.rot(commands[-1])
    r.empty? ? 'none' : r
  end
end

DATA.map do |line|
  id, src, expected = line.split(/\s+/)
  actual = RotCell.solve(src)
  ok = actual == expected
  puts '***NG*** : %s %s->%s ( %s )' % [id, src, actual, expected] unless ok
  ok
end.all?.tap { |r| puts ( r ? 'ok' : 'NG') }

__END__
0 ab,gg,uj,pt,an,ir,rr  hpqsvwxy
1 gs,ok abcdftvwxy
2 gs,sg,ok  none
```

いつも通り、テストデータの大半は省略。

実装戦略で選択はいくつかあって。

* データの持ち方<br>
 a) 盤面を2次元または1次元の配列で持つ<br>
 b) 文字と座標の対応を、key-value pair で持つ
* 回転関連<br>
 p) 回る方向にそってセルを集める<br>
 q) 適当に集めて、あとで整列する

あたりが重要だと思う。

で。
この実装は aq という戦略にした。
会場では ap と bp の方がいらっしゃったけど q を選んだ方はいなかった。

ruby なので `minmax` や `divmod` の結果を多重代入で取得とか、`ary[-1]` が `ary.last` と同等であることを利用するとか、そういう小ネタを積み重ねている。

全体的に美しくない実装だと感じてはいるものの、こんな感じで。

ruby に偏っているので別の言語でいくべきだったなぁと思ったり。
JavaScriptでJSONファイルダウンロード


ブラウザだけでAPIを叩き、JSONファイルを取得する方法です。
d3.jsを使っているのは趣味なので、jQueryで取得してもただのJavaScriptで取得してもいいと思います。

コードを修正すれば、何度もAPIを叩きJSONを結合して最後にダウンロードするということもできます。
ただファイル名が必ずダウンロードとなるので、なんとかならないかな〜と思っています。

![kobito.1410081508.297481.png](https://qiita-image-store.s3.amazonaws.com/0/19316/cd4ec0ee-e6b0-d86d-3146-1926ecc9bc2c.png "kobito.1410081508.297481.png")


http://bl.ocks.org/ganezasan/4fbdfff0bf828eca3c74


``` JavaScript
  //JSONファイルの読み込み
  d3.json(url,function(data){
	 //JSONデータをURLに変換
    var href = "data:application/octet-stream," + encodeURIComponent(JSON.stringify(data));

    //URLを叩き、ダウンロード
    location.href = href;
    return true;
  });
```