OmniAICreator/Qiita-1.07M huggingface dataset:
CoreNLPのダウンロードから利用のメモ

###CoreNLPとは
http://nlp.stanford.edu/software/corenlp.shtml
で公開されていて，*tokenization，sentence splitting，POS tagging，lemmatization，NER，syntactic parsing，coreference resolution* が全て入った無料ツール．
coreference resolutionが現在のstate of the artと言える．

###ダウンロード

```bash
wget http://nlp.stanford.edu/software/stanford-corenlp-2012-05-22.tgz
```

###解凍

```bash
tar xvfz stanford-corenlp-2012-05-22.tgz
```

さぁ使うぞと思ったら「PosTaggerのモデルが無い」と．はい．

```bash
jar -xvf stanford-corenlp-2012-05-22-models.jar
```

###使い方

```bash
java -cp stanford-corenlp-2012-05-22.jar:xom.jar:joda-time.jar -Xmx3g edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner,parse,dcoref -file input.txt
```


`-annotators tokenize,ssplit,pos,lemma,ner,parse,dcoref`
はoption．どこまでやるか．defaultは全て．

アウトプットは`input.txt.xml`
10秒程度で出力された．もう少し長い文章でも30秒で完了．
Blocksの遅延実行 - performBlock: afterDelay:

NSObject のカテゴリあたりに。

```objective-c
/*!
 * @method performBlock:afterDelay:
 */
- (void)performBlock:(void (^)(void))block afterDelay:(NSTimeInterval)delay {
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC), dispatch_get_current_queue(), block);
}

/*!
 * @method performBlock:withObject:afterDelay:
 */
- (void)performBlock:(void (^)(id obj))block withObject:(id)object afterDelay:(NSTimeInterval)delay {
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC), dispatch_get_current_queue(), ^{block(object);});
}

```



参考

* http://cocoadays.blogspot.jp/2010/08/blocks.html
* http://stackoverflow.com/questions/4139219/how-do-you-trigger-a-block-after-a-delay-like-performselectorwithobjectafter
iPhoneでバイブレーションを動かす

以下のが一番楽らしい

```
#import <AudioToolbox/AudioToolbox.h>

if([[UIDevice currentDevice].model isEqualToString:@"iPhone"]) {
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
}
```
see
http://stackoverflow.com/questions/4724980/making-the-iphone-vibrate
MongoDB周りのメモ


# 接続
```bash:mongo
mongo ホスト名/DB名
```

# DB一覧
```JavaScript:mongo
show dbs;
```

# コレクション一覧
```JavaScript:mongo
show collections;
```

# 条件付きで取得
- where AAA = BBB

```JavaScript:mongo
db.access_log.find({code: 200});
```

- where AAA = BBB and CCC = DDD

```JavaScript:mongo
db.access_log.find({code: 200, method: "GET"});
```

- where AAA in (BBB, CCC, …)

```JavaScript:mongo
db.access_log.find({code: {$in: [200, 300, 400]}});
```

な感じ

# 最新10件取得
```JavaScript:mongo
db.コレクション名.find().sort({_id: -1}).limit(10);
```
アクセスログ的な奴だったら時間で絞ると早い。

ISODateで今日の日付を入れて

```JavaScript:mongo
db.コレクション名.find({
  time: {$gte: ISODate("2012-06-28T00:00:00+09:00")}
}).sort({_id: -1}).limit(10);
```
どこでも使える git diff と git apply

