OmniAICreator/Qiita-1.07M huggingface dataset:
下置きしたJavaScriptの更に下にページ固有のJavaScriptを書く

Railsで、画面表示高速化のためにJavaScriptファイルをHTMLの下の方に置く事はよくあります。
レイアウト側ではこんな感じになりますね。

```html+erb:application.html.erb
<html>
  <head>
    // CSSなど
  </head>
  <body>
    <%= yield %>
    <%= javascript_include_tag (/*ここでjQuery等をinclude*/) %>
  </body>
</html>
```

これだと個別のviewの中にJavaScriptを書いてしまうとその中でjQuery等を使えません。

```html+erb:application.html.erb
<html>
  <head>
    // CSSなど
  </head>
  <body>
    // ページ固有のview
    // 個別のviewにJavaScriptを書くとここに挿入される
    <%= javascript_include_tag (/*ここでjQuery等をinclude*/) %>
  </body>
</html>
```

jQuery等をincludeする前に個別viewのJavaScriptが読み出されてしまうのでライブラリその他が使えなくて不便です。

`assets/javascripts/hoge.js.coffee` に書けば良いんですが、そんな大仰な事をしたくないとか、Railsで生成するhtmlの中にそもそもモデルから取ってきたデータを埋め込みたい場合もあります。

そんな時はこんなふうに書くと良いです。


```html+erb:application.html.erb
<html>
  <head>
    // CSSなど
  </head>
  <body>
    <%= yield %>
    <%= javascript_include_tag (/*ここでjQuery等をinclude*/) %>
    <%= yield :inline_js %> <!-- ここにJSが挿入されるようになる -->
  </body>
</html>
```

```html+erb:hoge.html.erb
// ここに個々の本文
<h3>hoge</h3>
<div> 
 <p>
   ...
 </p>
</div>

<% content_for :inline_js %>
<script type="text/javascript">
<!--
  console.log("<%= @fuga %>"); // ViewなのでRailsのcontrollerから直接データを流し込める
// -->
</script>
<% end %>
```
chromeでjavaプラグインを利用するには

