OmniAICreator/Qiita-1.07M huggingface dataset:
指定した日時でcssやjsファイル、画像ファイルを読み替えるヘルパー

```php:timer_read.php
<?php
class TimerReadHelper extends HtmlHelper {
	var $now_date_time = null;
	
	function __construct() {
		$this->now_date_time = time();
	}
	
	function css($path, $rel = null, $options = array()) {
		if (!empty($options['from_date'])) {
			$from_date_time = strtotime($options['from_date']);
			if ($from_date_time <= $this->now_date_time) {
				$date_time = date('Y-m-d', strtotime($options['from_date']));
				if (file_exists(CSS . $path . $date_time . '.css')) {
					$path .= $date_time;
				}
			}
		}
		
		unset($options['from_date']);
		return parent::css($path, $rel, $options);
	}
}
```

```php:home_controller.php


<?php
class HomeController extends AppController {
	var $name = 'Home';
	var $uses = array();
	var $helpers = array(
		'TimerRead',
	);
	
	function index() {
	}
}
```

```php:index.ctp
<?php echo $timerRead->css('test',NULL,array('inline' => false, 'from_date' => '2013-06-03 00:00:00')); ?>
```

これで、
指定日時以前は「test.css」を、
指定日時を過ぎていて、かつ 「test2013-06-03.css」というファイルが存在したらそれを読み込む。
指定日時を過ぎているが、「test2013-06-03.css」というファイルが無かったら「test.css」を読み込む。
指定日時は、「Y-m-d H:i:s」等、「strtotime()」で解釈出来る形なら何でもいける(と思う)
思いつきの突貫で作ったから、雑な感じ&穴はあるでしょう。
同じようにして「jsファイル」や「画像ファイル」もいけるかな。
それらは後日。

一番の解決策は、
「午前0時更新」なんて物を止める。
(これが今回、本ヘルパーを思いついた要因でもあったり…)
g8でscalaプロジェクトを作る時エラーが出たらとりあえずgiter8を最新にすればいい

# 問題

g8でscalaプロジェクトを作ろうとすると以下の様なエラーが出て作れない

```
$ g8 typesafehub/scala-sbt

Exception fetching from github Unexpected response code: 403
{"message":"Missing or invalid User Agent string. See http://developer.github.com/v3/#user-agent-required"}
```

# 対処法

g8を最新にする

```
$ brew update
$ brew upgrade giter8
```

他のエラーは知らない

# 参考
https://github.com/n8han/giter8/issues/106
PATHの通し方

(環境 OS X 10.8.3)
ユーザー単位でなく、まるっと設定するやり方(らしい)

```bash:
$ sudo vi /etc/paths
```

するとこんな感じで表示される.

```text:
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
```

いじってなければこれがデフォ

上のものから優先されるので、僕がrubyを入れる際必要だったのは/usr/local/binを優先させることだったので

```text:
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
```

以上の用に修正.
 viは"i"を押して編集モード、"escキー"で抜けて":wq"で上書き&終了さえ覚えてれば最低限のことはできるはずです.

確認のため

```bash:
$ echo $PATH
```

で編集した通りの順になってればいいと思います.

pathsのやつ以外にPATHに追加されてるものもあったんですがいらんのはどうやって消せば…
enum定義に数値を割り当てる方法

C/C++/C#のenumのように定義に値を持たせたい場合の記述。
各定義のtoValue()を呼び出すことで数値の取得が行える。

```java:Motionの列挙体定義
public enum Motion{
    Stop(0),
    Walk(1),
    Run(2),
    Jump(3),
    Count(4);
    
    // 実際の数値
    private int type;
    
    // コンストラクタ
    private Motion ( int type )
    {
        this.type = type;
    }
    
    // 数値の取得
    public int toValue ( )
    {
        return type;
    }
}
```


```java:使用例
UserMotion[] userMotionArray = new UserMotion[Motion.Count.toValue()];
userMotionArray[Motion.Stop.toValue()] = new StopMotion();
```

Countは全体の定義の数を表してるので書いてあると便利かも？
確かenumObjectのスーパークラスにはlengthとかsizeメソッドは無かったはず・・・(確か・・・)
AUCTeX で PDF をコマンド一つで生成する．

