OmniAICreator/Qiita-1.07M huggingface dataset:
NavigationController利用時にNavigationBarに「戻る」ボタンが出ない場合

ある画面から別の画面に遷移した時に戻る為のボタンが自動的に用意されるのがNavigationBarの良い所だが、ある時に戻るボタンが出ない場合があった。

それは親画面のタイトルに空文字列「@""」が指定されていた場合。タイトルを消し去りたい時にはnilを入れる事で回避できる。
GitHub for WindowsをProxy指定して使うには

# Proxy使わないといけないんだけど
環境変数HTTP_PROXY設定してもダメだった

# Stackoverflowに出てたやり方が参考になった
[Getting git to work with a proxy server](http://stackoverflow.com/questions/783811/getting-git-to-work-with-a-proxy-server)

# 自分がうまくいったやり方

Win8なGUIを使いたいのを我慢して、Git Shellを起動。

```
git config --global http.proxy http://proxyserver:proxyport
```

として、git cloneしたら出来た！

# HTTPプロキシ環境でお困りなら以下のブログ記事もお勧め！

- [node.jsでHTTPプロキシ経由でhttps更に簡単にアクセスするには](http://abrakatabura.hatenablog.com/entry/2013/06/25/063157)
- [node.jsでhttpsも使えるHttp proxyを書いている](http://abrakatabura.hatenablog.com/entry/2012/04/19/231210)
- [mrubyでHTTP/1.1のKeep-Aliveで複数回リクエストを出してみた](http://abrakatabura.hatenablog.com/entry/2016/08/31/073055)
Xcodeの複数のTargetにCocoaPodsを適用する

Xcodeの1プロジェクト内に複数のTarget(HogeA, HogeB)が存在する場合で、その両方にCocoaPodsでライブラリ(BlocksKit)を追加したい場合の、Podfileの書き方。

```
platform :ios

target 'HogeA' do
  pod 'BlocksKit'
end

target 'HogeB' do
  pod 'BlocksKit'
end
```
画面分割のキーバインドを押しやすくした

=====

SublimeText2のデフォルトの画面分割のショートカットキーは指がつりそうなので、次のように変えた。

```Python:keymap
  {
    "keys": ["super+k", "0"]
    ,"command": "set_layout"
    ,"args":
    {
      "cols": [0.0, 1.0],
      "rows": [0.0, 1.0],
      "cells": [[0, 0, 1, 1]]
    }
  }
  ,{
    "keys": ["super+shift+k", "2"],
    "command": "set_layout",
    "args":
    {
      "cols": [0.0, 0.5, 1.0],
      "rows": [0.0, 1.0],
      "cells": [[0, 0, 1, 1], [1, 0, 2, 1]]
    }
  }
  ,{
    "keys": ["super+shift+k", "3"],
    "command": "set_layout",
    "args":
    {
      "cols": [0.0, 0.33, 0.66, 1.0],
      "rows": [0.0, 1.0],
      "cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1]]
    }
  }
  ,{
    "keys": ["super+shift+k", "4"],
    "command": "set_layout",
    "args":
    {
      "cols": [0.0, 0.25, 0.5, 0.75, 1.0],
      "rows": [0.0, 1.0],
      "cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1], [3, 0, 4, 1]]
    }
  }
  ,{
    "keys": ["super+k", "2"],
    "command": "set_layout",
    "args":
    {
      "cols": [0.0, 1.0],
      "rows": [0.0, 0.5, 1.0],
      "cells": [[0, 0, 1, 1], [0, 1, 1, 2]]
    }
  }
  ,{
    "keys": ["super+k", "3"],
    "command": "set_layout",
    "args":
    {
      "cols": [0.0, 1.0],
      "rows": [0.0, 0.33, 0.66, 1.0],
      "cells": [[0, 0, 1, 1], [0, 1, 1, 2], [0, 2, 1, 3]]
    }
  }
  ,{
    "keys": ["super+k", "4"],
    "command": "set_layout",
    "args":
    {
      "cols": [0.0, 1.0],
      "rows": [0.0, 0.25, 0.5, 0.75, 1.0],
      "cells": [[0, 0, 1, 1], [0, 1, 1, 2], [0, 2, 1, 3], [0, 3, 1, 4]]
    }
  }
  ,{
    "keys": ["super+k", "5"],
    "command": "set_layout",
    "args":
    {
      "cols": [0.0, 0.5, 1.0],
      "rows": [0.0, 0.5, 1.0],
      "cells":
      [
        [0, 0, 1, 1], [1, 0, 2, 1],
        [0, 1, 1, 2], [1, 1, 2, 2]
      ]
    }
  }
  ,{ "keys": ["ctrl+1"], "command": "focus_group", "args": { "group": 0 } }
  ,{ "keys": ["ctrl+2"], "command": "focus_group", "args": { "group": 1 } }
  ,{ "keys": ["ctrl+3"], "command": "focus_group", "args": { "group": 2 } }
  ,{ "keys": ["ctrl+4"], "command": "focus_group", "args": { "group": 3 } }
  ,{ "keys": ["ctrl+shift+1"], "command": "move_to_group", "args": { "group": 0 } }
  ,{ "keys": ["ctrl+shift+2"], "command": "move_to_group", "args": { "group": 1 } }
  ,{ "keys": ["ctrl+shift+3"], "command": "move_to_group", "args": { "group": 2 } }
  ,{ "keys": ["ctrl+shift+4"], "command": "move_to_group", "args": { "group": 3 } }
  ,{ "keys": ["ctrl+0"], "command": "focus_side_bar" }
```

`command+k 2` で画面を横2分割、`command+k 3` で横3分割。 
`command+shift+k 2` で画面を縦2分割、`Ctrl+shift+k 3` で縦3分割。 みたいな感じ。

僕は横分割のほうがよく使うので、こっちを押しやすくした。
分割解除の時になぜか0を押す癖があったので、このショートカットは `command+k 0` にした。
(昔emacs使ってた頃の癖かな? よく覚えていない)

フォーカス移動はとりあえずデフォルトのまま。ただ、キーボードの設定でキーバインドを変えて `右commandボタン` を `右Ctrl` にした。
Windows 版 PHP で PHPUnit が遅いとき

Windows 版 PHP で PHPUnit の 3.7.2 以降で Failures/Errors/Incomplete/Skipped いずれかが１件以上あるときに実行が異様に遅くなる場合、realpath_cache_size の値を適当に大きくすると解決するかもしれません。

#### php.ini

	realpath_cache_size = 1M

私の環境で eclipse MakeGood からテストケース１つだけで実行したときには 100KB 程度あれば大丈夫そうでしたが、妥当な値はプロジェクトの規模とか内容、さらに実行環境にインストールされている PHPUnit 関連パッケージの量などによっても変わります。

PHPUnit を実行する環境では大きめにとっておくといいかもしれません。
ビット演算子を使う具体的な場面

色々使いどころがありそうなのにあんまりみかけないので、ベストプラクティス的な使い方やおもしろい使い方があれば教えてください。

自分はテストのパターンを作成するときに使いました。3つのフラグのtrue/falseについて、漏れダブりなくテストケースを生成するために次のようなコードを書きました。

```coffeescript:
first = 1
second = 2
third = 4
cases = (make_case(i & first,i & second,i & third) for i in [0..7])
```
CentOS6 で remi から php や mysql をインストールするための yum の設定

CentOS6 で remi から php や mysql をインストールするための yum の設定
======================================================================

epel リポジトリを追加します(remi-release-6 が依存している)。

    rpm --import http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/RPM-GPG-KEY-EPEL-6
    rpm -ivh http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-7.noarch.rpm

remi リポジトリを追加します。

    rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
    rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

yum リポジトリにプライオリティを指定するためのプラグインをインストールします（方法その１では不要）。

    yum install yum-plugin-priorities


## 方法１ remi はデフォルト無効、インストール時だけ有効に ##

色々なサイトやブログで見かける方法ですが、remi リポジトリをデフォルトでは無効にしておいて、php と mysql のインストール時だけコマンドラインオプションで有効にします。

#### /etc/yum.repos.d/remi.repo

※デフォルトで無効だったと思います。

```
[remi]
 :
enabled=0
 :
```

コマンドラインで remi を有効にして php と mysql をインストール（あるいはアップデート）します。

    yum --enablerepo=remi install php mysql-server
    yum --enablerepo=remi update php mysql-server

この方法だと `yum update` では php や mysql がアップデートされません。
かといって `yum --enablerepo=remi update` すると関係無いパッケージまで remi のパッケージで上書きされてしまいます。


## 方法２ 標準リポジトリの優先度を remi より高く ##
    
#### /etc/yum.repos.d/CentOS-Base.repo

標準リポジトリのプライオリティを 10 にします（未指定のデフォルトは 99）。そして、php と mysql 関連のパッケージを標準リポジトリから除外します。

```
[base]
priority=10
exclude=php* mysql*
 :

[updates]
priority=10
exclude=php* mysql*
 :

[extras]
priority=10
 :
```

#### /etc/yum.repos.d/remi.repo

remi リポジトリを有効にします。有効にしても優先度が低いので重複するパッケージは標準リポジトリが使われます（php と mysql 関連を除く）。

```
[remi]
 :
enabled=1
 :
```

インストールなりアップデートなりします。

    yum install php mysql-server
    yum update


## 方法３ remi を最優先、ただし php と mysql に限る

標準リポジトリのプライオリティはデフォルトのままで、remi リポジトリのプライオリティを高くして最優先にします。
さらに、remi リポジトリからは php と mysql 関連だけのパッケージをインストールするように設定します。

#### /etc/yum.repos.d/remi.repo

```
enabled=1
priority=10
includepkgs=php* mysql*
```

インストールなりアップデートなりします。

    yum install php mysql-server
    yum update

この状態で remi から php と mysql 以外のパッケージをインストールする場合は、次のように includepkgs を無効化します。

    yum --setopt remi.includepkgs= install hogehoge
rails_adminを使ってproductionでprecompileしようとしたら詰まった


rails_admin (0.1.2)
rails (3.2.5)
twitter-bootstrap-rails (2.1.4)

## rails_adminよいが

https://github.com/sferik/rails_admin

active_adminの方が人口多いっぽいけど、
最近アクティブなのはrails_admin

そのrails_adminを使っていた時のこと。

本番環境でprecompile:allしようとすると怒られて進まなくなった。

```
 ** [out :: hogehoge] 
 ** [out :: hogehoge] rake aborted!
 ** [out :: hogehoge] 
 ** [out :: hogehoge] Undefined variable: "$red".
 ** [out :: hogehoge] (in /var/www/hogehogemogemoge/shared/bundle/ruby/1.9.1/gems/rails_admin-0.1.2/app/assets/stylesheets/rails_admin/base/theming.css.scss)
 ** [out :: hogehoge] 
 ** [out :: hogehoge] 
 ** [out :: hogehoge] Tasks: TOP => assets:precompile:all
 ** [out :: hogehoge] 
 ** [out :: hogehoge] (See full trace by running task with --trace)
 ** [out :: hogehoge] 
```

原因は

```ruby:config/environments/production.rb
  config.assets.precompile += %w( *.css *.js )
```

のせい。

依存関係に関係なく全部compileしようとするのがダメだったらしい。
rails_adminはhookで必要なファイルのprecompileは指定してる。

この記述でもjs/cssのヘッダーにちゃんとrequireで依存関係書いときゃいいだろうと思ってたんだけど、
そうはしないのか。

んでも全部precompileするって指定は確かに雑だったので、
この機会にとれて良かったかもしれない。

cf.)

$red not found when precompiling assets
https://github.com/sferik/rails_admin/issues/988

app/assets/stylesheets/rails_admin/base/theming.css.scss
https://github.com/sferik/rails_admin/blob/master/app/assets/stylesheets/rails_admin/base/theming.css.scss
rubyで平仮名、カタカナの正規表現マッチをする方法

rubyは正規表現エンジンに鬼車( https://github.com/kkos/oniguruma )を採用しているので、鬼車の機能をつかって用意に平仮名、カタカナのマッチングを取れる

```ruby:
# 平仮名
/\p{hiragana}/
# カタカナ
/\p{katakana}/
```
とにかく簡単にTwitterのOAuth認証トークンを取得 

Consumer Key
Consumer Secret
Token
Secret
を取得するのが狙い

```
$ gem install oauth get-twitter-oauth-token
```

アプリケーションの登録
https://dev.twitter.com/apps

`Consumer Key` と `Consumer Secret` をメモる
以下のように入力＆Access hereで出てきたURLにアクセスして表示された数字をPINに入力

```
$ get-twitter-oauth-token
Consumer Key: hugehugehugehugehugehuge
Consumer Secret: homuhomuhomuhomuhomu
Couldn't get a file descriptor referring to the console
Access here: http://api.twitter.com/oauth/authorize?oauth_token=nyanchuu
and...
PIN: 1234567
Token: 123456-kurasunominnanihanaisyodayo
Secret: watashinosaikounotomodachi
```
JSDoc形式のコメントを追加するVim Script

Qiita初めての投稿です。テスト的な意味も込めて、Gistで公開しているヤツを転載です。
関数定義をしている行で実行すると、その前にコメントを挿入します。
ftpluginのjavascript.vimとかに入れてやると便利かと思います。

```vim:jdsoc.vim
" JSDoc形式のコメントを追加(functionの行で実行する)
" hogeFunc: function() の形式と function hogeFunc() に対応
" 関数定義でない場合は、コメントだけ出力する
function! AddJSDoc()
    let l:jsDocregex = '\s*\([a-zA-Z]*\)\s*[:=]\s*function\s*(\s*\(.*\)\s*).*'
    let l:jsDocregex2 = '\s*function \([a-zA-Z]*\)\s*(\s*\(.*\)\s*).*'

    let l:line = getline('.')
    let l:indent = indent('.')
    let l:space = repeat(" ", l:indent)

    if l:line =~ l:jsDocregex
        let l:flag = 1
        let l:regex = l:jsDocregex
    elseif l:line =~ l:jsDocregex2
        let l:flag = 1
        let l:regex = l:jsDocregex2
    else
        let l:flag = 0
    endif

    let l:lines = []
    let l:desc = input('Description :')
    call add(l:lines, l:space. '/**')
    call add(l:lines, l:space . ' * ' . l:desc)
    if l:flag
        let l:funcName = substitute(l:line, l:regex, '\1', "g")
        let l:arg = substitute(l:line, l:regex, '\2', "g")
        let l:args = split(l:arg, '\s*,\s*')
        call add(l:lines, l:space . ' * @name ' . l:funcName)
        call add(l:lines, l:space . ' * @function')
        for l:arg in l:args
            call add(l:lines, l:space . ' * @param ' . l:arg)
        endfor
    endif
    call add(l:lines, l:space . ' */')
    call append(line('.')-1, l:lines)
endfunction

" JSDocのキーバインド
nmap ,d :<C-u>call AddJSDoc()<CR>
ぷよぷよ in Lens

http://okajima.air-nifty.com/b/2011/01/2011-ffac.html

Lens<http://hackage.haskell.org/package/lens>の練習にちょうどいいなあと思って。
30分はかかってない気がします。

~~~ {haskell}
import           Control.Lens
import           Control.Monad
import           Control.Monad.State
import           Data.List
import qualified Data.Map            as M

paint :: M.Map (Int, Int) Char -> (Int, Int) -> Int
paint mm pos = evalState (go pos) mm where
  go (i, j) = do
    b <- use $ at (i, j)
    if b == M.lookup pos mm then do
      at (i, j) ?= 'x'
      vs <- forM [(1, 0), (-1, 0), (0, 1), (0, -1)] $ \(di, dj) ->
        go (i + di, j + dj)
      return $ 1 + sum vs
      else do
      return 0

erase :: [String] -> [String]
erase bd =
  [ [ if paint mm (i, j) >= 4 then ' ' else c
    | (j, c) <- zip [0..] r
    ]
  | (i, r) <- zip [0..] bd
  ]
  where
    mm = M.fromList $ do
      (i, r) <- zip [0..] bd
      (j, c) <- zip [0..] r
      return $ ((i, j), c)

drops :: [String] -> [String]
drops = transpose . map (reverse . f . reverse) . transpose where
  f = take 13 . (++ repeat ' ') . filter (/= ' ')

next :: [String] -> [String]
next = drops . erase

main :: IO ()
main = do
  forM_ (take 20 $ iterate next input) $ \b -> do
    mapM_ putStrLn b
    putStrLn "======"

-----

input :: [String]
input =
  [ "  GYRR"
  , "RYYGYG"
  , "GYGYRR"
  , "RYGYRG"
  , "YGYRYG"
  , "GYRYRG"
  , "YGYRYR"
  , "YGYRYR"
  , "YRRGRG"
  , "RYGYGG"
  , "GRYGYR"
  , "GRYGYR"
  , "GRYGYR"
  ]
~~~
顔文字をランダムで出力するスクリプト 


顔文字リストを作成します

```kaomoji.md
(▰˘◡˘▰)
(ﾟДﾟ)ﾊｯ！
(≧ڡ≦*)
ヾ(｡>﹏<｡)ﾉﾞ
(◞‿◟)
( ◞･౪･)◞
( 　◜◡◝ 　) 
(º﹃º)
٩꒰๑･д･꒱۶
(*0_0)ﾉｼ
(๑•₃•๑)
(๑•́ ₃ •̀๑)
(　◜◡‾)(‾◡◝　)
(๑′ᴗ‵๑)
꒰•̥̥ ﹏ •̥̥๑꒱
(╹〰╹)
(´・3・`)
(੭ु˙꒳<200b>˙)੭ु⁾⁾
｡ﾟ(ﾟ∩´﹏`∩ﾟ)ﾟ｡
(´◉_◉｀)
(*˘︶˘*)
ヾﾉ｡ÒㅅÓ)ﾉｼ
⁽˙³˙⁾◟( ˘•   ̫ •˘ )◞⁽˙³˙⁾)
(◜◡‾c彡☆)◡◝))
```


ランダムで顔文字を出力するスクリプトを作成します。

```kaomoji_rand.sh
#!/bin/bash