[Git Advent Calendar / Jun.](http://qiita.com/advent-calendar/git) 28日目の記事です。27日目は[つるはしで過去を発掘する](http://qiita.com/items/94d62f3678e9abcac82a)でした。

## Git リポジトリの外で git diff / git apply
あまり知られていないことですが、 `git diff` と `git apply` は Git リポジトリの外でも使えます。普通の `diff` ではできない、バイナリファイルを含む2つのディレクトリの差分を取りたいときなどに重宝します。ちょっと試してみましょう。

```

$ mkdir dir1 dir2
$ echo foo > dir1/text
$ echo FOO > dir2/text
$ dd if=/dev/random of=dir1/binary bs=128 count=1
$ dd if=/dev/random of=dir2/binary bs=128 count=1

```

テキストファイルとバイナリファイルが入ったディレクトリを2つ作りました。普通の `diff` ではバイナリファイルの差分を取ることはできません。

`diff -u dir1 dir2`

```diff

Binary files dir1/binary and dir2/binary differ
diff -u dir1/text dir2/text
--- dir1/text   2012-06-28 16:48:32.000000000 +0900
+++ dir2/text   2012-06-28 16:48:32.000000000 +0900
@@ -1 +1 @@
-foo
+FOO


```

一方 `git diff --binary` を使うとバイナリを含むパッチが得られます。

`git diff --binary dir1 dir2`

```diff

diff --git a/dir1/binary b/dir2/binary
index ce195bd3098cc3b7d9ea45170ae98463d131b3fd..00bbd22890c313431de290904e113305ce99fcab 100644
GIT binary patch
literal 128
zcmV-`0Du1;k;Pa0+FuT5!>8TMElMN9Z%UuV(Tp}ptw)JgHb%ThC}#@j)Zg{X4(Yeg
zfX+xCRLKBQKgWDS#D)-z(mJ@gT8~;}Z92E(d}<vQnpTw)nl?Q%1;W-Hx;2^6xj!Ef
i%}<GnpBm$~xF>{|;42RdCI?2*JSg#nOx8E2B9vaYi#yZ+

literal 128
zcmV-`0Du20VOk!F$T*e~S4k_&Yxd->rZ+!pu9lyoZIANBsyQkVLw$$bmPV%?s!+3Z
zj+TZ0Zo#oxfc8Q;@cJ9WFkrKwbXtAZUnnJp4CR=73c}zSDZ-yYRl8vKd&M5Dy#gCJ
ib#HN7*JJ}YBj;`sg?r+$yBS;CFfHAu4B@J0>lBK%$37nb

diff --git a/dir1/text b/dir2/text
index 257cc56..bc56c4d 100644
--- a/dir1/text
+++ b/dir2/text
@@ -1 +1 @@
-foo
+FOO

```

このパッチは `git apply` で適用できます。もう `diff` と `patch` には戻れませんね。


## Git リポジトリの中で git diff / git apply
さて、 **Git リポジトリの中**にあるファイルやディレクトリの差分を取るには少し工夫が必要です。 `git diff --binary HEAD:dir1 HEAD:dir2` のようにコミットを明示するか、  `git diff` に `--no-index` オプションをつけてインデックスを無視します。

```

### Git リポジトリの外では普通に差分が取れる
$ git diff --binary dir1 dir2
diff --git a/dir1/binary b/dir2/binary
# （略）

### リポジトリを作ると——
$ git init .; git add .; git commit -m "commit"

### 差分が取れない
$ git diff --binary dir1 dir2
# （何も出力されない）

### コミットを明示すればいい
$ git diff --binary HEAD:dir1 HEAD:dir2
diff --git a/dir1/binary b/dir2/binary
# （略）

### --no-index を使ってもいい
$ git diff --no-index --binary dir1 dir2
diff --git a/dir1/binary b/dir2/binary
# （略）

```

また、こうして作ったパッチを Git リポジトリの中で適用するには、 `git --git-dir= apply ...` とします。`git` と `apply` の間にオプションを書くことに注意してください（ `apply` の後ではありません）。

```
### Git リポジトリの中で dir1 と dir2 の差分を取って、
### dir1 に適用したい
$ git diff --no-index --binary dir1 dir2 > patch
$ cd dir1

### 元々の text の中身は "foo"
$ cat text
foo

### 普通に git apply してもパッチは当たらない
$ git apply -p2 ../patch
$ cat text
foo

### --git-dir= をつけるとパッチが当たる
$ git --git-dir= apply -p2 ../patch
$ cat text
FOO

```

`git --git-dir= apply` は、パッチに含まれるコミット情報を無視することができて便利です。たとえば、無関係な2つの Git リポジトリの一方でパッチを作り、もう一方に適用することができます。また、 `git format-patch` で作ったパッチを、コミットを作らずに適用したいときにも使えます。
historyからワンライナーを晒すシリーズ

多分、svn の trunkで作業してたら、
やっぱりブランチを切りたくなって
ブランチを切った後に、作業状態のファイルをまとめて、
そのブランチへコピーした時のワンライナー

```
svn stat trunk | perl -anle 'my ( $from, $to ) = ( $F[1], $F[1] ); $to =~ s#trunk#branches/[branch_name]#;  print `cp $from $to`;'   
```
logger.xxxx で .inspect を使うと １行でオブジェクトの中身を出力できる

毎回、to_s や @u.id, @u.name …と列記しなくても、
@hoge.inspect 一行で中身を全部出力してくれる


###コード例

```hoge.rb
 @u = User.find(1)  #id:1, name:test, create_at:2000-01-01 00:00:00
 logger.debug @u.inspect
```

###出力例

\#\<User id: 1, name: "test", create_at:"2000-01-01 00:00:00"\>


###環境

+ productionモード以外

###ログレベル

+ logger.fatal
+ logger.error
+ logger.warn
+ logger.info
+ logger.debug
写真を横にめくるタイプのUIのオススメ

標準の写真アプリみたいに横にめくっていくやつ、一番いいと思うのはnimbusに含まれているNIPhotoAlbumScrollViewかなと思う。
https://github.com/jverkoey/nimbus
http://docs.nimbuskit.info/interface_n_i_photo_album_scroll_view.html
懇親会を支える技術


色々足していきたい。お酒がある程度人数確定しないとダース買いできないなーと悩んでいるところ。

# pizza
4,5人分のピザで3500円とか

* http://www.dominos.jp/order/pizza/detail/86878/11001/633


# 寿司
5人前で6000円とか

* http://www.ginsara.jp/menu/kaga-5_1_detail.html

# ドリンク

* ソフトドリンク
	* ペットボトル1.5Lを5人で1本ぐらい？
	* KDDIの場合、後ろの自販機で買ってもらうとか？

* アルコール
	* http://www.kakuyasu.co.jp/ec/disp/CSfLastGoodsPage_001.jsp?GOODS_NO=10281&bid=rt_personal_rec_category
	* ビール24缶 4650円とか

* 飲みたい酒を買ってきてもらうのはどうか
アプリを自動で立ち上げてすぐに開発できるようにするシェルスクリプト(MacOS LionのMission Control対応)


このシェルは、コマンドを叩くだけで、いろいろアプリを立ち上げてすぐに作業に取り掛かれるようにするものです。がっつり自分向けにコーディングしてあるので汎用性はないです。

Mission Controlの複数デスクトップに対応しているので、デスクトップ１にはPhpStorm、デスクトップ２にはSkype、デスクトップ３にはSafariなど、デスクトップごとに起動するアプリを自分の中で決めている人向けです。

```bash:bootstrap.sh
#!/usr/bin/env bash

#-------------------------------------------------
# 関数
#-------------------------------------------------

# Mission Controlで右デスクトップに移動する
function switch_to_right_screen {
	osascript -e 'tell application "System Events" to tell process "WindowServer"
		key code 124 using control down
	end tell'
}

# Mission Controlで左デスクトップに移動する
function switch_to_left_screen {
	osascript -e 'tell application "System Events" to tell process "WindowServer"
		key code 123 using control down
	end tell'
}

#-------------------------------------------------
# 処理
#-------------------------------------------------

# Desktop1
open -a /Applications/PhpStorm.app
# PhpStormが遅いので、その間にいろいろやる
osascript -e "tell application \"Finder\" to set visible of process \"Hoster\" to false" # Hoster.appを隠す
sudo apachectl start # Apache起動
mysql.server start # MySQL起動
sleep 10

# Desktop2
switch_to_right_screen
sleep 1
open -a Toggl
sleep 1

# Desktop3
switch_to_right_screen
sleep 1
open -a Skype & open -a iCal # Skypeが遅いので非同期でiCalを立ち上げる
sleep 5

# Desktop4
switch_to_right_screen
sleep 1
open -a Safari
sleep 1

# Desktop5
switch_to_right_screen
sleep 1
open -a Mail
sleep 1

# Back to Desktop4
switch_to_left_screen
```
チェックボックスを全部チェックするJavaScript

JavaScriptコンソールで下記を流す。

```js
(function (){var inputs = document.getElementsByTagName('input');for(var i=0; ; i++){for (var j=0; j < inputs.length; j ++) {var e = inputs[j];if (e.type == 'checkbox')e.checked = true;}if(i < window.frames.length){try {inputs = window.frames[i].document.getElementsByTagName('input');}catch(e){}}else{break;}}})();
```
日付の比較


[NSDate compare:]を使って2つの日付を比較


```objectivec
    NSInteger result = [date1 compare:date2];
    switch (result) {
        case NSOrderedAscending:
            // -1
            // date1が前
            break;
        case NSOrderedSame:
            // 0
            // date1 == date2
            break;
        case NSOrderedDescending:
            // 1
            // date1が後
            break;
        default:
            break;
    }
```



現在時刻が、dateAとdateBの間となっているかチェック

```objectivec
    NSDate *now = [NSDate date];
    if ([now compare:dateA] == NSOrderedDescending && [now compare:dateB] == NSOrderedAscending) {
        return YES;
    }
    return NO;
```
MacのJavaScript Coreで標準入出力


Mac限定ですがメモ

```javascript:run.js

var global = this,
	stdin;

// stdin
stdin = (function () {
	
	var line	= "",
		stdin	= "";
	
	while (line = global.readline()) {
		stdin += line;
	}
	
	return stdin;
}());

// stdout
print(stdin);
```

実行は

```bash
$ alias jsc="/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc"
$ jsc run.js < infile.txt
```

でファイルの内容が表示されれば良し。
CentOS 5.7 に Jenkins を Install


## jenkins を Install

    % sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
    % sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
    % sudo yum install jenkins
    
上記の手順で

* /usr/lib/jenkins/jenkins.war が作成される
* 設定ファイル /etc/sysconfig/jenkins が作成される
* Jenkins のリポジトリ情報 /etc/yum.repos.d/jenkins.repo が作成される
* jenkins のリポジトリ情報 /etc/yum.repos.d/jenkins.repo.rpmnew が作成される

## /etc/sysconfig/jenkins を編集する
### PORT 番号の変更

    % sudo vi /etc/sysconfig/jenkins
    
    ## Type:        integer(0:65535)
    ## Default:     8080    
    ## ServiceRestart: jenkins 
    #
    # Port Jenkins is listening on.
    # Set to -1 to disable 
    #
    JENKINS_PORT="8080"
    
上記の JENKINS_PORT を任意の番号に変更する

### それ以外の設定

/etc/sysconfig/jenkins を読めばわかる

## Jenkins を起動する

    % sudo service jenkins start
    
## Jenkins にアクセスしてみる

http://localhost:8080 にアクセスする
Install済みアプリ一覧メモ

※全て無料

ISW11K
android ver 2.3.5

aNdClip Free
CliphWeather
DayWeekBarJapanese
DropBox
Evernote
FlickWnn
GOランチャーEX
IceGalaxy
MyVolume
PerfectViewer
TetheringWidget
アストロ
イーヂスラボアンチウィルス
ジョルテ
バスあと何分？
乗換案内
電話帳R
目覚まし時計Xtreme無償版
AngelBrowser
App2 SD Free
Automatic Task Killer
削除の達人
Battery Mix
Battery Widget
カーソルの位置を戻す

point-undoを使うと、カーソルが変なところに行ってしまっても元の位置にに戻すことができます。

インストールは、

`M-x install-elisp-from-emacswiki point-undo.el`

下記を設定ファイルに追加します。

```common-lisp:.emacs.d/init.el
(require 'point-undo)
(define-key global-map (kbd "<f7>") 'point-undo)
(define-key global-map (kbd "S-<f7>") 'point-redo)
```

`F7`を押すとカーソルが元の位置に戻ります。連続して押すこともできます。戻りすぎてしまった場合は、`S-F7`ことで戻ったのを戻すことができます。

## 参考
「Emacsテクニックバイブル」P115
android⇒外部mysql接続


mysql-connector-java-5.1.10-bin.jar
をビルドパスに追加

```sampleActivity.java
package mysql.jp;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class sampleActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
	    try {
	        //データベースに接続
	        Connection con = MySqlConnect.getConnection();
	        //ステートメントオブジェクトを作成
	        Statement stmt = (Statement) con.createStatement();

	        //SQL
	        String mySql = "select date from table;";
	        ResultSet rs = stmt.executeQuery(mySql);

            while(rs.next()) {
            	Toast.makeText(getApplicationContext(), rs.getString("date"), Toast.LENGTH_LONG).show();
            }

	        //オブジェクトを解放
	        rs.close();
	        stmt.close();
	        con.close();

	    } catch (Exception e) {

		}
        
    }
}
```




```MySqlConnect.java
package mysql.jp;

import java.sql.*;

class MySqlConnect{
  static Connection getConnection() throws Exception {
    //JDBCドライバのロード
    Class.forName("com.mysql.jdbc.Driver");
    //各設定
    String url = "jdbc:mysql://xxx.xxx.xxx.xxx/db_name";
    String user = "user_name";
    String pass = "password";
    //データベースに接続
    Connection con = DriverManager.getConnection(url,user,pass);
    return con;
  }
}
```


```AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
```
Titanuim 用 MVC フレームワーク「Alloy」を試してみる (1)


## Alloy とは？

[Alloy](https://github.com/appcelerator/alloy) は、Titanium の開発元である Appcelerator製の MVCフレームワークです。
Ruby on Rails のような仕組みを Titanium に提供してくれます。

Appcelerator によれば、Alloy は、下記の目標をもって開発されています。
（2012/6/10 現在、開発状況はまだ Unstable です）

> 
##### 生産性
Titanium のデベロッパーが生産的であることは重要です。そして生産的なデベロッパーは、より少ないコードを書きます。Alloy のゴールは、安定したアプリケーションを、生産的かつ素早く開発できるフレームワークを作ることです。
##### 保守性
Titanium アプリがきちんと保守され継続されることは重要です。最初に開発したデベロッパーだけでなく、チームのメンバーや、Titanium コミュニティのデベロッパーが、後から開発に容易に参加できるべきです。Alloy は、一度基本を習得さえすれば、誰でも参加し生産的になれるようなフレームワークです。
#####ベストプラクティス
Arroy が、きれいに分離されたアプリケーションデザインを提供することは重要です。Titanium のベストプラクティスをカプセル化し、Widgets と呼ばれる再利用可能な開発部品を提供します。
Javascriptで通信部分を共通化して書くときに注意すること


###問題
コールバックに関わるところに共通して使い回すと、コールバック関数が呼び出される前に上書きされたりして、上書かかれる側のコールバック関数が実行されないことがある。同期的な処理の場合は、並列処理をしない限り、こういうことはないはず。ノンブロッキングならではの問題のような気がしている。

###遭遇しやすい場面
複数のボタンがコールバックを伴う同じ関数を通っている場合に発生しやすい。たとえば、別のボタンを連続で押すと、最後のボタンのコールバックだけ実行されて、それ以外のボタンのコールバックが実行されなかったりする。

###対策
Ajax周辺のパーツを共通化して書く場合は、呼び出し時にちゃんとインスタンス化して独立したオブジェクトになるようにするか、無名オブジェクトにすればいいと思う。Javascriptはスコープがブロック単位ではなく、関数単位なので、そのあたりはけっこうミスりがちである。普段から破壊的操作をしないように(=なるべく副作用がない雰囲気で)書いた方がいいと思った。つまり無名オブジェクトで書くことが望ましい。[scala開眼](http://www.h7.dion.ne.jp/~samwyn/Scala/scalaindex.htm)の分散コンピューティング云々の話が少し見えたような気がした。

```coffee:無名オブジェクトの例(coffeescript)
#event
$('.btn').live 'click',()->
  (new Connect).request
    .call(new controller[$(@).attr('name')](@)) 
```

```上記の補足(coffeescript)
#connect
class Connect
  request:->
    @intro()
    @setup()
    #$.ajax(
    console.log [
      @url()
      @success
      @error
      @method()
      @param()
    ]
    #)
    @teardown()

#response
controller = {}
class controller.Base
  constructor:(dom)->
    @dom = dom
  intro:->
    console.log '-----this-----'
    console.log @
    console.log '-----dom------'
    console.log @dom
    console.log '--------------'
  setup:->'setup'
  url:->'/'
  success:->'success'
  error:->'error'
  method:->'GET'
  param:->{}
  teardown:->'teardown'

class controller.Comment extends controller.Base
  url:->'comment'
  success:->'comment success'
  error:->'comment error'
utf8 の端末で sjis の文字を grep する

```
grep `echo えすじす | nkf -s` *.txt | nkf -w
```

nkf で sjis の文字を作って、結果を utf8 に戻している

# git grep 


```
git grep `echo 'えすじす' | nkf -Ws` | nkf -w  | grep えすじす
```
rails serverコマンドで起動する時のデフォルトポートを変更する方法


rails serverでrailsを立ち上げるとデフォルトポートが3000となるが、複数のプロジェクトを同時に立ちあげたい時にポートがかぶってしまうので変更をするための方法。boot.rbに以下を追加する。

## 3001番ポートにする場合

```ruby:config/boot.rb
require 'rails/commands/server'
module Rails
  class Server
    def default_options
      super.merge({:Port => 3001})
    end
  end
end
```
qemu-nbdでconnect済みのdev一覧を取得するワンライナー

忘れそうなのでメモ。

loop deviceを扱うlosetupなどの場合には、losetup -a とかすれば使用中のdevice一覧が取れるので自動化しすいんだけど、qemu-nbdには使用中nbdデバイス一覧とかを取ってくるoptionがない。

それをごまかすためのワンライナー。環境によってちょっとpathとか違うかも。

```sh
for lock in `ls /var/run/lock/ |grep 'qemu-nbd-' | sort`; do echo /dev/`echo $lock |awk -F 'nbd-' '{print $2}'` ;done
```
MappingCharFilterFactory の使い方


## MappingCharFilterFactory とは

MappingCharFilterFactory　は Tokenizer が処理を行う前段階で、文字に対する処理を行うコンポーネントのひとつ。

文字（文字列）を別の文字（文字列）に変換することができる。

主な利用目的は検索対象文字列の揺れの吸収。

変換パターンは以下の例が考えられる。

	#半角→全角
	ｱ=>ア
	A=>Ａ
	#全角→半角
	イ=>ｲ
	Ｕ=>U
	#半角カナ二文字→全角カナ一文字
	ﾊﾞ=>バ
	#全角カナ一文字→半角カナ一二文字
	ビ=>ﾋﾞ
	#記号→全角カナ
	㍗=>ワット
	㌔=>キロ
	
上記の変換ルールをファイルに定義して利用する。

## MappingCharFilterFactoryの設定方法

### 設定項目
設定できる項目は、文字列変換ルールを記述したファイル（マッピングファイル）のみ

### schema.xmlの設定例

    <fieldType name= (略
      <analyzer>
        <charFilter class="solr.MappingCharFilterFactory" mapping="mapping.txt" />
        <tokenizer class="(略
      </analyzer>
    </fieldType>
    
### マッピングファイルの注意点
1. 文字コードはUTF-8
2. カンマが含まれるファイル名を指定する場合は \  でエスケープする
3. 変換前の文字列が重複しているとエラーになる

### マッピングファイルの書き方

1. 変換前の文字列と返還後の文字列をそれぞれダブルクォートでくくり、間に=>を記述する
2. 各行は次のパターンにマッチしていればよい 

		"(.*)"\s*=>\s*"(.*)"\s*$
3. \# から始まる行はコメント行
4. ファイルの文字コードはUTF-8で、変更はできない
5. BOMはあってもなくてもよい

6. エスケープ文字は以下のものが利用できる

		"タブ"=>"\t"
		"\r\n"=>"\n"
		"バックスペース"=>"\b"
		"円"=>"\\"
		"ユニコードあ"=>"\u3042"
NSLogでの%@で表示されるものを変更する


objective-cではログの出力時に、%@を使う事ができます。

これ、実はNSObjectのメソッドにより表示される物が決定されます。

```
-(NSString*)description
{
    return [NSString stringWithFormat:@"%ld/%ld",self.numerator,self.denominator];
}
```

このように、

```
-(NSString*)description
```

メソッドをオーバーライドしてやる事で%@での表示を変更する事ができます。

上のコードは、自作の分数クラスで実際に使用している物です。
分子と分母を 分子/分母 の形で表示するようにしています。

NSLog上に記述する時は、引数にはインスタンスの名前のみを記述してやればokです。

結構簡単なハックですが、意外と便利なので覚えておくと良いかと思います。
日付をローカライズしながらフォーマットも指定するdateFormatFromTemplate:options:locale

NSDateFormatterShortStyleを指定したけど12/6/28とか表示されてYearは要らないのにキー！となったらtemplateを試しましょう。日付の要素を指定しつつローカライズしてくれます。

```
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:[NSDateFormatter dateFormatFromTemplate:@"Md" options:0 locale:[NSLocale currentLocale]]];
NSLog(@"%@", [formatter stringFromDate:[NSDate date]]); // 6/28
```
```
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterShortStyle];
NSLog(@"%@", [formatter stringFromDate:[NSDate date]]); // 12/6/28
```
```
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"M/d"];
NSLog(@"%@", [formatter stringFromDate:[NSDate date]]); // 6/28は出力されるがフォーマットは他言語にローカライズされない
```
Ruby で今読み込んでいるファイルの行数を取得する

読み込んでいるファイルの行数は File#lineno を使えば取得できるのだが、けっこう忘れがち。

```text:data.txt
hoge
huga
piyo
```

```ruby
open("data.txt") {|f|
  f.each_line do |line|
    line.chomp!
    puts "#{f.lineno}: #{line}"
  end
}
# >> 1: hoge
# >> 2: huga
# >> 3: piyo
```

`f.lines.each_with_index` も使えなくはないが、こちらは1行目を0と数えるので適宜使いわけるといい。

行数取得のために一時変数をループの度にインクリメントしていたような人は是非覚えておこう。
Twitter Bootstrap 風のキャレットの作り方

caret です。つまり、「▼」的なやつですが、Twitter Bootstrap ではこれを CSS だけで実現してたのでメモです。Twitter Bootstrap では dropdown メニューにつけてたりとかしてます。

    <b class="caret"></b>
    <style type="text/css">
    .caret {
      border-top:   solid 4px #000;
      border-left:  solid 4px transparent;
      border-right: solid 4px transparent;
    }
    </style>


これだけです。

スクリーンショット:
![caret](http://gyazo.com/f8ce662185239ed20587f9dd81f314cc.png)


 `border-top` を bottom にすれば上向きのやつをつくれるし、 `4px` のやつを大きくすれば大きな三角が作れるし、left/right を `#000` にして top と bottom を `transparent` にすると横向きのやつがつくれます。

どういう原理かは大きくして色をつけてみればよくわかる気がします。

      border-top:   solid 80px #000;
      border-left:  solid 80px #0f0;
      border-right: solid 80px #f00;
![caret color](http://gyazo.com/c5b693662bcc7b98f9c679ac840aece9.png)
UIImagePickerController実装


modalで呼び出すだけなら簡単で驚いた。

```Objective-C
// ボタン押してカメラ画面呼び出し
- (IBAction)pushedCameraButton:(id)sender
{
    // カメラついてるかチェック
    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        NSLog(@"Non camera...");
        return;
    }

    UIImagePickerController *pickerController = [[UIImagePickerController alloc] init];
    pickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
    pickerController.delegate = self;
    pickerController.allowsEditing = YES;
    [self presentModalViewController:pickerController animated:YES];
}

- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)context
{
    if (error) {
        // mistake
    } else {
        // success
    }
}

#pragma mark - UIImagePickerControllerDelegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo {
    // カメラロールに画像を保存する
    UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
    [picker dismissModalViewControllerAnimated:YES];
}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
    [picker dismissModalViewControllerAnimated:YES];
}


```
blocksでNSURLConnection

blocks便利ですね。
Twitterのように、UITableViewCellにアイコンを出すときはこれで楽できないかな。

```Objective-C
    UIImageView *photo = (UIImageView *)[cell viewWithTag:3];
    NSString *photoUrl = @"http://xxxxxxxx";
    NSURL *url = [NSURL URLWithString:photoUrl];
    NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];

    [NSURLConnection sendAsynchronousRequest:req
                                       queue:queue
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
                               [photo performSelectorInBackground:@selector(setImage:)
                                                       withObject:[UIImage imageWithData:data]];
                           }];

```
Windows で無変換キーをプレフィックスキーとして利用する。

私はこのような設定をで無変換キーをプレフィックスキーとして利用しています。

(when (eq system-type 'windows-nt)
 (defvar non-convert-map (make-keymap))
 (define-key global-map (kbd "\<non-convert\>") non-convert-map)
 )

これで、
(define-key non-convert-map (kbd "キー") '関数名)
のように定義できます。

わざわざキーマップを定義しなくても、
(global-set-key (kbd "\<non-convert\>キー") '関数名)
でもできます。

アプリケーションキーなども使えると思いますがそちらは試していません。

Emacs 側にどのような名前で認識されているかは、
キーを押した時に、エコーエリアに表示されるメッセージから
知ることができます。
Web APIの動作確認を簡単に行えるChrome拡張


## Postman

今まではcurlコマンドをしこしこ叩いてましたが、[Postman](https://chrome.google.com/webstore/detail/fdmmgilgnpjigdojojpjoooidkmcomcm?utm_source=chrome-ntp-icon)というChrome拡張が便利です。

![Postman](https://lh6.googleusercontent.com/IVy6EGVoX9gQaSU_VbPi2WDCy8o4P-0Vb1diAMoZ01gnIuSQTSHgSqhxRryobQOdHmaF25szww=s640-h400-e365 "Postman")

## 指定可能なもの

* APIのURL
* HTTPメソッド
* URLパラメータ
* HTTPヘッダ
* リクエストボディ
 

辺りを指定してWeb APIを実行することができます。
ファイルアップロードや、Basic認証、OAuth 1.0を簡単に叩けたりもします。

## レスポンス

レスポンスの色付けをしてくれたり、フォーマットしてくれたりします。

## リクエストの履歴

過去に叩いたリクエストを覚えていてくれていて、簡単に以前叩いたのと同じAPIを実行できます。

## コレクション

あと、便利なのがコレクションという機能で、過去に実行したAPIの履歴をグルーピングして管理することもできます。
なので、Aという製品のAPI動作確認用のグループとBという製品のグループを分けて作ることで管理しやすくなります。
Facebook:[FQL]  特定のユーザーと、自分が押した共通のいいね！の取得方法

特定のユーザーと、自分が押した共通のいいね！　のサイト名とURLを取得するには、、、


```
SELECT name , page_url , pic_square , website FROM page WHERE page_id in (SELECT page_id FROM page_fan WHERE uid = me() and page_id in (SELECT page_id FROM page_fan WHERE uid ="100002081796015") ) 
```


利用するには、stream_readのパーミションが必要です。
tmuxを起動できなくなったこととその対処の備忘録

tmuxのクリップボードとMacのクリップボードを同期したくて [Mac の tmux でクリップボードを使う。 - こせきの技術日記](http://d.hatena.ne.jp/koseki2/20110816/TmuxCopy) を見ながら作業してたら、tmuxが突然起動しなくなった。`tmux`とコマンドを打つと問答無用で`[exited]`と言われて動かない。それどころか元々起動してあったtmuxの新規ウィンドウすら開かない。困った。

tmuxが強制終了してしまったウィンドウを上にスクロールすると、一回tmuxが起動していた名残があった。その時のwindow nameが`reattach-to-user-namespace`になっていた。.tmux.conf に

    set-option -g default-command "reattach-to-user-namespace -l zsh"
    bind C-q run-shell 'reattach-to-user-namespace tmux-pbcopy'

と記述していたので、こいつがおかしいのは間違いない。しかし消しても直らない。ターミナルを再起動してから試しても直らない。後ろで動いてるtmuxプロセスがその設定を保持したままになっているらしい(ことに解決してから気づいたのでtmuxプロセスをkillするとかは試してない)
とりあえずdefault-commandっていうのが怪しいのでぐぐってみたら、これの値はデフォルトでは空文字列らしい[*](https://bytebucket.org/ns9tks/tmux-ja/wiki/tmux-ja.html)。ということで.tmux.confに

    set-option -g default-command ""

と記述しなおしてtmuxを起動したらちゃんと動いた。


結局tmuxとMacのクリップボード共有出来てないけどまた今度チャレンジする。
GNU screen で ssh したウィンドウタイトルに、ホスト名とかユーザ名とか入れる

![スクリーンショット](http://25.media.tumblr.com/tumblr_m69v55cblf1qz64n4o1_500.png)

GNU screen で ssh ログインしたウィンドウを複数開いてると、hardstatus に表示してるウィンドウタイトル一覧が

```
... 3 ssh  4 ssh  5 ssh  6 ssh  7 ssh  8 ssh  9 ssh ...
```

ってなって、ちょっとよくわかんないので、どうにかしてスクリーンショットみたいにした。

やり方
===============================

基本は、[gist においたスクリプト screen_ssh.sh](https://gist.github.com/2994553) に書いてある。

ざっと説明すると

1. [screen_ssh.sh をダウンロード](https://raw.github.com/gist/2994553/screen_ssh.sh)  して好きな場所に配置
2. `~/.ssh/config` の先頭に、三行追加

```~/.ssh/config
Host *
  PermitLocalCommand yes
  LocalCommand /path/to/screen_ssh.sh $PPID %n %r
... 以下もともとあった設定
```

`/path/to/screen_ssh.sh` は実際に `screen_ssh.sh` をおいた場所を書く。

ウィンドウタイトルの形式は、`screen_ssh.sh` の変数 `TITLE` を好きなように書き換えればいい。

補足
===================================

`LocalCommand /path/to/screen_ssh.sh $PPID %n %r` って書いた部分の、`%n` を `%h` にすると、`ssh` で引数として書いたホスト名じゃなくて、逆引き？したもっと正確なホスト名になります。よくわかってないので `man ssh_config` の `LocalCommand` 見てください。

困ってること
====================================

この方法は、`screen ssh foobar` って感じでウィンドウ生成しつつ ssh 接続する時に有効なんだけど、この状態で `ssh foobar` ってやると、シェルのウィンドウタイトル書き換えてしまうのに違和感を覚える。

とりあえず、zsh の `precmd_funtion` にウィンドウタイトル更新するやつ書いてなんとなく納得してる。

理想を言えば、`screen_ssh.sh` 内で、新たに生成された screen ウィンドウであることが分かればいいんだけどどうしたものか。

おわり
=====================================

以上です。

そういえば `LocalCommand` の設定がかち合った時どうなるんだろう。
iOS 用の Web Font (SVG Font) を作る

Web Font のうち SVG というフォーマットがあって、
他には WOFF とかもあるが、iOS に限定すればこれを採用する事になる。

TTF から SVG に変換するにはこれを使う
http://xmlgraphics.apache.org/batik/tools/font-converter.html

コマンドで実行できる。
TTF から SVG に変換できる。
Ubuntu11.10にmigemoをいれる

ローマ字でインクリメンタルサーチできるようにmigemoをいれました。

Ubuntu11.10でRuby実装のmigemoをパッケージでいれたのですがうまく動作しなかったので、cmigemoを使うことにしました。

標準ではcmigemoのパッケージはないのでPPAをリポジトリに追加します。

```
$ sudo add-apt-repository ppa:kakurasan/stable
$ sudo apt-get update
```

elispが必要なので、migemoをいれておきます。

```
$ sudo apt-get install migemo
```

cmigemoをいれます。

```
$ sudo apt-get install cmigemo
```

下記を設定ファイルに追加します。

```common-lisp:.emacs.d/init.el
(load "migemo")
(setq migemo-coding-system 'euc-jp-unix)
(setq migemo-command "cmigemo")
(setq migemo-options '("-q" "--emacs" "-i" "\a"))
(setq migemo-user-dictionary nil)
(setq migemo-regex-dictionary nil)
```
Rails3をjQueryMobileでViewを表示した場合の注意点、jQueryMobile設定とlink_toタグの取り扱い

環境
--
jQueryMobile1.1.0 × Rails3.1(jQueryでAjax)

諸注意
--

Rails3のViewでスマフォ用の画面を作る場合、
スマフォ用に個別でサイトを作るわけじゃなくて、PC用のViewにレイアウトファイルを変更してjQueryMobileを利用しようとすると、うまく動かないので
バッドノウハウではあるが解決方法を記する


```javascript:view/layout/mobile.rb
  <script type="text/javascript">
    $(document).bind("mobileinit", function(){
      $.mobile.ajaxEnabled = false; // ajax off
      $.mobile.linkBindingEnabled = false; // Off automatically bind the clicks on anchor tags.
    });
  </script>

```

ページ読み込み時に必ず、jqueryMobileのjQueryモバイルの以下の機能をオフにする
 $.mobile.ajaxEnabled = false; // ajax off
Submit時に必ずAjaxしようとするのをオフにする。
Railsの普通のViewの画面遷移は同期処理のため
これをほったらかしにすると画面ごとのJSやCSSを読み込んでくれなくなる。

 $.mobile.linkBindingEnabled = false; // Off automatically bind the clicks on anchor tags.
RESTのDeleteを実行しないので、これもオフにする。詳しくはググると英語で色々書いてある。

RESTのリクエスト　バッドノウハウ
---

jQueryMobile1.1.0 × Rails3.1(jQueryでAjax)の組み合わせでの
link_toタグのREST処理結果

|REST名 | OK / NG | NGの時の対応策|
|:---|:---|:---|
|GET |OK||
|POST |OK||
|DELETE |NG |$.mobile.linkBindingEnabled = false; 理由は上記参照|
|PUT |NG |jQueryのAjaxメソッドで書く必要あり|
Facebook:   Facepile のキレイな描画方法

Facebook connectをしているサイトで、”友達のxxxさん他10人が使っています。”
こんな感じです。
http://pinqa.com/topics/5303

というような、機能であるFacepile。

実際にviewに描画しようとすると、FB独自のローディングが出てきたりして、何かと使いづらいので、キレイに描画出来るようにしました。

下記のコードを利用すると、、、
1: FB独自のローディングが出て来ないので、不要な幅によるデザイン崩れを防げる
2: 利用している友達が0人の場合は、何も表示されずにデザイン崩れを防げる


```html
<div id="fb-root"></div>
<script src="http://connect.facebook.net/ja_JP/all.js#appId=アプリケーションID&amp;xfbml=1"></script>
<div id="js_facepile" class="facepile_container" style="display:none">
	<fb:facepile size="medium" max_rows="6"></fb:facepile>
</div>
```

```js
$(function(){

  var _timerID; 
  var _height;
  var _width = 1200;
  var count = 0;
  var $face = $("#js_facepile");
  
  StartTimer();

  function TimeDo() 
  { 

    count ++;
    _height = $face.find("span").height();

    if(_height > 70){
      clearInterval(_timerID); 
    	$face.find("span").css("width",_width);
    	$face.find("iframe").css("width",_width);
    	$("#facepile_login_btn").css("bottom","8px").css("right","8px");
      $face_css.css("height","56px");
    	$face.show();
    }else if(_height < 70){
      clearInterval(_timerID); 
    }    

    if(count == 100){
      clearInterval(_timerID); 
    }
    
  } 

  function StartTimer() 
  { 
      _timerID = setInterval(TimeDo, 100); 
  } 

});

```

ちなみに、上記のソースコードでは、webkitのみの対応がされます。
ロジック的には、Facebookから返ってくるifameのheightを使って分岐しています。
FB側で検索結果が返ってくると、iframe内のheightの高さが変わります。しかし、この高さの変更が、ブラウザごとに変わるので、カスタマイズした分岐が必要になります。

他のブラウザの対応も知りたい方は、コメントに書いてください！！
Backbone.Collectionでデータをフィルタする


テキスト入力でデータをフィルターする機能を実装するのに、Backbone.Collection#whereを使って実装してみるメモ。

```javascript
// ------------ Model/Collection 定義
var Message = Backbone.Model.extend({
  id: 'msg_id',
  // 属性はこんなの
  defaults: {
    sender: 'anonymous',
    text: '',
    createdAt: new Date()
  }
});

var Messages = Backbone.Collection.extend({
    url: '/api/v1/messages',
    model: Message,
    // 大文字小文字無視してデータを検索する
    whereSender: function(name) {
      var senders = _.uniq(this.pluck('sender')),
          exp = new RegExp($.trim(name), 'i'),
          fName = _.find(senders, function(n) { return n.match(exp); });
      return this.where({sender: fName});
    }
  });

// -------------- 使う方
// データのfetchとかしておく
var messages = new Messages();
messages.fetch();

[… snip …]
// clickやらkey event等が発生したら、フィルター用のテキスト入力を取得
var inputSender = $(':text').val();
// フィルターしたデータを再度Backbone.Collectionにする.
filterdMessages = new Message(messages.whereSender(inputSender));
[… snip …]
```
AutoHotKeyでのヒアドキュメント

よく忘れるのでメモ。

```ahk:sample_heredocument.ahk
; AutoHotKeyでのヒアドキュメント

Message=
(
こんな
かんじで
複数の行に渡って書けます
`)と書けば、閉じカッコ自身を記述できます
)

MsgBox % Message
```

# 実行結果

![実行結果](https://lh5.googleusercontent.com/-ZGHb573jkHU/T-o90FayBcI/AAAAAAAAEPY/8dFHME7gyWo/s800/2012-06-27_07h52_52.png)

# 補足

変数展開ではなく、式展開したい場合にはこのように書きます。ダブルクォートの位置に注意。

```ahk:sample_heredocument2.ahk
; 変数展開ではなく、式展開したい場合にはこのように書く
msg := "
(
MaxIndex()=" . files.MaxIndex() . "
MinIndex()=" . files.MinIndex() . "
)"
```
vimを使って保存時に楽をする

# 気持ち悪いものは取り除く

プログラマにとって気持ちの悪いものというのはいろいろありますが、これを放置すると虫歯のようにあとで大変なことになる場合があるので早めに除去しましょう。

## 保存時に行末の空白を除去する

私にとって行末の空白ほど気持ちの悪いものはありませんね。

というわけで、保存時に意識すること無く除去してしまいましょう。
以下のものを.vimrcに記述しましょう。

```vim
" 保存時に行末の空白を除去する
autocmd BufWritePre * :%s/\s\+$//ge
```

## 保存時にtabを2スペースに変換する

そういえば、TABも気持ち悪いです。
あれは逆にスペース２つで置き換えてしまいたいですね。

そんなときはこんなかんじです。

```vim
" 保存時にtabを2スペースに変換する
autocmd BufWritePre * :%s/\t/  /ge
```

## カーソル位置が動くと鬱陶しい

Linda_ppさんのご指摘通り、上記のまま設定するとカーソルが飛んでいってしまうので下記のように纏めて設定すると、とても良いです。

```vim
function! s:remove_dust()
    let cursor = getpos(".")
    " 保存時に行末の空白を除去する
    %s/\s\+$//ge
    " 保存時にtabを2スペースに変換する
    %s/\t/  /ge
    call setpos(".", cursor)
    unlet cursor
endfunction
autocmd BufWritePre * call <SID>remove_dust()
```

Linda_ppさん、ありがとうございます！

## 保存時にRuby1.8 Hashを除去する

さて、そういえばRubyですが1.8から1.9を使うようになり、
Hashの記法が増えました。`:hoge => 'fuga'`を`hoge: 'fuga'`といったふうに、
Javascriptのように記述できるようになったのでコードの量も減らせます。

となると、ですよ、もう1.8タイプのHash記法が気持ち悪くないですか？
はい、気持ち悪いですね、気持ち悪いです。
なので、これも保存時に自動で置換してしまいましょう。

こちらです。

```vim
" 保存時にRuby1.8 Hashを除去する
autocmd BufWritePre * %s/\([^:]\+\):\{1}\([^ :"']\+\)\s=>/\1\2:/ge
```

コレに関しては、id:heavenshell さんのご指摘通り、ファイル保存時に勝手にやられると困るという場面が多々あります。
（1.8でも動かすgemや、オープンソース活動しているひとなど）
なので、関数などにして呼び出すというのも手ですね。

# おわりに

コレ以外にも保存時にいろんな処理をかませることで怠惰なプログラマになることができるので、試してみてはいかがでしょうか。

まあもちろん、デメリットもあります。

## デメリット？

大規模なコードをちょこっと変更したときに、すべての行を対象に置換してしまいます。
これはバージョン管理している場合、意味不明の大量の変更が発生することにもなりますので、ご利用は計画的に、といったところでしょうか。

では。
Flymake を有効にしていると Magit の Ediff でエラーが発生する

Ruby でファイルを開くと Flymake が有効になるように設定しているのだが、Magit で e を押して Ediff による比較をするとき、以下のようなエラーが発生する。

```
error in process filter: flymake-get-file-name-mode-and-masks: Invalid file-name
error in process filter: Invalid file-name
error in process sentinel: flymake-get-file-name-mode-and-masks: Invalid file-name
error in process sentinel: Invalid file-name
```

Ediff が使えないわけではないのだが、Magit で Ediff を起動した直後はエラー発生で固まって非常に鬱陶しいのでいろいろ調べてみた。

発生箇所は magit.el の magit-show 関数内部、2769行目の (normal-mode) のようだ。ここで flymake-mode がロードされ、最終的に flymake.el の flymake-get-file-name-mode-and-masks 関数内部、289行目で引数のファイル名が不正なためにエラーを出力している。

ステップ実行だとエラーを出力しないので外部プロセス関連かとは思うのだが、原因究明はあまりにも面倒なので以下のように応急処置で対処することにした。

```cl
(defadvice magit-ediff (around flymake-off activate)
  (remove-hook 'ruby-mode-hook 'ruby-flymake-hooks)
  ad-do-it
  (add-hook 'ruby-mode-hook 'ruby-flymake-hooks))
```

magit-ediff 開始時に Ruby の Flymake 関連のフックを削除し、Ediff の準備が完了したら元に戻すというもの。とりあえずエラーが発生しなくなったので、原因がわかるまではこれで凌ごうと思う。

もしも同じ問題を解決した人がいれば是非教えてほしい。
CentOSにMySQLを入れるメモ


## インストール
yumを使ってインストールする。

```
$ sudo yum --enablerepo=remi install mysql mysql-server
```

## 起動
もろもろ設定は必要だけど、吹っ飛ばしてとりあえず起動する。

```
$ sudo /etc/init.d/mysqld start 
```

再起動後も自動で起動する様にする

```
$ chkconfig --list mysqld 
mysqld         	0:off	1:off	2:off	3:off	4:off	5:off	6:off
hnsta:~$ sudo chkconfig mysqld on
hnsta:~$ chkconfig --list mysqld 
mysqld         	0:off	1:off	2:on	3:on	4:on	5:on	6:off
```

## rootパスワード変更
パスワードなしは無いので変更する。

```
$ mysql -u root
mysql> set password for root@localhost=password('*****');
```

## 不要なユーザの削除
引き続きMySQLでの作業。

```
mysql> select user,host from mysql.user;
+------+-----------+
| user | host      |
+------+-----------+
| root | 127.0.0.1 |
| root | ::1       |
|      | hnsta.com |
| root | hnsta.com |
|      | localhost |
| root | localhost |
+------+-----------+
6 rows in set (0.00 sec)

mysql> DELETE FROM mysql.user WHERE user = '' OR ( user = 'root' AND host != 'localhost' );
Query OK, 5 rows affected (0.00 sec)

mysql> select user,host from mysql.user;
+------+-----------+
| user | host      |
+------+-----------+
| root | localhost |
+------+-----------+
1 row in set (0.00 sec)
```

## 不要なデータベースの削除
testはいらないので削除する。

```
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> drop database test;
Query OK, 0 rows affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
```

## .mysql_historyの削除
.mysql_historyの削除をしないと平文のパスワードが残ってしまうので削除する。

```
$ rm ~/.mysql_history 
```
リンク先の画像を高速に,Viewに表示する方法



Twitterのプロフィールのイメージ画像をURLで埋め込んで、それをごにょごにょする処理を書いていたんだけど、3G通信だと遅くて、使い物にならなかった。どうやらリンク先のURLから、イメージデータを生成する処理がボトルネックになっていたっぽい。

非同期で、プロフィール画像をまとめてイメージデータ化をして、処理が終了したら、メインスレッドに通知するようなプログラムを書けばいいのではないかと思った。

やってみたら、ものすごく早くなった。非同期通信はイベントがいつ終了するか、よくわからなかったけど、dispatch_group　シリーズを使ってあげる事で、無理矢理だけど、うまくいった。



```
    NSMutableDictionary *cache = [NSMutableDictionary dictionary];
    
    dispatch_queue_t  queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0);
    dispatch_group_t group = dispatch_group_create();
    
    
    
        for (NSMutableDictionary *person in items){
            
                                     
            dispatch_group_async(group, queue, ^{
                
                    
                    NSString *name = [person valueForKey:@"screen_name"];

                    NSString *imageURLString = [person valueForKey:@"img"];
                    NSURL *imageURL = [NSURL URLWithString:imageURLString];
                    
                    
                    NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
                    [cache setValue:imageData forKey:name];
            });
            
            dispatch_group_notify(group,dispatch_get_main_queue(),^{
                static dispatch_once_t onceToken;
                dispatch_once(&onceToken, ^{
                    
                    
                   [cache writeToFile:filePath  atomically:YES];
                    
                    
                    
                });
                
            

            });
            
        }
```
Vim を C++11 のシンタックスハイライトに対応させる

vim-jp が C++ シンタックスのメンテナになったようです．
最新のシンタックスファイルは下記にあります．
https://github.com/vim-jp/cpp-vim 

いずれ本体にマージされると思いますが，今すぐ使いたい場合は下記のようにすれば OK です．

```:vim
NeoBundle 'vim-jp/cpp-vim'
```
Ruby の配列で n 個ずつの要素を扱いたい

each では要素を1つずつしか取得できないが、each_cons や each_slice を使用すればループ1回で複数個の要素を扱える。

each_cons(n) は連続した n 個の要素を1つずつずらしながら取得できる。

```ruby
n = 3
[1, 2, 3, 4, 5].each_cons(n) do |a, b, c|
  puts "#{a}, #{b}, #{c}"
end
# >> 1, 2, 3
# >> 2, 3, 4
# >> 3, 4, 5
```

一方 each_slice(n) は n 個の要素を n ずつずらしながら取得する。

```ruby
n = 3
[1, 2, 3, 4, 5, 6, 7, 8].each_slice(n) do |a, b, c|
  puts "#{a}, #{b}, #{c}"
end
# >> 1, 2, 3
# >> 4, 5, 6
# >> 7, 8,
```

使う機会は少ないかもしれないが、知らないと書くのが少し面倒だったりする(可読性的な意味で)。こういうメソッドがあるということくらいは知っておきたい。
勉強会の参考問題の解答例。groovyで。

7/6(金) に行われる予定の勉強会( http://atnd.org/events/30285 )の参考問題( http://qiita.com/items/cbc3af152ee3f50a822f )の解答例、もう一つ。
まだ出てない言語で書こうということで、groovy。

```groovy:poka.groovy
import java.util.regex.Pattern

def hands=[ "14":"4K", "23":"FH", "113":"3K", "122":"2P", "1112":"1P", "11111":"--" ]
def cardPattern=Pattern.compile( /[SHDC](\d+|J|Q|K|A)/ )

[ "DASAD10CAHA", "S10HJDJCJSJ",
  "S10HAD10DAC10", "HJDJC3SJS3",
  "S3S4H3D3DA", "S2HADKCKSK",
  "SASJDACJS10", "S2S10H10HKD2",
  "CKH10D10H3HJ", "C3D3S10SKS2",
  "S3SJDAC10SQ", "C3C9SAS10D2"].each(
{ q->
  m=cardPattern.matcher( (CharSequence)q )
  ranks=[:].withDefault{0}
  while( m.find() ){
    ++ranks[m.group(1)]
  }
  println( hands[ranks.values().sort().join()] )
} )
```

投稿のプレビューをみて初めて気づいたんだけど、シンタックスハイライト可能な言語リストに groovy が入っていない。

scala も coffeescript もあるのに groovy がないなんて。

それはさておき、java の正規表現ライブラリの使い方の勉強になった気がするが、実装内容としては新味がない。そんなものだと思う。
都道府県のリストをサクッと出力するだけのCLIツール


ウェブ開発で都道府県のリストが欲しいときに、サクッとリストを生成するためのスクリプトです。

```python:prefecture
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import argparse

FORMAT_DEFAULT = '%s';

DATA = """北海道
青森県
岩手県
宮城県
秋田県
山形県
福島県
茨城県
栃木県
群馬県
埼玉県
千葉県
東京都
神奈川県
新潟県
富山県
石川県
福井県
山梨県
長野県
岐阜県
静岡県
愛知県
三重県
滋賀県
京都府
大阪府
兵庫県
奈良県
和歌山県
鳥取県
島根県
岡山県
広島県
山口県
徳島県
香川県
愛媛県
高知県
福岡県
佐賀県
長崎県
熊本県
大分県
宮崎県
鹿児島県
沖縄県"""

def main():

	parser = argparse.ArgumentParser(description='Print prefectures')
	parser.add_argument('-f', '--format', metavar="format", type=str, help="line format" , default=FORMAT_DEFAULT)
	parser.add_argument('-n', '--no-line-break',  help="if add this, print all in one line", action='store_true')

	args = parser.parse_args()
	
	lines = []
	
	if args.no_line_break is False:
		line_break = "\n"
	else:
		line_break = ""
	
	for line in DATA.split("\n"):
		lines.append(args.format % line)
		
	print line_break.join(lines)


if __name__ == "__main__":
	main()
```

## 使い方

とりあえず、一覧を出すだけ:

```bash
$ prefecture 
北海道
青森県
(略)
鹿児島県
沖縄県
```

カンマで区切って出す:

```bash
$ prefecture -f "%s,"
北海道,
青森県,
(略)
鹿児島県,
沖縄県,
```

カンマで区切って、1行で出す:

```bash
$ prefecture -f "%s," --no-line-break
北海道,青森県,...,鹿児島県,沖縄県,
```

クォーテーションで囲って、カンマをつけて出す:

```bash
$ prefecture -f "'%s',"
'北海道',
'青森県',
(略)
'鹿児島県',
'沖縄県',
```

などなど
bootstrapに適したページャをJSで手軽に作る

https://gist.github.com/4306339

railsならkaminariとか使えば簡単にページャを作れますが、そういうリッチな道具が無い時、色々と気の利いたページャを作るのは面倒なので、JavaScriptで良い感じにしてくれるのを作った。

```html
<script src="jquery.js"></script>
<script src="bootstrap-pagination.js"></script>
<div class="pagination"
  data-page="5"
  data-last="10"
  data-inner="2"
  data-outer="3">
</div>
<script>
  $('.pagination').pagination();
</script>
```

するとtwitter-bootstrapのページャのCSSに適したHTMLを良い感じに作ってくれる。
リスト内包表記と素数

Schemeにもリスト内包表記(SRFI-42)があることを今日知ったので。

```scheme
; Gauche 0.9.2

(use srfi-42)

(print
  (list-ec (: n 2 101) (if (= (length (list-ec (: m 2 n) (if (= (mod n m) 0)) m)) 0)) n)
  )
```
git add -p と同じような機能を持つ git stash -p

[横着で神経質な私とあなたに贈るgit add -p](http://qiita.com/items/1abf08bca4ce51db4775) で `git add -p` が紹介されていますが、実は `git stash -p` なんていうのもあります。

機能もほとんど同じで、`git add -p` が index に変更内容の一部だけを入れるのに対し、`git stash -p` は stash に変更内容の一部だけを入れる、という違いだけです。

今変更している内容の一部だけを退避したい、というときに使います。
Rails のテスト関連タスクでスキーマをロードしないようにする


Migration で直接 SQL 文を発行してデータベースを構築している場合、View や Trigger などが schema.rb / structure.sql にダンプされない場合がある。

開発・運用時は Migration を使っていれば問題ないのだが、テストに関わる rake タスクでは、自動的にスキーマをロードするため、データベース構造が意図したものにならない。

スキーマをロードするタスクを、何も行わないタスクに置き換えることでこれを回避する。

```ruby
# lib/tasks/db.rake
# 単に重複してタスク定義すると、
# 順番に実行されるので clear で既存のタスクを削除する
Rake.application.lookup("db:test:load_schema").clear
Rake.application.lookup("db:test:load_structure").clear
# メッセージを表示するだけのタスクを定義
namespace :db do
  namespace :test do
    task :load_schema do
      STDERR.puts "Ignore 'db:test:load_schema'"
    end
    task :load_structure do
      STDERR.puts "Ignore 'db:test:load_structure'"
    end
  end
end

```

そのかわりテスト時には自分で db:migrate RAILS_ENV=test などを実行する必要がある。
ファイル名を入れ替える


ディレクトリにあるファイル全てを、ファイル名で昇順した時、上下のファイル名を入れ替える。

例えば

1. a.jpg => c.jpg
2. b.jpg => b.jpg
3. c.jpg => a.jpg

といった感じにする。


```perl
#!/usr/bin/env perl

my $p = "";

opendir($p, '.') or die $!;
my @buff = ();
while ((my $fn = readdir($p))) {
    push @buff, $fn;
}

for (my $i = 0; $i < $#buff/2; $i++) {
    my $newname = $buff[$#buff-$i];
    rename $buff[$#buff-$i], "tmp.file";
    rename $buff[$i], $buff[$#buff-$i];
    rename "tmp.file", $buff[$i];
    print "$buff[$i] => $newname\n";
}

closedir($p);
```
特定のモジュールの権限があるかを判定する


特定のモジュールの管理者かどうかは ```Module.dirname.Admin``` ロールかを確認することで判定できます。更に、特定のモジュールにアクセス権限があるかは ```Module.dirname.Visitor``` ロールかを確認することで判定できます。

例えば、userモジュールの管理者かどうかは次のように判定します:

```php
<?php
$root = XCube_Root::getSingleton();

if ( $root->mContext->mUser->isInRole('Module.user.Admin') ) {
	// userモジュール管理権限あり
} else {
	// userモジュール管理権限なし
}
```

注意する点としては、userモジュール以外のコンテクスト(Context)では、ロール情報をロードする必要があります:

```php
<?php
$root = XCube_Root::getSingleton();

$roleManager = new Legacy_RoleManager();
$roleManager->loadRolesByDirname('user');

if ( $root->mContext->mUser->isInRole('Module.user.Admin') ) {
	// userモジュール管理権限あり
} else {
	// userモジュール管理権限なし
}
```

ロール情報はデータベースのグループテーブルに基いています。XOOPS Cubeでは、データベースアクセスのためのリソースを節約するために、デフォルトですべてのロール情報をロードすることはしません。そのため、コンテクスト外のモジュールのロール情報を利用するときは、上記のように明示的にロール情報ロードを実行する必要があります。
INDEXの使い方の基本

WHERE内でINDEXが貼られているカラムの記述を行う際、INDEXが貼られている順に記述しないとINDEXが効かなかったりする。

【例】
テーブル名：CAT
    カラム1：id（PK）
    カラム2：id_sub
    カラム3：name
    カラム4：voice
    カラム5：memo
    カラム6：delete_flag
    インデックス：[id, id_sub]


こういう書き方だと[id,id_sub]としてはINDEXが機能しなくて、[id]のINDEXのみ使われることになる。

```sql:dame
SELECT
   *
FROM
   CAT
WHERE
     id = 10
 AND voice = nyan
 AND id_sub = 3
;
```


こういうのは、もはやINDEXが存在しないのでTablescanになる。

```sql:mottodame
SELECT
   *
FROM
   CAT
WHERE
     delete_flag = 0
 AND id_sub = 3
;
```


このような順に記述するのが望ましい。

```sql:good
SELECT
   *
FROM
   CAT
WHERE
     id = 20
 AND id_sub = 3
 AND delete_flag = 0
;
```

この仕様はどのDBも基本一緒らしい。
ディレクトリを作成し，そこに移動する


ディレクトリ構造を作ろうとしているときに，mkdir と cd を繰り返すがめんどくさい．そんなときに．
````bash
function mkcd() { mkdir -p $1 && cd $1; }
````
mkdir のコマンドラインオプションは，お好みでカスタマイズ．
Enumeratorなオブジェクトからインデックス値を取得する



```ruby:ruby_with_index.rb

arr = [9,8,7,6,5,4,3,2,1]

# rubyでループカウンタを取得する場合、
arr.each_with_index do |s, i|  puts i end

# のようにすることは多い。これには別の書き方があって、
arr.each.with_index do |s, i|  puts i end

# のように、「.with_index」をつけてもインデックス値を取得できる
# これの利点は、Enumeratorなオブジェクトになら、なんでも付けられるってところ。

# 文字列：each_charの場合
"bar".each_char.with_index do |v, i| p "#{i}:  #{v}" end
# "0:  b"
# "1:  a"
# "2:  r"


# 文字列：each_byteの場合
"foo".each_byte.with_index do |v, i| p "#{i}:  #{v}" end
# "0:  102"
# "1:  111"
# "2:  111"

# Hashの場合
 {a: 1, b: 2, c: 3}.each.with_index do |v, i| p "#{i}:  #{v}" end
# "0:  [:a, 1]"
# "1:  [:b, 2]"
# "2:  [:c, 3]"


# ちなみに、初期値を渡せる。
"bar".each_char.with_index(1){|v, i| p "#{i}: #{v}"}
# "1:  b"
# "2:  a"
# "3:  r"
[AIR][iOS] FDT5.5 で AIR3.3 iOS USBデバッグするためのANTテンプレート

```xml:
<?xml version="1.0" encoding="UTF-8"?>
<project name="**********">

	<!-- ===================================================================================== 
	
		FDT5.5 で AIR3.3 iOS USBデバッグするためのANTテンプレート
		@see http://blog.romatica.com/2012/06/26/airios-air3-3-ios-usb-debu/
		

★追記　AIR3.4 からidb -devices　ではなく、adt -devicesでデバイスハンドルが取得できます。
	-->

	<property name="PROJ_NAME" value="**********"></property>

	<property name="PROVISIONING" value="**********.mobileprovision"></property>
	<property name="CERT" value="**********.p12"></property>
	<property name="PASS" value="*******"></property>

	<!-- ===================================================================================== -->
	
	<property name="LOCAL_PORT" value="7936"></property>
	<property name="REMOTE_PORT" value="7936"></property>
	
	<!-- ===================================================================================== 
	
		USBデバッグモードでipa生成。
		
	-->

	<target name="01. package for usb debug">
		<fdt.loadProjectProperties projectname="${PROJ_NAME}" />
		<exec executable="${FDTProjectSdkPath}/bin/adt" failonerror="true"
			dir="../bin">
			<arg value="-package" />
			<arg value="-target" />
			<arg value="ipa-debug-interpreter" />
			<arg value="-listen" />
			<arg value="${LOCAL_PORT}" />
			<arg value="-provisioning-profile" />
			<arg value="${PROVISIONING}" />
			<arg value="-storetype" />
			<arg value="pkcs12" />
			<arg value="-keystore" />
			<arg value="${CERT}" />
			<arg value="-storepass" />
			<arg value="${PASS}" />
			<arg value="${PROJ_NAME}.ipa" />
			<arg value="${PROJ_NAME}-app.xml" />
			<arg value="${PROJ_NAME}.swf" />
		</exec>
	</target>

	<!-- =====================================================================================
	
		iOSをUSB接続後、下記を実行するとドバイスハンドルが取得できる。
		取得後その値を「05. forward ports for USB debug」の最下段に設定する
		
	 -->
	<target name="02. show connected devices">
		<fdt.loadProjectProperties projectname="${PROJ_NAME}" />
		<exec executable="${FDTProjectSdkPath}/lib/aot/idb/idb">
			<arg value="-devices" />
		</exec>
	</target>


	<!-- ===================================================================================== 
	
		iOS側にアプリをインストールし起動しておく。（アプリにAIRの接続待機アラートが表示される）
		
	-->
	
	<target name="04. start FDT debugger for usb debug">
		<fdt.loadProjectProperties projectname="${PROJ_NAME}" />
		<fdt.startDebugger projectname="${PROJ_NAME}" port="${LOCAL_PORT}"
			asclient="true" />
	</target>

	<!-- ===================================================================================== 
	　
		USBデバッグを開始する。
	
	-->
	<target name="05. forward ports for USB debug">
		<fdt.loadProjectProperties projectname="${PROJ_NAME}" />
		<exec executable="${FDTProjectSdkPath}/lib/aot/idb/idb">
			<arg value="-forward" />
			<arg value="${LOCAL_PORT}" />
			<arg value="${REMOTE_PORT}" />
			<arg value="2" />
		</exec>
	</target>
</project>
```
Qiitaへの要望

・タグで検索という形ではなく、一覧表示で色々なタグを見えるようにしてほしい。
(最初の登録の時に出てくるタグのフォロー画面の様な各カテゴリ分けの表示。
見易いなと思ったのですが、登録後の画面でがっかりしました。)

・さらにあのデザインのままで、タグの中の一覧を見えるようにしてほしい。
　(イメージとしてWishScopeみたいなデザイン。縦1列だと画面に入る情報量が少ないため)

・戻るボタンを押したときに見ていた位置に復元してほしい。

1ユーザーの意見として、もしよろしかったらご検討お願いします。
Scalaで多次元配列

ListBufferを複数段重ねてもいいのですが，やはり多次元配列が楽でしょう．簡単にある型を持った多次元配列を作るには**ofDim**を使うと楽だと分かりました．ちなみにArrayは普通に出力(println)すると中身は見えませんので，**.deep**を使うと中身も見れてListBufferのように使えます．

```scala:Marray.scala
val array = Array.ofDim[Int](2, 3)
println(array.deep)

/* Output
Array(Array(0, 0, 0), Array(0, 0, 0))
*/
```
インデックス付きでリストを処理する

リスト(A, B, C)みたいなデータがあったときに，そのインデックス(Aなら0，Bなら1，Cなら2)を一緒に扱って処理したい，ということがよくありました．今まではそのためにわざわざ

```scala:imamade.scala
val list = List("A", "B", "C")
for (i <- 0 until list.length) {
  println(i, list(i))
}
```

のような少し残念な書き方をしていたのですが，ScalaにはちゃんとzipWithIndexという関数がありました．おそらくcollectionでSeq系なら使えるような気がする関数で，インデックスを一緒に包んでタプルのリストを作ってくれます．

```scala:motto_smart.scala
val list = List("A", "B", "C")
// list.zipWithIndex
// res6: List[(java.lang.String, Int)] = List((A,0), (B,1), (C,2))

val array = Array("a", "b", "c")
// array.zipWithIndex
// res4: Array[(java.lang.String, Int)] = Array((a,0), (b,1), (c,2))

// how to use
list.zipWithIndex.foreach { v => println(v._1, v._2)}
list.zipWithIndex.foreach { case(e:String, i:Int) => println(i, e) }
```

とてもすっきりしました．やはり標準のライブラリをちゃんと調べるといいことがありますね．
HTML書く時のテンプレ

これおれりゅう～

```html:template.html

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

<script>



</script>


<style>


</style>
</head>
<body>









</body>
</html>

```
URI.joinでちょっと嵌った。


第1引数の末尾に/があるのとないのでは結果が異なる。

```ruby
URI.join("http://www.hoge.jp/fuga", "hege").to_s
# => "http://www.hoge.jp/hege"

URI.join("http://www.hoge.jp/fuga/", "hege").to_s
# => "http://www.hoge.jp/fuga/hege"
```