OmniAICreator/Qiita-1.07M huggingface dataset:
Playでファイルの更新を監視して、自動でコンパイルする


###自動監視コンパイル
```scala:
//playのコンソールモードに入ってから下記を入力
~compile
```

先日のplay勉強会で教わりました(http://blog.greative.jp/archives/627)。
通常は、編集して保存したのち、リクエストを送ってはじめてコンパイルされますが、そのときにラグがあります。
下記のコマンドを流しておけば、保存した瞬間にコンパイルされるので、少しラグが緩和されます。

###実際の使い方
```scala:auto_compile
% play
[info] Loading project definition from /Users/path/to/test/project
[info] Set current project to test (in build file:/Users/path/to/test/)
       _            _ 
 _ __ | | __ _ _  _| |
| '_ \| |/ _' | || |_|
|  __/|_|\____|\__ (_)
|_|            |__/ 
             
play! 2.0.1, http://www.playframework.org

> Type "help play" or "license" for more information.
> Type "exit" or use Ctrl+D to leave this console.

[test] $ ~compile//←これ!!!
[info] Updating {file:/Users/path/to/test/}test...
[info] Done updating.                                                                  
[info] Compiling 5 Scala sources and 1 Java source to /Users/path/to/test/target/scala-2.9.1/classes...
[success] Total time: 24 s, completed 2012/06/20 10:33:53
1. Waiting for source changes... (press enter to interrupt)
[info] Compiling 1 Scala source to /Users/path/to/test/target/scala-2.9.1/classes...
[success] Total time: 2 s, completed 2012/06/20 10:34:41
2. Waiting for source changes... (press enter to interrupt)
GDライブラリを利用したPNG8とPNG32画像の合成


PHPのGDライブラリを利用して画像の合成処理を行なっていたところ、
PNG8形式の画像とPNG32形式の画像の合成処理でつまづいたのでメモ。

 
まず、元々の実装は以下のようにしていた。

```php 
$imgA = imagecreatefronpng('PNG8画像.png');
$imgB = imagecreatefronpng('PNG32画像.png');
imagecopy($imgA, $imgB, 0,0,0,0,100,100);
imagepng($imgA, '合成画像.png');
```
 
これはPNG8形式の画像の上にPNG32形式の画像を重ね合わせる処理になるのだけど、
上記の場合は下側になるPNG8の画像が完全に消えてしまい、PNG32形式の画像のみがファイル出力されてしまっていた。
そこで、下記のように変更してみた。

```php
$img = imagecreatetruecolor(100,100);
$imgA = imagecreatefronpng('PNG8画像.png');
imagecopy($img, $imgA, 0,0,0,0,100,100);
$imgB = imagecreatefronpng('PNG32画像.png');
imagecopy($img, $imgB, 0,0,0,0,100,100);
imagepng($img, '合成画像.png');
```
 

イメージとしては、はじめにベースとなるカンバスを作成し、その上に画像を重ねていくようにした、というところ。
直感だけで修正したので処理系の詳しいところは不明だけど、PNGには8と24,32という異なる形式があるので、
確実に同一の形式であることが保証されない場合は上のように処理してやるのがよさそうだ。
AutoHotKeyで、コマンドライン引数を取得するサンプル


* `%0%` が、コマンドライン引数の数、
* `%1%`、`%2%` ... が、各コマンドライン引数の値

```ahk:SampleCommandLineArgs.ahk
; コマンドライン引数を取得するサンプル
ArgCount=%0%
if(ArgCount==0)
{
  MsgBox [使用法] %a_scriptname% [files..]
  ExitApp
}

Loop, %ArgCount%
{
  Arg := %a_index%
  MsgBox % Arg
}
```
ディレクトリを755にファイルを644にパーミッションを変更する

`chmod -R 755 .` をしてしまうとすべてのファイルに実行権限がついてしまいます．そして一方 `chmod -R 644 .` をしてしまうとディレクトリの中身が見られなくなってしまいます(ファイルの一覧を表示するにはディレクトリの実行権限が必要)．

#解決手法
###すべてリセットする場合
```sh
chmod -R "=rw,+X" .
```
###よくある状況 (グループ，その他の権限に読む権限を与えたい)
```sh
chmod -R go+rX .
```

+Xがミソでディレクトリの時にのみ実行権限を付加してくれます．

#参考文献
http://twitter.com/xhl_kogitsune/status/215118902466850819
RubyMotionでエラーが表示されずに落ちるとき、とりあえずやること

まだ新しいプロダクトなので仕方ないのかもしれませんが具体的なエラーメッセージなどなく`simulator session ended with error`と吐いてストンと落ちることがあります。

何が原因なのか分からず戸惑うのですが、そういう時はprintデバッグで落ちてるところを見つけて例外を明示的に捕まえてあげれば分かることがあります。

```ruby
  puts 1
  view.removeFromSuperveiw # <= タイポ orz
  puts 2
```

この例だと、`removeFromSuperviewをタイポしてて落ちてますが、なかなか分からない（バカ）

```ruby
  begin
    view.removeFromSuperveiw
  rescue => e
    puts e
  end
```

こうすると、

```Terminal
(main)> undefined method `removeFromSuperveiw' for #<HogeView:0x9386bf0>
```

と表示され、( ﾟдﾟ)ﾊｯ! ってなりますね（笑）

**2013/06/03 追記**

このTipsは１年前のものなので、現在はRubyMotion自体のエラー表示がより具体的になっていて、上記のようなミスはメッセージから分かるようになっているのではないかと思います。
Ruby1.9.2以降でrequireする際の注意点

カレントディレクトリに置いたファイルをrequireする際、

```ruby:
require "filename"
```

だと怒られる。セキュリティ強化のため仕様が変わったらしい。

```ruby:
require "./filename"
```

ならうまくいった。
変更を一時的に退避！キメろgit stash

gitは、とにかくトピックブランチを作成して作業する。だいたい機能追加とかバグ修正とかの単位でブランチを作って作業します。（ちゃんとやってますよね？）
なので、作業の途中で別の修正を優先してお願いっ！なんて言われたときは、別のブランチに切り替えて作業をする必要がでてくる。そんな時に変更を一時的に退避しておくことのできる機能、それがstashである。
では、早速使い方
まだcommitしていない状態の変更ファイル（addしてる or add していない)が存在する状況で、次のコマンドを実行すると変更ファイルを退避することができる。

```
 $ git stash save
```
※saveは、省略することもできる。

これでファイルの退避完了！git statusとか見てみると変更状態であったファイルがなくなっている。この状態なら安心してブランチを切り替えることもできる。めでたしめでたし。
と、退避だけならこれで終わりだけど、次につかうときに変更ファイルを取り出したい。

+ いまどんな変更を退避しているかを確認

2つの変更を保存している状態（2回stashを行った状態）

```
 $ git stash list
 stash@{0}: WIP on sub: a0d2f1b add fourth line
 stash@{1}: WIP on sub: 1a61919 add second line
```
```
<stash名>: WIP on <stashを行ったブランチ名>: <ハッシュ> <コミットコメント>
```
※ハッシュ、コミットコメントはstashを行った時のHEADのもの

次のようにすると、さらに変更内容もみれるので便利！（git logのオプションが使える）

```
 $ git stash list -p
```

+ さらに各変更について詳しく見たい場合、変更内容に含まれるファイルの一覧が見れる。

```
 $ git stash show <stash名>
```


+ 復活させたいstash名がわかったら次のコマンドで取り出すことができる。

```
 $ git stash apply stash@{0}
```

+ stash applyで変更を復活した場合は、stashリストのなかに復活済みの変更が残されているこれを削除するには、次のコマンドを使用する。

```
 $ git stash drop <消したいstash名>
```

+ 変更の復活と、削除を同時に行う。

```
 $ git stash pop stash@{0}
```

stashが溜まってくると、なんの変更だったか、どれが必要な変更だったかわからなくなるのでこまめに消
したり管理するのが大切ですよー

##応用

git apply <stash名>で、変更を復活して適用したんだけど、やっぱやめとこうってときにこんなこんなやりかたで取り消せます。前半はgit stash show -p でパッチ形式で出力、それをgit apply -Rでパッチを逆に適用しています。

```
 $ git stash show <適用したstash名> -p | git apply -R
```


##終わりに
とっても基礎的なこと書いたけど、とりあえずgitを使えるようになるには、読んでわかった気になる前に手を動かして、コマンドが馴染んでくるまで何回も素振りをするのが近道だと思ってます。
Byte を KB や GB に変換する Elisp コード

1024で割った結果が1024以上である度に単位を1つ上げるという簡単な手法。

```cl
(require 'cl)
(defun convert-file-size (size)
  (loop with size-units = (list "B" "KB" "MB" "GB" "TB")
        with first-unit = (car size-units)
        with last-unit =  (car (last size-units))
        for unit in size-units
        and new_size = size then (/ new_size 1024.0)
        when (or (< new_size 1024.0) (equal unit last-unit))
        if (equal unit first-unit) return (format "%.0f%s" new_size unit)
        else return (format "%.1f%s" new_size unit)))

(convert-file-size 30)                  ; => "30B"
(convert-file-size 5000)                ; => "4.9KB"
(convert-file-size 100000000)           ; => "95.4MB"
(convert-file-size 10000000000000000.0) ; => "9094.9TB"
```

Byteのときは小数点以下を表示しないという処理のため少し冗長に。整数だとオーバフローする可能性があるので、その場合は少数を渡す工夫が必要。
Yahoo! AndroidマップSDKで現在位置を追跡表示する

公式サイトのドキュメントに掲載されていたコードでは、どうも動かないので修正版を。

公式サイトのコードはこちら。　http://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/androidsdk/tutorial16.html
*バグがありました。初回起動時にクラッシュします。現在は修正しました。

```java:MainActivity.java
	/** 画面に表示するMapView */
	transient MapView mapView;
	/** 地図のコントローラー */
	transient MapController mapController;
	/** 現在位置を表示するオーバーレイ */
	transient NowLocationOverlay locationOverlay;

	/** Activity生成時により呼び出されるメソッド。地図の初期化なんかを行う。 */
	@Override
	public void onCreate(final Bundle sIState) {
		super.onCreate(sIState);
		mapView = new MapView(this, YOLP_ID);
		mapView.setBuiltInZoomControls(true);
		mapController = mapView.getMapController();
		// MyLocationOverlay のサブクラスであるNowLocationOverlayのインスタンスを作成
		locationOverlay = new NowLocationOverlay(getApplicationContext(),
				mapView);
		// センサーにはGPSを選択
		//locationOverlay.onProviderEnabled(LocationManager.GPS_PROVIDER);
		// 現在地取得開始
		locationOverlay.enableMyLocation();
		// MapViewにOverlayを追加
		mapView.getOverlays().add(locationOverlay);
		mapView.invalidate();
		setContentView(mapView);
	}

	@Override
	protected void onPause() {
		// 現在位置取得終了
		locationOverlay.disableMyLocation();
		// 不要？
		locationOverlay.onProviderDisabled(LocationManager.GPS_PROVIDER);
		super.onPause();
	}
```

`MyLocationOverlay`のサブクラスの実装は公式サイトのものと同じです。

また、今回は`LocationManager.GPS_PROVIDER`を利用して明示的にGPSを選択肢ましたが場合によっては、`LocationManager.getBestProvider`を利用したほうがイイかもしれません。

日本語のドキュメントや、GoogleMapSDKとほぼ同じAPI群など利用しやすいYahoo!AndroidマップSDKですが、まだまだな部分も多いように感じます。

とは言え、GoogleMapsに負けない詳細地図や一分施設の建物内の地図、ルート検索APIをデフォルトで実装していることなど便利な部分もやはり多いです。今後の発展に期待ですね。

しかし、このフィードバックをYahooに送信するにはどこから行えばいいんでしょうかね？
次回起動時に fsck を強制実行させる

次のコマンドを実行して OS 再起動

    sudo touch /forcefsck

動作確認した OS は
Debian 6.0.5
Debian wheezy/sid 2012-06-01
CentOS 5.8
CentOS 6.2

Debian の場合、/var/log/fsck ディレクトリに結果が記録されています。
seed.rbでCan't mass-assign protected attributesが出た場合の回避方法


seed.rbでマスターデータを挿入する場合に一時的にmass-assign protectionのかかってるカラムにもデータを入れたい場合がある。
しかし、そのままデータを登録しようとするとタイトルのエラーが出るようなので、これを回避する方法。 without_protectionをtrueにする

```ruby:ex)idが保護されたカラムの場合
regist_data = { :id => 1, :name => 'hoge' }
Model.create( regist_data, without_protection: true)
```
物理メモリの使用状況を取得 - vm_statistics

例によって例の如く，無責任かつ雑なので参考程度に．
もう少しサクっと取得できないものだろうか．vm_stat をパースする以外の手法で！

```c:vmstatistics.c
#include <stdio.h>
#include <stdlib.h>
#include <mach/mach_init.h>
#include <mach/mach_host.h>

#define MB  / 1024 / 1024.0
#define GB  MB / 1024.0

int main(int argc, char **argv)
{
  struct vm_statistics   vm_stat;
  struct host_basic_info host_info;

  host_priv_t        host_priv = mach_host_self();
  mach_msg_type_number_t count = HOST_VM_INFO_COUNT;
  kern_return_t            err = KERN_SUCCESS;

  err = host_statistics(host_priv, HOST_VM_INFO, (host_info_t)&vm_stat, &count);

  if( err != KERN_SUCCESS ) { 
    perror("host_statistics");
    exit(err);
  }

  double free_size     = (vm_stat.free_count     * vm_page_size) GB; 
  double active_size   = (vm_stat.active_count   * vm_page_size) GB; 
  double inactive_size = (vm_stat.inactive_count * vm_page_size) GB; 
  double wire_size     = (vm_stat.wire_count     * vm_page_size) GB; 

  printf("page size  ; %ld bytes\n", vm_page_size);
  printf("free       ; %lf GB\n",    free_size);
  printf("active     ; %lf GB\n",    active_size);
  printf("inactive   ; %lf GB\n",    inactive_size);
  printf("wire       ; %lf GB\n",    wire_size);
  printf("total      ; %lf GB\n",    free_size + active_size + inactive_size + wire_size);

  return 0;
}
```

```sh
% clang vmstatistics.c -o vmstatistics && ./vmstatistics
page size  ; 4096 bytes
free       ; 4.442173 GB
active     ; 1.930828 GB
inactive   ; 0.878677 GB
wire       ; 0.746510 GB
total      ; 7.998188 GB
```
mongoidを使っているとassets:precompileが失敗する


Railsでmongoidを使っていると、assets:precompileが失敗する。原因がassets:precompileする時にproduction環境のmonogodbに接続しようとするから。(なので、本番機でやれば問題ないかもしれない)

対応策は下記設定を追加すること

```ruby:config/application.rb
  config.assets.initialize_on_precompile = false
```
canの使い方


methodなかったらundef返すとかそういう使い方

```cancam.pl
#!/usr/bin/env perl

use strict;
use warnings;
use Data::Dumper;

use v5.12;

{

    package Powawa;

    sub powapowa {
        # nothing code; 
    }

  }

for my $hoge (qw/powapowa popo popopo/) {

    my $code = Powawa->can("$hoge");

    print Dumper $code;

    if ( defined($code) ) {

        print "$hogeメソッドを見つけたよ。\n\n";

    }
    else {

        print "$hogeメソッドは見つからなかったよ。\n\n";

    }

}

__DATA__

$VAR1 = sub { "DUMMY" };
powapowaメソッドを見つけたよ。

$VAR1 = undef;
popoメソッドは見つからなかったよ。

$VAR1 = undef;
popopoメソッドは見つからなかったよ。
```
linear-gradientとtransition一緒に使う時にハマった罠

:hover時にtransitionでlinear-gradient使ったボタンがふわっと色変わるようにしてみたら、
ふわっとどころか:hoverのタイミングで一瞬背景が真っ白になった。
backgroundをショートハンドで書いてたのが原因ぽい。

```scss:qiita.rb
a {
    background-color:$startColor;
    background-image:linear-gradient(transparent,rgba($gradientColor,$opacity));
    // 面倒くさいのでベンダープリフィックスは省略＼(・∀・)／
a:hover {
    background-color:$endColor;
}
```

て感じにしたら直った。
いや、まぁ、よそのコード見ながら書き直しただけなんだけどもね。
firebugとかchromeの開発者ツールだと、勝手にショートハンドになってたりするのでしばらく気づかなかったというのもあるので、やっぱりちゃんとコード読まないとだめだなぁ、と思いました。
Linux(Unix)でバイナリーのテストファイルを作る

Linux でのバイナリーのテストファイルの作り方の一例。

中身がランダムな1KBのバイナリーファイル。

```sh
$ head -c 1024 /dev/urandom > data.bin
```
中身が NUL(0x00) の1KBのバイナリーファイル。

```sh
$ head -c 1024 /dev/zero > data.bin
```
Backbone.jsについてちょっと調べた

公式

* http://documentcloud.github.com/backbone/

概要記事

* [Backbone.jsを利用したクライアントサイドMVCの導入についてそろそろ書いておくか - 出町ミスド攻防記](http://d.hatena.ne.jp/kazuk_i/20110407/1302130947)

* Backbone.Model : データを抽象化する
* Backbone.Collection : モデルの列
* Backbone.View : UIコンポーネント。描画とイベントハンドラを受け持つ
* Backbone.Router (Controllerから改名されたみたい) : ハッシュ(#)以下を画面内ページ遷移として使うときに使う

jQuery MobileアプリをBackboneを使って書き換える記事

Before:

* http://lab.dwango.jp/articles/jquery-mobile-app-development/1-introducing-jquery-mobile.html

After:

* http://lab.dwango.jp/articles/jquery-mobile-app-development/2-add-mvc-with-backbone.html

永続化部分をサーバサイドAPIからlocalStorageに差し替えるやつ

* http://documentcloud.github.com/backbone/docs/backbone-localstorage.html
コマンドラインから emacs (emacsclient) を read-only で開く

emacs 立ちあげてる状態なら `C-xC-r` (コマンド経由なら `C-xfind-file-read-only`) ってやれば、read-only でファイル開ける。じゃーそれをコマンドラインからやる時はどうするかって話。

emacs ならこんな感じ
-------------------------------

```sh
function read_only_emacs() {
    [ -f "$1" ] || (echo "ファイルが見つかりませんでした: $1" >&2; exit 1)
    emacs "$1" --eval '(setq buffer-read-only t)'
}
```

ファイル見つからなくても emacs が立ち上がってしまうので、実行前に存在チェックしてる。

emacsclient ならこんな感じ
--------------------------------

```sh
function read_only_emacsclient() {
    emacsclient -e "(find-file-read-only \"$1\")"
}
```

ただ、`emacsclient -n` で普段から使ってない人は、ちょっと違和感のある挙動かも。
NginxにSSL証明書をインストールする手順

年に一度しかやらないと忘れるので、来年の自分に向けてメモ。

**1.csrを作る**

```
% openssl req -new -newkey rsa:2048 -nodes -keyout mydomain.key -out mydomain.csr
```

**2.mydomain.csrを業者に送って証明書を発行してもらう**

大抵２、３日かかる。

**3.中間証明書をダウンロードする**

bundle.crtとかそんな感じの名前が多い。

**4.発行された証明書(mydomain.crt)と中間証明書を連結する**

と言っても繋げるだけ。

```
% cat mydomain.crt bundle.crt > mydomain-join.crt
```

もちろんエディタでやっても可。

**5.証明書と鍵をnginxから見えるディレクトリに置く**

```
% cp mydomain.key /etc/nginx/ssl/
% cp mydomain-join.crt /etc/nginx/ssl/
```

**6.nginxにSSLの設定を追加**

```
server {
        listen 443 default ssl;
        ssl on;
        ssl_certificate /etc/nginx/ssl/mydomain-join.crt;
        ssl_certificate_key /etc/nginx/ssl/mydomain.key;
        server_name mydomain.com;
        root /var/www/mydomain;
        error_log /var/log/www/mydomain.log;
        # 以下略
}
```

**7.nginxを再起動***

```
% /etc/init.d/nginx restart
```

なお、ワイルドカード証明書などを使って複数のバーチャルホストでSSLを有効にする場合、default sslが複数あるとエラーになって起動しないので注意。2つめ以降はlisten 443だけにする。
文字列をMD5変換する

MD5変換するメソッドをNSStringにカテゴリで追加します。ウェブサービスのAPIとデータの受け渡しをするときなどに、たまに使うかもしれません。

```objc
//  NSString+MD5.h

#import <Foundation/Foundation.h>

@interface NSString (md5String)
- (NSString *)md5String;
@end

```

```objc
//  NSString+MD5.m

#import "NSString+MD5.h"
#import <CommonCrypto/CommonDigest.h>

@implementation NSString (md5String)
- (NSString *)md5String {
    const char *cStr = [self UTF8String];
    unsigned char result[16];
    CC_MD5( cStr, strlen(cStr), result );
    return [NSString stringWithFormat:
			@"xxxxxxxxxxxxxxxx",
			result[0], result[1], result[2], result[3], 
			result[4], result[5], result[6], result[7],
			result[8], result[9], result[10], result[11],
			result[12], result[13], result[14], result[15]
			];  
}
@end
```

参考：MD5 algorithm in Objective C
http://stackoverflow.com/questions/1524604/md5-algorithm-in-objective-c
競技プログラミング時にプログラム以外で役立つもの

任意のinput.txtとc.cppを用意する。
そして以下のシェルスクリプトを実行

```sh:test.sh
#!/bin/sh
g++ c.cpp -o c
cat input.txt | ./c > out.txt
```

out.txtが出力される。
便利!!
Mac OS X: emacs 風キーバインドでMacを操作・カスタマイズ

Cocoa アプリのテキストインプットは標準で emacs 風に操作ができるが、それもカスタマイズ可能。

* control キーを左手小指に
USキーボードの場合ここは caps lock だが、システム環境設定で control キーにリマップした方が捗る。

* [KeyRemap4MacBook](http://pqrs.org/macosx/keyremap4macbook/index.html.ja)
・`Emacs Mode` の `Control+PNBF to Up/Down/Left/Right (when there are no other modifiers)` 
・同 `Control+AE to Command+Left/Right`
を有効にする

vim 風もある模様。

* [KeyBindingsEditor](http://www.cocoabits.com/KeyBindingsEditor)
control + hogehoge 等のキーバインドは、AppKit.framework 内の StandardKeyBinding.dict に定義されている。これはシステムファイルなのでユーザー権限では書き換え出来ないが、`~/Libyrary/KeyBindings/` 下にも同様のファイルを作ることで独自のキーバインドを定義することが出来る。
KeyBindingsEditor ではそれを自動的に作成、定義の編集が可能。

`Action` は Cocoa の NSResponder のメソッドそのものであり、いろいろ試せば面白い操作を定義出来るかもしれない。

参考：[テキスト編集のキー操作を自在にコントロールする](http://d.hatena.ne.jp/zariganitosh/20101026/text_key_binding)
[OS Xハッキング！(103) Cocoaアプリのキーバインドにこだわる(1)](http://news.mynavi.jp/column/osx/103/index.html)
[Default Mac OS X System Key Bindings](http://www.hcs.harvard.edu/~jrus/Site/System%20Bindings.html)

****
control + PNBF が上下左右カーソルと同等になるので、ホームポジションから指を離さずに操作できる。Spotlight 検索メニューや Google 検索の補完候補の選択も非常に楽になる。
同時に shift や option を使えば（指がつりそうになるが）文字列選択も可能。

その他、
control + H / D で delete / forward-delete、
control + L でカーソル位置が中心に来るようにスクロール、
control + K で切り取り、control + Y で貼り付け、等といった具合にいろいろ。
Core Animation: 暗黙のトランザクションを制御

```objective-c:Animation
CALayer *layer = [CALayer layer];

[CATransaction begin];
[CATransaction setAnimationDuration:10.0]; // アニメーション長さ
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; // イージング
[CATransaction setDisableActions:YES]; // アニメーション無効化

layer.frame = CGRectMake(0, 10, 200, 300);
layer.backgroundColor = [UIColor redColor].CGColor;

[CATransaction commit];
```

****

"CATransition" と名前が似ているので注意
AutoHotKeyで、クリック作業を自動化する

以下のように、毎回クリックするボタン決まってるよ！という場合は AutoHotKeyを利用すれば、自動クリックで作業の手間を省くことができます。

この例ではありがたみが感じられないかもしれませんが、
1000回同じボタンをクリックしないといけないとかいう局面で役に立ちます。

![](https://lh4.googleusercontent.com/-y628OTja27I/T99DsjNKCUI/AAAAAAAAEOY/aEpb14xXl9A/s800/2012-06-19_00h03_13.png)

# 手順

(AutoHotKey_Lのインストール手順については省略します)
1. まず、自動クリックしたいウィンドウのタイトルやクラス名を調べます。
2. スタートメニューから「AutoIt3 Window Spy」を起動して、上記iTunesダイアログにマウスカーソルを重ねます。
3. ウィンドウの情報が表示されるので、ウィンドウタイトル、ウィンドウクラス名、ボタンの名称をメモします。
4. それを元に、以下のスクリプトを作成し、実行して常駐させます。
5. さきほどのiTunesのダイアログを表示させると、自動でボタンがクリックされるのが確認できると思います。

![](https://lh5.googleusercontent.com/-736dOhdkzEA/T99Ixjnze5I/AAAAAAAAEO8/y8pyhdT5bUA/s800/2012-06-19_00h23_30.png)

![](https://lh3.googleusercontent.com/-vmDheod40rw/T99IjroFWhI/AAAAAAAAEO0/Ycp6dsRV5tA/s800/2012-06-19_00h12_07.png)


```ahk:autoclick_itunes.ahk
;iTunes の削除確認ダイアログ自動クリック
SetTitleMatchMode,2
#Persistent

SetTimer AutoClickiTunes,500	; millisecond
return

AutoClickiTunes:
    IfWinExist, iTunes ahk_class iTunesCustomModalDialog
    {
        ControlClick [ごみ箱] に入れる, iTunes ahk_class iTunesCustomModalDialog
    }
    return
```


この自動クリックを無効にするには、タスクトレイのHアイコンを右クリックして終了させてください。

![](https://lh3.googleusercontent.com/-7-T-PSmSeGI/T99Hw-1USfI/AAAAAAAAEOo/FpVJmMSKJ6k/s800/2012-06-19_00h22_27.png)

色々と応用が効くと思うので、ウィンドウやコントロールの指定の方法については、ヘルプを読んだりしてみてください。
Facebookのアプリがインストールされているか確認する

https://graph.facebook.com/<ユーザID>?fields=installed&access_token=<アクセストークン>

インストールされているとinstalledにtrue,されていないとfalseが返却される。

```json:戻り結果
{
  "installed": true, 
  "id": "<ユーザID>", 
  "type": "user"
}
```
ActiveRecord::Relationから配列へ(pluck)

## 特定のレコードのカラムで配列を作る

```ruby:member.rb
member = Member.select(:id) #=> [#<Member id: 1>, #<Member id: 2>, #<Member id: 3>, #<Member id: 4>, #<Member id: 5>]
```

という感じでActiveRecord::Relationクラスが返ってくるけど、配列が欲しかったのでmap使ってた。
けど、"pluck"とかあったのか。

```ruby:member.rb
member = Member.pluck(:id) #=> [1, 2, 3, 4, 5]
```
jQuery.flickable experiment

[公式](http://lagoscript.org/jquery/flickable)のスクリプトだと jQuery 1.5.x じゃないと動かないっぽいんで[非公式の修正版](http://app.orange-soft.jp/2011/08/jq1/)を使うという話．

jQuery.flickable のサンプルは[ここ](http://cure.shiroro.com/)を見るよろし．

以下のコードは[ここ](http://kaosf.bitbucket.org/jquery-flickable-exp.html)で実演．

```HTML
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="content-type" content="text/html" charset="utf-8">
<meta name="robots" content="noindex, nofollow">
<title>flickable test</title>
<!-- use jQuery 1.5.2 daringly
<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.2.min.js"></script>
<script type="text/javascript" src="http://lagoscript.org/files/jquery/flickable/jquery.flickable-1.0b3.min.js"></script>
-->
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="http://app.orange-soft.jp/wp-content/uploads/jquery.flickable-1.0b3-jq1.6.js"></script>
<script type="text/javascript">
  $(function() {
    $('#flickable1').flickable();
  });
</script>
<style type="text/css">
  #flickable1 {
    /* border: 1px solid #CCC; */
    width: 480px;
    height: 155px;
    /* overflow: auto; */
    overflow: hidden;
  }
  #flickable1 ul {
    list-style: none;
    width:854px;
    margin: 0;
    padding: 5px;
  }
  #flickable1 ul li {
    background-color: #EEE;
    border: 1px solid #CCC;
    height: 100px;
    width: 100px;
    margin: 5px;
    padding: 5px;
    float: left;
  }
  #flickable1 .ui-flickable-container {
    cursor: pointer;
  }
