OmniAICreator/Qiita-1.07M huggingface dataset:
これ、何コミット目？

git-kiribanの要、何コミット目かを導くロジック。gitはsvnよろしく連番ついてるわけじゃないのでね。

確認用として
gitのコミットを古い方から順番に表示する。（数字をふって、逆順ソートして、数字を消して、less）

```Bash
git log --oneline | cat -n | sort -nr | cut -c 8- | less
```



1024回目のコミットを表示

```Bash
git log --oneline | cat -n | sort -nr | cut -c 8- | sed -n 1024p
```
`git log --oneline | wc -l`　が 1287の時以下も同じ

```Bash
git log --oneline | sed -n 264p
```
つまりN回目は

```Bash
git log --oneline | sed -n (総数-N+1)p
```

それらを利用してgit-kiribanは出来上がってますよ。
[git-kiriban](https://github.com/YukiAsu/git-kiriban)
間違ってたら教えてください^^;
最近のJavaScriptのテンプレ


最近下のように書いてる。変遷としては、若干サーバーサイドJavaScriptを意識しつつ徐々に離れていった感じ。

1. 即時関数を2重にして、トップには何も書かない
2. 外側の即時関数の中には、`'use strict'`を書く
	- 非strictモードのコードが含まれているとどっちのモードになるかわからないため。負の遺産が含まれ(ry
	- だいたいjQuery使うので、外側の即時関数の書き方はjQuery boilerplateのを参考にしている(jQuery使わない場合は、第二引数を抜かす)
3. 内側の即時関数に実際の宣言を書く
	- app.jsか何か設定用のスクリプトでアプリケーション用名前空間としてグローバルオブジェクトを宣言しておく(`window.App = {};`など)
	- 即時関数内で宣言されたプロパティやメソッド、関数などを返り値にして、グローバルオブジェクトに展開する

```functions.js
/**
 * functions.js - Utility functions.
 */

;(function(global, $, undefined) {
  'use strict';

  var App = global.App;  // 名前空間は宣言済み(app.jsのような設定用のスクリプトか何かで宣言する)

  App.functions = (function() {
	// プライベートな関数や変数が必要な場合は、返り値(module)に含まない様に、この辺に書く
	// […]

    var module = {
      /**
       * compact array by removing 0, false, null, '' and undefined.
       *
       * @param {Array} array An source array.
       * @return {Array} The compacted array.
       */
      compact: function(array) {
        var arr = $.isArray(array) ? array : [array];
        return $.grep(arr, function(val, i) {
          return !!val;
        });
      }
    };

    return module;  // この例ではオブジェクトリテラルだが、コンストラクタを使っている場合は、コンストラクタを返すようにする。
  }());
}(this, jQuery));
```

```app.js
/*!
 * app.js - Application root.
 */

;(function(global, undefined) {
 'use strict';

 global.App = {
  DEFAULT_KEYWORD: '@iphone_dev_jp'
 };

}(this));
```

```bootstrap.js
/*!
 * bootstrap.js - Setup and Load application.
 */

;(function(global, $, undefined) {
  'use strict';

  var App = global.App;

  // Mixin helper functions to View.
  $.extend(App.View.prototype, App.viewHelpers);

  $(function() {
    var view = App.View.getInstance();
    view.initialize({collection: new App.Tweets()});
    view.registerEvents().search(App.DEFAULT_KEYWORD);
  });
}(this, jQuery));
```

##参考
- https://github.com/roothybrid7/twtestapp
- [demo](http://roothybrid7.github.com/twtestapp/)
SinatraのerbメソッドでContent negotiationをサポートする


Sinatraのerbメソッドは標準ではContent negotiationをサポートしていません。そこで、ユーザエージェント(Webブラウザ)がリクエストに指定した`Accept-Language`ヘッダの値をもとに、テンプレートを自動的に選択することができるメソッド(`erb_l`)を新たに定義します。

多分、sinatra-r18nかSinatra本家がサポートするまでの間の暫定対応。

## 準備
以下のgemが必要です。適当に`gem install`しておいて下さい。

 * i18n
 * rack-contrib

## コード
### アプリ
```ruby:test_app.rb
# coding: utf-8
require 'rack/contrib'
require 'sinatra/base'

class TestApp < Sinatra::Base
  use Rack::Locale

  helpers do
    # erb with content negotiation support
    def erb_l(template, options = {}, locals = {})
      locale = request.env['rack.locale']
      if locale.nil? or locale.to_s !~ /^\w+$/
        erb(template, options, locals)
      end

      tmpl = "#{template.to_s}_#{locale}".to_sym

      begin
        erb(tmpl, options, locals)
      rescue Errno::ENOENT
        erb(template, options, locals)
      end
    end
  end

  get '/' do
    erb_l :index
  end
end
```

`erb_l`メソッドは、`Accept-Language`ヘッダの値に基いて、読み込むテンプレートのファイルを決定します。上記の例の場合、日本語を優先する設定のWebブラウザからのリクエストの場合には`index_ja.erb`を、英語を優先するWebブラウザからのリクエストの場合には`index_en.erb`をテンプレートとして使用します。これらのファイルが存在しない場合、`index.erb`をテンプレートとして使用します。

### テンプレートの例
```ruby:views/index.erb
<%# coding: utf-8 %>
<html>
  <body>
    <h1>Hello, world</h1>
  </body>
</html>
```

```ruby:views/index_ja.erb
<%# coding: utf-8 %>
<html>
  <body>
    <h1>こんにちは世界</h1>
  </body>
</html>
```

### config.ru
```ruby:config.ru
require 'rubygems'
require File.join(File.dirname(__FILE__), 'test_app.rb')

run TestApp
```

## 実行例
テストのため、上記のアプリを起動しておきます。

```
% rainbows -E production -p 8080 config.ru
```

`Accept-Language`ヘッダを指定しない場合、標準の`index.erb`が使われます。

```
% wget -nv -4 -O - http://localhost:8080/
<html>
  <body>
    <h1>Hello, world</h1>
  </body>
</html>
```

`Accept-Language: en`の場合。`index_en.erb`の利用を試みますが、これは存在しませんので、`index.erb`が使われます。

```
% wget -nv -4 -O - --header='Accept-Language: en' http://localhost:8080/
<html>
  <body>
    <h1>Hello, world</h1>
  </body>
</html>
```

`Accept-Language: ja,en`の場合。`index_ja.erb`が使われます。

```
% wget -nv -4 -O - --header='Accept-Language: ja,en' http://localhost:8080/
<html>
  <body>
    <h1>こんにちは世界</h1>
  </body>
</html>
```

`Accept-Language: fr`の場合。`index_fr.erb`の利用を試みますが、これは存在しませんので、`index.erb`が使われます。

```
% wget -nv -4 -O - --header='Accept-Language: fr' http://localhost:8080/
<html>
  <body>
    <h1>Hello, world</h1>
  </body>
</html>
```
bashのコマンド履歴を検索する


### 履歴の検索
`ctrl`+`r`　検索はインクリメンタルに行われる。該当する履歴のうち最も古い履歴が選択される。

### 検索結果を実行
`enter` 検索結果をコマンドラインにコピーし、それを実行する。

### 検索結果をコマンドラインにコピー（実行しない）
`ctrl`+`g` 検索結果のコピーだけを行う。
case文でのNULL

```php
<?php

$var = NULL;
switch ($var) {
  case NULL:
    echo 'NULL';
    break;
  case 0:
    echo 'zero';
    break;
  case '':
    echo 'empty string';
    break;
  default:
    echo 'default';
}
echo PHP_EOL;
// => NULL
```
`case NULL:`より先に`case 0:`があれば`zero`が出力される。
Gnome NetworkManager をcli から制御する

Flucard のAP に切り替えて写真をDL してまた元に戻すのが面倒なのでScript 一発にしたくて調べた．

# 接続一覧を表示する
>
$ nmcli con list
名前                      UUID                                   タイプ            タイムスタンプ-リアル
OSCfreespot               72051ac6-6fc3-4208-8003-504897fa32f7   802-11-wireless   2012年08月04日 12時15分33秒
matoken 1                 1f7c1381-69a7-4868-b2e8-b03bc8ffabc1   802-11-wireless   2012年08月05日 11時35分57秒
mobilepoint               34f755a3-7ca2-4b57-af06-de0945010fe7   802-11-wireless   2012年07月07日 14時13分52秒
e-mobile デフォルト       97277d0a-5c44-4d8d-841b-398bcf0737fe   gsm               2012年09月30日 21時25分08秒
VPN 接続 1                5c634531-73a0-45a3-8d8b-558159e9ab83   vpn               接続していない

# 現在のアクティブな接続を表示する
> 
$ nmcli con status
名前                      UUID                                   デバイス   デフォルト VPN   MASTER-PATH                                 
APNAME                    318ed662-ec6a-4677-a634-96d8f539d077   wlan0      はい     いいえ セットされていません

# 指定したネットワークに接続
# UUID で指定
>
$ nmcli con up uuid 318ed662-ec6a-4677-a634-96d8f539d077
アクティブ接続の状態: アクティベート中
アクティブ接続のパス: /org/freedesktop/NetworkManager/ActiveConnection/2
状態: アクティベート済み
接続はアクティベート済み

# ID(名前) で指定
> 
$ nmcli con up id 'APNAME'
アクティブ接続の状態: アクティベート中
アクティブ接続のパス: /org/freedesktop/NetworkManager/ActiveConnection/3
状態: アクティベート済み
接続はアクティベート済み


# 参考URL
* [Ubuntu Manpage: nmcli - command-line tool for controlling NetworkManager](http://manpages.ubuntu.com/manpages/maverick/man1/nmcli.1.html)
GoogleAnalyticsでAjaxリクエストやダウンロード数を記録する公式の方法

ダウンロード数やAjaxのリクエストを記録したい時など用

```javascript
_gaq.push(['_trackPageview', '/downloads/pdfs/corporateBrief.pdf']);
```

参考リンク: [Syntax Comparisons - Google Analytics — Google Developers](https://developers.google.com/analytics/devguides/collection/gajs/asyncMigrationExamples?hl=ja#VirtualPageviews)
快適、かどうかはまだ分からないけどjs/HTML(5)開発環境を作る(メモ) 

##インスパイヤー

[FlashでいうパブリッシュのないHTML開発で、死なないためにやっといたらいいんじゃない的なこと。〜Ctrl+Enter Again〜](http://katapad.com/wp/2012/11/05/ctrl_enter_again/)
環境はmac(book air)
完全に自分用メモなので、あまり活用出来ないと思います

##色々インストール編

###Homebrewインストール

パッケージ管理ソフトはmacportsでも良い（wget入れるだけなので）けど後々考えるとこっちのほうが良いらしいので入れる
下記サイトの一番下の1文をターミナルにコピペしてドン
[http://mxcl.github.com/homebrew/](http://mxcl.github.com/homebrew/)

```
% ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"
% brew -v  <-- 入ってるかどうかの確認
```

###wgetインストール

Node.jsのインストールに必要らしい

```
% brew install wget
% wget -v  <-- 入ってるかどうかの確認
```

###gitインスト…入ってたのでnvmインストール

nvmはNode.jsのインストール・バージョン管理・シェルの環境設定をやってくれる便利ツール
Githubのリポジトリをクローンする

```
% git clone git://github.com/creationix/nvm.git ~/.nvm
% source ~/.nvm/nvm.sh  <--これやってるか不明。パスを通してる？？
% nvm -v  <-- 入ってるかどうかの確認
```

###nvmを使ってNode.jsをインストール

安定版(と聞いた)の0.8.14をnvmを使ってインストール

```
% nvm install v0.8.14
% nvm ls  <--インストールしたものの確認
v0.8.14
current:
% nvm use v0.8.14  <--nodeの環境切り替え
Now using node v0.8.14
```

ここまでの参考:
[Node.jsとnvmを初めてインストールするときのハマりポイントと対策](http://d.hatena.ne.jp/mollifier/20110221/p1)

###CoffeScriptのインストール

Node.jsはnpmというパッケージ管理ツールがある。
nvmをインストールするとnpmも使えるようになっている。
npmを使ってCoffeScriptのインストールが出来る。

```
% npm install -g coffee-script
% coffee -v  <-- 入ってるかどうかの確認
```

###SASS、Compassのインストール

既に入っていたのでupdateをかける

```
% sudo gem update sass
% sudo gem update compass
```

##Compassを試す編

###初期設定

SASSファイルやcssを置く予定のディレクトリ下で下記のコマンドを実行。

```
% compass create
directory sass/ 
directory stylesheets/ 
   create config.rb 
   create sass/screen.scss 
   create sass/print.scss 
   create sass/ie.scss 
   create stylesheets/ie.css 
   create stylesheets/print.css 
   create stylesheets/screen.css 
*********************************************************************
Congratulations! Your compass project has been created.
<--以下略
```

とファイルが出来ます。

###SASSファイルからCSSファイルを生成する

コンパイル or ウォッチ

```
% compass compile sass/style.scss  <-- sassファイルをコンパイル
% compass watch sass/style.scss <-- sassファイルを監視して保存の度にコンパイル
% compass watch --output-style compressed sass/style.scss <-- 一行に圧縮
% compass w <-- sassディレクトリの中身を全部監視
```

ここまでの参考:
[CSS書くならCompass使った方がいいよ。SASS使ってる人なら特に。](http://howtohp.com/css/compass.html)

ディレクトリ全部監視させながらごりごりsass書くのが良いかと思います。
具体的な書き方は色んなサイトを参考に・・・

[少ない手間と知識でそれなりに見せる、ズルいデザインテクニック// Speaker Deck ](https://speakerdeck.com/ken_c_lo/zurui-design)
これのmixinとか実際に試せますね！

CoffeScriptその他の実行は次回…
Emacsで選択範囲をインタラクティブに広げる expand-region

久しぶりにいいelispに出会いました。

- [expand-region.elの紹介 - Life is very short](http://d.hatena.ne.jp/syohex/20120117/1326814127) 

## インストール

[package.el](http://d.hatena.ne.jp/tuto0621/20120613/1339607400) に入っていたのでそっちを使いました。

`M-x package-list-packages` で `expand-region` にカーソルを合わせてEnter

## 設定

```init.el
;; expand-region
(require 'expand-region)
(global-set-key (kbd "C-@") 'er/expand-region)
(global-set-key (kbd "C-M-@") 'er/contract-region)
```

## リンク
- [magnars/expand-region.el](https://github.com/magnars/expand-region.el) - 本家
- [Episode 09: expand-region - Emacs Rocks!](http://emacsrocks.com/e09.html) - 動画

## あわせてどうぞ
- [リージョンを複数選択して同時にリアルタイム編集出来る mark-multiple.e](http://qiita.com/items/00f679a5771604c4feb1)
Ubuntuでieee802.1.x

宣伝になって恐縮ですが、ubuntuでdocomo wifiのieee802.1.x接続するのをメモ書きした記事を公開しましたので紹介させてください。
http://d.hatena.ne.jp/Boc963proguram/20121106/1352183487

無線LANカードが認識されていたら、複雑な操作もなく設定できます。
iee802.1.xによる無線LAN APを導入している企業のエンジニアさんやeduroam（NIIが店赤いしている学術無線LANローミング基盤）を導入している大学の学生さんの皆様などiee802.1.xが使いたいと思っている皆様,参考にしてください。
iOSシミュレータに画像を追加する

http://blog.goo.ne.jp/kunibu/e/f12e540d947e5fa9a94537080a9580d6

~/Library/Application Support/iPhone Simulator/x.x/Media/DCIM/100APPLE/
に画像を置き
~/Library/Application Support/iPhone Simulator/5.0/Media/PhotoData
を削除する。

プログラミングの知識ではないが。
git diff で JSON の比較をいい感じにする (ruby版)

git diff で JSON の比較をいい感じにする #git #JSON - Qiita
http://qiita.com/items/aec05f5c2f1ba9b8279a
のruby版。

textconv = "ruby -r json -e 'jj JSON(ARGF.read)'"

json がないときは gem i json
テスト目的で python GAE DataStore の id を指定して作成

~~~:python
user = User(name = "hiroshi", key=db.Key.from_path('User', 3))    
~~~

key_name の場合は `User(key_name='hiroshi')` でいいのだけど id の場合は通常 unique な数値が sequential に決まるのでテスト以外には使われないと思うので
http://stackoverflow.com/a/2826051/338986
FactoryGirl::Syntaxを使っていない部分を一気に置換するワンライナー

`include FactoryGirl::Syntax::Method` を使わずに書きはじめちゃったけど、あとから使いたくなったときってよくありますよね…そんなときに今ある部分の書きかたを全部置換するためのワンライナーです。

```
find spec/**/*.rb | xargs sed -i "s/FactoryGirl\.\(build\|create\|attributes_for\|build_stubbed\)/\1/g"
```
Sublime Text2でcoffeeScript


SublimeText2を使って恋に落ちたので勢いエントリです。

##SublimeText2とは
軽くて可愛くてプラグインがいっぱいある便利なエディタです。
詳しくは下記サイトで。
[”恋に落ちるエディタ”「Sublime Text」 完全入門ガイド！](http://liginc.co.jp/designer/archives/6774)

ちなみに導入を決めたのは↓この機能。
某エディタ使ってて、終了させるたびに確認されるのめんどくさかったんで。

>Hotsave
他のエディタであまり見ない画期的な機能の一つです。ファイルを編集した状態でエディタを終了させようとすると「保存しますか？」という確認が出ずにそのまま終了します。勝手に自動保存されたわけではなく、次回、エディタを立ち上げたときに最後に編集された状態が復元されるというわけです！

##coffeeScriptが便利になるプラグイン
さて本題です。
最近はすっかりCoffeeScriptナシではJS書けない病です。
しかしSublimeText2はデフォルトではCoffeeに対応していません。
それを対応させる方法です。

##PackageControlを導入しよう。
プラグインをインストールするには色んな方法があるみたいですが、これオススメです。
方法もカンタン。

ViewメニューからShow Consoleを選択して、検索窓みたいなところに以下をコピペししてEnter。

```
import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ',' ')).read()); print 'Please restart Sublime Text to finish installation'
```
[Sublime Package Control](http://wbond.net/sublime_packages/package_control/installation)

あとは再起動するだけで使えます。


##CoffeeScriptをシンタックスハイライトする。

1.ToolsメニューからCommand Palette…を選択し「install」とタイプしてenter。
2.別窓が開くので「coffee」とタイプします。
3.「CoffeeScript」を選択してenterするとインストールできます。

左下のほうでチカチカしてるのが止まったら完了です。
SublimeText2を再起動してください。
これで拡張子「.coffee」のファイルがシンタックスハイライトされているはずです。

##CoffeeScriptをCompileする。
上記の手順で進み、3で「CoffeeCompile」をインストールします。
できたら再起動してください。
「.coffee」のファイルを開き、右クリックすると「CoffeeCompile」という項目があるのでクリック。
すると同じディレクトリに同名のjsファイルが作成されます。

※すでに同名のjsファイルがある場合は上書きされるので注意してください。

##まとめ
そんな感じで、手探りでプラグインを入れてみただけで格段に使い勝手がよくなる***SublimeText2***にフォーリンラブです。
オススメの使い方とかあったらぜひ[_wats](https://twitter.com/_wats)までお知らせくださいね！
テキスト以外のdiffの取り方、およびDiff/Mergeツールの整理

## Word

* [xdocdiff](http://freemind.s57.xrea.com/xdocdiff/)

※デフォルトの機能でいけるらしい ⇒ [比較と反映の機能を使用してプロジェクト チームの入力を反映する - Word - Office.com](http://office.microsoft.com/ja-jp/word-help/HA001077099.aspx?redir=0)


## Excel

* [xdocdiff](http://freemind.s57.xrea.com/xdocdiff/)
* [ExcelDiff エクセル差分抽出定番ツールExcel Diff](http://jp.suntrap-systems.com/ExcelDiff/)
	* ※有償

## PDF

* [xdocdiff](http://freemind.s57.xrea.com/xdocdiff/)
* [DiffPDF](http://www.qtrac.eu/diffpdf.html)
* [PDF の差分をとる方法 | Green Rabbit ](http://green-rabbit.sakura.ne.jp/blog/2010/06/21/1710/)
	* 画像化してImageMagickで重ね合わせる

## Image
* [DiffImg | Free Graphics software downloads at SourceForge.net](http://sourceforge.net/projects/diffimg/)


## Diff/Merge

* Diffのみ
    * [DF](http://www.vector.co.jp/soft/win95/util/se113286.html)
    * [差分表示ソフト Rekisa](http://frozenlib.net/rekisa/)
* Diff/Merge
    * [WinMerge](http://winmerge.org/)
    * [DiffMerge](http://www.sourcegear.com/diffmerge/)
    * [Perforce Visual Merge and Diff Tools | Perforce](http://www.perforce.com/product/components/perforce_visual_merge_and_diff_tools)
    * [vimdiff](http://nanasi.jp/articles/howto/diff/merge_diff.html)

## その他

Subversion+TortoiseSVN限定でよいならmsofficesvnという手もあります。

* [msofficesvn - Microsoft Office (Excel, Word, PowerPoint) add-ins that invoke TortoiseSVN commands - Google Project Hosting](http://code.google.com/p/msofficesvn/)

TortoiseHgとセットで動くmsofficehgもリリースされました。([Excel Word の文書管理に Mercurial？ - MAJ1MAの日記](http://d.hatena.ne.jp/MAJ1MA/20121122/1353611032))

* [msofficehg - Microsoft Office (Excel, Word, PowerPoint) add-ins that assist document version control with TortoiseHg - Google Project Hosting]( http://code.google.com/p/msofficehg/)


WinMergeでWordもExcelもPDFも全部できるよってコメントをはてブでもらいました。xdocdiffを内部的に呼び出すプラグインでしょってことで書いていなかったのですが、どうもそれ以外にもWord/Excelプラグインがあるみたいです。試してないので性能は分かりません。はてブコメントをくれた方がどちらを指しているのかはちょっと読み取れませんでした。
xdocdiffは使うけどWordもExcelも文書構造がテキスト化によってなくなってしまうのでいまいち辛いなと思っています。

* [Plugins - WinMerge 2.12 Manual](http://manual.winmerge.org/Plugins.html#Plugins_available)
iOS 6とiOS 5でFacebook SDK使おうとしたらハマった

## versions

- Xcode (4.5.1)
- Facebook SDK for iOS (3.1)

## SDKインストール

- [ここ](https://developers.facebook.com/ios/)からインストーラをダウンロードしてインストール。`~/Documents`にSDKが入る。
- [チュートリアル](http://developers.facebook.com/docs/getting-started/getting-started-with-the-ios-sdk/jp/)に沿って進める。

## チュートリアル通りにやったのにエラる

```
Undefined symbols for architecture armv7:
  "_OBJC_CLASS_$_ACAccountStore", referenced from:
      objc-class-ref in FacebookSDK(FBSession.o)
  "_ACFacebookAudienceFriends", referenced from:
      -[FBSession authorizeUsingSystemAccountStore:accountType:permissions:defaultAudience:isReauthorize:] in FacebookSDK(FBSession.o)
  "_ACFacebookAppIdKey", referenced from:
      -[FBSession authorizeUsingSystemAccountStore:accountType:permissions:defaultAudience:isReauthorize:] in FacebookSDK(FBSession.o)
  "_ACAccountTypeIdentifierFacebook", referenced from:
      +[FBSession renewSystemAuthorization] in FacebookSDK(FBSession.o)
  "_ACFacebookAudienceKey", referenced from:
      -[FBSession authorizeUsingSystemAccountStore:accountType:permissions:defaultAudience:isReauthorize:] in FacebookSDK(FBSession.o)
  "_ACFacebookAudienceOnlyMe", referenced from:
      -[FBSession authorizeUsingSystemAccountStore:accountType:permissions:defaultAudience:isReauthorize:] in FacebookSDK(FBSession.o)
  "_ACFacebookPermissionsKey", referenced from:
      -[FBSession authorizeUsingSystemAccountStore:accountType:permissions:defaultAudience:isReauthorize:] in FacebookSDK(FBSession.o)
  "_OBJC_CLASS_$_ASIdentifierManager", referenced from:
      objc-class-ref in FacebookSDK(FBSettings.o)
  "_ACFacebookAudienceEveryone", referenced from:
      -[FBSession authorizeUsingSystemAccountStore:accountType:permissions:defaultAudience:isReauthorize:] in FacebookSDK(FBSession.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
```

などとエラーが出てくる。

## 解決策

`Accounts.framework`と`AdSupport.framework`を追加する。これでiOS 6は動くのだけど、iOS 5では…

```
dyld: Library not loaded: /System/Library/Frameworks/AdSupport.framework/AdSupport
```

や

```
dyld: Symbol not found: _ACFacebookAppIdKey
```

のようなエラーがおきる。

なので、`Accounts.framework`と`AdSupport.framework`を`optional`で追加する。

これでうまくいった。
git diff で JSON の比較をいい感じにする

リポジトリの .gitattributes に

```
*.json diff=json
```

とか書いておいて、 ~/.gitconfig あたりで

```
[diff "json"]
        textconv = "perl -MJSON -0e \"print JSON->new->canonical->pretty->encode(decode_json(<>))\""
```

とでも書いておくと git diff で JSON がいい感じに比較できる。
FlashDevelop 4.1.0 のコールコマンドサンプル


FlashDevelop4.1.0 RTM から導入された FlashConnect による CallCommand の例です。

``` as3:test.as
FlashConnect.send(createCommandNode("Browse", "http://blog.bk-zen.com"));

private static function createCommandNode(command: String, ...args): XMLNode
{
	var msgNode: XMLNode = new XMLNode(1, null);
	var txtNode: XMLNode = new XMLNode(3, encodeURI(args.length == 0 ? "" : "" + args));
	msgNode.attributes.command = command;
	msgNode.attributes.cmd = "call";
	msgNode.nodeName = "message";
	msgNode.appendChild(txtNode);
	return msgNode;
}
```

詳しくはこちら
[馬鹿全 - FlashDevelop 4.1.0 RTM リリース](http://blog.bk-zen.com/2012/11/01/719/ "馬鹿全 - FlashDevelop 4.1.0 RTM リリース")
Vim から Mac の辞書.appを開く

```vim:.vimrc
" Mac の辞書.appで開く {{{
if has('mac')
    " 引数に渡したワードを検索
    command! -nargs=1 MacDict      call system('open '.shellescape('dict://'.<q-args>))
    " カーソル下のワードを検索
    command! -nargs=0 MacDictCWord call system('open '.shellescape('dict://'.shellescape(expand('<cword>'))))
    " 辞書.app を閉じる
    command! -nargs=0 MacDictClose call system("osascript -e 'tell application \"Dictionary\" to quit'")
    " 辞書にフォーカスを当てる
    command! -nargs=0 MacDictFocus call system("osascript -e 'tell application \"Dictionary\" to activate'")
    " キーマッピング
    nnoremap <silent><Leader>do :<C-u>MacDictCWord<CR>
    vnoremap <silent><Leader>do y:<C-u>MacDict<Space><C-r>*<CR>
    nnoremap <silent><Leader>dc :<C-u>MacDictClose<CR>
    nnoremap <silent><Leader>df :<C-u>MacDictFocus<CR>
endif
"}}}
```

Mac の辞書は英和辞典や国語辞典だけでなく，英英辞典や Wikipedia にも対応しているのでかなり便利です．

※ Mac にデフォルトで入っている vim は `has('mac')` で偽を返すのでご注意下さい．
60秒間隔でpep8したりするメモ

自分用で最近PEP8やpylintでのチェックを定期的にやりたいと思った時に書いているシェル用コマンド

``` sh
while : ; do bash test/run_pep8.sh && cat test/output/violations_pep8.log && sleep 30 ; done
```

### 補足
自分の場合、jenkins連携の関係で、test/run_pep8.sh内にPEP8での検証処理をやってtest/out/violations_pep8.logに結果を出すようにしています。
↑のコードのbash 〜 ; の手前までをあれこれやればいろいろできると思われ
Emacsにコマンドサーチパスを追加するにはどうしたらよいか

そもそもOS XでEmacs.appをインストールしているのにMewを~配下にインストールしないといけない理由がわからないという人もいるかもしれませんが、Emacs.appにmewを混ぜたくないがあまり適当なディレクトリがない、というわけで、私はHomebrewでインストールしたEmacs.appと~配下に野良ビルドしたMewという組み合わせでメールを読み書きしています（2013年11月10日訂正・現在ではMewを使っていません）。

ところで、何も考えずにこの組み合わせでMewを使うと、~/bin配下にインストールしたバイナリを呼び出す必要があるときに「mewl: command not found」などのエラーに遭遇してしまうことがあります。これは、launchdから引き継いだ`PATH`をEmacs.appが（事実上）そのまま使ってしまうためです。

（Emacs.appはbash等を経由して起動されるわけではないため、`PATH`を変更できるよいタイミングがありません。/etc/launchd.confを修正しても目的は達成できるのですが、/etc/launchd.confの`setenv PATH`行に~配下のパスを書き加えるのは抵抗がありますので、私はこの方法を採用しませんでした。なお、launchdは~/.launchd.confを読みません）

つまり問題は「Emacsにコマンドサーチパスを追加するにはどうしたらよいか」なのですが、
この問題を解決するには、~/.emacs.d/init.el等に以下のコードを入れるのがよいようです。

```el:~/.emacs.d/init.el
(if (file-directory-p (expand-file-name "~/bin"))
    (progn 
      (add-to-list 'exec-path (expand-file-name "~/bin"))
      (let ((exec-path (reverse (cdr-safe (reverse exec-path)))))
        (setenv "PATH" (mapconcat 'identity exec-path path-separator)))))
```

関数`add-to-list`は第1引数（ここでは`exec-path`。関数実行前に展開されないよう`quote`し、シンボルとしておく）の要素に第2引数（ここでは~/binを`expand-file-name`したもの）がない場合に限り第1引数のリストに第2引数を追加するという挙動を示します。

`exec-path`に~/binが追加されたら、Emacs.Appの子プロセスからも使えるように環境変数`PATH`を`exec-path`に合わせます（`exec-path`はもともと`PATH`の値をもとに設定されます）。それが`setenv`行で、`setenv`の第2引数に対し`exec-path`を「:」で`mapconcat`した結果を返しますが、`mapconcat`それ自体は関数に対して引数を渡す関数なので、引数をそのまま返すだけの関数である`identify`を介すことで`setenv`を成立させています。

（2012年11月6日修正）exec-pathをそのまま使うとEmacsのlibexecディレクトリ（HomebrewでEmacs 24.1を入れたOS X 10.8の場合は/usr/local/Cellar/emacs/24.1/libexec/emacs/24.1/x86_64-apple-darwin12.2.0）もPATHに含まれてしまうため、`let`で束縛した`exec-path`を`reverse`で一旦逆さにしてから最初の要素だけを排除（`cdr`）し、再度`reverse`することで順序をもとに戻したものを設定し、`PATH`の生成に利用しています。また、`path-separator`を使いました。
Eclipse でプロジェクト参照している先の依存ライブラリの参照

java プロジェクトの場合

B プロジェクトが A プロジェクトを参照している時、A プロジェクトの依存ライブラリを B プロジェクトでも使う場合、A プロジェクトの設定で「Java Build Path」＞「Order and Export」タブを開き、使うライブラリのチェックをつけてあげると B プロジェクトでも利用できるようになる。
CentOS 6.3にruby 1.9.3-p286のRPMを作成しインストールする


yumだと1.8系が入ったり、checkinstallを使おうとするとうまくいかないという情報があったので、RPMを作成してインストールする。

## 1. Gitをインストール
あると何かと便利なので、Gitを入れておく。
バージョンは古いがyumでインストールしたもので良いと思う。

古いのが嫌な場合はソースからコンパイルするなりして新しいバージョンを利用する。

(rpmforgeを使おうとしたら Require:libcurl.so.3()とかでてインストールできなかった。git-なんとか.**el5**.rf.x86_64とかなっていたのが気になったがうまく解決できず)

(以下、コマンドはrootならsudoはいらない)

```
$ sudo yum install git

$ git --version
git version 1.7.1
```

## 2. rubyをインストール。

### 2.1. 必要なパッケージのインストール
EPELのリポジトリを追加し、rubyのビルドに必要な以下のパッケージを予めインストールしておく。

* zlib-devel
* openssl-devel
* readline-devel
* libffi-devel
* tk-devel
* libyaml-devel

```
sudo rpm --import http://ftp.riken.jp/Linux/fedora/epel/RPM-GPG-KEY-EPEL-6
sudo rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-7.noarch.rpm
sudo yum install -y zlib-devel openssl-devel readline-devel ncurses-devel gdbm-devel db4-devel libffi-devel tk-devel libyaml-devel
```
### 2.2. rpmビルド用ユーザを作成する

```
$ sudo useradd rpmdevel
```

### 2.3. rpmbuildを実行する準備をする

以下の操作は 2.2で作成したユーザrpmdevelで行う。
ユーザのスイッチ方法は以下のコマンド。

```
$ su - rpmdevel
```

ユーザをスイッチしたら、rpmbuildに必要なディレクトリとマクロを用意する。

```
$ mkdir -p ~/rpm/{BUILD,SRPMS,SPECS,SOURCES,RPMS}
$ echo "%_topdir $HOME/rpm" > $HOME/.rpmmacros
```

### 2.4. specファイルの準備

RPMを作成するためのbuildファイルを以下から取得する。

[https://github.com/lnxchk/ruby-1.9.3-rpm](https://github.com/lnxchk/ruby-1.9.3-rpm)

```
$ git clone https://github.com/lnxchk/ruby-1.9.3-rpm
```

cloneしたスペックファイルはruby-1.9.3-p0用のスクリプトであるので先頭にある以下の記述をp286に変更する。

``` ruby-1.9.3-rpm
%define rubyver 1.9.3
# define rubyminorver p0 -> p286に変更
%define rubyminorver p286

~~ 略 ~~
```

変更したら、2.3で作成した~/rpm/SPECSへ移動またはコピーする。

```
$ cp ruby-1.9.3-rpm/ruby-1.9.3-rpm ~/rpm/SPECS
```

### 2.5 RPMの作成
2.4まで準備が完了したら、ソースコードをダウンロードしRPMを作成する。

ソースコードは[ruby公式ページ](ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p286.tar.gz)よりダウンロード

```
$ cd ~/rpm/SOURCES/
$ wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p286.tar.gz
```

ダウンロード完了後、rpmbuildを実行し、RPMを作成する。

```
$ rpmbuild -bb ~/rpm/SPECS/ruby193.spec
```

rpmbuildが完了すると、以下の場所にrpmファイルができる。

```
 ls -ltr /home/rpmdevel/rpm/RPMS/x86_64/
合計 31392
-rw-rw-r-- 1 rpmdevel rpmdevel 26420620 11月  5 13:09 2012 ruby-1.9.3p286-2.el6.x86_64.rpm
-rw-rw-r-- 1 rpmdevel rpmdevel  5718776 11月  5 13:09 2012 ruby-debuginfo-1.9.3p286-2.el6.x86_64.rpm
```

## 2.6. 作成したRPMのインストール

`exit`でrpmdevelから一般ユーザにもどる or `su -`でrootになって、2.5で作成したRPMをインストールする。

```
$ sudo rpm -ivh /home/rpmdevel/rpm/RPMS/x86_64/ruby-1.9.3p286-2.el6.x86_64.rpm

```

インストールが完了したら、

```
$ ruby -v
ruby 1.9.3p286 (2012-10-12 revision 37165) [x86_64-linux]

$ gem -v
1.8.23
```
でバージョンを確認して完了!
Apache FOP 1.1 で OS のフォントを全部登録する

ユーザー config でターゲットの ＜font＞ タグの子供として ＜auto-detect＞true＜/auto-detect＞ を設定しておくと、OS のフォントを全部チェックして使えるようにしてくれる。
（タグの開き閉じは全角文字。コピペする場合は半角に直して）
読み込んだ設定はフォントキャッシュとしてユーザー毎のアプリケーション設定に登録されるので、作り直したかったらキャッシュファイルを消す。
PyQt4導入


以前に何を躓いて途中だったのか覚えてませんが結果は現状で導入成功したのでメモを。

OSはMacOSX10.7.4
pythonはpythonbrewで導入のpython3.2.2に(2.x系とは相性微妙らしいので)

pybrew switch 3.2.2

で3系に切り替えておいて
http://www.riverbankcomputing.co.uk/software/pyqt/download
からmacのをブラウザ上でダウンロード。

### まずは解凍
tar -zxvf ./PyQt-mac-gpl-4.9.5.tar.gz
### 中に移動
cd ./PyQt-mac-gpl-4.9.5
### そしてインストール
python3 configure.py --use-arch=x86_64 &&make &&sudo make install
コマンドラインで画像のPSNRを測定する

ImageMagickに同梱されている`compare`コマンドが簡単で便利。

```bash
compare -metric PSNR ref.jpg target.jpg diffpng
```

2つのフォルダに入っている画像を連続で比較するrubyスクリプトは下記の通り。
compareの結果はなぜか標準エラー出力に出てくるので注意。

```ruby
#!/bin/env ruby
# -*- coding: utf-8 -*-

#
# Usage
#   $ ruby comp.rb TARGET_FOLDER
#

require 'rubygems'
require 'systemu'

# http://www.imagemagick.org/script/command-line-options.php#metric
COMPARE_METRIC = "PSNR"

REF_FOLDER = "RefFolder"
REF_FORMAT_EXT = ".bmp"
TARGET_FOLDER = ARGV[0]

Dir.glob(File.join(TARGET_FOLDER, "*")).sort.each do |target_file|
	ref_file = File.join(REF_FOLDER, File.basename(target_file, ".jpg")) + REF_FORMAT_EXT
	command = "compare -metric #{COMPARE_METRIC} #{ref_file} #{target_file} diff.png"
	
	# Metrics value is outputed to stderr somehow
	status, stdout, stderr = systemu command
	puts "#{target_file}\t#{stderr}"
end
```

* http://www.imagemagick.org/script/compare.php
Railsのローカル環境にhttps(SSL)を導入する方法

環境は、rails 3.2.6、ruby 1.9.3、Google Chrome 22.0、Mac 10.7.5 です。
***
一行目の```ruby.exe```を```ruby```と変更し```script/sslrails```を追加します。
（デフォルトで```script/rails```というファイルがありますが、それとは別に追加します）
※余談ですが、私はエディタをEsppressoを利用していまして、Esppresso上で```script/rails```を複製をしたら、Unix実行ファイルとして複製されませんでした。なので、Finderで複製することができました。```sslrails```は「Unix実行ファイル」でないと動作しませんので、ご注意下さい。

```ruby:script/sslrails
#!/usr/bin/env ruby
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.

APP_PATH = File.expand_path('../../config/application',  __FILE__)
require File.expand_path('../../config/boot',  __FILE__)

require 'rubygems'
require 'rails/commands/server'
require 'rack'
require 'webrick'
require 'webrick/https'
require 'webrick/ssl'

module Rails
  class Server < ::Rack::Server
    def default_options

      # cn と comment を適当に設定
      cn = [[ "CN", WEBrick::Utils::getservername]]  
      comment = "Generated by Ruby/OpenSSL"   
      cert, rsa = WEBrick::Utils::create_self_signed_cert(1024, cn, comment)
      ssl_certificate = cert.to_s
      ssl_private_key = rsa.to_s

      super.merge({
          :Port => 443,
          :environment => (ENV['RAILS_ENV'] || "development").dup,
          :daemonize => false,
          :debugger => false,
          :pid => File.expand_path("tmp/pids/server.pid"),
          :config => File.expand_path("config.ru"),
          :SSLEnable => true,
          :SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE,
          :SSLPrivateKey => OpenSSL::PKey::RSA.new(ssl_private_key),
          :SSLCertificate => OpenSSL::X509::Certificate.new(ssl_certificate),
          :SSLCertName => cn
      })
    end
  end
end

require 'rails/commands'
```

次に、```config/environments/development.rb```に、```config.force_ssl = true```を追加します。
※この状態は、httpでhttpのポートとともにアクセスしようとしても、強制的にすべてhttpsになります。

最後に、ローカルサーバーを起動します。
``` script/sslrails server webrick```
すると、**このサイトのセキュリティ証明書は信頼できません**と真っ赤でドキッとした画面が登場しますが、気にせず続行して下さい。

https:でサイトが表示されていれば、完了です。
***
via http://d.hatena.ne.jp/ikad/20110610/1307693546
大変参考にさせていただきました。ありがとうございます。

***
##2014/3/29 追記
Rails 4.0.2でも同様に行けましたので、追記しておきます。

1. binディレクトリの中に、rails_httpsというファイルを作ります。
2. 上記の```script/sslrails```の内容をrails_httpsに書き込みます
3. ```bin/rails_https s```で起動します
4. https://localhostにアクセスします。

###こんなエラーが出たら

```bash:bash
bin/rails_https: Permission denied
```
以下のコマンドで権限を変更しましょう。

```bash:bash
chmod 755 bin/rails_https
```

###こんなエラーが出たら2

```bash:bash
/Users/user_name/.rbenv/versions/2.1.0-rc1/lib/ruby/2.1.0/socket.rb:206:in `bind': Permission denied - bind(2) for 0.0.0.0:443 (Errno::EACCES)
```

なにやらポートが芳しくないので、```rails_https```を修正しましょう。

```bash:bash
      super.merge({
          :Port => 8282, # ここを8000番以上に変更
```

以上です。
OSM Trackerのカスタマイズ


OpenStreetMapは現地調査がキモです。
で、そのためのツールの一つとして、OSMTrackerというAndroidアプリがあります。

これは、自分が移動した経路をGPX形式で記録し、なおかつそこにポイントデータとしてテキストや写真、音声でメモを残すことができる、っていうソフトウェアです。

で、なんか最近これ、OSMに限らず、学術系のフィールド調査記録アプリとして使えるんじゃねーの？っていう気がしてきました。
携帯やタブレットのGPS精度を使うので精度はアレですが、そこはどうにでも補正できる範囲ですし。

あと、携帯電話だとイマイチ電池の持ちが悪いですけど、バッテリーを6つくらい持ち歩けば、山間部調査でも2日くらいは保ちます。
どこまで実用できるかなー、ってのは、とても気になります。


このアプリのいいところはその柔軟さで、
* よく使う文字列やタグを事前にボタンで登録しておけるところ
* 写真や音声、フリーテキストでも残しておけるところ
あたりにあります。
ボタン配置のカスタマイズは単にXMLのファイルを一つ書くだけなので、そんなに難しいことではなく。


いまのところ背景地図がOSM固定なんだけど、ちょっとハックすればOpenlayerの地図(基盤地図情報とか)を読み込むこともできるんじゃないかなぁ、とか思ってみたり。
TypeScriptのコンパイルを自動化する

```sh
tsc -w file1.ts file2.ts #...
```

tscにはファイルをウォッチして自動的にコンパイルするオプションがあるようです。
-wでプロセスを立ち上げておくと、ウォッチ対象のファイルが上書きされたタイミングで自動的にコンパイルします。

tscは毎度立ち上げると少し遅いので、活用すると面白そう。
GitHub Pagesの内容を JSDuckを使って出力


## GitHub と JSDuck

JSDuckでドキュメントを出力するようなプロジェクトがあって、プロジェクトの中で、JSDuckを使って自動的にドキュメントを生成します。そこで出力されたドキュメントをGitHub Pagesで見られるようにする時の設定方法です。

今回は 

someProject
  |-- project
  |-- out
  |-- public_html

という構成で考えます。プロジェクトに変更があったら、次の処理をします。

+ outの下にJSDuckがコンテンツを吐き出します。
+ そして、outの内容をGitHub Pages用のpublic_htmlにコピーします。

これらの処理は、Makefileに書いて処理させています。直接、GitHub Pages用のディレクトリにJSDuckで出力しないのは、JSDuckではディレクトリを消してから出力するようで、.gitも一緒に消えちゃうからです。

outフォルダーは、.gitignoreの中で、対象外に指定しておきましょう。

## GitHub Pages を作成

公式ページの[Creating Project Pages manually](https://help.github.com/articles/creating-project-pages-manually)に載っている手順で、ダミーのPagesを作ります。

    git checkout --orphan gh-pages
    git rm -rf .
    echo "pages" > index.html
    git add .
    git commit -a -m "First pages commit"
    push origin gh-pages

これで、

    http://<username>.github.com/<reponame>/

でページが表示されるようになります。

## gh-pagesブランチをサブモジュールにする

master ブランチに戻り、gh-pagesブランチをsubmouleで追加します。

    git submodule add -b gh-pages git@github.com:<username>/<reponame>.git public_html

サブモジュールの初期化をします。

    git submodlude init
    git submodlule update

これで、someProjectの下にpublic_htmlディレクトリができて、その内容は、先ほど作った、GitHub Pagesのダミーindex.htmlがある状態になります。

## コンテンツの作成

ここで、JSDuckを実行します。そして、その内容をpublic_htmlにコピーします。

    all:
        jsduck \
            --title "タイトル" \
            --guides ./guide.json \
            --output ./out/;
        cp -Rf out/* public_html;
    .PHONY: all

とあるプロジェクトのMakefileです。実行すると public_html にドキュメントができあがります。someProject ディレクトリで commit - push するのと同時にpublic_html ディレクトリで commit - push すると、GitHub Pages のページが更新されます。
Play framework 2のインストール


## 1. Play frameworkとは?
Play framework(以降はPlay)はフランスのZenexityが開発したScalaとJava向けのWebフレームワーク。
"型安全で高速なRails"という感覚のフレームワークらしい。
(もちろん、上記は誤解を含んでいるかもしれないが、誤解を恐れずにいうなれば、"型安全で高速なRails")

## 2. 環境構築
なにはともあれ、環境つくって遊んでみる。

MacであればHomebrewを使って`brew install play`でもインストール可能だが、今回は[Play!Japanのインストール手順](http://www.playframework-ja.org/documentation/2.0.3/Installing)を参考に環境を構築。

前提として、JDK 6以降が必要なのでインストールされていない場合はしておく。

[Play!Japan](http://www.playframework-ja.org/)から、最新バージョン(2012.11.04時点で2.0.4)のzipをダウンロードする。


ダウンロードしてきたzipを展開する。展開先は、書き込み権限のあるディレクトリなら、どこでもよいと思う。
(どこでもよいといっても、常識的なところに。ドキュメントでは/opt以下には展開しないほうがよいと書いてある。/opt以下は書き込み権限ないよって警告でるからかな。)
今回は、/usr/local/にplayを展開する。
(もちろんホームディレクトリの下でもよいと思う。)

展開したら、展開先のディレクトリにパスを通しておく。
今回は/usr/local以下に展開したので、.zsh_profileに以下を追加。

```.zsh_profile
export PATH = $PATH:/usr/local/play-2.0.4
```

書き込んだら、.zsh_profileを再読み込み。

```
source ~/.zsh_profile
```

`play help`でインストールできたか確認。下のような表示がでればOK!。

```
       _            _ 
 _ __ | | __ _ _  _| |
| '_ \| |/ _' | || |_|
|  __/|_|\____|\__ (_)
|_|            |__/ 
             
play! 2.0.4, http://www.playframework.org

Welcome to Play 2.0!

These commands are available:
-----------------------------
license            Display licensing informations.
new [directory]    Create a new Play application in the specified directory.

You can also browse the complete documentation at http://www.playframework.org.

```
Mac上で、自分のサイトがiPhoneでどう見えるかを確認する


XCodeをインストール。

後は、シェルで

```bash:Terminal
$ open /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone\ Simulator.app/
```

と叩くだけ。iPhoneSimulatorが起動する。

Safariを開いて、`localhost:3000`などと適当に挙動を確認したいURLを入れる。

iPhoneシミュレーターはあくまでシミュレーターでたまに実際と挙動が異なることがあるので注意。ただ、localhostにアクセスできるし、簡単に確認したい時には役立つはず！
ウィンドウの大きさを制御する


`bounds of window idx of application "APPLICATION NAME"`の値を参照することで、アプリケーションの持つウィンドウのうち、前からidx番目の大きさと位置(rectangle)を取得する事ができ、また上書きすることでウィンドウのサイズを制御することができる。idxを指定しない場合は全てのウィンドウのサイズのリストが返ってくるので、纏めて変更したい場合はこちらを使うと便利かもしれない。

以下に例として、前からidx番目にあるGoogle Chromeの幅をscale倍するsetScale関数を示す(ここでは最前面のウィンドウ幅を3倍に引き伸ばしている)。

```
on getCurrentSize(idx)	bounds of the window idx of application "Google Chrome"end getCurrentSizeon setScale(idx, scale)	set curSize to getCurrentSize(idx)	set (item 3 of curSize) to (item 3 of curSize) * scale as integer	set bounds of window idx of application "Google Chrome" to curSizeend setScalesetScale(1, 3)
```
mac初心者のメモ

随時更新。
わからなかった事を素直に適当にメモしていく予定。
本当に書きなぐりのメモです。ごめんなさい。

技術者視点でなく、本気で初心者視点



#環境
*mac mini 2011
*マウス
    その辺に転がっていたUSBマウス
*キーボード
ポケモンタイピングの


テキストファイルを作成するには？
Finderからは新規フォルダしかない。
標準ではないっぽい。
Kobitoでのファイル連携に支障があるので、とりあえず、Windowsでファイル作成。Dropboxに突っ込む。






##文字入力
コントロールマーク(コントロールキー)が変換で出ない。
ひらがな入力で英字を入れた場合の動作
例えば、「Windows」とか。
「ウィんどws」<-を「Windows」にしたい。

ぃはliではなくxi


##ゴミ箱
SDカードとかのデータもゴミ箱に入って、実際の空き領域は増えない…
属性の引数にdecimalを使用できない仕様に絶望した

CS0182 の「属性引数は、定数式、typeof 式、または属性パラメータ型の配列の作成式でなければなりません。」のエラーになる。

http://msdn.microsoft.com/ja-jp/library/09ze6t76(VS.90).aspx



(古い情報のサルベージ中)
ComboBoxでOutOfMemoryException

System.OutOfMemoryException はハンドルされませんでした。
Message="コンボ ボックスの項目が多すぎます。"
えっと、意味がわかりません。

```
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.comboBox1.Items.Add(new ErrorItem());
        }

        private class ErrorItem
        {
            public override string ToString()
            {
                return null;
            }
        }

    }
}
```

ToString()でnullを返すオブジェクトを突っ込むとこんなエラーになるっぽい。


(古い情報のサルベージ中)
DataSet(DataTable)でメモリリーク


```
DataTable dt = new DataTable();
DataRow dr = dt.NewRow();
dr = null;
```

NewRowでの作成と放棄を繰り返すとメモリリークとなります。

「メモリリークとは言いません」とか、「仕様です」とかはなしで。

DataTableを汎用のお手軽なデータ構造として使用しようとすると後々困った事に…  
スレッドセーフにするにもDataTable単位でロックが必要とか。


(古い情報のサルベージ中)
gitのsubmoduleに変更を加えるとdiffが生じるのを無視する

gitのsubmoduleに変更が加わると、diffが生じてしまいますが、commitできなくて
気持ち悪いです

```
diff --git a/bootstrap b/bootstrap
--- a/bootstrap
+++ b/bootstrap
@@ -1 +1 @@
-Subproject commit 3b3dd3ac3c7b69d02406ede69bffcc4ee8a1ed6b
+Subproject commit 3b3dd3ac3c7b69d02406ede69bffcc4ee8a1ed6b-dirty
```

これを無視するには、```$project/.gitmodules```のファイルに、```ignore = dirty```を追加します

```
[submodule "bootstrap"]
	path = bootstrap
	url = git://github.com/twitter/bootstrap.git
	ignore = dirty
```

これでdiffが出なくなって精神衛生的に良くなります。
GitHub内URLのURL短縮サービスgit.ioの使い方


```
$ curl -i http://git.io -F "url=http://github.com/wantedly" -F "code=wantedly"
```

で以下の様な短縮URLが作られる。

http://git.io/wantedly

codeパラメタを指定しなかったり、http://git.io でブラウザから作った場合は短縮名は適当な値になる。

参照: https://github.com/blog/985-git-io-github-url-shortener
GitHub Flavored Markdownで使える絵文字一覧


Pull requestやIssueで使える絵文字のリスト
http://www.emoji-cheat-sheet.com/

最近autocompleteされるようになりました(rubyのsymbolをコメントに書こうとしてautocompleteになるのがちょっとうざいけど。。。)
https://github.com/blog/1289-emoji-autocomplete

:+1: は使いやすいですね。

Qiita Flavored Markdownでもサポートしてほしい！
nilチェックの分岐をせずに文字列表示


Objective-Cではnilに何を送ってもnilなのでnilチェックが不要ですが、Rubyはそうではないので文字列を表示する場合以下のような分岐が必要になってきます。

```Ruby:
item.nil? '' ? item.created_at.strftime("%Y/%m/%d %H:%M")
```

こんなの毎回書いてたらうざいなー。いちいちモデルに表示用のメソッド定義するのもめんどいなー。

そんな時のためにRailsにはtryメソッドが定義されていました。

```Ruby:
item.created_at.try(:strftime, "%Y/%m/%d %H:%M")
```

よかった。
AndroidのWebViewの持つコンテンツデータの保存・読み込み

Android WebView
http://developer.android.com/reference/android/webkit/WebView.html

### WebViewの表示データを保存
WebArchiveという、1ファイル形式に保存される。

```
mWebView.saveWebArchive(fileName);
```

http://developer.android.com/reference/android/webkit/WebView.html#saveWebArchive%28java.lang.String%29

### 保存したWebArchiveをWebViewに展開


WebArchiveの中身を文字列で第一引数に渡す。

```
mWebView.loadData(buf.toString(), "application/x-webarchive-xml", "utf-8");
```

http://developer.android.com/reference/android/webkit/WebView.html#loadData%28java.lang.String,%20java.lang.String,%20java.lang.String%29
単語単位でカーソルを移動したりする

おそらく標準ではEmacs系のキーバインドになっているので、だいたいEmacsと同じような操作ができることに昨日気づいた。が、zshだけ微妙に挙動が違う。


```
M-f カーソル位置の単語の末尾に移動(zshは次の単語の先頭に移動)
M-p 前の単語の先頭に移動
M-<BS> この単語のカーソルより前の部分を削除
M-d この単語のカーソルより後ろの部分を削除
M-t カーソル位置の単語を前の単語と交換
```

などなど。システムによってはM-カーソルキーも使える。
C++入門的な内容リンク

昔の情報を探す必要がでてきたので、調べたら懐かしいものが出てきました。今もコンテンツを維持してくれている事に感謝しつつリンクを残します。

http://www.asahi-net.or.jp/~yf8k-kbys/newcpp0.html
「C++再考」を訳したり等もされている小林健一郎氏の入門用コンテンツ。

http://www7b.biglobe.ne.jp/~robe/cpphtml/
ロベールさんの入門用コンテンツ。昔（今も？）C++界隈では有名コンテンツでした。

蛇の足
C++って「やった理解した！」って思ってもその先がまだある言語で「なっ、テンプレートだと？」「特殊化？なにそれおいしいの？」「ポリシーって何だよ。」と、一粒で沢山楽しめます。ごちゃ混ぜ言語で嫌う人もいるけれど、互換性を必死で維持しながら機能を拡充してゆく姿勢には脱帽です。テンプレートに嵌るとコンパイル時間のかかることかかること。今だと一瞬なのかも知れませんけれど。

自分のプログラマーとしての基礎がここから作られているので、愛着も強いですね。最近の開発では利用していないので少し寂しくもあります。

蛇の足が長過ぎた。ま、いっか。
【メモ】switch文内での変数の宣言によるエラー【C++】

DxLibでSTGを作っているのですが先日エラーに遭遇したのでこちらに記しておきます。

```c++
#include <stdio.h>
int main(){
	static int i = 0;

	switch(i){
	case 0:
		static int k = 0;
		printf("%d",&k);
		break;
	case 1:
		break;
	}
}
```

このように記述すると、

'k' の初期化が 'case' ラベルによって行われませんでした。
'k' の宣言を確認してください。

このようなエラーが返されます。
解決法としては **Case:{宣言と処理}** という風にブロックで囲めば解決します。

このエラーは変数 **k** のスコープが **case** 文内ではなく、 **switch** 文内になっていることが原因です。もし **case 1:** に飛び、そこで **k** を使用した処理がされていた場合、初期化されてないことなるのでコンパイラが自動的にエラーを返します。もしエラーを無視して実行してもこのコードであれば動くはずです。間違いがあれば指摘してください。
Emacsで、node.jsのrequire()にカーソルがあるとき、定義元へ飛ぶ (ffap)

node.jsには、require.resolve という、ライブラリのパスを返す関数があるので、
Emacsから使うと便利。

Emacsに標準で入っているffap.el は、カーソル位置の文字からファイルを探して開くためのAPIを提供していて、簡単に設定できる。

```cl
(defun ffap-nodejs (name)
  (shell-command-to-string
   (format "node -e 'try { require(\"util\").print(require.resolve(\"%s\")) } catch(e) {}'"
           name)))

(add-to-list 'ffap-alist '(js3-mode . ffap-nodejs))
```
Debug.Trace


初学者に対して最初に教えるべきモジュールじゃなかろうか。(と言いつつ未だにまともにつかったことない)

```haskell:
% runghc
import Debug.Trace

add :: Int -> Int -> Int
add n m = (n, m) `traceShow` if n == 0
                             then m
                             else 1 + add (n - 1) m

main :: IO ()
main = do
  let str = show $ 3 `add` 2
  print $ if str == "5" then "true" else "false"

【実行結果】
(3,2)
(2,2)
(1,2)
(0,2)
"true"
```
Control.Monad.IO.Class


ポイントとなるのはprintCasualの型。IO処理の癖にIOモナドじゃなくてモナドmのクライスリ射なので、MonadIOという制限はついてるものの、なかなかカジュアルに使えて良い。

```haskell:
% runghc
import Control.Monad.IO.Class

printCasual :: (Show a, MonadIO m) => a -> m ()
printCasual = liftIO . putStrLn . show

main :: IO ()
main = do
  printCasual "ahoge"

【実行結果】
"ahoge"
```
Autohotkeyによるマウスジェスチャ


```ahk:MouseGesture.ahk
```

CoordMode,Mouse
DetectHiddenWindows, On

F17::Gosub,B4
return

B4:
;ジェスチャ用のガイドを表示
MouseGetPos,X1,Y1,W1
mx1:= X1 -100
my1:= Y1 -100
SplashImage,R:\G.png,B X%mx1% Y%my1% W200 ZH200 ZW200 CW00FF00 Hide,,
;縦横200pxでバツの字の画像を想定。背景色00FF00。
WinSet,TransColor,00ff00,%A_ScriptName%
SplashImage,show
SetTimer,STATE4,16
return


STATE4:
;ボタン押し上げを検知
WinActivate,ahk_id %W1%
;マウス直下にイベントを送る方が好き
GetKeyState,S4,F17
If(S4="U"){
MouseGetPos,X2,Y2
SetTimer,STATE4,Off
Gosub,FC4
}
return


FC4:
;マウス位置検知及び機能実行
SplashImage,off
X0:= X2-X1
Y0:= Y2-Y1
XR:= X0 **2
YR:= Y0 **2
R := XR+YR
MouseMove,X1,Y1,0
;半径30px以内で放したならば
If(R < 900){
	Send,{MButton}
}
;上下左右方向に対する機能分岐
Else,{
If(XR > YR){
	If(X0 < 0){
		Send,^v
		;右
	}
	If(X0 > 0){
		Send,^c
		;左
	}
}
If(YR > XR){
If(Y0 < 0){
		Send,{Esc}
		;上
	}
If(Y0 >0){
		Send,{Enter}
		;下
	}
}
}
return
TableViewが呼び出すメソッドの順序とデータ表示・更新方法


FacebookからFQLを使って取得したデータをTableViewに表示させる方法・その時に呼び出されるメソッドの順序そしてTableVIewの更新方法

``` TableViewが呼び呼び出すメソッドの順序
[ListViewController numberOfSectionsInTableView:]
[ListViewController tableView:titleForHeaderInSection:]
[ListViewController tableView:titleForHeaderInSection:]
[ListViewController tableView:numberOfRowsInSection:]
[ListViewController tableView:cellForRowAtIndexPath:]
[ListViewController tableView:cellForRowAtIndexPath:]
[ListViewController tableView:cellForRowAtIndexPath:]
[ListViewController tableView:cellForRowAtIndexPath:]
[ListViewController tableView:cellForRowAtIndexPath:]
[ListViewController tableView:cellForRowAtIndexPath:]
[ListViewController tableView:cellForRowAtIndexPath:]
[ListViewController tableView:titleForHeaderInSection:]
```

* numberOfSectionIntableView : セクション数を返す
* titleForHeaderInSection : セクション毎のヘッダーを返す
* numberOfRowsInsection : セクション内にあるデータ数(行数)を返す
* cellForRowAtIndexPath : セル毎のオブジェクトを返す。取得したデータの表示はここで行なっている。

Facebookからデータを取得 -> TableViewに表示、というロジックなのでデータ取得後に**reload**メソッドを呼び出してTableViewを更新している。以下はその時のサンプル。

``` Objectivec:TableViewの更新方法
[FBRequestConnection
	startWithGraphPath:@"/fql"
	parameters:queryParam
	HTTPMethod:@"GET"
	completionHandler:^(
		FBRequestConnection* connection,
		id result,
		NSError* error) {
			self.data = (NSArray *)[result objectForKey:@"data"];
			[self.tableView reloadData];
}];
```

参考にしたページ : [Table View入門 #1](http://dev.classmethod.jp/smartphone/iphone/ios-table-view-1/ "Table View入門 #1")
Control.Monad.Error.Class


初めてまともに使った。エラー抽象化できるのは気分が良い。

```haskell:
% runghc
{-# LANGUAGE ScopedTypeVariables #-}
import Control.Monad.Error.Class

safeHead :: (Error e, MonadError e m) => [a] -> m a
safeHead (x:_) = return x
safeHead [] = throwError $ strMsg "NG"

main :: IO ()
main = let try = do
             (n :: Int) <- safeHead [3 ..]
             putStrLn $ show n
             (m :: Int) <- safeHead []
             putStrLn $ show m
             return ()
       in try `catchError` (\e -> print e)

【実行結果】
3
user error (NG)
```
Mac OS X のコマンドラインでディスク一覧を表示

sudo fdisk -l を発行してみたが，`fdisk: illegal option -- l` と言われて使えなかったので調べた．

>
% diskutil list
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *320.1 GB   disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:          Apple_CoreStorage                         277.1 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                  Apple_HFS Macintosh HD           *276.8 GB   disk1
/dev/disk2
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                                                   *80.0 GB    disk2
/dev/disk3
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     Apple_partition_scheme                        *554.2 GB   disk3
   1:        Apple_partition_map                         32.3 KB    disk3s1
   2:                  Apple_HFS mk                      554.2 GB   disk3s2
ST2プラグイン、SortTabsが便利です。


[@ohataken](https://twitter.com/ohataken)と申します。しばらく前までエディタ選びにあれこれ文句つけた末、Emacsを使っていましたが、最近Sublime Text 2に引きこまれてます。あ、Emacs様は悪くないです。

でもEmacsの(正確にはhelmというelispの)「バッファーを最後に開いた順に並べる」という機能(?)が便利だったので、それがST2にも欲しかった。なので探しました。

[bizoo/SortTabs](https://github.com/bizoo/SortTabs "bizoo/SortTabs")

readme.mdを見ながらほげほげすれば動きます。

私がほしい機能は、「最後に開いた順にタブをsortする」というものなので、

Preferences->Package Settings->SortTabs->Settings - Default

を見ながら、

```
{
	// Automatically sort tabs when loading or saving a file.
	"sort_on_load_save" : true,
	// Command to use for automatic sort.
	// If not specified, it use the last used sorting command
	// Available defaults command are:
	// 	sort_tabs_by_name
	// 	sort_tabs_by_file_path
	// 	sort_tabs_by_type
	// 	sort_tabs_by_date
	// 	sort_tabs_by_last_activation
	"sort_on_load_save_command" : "sort_tabs_by_last_activation"
}
```

って感じにしました。

## 課題
これ、トリガーが、「保存した後」なんだけど、できればタブ切り替えした後にもやりたいなぁ、と思ってます。
IPアドレスが変化してもセッションが切れない様にする

Protectorモジュールの一般設定において設定される「セッションを継続する保護ビット」はデフォルト設定値24bitで、192.1680.0 - 255 の範囲で継続してセッションを貼る事を許可しています。

これは、地下鉄等で移動しながらWi-Fi等で接続している場合すぐ違法なセッションとして忌避されてセッションを捨ててしまいます。

この様な場合にはここの値を０にすると継続してログイン状態が保持されます。

ソースは以下の通り。

```xoops_trust_path/modules/protector/include/postcheck_functions.php
	// check session hi-jacking
	$ips = explode( '.' ,  @$_SESSION['protector_last_ip'] ) ;
	$protector_last_numip = @$ips[0] * 0x1000000 + @$ips[1] * 0x10000 + @$ips[2] * 0x100 + @$ips[3] ;
	$ips = explode( '.' ,  $_SERVER['REMOTE_ADDR'] ) ;
	$remote_numip = @$ips[0] * 0x1000000 + @$ips[1] * 0x10000 + @$ips[2] * 0x100 + @$ips[3] ;
	$shift = 32 - @$conf['session_fixed_topbit'] ;
	if( $shift < 32 && $shift >= 0 && ! empty( $_SESSION['protector_last_ip'] ) && $protector_last_numip >> $shift != $remote_numip >> $shift ) {
		if( is_object( $xoopsUser ) && count( array_intersect( $xoopsUser->getGroups() , unserialize( $conf['groups_denyipmove'] ) ) ) ) {
			$protector->purge( true ) ;
		}
	}
	$_SESSION['protector_last_ip'] = $_SERVER['REMOTE_ADDR'] ;
```
do 記法で整数リスト生成

```haskell:num.hs
data MyList a r = ML {list::[a], result ::r}

instance Integral a => Monad (MyList a) where
    return r = ML [] r
    ML l r >>= f = let res = f r in ML (l ++ list res) (result res)

instance (Integral a, Integral b) => Num (MyList a b) where
    fromInteger a = ML ([fromIntegral a]) (fromIntegral a)

main = print . list $ do
    1   
    2   
    3   
    4   
    5   
```

できるかな、と思って試行錯誤でやってみた。型クラスがまだよくわかってない。
xdotoolでシェルからブラウザをリロードするワンライナー


`sudo aptitude install xdotool` でインストールする

```bash
xdotool windowfocus `xdotool search --onlyvisible --name opera`; xdotool key ctrl+r; xdotool windowfocus `xdotool search --onlyvisible --class gnome-terminal`;
```

などとするとOperaにctrl+rが送信されてリロードされる。

- windowactivateは指定したウィンドウを最前面にする
- windowfocusは指定したウィンドウにフォーカスだけされるので、背面でリロードしたいときはこちらを使う
  - フォーカスされたままだとキー入力がOperaに行ってしまうので端末に戻す必要がある


vimでシェルコマンド送信する機能使ってこのワンライナーを送るようにするとかどうだろうか

```
:autocmd! BufWriteCmd * r!xdotool windowfocus `xdotool search --onlyvisible --maxdepth 3 --name opera`; xdotool key ctrl+r; xdotool windowfocus `xdotool search --onlyvisibl
e --maxdepth 3 --class gnome-terminal|tail -1`
```

できたけどなんか動きが遅い。。
どうやらxdotool searchが --maxdepth を指定しないとすごく重くなる模様。 --maxdepth 3でも妙に重い。
なるべくsearchしたくない

最初に現在のwindowをgetactivewindowで保存しておいて一度だけブラウザをsearchするようなシェルスクリプトにしたほうがよさそうだ。