OmniAICreator/Qiita-1.07M huggingface dataset:
facebook用ユーザスタイルシートでウザイ項目を消し去る


ChromeではStylistという拡張機能で特定サイトに適用するユーザスタイルシートを設定できます。

下記は私のfacebook用CSS

```css
/* コメント投稿欄に自分のプロフ写真が表示されてるのを非表示に */
div.UFIMentionsInputWrap img.UFIActorImage{
	display:none;
}
/* 右カラムの「友人かも」や「広告」を非表示 */
div.ego_column{
	display:none;
}
```
homebrewでインストールしたredisを自動起動

homebrewでインストールしたらlaunchctl（macで自動起動を司るなにか）の設定ファイルがついてくるので、それを使うだけ。バージョン部分は適宜変更すること。

```
$ cp /usr/local/Cellar/redis/2.4.8/homebrew.mxcl.redis.plist ~/Library/LaunchAgents/
$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
$ launchctl start homebrew.mxcl.redis
```

## homebrew.mxcl.redis.plistの中身

```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>KeepAlive</key>
    <true/>
    <key>Label</key>
    <string>homebrew.mxcl.redis</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/bin/redis-server</string>
      <string>/usr/local/etc/redis.conf</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>UserName</key>
    <string>marqs</string>
    <key>WorkingDirectory</key>
    <string>/usr/local/var</string>
    <key>StandardErrorPath</key>
    <string>/usr/local/var/log/redis.log</string>
    <key>StandardOutPath</key>
    <string>/usr/local/var/log/redis.log</string>
  </dict>
</plist>
```
**参考リンク
http://www.maruko2.com/mw/LaunchDaemons_(launchctl,_launchd.plist)_%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9
https://github.com/mxcl/homebrew/pull/10913
Ember.js カスタムヘルパの作り方

