OmniAICreator/Qiita-1.07M huggingface dataset:
HTML5 MARKUP INTRODUCTION

##HTML
html: written contents and structure
css: Structure
js: behavior


##HTML5
can run faster!!
can ellipse "", but recommend never do it!!!!
inline SVG

```sample2.html
<!DOCTYPE html>

<meta charset="UTF-8">
<title> Throat is…  </title>
<p> Please stop my cough, <b style="font-size:5em; color:green">throat ache, my gosh!</b></p>

<svg>
     <path d = "M 20 20 L 60 20 L 40 60 z"
               fill="green"
               stroke="red"
               stroke-width="3" />
</svg>
              
```


#XML
xhtml5ってのもある
xmlは最近人気無い
でもxmlはすんごいたくさんツールがある
##欠点
手書きがめんどくさい

#Google Developper
Make the Web Faster
https://developers.google.com/speed/tools


#Web Inspector
####Chrome Developper Tools is called as "We Inspector"
####Web people have to master this!!
this is not only anlyisis Tools, but also Rewrite and experiment tools.
so you can rewrite the code.
要素の検証で，対応するものをすべて見ることができる

#Tips
ユーザースタイルシート，自分のスタイルシートを使える
check-> Stylish(chrome extention)

#Semantic Web
mmmm, for me it is really normal manner.

the number of elements: 108

##"section" elements
section/article/aside/nav

###1section has 1 topic. meaning 1 section has 1 hgroup
###1section has 1 header and 1 footer


     if you declare h series without section elements, unknown section would be made automatically.
     the undeclared section is not recommended.

aside: very low importance, social button, plugin


****
#Javascript
****
Javascript can …
1. rewrite webpage dynalically
2. communicate to we server


Node.js(server side), Titanium Mobile(smartphone application)


##Grammer of JS
using web browser, all people can use it.
using google chrome web inspector "Console"

1. Variable, Object(Constructure)
2. Array
3. Function
4. Operand


how to make function

```
finction(add(a,b){
     return a+b;
}
```
##Function is one of Object

var a = "abcde".toUpperCase();
alert(a);
a.subString(1,3);

["shigeru", "yoshida"].join(" ふざけんな ");


```配列を引数に取り，全要素を半角スペースで結合し，大文字にして返す
function joinAndUpper(array){
     var array2 = array.join(' ');
     var array3 = array2.toUpperCase();
     return array3;
     }

```

```一行で
function joinAndUpper(array){
     return array.join(' ').toUpperCase();
}
```


182 x 122
メモ： RStudio Shiny でファイルごとにタブを作る

`data` フォルダに処理したいファイルを置きます。
今回は各ファイルに対して次のようなデータが入っており、これらを棒グラフにして別タブで出力したいとします。

|Name|Count|
|----|-----|
|hoge|10|
|fuga|15|
|piyo|12|
|...|...|

```r:ui.R
library(shiny)

files <- list.files("data")

shinyUI(pageWithSidebar(
  headerPanel(title="Tab by File Test"),  
  sidebarPanel(
    sliderInput(
      inputId = "obs",
      label = "Number of observations: ",
      min = 1,
      max = 100,
      value = 50
    )
  ),
  mainPanel(
    do.call(tabsetPanel, 
      lapply(files, function(filename) {
        panelName <- substring(filename, 1, nchar(filename) - 4)
        tabPanel(panelName, plotOutput(filename))
      })
    )
  )
))
```

output に `for` は使えません。`sapply` なら使えます。

```r:server.R
library(shiny)

files <- list.files("data")

shinyServer(function(input, output) {
  sapply(files, function(filename) {
    output[[filename]] <- renderPlot( {
      filepath <- file.path("data", filename)
      n <- input$obs
      data <- read.table(filepath, header=TRUE, sep="\t")
      values <- data[, 2]
      names(values) <- data[, 1]
      barplot(values[1:n], main=filename)
    })
  })
})
```
実際に作ってみたものがこれです → http://glimmer.rstudio.com/hoxom/TabByFileTest/
MonoBehaviourのライフサイクル

Unityで使う基底クラスMonoBehaviourのライフサイクルを調べていたら、
非常に分かりやすくまとめてくださってた方がいたので、
備忘録に。

~~http://www.richardfine.co.uk/2012/10/unity3d-monobehaviour-lifecycle/~~

上のリンクが切れていたので、
公式のライフサイクルがこちらのページの下の方に書いてありましたので、
こっちを参考に。
http://docs.unity3d.com/Manual/ExecutionOrder.html

（でも、なんか前の方が色がついてて見やすい気がするのは気のせい？^^;
（一応、以前の画像を残してて下さった方のページはこちら
http://gordon.koefner.at/blog/coding/unity3d-monobehaviour-lifecycle/
HTML の attribute で I18n.translate したときに span class="translation_missing" を出さない方法


````ruby
= t('.key_name', rescue_format: :text)
````

とすると span のタグに囲まれて表示されなくなる。でもTranslation missingとして表示される

cf) 
http://apidock.com/rails/v3.2.8/ActionView/Helpers/TranslationHelper/translate

----

http://stackoverflow.com/questions/12914019/rails-remove-missing-translation-errors/12932010#12932010

この辺りを拡張すると translation missing の動きをカスタマイズできそう
blocksでリソースをスコープに閉じ込める

Objective-cを使っていて、
なんらかの寿命をスコープに閉じ込めたい状況ってないでしょうか？
私はあります。

例えばBitmapContextなんかどうでしょうか？

```
    CGContextRef context = CGBitmapContextCreate(NULL,
                                                 width, height,
                                                 8,
                                                 4 * width,
                                                 colorSpace,
                                                 kCGImageAlphaPremultipliedLast);

    CGContextRelease(context); /* これ忘れそう！ */
```

こんな時、例えばこういう方法もあるかな？と思います。

```
- (void)scopedBitmapContextHeight:(int)height width:(int)width blocks:(void(^)(CGContextRef))blocks
{
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(NULL,
                                                 width, height,
                                                 8,
                                                 4 * width,
                                                 colorSpace,
                                                 kCGImageAlphaPremultipliedLast);
    CGColorSpaceRelease(colorSpace);
    colorSpace = NULL;
    
    if(blocks)
        blocks(context);
    
    CGContextRelease(context);
}

//使うとき

    [self scopedBitmapContextHeight:100 width:100 blocks:^(CGContextRef context) {
        CGPoint line[] = {{0, 0}, {100, 100}};
        CGContextStrokeLineSegments(context, line, 2);
        
        CGImageRef imageFromContext = CGBitmapContextCreateImage(context);
        CGImageRelease(imageFromContext);
    }];
```

うーん、なんか微妙な気もしますが、頭の体操ということでご勘弁を
また、例外のことはまったく考えてません
chef-soloのセットアップとchefについての私感 


