OmniAICreator/Qiita-1.07M huggingface dataset:
Essential JavaScript Design Patterns For Beginners (作者：Addy Osmani)

#JavaScriptデザインパターン：The Module Pattern
###JavaScriptの勉強にすごく役に立つので、JavaScriptを勉強したい人にはお勧めです。
####※The Module Patternサンプルソース
```js:
var nameSpace = nameSpace || {};
var nameSpace.someModule = nameSpace.someModule || (function(){

  // private attributes
  var privateVar = 5;

  // private methods
  var privateMethod = function(){
     return 'Private Test';
  };

  return {
    // public attributes
    publicVar: 10,
    // public methods
    publicMethod: function(){
      return ' Followed By Public Test ';
    },

    // let's access the private members
    getData: function(){
      return privateMethod() + this.publicMethod() + privateVar;
    }
  }
})(); //the parens here cause the anonymous function to execute and return
nameSpace.someModule.getData();
```

####※The Revealing Module Patternサンプルソース
```js:
 var nameSpace = nameSpace || {};
 var nameSpace.myRevealingModule = nameSpace.myRevealingModule || (function(){

    var name = 'John Smith';
    var age = 40;

    function updatePerson(){
      name = 'John Smith Updated';
    }
    function setPerson () {
       name = 'John Smith Set';
    }
    function getPerson () {
       return name;
    }
    return {
        set: setPerson,
        get: getPerson
    };
}());

// Sample usage:
nameSpace.myRevealingModule.get();
```
###勉強・分析・まとめ：
**クロージャ**と**即時関数**の概念及び**The Singleton Pattern**を理解したら、**The Module Pattern**も理解しやすくなりますね。Functionの中にFunction及び変数を定義することにより、Javaのprivateを真似できます。Functionの中のFunction(**内部Function**)がその外側のFunction(**外部Function**)の中に定義しているFunctionを参照できることを利用して、外部に公開したいFunctionをオブジェクトの中に入れて、Returnしたら、外部に公開できるようになります。**The Revealing Module Pattern**はJavaのクラスの定義にちょっと似ていますね。

上記２つのサンプルソースを見比べたら、やはり下の**The Revealing Module Patternサンプルソース**はお勧めです。なぜならば、**The Module Patternサンプルソース**ではpublicVarをそのまま外部に公開したので、モジュールを使用した外部のソースでは`nameSpace.someModule.publicVar = "value";`の形で値を設定したり、`var param = nameSpace.someModule.publicVar;`で値を取得したりすることになります。これだと後日publicVarの変数名をpublicVar2に変更したら、外部でそのモジュールを使用するソースも修正しなくてはいけなくなります。これは好ましくないことです、それで**The Revealing Module Patternサンプルソース**のようにフィールドから値を取り出して返すメソッドGetter(ゲッター)とフィールドに値を入れるメソッド「Setter」（セッター）を通して外部に公開することでこの問題を解決できます。
アクティブでないアプリの特定アクションをホットキーで実行する

アプリケーションがアクティブでない時でもホットキーで特定のアクションを実行させたい場合， https://github.com/davedelong/DDHotKey を使うとすぐ実装できる．使い方は以下．

```objc
DDHotKeyCenter *ddhkc = [[DDHotKeyCenter alloc] init];
if (![ddhkc registerHotKeyWithKeyCode:40 modifierFlags:(NSShiftKeyMask|NSCommandKeyMask) target:self action:@selector(someMethod:) object:nil]) {
  NSLog(@"Failed to register hotkey");
}
```
このコードのうち

- キーコード
- モディファイヤキー
- アクション
- 渡すオブジェクト

の4つを変更し，これを例えば`AppDelegate.m`の`- applicationDidFinishLaunching:aNotification`などで実行してやればよい．

アプリをアクティブにしたいときは呼ばれるアクションの中で

```objc
[NSApp activateIgnoringOtherApps:YES]
```

を実行する．

参考: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSApplication_Class/Reference/Reference.html#//apple_ref/occ/instm/NSApplication/activateIgnoringOtherApps:
IEの互換表示を指定する方法

IE8,9で閲覧しているのに、互換表示がONになって、IE7のモードでレンダリングされることがる。
以下のようなメタタグを入れると最新のモードでレンダリングするようにしてくれるはず。。。

```
<meta http-equiv="X-UA-Compatible" content="IE=edge">
```

参考
http://www10.plala.or.jp/palm84/css_memo_standard_quirks.html

【追記】
上記のメタタグを追加しても上手くいっていないみたいだったので調べたら
<head>の直後に置かないと駄目みたいです。。
http://d.hatena.ne.jp/harumakiyukko/20110127/1296134771
div

```
<html>
<head>
<title>hoge</title>
<style type="text/css">
<!--
div#OYA {
	background-color: #CCCCCC;
	margin: 0px;
	padding: 0px;
	height: auto;
	width: 200px;
}
div#KO {
	background-color: #999999;
	margin: 0px;
	padding: 0px;
	height: 300px;
	width: 150px;
}
-->
</style>
</head>

<body>
<div id="OYA">id "KO"
<div id="KO"> id "KO"</div>
</div>
</body>
</html>
```
ページキャッシュをクリアする

2.6.16 以降で対応されている。

/proc/sys/vm/drop_caches に書き込みをする。先に sync を実行したほうがいいようだ。

```
# sync
# echo 1 > /proc/sys/vm/drop_caches
```

ページキャッシュをクリアするには上記の通り /proc/sys/vm/drop_caches に 1 を書き込めば良い。2 や 3 にするとページキャッシュ以外もクリアできる。

1. ページキャッシュ
2. dentry, inode
3. ページキャッシュ, dentry, inode

試してみると次のとおり:

```
# free
             total       used       free     shared    buffers     cached
Mem:       8160936    2600428    5560508          0       1048      72616
-/+ buffers/cache:    2526764    5634172
Swap:      8385920      14624    8371296
# echo 1 > /proc/sys/vm/drop_caches
# free
             total       used       free     shared    buffers     cached
Mem:       8160936    2563180    5597756          0        412      35784
-/+ buffers/cache:    2526984    5633952
Swap:      8385920      14624    8371296
```

buffers と cached が減っていることがわかる。

参考: http://www.kernel.org/doc/man-pages/online/pages/man5/proc.5.html

- - -

RHEL 4.6 なら，カーネルは 2.6.9 だがこの機能がバックポートされているようだ．

> * Added /proc/sys/vm/drop_caches to clear pagecache and slabcache on demand

http://www.redhat.com/archives/nahant-list/2007-November/msg00068.html

RHEL は未確認だけど，CentOS 4.6 では使えた．
Haskell vs Python

http://williamedwardscoder.tumblr.com/post/18319031919/programming-language-readability

これはちょっとフェアじゃないんではないか。
HaskellのやつをPythonのっぽく普通に書いたらこうなった。

~~~ {haskell}
import Control.Applicative hiding (empty)                              
import qualified Data.HashMap.Strict as HM                             
import Data.Maybe                                                      
                                                                       
data Trie v                                                            
  = Node (Maybe v) (HM.HashMap Char (Trie v))                          
                                                                       
empty :: Trie v                                                        
empty = Node Nothing HM.empty                                          
                                                                       
insert :: Trie v -> String -> v -> Trie v                              
insert (Node _ hm) "" v = Node (Just v) hm                             
insert (Node m hm) (c:cs) v =                                          
  let t = HM.lookupDefault empty c hm in                               
  Node m (HM.insert c (insert t cs v) hm)                              
                                                                       
find :: Trie v -> String -> Maybe (Trie v)                             
find t "" = Just t                                                     
find (Node _ hm) (c:cs) = do
  t <- HM.lookup c hm
  find t cs

allPrefixes :: Trie v -> [v]
allPrefixes (Node v hm) =
  maybeToList v ++ (concatMap allPrefixes $ HM.elems hm)

autocomplete :: Trie v -> String -> [v]
autocomplete t word =
  fromMaybe [] $ allPrefixes <$> find t word

main :: IO ()
main = do
  ws <- lines <$> readFile "/usr/share/dict/words"
  let trie = foldl (\t s -> insert t s s) empty ws
  print $ autocomplete trie "inn"
~~~
シート名の存在チェック

シートをVBA上でコピーや移動をする時
同名のシート名があるとエラーで中断してしまいますので
その前で、シート名が存在するかチェックする関数を作りました。
第一引数はシート名です。
Booleanで返却します。