> 12/20追記
> [20日の記事](http://qiita.com/items/9fdc307f350ef8a46938)で、データバインディング機能付きのカスタムヘルパの作り方を説明しています。こちらもご参照ください

Ember.jsのViewヘルパを自作することができます。
例えばこういうやつです。

```html
{{highlight name}}
```

カスタムヘルパは以下のように実装します。

```js
Handlebars.registerHelper('highlight', function(property, options) {
  var value = Ember.Handlebars.get(this, property, options);
  return new Handlebars.SafeString('<span class="highlight">'+value+'</span>');
});
```

このカスタムヘルパは以下のようなHTMLに展開されます。

```html
<span class="highlight">Peter</span>
```
strftimeで月を表示する際に、0による左詰めパディングを回避する方法


##通常
```ruby
Time.mktime(2012, 1, 1).strftime('%m') # => '01'
```

##_をつけた場合
頭に(_)を付けて%mを呼び出すと0の代わりに半角スペースが補完される。

```ruby:
Time.mktime(2012, 1, 1).strftime('%_m') # => ' 1'
```

##-をつけた場合

頭に(-)を付けて%mを呼び出すと0なしで出力される。

```ruby:
Time.mktime(2012, 1, 1).strftime('%-m') # => '1'
```
XOOPSのカスタムブロックを作ってみよう！！

=====

お
金
欲
し
い

さて、皆さん。 今日がなんの日か知ってますでしょうか？ そう、[マネーデー](http://ja.wikipedia.org/wiki/%E3%83%90%E3%83%AC%E3%83%B3%E3%82%BF%E3%82%A4%E3%83%B3%E3%83%87%E3%83%BC#.E5.A4.A7.E9.9F.93.E6.B0.91.E5.9B.BD)ですね！

そういうわけでマネーデーらしくカスタムブロックを作ってみました。

## どんなカスタムブロック?

マネーデー + Webサイトで思い付くものといったら、やっぱりAmazonギフトカードですよね。
貰ってうれしいAmazonギフトカード。しかも簡単に人にプレゼントできる。となったらこれで何か作るしかないですよね。
そんなわけで、サイト管理者にAmazonギフトカードをちょこっとだけ簡単に贈れるようになるカスタムブロックを作ってみました。

## カスタムブロック用のプログラムを書く

XOOPSの管理画面から直接ブロックを作成するのは、皆が大好きなVimも使えないし、ちょっとテストしたい時とかに面倒なので、1つフォルダを作ってそこにブロックのプログラムを書いていきます。

まず、作業する為のフォルダとして、XOOPS_ROOT_PATHにblocksというフォルダを作ります。
![フォルダ作成](http://kura1.photozou.jp/pub/212/2933212/photo/163333076.png "フォルダ作成")

blocksフォルダを作ったら、その中にadvent_day14.phpという名前でファイルを作って、以下のコードをコピペ。

```php:advent_day14.php
<?php

if ( !defined('XOOPS_ROOT_PATH') ) require dirname(dirname(__FILE__)).'/mainfile.php'; // おまじない

$amazon_url = "https://www.amazon.co.jp/gp/gc/order/ref=gc_dp_conv_order?ie=UTF8&casin=BT00DHI8GO&design=a_amazon_09&type=Email";

global $xoopsConfig;
$adminmail = $xoopsConfig['adminmail'];

?>

<a href="<?php echo $amazon_url ?>" onclick="contribute();">管理者にカンパする！</a>

<script type="text/javascript">
function contribute() {
  // IEの場合直接コピーさせる
  if (window.clipboardData && window.clipboardData.setData("Text", "<?php echo $adminmail ?>")) {
    return;
  }

  window.prompt("下のメールアドレスをコピーしてからOKを押して下さい", "<?php echo $adminmail ?>");
}
</script>
```

コピペして保存できたら、実際にちゃんと動いているか確認しましょう。
以下のように、自分のXOOPSサイトのURLに、`/blocks/advent_day14.php`でアクセスして画像と同じようなものが表示されていればOK！
![動作チェック](http://kura1.photozou.jp/pub/212/2933212/photo/163333084.png "動作チェック")

## カスタムブロックの作成

ここまでできたらもう終わったも同然ですね。後は実際にXOOPSでカスタムブロックを追加して、さっき書いた`advent_day14.php`を表示させるだけ。

XOOPSの管理画面からカスタムブロックの追加にいって、画像のように設定してあげましょう。
![カスタムブロック作成](http://kura1.photozou.jp/pub/212/2933212/photo/163333067.png "カスタムブロック作成")

まあ、自分で自分にかんぱとか必要ないので、確認が終わったらサイト管理者の権限は外しちゃっても良いかもしれませんね。
ちなみに、画像内のコードはこんな感じ。

```
$file = 'advent_day14.php'; // 作ったファイル名

// 以下おまじない

$path = XOOPS_ROOT_PATH . '/blocks/' . $file; // ファイルの場所を指定

if ( file_exists($path) ) require $path; // ファイルが存在すれば読み込む
```

## デモ
[ここのサイト](http://cuqumt5-ao6-app000.c4sa.net/)でアドベントカレンダーの期間中は動作確認できます。ギフトカードプレゼントする所までやってみても良いんですよ。

## 最後に

ちなみに、このブロックの開発手法はXOOPS界で超有名らしい[@suin](http://qiita.com/users/suin)さんの「[PHPカスタムブロックの超！賢い作り方 - 株式会社RYUS](http://ryus.co.jp/modules/d3blog/details.php?bid=324)」を参考にしながら作成しました。
「ActiveRecordをutf8mb4で動かす」をsqlite3併用環境でも動かす

[ActiveRecordをutf8mb4で動かす ](http://qiita.com/items/101aaf8159cf1470d823)
のinitializerが、開発環境とかでsqlite3みたいにMySQL以外のDBエンジンを併用している場合に上書き先のメソッドが未定義で死ぬので、NameError だけとっ捕まえるようにした。

ちなみに、SQLite3以外では未確認。問題無いとは思うけど。

```ruby:config/initializers/ar_innodb_row_format.rb
ActiveSupport.on_load :active_record do
  begin
    module ActiveRecord::ConnectionAdapters

      class AbstractMysqlAdapter < AbstractAdapter
        def create_table_with_innodb_row_format(table_name, options = {})
          table_options = options.reverse_merge(:options => 'ENGINE=InnoDB ROW_FORMAT=DYNAMIC')
          create_table_without_innodb_row_format(table_name, table_options) do |td|
            yield td if block_given?
          end
        end
        alias_method_chain :create_table, :innodb_row_format
      end

    end
  rescue NameError => ex
    # MySQLが使われていないので無視
  end
end

```
precmdを明示的に呼ぶ方法

zshで``precmd``や``preexec``、``chpwd``などを定義する場合、``precmd(){…}``のようにそのまま関数を定義する方法と、``add-zsh-hook``を使ってフックする関数を登録する方法があります。

前者の方法のみであれば、普通に``precmd``関数を呼べば良いが、後者の方法を使用してる場合はどうするかという話。

``add-zsh-hook``で登録した関数は、``precmd``であれば``precmd_functions``変数に配列として登録されています。
よってこの配列を使用して以下のように関数を呼び出します。

```sh
for precmd_func in $precmd_functions; do
    $precmd_func
done
```

また、``precmd``以外では、以下のような変数に対応しています。

- ``preexec`` : ``preexec_functions``
- ``chpwd`` : ``chpwd_functions``

##どういうときに使用するか
例えば、``^``キーで親ディレクトリに移動するという設定を行なっている場合。

```sh
cdup() {
    if [ -z "$BUFFER" ]; then
        echo
        cd ..
        zle reset-prompt
    else
        zle self-insert '^'
    fi
}
zle -N cdup
bindkey '\^' cdup
```

このとき、関数内で``cd``を実行しても``precmd``が呼ばれません。
そのため、プロンプトの更新やターミナルタイトルの変更を``precmd``内で行なっている場合、状態変更が反映されません。

そこで以下のようにして``precmd``を明示的に呼び出します。

```sh
cdup() {
    if [ -z "$BUFFER" ]; then
        echo
        cd ..
        if type precmd > /dev/null 2>&1; then
            precmd
        fi
        local precmd_func
        for precmd_func in $precmd_functions; do
            $precmd_func
        done
        zle reset-prompt
    else
        zle self-insert '^'
    fi
}
zle -N cdup
bindkey '\^' cdup
```
Backbone.js 0.9.9 のChangelogを適当に日本語訳してみた

貧弱な英語力での切ない日本語訳なので、
間違っているところがあれば教えてください＞＜

原文：http://backbonejs.org/#changelog

* Events に listenTo と stopListening が追加されました。これらは `on` や `off` に対して inversion-of-control 的に使うことができます。あるオブジェクトがlistenしているすべてのイベントをunbindするのに便利です。`view.remove()`は自動的に`view.stopListening()`をコールします。
* コレクションに対して`add`を使う際に`{merge: true}`を渡すことで、重複したモデルを無視する代わりに、既存のモデルに属性値をマージすることができるようになりました。
* モデルの集合を”賢く”アップデートできる`update`(`fetch`のオプションとしても利用できます)メソッドが追加されました。
* `save`をする際に`{patch: true}`を渡すことでHTTP PATCHがサポートされます。
* `Backbone`オブジェクトが`Event`を継承しています。よってグローバルなイベントバスとしてそれを使うこともできます。
* RouterのURLでオプション部分を正規表現を使わなくても括弧で表現できるようになりました。
* EventsがNodeの`once`やjQueryの`one`のような`once`をサポートしました。
* EventsがjQueryスタイルの`obj.on({click: action})`のようなイベントマップをサポートしました。
* resetイベントを監視している際に、`options.previousModels`で前回のモデルのリストにアクセスできるようになり便利になりました。
* “silent”な変更の際にもValidationが走るようになりました。これによって`isValid`メソッドがなくなりました。
* mixed-mode APIのために、`Backbone.sync`が`emulateHTTP`と`emulateJSON`をインラインオプションで受け付けるようになりました。
* `Collection`がUnderscoreのエイリアスのメソッド名をプロキシするようになりました(collect, inject, foldl, foldr, head, tail, takeなど)。
* `getByCid`がCollectionから無くなりました。`collection.get`が`id`と`cid`両方で検索するようになりました。
* `parse`関数が定義されていれば、Ajaxコールの後でなくても常に実行されるようになりました。
* Router定義の際の先頭と末尾のスラッシュの正規化におけるバグを修正しました。現在はそのスラッシュがあってもなくても挙動は変わりません。
* Viewを定義する際、実行時に値を決めたい場合、`options`, `el`, `tagName`は関数として定義されるようになりました。
* デフォルトの`$.ajax`のオーバーライドをもっと便利にするために`Backbone.ajax`が追加されました。AJAXは古すぎるという場合にはそれにサーバ通信する好きなメソッドを設定してください。
* `Collection#sort`が`reset`イベントの代わりに`sort`イベントを発行するようになりました。
* モデルで`destroy`を実行したときにそのモデルが`isNew`であった場合`false`が返るようになりました。
イテレータの汎用的なテストアサーション: assertIterable


`Iterator` インターフェイスを実装してクラスを作るときに、とりあえず `Iterator` のインターフェイスは満たしているかテストするためのAssertionです。PHPUnitで使います。

```php
<?php
    /**
     * Assert that the object is iterable
     * @param \Iterator $iterator
     */
    public function assertIterable(Iterator $iterator)
    {
        $result1 = array();
        $result2 = array();

        foreach ( $iterator as $key => $item ) {
            $result1[] = array('key' => $key, 'item' => $item);
        }

        foreach ( $iterator as $key => $item ) {
            $result2[] = array('key' => $key, 'item' => $item);
        }

        $this->assertTrue(count($result1) >= 2, 'Iterator must have more than 2 items');
        $this->assertSame($result1, $result2, 'Iteration should be free to side effect');
    }
```
Tcl/Tkで作ったGUIアプリの単体テストの方法

Tcl/Tkで作ったGUIアプリは単体テストしにくいですよね。特に画面の状態遷移があるような本格的なアプリケーションだと、必要な機能を呼び出すまでにいくつかの手順が必要になって泣きそうになります。

よく考えればGUIを組み立てなくても必要なオブジェクトさえあればテストできるので、フレームを表示させないでテストしてみたら効率が上がったので紹介します。

###やり方
1. テスト対象のオブジェクト(buttonやlabel)に必要なフレームのみを生成する。packやgridはしない。
2. テスト対象のオブジェクトを生成する。同じくpackやgridはしない。
3. テストを実行する
4. テスト用に作ったオブジェクトを destroy する。

###サンプルソース

```tcl:utest.tcl
#---------------------------------------------------------------------
# GUIアプリケーションのソース
proc gui { } {
    # フレームの定義
    frame .f
    frame .f.foo
    frame .f.baa
    frame .f.huga
    frame .f.huga.hum

    pack .f
    pack .f.foo .f.baa .f.huga .f.huga.hum

    # ボタンの定義
    button .f.foo.b -text "foo"
    pack .f.foo.b 
    button .f.baa.b -text "baa"
    pack .f.baa.b
    button .f.huga.hum.b -text "huga.hum"
    pack .f.huga.hum.b
}

# 全てのボタンのパスを取得
proc get_all_buttons { } {
    return ".f.foo.b .f.baa.b .f.huga.hum.b"
}

# テストされる手続き
# get_all_buttons が返すボタンを全て無効にする
proc disalbe_all_buttons { } {
    foreach b [get_all_buttons] {
	$b configure -state disable
    }
}

#----------------------------------------------------------------------
# テスト用のソース
# disalbe_all_buttonsのテスト
# 
set err 0
set log ""
proc test_disable_all_buttons { } { 
    global err log

    # ダミーで、ボタンとボタンに必要なフレームを作る
    foreach f {.f .f.foo .f.baa .f.huga .f.huga.hum} { 
        frame $f
    }

    # テスト用にボタンを作る。
    foreach b [get_all_buttons] {
        button $b -state normal
    }

    # テストされる手続きの呼び出し
    disalbe_all_buttons

    # 結果のチェック
    foreach b [get_all_buttons] {
        set state [$b cget -state]
        if { $state != "disabled" } {
            append log "Error $b is not disabled ($state)\n"
            incr err 1
        } else {
            append log "PASS $b\n"
        }
    }

    # 一番上のフレームを削除して、ボタンとフレームを全て削除する。
    destroy .f
}

# テストの実行
test_disable_all_buttons

# 結果の表示(通常はファイルに出す)
if { $err == 0} {
    tk_messageBox -type ok -title "test終了"  -message  "$log"
    exit 0
} else {
    tk_messageBox -type ok -title "test終了(エラー)"  -message  "$log" -icon error
    exit 1
}
```

これで、wish utest.tcl で単体テストが実行出来ます。このやり方で小分けにしてテストしたところ、今まで動いていたアプリも細かいバグをいくつか見つけました。もう一つwishとプロセス間通信をしながらテストするバッドノウハウがいくつかあるのですが、それはまた別の機会に。
UIScrollView: 現在のページ番号を計算

スクロール位置によってページ番号を計算する処理。
スクロールビューの中央を境にページ番号を増減するので、実際の見た目とページ番号の乖離も無いと思う。（round()で四捨五入しているのはそのため。）

縦方向の場合はX, widthをY, heightと読み替えれば良い。

```objc:ページ番号

// 横方向にページングする UIScrollView のページ番号を計算
- (NSUInteger)currentPageIndex:(UIScrollView*)scrollView
{
	CGFloat w = CGRectGetWidth(scrollView.frame);		// ページ幅
	NSInteger maxPageIndex = …;							// 最大ページ番号（count-1）
	CGFloat positionX = scrollView.contentOffset.x;		// 現在の表示座標x
	CGFloat paging = round(positionX / w); 				// 四捨五入して現在のページ番号を計算
	// (positionX / w) < x.5 のときは前のページ
	// (positionX / w) >= x.5 のときは次のページ
	
	
	// 範囲外のページ番号を調整
	paging = (paging >= 0.0) ? paging : 0.0;
	paging = (paging <= maxPageIndex) ? paging : maxPageIndex;
	
	
	return (NSUInteger)paging;
}

// UIScrollViewDelegate - スクロールの度呼ばれる
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
	NSUInteger currentPageIndex [self currentPageIndex:scrollView];
	self.pageControl.currentPage = currentPageIndex; // UIPageControl にそのまま使える
	NSLog(@"Page Index: %d", currentPageIndex);
}

```

```swift:Swift
let offset = scrollView.contentOffset
let pageWidth = ...
let paging = min(max(round(offset.x / pageWidth), 0.0), CGFloat(pageCount))
```
Google Apps ScriptのDirectionFinderを使う

# Google Apps ScriptでDirectionFinderを使う。

実は、書籍を執筆していて、現在校正作業中のステータスです。（多分、発売は新年あけてからになると思います。）
書籍の中でMapsサービスについても記述しています。

で、時間的リソースの関係でDirectionFinderについての記述ができないと思っていたのですが、
少しだけ書けてしまったので、書籍に書かれていない内容を紹介しようと思います。

## DirectionFinder？
DirectionFinderとは、Google Directions APIをラップしたもので
始点と終点を指定して、その間のルート情報を取得するものです。
Directions APIのドキュメント：https://developers.google.com/maps/documentation/directions/

### とりあえず、書籍のコードと同等のコード。

```コード.gs（最初の例）
function myFunction() {
  var finder = Maps.newDirectionFinder();
  
  // 岡山駅からGoogleJapanオフィスまで
  finder.setOrigin("岡山駅");
  finder.setDestination("六本木ヒルズ");
  
  // 結果の取得
  var obj = finder.getDirections();
  
  printResult(obj);
}

function printResult(obj) {
  Logger.log("status = %s", obj.status);

  Logger.log("summary = %s", obj.routes[0].summary);
  Logger.log("bounds = %s", obj.routes[0].bounds);
  Logger.log("copyrights = %s", obj.routes[0].copyrights);
  Logger.log("waypoint_order = %s", obj.routes[0].waypoint_order);
  Logger.log("legs = %s", obj.routes[0].legs);
  Logger.log("warnings = %s", obj.routes[0].warnings);
  Logger.log("overview_polyline = %s", obj.routes[0].overview_polyline);
}
```

これは、岡山駅から六本木ヒルズ（Google Japan オフィス）まで行くぜ！と
思った時にどんな道のりになるのかを取得しています。

### 実行結果
で、取得されるログ（ログウインドウ）ですが、
status = OK
summary = ���������������������
bounds = {southwest={lng=133.88904, lat=34.66627}, northeast={lng=139.72843, lat=35.66176}}
copyrights = Map data ��2012 Google, ZENRIN
waypoint_order = []
legs = [{distance={text=660 km, value=660156}, duration={text=7 hours 56 mins, value=28536}, end_location={lng=139.72843, lat=35.66070000000001}, start_address=Okayama Station, ��� Ekimotomachi, Kita Ward, Okayama, Okayama Prefecture, Japan, end_address=Roppongi Hills, ���������-������ Roppongi, Minato, Tokyo 106-6108, Japan
（以下略）

文字化けしてしまって、ログウインドウでは何が書いてあるのかわかりません…

## （書籍に書けなかった事。その１）移動モードを変えてみよう！
移動モードが、Directions APIの初期値のままなので、このルート情報はDriving（車移動）でのルートが出力されています。やっぱり公共交通機関で移動する事が多いでしょうからtransit（公共交通機関）での情報を出力…。したいのですが、なぜか、
Maps.DirectionFinder.Modeには、DRIVING（自動車）、BICYCLING（自転車）、WALKING（歩き）の3つしかありません。補完機能にも出ず、ドキュメントもなく、Stringっぽいので"transit"なんて指定すると、
「無効な引数」…だそうです。

### コード

```コード.gs（移動モード追加）
function myFunction() {
  var finder = Maps.newDirectionFinder();
  
  // 岡山駅からGoogleJapanオフィスまで
  finder.setOrigin("岡山駅");
  finder.setDestination("六本木ヒルズ");
  
  // 移動モードの設定
  finder.setMode(Maps.DirectionFinder.Mode.WALKING);

  // 結果の取得
  var obj = finder.getDirections();
  
  printResult(obj);
}
```

### 出力結果
（省略）

## （書籍に書けなかった事。その２）そうだ！言語設定を変えよう
言語設定のデフォルトは（多分"en"）なので、日本語にしてみようと思います。

``` コード.gs（言語設定追加）
function myFunction() {
  var finder = Maps.newDirectionFinder();
  
  // 岡山駅からGoogleJapanオフィスまで
  finder.setOrigin("岡山駅");
  finder.setDestination("六本木ヒルズ");
  
  // 移動モードの設定
  finder.setMode(Maps.DirectionFinder.Mode.WALKING);
  
  // 言語設定
  finder.setLanguage("ja");
  
  var obj = finder.getDirections();
  
  printResult(obj);
}
```

### 実行結果
もっと文字化けがひどくなったので省略（恐らく、日本語情報が増えた）

## まとめ
書籍にも書いてあるのですが、ログ出力だと文字化けして日本語の文字が見えない。
他のものに出力したら話は別です。

Maps.DirectionFinder.Mode.TRANSITを増やしてください。なぜ無効な引数なんでしょうか。

と、いったようにいろいろなAPIが実行できるようになっているので
Google Apps Scriptは非常に便利です。
AppendIterator便利


[goodby/csv](https://github.com/goodby/csv)でヘッダ行を吐くときに使えそう。

```php
<?php
$headerBlock = new ArrayIterator([
	['ID', 'Name', 'Email'],
]);

$contentBlock = new ArrayIterator([
	['1', 'Alice', 'alice@example.com'],
	['2', 'Bob', 'bob@example.com'],
]);

$rows = new AppendIterator;
$rows->append($headerBlock);
$rows->append($contentBlock);

$csv = new SplFileObject('php://output');

foreach ($rows as $row) {
	$csv->fputcsv($row);
}
```

```txt:php：//output
ID,Name,Email
1,Alice,alice@example.com
2,Bob,bob@example.com
```
git tag 切り替え


## 現状のタグ一覧
``` command
> git tag
v1.0.0
v1.0.1
v1.0.2
v1.0.3
v1.0.4
v1.0.5
v1.0.6
v1.0.7
v1.1.0
v1.1.1
```
## タグの情報取得
``` command 
>git co -b 1.0.5 refs/tags/v1.0.5 #ブランチ作るバージョン
>git co refs/tags/v1.0.5 #ブランチを指定しない場合
```
Web開発用のモダンなツールチェーンまとめ…が欲しかった

書いている途中で力尽きました… orz  暇を見つけて更新します。

Google Speradsheetで誰でも編集できるようにしてありますので、直接書き換えてくださって構いません。

無い言語とか無いライブラリとか特に他意はありません。単に私が無知なだけです。
言語の並びは左から順にアルファベット順です。

https://docs.google.com/spreadsheet/ccc?key=0AprgJ0wxd2fDdGU3SEpBLWFwY1lDN19ldjZpVkh0MUE
AccordionレイアウトでactiveItem

Ext JSのAccordionレイアウトで、初期表示時に開いているパネルを指定したいときがあります。
しかし、activeItemとかはありません。（Cardレイアウトと違うので）
どのパネルを開いた状態にするかを指定するには、そのパネルの collapsed に false を設定します。

collapsed: false が設定された最初のアイテムが初期状態では開いて表示されます。
symbolicatecrash

アプリがクラッシュするというユーザの方にメールで診断状況を送ってもらうことがあるんだけど、symbolicatecrash使ってもうまく読めなくてなんだろうなと思ってたらスクリプトに原因があったらしい。

解決してる人がいた。

https://github.com/TheRealKerni/QuincyKit/blob/develop/server/local/symbolicatecrash.pl
1時間に１回音をならして時間の把握をする

Mac環境

``` crontab.bak
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
MAILTO=''

#,----------分
#| ,--------時
#| | ,------日
#| | | ,----月
#| | | | ,--曜日（0:日 1:月 2:火 3:水 4:木 5:金 6:土 7:日）
#| | | | |
#* * * * * command
30 * * * * afplay /System/Library/Sounds/Glass.aiff
```

```
$ crontab crontab.bak
```

音を変えたかったら`/System/Library/Sounds`下を漁るかフリー素材とかを指定してやればよろし
ブロックのタイトルを非表示にする方法


![](https://dl.dropbox.com/u/5488837/smarty_xoops_block_none.png)

[XOOPS Themes and Templates Advent Calendar 2012](http://qiita.com/advent-calendar/2012/xoops-themes-templates/participants) の12日めの投稿です。
⇒　12日目の投稿 [テンプレート自動更新ツール: xoops-watch-template](http://qiita.com/items/ba4cd8d462ffc2511e99 "テンプレート自動更新ツール: xoops-watch-template")
⇒　14日目の投稿 [hamacoさん:今日がマネーデーって本当ですか?](http://qiita.com/users/hamaco "hamacoさん:今日がマネーデーって本当ですか?")


## 1.ブロックタイトルって？

XOOPS（及びXOOPS Cube）ではブロックを多用します。
表示されるのはブロックタイトル `<{$block.title}>` とブロックコンテンツ `<{$block.content}>` です。

でも、画面に表示した時に、デザインなどを考慮すると、このブロックタイトルが邪魔になることもあったりします。

その時にブロックタイトルを消す方法があるので、その方法を紹介します。

## 2.ブロックの管理で魔法の文字列を入れる♪

ブロックの管理の画面で、ブロックタイトルに、とある魔法の文字列をいれるのですが、それは `none（ノン）` です。
![](http://i.imgur.com/QAhWw.png)

これを入れることによって、ブロックのタイトルが消えるのです。

----

**例）**

* `none` を入れてないとき
ブロックタイトルが表示されている。
![](http://i.imgur.com/QAPId.png)
----

* `none` を入れたとき
ブロックタイトルが表示されていない。
![](http://i.imgur.com/8Pi6p.png)
----

どうでしょう？
スッキリしますね！

## 3.ブロックタイトルが消える仕組み

### 3-1.テンプレートシステム Smarty の機能です

XOOPSではSmartyというテンプレートシステムを採用していて、このSmartyの機能で条件分岐が使えるので、これを利用しています。

### 3-2.テーマにはどうかかれているの？

テーマによってはちょっと違うかも（ h3 が h2 だったり）するかもしれませんが、この `none` に対応しているテーマであれば、だいたい下記の様なコードになっていると思います。（一部抜粋）

```theme.html(抜粋)
<div>
    <{if ! $block.title|strstr:"none"}><h3><{$block.title}></h3><{/if}>
    <{$block.content}>
</div>
```

この `<{if ! $block.title|strstr:"none"}><h3><{$block.title}></h3><{/if}>` がポイントになります。
もう少し分かりやすくするために改行をさせてみると

```theme.html(抜粋)
<div>
    <{if ! $block.title|strstr:"none"}> // 条件式(開始)
        <h3><{$block.title}></h3>       // ブロックタイトル
    <{/if}>                             // 条件式(終了)
    <{$block.content}>                  // ブロックコンテンツ
</div>
```

となります。

### 3-3.書かれていることの意味

これの意味は、もし `if` ブロックタイトルにnoneという文字列 `$block.title|strstr:"none"` がなかったら `!` 、ブロックタイトルを表示 `<h3><{$block.title}></h3>` しなさい、という条件になっています。

## 4.応用もできる

応用することもできますので、この仕組みを利用すれば、特定の文字があった時に何かをする、ということも可能ですので、何か思いついたら是非試してみてください！

![](https://dl.dropbox.com/u/5488837/smarty_xoops_block_none.png)
grep map in CoffeeScript 

```
arr = [1..10]

arr = (value + 1 for value in arr when value % 2 == 0)

console.log arr # => [ 3,  5,  7,  9,  11 ]

```

気持ち的には`when`じゃなくて`where`使いたい。。。

```
arr = (value + 1 for value in arr where value % 2 == 0) # => raise ReferenceError
```
regex.hとloopのパフォーマンス比較

Using regex.h

```regexTime.cc
regex_t preg;
size_t nmatch = 5;
regmatch_t pmatch[nmatch];
int ret = regcomp(&preg, "[[:digit:]]+.[[:digit:]].[[:digit:]]",
				  REG_EXTENDED | REG_NEWLINE);
if( ret ){
	cout << "regex compile failed" << endl;
}
cout << "String: " << str << endl;
if( regexec(&preg, str, nmatch, pmatch, 0) != 0 ){
	cout << "no match" << endl;
}
else{
	for( int i = 0 ; i < nmatch ; i++ ){
		for( int j = pmatch[i].rm_so ; j < pmatch[i].rm_eo ; j++ ){
			cout << str[j];
		}
	}
	cout << endl;
}
```

Using only for loop

```loopTime.cc
int i,j;
int c, l = strlen(str);
for (i = j = 0; i < l; i++) {
	c = OPENSSL_VERSION_TEXT[i];
	if ('0' <= c && c <= '9') {
		for (j = i + 1; j < l; j++) {
			c = str[j];
			if (c == ' '){
				break;
			}
		}
		break;
	}
}
for( int k = i ; k < j - i + 2; k++ ){
	putchar(str[k]);
}
return 0;
```

```
$ time ./regexTime
real	0m0.005s
user	0m0.002s
sys	0m0.002s
```

```
$ time ./loopTime
real	0m0.005s
user	0m0.002s
sys	0m0.002s
```

No difference
数独ソルバー

数独ソルバー作りました。
今は各数字からの影響を考えて1通りに決まるところを決定することしかできません。
(仮定のいるものなどは解けない)

とりあえず簡単な問題ならこれで解けるようになりました。

```haskell:sudoku_solver.hs
import Data.Char
import Data.List
import Data.Array
import System.Environment (getArgs)

type Board = Array (Int,Int) Int
type BFilter = Array (Int,Int) [Int]
width = 9

toLine :: String -> [Int]
toLine ('_':cs) = -1 : toLine cs
toLine (x:cs) = digitToInt x : toLine cs
toLine "" = []

fromLine :: [Int] -> String
fromLine (-1:ns) = '_' : fromLine ns
fromLine (x:ns) = intToDigit x : fromLine ns
fromLine [] = ""

printBoard :: Board -> IO ()
printBoard = mapM_ putStrLn . makeBoxedList width . fromLine . elems

makeBoxedList :: Int -> [a] -> [[a]]
makeBoxedList _ [] = []
makeBoxedList n as = [b] ++ makeBoxedList n bs
  where (b,bs) = splitAt n as

solve :: Board -> Board
solve b = case length numList of
  0 -> b
  _ -> solve $ update b numList
  where numList = singleFilter . updateFilter makeFullNumMap . concat . map makeFilter . noneEmptyFilter $ b

makeFullNumMap :: BFilter
makeFullNumMap = listArray ((0, 0), (width-1, width-1)) $ cycle [[1..width]]

noneEmptyFilter :: Board -> [((Int,Int),Int)]
noneEmptyFilter = filter (\(_,z)->z/=(-1)) . assocs

makeFilter :: ((Int,Int),Int) -> [((Int,Int),Int)]
makeFilter p = acrossFilter p `union` downFilter p `union` groupFilter p `union` hereFilter p
  where
    acrossFilter :: ((Int,Int),Int) -> [((Int,Int),Int)]
    acrossFilter ((_,y),v) = map (\x -> ((x,y),v)) [0..width-1]
    
    downFilter :: ((Int,Int),Int) -> [((Int,Int),Int)]
    downFilter ((x,_),v) = map (\y -> ((x,y),v)) [0..width-1]
    
    groupFilter :: ((Int,Int),Int) -> [((Int,Int),Int)]
    groupFilter ((x,y),v) = zip (zip [x'..x'+2] [y'..y'+2]) (cycle [v])
      where (x',y') = ((x `div` 3) * 3, (y `div` 3) * 3)

    hereFilter :: ((Int,Int),Int) -> [((Int,Int),Int)]
    hereFilter ((x,y),_) = zip (cycle [(x,y)]) [1..width]

singleFilter :: BFilter -> [((Int,Int),Int)]
singleFilter = map (\(u,v)->(u,head v)) . filter (\(_,v)->length v==1) . assocs

updateFilter :: BFilter -> [((Int,Int),Int)] -> BFilter
updateFilter = accum (\x y -> filter (y/=) x)

update :: Board -> [((Int,Int),Int)] -> Board
update = accum (\_ a -> a)

main = do 
  content <- readFile =<< fmap head getArgs
  let problem = listArray ((0, 0), (width-1, width-1)) $ concat $ map toLine $ lines content
  putStrLn "Here is a problem:"
  printBoard $ problem
  putStrLn "\nThe answer is:"
  printBoard $ solve problem
```

```text:出力例
~$ ./sudoku_solver sudoku/free_problem1.txt 
Here is a problem:
__61_7__8
8____674_
1_7832_59
_29561___
5_1__89_3
____2_16_
__5614387
78__954_6
6147_3_92

The answer is:
956147238
832956741
147832659
329561874
561478923
478329165
295614387
783295416
614783592
```

基本的な考え方としては、まずは[1..9]のように可能性のある数字を列挙したものを9x9マスに敷き詰め、これをBFilterとしています。
ある場所に数字があれば、その周りと同じ行と同じ列全てその数字が入ることは無いので、その数字を対応するフィルターから除去します。
フィルターに残っている数字の中で、1通りに決まるところを抜き出して、それをもとの盤に反映させます。
あとはこれを再帰的に繰り返し、1通りに決まるところがなくなれば終了です。

次は出来れば仮定を入れて(詰まったら適当に当てはめて考える)ということもやってみたいと思います。
解の一意性判定まで出来るようになるといいかなと思っています。
第一回 JetBrains Users Groupに行ってきました


Sublime Text 2ばっかり使っている今日この頃ですが、IDEの中ではIntelliJ IDEAが好きでパーソナルライセンスを今年遂に購入しました。
（その直後に12の発表になりいきなりアップグレードフィーが発生して泣きそう）

そんな複雑な感情を抱きつつ行ってきました、Users Group.

会場
====
[リクルートメディアテクノロジーラボ][1]さんが会場でした。確か以前一度何かのときに来た覚えがあるのですが、すっかり忘れていて入り口を探してうろうろしました。

シックで広い感じですねー 流石銀座の大人の空間ですねー

トーク
======
IntelliJを立ち上げていろいろ確かめながら聞いていたので、話聞いてませんでした！！

とりあえず調べたことをここに書くことにします。

読み方
-----
「インテリジェーアイディア」です。イデアじゃないです。ショックです。イデオンをアイデオンと呼ばれた時のようなショック。SQLを「エスキューエル」と呼ぶように日本ではイデアと呼んで欲しいです。（関係ない）

ショートカットキー
---------------
IntelliJはほとんどの操作にショートカットキー割り当てできますから、キー自体にはこだわりはないと思います。会場で多かった質問は、「Eclipseのこの機能はIntelliJではどうするの？」ということでした。

StackOverflowに、[What are the most useful Intellij IDEA keyboard shortcuts? ][2] っていうQAがあり、これが役立ちそうです。

個人的に気に入ってるのは

* [Zen Coding][3] HTML/CSS以外もできます。ただ、役にたつのかな？
* xmlファイルやhtmlテンプレートでのソースコードジャンプ。SpringやRailsなど、対応プラグインを入れると、ソースコードと設定ファイルの分断が幾分かマシになります。

Kotlin
------

JetBrainが発表したJVM言語[kotlin][4]の、[@ngsw_taro][5]さんによる紹介。

Kotlinは見た感じScalaと区別つきませんでしたが、[Scalaよりシンプルな言語][6]を目指して開発されたそうです。

implicit conversionが無い、ということで、Javaクラス・オブジェクトの利用がどうなっているのかはちょっと興味のあるところです。

そしてScalaへ
------------
そしてピザ＆ビールタイム。何故か、僕のいたテーブルは全員がscala使い。「scala使うならIntelliJですよね。それはともかくsbtは（略）」みたいな感じでscalaの話をメインにしていた覚えがあります。

IntelliJ 12だとPlay2.0にも対応しているらしいので、2.0で使ってみようかな。


[1]: http://mtl.recruit.co.jp/
[2]: http://stackoverflow.com/questions/294167/what-are-the-most-useful-intellij-idea-keyboard-shortcuts
[3]: http://code.google.com/p/zen-coding/
[4]: http://kotlin.jetbrains.org/
[5]: http://taro.hatenablog.jp/
[6]: http://www.stateofcode.com/2011/07/kotlin-a-new-entry-to-become-the-next-jvm-language/
Google Maps SDK for iOSの導入手順

アプリ内で Google Maps を使用するための SDK、"Google Maps SDK for iOS" の導入手順です。

公式情報は [Google Developers](https://developers.google.com/maps/documentation/ios/start) にあります。


![サンプル](http://f.cl.ly/items/3v2g0Z202m0c0f3X3o1k/gmaps1.png)


##1. API Keyを取得

- [Google APIs Console](https://code.google.com/apis/console/) の Services タブで、Google Maps SDK for iOS を ON にする。
- API Access タブで、"Create new iOS key" ボタンをクリック。ポップアップで出てくるウィンドウに、Google Maps SDK for iOSを使用するアプリのBundle identifierを入力する。

##2. SDK をプロジェクトに追加

- GoogleMaps SDK for iOS をダウンロード
[Getting the Google Maps SDK for iOS](https://developers.google.com/maps/documentation/ios/start#getting_the_google_maps_sdk_for_ios)

- GoogleMaps.framework をプロジェクトに追加する

- Build Phasesタブの、Copy Bundle Resourcesに、GoogleMaps.framework フォルダ配下にある GoogleMaps.bundle を追加する


##3. 必要なフレームワークをプロジェクトに追加

- AVFoundation.framework
- CoreData.framework
- CoreLocation.framework
- CoreText.framework
- GLKit.framework
- ImageIO.framework
- libicucore.dylib
- libstdc++.dylib
- libz.dylib
- OpenGLES.framework
- QuartzCore.framework
- SystemConfiguration.framework


##4. ビルド設定

- Architectures を `armv7` にする（もしくは Valid Architectures から `armv7s` を外す）
- Other Linker Flags に `-ObjC` を追加

##5. Info.plistの編集

Bundle identifier欄に、手順1でAPI Key取得時に入力したBundle identifierを入力する。

##6. AppDelegate で初期化

- ヘッダをインポート

````
#import <GoogleMaps/GoogleMaps.h>
````

- `application:didFinishLaunchingWithOptions:` で、`provideAPIKey:`メソッドをコール（引数には手順1で取得したAPI Keyを渡す）

````
[GMSServices provideAPIKey:@"YOUR_API_KEY"];
````

##7. 地図を表示する ViewController の実装

- ヘッダをインポート

````
#import <GoogleMaps/GoogleMaps.h>
````

- プロパティ追加

````
@property (nonatomic, weak) GMSMapView *mapView;
````

- GMSMapViewの初期化と諸々の設定

````
- (void)loadView {

    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683
                                                            longitude:151.2086
                                                                 zoom:6];
    self.mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
    self.mapView.myLocationEnabled = YES;
    self.view = self.mapView;
    
    GMSMarkerOptions *options = [[GMSMarkerOptions alloc] init];
    options.position = CLLocationCoordinate2DMake(-33.8683, 151.2086);
    options.title = @"Sydney";
    options.snippet = @"Australia";
    
    [self.mapView addMarkerWithOptions:options];
}
````

- 地図の描画を開始する

````
- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

    [self.mapView startRendering];
}
````

- 地図の描画を停止する

````
- (void)viewWillDisappear:(BOOL)animated {

    [self.mapView stopRendering];

    [super viewWillDisappear:animated];
}
````
AROW を Ruby で実装してみた

<p>
[Machine Learning Advent Calendar 2012](http://qiita.com/advent-calendar/2012/machinelearning "Machine Learning Advent Calendar 2012") の 14 日目の記事になります。気まぐれでこのカレンダー登録してみたものの、この日に至るまでの数々の記事のガチな高レベルさに登録してしまったことをかなり後悔している [@komiya_atsushi](https://twitter.com/komiya_atsushi "@komiya_atsushi") です。
</p>

この記事では、オンライン学習アルゴリズムの AROW を Ruby で実装した (&amp; gem として公開した) という、どこにでもよくある話を書いています。主に機械学習に馴染みのない or 取り組み始めたばかりの（自分を含めた）エンジニア向けの記事となっています。

http://blog.k11i.biz/2012/12/arow-ruby.html
ひめキュンのブログの更新をチェックするChrome拡張を作った

[ひめキュンフルーツ缶](http://himekyun.jp)さんのブログの更新をチェックする
Chrome拡張, [ひめキュンクローム缶](https://chrome.google.com/webstore/detail/%E3%81%B2%E3%82%81%E3%82%AD%E3%83%A5%E3%83%B3%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%A0%E7%BC%B6/oghaakncdjnefbhmeepnjhdlenilijno?hl=ja)を作りました.

![ひめキュンクローム缶](https://raw.github.com/garaemon/hkfc-chrome/master/screenshot.png)

ひめキュンさんのブログが更新されるとポップアップが出ます。

ソースコードはこちらに: [hkfc-chrome](https://github.com/garaemon/hkfc-chrome)

やっていることは単純で、1分のインターバルを空けて、amebloさんのRSSをチェックしてます。

Chrome拡張のbackgroundジョブや単純な機能の良いサンプルになっているかと思います。

＼1コメ取るしか!／
O/RマッパーよりSQLが気になって仕方ない

SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か？ http://www.slideshare.net/kwatch/sqlor

に登場するSQLについて違和感を感じたので、こう書けばいいんじゃね？ってのを考えた。

## 年齢が20歳の社員が所属する部署一覧

```sql
-- 年齢が20歳の社員が所属する部署一覧(オリジナル)
  SELECT *
    FROM departments
   WHERE id IN (
           SELECT id
             FROM employees
            WHERE age = 20
         )
   ORDER BY name
```

とても読みやすいのだが、INよりはEXISTSを使った方が一般に高速。

```sql
-- 年齢が20歳の社員が所属する部署一覧(EXISTSで書き直した)
  SELECT *
    FROM departments D
   WHERE EXISTS (
           SELECT *
             FROM employees E
            WHERE age = 20
              AND E.id = D.id
         )
   ORDER BY name
```

参考：
http://www.geocities.jp/mickindex/database/db_optimize.html

ただ、相関サブクエリが登場すると読みにくくなりますね。。

## 誕生日をもとに年齢を計算

```sql
-- 誕生日をもとに年齢を計算(オリジナル)
  SELECT date_part(year, age(birth)) AS age
       , count(*)
    FROM users
   WHERE date_part(year, age(birth)) < 20
   GROUP BY date_part(year, age(birth))
   ORDER BY age
```

確かにdate_part～が何度も出てくるのだけど、FROMで新たな集合を作ってから書けばすっきりしそうに思う。

```sql
-- 誕生日をもとに年齢を計算(FROMでまとめた)
  SELECT age
       , count(*)
    FROM (
           SELECT date_part(year, age(birth)) AS age
             FROM users
         )
   WHERE age < 20
   GROUP BY age
   ORDER BY age
```

まあスライドの趣旨とは関係ないわけですが。他にも書き方ありませんかね？
Ember.Routerは入れ子構造にできる

Router定義を入れ子構造にして、サブディレクトリに当たるURLにひもづけることができます。

```js
App.Router = Ember.Router.extend({
  root: Ember.Route.extend({
    index: Ember.Route.extend({
      route: '/',
      redirectsTo: 'calendar.index'
    }),
      
    calendar: Ember.Route.extend({
      route: '/calendar',
      
      index: Ember.Route.extend({
        route: '/'
      }), 
      
      preferences: Ember.Route.extend({
        route: '/preferences'
      })
    }),
      
    mail: Ember.Route.extend({
      route: '/mail',
      
      index: Ember.Route.extend({
        route: '/'
      }),

      preferences: Ember.Route.extend({
        route: '/preferences'
      })
    })
  }) 
});

App.initialize();

var router = App.get('router');

router.transitionTo('calendar.preferences');

// URL => www.myapp.com/calendar/preferences

router.transitionTo('mail.preferences');

// URL => www.myapp.com/mail/preferences

router.transitionTo('index');

// URL => www.myapp.com/mail

```


http://stackoverflow.com/questions/10151202/ember-js-routing

このページのコードを参考にしました。
mosh入れた

# 概要
今更ながらmoshを導入しようと思って、サーバに入れてみた。まだ使ってない。
で、ちょっとめんどくさかった＆ハマったのでメモ。

# 内容
公式サイト→http://mosh.mit.edu/
見たところdebianはsqueeze以降はaptで入れられるらしい。lenny使ってるので手動で入れる。
で、更に見たところprotocol buffersなるものを入れる必要があるらしい。これもパッケージないぽいので、手動で入れる。

```
wget http://protobuf.googlecode.com/files/protobuf-2.4.1.tar.gz
tar zxvf protobuf-2.4.1.tar.gz
cd protobuf-2.4.1
./configure
make
sudo make install
```

で、moshを入れようとした

```
wget https://github.com/downloads/keithw/mosh/mosh-1.2.3.tar.gz
tar xzvf mosh-1.2.3.tar.gz
cd mosh-1.2.3
./configure
make
```

で、確かここで↓なエラーが出た

```
/usr/local/bin/protoc: error while loading shared libraries: libprotobuf.so.7: cannot open shared object file: No such file or directory
```

でぐぐると、こんなページ見つけた。
http://code.google.com/p/protobuf/issues/detail?id=213

要約すると

> protocのソースのREADME.txt読めよ

> > LD_LIBRARY_PATH に /usr/local/lib を追加するか
> > configureする時に
> > ./configure --prefix=/usr
> > しろ

> って書いてあるだろ

とのことで、LD_LIBRARY_PATH に /usr/local/lib を追加したら動いた。

```
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
make
sudo make install
```

これでインストール完了。

# 追記
クライアントからサーバに繋ぐ時にも同じエラーが出て、これを$LD_LIBRARY_PATHいじって解決する方法が分からなかったので諦めて`./configure --prefix=/usr`してインストールしなおした。
phantomjsのインストール

# phantomjsのインストール手順

```brew search phantomjs```
```brew install phantomjs```
```sudo ln -s ~/usr/local/Cellar/phantomjs/1.7.0```
```phantomjs --version```

サンプルはこちらから!
[phantomjsのインストールからサンプルまで](http://nigohiroki.hatenablog.com/entry/2012/12/14/004915)
macportsのコマンドに対するシンボリックリンクを貼る


## 前書き
自分のmacは追加のソフトウェアをmacportsでインストールしているのですが、ターミナルで`python`と実行しても最初からmacにインストールされている2.7.1側が呼ばれるため、djangoのテスト実行等のためには`python2.7`で実行しなければならず不便していました。
最近になって、ようやくmacports内のコマンドにシンボリックリンクを貼ることが出来るのを知ったので、メモ代わりに残しておきます。

## 本題
macports のselectコマンドで操作していきます。

### まずは現状を調べる
```
$ port select --list python
Available versions for python:
	none (active)
	python24
	python25-apple
	python26
	python26-apple
	python27
	python27-apple
$ python
Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> ^D

```
--listで調べてみると、なるほど、noneがactiveになっている。
よって、`python`では上記の通り2.7.1のものが呼ばれている。。。

### 切り替える
```
$ sudo port select --set python python27
Password:
Selecting 'python27' for 'python' succeeded. 'python27' is now active.
$ port select --list python
Available versions for python:
	none
	python24
	python25-apple
	python26
	python26-apple
	python27 (active)
	python27-apple
```
--setで切り替え可能。--listで再確認すればpython27がactiveになっている。
なお、新しいターミナルで初めて有効になる

```
$ python
Python 2.7.3 (default, Nov  7 2012, 10:38:10) 
[GCC 4.2.1 Compatible Apple Clang 3.0 (tags/Apple/clang-211.12)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 
```
zshでディレクトリスタックを手軽に移動する

シェルを使う上でディレクトリの移動に関する設定は欠かせません。

3つ以上のディレクトリを手早く移動したい時は、bash でもお馴染みの `pushd`、`popd`、`dirs` を使用してディレクトリスタックの操作をするわけですが、いちいち出し入れするのが面倒です。

zsh のシェルオプション `AUTO_PUSHD`  を有効にすればディレクトリ移動時に元いたディレクトリが自動でスタックに積まれますが、`dirs` で確認して移動するということが面倒という点は変わりません。

このような時は補完機能を使って楽をします。

以下の例は、補完システムの有効化とメニュースタイルを有効にしてカレントディレクトリは除くという設定です。メッセージ書式は好みです。`AUTO_PUSHD` するときは `DIRSTACKSIZE` で上限を決めておくとよいでしょう。

```.zshrc
DIRSTACKSIZE=100
setopt AUTO_PUSHD

autoload -Uz compinit && compinit

zstyle ':completion:*' menu select
zstyle ':completion:*:cd:*' ignore-parents parent pwd
zstyle ':completion:*:descriptions' format '%BCompleting%b %U%d%u'
```

このように設定した状態でいくつかのディレクトリを渡り歩いたあとに `cd -<TAB>` すると、

```bash:zsh
% cd /System/Library/Frameworks/JavaVM.framework/Versions/Current
% cd /var/log
% cd /usr/local/Cellar
% cd -<TAB>
Completing directory stack
1 -- /var/log
2 -- /System/Library/Frameworks/JavaVM.framework/Versions/Current
3 -- /Users/yoshikaw
```

こんな感じにディレクトリスタックが補完候補として出てきます。

そのまま `TAB` を押せば1番目が選択状態になります。`Ctrl-N`、`Ctrl-P` で選択の移動もできます。もちろん直接数字を入力して `ENTER` でも移動できます。

日々の作業に欠かせません。
DataImportHandlerで削除の指定の仕方


## deletedIdQuery を指定する
deletedIdQuery に、削除したいドキュメントの UniqueKey を取得するSELECT文を指定します。
command=delta-import で、SELECT文で取得した UniqueKey をインデックスから削除できます。

```example
    <document name="sample">
        <entity name="item" pk="id" 
                query="SELECT * FROM t_sample"
                deletedPkQuery="SELECT item_id as id FROM t_sample">
```
テストにsleep入れるな問題の解決策

テストの中でレコードの作成時間をちょっとずらしたい時などに，sleepを入れるという最悪な解決方法はやめて[travisjeffery/timecop](https://github.com/travisjeffery/timecop)を使うとよい．
実行後に時間を置きたいメソッドを`Foo#bar`とすると以下のように書く．

```ruby:some_spec.rb
class Foo
  def bar_with_timeshift
    val = bar_without_timeshift
    Timecop.travel(Time.now + 10.seconds)
    val
  end
  alias_method_chain :bar, :timeshift
end
```

timeshiftというかっこいい名前はmotemenさんの[gist:325058](https://gist.github.com/325058)から．
SketchUpで、Rubyの標準ライブラリを使う(Windows版)

SketchUpに組み込まれているRubyエンジンは標準ライブラリのサブセットのため、標準ライブラリをrequireすると、LoadErrorが発生します。

それを解消するためのスクリプトを紹介します。

```　loadpaths.rb
    #  file: '!loadpaths.rb'
    #  for Win32
    #
    #  Version 3.0.1   -  Public Domain
    #
    #  Authored by  :  Dan Rathbun
    #  Contributors :  Jim Foltz
    #
    begin
      #
      # TWEEKER variables
      #
      # may change 'ver' to a literal string
      if RUBY_VERSION < '1.9.0'
        ver=RUBY_VERSION.split('.')[0..1].join('.')
      else
        ver=RUBY_VERSION
      end
      #
      # 'pre' is the rubylib path prefix
      pre='C:/ruby'<<RUBY_VERSION.split('.').join<<'/lib/ruby'
      #
      plat=RUBY_PLATFORM
      #
      # add the standard lib path
      $LOAD_PATH << "#{pre}/#{ver}"
      # add the standard platform sub lib path
      $LOAD_PATH << "#{pre}/#{ver}/#{plat}"
      #
      # optionally add paths to vendor_ruby libs
      # only apply if there are things installed there
      #$LOAD_PATH << "#{pre}/vendor_ruby/#{ver}"
      #$LOAD_PATH << "#{pre}/vendor_ruby/#{ver}/#{plat}"
      #
      # optionally add paths to site_ruby libs
      # only apply if there are things installed there
      #$LOAD_PATH << "#{pre}/site_ruby/#{ver}"
      #$LOAD_PATH << "#{pre}/site_ruby/#{ver}/#{plat}"
      #
      $LOAD_PATH.uniq!
      #
      # print LOAD PATHS to console
      # (May not print during Sketchup startup!)
      Sketchup.send_action('showRubyPanel:')
      UI.start_timer(1,false) {
        puts "\nLOAD PATHS:\n"
        $LOAD_PATH.each {|x| puts "#{x}\n"}
        puts "\n\n"
      }
      #
    end
    # cleanup
    ver=nil
    pre=nil
    plat=nil
    GC.start
    #
    # end of '!loadpaths.rb'
```

このコードの出典は、以下の通りです。
http://sketchucation.com/forums/viewtopic.php?t=29412#p257058

記事執筆時点(2012/12/13)で、v3.0.1です。
使用される方は、最新版を確認される事をおすすめします。

動作環境：
Windows （XP以上？）
Rubyバージョン：1.8.x〜1.9.x
zsh のコマンドライン編集で undo, redo する

コマンドラインの編集で undo, redo したいときは .zshrc にこんなふうに書いておけばOK。

```sh
bindkey "^[u" undo
bindkey "^[r" redo
```

`^w` で調子に乗って消しすぎた時とかに使う。

`^[u` は Meta u なので  Escape を押した後 u または Alt を押しながら u でいける。undo は標準で `^Xu` に割り振られてるんだけど押しにくいので変えた。
Sidekiq（Resuqeのmulti threading版）でRedisの接続先を設定すっとき


Sidekiq大好きになっちゃったんですが、
Redisってほとんどの場合、localhost:6379じゃないですよね、うん。

[Sidekiq > Advanced Options](https://github.com/mperham/sidekiq/wiki/Advanced-Options)にはUnicornの場合、configure_clientのブロックをunicorn.rbのafter_forkに書けって書いてあるんで、そっちにしか書いてないとRunnerんとき動かない。

いや、動くんだけど、デフォルトのlocalhost:6379にいくんで。
なので、

```ruby:initializers/sidekiq.rb
Sidekiq.configure_server do |config|
  config.redis = { :url => $redis_host , :namespace => 'resque'}
end

# When in Unicorn, this block needs to go in unicorn's `after_fork` callback:
Sidekiq.configure_client do |config|
  config.redis = { :url => $redis_host , :namespace => 'resque'}
end
```

```ruby:unicorn.rb
after_fork do |server, worker|
  defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection

  # When in Unicorn, this block needs to go in unicorn's `after_fork` callback:
  Sidekiq.configure_client do |config|
    config.redis = { :url => redis_host , :namespace => 'resque'}
  end
end
```

両方に書かないとうまくいかなかったよって話。
まあRunnerからenqueueするってシチュエーションの方がイレギュラーな気もしますが。
Xcode: Failed to Attach to Process ID 0 への対処

iOS アプリビルドで `Failed to Attach to Process ID 0` が出たときへの対処

## 発生条件
- Info.plist の Bundle ID を変更したとき？

## 対処方法
1. Xcode プロジェクトを `Clean`（念のため option 押して `Clean Build Folder…`）
2. Xcode プロジェクトを閉じる
3. Xcode を command-Q
4. シミュレーター・端末からアプリを削除
5. シミュレーターを command-Q ／ 端末の接続を外す（もしダメなら端末も再起動）
6. `~/Library/Developer/Xcode/DerivedData/プロジェクト名ほげほげ` フォルダをすべて削除
7. Xcode 再起動
Backbone.sync が API リクエストのキャッシュを使ってしまうのを防ぐ


Model の同期の際に GET API リクエストのキャッシュが使われてしまうと、削除したはずのものが表示されるなどおかしなことになってしまいます。

これは Backbone.js そのものの問題ではありませんが、Backbone.sync を使っていると、AJAX 通信をする部分を直接自分で書かないのではまりやすいです。

jQuery を使っている場合は、以下のコードでキャッシュを防ぐようにすることができます。リクエスト先の URL にタイムスタンプをパラメータとしてつけてリクエストするようになるためです。

```js
$.ajaxSetup({ cache: false });
```

しかし、これでは jQuery を使った全ての AJAX 通信でキャッシュを使用しないようになるため、場合によってはふさわしくないかもしれません。その場合は Collection ごとに設定できます。

```js
var MovieList = Backbone.Collection.extend({
  …,
  fetch: function (options) {
    options.cache = false;
    return Backbone.Collection.prototype.fetch.call(this, options);
  },
  …
});
```

さらに細かく制御したい場合は `fetch()` や `save()` のオプションに直接指定すると良いでしょう。`fetch()` や `save()` のオプションは、（少し修正が入りますが）`$.ajax()` に渡されるのを利用します。

```js
collection.fetch({ cache: false });
model.save(attributes, { cache: false });
```

参考
http://stackoverflow.com/questions/6178366/backbone-js-fetch-results-cached
IE7,8で透過PNGのフェードイン時に画像がジャギる現象の解消


IE7も8も終わってしまえばいいのに。。

```Javascript:jQuery
//ユーザーエージェントの取得(バージョンの取得)
var ua = window.navigator.appVersion.toLowerCase();

$(function(){
  //IE7,8の時だけ処理
  if(ua.indexOf("msie 7.") != -1 || ua.indexOf("msie 8.") != -1){
    $('img').each(function(){
      var src = $(this).attr('src');

      if(src.indexOf('.png') != -1){
        $(this).css({
          'filter': 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+src+'", sizingMethod="scale");'
        });
      }

    });
  }
});
```

こんな感じでIE独自の拡張機能であるfilterのアルファチャンネルローダーを使う処理をかけてあげればよいらしい。
テンプレートを入れた script の中身は jQuery.html() で取る


Backbone.js などを使っていると `<script type="text/template"></script>` などとして `body` 内にテンプレートを置く場合があるかと思います。

さて、この中身を JavaScript で取得する際に、Chrome や IE9 では `jQuery.text()` でも取れますが、IE8 以前だと `jQuery.html()` でないととれません。中身が入れ子の HTML だと解釈されてしまうわけですね。

```html
<script id="hello-template" type="text/template">
  <p>Hello, <%= name %>!</p>
</script>
```

```js
$tmpl = $('#hello-template');
console.log($tmpl.text() === $tmpl.html());
// Chrome などでは true
// IE8 以下では false
```
mod_pagespeedをhttpsで使う

Googleのmod_pagespeedを入れてみました。
https://developers.google.com/speed/pagespeed/mod

静的な要素が多いページは体感値がかなり速くなりました。

しかし、httpsのページではCSS等が上手く読み込まれていなくて、どうしようかなと思っていた所、以下の設定をすることで解決しました。

```pagespeed.conf
 ModPagespeedRespectXForwardedProto on
```

ちなみに、環境はロードバランサーの後ろでアプリケーション・サーバーを動かしています。
MacにNetBeansをインストールするとデフォルトでTomcatがインストールされない

MacにNetBeansをインストールする際の注意事項

インストール時にはデフォルトでTomcatがインストールされません。
インストール時に「カスタムインストール」を選んで「ApacheTomcat」を選ぶ必要があります。

ちょっとはまりました・・・。
Excelでシンタックスハイライト

##ExcelにSQLやソースコードを書かないといけないことはありませんか？
例えば仕様書とか、APIマニュアルとかで。
ありませんか。そういう時はSphinx使うから大丈夫ですか。うらやましいですね。僕はよくあります。Excel方眼士ですしね。

とりあえずそういうことがあるとして、そういう時はやっぱりちゃんとシンタックスハイライトして欲しいんですよ。真っ黒なのはアレだし、手作業で色変えるのは勘弁ですし。

シンタックスハイライトとリッチテキスト形式でのコピーができるエディタを使って、そっちで書いたものをコピーしてExcelに貼り付けるという手が無くはないんですが、ちょっと修正するのにいちいちエディタを起動して行き来するのは面倒ですし、オートシェイプへの貼り付けはいまいちうまくいきません。

##ということで、Highlighterアドインを作りました
ソースコードは[こちら](https://bitbucket.org/iwata0303/highlighter)です。
[Excel-DNA](http://exceldna.codeplex.com/)と、.NET製のシンタックスハイライト用ライブラリ[ColorCode](http://colorcode.codeplex.com/)を利用しています。

エラー処理とか皆無ですが、オートシェイプのテキストに色付ける以外のことはやってないので回復不能にデータ壊したりすることも無いでしょう。
ただし、マクロ全般に言えることですが実行するとUndo情報はクリアされるのでそこのところは注意が必要です。

※ちなみに、Office2007と2010で動くことは確認してますが、それ以外は未確認です。
※こういうの探せばいくらでもありそうなものですが、ざっと検索した感じでは見つけられませんでした。

###セットアップ
1. まずは`Highlighter.dll`をビルドします。C# Express 2010でビルドできます。
   `ExcelDna.Integration.dll`と`ColorCode.dll`も同梱してますが、素性のしれないバイナリは使いたくないという人は上記のURLから本家のものをダウンロードしてください。

2. 適当なフォルダを作って、以下のファイルをそのフォルダ内に配置します。

  * Highlighter.dll
  * ExcelDna.Integration.dll
  * ColorCode.dll
  * Highlighter.dna
  * Highlighter.xll

###使い方
※今のところ、Excelのオートシェイプ上に書かれたテキストだけが対象です。
ちょっと直せばセル上のテキストも対象にできますが、個人的にはそっちにはニーズが無いので。

1. Highlighter.xllをダブルクリックすると、Excelが起動してアドインを読み込むかどうか聞かれます。「このセッションに限り～」を選択してください。
   ![confirm](http://gyazo.com/4339611cd178f09e811bf0e9f277d080.png)

2. オートシェイプ上に、コードやSQLを書きます。スタイルに応じてカラーリングを変えるような器用なマネはしていないので、シェイプの背景色は白系で。
   ![shape](http://gyazo.com/01f4c2093f9d5632af8efbe7a8804c91.png)

3. オートシェイプを選択した状態で、[アドイン] → [Highlighter] で言語を選択すると、シンタックスハイライトが適用されます。
   ![highlighted](http://gyazo.com/fe1849bcb1711d78e45190120b02e935.png)

###対象言語の変更
highlighter.dnaをエディタで開いて、この辺を適当に消したり追加したりしてみてください。

```csharp
[ExcelCommand(MenuText = "VB")]       public static void VB()     { Highlight(Languages.VbDotNet); }
[ExcelCommand(MenuText = "CSharp")]   public static void CSharp() { Highlight(Languages.CSharp); }
[ExcelCommand(MenuText = "Sql")]      public static void Sql()    { Highlight(Languages.Sql); }
```

どんな言語が指定可能かは、[このへん](http://colorcode.codeplex.com/SourceControl/changeset/view/bff609b058ba#ColorCode/Languages.cs)とかを見ると分かると思います。

それでは。
Bundlerで使ってるgemの実装を調べたくなった時に - 開発効率やruby力の向上のために


例えば、Railsで開発している時に、ActiveRecordの実装を調べたくなるような事がしばしば起こると思います。そんな時、知りたいmethodがundocumentedだったりだとか、ググっても特に情報がなくて困ることがよくあります。マイナなgemだと特に。

そういう時は、おとなしく実装を読んで問題解決しましょう。

---

もしあなたのプロジェクトでBundlerを使ってる場合、環境変数を設定するだけで、調べたいgemのソースをエディタで簡単に開けるようになります。

まず環境変数`BUNDLER_EDITOR`か`EDITOR`にお好みのエディタを設定します。`BUNDLER_EDITOR`の方が優先されます。

僕の場合はSublime Text 2を使いたいので

```
export BUNDLER_EDITOR=subl
```

としています。

あとは`bundle open`するだけ。`activerecord`なら、

```console
$ bundle open activerecord
```

とします。

---

使ってるgemの挙動がわからずに詰まった時に、実装をちょっと眺めるだけで簡単に解決することも意外とありますし、[コードリーディング](http://0xcc.net/pub/webdb/webdb-05.html)自体がプログラミングを学ぶ上で欠かせない技術なので、気軽にgemの中身を見る習慣をつけておくとよいと思います！
ofxOpenNIのセットアップ


OpenNIでKinectをいじくりまわすための準備に関して。

##環境

* Mac OS X Mountain Lion 10.8.2
* Xcode 4.5.1
* openFrameworks0073

##セットアップ手順
GithubのReadmeより。

### openFrameworksにaddon追加
	cd /path/to/openFrameworks/addons/
	git clone https://github.com/gameoverhack/ofxOpenNI.git
	cd ofxOpenNI
	git checkout master
	cd ..

### 新しいプロジェクト作成
	cp -r examples/empty/emptyExample apps/myApps/openNIExample

### 必要なライブラリをコピー
	cp -r addons/ofxOpenNI/mac/copy_to_data_openni_path apps/myApps/openNIExample/bin/data/openni

### プロジェクトに追加
Xcodeにて、addonsグループの直下にofxOpenNIグループを作成する
次にaddons/ofxOpenNI直下にあるsrcとincludeフォルダをドラッグ・アンド・ドロップでXcodeのofxOpenNIグループに追加する。
また、先ほどコピーした、openniの直下のlibも同様にドラッグ・アンド・ドロップでofxOpenNIグループに追加する。

### includeする
以下のコードをtestApp.hに追加する。

	#include "ofxOpenNI.h"

------------
以上でエラー無く実行できた。

**けれども自分の環境ではSensorKinect周りで不具合があるのか、Kinectが上手く検出されなかった。**

ちなみに、本当に手っ取り早くoF上でKinectを動かしたいなら、
`ofxKinect`
をセットアップして利用すること。
この中のサンプルは何事も無く動作した。

解決次第、また投稿する。
phpで科学記法の文字列を10進法の数値に変換する

さっき会社で

> phpで1.234e+5を123400に変換するにはどうしたらいい？

というのを聞かれて調べたのでメモ。
とりあえずstrtoint的なものがあるんじゃないかな？と思いぐぐると[intval()](http://au1.php.net/manual/ja/function.intval.php)が出てきたので実際試すと

```
[$] <> php -r 'echo intval("1.234e+5");'
1
```

駄目。
こういう記法を科学記法と言うらしいことを聞いたので、php 科学記法とかでぐぐると [sprintf()](http://php.net/manual/ja/function.sprintf.php) が出てきた。聞いてきた人が試したけど駄目だったって言ってたけど一応やってみる。

```
[$] <> php -r 'echo sprintf("%e", "1.234e+5");'
1.234000e+5
```

いや、そうじゃない、それじゃない。
そんで他に適当にぐぐっても確かに出てこない。で、phpだしよしなにキャストしてくれるんちゃうと思ってfloatにキャストしてみた。

```
[$] <> php -r 'echo (float)"1.234e+5";'
123400
```

bingo!

確かにぐぐって出てこなかったら分からんかもなーっておもた。