OmniAICreator/Qiita-1.07M huggingface dataset:
大量の連番画像ファイルを100枚ずつフォルダ分け

0000.jpg から 9999.jpg まである10000枚の画像ファイルを100枚ずつフォルダ分けしたいとき、zshなら簡単。

```sh
for i in {00..99}
do
mkdir $i
mv $i*.jpg $i
done
```

これでフォルダ内に 00 から 99 までのディレクトリが作成され、そこに100枚ずつ画像が入る。
画像が連番でないなら、上手くfor文を書き換えるなり http://qiita.com/items/9e4c984f346b5265da07 で連番にしてしまってから移動するなり好きな方法でどうぞ。
BetterTouchToolで、タッチパッドのジェスチャーをカスタマイズする


BetterTouchTool をインストールすると、トラックパッド(マウス)ジェスチャーをカスタマイズすることができます。

# カスタマイズ例

私は、以下のようにカスタマイズしています。ブラウジングが快適♪

## Global（一般）

* __`COMMAND` + 右上をタップ__ - Finder起動 ※1
* __右下をクリック__ - 選択している文字列をGoogle検索(タッチではなくクリックです）
* __`COMMAND` + `CONTROL` + 右中央をタップ__ - アクティブな画面を、デスクトップの右半分にリサイズ
* __`COMMAND` + `CONTROL` + 左中央をタップ__ - アクティブな画面を、デスクトップの左半分にリサイズ
* __`COMMAND` + `CONTROL` + 上中央をタップ__ - アクティブな画面を、デスクトップの上半分にリサイズ
* __`COMMAND` + `CONTROL` + 下中央をタップ__ - アクティブな画面を、デスクトップの下半分にリサイズ
* __`COMMAND` + `CONTROL` + ピンチアウト__ - アクティブな画面を最大化
* __`COMMAND` + `CONTROL` + ピンチイン__ - アクティブな画面を最小化

* __`COMMAND` + ドラッグ__ - 画面の移動
* __`CONTROL` + ドラッグ__ - 画面のリサイズ

※1 暴発を防ぐため`COMMAND` キーを押しながらでないと起動しないようにしました

## Google Chrome インターネットブラウザ

* __左中央をタップ__ - 右のタブに移動
* __右中央、もしくは右上をタップ__ - 右のタブに移動
* __下中央をタップ__ - 現在のタブを閉じる
* __上中央をタップ__ - 最後に閉じたタブを開く ※2
* __三本指でタップ__ - ミドルクリック(リンクを別のタブで開く)

※2.もしかすると、Google Chrome拡張「Sexy Undo Tab」をインストールしていないと、このキーボードショートカットは使えないかもしれません。

![ブラウジング時の操作](https://lh3.googleusercontent.com/-KoJf-Bg2dNA/T6hVtsl0vQI/AAAAAAAAECQ/Jl_-TVPwU5Q/s400/skitched-20120508-080533.png)

# 手順

1. [BetterTouchTool](http://blog.boastr.net/) をダウンロードしてインストールする

2. あとはタスクバーの__Preferences__から以下の手順で設定を行う

## ジェスチャー設定(Global)

![Globalのジェスチャー設定](https://lh5.googleusercontent.com/-vtv7A_UODek/T6qD91bfQDI/AAAAAAAAECc/H2QoI9963Yk/s400/BetterTouchTool.png)

## ジェスチャー設定(GoogleChrome)

![Chromeのジェスチャー設定](https://lh6.googleusercontent.com/-c_CW8E0t_m0/T6qKpI0bjnI/AAAAAAAAECs/wqaY47_OARc/s400/BetterTouchTool-1.png)

## General Settings

![General Settings](https://lh4.googleusercontent.com/-Vy3RUCgCOvQ/T6qKoSt81GI/AAAAAAAAECo/j6IO9RUn3u8/s400/BetterTouchTool-3.png)

## ウィンドウスナップの設定

![ウィンドウスナップの設定](https://lh4.googleusercontent.com/-QmB0rlhBOCo/T6qKpi_f8tI/AAAAAAAAEC0/zQKYIaS18rY/s400/BetterTouchTool-4.png)

## ウィンドウ移動とリサイズ

![ウィンドウ移動とリサイズ](https://lh4.googleusercontent.com/-FH0hgGq2D3s/T6qQIRPkftI/AAAAAAAAEDQ/GG5h713Nx5A/s400/BetterTouchTool-6.png)

* `CONTROL`キーを押しながらドラッグすると、ウィンドウの移動ができます。
* `COMMAND`キーを押しながらドラッグすると、ウィンドウのリサイズができます。

## アプリスイッチャー

![アプリスイッチャー](https://lh5.googleusercontent.com/-wdx5sdQ2V_E/T6qQIJwi05I/AAAAAAAAEDM/VXoHe72468M/s400/BetterTouchTool-5.png)
解像度毎に適切なサイズを算出する

解像度にあったサイズを割り出すには下記の比率を覚えておくと便利。
#3:4:6:8
(左から ldpi, mdpi, hdpi, xhdpi)
mdpiで100pxの画像をhdpiで同じ見た目に仕上げたい場合は
　　4:6=100:x ⇒ x=150
となり、150pxの画像を用意すれば良いことになります。
参考：http://yuki312.blogspot.jp/2012/02/blog-post.html
規約に従っていないモデルをグローバルFixtureとして定義する(rspec-rails-1.3.4)


どのexampleでもロードさせたいFixtureについては、spec_helperに定義すると便利です。

```ruby:spec_helper.rb
Spec::Runner.configure do |config|
…
  config.global_fixtures = :table_name
…
end
```

ところが、**テーブル名は"table_names"で、モデル名は"ModelName"**というように、ActiveRecordの規約に従っていない場合、以下のようなエラーが出てロードできません。

```bash:
Unable to load table_name, underlying cause no such file to load -- table_name
```

もちろん、ExampleGroupの中でFixturesを宣言する場合は、以下のようにset_fixture_classを定義すれば、テーブル名とモデル名をマッピングしてロードしてくれます。

```ruby:hoge_spec.rb
describe 'hoge' do
  set_fixture_class :table_names => ModelName
  fixtures :table_names
…
end
```

グローバルなfixturesではどうしたらいいのでしょうか？それらしきメソッドは探してもありませんでした。

そこで、rspec-railsのソースをみてみると、global_fixtures=などのメソッドは、ActiveSupport::TestCaseのクラスメソッドを呼んでいるだけでした。試しに、以下のように書くと、グローバルfixtureもロードされるようになりました。

```ruby:spec_helper.rb
Spec::Runner.configure do |config|
…
　ActiveSupport::TestCase.set_fixture_class :table_names => ModelName
  config.global_fixtures = :table_names
…
end
```

参考: https://github.com/dchelimsky/rspec-rails/blob/master/lib/spec/rails/extensions/spec/runner/configuration.rb
ruby1.9.3-p194のビルド

Macのruby1.9.3-p194でrspecが時折SEGVするので入れ直すことにした。

以下手順。
Xcodeをアンインストールしてosx-gcc-installerを使えと書いてあるところもあるけど、Xcodeでもできる（はず）

##osx-gcc-installerを使う場合
osx-gcc-installerを入れる。
https://github.com/kennethreitz/osx-gcc-installer
確認:
% gcc -v
gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00)

##Xcodeを使う場合
Xcodeを起動し、Downloadsからcommand line toolsを入れる。
確認:
% cc --version
Apple clang version 3.1 (tags/Apple/clang-318.0.58) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin11.3.0
Thread model: posix

##openssl,libyaml,readline,libksbaを入れる
% brew install openssl libyaml readline libksba

##ビルド
% rvm reinstall 1.9.3 -C "--with-opt-dir=/usr/local" --with-gcc=clang

最初command line toolsを入れずにビルドしたらビルド中にSEGVしたんだけど、その時のccは
% cc --version                                                                                                                                                                                                                                                              i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

でgccになっていた。つまりccがllvmでないとだめなのかな？
まぁ解決したっぽい。
ファイルのn行目以降を表示する

`-n`オプションに対する値に`+`を使う

```
$ cat lines.txt
line_1
line_2
line_3
line_4
line_5
line_6
line_7
line_8
line_9
$ tail -n 3 lines.txt
line_7
line_8
line_9
$ tail -n +3 lines.txt
line_3
line_4
line_5
line_6
line_7
line_8
line_9
```

`-n`オプションを省略する使い方は現在のPOSIXバージョンではサポートされていない。`_POSIX2_VERSION=199209`と環境変数をセットすることで使用できる。

```
$ tail +3 lines.txt
tail: cannot open `+3' for reading: No such file or directory
$ _POSIX2_VERSION=199209 tail +3 lines.txt
line_3
line_4
line_5
line_6
line_7
line_8
line_9
```
継承を定義する


クラシカルなクラス継承を実現するサンプル。
backbone.jsを元にしてます。


```javascript
(function (win, doc, exports) {

    var ctor = function () {};

    function copyClone(obj) {

        var args = Array.prototype.slice.call(arguments, 1),
            l    = args.length,
            i    = 0,
            src, prop;

        for (; i < l; i++) {
            src = args[i];
            for (prop in src) {
                obj[prop] = args[i][prop];
            }
        }

        return obj;
    }

    function inherit(_super, protoProps, staticProps) {

        var child;

        //copy constructor to `child` if it has constructor property as own property.
        if (protoProps && Object.prototype.hasOwnProperty.call(protoProps, 'constructor')) {
            child = protoProps.constructor;
        }

        //else, child is function as to apply `_super`.
        else {
            child = function () {
                _super.apply(this, arguments);
            };
        }

        //copy _super property to child.
        copyClone(child, _super);

        //store the temporary _super.prototype in ctor.prototype.
        ctor.prototype = _super.prototype;

        //create instance to child.prototype as new ctor.
        child.prototype = new ctor();

        //if the protoProps is defined, copy it to child.
        if (protoProps) {
            copyClone(child.prototype, protoProps);
        }

        //if the staticProps is defined, copy it to child.
        if (staticProps) {
            copyClone(child, staticProp);
        }

        //child.prototype.constructor is child.
        child.prototype.constructor = child;

        //Finally, _super.prototype is stored in child.__super__ property.
        child.__super__ = _super.prototype;
    
        return child;
    }

    /* ------------------------------------------------------------------
        EXPORTS
    --------------------------------------------------------------------- */
    exports.inherit = inherit;
    exports.copyClone = copyClone;

}(window, document, window));
```
MySQLのレプリケーションログを無効にする

サーバのディスクがあふれてしまい、調査したところMySQLデータが肥大化していました。その対処方のメモ書きを残しておきます。

MySQL本家が配布しているrpmでいれたのですが、それについてきた設定ファイルをほぼそのまま使っていました。それだと、レプリケーションのログを出力するようになっており、ほっておくとmysql-bin.00001というファイルがたくさんできてました。レプリケーションは必要ないので無効にします。

その前にいままで蓄積されているレプリケーションのログを消します。

```
$ mysql -u root -p
> PURGE MASTER LOGS before now();
```

MySQLの設定ファイル /etc/my.cnf を編集します。下記をコメントアウトします。

```
log-bin=mysql-bin
binlog_format=mixed
```

MySQLを再起動します。

```
$ sudo /etc/init.d/mysql restart
```

以上です。
jqGridをRails 3.2.2で使用する

ちゃんと動かせていないけど、とりあえず途中までのメモ。

##インストール

```sh
gem install jqgrid_rails
```

```ruby:Gemfile
gem 'jqgrid_rails'
```

```sh
bundle install
rake jqgrid_rails:install
```

この時点で試しにサーバを起動してみたところエラーが発生。
writeexcelなるものがないとのことなのでインストール。

```sh
gem install writeexcel
```

```ruby:Gemfile
gem 'writeexcel'
```

```sh
bundle install
rake jqgrid_rails:install
```

これで正常にサーバが起動できた。

##設定

何もしなくても```/assets/```配下にjs、cssファイルが設定されるみたいだったけど、そうはならないのでとりあえず[配布元](http://www.trirand.com/blog/?page_id=6)からダウンロードし、ファイル名を```jqgrid_rails.js```、```jqgrid_rails.css```として```/app/assets```配下にコピー。

```js:/app/assets/javascripts/application.js
//= require jqgrid_rails
```

```css:/app/assets/stylesheets/application.css
*= require jqgrid_rails
```

##サンプル

とりあえずサンプルを動かそうとしたけど、undefinedとか表示されて動作しない。

```ruby:/app/controllers/products_controller.rb
def show
  @product = Product.find(params[:id])

  respond_to do |format|
    format.html do
      @grid = JqGridRails::JqGrid.new('test_grid',
        :url => products_url,
        :height => '100%',
        :width => 300,
        :caption => 'Test',
        :pager => true,
        :row_num => 10,
        :autowidth => true
      )
      @grid.add_column('Name', 'name')
    end
  end

end
```

```erb:/app/views/products/show.html.erb
<%= jqgrid(@grid) %>

<%= link_to 'Edit', edit_product_path(@product) %> |
<%= link_to 'Back', products_path %>
```
X-UA-Compatibleについて

IE8以降でドキュメント互換を制御することができる機能。
meta要素で設定することができる。

```html
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
```
以下、箇条書きメモ

- IE8以降にドキュメント互換性という概念で「X-UA-Compatible」が追加された。
- X-UA-CompatibleはWEB標準をサポートすることもできるし、旧ブラウザと同じように表示させることができる.
- title要素や他のmeta要素より上に置く必要がある
- edgeモードは使用可能な最高のモードでコンテンツを表示する
- Google Chrome Frameを使用する場合はcontent属性に「chrome=1」を追加する
RubyMotion アプリの文法に誤りがないか確認


RubyMotion でも Ruby のコードに文法上の誤りが無いかチェックされエラーがあれば処理が中断されますが、コンパイルも同時に行われます。

文法に誤りがないか確認したいだけであれば、プロジェクトの Rakefile に以下を追加し `rake syntax` とコマンドを実行します。MacRuby を使って文法確認しているので、あらかじめ MacRuby をインストールしておいてください。 

```ruby:Rakefile
desc "Checks the syntax"
task :syntax do
  Motion::Project::App.setup do |app|
    app.files.each do |file|
      result = `macruby -c #{file}`.chomp
      raise "Syntax Error: #{file}" unless result == "Syntax OK"
    end
  end
end
```
MongoDBのシャーディングをローカルで動作確認する

##configサーバーの起動

configサーバーを起動する。configサーバーはシャーディングの設定などが保存される。

```bash:configサーバーの起動
$ mongod --port 27030 --dbpath=config
```

##mongosの起動

起動時にconfigサーバーを指定する。
オプションでchanksizeを指定できる。省略すると200MBになる。ここではテストのため1MBを指定する。

```bash:mongosの起動
$ mongos --port 27017 --configdb localhost:27030 --chunkSize 1
```

##各シャードの起動

```bash:各シャードの起動
$ mongod --port 27021 --dbpath=shard1
$ mongod --port 27022 --dbpath=shard2
$ mongod --port 27023 --dbpath=shard3
```

##シャーディングの設定
mongosに接続して各シャードを関連付ける

```bash:mongosへの接続
$ mongo localhost:27017/admin
MongoDB shell version: 1.7.5connecting to: admin
> db.runCommand({"addShard" : "localhost:27021"})
> db.runCommand({"addShard" : "localhost:27022"})
> db.runCommand({"addShard" : "localhost:27023"})
> db.adminCommand({"enableSharding" : "db_name"})
> db.adminCommand({"shardCollection" : "db_name.collection_name", key : {"key_name" : 1}})
```

あとはmongosに接続してオラオラすればよい

```bash:mongosへの接続
$ mongo localhost:27017/db_name
MongoDB shell version: 1.7.5connecting to: db_name
> 
```
fwrite関数で改行コードを入れる


複数行のデータからCSVファイルを生成するときに、
fputcsv関数を使うと、必要なデータによしなにダブルクォーテーションをつけてくれるのだけど、
この勝手クォーテーションがどうしても邪魔だったので、fwrite関数を使用することにした。
fwrite関数を使用する場合は改行コードを自分でつけなければならないので、以下のように書いてみた。

```php
$line = 'hoge';
$fp = fopen('data.txt', 'w');
fwrite($fp, $line.'¥n');
```

ところが、これだと「¥n」がそのまま出力された。
そこで最終行を、

```php
fwrite($fp, $line."¥n");
```

としてやるときちんと改行された。
これはPHPの仕様で、ダブルクォーテーションで囲まれた文字列が論理的解釈によって展開されるからで、その中にはエスケープシーケンスや変数を含めることができる。
逆にシングルクォーテーションだと単なる文字列として解釈される。
折り畳み表示する見出しレベルを切り返えるコマンド


以前、[markdown-mode の折りたたみ表示機能 - わからん](http://d.hatena.ne.jp/kitokitoki/20120206/p1/) というブログ記事を書きました。# の見出しだけを表示, # と ## の見出しだけを表示, # と ## と ### の見出しだけを表示、をクルクルと一つのコマンドで実行できると一覧性があがります。次のように実現してみました。

```scm:.emacs
    (make-variable-buffer-local 'my-outline-level)
    (setq-default my-outline-level 1)

    (defun my-global-cycle-md ()
      (interactive)
      (cond
       ((eq my-outline-level 1)
        (hide-sublevels 2)
        (setq my-outline-level 2))
       ((eq my-outline-level 2)
        (hide-sublevels 3)
        (setq my-outline-level 3))
       ((eq my-outline-level 3)
        (hide-sublevels 1)
        (setq my-outline-level 1))))
```
各コンポーネント毎にHWアクセラレーションを設定する方法

・Application

```xml:qiita.rb
<application ...="" android:hardwareaccelerated="true">
```


・Window

```java:qiita.rb
getWindow().setFlags(
    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
```


・View

```java:qiita.rb
myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
```


参考：[Yukiの枝折: Android:ハードウェアアクセラレーション](http://yuki312.blogspot.com/2012/05/android.html)
DebianにD言語コンパイラdmdをインストール

まず，コンパイラをダウンロードする．

```sh
$ wget https://github.com/downloads/D-Programming-Language/dmd/dmd.2.059.zip
$ unzip dmd.2.059.zip
$ cd dmd2
```

後は，バイナリや設定ファイルを適切な場所にコピーすれば良い．
僕は，野良インストールは [paco](http://paco.sourceforge.net/) によって管理することにしているので，まず，インストール用のスクリプトを書く．

```sh:dmd2/install.sh
#!/bin/bash

mkdir -p /usr/local/bin
mkdir -p /usr/local/lib64
mkdir -p /usr/local/src
mkdir -p /usr/local/share
cp linux/bin64/dmd.conf /etc
cp linux/bin64/ddemangle /usr/local/bin
cp linux/bin64/dman /usr/local/bin
cp linux/bin64/dmd /usr/local/bin
cp linux/bin64/dumpobj /usr/local/bin
cp linux/bin64/obj2asm /usr/local/bin
cp linux/bin64/rdmd /usr/local/bin
cp linux/lib64/libphobos2.a /usr/local/lib64
cp -r src/* /usr/local/src
cp -r man /usr/local/share
```

以上のファイルを paco を通じて実行する．

```sh
$ chmod +x install.sh
$ sudo paco -D ./install.sh
```

次に `/etc/dmd.conf` を以下のように書き換える．

```ini:/etc/dmd.conf
[Environment]

DFLAGS=-I/usr/local/src/phobos -I/usr/local/src/druntime/import -L-L/usr/local/lib64 -L--no-warn-search-mismatch -L--export-dynamic
```

以上でインストールは終了．とりあえず，Hello World を動かしてみる．

```sh
$ echo 'import std.stdio; void main() { writeln("Hello, World!"); }' > test.d
$ rdmd test.d
Hello, World!
```

後でアンインストールしたくなったら以下のコマンドを実行する．

```sh
$ sudo paco -r dmd2
```
phpでの配列結合


phpで配列同士を結合した時の挙動。
勘違いしてたので、メモ用に。


```php:sumArray.php
<?php

    // 配列$x,$y宣言
    $x[0] = 1;
    $x[1] = 5;
    $x[2] = 10; 
    $x[3] = 20; 

    $y[2] = 3;
    $y[4] = 22; 

    // $xと$yを結合
    $z = $x + $y; 

    // 表示
    foreach($z as $key => $value){
            echo '$z['.$key.'] => '. $value . "\n";
    }   
?>


```

```php
//出力結果
$z[0] => 1
$z[1] => 5
$z[2] => 10
$z[3] => 20
$z[4] => 22
```

若干、分かりづらいけど、
要は配列同士を+したら同じ位置にある値が上書きされると思ってたけど、
実は**空いてる要素にしか代入してなかった**って話しでした。
ControllerなどView以外からurl_helpers（_url,_path）を呼ぶ


````ruby
routes = Rails.application.routes.url_helpers 
routes.hoge_article_path
````

とか。ただし文脈によっては_urlは使えず、以下のようなエラーが出る。

````ruby
05:17:40:pry % routes.api_hoge_fuga_url
ArgumentError: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
from /path/to/app/vendor/bundle/ruby/1.9.1/gems/actionpack-3.1.0/lib/action_dispatch/http/url.rb:25:in `url_for'
````

この場合は、上記エラー文にあるとおり

`````ruby
05:17:51:pry % routes.api_hoge_fuga_url(host: 'homu.local')
=> "http://homu.local/api/hoge/fuga"
`````

こうすれば使える。
Vimで作業しながらブラウザをリロード


~~~~~applescript:~/bin/reload.scpt
if application "Safari" is running then	tell application "Safari"		do JavaScript "location.reload(true);" in document 1	end tellend ifif application "Google Chrome" is running then	tell application "Google Chrome" to reload active tab of window 1end if~~~~

このapplescriptを`~/bin/reload.scpt`とかに+xして置いて、vimから呼び出す。

~~~~vim:.vimrc
augroup MyBrowserReload
  command! -bar BrowserReload silent !osascript $HOME/bin/reload.scpt
augroup END
nnoremap <silent> <Leader>rl :BrowserReload<CR>
~~~~

これでvimでファイルを編集しつつ`<Leader>rl`でリロードできる。…が、リロードする度にtmuxが爆発してしまい微妙にスタメンから外れている。
Railsアプリを本番環境とステージング環境にデプロイ～capistrano-ext

Railsアプリケーションを本番環境とステージング環境にデプロイするために、capitrano単体だと面倒くさそうだったのでcapistarano-extというgemをいれました。

```
$ [sudo] gem install capitrano-ext
```

config/deploy.rbに下記のrequireを追加します。

```
require "capistrano/ext/multistage"
```

deployというディレクトリを作成して、下記のファイル名のファイルを作成します。

```
config/deploy/production.rb
config/deploy/staging.rb
```

そうすると、productionとstagingという環境が作成されます。

それぞれのファイルにそれぞれの環境毎の設定が書けます。共通部分はconfig/deploy.rbに書いて、production.rb, staging.rbは差分だけ書くようにします。

ステージング環境にデプロイするときは下記の様に実行します。

```
$ cap staging deploy:update
```

これで、本番環境とステージング環境にデプロイできるようになったのですが、デフォルトだとrake db:migrate とかした際にRAILS_ENV=productionで実行してしまいます。RAILS_ENV=staging にしたい場合は deploy/staging.rbに下記を追加します。

```
set :rails_env, "staging"
```
Javascript関数の書き方いろいろ


## 通常表記

```javascript
// どこからでも呼べる
foo(); // bar
function foo(args){
	console.log('bar');
}
```

## 変数に関数を割り当て

```javascript
var foo = function(args){
	console.log('bar');
};
foo(); // bar
foo.bar(); // undefine

foo.bar = function(args){
	console.log('foo bar');
};
foo(); // bar
foo.bar(); // foo bar
```

```javascript
var foo = {
	bar : function(args){
			console.log('foo bar');
		},
	hoge: function(args){
			console.log('foo hoge');
		}
};
foo(); //TypeError: object is not a function
foo.bar(); // foo bar
foo.hoge(); // foo hoge
```
Excelの共有ブックの解除方法

1.「ツール」-「ブックの共有」-「編集タブ」をクリック
2.「現在このブックを開いているユーザー」のボックスに自分の名前だけが表示されていることを確認
3.「複数のユーザーによる同時編集と、ブックの統合を許可する」のチェックを外す
日時 ⇔ 文字列

time_struct から文字列にしたり、文字列から time_struct にします。

```pycon:
>>> import time
>>> now = time.localtime()
>>> now
time.struct_time(tm_year=2012, tm_mon=5, tm_mday=8, tm_hour=4, tm_min=3, tm_sec=
42, tm_wday=1, tm_yday=129, tm_isdst=0)

>>> str_now = time.strftime('%c', now)
>>> str_now
'05/08/12 04:03:42'
>>> time.strptime(str_now, '%c')
time.struct_time(tm_year=2012, tm_mon=5, tm_mday=8, tm_hour=4, tm_min=3, tm_sec=
42, tm_wday=1, tm_yday=129, tm_isdst=-1)

>>> str_now = time.strftime('%Y/%m/%d %H:%M:%S', now)
>>> str_now
'2012/05/08 04:03:42'
>>> datetime.datetime.strptime(str_now, '%Y/%m/%d %H:%M:%S')
time.struct_time(tm_year=2012, tm_mon=5, tm_mday=8, tm_hour=4, tm_min=3, tm_sec=
42, tm_wday=1, tm_yday=129, tm_isdst=-1)
```

`time.strftime()` および `time.strptime()` のフォーマット文字列は[ドキュメント](http://www.python.jp/doc/release/library/time.html#time.strftime "15.3. time — 時刻データへのアクセスと変換") の通り。C 言語と同じみたいです。

その他 time.asctime() で C 言語の asctime() と同じフォーマットにしてくれるみたいですが、この文字列を struct_time に変換する方法は用意されていないようです。

```pycon:
>>> asctime = time.asctime()
>>> asctime
'Tue May  8 04:03:42 2012'
>>> time.strptime(asctime, '%a %b %d %H:%M:%S %Y')
time.struct_time(tm_year=2012, tm_mon=5, tm_mday=8, tm_hour=4, tm_min=3, tm_sec=
42, tm_wday=1, tm_yday=129, tm_isdst=-1)
```

time と datetime の区別がついてないのですが、日付の加減算を行わない場合は time でいいような気がします。
ニコニコで再生情報を取得する

http://istb16.wordpress.com/2012/05/02/niconico-zero-player/ が参考になりました。

```run.js`
for(i in WatchApp.namespace.model.player.NicoPlayerConnector){
	try{
		t=typeof(WatchApp.namespace.model.player.NicoPlayerConnector[i]);
		if(i=="onNicoPlayerInitializerReady"||i=="onGetFLVLoaded"||i=="closeSettingsPanel"||i=="onCommentListCreated"||i=="onCommentListUpdated"||
			i=="onPlayerViewSizeUpdated"||i=="onUneiCommentReceived"||i=="onEarthquakeAlertReceived"||i=="onLiveMsgCommentReceived"||i=="toggleMaximizePlayer"||
			i=="onNicowariStarted"||i=="onNicoPlayerClicked"||i=="onControlPanelVisibleUpdated"||i=="onCommentShutterOpened"||i=="onCommentShutterClosed"||
			i=="onKeyboardPressed"||i=="updatePlayerConfig"||i=="updateCommentList"||i=="playVideo"||i=="stopVideo"||
			i=="updatePlayerViewMode"||i=="pauseVideo"||i=="seekVideo"||i=="getNicoruHistory"||i=="CommentListNames"){t="f"}
		if(i=="[object Object]"){t="object";}
		switch(t){
			case "string":
				console.log("WatchApp.namespace.model.player.NicoPlayerConnector."+i+"=S:"+WatchApp.namespace.model.player.NicoPlayerConnector[i]);
				break;
			case "boolean":
				console.log("WatchApp.namespace.model.player.NicoPlayerConnector."+i+"=B:"+(WatchApp.namespace.model.player.NicoPlayerConnector[i]?"true":"false"));
				break;
			case "function":
				console.log("WatchApp.namespace.model.player.NicoPlayerConnector."+i+"=F:"+WatchApp.namespace.model.player.NicoPlayerConnector[i]());
				break;
			case "f":
				console.log("WatchApp.namespace.model.player.NicoPlayerConnector."+i+"=F:"+WatchApp.namespace.model.player.NicoPlayerConnector[i]);
				break;
			case "object":
				console.log("WatchApp.namespace.model.player.NicoPlayerConnector."+i+"=O:%o",WatchApp.namespace.model.player.NicoPlayerConnector[i]);
				break;
			default:
			console.log("WatchApp.namespace.model.player.NicoPlayerConnector."+i+"="+t);
		}
	}catch(e){}
}
UbuntuにPostgreSQLをいれる

MySQL派なのですが、最近Herokuをよくいじるようになったので、開発環境にPostgreSQLをいれたときの備忘録を書いておきます。

## 環境

Ubuntu11.10

## インストールと設定

apt-get経由でいれました。

```
$ sudo apt-get install postgresql
```

普段開発に使っているユーザをpostres内に作成します。

```
$ sudo su - postgres
$ createuser hirotaka
Shall the new role be a superuser? (y/n) y
$ exit
```

後々、Railsなどで開発をしやすいように設定を変更しておきます。

下記の設定ファイルを編集します。

```
/etc/postgresql/9.1/main/pg_hba.conf
```

以下を編集します。

```
# "local" is for Unix domain socket connections only
local   all             all                                     peer
```

peerとなっている箇所をtrustに変更します。

```
# "local" is for Unix domain socket connections only
local   all             all                                     trust
```

これはローカルからの接続であれば、認証なしで無条件で接続を許可する設定になります。あくまでも開発環境なのでゆるい設定にしました。

設定を読み直します。

```
$ sudo /etc/init.d/postgresql reload
```

psqlで接続して動作を確認します。
AWSのRegionを東京に固定する


参考: http://d.hatena.ne.jp/rx7/20100612/p1

全世界にあるregionのうちTOKYO(ap-northeast-1)しか使ってないのに、いちいちコマンドで`--region`を指定するのは面倒だ。

~~~~~~bash
$ ec2-describe-regions
REGION  eu-west-1       ec2.eu-west-1.amazonaws.com
REGION  sa-east-1       ec2.sa-east-1.amazonaws.com
REGION  us-east-1       ec2.us-east-1.amazonaws.com
REGION  ap-northeast-1  ec2.ap-northeast-1.amazonaws.com
REGION  us-west-2       ec2.us-west-2.amazonaws.com
REGION  us-west-1       ec2.us-west-1.amazonaws.com
REGION  ap-southeast-1  ec2.ap-southeast-1.amazonaws.com
~~~~~~~~

.bashrcとか.bash_profileあたりに以下の指定を追加する。

~~~~~~~~~~~diff:~/.bashrc
AWS_CREDENTIAL_FILE=/path/to/the/credential-file;  export AWS_CREDENTIAL_FILE
EC2_PRIVATE_KEY=pk-xxxxxxxxxx.pem;                 export EC2_PRIVATE_KEY
EC2_CERT=cert-xxxxxxxxxxxxxxx.pem;                 export EC2_CERT
+EC2_URL=https://ec2.ap-northeast-1.amazonaws.com; export EC2_URL
+EC2_REGION=ap-northeast-1;                        export EC2_REGION
~~~~~~~~~~~

EC2_URLとEC2_REGION。
The executable was signed with invalid entitlements


メモ書き

## 症状

Release ビルドで、新しくProvisionProfileを作成してデバイスで`実行`時に発生

## エラー内容

The entitlements specified in your application’s Code Signing Entitlements file do not match those specified in your provisioning profile. (0xE8008016)

## 対処方法

デバイス側のProvisionProfileを、Xcodeから削除し、Device側でも削除。
その後`実行`をすれば発生せず。


`get-task-allow` は Xcode 4.x からは必要なくなったとか何処かにあった気が……


参考:
[The executable was signed with invalid entitlements. のアラート対策 その2 - io_oの日記 / iOS Dev（iPhone,iPad）](http://d.hatena.ne.jp/io_o/20110413/1302705951)
[”CodeSign error” ”The entitlements file” Entitlements.plist ”is missing”が出た場合の対処法 - 拡張現実ライフ](https://akio0911.net/archives/3359)
[ios - Xcode 4.3.2 adhoc signing entitlements (0xE8008016) - Stack Overflow](https://stackoverflow.com/questions/10025607/xcode-4-3-2-adhoc-signing-entitlements-0xe8008016)
自動テストやコンパイルを簡単に記述するためのauto-shell-command.elを作った


'auto-shell-command.el'は、ファイルセーブ時に指定したシェルコマンドを実行することが出来るものです。似たようなツールとしては flymake や autotest、Guard があります。

[ongaeshi/auto-shell-command - Github](https://github.com/ongaeshi/auto-shell-command)

## 特徴
1. **ファイル名単位** で実行するコマンドを指定することが出来る
2. **一時的にコマンドの実行をON/OFF**することが出来る(まとめて複数のファイルを編集する時に便利)
3. ファイルの監視からプロセスの実行までEmacsの機能でまかなっているため安定して動作する。Emacsが動く全てのOSで動作する。
4. 外部ツールによるファイル書き換えによって起こる期待していなかったコマンドの誤作動が起きない
5. Emacs再起動時に消える一時的なコマンドを登録することが出来る

## インストール
'emacs-deferred'が必要です。

```elisp:
(auto-install-from-url "https://github.com/kiwanami/emacs-deferred/raw/master/deferred.el")
```

インストール後、`auto-shell-command`をインストールして下さい。

```elisp:
(auto-install-from-url "https://raw.github.com/ongaeshi/auto-shell-command/master/auto-shell-command.el")
```

## 初期設定

```elisp:init.el
(require 'auto-shell-command)

;; キーバインドの設定 (一時的にauto-shell-commandの実行をON/OFFする)
(global-set-key "\C-c\C-m" 'ascmd:toggle)

;; 結果の通知をGrowlで行う (optional)
(defun ascmd:notify (msg) (deferred:process-shell (format "growlnotify -m %s -t emacs" msg))))

;; エラー時のポップアップを見やすくする (optional, '(require 'popwin)'が必要です)
(push '("*Auto Shell Command*" :height 20) popwin:special-display-config)
```

## コマンドリストの設定
コマンドリストを設定すると色々なことが出来ます。

とある**C言語のプロジェクト**の設定例

```elisp
;; 下が優先高
(ascmd:add '("/path/to/dir"                  "make"))     ; 基本は'make'
(ascmd:add '("/path/to/dir/.gitignore"       "make run")) ; ルートフォルダ直下の'.gitignore'を触ったら'make run'(実行)
(ascmd:add '("/path/to/dir/doc"              "make doc")) ; 'doc'以下を触ったら'make doc'(ドキュメント生成)
(ascmd:add '("/path/to/dir/BBB"              "(cd /path/to/dir/AAA && make && cd ../BBB && make)")) ; BBBをビルドする時は先にAAAをビルドする必要が・・・(良くあることだよね？)
```

とある**Rubyプロジェクト**の設定例

```elisp
(ascmd:add '("/path/test/runner.rb"          "rake test"))                     ; 'test/runner.rb'を触ったらフルテスト(時間がかかる)
(ascmd:add '("/path/test/test_/.*\.rb"       "ruby -I../lib -I../test $FILE")) ; 'test/test_*.rb'を触ったら編集したファイルだけを単体でテスト(時間節約)
```

ブラウザとの連携

```elisp
(ascmd:add '("Resources/.*\.js" "wget -O /dev/null http://0.0.0.0:9090/run")) ; 'Resources/*.js'以下を触ったら'http://0.0.0.0:9090/run'にアクセス
```

## ご意見募集中

わかりにくい部分やバグがありましたらコメント等でお知らせ下さい。
GVIM をコマンドラインから起動する時、多重起動しない ＋行番号指定


```
> gvim --remote-silent +[行番号] [ファイル]
```

別のタブで開く場合にはこう。

```
> gvim --remote-tab-silent +[行番号] [ファイル]
```

# 参考

```
>gvim --help

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Mar 29 2012 09:55:56)

使用法: vim [引数][ファイル..]    あるファイルを編集する
   もしくは: vim [引数]-               標準入力からテキストを読込む
   もしくは: vim [引数]-t タグ         タグが定義されたところから編集する
   もしくは: vim [引数]-q [errorfile]  最初のエラーで編集する

引数:
   --   このあとにはファイル名だけ
   --literal  ワイルドカードを展開しない
   -g   GUIで起動する ("gvim" と同じ)
   -f or  --nofork フォアグラウンド: GUIを始めるときにforkしない
   -v   Viモード ("vi" と同じ)
   -e   Exモード ("ex" と同じ)
   -E   Improved Ex mode
   -s   サイレント(バッチ)モード ("ex" 専用)
   -d   差分モード ("vidiff" と同じ)
   -y   イージーモード ("evim" と同じ, モード無)
   -R   読込専用モード ("view" と同じ)
   -Z   制限モード ("rvim" と同じ)
   -m   変更 (ファイル保存時) をできないようにする
   -M   テキストの編集を行なえないようにする
   -b   バイナリモード
   -l   Lispモード
   -C   Vi互換モード: 'compatible'
   -N   Vi非互換モード: 'nocompatible
   -V[N][fname]  ログ出力設定 [レベル N] [ログファイル名 fname]
   -D   デバッグモード
   -n   スワップファイルを使用せずメモリだけ
   -r   スワップファイルを列挙し終了
   -r (ファイル名) クラッシュしたセッションを復帰
   -L   -rと同じ
   -A   アラビア語モードで起動する
   -H   ヘブライ語モードで起動する
   -F   ペルシア語モードで起動する
   -T <terminal> 端末を <terminal> に設定する
   -u <vimrc>  .vimrcの代わりに <vimrc> を使う
   -U <gvimrc>  .gvimrcの代わりに <gvimrc> を使う
   --noplugin  プラグインスクリプトをロードしない
   -p[N]  N 個タブページを開く(省略値: ファイルにつき1個)
   -o[N]  N 個ウィンドウを開く(省略値: ファイルにつき1個)
   -O[N]  -oと同じだが垂直分割
   +   ファイルの最後からはじめる
   +<lnum>  <lnum> 行からはじめる
   --cmd <command> vimrcをロードする前に <command> を実行する
   -c <command>  最初のファイルをロード後 <command> を実行する
   -S <session>  最初のファイルをロード後ファイル <session> を取込む
   -s <scriptin> ファイル <scriptin> からノーマルコマンドを読込む
   -w <scriptout> 入力した全コマンドをファイル <scriptout> に追加する
   -W <scriptout> 入力した全コマンドをファイル <scriptout> に保存する
   -x   暗号化されたファイルを編集する
   --remote <files> 可能ならばVimサーバで <files> を編集する
   --remote-silent <files>  同上, サーバが無くても警告文を出力しない
   --remote-wait <files> --remote後 ファイルの編集が終わるのを待つ
   --remote-wait-silent <files>  同上, サーバが無くても警告文を出力しない
   --remote-tab[-wait][-silent] <files>  --remoteでファイル1つにつき1つのタブページを開く
   --remote-send <keys> Vimサーバに <keys> を送信して終了する
   --remote-expr <expr> サーバで <expr> を実行して結果を表示する
   --serverlist  Vimサーバ名の一覧を表示して終了する
   --servename <name> Vimサーバ <name> に送信/名前設定する
   --startuptime <file> 起動にかかった時間の詳細を <file> へ出力する
   -i <viminfo>  .viminfoの代わりに <viminfo> を使う
   -h or  --help ヘルプ(このメッセージ)を表示し終了する
   --version  バージョン情報を表示し終了する
   -P <親のタイトル> Vimを親アプリケーションの中で起動する
   --windowid <HWND> 異なるWin32 widgetの内部にVimを開く
```
K-means in OpenCV


STDINから(行)ベクトルの集合を受け取り、STDOUTに中心ベクトルを吐く。

```C++
#include <vector>#include <iostream>#include <sstream>#include <opencv2/opencv.hpp>using namespace std;int main(int argc, char** argv){
    int K = 10;    cv::BOWKMeansTrainer trainer(K);    std::string buf;    while(getline(cin, buf)){        stringstream ss(buf);        vector<float> feature;        float v;        while(ss >> v){            feature.push_back(v);        }        trainer.add(cv::Mat_<float>(feature).t());    }    cerr << "#features = " << trainer.descripotorsCount() << endl;    cv::Mat_<float> dictionary = trainer.cluster();    for(int y = 0; y < dictionary.rows; ++y){        for(int x = 0; x < dictionary.cols; ++x){            cout << dictionary(y, x) << "\t";        }        cout << endl;    }}
```
C# から、Growlを利用する 

Growlについては、[以前こちらに書いた記事](http://qiita.com/items/5e485d6700eac256af9f)を参照のこと。

## 手順

1. (Growlインストール済であることを前提とします)
2. [Growl公式サイト -> Developer Information](http://www.growlforwindows.com/gfw/developers.aspx) -> [C#/VB.NET or any .NET compatible language] をクリックする
3. Growl_NET_Connector_SDK.zip がダウンロードされるので、適当な場所に解凍
4. C#開発環境で、プロジェクトファイル `Growl_NET_Connector_SDK\Sample App\Csharp Example.csproj` を開く(私は VisualStudioではなく SharpDevelop を使いました) 
5. プロジェクトのプロパティ -> コンパイル -> ターゲットCPU=32bit に変更
6. Form1.cs -> Form1_Load() 内のコメントを以下のように変更する

```csharp:Form1.cs
this.growl = new GrowlConnector();
//this.growl = new GrowlConnector("password");    // use this if you need to set a password - you can also pass null or an empty string to this constructor to use no password
```

↓

```csharp:Form1.cs
//this.growl = new GrowlConnector();
this.growl = new GrowlConnector("password");    // use this if you need to set a password - you can also pass null or an empty string to this constructor to use no password
```

成功！

![](https://lh5.googleusercontent.com/-32RMAia4q18/T8B5BX8LYaI/AAAAAAAAEIw/o1KQV1lP_a8/s800/2012-05-26_15h21_49.png)

あとはこのサンプルをよしなに再利用すれば良いのではなかろうか。

## 注意点

私は以下の点でつまづきました。

* ビルド時にターゲットCPUは32bit CPUにする(Growlのライブラリが64bit対応していない)
* Windows では、Growlに必ずpasswordを渡してあげないと通知されない

# 参考

* [サンプルコード](http://growl-for-windows.googlecode.com/svn/trunk/Growl/Test%20App/Form1.cs)
Xcode の LLDB で Coda プラグインをデバッグする

1. **Edit Scheme** ウィンドウを開く (&#x2318;&lt;).
2. サイドバーから **Run** 項目を選択
3. **Info** タブの **Executable** プルダウンから **Coda 2.app** を選択する
4. **OK** をクリックしてウィンドウを閉じる
5. Targets から プラグインターゲットを選択する
6. **Build Settings** タブを選択し、**Add Build Setting** をクリック、**Add User-Defined Setting** を選択し、名前が `INSTALL_BUNDLE` で、Debug に対して値が `1` と設定する
5. **Build Phase** タブに切り替え **Add Build Phase** をクリックし **Add Run Script** を選択する
7. 以下のスクリプトをコピペする

        if [ $INSTALL_BUNDLE == 1 ]; then
          DEST="$USER_LIBRARY_DIR/Application Support/Coda 2/Plug-ins/$FULL_PRODUCT_NAME"
          ORG="$TARGET_BUILD_DIR/$FULL_PRODUCT_NAME"
          rm -rf "$DEST"
          mv "$ORG" "$DEST"
        fi

これで Run からデバッグできます
VimのC-aで月、火、水、木、キン肉マン!!!を実現する

VimではCtrl+aで数値をインクリメント出来ます。
例えば、
`1`
と、あった場合、この行にカーソルを当ててC-aで`2`に変わります。

このインクリメントを月や曜日に適応したプラグインが[monday.vim](http://www.vim.org/scripts/script.php?script_id=1046)です。
`monday`を`tuesday`にしてくれます。しかも大文字・小文字を考慮してくれます。

[こちらの記事](http://nanasi.jp/articles/vim/monday_vim.html)にあるように、monday.vimをカスタマイズすることで、独自のインクリメントを定義できます。
ここで、

```vim:monday.vim
call <SID>AddPair('月', '火')
call <SID>AddPair('火', '水')
call <SID>AddPair('水', '木')
call <SID>AddPair('木', 'キン肉マン!!!')
```

とすることで、月→火→水→木→キン肉マン!!! となります。

心なしか強くなった気がしますね。
相対パスをルートパスに変換する

WebWorkerでは相対パスが効かない。

例えば /hoge/fuga/index.html から WebWorker を通じて ./data.txt を読み込もうとすると /data.txt を読み込もうとして、そんなファイルは無いと怒られてしまう。

あらかじめルートパスに変換してから WebWorker に渡してやると良い。


```js:relpath2rootpath.js
function relpath2rootpath(relpath) {
    if (/^https?:\/\//.test(relpath)) {
        return relpath;
    } else {
        var rootpath = location.pathname;
        rootpath = rootpath.substr(0, rootpath.lastIndexOf("/"));
        rootpath = rootpath.split("/").filter(function(x) {
            return x !== "";
        });
        relpath = relpath.split("/");
        for (var i = 0; i < relpath.length; i++) {
            if (relpath[i] === "..") {
                rootpath.pop();
            } else if (relpath[i] !== ".") {
                rootpath.push(relpath[i]);
            }
        }
        return "/" + rootpath.join("/");
    }
}
```
Railsでzepto.js(軽量jQuery)を使う

Railsで作ったサイトをiPad(1G)で表示してみたらだいぶ遅く感じたので、jQueryをzepto.jsと入れ替えてみた。うん、まあちょっと速くなったかな。

http://zeptojs.com/

zepto.jsはほぼjQueryだけど、IE対応とかを削って軽くしてるらしい。スマホ向け。100%コンパチではない。

Rails(3.2)で使う場合は普通にassets以下に置いてもいいけど、gem "zepto-rails" するとapplication.jsに「//= require zepto」と書くだけで使えるようになる。

https://github.com/packetman/zepto-rails

jQueryと競合する(と思う、確認してないけど)ので、「//= require jquery」「//= require jquery_ujs」の行は消さないといけない。ScaffoldとかRails標準のJSも使いたい場合は、jquery_ujsのzepto対応版みたいなgemがあるらしい。

https://github.com/josh/rails-behaviors
Windows で[Ctrl]と[CapsLock]キーを入れ替える 

こういうキーボードだと、本来の`CTRL`キーよりも`A`キーの横の`CapsLock`キーの方が押しやすい位置にあるので、
２つのキーの役割を入れ替えたくなりますよね。

![Aキーの横をCTRLキーにしたい](https://lh6.googleusercontent.com/-1DPRUUqwbU0/T7-H4mLkN0I/AAAAAAAAEHc/P_k1_QdAlJ8/s640/%25E5%2586%2599%25E7%259C%259F1.jpg)

レジストリをいじってキーを入れ替える方法もありますが、Ctrl2Capツールを使う方が簡単です。

# 手順

1. マイクロソフト TechNetサイトから、[Ctrl2Cap v2.0](http://technet.microsoft.com/en-us/sysinternals/bb897578.aspx) をダウンロードする。
2. ダウンロードしたZIPファイルを解凍し、そのフォルダで以下のコマンドを実行する。その後Windowsを再起動すれば反映される。

```bat:install_ctrl2cap.bat
> ctrl2cap.exe /install
```

# 注意

管理者権限がある状態で実行してください。

# 参考

* [Ctrl2Capツールで［Ctrl］と［CapsLock］キーを入れ替える](http://www.atmarkit.co.jp/fwin2k/win2ktips/1182ctrl2cap/ctrl2cap.html)
Windows7のエクスプローラのショートカットキー

この辺、初めて知った！
個人的には、以下の強調したショートカットキーが重宝しそう。

* `Ctrl`＋`N` :	新しいウィンドウを開く
* `Ctrl`＋`Shift`＋`N` : __新しいフォルダを作成する__
* `F11` : ウィンドウ・サイズを最大化／復元する
* `Alt`＋`D` : __アドレス・バーを選択する__
* `Ctrl`＋`E` : 検索ボックスを選択する
* `Alt`＋`P` : __プレビュー・ウィンドウを表示する__
* `Alt`＋`Enter` : __選択した項目のプロパティ・ダイアログを開く__

# 参考

[Windows 7のエクスプローラをキーボードで操作する](http://www.atmarkit.co.jp/fwin2k/win2ktips/1374exp7kb/exp7kb.html)
VSS(Visual SourceSafe) をコマンドラインから起動しつつ指定のプロジェクトを開く

VSSをコマンドラインから起動するには、SSEXP ユーティリティを使用します。
(SSEXP.EXE のある場所を、環境変数 PATH に予め追加しておいてください)

```bat
> ssexp.exe -P"$<プロジェクト>"
```

# 例

```bat
> ssexp.exe -P"$/foo/ProjectA"
```

# 参考

* [Visual SourceSafe の起動時に使用できるコマンド ライン オプション](http://msdn.microsoft.com/ja-jp/library/cc434905\(v=vs.71\).aspx)
VistaとWindows 7の送る（send to)フォルダをさっと開く方法

Windows Vista 以降では、送る(Send to)フォルダの場所が変わってしまいました。
これをいちいちエクスプローラから辿るのは面倒です。

  `C:\Users\［ユーザー名］\AppData\Roaming\Microsoft\Windows\SendTo`

# 簡単に送るフォルダを開く方法

a. エクスプローラ のアドレス欄に`shell:sendto`と入力するか、
b. もしくはコマンドプロンプトで以下のコマンドを入力する

```bat
> start /b shell:sendto
```
AsWingのJScrollPaneの中身を左上にそろえる。

ハイクオリティGUIライブラリAsWing( http://www.aswing.org )のTips4つ目。

JScrollPaneでJPanelなどにスクロールバーを表示させる時、
中身がJScrollPaneより小さいと自動的に中央揃えになる。

これを左上にしたいときは以下のように書く。

```as3:ScrollPaneTest.as
var scroll:JScrollPane = new JScrollPane( new JPanel() );
var viewPort:JViewport = scroll.getViewport() as JViewport;
viewPort.setVerticalAlignment( JViewport.TOP );
viewPort.setHorizontalAlignment( JViewport.LEFT );	
```
Rails memo


## To create new app with mysql

First type following command

```
rails new example -d mysql
rake db:migrate
```

At this time, I got following error

`uninitialized constant Rake::DSL`

Some web pages say that this is because version of rake is not proper.
I tried following thing.

* Add following line in to Gemfile

`gem "rake", "0.8.7"`


* Then type following command

```
bundle update rake
```
However, it still doen't work.

I found web page.
[http://www.wizardinthemarket.com/program/210/](http://www.wizardinthemarket.com/program/210/)

I change rake version to 9.2.2.

Now it works fine.

### mysql issue
Some web pages say that if I wanna use mysql
I need to use

```
gem 'ruby-mysql'
```

instead of 

```
gem 'mysql2'
```

in Gemfile. However, rails 3.2.3 doesn't accept ruby-mysql.
If you use that, following issue will be happened.

When I type 

```
rake db:migrate
```
Error comes and terminal says that I need to type following command.

```
gem install activerecord-mysql2-adapter
```

However,  the gem doesn't exist.
Just use mysql2.

Do not for get to configure to set `~/config/database.yml`

#### Tips
```
rake db:create
rake db:migrate
rake db:
```


## General operation
### Creating controller
```
rails generate controller CONTROLLER_NAME
```
This command will generate

`/app/controllers/CONTROLLER_NAME_controller.rb` 

####
After creating the action, do not forget to configure
route setting.


## Reference page

[http://www.rubylife.jp/rails/ini/index4.html](http://www.rubylife.jp/rails/ini/index4.html)
Rails.loggerのファイルのパスを指定する


`config.paths["log"]`に指定する。

```config/application.rb
config.paths["log"] = "log/#{Rails.env}_hoge.log"
```

ロガーのインスタンス自体を指定する場合には`config.logger`に指定する。

```config/application.rb
config.logger = Logger.new($stdout)
```
Github Flavored Markdownをemacs上で書いて, emacsからtumblrにポストする.

[garaemon's blog](http://garaemon.tumblr.com/post/23611649718/github-flavored-markdown-emacs)からの転載

[Qiita](http://qiita.com)があまりに素晴らしいサービスだったので, 触発されて
自分好みのメモ+ブログ環境を構築しました.

やりたいことは

  * emacs上でひとつのファイルにGithub Flavored Markdown(GFM)でメモを取る. 検索しやすい
  * syntax highlightつきでローカルのブラウザでそのメモを見る
  * 有用そうなものがあれば, コピペでemacsからtumblrにポスト

です

必要な物は, 

  * emacs上でGFMを編集するemacs lisp
  * GFMをローカルでhtmlに変換するスクリプト
  * tumblrの記事をemacsで書くemacs lisp

となります.

### gfm-mode
[markdown-mode](http://jblevins.org/projects/markdown-mode/)を使いましょう.

```sh
git clone git://jblevins.org/git/markdown-mode.git
```

.emacsに

```el
(load "path-to-markdown-mode/markdown-mode/markdown-mode.el")
(setq auto-mode-alist (cons '("\\.md" . gfm-mode) auto-mode-alist))
```

これでemacsでgfmを書くのは解決.

### GFMをhtmlに変換
[gh-markdown-cli](https://github.com/millermedeiros/gh-markdown-cli)
を利用します.

gh-markdown-cliはコマンドラインから, GFMで書かれたファイルをhtmlに変換してくれます.

ですがgh-markdown-cliはsyntax highlightが効かないので, パッチをあてて, [pygments](http://pygments.org/)を走らせます.

[pygments-style-github](http://pypi.python.org/pypi/pygments-style-github)
というのがあるのでこれを使いましょう. githubなcssが提供されます.

```sh
git clone git://github.com/hugomaiavieira/pygments-style-github.git
cd pygments-style-github
(sudo) python setup.py install
```

次にパッチの当たっているgh-markdown-cliをダウンロード.
かなり適当です. pugmentsないと動きません.

```sh
git clone git://github.com/garaemon/gh-markdown-cli.git
cd gh-markdown-cli
npm install
```

同期的に外部プロセスを呼びたいがためにffiとか使っちゃってるのは残念ですが. 
まさに牛刀

gh-markdown-cli/bin/mdownを使うことで, GFMをsyntax highlight付きの
htmlがゲットできるようにになりました.

適当なところにcssを作ります

```sh
pygmentize -S github -f html > github.css
```

ここでgfm-modeのために.emacsを編集しましょう. cssとかは適当についかしchai maxx.

```el
(setq markdown-command "path-to-gh-markdown-cli/gh-markdown-cli/bin/mdown")
(setq markdown-xhtml-header-content "
<link rel=\"stylesheet\" type=\"text/css\" media=\"all\" 
href=\"path-to-github.css/github.css\" />
")
```

これでGFMで編集している時にC-c C-c pでブラウザで出力が見られるようになったはずです. 

### tumblrにぶっこむ, emacsからhtmlを!
[tumblr-mode](https://github.com/qxj/tumblr-mode)を利用します.

が, これはtumblrのマークダウンを使うか, htmlを直接書くかしかできないので
パッチを当ててあげます.

```sh
git clone git://github.com/garaemon/tumblr-mode
```
これまたかなり適当なパッチなので注意してください.

.emacsに

```el
(add-to-list 'load-path "path-to-tumblr-mode/tumblr-mode")
(require 'tumblr-mode)
(custom-set-variables '(tumblr-post-format "html"))
```

このtumblr-modeは本文をGFMだと無理やり解釈して, htmlに変換して, そのhtmlを
tumblrに投稿します. tumblrをカスタマイズして先ほどのgithub.cssは読み込んでおきましょう.
M-x tumblr-new-post, M-x tumblr-save-postで投稿です.

以上です. ちなみにこのtumblrのcssとかは
[garaemon-tumblr-theme](https://github.com/garaemon/garaemon-tumblr-theme)
においてます. ここのgh-pagesブランチにおいて, そのcssをtumblrから読んであげています.

gh-pagesでないとMIMEがtext/plainになってしまうのでこうしています.

よいemacs+tumblrライフを!
carton installの前にModule::Installをインストールする

`carton install`を走らせたら以下のようなエラーがでた

```sh
$ carton install
Installing modules using Makefile.PL
Usage: cpanm [options] Module [...]

Try `cpanm --help` or `man cpanm` for more options.
Installing modules failed
```

Module::Installをインストールしたら通った

```sh
% cpanm Module::Install
```
gemをすべてアンインストールするワンライナー

rvmでは以前のでうまくいったけど、rbenvでうまくいかなかったので改良しました。

```ruby:gem_uninstall_all
#!/usr/bin/env ruby

gem_list = `gem list --no-version`
gem_list.each_line do |line|
  next if line.empty? || /LOCAL GEMS/ =~ line
  system "gem uninstall -axI #{line}"
end
```
markdown-modeをインストールする(Ubuntu11.10)

Emacsでmarkdown形式のテキストを編集したかったので、markdownモードを導入しました。

Ubuntuでパッケージがあったのでそちらをインストールしました。

```
$ sudo apt-get install emacs-goodies-el
```

`.emacs.d/init.el`に下記を追加して、拡張子が`.text`のファイルは自動でmarkdownモードにするようにします。

```cl:.emacs.d/init.el
;; markdown-mode
(autoload 'markdown-mode "markdown-mode.el"
  "Major mode for editing Markdown files" t)
(setq auto-mode-alist
      (cons '("\\.text" . markdown-mode) auto-mode-alist))
```
数字->文字列　金額表示のカンマ挿入


```function setComma(from){
	var to = from + '';
	var tmp = "";
	while (to != (tmp = to.replace(/^([+-]?\d+)(\d\d\d)/,"$1,$2"))){
		to = tmp;
	}
	return to;
}
```

自作ではありません。拾い物です。
すみません、拾い先を忘れてしまいました。
メモと同時に制作者様のURLを知っている方がいらっしゃったら追記させてもらいたいので、教えていただけると幸いです。
ブラウザに証明書を読み込ませる


####firefoxの場合
環境設定>詳細>暗号化>証明書を表示>読み込む

####Chromeの場合
環境設定>詳細設定を表示>HTTPS/SSL証明書の管理>+


firefoxの場合は有効になるけど、Chromeの場合は有効にならない。
どなたか解決方法をご存知の方いらっしゃったら教えてください。
jQuery UI DatePicker のオプションいくつか


フォームのインプットフィールドに日付を入力してもらいたい場合、
カレンダー経由で入力させるのが良い。
この手のカレンダーコンポーネントではjQuery謹製のjQuery UI DatePickerが
一番シンプルで使いやすいものになっている。

導入は非常に簡単だけど、オプションが沢山あるので、
忘れてもいいように幾つかメモしておく。


```javascript
        $("#dateCal1, #dateCal2").datepicker({
            //インプットに表示する日付フォーマット
            dateFormat: "yy/mm/dd",
            //インプットの横にボタン画像を表示
            showOn: "button",
            buttonImage: "DateChooser.png",
            //ボタン画像をクリックした時のみカレンダーを表示
            buttonImageOnly: true,
            //ボタン画像のALTテキスト
            buttonText: "カレンダー"            
            //年のプルダウンを表示
            changeYear: true,
            //月のプルダウンを表示
            changeMonth: true                                              
        });
```


ちなみに、jQueryのセレクタは要素をカンマで区切ることで複数要素を同時に選択することができる。
引数のデフォルト値はimmutableなものにする

関数定義で引数のデフォルト値を設定できる

```py
def foo(bar=[]):
    bar.append('baz')
    return bar
```

`foo()`を実行すると、`['baz']` というリストが返ってくる

```py
>>> foo()
['baz']
```

さて同じコードをもう一度実行するとどうなるだろうか？

```py
>>> foo()
['baz', 'baz']
```

結果が変わってしまっている。何故このようなことになるかというと、Pythonでは関数のデフォルト値は最初の一回しか評価されないためだ。そして、Pythonのリストは変更可能なオブジェクト(mutable)であり、`append()`はリストに対し破壊的に引数を追加するため、2回目の実行で予期しない結果が返ってきてしまうことになる。

この問題をクリアするにはimmutableなオブジェクトをデフォルトにすればいい。今回の`foo`関数の場合だと

```py
def foo(bar=None):
    if bar is None:
        bar = []
    bar.append('baz')
    return bar
```

のようにする。この関数は何度引数なしで呼び出しても、Noneはimmutableなので毎回同じ結果を返す。

```py
>>> foo()
['baz']
>>> foo()
['baz']
```

Pythonではstrはimmutableなので文字列をデフォルト値として用いるのは特に問題ない。
コマンドラインからすばやくWindowsを再起動・シャットダウンする

コマンドラインからすばやくWindowsを再起動・シャットダウンするには、
コマンドプロンプト、もしくは`WIN`+`R`キーで「ファイル名を指定して実行」から以下のコマンドを実行します。

## 再起動

```bat
> shutdown /r /t 0
```

## シャットダウン

```bat
> shutdown /s /t 0
```

# shutdown コマンドの詳細

以下のコマンドでヘルプを参照のこと。

## ヘルプ表示

```bat
> shutdown /?
```
アプリ内でキーダウン⇒アップしたかどうかを判断したい場合

「onKeyUpしかこない...」「キーアップしてないのにonKeyUpが通知された...」
そんな場合の対処方法。

```java:qiita.rb
public boolean onKeyDown(int keyCode, android.view.KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_A && event.getRepeatCount() == 0) {
        event.startTracking();
    }
....
}
 
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_A && event.isTracking()
            && !event.isCanceled()) {
        // catch it!
    }
}
```

詳細：http://yuki312.blogspot.jp/2012/05/android_24.html
写真の位置情報から住所を調べる


iOS5のCLGeocoderを使うと、写真等に含まれる位置情報から、住所や郵便番号、国名などを調べることができます。CoreLocation.frameworkが必要。

```objc

// ALAssetから位置情報を取得
CLLocation *location = [asset valueForProperty:ALAssetPropertyLocation];

// 逆ジオコーディング
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder reverseGeocodeLocation:location
			   completionHandler:^(NSArray *placemarks, NSError *error){
				   
				   CLPlacemark *place = [placemarks lastObject];
				   // 情報表示
				   NSLog(@"%@,%@\n",place.locality,place.country);
			   }];
```

CLGeocoderの`reverseGeocodeLocation:completionHandler:`メソッドに位置情報（CLLocation）を渡し、結果をblocksで受け取ります。

フォトライブラリからALAssetを取り出すコードは省略しています。「iOS4プログラミングブック」などで詳しく解説されています。

取得できる情報の詳細は CLPlacemark Class Reference にあります。
http://developer.apple.com/library/ios/#DOCUMENTATION/CoreLocation/Reference/CLPlacemark_class/Reference/Reference.html#//apple_ref/occ/cl/CLPlacemark
レスポンシブ・Webデザイン とは

ブラウザーのウィンドウ幅に合わせてCSSでWebページのレイアウトを変更する手法のこと。
「Media Queries（メディア・クエリー）」
「Fluid Grid（フルード・グリッド）」
「Fluid Image（フルード・イメージ）」
という3つのテクニックを用いて実現する。
この3つの技術を、米国の開発者であるEthan Marcotte（イーサン・マルコッテ）氏が、2010年にテックブログ 「A List Apart」で「Responsive Web Design」として紹介したことでその名が広く知られるようになった。

Read more: http://ascii.jp/elem/000/000/695/695819/

レスポンシブWebデザインとは
http://ascii.jp/elem/000/000/697/697463/
レスポンシブWebデザインで作られた10の美しすぎるサイト
http://www.seojapan.com/blog/responsive-web-design
1つでPC・スマホ・タブレットに対応するレスポンシブレイアウトのWPテーマ各種 [WordPress Theme]
http://ipod.item-get.com/2012/05/1pcwp_wordpress_theme.php
pseudorandom


JavaScript Web Applicationsの中のもの。

```javascript
function guid() {
	return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
		var r = Math.random() * 16 | 0,
			v = c == 'x' ? r : (r & 0x3 | 0x8);

		return v.toString(16);
}).toUpperCase();
}
```
Pythonでリストを初期化する際の注意点

list1 = list2 = []
のように初期化してしまうと、参照をコピーしてしまう。
慌てず焦らず
list1 = []
list2 = []
のようにする必要がある

```python:test.py
>>> list1 = list2 = []
>>> list1.append(1)
>>> list2.append(2)
>>> print list1
[1, 2]
```
iPhoneのホームボタンの効きが悪くなったら

iPhoneのホームボタンの効きが悪くなったら次の手順で改善できる。

1. 電源ボタンを長押しする。
2. 電源OFFのスライドが表示されたら、電源ボタンから手を離してホームボタンを **いつもの強さ** で押し続ける。
3. 電源OFFのスライドが消えるので、あとはいつもどおり使う。

多分2の操作で押下の強さのキャリブレーションを行ってるんだと思う。

※1 iPhone4 で確認 
※2 [@planetofgori](http://gori.me) に聞いた有名なtipsらしいけど、ソースを探すのが面倒だったのでメモっておく。


#### 追記

キャリブレーション云々のところは想像です。

効きが悪くなるってことはハード的な不具合なので、そこをボタンの現在の入力の大きさでON/OFFを切り替えられるように、しきい値の再設定をしてるのかなあと。
params に含まれる配列のようなハッシュを配列に


`fields_for` を使うと、`params` が下記のような形になる。

```ruby
{ tags_attributes: {
    "0" => {name: "ruby"},
    "1" => {name: "rails"}
  }
}
```

`accept_nested_attributes_for` 使うだけならいいんだけど、自前で処理する場合、配列にしたい。つまり下記のような配列が得たい。

```ruby
[ {name: "ruby"},
  {name: "rails"}
]
```

`params[:tags_attributes].values` でもよいが、モデルのメソッドで使うなら、配列で受け取っても同じように扱えるほうが便利。

```ruby
params[:tags_attributes].map{|*, e| e}
```

で、もとが上記のようなハッシュでも配列でも同じ形になる。
これは `*, a = k, v` でも `*, a = v` でも `a == v` となることを利用している。
form_for のようなメソッドをつくる


ポイントは、次の 2 点。

1. `capture` にビルダークラスのインスタンスを渡す
2. ビルダークラスには View のインスタンス (ヘルパーメソッド内なら `self`) を渡しておく

```ruby
# ビルダークラスの定義
# これのインスタンスがブロックの引数に渡される
# initialize で view を受け取っているので、
# ヘルパーメソッドを view 経由で呼び出せる
class MyFormBuilder
  attr_reader :view
  def initialize(view, options = {})
    @view = view
  end
  
  # HTML 文字列を返すようにする
  def text_field_with_label(name)
    buffer = "".html_safe
    buffer << view.label_tag(name)
    buffer << view.text_field_tag(name)
    buffer
  end
end
```

```ruby
# ヘルパに form_for のようなメソッド追加
# ほんとは別のモジュールにわけて include したほうがいいと思う
module ApplicationHelper
  def my_form_for(options = {}, &block)
	# self (View) を渡してビルダークラスのインスタンス作成
    m = MyFormBuilder.new(self, options)
    # ビルダークラスのインスタンスを渡して、
    # ブロックを評価し、結果を form で囲んで返す。
    # ややこしい構造の場合、capture した結果を、
    # partial template に渡して render するという手も。
    form_tag("#") do
      capture m, &block
    end
  end
end
```

下記のように使える。

```html.erb
<%= my_form_for do |m| %>
  <%= m.text_field_with_label :name %>
<% end %>
```

```haml
= my_form_for do |m|
  = m.text_field_with_label :name
```
DatePickerで最後に直接編集した値が取得できない

DatepickerDialogではなく、DatePickerを直接貼り付けている場合。

```java:MyDatepickerDialog.java
	OnDateSetListener mCallback = null;
	DatePicker picker = null;
	AlertDialog mDialog = null;

	public void onClick(View view) {
		int id = view.getId();
		switch(id){
		case R.id.btn_ok:
			// 日付を返す
			if(mCallback!=null){
				mCallback.onDateSet(mDatepicker, mDatepicker.getYear(), mDatepicker.getMonth(), mDatepicker.getDayOfMonth());
			}
			mDialog.dismiss();
			break;
		case R.id.btn_cancel:
			mDialog.cancel();
			break;
		}

	}

```

上記のようなコードを書くのが普通だと思うが、以下の手順を踏むと、最後に入力した値が取得できない。

1.エディットボックスをタップし、直接数値を入力
2.フォーカスを移さないまま、ダイアログのOKボタンなどを押して閉じる

DatepickerDialogだと、この手順でも入力後の値が取れる。

【回避方法】
ボタン押下後に、`clearFocus`を呼ぶ。

```
		case R.id.btn_ok:
			// Focus抜けると反映されるっぽい
			mDatepicker.clearFocus();
			// 日付を返す
			...
```

※DatepickerDialogのソースみたらこうなってた。