``` ruby:シート名の存在チェック
Public Function checkSheetName(checkName As String) As Boolean

    Dim sheetObject As Object

    checkSheetName = False

    For Each sheetObject In ActiveWorkbook.Sheets
        If sheetObject.Name = checkName Then
            checkSheetName = True
            Exit For
        End If
    Next sheetObject

End Function
NSManagedObjectの属性アクセサ作成は@synthesizeではなく@dynamic

`@dynamic`はアクセサ作成をするわけではないので厳密に言うとタイトルは違うけど．
`@synthesize`と`@dynamic`の違いは基本的なポイントだけど，きちんと理解して使い分けないと思わぬところでハマる．

CoreDataを使うためにNSManagedObjectを継承した専用クラスを作ったとき，属性へのアクセサを作るためにヘッダに`@property XXX;`，*.mに`@dynamic XXX;`と書く．`@dynamic`にするのは`NSManagedObject`側で各属性のセッタ/ゲッタを作ってくれるから．
このとき`@dynamic`ではなく`@synthesize`としてしまうとCoreData用のアクセサ(`-setValue:forKey:`)が使われず，普通のアクセサが作られる．
つまりNSManagedObjectを変更しているつもりが変更されず，CoreDataに編集データが保存されないというバグになる．一見挙動が同じように見える(値の編集や取得も出来ているように見える)分困る…

```objc:MyObj.h
#import <Foundation/Foundation.h>

@interface MyObj : NSManagedObject

@property (retain) NSString *name;

@end
```

```objc:MyObj.m
#import "MyObj.h"

@implementation MyObj
@dynamic title;
// @synthesize title; // <- NG!
@end
```
接続もとのIPアドレスを表示するスクリプト

SSHとかでサーバーに接続している場合に、接続元（自分のPCとか）のIPアドレスをシェルが知りたいという場合に、そのIPアドレスを抽出するスクリプト。

```
$ who am i | cut -d '(' -f 2 | sed -e 's/)//g'
192.168.0.1
```

SSH接続した場合は環境変数のSSH_CONNECTIONでIP取れるんですが、su -しちゃうとクリアされちゃうのでwho am iから取得しています。もっと簡単に出せるコマンドとかないのかな。。。
shared contextにタグをつけて自動的にincludeする

RSpecのshared contextはもちろんご存知ですよね。

参考: [shared_context - 改めて学ぶ RSpec](http://jp.rubyist.net/magazine/?0035-RSpecInPractice#l9)

うまく使ってあげることができたならDRYで可読性の高いコードになるのですが、いちいち context の名前を打たないといけないのがだるい!
切られた context は文章の形をとっていることが多いので多くのエディタの補完機能でも打鍵数が多くなってしまいます (単語ベースの補完がほとんどのため)。

我々はこのまま「要素がふたつpushされている」なんて文章をずっと書かねばならないのでしょうか?
やはりプログラムのコード、人間が楽をしようだなんて所詮は夢のような話だったのでしょうか。
いいえ、そんなことはありません。人間はテストコードともっと仲良くなれる、そうRSpecならね。

タグを使います。

タグは example groups などを切るメソッド (`it`, `specify`, `describe`, `context`) のオプション引数として渡すことができます。
Capybaraを使って request specs を記述するときに `describe "the signup", type: :request do` と書きますが、最後に渡しているハッシュがそれです。

既に使っている方も少なくないかもしれません。

るびまのコード例を引用します。

```ruby
shared_context '要素がふたつpushされている' do
  let(:latest_value) { 'value2' }
  before do
    @stack = Stack.new
    @stack.push 'value1'
    @stack.push latest_value
  end
end

describe Stack do
  describe '#size' do
    include_context '要素がふたつpushされている'
    subject { @stack.size }
    it { should eq 2 }
  end

  describe '#pop' do
    include_context '要素がふたつpushされている'
    subject { @stack.pop }
    it { should eq latest_value }
  end
end
```

`include_context '要素がふたつpushされている'` をもう二度と書きたくないですね。

こうします:

```ruby
shared_context '要素がふたつpushされている', items: 2 do
  let(:latest_value) { 'value2' }
  before do
    @stack = Stack.new
    @stack.push 'value1'
    @stack.push latest_value
  end
end

describe Stack do
  describe '#size', items: 2 do
    subject { @stack.size }
    it { should eq 2 }
  end

  describe '#pop', items: 2 do
    subject { @stack.pop }
    it { should eq latest_value }
  end
end
```

これでOKです。便利。

注意したいのは shared context は明示的にせよ暗黙的にせよ、include する前に定義されていなければならないということです。
shared context は別のファイルに括り出して複数の *_spec.rb から呼び出して使うこともできますから、規模が大きくなってきたら利用するのも手かもしれません。
Rails3.1でradio_buttonにlabelをつける方法

ラジオボタンにラベルを付ける方法

```haml:qiita.rb
= f.radio_button(:question, "yes")
= f.label :question, 'はい', :value => "yes"
= f.radio_button(:question, "no")
= f.label :question, 'いいえ', :value => "no"
```
yesのところをマルチバイトにしたいのだけど方法がわからない
ATNDの参加者からぷりけつ民主主義に基づいて大統領を選出するプログラム

ATNDの参加者から大統領を決めるプログラム。
ATNDの参加者CSVをダウンロードして、適宜使ってください。

####利用シーン
ATNDで出前をとるときに、寿司派、ピザ派、カレー派などによる一触即発の事態を避けるために使う。

####ぷりけつ民主主義
投票を基にランダムに決定者を決定する。そいつが大統領。無限回の試行を仮定すると、多数決の民主主義よりも投票者の民意が反映されやすい民主主義。幻影旅団のルール「団員同士のマジギレご法度。争ったらコインで決める。」がモチーフ。

```python:meshi.py
#!/usr/bin/python
# coding: UTF-8
 
import csv
import random
filename = "entry.csv"
csvfile = open(filename)
 
list = []
for row in csv.reader(csvfile):
  if row[0] != "名前":
    list.append(row[0])
csvfile.close()
print random.sample(list,1)[0]
Mac(Lion)上でRVMを使用しRubyをインストール

普通にやっただけではエラーが出ていまい、インストールできない。

```sh
rvm install 1.9.3
```

Xcodeをバージョンアップすることで今までのgccとは別のものになるのが原因らしい。
そのため今までのgccをインストールする。

パッケージ管理にはHomeBrewと使用しているが、標準のフォーミュラには必要なのが含まれていないので下記からダウンロード。

https://github.com/adamv/homebrew-alt/blob/master/duplicates/apple-gcc42.rb

Formulaを該当の箇所にコピー。

```sh
cp apple-gcc42.rb /usr/local/Library/Formula/
```

gccをインストール。

```sh
brew install apple-gcc42
```

ビルドに使用するgccを設定しつつインストール。

```sh
CC=/usr/local/bin/gcc-4.2 rvm install 1.9.3
```
開発用ディレクトリーとチェック用ディレクトリーをすばやく切り替える方法は？

なんか要求が特殊で誰とも合わない気もしますが、取り敢えず貼ってみます。

開発用のディレクトリーにいて、ApacheのDocumentRootも含んでいて、開発中はこのリポジトリーで作業します。
ノンプログラマーにチェックしてもらうために、隣のディレクトリー（以下では../check）にチェック用のディレクトリーを作って、そこもApacheで、別のホスト名で確認できるようにしておきます。

「あるブランチをノンプログラマーに動作確認してほしいけど、
　自分は別のブランチで開発を進めていたい」
という要求から書きました。

きれいな解決策じゃないので、何かいいツールがあれば教えてもらえると嬉しいです！

```ruby:Rakefile
desc 'チェック用リポジトリーのブランチを切り替えます'
task :checkrepo, [:branch] do |t, args|
 if args[:branch].nil? || args[:branch].empty?
   $stderr.puts 'ブランチ名を指定してください'
   $stderr.puts '使い方：rake checkrepo[branchname]'
   exit!
 end

 Dir.chdir '../check' do
   unless system("git checkout #{args[:branch]}")
     $stderr.puts "ブランチ #{args[:branch]} に切り替えられませんでした"
     $stderr.puts `git branch`
     exit!
   end

   sh 'git pull'
   Rake::Task['scss:update'].invoke
 end
end
```

普通はどうしているんですかねえ。
チェック用ブランチを特別に作って、チェック用サーバーを立てて、そこで確認？
それだと機能ブランチ単位での確認ができないんですよねえ。
マージはSubversionよりだいぶ楽とはいえ、やっぱり不要ならやりたくない。

週明けにはIRCチャンネルに通知する部分も追記しようと思います。
息抜きにキリをつけるために

キモいコードを

``` 
<?php
$hoge = 0 or ob_start () and print print print print print print print '' and 
print preg_replace_callback ( '#(.)#', 
  function ( $c ) use (&$hoge) { return $hoge++ % 2 ? 1 : 0; },
  ob_get_clean ()  
);
```
再起ってキモいと隣の席の人に言われたので

再起で遊んでみた