TEXT='/Users/soramugi/Documents/kaomoji/kaomoji.md'
WCNUM=`cat $TEXT | wc -l`
RUNNUM=$(( (RANDOM % $WCNUM ) + 1 ))

cat $TEXT | awk "NR==$RUNNUM"
```

完成です。

```
なまえ@soramugi-Air ~ $ source kaomoji_rand.sh
(๑′ᴗ‵๑)
```

エイリアスを貼ってツイート出来るようにしておけば幸せ

```.bashrc
alias tweet='ruby ~/command_tweet.rb'
alias tweetkao='tweet `source ~/kaomoji_rand.sh`'
```
Haxeで動的に変数名を指定。

Reflectクラスを使うと、動的に変数名を指定することができます。

```hx:Main.hx
class Main {
	static function main() {
		var d:Dynamic 	= { };
		var key:String 	= "key";
		
		//動的に変数名を指定して値を代入。
		Reflect.setField( d, key, "value" );
		
		//動的に変数名を指定して値を取得。
		var value = Reflect.field( d, key );
		
		//すべての変数名を取得してループ。
		//(注: Reflect.fields は書きだす言語によって挙動が異なります)
		for ( name in Reflect.fields( d ) ) { }
		
		//動的に変数名を指定して変数の有無を調べる。
		var isKey:Bool = Reflect.hasField( d, key );
		
		//動的に変数名を指定して変数を削除。
		Reflect.deleteField( d, key );
	}
}
```

検索してもヒットしなかったので、untypedを使ってたんですがクロスプラットホームで使えるこっちの方がよさそうですね。
JBでREAD_EXTERNAL_STORAGE権限のテスト

JBで追加されたREAD_EXTERNAL_STORAGE権限をテストする方法です。
詳細：http://yuki312.blogspot.jp/2012/10/androidjbreadexternalstorage.html

手順：
[設定]＞[開発者向けオプション]＞[SDカードの保護]のチェックをONに。

ただし、エミュレータではこの確認を実施できない可能性があります(2012/10/22現在)
CompassでRetina対応のCSS Spriteを出力する方法


```.scss
$sprites: sprite-map("sprites/*.png");