Emacs の TeX 編集環境である [AUCTeX](http://www.gnu.org/software/auctex/) から [LatexMk](http://users.phys.psu.edu/~collins/software/latexmk-jcc/) を使えるようにする[auctex-latexmk.el](https://github.com/tom-tan/auctex-latexmk/) を作りました．
これを使えば，TeX のソースからコマンド一つで PDF を生成できます．

# 下準備
## LatexMk と AUCTeX のインストール
TeXLive 2011 以降をインストール後，Emacs で `M-x package-install auctex` を実行すれば準備完了です．

また，LatexMk の設定ファイルを以下の内容で作成します (DVI経由でPDFを作成する場合)．

```pl:.latexmkrc
$kanji  = "-kanji=$ENV{\"LATEXENC\"}" if defined $ENV{"LATEXENC"};
$latex  = "platex -interaction=nonstopmode $kanji";
$bibtex = 'pbibtex $kanji';
$dvipdf = 'perl -e "exec(\'dvipdfmx\', \$ARGV[0])"';
$pdf_mode = 3;
```

## auctex-latexmk のインストール
Emacs 24 以降なら，MELPA を package.el のリポジトリに追加して`M-x package-install auctex-latexmk` を実行すれば OK です． 
インストール後， `.emacs` に以下を追加しておきます．

```cl:.emacs
(auctex-latexmk-setup)
```

# 使い方
TeX 編集時， `M-x TeX-command-master` (または `C-c C-c`) を実行する時に出るメニューに`LatexMk`コマンドが追加されているはずです．
このコマンドを実行することで，PDF の生成まで一気にやってくれます．
UTF-8，EUC-JP，SJIS で書かれた TeX ファイルに関しても，それっぽく自動認識してうまいこと PDF にしてくれます．

コンパイルが出る場合でも，`C-｀` もしくは `C-c C-l` でエラーメッセージに移動してくれます．

それでは，よいEmacs & TeX ライフを！
MyISAM形式のテーブルを一気にInnoDB形式に変更するSQLを作成するSQL

別の管理者から引きついたテーブルがMyISAMになっていたので、
以下のSQLで一気にInnoDBに変更するSQLを作成して、InnoDBにしておいた。

```sql:SQLを作成するSQL
SELECT
  CONCAT("ALTER TABLE ", information_schema.`TABLES`.TABLE_NAME , " ENGINE InnoDB;") AS "SQL"
FROM
  information_schema.`TABLES`
WHERE
  information_schema.`TABLES`.TABLE_SCHEMA = "○○○○○○○○"
AND
  information_schema.`TABLES`.`ENGINE` = "MyISAM"
```
[覚書] 敵行動管理

ゲーム制作しつつC++の勉強中
VisualStudio2010を使ってるけどほんともうやだ
自分のゲームのソースから抜き出してるのでところどころ変なところがあるかもしれません。

##前置き

ゲームを作り始めたのが、もうかなり前で、その頃とは知識量が大分変わってきた。
その頃は STLもBOOSTも知らず、std::functionを使っていなかったため糞汚いソースを量産することになった
伝統のソースは今や濃厚な肥溜めとなっているため、ちまちまリファクタリングをしているわけで…

今回は敵行動管理をちょこちょこっと作ってみた
std::queueで一つづつ処理をしていく形にしている。

##敵行動管理

std::queueにstd::functionを入れて、frontを呼ぶ
functionがfalseを返した時、ququeから一つpopされる、
という形で利用してみた。

---

```cpp:

/// フレーム管理クラス
class CTimer{
public:
	CTimer():_time(0){}
	CTimer(const CTimer& rhs){_time = rhs.get_time();}

	virtual void update(){++_time;}
	virtual void reset(){_time = 0;}
	virtual void reset(const unsigned long num){_time = num;}

// 省略…
// operator == とかを書いて 直接比較とかをできるようにしたり…

private:
	unsigned long _time;
}

/// 今回作った、行動予定を入れるクラス
class CActionPattern{
public:
	CActionPattern( std::function< const bool ( CTimer& ) > f ) :
		_f(f), _t(0){}

	const bool call(){ 
		_t.update();
		return _f( std::ref(_t) );
	}

private:
	std::function< const bool ( CTimer& ) > _f;
	CTimer _t; 
};

/// ゲームで敵になるクラス
class Hoge{
public:
	void Move(){
		// queueが空ならqueueに入れなおし
		if( _actionPattern.empty() ){
			// リセット用の std::function を持ったほうがよさそう
			_actionPattern.push( std::make_shared< CActionPattern >( boost::bind( &St1_Big_Windmill::p1, this, _1 ) ) );
			_actionPattern.push( std::make_shared< CActionPattern >( boost::bind( &St1_Big_Windmill::p2, this, _1 ) ) );
			_actionPattern.push( std::make_shared< CActionPattern >( boost::bind( &St1_Big_Windmill::p3, this, _1 ) ) );
		}
		else{
			// function呼び出し
			if( !_actionPattern.front()->call() )
				_actionPattern.pop(); //< return が false なら pop
		}
	}
private:

	std::queue< std::shared_ptr<CActionPattern> > _actionPattern;

	const bool p1( const CTimer & t ){ /* 敵の行動を書く、 return が false なら 次のfunctionへ */ return t < 600; }
	const bool p2( const CTimer & t ){ return t < 300; }
	const bool p3( const CTimer & t ){ return t < 500; }

};


```

##気になる点

そして、いまいち良いのかわからない点が…。

* リセット用の関数は、それぞれで用意するほうがいいのか、それともCActionPatternに std::function で持たせたほうが良いのか
* return false　で抜けるより return true で抜けたほうがよかったりするのだろうか
* 他にも何か改善点があれば

あとプレビューだと、横が狭くて読みづらいっすね…
第11回オフラインリアルタイムどう書く groovy による実装

オフラインリアルタイムどう書く
http://atnd.org/events/38770
の、問題(ビットあみだくじ)
http://nabetani.sakura.ne.jp/hena/ord11bitamida/
の、groovyによる実装

まだ出てない言語ということで、groovy。
他の言語などの解答例は
http://qiita.com/items/93cde1a6b7561426a3ac
から辿れます。

で。
こんな感じ。

```groovy:solver.groovy
def remap(s, bits ){
  pairs=(0..8).findAll{ bits & (256>>it) }
  0.step( pairs.size(),2 ){
    Collections.swap( s, pairs[it], pairs[it+1] )
  }
  s
}

def solve( src ){
  s=(0..8).toArray()
  src.split(/-/).each{
    bits=Integer.parseInt( it, 16 )
    s=remap( s,  bits ^ (bits*2) )
  }
  s.join("")
}

def test( src, expected ){
  actual = solve( src )
  ok = actual==expected ? "ok" : "***NG***"
  println( "${ok} ${src}->${actual} ( ${expected})" )
}

/*0*/ test( "d6-7b-e1-9e", "740631825" );
/*1*/ test( "83-4c-20-10", "123805476" );
/*41*/ test( "6f-dd-ff-ff", "230685147" );
```

いつもどおり、テストデータの大半を省略。

今回は、上から順に、入れ替えによっていっぺんに処理、xor を利用、という方針で。

配列の要素を入れ替えるには `Collection.swap` を使うということを学んだ。
delegateいらず！NSNotificationCenterの使い方その２

最近つかっている _NSNotificationCenter_ がかなり便利だったのでまとめてみた。
_delegate_ を使わずにメソッド実行を委任できるものである。

前回の内容は開発者なら誰でも使うやり方だと思うが、
今回のは知らない人も多いだろう。

初めて見たときに、**ええ！こんなふうにできるの！めっちゃ便利！！**
と私は思ったし、おすすめ。

今回使うメソッドは以下の３つ

```objectivec:NSNotificationCenter
[[NSNotificationCenter defaultCenter] addObserver: selector: name:object:]
 [[NSNotificationCenter defaultCenter] removeObserver: name: object:]
[[NSNotificationCenter defaultCenter] postNotificationName:object:userInfo:]

```
delegateを使わずに、クラス間でメソッドを実行できる。
特に画面遷移やオブジェクト渡しが簡単にできる。
実装は以下のとおり。

```objectivec:ViewController.h

#import "TouchImageView.h"

@interface ViewController : UIViewController
@property (strong, nonatomic) TouchImageView *imageView;
@end
```

```objectivec:ViewController.m

static NSString * const kDetail = @"detail";

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    //タッチできる画像を配置する
    imageView = [[TouchImageView alloc] initWithImage:[UIImage imageNamed:@"sasamisan"]];
    imageView.userInteractionEnabled = YES;
    imageView.frame = CGRectMake(100, 100, 200, 300);
    [self.view addSubview:imageView];
}

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];

// @"detail" という文字列で通知を受け取れるようにする
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showDetailViewController) name:kDetail object:nil];  
}

-(void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    //通知を終了
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

//ほかのViewControllerに遷移する
-(void)showDetailViewController:(NSNotification *)notification{
    //渡されたオブジェクトから取り出す
    UIImageView *iv = (UIImageView *)[notification object];
    NSDictionary *userInfo = [notification userInfo];

    //詳細画面に遷移する
    DetailViewController *dvc = [[DetailViewController alloc] init];
    dvc.image = iv.image
    dvc.userName = userInfo[@"name"];
    dvc.sex = userInfo[@"sex"];
    [self.navigationController:dvc animated:YES];

}
@end
```
```objectivec:TouchImageView.h
@interface TouchImageView : UIImageView
@end
```

```objectivec:TouchImageView.m

static NSString * const kDetail = @"detail";

@implementation TouchImageView

//タッチされたら、その画像の詳細に遷移する
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{

    //メソッドに渡す値を設定する
    NSDictionary *dic = @{@"name": @"sasami", @"sex":@"female"};

    //kDetailという文字列を通知する。一緒にオブジェクトをいろいろ渡す
    [[NSNotificationCenter defaultCenter] postNotificationName:kDetail object:self userInfo:dic];
}
@end
```
DetailViewController は割愛。

`postNotificationName:kDetail object:self userInfo:dic` の部分で`object:`と`userInfo:`に指定された変数は、`NSNotification`というクラスでまとめられて、通知先のメソッドの第一引数となる。渡すオブジェクトがないなら`nil`を入れておこう。

次 : [ブロック構文を実装！NSNotificationCenterの使い方その3](http://qiita.com/liver_sea/items/31b5c6cf85d0e694171c)

前 : [textfieldが隠れない！NSNotificationCenterの使い方その1](http://qiita.com/items/8f16c3b64e5383ca9d95)
ビットあみだくじなるものをDで解く

問題はこんな感じらしいです
http://nabetani.sakura.ne.jp/hena/ord11bitamida/

解法は、

1. 1を探す
1. そこから右に0を探す
1. 入れ替える
1. 上記を各行について行う

とりあえず、簡単に

```d
import std.algorithm,
       std.array,
       std.bitmanip,
       std.conv,
       std.format,
       std.stdio;

void main()
{
    /*0*/ test( "d6-7b-e1-9e", "740631825" );
    /// その他のテストケースは省略
}


void test(string input, string desired)
{
    if(bitLadderLottery(input) != desired)
        throw new Exception("Error case of: " ~ input);
}


string bitLadderLottery(string input)
{
    uint[4] crossBit;
    input.formattedRead("%x-%x-%x-%x", &(crossBit[0]), &(crossBit[1]), &(crossBit[2]), &(crossBit[3]));

    uint[9] numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8];
    foreach(e; crossBit[])
        swapNumbers(numbers, e);

    auto writer = appender!string();
    writer.formattedWrite("%(%s%)", numbers[]);
    return writer.data;
}

unittest{
    assert(bitLadderLottery("d6-7b-e1-9e") == "740631825");
}


void swapNumbers(ref uint[9] numbers, uint crossLine)
{
    BitArray bitarr;
    bitarr.init((cast(void*)&crossLine)[0 .. 1], 8);
    bitarr.reverse;

    foreach(ref i; 0 .. 8)
    {
        if(!bitarr[i])
            continue;

        size_t nextZeroIndex = i;
        while(bitarr[nextZeroIndex] && nextZeroIndex < 8)
            ++nextZeroIndex;

        swap(numbers[i], numbers[nextZeroIndex]);
        i = nextZeroIndex;
    }
}
unittest{
    uint[9] numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8];

    swapNumbers(numbers, cast(uint)(0xd6));
    assert(numbers == [2, 1, 0, 4, 3, 7, 6, 5, 8]);
}
```
cocos2d-xでplistファイルを読み込む方法

忘れちゃうので自分メモ

★用意するファイルの中身
\<?xml version="1.0" encoding="UTF-8"?>
\<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
\<plist version="1.0">
\<dict>
\<key>AllItems</key>
\<dict>
\<key>CryOfCharacter01</key>
\<string>Character01.caf</string>
\<key>CryOfCharacter02</key>
\<string>Character02.caf</string>
\<key>CryOfCharacter03</key>
\<string>Character03.caf</string>
\</dict>
\</dict>
\</plist>

★読み出し処理

    void MyClass::readPropertyList() {

        CCLOG("start readPropertyList()");
        // plistを読み込む
        cocos2d::CCDictionary *plistDic = cocos2d::CCDictionary::createWithContentsOfFile("ItemList.plist");
        cocos2d::CCDictionary *Items = (cocos2d::CCDictionary*)plistDic->objectForKey("AllItems");
        cocos2d::CCArray *keys = (cocos2d::CCArray*)Items->allKeys();
        CCLOG("keys count[%d]", keys->count());
        for(int i=0; i < keys->count(); i++) {
            // キー値を取得
            cocos2d::CCObject *lists= keys->objectAtIndex(i);
            const char * key = ((cocos2d::CCString*)(lists))->getCString();
            // 値を取得
            cocos2d::CCObject* itemName = Items->objectForKey(key);
            CCLOG("No.%02d: KEY[%s] VALUE[%s]", i + 1, key, ((cocos2d::CCString *)(itemName))->getCString());
        }
        CCLOG("end  readPropertyList()");

    }

★実行結果

Cocos2d: start readPropertyList()
Cocos2d: keys count[3]
Cocos2d: No.01: KEY[CryOfCharacter01] VALUE[Character01.caf]
Cocos2d: No.02: KEY[CryOfCharacter03] VALUE[Character03.caf]
Cocos2d: No.03: KEY[CryOfCharacter02] VALUE[Character02.caf]
Cocos2d: end  readPropertyList()
並列処理時のQueueの挙動について

[parallel](http://qiita.com/items/1f4aba71871c4e6dac3d)を利用

```py:test.py
#!/usr/bin/python

import parallel
from Queue           import Queue as Q1
from multiprocessing import Queue as Q2

q1 = Q1()
q2 = Q2()

for i in xrange(6):
    q1.put(i)
    q2.put(i)

def worker(q1, q2):
    print '%6d %6d' % (q1.get(), q2.get())

#--- THREADING
print '\n--- thread ---'
print ' Queue1 Queue2'
print '--------------'
parallel.thread(worker, [q1, q2], 3)

#--- MULTIPROCESS
print '\n--- multiprocess ---'
print ' Queue1 Queue2'
print '--------------------'
parallel.multiprocess(worker, [q1, q2], 3)
```

結果

```
--- thread ---
 Queue1 Queue2
--------------
     0      0
     1      1
     2      2

--- multiprocess ---
 Queue1 Queue2
--------------------
     3      3
     3      4
     3      5
```

結論

multiprocessingのQueueを利用すべし
APIライブラリ実装のためのtips

既に多くのOSSの中で見ることが多いですが、とあるAPIのクライアントライブラリの使用方法で
クラスメソッドでもインスタンスメソッドでも同じメソッド名でコールする方法をしばしば見ます。

例えば
Client.get_list
client.get_list
のような感じです。

urbanairshipというサービスのrubyクライアントでも、この方法が提供されているので見てみました。
https://github.com/groupon/urbanairship
https://github.com/groupon/urbanairship/blob/master/lib/urbanairship.rb

ざっくりと省略すると↓のような感じで実装しています。

```rb:
module TestModule
  module ClassMethods
    def hello
      puts 'hello world'
    end
  end
  
 #特異クラスでクラスメソッドとしてインクルード
  class << self
    include ClassMethods  
  end
  
  class Client
    include ClassMethods    
  end
end

TestModule.hello  =>> 'hello world'
m = TestModule::Client.new
m.hello    =>> 'hello world'
```

クライアントを書く時には参考になりそうです。
第11回オフラインリアルタイムどう書くの問題をF#で

昨日は川崎辺りにいたのですが参加はできませんでした。

最近よく投稿してますが、ひとえにF#の勉強のために勝手にやってることでして、
オフライン参加もしないのに申し訳ないです。
また、短く書いてやろうと言う気は毛頭ないので、もしかしたら会の趣旨に反してるかもしれないです。

さて今回は [ビットあみだくじ](http://nabetani.sakura.ne.jp/hena/ord11bitamida/) とのこと。
1バイト数値を[置換](http://ja.wikipedia.org/wiki/%E7%BD%AE%E6%8F%9B_%28%E6%95%B0%E5%AD%A6%29)に置き換えた後で、配列に順次適用しています。

```fsharp:Program.fs
open System

let perm x =
  let rec bin i x =
    seq { yield (i,x&&&1); yield! bin (i+1) (x>>>1) }
  let folder xs (i,b) =
    if b>0 then
      match xs with
      | (s,e)::xs' when e=i -> (s,i+1)::xs'
      | _                   -> (i,i+1)::xs
    else
      xs
  bin 0 x
  |> Seq.take 8
  |> Seq.fold folder []

let swap (xs:'a array) p q =
  let t = xs.[p]
  xs.[p] <- xs.[q]
  xs.[q] <- t

let solve (s:string) =
  let perms =
    s.Split([|'-'|])
    |> Array.map (fun x -> Convert.ToInt32(x, 16))
    |> Array.map perm
  let nums = [|0..8|]
  for ps in perms do
    for (p,q) in ps do
      swap nums (8-p) (8-q)
  String.Join("", nums)

(* for test *)

type TestResult = Success | Failure

let test target expected =
  let actual = solve target
  printfn "%A" (if expected = actual then Success else Failure)

[<EntryPoint>]
let main args =
  test "d6-7b-e1-9e" "740631825"
  test "83-4c-20-10" "123805476"
  test "fb-f7-7e-df" "274056813"
  test "55-33-0f-ff" "123456780"
  test "00-00-00-00" "012345678"
  test "00-00-00-55" "021436587"
  test "40-10-04-01" "021436587"
  test "00-00-aa-00" "103254768"
  test "80-20-08-02" "103254768"
  test "ff-7e-3c-18" "876543210"
  test "aa-55-aa-55" "351708264"
  test "55-aa-aa-55" "012345678"
  test "db-24-db-e7" "812543670"
  test "00-01-00-40" "021345687"
  test "00-00-80-00" "102345678"
  test "01-40-00-00" "021345687"
  test "00-00-00-02" "012345768"
  test "00-00-02-00" "012345768"
  test "00-14-00-00" "012436578"
  test "00-00-01-40" "021345687"
  test "00-80-01-00" "102345687"
  test "c8-00-00-81" "120354687"
  test "05-48-08-14" "021435687"
  test "24-05-00-f0" "413205687"
  test "40-08-14-01" "021536487"
  test "18-c8-80-80" "210534678"
  test "1c-88-52-00" "120564738"
  test "ec-dc-67-62" "213468705"
  test "0a-b6-60-e9" "035162784"
  test "52-d6-c6-c2" "120345678"
  test "47-e7-b0-36" "231047658"
  test "0f-85-91-aa" "108263754"
  test "76-b6-ed-f3" "601435782"
  test "f5-5e-f7-3d" "025847163"
  test "dd-e7-fb-f9" "610247538"
  test "8f-f4-af-fd" "583246017"
  test "bf-fb-cb-f7" "105382674"
  test "e5-fd-ff-ff" "512046378"
  test "ef-df-ef-fe" "713205648"
  test "bf-7f-fd-d7" "826437105"
  test "36-ff-df-de" "814527603"
  test "6f-dd-ff-ff" "230685147"
  0
```
コマンドからWiFiのOn/Offを切り替える方法

公衆WiFi接続スクリプトを作りたくなったので、調べてみた。

# OS
- Mac OS X Mountain Lion

# WiFiネットワークデバイスを調べる
- [システム情報]→[ネットワーク]から動作中のサービスが[AirMac]のBSD装置名を参照する。

※ 筆者のBSD装置名は[en1]
 
# WiFiのOn/Offを行う
- WiFiをOnにしたい場合は、以下のコマンドを使用する。

``` Command
networksetup -setairportpower <BSD 装置名> on
```

- 筆者の環境で

``` 実行例
networksetup -setairportpower en1 on
```

を実行すると、メニューバーのWiFiがOnになった状態となる。
WiFiが既にOnになっている状態で上記コマンドを実行してもエラーにはならない。

- WiFiをOffにしたい場合は、以下のコマンドを使用する。

``` Command
networksetup -setairportpower <BSD 装置名> off
```
- 筆者の環境で

``` 実行例
networksetup -setairportpower en1 off
```

を実行すると、メニューバーのWiFiがOffになった状態となる。
WiFiが既にOffになっている状態で上記コマンドを実行してもエラーにはならない。
C言語の2進数マクロ

C言語でソースコードに直接2進数を書きたい場合がある（ような種類の業務がある）。

で。
C言語なのでマクロで実現する。
関数で実現すると enum に入れられないとか、いろいろ困るので。
軽く検索するとすぐに実装例が見つかり、例えば
http://www.kmc.gr.jp/~tak/memo/c-binary.html
に正解があるんだけど、せっかくなのでちょっと改変したバージョンを。

```c:binary_macro.c
// compiled with clang -std=c99 -Wall
#include <stdint.h> // to use UINT64_C
#include <stdio.h>
#include <assert.h>

#define B(b) (\
        ((UINT64_C(0##b)>> 0) & 7 ? (1U<< 0) : 0U) | \
        ((UINT64_C(0##b)>> 3) & 7 ? (1U<< 1) : 0U) | \
        ((UINT64_C(0##b)>> 6) & 7 ? (1U<< 2) : 0U) | \
        ((UINT64_C(0##b)>> 9) & 7 ? (1U<< 3) : 0U) | \
        ((UINT64_C(0##b)>>12) & 7 ? (1U<< 4) : 0U) | \
        ((UINT64_C(0##b)>>15) & 7 ? (1U<< 5) : 0U) | \
        ((UINT64_C(0##b)>>18) & 7 ? (1U<< 6) : 0U) | \
        ((UINT64_C(0##b)>>21) & 7 ? (1U<< 7) : 0U) | \
        ((UINT64_C(0##b)>>24) & 7 ? (1U<< 8) : 0U) | \
        ((UINT64_C(0##b)>>27) & 7 ? (1U<< 9) : 0U) | \
        ((UINT64_C(0##b)>>30) & 7 ? (1U<<10) : 0U) | \
        ((UINT64_C(0##b)>>33) & 7 ? (1U<<11) : 0U) | \
        ((UINT64_C(0##b)>>36) & 7 ? (1U<<12) : 0U) | \
        ((UINT64_C(0##b)>>39) & 7 ? (1U<<13) : 0U) | \
        ((UINT64_C(0##b)>>42) & 7 ? (1U<<14) : 0U) | \
        ((UINT64_C(0##b)>>45) & 7 ? (1U<<15) : 0U) | \
        ((UINT64_C(0##b)>>48) & 7 ? (1U<<16) : 0U) | \
        ((UINT64_C(0##b)>>51) & 7 ? (1U<<17) : 0U) | \
        ((UINT64_C(0##b)>>54) & 7 ? (1U<<18) : 0U) | \
        ((UINT64_C(0##b)>>57) & 7 ? (1U<<19) : 0U) | \
        ((UINT64_C(0##b)>>60) & 7 ? (1U<<20) : 0U) | \
        ((UINT64_C(0##b)>>63) & 7 ? (1U<<21) : 0U) | \
        (0/!((UINT64_C(0##b)) & ~01111111111111111111111 ) ) | \
        ( 0 &sizeof&(b[(char*)0] )) \
\
)

void test()
{
        enum{ 
                MASK_A = B(1010), // 定数に使える.
                MASK_ZERO = B(0000),
        };
        printf( "MASK_A==0x%x\n", MASK_A ); // MASK_A==0xa
        printf( "MASK_ZERO==0x%x\n", MASK_ZERO ); // MASK_ZERO==0x0
        enum{ ACCEPT_ONLY_ZERO_OR_ONE=B(1234) }; // コンパイルエラー
        enum{ ACCEPT_NO_OPERATOR=B(1+0) }; // コンパイルエラー
        assert( MASK_A==0b1010 ); // clang や gcc だと 0b につづけて2進数がかけるので、このマクロは不要。
}
```

怪しげな最後の二行が、`B(1234)` や `B(1+0)` をエラーにする。


しかし。C言語で `&sizeof&` と書いたのは初めてだと思う。

投稿してから気づいたけど、BOOST_BINARY があるらしい。
see http://www.boost.org/doc/libs/1_53_0/libs/utility/utility.htm#BOOST_BINARY
ソースを見ると魔力の高さに畏れ入る。
multiprocessing vs threading

時間計測するため [laptimer](http://qiita.com/items/65c9adb95ed869b89ee9)を用意する


```py:parallel.py
#!/usr/bin/python

from multiprocessing import Process
from threading       import Thread

def thread(function, args, processes):

    process_list = []
    for i in xrange(processes):
        p = Thread(target=function, args=args)
        p.start()
        process_list.append(p)
    for i in process_list:
        i.join()

def multiprocess(function, args, processes):

    process_list = []
    for i in xrange(processes):
        p = Process(target=function, args=args)
        p.start()
        process_list.append(p)
    for i in process_list:
        i.join()

if __name__ == '__main__':

    def worker(x, y):
        for a in xrange(x):
            for b in xrange(y):
                c = a * b

    from laptimer import LapTimer

    timer = LapTimer("multiprocessing vs threading")

    # multiprocess
    multiprocess(worker, [100, 200], 10)
    timer.lap("multiprocess")

    # threading
    thread(worker, [100, 200], 10)
    timer.lap("threading")

    timer.get_lap()
```

結果

```
-------------------------
multiprocessing vs threading
   Lap : Total : message
-------------------------
 0.037 : 0.037 : multiprocess
 0.017 : 0.055 : threading
```
twigでイケてるDateTimeの比較の仕方

意外とネット上にイケてる情報がないので書きます。

ネット上だとよく以下のようなdateフィルターを用いたイケてない文字列比較をやっちゃっているのを見かけます。

例）キャンペーンが開始していない場合

```twig
{% if campaign.startDate|date('Y-m-d') > "now"|date('Y-m-d') %}
まだ開始していません。
{% endif %}
```

もちろんこれでも動きます。動きますが、文字列の大小を比較するのは何かが違う気がします。最近のtwig（1.6以降）ではdate関数がありますし、スマートにDateTimeオブジェクト同士を比較すればいいと思います。
【参考】
[twig date関数ドキュメント](http://twig.sensiolabs.org/doc/functions/date.html "twig date関数ドキュメント")

```twig
{% if campaign.startDate > date() %}
まだ開始していません。
{% endif %}
```

Twigのdate関数のコードの実装を見てみると分かるのですが、内部的にDateTimeオブジェクトを生成しています。

また、twigのdate()引数を渡すとDateTimeにコンストラクター引数を渡すことになるので、「特定の日付より前なら」という条件文も簡単に書けます。

例）2013-06-02より前だったら表示

```
{% if campaign.startDate < date('2013-06-02 00:00:00') %}
まだ開始していません。
{% endif %}
```

ここまで書いておいてなんですが、テンプレート内で日時の比較を行う方法を紹介しましたが、もし他のところでも頻繁に使われる重要なロジックなのであれば、`Campaign->isStarted()` のようにpublicメソッドをEntity側に用意した方が良いとは思います。

あとはお好みでどうぞ。
第11回オフラインリアルタイムどう書く ruby による実装



オフラインリアルタイムどう書く
http://atnd.org/events/38770
の、問題(ビットあみだくじ)
http://nabetani.sakura.ne.jp/hena/ord11bitamida/
の実装例を ruby で書いたもの。

事前に出題のために書いたものを、当日ちょっと修正したもの。

他の言語などの解答例は
http://qiita.com/items/93cde1a6b7561426a3ac
から辿れます。

で。
こんな感じ。

```ruby
def solve( src )
  lines=src.split( "-" ).map{ |i| i.to_i(16) }
  lines.each_with_object( (0..8).to_a ){ |line,s|
    (0..8).each_with_object( [[],[]] ){ |ix,o|
      o[line[ix]].push 8-ix if line[ix-1] != line[ix]
    }.transpose.each{ |b,e|
      s[b],s[e]=s[e],s[b]
    }
  }.join
end

DATA.each do |line|
  num, src, expected = line.split( /\s+/ )
  actual = solve( src )
  ok = actual == expected
  puts( "%s : %s->%s ( %s )" % [
    ok ? "ok" : "***NG***",
    src, actual, expected
  ] )
end

__END__
0 d6-7b-e1-9e 740631825
1 83-4c-20-10 123805476
```

いつもどおり、テストデータの大半を省略。

`each_with_object` を覚えたので使ってみたくなったという感じ。
だいたい戦略としては、

* 上から行くか、下から行くか
* 一つ一つたどる(外側が9回のループ)か、全部いっぺんに辿るか(外側が4回のループ)

の組み合わせで4通りがあるんだけど（もちろんそれ以外にもあるけれど）、これは、上から全部いっぺん。

どことどこを入れ替えるかを求める部分で `line` という変数に 0xd6 のような値が入っている。
これに対してビット判定することで横棒があるかどうかを判定するわけだけど、ruby だと整数に対して `0xaa[3]` のようにしてビット判定できるので、楽ちん。しかも

```ruby
a=0b10011
p a[0] #=> 1
p a[4] #=> 1
p a[5] #=> 0
p a[-1] #=> 0
p a[1000] #=> 0
p a[-1000] #=> 0
```

となるので番兵を置く必要がない。
SVProgressHUDの導入

HUDのカスタマイズ。
MITライセンス。

```bash:terminal
git clone https://github.com/samvermette/SVProgressHUD.git
```

下記３ファイルをプロジェクトに追加

```bash:
SVProgressHUD.bundle
SVProgressHUD.h
SVProgressHUD.m
```

QuartzCore.framework をプロジェクトに追加

○参考
https://github.com/samvermette/SVProgressHUD
http://dev.classmethod.jp/smartphone/ios-loading-svprogresshud/
第11回 オフラインリアルタイムどう書くに行ってきました

[第11回 オフラインリアルタイムどう書く](http://atnd.org/events/38770)で出題された[問題](http://nabetani.sakura.ne.jp/hena/ord11bitamida/)の回答です。
会場で書いたそのままです。55分くらいでどうにか。

```hs:dokaku.hs 
module Main where

import Data.Bits (shift, (.&.))
import Data.List (groupBy)
import Numeric (readHex)
import Test.HUnit (Test(..), runTestTT, (~=?))

type Problem = [Row]
type Row = [(Int, Int)]
type Columns = [Column]
type Column = Int

initState :: Columns
initState = [0..8]

main :: IO ()
main = print =<< runTestTT (TestList $ map toTest testdata)

solve :: String -> String
solve = writeProblem . foldl go initState . readProblem

readProblem :: String -> Problem
readProblem = map toRow . break'

break' :: String -> [String]
break' "" = []
break' s = case break (== '-') s of
  (x, '-':y) -> x : break' y
  (x, y) -> x : break' y

toRow :: String -> Row
toRow = map (\l -> (fst $ head l, succ $ fst $ last l)) . filter (snd . head) . groupBy (\x y -> snd x == snd y) . zip [0..] . toRow'

toRow' :: String -> [Bool]
toRow' s = map (\m -> (fst (head $ readHex s) .&. m) /= (0 :: Int)) masks
  where
    masks = map (shift 1) [7,6..0]

go :: Columns -> Row -> Columns
go c r = foldl go' c r

go' :: Columns -> (Int, Int) -> Columns
go' c (x, y) = map f $ zip [0..] c
  where
    f (i, n) | i == x = c !! y
             | i == y = c !! x
             | otherwise = n

writeProblem :: Columns -> String
writeProblem = concat . map show

---- unit testing

toTest :: (String, String) -> Test
toTest (input, expected) = expected ~=? solve input

testdata :: [(String, String)]
testdata =
  [ ( "d6-7b-e1-9e", "740631825" )
  , ( "83-4c-20-10", "123805476" )
  , ( "fb-f7-7e-df", "274056813" )
  , ( "55-33-0f-ff", "123456780" )
  , ( "00-00-00-00", "012345678" )
  , ( "00-00-00-55", "021436587" )
  , ( "40-10-04-01", "021436587" )
  , ( "00-00-aa-00", "103254768" )
  , ( "80-20-08-02", "103254768" )
  , ( "ff-7e-3c-18", "876543210" )
  , ( "aa-55-aa-55", "351708264" )
  , ( "55-aa-aa-55", "012345678" )
  , ( "db-24-db-e7", "812543670" )
  , ( "00-01-00-40", "021345687" )
  , ( "00-00-80-00", "102345678" )
  , ( "01-40-00-00", "021345687" )
  , ( "00-00-00-02", "012345768" )
  , ( "00-00-02-00", "012345768" )
  , ( "00-14-00-00", "012436578" )
  , ( "00-00-01-40", "021345687" )
  , ( "00-80-01-00", "102345687" )
  , ( "c8-00-00-81", "120354687" )
  , ( "05-48-08-14", "021435687" )
  , ( "24-05-00-f0", "413205687" )
  , ( "40-08-14-01", "021536487" )
  , ( "18-c8-80-80", "210534678" )
  , ( "1c-88-52-00", "120564738" )
  , ( "ec-dc-67-62", "213468705" )
  , ( "0a-b6-60-e9", "035162784" )
  , ( "52-d6-c6-c2", "120345678" )
  , ( "47-e7-b0-36", "231047658" )
  , ( "0f-85-91-aa", "108263754" )
  , ( "76-b6-ed-f3", "601435782" )
  , ( "f5-5e-f7-3d", "025847163" )
  , ( "dd-e7-fb-f9", "610247538" )
  , ( "8f-f4-af-fd", "583246017" )
  , ( "bf-fb-cb-f7", "105382674" )
  , ( "e5-fd-ff-ff", "512046378" )
  , ( "ef-df-ef-fe", "713205648" )
  , ( "bf-7f-fd-d7", "826437105" )
  , ( "36-ff-df-de", "814527603" )
  , ( "6f-dd-ff-ff", "230685147" )
  ]
```
オフラインどう書く第11回問題解答例(C++)

```cpp 

#include <iostream>
#include <string>
#include <bitset>
#include <sstream>
#include <cstdlib>
#include <algorithm>

namespace
{
    using namespace std;

    int no = 1;

    #define TEST(a, b) do{\
        cout << no++ << " : ";\
        cout << (a == b ? "ok" : "***NG***");\
        cout << endl;\
    }while(0)

    template<typename Type>
    string to_string(const Type& value)
    {   
        stringstream ss; 
        ss << value;
        return ss.str();
    }   

    string hex_to_bin(const string& hex)
    {   
        string s;
        for(size_t i=0; i<hex.length(); ++i)
        {   
            s += to_string(bitset<4>(strtol(hex.substr(i, 1).c_str(), NULL, 16)));
        }
        return s;
    }

    template<typename Type, size_t n>
    void shuffle_by(Type(&a)[n], const string& bin)
    {
        size_t begin = 0;
        for(size_t i=0; i<bin.length(); ++i)
        {
            if(bin.substr(i, 1) == "0")
            {
                swap(a[begin], a[i]);
                begin = i + 1;
            }
            else if(i == bin.length() - 1)
            {
                swap(a[begin], a[n-1]);
            }
        }
    }

    template<typename Type, size_t n>
    string ary_to_str(const Type(&a)[n])
    {
        string s;
        for(size_t i=0; i<n; ++i)
        {
            s += to_string(a[i]);
        }
        return s;
    }

    string solve(const string& src)
    {
        size_t results[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
        for(size_t i=0; i<src.length(); i+=3)
        {
            string bin = hex_to_bin(src.substr(i, 2));
            shuffle_by(results, bin);
        }
        return ary_to_str(results);
    }
}

int main()
{
    /*0*/ TEST(solve("d6-7b-e1-9e"), "740631825" );
    /*1*/ TEST(solve("83-4c-20-10"), "123805476" );
    /*2*/ TEST(solve("fb-f7-7e-df"), "274056813" );
    return 0;
}

```
method_missing を利用して動的にAPIのエンドポイントにアクセスする


mail chimpのrubyライブラリーのgibbonの中でAPIのエンドポイントにアクセスするために個別にメソッドを定義するのではなく、method_missingを利用してAPIコールを行なっています。まだ見れていませんが、railsのfind_by_等のメソッド呼び出しもこれを利用してるのでしょうか？
自分のコードにも応用できそうです。

def method_missing(method, *args)
   method = method.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
   method = method[0].chr.downcase + method[1..-1].gsub(/aim$/i, 'AIM')
　call(method, *args)
end

https://github.com/amro/gibbon/blob/master/lib/gibbon.rb
WindowsでのGo開発環境（IDE）

# WindowsでのGo開発環境（IDE）

## 環境変数とパス

各パスは一例です。
適宜設定してください。

パス：C:\go
環境変数：GOROOT
Goをインストールしてある場所。

パス：C:\gosrc
環境変数：GOPATH
Goプロジェクトやバイナリを置く場所。

環境変数PATHに追加。
%GOROOT%\bin;%GOPATH%\bin


## 自動補完のために

自動補完のためにgocodeをインストール（どのIDEでもたいてい必要になる）。
```go get github.com/nsf/gocode```
Gitをインストール済みのCygwin環境でやりましたが、Windows用のGitが入ってるなら、LiteIDEから[View] -> [Execute File]と辿り、そこで```go get github.com/nsf/gocode```としても可能かもしれません（未確認）。
またはmsysGit入れてるなら、Git Bashからでもできます。

## LiteIDE

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

Windows以外にLinux、Macにも対応している模様。

以下の環境変数はシステムの詳細設定から設定できるものを想定していますが、LiteIDEであれば「Edit Enviroment」（ツールバーにある四角のボタン）で開くことができるsystem.envで設定することもできます。
今のところ、通常であればsystem.envを編集する必要性は薄そうですが。

## Zeus

http://www.zeusedit.com/go.html#location1

未調査。

## IntelliJ Idea + Google Go language plugin for IntelliJ Idea

https://github.com/mtoader/google-go-lang-idea-plugin

IDEから以下のように辿り、golangで検索、右クリックからDownload and Install、指示に従ってIDE再起動。
File -> Settings -> Plugins -> Browse Repositories

New ProjectでGo Moduleを作る際、Project SDKにGOROOTのフォルダを選択する必要がある。

EditorのデザインをDarculaで使ってる場合、とても見づらいので配色を変更する方がいいと思います。
File -> Settings -> Editor -> Colors & Fonts -> Google Go

ビルドや実行も普通にできて簡単です。
ただし自動補完が効いていない？

プロジェクトを作るときにGo App Engine Moduleも選択できます（試してないけど）。

## Sublime Text 2 + GoSublime

https://github.com/DisposaBoy/GoSublime

パッケージインストールからGoSublimeをインストールするだけなので簡単でした。
自動補完あり（gocode）。
runやbuildの仕方は```ctrl+9```で開かれるGoSublime's command-shellで```help```と打って確認できます。

runの結果がリアルタイムで表示されない（プログラム実行が終了した段階での全出力を一気に出す）のは少し困るかも。

Preference -> Package Settings -> GoSublime -> Uasge & Tips
を見ると分かりますが、ショートカットキーでの操作も色々あります。
```ctrl+dot,ctrl+p```(パッケージのimport)、```ctrl+dot,ctrl+t```（テスト実行）、```ctrl+dot,ctrl+r```（run）
あたりはよく使います。

よく使うコマンドを追加。
```ctrl+dot,ctrl+g```（定義へジャンプ） ソース読むときはほぼ必須じゃないでしょうか。
```ctrl+dot,ctrl+dot```（コマンド一覧） コマンドを覚えきれないので便利です。

## NetBeans + Go plugin

http://www.winsoft.sk/go.htm

未調査。
個人的にNetBeansは使い慣れているので試しておきたいところ。

# 比較をまとめているサイト

http://geekmonkey.org/articles/20-comparison-of-ides-for-google-go

詳細は未読ですが、各IDEの比較があります。
osmサーバーにアップロードしないでレンダリング結果を確認する方法

JOSMで編集を行なっていると、OSMサーバーにアップロードする前にレンダリング結果を見てみたいという欲求がわいてくることがありますね。
独自レンダルサーバーがあれば実現可能です。
ここでは、[OpenStreetMapで独自レンダリングをしよう](http://qiita.com/items/13ed805ac3ccaff3baf9)でセットアップした独自レンダルサーバーを使ってJOSM上の未アップロードデータをレンダリングさせる方法を示します。

## 前提
* [OpenStreetMapで独自レンダリングをしよう](http://qiita.com/items/13ed805ac3ccaff3baf9)にしたがって、「必要となるソフトのインストール」まで完了させてください。（「地図データのインポート」は行う必要はありません。）

```
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:kakrueger/openstreetmap
sudo apt-get update
sudo apt-get install libapache2-mod-tile
```

* [Mapnik styleのフォント変更](http://qiita.com/items/25f9effbef1b2a498c5e)まで完了させてください。

## OSMデータの作成
* JOSMで、マップの編集を行なってください。
* JOSMで、メニュー[ファイル]->[名前をつけて保存...]を選び、適当な名前で保存してください。(ここでは「test.osm」という名称で保存したとします)

## 独自レンダルサーバーで、保存したOSMファイルをレンダリングする。
* 独自レンダルサーバーのキャッシュファイルを削除する。

```
$ $ sudo rm -r /var/lib/mod_tile/default/*
```
* 下記のコマンドを実行してOSMファイルをレンダラーへインポートさせて、レンダリングを行います。(「test.osm」)

```
$ osm2pgsql --slim <test.osm>
```

![uploading map.png...]()
amida2.cpp

```cpp 
#include <iostream>
#include <string>
#include <sstream>
#include <boost/algorithm/string.hpp>
#include <boost/swap.hpp>

struct num_list
{
	int l[9];
};


struct num_list solve(std::string const &input , struct num_list nlist)
{
	const unsigned long n = strtoul(input.c_str(), NULL, 16);
	const unsigned long set = n ^ (n << 1);
	
	int cnt = 0;
	int pos[2] = {0};
	for(int i = 0; i < 9; ++i)
	{
		if((set >> (8-i)) & 0x1)
		{
			pos[cnt] = i;
			cnt++;
		}
		if(cnt == 2)
		{
			boost::swap(nlist.l[pos[0]], nlist.l[pos[1]]);
			cnt = 0;
		}
	}
	return nlist;
}

void test(std::string const & input, std::string const & ans)
{
	std::list<std::string> results;		//分割結果を格納する変数
	boost::split(results, input, boost::is_any_of("-")); //-区切り
	struct num_list nlist = {{0,1,2,3,4,5,6,7,8}};
	
	for(const std::string str: results )
		nlist = solve(str,nlist);
	
	std::stringstream ss;
	for(const int l: nlist.l)
		ss << l;
	
	std::string output = (ss.str() == ans) ? "OK": "NG";
	std::cout << output << std::endl;
	return;
}

int main (void)
{
/*0*/ test( "d6-7b-e1-9e", "740631825" );
/*1*/ test( "83-4c-20-10", "123805476" );
/*2*/ test( "fb-f7-7e-df", "274056813" );
/*3*/ test( "55-33-0f-ff", "123456780" );
/*4*/ test( "00-00-00-00", "012345678" );
/*5*/ test( "00-00-00-55", "021436587" );
/*6*/ test( "40-10-04-01", "021436587" );
/*7*/ test( "00-00-aa-00", "103254768" );
/*8*/ test( "80-20-08-02", "103254768" );
/*9*/ test( "ff-7e-3c-18", "876543210" );
/*10*/ test( "aa-55-aa-55", "351708264" );
/*11*/ test( "55-aa-aa-55", "012345678" );
/*12*/ test( "db-24-db-e7", "812543670" );
/*13*/ test( "00-01-00-40", "021345687" );
/*14*/ test( "00-00-80-00", "102345678" );
/*15*/ test( "01-40-00-00", "021345687" );
/*16*/ test( "00-00-00-02", "012345768" );
/*17*/ test( "00-00-02-00", "012345768" );
/*18*/ test( "00-14-00-00", "012436578" );
/*19*/ test( "00-00-01-40", "021345687" );
/*20*/ test( "00-80-01-00", "102345687" );
/*21*/ test( "c8-00-00-81", "120354687" );
/*22*/ test( "05-48-08-14", "021435687" );
/*23*/ test( "24-05-00-f0", "413205687" );
/*24*/ test( "40-08-14-01", "021536487" );
/*25*/ test( "18-c8-80-80", "210534678" );
/*26*/ test( "1c-88-52-00", "120564738" );
/*27*/ test( "ec-dc-67-62", "213468705" );
/*28*/ test( "0a-b6-60-e9", "035162784" );
/*29*/ test( "52-d6-c6-c2", "120345678" );
/*30*/ test( "47-e7-b0-36", "231047658" );
/*31*/ test( "0f-85-91-aa", "108263754" );
/*32*/ test( "76-b6-ed-f3", "601435782" );
/*33*/ test( "f5-5e-f7-3d", "025847163" );
/*34*/ test( "dd-e7-fb-f9", "610247538" );
/*35*/ test( "8f-f4-af-fd", "583246017" );
/*36*/ test( "bf-fb-cb-f7", "105382674" );
/*37*/ test( "e5-fd-ff-ff", "512046378" );
/*38*/ test( "ef-df-ef-fe", "713205648" );
/*39*/ test( "bf-7f-fd-d7", "826437105" );
/*40*/ test( "36-ff-df-de", "814527603" );
/*41*/ test( "6f-dd-ff-ff", "230685147" );
	return 0;
}
```
セレクトボックスから項目を選択するだけでリンク先にジャンプさせる方法


##方法
optionタグのvalue属性にURLを指定して、その値をlocation.hrefにセットする。

##html
optionのvalueにジャンプさせたいURLを指定する。
onchange()は内容が変化したら発生するイベント。

```index.html
<form name="sort_form">
	<select name="sort" onchange="dropsort()">
		<option value=""> --- 選択してください --- </option>
		<option value="">Google</option>
		<option value="">Yahoo</option>
		<option value="">msn</option>
	</select>
</form>
```

##Javascript
Javascriptで行き先をリンク化する

```sort.js
function dropsort() {
	var browser = document.sort_form.sort.value;
	location.href = browser
}
```

これで上手くいきます。
dropdownで選んでからボタンを押してsubmitとかをしたくないときに便利です。

##参考サイト
・[JavaScriptでセレクトボックスから項目を選択したらリンク先にジャンプさせるやり方](http://bl6.jp/web/javascript/selectbox-select-link-jump/)
GitHub API でフォロー by curl

http://developer.github.com/v3/users/followers/#follow-a-user

手軽にcurlでGitHub APIを色々試したいけど
HTTPメソッドとURIを指定しただけだとうまくいかないことがある。
フォローする場合は、以下のようにContent-Lengthの指定を！

```
curl -i -X PUT -H 'Authorization: token your_token' -H 'Content-Length: 0' https://api.github.com/user/following/:user
```

ちなみにyour_tokenは

```
curl -i -u 'username' -d '{"scopes": ["user"]}' https://api.github.com/authorizations
```
と打つとgithubアカウントのパスワードを聞かれるので答えると、返ってきたレスポンスに書いてあります。
zsh の chpwd_recent_dirs を Emacs の dired と連携する

zsh には，今までに移動したことがあるディレクトリを記録し，そこに簡単に移動できる `chpwd_recent_dirs` という機能があります．これについての詳細は他の投稿に任せます．

[zshのchpwd_recent_dirsでよく行くディレクトリに移動する](http://qiita.com/items/c5f44ad6dcae059ea34c)

この機能を Emacs の dired でも利用したいと考え， [helm-dired-recent-dirs.el](https://github.com/akisute3/helm-dired-recent-dirs) という Elisp を書きました．提供する機能は以下の2つです．

- dired でアクセスしたディレクトリを chpwd_recent_dirs で記録する (~/.chpwd-recent-dirs に書き込む)
- 最近アクセスしたディレクトリを Helm (Anything の後継) で選択し，そのディレクトリを dired を開く

[helm-dired-recent-dirs.el](https://github.com/akisute3/helm-dired-recent-dirs) は以下の手順でインストールできます．

1. zsh が入っていないのであれば zsh をインストール
2. Emacs に Helm をインストール (MELPA を利用できるなら M-x list-packages に helm パッケージがあります)
3. ロードパスが通ったところに [helm-dired-recent-dirs.el](https://raw.github.com/akisute3/helm-dired-recent-dirs/master/helm-dired-recent-dirs.el) を配置 (こちらも MELPA からインストールできます)
4. .emacs に以下を記述

```common-lisp
(require 'helm-dired-recent-dirs)
```

dired でアクセスしたディレクトリの記録はインストールすれば自動で行います．最近アクセスしたディレクトリを開くには `M-x helm-dired-recent-dirs-view` を実行してください．


[6/5 追記]
helm-dired-recent-dirs.el の更新により `shell-file-name` の設定を .emacs に記述する必要がなくなりました。

[6/12 追記]
helm-dired-recent-dirs が MELPA からインストールできるようになりました。
オフラインどう書く第11回ビットあみだくじ (C part2)

http://qiita.com/items/93cde1a6b7561426a3ac

別のアルゴリズムを思いついたのでやってみました。
swapするというものです。

```c 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int ctz(unsigned long x)
{
    int n;

    if (x == 0)
    	return 8;
    n = 0;
    if ((x & 0xf) == 0) {
    	n += 4;
    	x >>= 4;
    }
    if ((x & 0x3) == 0) {
    	n += 2;
    	x >>= 2;
    }
    if ((x & 0x1) == 0)
    	n++;

    return n;
}

void swap(char *r, int a, int b)
{
    char t;

    t = r[a];
    r[a] = r[b];
    r[b] = t;
}

void solve(const char *s, char *r, int n)
{
    unsigned long x;
    int i, j;

    for (i = 0; i < n; i++)
        r[i] = i + '0';
    r[i] = '\0';

    do {
        x = strtoul(s, (char **)&s, 16);
    	j = 0;
    	while ((i = ctz(x >> j) + j) < n - 1) {
    		j = ctz(~(x >> i) & 0xff) + i;
    		swap(r, n - i - 1, n - j - 1);
    	}
    } while (*s++ != '\0');
}

void test(const char *in, const char *out)
{
    char r[10];

    solve(in, r, 9);

    printf("%s %s(%s) %s\n",
             in, out, r, (strcmp(r, out) == 0) ? "ok" : "ng");
}

int main(void)
{
...snip...
    return 0;
}
```
Windowsアプリケーション　MessageBoxAでの漢字の文字化けについて

MinGWとEmEditorでディレクトリやファイルを検索するWindowsアプリケーションを作成しています。
Shift-JISで保存し「g++ main.cpp -o main -mwindows」で保存して実行すると

```cpp:qita:cpp
MSG("列挙完了, 表示します.", "成功");
```

の「表示」の部
分が文字化けします。
マルチバイトも文字になっていないのかと思い、MSGマクロにTEXT()を追加したのですが、やはり文字化けします。

原因は何でしょうか？

 ソースコード

```cpp:main.cpp
#include <windows.h>
#include <iostream>
#include <cstring>

#define MSG(m, t) { MessageBoxA(NULL, TEXT(m), TEXT(t), MB_OK); }

const int SCREEN_WIDTH	= 500;
const int SCREEN_HEIGHT = 300;

HWND g_hwnd;		// ウィンドウハンドル
HINSTANCE g_hinst;	// インスタンスハンドル

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, int nCmdShow)
{
	MSG msg;
	WNDCLASS wc;

	wc.style			= CS_HREDRAW | CS_VREDRAW;
	wc.lpfnWndProc		= WndProc;
	wc.cbClsExtra		= wc.cbWndExtra	= 0;
	wc.hInstance		= hInstance;
	wc.hIcon			= LoadIcon(NULL, IDI_APPLICATION);
	wc.hCursor			= LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground	= (HBRUSH)GetStockObject(BLACK_BRUSH);
	wc.lpszMenuName		= NULL;
	wc.lpszClassName	= TEXT("Windows");

	if (!RegisterClass(&wc)) {
		MSG("クラスの登録失敗", "エラー");
		return -1;
	}
	
	g_hinst = hInstance;

	g_hwnd = CreateWindowA(
			TEXT("Windows"), TEXT("Music Search"),
			WS_OVERLAPPEDWINDOW | WS_VISIBLE,
			CW_USEDEFAULT, CW_USEDEFAULT,
			(int)SCREEN_WIDTH, (int)SCREEN_HEIGHT,
			NULL, NULL, hInstance, NULL
	);

	if (g_hwnd == NULL) {
		MSG("ウィンドウ作成失敗", "エラー");
		return -1;
	}

	while(GetMessage(&msg, NULL, 0, 0)) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	
	return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
	char buf[10000];
	
	static HANDLE s_handle;
	
	WIN32_FIND_DATA find;

	switch (msg) {
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	case WM_LBUTTONDOWN:
		memset(buf, 0, sizeof(buf));	// バッファ初期化
		
		s_handle = FindFirstFile("*", &find);
		
		if (s_handle!=INVALID_HANDLE_VALUE) {
			// FindFirstFile() によって得られたファイル情報を取得する
			if (find.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) {	// ディレクトリチェック
				strcat(buf, "【ディレクトリ】");
			}
			else {													// ファイル
				strcat(buf, "【ファイル】");
			}
			
			strcat(buf, find.cFileName);
			strcat(buf, "\n");
			
			// 検索対象のファイルがあるまでループ
			while (1) {
				if (FindNextFile(s_handle, &find)) {
					if (find.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) {	// ディレクトリェック
						strcat(buf, "【ディレクトリ】");
					}
					else {													// ファイル
						strcat(buf, "【ファイル】");
					}
					
					strcat(buf, find.cFileName);
					strcat(buf, "\n");
				}
				else {
					if (GetLastError()==ERROR_NO_MORE_FILES) {
						// ファイルが無い場合は終了
						MSG("列挙完了, 表示します.", "成功");
						MSG(buf, "成功");
						FindClose(s_handle);
						return 0;
					}
					else {
						MSG("何らかのエラーが発生しました.", "エラー");
						FindClose(s_handle);
						return -1;
					}
				}
			}
		}
		else {
			MSG("FindFirstFile() で不明なエラーが発生しました.", "エラー");
			return -1;
		}
		
		return 0;
	default:
		return DefWindowProc(hWnd, msg, wp, lp);
	}
}
```
オフラインどう書く第11回ビットあみだくじ (C)

http://qiita.com/items/93cde1a6b7561426a3ac

Cでやってみました。
2ビット見て判断するというアルゴリズムです。
00: 右にも左にも横線がない -> 下の段に移動するだけ
11: 右と左に横線がある -> 横断しているだけなので下に移動するだけ
01: 右に横線がある -> 0にぶつかるまで右に移動して下の段に移動する
10: 左に横線がある -> 0にぶつかるまで左に移動して下の段に移動する

```c 
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define NCOLS 9
#define NROWS 4

void str2a(const char *s, unsigned char *a)
{
    *a = 0;
    do {
        if (*s >= '0' && *s <= '9')
            *a = (*a << 4) + *s - '0';
        else if (*s >= 'a' && *s <= 'f')
            *a = (*a << 4) + *s - 'a' + 10;
        else
            *++a = 0;
    } while (*s++ != '\0');
}

int solve(const char *s)
{
    unsigned char a[NROWS];
    int row, col;
    int i, r, v;

    str2a(s, a);

    r = 0;
    for (i = 0; i < NCOLS; i++) {
        col = i;
        for (row = 0; row < NROWS; row++) {
            v = 0;
            if (col < NCOLS - 1)
                v |= ((a[row] >> col) & 1) << 1;
            if (col > 0)
                v |= (a[row] >> (col - 1)) & 1;
            if (v == 1) {
                while (col > 0 && ((a[row] >> (col - 1)) & 1))
                    col--;
            } else if (v == 2) {
                while (col < NCOLS && ((a[row] >> col) & 1))
                    col++;
            }
        }
        r += pow(10, col) * (NCOLS - i - 1);
    }

    return r;
}

void test(const char *in, const char *out)
{
    int r, e;

    r = solve(in);
    e = atoi(out);

    printf("%s %09d(%09d) %s\n", in, e, r, r == e ? "ok" : "ng");
}

int main(void)
{
...snip...
        return 0;
}
```
動的関数の実態はインスタンスの数だけ存在する？

```csharp:FunctionalInstancePointerTest.cs
using System;

delegate void TestDlg();

public class Test
{
    public void func1() { int a = 100; Console.WriteLine("a = {0}", a); }
    public static void func2() { int a = 100; Console.WriteLine("a = {0}", a); }
    
    public static void Main()
    {        
        var obj1 = new Test();
        var obj2 = new Test();
        var f = new TestDlg(obj1.func1);
        var g = new TestDlg(obj2.func1);
        
        // 動的関数はインスタンスが異なると実体も異なる
        Console.WriteLine("equal? = {0}", f == g); // False
        
        f = new TestDlg(Test.func2);
        g = new TestDlg(Test.func2);
        
        // 静的関数の実体は1つだけ
        Console.WriteLine("equal? = {0}", f == g); // True
    }
}

```
【Unity】ソースコードだけでキューブ生成めも

```
function Start () {
    for (var y = 0; y < 5; y++) {
        for (var x = 0; x < 5; x++) {
            var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
            cube.AddComponent(Rigidbody);
            cube.transform.position = Vector3 (x, y, 0);
        }
    }
} 
```
berkshelfを使ってchef連携したvagrantを立ち上げる on mac


## virtualboxインストール
 - https://www.virtualbox.org/wiki/Downloads

## vagrantインストール
何通りか方法がある

 - gemでいれる
 - bundlerでいれる
 - dmg

gemで入れて使いたいなと思ったけど、(2013/6/1現在)古いバージョン(v1.0.7)までしかgemではインストールできないみたいなので以下よりdmg(v1.2.2)を取得
 
- http://downloads.vagrantup.com/

## vagrant-berkshelf pluginのインストール
```
vagrant plugin install vagrant-berkshelf
```

## chef,berkshelfインストール
```
gem install chef
gem install berkshelf
```

## vagrantのひな形作成
berkshelf経由でcookbookを作成するとchefのrecipeを反映しつつvagrantを立ち上げるためのひな形を作る事ができる

```
berks cookbook example
```
##  立ちあげ&ログイン
exampleディレクトリに移動して

```
vagrant up
vagrant ssh
```

## github上のcookbookを追加
ex) rbenv

```text:Berksfile
site :opscode

metadata
cookbook 'rbenv', ">= 1.4.1" , git: 'git://github.com/RiotGames/rbenv-cookbook.git'
```

```sh:cookbookをダウンロード
berks install
```

```ruby:recipes/defult.rb
include_recipe 'rbenv::default'
include_recipe 'rbenv::ruby_build'

rbenv_ruby "2.0.0-p195" do
  ruby_version "2.0.0-p195"
  global true
end
```

```sh:recipeを反映
vagrant provision
```

## saharaインストール
vmをロールバック出来るようにするvagrantのplugin
本家はver1.1以降に対応していないようなので、別途開発してくれている人がいらっしゃるのでありがたく使わせていただく。

- http://www.ryuzee.com/contents/blog/6555

```
git clone https://github.com/ryuzee/sahara.git
cd sahara
bundle exec rake build
vagrant plugin install pkg/sahara-0.0.14.gem
```
[PHP]Google Analytics API v3.0 使い方〜認証編

今回は実際にライブラリを読み込み、Client ID等の情報を使ってOAuth2.0認証を行います。

Client IDの作成方法は[[PHP]Google Analytics API v3.0 使い方〜前準備編](http://qiita.com/items/581f7c9390de92f4b81a "[PHP]Google Analytics API v3.0 使い方〜前準備編")を御覧ください。

記載したソースは要所のみ抜粋していますが、見た目を整えるためBootstrapを使用しています。

■ ライブラリをダウンロードする
https://code.google.com/p/google-api-php-client/
※今回使用しているバージョンは0.6.2です。

ダウンロードしたら、解凍して適当なディレクトリに配置します。

今回はこんな感じ
/www
　/lib
　　/google-api-php-client・・・先ほどダウンロードしてきたライブラリ
　signin.php
　index.php

■ 認証画面（signin.php）を作成する
![uploading Bootstrap, from Twitter.png...](http://www.fastpic.jp/images.php?file=5893917942.png)

```html+php:signin.php
<?php
require('lib/google-api-php-client/src/Google_Client.php');
require('lib/google-api-php-client/src/contrib/Google_AnalyticsService.php');

session_start();
$client = new Google_Client();

// クライアントID
$client->setClientId('1234567890abcdefg.apps.googleusercontent.com');
// クライアントSecret
$client->setClientSecret('ABCDEFG');
// リダイレクトURL
$client->setRedirectUri('http://example.com/index.php');

// 使用するサービスを作成
$service = new Google_AnalyticsService($client);

// 認証用URLを作成
$authURL = $client->createAuthUrl();

?>
<div>
    <h1>Googleアカウントの認証</h1>
    <p>APIを使用するために、Googleアカウントを認証してください</p>
    <p><a href="<?php echo $authURL ?>">Signin</a></p>
</div>
```


SigninをクリックするとGoogleアカウントの認証画面に遷移します。
![uploading 許可のリクエスト.png...](http://www.fastpic.jp/images.php?file=7906630642.png)

Google Analyticsにログイン出来るアカウントで認証を行うと、設定したURLにリダイレクトされます。

![uploading Bootstrap, from Twitter (1).png...](http://www.fastpic.jp/images.php?file=6464189529.png)

```html+php:index.php
<div>
  <h1>認証成功</h1>
</div>
```