``` array_walk_deeply
<?php
function array_walk_deeply ( $v, $f ) {
  $is_obj = null;
  
  if ( is_object ( $v ) && $v instanceof stdClass ) {
    $is_obj = $v = (array)$v;
  }

  if ( is_array  ( $v ) ) {
    foreach ( $v as $key => $val ) {
      $v[$key] = array_walk_deeply ( $v[$key], $f  );
    }
  }
  elseif ( is_scalar ( $v ) ) {
    $v = $f ( $v );
  }

  if ( $is_obj ) $v = (object)$v;
  return $v;
}

/*
$val1 = array (
  'hoge' => 'fuga',
  'fuga' => 'piyo',
  'outer_array' => array(
    'inner_array' => array(
      'inner_hoge' => 'inner_fuga',
    ),
  ),
  'outer' => (object) array (
    'xyzzy'  => 'emacs like',
    'vim'    => 'vi like',
    'inner' => (object)array (
      'jojo' => 'dio',
      'sasuke' => 'naruto',
    ),
));

$f1 = function ( &$v ) { 
  if ( !is_scalar ( $v ) ) return $v;
  $v = $v . ' after';
  return $v;
};

print 'array_walk_deeply' . "\n";
var_dump ( array_walk_deeply ( $val1 , $f1 ));

array_walk ( $val1, $f1 ) ;
print 'array_walk' . "\n";
var_dump ( $val1 );
*/
```
PHPでエラーを表示する＆表示するエラーを設定する

PHPで何か作る時にエラーが表示されなかったり、
E_NOTICEエラーが沢山出てしまったりする事があると思います。
そんなときに使えるコードです。
※本番環境ではエラーは表示しないでログに出力するだけにした方が良いでしょう。

```php:common.php
<?php
// エラーを画面に表示(1を0にすると画面上にはエラーは出ない)
ini_set('display_errors',1);

// 本番環境ではログに記録する
ini_set('log_errors','On');
// ログの保存先
ini_set('error_log','/log/php_error.log');

//==============================
// 出力するエラーの設定
// お好みに応じて
//==============================

// E_NOTICEエラー以外出力する
error_reporting(E_ALL ^ E_NOTICE);

// E_DEPRECATEDエラー以外出力する
// PHP5.3以降でPEARのQuickForm使う時に指定してました。
error_reporting(E_ALL ^ E_DEPRECATED);

// 全てのエラーを出力する
// PHP5.4からはE_ALLを指定しておけば、以降新しい定数が追加されても全てのエラーが表示される
error_reporting(E_ALL);
error_reporting(-1);

// エラーを出力しない
error_reporting(0);
?>
特定のCPAN Authorの人気モジュールを調べる

「この人たくさんモジュール出してるけどどれがよく使われてるんだろなー」を調べる。テストがpassした数で降順ソートしている。バージョンアップしたばかりのモジュールは少なめに出てしまうから、よく使われている度を正確に出せてはいないのだけど。

出力はこんな感じになる。（sartak氏の出したモジュールを例に）

```
pass	version	name	abstract
1509	0.03	MooseX-HasDefaults	default "is" to "ro" or "rw" for all attributes
1153	0.45	Template-Declare	Perlish declarative templates
1114	1.08	Class-Method-Modifiers	provides Moose-like method modifiers
1095	0.18	Any-Moose	use Moose or Mouse modules
1031	0.15	Test-Spelling	check for spelling errors in POD files
...
```

```perl
#!/usr/bin/env perl
use common::sense;
use LWP::Simple;
use JSON::XS;
use Data::Dumper;
use LWP::UserAgent;

my $ID = 'sartak';  # or whoever!

my $path = 'http://api.metacpan.org/v0/release/_search';
my $search = {
    query => {
        filtered => {
            query  => { match_all => {} },
            filter => {
                and => [
                    { term => { author => uc($ID) } },
                    { term => { status => 'latest' } }
                ]
            },
        }
    },
    sort => [
        'distribution', { 'version_numified' => { reverse => \1 } }
    ],
    fields => [qw(distribution abstract date tests version_numified)],
    size   => 1000,
};
my $ua = LWP::UserAgent->new;
my $res = $ua->post($path, Content => encode_json($search));
my $data = decode_json($res->content);
$data = [
    sort {$b->{pass} <=> $a->{pass}}
    map {
        +{
            name     => $_->{fields}->{distribution},
            pass     => $_->{fields}->{tests}->{pass} || 0,
            version  => $_->{fields}->{version_numified},
            abstract => $_->{fields}->{abstract} || '',
       }
    }
    @{$data->{hits}->{hits}}
];
say join "\t", qw(pass version name abstract);
say join "\t", @$_{qw(pass version name abstract)} for @$data;
```
クラッシュイベントを受け取り Stack Trace を出力する

クラッシュイベントを受け取って何かしたい場合は、 NSSetUncaughtExceptionHandler() にハンドラ関数のポインタを渡すだけ。

    NSSetUncaughtExceptionHandler(&exceptionHandler);


例外発生時に実行するハンドラ関数は、こんな感じで実装します。
（下記サンプルでは、スタックトレース結果をログ出力しています）

    void exceptionHandler(NSException *exception)
    {
        NSString *trace = [[exception callStackReturnAddresses] componentsJoinedByString:@"\n"];
        NSLog(@"Stack: (\n%@\n)", trace);
    }
コメントを++したいときがある

「こういうの書いた」「もっとかっこよく書けるよ、ほら」「ステキ!」

といったことがままあるので、++できたらうれしいと思います。Stockもできるとうれしい。

もっとアグレッシヴなことを言うとコメントと通常の投稿が区別されなくなって特定の投稿を参照するかんじになるともっと扱いやすくなって嬉しいです。
Fabricationとguard-rspecを使っているとき、fabricatorsが更新されたらmodelsのテストを走らせる

```ruby:Guardfile
# ...
guard 'rspec', version: 2 do
  # ...
  # Fabricators
  watch(%r{^spec/fabricators/(.+)_fabricator\.rb$}) {|m| "spec/models/#{m[1]}_spec.rb" }
end
# ...
```
rails g model などのジェネレータで生成したあとにコミットをつくる

```shell
git add -A && git commit -m "Generate with: $ $(fc -ln -1)"
```

bashとかでも `fc` って使えるのか確認してないのでZshタグつけとく。

ジェネレータでファイルを生成したり更新したら逐次コミットを作っておくと履歴を追うのに便利だし、たまにジェネレータのバグを発見するのに役立つのでオススメです。
Migrationでデータベースのスキーマを更新したあとのコミットをつくる

```shell
git add db/schema.rb && git commit -m "Migrate to $(rake db:version | ruby -ne 'puts $_[/\d+/]')"
```

sed/awkの正規表現ググるのが手間でRubyにお願いしたてへぺろ
PHPでFTPするためのクラス

PHPのFTP関数が使えない環境、PEARが使えない事情などのために作ってみた。
実装はPHPのftp.cを参考にしたので、だいたい合ってるはず。

https://github.com/suin/php-ftp-client
https://github.com/suin/php-ftp-client/blob/master/Source/Suin/FTPClient/FTPClientInterface.php
Vim でファイルの改行コードが unix 以外だったら保存する際に unix に半強制的にする

```.vimrc
function! s:set_fileformat()
        if &fileformat != "unix" && input("setlocal fileformat=unix?[y/n]") == "y"
                try
                        setlocal fileformat=unix
                catch
                endtry
        endif
endfunction
autocmd BufWritePre * :call <SID>set_fileformat()
```

改行コードが unix 以外になっていると，:w の際に setlocal fileformat=unix?[y/n] と聞かれて y を入力すると unix に変えてくれます．

unix 以外だと毎回聞かれるので，**「こんな改行コードが混在してるかもしれない部屋に居られるか！俺は自分の LF に戻る！」**って人だけお使い下さい．

ref.
[Vim の改行コードを unix に変更してみた - C++でゲームプログラミング](http://d.hatena.ne.jp/osyo-manga/20120315/1331810765)
http://ideone.com/I8joy
https://twitter.com/manga_osyo/status/180258672520331266

Special Thanks [@manga_osyo](https://twitter.com/manga_osyo)
travisでmemcache, apc等用意されてないphp extensionを利用するスクリプト

before_script:
 - 'wget http://pecl.php.net/get/memcache-2.2.6.tgz ; tar -xzf memcache-2.2.6.tgz; sh -c "cd memcache-2.2.6 && phpize && ./configure --enable-memcache && make && sudo make install" ; echo "extension=memcache.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`'
 - 'wget http://pecl.php.net/get/APC-3.1.9.tgz ; tar -xzf APC-3.1.9.tgz ; sh -c "cd APC-3.1.9 && phpize && ./configure && make && sudo make install" ; echo "extension=apc.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`'