@mixin sprite-background($name) {
  background-image: sprite-url($sprites);
  background-repeat: no-repeat;
  display: inline-block;
  height: image-height(sprite-file($sprites, $name)) / 2;
  width: image-width(sprite-file($sprites, $name)) / 2;
  $ypos: round(nth(sprite-position($sprites, $name), 2) / 2);
  background-position: 0 $ypos;
  @include background-size(300px auto);
}
```
``@include background-size((hoge1 / 2)+px auto);``のhoge1の部分にはSpriteフォルダ内に入っている一番横幅の大きい画像サイズを指定する。

表示させる際は

```
@import sprite-background(hoge2)
```
と入力する。
"hoge2"には表示したい画像ファイル名（拡張子を除く）を入力

---

### 参考サイト
- [CompassでCSSスプライト（Retina対応）&nbsp;|&nbsp; clear sky source](http://maboroshi.biz/clearskysource/?p=608 "CompassでCSSスプライト（Retina対応）&nbsp;|&nbsp; clear sky source")
- [CompassでCSSスプライト[to-R]](http://blog.webcreativepark.net/2012/06/12-201005.html,"CompassでCSSスプライト[to-R]")
プロパティファイルをUnicode以外で記述、読み込む

プロパティファイルを日本語で記述する際、Unicodeだといざ編集する時に簡単に編集ができず、運用担当者が大変でした。
そのため、プロパティファイルは好きな文字コードで記述できるようにXML形式で記述、読み込みをしていました。
ですが、今はプロパティファイル(.properties)に好きな文字コードで記述し、読み込みの際に下記のようにInputStreamReaderで文字コードを指定すれば読み込めます。

```java
Properties properties = new Properties();
InputStream in = this.getClass().getClassLoader.getResourceAsStream(fileName);
properties.load(new InputStreamReader(in, "UTF-8"));
```


これでUnicodeによる縛りは無くなったので、設定ファイルも楽になりました。
HTTPS なページで CSS3 PIE を使うと、IE6 でセキュリティエラーが出る


IE7 以上では出ないので、IE6 のバグのようです。PIE.htc の以下の部分が原因。

```PIE.htc
a.backgroundImage="url(about:blank)";
```

これを以下のようにするとエラーが出なくなります。

```PIE.htc
a.backgroundImage="none";
```

[CSS3 PIE Forums - View topic - &quot;Secure and nonsecure&quot; Warning](http://css3pie.com/forum/viewtopic.php?t=128) で報告されていました。ここで、この修正によって jQuery がおかしくなるという人がいますが、妙な話です。とりあえず、今のところ特に問題はありません。
Vim に隠されたイースターエッグ

```
:help!
```

とすると「落ち着いてください」というメッセージが表示されるのは有名ですが，それ以外にもたくさんのイースターエッグがあるのを http://vim.wikia.com/wiki/Vim_Tips_Wiki で見つけたので紹介します．
休憩がてらみてみると結構面白いです．

```
:help 42
```
```
:help holy-grail
```
```
:help map-modes
```
(↑ `:nunmap` のコメント)

```
:help UserGettingBored
```
```
:help spoon
```
```
:help showmatch
```
(↑ `Note:` のところ)

```
:help bar
```
```
:Ni!
```

どうやら，書いた人はモンティパイソンのネタとかが好きらしいですね．
IE で、absolute で block で背景のない anchor がクリックできない


IE8 でテキストの部分しかクリックできません。`text-indent` などでテキストを飛ばしていると、全くクリックできません。

`transparent` 以外の背景色や背景画像を設定すると、全体がクリックできるようになります。背景を設定したくない場合は、1x1px の透明 PNG を用意して背景画像として設定します。

```css
background: transparent url(1x1.png) 0 0 repeat;
```

参考
[html - absolute positioned anchor tag (with no text) not clickable in IE - Stack Overflow](http://stackoverflow.com/questions/6914822/absolute-positioned-anchor-tag-with-no-text-not-clickable-in-ie)
Haxeを使えばAJAXが楽々。

JavaScriptでAJAXをやろうとすると、手順が多かったりIE6用のコードが必要だったりめんどくさい。

でも、Haxeなら簡単。

例えば、data.xmlから読み込んだデータをalertで表示する場合。

#同期通信

```hx:Main.hx
import haxe.Http;
import js.Lib;

class Main {
	static function main() {
		Lib.alert( Http.requestUrl("data.xml") );
	}
}
```

データを読み込む処理自体はHttp.requestUrl("data.xml")だけで終わっています。

#非同期通信
必要最低限のコードはこんな感じです。

```hx:Main.hx
import haxe.Http;
import js.Lib;

class Main {
	static function main() {
		var http = new Http( "data.xml" );
		http.onData = function( data:String ){ Lib.alert( data ); }
		http.request( false );
	}
}
```

さらに、ポストしたりエラー処理を行ったりというもっと細かい処理ももちろん書けます。

```hx:Main.hx
import haxe.Http;
import js.Lib;

class Main {
	static function main() {
		var http = new Http( "data.php" );
		http.onData = function( data:String ) { Lib.alert( data ); }
		http.onError = function( msg:String ) { Lib.alert( msg ); }
		
		var name = "hoge";
		var address = "hogehoge";
		http.setPostData( Std.format( "name=$name&address=$address" ) );

		http.setHeader( "Content-Type", "application/x-www-form-urlencoded" );
		http.request( true );
	}
}
```

ちなみにこれらのコードは**IE6対応がされてます。**
shellscriptで日付で保存されてる過去のファイルを操作する

忘れるのでQiitaにこういうのメモっておこう。

引数を日付で渡して過去分のログとかを掃除したり移動したりする時に
よく使うTips。


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

COUNT=$@

while [ ${COUNT} -ge 1 ];
do
    DATE=`date --date "${COUNT} days ago" +%Y%m%d`
    echo " ======== $DATE ========================== "

    echo "ls /var/log/hoge/${DATE} "

    COUNT=`expr ${COUNT} - 1`
done
````

````kekka
$ bash while.sh 10
 ======== 20121012 ========================== 
ls /var/log/hoge/20121012 
 ======== 20121013 ========================== 
ls /var/log/hoge/20121013 
 ======== 20121014 ========================== 
ls /var/log/hoge/20121014 
 ======== 20121015 ========================== 
ls /var/log/hoge/20121015 
 ======== 20121016 ========================== 
ls /var/log/hoge/20121016 
 ======== 20121017 ========================== 
ls /var/log/hoge/20121017 
 ======== 20121018 ========================== 
ls /var/log/hoge/20121018 
 ======== 20121019 ========================== 
ls /var/log/hoge/20121019 
 ======== 20121020 ========================== 
ls /var/log/hoge/20121020 
 ======== 20121021 ========================== 
ls /var/log/hoge/20121021 
````
[Oracle]対象のカラムが数値か判断

```sql

SELECT
  CASE WHEN TRIM(TRANSLATE(カラム,'0123456789',' ')) IS NULL THEN TO_NUMBER(カラム) END