</style>
</head>
<body>

<div id="flickable1">
  <ul>
    <li>Content 1</li>
    <li>Content 2</li>
    <li>Content 3</li>
    <li>Content 4</li>
    <li>Content 5</li>
    <li>Content 6</li>
    <li>Content 7</li>
  </ul>
  <div style="clear:both;"></div>
</div>

<!-- ref. http://cure.shiroro.com/ -->
<!--      http://lagoscript.org/ -->
<!--      http://twilog.org/ka_/date-120618 -->
<!--      http://app.orange-soft.jp/2011/08/jq1/ -->

</body>
</html>
```
gauche.testで例外をテストする


参考: [Gauche ユーザリファレンス: 9.28 gauche.test - 単体テスト](http://practical-scheme.net/gauche/man/gauche-refj_102.html)

test-error手続きを使う。

~~~~~~lisp:code.scm
(error "Error: invalid type(s)." type1 type2)
~~~~~~

~~~~~~lisp:test.scm
(eqr (higher 'hoge 'integer) => (test-error))
~~~~~~

※ なおeqrはtest*を見やすいようにするため定義したマクロです。

~~~~~lisp:macro.scm
(define-syntax eqr
  (syntax-rules ()
                ((_ b => a)
                 (test* (quote b) a b))))
~~~~~

↓ これで、

~~~~~~lisp:result.scm
test (higher 'hoge 'integer), expects #<error> ==> ok 
~~~~~~


例外のタイプを見ることもできるらしい。

> fooの呼び出しが<io-error> (もしくはそのサブタイプ) の コンディションを投げるかどうかをテストしたければ、次のように書くことができます。
> 
>~~~~~~lisp
> (test "see if foo raises <io-error>" (test-error <io-error>) (foo))
>~~~~~~~
>
> <cite>[Gauche ユーザリファレンス: 9.28 gauche.test - 単体テスト](http://practical-scheme.net/gauche/man/gauche-refj_102.html)</cite>
Windows 8 のデスクトップで、タッチ入力の利便性向上を図る！

要は、下部のタスクバーがソフトウェアキーボードに隠れちゃって、なかなかに不便なのだが、
意外にもあっさりその問題が解決した。

**タスクバーを 上 に** 設定すれば全然隠れなーい♪



いや、しょぼくてすみません…

----

ちなみに

どの辺が不便かといえば、
ウィンドウ切替さえ、ソフトウェアキーボードをいちいち隠さないとできなかったりするのですよね((+_+))
(キー操作 alt + tab の切替も、デフォルトのソフトウェアキーボードではできない)

----

というかですね、

これを書いている最中、ハードのキー配置のソフトウェアキーボードを出す方法が分かったので、 alt + tab もできることが発覚…！！(+o+)

でもそのキー配置は使いにくかった…
Pythonで数値計算

numpyとか使うとよい。以下読めばだいたい出てる。

[Python Scientific Lecture Notes(和訳)](http://www.ike-dyn.ritsumei.ac.jp/~uchida/scipy-lecture-notes/index.html)
[Tentative NumPy Tutorial(和訳)](http://naoyat.hatenablog.jp/entry/2011/12/29/021414)
[SciPy Tutorial](http://docs.scipy.org/doc/scipy/reference/tutorial/index.html)
[SymPy 0.7.1-git documentation](http://docs.sympy.org/dev/tutorial.html)
[機械学習の Python との出会い](http://www.kamishima.net/mlmpyja/)

以下、自分で使ってみた例。

[問題4.19の解答(台形公式、シンプソンの公式)](http://d.hatena.ne.jp/hiratara/20120618/1339996543)
[問題4.13の解答(回転体の表面積)](http://d.hatena.ne.jp/hiratara/20120612/1339514127)
[問題4.7と4.8の解答(不定積分と定積分)](http://d.hatena.ne.jp/hiratara/20120611/1339428501)
[問題3.17の解答(Matplotlib)](http://d.hatena.ne.jp/hiratara/20120607/1339050243)
[問題3.16-3.18の解答(SymPy)](http://d.hatena.ne.jp/hiratara/20120606/1338997509)
[問題3.19の解答(マクローリン展開)](http://d.hatena.ne.jp/hiratara/20120606/1338980868)
[問題3.21の解答(ニュートン法)](http://d.hatena.ne.jp/hiratara/20120606/1338966896)
ユーザ情報とグループ情報を見やすくするVIEW


開発をしていると、どのユーザがどのグループに所属しているかすぐに知りたいことがあります。XOOPSのユーザ管理でユーザ編集を開いて確認することもできますが、SequelProなどのMySQLクライアントアプリでデータベースを直接参照したほうが見やすい場合があります。

その場合は、専用のビューを作っておきます。ビューを作るクエリは次です。

```sql
CREATE VIEW user_group_view AS
SELECT 
	U.uid AS user_id,
	U.name AS user_name, 
	U.uname AS user_uname,
	U.email AS user_email,
	G.groupid AS group_id,
	G.name AS group_name
	FROM PREFIX_users as U
	LEFT JOIN PREFIX_groups_users_link as L
		ON U.uid = L.uid
	LEFT JOIN PREFIX_groups as G
		ON L.groupid = G.groupid
	ORDER BY 
		U.uid ASC,
		G.groupid ASC