ループを使わないfizzbuzz

```fizz-buzz.php

<?php
function dotimes ( $b, $f, $a = 0 ) { $f ( ++$a ); return $a < $b ? dotimes ( $b, $f, $a ) : null; }
dotimes ( 100, function ( $idx ) { 
  $result = ''; 
  $idx % 3 or $result .= 'fizz';
  $idx % 5 or $result .= 'buzz';
  print ( $result ? $result : $idx ) . "\n";
});
```
Xcode デバッガで [NSUserDefaults standardUserDefaults] みたいなクラスメソッドを使えないで困ったとき

    (lldb) po [NSUserDefaults standardUserDefaults]
    error: Couldn't prepare the expression for execution in the target

    (lldb) po [(Class)objc_getClass("NSUserDefaults") standardUserDefaults]
    (id) $17 = 0x0644e5a0 <NSUserDefaults: 0x644e5a0>
nodebrew で nvm, nave のエラー (環境 : zsh, Ubuntu 10.04 Server, さくら VPS 512) を回避

この問題 http://qiita.com/items/3172 を解決 (回避) するべく https://twitter.com/mizchi/status/179924315632975872 という助言に従って nodebrew https://github.com/hokaccha/nodebrew を試してみた！

そしたらまるで問題なく install も use も出来たぜヒャッハー！あと npm もあった．

Perl を使うようなので Perl が入ってないと使えないはずですが Perl が入ってないって相当限られた環境だと思うんで，zsh + Ubuntu では nodebrew が現時点での私の最適解です．

How to install は GitHub の README を読めば分かります．(英語分からなくても多分問題ないレベル．ほぼコマンドサンプルのみ．)
文字エンコーディング（UTF-8 <--> SJIS）

もっといい方法があるのかもしれませんが、よく使うので作ってみました。
mb_convert_encoding で引数を指定するのが面倒くさいと思ったためです。


```php
<?php //encoder.php
/*
utf8とsjisエンコーディングの橋渡しをするクラスです。

使い方

utf8からsjisへエンコーディングをするとき
	$result = Encoder::sjis($string)

sjisからutf8へエンコーディングをするとき
	$result = Encoder::utf8($string)
*/
class Encoder{
	const utf8 = 'utf-8';
	const sjis = 'sjis';

	public static function sjis($string){
		return mb_convert_encoding($string, self::sjis, self::utf8);
	}
	public static function utf8($string){
		return mb_convert_encoding($string, self::utf8, self::sjis);
	}
}
?>
```
さっきの投稿に.aurcとかって書いてあったので、これは何かというと

こういうのを vim の保存時に引っかけてたんですね。

.aurc のレイアウト
1行目：user_name@hostname
2行目：/path/to/identity_file
3行目：リモートホストでのプロジェクトルート

```aurc.pl
#!/usr/bin/perl
use strict;
my $target_file  = shift @ARGV;
my $command      = shift @ARGV;
$command or $command = 'UP';


if ( $target_file =~ /\.pl$|\.cgi$/ )    { 
  my $result = `perl -c $target_file 2>&1`;
  print $result;
  $result =~ /syntax ok/i or exit(0);
}
elsif ( $target_file =~ /\.php$|\.phtml$/ ) { 
  my $result = `php -l  $target_file 2>&1`;
  print $result;
  $result =~ /no syntax error/i or
    exit(0);
}

my $tmp         = $target_file;
my $host        = '';
my $identity    = '';
my $local_root  = '';
my $remote_root = '';

while ( $tmp =~ s#/[^/]+$## ){
  opendir DIR, $tmp;
  while ( my $fn = readdir ( DIR ) ){
    $fn eq '.aurc' or next;
    $local_root = $tmp;
    open F, $tmp . '/' . $fn;
    ( $host, $identity, $remote_root ) = <F>;
    chomp $host;
    chomp $identity;
    chomp $remote_root;
    last;
  }
  close DIR;
  $remote_root and last;
}
$remote_root     or die 'not found .aurc';

my $remote_file = $target_file;
$remote_file =~ s#$local_root##e;
$remote_root =~ s#/$##;
$remote_file =~ s#^/##;
$remote_file = $remote_root . '/' .$remote_file;

my $cmd = 'sftp ';
$identity and $cmd .= ' -oIdentityFile="' . $identity . '" ';
$cmd .= $host;
open  SFTP, '| ' . $cmd;

if ( $command eq 'UP' )  { print SFTP 'put "' . $target_file . '" "' . $remote_file . '"' . "\n"; } 
else                     { print SFTP 'get "' .  $remote_file. '" "' . $target_file . '"' . "\n"; }
print SFTP "quit\n";
close SFTP;
```
Dartにおけるenum的なもの

```java
class HogeType {
  static final Type1 = const HogeType();
  static final Type2 = const HogeType();
  // ...
  const HogeType();
}

// 使われ方
main() {
  HogeType type = HogeType.Type1;
  switch (type) {
  case HogeType.Type1:
    // ...
    break;
  case HogeType.Type2:
    // ...
    break;
  }
}
```
fizzbuzz

とりあえずテスト

```fizzbuzz.php

<?php
$fizzbuzz = array (); 
for ( $i = 1;  $i < 100; $i++  )  $fizzbuzz[$i] = $i; 
for ( $i = 3;  $i < 100; $i+=3 )  $fizzbuzz[$i] = 'fizz';
for ( $i = 5;  $i < 100; $i+=5 )  $fizzbuzz[$i] = 'buzz';
for ( $i = 15; $i < 100; $i+=15 ) $fizzbuzz[$i] = 'fizzbuzz';
print join ( "\n", $fizzbuzz );

```

こんな感じ?
各ユーザーグループ(google group)との連携について

Qiitaが解決できる問題を抱えている潜在的なユーザー層として、各ユーザーグループ(google group)があります。
各ユーザーグループは、メンバーや情報の質が高く、影響力も大きいのですが、ディスカッションのドキュメントのインフラが整備されていません。例えば、ドキュメントがほぼ平文でわかりにくい、検索性が低い、やりとりを追いかけにくい、閉鎖的で横断的でない(他のコミュニティ=Qiitaで言えば別タグとの交流がほとんど皆無)等の問題があります。google groupとうまく連携できれば(具体的でなくてすみません)、質の高いユーザーをたくさん取り込めるのではないかと思いました。

それについて、下記をhtml5jに投稿しました。
http://goo.gl/ngnNj

>教えを乞う立場でこう言うのもなんですが、教えを乞う人は、質問をして回答をまとめるところまでやれば、自分の血肉になるだけでなく、コミュニティへの貢献になると思うので、ぜひそこまでやって欲しいです。特に、各ユーザーグループは、良いメンバー、良い情報が集まっているにも関わらず、色々な理由から可読性が低いため(標準でシンタックスハイライトもない、メーリス形式)、まとめることの価値が高い領域です。また、ドキュメントの価値は、情報そのものの価値だけでなく、「どこにおいてあるか」ということ、検索性に依拠する部分もあるので、個人的には、まとめる際はQiitaをおすすめします。
既存のDataGridViewの列を持ったDataGridViewRowを作成する

DataGridViewRowに行を追加する際、Rows.Addと記述すると、返ってくるのはint型で、新規作成した行にアクセスするのが面倒です。
すばやくアクセスするためには、次のように記述します。

```
var newRow = new DataGridViewRow();
newRow.CreateCells(this.dataGrid);
// これ以降でnewRowを編集
newRow.Cells["Column1"].Value = 1;

this.dataGrid.Rows.Add(newRow);
```
evalの戻り値

eval中でreturnすると、それはevalの戻り値となる。
returnがなかった場合、最後に評価された値がevalの戻り値となる。
dieした場合、評価された値がなかった場合、戻り値は未定義値となる。

```
case1(); # 2
case2(); # 2
case3(); # not defined
case4(); # not defined
sub case1 {
  my $r = 1;
  $r = eval {
    return 2;
  };
  print defined($r)?$r:"not defined","\n"; # 2
}
sub case2 {
  my $r = 1;
  $r = eval {
    my $a = 3;
  };
  print defined($r)?$r:"not defined","\n"; # 2
}
sub case3 {
  my $r = 1;
  $r = eval {
    my $a = 3;
    die;
  };
  print defined($r)?$r:"not defined","\n"; # not defined
}
sub case4 {
  my $r = 1;
  $r = eval {
  };
  print defined($r)?$r:"not defined","\n"; # not defined
}
```

要するにサブルーチンとほぼ同じ扱い。
Androidで同一Dialogを２回表示する

Androidで同一Dialogを２回表示すると、「java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.」というエラーが発生する。

