OmniAICreator/Qiita-1.07M huggingface dataset:
Qiitaの記事のMarkdownで注釈を使う

まずこの注釈というのははてな記法にある、こんなやつ→<sub><a href="#1">1</a></sub>です。

あまり冴えた方法とは呼べないかもしれません。

というかこの記事を書くことでQiitaが注釈を実装してくれるのを願います。（できればはてな記法ライクがいいです）

まず前提ですが、Markdownは基本的に、はてな記法にあるような注釈を扱えません。中には拡張して使えるようにしてしまったものもあったりしますが、どうせQiitaのMarkdownでは使えないので今はその話はしません。

また、Qiitaは最近、Markdownの中にHTMLを混在させることができるようになりました。[参考](http://blog.qiita.com/post/43368489196/accept-html-tags-in-body)
これによって、どうにかQiitaでもはてな記法の注釈のようなことができるようになったので記しておくというわけです。

[追記]_この方法には問題があります。_[/追記]

初めに、<sub><a href="#1">2</a></sub>のようなリンクですが、このようなMarkdownを書きます。

```markdown
<sub>[1](#1)</sub>
```
HTMLの `<sub>` タグでMarkdownのリンクを囲っています。リンクの先は `#1` となっていて、同ページの `<a name="1">` へ飛ぶようになっています。

ということは、あとは簡単ですね。
記事の下のほうに、以下のような感じMarkdown(HTMLにしか見えません)を書きます。

```markdown
<a name="1">1.</a> こんにちは、注釈世界！
```

こうすれば無事めでたくQiitaの記事ではてな記法のような注釈を使えるわけです。
（ただしはてな記法みたいに注釈の詳細の方をクリックしたら、記事の該当部分に飛ぶなんて器用な機能はありませんが）

[追記]このやり方では、target属性に_blankが設定されるため別ページへのリンクになってしまいます。[/追記]

[追記]少し面倒ですが、このようにしてください。

```
<sub><a href="#1">1</a></sub>
```

[/追記]

でもやっぱ面倒だからな…。
Qiitaの開発チーム様お願いします！<sub><a href="#3">3</a></sub>

- - - 

<a name="1">1.</a> こんにちは、注釈世界！
<a name="2">2.</a> Hello, Annotation World!
<a name="3">3.</a> ちょっと注釈をつけたいなー、と思うことがある程度なので別に急いでいただかなくても結構ですが…。
TexturePacker をrakeタスクから使う

さいきん、iOS + OpenGLで、ドット絵のゲームを作っているのですが、描いた絵をプログラムで動かすまでに以下のフローをふんでいます。

1. [Pixen](http://pixen.en.softonic.com/mac) でドット絵を描く&アニメーションを編集する
2. 編集したアニメーションをgifアニメで保存
3. ImageMagickでgifアニメをバラバラのpngファイルにする
4. [TexturePacker](http://www.codeandweb.com/texturepacker) でスプライトシートにする。

iOS向けだと、Retina用に2倍のサイズもこしらえないといけなので絵を直すたびにこれをするのは手間です。
TexturePackerはとても気が効いているツールで、コマンドラインインターフェイスも提供しているので、この手順は全部コマンドラインからできます。
数ステップあるので、rakeタスクをこしらえました。

cocos2dユーザ は、`--format` をcocos2dにすればそのままつかえるとおもう。

```ruby
require 'rake/clean'
require 'pathname'

ROOT       = `git rev-parse --show-toplevel`.chomp
ASSETS     = "#{ROOT}/assets"
FRAMES     = "#{ROOT}/assets/frames"
RESOURCES  = "#{ROOT}/Resources"

CLEAN.include "#{RESOURCES}/*.json", "#{RESOURCES}/*.png"

directory FRAMES

task :default => [:split, :tp]

desc "gif animation split to png files"
task :split => FRAMES do
  Dir["#{ASSETS}/*.gif"].each do |gif|
    png = File.basename(gif).sub(/\.gif/, '.png')
    sh "convert +adjoin #{gif} #{File.join FRAMES, png}"
  end
end

desc "TexturePacker packing"
task :tp do
  sh "TexturePacker "<<
     "  --smart-update " <<
     "  --scale 2.0 " <<
     "  --scale-mode Fast " <<
     "  --format json-array " <<
     "  --data #{RESOURCES}/entities@x2.json " <<
     "  --sheet #{RESOURCES}/entities@x2.png " <<
     FRAMES

  sh "TexturePacker "<<
     "  --smart-update " <<
     "  --format json-array " <<
     "  --data #{RESOURCES}/entities.json " <<
     "  --sheet #{RESOURCES}/entities.png " <<
     FRAMES
end
```

```bash
$ rake -T
rake clean    # Remove any temporary products.
rake clobber  # Remove any generated file.
rake split    # gif animation split to png files
rake tp       # TexturePacker packing
```

TexturePacker をインストールしたら、ツールバーメニューからTexturePacker → Install Command Line Tool で、TexturePackerコマンドをインストール。

公式サイトや以下でヘルプがみれる。

```bash
TexturePacker --help
```
Linux で EXT2 FileSystem の拡張属性を操作する(C言語で)


EXT FIleSystem (ext2,ext3,ext4) には，ファイルに対して通常の属性以外にも，拡張属性が設定できることが知られています．
これらは，lsattr コマンドや chattr コマンドを操作して使いますが，C言語で直接操作する方法が意外と見つからなかったので書いておきます．

## 拡張属性の情報を得る

ファイルを open() で開き，ファイルディスクリプタに対して ioctl() で`FS_IOC_GETFLAGS`を使うことで拡張情報が得られます．

	#include <linux/fs.h>
	#include <sys/ioctl.h>
	...
	...
	unsigned long FSflags;
	sts = ioctl(fd, FS_IOC_GETFLAGS, &FSflags);

上記の場合，FSflags にそのファイルディスクリプタで開いているファイルの拡張属性が得られます．
拡張属性はビット集合で，linux/fs.h に定義されています．以下にその定義を一部引用します．

	/*
	 * Inode flags (FS_IOC_GETFLAGS / FS_IOC_SETFLAGS)
	 */
	#define FS_SECRM_FL         0x00000001 /* Secure deletion */
	#define FS_UNRM_FL          0x00000002 /* Undelete */
	#define FS_COMPR_FL         0x00000004 /* Compress file */
	#define FS_SYNC_FL          0x00000008 /* Synchronous updates */
	#define FS_IMMUTABLE_FL     0x00000010 /* Immutable file */
	#define FS_APPEND_FL        0x00000020 /* writes to file may only append */
	#define FS_NODUMP_FL        0x00000040 /* do not dump file */                                                                                                           
	#define FS_NOATIME_FL       0x00000080 /* do not update atime */
	...

例えば `(FLflags & FS_NODUMP_FL) != 0` であれば，NO DUMP フラグが設定されているので dump コマンドではバックアップしません．

## 拡張属性を設定する

ioctl() で `FS_IOC_SETFLAGS` を指定します．

	#include <linux/fs.h>
	#include <sys/ioctl.h>
	...
	...
	unsigned long FSflags = FS_NODUMP_FL
	sts = ioctl(fd, FS_IOC_SETFLAGS , &FSflags);

上記の例では，他のビットをクリアして，NO DUMP フラグだけを設定します．OR でフラグをセットしたい場合は，`FS_IOC_GETFLAGS` で読みだしたフラグに対してORでセットして，`FS_IOC_SETFLAGS` を指定すれば良いです．

なお，これは試していませんが，`FS_IMMUTABLE_FL` はそのファイルの変更を禁止するビットですが，このビットの操作には スーパーユーザまたは CAP_LINUX_IMMUTABLE ケーパビリティを持つプロセスが可能だと思います．
ログ出力をもっと便利に簡単にするマクロ


Qiitaに投稿された[NSDictionaryOfVariableBindingsマクロ](http://qiita.com/items/2e1a5cacf66e5dcb05fd)を見て思いついたログ出力用マクロ


## 使い方

``` AppDelegate.m
id var1 = @"hoge";
VARLOG(var1);

id var2 = @{@"huga": @"hoge"};
VARLOG(var1, var2);

// output
// -[AppDelegate application:didFinishLaunchingWithOptions:] at LINE:78
// {
//  	var1 = hoge;
// }
//
// -[FKAppDelegate application:didFinishLaunchingWithOptions:] at LINE:81
// {
//  	var1 = hoge;
//  	var2 =     {
//         huga = hoge;
//     };
// }
```

## メリット
* 変数名を渡すだけで他の箇所、他の変数との区別がある程度可能なログ出力が出来る


## デメリット
* 表示に利用できる型は```NSObject Protocol```を継承している型のみ
* カンマで渡された変数の個数をカウントしているので、途中に意図しないカンマが入る変数名は利用できない

``` NG
VARLOG(@[@"hoge", @"huga"]); -> NG
VARLOG([NSString stringWithFormat:@"%@", @"hoge"]); -> NG
```

## 実装

NSDictionaryOfVariableBindingsを利用していたが、

* 対象の変数がnilの場合クラッシュする
* 空白でも区切られてしまう
* NSDictionaryになるため日本語を出力しようとするとユニコード表記になる

のため最終的には利用せず

``` ver.1.0.0
#define VAR(...) _VAR(@""#__VA_ARGS__, __VA_ARGS__)
//#define VAR(var, ...) NSDictionaryOfVariableBindings(var, ##__VA_ARGS__)


#define _VAR(...) \
	^NSString *(NSString *format, ...) {\
		va_list args;\
		format = [format stringByReplacingOccurrencesOfString:@", " withString:@","];\
		format = [format stringByReplacingOccurrencesOfString:@" ," withString:@","];\
		NSArray *keys = [format componentsSeparatedByString:@","];\
		\
		NSMutableArray *objects = [NSMutableArray arrayWithCapacity:keys.count];\
		\
		va_start(args, format);\
		for (int i = 0; i < keys.count; i++) {\
			id object = va_arg(args, id);\
			object = object ? object : @"nil";\
			[objects addObject:object];\
		}\
		va_end(args);\
		\
		NSMutableString *buffer = [NSMutableString stringWithString:@"{\n"];\
		\
		[objects enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\
			id key = [keys objectAtIndex:idx];\
			id description = obj;\
			if ([obj respondsToSelector:@selector(descriptionWithLocale:indent:)]) {\
				description = [obj descriptionWithLocale:nil indent:1];\
			}\
			[buffer appendFormat:@"\t%@ = %@;\n", key, description];\
		}];\
		\
		[buffer appendString:@"}"];\
		return buffer;\
	}(__VA_ARGS__)

#define VARLOG(var, ...) NSLog(@"\n%s at LINE:%d\n%@\n\n", __func__, __LINE__, VAR(var, ##__VA_ARGS__))
```
forとarray.forEachのスコープ

javascriptでは、forブロックで宣言した変数はforの外に出る。
forEachはループするのにcallback関数を利用しているため、変数は関数のローカルスコープから出ない。

```javascript
var arr = [1,2,3,4,5];
for(var i = 0; i < arr.length; i++){
  console.log('v:', v);
  var v = arr[i];
};
console.log('out v:', v);
console.log('--------------------------');

arr.forEach(function(v){
  console.log(val);
  var val = v;
});
console.log('out val:',val);
```
実行結果。

```
v: undefined
v: 1
v: 2
v: 3
v: 4
out v: 5
--------------------------
undefined
undefined
undefined
undefined
undefined

console.log('out val:',val);
                       ^
ReferenceError: val is not defined

```

forブロックの`console.log('v:', v);`は1回前のforループの値を利用できるようだ。
AWS Elastic Beanstalk+Node.js+Express+Passport+MySQLでアカウント管理（その６：実行）

[前回](http://qiita.com/items/e31a4b1b0e794c8dfd46)からの続き。

コーディングは、前回までで終了してますので、今回は実際に動かしてみましょう。

>githubにレポジトリを公開しましたのでよろしければお使いください。
>無保証ですので各自の責任でお願いします。
>[https://github.com/JunSuzukiJapan/MyFirstEBApp](https://github.com/JunSuzukiJapan/MyFirstEBApp)

まず、package.jsonに依存関係を記述しておきます。

```javascript:package.json
{
  "name": "application-name",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "express": "3.2.0",
    "jade": "*",
    "mysql": "*",
    "connect-flash": "*",
    "passport": "*",
    "passport-local": "*"    
  }
}
```

そうしたら、依存しているモジュールを自動でダウンロードするために、
ターミナルから以下のコマンドを実行します。

```bash
$ npm install
```

場合によっては、npm installの前に、sudoをつける必要があるかもしれません。

うまく依存関係が解決されたら、実行してみましょう。
ターミナルから以下のコマンドでサーバーが立ち上がります。

```bash
$ node app.js
```

エラーがなければ、ポート３０００番でサーバーが動いてますので、
ブラウザから http://localhost:3000/ にアクセスしてみましょう。

ローカルで動作確認が出来たら、AWSにデプロイします。

```bash
$ git add .
$ git commit -m 'Second commit.'
$ git aws.push
```

設定が間違いなければ、これでElastic Beanstalkにデプロイされますので、

```bash
$ eb status --verbose
```

で状態がReadyになるのを待って、
AWS Management Consoleで確認できるElastic BeanstalkのURLを表示してみましょう。

以上

>現時点では、筆者のサーバーでログインしようとすると
>「502 Bad gateway」エラーがでます＞＜
>原因を調査して、解決したら記事に書き足す予定です。


追記

>エラーの原因はどうやら自分で勝手にDBテーブルを作ったのが
>いけなかったようだ。
>Elastic Beanstalkがあらかじめ'ebdb'というテーブルを
>用意してくれているのでそれを使うことにしたら動きました。
>
>"502 Bad gateway"は、package.jsonに記載していないライブラリを
>requireするときにもでるようです。
>必要のないライブラリはrequireしない、かつ、必要なライブラリは
>package.jsonに記載しておくことを心がけよう…。

サインアップしても自動でログインされないのをなんとかしたいところです…
Elastic Beanstalk の環境をつくるメモ

Elastic Beanstalk の環境をつくるには、
[「AWS Elastic Beanstalk に express で作ったアプリケーションをデプロイしてみた」](http://dev.classmethod.jp/cloud/aws/aws-elastic-beanstalk-express-deploy/)の記事が詳しい。

AWS Management Consoleからアプリケーションを新規作成するという手もあるようだ。

とりあえず、上述の記事の手順だと、
１．AWS-TOOLKIT,expressなど諸々をインストールして準備しておく
２．ターミナルからいろいろ操作。
　　まずは、expressでテンプレートを作成し、作成したディレクトリに移動。

```bash
$ express appname
$ cd appname
```

３．依存モジュールをインストールする。

```bash
$ npm install
```

４．gitレポジトリの作成

```bash
$ git init
```

５．リポジトリに追加しないファイルを .gitignore に追加。

```bash
$ cat > .gitignore <<EOT
node_modules/
.gitignore
.elasticbeanstalk/
*~
EOT
```

６．eb init で環境を作成する。途中、いろいろ聞かれるが適当に答える。

```bash
$ eb init
```

７．eb startでアプリケーションを開始する。
　　この段階で、EC2やS3などが作成される模様。

```bash
$ eb start
```

８．gitを使ってデプロイする。

```bash
$ git add .
$ git commit -m 'Initial commit.'
```

９．しばらく待たされる。eb statusでアプリが作成されたか確認できる。

```bash
$ git add .
$ git commit -m 'Initial commit.'
```

StatusがReadyになれば完了。
Ruby on Railsとfullcalendar pluginでGoogleカレンダークローンを作る(2)


前回、カレンダーの枠まで表示できるようにしたので、
今回はイベントを登録して表示できるようにしてみる。

## イベントを表示させる

scaffoldでeventを生成する。
カラムはfullcalendarのevent objectに合わせる。	

```
bundle exec rails g scaffold event title start:datetime end:datetime color allDay:boolean
bundle exec rake db:migrate
```

`localhost:3000/events/new`からeventをDBに登録できるようになるので、
適当に登録しておく。

登録したeventは`localhost:3000/events`で参照できる。
また、`localhost:3000/events.json`とすると登録されたeventをjson形式で取得できる。

calendar.jsを以下のように書き換える。
eventsオプションで上記のeventをjson形式で取得するURLを指定することで、eventをカレンダー上に表示できるようになる。

```js:calendar.js
$(document).ready(function() {
    $('#calendar').fullCalendar({
	    events: '/events.json',
    });
});
```

## イベントをカレンダーから登録する

まずはカレンダーを選択できるようにする。
そのためにはselectableオプションをtrueにして、selectオプションにコールバック関数を登録する。
引数は選択の開始日と終了日（１日だけ選択した場合には開始日と同じ日になる）、終日かのフラグ（月表示の場合はtrue）。

```js:calendar.js
$(document).ready(function() {
    $('#calendar').fullCalendar({
	    events: '/events.json',
		selectable: true,
		selectHelper: true,
		select: function(start, end, allDay) {
		    console.log('start:' + start);
			console.log('end:' + end);
		    console.log('allDay:' + allDay);
			alert('selected');
		}
	});
});
```

このコールバック関数内で、rails側にリクエストを投げてeventを登録する。
/eventsにPOSTでデータを投げればよいので、以下のようにしてみた。

* promptでtitleを受け取り、dataを作ってajaxで/eventsに投げる。
* 成功したら、refetchEventsを呼んでデータの再取得・再描画を行う。
* 最後にunselectを呼んで、選択を解除する。

```js:calendar.js
$(document).ready(function() {
    var select = function(start, end, allDay) {
    	var title = window.prompt("title");
		var data = {event: {title: title,
		                    start: start,
							end: end, 
							allDay: allDay}};
		$.ajax({
	        type: "POST",
     	    url: "/events",
			data: data,
			success: function() {
			    calendar.fullCalendar('refetchEvents');
			}
		});
	    calendar.fullCalendar('unselect');
    };

    var calendar = $('#calendar').fullCalendar({
    	events: '/events.json',
		selectable: true,
		selectHelper: true,
		ignoreTimezone: false,
		select: select
	});
});
```

個人的に２カ所でハマった。
1つ目はデータの受け渡しのところで、一度データを変数に入れないとrails側で認識できなかった。
2つ目は日付の扱いで、js側からはJSTで日付を送っているが、rails側ではUTCに変換してDBに保存するため、タイムゾーンを考慮する必要があった。
これについては、ignoreTimezoneオプションをfalseにすることで解決できた。
svnリポジトリの変更をgitリポジトリが追随するhookスクリプト 

svnからgitに切り替えるのはなかなかに大変というか、踏ん切りが付かないもので
gitで出来る事はsvnでも出来ちゃったりする事もあるので「svnのままでもいいじゃん」ってのがあります。
だけども新しいものを使いたいし、ちゃんとgitを使いこなし、branchを使いこなして開発を行いたいものであります。
少しずつでもいいからsvnからgitに移行できるようにsvnリポジトリでの変更があったら、gitリポジトリにも変更が反映させるというhookスクリプトを設置しておいて、いつでもgitリポジトリが最新になっていて、「gitリポジトリがあるんならこっち使っちゃえば良いじゃん」ってなれば良いなと妄想して調べてみた物がこちら。

    git svn clone --prefix svn/ -s <svn_url> <git_path>
    cd <git_path>

    for branch in $(svn ls <svn_url>);
    do
    git branch ${branch} remotes/svn/${branch}
    done;

    cd <git_path>
    vi .git/hooks/svn-rebase-all

```.git/hooks/svn-rebase-all
#!/bin/sh

git=/usr/local/bin/git
date >> .git/svn-rebase.log
${git} reset --quiet --hard
for ref in .git/refs/heads/*
do
  branch=${ref##*/}
  echo Updating ${branch}
  ${git} checkout --quiet --force ${branch}
  ${git} svn rebase
done 2>&1 | tee -a .git/svn-rebase.log
${git} checkout --quiet --force master
```

    chmod +x .git/hooks/svn-rebase-all

    cd <svn_path>/
    vi hooks/post-commit

```post-commit
#!/bin/sh

cd <git_path>
. .git/hooks/svn-rebase-all
```

    chmod +x <svn_path>/hooks/post-commit

参考 : [svn - Automatically synchronizing a Subversion repository and a Git repository - Stack Overflow] (http://stackoverflow.com/questions/5586993/automatically-synchronizing-a-subversion-repository-and-a-git-repository)

あらかじめsvnのリポジトリサーバーで`git svn clone`をしておいて、gitのhookスクリプトにsvnの変更を取り込むスクリプトを置いておいて、svnでコミットがあった時にそのスクリプトを実行させるというものです。
gitでcloneしたローカルの方でbranchesのbranch切っておいてください。(なんかややこしいな)
svnの変更をgitのリポジトリに取り込んだので、後はgithubにpushするなり、取り込んだリポジトリをcloneするなりしてくればよしです。

参考リンクの方にはpushした時にdcommitしてくれるスクリプトもあるみたいだけど、そこまではまだ大丈夫かなー
AUR Helper の packer で TAB 補完を使う (zsh)

参考: [zsh-packer](https://aur.archlinux.org/packages/zsh-packer/)

AUR Helper は yaourt が有名だが，私は packer を利用している．packer の残念なところは，初期状態では TAB による補完がきかないことだ．

AUR に zsh-packer というものがあるのだが，URL のファイルはもうダウンロードできなくなっている．しかし，zsh-packer のコメントに，設定ファイルの URL が書かれていた．以下の方法でインストールできるが，使用は自己責任で．

1. http://pastebin.com/HYQWxuMu からファイルをダウンロード
2. これを /usr/share/zsh/site-functions/_packer にコピー
herokuでタイムゾーン設定

heorkuでタイムゾーン設定
================

heroku側の設定で東京(UTC+9:00)にする

## 手順

- 9時間ずれている状態を確認
    - `heroku console` が動かない場合は `heroku run console` を実行する

```bash
$ heroku run console
Running `console` attached to terminal... up, run.3685
Loading production environment (Rails 4.0.0.beta1)
irb(main):001:0> Time.now
=> 2013-05-04 15:53:31 +0000
```

- タイムゾーンを東京(UTC+9:00)に設定

```bash
$ heroku config:add TZ=Asia/Tokyo
Setting config vars and restarting xxxxxxx...
done, v59
TZ: Asia/Tokyo
```

- タイムゾーンが東京(UTC+9:00)になっていることを確認する

```bash
$ heroku run console
Running `console` attached to terminal... up, run.5395
Loading production environment (Rails 4.0.0.beta1)
irb(main):001:0> Time.now
=> 2013-05-05 00:54:25 +0900
```

## 参考
- http://www.func09.com/wordpress/archives/951
heroku+amazon sesでActive Adminのパスワードのリセット時にAWS::SES::ResponseErrorになる対応策

Active Adminのパスワードのリセット時にAWS::SES::ResponseError (MessageRejected - Email address is not verified.)とエラーが出ました。

Amazon SESで設定しているドメインで送る必要があります。
Active Adminにはメール設定は無くDevise側にあります。


``` config/initializers/devise.rb
config.mailer_sender = "please-change-me-at-config-initializers-devise@example.com"
```


`config.mailer_sender`を適切なメールアドレスに変更しましょう。
googleの検索結果にfacebookのlike数を追加するgreasemonkeyスクリプト

---
###### facebookへのアクセスはシリアルなので動きは遅い
###### `http://graph.facebook.com/#{URL}`でJSON形式でLike数を取得できる。
###### 参考サイト忘れた。思い出したら更新する。
---
```greasemonkey
// ==UserScript==
// @name        facebook like count into google search result
// @namespace   www.google.co.jp
// @include     https://www.google.co.jp/search?*
// @version     1
// ==/UserScript==

(function(){
    ires = document.getElementById("ires");
    a    = ires.getElementsByClassName("l");
    a    = ires.getElementsByTagName("a");
    for (i=0;i< a.length;i++){
        fb = JSON.parse(facebook(a[i].href));
        if ( typeof fb.shares === "undefined" ){ fb.shares = 0; }
        a[i].text = '(' + fb.shares + ')' + a[i].text;
    }
})();

function facebook(url){
    request = XMLHttpRequest();
    var facebook='https://graph.facebook.com/';
    request.open("GET",facebook + url,false);
    request.send(null);
    return request.responseText;
}
```
D3.jsを使って50色のカラーセットを作成する

都道府県を色で塗り分けるのに47色作るのが面倒だったので[d3.js](http://d3js.org/)を使って色の配列を作成した。

```javascript
    var shuffle = function() {return Math.random()-.5};
     //ランダムに50色のカラーリストを作成する
    var color =d3.scale.category20b();
    var color2 = d3.scale.category20();
    var color3 = d3.scale.category10();
    var cl = color.range();
    var colorList = cl.concat( color2.range() );
    colorList = colorList.concat(  color2.range() );
    console.log( colorList.sort(shuffle) );
```
以下の記事で使用。
[【D3.js】グラフと地図を連動させる](http://shimz.me/blog/d3-js/2797)
Sinatraとhaml,slim


--
###### Sinatraでhamlとslimを使ってみた。erbはまたそのうち。
--
###### ソースのリスト、ディレクトリ構成
```tree
├── test.rb
└── views
    ├── index.haml
    └── index.slim
```
---
###### requireしているものは普通にgem install xxx でOK
###### 変数のスコープはよくわからないので適当。
```test.rb
require 'sinatra'
require 'slim'
require 'haml'


get '/' do
        @arr01 = [0,1,2]
        @has01 = {:id => '1',:value => 'sample' }
        @has02 = [{:id => '1', :value => 'sample1'},
                  {:id => '2', :value => 'sample2'}]
        slim :index
end

get '/haml' do
        @arr01 = [0,1,2]
        @has01 = {:id => '1',:value => 'sample' }
        @has02 = [{:id => '1', :value => 'sample1'},
                  {:id => '2', :value => 'sample2'}]
        haml :index
end
```
###### テンプレートは以下のように作成し、`ruby test.rb` で起動。ブラウザでアクセスし動作確認する。


```views/index.slim
doctype html
html
   head
      title Slim Example

   body
      h1 スリムテスト
      - unless @arr01.empty?
        table
          - for item in @arr01
            tr
              td= item
      - unless @has01.empty?
        table
          tr
            td= @has01[:id]
            td= @has01[:value]

      - unless @has02.empty?
        table
          - for item in @has02
            tr
              td= item[:id]
              td= item[:value]
```

```views/index.haml
!!!
%html
  %head
    %title Haml haml haml!
  %body
    #header
      %h1 Haml!
    #content
      %p I love Haml
    #array
      %table
        %tr
          - @arr01.each do |item|
            %td= item
    #hash
      %table
        %tr
          %td= @has01[:id]
          %td= @has01[:value]
      %table
        - @has02.each do |item|
          %tr
            %td= item[:id]
            %td= item[:value]
```
org-mode 8.0で変わった変数など

GWは気づいたらorgmodeで遊んでた...
org-modeを久しぶりに更新したらいくつか動かなくなったのでメモ。

exportまわりが変わりましたね。ファイル名が、ox-*.elという名前空間になったようです。
(例: org-latex.el -> ox-latex.el)
C-c C-eしたときに出てくるバッファもめっちゃ変わりました。DocBookとかOpenDocument出力とか無くなってるんだけど需要ないのかな...?

他にも変わっているかもしれませんが、とりあえず気づいた部分だけ。

# org-latex-pdf-process
org-modeからLaTeX経由でPDFにするプロセスを指定する
7.xまでは、`org-latex-to-pdf-process` でしたが、8になってからは、`org-latex-pdf-process`という変数になったようです。

例えば、LaTeXからPDFにするときpdflatexを呼び出すとき、init.elに

```common-lisp
(setq org-latex-pdf-process
      '("pdflatex %f" "pdflatex %f" "pdflatex %f"))
```

と記述すればよいみたいです。(ちなみにpdflatexだと日本語を含んだ文書のタイプセットはできない)

# org-latex-classes
org-modeでいろんな文書のタイプ(LaTeXでクラスファイルjsarticleやjsbookを指定したり、その他styファイルをインクルードする)を指定するとき
7.xまでは、`org-export-latex-classes`  でしたが、8になってからは、`org-latex-classes`という変数になったようです。

例えば、jsarticleとjsbookを変数に登録する場合、init.elに

```common-lisp
(setq org-latex-classes '(("jsarticle"
			"\\documentclass{jsarticle}
\\usepackage[dvipdfmx]{graphicx}
\\usepackage{url}
\\usepackage{atbegshi}
\\AtBeginShipoutFirst{\\special{pdf:tounicode EUC-UCS2}}
\\usepackage[dvipdfmx,setpagesize=false]{hyperref}
 [NO-DEFAULT-PACKAGES]
 [PACKAGES]
 [EXTRA]"
			("\\section{%s}" . "\\section*{%s}")
			("\\subsection{%s}" . "\\subsection*{%s}")
			("\\subsubsection{%s}" . "\\subsubsection*{%s}")
			("\\paragraph{%s}" . "\\paragraph*{%s}")
			("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
		       ("jsbook"
			"\\documentclass{jsbook}
\\usepackage[dvipdfmx]{graphicx}
\\usepackage{url}
\\usepackage{atbegshi}
\\AtBeginShipoutFirst{\\special{pdf:tounicode EUC-UCS2}}
\\usepackage[dvipdfmx,setpagesize=false]{hyperref}
 [NO-DEFAULT-PACKAGES]
 [PACKAGES]
 [EXTRA]"
			("\\chapter{%s}" . "\\chapter*{%s}")
			("\\section{%s}" . "\\section*{%s}")
			("\\subsection{%s}" . "\\subsection*{%s}")
			("\\subsubsection{%s}" . "\\subsubsection*{%s}")
			("\\paragraph{%s}" . "\\paragraph*{%s}")
			("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
		       ))
```

みたいな感じに書くようです。
(ここら辺の内部について詳しくは調べてないのでソースコードなりヘルプを出して見るべし)

# デフォルトクラス
多分7.xでもあると思うので余談になりますが、`#+LATEX_CLASS`を書かないと標準では、`article`クラスが選ばれます。
こいつは日本語用のクラスではないので、今まで毎回クラスを指定していました。
調べていたついでに、`org-latex-default-class`という変数を発見しました。
どうやらクラスを指定しないと、この変数の値が自動的に使われるようです。

上記の例で、`jsarticle`をデフォルトにするには、

```common-lisp
(setq org-latex-default-class "jsarticle")
```

とすれば良いらしいです。

知らなかった...
[Linux]コマンドでファイルに行の挿入をする方法

echoとリダイレクトを組み合わせると、ファイルを開かずとも行の挿入をしてくれるわけでして、

```bash
$ echo hogehoge >> temp.txt
```

なんてすると、行末に"hogehoge"という文字を挿入してくれるので、*sh スクリプト書くときとかに便利だったりします。私は書いたことありませんが(ぇ

んで、echoで行末に挿入できるんなら、指定した行に任意文字列を挿入する方法もあるんじゃね？なんて思って数か月、調べずにほったらかしにしていたのをGW何の予定もないことをいいことに調べてみました。「linux 行 挿入 コマンド」でグーグル先生に尋ねるとあっさり答えが。google先生曰く「sedコマンドを使うがよい」とご教授いただいたので、メモ。

```bash
$ echo hogehoge >> temp.txt
$ echo fugafuga >> temp.txt
$ cat temp.txt
hogehoge
fugafuga
$ sed -i -e "2i fooobaaa" temp.txt
$ cat temp.txt
hogehoge
fooobaaa
fugafuga
```

sed は行挿入コマンドではなくて、文字列置換コマンドですので、ファイル整形はお手の物。色々な使い方があるみたいですので、ご興味をもたれた方は調べてみてはいかがでしょうか。

---
#### 参考サイト：
ある文字列をファイルの特定行に挿入するコマンド - 元RX-7乗りの適当な日々 http://goo.gl/kqXRD

sedコマンドでファイルを上書き編集 - OpenGroove http://goo.gl/LfaJP
AWS Elastic Beanstalk+Node.js+Express+Passport+MySQLでアカウント管理（その４）

[前回](http://qiita.com/items/5ee926ad1a65ed0536e3)からの続き。

前回、ビューを作成しましたので、ルーティングも設定しておきます。
ルーティングは、routes/index.jsに記述されていますので、
これを修正します。

```routes/index.js
exports.index = function(req, res){
  res.render('index', { title: 'Home', user: req.user });
};

exports.login = function(req, res){
  res.render('login', { title: 'Login', user: req.user, message: req.flash('error') });
};

exports.signup = function(req, res){
  res.render('signup', { title: 'Signup', user: req.user });
};
```

ルーティングはこれだけです。

[続く](http://qiita.com/items/e31a4b1b0e794c8dfd46)
CoffeeScriptでUNIXタイムスタンプを最短で取得する方法


```coffeescript
Math.floor(new Date().getTime() / 1000)
```

上記は下記のように短縮することができる

```coffeescript
new Date/1000|0
```

この書き方はCoffeeScriptならではというわけではなく、JavaScriptでも同じ書き方ができる。
AWS Elastic Beanstalk+Node.js+Express+Passport+MySQLでアカウント管理（その１）

以前の[記事:【覚え書き】AWS Elastic BeanstalkからRDSへ接続](http://qiita.com/items/c7cfb3ff6e89b8af5678 "【覚え書き】AWS Elastic BeanstalkからRDSへ接続")に書いたように、
Elastic Beanstalk(EB)のMySQLへ接続できるようになったので、
MySQLを使ってアカウント管理してみたいと思う。
サイト上で、アカウントを登録してログインするところまでやってみたい。
今回は、Node.js+Express+Passport+MySQLの環境で構築する。
ExpressやPassportについての詳細は説明しない。


まずは、AWS-SDKを使用してアプリケーションを作成する。
（詳しくは[この辺](http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs.sdlc.html)を参照）

アカウントは、以下のようにJavaScriptで定義されているとする。

```javascript:account.js
exports.Account = function(id, username, password, profile_id, created){
	this.id = id;
	this.username = username;
	this.password = password;
	this.profile_id = profile_id;
	this.created = created;
};

exports.Profile = function(profile_id, email, sex, description){
	this.profile_id = profile_id;
	this.email = email;
	this.sex = sex;
	this.description = description;
};
```

まず準備として、前回の記事を参考にMySQLに接続したら、
以下のSQL文を実行して（コメントは不要）、データベースを用意しておく。

```sql:initTables.sql
/* Use Database */
USE ebdb; // Elastic Beanstalkがあらかじめ用意してくれたテーブルを使う。

/* Create Tables */
CREATE TABLE ACCOUNTS
(
	ID INT(12) UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT,
	USERNAME VARCHAR(255) NOT NULL UNIQUE,
	PASSWORD VARCHAR(200) NOT NULL,
	PROFILEID INT(12) UNSIGNED UNIQUE,
	CREATED DATETIME NOT NULL,

	PRIMARY KEY (ID)
) COMMENT = 'User Accounts';

CREATE TABLE PROFILES
(
	ID INT(12) UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT,
	EMAIL VARCHAR(255),
	SEX enum ('male', 'female', 'other') default 'other',
	DESCRIPTION TEXT,

	PRIMARY KEY (ID)
) COMMENT = 'Profiles';

/* Create Indexes */
CREATE UNIQUE INDEX USER_IDX ON ACCOUNTS (USERNAME ASC);
CREATE INDEX ACCOUNT_IDX ON ACCOUNTS (ID ASC);
CREATE UNIQUE INDEX PROFILE_IDX ON PROFILES (ID ASC);

```

[続く](http://qiita.com/items/13bde00b3a4392dbacae)
AWS Elastic Beanstalkで環境変数をセットする

※以下の記事は、まだ実際に試してないので単なる勘違いの可能性があります。

Elastic Beanstalkアプリケーションから、TwitterやFacebookのOAuth認証を使いたいときがある。
そんなとき、Consumer KeyやConsumer Secretをコードに埋め込むのには抵抗がある。

では、どうするのか？

環境変数にKeyやSecretを登録できればいいじゃないか!


Webをさまよった結果、以下の方法で環境変数が設定できる（っぽい）。

１．AWS Management Consoleで、"Elastic Beanstalk"を開く。
２．環境変数を設定したいアプリを選択する。
３．下側の欄の"Environment Details"をクリックして詳細を表示させる。
４．"Edit Configuration"をクリック
５．ウィンドウが開いたら、"Container"タブを選択
６．下のほうにスクロールすると"Edit Configuration"というところがあるので、
　　そこの"PARAM1","PARAM2"...にKeyやSecretを登録
７．Node.jsのコードで

```javascript
var twitterKey = process.env.PARAM1;
var twitterSecret = process.env.PARAM2;
```

　のようにすれば設定した環境変数にアクセスできる（んじゃないかなぁ…）。
grunt+jasmineな環境作成手順

自分用の覚書。環境はMacです。

##node.jsのインストール
http://nodejs.org/
公式サイトからnode.jsのインストーラをダウンロードしてインストール。

## Gruntのインストール
の前に

```
npm -v
```

を実行して、npmが使用できるようになっていることを確認。
コマンドを実行してバージョンが表示されたら、以下のコマンドをスーパーユーザーで実行

```
sudo npm install -g grunt-cli
```

### package.jsonの準備
packeage.jsonをgruntを使用するフォルダ直下に作成する。
ファイルの内容は以下。著作者情報やバージョン情報も設定できるけども、割愛します。

```javascript:package.json
{
  "name": "practis"
}
```

作成したら、bashでgruntを使用するフォルダ（以下、当該フォルダ）に移動して以下のコマンドを実行。
当該フォルダにgruntをインストール（install grunt)し、package.jsonに以下のインストール内応を記載(--save-dev)する

```
sudo npm install grunt --save-dev
```

当該フォルダ以下にnode_modulesフォルダが作成され、package.jsonにはdevDependenciesが追記され、以下の様な状態になる

```javascript:package.json
{
  "name": "practis",
  "devDependencies": {
    "grunt": "~0.4.1"
  }
}
```


続いて、使用するプラグインをインストール。
ファイル変更を監視するためのwatch

```
sudo npm install grunt-contrib-watch --save-dev
```

テスティングツールのjasmine

```
sudo npm install grunt-contrib-jasmine --save-dev
```


package.jsonは以下のようになっているはず

```javascript:package.json
{
  "name": "practis",
  "devDependencies": {
    "grunt": "~0.4.1",
    "grunt-contrib-watch": "~0.4.0",
    "grunt-contrib-jasmine": "~0.4.2"
  }
}
```


ここまで入ったら、開発する環境を用意。
フォルダ直下にGruntfile.jsを作成。
内容と意味合いについては以下

```javascript:Gruntfile.js
module.exports = function(grunt) {
  grunt.initConfig({
    watch: {
      // src/jsフォルダ以下のjs拡張子ファイルを対象に監視
      files: ['src/js/*.js'],
      // 変更があったらタスクjasmineを実行
      tasks: ['jasmine']
    },
    jasmine: {
    	// プロパティ名はテストケース名
	    sample: {
	      // このテストケースでテストするファイルの指定
	      src: 'src/js/sample.js',
	      options: {
	      	// テストケース
	        specs: 'spec/*Spec.js',
	        // ヘルパー
	        helpers: 'spec/*Helper.js'
	      }
	    }
	}
  });
  // gruntでjasmineを使う
  grunt.loadNpmTasks('grunt-contrib-jasmine');
  // 変更したファイルを監視するためのwatch
  grunt.loadNpmTasks('grunt-contrib-watch');
};
```


フォルダ内の構成を以下のようにする

```
Gruntfile.js
package.json
node_modules(自動作成されたフォルダ)
spec(任意作成したフォルダ・テストケースのjsを入れる)
src(任意作成したフォルダ・開発物を入れる)
└js(jsを入れる)
```


## テストケースをspecフォルダ以下に作成
Gruntfile.jsに定義した名前に沿うようにファイル名をつける

```javascript:sampleSpec.js
describe("test case name", function() {
    var foo;
     beforeEach(function() {
         foo = sample.test('hallo');
     });

     it("should say", function (){
        var say = foo.say('hallo');
        expect(say).toEqual("say hallo");
     });
});
```

## テストされる対象のjsをsrc/js以下に作成
Gruntfile.jsで指定したテストケースでテストされる対象として作成。

```javascript:sample.js
var sample = {}; 

sample.test = function(param){
  return {say : function(){return 'say ' + param}}
}
```


ここまで準備ができたら、jsファイルの変更の監視を開始する

```
grunt watch
```


これで、src/js以下のsample.jsファイルが変更された時点でjasmineのテストが走る

```
Completed in 2.249s at Sat May 04 2013 16:33:33 GMT+0900 (JST) - Waiting...OK
>> File "src/js/sample.js" changed.
Running "jasmine:test" (jasmine) task
Testing jasmine specs via phantom
.
1 spec in 0.002s.
>> 0 failures

Done, without errors.
```


上記はテストが成功した場合。

取り敢えず、これで動作することを確認。
jasmineの使い方については、追い追い調べようと思います。

補足・動作させるのにphantomjsを使用していますが
プラグイン内に含まれているのでインストールは不要かも知れません。
もともとphamtomjsがインストールされた環境で実行したので確かめてませんが、もし動作しなければphantomjsをインストールしてパスを通せばうまくいくとおもいます。
Gruntタスクの失敗をNotification CenterやGrowlなどにお知らせしてくれるgrunt-notify


gruntでタスクを手作業で実行するときはタスク失敗してもまあ気付くことが出来るけど、grunt watchしていてタスクが失敗したら知らせて欲しい。
coffeescript書いててjsにコンパイル失敗した時とか特に。
そういうときに[grunt-notify](https://github.com/dylang/grunt-notify)が便利でした。

OSXのMountainLion環境でインストールしてGruntfileに書き込むだけで動きました。


まずはpackage.jsonに` "grunt-notify": "~0.2"`を追加して` npm install`。

あとはloadNpmTasksでgrunt-notifyを追加。

```coffeescript
grunt.loadNpmTasks 'grunt-notify'
```

javascriptならこうですね。

```javascript
grunt.loadNpmTasks('grunt-notify');
```

そしたらもうgruntタスクが失敗した時にNotification Centerでお知らせをしてくれた。これだけでサッと動いてくれるのがありがたい。
視力保護ブックマークレット

##概要
背景の色を黒く、文字の色を白くするだけのブックマークレットです。自分用。
手当たり次第に要素のCSSを書き換えていますので、非常に効率が悪い。
もっと賢い走査の方法がありそうですが...、誰か助言をください。

```javascript:black
javascript:(function() {
    var c = 'background-color: #000000 !important; background-image: none; color: #FFFFFF !important;';
    var nodelist = document.getElementsByTagName('*');
    function find(p) {
        for(var i = 0; i < p.length; i++) {
            p.item(i).style.cssText += c;
            if(p.item(i).nodeName === 'IFRAME' || p.item(i).nodeName === 'FRAME') {
                if(p.item(i).contentDocument !== null) {
                    find(p.item(i).contentDocument.getElementsByTagName('*'));
                }
            }
        }
    }
    find(nodelist);
})();
```

##課題

* CSS書き換える程度なら、他にもっといい方法があるのでは。
* DOMの走査ってこれでいいのか。
* ドメインの異なるIFRAME、FRAMEは走査できない。
* 静的なページにしか対応していない。
* ロゴとか画像で表現された文字も色を変えたい。OCR的な機能が必要。
python2.7 開発環境構築

head -n1 /etc/issue

	CentOS release 6.4 (Final)

yum install python-setuptools
easy_install pip
pip freeze

	distribute==0.6.10
	iniparse==0.3.1
	pycurl==7.19.0
	pygpgme==0.1
	urlgrabber==3.9.1
	yum-metadata-parser==1.1.2

pip install ipython
pip install virtualenv
virtualenv --python /usr/local/bin/python2.7 --no-site-pakages ~/virtualenv/python27

開発環境へ切替
source ~/virtualenv/python27/bin/activate
pip freeze

	wsgiref==0.1.2

開発環境から抜ける
deactivate
pip freeze

	distribute==0.6.10
	iniparse==0.3.1
	ipython==0.13.2
	pycurl==7.19.0
	pygpgme==0.1
	urlgrabber==3.9.1
	virtualenv==1.9.1
	yum-metadata-parser==1.1.2

wget http://peak.telecommunity.com/dist/ez_setup.py
python2.7 ./ez_setup.py
CentOS 6.x x86_64 Python-2.7.4 rpmパッケージ作成

head -n1 /etc/issue

	CentOS release 6.4 (Final)

yum install wget zlib-devel
cd /usr/local/src/
wget http://www.python.org/ftp/python/2.7.4/Python-2.7.4.gz
tar zxvf Python-2.7.4.tgz
cd Python-2.7.4
./configure
make
checkinstall -R --fstrans=no --backup=yes --install=no make install
rpm -ivh /root/rpmbuild/RPMS/x86_64/python27-2.7.4-1.x86_64.rpm
rpm -qi python27

	Name        : python27                     Relocations: (not relocatable)
	Version     : 2.7.4                        Vendor: (none)
	Release     : 1                            Build Date: 2013年05月03日 22時28分01秒
	Install Date: 2013年05月03日 22時30分16秒  Build Host: localhost
	Group       : Applications/System          Source RPM: python27-2.7.4-1.src.rpm
	Size        : 92263133                     License: GPL
	Signature   : (none)
	Packager    : checkinstall-1.6.3
CentOS 6.x x86_64 checkinstall rpmパッケージ作成

head -n1 /etc/issue

	CentOS release 6.4 (Final)

yum install make gcc rpmbuild git gettext
cd /usr/local/src/
git clone http://checkinstall.izto.org/checkinstall.git
cd checkinstall/
make
make install
mkdir -p ~/rpmbuild/SOURCES
ln -s /usr/local/lib/installwatch.so /usr/lcal/lib64/installwatch.so
checkinstall -R --fstrans=no --backup=yes --install=no make install
rpm -ivh  /root/rpmbuild/RPMS/x86_64/checkinstall-20130503-1.x86_64.rpm
rpm -qi checkinstall

	Name        : checkinstall                 Relocations: (not relocatable)
	Version     : 20130503                          Vendor: (none)
	Release     : 1                             Build Date: 2013年05月03日 21時45分11秒
	Install Date: 2013年05月03日 21時50分17秒      Build Host: CentOS6_x86_64
	Group       : Applications/System           Source RPM: checkinstall-20130503-1.src.rpm
	Size        : 396026                           License: GPL
	Signature   : (none)
	Packager    : checkinstall-1.6.3
	Summary     : CheckInstall installations tracker, version 1.6.2
	Description :
	CheckInstall installations tracker, version 1.6.2
サブディレクトリで Rails アプリを分けるための nginx の設定


# 環境
サーバー: Gehirn RS2
Ruby: 2.0.0p0
Rails: 4.0.0.beta1
nginx: 1.2.7
unicorn: 4.6.2

# やりたいこと
Gehirn の初期ドメインは user_name.gehirn.ne.jp となっている。
ここで user_name.gehirn.ne.jp/rails_app のURIアクセスがあったとき public_html/rails_app 以下に飛ぶように nginx を設定する方法を述べる。

# 事前準備
この記事を参考に以下の作業をしておきます。
http://qiita.com/items/c1edfa84b34dba2211ac

- 公開鍵の登録
- データベースの作成
- Ruby のインストール ($ rs2 install rubyで大丈夫です)
- nginx のインストール
- unicorn のインストール (Rails プロジェクトを作成してからの作業です)

# nginx の設定ファイル編集
上記参考URLとの違いは以下です。
unicorn 用の設定ファイルにおいてUNIXソケットを使うようにしています。

```gehirn-unicorn.conf
upstream backend-unicorn {
    server unix:/home/user_name/public_html/rails_app/tmp/sockets/backend-unicorn.sock;
}

server {
    listen       61***; # Gehirn のプロキシ先ポート番号
    server_name  localhost;

    location /rails_app/ {
        proxy_pass_header Server;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_read_timeout 75; # unicorn設定ファイルのtimeoutも忘れずに
        proxy_pass http://backend-unicorn; # upstreamで定義したバックエンド
    }
}
```

nginx の設定ファイルは以上です。

# unicorn の設定ファイル編集
unicorn の設定ファイルは以下のようにします。

```unicorn-conf.rb
$timeout = 75
listen "/home/user_name/public_html/rails_app/tmp/sockets/backend-unicorn.sock"
worker_processes 2
pid "/home/user_name/public_html/rails_app/tmp/pids/unicorn.pid"
```
# Rails アプリのルーティング設定
RAILS_ROOT に config.ru というファイルがあるのでそれを編集するか削除します。
削除したら unicorn がよきに計らってくれるのできちんと動作しますが環境によっては動かないかもしれません。

```config.ru
# This file is used by Rack-based servers to start the application.
 
require ::File.expand_path('../config/environment',  __FILE__)
if ENV['RAILS_RELATIVE_URL_ROOT']
  map ENV['RAILS_RELATIVE_URL_ROOT'] do
    run RailsApp::Application
  end
else
  run RailsApp::Application
end
```

# unicorn の起動
unicorn を起動する際オプションで以下をつけます。
**--path** がポイントです。自分はこれのせいでかなり時間をとられました。
`$ unicorn_rails -c config/unicorn-conf.rb -D --path /rails_app`

**--path** が **config.ru** の **ENV['RAILS_RELATIVE_URL_ROOT']** に入ります。

# 確認
これで user_name.gehirn.ne.jp/rails_app にアクセスしたら Rails アプリが起動しているはずです。
nginxビルド時のエラー


CentOSにてnginxをビルドしてみたらエラー


まずはソースをダウンロード

```
wget http://nginx.org/download/nginx-1.4.0.tar.gz
```

configure実行

``` 
./configure --prefix=/usr/local --conf-path=/etc/nginx/nginx.conf
```
 そしたらエラー

```
./configure: error: the HTTP rewrite module requires the PCRE librSary.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.
```
 PCRE libraryが必要と言ってはる。
PCRE libraryは正規表現ライブラリ。
URLのrewriteやLocationの指定で正規表現によるマッチングが行えるようになるとのこと。

というわけでインストールしてみる

```
yum -y install pcre-devel
```

再度configure実行

``` 
./configure --prefix=/usr/local --conf-path=/etc/nginx/nginx.conf
```

ようやく成功。
サーバーはPHP5.1.6、Apache1.3.42 とレスポンスを返す (Zend Framework2で)

以下のモジュールクラスを用意して組み込めばOKです

```php
<?php
namespace Dummy;

use Zend\Mvc\MvcEvent;

class Module
{
    public function onBootstrap(MvcEvent $e)
    {
        $headers = $e->getResponse()->getHeaders();
        $headers->addHeaderLine('Server', 'Apache/1.3.42');
        $headers->addHeaderLine('X-Powered-By', 'PHP/5.1.6');
    }
}
```
Raspberry pi の GPIO ポートを扱う WiringPi

Raspberry pi の GPIO をいじるのに便利な、 WiringPi というソフトウェア(ライブラリ)があります。

https://projects.drogon.net/raspberry-pi/wiringpi/

いろいろなサンプルもあって、便利なのですが、そもそものピン配置が 『wiringPi Pin配置』なるものに従っており、毎回手元で変換するのが面倒です。
と、いうことで以下にまとめてみました。


|Pin#  |  Name (Rev.1)  |  wiringPi Pin |
|:----:|:--------------:|:-------------:|
|1   |  3.3V  |  -  |
|2   |  5V    |  -  |
|3   |  SDA0  |  8  | 
|4   |  5V    |  -  |
|5   |  SCL0  |  9  |
|6   |   0V   |  -  |
|7   |  GPIO7 |  7  |
|8   |  TxD   |  15 |
|9   |  0V    |  -  |
|10  |  RxD   |  16 |
|11  |  GPIO0 |  0  |
|12  |  GPIO1 |  1  |
|13  |  GPIO2 |  2  |
|14  |  0V    |  -  |
|15  |  GPIO3 |  3  |
|16  |  GPIO4 |  4  |
|17  |  3.3V  |  -  |
|18  |  GPIO5 |  5  |
|19  |  MOSI  |  12 |
|20  |  0V    |  -  |
|21  |  MISO  |  13 |
|22  |  GPIO6 |  6  |
|23  |  SCLK  |  14 |
|24  |  CE0   |  10 |
|25  |  0V    |  -  |
|26  |  CE1   |  11 |
終了時の状態を保存しない設定

##10.7以降でSaved Application Stateを勝手に作られて邪魔
だけど**NSProcessInfo**で、

* – automaticTerminationSupportEnabled
* – disableAutomaticTermination
* – enableAutomaticTermination

を呼び出すと10.6とソースコードの互換性の問題が・・・
と言うときに、Infor.plistに、

```xml:info.plist
	<key>NSSupportsAutomaticTermination</key>
	<false/>
```
または、Xcodeの
*Custom OS X Application Property*
の中に

|key                             |type   |Value|
|:-------------------------------|:------|----:|
| NSSupportsAutomaticTermination |Boolean| NO  |

という項目を追加すると、ソースコードを記述せずに、Saved Application Stateをdisableできる。

**お勧めしないが**、他の人が作ったアプリもこれで強制的にSaved Application Stateを無視させることも出来なくは無い。
HerokuのMongoHQからデータベースのバックアップを取る


## DatabaseのURLを調べる
```
$ heroku config | grep MONGOHQ
MONGOHQ_URL:       mongodb://(user):(password)@staff.mongohq.com:(port)/(database_name)
```

## バックアップ
```
$ mongodump -h staff.mongohq.com:port -d databese_name -u user -p password -o backup_name
```


userとpasswordはHerokuのそれとは異なるので注意すること。
GNU Emacs for MacOS XをTerminal中で起動する

GNU Emacs for MacOS Xをすでにインストールしているなら、Terminal中でもこのバイナリを起動できます。コマンドは下記の通りです。

    $ /Applications/Emacs.app/Contents/MacOS/Emacs -nw

長いPATHを毎回打つのは面倒なので、bash_profileなどに下記の記述を加えておくと便利です。

     alias emacs="/Applications/Emacs.app/Contents/MacOS/Emacs -nw"

MacOS Xにはもともとemacsがインストールされています。上記の設定を加えた場合、そちらのバイナリを起動するためにはFULL PATHを指定する必要があります。

```
$ emacs --version
GNU Emacs 24.3.1
Copyright (C) 2013 Free Software Foundation, Inc.
GNU Emacs comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of Emacs
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.
$ /usr/bin/emacs --version
GNU Emacs 22.1.1
Copyright (C) 2007 Free Software Foundation, Inc.
GNU Emacs comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of Emacs
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.
```

MacにSSHでアクセスした際にも、いつものEmacsが使えるというメリットがあります。
AngularJSのControllerの書き方

##追記
[kawaz氏からController含めたDIについて詳細な情報を提示していただいた。](http://qiita.com/items/363f430d21ec729f1b7d)ありがとうございます。

とはいえ、この辺のことがあまり前面に出して書かれていないあたり、他のコードを読むときにびっくりしちゃうだろうなぁと思う。

----

AngularJS公式とかで提示されているサンプルなどを見てみると、大体こんな感じで関数を定義しているところが多い。

```javascript
function HogeCtrl($scope) {
	// 中身は中略
}
```
<br>


なのでこれまではそれにしたがって書いていたのだけど、githubなどでAngularJSのモジュール等を見るとこういう書き方をしているものを見つけた。

```javascript
angular.controller('Ctrl', ['$scope', function($scope) {
	// 中略
}]);
```
<br>


AngularJS公式のドキュメントをほじくり返してみると、[Understanding the Controller Component](http://docs.angularjs.org/guide/dev_guide.mvc.understanding_controller)で該当の記述を発見。


> NOTE: Many of the examples in the documentation show the creation of functions in the global scope. This is only for demonstration purposes - in a real application you should use the .controller method of your Angular module for your application as follows:

> var myApp = angular.module('myApp',[]);

> myApp.controller('GreetingCtrl', ['$scope', function($scope) { $scope.greeting = 'Hola!'; }]);

> Note also that we use the array notation to explicitly specify the dependency of the controller on the $scope service provided by Angular.

ドキュメント内ではグローバルで関数定義する例が頻出しているけどデモンストレーションだから、開発時にはcontrollerメソッドを使いなさいとのこと。
<br>

AngularJSのドキュメントを眺めていると、各ページにコメント欄がついて、ところどころ**「サンプルが動かねーよ！」**みたいなことが書かれていているのが若干気になるよのね。きちんとメンテされていないのだろうか？
コマンドでmail送信

変化があったときにメール送信して欲しいってことは、よくあります。
コマンドラインでさっと書くことができないかと思い調べました。mailコマンドを利用するみたいです。下記のようにして本文をパイプで渡してあげると良いみたいです。

```:sh
echo 本文 | mail -s タイトル  送信先メールアドレス
```

この知識を使うとwebサイトの変更を監視して変化があったら、メール送信するって処理をシェルスクリプトから書けますね。
StoryBoardを利用した制御関連コード



##遷移開始
```objc
[self performSegueWithIdentifier:@"openCameraFinder" sender:self];
```

##モーダルビューから、親ビューへ戻る
```objc
[self dismissViewControllerAnimated:YES completion:nil];
```

##StoryBoard 遷移前に遷移先のコントローラに値を渡すとき
prepareForSegue:senderは、api裏側でControllerオブジェクトのメモリが確保された後、viewDidLoadが呼ばれる前に呼び出される。


```objc
- (void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender {

    // segue のidentifier で、どの画面遷移か判別する
    if( [segue.identifier isEqualToString:@"showNextView"] ) {
        // 遷移先のUIViewControllerを指定
        NextViewController* nvc = (NextViewController*)[segue destinationViewController];
        nvc.delegate =self;
         
        /* ここで遷移先画面にデータを渡したりする */
    }

}
```


##モーダルビューから、遷移元に値を戻す
デリゲートを使い、親で定義されたメソッドを呼び出す手順になる。


```objc:ChildSampleViewController.h
#import <UIKit/UIKit.h>

@protocol ChildSampleViewControllerDelegate;

@interface ChildSampleViewController : UIViewController

// CameraViewControllerへ戻るためのデリゲート(デリゲートオブジェクトは基本親持ち)
@property (weak , nonatomic) id <ChildSampleViewControllerDelegate> delegate;

- (IBAction)pushCloseButton:(id)sender;     // クローズボタンと関連づけられたメソッド

@end

// 親画面へ戻るためのイベント用デリゲート
@protocol ChildSampleViewControllerDelegate <NSObject>
- (void) didFinishChildSample;              // クローズボタンが押されたとき呼び出すメソッド
@end
```

```objc:ChildSampleViewController.m
/* ..... */

// クローズボタンが押されたときのアクション
- (IBAction)pushCloseButton:(id)sender {
    [[self delegate] didFinishPreview];
    [self dismissViewControllerAnimated:YES completion:nil];
}

/* ..... */
```

「StoryBoard 遷移前に遷移先のコントローラに値を渡すとき」のサンプルを参考に、
遷移前に親オブジェクトのポインタを子に渡しておき、デリゲートを呼び出せるようにしておく

```objc:ParentSampleViewController.m

@interface ParentViewController : UIViewController<ChildSampleViewControllerDelegate>

@end

@implementation ParentViewController

/* .... */

- (void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender {

    // 対象セグエ以外ならここでリターン
    if(![[segue identifier] isEqualToString:@"OpenChild"])
        return;

    // 遷移先コントローラを取得
    ChildSampleViewController *childController
        = (ChildSampleViewController*)[segue destinationViewController];

    // 遷移元ポインタを渡しておく
    childController.delegate = self;
}


- (void) didFinishChildSample
{
    // ChildSampleViewのメソッドなりプロパティーを引っ張ってくる
}

@end
```
Steel Bank Common Lisp 1.1.7の変更点

[News - Steel Bank Common Lisp](http://www.sbcl.org/news.html)の内容を日本語訳したものです。内容の正しさは保証しません。

-----

# 機能拡張

* TRACEの:PRINT-ALLが多値を返すフォームを扱えるようになりました。（[#457053](https://bugs.launchpad.net/sbcl/+bug/457053)）

# バグ修正

* :ALLOCATIONスロットオプションがコンディションのスロットでも動作するように修正されました。（[#1049404](https://bugs.launchpad.net/sbcl/+bug/1049404)）
* コンディションの再定義が、行儀の悪いスロット初期化関数を複数回評価してしまう原因となることがなくなりました。（[#1164969](https://bugs.launchpad.net/sbcl/+bug/1164969)）
* CLASS-DIRECT-DEFAULT-INITARGSがコンディションクラスに対しても動作するように修正されました。（[#1164970](https://bugs.launchpad.net/sbcl/+bug/1164970)）
* 関数の定数がコンディションのinitformや既定のinitargの値として動作するように修正されました。（[#539517](https://bugs.launchpad.net/sbcl/+bug/539517)）
* シンボルマクロへのsvrefや(setf svref)がコンパイラをクラッシュさせないように修正されました。（最小のテストケースはJames M. Lawrenceがsbcl-develで提供してくれました）
* バッククォートされた、ある程度複雑な構造の共有化がされたフォームをプリティプリントするとき、正しく##参照（訳注：#n#）されないことがあるのが修正されました。（[#1161218](https://bugs.launchpad.net/sbcl/+bug/1161218)）
* (setf (documentation nil 'function) "doc")でエラーを通知しないよう修正されました。他の種類としてNILのドキュメンテーションを設定しようとしたときは、代わりにstyle-warningが通知されます。（Zach Beaneによって報告されました。[2e52fa05](http://sbcl.git.sourceforge.net/git/gitweb.cgi?p=sbcl/sbcl.git;a=object;h=2e52fa05)からのリグレッションです）
* 巨大な定数と条件を伴うモジュラ演算が誤ったデッドコードの削除をしないよう修正されました。（Eric Marsdenによって報告されました）
* OS X 10.8.0でのプログラム実行プロセスにおいて、Mach例外ハンドラがとても早く呼ばれる可能性があります。そのようなケースを、潜在的な大量のMachポートのリークなしで、堅牢に処理するように修正しました。

# 最適化

* x86でのLOGBITPとLOGTESTの最適化がx86_64に移植されました。
json_decodeの返り値がnullになったときの対処

jsonを暗号化してCookieに保管し、必要なときに復号化してデータ取り出しをやっていたのですが、json_decodeの返り値がnullになるという問題が発生しました。

データを取り出した際にBOMがついてしまっていたのが原因だったので、


```php
json_decode(preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $data),true);  
```

のようにBOMを落としてあげると、無事json_decodeが通りました。
Haxeと構造的部分型付け

Haxeがサポートしている「**構造的部分型付け(Structural Subtyping)**」という素晴らしい機能について紹介します。

まずは、サンプルコードを見てください。

```hx:Main.hx
class Main {
	static function main() {
		start( new Human() );	//エラーなし
		start( new Car() );		//エラーなし
		start( new Fish() );	//コンパイルエラー!!
	}
	
	static public function start( runner ) {
		runner.run();	//変数runnerには、run関数が必要。
	}
}

class Human {
	public function new(){}
	public function run() {
		trace( "人は走るよ!" );
	}
}

class Car {
	public function new(){}
	public function run() {
		trace( "車も走るよ!" );
	}
}

class Fish {
	public function new(){}
}

```

上の例では、start()にHuman、Car、Fishを渡していますが、Fishでのみコンパイルエラーが発生してます。これは、runnerが「run関数を持つ型」として型推論されており、そこにrun関数をもたないFishを渡しために起きたエラーです。

このように、クラスがどのような変数や関数を持ってるかという**構造**に対して、**部分**的に**型付け**できるのが、「**構造的部分型付け**」です。

----

さらに、「run関数を持つ型」というのは明示的に宣言することが可能です。
つまり、サンプルコードのstart()は以下のように書きかえることができます。

```as:start()
	static public function start( runner: { function run():Void; } ) {
		runner.run();
	}
```

さらに詳しい話については、公式ドキュメントの[構造体](http://haxe.org/manual/struct)を見てください
Arduino x Ruby x 光センサーで電子回路作り


[Dino](https://github.com/austinbv/dino)を使って簡単にRubyでArduinoを制御することを知ったので、光センサーを使って遊んでみます。

# 準備したもの
*Arduino UNO
*ブレッドボード
*ジャンパーコード 
*光センサー([CdSセンサー](http://akizukidenshi.com/catalog/g/gI-00110/)なかったため、[LLS05-A](http://akizukidenshi.com/catalog/g/gI-05713/)を利用。)

# 回路図
![回路図](https://dl.dropboxusercontent.com/u/471475/nightlight_%E3%83%96%E3%83%AC%E3%83%83%E3%83%89%E3%83%9C%E3%83%BC%E3%83%89.png)

# スクリプト 
[こちら](http://tutorials.jumpstartlab.com/projects/arduino/introducing_arduino.html)のnightlightのサンプルをそのまま使います。
sensor.when_data_receivedはloopの中に入れなくても常に値を送信してくれるようです。

```ruby:nightlight.rb
require 'dino'

board = Dino::Board.new(Dino::TxRx.new)
sensor = Dino::Components::Sensor.new(pin: 'A0', board: board)

on_data = Proc.new do |data|
  puts data
end

sensor.when_data_received(on_data)

sleep
```

# 動作
*`ruby nightlight.rb`でスクリプトを起動。
*部屋の中では100前後の値を出力し、手をかざすと20ぐらいまで値が低下することが確認できました。下記は出力抜粋です。

>$ ruby nightlight.rb 
>097
>097
>097
>---snip---
>023
>022
>021
>021
>020
>019


# まとめ
*簡単な配線とサンプルスクリプトで光センサーで入力した値をTerminalに出力することができました。
*光センサーと手の距離によって値も変わりますし、光センサー複数使って手を動きを追跡することができそうです。(手を右から左に動かしたとか。)
バッチで大量クエリ発行するときは、XoopsLogger::addQueryを無効化する


XOOPS CubeにはXoopsLoggerというログ記録クラスがあります。

発行されたSQLクエリもこのクラスで記録されてるので、AdelieDebugやRyusDebugでロガーからクエリログを取り出して表示することができます。

これはこれで開発中にうっかりSQLエラーをだしてしまったときにすぐに気がつけて便利なのですが、バッチ処理で大量のクエリを発行するときにちょっと問題になってきます。

# メモリ大量消費
XoopsLoggerでは発行したクエリをどんどん配列にためこむだけなので、バッチで大量にクエリを発行するとメモリ消費量がどんどん増大します。

（これが原因でバッチが途中で止まってしまったので、このメモを書いています(^^;）

# XoopsLoggerでクエリ記録無しを選べるようにする

XOOPS_ROOT_PATH/class/logger.php 110行目あたり

```php
    function addQuery($sql, $error=null, $errno=null)
    {
        $this->queries[] = array('sql' => $sql, 'error' => $error, 'errno' => $errno);
    }
```

こんなコードになってるので、これを下記の様に修正します。

```php
    function addQuery($sql, $error=null, $errno=null)
    {
		if(defined('XOOPS_LOGGER_ADDQUERY_DISABLED') && XOOPS_LOGGER_ADDQUERY_DISABLED){
			return;
		}
        $this->queries[] = array('sql' => $sql, 'error' => $error, 'errno' => $errno);
    }
```

で、バッチ処理の頭に

```php
define('XOOPS_LOGGER_ADDQUERY_DISABLED', true);
```

って追加しておけばバッチ処理だけクエリをためこまなくなります。
デバッグ時にロガーにクエリログ残したいとおもったら、

```php
define('XOOPS_LOGGER_ADDQUERY_DISABLED', false);
```
で一時的にクエリログ残して、参照という手もありますね。
echo | sedなんていらなかったんだ！


変数の置換をする時、今まで下記のようにやっていたのだが、`bash`には古く([96年のBash2.0以降](https://github.com/benolee/bash/blame/master/doc/bash.1#L2882))から置換機能(Pattern substitution)が備わっていた。

```Bash
MOD_HOSTNAME=$(echo $HOSTNAME | sed -e "s/foo/bar/g")
```

Pattern substitutionを使えばよりコンパクトかつ低コストで事をなせる。

```Bash
MOD_HOSTNAME=${HOSTNAME//foo/bar}
# 最初に該当した箇所だけを変換する場合はスラッシュ1回
MOD_HOSTNAME=${HOSTNAME/foo/bar}
```

`time`で時間を計測したところ、無名パイプとプロセスの生成はやはりコストが高かった。

    $ time echo ${HOSTNAME//./---}
    MacBookProRetina---local
    
    real  0m0.000s
    user  0m0.000s
    sys   0m0.000s
    
    $ time echo $HOSTNAME | sed -e "s/\./---/g"
    MacBookProRetina---local
    
    real 0m0.003s
    user 0m0.002s
    sys  0m0.002s