FROM テーブル;
```

これを使って数字を空白文字に置き換え、全てが空白になれば数値と判断できる。
（ただしこの方法だけでは、符号や小数点やカンマ等は判断できない）

数字のみのレコードの抽出については下記も参照
[LINK](http://d.hatena.ne.jp/gonsuke777/20120215/1329301835)
mutableとImmutable

自分でクラスを組み立てていく時、
なんでもかんでもインスタンスの生成後に書き換え可能にしていないだろうか。

クラスを
・不変オブジェクト
・可変オブジェクト
の２つに分類する考え方がある。

簡単に言えばNSMutableArrayとNSArrayのような関係だ。

たいした違いじゃないじゃないか？と一瞬思ってしまうが、
ここには非常に大きな差がある。

第一に**不変オブジェクトはバグを生みにくい**。これはオブジェクトが状態を変化させない、つまり「特定の状態でしか起きないバグ」をかなり減らせるからだ。

第二に**データの複製を考えなくていい**。　変更されないんだから、ポインタだけわたせばいいのだ。これは非常に効率的である。クラスメンバに可変オブジェクトを持つ場合、そのオブジェクトのポインタを外に出すのは危険である。だから防御的にコピーしたりする場合もあるが、不変オブジェクトなら安心して外にポインタを預けられる。それは変更される余地などないのだから。

第三に**不変オブジェクトはスレッド安全**。これは一度生成したら、変更されないために、複数のスレッドで同時に書き換えがおこらないためである。二つのスレッドが同時にreadonlyならば矛盾などおきようがない。


例えばUIImageを書き換えることができなくて困った人はいないだろうか？
そう、UIImageは不変オブジェクトとして設計されているのだ。もちろん上記の理由からだ。
いろいろなNS系のクラスがなぜMutableを分けてあるのか、上記の理由からなのだ。

この２つの分類を理解することで、フレームワークがなぜそうなっているのか、
よりよく理解できる手助けになるのではないだろうか。
また、不変と可変とうまくつきあって、より良いソースコードを書いていきたいものである。
Buster.JSでrequestAnimationFrameのテスト

```bash
buster static
```

でブラウザでテストするときは問題ないけど、

```bash
buster server
```

でブラウザをキャプチャしてテストするときは、
ブラウザがアクティブでないと、TimeOutする。

requestAnimationFrameはアクティブでないと動かないので、
当たり前なんだけど、見落とすとコードを色々見直したりして時間を無駄にする。

キャプチャするページは個別に別ウィンドウにしておけばOK
HaXeはクッキーの扱いが簡単。

JavaScriptでのクッキーの扱いって、読み込み時にいちいちsplitしたりいろいろめんどくさいんですね。かといってクッキーのためにjQueryとかライブラリ導入するのも気がひけます。

でも、そんなこともHaXeを使えば解決です。

```hx:Main.hx
class Main {
	
	static function main() {
		
		//クッキーに登録されているすべての変数を取得。
		var all:Hash<String> = Cookie.all();
		
		
		//変数を取得
		all.get( "key" );
		//または
		Cookie.get( "key" );
		
		
		//変数の有無を確認
		all.exists( "key" );
		//または
		Cookie.exists( "key" );
		
		
		//変数の削除
		Cookie.remove( "key" );
		
		
		//変数の書きこみ。
		Cookie.set( "key", "value" );
		
		
		//以下の情報で変数を書きこみ。
		var value			= "hoge";
		var domain 			= "hoge.com";
		var path 			= "/hoge";
		var expiresDelay	= 1000;			//有効期限1000秒
		
		Cookie.set( "key", value, expiresDelay, path, domain );
	}
}
```

こんなかんじに簡単にクッキーがあつかえます。
Haxeはヒアドキュメント的な書き方を素でサポートしてた。

JavaScriptはヒアドキュメントが使えないので、複数行にわたるhtmlを書きこむのってわりと億劫なんですよ。

でも、そんなこともHaxeが解決してくれました。

```hx:Main.hx
class Main{
	static function main() {
		var html = 
"<pre>
複数行の
文字列だよ！
</pre>";
	}
}
```

何にも難しいことは無くて、普通の文字列が複数行に対応しています。
そして、これをJavaScriptにコンパイルすると…

```js:Main.js
var Main = function() { }
Main.main = function() {
	var html = "<pre>\r\n複数行の\r\n文字列だよ！\r\n</pre>";
}
Main.main();
```

しっかりと改行文字が挿入されています。

さらに変数も使えます。ダブルクオテーション(")ではなく、シングルクオテーション(')を使ってみましょう。
(※Haxe2以前では、String.Formatをつかって変数展開します)

```hx:Main.hx
class Main{
	static var str:String = "変数だよ";
	static function main() {
		var i:Int = 39;
		var html = 
'<pre>
str = $str
i = $i
i * (1 + 2) = ${i * (1 + 2)}
</pre>';
	}
}
```

$変数名、または${数式}みたいな書き方が可能になります。

そして、これをJavaScriptにコンパイルすると…

```js:Main.js
...
	var html = "<pre>\r\nstr = " + Main.str + "\r\ni = " + i + "\r\ni * (1 + 2) = " + i * 3 + "\r\n</pre>";
...
```

もう完璧ですね。ちゃっかり(1+2)も計算してくれてます。
EnumerableEx.Generateを使う際の注意点

Linq to Objectの幅を広げてくれる､System.Interactiveの中に､指定したルールと終了条件によって､シーケンスを生成してくれるEnumerableEx.Generateメソッドというものがあります｡
このメソッドは便利なのですが､比較的あり得るシナリオとして､数値のシーケンスを返すようなものを生成する場合､状況によって無限ループに陥ってしまうことがあります｡

###無限ループに陥ってしまう例

たとえば､0～20までの整数シーケンスを生成したい場合､以下のように書いたとしましょう｡

```c#:iteration.cs
using System;
using System.Linq;

namespace Sample
{
	class Program
	{
		static void Main(string[] args)
		{
			var iteration = EnumerableEx.Generate(0, i => i < 20, i => i++, i => i);

			iteration.ForEach(Console.WriteLine);
		}
	}
}
```
この場合､意図と反して延々０が出力され続けます｡

###解決方法
先にこのような場合､意図したとおりに動かすにはどのように修正すれば良いのか以下に示します｡

```c#:Modify.cs
using System;
using System.Linq;

namespace Sample
{
	class Program
	{
		static void Main(string[] args)
		{
			var iteration = EnumerableEx.Generate(0, i => i < 20, i => ++i, i => i);

			iteration.ForEach(Console.WriteLine);
		}
	}
}
```

変更点として､Generateメソッドの"iterate"引数に与えているFunc<int,int>を､後置きインクリメントから､前置きインクリメントに変更しているだけです｡


###なぜこのようなことが起きてしまうのか

先に書いた後置きインクリメントがなぜ無限ループに陥ってしまうかは､λでは無く､メソッドにしてしまうととても簡単に理由がわかります｡

```c#:IterationAnatomy.cs

using System;
using System.Linq;

namespace Sample
{
	class Program
	{
		static void Main(string[] args)
		{
			var iteration = EnumerableEx.Generate(0, i => i < 20, Iteration, i => i);

			iteration.ForEach(Console.WriteLine);
		}

		static int Iteration(int i)
		{
			return i++;
		}
	}
}
```
上記の例では､iterate引数のデリゲートをλでは無く､実際のメソッドとして書き起こしました｡
さて､Iterationメソッドはごく単純に引数iを､後置インクリメントして結果を返すだけです｡これは結局iで受けた数値をそのまま返しているだけに過ぎないコトになります｡
従って､Generateメソッドにこのようなiterateを適用してしまうと､永遠に値が変わらず､従って条件に合致し続ける初期値だけを返す無限のシーケンスを生成してしまいます｡
for文では後置きでも前置きでも同じように評価してくれますが､この場合は後置きと前置きで意味が全く変わってくるので注意が必要でしょう｡
Gemfileの一部を書き換えたGemfileを定義する方法


たとえば [Travis CI](http://travis-ci.org) は CI 固有の Gemfile を指定することでインストールする gem の数を減らしたり、などの方法をとることができる。

ほかにも、たとえば Rails の複数のバージョンでアプリケーションを実行したいときなど、(Bundler の group を使うより) Gemfile をわけるシチュエーションは考えられる。

Gemfile で定義されている依存のマージを行いたい、というときにどうすればよいか。

## eval_gemfile

Gemfile を評価する場合、`eval_gemfile(gemfile)` で評価する。

## dependencies

`gem` メソッドで追加された依存 gem は `dependencies` というメソッドが記憶している。

dependencies は Gem::Dependency のインスタンスを含む配列である。

## やりかた

```ruby:Gemfile
gem 'rspec'
gem 'simplecov'
```

```ruby:gemfiles/travis.Gemfile
eval_gemfile File.expand_path(File.join(File.dirname(__FILE__), '../Gemfile'))

ignored_gems = %w(simplecov)