dialogの初回起動時には、create（初期化）→show（表示）という順番で処理し、次回からはshowのみを使用する。

```java:MyDialog.java
private AlertDialog dialog;

public void showDialog() {
	if(dialog == null) {
		dialog = new AlertDialog.Builder(this)
		.setIcon(R.drawable.icon)
		.setTitle("Title")
		.setPositiveButton(R.string.tutorial1_positive, new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, int whichButton) {}
		})
		.create();
	}
	dialog.show();
}
```
SCSS拡張のCompassで、background: url(...);の後ろにパラメーターを付ける

いまさらながらCompassを触っています。
背景画像を示すurl(...)で、URIの最後にタイムスタンプのクエリーパラメーターを付けたかったからです。
コマンドラインで

    compass watch --sass-dir=sass --css-dir=css --images-dir=images

みたいにして、常時監視させておいた後で*.scssに

    p {
      background: image_url('cats.png') no-repeat;
    }

って書くと、

    p {
      background: url('/images/cats.png?1331742581') no-repeat;
    }

ってなります。
<ins>**但し、画像を弄ってもSCSSファイルを弄らなければタイムスタンプは変わらないので注意。** `touch`コマンドでSCSSファイルに触っておくといいでしょう。</ins>

compassを「インポート」するとクロスブラウザーな処理もできます。

    @import "compass"; /* @include border-radius(2em) のために必要 */
    p {
      height: 50em;
      @include border-radius(2em);
      background: image_url('cats.png') no-repeat;
    }

　　　⇣

    p {
      height: 50em;
      -webkit-border-radius: 2em;
      -moz-border-radius: 2em;
      -ms-border-radius: 2em;
      -o-border-radius: 2em;
      border-radius: 2em;
      background: url('/images/cats.png?1331742581') no-repeat;
    }
【直ってました】Qiita の markdown の ``` 内に日本語が入ると化ける

直った！ http://qiita.com/items/3203

以下はかつて (2012-03-14 くらい) までは化けていましたというサンプル　古いです

\`\`\` \`\`\` で囲んだ中に日本語を入力すると…

```
echo 'alias emacs="vim"' >> .zshrc # ゎぁぃ
```

うーむ
nvm も nave も zsh + Ubuntu 10.04 で使えないでゴザル

Node.js はバージョンアップが早いんで nvm か nave 使うといいみたいな情報を見かけて使ってみんとしてみるも，nvm は

```
. ~/.nvm/nvm.sh
```

すると

```
 .nvm/nvm.sh:export:10: not valid in this context: README.markdown
```

でコケるし，nave は

```
nave use latest
```

の時点で

```
no such option: rcfile
```

で何も起こらないし…　困った．同じエラーに遭遇して解決した人居ないですか？

環境の詳細は

**zsh + Ubuntu 10.04 Server amd64 on さくら VPS 512**

以下のように構築した (はず)

```
sudo aptitude install build-essential libssl-dev git-core curl zsh
```

多分こうだったはず．でこれが必要最小限のはず．

で，nvm の方は

```
git clone https://github.com/creationix/nvm.git ~/.nvm
```

nave の方は

```
git clone https://github.com/isaacs/nave.git ~/.nave
~/.nave/nave.sh install latest
~/.nave/installed/0.7.6/bin/node -v
#=> 0.7.6

mkdir -p ~/local/bin
ln -s ~/local/bin/nave ~/.nave/nave.sh
echo 'export PATH="$HOME/local/bin:$PATH"' >> .zshrc
source .zshrc
```

ここまでは行ってるけどこの後 nave use 出来ない．無理矢理このパスを追加するのでは複数の Node.js を使うためのソリューションとしてなんか違うと思う．
sinatraでBasic認証

特定のアクションのみに認証をかける場合

```ruby
helpers do
  def protected!
    unless authorized?
      response['WWW-Authenticate'] = %(Basic realm="Restricted Area")
      throw(:halt, [401, "Not authorized\n"])
    end
  end

  def authorized?
    @auth ||=  Rack::Auth::Basic::Request.new(request.env)
    @auth.provided? && @auth.basic? && @auth.credentials && @auth.credentials == ['changeme', 'changeme']
  end
end

get '/protected' do
  protected!
  "Protected page"
end
```
AsWingのJTableのセルをソート可能にする。

AsWing( http://www.aswing.org )のTips
JTableを、ヘッダーのクリックでソートできるようにする。

```actionscript3:sample.as
var tableModel:PropertyTableModel = new PropertyTableModel( listModel, names, propertys, translators );
var sorter:TableSorter = new TableSorter( tableModel );

table = new JTable( sorter );
sorter.setTableHeader( table.getTableHeader() );
```

わかれば簡単だけど、やっぱりわかりづらい。
AsWingのJTableのセルを編集不可にする。

超優秀なGUIライブラリAsWing( http://www.aswing.org )のTips

JTableはデフォルトだと、ダブルクリックでセルの編集が可能なのでこれを禁止する。

```actionscript:sample.as
table.setDefaultEditor( "Object", new AbstractCellEditor() );
```

結構、わかりづらかった。


追記:2012/03/15
上記のコードで、データを追加するときにエラーが出たので以下のコードがよさそう。

```actionscript:sample.as
var cellEditor:DefaultTextFieldCellEditor = new DefaultTextFieldCellEditor();
table.setDefaultEditor( "Object", cellEditor );
cellEditor.setClickCountToStart( Infinity );
```

追記:2012/04/13
Enterキーで編集可能だった。以下のコードなら問題ない?

```actionscript:sample.as
var cellEditor:DefaultTextFieldCellEditor = new DefaultTextFieldCellEditor();
table.setDefaultEditor( "Object", cellEditor );
cellEditor.getEditorComponent().visible = false;
```
JSONPとClosure Libraryのgoog.net.Jsonpのまとめ

私がhtml5jにJSONPとClosure Libraryのgoog.net.Jsonpについて質問したスレッドのまとめです。
元スレ:http://goo.gl/ngnNj

####JSONPが生まれた経緯とクロスドメインについて
JSONPについては、オリジナルドメインであればXHRで簡単にできることを、クロスドメインでどうするか？という問題を「 関数でpaddingしたJSONソース（テキストデータ）なら、SCRIPT要素で簡単に変数に格納できる！」という驚きがあり、広く使われるようになったと記憶しています。

####JSONPライブラリを使う目的について
Jsonpライブラリを使う目的は、「JSONデータ」を読む事ですね。
機能面では仰るとおり、「ユーザーの訪問時の体感的なレスポンスを向上させる」ものですが、今のブラウザなら、技術的にはXHR2を使うことも可能なわけで。

####JSONPについて

```html:index.html
<script>
function myfunc(arg){
alert(arg);
}
</script>
```

と書いておいて、

```javascript:other.js
myfunc('hello');
```

という1行を書いておいたファイルを

```html:loading.html
<script src="other.js"></script>
```

として読み込むと、myfunc()が実行されるのと同じです。

####goog.net.Jsonpについて

コールバック関数は第二引数に指定できます。
http://closure-library.googlecode.com/svn/docs/class_goog_net_Jsonp.html

```javascript:jsonp.js
goog.net.Jsonp(url, 'callback');
//としておくと、
function callback(arg){
alert(arg);
}
```

と、あらかじめ作っておいた関数が実行されます。

####JSONPしたあとの要素について

JSONPした後、使った<script>要素はゴミでしか無いので削除する習慣を付けておいた方が良いです。 
style要素やlink要素と違って、一旦JavaScriptとして実行された物はDOMの世界とは別の所で動き続けます。 
goog.net.jsonp ではその辺も実装されてます。

```javascript:closure/goog/net/jsonp.js
goog.dom.removeNode(scriptNode); // 323行目
```

####ドキュメントについて

Closure Libraryにおいて。"サンプルがない"とのことですが、各パッケージに対応する_test.htmlというテストコードを読むことをおすすめします。
今回の場合は、goog.net.jsonp_test.htmlです。
http://closure-library.googlecode.com/svn/trunk/closure/goog/net/jsonp_test.html

####補足
読み込みタイミングをずらすのはdefer属性（と、async属性）です。
JSONPでもAJaxでも、「必要なデータが読めない場合」の処置（通信を中断・中止したりなど）は必要だと思います。
USB接続のiPhoneにSSH接続

USB接続のiPhone（OpenSSHインストール済み）にSSH接続するメモ。

1. [usbmuxd](http://marcansoft.com/blog/iphonelinux/usbmuxd/)をダウンロード。
2. tcprelay.pyを実行。 `python tcprelay.py -t 22:7777`
3. 指定ポートでssh接続 `ssh root@localhost -p 7777`
MacOS X LionのFTPサーバを起動したり停止たりするスクリプト

Lionになってからシステム環境設定でFTPサーバのON・OFFができなくなったので。

```bash:ftp-server.sh

