OmniAICreator/Qiita-1.07M huggingface dataset:
AtCoder Regular Contest #001 B - リモコン

http://arc001.contest.atcoder.jp/tasks/arc001_2

#概要
エアコンのリモコン、現在の設定温度から、ある別の設定温度に変えたい
リモコンには+10 +5 +1 -1 -5 -10度変化させるボタンがある
ボタンを最低何回押す必要があるか
#解いた方針
それぞれのボタンを押した時の温度を計算、最も目標に近いものを選択、回数カウント、を繰り返す
↑はこの問題だからできること
ボタンが -90 +1 +100 だったら、初期0℃目標10℃だった場合、+100-90の2回で済むのに、+1を10回押しちゃう
そのエアコンが極めて優秀だった場合、1回目で干からびて死んで、2回目を押せないかもしれんが

```php:自分の回答.php

<?php
 
fscanf(STDIN, "%d %d", $kako, $mirai);
$kako = (int)$kako;
$mirai = (int)$mirai;
 
 
$plusArray = array(10, 5, 1, -1, -5, -10);
 
$count = 0;
$now = $kako;
 
 
while($now != $mirai){
	$nowTemp = false;
	foreach($plusArray as $plus){
		if($nowTemp === false || abs($mirai - ($now + $plus)) < abs($mirai - $nowTemp)){
			$nowTemp = $now+$plus;
		}
	}
 
	$count++;
	$now = $nowTemp;
}
 
echo $count."\n";
 
 
?>

```
AtCoder Regular Contest #001 A - センター試験

http://arc001.contest.atcoder.jp/tasks/arc001_1

#概要
センター試験で全部同じ選択肢を選んだ場合の最高得点と最低得点を回答する
正答が「1223334444」なら最高は4点、最低は1点
#解いた方針
正答は文字列で与えられるので、単にpreg_match_allした

```php:自分の回答.php

<?php
 
fscanf(STDIN, "%d", $q);
fscanf(STDIN, "%s", $answer);
 
 
 
$resultArray = array(
	preg_match_all('/1/', $answer, $matches),
	preg_match_all('/2/', $answer, $matches),
	preg_match_all('/3/', $answer, $matches),
	preg_match_all('/4/', $answer, $matches)
);
 
echo max($resultArray).' '.min($resultArray)."\n";
 
 
?>

```
キャッシュのキー値算出

忘れるのでメモメモ
proxy_cache_keyがデフォルト($scheme$proxy_host$uri$is_args$args)の場合は以下のようにやればいい

```
echo -n "http://my_proxy_host/the/path/to/file"|md5sum
echo -n "http://my_proxy_host/the/path/to/file?param=val"|md5sum
```
nginxのproxy_cache_keyのデフォルト

ngx_cache_purgeモジュール使ってキャッシュ削除しようとしたけどproxy_cache_keyが設定されてなくて泣いたのでメモ
[公式ドキュメント](http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_key)が当てにならないというか、嘘はついてないけどホントの事も書いてないｗ

>By default, the directive’s value is close to the string
>    proxy_cache_key $scheme$proxy_host$uri$is_args$args;

となってるので、

```
location ~* /purge_cache(/.*) {
    proxy_cache_purge THE_CACHE "$scheme$proxy_host$1$is_args$args";
}
```