dependencies.delete_if {|_| ignored_gems.include?(_.name) }
```

```sh:command
bundle install --gemfile gemfiles/travis.Gemfile
```
Qiita API の Python ラッパーを作った

これは何?
--------

Qiita API の Python ラッパーです。
https://github.com/heavenshell/py-qiita

qiita-rb を Python に移植した形です。
https://github.com/yaotti/qiita-rb


現状 HTTP クライアントに [Requests](http://docs.python-requests.org/en/latest/index.html) を使用しています。

インストール方法
-------------

PyPi に登録してあるので、easy_install, pip などを利用してインストールできます。

```
$ virtualenv --distribute qiita_sample
$ source qiita_sample/bin/activate
$ cd qiita_sample
$ pip install qiita
```

使い方
-----
[Github の README.rst](https://github.com/heavenshell/py-qiita/blob/master/README.rst), または [docs 以下のドキュメント](https://github.com/heavenshell/py-qiita/blob/master/docs/index.rst)を参照して下さい。
androidのwebViewでinput type fileに対応する

```java:samplewebview

private final static int FILECHOOSER_RESULTCODE = 1;
private ValueCallback<Uri> mUploadMessage;
private WebView webView = new WebView(this);

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    webview.setWebChromeClient(new WebChromeClient() {
        //androidOS 4.1
        public void openFileChooser(ValueCallback<Uri> uploadMsg, String     acceptType,String capture) {
            mUploadMessage = uploadMsg;
            Intent i = new Intent(Intent.ACTION_GET_CONTENT);
            i.addCategory(Intent.CATEGORY_OPENABLE);
            i.setType("image/*");
            startActivityForResult( Intent.createChooser( i, "title" ), FILECHOOSER_RESULTCODE );
        }
        //androidOS 3.0 以上
        public void openFileChooser( ValueCallback<Uri> uploadMsg, String acceptType){
            openFileChooser( uploadMsg, acceptType ,"" );
         }
        //androidOS 3.0未満
        public void openFileChooser(ValueCallback<Uri> uploadMsg) {
            openFileChooser( uploadMsg, "","" );
        }
    });
    webView.loadUrl("URL");
}
@Override
protected void onActivityResult(int requestCode, int resultCode,Intent intent) {
    if (requestCode == FILECHOOSER_RESULTCODE) {
        if ( mUploadMessage == null ){
            return;
        }
        Uri result = (intent == null || resultCode != RESULT_OK) ? null : intent.getData();
        mUploadMessage.onReceiveValue(result);
        mUploadMessage = null;
    }
}
```
lessコマンドを少し便利にしておく


## ソースのハイライト

lessにはLESSOPENという環境変数があります。
これはLESSがファイルを開くときに、設定した値をフィルタプログラムとして起動することでlessする内容を変化させられるっつーものです。例えば、圧縮ファイルなどは解凍した結果を出力させるなんていうスクリプトなんかを使ってる人もいるようです。

GNUのsource-hightlightには、LESSOPEN用の`src-hilite-lesspipe.sh`というスクリプトが用意されています。

LESSOPENに `'| /usr/share/source-highlight/src-hilite-lesspipe.sh %s'`
という値をセットしてあげることで、source-highlightを通した結果を出力することが出来るようになります。
また、この設定をする場合はlessに`-R`または` --RAW-CONTROL-CHARS`というオプションをつけてあげましょう。これについては後述します。

　

## 画面に結果を残したい、そして一画面に収まる時はcatの様に動作させたい

環境変数`LESS`に値を登録しておくことで、常に使用したいオプションを設定することが出来ます。LESSはページャとして設定して、自動的に起動させたりするような感じがあったりすると思うので、エイリアスだけじゃあなくてこっちで設定出来るようになってるんじゃあないかと思います。
表題の条件を満たすには
`--no-init --quit-if-one-screen`
を設定します。

`--no-init`は、よくわからないですがtermcap初期化文字列を送信しないようにする——ということだそうです。つまりlessを終了しても、表示させていた画面がそのまま残るということです。
`--quit-if-one-screen`はそのままの意味です。


ちなみに`--quit-if-one-screen`だけだと、一画面の時はただ起動した後に即終了するだけになります。
画面に残すのは嫌だけど、cat的動作はさせたい！ という場合はawkとか使ってどうにかするしかないと思います。でもまぁ、常に残った方が便利だと思います。


### 色の表示

先ほどの`--RAW-CONTROL-CHARS`も設定しましょう。
これを設定しないと、カラーエスケープシーケンスがそのまま出力されることになります。
これを設定しておくことでカラー表示をパイプさせた場合や、先ほどのsource-hightlight、あとはgit logなどの出力結果をカラーで出力させることが出来るようになります。


### おまけ

他にも僕は`-g` `-j10`を登録しています。
lessは標準動作では、単語検索時当てはまる全ての単語が反転表示されますが、`-g`をつけると現在フォーカスのあるもののみが反転表示されるようになります。
`-j(数字)`は、検索時に、ターゲットフォーカスの存在する行数です。すごく説明しにくいのですが、`-j10`としておくと、検索した語が上から10行目に表示（それぞれの環境にもよりますが、大体真ん中よりもちょっと上目）されるので見やすいです。

　

## まとめ

最終的に設定する環境変数は
`LESS='-gj10 --no-init --quit-if-one-screen --RAW-CONTROL-CHARS`
`LESSOPEN='| /{環境ごとにディレクトリが違うよ}/src-hilite-lesspipe.sh %s'`

になると思います。
lesspipeは、
Macでhomebrewなら`/usr/local/bin/`
Linuxでdebian系なら多分`/usr/share/source-highlight/`
cygwinなら`/bin/`
にそれぞれ存在するかと思います。他は使っていないので知りません。
CSS3をつかった透過エフェクトアニメーション

.opacity {
    -webkit-transition: All 0.3s ease;
    -moz-transition: All 0.3s ease;
    -o-transition: All 0.3s ease;
    -ms-transition: All 0.3s ease;
    transition: All 0.3s ease;
}
.opacity:hover {
    filter: alpha(opacity=70); /* for IE */
    -moz-opacity: 0.7;
    opacity: 0.7;
}
オフラインリアルタイムどう書く第5回の参考問題の回答例（Haskell)

問題はこちら。 http://qiita.com/items/0ddde0164a745cd09c34