#!/bin/bash

show_brief() {
	echo "A FTP server manager."
}

show_usage() {
	name=$(basename $0)
	show_brief
	echo "usage:"
	echo "    $name start     : Start FTP server."
	echo "    $name stop      : Stop FTP server."
	echo "    $name status    : Show FTP server status."
}

is_ftp_server_running() {
	running=0
	sudo launchctl list com.apple.ftpd > /dev/null 2>&1 && running=1
	return $running
}

start_ftp_server() {
	is_ftp_server_running
	if [ $? -eq 1 ]
	then
		echo "FTP server is already started."
		exit 1
	fi

	sudo launchctl load -w /System/Library/LaunchDaemons/ftp.plist
	echo "Start FTP server [OK]"
}

stop_ftp_server() {
	is_ftp_server_running
	if [ $? -eq 0 ]
	then
		echo "FTP server is not started."
		exit 1
	fi

	sudo launchctl unload -w /System/Library/LaunchDaemons/ftp.plist
	echo "Stop FTP server [OK]"
}

status_ftp_server() {
	is_ftp_server_running
	if [ $? -eq 1 ]
	then
		echo "FTP server is running."
	else
		echo "FTP server is unloaded."
	fi
}

unexpected_request() {
	show_usage
	exit 1
}

if [ $# -ne 1 ]
then
	unexpected_request
fi

case $1 in
	start)
		start_ftp_server
		;;
	stop)
		stop_ftp_server
		;;
	status)
		status_ftp_server
		;;
	*)
		unexpected_request
		;;
esac
```
pryインストール時のエラー対処方法(Mint12＋RVM)

Mint12にてpryをインストールしようとしたらエラー発生。

```sh
gem install pry
```

ググったら[こんな](http://mallibone.wordpress.com/2012/02/21/fixing-ruby-pryreadline-under-ubuntu/)情報を発見。
readlineがコンパイルされていないのが原因とのこと。

なのでreadlineをコンパイルする。

```sh
sudo aptitude install libreadline6-dev
```

```sh
cd ~/.rvm/src/ruby-1.9.2-p318/ext/readline
ruby extconf.rb
make
make install
```

```sh
gem install pry
```

無事にインストールできた。
neocomplcache のスニペットを書くのに役立つスニペット

``` :snippet.snip
delete      snip
snippet     snippet
alias       snip
abbr        snippet
    snippet ${1:name}
    abbr    ${2:abbr}
    ${0}
```

neocomplcache-snippets-complete には，一応 snip というスニペットがデフォルトでありますが，prev_word を設定していて汎用性に欠けるので，より汎用的なものを作りました．
snippet.snipというファイル名で保存して，保存したディレクトリへのパスを g:neocomplcache_snippets_dir で設定して下さい．
スニペットに alias を頻繁に定義する場合は

``` :snippet.snip
delete      snip
snippet     snippet
alias       snip
abbr        snippet
    snippet ${1:name}
    alias   ${2:alias}
    abbr    ${3:abbr}
    ${0}
```

というふうにすると良いです．
今日の日付のフォルダを作成

わざわざGroovyでやる必要あるのかよくわかりませんが。。。

```groovy
def path = /C:\work/
new File("${path}/${new Date().format('yyyyMMdd')}").mkdir()
```
WindowsのPATHを「/c:\work\xxxx\yyyy\zzz.txt/」で書くとエスケープしなくていいのはちょっとした事書く時には凄い嬉しいです。
DataViewのはまりどころ

DataViewを使うときのハマリポイント(firefoxは使えないけど)

```javascript:
var buff = new ArrayBuffer(12);
//オフセット4byte、長さ8
var bytes = new Uint8Array(buff, 4, 8);
bytes[0] = 1;

//bytes.bufferの元はbuffなので0が返る
var view = new DataView(bytes.buffer);
console.log(view.getInt8(0));

//想定通り1を取得したいときは以下
var view = new DataView(bytes.buffer, bytes.byteOffset, bytes.length);
console.log(view.getInt8(0));
```

以下のようにしておくと便利

```javascript:
/**
 * @param {Uint8Array|Int8Array|ArrayBuffer} bytes
 * @param {number} byteOffset
 * @param {number} byteLength
 * @return {DataView}
 */
DataView.create = function(bytes, byteOffset, byteLength){
  var constructor = bytes.constructor;
  if(constructor === ArrayBuffer) {
    byteOffset = byteOffset || 0;
    byteLength = byteLength || bytes.byteLength;
    return new DataView(bytes, byteOffset, byteLength);
  } else if(constructor === Uint8Array || constructor === Int8Array) {
    byteOffset = byteOffset != null ? byteOffset : bytes.byteOffset;
    byteLength = byteLength != null ? byteLength : bytes.length;
    return new DataView(bytes.buffer, byteOffset, byteLength);
  } else {
    throw 'TypeError';
  }
};

var view = DataView.create(bytes);
console.log(view.getInt8(0));
```
capistranoでのunicorn再起動タスク

最低限こんなもんでいいんじゃね程度

```ruby:config/deploy.rb
namespace :deploy do
  task :start do
    run "bundle exec unicorn_rails -c #{current_path}/config/unicorn.rb -E production -D"
  end

  task :stop do
    run "kill -QUIT `cat #{current_path}/tmp/pids/unicorn.pid`"
  end

  task :restart do
    run "kill -USR2 `cat #{current_path}/tmp/pids/unicorn.pid`"
    run "kill -QUIT `cat #{current_path}/tmp/pids/unicorn.pid.oldbin`"
  end
end
```

```ruby:config/unicorn.rb
worker_processes 2
listen      File.expand_path('tmp/sockets/unicorn.sock', ENV['RAILS_ROOT'])
pid         File.expand_path('tmp/pids/unicorn.pid',     ENV['RAILS_ROOT'])
stdout_path File.expand_path('log/unicorn.log',          ENV['RAILS_ROOT'])
stderr_path File.expand_path('log/unicorn.log',          ENV['RAILS_ROOT'])
```
Capistranoでassets:precompileを自動化

```ruby:Capfile
load 'deploy'
# Uncomment if you are using Rails' assets pipeline
  # load 'deploy/assets'
```
このコメントアウトを外すだけ。外すと、

- `deploy:update_code`のあとに`deploy:assets:precompile`というタスクを実行し、precompileする
- public/assetsへのシンボリックリンクをshared/assetsに作る

なんでコメントアウトしたし…

## 追記
- 投稿したあとに同じような投稿を見つけてしまった。そちらではバグみたいなことを報告されてた。
- 一応、環境も追記しておきます。

```sh
% rails --version
Rails 3.2.2
% cap --version
Capistrano v2.11.2
```
正規表現の中で名前付きグループの後方参照

> 　Ruby 1.9 では、\k に名前の後方参照を続けるという構文で、名前付きキャプチャグループを参照できるよ
うになった。
> 
>     # 文字列からクォートのペアを取り除く
>     re = /(?<quote>['"])(?<body>[^'"]*)\k<quote>/
>     puts "These are 'quotes'".gsub(re, '\k<body>')
<cite>『プログラミング言語 Ruby』</cite>より
Open links in WebView with user's default browser on clicking them

Set `policyDelegate` of a WebView to some class and implement the delegate method below in the class.

```objective-c
- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id < WebPolicyDecisionListener >)listener {
  if ([[actionInformation valueForKey:WebActionNavigationTypeKey] intValue] == WebNavigationTypeLinkClicked) {
    [[NSWorkspace sharedWorkspace] openURL:request.URL];
    [listener ignore];
  } else {
    [listener use];
  }
}
```

MacAppならありがちな挙動なのに意外とドキュメントに書いてない&探しても見付からなくて時間かかった．ので英語で書いておく．
PHPのシンタクスチェックを再帰的に行うシェル

探すより作るほうが早いので作った

```shell:php-lint-recursive.sh
#!/bin/sh

echo "PHP Version: $(php -r 'echo PHP_VERSION;')"