買いました。
[入門Chef Solo - Infrastructure as Code](http://www.amazon.co.jp/dp/B00BSPH158/)
読みました。
chef-soloの触りとchef-server環境の作成ぐらいは出来たのであの丘の向こうを目指して使い心地とかまとめておきます。

## chefとは

引用:
入門Chef Solo #23 どこまでをChefでやるべきか

> chefは「ノードの状態を管理し、そのノードをあるべき状態に収束させるフレームワーク」だからです。

と、あるようにchefはサーバーをあるべき状態に収束させるフレームワークです。
サーバーの初期環境構築や設定ファイルの変更等をしてくれます。sshでログインしてパッケージインストールや設定ファイルの変更をしなくても目的のサーバーの状態にしてくれます。

## chefの種類

単一で機能する`chef solo`
複数を管理する`chef server`&`chef client`
がある。

どちらも同じcookbooks(サーバーの状態を示すファイル)を使う事が出来るので`chef solo`でcookbooksを充実させたり、検証してから`chef server`に移ると良いかも

## Hello, chef-solo.
chefのインストールからchef soloのセットアップまで。
作業環境からリモートでchef-soloを実行して環境の状態を変更する。

事前準備としてVMでもEC2でも状態を変更するサーバーを立ち上げて、パスワード無しでsudoが実行できるユーザーでssh接続が出来るようにしておく。
基本このサーバーではコマンドを流す必要は無い。

作業環境で実行

    $ gem install chef

chefの操作は主に`knife`コマンドを使用する
knifeのセットアップをする

    $ knife configure

入力を求められるのですべてデフォルト状態、空エンターでとりあえずおk
`~/.chef/`が作成される

`knife solo`コマンドのインストール、chef-repoの作成

    $ gem install knife-solo
    $ knife solo init chef-repo

`chef-repo`ディレクトリが作成される。
cookbooks作成

    $ cd chef-repo
    $ knife cookbook create hello-chef -o ./cookbooks/
    $ vi cookbooks/hello-chef/recipes/default.rb

```ruby:default.rb
#
# Cookbook Name:: hello-chef
# Recipe:: default
#
# Copyright 2013, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute
#
template "/tmp/hello-chef" do
  action :create
end
```

    $ vi cookbooks/hello-chef/templates/default/hello-chef.erb

```ruby:hello-chef.erb
hello, chef-solo.
hostname <%= node[:hostname] %>
```

chef-soloが実行できるようにセットアップ

    $ knife solo prepare <host>

`nodes/<host>.json`が作成されるのでそれを編集

```<host>.json
{
  "run_list":[
    "hello-chef"
    ]
}
```

    $ knife solo cook <host>

ここでようやっと<host>にssh接続して変更されているか確認

    $ cat /tmp/hello-chef
    hello, chef-solo.
    hostname <hostname>

完了

## cookbooksの書き方

GitHubにもろもろのCookbooksがあるので参考になる
[Opscode Public Cookbooks](https://github.com/opscode-cookbooks)

cookbooksのrecipeの記述は以下
[About Resources and Providers](http://docs.opscode.com/resource.html)

## まとめ

chef-serverのセットアップも書きたかったけど面倒くさくなってしまったのでとりあえずここまで。詳しくは[入門Chef Solo](http://www.amazon.co.jp/dp/B00BSPH158/)を読む事をお勧めする。

chefの記事を見ていると学習コストうんぬん言っているがそこまでコストは高くない印象。
これも id:naoya のおかげなのか。
わざわざ面倒な、しかし必要な手順を見せてから「実はさきほどの手順はこのコマンドで行う事が出来ます。」という手法は良いですね。

chefの話に戻るとそこまで学習コストは感じられなく、一度設定してしまえば同じ作業は自動化できてしまうので学習しておくのは無駄にはならない。というか楽しいので利益とか考えなくても自分は勝手にやってそう。
しかし手動で設定するのとchefのrecipeを少しずつ貯めて行くのとでは、時間が経てばchefの方が時間がかからないで設定が出来るようにはなるだろうが、そこまで到達するのに結構な時間と経験が必要にはなりそうなのは確か。
chefを始めたからすぐに効果が出たってのは無いかもです。

数十台、数百台のサーバーを設定する必要が有る場合はchefやpuppetの恩恵を得られるでしょうが、そこまでのシステムを触る事なんてそうそう無いですしね。

しかし、仮想環境で開発したり仮想環境で本番公開するのが当たり前の現在なので、仮想環境の利点の一つである「すぐに潰してすぐに立てる」をしても、プラットフォームや環境が変わっても、問題なくさっきまでの環境に整えてくれるchefは心強いです。
chefを使いこなせればまた一つあの丘の向こうに行ける事でしょう。
新しいGoogleAnalyticsでのpageTrackViewなど

最近GoogleAnalyticsのトラッキングコードがまた新しくなったようです。
Universal Analyticsというものが有効にされている場合にこちらのコードが採用されるようで、現在パブリックベータではあるものの、デフォルトで有効になっている模様なので注意が必要そう。

※追記
デフォルトだとまだ古いgaのままだよ、という情報をいただきました。
実際試したらその通りだったので訂正します。
最初の画面で新しいバージョンのほうが有利であるように表示されているので実際の運用時には注意が必要そう。
判別するには読み込むjsが **ga.js** か、 **analytics.js** かで判別するのがよさそうです。

## PageTrackViewの設定
古いコードは

```
_gaq.push(['_trackPageview', {page:'/piyo.html', title:'piyopiyo'}]);
```

でしたが、新仕様では以下のようになるようです。

```
ga('send', {
  'hitType': 'pageview',
  'page': '/piyo.html
  'title': 'piyopiyo'
});
```


## EventTrackingの設定
古いコードは

```
_gaq.push(['_trackEvent', 'category', 'action', 'label', 'value']);
```

でした。labelとvalueはオプションです。
新しいコードは次のようになるようです。

```
ga('send', {
  'hitType': 'event',
  'eventCategory': 'category',
  'eventAction': 'action',
  'eventLabel': 'option label',
  'eventValue': 'value'
});
```

どうやら送るパラメータは以前のままみたいですが、どちらも同じga()というメソッドを使うようになり、'hitType'というパラメータで送るデータの種類を判別するようになったようです。


詳しくは仕様をみるとよいでしょう。
https://developers.google.com/analytics/devguides/collection/analyticsjs/
Emacsのモードラインにgitのブランチ名を表示したいけど重いのはいやだ

__vc-modeがおもいです(吐血)__

vcの動作が結構アレな重さだったので無効にしてやったらとっても快適になったんですが、
ブランチ名の表示は欲しいなーと思ったのでちょっと調べてみたら、いろいろ残念なものしか出てこなかった。

-
ので、さくっとつくりました。

[[github] modeline-git-branch.el](http://github.com/acple/modeline-git-branch)

シンプルにブランチ名を表示するだけのelです。
とにかく軽く動作することだけにこだわって作ってみました。
更新頻度高くて軽いので幸せになれます。
せっかくなのでマイナーモードにしてみました。

使うには、

1. バイトコンパイルする

> (byte-compile-file "modeline-git-branch.el")

2. load-pathを通す

> (add-to-list 'load-path "~/......")

3. requireする

> (require 'modeline-git-branch)

4. マイナーモードを有効にする

> (modeline-git-branch-mode 1)

だけです。

特徴としては、

- 非同期プロセスを利用し、バックグラウンドでブランチ情報を取得。あなたのEmacsライフを邪魔しません。
- バッファをアクティブにする度に自動で表示を更新。もうブランチを切り替えながらの作業でも混乱することはありません。

みたいな。

中身的には、とりあえず適当なhookからidle-timerに実行予約を積んでおいて、実行時に条件を満たしていれば1度だけ非同期プロセスを作って実行する。という感じです。
そのままだと「バッファをカレントにした時」に実行されるように設定してるつもりなので、気に入らなかったらフックを増やしたりしていじってみてください。

モードラインのフォーマットにデフォルトで挿入されてる`(vc-mode vc-mode)`を置き換える形で挿入してるので、vc-modeと一緒には使えません。そもそも使う意味は無い。
あと、普通にいろいろ不具合あるかもしれないので使ってみるなら気をつけてください。

-
おまけ。
vc-modeを起動しないようにする

```scm
;; vcを起動しないようにする
(custom-set-variables
 '(vc-handled-backends nil))

;; 不要なhookを外す
(remove-hook 'find-file-hook 'vc-find-file-hook)
(remove-hook 'kill-buffer-hook 'vc-kill-buffer-hook)
```
Heroku x Rails3.2 x assets delivery from AmazonS3(東京/ap-northeast-1) use AutoSync Gem


# Herokuへのサービスへのアクセスを高速化しよう！
Herokuは遅い！なぜなら遠いからだ！
勝手な迷信かもしれない。誤っていたら申し訳ないしこの記事無駄。誰か教えて。

Herokuは基本USリージョンのEC2から配信されます。Assetsも同様。
テキストがアメリカから来るのは我慢出来る範囲かと思うけど、何枚もの画像がアメリカからやってくるのはどうだろうと思う。わけですよ。はい。

ではどうするか？
画像などだけ東京に置きましょう。

# いつやるか？今でしょ！

使うRubyGems
* AssetSync: https://github.com/rumblelabs/asset_sync
以上

というか、この記事見てやったので、
**この記事みてやって下さい。**
Using a CDN Asset Host with Rails 3.1(Heroku)
https://devcenter.heroku.com/articles/cdn-asset-host-rails31

以上。

# で、終わっちゃうと怒られそうなので、補足。
## Amazon系の設定
### IAMにてユーザアカウントを作ろう！
1. Access to https://console.aws.amazon.com/iam/home
2. Create new user -> Download Credentials
3. Users -> (選択) -> Permissions -> AttachUserPolicy

該当のバケット専用のS3フルアクセスのみ許容するテンプレ

```
{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::(作る予定のバケット名なアルファベット)/*"
      ]
    }
  ]
}
```

## S3にてバケットを作ろう！
1. Access to https://console.aws.amazon.com/s3/home?region=ap-northeast-1
2. Create Bucket(さっき入れた名前のバケット名で)
3. バケットを選択 -> Permissions -> Edit bucket policy

Anonymous(みんな)にファイルの取得を許容するテンプレ

```
{
	"Version": "2008-10-17",
	"Statement": [
		{
			"Sid": "AddPerm",
			"Effect": "Allow",
			"Principal": {
				"AWS": "*"
			},
			"Action": "s3:GetObject",
			"Resource": "arn:aws:s3:::(作ったバケット名なアルファベット)/*"
		}
	]
}
```

以上、これだけすれば動きます。

## 動くけど、補足

デフォルトだとAssetSyncはUS-EASTのS3にアップロードしようとして失敗して自動的にap-northeast-1に転送されます。そうされないためには、オプションを設定するコマンドをたたきしましょう。

```
$ heroku config:add FOG_REGION=ap-northeast-1
```

他にも、GZIPしてアップする的な、

```
$ heroku config:add ASSET_SYNC_GZIP_COMPRESSION=true
```

なんかもあります。
Rails でプリコンパイルされてない Asset を参照していないかテストする


(明記しない限り Rails 3.2.13、config/environments/* はデフォルトのままとする)

特に古い Rails アプリケーションをアップデートする場合に問題になるのだけど、

- config.assets.precompile への追加を忘れていた
- typo などで存在しない画像を image_tag で参照していた

などが原因で、プリコンパイルされていない Asset を参照している場合に、production 環境でページ表示時に例外が起きてしまう。

development 環境では問題が起きなかったり、少なくともページ表示時点では例外が起きないので気付きにくい。test でも同様。

ここでは、このようなケースでテストが失敗するようにしてみる。

# テスト環境の設定

まず `config/environments/test.rb` に下記の記述を追加する。

```ruby
# Asset が precompile されていないときにエラー
config.assets.compile = false
config.assets.digest = true
```

これで production 環境と同様に digest つきの URL を生成し、プリコンパイルされていない asset を参照したときに自動でコンパイルしないようになる。

# テスト時に Asset をプリコンパイルする

このままではテストの前に毎回 `assets:precompile` を手動で実行しなければならないので、自動化する。

`lib/tasks/rspec.rake` を作成し、下記のコードを記述する。

```ruby
task "spec" => ["assets:clean", "assets:precompile"] do
  Rake::Task["assets:clean"].execute
end
```

これで `rake spec` の前にプリコンパイルし、終わったら削除するようになる。

test-unit などを使っている場合は、適宜書き換えてください。

# 既知の問題

遅い。assets 関係の task がとにかく遅い。

普段のテストとは分けて、リリース直前の回帰テストでだけチェックするとか考えた方がよい。

私の場合は `unless defined?(Spork) && Spork.using_spork?` で囲って、Spork 使ってないときだけチェックするようにした。
Rake タスクがどこで定義されているか調べる


Rails の `rake assets:precompile` のソースが見たかったので、調べてみた。

irb (pry でも可) 起動。

```bash
$ irb
```

load で Rakefile を読み込む。

```ruby
require "rake"
load "Rakefile"
```

あとは、

1. Rake::Task.[] でタスク名からタスクを探して
2. actions メソッドで実行される Proc の配列を取得し
3. source_location で定義した場所を得る

```ruby
Rake::Task["assets:precompile"].actions.map(&:source_location)
```

これは Rails アプリケーションの例だが、もちろんそれ以外でも使える。

ちなみに `Rake::Task.tasks` で、定義されたタスクの一覧を確認することができる。
動的に追加されるDOM要素に対応する方法あれこれ


Chrome拡張を作っていると，最近のモダンなWebサイトが後から動的にDOM要素を追加してきて困ることがある．毎度対処方法をぐぐっているので，ここにまとめておく．

## 追加される要素にイベントハンドラを付加したい

[jQueryのonメソッド](http://api.jquery.com/on/)にselectorを渡すことで，あとから動的に追加された子要素に対してもイベントを発火することができる．
[liveメソッド](http://api.jquery.com/live/)でも同様のことが出来たが，1.7で廃止された．

```js
$("#parent").on("click", ".child", function(){ console.log("click");});
$("#parent").append("<span class='child'>Click Here</span>");
```

## 要素が追加されたことそのものを検出する
### DOMNodeInserted: 非推奨
要素が追加されたときに発火する[DOMNodeInserted](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-DOMNodeInserted)というイベントが存在する．少し前に試した時はモダンなブラウザでは動いた．
[DOMに要素が挿入される度にイベントを起こすDOMNodeInsertedの扱い方 - 三等兵](http://d.hatena.ne.jp/sandai/20110224/p1)
にあるように，処理をブロックしないように非同期処理を行うべきだろう．
現在，DOMNodeInsertedをはじめとするMutation eventsはパフォーマンスと安定性の問題によってdeprecatedとなってしまっているので，今後どうなるかはわからない．

### MutationObserver
DOM4ではMutation eventsに代わって[MutationObserver](http://www.w3.org/TR/dom/#mutation-observers)が導入された．
Mutation eventsで指摘されていたパフォーマンスや安定性の問題に対応するため，インターフェースはやや複雑になっている．

## CSSアニメーションを利用したワークアラウンド

基本的なアイディアは，CSSを使って追加を検出したい要素にkeyframeアニメーションを登録しておき，そのanimationstartイベントを監視するというもの．自分のユースケースではChromeでのみ動いてくれれば良いので，以下にWebKit向けの例を示す．

``` fake_animation.css
@-webkit-keyframes elementInserted {  
  0% {opacity: 0;}
  100% {opacity: 1;}
}

.target-element {
  -webkit-animation: elementInserted 0.001s 1;
}
```

``` detect_element_inserted.js
document.addEventListener('webkitAnimationStart', function(event){
  if (event.animationName == 'elementInserted') {
    // do something
  }
}, true);
```



出典: [Back Alley Coder &mdash;   I Want a DAMNodeInserted Event!](http://www.backalleycoder.com/2012/04/25/i-want-a-damnodeinserted/)


## おまけ: AutoPagerizeによるページ読み込みを検出する
今も動くかわからないのだけど，AutoPagerizeは要素を読み込んだ時に _AutoPagerize_DOMNodeInserted_ イベントを投げてくれたらしい．以下に使い方の例がある．面白いと思ったのでついでに紹介しておく．
[AutoPagerize_DOMNodeInserted 使用時のテンプレート - twwp](http://d.hatena.ne.jp/taizooo/20101105/1288920138)
windowsでrails

山形のohisamaです。
gemでlessとかが、入らない件
##環境
>ruby 1.9.3
rails 3.2.13
windows xp

##手順
>gemとdllをゲット
https://github.com/stereobooster/therubyracer
cd myapp
gem install therubyracer-0.11.0beta1-x86-mingw32.gem
Gemfile の編集

```sh:Gemfile
gem 'therubyracer', '0.11.0beta1'
```

>bundle install
rake db:create
rails s
ESLPodcast 12 - Dining at a Restaurant I 

* treat onesself: 自分にご褒美
* party: 〖集合的に; ｟英｠では単複両扱い〗 一行 , 一団 , 団体 , 集団
* i'll show you to your table.: どうぞ、こちらです
* for a lover of : someone who is fun of 
* get you started with : 
* big drinkers: 大酒飲み
* spot something: 何かを見つける
* dishes-crab
* be a must: 絶対必要
PHPUnitをインストール


環境はMAMP 2.1.2のphp 5.4.10です。
.bash_profileに次の1行を加えて、パスを通しておきます。

```
export PATH="/Applications/MAMP/bin/php/php5.4.10/bin:$PATH"
```

まずPEARのチャンネル(パッケージの参照元URL?)をアップデート。

```
$ pear update-channels
```

次にPEAR自身をアップグレード。

```
$ pear upgrade -a PEAR
```

続けてインストール済みのパッケージをアップグレード。

```
$ pear upgrade-all
```

そしてPHPUnitのインストール。
auto_discoverは新しいチャンネルを自動的に探すようにする設定らしい。

```
$ pear config-set auto_discover 1
$ pear install pear.phpunit.de/PHPUnit
```

エラーが出なければ、これでインストールは完了です。

とりあえず動かしてみたかったので、次のような適当なファイルを用意。

```test.php
<?php

class Person_Test extends PHPUnit_Framework_TestCase
{
        public function test_function()
        {
                $this->assertTrue(TRUE);
        }
}
```

phpunitを実行してみます。

```
$ phpunit test.php
PHPUnit 3.7.18 by Sebastian Bergmann.

.

Time: 0 seconds, Memory: 2.50Mb

OK (1 test, 1 assertion)
```

おっけー。
Rails gemのkaminariとBootstrapを共存させる方法


##kaminariのインストール
Gemfileに以下を記述

```Gemfile
gem 'kaminari'
```
gemのインストール

>$ bundle install --path vendor/bundle

##Bootstrapに対応させるためのfileをインストール

>$ rails g kaminari:views bootstrap
   downloading app/views/kaminari/_first_page.html.erb from kaminari_themes...
   create  app/views/kaminari/_first_page.html.erb
      downloading app/views/kaminari/_gap.html.erb from kaminari_themes...
   create  app/views/kaminari/_gap.html.erb
      downloading app/views/kaminari/_last_page.html.erb from kaminari_themes...
   create  app/views/kaminari/_last_page.html.erb
      downloading app/views/kaminari/_next_page.html.erb from kaminari_themes...
   create  app/views/kaminari/_next_page.html.erb
      downloading app/views/kaminari/_page.html.erb from kaminari_themes...
   create  app/views/kaminari/_page.html.erb
      downloading app/views/kaminari/_paginator.html.erb from kaminari_themes...
   create  app/views/kaminari/_paginator.html.erb
      downloading app/views/kaminari/_prev_page.html.erb from kaminari_themes...
   create  app/views/kaminari/_prev_page.html.erb

たくさんファイルが出来ました。
後は、同じようにcontrollerとviewを弄るだけです。

##model

```article_controller.rb
def index
#1ページ毎に5件ずつ表示
  @articles = Article.page(params[:page]).per(5)
end
```

##view

```index_html.erb
<html>
...
<% @articles.each do |article| %>
	<%= article.title %>	
<% end %>
<%= paginate @articles %>
...
</html>
```

というような感じでページングが出来ますので後はご自由に調整してください。
CからImageMagickを利用する

# CからImageMagickを利用する

[MagickWand C API](http://www.imagemagick.org/script/magick-wand.php) を参考に、CからImageMagickを利用してみる。

## 事前準備

HomebrewでImageMagickをインストールしておく。

    brew install imagemagick

## サンプルコード

サンプルとして http://www.imagemagick.org/source/wand.c を利用させてもらう。

中身は指定した画像をサムネイル用の小さな画像へ変換する簡単なプログラムです。

```
#include <stdio.h>
#include <stdlib.h>
#include <wand/MagickWand.h>

int main(int argc,char **argv)
{
#define ThrowWandException(wand) \
{ \
    char \
        *description; \
 \
    ExceptionType \
        severity; \
 \
    description=MagickGetException(wand,&severity); \
    (void) fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description); \
    description=(char *) MagickRelinquishMemory(description); \
    exit(-1); \
}

    MagickBooleanType
        status;

    MagickWand
        *magick_wand;

    if (argc != 3)
        {
            (void) fprintf(stdout,"Usage: %s image thumbnail\n",argv[0]);
            exit(0);
        }
    /*
        Read an image.
    */
    MagickWandGenesis();
    magick_wand=NewMagickWand();    
    status=MagickReadImage(magick_wand,argv[1]);
    if (status == MagickFalse)
        ThrowWandException(magick_wand);
    /*
        Turn the images into a thumbnail sequence.
    */
    MagickResetIterator(magick_wand);
    while (MagickNextImage(magick_wand) != MagickFalse)
        MagickResizeImage(magick_wand,106,80,LanczosFilter,1.0);
    /*
        Write the image then destroy it.
    */
    status=MagickWriteImages(magick_wand,argv[2],MagickTrue);
    if (status == MagickFalse)
        ThrowWandException(magick_wand);
    magick_wand=DestroyMagickWand(magick_wand);
    MagickWandTerminus();
    return(0);
}
```

## コンパイル

wand.c をコンパイル。

    cc -o wand `pkg-config --cflags --libs MagickWand` wand.c

pkg-configを使わない場合はこんな感じになる。

    cc -o wand -I/usr/local/include/ImageMagick -L /usr/local/lib -lMagickWand-Q16 wand.c

## 動かしてみる

wand を実行してみる。

    ./wand sample.jpg thumbnail.jpg

これで sample.jpg のサムネイル用画像が thumbnail.jpg として生成される。

## グレイスケール化してみる

オリジナルの wand.c は渡された画像をサムネイル化している。これをグレイスケール化に変更してみる。wand.c を以下のように変更する。

```
diff --git a/wand.c b/wand.c
index 94f732d..0b3f5eb 100644
--- a/wand.c
+++ b/wand.c
@@ -42,7 +42,7 @@ int main(int argc,char **argv)
     */
     MagickResetIterator(magick_wand);
     while (MagickNextImage(magick_wand) != MagickFalse)
-        MagickResizeImage(magick_wand,106,80,LanczosFilter,1.0);
+        MagickTransformImageColorspace(magick_wand, GRAYColorspace);
     /*
         Write the image then destroy it.
     */
```

ImageMagickにどんなAPIがあるかは

http://www.imagemagick.org/api/magick-image.php

を見ると良さそう。

## 参考

- MagickWand C API
  - http://www.imagemagick.org/script/magick-wand.php
- MagickWand Example in C
  - http://members.shaw.ca/el.supremo/MagickWand/
- ImageMagick で魔法をかける
  - http://www.ibm.com/developerworks/jp/opensource/library/os-imagemagick/
Express3でmiddlewareを利用する

middlewareを使おうと思ったらはまってしまっていた・・・

普通にexpressコマンドで生成したapp.jsの「app.configure(function(){...」のなかで実行すればいいと思っていたのに、実行されないって事件が発生していました・・・

いろいろ試してみたところ、結局のところ「app.use(app.router);」よりも前にmiddleware設定しろって話でしたw
こんな感じに書いておけばmiddleware動きますよー！

```node.js:app.js
app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser('your secret here'));
  app.use(express.session());

  // 実行したいmiddleware
  app.use(function(req,res,next){
    console.log('%s:%s', req.method, req.url);
    next();
  });
  
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
}
```
Macでmonoをrepoからビルドする

homebrewな環境だとちょっとワークアラウンドが必要だったりしたのでメモを残しておく。

Mono v3.0.8 9dc3601 (Sun Mar 24 15:03:22 2013 +0100) 現在です。

```sh
# clone the repo
git clone --recursive git://github.com/mono/mono.git
cd mono

# install dependencies

brew install gettext # and more. see README
brew link --force gettext # for msgfmt(1)

# setup env

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig:/opt/X11/lib/pkgconfig

# autogen & configure
./autogen --prefix $HOME/mono
make
make install
```

version infoはこんな感じ。

```
$ ~/mono/bin/mono --version
Mono JIT compiler version 3.0.8 (master/9dc3601 日  3 24 23:51:26 JST 2013)
Copyright (C) 2002-2012 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
	TLS:           normal
	SIGSEGV:       altstack
	Notification:  kqueue
	Architecture:  amd64
	Disabled:      none
	Misc:          softdebug
	LLVM:          supported, not enabled.
	GC:            Included Boehm (with typed GC)
```
Sublime Text でマルチカーソルに連番の数字を入力するプラグイン

Sublime Text でマルチカーソルに連番の数字を入力するプラグインをつくりました

プラグインの入力欄に「1」を入力すると上のカーソルから順に1,2,3,4…と入力し、
「3 by 2」と入力すると3,5,7,9…と入力されます。

```python:multi_number_input.py
import sublime_plugin

class MultiNumberInputCommand(sublime_plugin.TextCommand):
    def on_done(self, args):
        args_array = args.split(" by ")
        num = args_array[0]
        by = int(args_array[1]) if 1 < len(args_array) else 1
        edit = self.view.begin_edit()
        for region in self.view.sel():
            self.view.replace(edit, region, str(num))
            num = int(num) + by
        self.view.end_edit(edit)
    def run(self, edit):
        # Show input panel for surround word, then handling input
        self.view.window().show_input_panel(
             'Initial number ex) 1 by 3: ', '1', self.on_done, None, None)
```


Excelでやると早いのですが、より早く入力するために作りました。
PackageControlに登録していないので、必要な人は手動でもっていってください。

https://github.com/ryooo321/sublime-multi-number-input
vimでファイルの拡張子に応じてタブ幅を変更する


~/.vim/filetype.vim へ以下の様に記述する。

```
if exists("did_load_filetypes")
  finish
endif
augroup filetypedetect
  " Cのタブ幅は4で
  au BufNewFile,BufRead *.c    setlocal tabstop=4 shiftwidth=4
  au BufNewFile,BufRead *.cpp  setlocal tabstop=4 shiftwidth=4
  au BufNewFile,BufRead *.h    setlocal tabstop=4 shiftwidth=4
augroup END
```

if exists("did_load_filetypes") のあたりの理解があやふやだけど、今日はここまで。

## 参考

- Vim documentation - filetype
  - http://vim-jp.org/vimdoc-ja/filetype.html
el-getをWindows環境で利用するにあたってハマった点

最近巷では、el-get というパケージ管理ツールが流行っているようなので流行に乗らなければ！と思い導入してみました。
Windowsでel-getを動かせるようになるのに結構ハマったので、自分と同じ境遇にいる人は少しは参考になるかも。
てかWindowsでemacsを利用するのは地雷原が多すぎる。マインスイーパやってるみたいでした。

導入環境は、Windowsで以下のとおり。

- Windows 7 Professional SP1 64bit
- GNU Emacs 24.2.1 (i386-mingw-nt6.1.7601) of 2012-12-08 on GNUPACK
- gnupack 11.00 devel版を利用

基本的には[el-get](https://github.com/dimitri/el-get)に記載がある通り以下を評価してあげればインストールまで勝手に進むのですが

```lisp
;; So the idea is that you copy/paste this code into your *scratch* buffer,
;; hit C-j, and you have a working developper edition of el-get.
(url-retrieve
 "https://raw.github.com/dimitri/el-get/master/el-get-install.el"
 (lambda (s)
   (let (el-get-master-branch)
     (goto-char (point-max))
     (eval-print-last-sexp))))
```

Windowsでは以下の問題が発生してそのままではインストールができませんでした。

### Windowsで発生した問題
1. install-infoでコケる
1. el-getのbyte-compileが始まらない
1. error setting certificate verify locations が発生してgit cloneできない
1. M-x emacswiki-refresh すると何時まで経っても終わらない

で、ここで回避方法を記載したいのですが、これ以上書くのが面倒なので
オリジナルの記事をご参照ください。怠け者ですいません。
http://d.hatena.ne.jp/zqwell-ss/20130324/1364129779
C++のスライシング

C++忘備録1( http://qiita.com/items/702b8d3cd2491b0391e9 )を見て、スライシングの例を入れておいたほうが良いと思い。

```c++:slicing.cpp
#include <iostream>

using namespace std;

class Base {
public:
    virtual void print() const {   cout << "Base" << endl;    }
};

class Derived : public Base {
public:
    void print() const {  cout << "Derived" << endl;  }
};

void print_val(Base v)
{
   v.print();
}

void print_ref(Base & r)
{
    r.print();
}

int main()
{
    Base base;
    Derived derived;

    print_val(base); //=> Base
    print_val(derived); //=> Base : SLICING!
    print_ref(base); //=> Base
    print_ref(derived); //=> Derived

    return 0;
}
```

基底クラスの値を要求する関数に派生クラスの値を渡すと、スライシングという現象が起こる。
参照やコンスト参照なら問題にならない。スライシングが発生するのは値を要求する場合のみ。
スライシングはだいたいトラブルの原因にしかならないが、文法としてはなぜか OK なので、人間が注意する他ないと思う。
目安としては
「派生クラスを持つ型を値として要求しているとたぶん何かの間違い」
ということだと思う。

しかし。
トラックバックが欲しい。
ターミナルからFinderを開く


MacのターミナルからFinderにフォルダを表示させるには、表示させたいフォルダーをopenコマンドに渡します。

例：ホームディレクトリをFinderで開く

```
$ open ~
```

例：アプリケーションフォルダをFinderで開く

```
$ open /Applications
```

一番の使い道は、カレントディレクトリをFinderで開く、ではないでしょうか。

```
$ open .
```


---
なお、Windowsのコマンドプロンプトでも、同じようにエクスプローラーを開く事が出来ます。

Cドライブを開く

```
C:¥>start C:¥
```
両方向の棒グラフを簡単に描く

# 背景
複数の異なる条件で，upregulateされた遺伝子数とdownregulateされた遺伝子数を１つのグラフに棒グラフとして描きたいと考えました．
最初はピラミッドプロットを使おうと考えましたが，barplotでできたのでメモします．

# データの用意

```{r}
df <- data.frame(up=c(1,3,5), down=c(2,5,7))
d1 <- matrix(1:6 ,3, 2)
d2 <- matrix(6:1 ,3, 2)
```

```r:result
> df
  up down
1  1    2
2  3    5
3  5    7
> d1
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
> d2
     [,1] [,2]
[1,]    6    3
[2,]    5    2
[3,]    4    1
```


# プロット
`barplot`の`add=T`というオプションが肝です．
あとは`ylim`で調整しています．

```{r}
barplot( df$up, ylim=c( -1*max(df$down), max(df$up) ) ,
         main="test", ylab="down                 up")
barplot( -1 * df$down, add=T )
```
![barplot_1.png](http://cdn-ak.f.st-hatena.com/images/fotolife/y/yuifu/20130324/20130324194658.png)

また`beside=T`を使うこともできます．

```{r}
barplot( d1, beside=T, main="test", ylab="down             up",
         names.arg=c("A","B"), ylim=c( -1 * max(d2), max(d1)) )
barplot( -1 * d2, beside=T, add=T )
```

![barplot_2.png](http://cdn-ak.f.st-hatena.com/images/fotolife/y/yuifu/20130324/20130324195912.png)
初期化メソッド「initWith~」の使い分け


StoryBoardを使わず、コードで書かれていたプロジェクトを移行するときには注意が必要です。

|initWithCorder:|initWithNibName:bundle:|initWithStyle:reuseIdentifier:|
|:----------------------:|:----------------------------------:|:--------------------------------------------:|
| StoryBoardから生成するとき|コードからUIViewControllerを生成するとき|コードからUITableViewCellなどのUIViewを生成するとき|



**「initWithCorder:」**… StoryBoardからインスタンスを生成するときに呼ばれる初期化メソッド

```objective-c:aboutInitialize.m
- (id)initWithCoder:(NSCoder*)decoder
{
    self = [super initWithCoder:decoder];
    if (!self) {
        return nil;
    }
    // write something.
    
    return self;
}
```


**「initWithNibName:bundle:」**… UIViewControllerをコードから生成するときに呼ばれる初期化メソッド

```objective-c:aboutInitialize.m
- (id)initWithNibName:(NSString*)nibName bundle:(NSBundle*)bundle
{
    self = [super initWithNibName:nibName bundle:nil];
    if (!self) {
        return nil;
    }
    // write something.
    
    return self;
}
```

**「initWithStyle:reuseIdentifier:」**… UITableViewCellなど、UIViewのクラスをコードから生成するときに呼ばれる初期化メソッド

```objective-c:aboutInitialize.m
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // write something.
    }
    return self;
}
```


## ※ 間違っているところがあれば教えてください！
Picasa用に写真を加工

しょーもない記事ですがhi

最近のiPhotoはPicasaへのアップロード機能あるらしいけど、古いのでImageMagickでやってみたときのメモ。growlnotifyは適宜変更。

Google+に登録していれば、Piacasaは一辺が2048px以下の写真はアップロードし放題なのでImageMagickで2048px以下にいじる。

出典 : http://support.google.com/picasa/answer/1224181?hl=ja

```shell
#!/bin/sh
mogrify -resize 2048 *; growlnotify -t "mogrify" -m "Finished!"
```
setコマンドでエスケープすべき文字

この記事はVim Advent Calendar 2012 : ATND 114日目の記事になります。
setコマンドでエスケープすべき文字がどれなのかわからなかったので調べてみました。

## エスケープすべき文字

1. スペース

    ```:vim
    set commentstring=\ %s
    set commentstring?
    " set commentstring= %s
    ```

2. ダブルクォート

    ```:vim
    set commentstring=\"%s
    set commentstring?
    " set commentstring="%s
    ```

3. バーティカルバー

    ```:vim
    set commentstring=\|%s
    set commentstring?
    " set commentstring=|%s
    ```

4. 改行

    エスケープしなければエラーになっちゃいますけど、エスケープしても結果は&lt;00&gt;になってしまいます。

    ```:vim
    set commentstring=\<0a>%s
    set commentstring?
    " set commentstring=<00>%s
    ```

5. 水平タブ

    ```:vim
    set commentstring=\<09>%s
    set commentstring?
    " set commentstring=<09>%s
    ```

基本的、setコマンドでエスケープすべき文字はこの５つだけでした。

## 同期(0x16)が面白い！

* 同期

同期(0x16)がすごく例外的で、同期(0x16)が1文字だけだとなかったことになっちゃうですね。
同期(0x16)は`\`ではエスケープできなくて、同期は同期でエスケープするんですね
。
上手く使えばなにか役立ちそうですね。(棒)

```:vim
set commentstring=<16>%s
set commentstring?
" set commentstring=%s

set commentstring=\<16>%s
set commentstring?
" set commentstring=%s

set commentstring=%<16>s
set commentstring?
" set commentstring=%s

set commentstring=%<16><16>s
set commentstring?
" set commentstring=%<16>s
```

## 終わり

以上、「setコマンドでエスケープすべき文字」でした。


ここ最近、折紙でVimGirlを折っていてとりあえず第1作が出来ました v( ・ω・)m。

> https://twitter.com/rbtnn/status/316206645917126657
iPhone の VoiceOver を使ってみよう!


現在の Web 製作者でアクセシビリティにまったく無頓着という人はほとんどいないだろうけど、実際にスクリーンリーダーで Web を見たことがある人は少ないかもしれない。

アクセシビリティを向上させるノウハウや、自動テストの方法はよく知られているけど、やっぱり実際に使い勝手を試してみるのは大事だと思う。

かつては専用のソフトウェアを購入する必要があり、敷居が高かったが、最近の OSX や iOS には VoiceOver というスクリーンリーダー (およびジェスチャによるコントロール) が標準で付属している。

ここでは iPhone の VoiceOver の使い方を見てみよう。

# VoiceOver を有効にする

1.「設定」を開く
2. 一般 -> アクセシビリティ -> VoiceOver -> VoiceOver を「オン」にする

VoiceOver を有効にすると、スワイプ、タップなどの操作が全面的に置き換えられる。次項以降を参照。

# 基本操作

VoiceOver ではほとんどの操作を「項目の選択」->「項目の実行」という順序で行う。

- `右スワイプ` `左スワイプ` で項目間を移動する。移動すると項目名が読み上げられる (画面では黒枠で囲まれる)。
- `タップ` でタップしたところの項目を選択。`タップしながら指を動かす` と指のあるところの項目を選択。
- `ダブルタップ` で項目の決定。非 VoiceOver でのタップとほぼ同様。

# ローター

- `上スワイプ` `下スワイプ` は状況に応じて挙動が変化する。
- その挙動は `二本指を右回転` `二本指を左回転` で切り替えられる (これをローターと呼ぶ)

`二本指を(右|左)回転` は地図を回転させるときのジェスチャ。親指と人差し指を使って、それぞれを左右方向に逆行させるとやりやすい。

# 自動で項目移動

- `二本指で上スワイプ` で最初の項目に戻り、自動で項目を移動する。迷子になったときに最初の項目に戻りたいときによく使う。
- `二本指で下スワイプ` で現在の項目から自動で移動。Safari や iBooks などで文章を読み上げたいときによく使う。
- `二本指でタップ` で、自動項目移動の中止・再開。

Safari で検索フィールドに移動したいときに `二本指で上スワイプ` -> `左スワイプ` とか。

# 目次 / 索引

連絡先、ミュージックなど、右側に頭文字の書かれた目次 / 索引が表示されている場合、これを操作できる。

- 右の目次 / 索引をタップして `上スワイプ` `下スワイプ` で移動

# 文字入力
  
文字入力の方法は「標準」と「タッチ」がある。
「ローター」で「入力モード」を選択し `上スワイプ` `下スワイプ` で切り替える。タッチのほうが素早く入力できる。

- 「標準」入力モードではキーを選んで `ダブルタップ` で文字入力。
- 「タッチ」入力モードではキーをタップで文字入力。通常は `タップしながら指を動かし` て離すようにすると思う。
- 漢字変換は「次候補」がまともに使えないので、項目移動で候補を選択して `ダブルタップ`。

# そのほか

- `三本指でダブルタップ` で読み上げオン / オフ。
- `三本指でトリプルタップ` でスクリーンを非表示にする。省電力で見た目もかっこいい!
- ロックの解除は「ロックの解除」まで項目移動して `ダブルタップ`

ほかにも多数のジェスチャがあるが、ここでは省略する。とりあえず上記のものさえ覚えていれば操作できると思う。

より詳しい情報は iPhone / iPad のユーザーガイドを参照してください。

http://support.apple.com/ja_JP/manuals/

# 数時間使ってみた所感

Web ページは HTML / CSS をちゃんと使っていれば、かなり読める。
ただ、見出しの使い方や alt 属性が不適切だとずいぶん読みにくくなる。

アプリも結構使えるが、無駄に項目が多かったり、文字での検索が必須のものはちょっと使いづらい。
VoiceOver に最適化した UI を持ったアプリを作れば、需要はあるんじゃないかと思う。

参考文献:
Katie Cunningham 著「アクセシビリティハンドブック」
http://www.oreilly.co.jp/books/9784873115993/
concat iPhone movie with ffmpeg


iPhoneで撮影したMOV動画を結合させたい場合に使うコマンド。
とりあえず、動かして確認できたという程度なので仕組みがいまいちわかってないです。何かおかしなところがあれば教えて貰いたいです。

## ffmpeg
ffmpegを使っておこなった

* ffmpeg 0.6.5
* CentOS 6.3

## 手順

*  結合しやすい、mpg形式に変換

```
$ ffmpeg -i input1.MOV input1.mpg
$ ffmpeg -i input2.MOV input2.mpg
```

* 動画を結合

```
$ ffmpeg -i "concat:input1.mpg|input2.mpg" output.mpg
```

* iPhoneで使われるMOV形式に変換

```
$ ffmpeg -i output.mpg output.MOV
```

iPhoneに送信したらoutput.MOVは動画も音も、きちんとつながっていた。繋ぎ目もとても綺麗。ちょっと画質は落ちていたように見えたけど、そんなに気にならなかった。もう少し細かく勉強したいなと思います。
homebrewでMySQL環境を構築する

```
$ brew install mysql
```
MySQLは複数の版を同時に検証するので、版ごとにdatadirをわけて作成しておく。

```
$ mkdir -p /usr/local/var/mysql-5.6.10
$ mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql-5.6.10 --tmpdir=/tmp
$ cd /usr/local/opt/mysql
$ edit my.cnf # datadirを設定する
$ mysqld_safe &
$ mysqladmin -u root password ****
```
Memcached(1.2)の-bオプションの意味が途中から変更になっていた件

ソースコードを読んでいて気づきました。

# ver1.2.0～ver1.2.5まで

 -bは"Run a managed instanced" だった。

https://github.com/memcached/memcached/blob/1.2.0/memcached.c#L2039

# ver1.2.6 

-bオプションが一度削除される。
https://github.com/memcached/memcached/blob/1.2.6/memcached.c#L2931
https://github.com/memcached/memcached/commit/04319dddabaa06d15407ab6f793b160d3b1c5edb

# ver1.2.7から

-bがbacklogの意味になる。
https://github.com/memcached/memcached/blob/1.2.7/memcached.c#L2959
SublimeText3 のパッケージインストール

# なにはともあれ Package Control のインストール
```
cd ~/Library/Application\ Support/Sublime\ Text\ 3/Packages/
git clone https://github.com/wbond/sublime_package_control.git "Package Control"
git checkout -b python3 origin/python3
```
ST3 を再起動。問題なく動いた

# ほかのパッケージ
## SourceTree.app Menu
```
reloading plugin SourceTree.app Menu.SourcetreeCommand
Traceback (most recent call last):
  File "/Applications/Sublime Text.app/Contents/MacOS/sublime_plugin.py", line 72, in reload_plugin
    m = importlib.import_module(modulename)
  File "X/importlib/__init__.py", line 88, in import_module
  File "<frozen importlib._bootstrap>", line 1577, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1558, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1505, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 313, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1577, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1558, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1505, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 313, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1577, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1558, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1522, in _find_and_load_unlocked
ImportError: No module named 'SourceTree'
```
ここで止まる。モジュール名がだめっぽい。
SourceTree パッケージを使う事にした。こっちは動く。

## SublimeClang
Package Control 経由だとダメ。github の master brach の HEAD もダメ。
JavaScript上位言語の比較表


JavaScriptの上位言語ですが、いろいろありすぎてよくわからない状況になっているので表にまとめてみました。

|   |[Haxe](http://haxe.org)|[CoffeeScript](http://http://coffeescript.org/)|[Dart](http://http://www.dartlang.org/)|[Kotlin](http://kotlin.jetbrains.org/)|[JSX](http://jsx.github.com/)|[TypeScript](http://www.typescriptlang.org/)|
|:-:|:--:|:----------:|:--:|:----:|:-:|:--------:|
|登場時期|2005|2009|2011|2011|2012|2012|
|主要開発元|HAXE FOUNDATION|Jeremy Ashkenas|Google|JetBrain|DeNA|Microsoft|
|静的型付け|○|-|○|○|○|○|
|型推論|○|-|-|○|△|△|
|コード最適化|○|-|○|-|○|-|
|JS互換|-|-|-|-|-|○|
|クラス|○|○|○|○|○|○|
|mixin|○|-|○|○|○|-|
|名前空間|○|-|-|○|○|○|
|構造的部分型|○|-|-|-|-|○|
|ジェネリクス|○|-|○|○|○|-|
|関数のオプション引数|○|○|○|○|○|○|
|不変変数|-|-|○|○|△|-|
|列挙型|○|-|-|○|-|○|
|パターンマッチ|○|○|-|○|-|-|
|全て式|○|○|-|-|-|-|
|ラムダ式|△|○|○|○|○|○|
|リスト内包表記|-|○|-|-|-|-|
|コンパイル出力|JS/いろいろ|JS|JS/ネイティブ|JS/JVM|JS|JS
|その他の特徴||インデント|C風の構文|Scalaの競合的な||ECMAScript6ベース|

この表だけ見るとHaxe最強なんじゃないかという気がしていますが実際どうなんでしょうかね。

間違っている所とか、追加の項目とかコメントいただけると嬉しいです。
Emacs24.3の導入とundo-tree.elの紹介

# 概要
Emacs24.3がリリースされたのでインストールしてみた。使ってみたらredo+.elが動かないっぽいのでundo-tree.elに乗り換えた。
undo-tree.elについて知りたい人はインストール部分は飛ばしたらいいと思う。

# インストール
先日Emacs24.3がリリースされました
http://www.gnu.org/software/emacs/

で、以前↓の記事を読んで、同じ悩みを持っていたのでコンパイルオプションぱくって、ちょっといじってインストールした。
[emacs のコンパイルオプションを設定したら幸せが訪れた - willnet.in](http://willnet.in/72)

```
wget http://core.ring.gr.jp/pub/GNU/emacs/emacs-24.3.tar.gz
tar xzvf emacs-24.3.tar.gz
cd emacs-24.3
./configure --without-toolkit-scroll-bars --without-xaw3d --without-compress-info --without-sound --without-pop --without-xpm --without-tiff --without-rsvg --without-gconf --without-gsettings --without-selinux --without-gpm --without-makeinfo --without-all --with-x-toolkit=no
make
sudo make install
```

ただ、mark setしたあと`C-g`でキャンセル出来ないことがある、という悩みは解決**しなかった**(´・ω・｀)

# redo+.elからundo-tree.elへ
で、起動してみるとエラーが出る。

```
Warning (initialization): An error occurred while loading `/home/****/.emacs.d/init.el':

error: Attempt to modify read-only object

To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file.  Start Emacs with
the `--debug-init' option to view a complete error backtrace.
```

言われたとおりに`--debug-init`して起動してみると、どうやらredo+.elがおかしい。で、そこをコメントアウトしたら動いた。そこで、undo-tree.elという拡張を導入することにした。melpaに登録してあるので`M-x list-packages`してundo-treeのところで`i`押して`x`でインストール。（packageの使い方はぐぐればいっぱい出てくると思う。最初にmelpaをリポジトリに登録する必要がある。）

で次の設定をinit.elに書いた。

```el:init.el
(require 'undo-tree)
(global-undo-tree-mode t)
(global-set-key (kbd "M-/") 'undo-tree-redo)
```

これで`M-/`でredo出来るようになった。

# せっかくなのでundo-treeをもうちょっと使いこなしてみる
undo-treeの持つ機能はredoが出来るようになるだけではない。一言で言うとテンポラリなバージョン管理システムだ。
具体的に例を示すと、ファイルを編集・保存をしたあとに`C-x u`してみると以下の様な画面が現れると思う

```
   x
   |
  / \
 o   o
 |
 |
 x
```

これが今編集してるファイルの変更履歴だ。今`x`の場所にいる。で、`d`を押してみるとその時の変更のdiffが以下のように見れる。

```diff
@@ -297,8 +297,8 @@
 (setq undo-limit 600000)
(setq undo-strong-limit 900000)
-;; (require 'undo-tree)
-;; (global-set-key (kbd "M-/") 'undo-tree-redo)
+(require 'undo-tree)
+(global-set-key (kbd "M-/") 'undo-tree-redo)
(defun toggle-truncate-lines ()
   "折り返し表示をトグル"
```

もう一度`d`を押すとdiff表示をoffに出来る。
で、tree上で`C-p`するとtreeの上に移動する。同時にファイルがその時の状態に戻る。

```
   o
   |
  / \
 x   o
 |
 |
 s
```

上のtreeで`s`はsaveされているところ。`x`が自分がいるところ。もう一度`C-p`で更に上に遡る。

```
   x
   |
  / \
 o   o
 |
 |
 s
```

次に右下に行きたい時は`C-f`でtreeのルートが切り替わるので、次に`C-n`で右下の`o`に行ける。

```
   o
   |
  / \
 o   x
 |
 |
 s
```

この状態から編集を再開したければ、`C-g`を押す。するとtreeのバッファが消えて、この状態からファイルを編集することが出来る。
カメラからの画像にリアルタイムでエフェクトをかける

カメラ -> OpenGL テクスチャ -> シェーダー -> 表示
という流れでリアルタイムでエフェクトをかける事が可能です。
独自のフィルターを使ってアプリをつくるのはとても面白いとおもいます。

波エフェクト
![Wave](http://farm9.staticflickr.com/8230/8582204523_fcf090d35a_b.jpg "Wave")

エッジ検出
![Edge](http://farm9.staticflickr.com/8242/8582203979_8c87de6076_b.jpg "Edge")

フルソースコード一式です。
一部コメントアウトで、シェーダーを切り替えると、
エフェクトが切り替わります。
外部ライブラリ等はつかっておらず、PureなiOS SDKのみです。
https://github.com/Ushio/RealTimeImageProcessing.git

スライドはこちら
http://www.slideshare.net/ushiostarfish/real-timeimageprocessing
rbenv rehashを忘れた時のエラー

実はエラーが出た時の対処した情報って少ないと思うのでメモ書きしときます。

## 事象
bundle をインストールした後、rbenv rehashを忘れて実行したら、エラーがでました。

```bash:コマンド
gem install bundler
cd (Gemfileのあるところ)
bundle
```

```text:以下エラーメッセージ
-bash: /usr/local/bin/bundle: /usr/local/bin/ruby: bad interpreter: そのようなファイルやディレクトリはありません
```

## 原因
コマンドラインから実行できるるようなもの(bundle、gem、irb）は${RBENV_ROOT}/shimsに該当のシェルスクリプトが無いと動かないらしい。

## 対処
要するに、rbenv rehash で全て解決。

```bash:実行コマンド
rbenv rehash
```

## 結果

### rehash前

```text:rehash前のリスト
-rwxr-xr-x. 8 ruby root 393  1月 11 12:59 2013 erb
-rwxr-xr-x. 8 ruby root 393  1月 11 12:59 2013 gem
-rwxr-xr-x. 8 ruby root 393  1月 11 12:59 2013 irb
-rwxr-xr-x. 8 ruby root 393  1月 11 12:59 2013 rake
-rwxr-xr-x. 8 ruby root 393  1月 11 12:59 2013 rdoc
-rwxr-xr-x. 8 ruby root 393  1月 11 12:59 2013 ri
-rwxr-xr-x. 8 ruby root 393  1月 11 12:59 2013 ruby
-rwxr-xr-x. 8 ruby root 393  1月 11 12:59 2013 testrb
```
### rehash後

```text:rehash後のリスト
-rwxr-xr-x. 10 root root 393  1月 11 16:25 2013 bundle
-rwxr-xr-x. 10 root root 393  1月 11 16:25 2013 coderay
-rwxr-xr-x.  8 ruby root 393  1月 11 12:59 2013 erb
-rwxr-xr-x. 10 root root 393  1月 11 16:25 2013 erubis
-rwxr-xr-x.  8 ruby root 393  1月 11 12:59 2013 gem
-rwxr-xr-x.  8 ruby root 393  1月 11 12:59 2013 irb
-rwxr-xr-x. 10 root root 393  1月 11 16:25 2013 rackup
-rwxr-xr-x. 10 root root 393  1月 11 16:25 2013 rails
-rwxr-xr-x.  8 ruby root 393  1月 11 12:59 2013 rake
-rwxr-xr-x. 10 root root 393  1月 11 16:25 2013 rake2thor
-rwxr-xr-x.  8 ruby root 393  1月 11 12:59 2013 rdoc
-rwxr-xr-x.  8 ruby root 393  1月 11 12:59 2013 ri
-rwxr-xr-x.  8 ruby root 393  1月 11 12:59 2013 ruby
-rwxr-xr-x. 10 root root 393  1月 11 16:25 2013 sprockets
-rwxr-xr-x.  8 ruby root 393  1月 11 12:59 2013 testrb
-rwxr-xr-x. 10 root root 393  1月 11 16:25 2013 thor
-rwxr-xr-x. 10 root root 393  1月 11 16:25 2013 tilt
-rwxr-xr-x. 10 root root 393  1月 11 16:25 2013 tt
```
Vagrantの使い方

##Vagrantとは
Vagrantの使い方を忘れないようにメモしておこうと思います。
Vagrantとは、VirtualBoxやVMFusionなどの仮想化マシンの自動作成・管理ツールになります。
最近、バージョン1.1が公開されました。

##どんな事ができるのか
boxと呼ばれるひな形を使って、簡単に仮想マシンを構築する事が出来ます。
本来 VirtualBoxなどを使う際は、イメージファイルをダウンロードして設定そしてインストールなどの手間が生じます。
テストするために環境を作りすぐ破棄する場合には、とても面倒な作業になることでしょう。
そのようなテスト環境構築のためなどにVagrantを使用します。
<br>
#インストール方法
##vagrantインストール
`gem`を使ってインストールします。
<<追記>>
最近公開された1.1.x系統ではMac,Windowns,redhat系でもパッケージが存在します。
パッケージからインストールする事も出来ます。
しかし

* net-scpあたりの依存関係が未対応なところが多いこと
* veeweeなどを使う場合、vagrantの古いバージョンに依存していること

などが挙げられるので、今回もgemからインストールすることをお勧めします。


```ruby:vagrant-install
gem install vagrant --no-ri --no-rdoc
```

ちなみに1.1.x系統は以下のページにございます。

* [Vagrant 1.1](http://downloads.vagrantup.com/tags/v1.1.0)



<font color="red">重要!!</font>
以前gemを使ってvagrantをインストールされた方で、vagrant1.1X系統にアップグレードされる方は一回アンインストールしなければなりません。
詳しくは[ドキュメント](http://docs.vagrantup.com/v2/installation/upgrading-from-1-0.html)参考をお願いします。

```ruby:vagrant-uninstall
gem uninstall vagrant
```

バージョンによっては、対応されてないプラグインなども存在します。
どのバージョンをインストールするのかお気をつけ下さい。
<br>
#Vagrantの使い方
##Vagrantコマンド
| vagrantコマンド | 説明 |
|:---------------:|:---|
|vagrant init    | vagrant 初期化(Vagrantfileの作成)
|vagrant up      | vagrant 起動|
|vagrant ssh     | vagrant ログイン|
|vagrant halt    | vagrant 終了|
|vagrant reload  | vagrant リロード(Vagrantfile編集時にいちいちhalt,upしなくて良い|
ほかにもpackageなどのオプションが存在します。

##セットアップ
流れとしては以下のようになります。
1.boxファイルのインストール
2.Vagrantの初期化
3.vagrantの実行
4.vagrantの終了

1.boxファイルのインストール
あらかじめテンプレートとしてboxが用意されています。

* [Vagrant box](http://www.vagrantbox.es/)

`vagrant`コマンドに`box add`オプションを使用すると、boxファイルのインストールができます。
今回はCentOS-6.3-x86_64-minimal.boxを使います。

```bash:vagrant-setup
vagrant box add vagrant-test https://dl.dropbox.com/u/7225008/Vagrant/CentOS-6.3-x86_64-minimal.box
```
これで、`vagrant-test`というboxが作られました。
`vagrant box list`コマンドで確認してみます。

```bash:vagrantbox-check
vagrant box list
vagrant-test
```
<br>

2.Vagrantの初期化
`vagrant init`コマンドを最初に打たないといけません。
コマンドを打つと、Vagrantfileという設定ファイルが作られます。
設定ファイル＋chefなどと組み合わせることで自分独自の環境が構築できます。

```bash:Vagrantfile
vagrant init vagrant-test
#vagrant-testの部分はboxの名前になります
```
<br>
3.vagrantの実行
vagrantの実行=仮想マシンの実行になります。
`vagrant up`コマンドでvagrantを実行します。

```bash:vagrantup
vagrant up
```
`vagrant ssh`コマンドでログインできます。

```bash:vagrant-ssh
vagrant ssh
```

<br>
4.vagrant終了
`vagrant halt`コマンドで終了できます。

```bash:vagrant-shutdown
vagrant halt
```
この仮想マシンもう必要ないなという時は以下のコマンドで、破棄できます。

```bash:vagrant-destroy
vagrant destroy
```
**ベースなっているbox自体を破棄する訳ではありません。**
boxが保存される場所は、私の環境ですと以下の場所になります。

```zsh:vagrant-box
/Users/username/.vagrant.d/boxes
```
`vagrant destroy`コマンドを入力してもbox自体は破棄されておりません。

仮想マシンが保存されている場所が変更されています。

```bash:vagrant-destroy
/Users/username/VirtualBox VMs
```
`vagrant destroy`コマンドを入力するまえと入力したあとで、見比べて下さい。
仮想マシンが減っている事にお気づきになると思います。


よって、`vagrant up`コマンドを打つ事でまたテスト環境を作る事が可能です。
以上です。
Windows に Rails の開発環境を構築する (DB は MySQL)


Windows で Rails 動かす必要があったのでやってみた。
大変かと思ってたら意外とインストーラとか充実してて、それほど詰まるとこはなかった。

バージョンは下記の通り。環境変数 PATH の追加の仕方はググってください。

- Windows 8 Pro with Media Center 32bit
- Ruby 1.9.3p392
- MySQL 5.6.10
- Rails 3.2.13
- mysql2 0.3.11-x86-mingw32
- node.js 0.10.1

# Ruby

http://rubyinstaller.org/downloads/ から Ruby 1.9.3-p392 のインストーラをダウンロードして、インストール。インストールオプションはほぼデフォルトでいいけど PATH に追加するオプションだけチェックしとく (忘れたら C:\Ruby193\bin を PATH に追加する)。

# DevKit

C 拡張付きの gem をビルドするには DevKit が必要になる。

http://rubyinstaller.org/downloads/ から DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe をダウンロード、こちらは適当なディレクトリを作ってその中で起動、extract ボタンで展開する。その後、コマンドプロンプトでこのディレクトリに移動して下記コマンドを実行する。

```bash
ruby dk.rb init
ruby dk.rb install
```

参考: https://github.com/oneclick/rubyinstaller/wiki/Development-Kit

# MySQL

http://dev.mysql.com/downloads/installer/ から Windows 用のインストーラをダウンロードして、インストール。デフォルトでいろいろ入るようになってるけど、面倒なのでそのままで。root のパスワードを設定する必要がある。

インストール終了すると MySQL Workbench が起動する。起動画面の左のほうのリストボックスにある Local Instance MySQL56 というのをダブルクリックし、インストール時に設定した root のパスワードを入力して、エラーなく接続できることを確認しておくとよい。

# mysql2

Windows で gem install mysql2 するとコンパイル済みのバイナリを取得するが、このままでは使用できない。

gem install mysql2 で表示されるメッセージに従って、http://dev.mysql.com/get/Downloads/Connector-C/mysql-connector-c-noinstall-6.0.2-win32.zip/from/pick をダウンロードして展開。そのなかにある lib\libmysql.dll　を C:\Ruby193\bin にコピーしておく。

# Node.js

Rails のアプリケーション作って試してみたら ExecJS::RuntimeError が出た。

ExecJS はデフォルトで Windows Script Host を利用してくれるはずだが、うまくいかなかったので Node.js を入れる。

http://nodejs.org/ からインストーラをダウンロードしてインストール。

PATH に C:\Program Files\nodejs を追加。

# Rails

ここまできたら gem instal rails で Rails をインストール。動くとよいですね。
rails g controllerのとき、CSS、JavaScript、ヘルパーのファイルが勝手に生成されないようにする方法


## 環境

* Rails 3.2.13


## 手順

`config/application.rb` に下記を追記します。

```ruby
config.generators.helper = false
config.generators.stylesheets = false
config.generators.javascripts = false
```

以下のようにCSSとJavaScriptの設定をまとめて書くこともできます。

```ruby
config.generators.helper = false
config.generators.assets = false
```


## 参考

* http://stackoverflow.com/questions/9301255/how-to-disable-the-generator-of-assets-on-rails-3-2
Database.HDBC


SQLの実行。読めば自明な感じ。取り出した値をそれっぽい型にするには`fromSql`が使える。

```haskell:
module Main (main) where
import Control.Monad
import Database.HDBC
import Database.HDBC.Sqlite3

printRows :: [[SqlValue]] -> IO ()
printRows rows = forM_ rows $ \row -> do
  let row' = (fromSql :: SqlValue -> Integer) `fmap` row
  print row'

main :: IO ()
main = do
  con <- connectSqlite3 "test.db"
  
  _ <- run con "create table test (x int)" []
  forM_ [1 .. 10] $ \i -> do
    _ <- run con "insert into test values (?)" [SqlInt32 i]
    return ()
  
  st <- prepare con "select x from test"
  _ <- execute st []
  fetchAllRows st >>= printRows
  
  disconnect con
  return ()
```

結果。

```
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
```

`fetchAllRows`の実装には`unsafeInterleaveIO`が使われているので、以下のようにリストを舐める途中で`fetchRow`を使うと`[3]`が抜けてしまったりする。

```haskell:
  (row : row' : rows') <- fetchAllRows st
  printRows [row, row']
  _ <- fetchRow st
  printRows rows'
```

ドキュメントにもその辺触れられてて、例えば`finish`呼んじゃうと嫌なことになるよって辺りが書いてある。