Ruby版の回答 ( http://qiita.com/items/ed5fa743164638de72b1 ) をHaskellに翻訳してみました。

左右の番兵をひとつですませる発想はなかったので、ちょっと新鮮でした。
ハッシュのかわりにパタンマッチングを使っています（なのでちょっと行数増えました）。

```haskell:

import Data.Char
import Test.HUnit

board = "----ABC-DEF-GHI----"

move 0   4  =  4
move 0 (-4) = -4
move 0   1  =  1
move 0 (-1) = -1
move 1   4  =  1
move 1 (-4) = -1
move 1   1  =  4
move 1 (-1) = -4
move 2   4  = -1
move 2 (-4) =  1
move 2   1  = -4
move 2 (-1) =  4

solve xs = solve' 5 4
    where
        solve' pos mv
            | pat !! pos < 0 = []
            | otherwise      = let mv'  = move (pat !! pos) mv
                                   pos' = pos + mv'
                               in  (board !! pos):(solve' pos' mv')
        pat = replicate 4 (-1) ++ (pat' $ map ((subtract 48).ord) xs)
        pat' []        = replicate 4 (-1)
        pat' (a:b:c:t) = a:b:c:(-1):(pat' t)

main = do
    runTestTT $ test $ map (\(e, a) -> e ~=? solve a) testPattern
    return ()

testPattern = [ ("BEDGHIFEH",   "101221102")
              , ("BEH",         "000000000")
              , ("BCF",         "111111111")
              , ("BAD",         "222222222")
              , ("BEFIHEDGH",   "000211112")
              , ("BADGHIFEBCF", "221011102")
              , ("BEHIFCBADEF", "201100112")
              , ("BEFIH",       "000111222")
              , ("BC",          "012012012")
              , ("BEDABCFI",    "201120111")
              , ("BADEHGD",     "220111122")
              , ("BADG",        "221011022")
              , ("BCFIHEBA",    "111000112")
              , ("BEFI",        "001211001")
              , ("BCFEHIF",     "111222012")
              , ("BADEHI",      "220111211")
              , ("BCFEBAD",     "211212212")
              , ("BEFC",        "002112210")
              , ("BEF",         "001010221")
              , ("BEFIHG",      "100211002")
              , ("BEFCBAD",     "201212121")
              ]
```
Chrome拡張の開発時にソースの更新を自動で反映させる

特にコンテントスクリプトの開発時向けです．

注意：以下のソースを開発対象のChrome拡張に組み込んでも想定通りには動作しません．別の拡張機能として作る必要があります．


JavaScriptやCSSを少し手直しするたびに *拡張機能の管理* 画面を開くのは面倒なので，「作業しているページからあるショートカット(Ctrl + a)を押すと，Chrome拡張を再読み込みし，その後ページを再読み込みする」ようなChrome拡張をつくりました．
以下，ソースです．
みそは _chrome.management.setEnabled_ 関数ですが，chrome.managementはコンテントスクリプトからは呼べないようなので，backgroundページに処理を依頼しています．

```background.js
function onMessage(request, sender, sendResponse) {
  var id = "(開発中の拡張機能のID (拡張機能の管理画面から確認))";
  chrome.management.setEnabled(id, false, function() {
    chrome.management.setEnabled(id, true, function () {sendResponse({});})
  });
  return true;
};

chrome.extension.onMessage.addListener(onMessage);
```

```content_script.js
document.addEventListener('keydown', function (event) {
  if (event.keyCode == 65 && event.ctrlKey) { // Ctrl + a
    chrome.extension.sendMessage({}, function (response) {
      location.reload(true);
    });
  }
});
```

```manifest.json
{
  "name": "Chawan reloader",
  "version": "0.0.1",
  "description": "To be specified",
  "background": {
    "scripts": ["background.js"]
  },
  "content_scripts": [
    {"matches" : [
        "http://b.hatena.ne.jp/my.name*" //動作させたいドメイン
      ],
      "js": ["content_script.js"],
      "run_at": "document_start"
    }
  ],
  "permissions": [
    "management"
  ]
}
```

追記: APIが変更になった(onRequest -> onMessageになったようなので合わせて修正しました）

--
### 宣伝
はてなブックマークのmyページを，軽量かつおしゃれにラップしつつ，フォルダ階層なんかも定義できるようになるChrome拡張およびFirefoxグリモン[Chawan](http://hiroqn.github.com/chawan/)を作りました(僕はメインコミッタではないですが)．よろしければあわせてご覧ください．
config.ruなしでrackupする


```ruby
require 'rack/directory'
require 'rack/server'

Rack::Server.new.tap {|server|
  server.instance_variable_set(:@app, Rack::Directory.new(Dir.pwd))
}.start
```

最終的に `Rack::Server#start` が呼ばれるので、任意の Rack アプリケーションを `Rack::Server` のインスタンスに渡して `start` できればよい。
Playframework 2.x のエラーハンドリングTips


##フォームの相関チェックを行う
[Playframework公式ドキュメント](http://scala.playframework.org/documentation/2.0.4/JavaForms)で紹介されているValidation Methodを利用します。例えば、Sign-up form内で、パスワードと確認用パスワードが一致するかはこのようにして確認できます。

```Java
public Map<String, List<ValidationError>> validate() {
    Map<String, List<ValidationError>> errors = null;
    if (!pwd.equals(confPwd)) {
        errors = new HashMap<String, List<ValidationError>>();
        List<ValidationError> lists = new ArrayList<ValidationError>();
        lists.add(new ValidationError("pwd", "error.pwdunmatched", new ArrayList<Object>()));
        errors.put("pwd", list);
    }
    return errors;
}
```

##個々のエラーメッセージを出力する
Annotationで行っている単項目や上記で紹介した方法で詰まれたエラーは以下の様に取得できます。

```Java
for(Entry<String, List<ValidationError>> entry : form.errors().entrySet()){
    for(ValidationError validationError : entry.getValue()){
        for(Object argument : validationError.arguments()){
            System.out.println(validationError.argument, validationError.key, argument)
        }
    }
}
```

しかし、Controller側でエラーメッセージ取得することもないので、以下のような方法のでViewに出力方が良いかもしれませんね。

```Scala
@(form: Form[_])
@import tags._
@if(form.hasErrors) {
    @for(entry <- form.errors.entrySet){
        @for(validationError <- entry.getValue){
        	@for(argument <- valicationError.arguments){
				@Messages(validationError.message, Messages(validationError.key), Messages(argument))<br />
			}
        }
    }        
}
```
WebIntentsでQiitaに投稿する

#Web Intentsとは

「〇〇を☓☓する機能」を自分で実装せずに他に丸投げできるようにする仕組み(Androidのintentのようなもの)。

例) どこかしらにテキストを保存する。

#どこで使える？

Chromeに実装されている。Web Intentsを使おうとすると、インストールされている、もしくはChrome web storeに登録(インストールをうながす)されているChrome拡張を呼びだそうとする。

#Demo

http://jsfiddle.net/e5STG/5/
BrowserStack で hosts を使う


WordPress サイトの移行など hosts ファイルを使うと開発が楽になる場合があるかと思います。そして、さまざまな OS やブラウザでウェブサイトをテストできる [BrowserStack](http://www.browserstack.com/)。とても便利なのですが、直接 hosts を設定する機能は用意されていません。サポートに聞いてみると local testing を利用して同じようなことができると教えてくれました。

1. まずローカルマシンの hosts を設定します。Mac なら `/private/etc/hosts` にあります。仮に `xxx.xxx.xxx.xxx foo.com` と設定したとします。
2. BrowserStack で Local Testing -> Setup Tunnel を押します。
3. 出てきたダイアログの Local Server の Host のところの + Add more ボタンを押します。
4. Host の設定が一行増えるので Host: foo.com, Port: 80 として Finish ボタンを押します。

これで BrowserStack から hosts を使ってウェブサイトにアクセスできます。
オフラインリアルタイムどう書く第5回の参考問題の回答例（C++)

問題はこちらです。 http://qiita.com/items/0ddde0164a745cd09c34
ベタベタな解き方。もうちょっと工夫したい。

```cpp:

#include <string>
#include <sstream>

typedef int Direction;

static const int DOWN  = 0;
static const int RIGHT = 1;
static const int UP    = 2;
static const int LEFT  = 3;

std::string ord5(const std::string& s)
{
    int       x = 1;
    int       y = 0;
    Direction d = DOWN;

    std::ostringstream result;

    result << 'B';

    for(;;)
    {
        switch(d * 3 + s[y * 3 + x] - '0')
        {
        case  0: ++y; d = DOWN;  break;
        case  1: ++x; d = RIGHT; break;
        case  2: --x; d = LEFT;  break;
        case  3: ++x; d = RIGHT; break;
        case  4: ++y; d = DOWN;  break;
        case  5: --y; d = UP;    break;
        case  6: --y; d = UP;    break;
        case  7: --x; d = LEFT;  break;
        case  8: ++x; d = RIGHT; break;
        case  9: --x; d = LEFT;  break;
        case 10: --y; d = UP;    break;
        case 11: ++y; d = DOWN;  break;
        }
        
        if((x < 0) || (3 <= x) || (y < 0) || (3 <= y))
        {
            break;
        }

        result << static_cast<char>('A' + y * 3 + x);
    }

    return result.str();
}
```


テスト。

```cpp:

#include <gtest/gtest.h>
#include <string>

std::string ord5(const std::string& s);

TEST(ord5railsontilesTest, Test)
{
	ASSERT_EQ(std::string("BEDGHIFEH"),   ord5("101221102"));
	ASSERT_EQ(std::string("BEH"),         ord5("000000000"));
	ASSERT_EQ(std::string("BCF"),         ord5("111111111"));
	ASSERT_EQ(std::string("BAD"),         ord5("222222222"));
	ASSERT_EQ(std::string("BEFIHEDGH"),   ord5("000211112"));
	ASSERT_EQ(std::string("BADGHIFEBCF"), ord5("221011102"));
	ASSERT_EQ(std::string("BEHIFCBADEF"), ord5("201100112"));
	ASSERT_EQ(std::string("BEFIH"),       ord5("000111222"));
	ASSERT_EQ(std::string("BC"),          ord5("012012012"));
	ASSERT_EQ(std::string("BEDABCFI"),    ord5("201120111"));
	ASSERT_EQ(std::string("BADEHGD"),     ord5("220111122"));
	ASSERT_EQ(std::string("BADG"),        ord5("221011022"));
	ASSERT_EQ(std::string("BCFIHEBA"),    ord5("111000112"));
	ASSERT_EQ(std::string("BEFI"),        ord5("001211001"));
	ASSERT_EQ(std::string("BCFEHIF"),     ord5("111222012"));
	ASSERT_EQ(std::string("BADEHI"),      ord5("220111211"));
	ASSERT_EQ(std::string("BCFEBAD"),     ord5("211212212"));
	ASSERT_EQ(std::string("BEFC"),        ord5("002112210"));
	ASSERT_EQ(std::string("BEF"),         ord5("001010221"));
	ASSERT_EQ(std::string("BEFIHG"),      ord5("100211002"));
	ASSERT_EQ(std::string("BEFCBAD"),     ord5("201212121"));
}
```
RailsのHashを新スタイルに置き換えるシェルスクリプト


つまり`:hash =>`を`hash:`にする。

```
sed -i '' -E 's/:([^: ]*) *=>/\1:/g' hoge.rb
```


* `-i`はファイルを直接置き換えるという意味で、引数の`''`はバックアップを作らないことを意味する。
* `-E`はよりModernな正規表現を使うという意味。通常のshの正規表現はかなり貧弱。この指定をしても`*?`といったlazyマッチングができないから困るけれど。

## 応用

一気に置き換えたい時は、これを使って、

```
sed -i '' -E 's/:([^: ]*) *=>/\1:/g' `find . -name \*.rb`
```

とか、xargs好きな方は

```
find . \*.rb | xargs sed -i '' -E 's/:([^: ]*) *=>/\1:/g'
```

とかやるといいのではないでしょうか。

確認は、もちろん`git diff`で。
HerokuにSSLのキーを追加する


Herokuにgit pushしようとして

```
! Your key with fingerprint xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx is not authorized to >access my_heroku_app.

fatal: The remote end hung up unexpectedly 
```

が起きたときの対処方法。
よくひっかかるのでメモ。
各行先頭の $ はプロンプト。

```
$ ssh-keygen -t rsa -C "メアド" -f  ~/.ssh/キープリフィックス
$ ssh-add ~/.ssh/キープリフィックス
$ heroku keys:add ~/.ssh/キープリフィックス.pub
```
nginxでperl cgi

http://abeerforyou.com/?p=429
とか
http://library.linode.com/web-servers/nginx/perl-fastcgi/centos-5
を見て対応。

$doucmentrootはそのままだと/usr/share/nginxのようにnginxデフォのところになってしまうので、必要に応じて変える。

はまったのは、scriptの改行コード。Windows環境で編集されたもののデプロイを頼まれたのだけど、改行コードDOSになっていることが原因で死んでた。

全部emacsでいうところのutf-8-unixにしたら動きました。
オフラインリアルタイムどう書く第5回の参考問題をRubyで解く

問題はこちら
http://qiita.com/items/0ddde0164a745cd09c34

1次元配列で番兵を使った。あまりRubyらしくないかも。

```ruby
MOVE = {
  0 => { 4=> 4,-4=>-4, 1=> 1,-1=>-1},
  1 => { 4=> 1,-4=>-1, 1=> 4,-1=>-4},
  2 => { 4=>-1,-4=> 1, 1=>-4,-1=> 4},
}
BOARD = '----ABC-DEF-GHI----'.split('')

def solve(q)
  pat = ('----%c%c%c-%c%c%c-%c%c%c----'%q.split('')).split('').map{|e| e=='-' ? -1:e.to_i}
  pos, mv = [5, 4]
  a = ''
  until(pat[pos]<0)
    a += BOARD[pos]
    mv = MOVE[pat[pos]][mv]
    pos += mv
  end
  a
end

DATA.readlines.each do |line|
  no,q,a = line.chop.split(/\s+/)
  ans = solve(q)
  print ans
  puts ans == a ? ' o' : ' x'
end
__END__
#0	101221102	BEDGHIFEH
#1	000000000	BEH
```
SpeakerDeck のスライドはりつけが巨大で困る

SpeakerDeck のembedスクリプトは、親要素の横幅を基準にスライドの表示幅を決めるっぽい。

```html
<div style="width: 65%">
<script async class="speakerdeck-embed" data-id="507ea19ed1e0a4000203d45d" data-ratio="1.3333333333333333" src="//speakerdeck.com/assets/embed.js"></script>
</div>
```

ぼくの場合、例えば上記のようにしたらいい感じの横幅になった。親div要素を作ってwidthを指定するだけ。
zshでタブ補完に関するTips

zshでタブ補完でタブ補完対象が通りすぎて行った時に
タブキー何回も押すのエレガントさに欠けててどうしたもんかなーって思ってた時に
hisaichi5518君が奇跡みたいなことしてたので、その設定をメモ

````.zshrc
autoload -U compinit
compinit
zstyle ':completion:*:default' menu select=1
````

この設定で

![Qiita](http://gyazo.com/bf167ee055643caa25dcb4947456aed7.png?1350662508 "prompt")

こんな風に表示されて、**十字キー**とか**C-f**、**C-b**で移動できるようになります。
auto-fu.zshと合わせると更に捗るのでオススメです。
オフラインリアルタイムどう書く第5回の参考問題

オフラインでリアルタイムに「どう書く」をやるイベント。
またやります
http://atnd.org/events/32979
で。例によって参考問題。
難易度と分量はこれを目安に。
参加予定の方は、何分で解けたとかいう情報を付けてくださると、本番用の問題制作の参考にさせて頂きます。

で。

いつもならここで問題を書くわけですが、画像なしでは表現しがたいので別URLに書きました。

http://nabetani.sakura.ne.jp/hena/ord5railsontiles/

です。

実装ができた方はこちらのコメント欄からリンクを張っていただくと見つけやすくて助かります。
Haskell/Graphics.UI.GLUTを使ってみる

GUIはGraphics.Glossを使っていましたが、そろそろGLUTに移行しても良い頃かな(スキルと速度的に)と思ったのでちょっと使ってみることにしました。

```haskell:window.hs
import Graphics.UI.GLUT

main = do
    initialDisplayMode $= [RGBAMode, DoubleBuffered]
    initialWindowSize $= Size 320 240

    initialize "" [] -- ←呼ばないと実行時エラー

    createWindow "GLTest"

    displayCallback $= display

    mainLoop

display = do
    clearColor $= Color4 0.0 0.0 0.3 0.0
    clear [ColorBuffer]
    swapBuffers
    
```

ウィンドウを作って画面をひたすら同じ色で塗るだけのプログラムです。

上にもある通り、initializeを呼ばないと

>freeglut  ERROR:  Function <glutCreateWindow> called without first calling 'glutInit'.

なるエラーが出ます。
理由は完全に不明で、検索して出てきたサンプルプログラムではinitしていないものも多かったのですが、少なくとも私の環境では(GLUT側の問題か、もしくはubuntuの問題かもしれません)動かなかったのでここに書いておくことにしました。

GLUTを利用したプログラムは書き方がかなり手続き的になるので、Haskellの本領発揮と言えるかもしれません(ちなみに私は純粋じゃないのであんまり好きじゃないです)

---

参考：http://d.hatena.ne.jp/bowmoq/20080123/1201101627
shimehari on heroku

gunicornに回す

```python:main.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
from shimehari import Shimehari

app = Shimehari(__name__)

if __name__ == '__main__':
    port = int(os.environ.get("PORT", 5959))
    app.drink(host="0.0.0.0", port=port)
```
Qiita-mode.el 作りました 


gongoさんに先を越されてしまいましたが、一応公開します。
https://github.com/uk-ar/qiita-mode

# これは何か

Emacs から qiita を操作出来ます。

# 使い方

## 投稿
```
M-x qiita-post-buffer
```
で現在開いているバッファを qiita に投稿します。
* 先頭行がタイトル
* 先頭行のなかで#を使用してタグを指定する
* 2行目以降のテキストが本文
になります。

例を出すと

```
Qiita-mode.el 作りました #qiita #markdown
https://github.com/uk-ar/qiita-mode

# これは何か
...
```
のようになります。

初回投稿時に記事のidがコメントとして埋め込まれるので、再度編集後に

```
M-x qiita-post-buffer
```
とすることで更新ができます。

## 一覧
anything.elのインストールした環境では

```
M-x qiita-my-items
```
で自分の記事一覧

```
M-x qiita-all-items
```
ですべての記事一覧

```
M-x qiita-tags-items emacs
```
でemacsのタグがついた記事一覧が取れます。

### 回覧

一覧でエンターを押すとデフォルトブラウザで記事を開きます。

### 削除

未実装です。

# 今後の予定

実用性を考えると投稿や一覧も非同期にしたいところです。
が、deferred.elを使おうとするとcurlを直に呼び出すのではなくurl-retrieve互換の層が欲しくなります。
モチベーションが続けば、そのあたりをがんばろうと思います。

<!--
Local Variables:
qiita-file-uuid: "25127dc1e5872e963ec1"
End:
-->
ViennaCL::compressed_matrixに直接データを指定する方法

[uBLAS版](http://qiita.com/items/b48fe422a17d54a85b9b)に引き続き、[ViennaCL](http://viennacl.sourceforge.net/)版も書いておくと、こんな感じです。
（というか、これがしたくてuBLAS版頑張った）

```cpp:viennacl_crs.cpp
// 行列の次元数
const int COUNT = 5;

// 非ゼロ要素数
const int NONZERO_COUNT = 15;

// 要素値
double elements[NONZERO_COUNT] ={
6, 2,    1, 4,
2, 7,       2,
      6, 3,   
1,    3, 9,   
4, 2,       8, 
};
// 列番号
unsigned int columnIndeces[NONZERO_COUNT] ={
0, 1,    3, 4,
0, 1,       4,
      2, 3,   
1,    2, 3,   
0, 1,       4, 
};
// 各行先頭の位置
unsigned int rowOffsets[COUNT+1] ={
0,
4,
7,
9,
12,
15 //＝非ゼロ要素数 ※ここ忘れがち
};


// 行列の生成
viennacl::compressed_matrix<double> mat(count, count);

// データの指定
mat.set(rowOffsets, columnIndeces, elements, COUNT, COUNT, NONZERO_COUNT);
```

あまり解説することもなく、単に`set`を使うだけです
コンストラクタでuBLASのcompressed_matrixとかstd::vector<std::map<unsigned int, double>>とかも指定できますが、生データがあるならこれが一番速いです。
これでuBLASとデータ共有できますしね！
uBLAS::compressed_matrixに直接データを指定する方法

以下の様な疎行列

```text:matrix.txt
6, 2, 0, 1, 4,
2, 7, 0, 0, 2,
0, 0, 6, 3, 0,
1, 0, 3, 9, 0,
4, 2, 0, 0, 8, 
```

を、uBLASのCRS形式(`boost::numeric::ublas::compressd_matrix`)の疎行列

```cpp:crs.cpp
// 行列の次元数
const int COUNT = 5;

// 非ゼロ要素数
const int NONZERO_COUNT = 15;

// 行列の生成
boost::numeric::ublas::compressed_matrix<double> mat(COUNT, COUNT);
```

として格納したい場合、普通だと

```cpp:slow.cpp
mat(0, 0) = 6; mat(0, 1) = 2;                mat(0, 3) = 1; mat(0, 4) = 4;
mat(1, 0) = 2; mat(1, 1) = 7;                               mat(1, 4) = 2;
                              mat(2, 2) = 6; mat(2, 3) = 3;
mat(3, 0) = 1;                mat(3, 2) = 3; mat(3, 3) = 9;
mat(4, 0) = 4; mat(4, 1) = 2;                               mat(4, 4) = 8;
```

ってな感じで、`mat(i, j) = value`を使う方法が多い。
というか、どこをみてもたいていこれ以外の方法が乗ってない。

が、これって実はかなり遅い。特に、元からCRS形式のデータが

```cpp:crs_data.cpp
// 要素値
double elements[NONZERO_COUNT] ={
6, 2,    1, 4,
2, 7,       2,
      6, 3,   
1,    3, 9,   
4, 2,       8, 
};
// 列番号
unsigned int columnIndeces[NONZERO_COUNT] ={
0, 1,    3, 4,
0, 1,       4,
      2, 3,   
1,    2, 3,   
0, 1,       4, 
};
// 各行先頭の位置
unsigned int rowOffsets[COUNT+1] ={
0,
4,
7,
9,
12,
15 //＝非ゼロ要素数 ※ここ忘れがち
};
```

という風に用意されていて他と共有する場合は、これらのデータを直接流し込むことができる。

```cpp:fast.cpp
// 非ゼロ要素数の容量を増やす
mat.reserve(NONZERO_COUNT, false);

// データを複製
std::copy(elements,      elements      + NONZERO_COUNT, mat.value_data().begin());
std::copy(columnIndeces, columnIndeces + NONZERO_COUNT, mat.index2_data().begin());
std::copy(rowOffsets,    rowOffsets    + COUNT + 1,     mat.index1_data().begin());
		
// 要素数を設定
mat.set_filled(COUNT+1, NONZERO_COUNT);
```

解説すると、まず、CRS形式データそのものは、`data`、`index1`、`index2`に格納されている。`index1`と`index2`ってなんだって思ったら、1が列番号で、2が各行先頭の位置を保持しているらしい。というわけで、それらを取得して`std::copy`で複製してやるというのがこの方法。

ただしそれだけではダメで、まず最初に`reserve`を使って非ゼロ要素数が格納できる容量を増やしてやる必要がある。`reserve`の引数#2はデフォルト(true)でも良いが、連結する必要はないのでfalseで。

更に、データを複製をした後（前だとダメ！）に、実際の要素数を`set_filled`で指定する。引数が`filled1`と`filled2`になっていて「なんのことだ」と思ったら、これがどうやら、各行先頭位置配列の大きさ（つまり非ゼロ要素数）と列番号配列の大きさ（つまり次元数+1）に対応しているらしい。要するに、先に書いたのと同じく、1が列番号で2が各行先頭位置。

なぜかこれをきちんと解説したサイトがなかった（調べきれてないだけかもしれないけど）ので、ここに書いときます。
CoffeeScriptで三項演算子

CoffeeScriptでは、?は
「?の手前の値が存在するかチェックするコード」
に変換するためのものだから、
三項演算子にコンパイルするすべがないと思ってたけど、
普通にあった。

```coffeescript
val = a ? b : c #思った通りには変換されない
val = if a then b else c #三項演算子に変換！
```

「if a then b else c」は普通のif文に変換なのだけど、
変数に代入するように書くと三項演算子にコンパイルされる！


**番外編**
aが存在するときはa、ないときはbを代入みたいなことってよくありますね。

```coffeescript
val = if a then b #意図しない三項演算子に変換される。
val = a ? b #（ちょっと丁寧なチェックをする）意図したコードに変換される。
```

どうぞお試しください。
iOSシミュレータが一瞬で終了してしまう場合

error: failed to attach to process ID 0
こんな表示が出ていたら、シミュレータの内容を初期化したら治りました。

iOSシミュレータ→コンテンツと設定をリセット...
です。

参考
http://stackoverflow.com/questions/11535844/failed-to-attach-to-process-id-xcode
NSStringの行分割の落とし穴

NSStringを行分割したい。割とある気がします。
手っ取り早く回答が欲しい方は一番下へどうぞ。

しかしこの改行コードはくせ者であり、なかなか面倒な面がある。

まず最初に考えるのは

``` Objective-c
NSArray *lines = [string componentsSeparatedByString:@"\n"];
```

だが当然これはまずい。
なぜなら改行コードは一つではないからだ。
ではこれではどうだろうか

``` Objective-c
NSArray *lines = [string componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@"\r\n"]];
```

またもっとしっかりと書いて、

``` Objective-c
NSArray *lines = [string componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
```

一見すると良さそうに見えるが、これでも良くない。
なぜなら、@"aaa\r\nbbb"　などといった文字列がくると、
どうも @"aaa", @"", @"bbb"と３つに分割してしまうのだ。

じゃあ@""のは除外しちゃおう！
というのは非常によくない。
なぜなら除外すると、単なる改行だけの行もなかったことにされてしまうからだ。

するともはや自分で１文字１文字パースしていくしかないんじゃないかとすら思えてくる。

しかし、アップルのドキュメントはしっかり読むべきである。
ずばりなメソッドをつかうのが正解のようだ。

``` Objective-c
NSMutableArray *lines = [NSMutableArray array];
[string enumerateLinesUsingBlock:^(NSString *line, BOOL *stop) {
                [lines addObject:line];
            }];
```

もし行の途中でやめたくなったら *stop = YES; とポインタを通して通知すればいい。
これでめでたく解決である。
複数ユーザで同じセマフォを使う

// 別ユーザでカーネルオブジェクトにアクセスするとアクセスに失敗する。
// アクセス制限を default 設定(NULL)からFULLACCESSに(DACLを設定しない設定)に変更
// http://msdn.microsoft.com/en-us/library/aa379286(VS.85).aspx
SECURITY_DESCRIPTOR secDesc;
SECURITY_ATTRIBUTES secAttr;

// ユーザ制限を設けない設定
InitializeSecurityDescriptor (&secDesc, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&secDesc, true, 0, false);
secAttr.nLength = sizeof (SECURITY_ATTRIBUTES);
secAttr.bInheritHandle = FALSE;
secAttr.lpSecurityDescriptor = &secDesc;

// 1プロセスのみ許可
CSemaphore semaphore(1, 1, "Global\\TestSemaphore", &secAttr);
AWS SDK for RubyでS3のポートを指定する

サードパーティのS3 API互換ストレージにaws-sdkで繋ぎたい場合、エンドポイントはAWS.configで指定できるが、あくまで公式のS3に繋ぐ事が前提なのでポートまでは指定できない。
そこで、HTTP Handlerを使ってrequestのportを書き換えてやると、接続するポートを無理矢理変更する事ができる。

```ruby
require 'aws-sdk'

class Handler < AWS::Core::Http::NetHttpHandler
  Port = 8080

  def handle(request, response)
    request.port = Port
    super
  end
end

AWS.config({
  :access_key_id => "ACCESS_KEY_ID",
  :secret_access_key => "SECRET_ACCESS_KEY",
  :s3_endpoint => "localhost",
  :http_handler => Handler.new,
})
s3 = AWS::S3.new
```
Twitter Bootstrap: Thumbnailsでサムネイルが横に広がる問題を解決する



Twitter BootstrapのThumbnailsを使っていると、印刷時にサムネイルが横に広がって画面と全然異なる見た目になる場合があります。


###例
http://twitter.github.com/bootstrap/components.html#thumbnails

![enter image description here][1]


![enter image description here][2]


  [1]: http://i.stack.imgur.com/9dFcL.png
  [2]: http://i.stack.imgur.com/mosQX.png


これは`responsive.css`が悪さ(?)をしているせいです。
以下のように印刷時に`responsive.css`が取込まれないようにすれば、横幅が広がる問題は解決します。

````html
<link href="assets/css/bootstrap-responsive.css" rel="stylesheet">
↓
<link href="assets/css/bootstrap-responsive.css" rel="stylesheet" media="screen">
````

### twitter-bootstrap-railsを使っている場合
twitter-bootstrap-railsを使っている場合は、`bootstrap_and_overrides.less`にある、

````bootstrap_and_overrides.less
@import "twitter/bootstrap/responsive";
````

の行を削除、もしくはscreen専用のファイルに移動すればOKです。


### 背景が真っ黒になる問題への対処
また、背景色が真っ黒になる問題は、印刷時に適切な`background-color`があたるようにすれば、背景色を変えることができます。


###参考
この記事はStackOverflowで得られた回答を日本語に直したものです。
http://stackoverflow.com/questions/12955718/twitter-bootstrap-how-to-print-thumbnails-as-same-as-screen