if [ $# -eq 0 ]
then
	scan_dir=$(pwd)
else
	scan_dir=$1
fi

files=$(find $scan_dir -name "*.php")
total=0
errors=0

for file in $files
do
	OK=0
	result=$(php -l $file) && OK=1

	if [ $OK -eq 0 ]
	then
		echo "$result"
		errors=$(expr $errors + 1)
	fi

	total=$(expr $total + 1)
done

success=$(expr $total - $errors)

echo "\n$total files. $success ok. $errors errors."

if [ $errors -gt 0 ]
then
	exit 1
fi
```

```text:使い方
php-lint-recursive.sh

または

php-lint-recursive.sh /path/to/dir
```
RVMを使ってRubyとRailsをインストールする手順。

Mint12にて。

RVMをインストール。
この際、sudoでやったらおかしなことになってしまった。何もしなければ自身のホーム配下に.rvmというディレクトリが作成され、そこにインストールされる。
この後、.bashrcなどにインストール先を参照させる記述が必要というのをよく見かけたけど、勝手に追記されていた。

```sh
bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
```

Rubyをインストール。
ソースからコンパイルされるので結構な時間がかかる。

```sh
rvm install 1.9.2
```

Railsをバージョンごとに分けるため専用のgemsetを作成。

```sh
rvm gemset create RAILS_3_2_2
```

規定で使用するRubyとgemsetを設定。
--defaultを指定すると次回シェルを起動した際にもこの設定が使用される。
ちょっとだけ別バージョンを試したい時には不要。

```sh
rvm use ruby-1.9.2-p318@RAILS_3_2_2 --default
```

Railsをインストール。

```sh
gem install rails
```

正常にインストールされたか確認。

```sh
rails -v
```

デモを作成。demoディレクトリが作成され、その配下にあれこれやが作成される。

```sh
rails new demo
```

デモを作ろうしたらopenssl関連でエラーが出たので対応。

```sh
sudo aptitude install libssl-dev
cd ~/.rvm/src/ruby-1.9.2-p318/ext/openssl/
ruby extconf.rb
make && make install
```

更にsqlite3関連でエラーが出たので対応。

```sh
sudo aptitude install sqlite3
sudo aptitude install libsqlite3-dev
```
Linuxにおけるシリアルポートのトラブルシューティング

■Linuxにおけるシリアルポートのトラブルシューティング
================

マニュアルやチュートリアル通りにすんなりいけば問題ないが、ソフトウェアでハードウェアに繋がっているシリアルポートを触っていると、
ちょっとおかしな挙動をしているっぽいなという時などにソフトウェア側とハードウェア側と環境設定のどこで問題が生じているのかわかりにくくなる。
いろいろ試行錯誤した中でこれだけ押さえておけばトラブル時になんとかなるという要点をまとめたので公開しておく。


■シリアルポートの初期設定
----------------

デバイスとして認識されているか確認　ここに出てこない場合もある。。

```sh
dmesg | grep tty
```

ボーレート、パリティなどの現在の設定項目を表示して確認する。
この設定がハードウェア側と合っていなければ、当然おかしなことになる。

```sh
stty -F /dev/tty.iap -a
```

設定を変更する（元に戻す必要がある）（lockされていると変更適用できない）

```sh
stty -F /dev/tty.iap 19200 cs8 -parenb -cstopb

stty -F /dev/tty.iap 19200
```

 

■シリアルポートまわりで問題が起きたら試すこと
----------------
送られてきているデータを、直接コンソールで表示してみる

そもそも何が送られてきているのか表示と確認。`stty`による設定がうまくいってないとこの時点で文字化けする
`cat`は受信(read)専用で使える

```sh
cat /dev/tty.iap
while true; do cat /dev/tty.iap; done;
```

逆に、任意の文字列を送り付けてみる

```sh
echo hello > /dev/tty.iap
```

-----

`cat`や`echo`をつかったやりとりをいちいち切断せずたくさん試したくなったら、
`minicom`, `screen`などのシリアルポートに対応したターミナルエミュレーションコマンドで接続する。

`minicom`は設定画面で一時的にtty端末、ボーレート、パリティなどを設定して通信できるので便利。

```sh
minicom -s -c on
```

`minicom`は`ctrl+a→q`で切断＆終了できる

-----

`screen`が入っているマシンは多いと思う。`screen`でも、tty端末、ボーレート、パリティを指定して接続できる。
なんかエラーがでたら、rootでの実行を試してみる

```sh
screen /dev/tty.iap 19200,cs8
```

`screen`は`ctrl+a→shift+k`で切断＆終了できる

----- 

`cu`コマンドは入ってないことも多い

```sh
cu -l /dev/tty.iap -s 12000
```

-----

__python__が使える環境なら__pyserial__を使うこともできる。
pure pythonなのでpythonさえ動けば使える。windows環境やjythonだと若干面倒っぽい。

__ruby__が使えて、cがmakeできる環境なら__ruby-serialport__を使うこともできる

スマートフォンのような組み込みLinux端末上でのソフトウェア開発だと、どの方法も厳しかったりする。
最悪sttyとcatでなんとか動作確認はできる。
自分のLinuxマシンに接続して試せるという場合、minicomぐらいは入れておくと色々楽。


■シリアルポートのコーディングで調べること
----------------



 * Arduino系でよくあるシリアルポート出力メソッドの挙動を把握しておく
   * Serial.print
     * ASCIIテキストでデータをシリアルポートへ出力する
     * 区切り文字などは特にないため自分で出力する必要がある
   * Serial.println
     * ASCIIテキストのデータの末尾に__\r\n__を付けてシリアルポートへ出力する
     * `screen`, `minicon`などでも改行されるのでデバッグしやすい
     * データを受け取る際も改行区切りで処理すればOK
     * 1バイトづつ受け取って、__\r__=__0x0D__=__改行文字__と比較すると区切りがわかる
   * Serial.write
     * バイナリデータの転送

  * 区切り文字などのメタ文字と受取りたい文字が混ざっているとバグの原因になる


■まったく何も送られてきていないとき、明らかに仕様と違った値が送られてくるとき
----------------

・ケーブルの接続を確認

・ハードウェアの故障を確認


■さらに他の情報を見てみる
---------------

この記事は以下のページの内容をまとめたものです

[http://b.hatena.ne.jp/yuiseki/serialport](http://b.hatena.ne.jp/yuiseki/serialport)
Vimでコードスニペットを挿入する

同じコードを繰り返し書かないで済む。重宝する。

```vim
" VimプラグインをVundleで管理する方法はぐぐってください！
Bundle 'Shougo/neocomplcache'
Bundle 'Shougo/neocomplcache-snippets-complete'

let g:neocomplcache_snippets_dir = "~/.vim/snippets"
" Define dictionary.
let g:neocomplcache_dictionary_filetype_lists = {
    \ 'default'    : '',
    \ 'perl'       : $HOME . '/.vim/dict/perl.dict',
    \ 'javascript' : $HOME . '/.vim/dict/javascript.dict'
    \ }

" Define Keybinds.
imap <expr><C-k> neocomplcache#sources#snippets_complete#expandable() ? "\<Plug>(neocomplcache_snippets_expand)" : "\<C-n>"
smap <C-k> <Plug>(neocomplcache_snippets_expand)
```

これで C-k で登録済みのコードスニペットを呼び出せるようになる。

neocomplcache-snippets-complete というVimプラグインを用いている。昔はneocomplcacheに付属していたが今は分離されている模様。


参考までに、以下は僕がPerlを書く際に使っている現在のsnippetsです。JavaScriptでやるならば [こちら](https://github.com/zentooo/rc/blob/master/.vim/snippets/javascript.snip) が参考になるでしょう。

```snippet
snippet u
    #!/usr/bin/env perl
    use 5.10.0;
    use strict;
    use warnings;

snippet d
    use Data::Dump qw(dump);
    warn dump 

snippet dd
    use Data::Dumper;
    local $Data::Dumper::Indent = 1;
    local $Data::Dumper::Terse  = 1;
    warn Dumper 

snippet dds
    use Data::Dump::Streamer qw(Dumper);
    warn Dumper 

snippet c
    use Carp qw/croak/;

snippet n
    sub new {
        my $class = shift;
        my $args = ref $_[0] ? $_[0] : +{@_};

        ${1:code}

        bless $args, $class;
    }

snippet l
    use Class::Accessor::Lite

snippet ll
    Clas::Accessor::Lite->mk_accessors(${1:accessors});

snippet t
    #!/usr/bin/env perl -w
    use strict;
    use Test::More;

    subtest => sub {
    };

    done_testing;

snippet s
    my ($self) = @_;

snippet ex
    use parent qw(Exporter);
    our @EXPORT_OK = qw();

snippet plack
    use Plack::Request;
    sub {
        my $req = Plack::Request->new($_[0]);
        given ($req->path) {
            when ('/') {
                $req->param('');
                return [200, ["Content-Type" => "text/html"], ['200 OK']];
            }
        }
        return [404, ["Content-Type" => "text/plain"], ['404 Not Found']];
    };

snippet file
    use Path::Class qw(file);
    my @lines = file(__FILE__)->dir->file('/path/to/file')->slurp;

snippet r200
    [ 200, ['Content-Type', 'text/plain'], ['200 OK'] ]

snippet r404
    [ 404, ['Content-Type', 'text/plain'], ['404 Not Found'] ]
```
iterm2ショートカット

よく使うショートカット達　
あまり使いこなせていない　便利なのあったら教えてください

command ←(→)　タブ移動
command w　タブ閉じ
command 数字　タブ移動
command d 縦分割
command t　新規タブ
command {(})  分割したタブ間の移動
whileコマンドを読んでみた

[OSに付属するシェルスクリプトを読んで技術を盗む](http://www.atmarkit.co.jp/flinux/rensai/smart_shell/03/01.html)
に触発されて比較的良く使うwhileコマンドを読んでみました。
分からないところもあったり、もしかしたら間違ってるところもあるかもしれないので、
気づいた方がいらっしゃったらコメント下さい。


```sh:while.sh
#! /bin/sh

# シェルのオプション設定
# ここでは e:コマンドが0意外のステータスで修了した場合、一部の場合を除いて即座に修了する
# f:パス名のワイルドカードによる展開を無効にする
set -ef

# kshのバージョンを確認
# シェルの種類によってputs関数の動作を定義してる
if test -n "$KSH_VERSION"; then
	puts() {
		print -r -- "$*"
	}
else
	puts() {
		printf '%s\n' "$*"
	}
fi

ALLMATCHES=0

# getoptsコマンドを使ってオプションの有無を確認
# オプションが指定されていた場合、$whichoptsにオプションが格納される
# 例えば[$ which -help]で実行された場合、$whichoptsにhelpが格納される
# $whichopts内に[a]が格納されていたらALLMATCHESを1にし、処理を継続
# 逆に、$whichopts内に[-a]以外のオプションが指定されている場合、?)の処理に移動する
while getopts a whichopts
do
        case "$whichopts" in
                a) ALLMATCHES=1 ;;
                ?) puts "Usage: $0 [-a] args"; exit 2 ;;
        esac