* [How to install Chrome browser properly via command line? - Ask Ubuntu](http://askubuntu.com/questions/79280/how-to-install-chrome-browser-properly-via-command-line)

```bash:debのダウンロード(64bit)
https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
```

```bash:debのダウンロード(32bit)
https://dl.google.com/linux/direct/google-chrome-stable_current_i386.deb
```

```bash:
sudo apt-get install -y fonts-liberation
sudo dpkg -i google-chrome-stable_current_*.deb
```

## Javaプラグインの追加

```bash:
$ sudo mkdir /opt/google/chrome/plugins
$ tar xzf jre-7u25-linux-x64.tar.gz
$ sudo ln -s /home/username/jre1.7.0_25/lib/amd64/libnpjp2.so \
  /opt/google/chrome/plugins/
```
vimでカーソル位置の行と列を強調表示する

vimで検索するとカーソルの位置を見失うことがあります。
そんなときは行や列を強調表示すると見やすくなります。

```vim:.vimrc
" 行を強調表示
set cursorline

" 列を強調表示
set cursorcolumn
```

![カーソル位置の行と列を強調表示](https://qiita-image-store.s3.amazonaws.com/0/8995/ed853d99-8e5e-1e89-084f-9f8c6f4a0ab2.png)

実際に使ってみると分かるのですが、常用すると強調表示が逆に邪魔になったり、描画も遅くてストレスになったりするのでmapでON/OFFを切り替えると使い勝手がよさそうです。

```vim:.vimrc
nnoremap <Leader>c :<C-u>setlocal cursorline! cursorcolumn!<CR>
```
MySQLで投票を集計してランキングを降順で取得する

タイトルの通り。

例： ポケモン人気投票
=============

`vote`テーブルの内容
------------------

実際は `pokemon_id` みたいに管理してると思うけど分かりやすさのために今回は名前そのままにしました

| id | pokemon | 
|:---:|:-----------:|
|  1 |  コイル     | 
|  2 |  コイル     | 
|  3 |  ピカチュウ  | 
|  4 |  コイル     | 
|  5 |  ピカチュウ  | 
|  6 |  コイル     | 
|  7 |  シェイミ     | 
|  8 |  コイル     | 
|  9 |  ギラティナ    | 

欲しい結果
-------------

```text
array(4) {
  [0]=>
  object(stdClass)#1 (2) {
    ["pokemon"]=>
    string(9) "コイル"
    ["sum"]=>
    string(1) "5"
  }
  [1]=>
  object(stdClass)#2 (2) {
    ["pokemon"]=>
    string(15) "ピカチュウ"
    ["sum"]=>
    string(1) "2"
  }
  [2]=>
  object(stdClass)#3 (2) {
    ["pokemon"]=>
    string(12) "シェイミ"
    ["sum"]=>
    string(1) "1"
  }
  [3]=>
  object(stdClass)#4 (2) {
    ["pokemon"]=>
    string(15) "ギラティナ"
    ["sum"]=>
    string(1) "1"
  }
}
```

SQL文
--------

**`SUM(1)`** が決め手。

```mysql
SELECT `pokemon`, SUM(1) AS `sum`
FROM `vote`
GROUP BY `pokemon`
ORDER BY `sum` DESC
```

PHPでどう扱うかに関しては下記を参照してください。

### [Qiita - PHPでデータベースに接続するときのまとめ](http://qiita.com/mpyw/items/b00b72c5c95aac573b71)
Objective-C:UITableViewCell上に配置したButtonのタップを感知する方法

**やり方**
カスタムセルを生成する際にaddTarget:actionでイベントを設定しておく。
UIEventからタッチした座標を取得して、その座標からどのセル(indexPath)なのかを取得できる(indexPathForControlEventメソッド部分)ので、それぞれのセルに合わせたボタン動作等を定義できる。

```objc:
#pragma mark - UITableViewData
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // CustomCellViewは別途定義してあるものとする
    CustomCellView *cell = [tableView dequeueReusableCellWithIdentifier:@"customCellView"];
    if (!cell) {
        cell = [[CustomCellView alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"customCellView"];
    }
    // イベントを付ける
    [cell.EventButton addTarget:self action:@selector(handleTouchButton:event:) forControlEvents:UIControlEventTouchUpInside];
    
    return cell;
}

#pragma mark - handleTouchEvent
- (void)handleTouchButton:(UIButton *)sender event:(UIEvent *)event {
    NSIndexPath *indexPath = [self indexPathForControlEvent:event];
    NSString *messageString = [NSString stringWithFormat:@"Button at section %d row %d was tapped.", indexPath.section, indexPath.row];
    UIAlertView *alert = [[UIAlertView alloc]
                          initWithTitle:@"Button tapped!" message:messageString delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
}

// UIControlEventからタッチ位置のindexPathを取得する
- (NSIndexPath *)indexPathForControlEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint p = [touch locationInView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:p];
    return indexPath;
}
```

**参考**
[Technology-Gym](http://tech-gym.com/2012/10/ios/1007.html "シンプルなカスタムセルの作り方とセル内のボタンへのイベント設定方法")
IT系イベントのまとめサイト

![スクリーンショット 2013-08-22 1.32.12 PM.png](https://qiita-image-store.s3.amazonaws.com/0/1232/ceafb9d1-c354-b5a2-5fcd-95827239d559.png)

IT系イベントのまとめサイトを作りました。
rails4のturbolinkが動いています。フィードバック貰えると嬉しいです。

http://eventboard.in/
ZIPファイルダウンロード＆展開をするPowerShellスクリプト

ネットから、ZIPファイルをダウンロードし、展開を行うPowerShellスクリプトを作ってみました。

```ps1:DownloadUnzipTest.ps1
# 当スクリプトのディレクトリ
$basedir = Convert-Path $(Split-Path -Path $MyInvocation.InvocationName -Parent)
Set-Location $basedir

# Webクライアントオブジェクト生成
$webClient = New-Object System.Net.WebClient

# ZIPファイルダウンロード
$srcUrl = "http://ftp.kddilabs.jp/infosystems/apache/ant/binaries/apache-ant-1.9.2-bin.zip"
$zipName = [System.IO.Path]::GetFileName($srcUrl)
$zipPath = [System.IO.Path]::Combine($basedir, $zipName)
Write-Output "ダウンロード開始 $srcUrl"
$webClient.DownloadFile($srcUrl, $zipPath)

# ZIPファイル展開
$sh = New-Object -ComObject Shell.Application
$unzipDirObj = $sh.NameSpace($basedir)
$zipPathObj = $sh.NameSpace($zipPath)
Write-Output "アーカイブ展開開始 $zipPath"
$unzipDirObj.CopyHere($zipPathObj.Items())

Write-Output "終了"
```
PowerShellスクリプト実行時の各種情報を出力してみる

PowerShellスクリプト実行時の各種情報を出力してみる。

```ps1:EnvOutputTest.ps1
$sep = "*" * 50

Write-Output $sep
Write-Output "カレントディレクトリ関連情報"
Write-Output $sep

Write-Output "`$pwd=$pwd"
#$tmp = Get-Location
#Write-Output "Get-Location=$tmp"
Write-Output "Get-Location=$(Get-Location)"

Write-Output $sep
Write-Output "コマンド実行情報"
Write-Output $sep

$MyInvocation
$basedir = Split-Path -Path $MyInvocation.InvocationName -Parent
$name = Split-Path -Path $MyInvocation.InvocationName -Leaf
Write-Output "当スクリプトの場所=$basedir"
Write-Output "当スクリプトの名前=$name"

Write-Output $sep
Write-Output "環境変数一覧"
Write-Output $sep
#cd env:
Push-Location env:
Get-ChildItem
Pop-Location

Write-Output $sep
Write-Output "システム日時"
Write-Output $sep
$date = Get-Date -Format "yyyymmdd"
$timestamp = Get-Date -Format "yyyymmdd-HHmmss"
Write-Output "システム日付=$date"
Write-Output "タイムスタンプ=$timestamp"
```
テンプレート手抜き版

テストとかに使う。
同じフォルダに jquery-2.0.3.min.js を置くこと。

```html:test.html
<!-- -*- coding: utf-8 -*- -->
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <script type="text/javascript" src="jquery-2.0.3.min.js"></script>
</head>
<body>
  <a href="http://jquery.com/">jQuery</a>
</body>
<script type="text/javascript">
  // ここに処理を記述する
</script>
</html>
```
CentOSでSymfony2をインストールする際、ICUライブラリのバージョンでつまづく

Symfony 2.3 をダウンロードし `php composer.phar install` すると以下のようなエラーが出ることがある。

```
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for symfony/icu v1.2.0 -> satisfiable by symfony/icu[v1.2.0].
    - symfony/icu v1.2.0 requires lib-icu >=4.4 -> the requested linked library icu has the wrong version installed or is missing from your system, make sure to have the extension providing it.
  Problem 2
    - symfony/icu v1.2.0 requires lib-icu >=4.4 -> the requested linked library icu has the wrong version installed or is missing from your system, make sure to have the extension providing it.
    - symfony/symfony v2.3.3 requires symfony/icu ~1.0 -> satisfiable by symfony/icu[v1.2.0].
    - Installation request for symfony/symfony v2.3.3 -> satisfiable by symfony/symfony[v2.3.3].
```

ICU ( International Components for Unicode ) ライブラリの4.4以上が必要だよ、と。

これは、CentOSでyumを使ったパッケージ管理をしている場合、`yum install php-intl` でインストールされるのは ICUの4.2のため。

なので、手動でICUの最新版をインストールし直す必要がある。

```bash:
# php-intlをアンインストール
yum remove libicu*

# ソースファイルを取得
wget http://download.icu-project.org/files/icu4c/51.2/icu4c-51_2-src.tgz
tar zxf icu4c-51_2-src.tgz 
cd icu/source/

# インストール
./configure
make
make install

# intlモジュールを再度インストール
pear install pecl/intl

# php_ini に追記
echo "extension=intl.so" > /etc/php.d/intl.ini
```

で、再度 `php composer.phar install` を実行
VMwareの下にあるWindowsにWiiリモコンを繋ぐ話

# 経緯

Windows用のゲームをしたかったので、MacのVMware Fusionの下に作ったWindows 7で起動して遊ぶことにした。僕はゲームパッド派なので、手近にあるゲームパッドとしてWiiリモコンとその[クラシックコントローラーPRO](http://ja.wikipedia.org/wiki/Wii%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9#.E3.82.AF.E3.83.A9.E3.82.B7.E3.83.83.E3.82.AF.E3.82.B3.E3.83.B3.E3.83.88.E3.83.AD.E3.83.BC.E3.83.A9PRO)を使ってゲームを行おうとしたが、Bluetooth接続のあたりがうまく行かなかった。

# Bluetoothデバイスの共有

VMware Fusionには _BluetoothデバイスをWindowsと共有_ なるチェックボックスがある。

![スクリーンショット 2013-08-24 16.58.23.png](https://qiita-image-store.s3.amazonaws.com/0/10815/74563c90-87c6-4271-3da5-b42bbf24cff9.png)

これにチェックを入れて、後はMacとWiiリモコンを繋げばそれでいいんじゃないかと思ったが、WiiリモコンがMac側に吸収されてWindowsからどうしても見えない。

# 解決法

## Bluetoothデバイスの共有を共有しない

まずは上記で示したBluetoothデバイスの共有を切る。するとUSBデバイスの一覧に _Apple Bluetooth USB Host Controller_ なるものが表示される。

![スクリーンショット 2013-08-24 17.02.07.png](https://qiita-image-store.s3.amazonaws.com/0/10815/9012453c-76ab-a854-9813-3e80fd134fec.png)　

これにチェックを入れると、ホスト（Mac）側ではBluetoothが使えなくなるが、ゲスト（Windows）側ではVMwareによる仮装デバイスではない、ガチのBluetoothデバイスが見えるようになる。

## ドライバのインストール

とはいっても、 _Apple Bluetooth USB Host Controller_ などというデバイスのドライバなどあるはずもなく、VMwareからも恐らく「ドライバがないのでBoot Campのやつを引っ張ってこい」といった警告が出る。それに従ってBoot Campのドライバ群をインストールしなければならない。
最新のBoot Camp Support Softwareは[5.0.5033](http://support.apple.com/kb/DL1638?viewlocale=ja_JP)だが、僕の環境ではインストールに失敗したので古い[4.0.4326](http://support.apple.com/kb/DL1636?viewlocale=ja_JP)をインストールした。
インストールすれば、再起動してWiiリモコンをペアリングすればいい。

![スクリーンショット 2013-08-24 17.17.49.png](https://qiita-image-store.s3.amazonaws.com/0/10815/bb2c376d-00fb-a594-d2fd-6954e88a1466.png)

こんな感じで接続出来ればOK。

# Wiiリモコンをゲームパッドへ

## GlovePIEとPPJoy

なんだか良く分からないけど、仮想的にゲームパッドをエミュレートする物体らしい。PPJoyは署名されてないドライバらしく、Windows 7のテストモードというものにしないとインストール出来なかった。
この二つについてはWeb上にたくさん資料があるので問題ないと思う。

# 結論

VMware Fusion + Wiiリモコンで快適なゲーム生活を。
SourceTreeでコミット出来なくなってしまったから利用するgitを変えたらOKの巻

なんかわからんけど、SourceTreeからコミットが失敗してしまう。

error: unable to create temporary file: File exists
error: Error building trees 

テンポラリ作るのに失敗してるらしい。
コミットをコマンドからなら成功している。

再インストールしてみたり、イロイロやってもよくわからなかった。どこかでgitのコマンドをコピーして入れ替えているような解説を見たのでもしやと思い環境設定でgitを探す。gitのバージョンの項目で、システムのgitを利用するように直したらOK。無事にコミット成功した。
Selenium@Rubyでgoogle検索履歴をエクスポート

google検索履歴って何かと便利なんだけど
エクスポートの機能がないからつまんない！！
というわけで自家製エクスポートスクリプト作りました

参考:
RubyでSeleniumを使ってスクレイピング - Qiita [キータ]
http://qiita.com/tomerun/items/9cb81d7a98150ff22f53

```
$ gem install selenium-webdriver
```
selenium-webdriverのインストールを忘れずに。


```ruby:google_search_history_backuper.rb
require 'selenium-webdriver'

driver = Selenium::WebDriver.for :firefox
driver.navigate.to 'http://history.google.com'

element = driver.find_element(:name, 'Email')
element.send_keys('user_name@gmail.com')
element = driver.find_element(:name, 'Passwd')
element.send_keys('********')

driver.find_element(:name, 'signIn').click

sleep(2) #ページの読み込みを待つために適度にsleep

div = driver.find_element(:name, 'edit').find_elements(:xpath, './div')
1.upto(div.length - 1){|i| p div[i].text }

driver.find_elements(:class, 'kd-buttonbar')[2].find_element(:xpath, './a').click

400.times{
	sleep(2)
	div = driver.find_element(:name, 'edit').find_elements(:xpath, './div')
	1.upto(div.length - 1){|i| p div[i].text }
	driver.find_elements(:class, 'kd-buttonbar')[2].find_elements(:xpath, './a')[1].click
}
```

もし途中で途切れた(一回目途中でログアウトしてた)ら、その中断したときのURLをコピーして

```ruby:
require 'selenium-webdriver'

driver = Selenium::WebDriver.for :firefox
driver.navigate.to 'https://history.google.com/history/lookup?hl=ja&start=0&fts=1352396234719116&lts=1352381671979288'

element = driver.find_element(:name, 'Email')
element.send_keys('user_name@gmail.com')
element = driver.find_element(:name, 'Passwd')
element.send_keys('********')

driver.find_element(:name, 'signIn').click

400.times{
	sleep(2)
	div = driver.find_element(:name, 'edit').find_elements(:xpath, './div')
	1.upto(div.length - 1){|i| p div[i].text }
	driver.find_elements(:class, 'kd-buttonbar')[2].find_elements(:xpath, './a')[1].click
}
```
にして再開。
URLがそのときの日付を指してるっぽい


課題
・途中でログアウトしてしまった時の再開を自動化したい
・フォーマット決められてないから、csvくらいに統一したい
AWS 用の Zend_Controller_Request

ELB経由だとSSL判定がアレなので上書き。

```php:Proxy.php
<?php
require_once 'Zend/Controller/Request/Http.php';

/**
 * My_Controller_Request_Proxy
 */
class My_Controller_Request_Proxy extends Zend_Controller_Request_Http
{
    /**
     * Is https secure request
     * @return boolean
     */
    public function isSecure()
    {
        return (parent::isSecure()
            || $this->getServer('HTTP_X_FORWARDED_PROTO') === parent::SCHEME_HTTPS);
    }
}
```

設定はBootstrapとかに書けばいいんじゃないかな。

```php:Bootstrap.php
$frontController->setRequest(new My_Controller_Request_Proxy());
```
メディア選択時に自分の投稿写真だけ表示する

メディアメニューの一覧画面での方法は、
　http://liginc.co.jp/programmer/archives/4054
に記載の方法で実現可能。

しかし、投稿画面の「メディアを追加」で開かれる写真選択画面では、どうも上記のブログのfilterでは効かないらしく、他ユーザの画像も表示される。

admin-ajax.phpから動的に取得した一覧が表示されるのだが、おそらくシーケンスがメディアメニューのシーケンスとは少し違うのでしょう。上記のブログで利用しているfilterは効かないらしい。

調べてみると、admin-ajaxでの検索の場合は、"pre_get_posts"に設定するとできるようで。

```php:
add_action( "pre_get_posts", "set_ajax_media_query" );

function set_ajax_media_query( $wp_query ) {
    global $current_user;

    if( $wp_query ->query_vars['post_type'] != "attachment" ) {
        return;
    }

    get_currentuserinfo();

    if( $current_user->roles[0] == "administrator" ) {
        return;
    }

    $wp_query->query_vars['author'] = $current_user->ID;
}
```

こんな感じで。$wp_queryは参照渡しなので、編集した内容はそのまま元の処理の中で使われる。

ただ、検索結果の数などには不整合が起きているので、その辺も含めて本当はなんとかしたいところ。
mogeneratorでARCに対応したコードを出力する

ARCではstructのなかに、NSString*とか、Objective-Cのメンバを入れると
``` ARC forbids Objective-C objects in structs or unions ```と怒られます。

mogeneratorで出力する際に、 ``` --template-var arc=true ``` をつけると、

```objc:
extern const struct HogeAttributes {
	__unsafe_unretained NSString *created_at;
	__unsafe_unretained NSString *identifier;
	__unsafe_unretained NSString *timeline_id;
	__unsafe_unretained NSString *updated_at;
	__unsafe_unretained NSString *user_id;
} HogeAttributes;
```
などと出力してくれるようです。

* 参考

[ARCでstructの中にObjective-Cインスタンスを入れると出るエラーの回避方法](http://dendrocopos.jp/wp/archives/27)

[MOGenerator clashes with ARC](https://github.com/rentzsch/mogenerator/issues/106)
IPythonのデバッガー(ipdb)の使い方

This is a copy of [Debugging with ipython and ipdb](https://docs.google.com/presentation/d/1c6BaV6T57z8UjkEd32xQErMtLT0fC-mZOCRaCcP7dcs/edit#slide=id.g16ad03df_0_37).


# Debugging with ipython and ipdb

### Make sure you have setuptools installed

- http://pypi.python.org/pypi/setuptools/
- Try to run `which easy_install`
- Should return something like: /usr/local/share/python/easy_install

### Install ipython and ipdb
- sudo easy_install ipython
- sudo easy_install ipdb
- Windows installers can be found here:
  * http://pypi.python.org/pypi/ipython
  * also install pyreadline: http://pypi.python.org/pypi/pyreadline/1.7.1

### Place a breakpoint in your code

```python
print 'Hello World!'
my_var = 10 / 3
import ipdb; ipdb.set_trace() # BREAKPOINT
print my_var
```

### Run your code

```python
python my_project.py
```

### Use ipdb

- ? for "help"
- ? s for "help for command s"
- l for "some more context"
- s for "step into"
- n for "step over"
- c for "continue to next breakpoint"

### Sample program with a bug

- http://bit.ly/buggy-class
- Download "buggy.py"
- Run the program: 
  * python buggy.py Django
- It should return the version of Django
- But it does not
- Place a breakpoint at line 45
- Step through it and fix it :)

### Hint: Use pprint

- import pprint
- pprint.pprint(some_variable)
英語では「0オリジン」「1オリジン」とは（あまり）言わない

配列の添字が0または1から始まることを日本では「0オリジン」「1オリジン」と言う<del>が、どうやらこれは和製英語らしい</del>。一般的に英語ではそれぞれ [zero-based, one-based](http://en.wikipedia.org/wiki/Zero-based_numbering) と言う。

「添字が0から始まるインデックス方式」は "[zero-based indexing](http://www.allwords.com/word-zero+based+indexing.html)"、「1から始まる添字を使った文字列アクセス」は "[one-based string access](http://msdn.microsoft.com/en-us/library/ms233801.aspx)" となる。

追記：zero-origin も使われているようだ。

- [zero-based index の検索結果、約170万件](https://www.google.co.jp/search?q=%22zero-based+index%22)
- [zero-origin index の検索結果、約3万件](https://www.google.co.jp/search?q=%22zero-origin+index%22)
「第13回オフラインリアルタイムどう書くの参考問題」をPHPで解く

http://qiita.com/Nabetani/items/89fb0e2e712d4b396535
http://nabetani.sakura.ne.jp/hena/ord13updowndouble/

「+1」「-1」「*2」だけで目的の数値を求めるという問題。
単純にやったら最短にならない場合があります。
単調減少：59→58→29→28→14→7→6→3→2→1→0(10回)
最短：59→60→30→15→16→8→4→2→1→0(9回)
どうすればいいんだろう？

```php:
<?php
	class MULTIPLY{
		
		/**
		* 0になる最短の回数
		* @param  int 「59」みたいな数値
		* @return int 「9」みたいな数値
		*/
		public function get($input){
			
			// 2013/08/25追加
			if($input < 4){ return $input; }
			
			// 偶数であれば2で割る、+1して4で割れれば+1する、それ以外は-1
			for($i=0;$input>4;$i++){
				$input = ($input%2) ? ( (($input+1)%4) ? $input-1 : $input+1 ) : $input/2 ;
			}
			// 3か4になったら2、1、0となるだけなので+3
			return $i+3;
		}
		
	}
	
	// テスト
	$test = [
		[59, 9],
		/* 省略 */
	];

	$multiply = new MULTIPLY();
	foreach($test as $key=>$data){
		$answer = $multiply->get($data[0]);
		if($answer !== $data[1]){
			print('えらー');
		}
	}
```

なんかできた。
試行錯誤で1時間くらい。

なお、このアルゴリズムが普遍のものなのか、今回たまたま動いてるだけなのかは知りません。
どこかの数学パズルか何かでこの解き方を見たような記憶があるのですが、探しても見つかりませんでした。
というかどんなキーワードでググれバインダー
「第6回オフラインリアルタイムどう書くの参考問題」をPHPで解く

http://qiita.com/Nabetani/items/4c60f10b73812e86441c
http://nabetani.sakura.ne.jp/hena/ord6lintersection/

L字型の領域をふたつ作り、重なった部分の数を算出するという問題。
一見めんどくさそうですが、実はL字じゃなくて長方形*2とみなせば余計なこと考えなくていいので楽。

```php:
<?php

	class INTERSECTION{
		
		/**
		* 面積を返す
		* @param  String 「23-94-28,89-06-51」みたいな文字列
		* @return String 「11」みたいな文字列
		*/
		public function get($input){
			// 10*10のマップ
			$map = str_repeat('0', 100);
			
			// 入力値を分割
			$input = explode(',', $input);
			$data1 = explode('-', $input[0]);
			$data2 = explode('-', $input[1]);
			
			// マップ埋め
			$map = $this->bury($map, $data1[0], $data1[1], 1);
			$map = $this->bury($map, $data1[0], $data1[2], 1);
			$map = $this->bury($map, $data2[0], $data2[1], 2);
			$map = $this->bury($map, $data2[0], $data2[2], 2);
			
			// 重複したところをカウント
			return (string)substr_count($map, '3');
		}
		
		/**
		* 長方形内部をビット和で埋める
		* @param String マップ
		* @param String 頂点の座標
		* @param String 対角線上の頂点の座標
		* @param int 埋める値
		* @return String マップをビット和で埋めたもの
		*/
		public function bury($map, $angle1, $angle2, $val){
			for($x = min( $angle1[0], $angle2[0] );$x <= max( $angle1[0], $angle2[0] ); $x++){
				for($y = min( $angle1[1], $angle2[1] );$y <= max( $angle1[1], $angle2[1] ); $y++){
					$map[(int)$x.$y] = $map[(int)$x.$y] | $val;
				}
			}
			return $map;
		}
	}
	
	// テスト
	$test = [
		['23-94-28,89-06-51', '11'],
		/* 省略 */
	];

	$intersection = new INTERSECTION();
	foreach($test as $key=>$data){
		$answer = $intersection->get($data[0]);
		if($answer !== $data[1]){
			print('えらー');
		}
	}
```

30分くらいで終わりました。
埋める部分の求め方がとっても力業なかんじがしますが、先日諦めたビット演算を今回はうまく使えたので満足です。

なお30分にはコメントとかは含んでいません。
ガガッと書いて30分で動いた、完成！としてから整形してJavadocとか書いてます。

それにしてもいくら読んでもこれが理解できぬ。
http://qiita.com/MikuriyaHiroshi/items/3e5a41cf4a6d758dcb66
AppleScript から potrace の呼び出し


AppleScript に拘る必要は無いのですけど、
アイコンの上にドロップすれば変換してくれます。

```applescript:potraceAS
--
-- potrace AppleScript
--
on main( listFile )
  local nConvertCount
 
  set nConvertCount to 0

  repeat with strApplePathname in listFile
    -- display dialog strApplePathname as string
    set strPOSIXPathname to POSIX path of strApplePathname
    do shell script "/Applications/potrace-1.11.mac-i386/potrace -k 0.5 -u 10 -t 2 -b pdf " & strPOSIXPathname
    set nConvertCount to nConvertCount + 1
  end repeat
 
  if nConvertCount > 0 then
    display dialog (nConvertCount as string) & " File(s) converted."
  end if
end main
 
--
on open dropFiles
  my main( dropFiles )
end open
 
--
on run
  set listFile to choose file with multiple selections allowed
  my main( listFile )
end run
Bottle を使用したウェブアプリケーション(1)


このところ javascript を使用する機会が多いのですが、たまに「ちょっとサーバー側にロジックが欲しいな…」と思うことがしばしばあったりします。

サーバーサイドに何らかの処理を行うのであれば、 PHP が何かと都合が良い気がしますけど、個人的使い慣れた C# か Python で何かないかな…ということで、 [Bottle](http://bottlepy.org/docs/dev/) を試してみることにしました。

同種のものに [CherryPy](http://www.cherrypy.org) というのがあり、こちらもかなり軽量なフレームワークだと思っていたのですが、 Bottle はもっと軽量です。（.py ファイルがひとつだけ）

```python:main_cherry.py
import cherrypy

class HelloWorld( object ):

    def index( self ):
        return "Hello World!"

    index.exposed = True
 
cherrypy.quickstart( HelloWorld() )
```

こちらが Bottle での記述。

```python:main_bottle.py
from bottle import route, run, template
 
@route('/')
def index():
    return 'Hello World!'
 
run( host = 'localhost', port = 8080 )
```

どちらも充分短いのですが、 Bottle は必要な Python ファイルがひとつだけで動作します。

----

> こちらの記事は[水凪工房](http://mizuvm01.cloudapp.net/wp/2013/05/13/1428/)の記事を Qiita に移植したものです。
JavaScriptクラスをきれいに書く

JavaScriptでクラスを書こう！という時、いろんな記事でいろんな書き方をしていて困ることがある。
(これくらい・・・ http://d.hatena.ne.jp/amachang/20060516/1147778600)
  
そんな時は、ここ、TypeScriptのサイトを参考にすると良い。  

http://www.typescriptlang.org/Playground/  
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/25990/98fbc910-719c-fdaa-c89a-1a8043779005.png)

左側にコードを書けば、右側にいい感じのJavaScriptを出力してくれる。TypeScriptがわからなくても、サンプルを見れば書き方は何となく想像がつくので問題ない。  
これで初めてクラスを書くときも安心だ。
nfsマウント

[ここが詳しい](http://www.asahi-net.or.jp/~aa4t-nngk/nfsv4.html)

# nfsサーバー側

```bash:インストール
apt-get install nfs-kernel-server
```

* [ArchLinuxでNFSサーバを建ててMacでマウント - Qiita](http://qiita.com/tukiyo3/items/be7fa7baea510b809d70)

## nfs設定

```bash:公開設定
$ sudo vim /etc/exportfs
/home/htdocs/public/wikitten/library	192.168.11.0/24(all_squash,rw,sync,no_subtree_check)
```

* all_squash ・・・ nobodyでアクセス
* rw ・・・ 読み書き許可
* sync ・・・ 変更内容をすぐにディスクに反映
* no_subtree_check ・・・ パフォーマンス的に設定しておいたほうがいいらしい。

```bash:設定反映
$ sudo /etc/init.d/nfs-kernel-server restart
```

```bash:公開状況確認
$ sudo exportfs 
/home/htdocs/public/wikitten/library
		192.168.11.0/24
```

nfsクライアント側
====

```bash:インストール
$ sudo apt-get install nfs-common
$ sudo mount -t nfs 192.168.11.3:/home/htdocs/public/wikitten/library /mnt/ -o hard,intr
```

* hard ・・・ サーバーが再起動した時などでもマウントを解除しない
* intr ・・・ nfsのファイルへのkillを有効にする？hardオプションと一緒に使う。


fstab
----

```bash:
192.168.11.3:/home/htdocs/public/wikitten/library  /home/user/wiki  nfs4 noauto,hard,intr  0 0
```


## umountが失敗する場合

> umount.nfs: 192.168.11.2:/var/log: not found / mounted or server not reachable

```bash:-fを使う
umount -f /mnt/nfs
```

## ルーターのWAN側にNFSサーバがある場合

```
sudo mount 222.222.111.111:/mnt/share/ a
```

> mount.nfs: access denied by server while mounting 222.222.111.111:/mnt/share/

* insecureオプションをつける。(1024番ポートより上の通信を許可)

```diff:/etc/exports
- /mnt/share	222.222.111.110(rw,no_subtree_check,no_root_squash)
+ /mnt/share	222.222.111.110(rw,insecure,no_subtree_check,no_root_squash)
```

```
sudo exportfs -rav
```

```bash:ポート番号確認
/usr/sbin/rpcinfo -p
```

# Macからマウント

* [OS X ハッキング! (14) OS XでNFSを利用する(2) | マイナビニュース](http://news.mynavi.jp/column/osx/014/)

```bash:
sudo mkdir /Volumes/nfs/cdrom/
sudo mount_nfs -P 192.168.11.99:/mnt/cdrom /Volumes/nfs/cdrom/
```
CCMenuITemを縦横等間隔に並べる

![menu_sample2.png](https://qiita-image-store.s3.amazonaws.com/0/21018/4688d334-2a8e-eebb-1de9-19842b7092f6.png)

cocos2d(cocos2d-x)でゲームのタイトルや設定画面などで重宝するメニュー用のクラス「CCMenu」ですが、複数の項目を使用する場合には上図のように縦か横に並べることがほとんどだと思います。
その際に手動で位置調整をしてもいいのですが、簡単な方法がありますので紹介したいと思います。

縦にCCMenuITemを並べる場合:  **alignItemsVerticallyWithPadding**
横にCCMenuITemを並べる場合:  **alignItemsHorizontallyWithPadding**

というそのまんまの名前のメソッドがありますので、これを使うことで自動で並べてくれます。
Paddingなしの「alignItemsVertically」「alignItemsHorizontally」もありますが、アイテム同士の間隔が詰まりすぎてしまうので、こちらを使う機会はあまりないと思います。

##cocos2d

```objc:cocos2d-menu-vertical.m
CGSize size = [[CCDirector sharedDirector] winSize];
CCMenu* menu = [CCMenu menuWithItems:itemStart, itemHowtoplay, nil];
menu.position = ccp(size.width / 2 , size.height / 2);
[menu alignItemsVerticallyWithPadding:32.0f];
```

```objc:cocos2d-menu-horizontally.m
CGSize size = [[CCDirector sharedDirector] winSize];
CCMenu* menu2 = [CCMenu menuWithItems:itemGameCenter, itemTwitter, itemFacebook, nil];
menu2.position = ccp(size.width / 2 , size.height / 3);
[menu2 alignItemsHorizontallyWithPadding:64.0f];
```

##cocos2d-x

```cpp:cocos2d-x-menu-horizontally.cpp
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
CCMenu*  pMenu = CCMenu::create(pStartItem, pStartRecord, pEtcGameItem, NULL);
pMenu->setPosition(ccp(winSize.width / 2, winSize.height / 2));
pMenu->alignItemsVerticallyWithPadding(30.0f);
```

ちなみに間隔を指定しない「alignItemsVertically」を使用した場合には下図のような感じになります。まあ、これはこれで悪くはないと思わなくもないですが、もうちょっと間隔を空けたいなぁと思ったら「alignItemsVerticallyWithPadding」を使うといいと思います。

![menu_sample1.png](https://qiita-image-store.s3.amazonaws.com/0/21018/d251d956-5d7e-8136-9ce6-7e4e1c8a0626.png)
grunt watch すると「Segmentation fault: 11」とエラーが出て止まってしまう場合

ハロー！grunt watch してますか？漏れるぐらいに便利ですよ！

さて、今日も元気に新しい案件用に grunt をインストールして、おもむろに grunt watch するんですが、どうしても「Segmentation fault: 11」というエラーが出て止まってしまうのです。grunt 入れ直したり、node をアップデートしたりしましたが、どうしてもダメ。

他のはできてるのになんで...と思って気づきました...。
あぁ...grunt 対象となるまでのフォルダ名に日本語が入ってたので、それをやめました。

ちゃんと grunt watch できるようになりました。

あﾞあﾞあﾞあﾞあﾞあﾞあﾞあﾞあﾞあﾞあﾞあﾞ！！！
Clonezilla使ってみた

内蔵SSD->内蔵HDD に60GBのデータをコピーしたところ15分かかった。
CDイメージは150MB程度。頻繁に更新されている。ubuntu13.04をベースとしたイメージもある。

バックアップ
============
1. 日本語 (キーマップは変更しない)
1. ディスク <--> イメージ
1. sshサーバをマウント
1. savedisk

リカバリ
========

HDDサイズは`blkdev.list`ファイルのSIZEと同じかそれ以上にすれば良い。

1. 日本語 (キーマップは変更しない)
1. ディスク <--> イメージ
1. sshサーバをマウント
1. restoredisk
    1. 「コピー先マシンのパーティションサイズに合うようにファイルシステムをリサイズ」にチェックを入れる！

![](http://www.seiai.ed.jp/sys/ntm2/images/clonezilla-opt-iso.png)

富士通のサーバーだとusbメモリからブート失敗する機種がある。
biosでusbのモードをhddに変えればよい。

ソフトウェアraidを認識しない場合はubuntu版のclonezillaを使うと吉
Vim から Kobito.app を便利に使う

[Kobitoと外部ファイルとの連携ができるようになった](http://blog.qiita.com/post/33354737755/kobito-version-up)ので，早速 Vim から便利に使えそうな vimrc の設定を書いてみました．

```vim
function! s:open_kobito(...)
    if a:0 == 0
        call system('open -a Kobito '.expand('%:p'))
    else
        call system('open -a Kobito '.join(a:000, ' '))
    endif
endfunction

" 引数のファイル(複数指定可)を Kobitoで開く
" （引数無しのときはカレントバッファを開く
command! -nargs=* Kobito call s:open_kobito(<f-args>)
" Kobito を閉じる
command! -nargs=0 KobitoClose call system("osascript -e 'tell application \"Kobito\" to quit'")
" Kobito にフォーカスを移す
command! -nargs=0 KobitoFocus call system("osascript -e 'tell application \"Kobito\" to activate'")
```

`:Kobito` とすると編集中の markdown ファイルを Kobito.app で開くことが出来ます．また，`:KobitoClose` とすると直接 Kobito.app を閉じることが出来，`:KobitoFocus` でいつでも Kobito.app にウィンドウフォーカスを移すことが出来ます．
これらのコマンドをよく使う人はキーマップを設定しても良いかもしれません．
Vim 側で行った変更は保存時に自動的に Kobito.app にも反映されるので，markdown プレビューとしてなかなか便利に使えそうです．
Enjoy Kobito.app!!

## スクリーンショット
![screenshot](http://gifzo.net/BMWQcwhjIkH.gif)
GitLab 6.0がリリース

主な変更点

1. グループ機能が大幅に改善
1. フォークプロジェクトからマージリクエストが可能
1. Webインターフェースでブランチ・タグの作成と削除が可能
1. ユーザーインターフェースを洗練し、多くの不具合を修正
1. 本バージョンより、有償のEE(Enterprise Edition)と無償のCE(Community Edition)に分離

[[詳細を表示](http://hiroponz.hateblo.jp/entry/2013/08/23/202651)]
eclipse初心者にもおすすめなプラグインを教えてもらうスレ

intelli jを使っているとidea単体で全部網羅すると期待してたのに、実際はphpstorm,pycharm,webstormと使い分ける必要があるとなげいて結局vimしか使っていなかったのですが、
eclipse4.3を試してみたら昔と比べてずいぶん動作が軽くなってるじゃない！

自分の編集しそうなリスト
----
* php,python,mysql,vimscript,css,javascript,html,shellscript,c#,objective-C,markdown,VBScript,各種設定ファイル,todo,issue書き込み,blockdiag系,android開発したいなぁ・・・

プラグイン一覧
----
|対象|名前|URL|
|:---|:---|:---|
| python | [pydev](http://pydev.org/download.html) | http://pydev.org/updates |

追記は使っていくうちにします。
GinnieにReVIEWエディタ機能を組み込む

といってもここにはコードを書いてないの。ゴメンね。詳しくはGithubにあげているスクリプトを設定して使うという感じになります。
GinnieはWindows用テキストエディタなのでWindows専用です。他のプラットフォームでもヒントくらいにはなるかも。

[少し前ブログに書いた記事](http://blog.onpu-tamago.net/entry/2013/08/12/215503)に関連しますが、Windows用のテキストエディタ、Ginnieの独自スクリプト実行機能を使って、GinnieにReVIEWエディタ機能を付け加えます。テキストエディタに要望する機能はどなたもきっと山ほどあるので、こうやって自分で勝手にスクリプトを書いて拡張出来るのは良いですね。

今のところは、ReVIEW形式テキストをコンパイルし、IEを起動していない場合はIEを新規起動し、IEがすでに起動しているときはその最後のタブで、コンパイルしたHTMLファイルを表示する という機能のみを実装しています。

## セットアップ手順
大体次のような感じです。

1.  [Cygwin](http://www.cygwin.com/)をダウンロードし、セットアップします。必須のツールはRubyのみです ~~(Windows用にもRubyのバイナリは配布されていますが、そちらのRubyだとReVIEWが動きません)~~ 2014/06/09現在のReviewバージョンでは、Windows用のRubyバイナリでも動くようになっています。
1. Cygwinをインストールしたフォルダのbinフォルダにパスを通します。たとえば「C:\cygwin」にCygwinをインストールした場合は「C:\cygwin\bin」を環境変数PATHに追加します。
1. [Ginnie](http://ginnie.kntware.net/)をインストールします。自分はシェアウェア版を使用していますが、たぶんフリー版でも大丈夫だと思います。
1. Githubの自分のリポジトリより、[ReVIREのスクリプト一式をチェックアウト](https://github.com/TakamiChie/review)します(一応Windowsのコマンドプロンプトから直接コマンドが呼び出せるように、修正しています)。
1. チェックアウトしたReVIEWのbinフォルダにパスを通します(たとえば「C:\review\」にreviewをチェックアウトした場合は、「C:\review\bin」を環境変数PATHに追加します)。
1. Githubの自分のリポジトリより、[ginnie-scriptsをチェックアウト](https://github.com/TakamiChie/ginnie-scripts)します。
1. ginnie-scriptsのスクリプトをGinnieのスクリプトフォルダにコピーします。
1. ginnie-scriptsのSyntaxフォルダの中身のファイルを、GinnieのSyntaxフォルダにコピーします。
1. Ginnieの設定より、ginnie-scripts内のScriptRunner.jsをスクリプトに登録します。

## 使い方

今後機能を追加予定。多分どの機能も、「エディタモードがReVIEW形式になっていること」が起動条件になります。

### ScriptRunner.js
ファイルをコンパイルしてHTMLに変換したあと、それをIEで表示します。出力ファイルはoutput.html固定です(もしすでにファイルがあった場合、問答無用で上書きしますのでご注意ください)。

## 今後の予定
* <del>設定用YAMLファイルがあったら読み込む</del> → a51326eで実装しました
* epubmakerを実行する
* pdfmakerを実行する
* 一部構文の入力支援を行う(メニュー表示)
* スタイルシートなどを編集中にScriptRunner.js実行したとき、関連するReVIEW形式テキストをコンパイルして実行する
windows7のOS領域バックアップ・復元のメモ

windows8でも同じようにできるんじゃないかな。
windowsRT(surface)では必須の知識。

準備
====

バックアップ
----
バックアップ作成するには、2つ目のHDDが必要。
またそのサイズは、現在のディスク使用量と同程度のものが必要となる。
バックアップ完了後、復元用起動DVDを作成するか聞いてきます。
OSインストールDVDがあれば不要ですが、ない場合は作る必要があります。

復元
----
復元は、バックアップを作成した時のパーティションサイズ以上のディスクが必要。
バックアップの際はパーティションサイズを縮めておいたほうがよいかも。

復元の仕方
====
windows7のインストールDVDを挿入し、システムの復旧を選択。
自動でバックアップを認識するため、復元を行う。
HDDの領域はすべてフォーマットされ、新たにパーティショニングされます。(オプション選択可)

感想
====
復元の際、OS再セットアップみたいなものかと思い込み敬遠していたが、
どうやら一般的なリカバリツールでバックアップ・復元を行うのと同じ具合になる様子。

長所
====
オンラインバックアップが出来て便利かもしれない。
最初っからインストールされているので、ある程度自分の環境ができたらバックアップ作るといいと思います。
.ssh/config から必要な設定だけ表示する zsh 関数

とりあえずコードを先に。

```zsh:.zshrc
# ssh config
function ssh-config {
    sed -n "/$1/,/^$/p" ~/.ssh/config
}
```

大量の .ssh/config 設定から必要なサーバーのアクセス情報だけ読みたいわけで。

```:.ssh/config
Host server1
    HostName xxx.xxx.xxx.xxx
    User xxx
    IdentityFile xxxx

Host server2
    HostName xxx.xxx.xxx.xxx
    User xxx
    IdentityFile xxxx
```

設定は空行で区切っておく。
ホスト名を引数に入れて実行。

```shell-session:
$ ssh-config server2

Host server2
    HostName xxx.xxx.xxx.xxx
    User xxx
    IdentityFile xxxx
```

便利なユーティリティとかないですかね？
[mac] ruby2.0にcapybara-webkitをインストールした時にはまったのでメモ

## ローカル環境
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.4.1]

## インストール
capybara-webkitにはqtが必要なのでmacportでインストールした後、
capybara-webkitインストールする。

``` command
$ sudo port install qt4-mac  
$ gem install capybara capybara-webkit
```

しかし、capybara-webkitで下記エラーが発生した。

```
/usr/bin/clang++ -c -include webkit_server -pipe -O2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.8 -Wall -W -DQT_NO_DEBUG -DQT_WEBKIT_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/opt/local/share/qt4/mkspecs/macx-g++ -I. -I. -I/opt/local/Library/Frameworks/QtCore.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtNetwork.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtGui.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtWebKit.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtWebKit.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtGui.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtNetwork.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtCore.framework/Versions/4/Headers -I/opt/local/include -F/opt/local/Library/Frameworks -F/opt/local/lib -o Version.o Version.cpp
error: unable to read PCH file webkit_server.gch: 'Is a directory'
make[1]: *** [Version.o] Error 1
make: *** [sub-src-webkit_server-pro-make_default-ordered] Error 2
Command 'make' failed

make "DESTDIR="
cd src/ && make -f Makefile.webkit_server 
/usr/bin/clang++ -c -include webkit_server -pipe -O2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.8 -Wall -W -DQT_NO_DEBUG -DQT_WEBKIT_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/opt/local/share/qt4/mkspecs/macx-g++ -I. -I. -I/opt/local/Library/Frameworks/QtCore.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtNetwork.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtGui.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtWebKit.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtWebKit.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtGui.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtNetwork.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtCore.framework/Versions/4/Headers -I/opt/local/include -F/opt/local/Library/Frameworks -F/opt/local/lib -o Version.o Version.cpp
error: unable to read PCH file webkit_server.gch: 'Is a directory'
make[1]: *** [Version.o] Error 1
make: *** [sub-src-webkit_server-pro-make_default-ordered] Error 2
```

macportによりインストールしたqtをアンインストールする。

``` command
$ sudo port uninstall qt4-mac  
```

http://qt-project.org/downloads#qt-other よりmac用の[パッケージ](http://download.qt-project.org/official_releases/qt/4.8/4.8.5/qt-mac-opensource-4.8.5.dmg)をダウンロードし、インストールする。

``` command
$  gem install capybara-webkit  
```

できあがり。
配列をfreezeしてpopしても例外をはかないChromeさんとは

夏も終わりに近づいてきて、少しずつ蚊などの虫も減ってきていますが、まだまだ世の中に生まれるバグは減りそうにありません。あらっきぃです。

##何があったの？

ChromeやNode.jsに用いられているV8の現在の実装は、`Object.freeze`を適用した状態の配列に対して、Arrayの破壊的なメソッド（`pop`, `push`, `splice`等）を呼び出しても`TypeError`例外が発生しません。FirefoxとかIE10だと例外なんだけど…。

どういうことなのかというと、

```js
'use strict'; //あってもなくても特に関係ない
var
arr = Object.freeze([1, 2, 3]);

console.log(arr.pop()); //=> Chromeだと3が返る。FirefoxだとTypeError
arr.push(4); //=> FirefoxだとTypeError
console.log(arr); //=> [1, 2, 3] （配列自身は変更されない）
```

と、コメントに書いたような事態になります。

これって仕様的（ES5）にまずいんじゃない？　って気がしたので[Stack Overflowで訊いてみたら](http://stackoverflow.com/questions/18200797/push-and-pop-on-a-frozen-array-in-chrome-not-throwing-an-exception)、案の定仕様に反しているとのことでした。

ぶっちゃけ、V8の`/src/array.js`の`pop`などの定義に、

```js:array.js
//417行目あたり
function ArrayPop() {
  'use strict';
  if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
    throw MakeTypeError("called_on_null_or_undefined",
                        ["Array.prototype.pop"]);
  }
  ...
```

と`'use strict'`を書くだけで`pop`とかで例外を吐くようになるんですけど、そう簡単にはいかないめんどくさい事情があるみたいです、V8の開発陣には。
大人しく仕様準拠すればいいものを…。

##何が問題なの？

これで何が問題なのかというと――って言うまでもないかと思いますが、`Object.freeze`を使うときはそのオブジェクトに対して破壊的な操作をされたくないときになります。なので当然、`pop`や`push`されたくないわけです。でもって、それが禁止されているなら、できることなら実行したときに教えてくれるとありがたいです。というか、意図して`Object.freeze`を使うぐらいですからそれを期待します。
ここからは例え話ですが、上のような意図をもって`Object.freeze`を使ったライブラリを作ったとします。そのことをライブラリの作成者はうっかりリファレンスに記述し忘れて、利用者はそのことを知りません。となると、利用者はそれが普通に配列であると信じて`pop`や`push`を行うかもしれませんが、Chromeさんは困ったことにその配列を変更しようとしても例外を吐かず、しかも配列が変更されていないというかなり不可解な事態に陥ってしまいます。これって知らないとすぐには気付けないバグになりますよね。

##締め

こういうことって知らないと割と悩む原因になるので、僕みたいに時間を無駄にする人が後生に現れ無いようにと書いてみました。あとStack Overflowで訊いたら「英語を読みやすく直してやったよ」と言って質問の内容を書き改められたのが衝撃的でした。

それではっ。

- - -

##参考

  * [Object.freeze - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze)
yum のリポジトリ追加メモ



``` コマンド
# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
```
pacoをインストールする方法・使い方めも


Pacoとは、ライブラリ管理するツールです。

``` ツールインストールメモ
# wget http://sourceforge.net/projects/paco/files/paco/2.0.9/paco-2.0.9.tar.bz2/download
# tar xvf paco-2.0.9.tar.bz2
# cd paco-2.0.9
# ./configure --disable-gpaco
# make
# make install
```

2. nginx をpacoを利用してインストール・管理する

``` nginx
# ./configure 
#  make
#  paco -lD make install
```


3 pacoで管理しているライブラリ一覧

``` command
# paco -a
nginx-1.5.3
```

4 アンインストールする

``` command
# paco -r nginx-1.5.3
```
テンプレートで同時に変数をループさせる

Pythonのzip関数みたいなやつをテンプレート内で実現させます。

```py:
    fist_name_list = ["一郎", "秀樹", "英雄"]
    second_name_list = ["鈴木", "松井", "野茂"]
    temp_list = []
    for i, _ in enumerate(fist_name_list):
        temp_list.append({
            'fist_name': fist_name_list[i],
            'second_name': fist_name_list[i],
        })

    render_to_response(
        'test.html', 
        {'temp_list': temp_list,}
     )
```
```html:test.html
{% for fsname in temp_list %}
    {{fsname.fist_name}}
    {{fsname.second_name}}
{% endfor %}
```
Rails4のdatabase.ymlのファイル名を変更する

Rails4 では datbase.yml のファイル名は実際には `AppName::Application.config.paths["config/database"].first` の内容で管理されている。

例えば config/application.rb の中でこんな内容を書けば

```rb:
  if !Rails.env.production? && File.exist?(Rails.root + "config/database.local.yml")
    config.paths.add "config/database", with: "config/database.local.yml"
  end
```
config/database.local.yml が存在するときのみそちらを読むなんてことが可能。
grunt-initと同時に、npm install & bower installもやっちゃう


grunt-initで、ひととおりのファイルが全部scaffoldできるのは便利ですが、
そのあと```npm install```もしなくちゃいけないのが、ちょっとかったるいですよね。

そんなわけで、自分はこんなスクリプト書いて、npm installとついでにbower installも、一気にやってくれるようにしてます。

- https://github.com/fnobi/grunt-init-me/blob/master/lib/shellLines.js

(なお、このスクリプトはasyncに依存してるので、使う前にnpm installしてくださいw)

## つかいかた

こいつを、grunt-templateの /lib に置いて、template.jsでこんな感じに書くと、吉です。

- https://github.com/fnobi/grunt-init-me/blob/master/template.js


(↓だいぶ省略してます。正確なコードはgithubの方みてください)

```
var shellLines = require('./lib/shellLines');

exports.template = function (grunt, init, done) {
    init.process( {}, [
        init.prompt('name'),
        init.prompt('description')
    ], function(err, props) {
        // write package.json
        init.writePackageJSON('package.json', pkg);

        // write bower.json
        init.writePackageJSON('bower.json', bower);

        // npm install & bower install
        shellLines([{
            command: 'npm install',
            message: 'Installing npm dependencies'
        },{
            command: 'bower install',
            message: 'Installing bower dependencies'
        }], done);
    });
};
```

最後の部分、今回作った ```shellLines``` という関数に、
実行したいコマンドのリスト、(&その実行中に表示したいメッセージ)
を配列で渡すと、ひとつひとつ実行してくれます。全部終わるとdoneを実行。

ちなみに、```init.writePackageJSON```で、bower.jsonも書けちゃうというのも地味にポイントです。

## 出力

地味にこだわってるのは、出力の形式です。

![出力例](http://gyazo.com/e6ad4b48ce3d33312bf818f63e61314e.png)

↑のようなかんじで、他の「Writing …」とかと全くおなじ形式で、
経過を追いつつメッセージが出るようになっています。


## まとめ

こんなかんじで、 ```npm install``` や ```bower install``` 以外のshellコマンドも、grunt-init内で一気に実行できるようになっているので、

よろしければおためしください。 ```shellLines``` に渡す配列に、設定を足すだけです。

( ```grunt build``` とかをやっちゃうのもいいですね。)

## 2013/08/26 追記
shellLinesをnpm化しました。
```npm install shell_lines``` して、↑のサンプルコードと同様に使っていただければ!

- http://npmjs.org/package/shell_lines
- http://github.com/fnobi/shellLines
Sinatra::Application.environment に staging が追加できない

Sinatra::Application.environment に staging が追加できなくてもやもやしてたら

NG
--

~~~ruby
require 'sinatra/base'
require 'sinatra/config_file'

class MyApp < Sinatra::Base

  set :root, File.dirname(__FILE__)
  set :environments, %w{development test production staging}

  register Sinatra::ConfigFile
  config_file 'path/to/config.yml'

  get '/' do
    settings.hello
  end

end
~~~

OK
--

~~~ruby
require 'sinatra/base'
require 'sinatra/config_file'

class MyApp < Sinatra::Base

  register Sinatra::ConfigFile

  set :root, File.dirname(__FILE__)
  set :environments, %w{development test production staging}

  config_file 'path/to/config.yml'

  get '/' do
    settings.hello
  end

end
~~~

orz
うそやん......

ちなみに、NGのほうをそのまま実行すると

~~~
undefined method `hello' for MyApp:Class (NoMethodError)
~~~

的なエラーメッセージになります。。
FlexSlider を CSS フレームワークで使用するときの問題と修正方法

※Pure の letter-spacing がおかしくなるケースは
使用方法に問題があり、表示が乱れていました。
ここに書いてある回避方法は必要ありませんでした。

#概要
FlexSlider を CSS フレームワークで使用した場合、スライドショーを前へ、次へとするめる、
directionNav の表示がおかしくなりました。

FlexSlider の directionNav は、Web フォントを利用して、文字でナビゲーションの矢印を表現しています。
文字で表現しているため、CSS フレームワークのスタイルが影響して表示がおかしくなっていたようです。

今回試した CSS フレームワークは次のとおり。

+ Bootstrap 2.3.2
+ Foundation 4.3.1
+ <del>Pure 0.2.1</del>

表示がおかしくなるケースは、2 パターンありました。

+ line-height がおかしくなるケース (Bootstrap、Foundation)
+ <del>letter-spacing がおかしくなるケース (Pure)</del>

#line-height がおかしくなるケース 

directionNav が表示される、
.flexslider > ul > li > a の line-height
の値が予期しない値になって表示が崩れていました。

原因はそれぞれ次のとおり。

bootstrap は、li タグの line-height を 20px に指定していました。

```bootstrap.css
li {
    line-height: 20px;
}
```

Foundation は ul タグの line-height を 1.6 に指定していました。

```foundation.css
ul,
ol,
dl {
  font-size: 1em;
  line-height: 1.6;
  margin-bottom: 1.25em;
  list-style-position: outside;
  font-family: inherit; }
```

この表示を修正するために、Bootstrap、Foundation の line-height をそれぞれ調整しました。

Bootstrap の修正例

```
.flexslider ul li {
    line-height: normal;
}
```

Foundation の修正例

```
.flexslider ul {
    line-height: normal;
}
```

最終的には a の line-height が問題なので、
Bootstrap、Foundation どちらとも

```
.flexslider ul li a {
    line-height: normal;
}
```

のように修正しても表示が正しくなります。

※以下の内容は、フレームワークの使用方法が間違っていたためにおこっていました。
   グリッドの指定に `<div class="pure-u-1-1">` としていましたが、
   正しくは、`<div class="pure-u-1">` でした。

#letter-spacing がおかしくなるケース

directionNav が表示される、
.flexslider > ul > li > a の letter-spacing
の値が予期しない値になって表示が崩れていました。

Pure では次のように letter-spacing を指定していました。

```pure-min.css
..pure-g-r {
    letter-spacing: -0.31em;
}
```

この表示を修正するために、次のようにしました。

```
.flexslider {
	letter-spacing: normal;
}
```

最終的には、.flexslider > ul > li > a の letter-spacing が正しい値になればよいので、
ul、li、a のいずれに `letter-spacing: normal;` を指定しても正しく表示されます。</del>


以上で、FlexSlider のスライドショーが Bootstrap、Foundation、Pure で正しく表示されるようになりました。
めちゃくちゃにコンフリクトしたファイルを一歩一歩マージする方法

あるファイルに大量のコンフリクトが発生し解決が面倒なとき、パッチを使ってファイルに1コミットずつ変更を適用する方法を示す。この方法のメリットは：

- ファイルへの変更を1コミットずつ適用・コンフリクト解決することができる
- それぞれのコミットを適用する前に、コミットをパッチファイルの形で編集できる
- 注目するファイル以外への変更をいったん無視し、そのファイルに関係する変更に集中できる

の3点である。複数コミットの変更が混ざった大量のコンフリクトマーカーを手作業で消すような状況に陥ったとき、この方法を使えばいくぶんかは楽にマージ作業を進められる。

# 概要

マージ中に特定のファイルに大量のコンフリクトが起きたら、マージを中止する。一時作業用ブランチを作り、そのファイルに1コミットずつパッチを当てて編集する。パッチを当て終わったらマージをやり直し、コンフリクト解決作業中に、コンフリクトしたファイルを一時作業用ブランチからチェックアウトしたファイルで置き換える。

# やりかた

次のようにマージを実行したとき、 Foo.h, Foo.m に多くのコンフリクトが発生したとする。

```
$ git checkout master
$ git merge dev
# Foo.h, Foo.m に大量のコンフリクトが発生
# 他のファイルには比較的簡単なコンフリクトが発生
```

まず merge を中止する。

```
$ git merge --abort
```

現在のブランチから新しい作業用ブランチを切り、そのブランチに移る。

```
$ git checkout -b work
```

取り込もうとしているブランチから Foo.h, Foo.m に関係するコミットだけをパッチファイルに書き出す。 （補足：以下のコマンドで、 `..dev` は「`dev` から到達可能だが `HEAD` から到達可能でないコミット」、言い換えれば「両者が分岐した以降、 `dev` にのみ含まれるコミット」を表す。 `--histogram` は diff アルゴリズムを histogram diff に切り替える。場合によるが、デフォルトのアルゴリズムより読みやすいパッチを生成する）

```
$ git format-patch --histogram ..dev -- Foo.h Foo.m
0001-Edit-Foo.patch
0002-Another-change-to-Foo.patch
```

必要なら適用する前にパッチを手作業で編集する。ここで不要な変更を取り除くなどしておく。

```
$ vim *.patch
```

`git apply -3` でパッチを順に適用する。1つ前のステップでパッチの行数が変わるような編集を行ったなら、`git apply` に `--recount` オプションを与える。作業用ブランチは後で削除するのでコミットメッセージは適当でよい。（補足： `git apply` に `-3` オプションを与えると 3-way merge を実行する。 `--recount` オプションを与えると、パッチに含まれる行数のヒントを無視する）

```
$ git apply -3 0001-Edit-Foo.patch
# コンフリクトを解決
$ git commit -m "Tmp 1"

$ git apply -3 --recount 0002-Another-change-to-Foo.patch
# コンフリクトを解決
$ git commit -m "Tmp 2"
````

すべてのパッチを適用した時点で、作業用ブランチ内の Foo.h, Foo.m は必要な変更をすべて取り込んだ状態になる。

パッチファイルを削除してから、先ほど中止したマージをやり直す。

```
$ rm *.patch
$ git checkout master
$ git merge dev
# ここではまだ Foo.h, Foo.m にコンフリクトが発生する
```

作業用ブランチからコンフリクト解決済みの Foo.h, Foo.m をチェックアウトする。チェックアウトしたら作業用ブランチは削除してよい。

```
$ git checkout work -- Foo.h Foo.m
$ git add Foo.h Foo.m
$ git branch -D work
```

適宜その他のコンフリクトを解決し、マージを完了する。

```
# コンフリクトを解決
$ git add -u
$ git commit
```

# Tips

上では「現在のブランチから作業用ブランチを切り、その上に取り込もうとしているブランチの変更を適用」するとしたが、変更の量によっては「取り込もうとしているブランチから作業用ブランチを切り、その上に現在のブランチの変更を適用」してもよい。注目するファイルに対して変更量が多い・変更の内容が複雑なブランチをベースに作業用ブランチを作ると、取り込むべきパッチの量が減り、作業が楽になる。
RailsのAsset Pipelineで、precompileするファイルを増やす

Railsはデフォルトでは、`application.css`と`application.js`をコンパイルします。
が、例えばIEの場合、[CSSが肥大化し過ぎて読み込みきれなかったり](http://marc.baffl.co.uk/browser_bugs/css-selector-limit/)することがあるようです。
確か4096とかだとか何だとか。

で、CSSを分割して回避しよう、というところにぶつかるわけです。
そんなとき、どうやってコンパイルするファイルを増やすのか。
ぶっちゃけめっちゃ簡単で、↓みたいにするだけです。

```rb:config/application.rb
Hoge::Application.configure do
  config.assets.precompile += %w(hoge.css)
end
```

こうすると、`hoge.css`もコンパイル対象になるので、`application.css`と同じように書いてあげれば、新しいファイルが生成されます。

これを応用すれば別のEngine用のCSSなんかも、本体と切り離して生成できたりします。ちょうべんり。
NSURLCredentialStorage 内の認証情報を全部消す


```objc:NSURLCredentialStorage+Reset.m
- (void)removeAllCredentials
{
  NSURLCredentialStorage* credentialStorage = [NSURLCredentialStorage sharedCredentialStorage];
  NSDictionary* credentials = [credentialStorage allCredentials];
  for (NSURLProtectionSpace* space in credentials) {
    for (NSURLCredential* cred in [[credentials objectForKey:space] objectEnumerator]) {
      [credentialStorage removeCredential:cred forProtectionSpace:space];
    }
  }
}
```

カテゴリ拡張にした。

https://gist.github.com/laiso/6316956

```objc:AppDelegate.m
#import "NSURLCredentialStorage+Reset.h"

 [[NSURLCredentialStorage sharedCredentialStorage] removeAllCredentials];
```

<script src="https://gist.github.com/laiso/6316956.js"></script>
gtm-oauth2でサインイン時エラーになる現象の回避


GoogleのOAuth2ライブラリ「[gtm-oauth2](https://code.google.com/p/gtm-oauth2/)」ですが、なぜかログインでエラーになります。
（自分の環境だけかもしれませんが）

```html:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString unsignedLongValue]: unrecognized selector sent to instance 0x71ae470'
```

コードを追いかけていたらここでエラーになっているのがわかりました。

```objc:GTMOAuth2Authentication.m
- (void)updateExpirationDate {
  NSDate *date = nil;

  // NSNumber *expiresIn = self.expiresIn;
  NSNumber *expiresIn = @86400;

  if (expiresIn) {
    // ここでエラーになっていた
    unsigned long deltaSeconds = [expiresIn unsignedLongValue];
    if (deltaSeconds > 0) {
      date = [NSDate dateWithTimeIntervalSinceNow:deltaSeconds];
    }
  }
  self.expirationDate = date;
}
```
上記のように、[expiresIn unsignedLongValue] でエラーになっていたのですが、expiresInの中身が「86400」だったので直接入力したらエラーを回避することができました。

もっとちゃんとした回答があると思うのですが、ひとまずの回避法ということで。
ご存じの方は情報くださいませ。
Missing context for method declaration

タイトルのエラーが出たので備忘録

以下を参考にする事でかいけつ
http://onno.jp/dev/2012/08/ios-missing-context-for-method-declaration-missing-end.html

原因は

```objc:
@implementation hoge

#import huga.h
...
@end
```

のimportの位置が悪い


```objc:
#import huga.h
@implementation hoge
...
@end

```

でかいけつ