と書いてみたけど動かない(;;
$proxy_hostはログ書き出しのように実際にプロキシが充てられてからは使えるっぽいけど、こういう場合には使えないみたい...
なので、バックエンドを

```
upstream cache_cluster {
    server 127.0.0.1;
}
```

とかしてる場合、

```
location ~* /purge_cache(/.*) {
    proxy_cache_purge THE_CACHE "http://cache_cluster$1$is_args$args";
}
```

という様にバックエンドの名前をちゃんと書いてやらないと反応してくれない。
Ext.navigation.View の Back ボタンを上書きする


Sencha Touch2 で導入された navigationBar は、Viewport: setActiveItem や Viewport:add を呼び出すと勝手に History を追加してくれて、Back ボタンで戻れるようにしてくれるが、routes と this.redirectTo を使ってブラウザのBackボタンで戻れるようにしている場合、Back ボタンを使って戻ってもURLを変更してくれない。これが不都合な場合、Back ボタンを上書きする必要がある。

たとえば下記のようにイベントを横取りして

```coffeescript:view.Viewport.coffee
Ext.define "Ezuko.view.Viewport",
  extend: "Ext.navigation.View"
  config:
    id: 'viewport'
    fullscreen: true
    layout: 'card'
    navigationBar:
      items: [
        xtype: 'button'
        id: 'top'
        text: 'トップ'
        align: 'right'
        action: 'goTop'
       ]
    onBackButtonTap: () ->
      this.fireEvent 'back', this
```

以下のようにコントローラーで拾ってあげるといい

```coffeescript:controller/Main.coffee
Ext.define 'Ezuko.controller.Main',
    extend: 'Ext.app.Controller'
    config:
      refs:
        viewport: '#viewport'
      control:
        viewport:
          back: 'onBackPressed'
    ###
      back button on toolbar pressed
      this method is called by back event from viewport controller
    ###
    onBackPressed: () ->
      this.getViewport().pop()
      history.back()
```
IPythonのプロファイル機能を使う

プロファイルを作り、プロファイル毎に起動スクリプトを変えたりすると何かと便利。

##プロファイルを作る

```sh
$ ipython profile create sample
[ProfileCreate] Generating default config file: u'/Users/taka84u9/.ipython/profile_sample/ipython_config.py'
```

`$HOME/.ipython/profile_sample`ディレクトリに初期化されたプロファイルが作成される。
`ipython_config.py`でipythonの設定をし、`startup`ディレクトリの中身で起動スクリプトを作る。

##プロファイルを読み込む

プロファイルを読み込んで起動するには`--profile`オプションを使う

```sh
$ ipython --profile sample
Python 2.7.2 (default, Feb 16 2012, 15:37:03) 
Type "copyright", "credits" or "license" for more information.

IPython 0.12 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

IPython profile: sample

In [1]: 
```
Ruby on Rails を使った blog / CMS を調べてみた

最近は [Jekyll][] が人気らしい
---------------------------

 ( 追記 2012-04-17 :  Jekyll と Octopress は Ruby で書かれてるけど Rails じゃなかったです (汗) )

[Jekyll][] は、[GitHub Pages][] のエンジンベースになっているとのこと。
また、[Jekyll][] をベースにした [Octopress][] という静的ブログツールもあるようで、気になっています。


以下のガイドが、設置も含めて、それぞれのわかりやすい説明もあり、今度じっくり読んでみたいです。以下は各概要の引用です。

* [GitHub Pagesホスティングサービス（ほぼ）完全活用ガイド | ゆっくりと…][ref-github-pages]

### GitHub Pages

> GitHub Pages では、Git のリポジトリ管理機能とホスティング・サーバー機能とが連携し、次の2つのサービスが提供されています。

> 特別なリポジトリ username.github.com を作成し、index.html や必要なリソースを push しておけば、http://username.github.com/ という URL でそのページを閲覧することができます。

### Jekyll

> jekyll（ジキル）は、テンプレートを使って静的な Web サイトを構築するための Ruby ベースのフレームワークです。

### Octopress

> Octopress は、jekyll を使って静的なブログを簡単に構築できるようにしたフレームワークです。

> 副題に A blogging framework for hackers. とあるように、Gist や jsFiddle など、多彩なコードスニペットの埋め込みプラグインが提供され、また GitHub ととても親和性よく作られています。


[Octopress]: http://octopress.org/
[GitHub Pages]: http://pages.github.com/
[Jekyll]: http://github.com/mojombo/jekyll
[ref-github-pages]: http://tokkono.cute.coocan.jp/blog/slow/index.php/programming/github-pages-almost-perfect-guide/




余談
---------------------------

うまく調べきれtないような気がして、個人的な見解になってます…
ちなみに、ちょっと前 (2009年代くらい？) はこのあたりらしいです。

* [Radiant](http://www.radiantcms.org/)
* [Typo](http://fdv.github.com/typo/)
* [Mephisto](http://www.mephistoblog.com/)

参考 : [Rails blogs/cms: Radiant, Typo, Mephisto, Browsercms, Amethyst, Ansuz | professional dilettante](
http://professionaldilettante.com/rails-blogscms-radiant-typo-mephisto-browsercms-amethyst-ansuz/2009.07.25)
IPython起動時にスクリプトを自動的に読み込む

IPython ver0.11から仕様が変更されて`IPYTHON_DIR/profile_<name>/startup/`ディレクトリの中身が自動的に実行されるようになった。
`IPYTHON_DIR`はLinuxだと`$HOME/.config/ipython`他のUnix環境だと`$HOME/.ipython`。
`<name>`は起動しているプロファイル文字列で何も指定しない場合は`default`が入る。
つまりMacの人がプロファイルを指定せずにIPythonを起動すると`$HOME/.ipython/profile_default/startup`の中の`.py`もしくは`.ipy`ファイルが実行される。この時の実行順序はファイル名の辞書順なので、実行する順番をきっちり決めたい場合は`00-first.py` `99-last.py`みたいな感じで数字を前につけるといい。

```sh
$ cat ~/.ipython/profile_default/startup/00-first.py
print 'Hello World'
$ ipython
Python 2.7.2 (default, Feb 16 2012, 15:37:03) 
Type "copyright", "credits" or "license" for more information.

IPython 0.12 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.
Hello World

In [1]: 
```
デフォルトのインタラクティブシェルをIPythonにする

pythonにipythonへのエイリアスを設置してもいいが、複数の環境で使うにはipythonが存在するかをチェックして、あればipythonを使い、なければそのままのシェルを使うようにする方がいい。

#方法

pythonインタプリタは起動されるとPYTHONSTARTUPで指定されたファイルを実行する。その中でipythonを起動するだけ。

```sh:.zshrc
export PYTHONSTARTUP=$HOME/.pythonrc
```

```python:.pythonrc
try:
    from IPython.frontend.terminal.ipapp import launch_new_instance
    launch_new_instance()
    raise SystemExit
except ImportError:
    # ipythonがインストールされていない場合
    pass
```

実行するとこんな感じになる

```sh
$ python
Python 2.7.2 (default, Feb 16 2012, 15:37:03) 
[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.
Python 2.7.2 (default, Feb 16 2012, 15:37:03) 
Type "copyright", "credits" or "license" for more information.

IPython 0.12 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: 
```
hostnameの設定

##hostnameを確認するには

```Bash:ホスト名の確認
# hostname
localhost.localdomain
```

##hostnameを変更する

hostnameを設定するのにhostnameをどこに設定したらいいのかわからなくなったので調べてみた。
調べてみると`hostname`コマンドで設定できるとあるのだけど軽く調べると再起動すると設定内容が無効化されるらしい。
再起動後も設定を有効にするには`/etc/hosts`と`/etc/sysconfig/network`の両方を編集しておく必要があるようだ。

```Bash:ホスト名の変更
# hostname new-host.example.com
# vi /etc/hosts
127.0.0.1 new-host.example.com localhost.localdomain localhost

# vi /etc/sysconfig/network
NETWORKING="yes"
GATEWAY="192.0.2.1"
HOSTNAME="new-host.example.com"

# /etc/rc.d/init.d/network restart
```


##注意事項
ホスト名を指定してるapacheやらその他諸々にも影響があるようです。その辺の設定を確認の上、再起動するのが大事らしい。

参考にしたサイト:
[linuxにおけるホスト名の確認と変更:アシアト](http://d.hatena.ne.jp/atree/20090420/1240308590)
[Ｌｉｎｕｘのホスト名を変更する:ＩＴ技術の処方箋](http://www.searchman.info/tips/1360.html)
RPROMPTがずれる

RPROMPTに色指定用のエスケープシーケンス(\[[38;5;251mなど)を含めると，エスケープシーケンスの文字数もRPROMPT用に確保してしまい，表示されない文字の分だけ右端にスペースができてしまう．

これzshのソースいじるしか解決できないんでしょうか？
pythonインタプリタ起動時に良く使うmoduleをimportする

-i オプションを付けて起動すると、起動時にファイルを読みこんだ後に、対話モードに入る。
よくimportする基本的なモジュールのimport宣言をまとめて記述しておくと楽ちんになる。

```myStartup.py
import os
import datetime
import hogehoge
import .....
```

のようなファイルを用意しておき
以下のように -i　オプション付きでインタプリタを起動すれば良い。
ipythonでも使える。

```
python -i myStartup.py
```
スペース区切りの結果出力を見やすくする

```sh
$ mount | column -t
/dev/sda1  on  /             type  ext3    (rw,errors=remount-ro)
tmpfs      on  /lib/init/rw  type  tmpfs   (rw,nosuid,mode=0755)
proc       on  /proc         type  proc    (rw,noexec,nosuid,nodev)
sysfs      on  /sys          type  sysfs   (rw,noexec,nosuid,nodev)
udev       on  /dev          type  tmpfs   (rw,mode=0755)
tmpfs      on  /dev/shm      type  tmpfs   (rw,nosuid,nodev)
devpts     on  /dev/pts      type  devpts  (rw,noexec,nosuid,gid=5,mode=620)
```

↑こうする。もとは↓こう。

```sh
$ mount
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
```
コルーチンの中で別のコルーチンの終了を待つ

コルーチンの中で、更にWWWなどを使うメソッドを呼び出したい場合。

```cs:routine.cs

void Start(){
  StartCoroutine(Routine1());
}

IEnumerable Routine1(){
  yield return StartCoroutine(Routine2()); //yield return付けないと非同期になる
}

IEnumerable Routine2(){
  WWW www = new WWW("hogehoge");
  yield return www;
}

```
WEB漫画チェッカーリリースした

http://manga-checker.herokuapp.com/


####構成
scala
play 2.0
heroku
mysql on ec2
cron + phpでスクレイピング

####ハマったところ
mysqlのtimestampがplayでパースできないことに気づけなかった。結局VARCHARに逃げたけど、こういうとき意地を張って時間を無駄にすることが多い。

####課題
htmlの分析が大味すぎる
レスポンスが遅い
#####実は文字化けしてる(metaタグとか)


おもしろいWeb漫画あったらおしえてください
scala2.8ではtimestamp型を使えないらしい

マジかよ
今play2.0+scala2.9.1使ってるんだけどそのへんどうなってるんだろう
Magicなくなったらしいしこの先どうやっていけばいいかわからない

####使えない型
date
time
timestamp

####参照元
http://www.ne.jp/asahi/hishidama/home/tech/scala/dbc/select.html
Factory GirlのファイルをGuardで読み直す


```ruby:Guardfile
require 'active_support/inflector'

guard :rspec, version: 2 do
  watch(%r{^spec/factories/(.*)\.rb$}) { |m| "app/models/#{m[1].singularize}.rb" }
end
```

Factory GirlのRailsジェネレータは `spec/factories/` 以下にモデル名の複数形のファイルをつくる。
単純に `"#{m[1]}s.rb"` としたのでは不規則変化に対応できない。

RailsやPadrinoはActiveSupportを使用しているので、これが備える単語の活用形を変換する機能、ActiveSupport::Inflectorを使う。

`require 'active_support/all'` とするとActiveSupportのすべてのファイルが読み込まれるが、かなりの量があり体感ではっきりと遅いと感じるほどのラグもあるため、特定の機能のみを使いたい場合はそれを提供するファイルのみを読み込むほうがよい。
Guardfileで.rspecに書いた設定を読む


```ruby:Guardfile
guard :rspec, version: 2, cli: File.read('.rspec') do
  # ...
end
```

`guard` メソッドはストラテジごとにとれるオプションがいくつかある。
RSpecのストラテジでは `cli` というオプションにRSpecのコマンドライン・オプションを渡すことができる。

またRSpecは.rspecというファイルにデフォルトのコマンドラインオプションを書いておいて読みこませることができる。
RSpecの設定は.rspecで一元的に管理したい。Guardfileに個別に書くと分散してしまう。
ならばGuardfileからは.rspecを読むようにすればよい。
git基本#1

Working Directory - Stage(Index) - History(Object Store)

#gitオブジェクト種類
- Blobs
- Trees
- Commits
- Tags

#ファイル種類（File Classifications）
- Tracked
- Ignored
- Untracked

#git rmコマンド
- `$git rm uselessfile //indexから削除`
- `$git rm --cached uselessfile //indexとworking directory両方から削除`
rvmが1.11.3からCapistranoを分離して面倒だったのでバージョン下げた


いつも通りデプロイしようとしたらなんかエラった。

``````zsh
% bundle exec cap production deploy
/Users/hash/.rvm/lib/rvm/capistrano.rb:5:in `<top (required)>': RVM - Capistrano integration was extracted to a separate gem, install: `gem install rvm-capistrano` and remove the `$LOAD_PATH.unshift` line, note also the 'set :rvm_type, :user' is now the default (instead of :system). (RuntimeError)

[14560]hash% rvm --version
rvm 1.11.6 () by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.beginrescueend.com/]
1.6.25
``````

rvmを最新にしたところ、rvmからCapistranoを使う機能は別gemに切り出された模様。

利用中rvm gemsetにrvm-capistranoを入れればいいらしい。
↓
ちがうちがう。Capistrano自体がbundle管理下だからGemfileに入れないと。

…というのも面倒くさいのでrvmでversionを指定してやろう。推奨されるrvmのinstallは`curl | basl -s stable`というものだがinstall shell scriptの中身を見てみるとversion指定ができそうだったので

````
% curl -L get.rvm.io > install.sh
% bash install.sh --version latest-1.10
````

これで1.10.系列の最新をインストールできる。
curlの-Lオプションはリダイレクトを追いかける、らしい。
あとはreload…

````
% rvm reload
RVM reloaded!
% rvm --version
rvm 1.10.3 by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.beginrescueend.com/]
`````

バージョン番号は下でも"upgrade"と見なされて上書きされる。よしよし
JSON の整形


http://stackoverflow.com/questions/352098/how-to-pretty-print-json-script から。

コマンドラインからの場合は `python -mjson.tool` が簡単。

````bash
$ echo '{"foo": "lorem", "bar": "ipsum"}' | python -mjson.tool
````

JavaScript の場合は `JSON.stringify()` の第三引数にインデントレベルを追加できる。

````js
JSON.stringify({ foo: "lorem", bar: "ipsum" }, null, 4);
````
Main thread で実行

以前は `NSObject` の
`- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait` などを利用していた。

引数が0または1しか取れない、メソッドをわざわざ作る必要がある、など不便な点が多かった。引数増やすときは `NSInvocation` で回避できたが、やっぱり面倒だった。

GCD を使ったほうが簡単。

````
dispatch_async(
	dispatch_get_main_queue(),
	^{
		// ここに実行したいコード
	}
);
````

同期実行したいときは `dispatch_async()` の代わりに `dispatch_sync()` を使う。

Main thread から dispatch_sync で main queue に突っ込もうとすると誰も処理できずに詰まるので注意。
どの thread から呼ばれるかわからない場合は自分がどの thread にいるかチェックする。
(もっと良い方法あるかな?)

````objectivec
if ([NSThread isMainThread]) {
    // 処理
} else {
    dispatch_sync (
        dispatch_get_main_queue(),
        ^{
            // 処理
        }
    );
}
````
IBOutlet は class extension に書ける


この間知ったのですが、 `IBOutlet` は通常 `.m` 内に書く class extension 内にも書くことができます。
外向きのインタフェースである `.h` を汚さなくて済むので良いですね。

````objectivec:FooViewController.m
@interface FooViewController ()
@property (nonatomic, strong) IBOutlet UILabel *label;
@end

@implementation FooViewController
...
@end
````
Mac + tmux + vimでクリップボードを使えるようにする


[こちら](http://d.hatena.ne.jp/Yuzuemon/20120222/1329841466)の内容そのままだけど自分用にメモ。

```sh
mkdir ~/bin
```

```sh:.zshrc
PATH=$HOME/bin:$PATH
```

```sh
cd ~

git clone git://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard.git

cd ~/tmux-MaxOSX-pasteboard

make reattach-to-user-namespace
cp reattach-to-user-namespace ~/bin

```


```sh:.tmux.conf
set-option -g default-command "reattach-to-user-namespace -l zsh"
```

```vim:.vimrc
set clipboard+=autoselect
```
Vagrant

Oracle Virtual Boxをインストール
https://www.virtualbox.org/wiki/Downloads

Vagrantをインストール
http://downloads.vagrantup.com/

作業ディレクトリで設定ファイルを初期化

```
$ vagrant init
```

Ubuntu 64bitのイメージをダウンロード

```
$ vagrant box add lucid64 http://files.vagrantup.com/lucid64.box
```

```ruby:Vagrantfile
Vagrant::Config.run do |config|
  config.vm.box = "lucid64"
end
```

起動

```
$ vagrant up
```

ヴァーチャルマシンが起動するログインは下記

```
$ vagrant ssh
```

起動したディレクトリがVM上の/vagrantにマウントされる
つまり /home/foo/Documents/vagrant_sandbox にて vangrant initして起動したとすると
ヴァーチャルマシン内の /vagrant でそのディレクトリが参照できる。
このことでPhotoshotp等でのファイル編集が可能、デーモンの類いはVM内で実行という役割分担が可能になる。

vagrant内のポートにつなぐためにはVagrantfileにポートフォワードの設定を書く。
ヴァーチャルマシン内でsinatraを立ち上げたとして、localhostの4567ポートで接続したい場合はVagfile内に

```ruby:Vagrantfile
 config.vm.forward_port 4567, 4567
```

という行を書いておく
Vimの設定ファイルを作る

いろいろ調べたんですが `$HOME` やら `~/.vimrc` やら初心者には分かりにくい解説ばかりだったので個人的にメモ

## はじめに
vimにある程度慣れてくると、いちいち`:set ~`なんてやってられなくなります。いろいろ調べると、あらかじめ設定ファイルを作っておく事で、環境設定ができることが分かりました。

どうやらこの設定ファイルには2種類あり、システムvimrcが読み込まれた後、ユーザvimrcが読み込まれ、重複する設定はユーザvimrcで上書きされるようです。

ユーザが安全に弄れるのはユーザvimrcで、その保存先が先程述べた`$HOME`だったり`~/`と呼ばれる場所のようです。

それでは、`$HOME`やら`~/`と呼ばれる場所を探してみましょう
## $HOMEを探して移動するまで
### $HOMEを探す
```
$ echo $HOME
/Users/tetsuya
```

`echo` コマンドは `$HOME` という変数の中身をを表示しないさいってことですね。これで自分の`$HOME` が `/Users/tetsuya` だったことが分かりました。

### $HOMEへ移動
```
$ cd /Users/tetsuya
```

もしくは

```
$ cd ~/
```

## .vimrc の編集をする
### .vimrc の作成

```
vim .vimrc
```

さて、これであとは好きに設定を追加していくだけです。

参考までに私の設定は下記の通りです。

```vim
"#####表示設定#####
set number "行番号を表示する
set title "編集中のファイル名を表示
set showmatch "括弧入力時の対応する括弧を表示
syntax on "コードの色分け
set tabstop=4 "インデントをスペース4つ分に設定
set smartindent "オートインデント

"#####検索設定#####
set ignorecase "大文字/小文字の区別なく検索する
set smartcase "検索文字列に大文字が含まれている場合は区別して検索する
set wrapscan "検索時に最後まで行ったら最初に戻る
```

**追記**
[yaotti](http://qiita.com/users/yaotti)さんがコメントしてくださっているように、 `.vimrc` では `"` （ダブルクオテーション）で始まる行はがコメント行となります。Javaでいうところの`//`、HTMLでいうところの`<!-- -->`ですね。
iOS で OSC通信


vvopensourceが良さそう。速度に難があるみたい。
とりあえず使ってみて確かめてみる。

https://code.google.com/p/vvopensource/


こちらはよくまとまっているブログ
http://akamatsu.org/aka/2011/11/21/iosでvvosc/
Perl製リバースプロキシ『Perlbal』の導入メモ


Perlbal とは、Perlで書かれたサーバーモジュール。
リバースプロキシとウェブサーバの機能を有する。

一般的によく利用される運用としては、
リバースプロキシとして、APサーバや画像サーバの前に配置し、
アクセスを捌くのに用いられる。

## 特徴
軽く触ってみた感じでは、以下が特徴的であった。

### 1. 導入が簡単
インストールは基本的には `cpan install Perlbal` だけ

### 2. 設定が単純
例えば、ローカル環境で

* リバースプロキシ ポート80
* APサーバ ポート 8080
* 画像サーバ ポート 81

という運用する場合の設定は以下のようになる。

```conf:/etc/perlbal/perlbal.conf
## APPサーバ (ポート 8080)
CREATE POOL app_pool
POOL app_pool ADD 127.0.0.1:8080
## もし、複数の APPサーバを追加する場合は、
## 同じように羅列するだけ
# POOL app_pool ADD 127.0.0.1:8081


# リバースプロキシ (ポート 80)
CREATE SERVICE balancer
  SET listen = 0.0.0.0:80
  SET role = reverse_proxy
  SET pool = app_pool
  SET enable_reproxy = true
  SET reproxy_cache_maxsize = 512000
  SET persist_client = on
  SET persist_backend = on
  SET verify_backend = on
ENABLE balancer

# 画像サーバ (ポート 81)
CREATE SERVICE images
  SET listen = 0.0.0.0:81
  SET role = web_server
  SET docroot = /var/www/images
  SET dirindexing = 1
  SET persist_client = on
ENABLE images
```

複数サーバ構成の場合は、IPを適時書き換える。
十数行で、リバースプロキシが導入できる。

#### 起動方法

```sh
$ sudo perlbal -d
```

### 3. X-REPROXY-URL が使える
画像などを配信する際、効果的な X-REPROXY-URL が使える

### 4. ハイパフォーマンスらしい
* 100% 非同期
* ライトウェイト

などなど

## 開発元
https://github.com/perlbal/Perlbal

## リファレンス
http://www.slideshare.net/comewalk/perlbal-tutorial

## 実用例
http://blog.kyanny.me/entry/2011/12/07/235954

## 疑問点
最近の情報が少ないので、いまでも現役で使われているのかどうか気になる。
Play2.0でMySQLにつなぐ

jdbcのドライバがないと言われたので、mysql-connector-j.rbを書いてhomebrewでインストールした。

```ruby:/usr/local/Library/Formula/mysql-connector-j.rb
#http://goo.gl/4pkdPからコピペ
require 'formula'

class MysqlConnectorJ < Formula
  homepage 'http://dev.mysql.com/downloads/connector/j/5.1.html'
  url 'http://downloads.mysql.com/archives/mysql-connector-java-5.1/mysql-connector-java-5.1.13.zip'
  md5 '2e1bbd848bc99fe1c8ae9ce980adc2c9'
  def install
    prefix.install ['README', 'COPYING', 'mysql-connector-java-5.1.13-bin.jar']
  end

  def caveats
    <<-EOS.undent
      To enable Java to find Connector/J, add the following to the
      front of your CLASSPATH:
        #{prefix}
      If this is an upgrade and you have previously added the symlinks
      to your CLASSPATH, you will need to modify it to the path specified
      above so it points to the new version.
    EOS
  end
end
```

インストールしたあと下記のようにファイルを設定した(たぶん再コンパイル必要)

```scala:testproject/project/Build.scala
import sbt._
import Keys._
import PlayProject._

object ApplicationBuild extends Build {

    val appName         = "testproject"
    val appVersion      = "1.0-SNAPSHOT"

    val appDependencies = Seq(
      // Add your project dependencies here,
      "mysql" % "mysql-connector-java" % "5.1.13"
    )

    val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings(
      // Add your own project settings here      
    )

}
```
```testproject/conf/application.conf
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://host/databasename?characterEncoding=UTF8"
db.default.user=user
db.default.password=password
````
gcc で pre-defined なマクロを調べるワンライナー


````sh
echo | gcc -dM -E -
````

下記のように，標準出力にズルズルと出てくる．

````
#define __DBL_MIN_EXP__ (-1021)
#define __FLT_MIN__ 1.17549435e-38F
#define __DEC64_DEN__ 0.000000000000001E-383DD
#define __CHAR_BIT__ 8
#define __WCHAR_MAX__ 2147483647
…
````
UIActivityIndicatorViewを別スレッドで実行する


```objective-c:Indicator.h
//
//  IndicatorClass.h

#import <Foundation/Foundation.h>

@interface IndicatorClass : NSObject
{
    UIView *_loadingView;	 
    UIActivityIndicatorView *_indicator; 
    UILabel *_label;
}


- (void)accessStart :(UIView *) _uiview WithWord:(NSString*) word;
- (void)accessEnd;


@property (nonatomic, retain) UIView *loadingView;
@property (nonatomic, retain) UIActivityIndicatorView *indicator;
@property (nonatomic, retain) UILabel *label;

@end
```

```objectivec:Indicator.m
//
//  IndicatorClass.m

#import "IndicatorClass.h"

@implementation IndicatorClass
@synthesize loadingView = _loadingView;
@synthesize indicator = _indicator;
@synthesize label = _label;

- (void)accessStart :(UIView *) _uiview WithWord:(NSString*) word
{

    //インジケータON（画面中央）
    _loadingView = [[UIView alloc] initWithFrame:[_uiview bounds]];
	[_loadingView setBackgroundColor:[UIColor blackColor]];
	[_loadingView setAlpha:0.5];
	_indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
	[_loadingView addSubview:_indicator];
	[_indicator setFrame:CGRectMake ((320/2)-20, (480/2)-60, 40, 40)];
	[_indicator startAnimating];	
	
	
	
	_label = [[UILabel alloc] initWithFrame:CGRectMake((320/2)-50, (480/2)-10,100,30)];
    _label.backgroundColor = [UIColor clearColor];
	_label.text = word;
	[_loadingView addSubview:_label];
	[_uiview addSubview:_loadingView];    
    
}

- (void)accessEnd
{
	// 画面中央の処理中インジケータ表示OFF
	[_indicator stopAnimating];
	[_loadingView removeFromSuperview];
	[_label removeFromSuperview];
}

- (void)dealloc
{
    _loadingView = nil;
    _indicator = nil;
    _label = nil;
    [super dealloc];
}


@end
```


```objective-c:実行ファイル
- (void)main
{
    [_indicator accessStart:self.view WithWord:@"更新中..."];
    [self performSelectorInBackground:@selector(insertViewData) withObject:nil];
}

- (void)insertViewData
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

//重たい処理

    [_indicator accessEnd];
    [pool release];

}

```
建物に遮蔽されたプレイヤーをシルエット表示する

プレイヤーが地形の背後にいるときは、グレーで塗りつぶし、そうでないときは、単純なランバートシェーディングを適用するUnityのシェーダを書いた。

```
Shader "Custom/PlayerDiffuse" {
	Properties {
		_NotVisibleColor ("NotVisibleColor (RGB)", Color) = (0.3,0.3,0.3,1)
		_MainTex ("Base (RGB)", 2D) = "white" {}
	}
	SubShader {
		Tags { "Queue" = "Geometry+500" "RenderType"="Opaque" }
		LOD 200

		Pass {
			ZTest Greater
			Lighting Off
			ZWrite Off
			Color [_NotVisibleColor]
		}
		
		Pass {
			ZTest LEqual
			Material {
				Diffuse (1,1,1,1)
				Ambient (1,1,1,1)
			}
			Lighting On
			SetTexture [_MainTex] { combine texture } 
		}

	} 
	FallBack "Diffuse"
}
```

メモ

- このシェーダをうまく動かすためには、建物を描画したあとでプレイヤーを描かなければならなかった。描画順序は Tags { "Queue" = "XXX" } で指定できる。デフォルトのQueueはGeometryなので、これに500くらい足しとけば、いいかんじになると考えた。[参考：Unity - SubShader Tags](http://unity3d.com/support/documentation/Components/SL-SubshaderTags.html)
- 深度テストによる分岐は、Pass {}ブロックのZTest XXXの行で行う。Lighting XXXとかで描画モードを変えられる。
- Unityシェーダは文法が分かりやすくてよかった。レンダラーに対する命令を記述できるようにすることで、柔軟なシステムになっている感じがした。[参考：Unity - ShaderLab syntax](http://unity3d.com/support/documentation/Components/SL-Shader.html)
Xcodeをvimキーバインドで操作する


Xcodeのプラグイン XVim をインストール

●DL + Install
https://github.com/JugglerShu/XVim

●キーバインド一覧
https://github.com/JugglerShu/XVim/blob/master/Documents/Users/FeatureList.md


MacVimを外部エディタとして利用する方法もあるけど、
Xcodeの方が優秀なのでしばらく使ってみる。
SyntaxHighlighter

http://alexgorbatchev.com/SyntaxHighlighter/

```html
<!-- Syntacs Hilighter -->
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'/>
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'/>
<script language='javascript' type='text/javascript'>
      // Bloggerの場合にコメントを外す
      //SyntaxHighlighter.config.bloggerMode = true;
      SyntaxHighlighter.all();
</script>
<!-- /Syntacs Hilighter -->
```

```html:使い方
<pre class="brush: php">
function foo()
{
}
</pre>
```
Zend Framework zfコマンドを使ったDB接続設定

zfコマンドのPATHが通っているのとzf create projectで生成されたプロジェクト内である必要がある。

```shell
zf configure dbadapter "host=ホスト名&adapter=Pdo_Pgsql&username=ユーザ名&password=パスワード&dbname=データベース名"
```
Conduit遊び sorter

とりあえずお手軽に、前回定義した (|||)を利用。
キーと値のペアを入力に取って、キーに応じて分配してくれる。

```haskell:Helper.hs
{-| sorter
>>> C.sourceList [(1, 1),(1,2),(2,3),(4,4),(3,5),(2,6)] 
      C.=$= ( 
        1 =$-> C.map ((+) 1) 
        $ 2 =$-> C.map negate 
        $ 3 =$-> C.map ((-) 1) 
        $ C.map (\(k,v) -> (k, v * 2)) 
      ) C.$$ C.consume
[(1,2),(1,3),(2,-3),(4,8),(3,-4),(2,-6)] 
-}
(=$->) :: forall k i o m r. (Eq k, Monad m) => 
          k 
          -> C.Pipe i o m () 
          -> C.Pipe (k, i) (k, o) m () 
          -> C.Pipe (k, i) (k, o) m ()
(=$->) k pa pb =
   (C.map (\input@(x, v) -> if x == k then Right v else Left input)) 
     C.=$= (pb ||| (pa C.=$= C.map (\v -> (k, v))) )
```
Kobito.appのパスワードを忘れた時にやること

再発行機能がないので、キーチェーンアクセスに記録されているパスワードを参照する

1.  「キーチェーンアクセス」を起動する
1.  「com.qiita」で検索する
1.  ダブルクリックで開いて、「パスワードを表示:」にチェックを入れる
1.  自分のパスワードを聞かれるので、入力する
NSRange のループ


マクロで書くならこんな感じ？
range の部分に関数コールなどを入れることはできない制限がある。

````objectivec
#define FOREACH_RANGE(range, i) \
    for (NSUInteger i = range.location; i < NSMaxRange(range); i++)
````

関数で書くならこんな感じ。
ただし break はできない。continue の代わりには return が使える。

````objectivec
static void each_range(NSRange range, void(^body)(NSUInteger index)) {
    for (NSUInteger i = range.location; i < NSMaxRange(range); i++) {
        body(i);
    }
}
````

関数の方が好みかな。
DevKitを使って、Ruby for Windowsでも拡張ライブラリ付きgemをコンパイルする


RubyInstaller + DevKitを使えば、拡張ライブラリ付きのgemがWindowsでも使えるようになります。

コンパイル済みgemが提供されている場合でもコンパイルした人の環境と自身の環境との違いで上手く動かないことがあったりするので、自力でもコンパイル出来た方が何かと便利です。

## RubyInstallerのページからダウンロード
[Downloads](http://rubyinstaller.org/downloads/)

> Ruby 1.9.3-p125
> DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe

辺りがおすすめ。

## インストール
* wikiを参考に
[Development Kit · oneclick/rubyinstaller Wiki](https://github.com/oneclick/rubyinstaller/wiki/Development-Kit)

* 英語が大変だったのでこのページも参考にしました
[Windows の Ruby で native extension を使う - akishin999の日記](http://d.hatena.ne.jp/akishin999/20101004/1286204568)

## 使い方
```gem install```の際に```--platform=ruby```を付けると、適切なパスが設定されてコンパイル出来るようになります。

```shell
# エラー！！拡張ライブラリ付きのgemはコンパイル出来ない
$ gem install json

# --platform=rubyを付けるとコンパイル出来る
$ gem install json --platform=ruby
Temporarily enhancing PATH to include DevKit...
```
WebAPIのダミーサーバをすぐに作る方法


例えばWebAPIを叩いてデータ受信し処理するJavascriptとかを作ったりする時とかに、開発用のテストサーバとかって欲しい時ありませんか？

こんな勉強とか開発とかで使えそうなのはサクッといきたいところです。
こんな時はSinatraさんの出番です。

以下、Rubyとbundleが使える環境の前提です。

## 準備

セットアップ用にGemfileを作っておきます。

```ruby:Gemfile
source :rubygems
gem 'sinatra'
gem 'sinatra-jsonp'
```

次に

```
$ bundle install
```

これで環境構築終わり

## サーバを作ります

```ruby:apiserver.rb
require 'sinatra'
require 'sinatra/jsonp'

list = [
  "1111",
  "2222",
  "3333"
]

keyvalues = {
  :name => "pakue",
  :no => 89
}

get '/array' do
  jsonp list
end

get '/farray' do
  jsonp list, "showValue"
end

get '/hash' do
  jsonp keyvalues
end
```

内容は何となく解ってもらえるかと。

## サーバを起動します

サーバを起動します。

```
$ bundle exec ruby apiserver.rb
```

別の端末をたちあげて、curl使ってテストしてみます。

```
$ curl http://localhost:4567/array
["1111","2222","3333"]

$ curl http://localhost:4567/farray
showValue(["1111","2222","3333"])

$ curl http://localhost:4567/hash  
{"name":"pakue","no":89}
```
Thorでエレガントさを実感する方法


思いっきり以下のブログから引用です。詳細はそちらをご覧下さい。ブログ著者の方に感謝！

出展元：[mitukiii.jp「Rubyでコマンドラインスクリプト書くならThorが便利そう」」](http://mitukiii.jp/2011/06/01/thor/ )

以下のファイルを作る。

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

require 'rubygems'
require 'thor'

class Sample < Thor
  desc 'hello', 'Hello, World'
  def hello
    puts 'Hello, World!'
  end
end

Sample.start
```

以下のとおりに使う。

```
$ chmod +x sample
$ ./sample
Tasks:
  sample hello        # Hello, World
  sample help [TASK]  # Describe available tasks or one specific task

$ ./sample hello
Hello, World!
```

注意：
ソースと実行結果の関連がわかるように、一部ソースを出展元の内容から書き換えてます。（Worldの後に!がある、無しに差をつけました。）
# Apache Wicket の導入


 Mac Book AirにEclipseとApaceh Wicketを導入して使ってみる。
　結局JavaとEclipseがないとなにもできないとか、なんというか私らしい。

　Eclipseは普通にMacOS 64bit版を公式からDL
　Market Placeから、m2eをDL
　
　New-Maven-Maven Project
　archetypeの設定で、maven-archetype-webappを選択。

このあと、ProjectにAdd dependencyでWicketを選べば……と思ったらそうは問屋が卸してくれない。なんでや。

## そんなわけで。

Wicket サイトのQuick Startから、以下のコマンドを取得して、実行。

mvn archetype:generate -DarchetypeGroupId=org.apache.wicket -DarchetypeArtifactId=wicket-archetype-quickstart -DarchetypeVersion=1.5.5 -DgroupId=xxxGROUPIDxxx -DartifactId=wicket_sandbox1 -DarchetypeRepository=https://repository.apache.org/ -DinteractiveMode=false

Eclipseで、Import-Existing Maven Projectを選択し、プロジェクトとしてインポート。
それからMaven-generate-source

とりあえずtestフォルダーにあった、Jettyをキックするstart.javaをRunしてみたけど、
http://loalhost:8080/
にアクセスしてウマー。

ローカルのTomcatで動かせるようになるまではまだ遠い……気もするけど、ひとまずこれでいろいろ試してみようと思います。

と、思ってたんだけどどうもWicketは今の目的に合わなそうなので調査は一旦停止しそう。
シングルクオートを含む文字列をシングルクオートで囲む方法


bash 以外でどうなるのかは知りません．

````sh
message='Can't undo this!'
message="Can't undo this!"
message='Can\'t undo this!'
````
いずれもダメ．

````sh
message='Can’\''t undo this!'
````
これで解決．たぶんこれが一番可読性高そう．
parseIntの２番目の引数

多分たくさんの人がはまってると思うので今更感もあると思いますが・・・

```javascript:JS
console.info(parseInt("08"));
console.info(parseInt("09"));
```

これいくつになると思います？「０に決まってるだろ！」と思った方はもう読まなくていいです。
頭が0から始まってると8進数と判断され"08"と"09"は存在しないので0が帰ります。

今回は月の入力データのチェックで

```javascript:JS
var month = parseInt($("input#month").val());
if(month < 1 || month > 12)
{
  throw 'Invalid month!';
}
```

こんな感じの値チェックをしていたのですが、08，09でエラーになってしまい、ハマりました。しかもまずかったのはこの前に正規表現でのチェックもしていて、そっちの問題かと思ってしばらくハマりました。

```javascript:JS
var month = parseInt($("input#month").val(), 10);

```

2番目の引数に10を渡すと10進数として処理します。これにハマったの人生で2度目です・・・くやしい。
RSpec用のスニペット

[neocomplcache-snippets-complete](https://github.com/Shougo/neocomplcache-snippets-complete)で使うRSpec用のスニペット。
[こちら](http://qiita.com/items/7b9a81edf9ab8a3dc23b)を参考に作成

まだ実戦投入してないので使い勝手は不明。

```vim
snippet     desc
abbr        describe '' do end
prev_word   '^'
    describe '${1:target}' do
        ${2:example}
    end

snippet     cont
abbr        context '' do end
prev_word   '^'
    context '${1:target}' do
        ${2:example}
    end

snippet     bef
abbr        before {}
prev_word   '^'
    before (:${1:each}) { ${2:proc} }

snippet     sub
abbr        subject.method
    subject.${1:method}

snippet     subj
abbr        subject {}
prev_word   '^'
    subject { ${1:expression} }

snippet     it
abbr        it {}
prev_word   '^'
    it { ${1:expression} }


snippet     itl
abbr        it { ->{} }
prev_word   '^'
    it { ->{ ${1:lambda} } }.should ${2:change}

snippet     its
abbr        its(:hoge) {}
prev_word   '^'
    its(:${1:method}) { ${2:expression} }

snippet     let
abbr        let(:hoge) {}
prev_word   '^'
    let${1:!}(:${2:name}) { ${3:expression} }

snippet     cha
abbr        change(Hoge, :fuga)
    change(${1:target}, :${2:method})

snippet     changeby
abbr        change(Hoge, :fuga).by(1)
    change(${1:target}, :${2:method}).by(${3:increment})

snippet     changeto
abbr        change(Hoge, :fuga).from(old).to(new)
    change(${1:target}, :${2:method}).from(${3:old_value}).to(${4:new_value})

snippet     sho
abbr        should
    should be_${1:value}

snippet     shon
abbr        should_not
    should_not be_${1:value}
```
git基本コマンド

#グローバル設定
$git config --global user.name "Peichao Yu"
$git config --global user.email "hoge@gmail.com"

#現在の設定を見る
$git config -l

#特定設定項目を削除
$git config --unset --global user.email

#レポジトリを作る
$mkdir ~/public_html
$cd ~/public_html
$echo ."this is my website" > index.html
$git init

#エディター環境を設定
//in tcsh
$setenv GIT_EDITOR emacs
//in bash
$export GIT_EDITOR=vim

#コミット操作
$git commit -m "message"

#ファイル追加
$git add index.html
$git add . #ディレクトリ内のサブディレクトリやファイルを全て追加
$git commit -m "ファイルを追加しましたよー"

#変更が加えられたファイルを表示
$ git status
// On branch master
// Changed but not updated:
//   (use "git add <file>..." to update what will be committed)
//
//       modified:   SomeModifiedFile.h
//       modified:   SomeModifiedFile.m
//
no changes added to commit (use "git add" and/or "git commit -a")

#特定コミットの詳細をみる
$git show 5934tgds8g90w3wgseuv8945
$git show-branch --more=10 #現在ブランチの要約を表示

#コミット間の区別をみる
$git diff 23truwer0gy3490hg0 489ty89hv34vh348g

#ファイル削除
$git rm FileToDelete.html
$git commit -m "Deleted FileToDelete.html"

#ファイル改名
$git mv Source.html Target.html
$git commit -m "Moved Source.html to Target.html"
Time


```ruby
1.day #=> 86400
2.days #=> 172800

Time.now.to_i #=> 1334222062

Time.at(1334222062) #=> 2012-04-12 18:14:22 +0900
Time.at(1334222062) + 1.day #=> 2012-04-13 18:14:22 +0900

Time.at(1334222062).to_s(:db) #=> "2012-04-12 18:14:22"

Time::DATE_FORMATS[:date_ordinal] = lambda { |time| time.strftime("%b #{time.day.ordinalize} %Y") }
Time.at(1334222062).to_s(:date_ordinal) #=> "Apr 12th 2012"

Time.local(2012, 4, 12)   #=> 2012-04-12 00:00:00 +0900

Time.now.beginning_of_day #=> 2012-04-12 00:00:00 +0900
Time.now.end_of_day       #=> 2012-04-12 23:59:59 +0900
```
Validation messageをいじる


Railsのフォームでfields_forとかを使っているとvalidationメッセージがひどいことになった。

**Message message bodies body can't be blank**

ユーザフレンドリーなメッセージにするにはconfig/locales/en.ymlをいじればいいっぽい。

```yml:config/locales/en.yml
en:
  activerecord:
    attributes:
      message:
        message_bodies:
          body: "Message"
    errors:
      models:
        message_body:
          attributes:
            body:
              blank: "has to be filled"
```

[参考: stackoverflow.com](http://stackoverflow.com/questions/808547/fully-custom-validation-error-message-with-rails)

:blank 以外に何が使えるかは本家に聞くのが一番。

http://guides.rubyonrails.org/i18n.html#error-message-interpolation

しかし、この階層構造はどう決まってるんだ？
git submoduleしてるリポジトリをリモートの最新に更新する

`git submodule update`しても`git submodule init`した時点のコミットにしか追従してくれません。
`git submodule add`してるリポジトリ(例えば.vim/vundleとか)をgithubなどのリモートの最新に追従するには`git submodule foreach git pull origin master`を実行します。
`git status`で見るとsubmoduleで管理しているリポジトリが変更されたことになっているのでgit add/commitしておきます。
web2pyのモデルに辞書を挿入


こういうモデルがあった場合

```python:models/db.py
db = DAL('sqlite://storage.sqlite')
db.define_table(
	'name',
	Field('first'),
	Field('last'))
```

辞書を挿入したい場合こうする

```python:controllers/default.py
name = dict(first='taro', last='qiita')
try:
	db.name.insert(**name)
except:
	db.rollback()
else:
	db.commit()
```

当初、以下のコードを実行できなくて詰まったのでメモした。

```python:
name = dict(first='taro', last='qiita')
# ...
db.name.insert(name)
```
Goボタン（エンターキー？）でサブミットされないバグのパッチ


Sencha Touch2.0のExt.form.Panelのバグのパッチです。

submitOnActionプロパティが"true"の場合は、テキストフィールドにフォーカスしてGoボタンをタップすると、自動でsubmitメソッドがコールされるはずが、バグがあって正常に動作しない。

この動作をさせたい場合は、onFieldActionをオーバーライドして以下のコードで上書きすればいい。

```javascript
Ext.define('Ext.overrides.form.Panel', {
    overrides: 'Ext.form.Panel',

    initialize: function() {
        var me = this;
        me.callParent();

        me.on({
            action: 'onFieldAction',
            delegate: 'component',
            scope: me
        });

        me.element.on({
            submit: 'onSubmit',
            scope : me
        });
    }
});
```
Block の prototype, typedef など


戻り値が `int`, 引数が `NSObject *` だとして

````objectivec
// 変数 var を宣言
int(^var)(NSObject *);

// newType を宣言
typedef int(^newType)(NSObject *);

// メソッド引数として宣言
-(void)m1:(int(^)(NSObject *))blockArg;
````

変数宣言と typedef は関数ポインタと同じ形。

````cpp
int (*var)(char *);
typedef int(*newType)(char *);
void f(int(*funcArg)(char *));
````

たまに間違えるけど、こうじゃない。

````objectivec
// これは間違い
-(void)m1:(int(^blockArg)(NSObject *))
````
ステータスバーの色を変える方法


```ObjectiveC:AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // 不透明な黒にする
    [application setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:YES];

	// 半透明の黒にする
	[application setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES];
    
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    
    // Override point for customization after application launch.
    UIViewController *testAppController = [[[testAppController alloc] initWithNibName:@"testAppView" bundle:nil] autorelease];
    
    self.tabBarController = [[[UITabBarController alloc] init] autorelease];
    self.tabBarController.viewControllers = [NSArray testAppController, nil];
    self.window.rootViewController = self.tabBarController;
    
    [self.window makeKeyAndVisible];
    return YES;
}
```
Nginxでrestart, reloadをすることなくメンテナンス画面に切り替える


Nginxではifを用いて特定のファイルが存在するか調べることができるのでこれを利用する

以下のような設定にすることで/var/tmp/do_maintenanceがある場合はメンテナンス、ない場合は通常の状態を表示できる。

```Nginx:
# setディレクティブでメンテナンスon/off用フラグ変数を設定
set $maintenance false;

# /var/tmp/do_maintenanceがある場合はメンテモード
if (-e /var/tmp/do_maintenance ) {
	set $maintenance true;
}

# メンテ時でもサイトを確認するためのワークアラウンド
# 特定のアドレスからの場合は通常の状態の表示を許可
if ($remote_addr = XXX.XXX.XXX.XXX) {
	set $maintenance false;
}

# メンテナンスモードの場合は/maintenance.htmlにrewirteしつつ、rootディレクトリを書き換える
# この場合だと/var/www/maintenance/maintenance.htmlがメンテナンス画面用ファイルになる
# このような周りくどい設定にしているのは通常時にmaintenance.htmlを直アクセスで見れないようにするため。
if ($maintenance = true) {
	rewrite ^ /maintenance.html redirect;
}

# メンテナンスファイルの置き場を指定
location /maintenance.html {
	root /var/www/maintenance;
    # キャッシュさせないようにexpiresを0にしておく
    expires 0;
}

# 通常時のrootディレクトリ
location /
    root /var/www/root;
}
```
サーバのアクセスログから別ファイルへ保存する


Apacheのアクセスログから特定のユーザエージェントのログを別ファイルに保存する

出力ファイル名：result.txt
ログファイル名：apache_access_log

```shell:printout.sh
#!/bin/sh

android="Android"

while read LINE; do
    if [[ "$LINE" =~ $android ]]; then
    # "matched !"
     echo $LINE >> result.txt
    else
     echo "unmatched .."
   fi
done < apache_access_log
nginxをrestartせずに入れ替えるシェルスクリプト

一々DNSから外して入れ替えてまた投入してとか面倒なので。
クライアント側からは止まったようには感じられない、はず。

```reinstall_nginx.sh
# nginxのパスが通ってることを期待
OLD_PID=`cat /var/run/nginx.pid`

echo -n "make new master. "
sudo kill -USR2 ${OLD_PID}
MASTER=`ps ax|grep '[ n]ginx: master'|wc -l`
while [ $MASTER -eq 1 ] ; do
    sleep 1
    MASTER=`ps ax|grep '[ n]ginx: master'|wc -l`
    echo -n .
done
echo "ready"

# 高負荷環境だとココで数分待たされるかも
echo -n "shutting down old workers. "
sudo kill -WINCH ${OLD_PID}
WORKER=`ps axo ppid,pid|grep ${OLD_PID}|wc -l`
while [ $WORKER -gt 2 ] ; do
    sleep 1
    WORKER=`ps axo ppid,pid|grep ${OLD_PID}|wc -l`
    echo -n .
done
echo "killed"

sudo kill -QUIT ${OLD_PID}
echo "old master(${OLD_PID}) killed"
```
Kobito.appで書いた記事をまるごとMarkdownファイルに書き出すPHP

Kobito.appのストレージはSQLiteなので、PDOを使うと読み込みができます。
下のPHPを実行したディレクトリに、YYYYMMDD_記事名.md というファイル名でエクスポートされます。

```php:KobitoExport.php
<?php

$dbPath = $_ENV['HOME'].'/Library/Kobito/Kobito.db';

$pdo = new PDO('sqlite:'.$dbPath);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$rows = $pdo->query("SELECT * FROM ZITEM");

foreach ( $rows as $row )
{
	$created = new DateTime('now', new DateTimeZone('GMT'));
	$created->setTimestamp($row['ZCREATED_AT']);
	$created->add(new DateInterval('P31Y')); // Objective-Cのタイムスタンプは2001-01-01 GMT始まり
	$created->setTimezone(new DateTimeZone('Asia/Tokyo'));

	$prefix   = $created->format('Ymd').'_';
	$filename = $prefix.$row['ZTITLE'].'.md';
	$filename = convertFileName($filename);

	if ( file_exists($filename) === true )
	{
		throw new RuntimeException(sprintf('File already exists: %s', $filename));
	}

	file_put_contents($filename, $row['ZRAW_BODY']);
	
	echo $filename, PHP_EOL;
}

function convertFileName($value)
{
	$value = str_replace(" ", "_", $value);
	$value = str_replace("\\", "￥", $value);
	$value = str_replace("/", "／", $value);
	$value = str_replace(":", "：", $value);
	$value = str_replace("*", "＊", $value);
	$value = str_replace("?", "？", $value);
	$value = str_replace("\"", "”", $value);
	$value = str_replace("<", "＜", $value);
	$value = str_replace(">", "＞", $value);
	$value = str_replace("|", "｜", $value);
	
	return $value;
}
```
ActiveRecordを指定日時範囲内で取得する方法


```ruby:
from = Time.zone.parse("2009-10-06")
to = from + 1.day
Hoge.find(:all, :conditions => {:updated_at => from...to})

#出力されるSQL例: 
Hoge Load (0.0ms)   SELECT * FROM `hoges` WHERE (`hoges`.`updated_at` >= '2009-10-06 15:00:00' AND `hoges`.`updated_at` < '2009-10-07 15:00:00')

```


##Reference
http://tobysoft.net/wiki/index.php?Ruby%2FRuby%20on%20Rails%2F%C6%FC%BB%FE%A4%E4%C6%FC%C9%D5%A5%E1%A5%E2
Makefile の依存関係を gcc で生成する

Makefile の依存関係を gcc で生成する

````c
/* test.c */
#include <stdio.h>
#include "foo.h"
#include "bar.h"
````

のとき，下記のように gcc を呼び出すと

````sh
gcc -E -MM -w test.c
````

下記のように Makefile のルールが生成される．

````Makefile
test.o: test.c foo.h bar.h
````

このときシステムヘッダファイルは除外されることに注意．(上記例では，stdio.h は依存関係に入らない)

## 応用
````Makefile
depend:
	gcc -E -MM -w test.c >> Makefile.depends

-include Makefile.depends
````
などすると，依存関係の記述ミスが減って嬉しい．
gem の github のコードを簡単に clone する


    gem install -r gem-browse

しておきます。

    gem clone rails

で github から clone して落とせて便利！

僕は ~/git/github/ に GH なレポジトリは入れるようにしてるので、

    gem clone -d ~/git/github/ rails

で clone できます。

他にも gem-browse は gem edit で path 開いてエディタで編集でき、便利ですね。
tomcatとXDBのHTTPポート競合でtomcat起動エラー

XDBのポート番号はデフォルトで8080なので、tomcatのポート番号と重複するため、起動時にエラーとなる。
XDBを削除するには、sqlplusに接続し、以下のsqlを実行する。
c:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\catnoqm.sql
その後、再起動を行う。

SQL> SHUTDOWN IMMEDIATE
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> STARTUP
ORACLEインスタンスが起動しました。

Total System Global Area  535662592 bytes
Fixed Size                  1384760 bytes
Variable Size             213913288 bytes
Database Buffers          314572800 bytes
Redo Buffers                5791744 bytes
データベースがマウントされました。
データベースがオープンされました。
生年月日を年齢に変換



```javascript
function birth2Age(birth, base) {
  var timezone;
  if (base == null) base = new Date;
  timezone = SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone();
  birth = Utilities.formatDate(birth, timezone, 'yyyyMMdd');
  return parseInt((Utilities.formatDate(base, timezone, 'yyyyMMdd') - birth) / 10000);
}
```

```coffeescript
birth2Age = (birth, base = new Date) ->
  timezone = SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone()
  birth = Utilities.formatDate birth, timezone, 'yyyyMMdd'
  parseInt (Utilities.formatDate(base, timezone, 'yyyyMMdd') - birth) / 10000
```

スプレッドシートの関数としても使える。

```
=birth2Age(A3)
=birth2Age(A4, B4)
```
プロジェクトから消したファイルが存在しないという警告が消えない


.svnに情報が残ってしまっている。(Xcode上からじゃなくFinder上から消したとか？)
svnコマンドからやるしかないっぽい。

よく使うsvnコマンド

`svn add "ファイル名orディレクトリ名"`

`svn del "ファイル名orディレクトリ名"`

`svn commit -m "コメント"`

`svn resolved "競合が発生していたファイルorディレクトリ名"`

svn add/del した時点で、Xcodeにも(A)とか(D)とか表示されるようになるが、そこからXcodeでコミットしても成功するときもあるが失敗するときもある。

Git推奨みたいだけど出来はどうなんだろう？
シェルスクリプトでデバッグマクロっぽいものを実現する

コメントにデバッグ用のコードを書いておき、必要なときに文字列置換でコメントアウトする感じ。

```sh
# foo.sh

# デバッグプリント関数
#DEBUG function warn { echo "debug: $*" }
# または赤文字のデバッグプリント関数 （Zsh 限定）
#DEBUG function warn { print -P "%F{red}debug: $*%f" }

# デバッグモードで実行する部分
#DEBUG warn "HELLO"
#DEBUG warn "WORLD"

# デバッグモードでは実行しない部分
#DEBUG : <<'EOT'
echo "hello"
echo "world"
#DEBUG EOT
```

```
# 普通に実行
$ sh foo.sh
hello
world

# デバッグモードで実行
$ sed 's/#DEBUG //' foo.sh | sh -s
debug: HELLO
debug: WORLD

# デバッグモードで source （Zsh 限定）
$ source =(sed 's/#DEBUG //' foo.sh)
debug: HELLO
debug: WORLD
```
汎用的なDOMオブジェクト生成関数

いちいち document.createElement()を使ったりプロパティを指定したりするのが面倒なあなたへ。
ポイントは、第三引数のinnerの中にこの関数をネストして使えるという点。

```javascript:code
var ce = function(elem, attr, inner) {
	var _elem = document.createElement(elem);
	if(inner) {
		if( typeof inner == "string") {
			_elem.innerHTML = inner || "";
		} else if( typeof inner == "object") {
			_elem.appendChild(inner);
		}
	}
	if(attr) {
		for(var i in attr) {
			if(i == "className") {
				_elem.className = attr[i];
			} else {
				_elem.setAttribute(i, attr[i]);
			}
		}
	}
	return _elem;
}
```

```javascript:Howtouse
var div = ce("div",{
	id : "hoge",
	className : "foo",
	"data-example" : "var"
},ce("a",{
	href : "http://qiita.com"
},"Link to Qiita"));
document.body.appendChild(div);
```

```html:html
<div id="hoge" class="foo" data-example="var">
<a href="http://qiita.com">Link to Qiita</a>
</div>
```
Element.appendChilds

JavaSctiptでdom操作をするとき同一レベルに複数の子ノードを追加したい時に使うprototype拡張。
使い方は引数に配列形式で渡すこと。可変長引数ではないので注意。

``` javascript:code
Element.prototype.appendChilds = function (childs) {
	if(childs.length){
		var l = childs.length;
		for (var i=0; i < l; i++) {
		  this.appendChild(childs[i]);
		};
	}
}
```
Windowsのシステム環境変数とユーザ環境変数

## 環境変数の適用
### どちらか片方のみが設定されている場合
設定された値が呼び出される。
### 両方に設定されている場合
ユーザ環境変数で上書される。
**※PATHだけは例外**

### PATHがシステム環境変数とユーザ環境変数共に設定されている場合
「システム環境変数;ユーザ環境変数」という形で設定される。

- システム環境変数 : `C:\WINDOWS\system32`
- ユーザ環境変数 : `%JAVA_HOME%\bin`
- ↑の場合のPATH : `C:\WINDOWS\system32;%JAVA_HOME%\bin;`

後ろに追加されるというのがミソで、上記の環境の場合 `C:\WINDOWS\system32` と`%JAVA_HOME%\bin` に `java.exe` が存在する場合には `java` とコマンドを実行すると`C:\WINDOWS\system32` の `java.exe` が使用されます。

つまり、システム環境変数を変更できない環境でシステム環境変数でPATHが通っている場合、ユーザ側でPATHを通すことができない。（勿論スクリプト内で一時的に変更する事は可能）

**ユーザ毎にPATHを上書きする方法ってあるんですか？**

## サービスで起動されたアプリケーションの環境変数
通常は「システム環境変数」のみ適用される。
サービスの設定の「ログオンタブ → アカウント」でサービス起動ユーザを指定すると、ユーザ環境変数が反映される。

## 参考URL
- http://d.hatena.ne.jp/takuya_1st/20110116/1295188903
- http://agpg.seesaa.net/article/355605685.html
# ある特定の View だけ UIGestureRecognizer のイベントを受け取らない


一番奥の `UIView` に `UIGestureRecognizer` を設置し、手前に `UIButton`　などを設置した時、`UIButton` を押しても `UIGestureRecognizer` のイベントが起きてしまう。

こういう時は `Delegate` メソッドの `- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;` を使う。

```objectivec
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    // test if our control subview is on-screen
    if (self.controlSubview.superview != nil) {
        if ([touch.view isDescendantOfView:self.controlSubview]) {
            // we touched our control surface
            return NO; // ignore the touch
        }
    }
    return YES; // handle the touch
}
```


via: http://stackoverflow.com/questions/3344341/uibutton-inside-a-view-that-has-a-uitapgesturerecognizer
Rによる多重ループ脱出


プロミス休憩して多重脱出です。短いです。

まず、マクロ（だと思って下さい）を定義します。

```R
# マクロ（と思ってくださいね）を定義します。
._. <- function(e) {
  delayedAssign(".V.", invokeRestart(".out"), assign.env = .GlobalEnv)
  (function(e) {.Internal(.addRestart(structure(list(name = ".out", exit = environment()), class = "restart")));e})(e)
  invisible()
}
```

つかいます。

```R
> rm(list = ls()) # 全消去
> print(ls()) # 何もない
character(0)
> 
> a <- c() # グローバル変数
> 
> ._.({ # マクロ（と思ってくださね）開始
+ 
+   # 普通に書く
+   for(i in 1:3) {  
+     for (j in 1:3) {
+       if (i == 2 && j == 2) .V. # .V. が脱出マクロ。i=j=2の時に脱出。
+       a <- c(a, paste(i, j)) # グローバル変数に代入
+       print(c(i, j)) # 途中までは実行される
+     }
+   }
+ 
+ }) # マクロ終了
[1] 1 1
[1] 1 2
[1] 1 3
[1] 2 1
> 
> print(a) # ちゃんとある
[1] "1 1" "1 2" "1 3" "2 1"
```

関数の中でも使います。

```R
> rm(list = ls()) # 全消去
> 
> # 関数の中でも使えるか?
> z <- function() {
+   
+   a <- c() # ローカル変数
+   
+   ._.({ # 開始
+     
+     for(i in 1:3) {
+       for (j in 1:3) {
+         if (i == 2 && j == 2) .V. # 脱出
+         a <- c(a, paste(i, j)) # ローカル変数に追加
+         print(c(i, j)) # 途中までは実行される
+ 
+       }
+     }
+   }) # 閉じマクロ
+   
+   print(a) # ちゃんとある。
+ }
> 
> 
> z() # 関数を実行
[1] 1 1
[1] 1 2
[1] 1 3
[1] 2 1
[1] "1 1" "1 2" "1 3" "2 1" # ちゃんとローカルにある。
> a # グローバルにはない。
 エラー：  オブジェクト 'a' がありません 
```

普通に`try`の中で`stop`してもいいんですが、そうすると普通のエラーも例外処理されてしまうので。
文脈に応じて内容が変わるエイリアス

Git リポジトリの中で `st` したら `git status` になり、 Mercurial リポジトリの中で `st` したら `hg status` になる。そういうエイリアスを定義できるスクリプトを書いた。

* スクリプト：[csa.zsh](https://github.com/uasi/zsh-context-sensitive-alias/blob/master/csa.zsh)
* 説明：[README.markdown](https://github.com/uasi/zsh-context-sensitive-alias/blob/master/README.markdown)
* コピペで使える設定ファイル：[sample-zshrc.zsh](https://github.com/uasi/zsh-context-sensitive-alias/blob/master/sample-zshrc.zsh)

こんな感じで使える：

```
$ csalias ctx_git st 'git status'
$ csalias ctx_hg st 'hg status'

$ cd git-repo
$ st
# On branch master
nothing to commit (working directory clean)

$ cd hg-repo
$ st
? readme.txt

$ cd not-a-repo
$ st
zsh: command not found: st
```

[ブログにも同じこと書いたぞ](http://d.hatena.ne.jp/uasi/20120413/1334248799)。
n + k パターンはもう廃止されているらしい

プログラミングHaskellを写経してたらエラーが出た。
調べてみると n + k パターンはHaskell2010で廃止されたとのこと。

```haskell:Haskell
pred         :: Int -> Int
pred 0       = 0
pred (n + 1) = n    -- => Parse error in pattern: n + 1
```

http://www.sampou.org/cgi-bin/w3ml.cgi/haskell-jp/msg/574