done

# 不要になったオプション部分を切り捨てる
# また、exprコマンドの代わりに$((計算式))を使っている
shift $(($OPTIND - 1))

# 「$#」には引数の数が格納されている
# ここで、引数が一つも無ければ、変数ALLRETに1を格納する
if [ "$#" -eq 0 ]; then
 ALLRET=1
else
 ALLRET=0
fi

# 環境変数PATHを変数PATHに追加
# (*[!:]:)の処理ワカンネ('A`)
case $PATH in
	(*[!:]:) PATH="$PATH:";;
esac

# 全引数を変数PROGRAMに格納し、for文を実行
for PROGRAM in "$@"; do
 RET=1

 # $IFSは区切り文字が格納されている。デフォルトはスペース
 # ここで変数IFS_SAVEにスペースを格納し、
 # IFS=:で新たに区切り文字を「:」に変更している
 IFS_SAVE="$IFS"
 IFS=:
 case $PROGRAM in
  # 引数の文字列内に「/」が入っていた場合の処理
  */*)
   # $PROGRAMに格納されたファイルが存在し、実行可能であれば
   # puts "$PROGRAM"を実行し、RETに0を代入
   if [ -f "$PROGRAM" ] && [ -x "$PROGRAM" ]; then
    puts "$PROGRAM"
    RET=0
   fi
   ;;
  # 引数の文字列内に「/」以外が入っていた場合の処理 
  *)
   # $PATHに格納された文字列を順に変数ELEMENTに格納
   for ELEMENT in $PATH; do
    # 変数ELEMENTが空であれば、変数ELEMENTに「.」を代入
    if [ -z "$ELEMENT" ]; then
     ELEMENT=.
    fi
	# $ELEMENT/$PROGRAMのパスで指定されたファイルが存在し、かつ実行可能であれば
	# $ELEMENT/$PROGRAMを引数とし、puts関数を実行
    if [ -f "$ELEMENT/$PROGRAM" ] && [ -x "$ELEMENT/$PROGRAM" ]; then
     puts "$ELEMENT/$PROGRAM"
	 # 変数RETに0を代入
     RET=0
	 # 変数ALLMATCHESが1かbreakでfor文終了
     [ "$ALLMATCHES" -eq 1 ] || break
    fi
   done
   ;;
 esac
 # 区切り文字をスペースに戻す
 IFS="$IFS_SAVE"

 # 変数RETに代入された値が0でなければ、変数ALLRETに１を代入
 if [ "$RET" -ne 0 ]; then
  ALLRET=1
 fi
done
exit "$ALLRET"
```
QDebug で引用符なしで文字列を出力する

qDebug はコンソールに値を出力するのに便利な関数だが文字列だけ注意を要する。なぜならそのまま出力させると

```cpp:
const QString &s = "This is a test.";
qDebug() << s;
```

`"This is a test"`

と引用符付きで出力されてしまう。引用符なしで出力するには

```cpp:
const QString &s = "This is a test.";
qDebug("%s", qPrintable(s));
```

と qPrintable を使って printf 形式の引数で渡す必要がある。
ネスト解消のためのポリモーフィズムについて

####ポリモーフィズムに対する考え
evalなしのポリモーフィズムは分岐の記述を簡潔にすることはできるが、なくすことはできない
evalを使うと分岐のネストはなくせるが、恐ろしい
→あれ、pythonのevalでインスタンス化できない(そのうち調べよう　およよ)

####解説
一般的な分岐をなくすためのポリモーフィズムは、オブジェクト生成時点で分岐が発生してしまうように思います。ポリモーフィズムを適用すると分岐の記述は軽くなるので、当初の保守性を上げるという目的は達成できていると強弁することは可能ですが、効果を今ひとつ実感できません。
分岐を完全に断つためには、オブジェクト生成時点でeval的なことをするというアイディアがありますが、漠然とevalに不安を感じています。このあたりについてみなさんの意見を聞かせて欲しいです。
下記はポリモーフィズムというかダックタイピングですが、言いたいことは同じです。

####ポリモーフィズム化前
```python:switch.py
#そもそも分岐あり
request = param #paramはリクエストの中のパラメータと想定DogやCatが入る
if request == "Dog":
  print "wan"
elif request == "Cat":
  print "nya-"
```

####ポリモーフィズム化後
```python:polymorphism.py
#オブジェクト生成時点で分岐あり
class Dog:
  def foo(self):
    print "wan"
class Cat:
  def foo(self):
    print "nya-"

def make(animal):
  if animal == "Dog":
    return Dog()
  elif animal == "Cat":
    return Cat()

request = param #paramはリクエストの中のパラメータと想定 DogやCatが入る
animal = make(request)
animal.foo()
```

####ポリモーフィズム化したものをevalでネストを解消
```python:polymorphism_eval.py
#分岐なし
class Dog:
  def foo(self):
    print "wan"
class Cat:
  def foo(self):
    print "nya-"

request = param #paramはリクエストの中のパラメータと想定 DogやCatが入る
animal = eval(request+"()")
animal.foo()
```
twitter anywhereによるユーザー認証でできることの範囲について

現在の結論:サーバーのデータをいじるオンラインゲームのユーザー認証にtwitter anywhereは使えない。

整理。これは2leggedと3leggedの違い(?)。いつも他鯖で認証が必要になるたびに、twitter anywhereでどうにかできないかというスケベ心が働いて不毛な脳内議論が起こるので、思っていることをとりあえず残しておく。
twitter anywhereによる認証でできることは、twitterの中でできることに閉じている。例えば、つぶやいたりTL見たりとか。twitter anywhereで認証されたことを他の鯖で確認する術がないから、それ以外の目的の認証には使えない。なので、twitterアカウントで他の鯖に認証をさせたかったら腹くくって3leggedしてcookieを使わなければならない。2年前にopen socialを触ったときにも似たようなことを考えた記憶がうっすらとある。
console.logを埋め込むとIEでエラーになる

Chromeなどでデバッグするときにconsole.logを埋め込んでしまうが, InternetExplorerでは, Console APIに対応していないので, エラーになってしまう. 
そこで, console.logに対応していない場合は, ロード時にとりあえずconsoleオブジェクトとconsole.log関数を生成してエラーにはしないようにする.

``` javascript
(function () {
    if (typeof window.console === "undefined") {
         window.console = {}
    }
    if (typeof window.console.log !== "function") {
         window.console.log = function () {}
    }
})();
```
GaucheでURIからファイルGET

httpにしか対応してないし例外処理も甘いけど、書き捨て程度なら。
Gaucheでしかテストしてないので「Schemeで」とは言えないかな。
標準ライブラリに同等の機能は無いものなのか？

```scheme:uri-get.scm
(use rfc.http)
(use rfc.uri)

(define (uri-get uri)
  (receive (code status body)
    (receive (scheme user-info hostname port path query frament)
      (uri-parse uri)
      (if (eq? path #f)
        (http-get hostname "/")
        (http-get hostname path)))
    body))

(print (uri-get "http://example.com"))
```