```

```PREFIX``` の部分はXOOPSのデータベース接頭辞に置き換えて下さい。
Ember.jsを使ってみる

* http://emberjs.com/about/ からstarter kitをダウンロードして展開

* とりあえずindex.htmlを開いてみるとHello world!と表示された
 * クリックしたらalertが出た

* index.html
 * js/
  * libs/ : emberとjquery
  * app.js
 * css/style.css

* index.htmlとapp.jsがアプリ本体らしい

* index.html(抜粋) : divタグが一つもなくて、handlebarsのビュー定義だけがある。scriptタグなのか。

```
<body>                                                               
  <script type="text/x-handlebars">                                  
    {{#view App.MyView}}                                             
      <h1>Hello world!</h1>
    {{/view}}
  </script>  
```

* レンダリングされたHTMLをchromeの開発者コンソールで見ると、divが自動生成されている。

```
<div id="ember153" class="ember-view">
    <div id="ember167" class="ember-view">
      <h1>Hello world!</h1>
    </div>
  </div>
```

* app.js (全文)
 * とりあえずEm.Applicationを作るらしい
 * そのあとViewを作るらしい
  * この変数名(App.MyView)がhandlerbars側と結びつけるためのキーとして使われるらしい
  * ViewにはmouseDown:等でイベントを書けるらしい
    * それはもうビューっていうかビュー以上の何かでは…

```
var App = Em.Application.create();
App.MyView = Em.View.extend({
  mouseDown: function() {
    window.alert("hello world!");
  }
});
```

* ビューは入れ子にできるらしい http://emberjs.com/guides/view_layer/#toc_child-views
 * GUIでいう各コンポーネントがViewになるのかな
jQueryを読み込むブックマークレット


どこからか拾ってきた

```javascript:jquerify
javascript:(function(){javascript:(function(){var src_url = 'http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js';var notice_style ='position:fixed;'+'z-index:10000;'+'top:0;'+'left:0;'+'background-color:red;'+'color:white;'+'padding:10px;'+'margin:10px;'+'font:bold 16px sun-serif;';var s=document.createElement('script');s.setAttribute('src',src_url);document.getElementsByTagName('body')[0].appendChild(s);var id = window.setInterval(function(){if (window['jQuery'] &&window['jQuery']['fn'] &&window['jQuery']['fn']['offset']){window.clearInterval(id);$('<div style=\''+notice_style+'\'><p>jQuery '+ jQuery.fn.jquery+' Loaded!<p></div>').appendTo('body').animate({opacity:1},2000).animate({opacity:'hide'},500,function(){jQuery(this).remove();});}},100);})();})();
NSArrayやNSDictionaryにintとかを入れたいとき

NSArrayはなんでも入れられてとっても便利なんですが、NSObjectしかダメっていう制約があります。なのでint型とかも普通にダメで、数字を普通に入れたい時でもNSNumberでキャストしないと怒られます。
以下、0,1,2っていうintを入れたい時

```objc:
int int0 = 0;
int int1 = 1;
int int2 = 2;
NSMutableArray *array = [NSMutableArray array];
[array addObject:[NSNumber numberWithInt:int0]];
[array addObject:[NSNumber numberWithInt:int1]];
[array addObject:[NSNumber numberWithInt:int2]];
NSLog(@"array - %@", array);
```

intとか使わないで最初からNSNumber使えば楽なのかもしれないっすね。
Coda2はRSAのSSH鍵を認識してくれない

2012/6/18現在の話ではありますが。今後は対応してもらえるかもしれません。
CodaがバージョンアップしてCoda2となったので早速インストールしましたが、SSHでつまりました。
今回は明確に鍵を指定できるようなUIになったのですが、そこで指定できるのがDSAの鍵のみのようです。
（RSA鍵を指定しても、鍵のアイコンが青くアクティブにならない。）
RSAのSSH鍵を認識してくれません。
仕方なく、DSAで鍵を生成しなおして、DSAの公開鍵をサーバーに新規に上げました。
DSAの鍵であれば、鍵のアイコンを押して秘密鍵ファイルを指定した後に、パスフレーズを聞かれます。
パスフレーズが正しく入力されればSSHで接続できるはずです。
NSDictionaryの入ったNSArrayを特定のキーでソートする

arrayというNSArrayにNSDictionaryが入っていて、その中のkeyのvalueでソートしたいとします。
高速列挙ではソートはしてくれないため、NSSortDescriptorを使います。

```objc:
//ソート対象となるキーを指定した、NSSortDescriptorの生成
NSSortDescriptor *sortDescNumber;
sortDescNumber = [[NSSortDescriptor alloc] initWithKey:@"key" ascending:YES];	
// NSSortDescriptorは配列に入れてNSArrayに渡す
NSArray *sortDescArray;
sortDescArray = [NSArray arrayWithObjects:sortDescNumber, nil];
// ソートの実行
NSArray *sortArray;
sortArray = [array sortedArrayUsingDescriptors:sortDescArray];
// 以上、ソート完了
ActivePerl／Net::SSH::W32PerlでSTDOUTが取れない

perlからsshを操作しようと思ったのだが……

```
use strict;
use Encode;
use Net::SSH::W32Perl;
my $ssh = Net::SSH::W32Perl->new(サーバ名, interactive=>1, debug=>1);
$ssh->login(ユーザID);
my ($out, $err, $exit) = $ssh->cmd("ls","\n");
print "stdout: $out\nstderr: $err\nexit_code: $exit\n";
$ssh->cmd("exit", "\n");
```

これを実行すると、パスワードプロンプトが表示され、ログインは成功する。
しかし、実行結果の$exitは0が取れるものの、STDOUTとSTDERRは空になってしまう。
lsをcpなどに変えて実行してみると、ファイルのコピーはされているので、コマンド自体は成功しているようだが、出力を取ることができないようだ。(Net::SSH::Perlでも同じ）

出力が取れない場合、Net::SSH::Expectという話もあるようだが、WindowsではNet::SSH::Expectはコンパイルエラーとなるようだ。（前提条件のIO::Ttyがインストールできない）

困った。
Redisのドキュメントをローカルで読む

特定コマンドの説明を見るときはredis-cliを実行してから

```bash
redis 127.0.0.1:6379> help blpop

  BLPOP key [key ...] timeout
  summary: Remove and get the first element in a list, or block until one is available
  since: 1.3.1
  group: list
```

のように`help コマンド名`で見られる．

```
redis 127.0.0.1:6379> help @sorted_set
```

とグループ(listやsetのようなデータ構造とかserverとか)を指定すると，そのグループのコマンド説明一覧が見られる．@で指定できるのは以下の10個

- @generic
- @string
- @list
- @set
- @sorted_set
- @hash
- @pubsub
- @transactions
- @connection
- @server
MySQLのユーザー一覧を取得する


MySQLのユーザー一覧を取得するSQL文

```SQL
SELECT * FROM mysql.user
```

ホスト名(Host)、ユーザー名(User)、パスワード(Password)の他に、
権限に関するカラムがありY/Nの値が格納されている。

全権ユーザーを作成するSQL文は下記

```SQL
GRANT ALL PRIVILEGES ON *.* TO 'newuser@localhost' IDENTIFIED BY 'xxxxxxxx' WITH GRANT OPTION;
```
Objective-C: プロパティの書き方

プロパティのセッターを上書きする

```objective-c:Hoge.h
@interface Hoge : NSObject

@property (retain, nonatomic) NSString *string;
@property (assign, nonatomic) NSUInteger count;
@property (assign, nonatomic) BOOL flag;

- (void)method;

@end
```

```objective-c:Hoge.m
#import "Hoge.h"


@interface Hoge()
{
	IBOutlet UILabel *textLabel;
}

@end

#pragma mark -

@implementation

@synthesize string = _string;	// アンバー+プロパティ名. " = _" を打てば Xcode が補完してくれるはず
@synthesize count = _count;
@synthesize flag = _flag;

- (void)method {}

// セッターの上書き. "- (void)set" を打てば Xcode が補完してくれるはず
- (void)setString:(NSString*)string
{
	// プロパティ属性 retain なので、その処理を自分で書く必要がある
	if (_string != string)
	{
		[_string release]; _string = nil;
		_string = [string retain];
	}
	
	// セッターで行いたい好きな処理. たとえば UILabel に値を入れる、など
	textLabel.text = string;
}

- (void)setCount:(NSUInteger)count
{
	_count = count;

	// セッターで行いたい好きな処理.
	// ……
}

- (void)setFlag:(BOOL)flag
{
	_flag = flag;

	// セッターで行いたい好きな処理.
	// ……
}

// あとしまつ
- (void)dealloc
{
	self.string = nil;
	
	[super dealloc];
}

@end

```

****

readonlyプロパティの書き方

```objective-c:Hoge.h
@interface Hoge : NSObject

// 公開用プロパティ. readonly なので外部からは読めるが書き換えられない
@property (retain, readonly, nonatomic) NSString *string;
@property (assign, readonly, nonatomic) NSUInteger count;
@property (assign, readonly, nonatomic) BOOL flag;

- (void)method;

@end
```

```objective-c:Hoge.m
#import "Hoge.h"


@interface Hoge()

// クラス内用プロパティ. readwrite にすることで内部からは普通のプロパティとして扱える
@property (retain, readwrite, nonatomic) NSString *string;
@property (assign, readwrite, nonatomic) NSUInteger count;
@property (assign, readwrite, nonatomic) BOOL flag;

@end

#pragma mark -

@implementation

@synthesize string;
@synthesize count;
@synthesize flag;

- (void)method
{
	self.string = @"Hello";
	self.count = 100;
	self.flag = YES;
}

// あとしまつ
- (void)dealloc
{
	self.string = nil;
	
	[super dealloc];
}

@end

```

```objective-c:Class.m
- (void)hogehoge
{
	Hoge *obj = [[[Hoge alloc] init] autorelease];
	[obj method];
	
	NSLog(@"%@", obj.string);
	NSLog(@"%d", obj.count);
	NSLog(@"%d", obj.flag);
}
```
Objective-C: クラスインターフェースの書き方

内部で使うインスタンス変数はなるべく.m側に書くようにする。IBOutlet, IBAction も .h に書く必要は無い。

```objective-c:Hoge.h
@interface Hoge : NSObject

- (void)method;

@end
```

```objective-c:Hoge.m
#import "Hoge.h"


// @interface クラス名() @end の形で書く
@interface Hoge()
{
	IBOutlet UIView *view;
	IBOutlet UButton *button;
	
	id _object;
}

// メソッドのプロトタイプ宣言
- (IBAction)buttonAction:(id)sender;

- (void)_myMethod;

@end

#pragma mark -

@implementation

- (void)method {}

@end

```

****


同様に、公開する必要の無いプロパティも.m側に書ける。

```objective-c:Hoge.h
@interface Hoge : NSObject

// 公開用のプロパティ
@property (assign, nonatomic) NSInteger count;

- (void)method;

@end
```

```objective-c:Hoge.m
#import "Hoge.h"

@interface Hoge()
{
}

// クラス内で使うプロパティ
@property (retain, nonatomic) NSString *string;
@property (assign, nonatomic) BOOL flag;

@end

#pragma mark -

@implementation

@synthesize string;
@synthesize flag;


@synthesize count;

- (void)method {}

- (void)dealloc
{
	self.string = nil;
	
	[super dealloc];
}

@end

```

****

このように書けば.hの記述をすっきりさせることができる。
ことえりショートカットを変更する方法

Mac OS X の Cocoa アプリであれば control キーを使った emacs 風操作が可能だが、一部のショートカットがことえりの定義と重複してしまう。（ことえりは control キーを使ったショートカットを採用している。）
ことえりのショートカット定義は Kotoeri.app 内の KotoeriKeys.plist や Menu.plist に定義されている。

```KotoeriKeys.plist
/System/Library/Input Methods/Kotoeri.app/Contents/Resources/KotoeriKeys.plist
```

```Menu.plist
/System/Library/Input Methods/Kotoeri.app/Contents/Resources/Menu.plist
```

たとえば `KotoeriMenuCommand_RegisterWords` は「単語登録／辞書編集…」のための定義で、'control shift N' が割り当てられている。この Dictionary ごと削除すれば定義を消すことが出来る。
<!-- --> でコメント化してしまえば良い。

これでもうまく行かない場合は、Menu.plist を開いて複数ある `Register Words` の項目を書き換える。

```xml:Menu.plist
<dict>
	<key>title</key>
	<string>Register Words</string>
	<key>command</key>
	<integer>1919248247</integer> <!-- これは「単語登録／辞書編集…」を示す値なので触らない -->
	<key>enable flag</key>
	<integer>0</integer>
	<key>modifier</key>
	<integer>0</integer> <!-- 念のため0にする -->
	<key>shortcut</key>
	<string></string> <!-- これを空文字にする -->
	<key>mark character</key>
	<integer>0</integer>
</dict>
```

ことえりメニューおよび「英字」「ひらがな」「カタカナ」「半角カタカナ」等も Menu.plist に定義されている。

作業前には KotoeriKeys.plist および Menu.plist のバックアップを推薦。
変更の反映には `ことえり.app` の再起動（アクティビティモニタ等で）と、メニューバーの更新のため `$ killall SystemUIServer` を実行する。
Xcode4 "TODO: " "FIXME: " "!!!: " "???: " をビルド警告に出力する

RunScript に

```
KEYWORDS="TODO:|FIXME:|\?\?\?:|\!\!\!:" find ${SRCROOT} \( -name "*.h" -or -name "*.m" \) -print0 | \ xargs -0 egrep --with-filename --line-number --only-matching "($KEYWORDS).*\$" | \ perl -p -e "s/($KEYWORDS)/ warning: \$1/"
```

を記述。

***

[出典](http://d.hatena.ne.jp/h_mori/20110720/1311190752)
Mac OS X上のGoogle Chromeで、ローカルファイルを読める設定にする

テキストエディタで下記のようなシェルスクリプトを作成し、ターミナルから実行。Chromeが起動します。

```Bash:run.sh
#!/bin/sh
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files
```

シェルスクリプトに実行属性を付けるのを忘れずに。
chmod +x run.sh
カスタム UIView を xib から作る方法

# Interface Builder での実装例

View テンプレートから xib ファイルを新規作成したら、ビューの Custom Class を指定します。File's Owner の方は不要です。
![1.png](https://qiita-image-store.s3.amazonaws.com/0/3603/61ac2247-7ad5-8a3c-228f-4f93a0bea117.png)

----

ビュー上にコントロール類を配置して制御する場合はカスタムビュークラスの IBOutlet/IBAction に接続します。
![2.png](https://qiita-image-store.s3.amazonaws.com/0/3603/0d18bef3-a470-1b92-f887-6e177b047825.png)


# コードの実装例

ポイントは UINib です。サブクラスを作って UINib を使ってビューのインスタンスを得ます。
※ xib ≒ nib です。

```objc:MyView.h

@interface MyView : UIView

+ (instancetype)myView;

@end

```


```objc:MyView.m

@interface MyView ()

@property (weak, nonatomic) IBOutlet UISwitch *switch;

- (IBAction)buttonAction:(id)sender;

@end

@implementation MyView

- (void)_init
{
	// initialize
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
	self = [super initWithCoder:aDecoder];
	if (self) {
		[self _init];
	}
	return self;
}
- (id)initWithFrame:(CGRect)frame
{
	self = [super initWithFrame:frame];
	if (self) {
		[self _init];
	}
	return self;
}

- (void)awakeFromNib
{
	[super awakeFromNib];
	
	// 初期設定など
}

+ (instancetype)myView
{
	// xib ファイルから MyView のインスタンスを得る
	UINib *nib = [UINib nibWithNibName:@"MyView" bundle:nil];
	MyView *view = [nib instantiateWithOwner:self options:nil][0];
	return view;
}

- (IBAction)buttonAction:(id)sender
{
	// アクションを実装
}

@end
```

# 使い方

```objc

MyView *customView = [MyView myView];
[view addSubView:customView];

```
utf8::is_utf8 considered harmful 再考


[utf8::is_utf8 considered harmful - Bulknews::Subtech - subtech](http://subtech.g.hatena.ne.jp/miyagawa/20080218/1203312527)

今も正しい。ただし 「Unicode文字列」といっているのは当時テキスト文字列という用語はなかったためで、 s/Unicode 文字列/テキスト文字列/ するとよい。

ブックマークレット:

```js
javascript:document.body.innerHTML=document.body.innerHTML.replace(/Unicode 文字列/g, "テキスト文字列");
```
ifconfigをParsecする


System.Info.MAC.Fetchの実装がMacのifconfigを読んでくれないのでちょっとParsecの勉強ついでに調べてみる。

ifconfigの内容をparsecでパースする。Parserの中でparse関数を読んでいるのは筋が悪い気がするし、こういう分野は正規表現が得意な気がする。

最初に各NICのセクションを分けて、それぞれの中をさらにパースして結果とする。

```haskell:parse_ifconfig.hs
before :: Parser a -> Parser Bool
before p = try (lookAhead p *> return True) <|> (eof *> return False) <|>(anyChar *> before p)


nicSection :: Parser (String, Maybe MAC)
nicSection = do
  name <- many1 alphaNum
  r <- manyTill anyChar (try $ lookAhead $ (void (char '\n' *> alphaNum)) <|> eof)
  let mac = case (parse macAddr "macaddr parse" r) of
        Left _ -> Nothing
        Right mac -> mac
      ret = (name, mac)
  (char '\n' *> return ret) <|> return ret
  -- Skip next char if it's '\n'. However, the below doesn't work
  -- try $ char '\n'
  -- return ret


nicSections :: Parser [(String, Maybe MAC)]
nicSections = many1 nicSection


macAddr :: Parser (Maybe MAC)
macAddr = do
  found <- before markers
  if found
    then do
      markers
      spaces
      parseMAC ':' >>= return
    else return Nothing
 where
  markers = choice $ map (try . string) [ "ether", "HWaddr" ]


parseNICs' :: Parser [(String, MAC)]
parseNICs' = (foldr macAddrOnOnly []) <$> nicSections
  where
    macAddrOnOnly (_, Nothing) p = p
    macAddrOnOnly (n, Just x) p = (n, x) : p


main:: IO ()
main=do
  let u = parse parseNICs' "ifconfig mac" mac
  putStrLn $ show u
```

nicSectionの最後の行あたりはもっといい方法がありそうな気がする。「もし今読んでいるところが'\n'なら一文字読む」ということがやりたい。
Emacs の dired でディレクトリを先に表示する

これについてWebを調べると、大抵

```cl
(setq ls-lisp-dirs-first t)
```

を .emacs に書くという情報が見つかるが，これは Windows で ls をエミュレートするための ls-lisp の機能であり，Ubuntu などでは動かない．

ls が使える環境でディレクトリを先に表示したいなら，以下のように .emacs に書く．

```cl
(setq dired-listing-switches "-AFl --group-directories-first")
```

dired の ls オプションは `dired-listing-switches` で変更でき，`--group-directories-first` によってディレクトリを先に表示できる．`-AFl` は好みと環境に合わせて設定する．

また，ディレクトリのシンボリックリンクがファイル側に表示するのが嫌なら `-L` を追加すればよい．
初期化されていない可能性がある変数の真偽値で分岐

Elispで「変数が初期化されていて、かつその変数がnilでないとき」に処理を行いたいときはこんな感じで書ける。

```cl
(when (and (boundp 'var) var)
  body...)
```

`(when var body)` としてしまうと void-variable が発生するので注意。
mysqlユーザーの削除


###1.ユーザーからrevokeで権限を剥奪

```mysql:revoke
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user_name
```

###2.drop userでユーザーを削除
```mysql:drop
drop user user_name;
```


下記ではうまくいかないことがある。

```mysql:delete
DELETE FROM mysql.user WHERE user='user_name';
```
ヒアドキュメントを便利にする String#undent メソッド

元ネタは Homebrew の String#undent メソッドです．
ここで紹介するものはそれを少し賢くしています．

```ruby
class String
    def undent
        min_space_num = self.split("\n").delete_if{|s| s=~ /^\s*$/ }.map{|s| s[/^\s*/].length }.min
        self.gsub(/^[ \t]{,#{min_space_num}}/, '')
    end
end
```

Ruby のヒアドキュメントでは，

```ruby
class Notifier
    def warning
        <<-EOS
*** WARNING ***
    your action is invalid!

    check your input.
        EOS
    end
end
```

という風に，インデントを無視して書かなければなりません．
なぜなら，<<-EOS と EOS で囲まれている部分すべてが文字列になるので，インデントも文字列の一部に入ってしまうからです．
しかし，String#undent メソッドを使うと，次のように自然に書けます．

```ruby
class Notifier
    def warning
        <<-EOS.undent
        *** WARNING ***
            your action is invalid!

            check your input.
        EOS
    end
end
```

Homebrew の String#undent はヒアドキュメントの1行目のスペース数だけを見て undent していますが，ここに書いたものは

- 各行の行頭のスペースの中で一番スペース数が少ないものをインデント数と判断して，全行のインデントを削除
- ただし，空行やスペースのみの行は除く

というふうに，もう少し賢くインデント数を判断して undent します．
Dropbox を Linuxサーバでも使うときにやるべき設定

Dropboxは本当にあちこちで使っていて、Linuxでも共有させたいよね。
実はツールとかもしっかり用意されているんだけど、意外と見落とされていることが多いらしいのでメモした。

ついでに、利用時にやっておいたほうが良い設定についても。

### Linux版のDropboxツールをDownload して起動

https://www.dropbox.com/install?os=lnx

ここで公式のものを配布しているので落としてくる。
CLI版はページ半分より下にある手順を参照。

起動まで同ページに書いてあるのでそのとおりに。

### 起動後のリンクを開く

dropboxdを起動すると

```
このクライアントはアカウントにリンクされていません...
このマシンをリンクするには https://www.dropbox.com/cli_link?host_id=XXXXXXXXXXXXXXXXXXX&cl=ja を開いてください。
```

みたいな表示が出るので、このリンクをコピペしてブラウザでアクセス。
そちらの画面で承認が完了すると、

```
クライアントはリンクされました。XXXXX さん、ようこそ！
```

てな感じになる。これで登録完了
とりあえずdropboxdは一旦止めてOK.

### 管理ツールのダウンロード

Dropboxツールの配布ページ下部にある、CLIツールのリンク( https://www.dropbox.com/download?dl=packages/dropbox.py )から、
dropbox.pyをダウンロード。

```
% mkdir ~/bin && cd ~/bin
% wget https://www.dropbox.com/download?dl=packages/dropbox.py
% chmod +x dropbox.py
```

dropbox.pyを叩くとhelpが出るので、細かいことが気になったらそれを参考に。ここでは必要なもののみ説明。
個別のコマンドのhelpが見たいなら、以下のとおりで。

```
% dropbox.py help [command]
```

ちなみに、昔はツールがもっと色々種類がわかれていたんだけど、今はdropbox.py一本で大丈夫そう。
(というか古いツールはpythonのバージョンなどで苦労するのでやめたほうがいい)

### 起動と設定

まず起動。

```
% dropbox.py start
```

dropboxは起動すると全力でローカルにファイルをコピーしてきて辛いので、色々設定。

まず、初期設定のままだとlansyncという機能で周囲にUDP broadcastしまくって超迷惑なので、これを最初に切る。

```
% dropbox.py lansync n
```

次に、sync対象から除外したいdirを設定。
大したもの入れてない、とかこういうの気にしない人はスルーでOK

ちなみに、 ディレクトリの指定は現在位置からDropbox/ dirへの相対パスで指定する。面倒な場合はDropbox/ dirに移動してやると間違えない。

```
% cd ~/Dropbox
% dropbox.py exclude add [dir name]
% dropbox.py exclude list
```

コレでsync対象が絞れたら、restartする

```
% dropbox.py stop
% dropbox.py start
```

以上で完了。
Nクイーン高速化

```scheme:fast.scm
#!/usr/local/bin/gosh

(define (solve? num ls)
  (let loop ((ls ls)(n 1))
	(cond
	  ((null? ls)#t)
	  ((= (abs (- num (car ls))) n)
	   #f)
	  (else (loop (cdr ls)(+ n 1))))))

(define (check? lst)
  (let loop ((lst lst))
	(cond
	  ((null? (cdr lst))#t)
	  ((solve? (car lst) (cdr lst))
	   (loop (cdr lst)))
	  (else #f))))

(define (queen lst)
  (let loop ((lst lst)(result '()))
	(if (null? lst)
	  (print (reverse result))
	  (for-each (lambda(x)
		(if (check? (reverse (cons x result)))
		          (loop (delete x lst) (cons x result)))) lst))))
```

>;(time (queen '(0 1 2 3 4 5 6 7)))
>; real   0.008
>; user   0.010
>; sys    0.000
AFNetwork　を読み込む手順



AFNetWorkのプロジェクトまるごと、git clone で、使いたいプロジェクト内にダウンロードする。
そのあと、Build phraseで、
Compile SoucesのところにAFNetworkのmクラスがいっぱい入っている。


でも、そのままじゃ使えないので、ARC対応にするべく、それらのクラス全てに

```
-fno-objc-arc
```

とフラグを立てると、　ARCでも使えるようになる。

ハマったところは、AFNetwork関連のクラスだけ、ディレクトリーにコピーして、-fno-objc-arc フラグを立てていて、うまく行かなかったところ。
NSMutableDictionary にハッシュでその名前が呼ばれたかどうかを確認する方法






    NSMutableDictionary *t = [[NSMutableDictionary alloc] init ];
    NSMutableArray *names = [NSMutableArray array];
    
    // t にインデックスを、その名前が呼ばれたかどうかを判別させるためのマップを作る。
    
    while([self.dummyPerson count] != 3){
        int r = arc4random() % [self.followers count];

        
        NSMutableDictionary *follower = [self.followers objectAtIndex:r];
        NSString *fName = [follower valueForKey:@"screen_name"];
        
        
       // もしも、その名前が存在していなかったら、作る。 
        if (![t valueForKey:fName]){
            [self.dummyPerson addObject:[self.followers objectAtIndex:r]];
        }
        
        [t setValue:@"exist" forKey:[self screenNameAt:r]];
    }
Storyboardで、ボタンをクリックせずに、別の画面に遷移させたい時



###  resultViewControllerはボタンを押さずにページを遷移させたい。



- まず、NavigationControllerに独立した、resultViewControllerをつなげる。

- つぎにResultViewControllerのIdentifierに、resultViewController、クラスにResultViewControllerを作成する。

- あとは以下のコードを書けばok. 



``` objectivec

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; 

    ResultViewController *rvc = [self.storyboard instantiateViewControllerWithIdentifier:@"resultViewController"];

    [self.navigationController pushViewController:rvc animated:YES];

```
How to play Sound no lag in AVFoundation Framework.





事前に、
```
[audio prepareToPlay]
```
 を呼ぶことで、その音楽ファイルは再生準備ができているよっていうメッセージが送られる。もしもこれをやらずに、[audio play]って呼ぶと、その音楽ファイルが再生可能かどうかをいちいち確認するので、一回目の呼び出しがその分遅れる。
Apacheを利用せずにsvnリポジトリをWebDav公開する方法はあるのでしょうか？

例えば、「ディレクトリをそのままWebDav公開する」ということであれば、 [Plack::App::DAV](http://search.cpan.org/dist/Plack-App-DAV/) などを利用して、Apacheの「dav_module」でなくとも実現可能です。

これと同じようにApacheを利用せず、「svnリポジトリをそのままWebDav公開する」ということには、どういった手法があるのでしょうか？

PSGI、Rack、WSGIを利用したライブラリがありそうな気がするのですが、見付けることができませんでした。
Switch bashrc settings for Cygwin or MinGW

## via
[.bashrcでのCygwinとMinGWの見分け方 #Bash - Qiita](http://qiita.com/items/9c39b405444c92aae631#comment-5dda4e7827a57eb5b0ca)

## ~/.bashrc
c.f. https://gist.github.com/2942330#file_.bashrc

```bash:~/.bashrc
sysname=`uname -s | sed -e "s/\([a-zA-Z]\+\).*/\1/"`
if [ "$sysname" = "CYGWIN" ]; then
	LANG=ja_JP.UTF-8
elif [ "$sysname" = "MINGW" ]; then
	LANG=ja_JP.sjis
	JLESSCHARSET="japanese-sjis"
	OUTPUT_CHARSET=sjis
fi
```
## whereami (Simulate 'uname -o')
c.f. https://gist.github.com/2942330#file_whereami

```sh:whereami
#!/usr/bin/bash
sysname=`uname -s | sed -e "s/\([a-zA-Z]\+\).*/\1/"`
echo $sysname
```
deviseでログイン必須ページ、リダイレクトページ指定

railsのdeviseでは、閲覧やアクションのためにログイン必須なページを作ることができます。
また、未ログイン状態でログイン必須ページにアクセスした場合、自動的にsign_in_pathに飛ばされます。
このredirect先が都合が悪い場合の変更方法。(OAuth認証のみにした場合、都合が悪くなりました)

deviseの導入や環境は前回の記事を参照してください。
「deviseでfacebook,twitter認証」　http://goo.gl/0Mnl4

#1. ログイン必須なページを作る
Controller側で、以下のように設定してください。

```ruby:app/controllers/hoge_controller.rb
 before_filter :authenticate_user!, :except=>[:hello]
  def hello
    .
    .
    .
  end
.
.
.
```
この場合、hello action以外はログイン必須となります。ログイン不要なアクションは、[:hello,:bye]のように複数指定も可能です。

#2. リダイレクト先指定

ログイン必須ページにゲストで入った場合のリダイレクト先を変更します。

##2-1. devise設定
devise.rbの一番下にある　# config.warden do |manager| をコメントインし、以下に変更。

```ruby:config/initializer/devise.rb
  config.warden do |manager|
     manager.failure_app = CustomAuthenticationFailure
  #   manager.intercept_401 = false
  #   manager.default_strategies(:scope => :user).unshift :some_external_strategy
   end

```

##2-2. リダイレクト先の指定
ライブラリーに以下のファイルを作成します。
前回の記事の続きで、自動でfacebook認証させることもできます。

```ruby:lib/custom_authentication_failure.rb
  class CustomAuthenticationFailure < Devise::FailureApp 
  protected 
    def redirect_url 
      root_path #rootに飛ばす場合
  #    root_path+"users/auth/facebook" #自動でfacebook認証させる場合
    end 
  end 
```

##2-3. ライブラリーを読みこませる
configに以下の行を追記します。似たような行がコメントアウトされてるので、その下にでも。

```config/application.rb
.
.
    # Custom directories with classes and modules you want to be autoloadable.
    # config.autoload_paths += %W(#{config.root}/extras)
      config.autoload_paths += %W(#{config.root}/lib)
.
.
```

これでサーバーを立ち上げ直し、ログイン必須ページに飛んだときにリダイレクトされていれば成功です。
How to use MockJax


##jQuery Mockjax: Ajax request mocking
MockjaxはAjaxのリクエストをインターセプトして返してあげるモックを作成するための、jQueryのプラグインです。
[githubはこちら](https://github.com/appendto/jquery-mockjax)

Ajaxの処理を書いていると、コールバック関数の確認はサーバ側の処理がないと確認がとれないのですが、このプラグインを使えば
サーバ処理がなくてもJavascriptの動作確認ができるのでとても便利です。
なので今日は簡単に使い方を書いてみます。

##How to use

```フォルダ構成
root --- index.html
	   |
	   |-lib
          |-jquery-1.7.2.min.js
          |-jquery.mockjax.js
```

サンプルということでindex.htmlにJavascriptも書いてしまいます。
単純にclick meというボタンを押すと、ajaxによりリクエストを飛ばして、mockjaxがインターセプトして返すレスポンスデータを表示するといった簡単なものです。
とても簡単なのでぜひやってみてください。

```index.html

<!DOCTYPE HTML>
<html lang="en-US">
<head>
	<meta charset="UTF-8">
	<title>How to use mockjax</title>
</head>
<body>
	<input id="fire" type="button" value="click me!" />
	<div id="content">
		<div id='text'></div>
		<div id='message'></div>
	</div>
	<script src="lib/jquery-1.7.2.min.js"></script>
	<script src="lib/jquery.mockjax.js"></script>
	<script type="text/javascript">
		
		//send request**********************************************
		//ボタンをクリックしたときにajaxでリクエストを送ってあげる。
		$('#fire').click(
			function(){
				$.ajax(	{
					url : 'sample/test',
					type : 'GET',
					success : callback,
					error:error,
					datatype:'json'
				});
			}
		);
		//********************************************************
		
		//callback*************************************************
		//ajax リクエストの正常終了時のコールバック
		function callback(data,status){
			$('#text').html('text:' + data.text);
			$('#message').html('message:' + data.message);		
		};
		
		//ajax リクエストのエラー発生時のコールバック
		function error(jqXHR, textStatus, errorThrown) {
			console.log(textStatus);
		};
		//********************************************************

		//モック関数************************************************
		//mockjaxを定義する。
		$.mockjax(
			{
				url: 'sample/test',　　　　　　　　　　　// インターセプトするURLを書く
				responseTime: 500,                   //　戻りの時間を書く。ここの時間を延ばせば、なかなかリクエストが返ってこないときのテストができる
				responseText: {                      //　戻りのデータを書く。
						text: 'text data',
						message:'Hello mockjax!!'
					}				
			}
		);
		//********************************************************

	</script>
</body>
</html>
```
buster.jsでエラーが出たテストまで自動でスクロールさせる

```js
buster.testRunner.on("suite:end", function(){
    setTimeout(function(){
        var fail = document.querySelector("ul.test-results > .error") ||
                   document.querySelector("ul.test-results > .failure");
        if(fail){
            document.body.scrollTop = fail.offsetTop;
        }
    }, 0);
});
```
LokkaのStaticなページをレイアウトを適用して表示するプラグイン

LokkaでStaticページを表示するプラグインは

https://github.com/daic-h/lokka-static

というdaic-hさんが作ってくれているのがあったのですが
これだとThemeのLayoutは適用されないので、
Layoutを適用して表示してくれるプラグインを作った。

https://github.com/sowawa/lokka-layouted-static

一応趣旨が違いそうだったのでlayoutedという名前にしておいた。。。