OmniAICreator/Qiita-1.07M huggingface dataset:
ブランチ名 + 作業状態 + stash数 をzshのプロンプトに表示

![](http://cdn-ak.f.st-hatena.com/images/fotolife/C/Cside/20120613/20120613221934.png)

uasiさんの [ZshでGitのカレントブランチを右プロンプトに表示。コミット済みのきれいな状態だと緑色、未コミットの編集がある場合は赤色で表示される。](http://qiita.com/items/1050) を愛用されている方は多いと思います。これを使うと

* 作業ブランチ
* 未コミットファイルの有無
* mergeやrebaseの途中であるか

が分かりますが、僕はこれに加えてstashの数が分かるようにしています。方法は [zsh で git の stash の数出すようにしたら便利だった。](http://d.hatena.ne.jp/Yoshiori/20120413/1334324588) を見て知りました。

最終的な .zshrc の設定は以下のようになります。

```sh
# git stash count
function git_prompt_stash_count {
  local COUNT=$(git stash list 2>/dev/null | wc -l | tr -d ' ')
  if [ "$COUNT" -gt 0 ]; then
    echo " ($COUNT)"
  fi
}

setopt prompt_subst
autoload -Uz VCS_INFO_get_data_git; VCS_INFO_get_data_git 2> /dev/null

function rprompt-git-current-branch {
  local name st color action

  if [[ "$PWD" =~ '/\.git(/.*)?$' ]]; then
    return
  fi

  name=$(basename "`git symbolic-ref HEAD 2> /dev/null`")
  if [[ -z $name ]]; then
    return
  fi

  st=`git status 2> /dev/null`
  if [[ -n `echo "$st" | grep "^nothing to"` ]]; then
    color=${fg[blue]}
  elif [[ -n `echo "$st" | grep "^nothing added"` ]]; then
    color=${fg[yellow]}
  elif [[ -n `echo "$st" | grep "^# Untracked"` ]]; then
    color=${fg_bold[red]}
  else
    color=${fg[red]}
  fi

  gitdir=`git rev-parse --git-dir 2> /dev/null`
  action=`VCS_INFO_git_getaction "$gitdir"` && action="($action)"

  # %{...%} surrounds escape string
  echo "%{$color%}$name$action`git_prompt_stash_count`$color%{$reset_color%}"
}

# how to use
PROMPT='`rprompt-git-current-branch`'
```
短縮URLを復元

転載元：http://tokyo.supersoftware.co.jp/superlabs/2012/05/211903.html

ちょい変更。
?url={短縮URL}
で復元URLをテキスト表示

```php

<?php

$h = get_headers($_GET['url'],true);
if(isset($h['Location'])){
	$long_url = $h['Location'];
	if(is_array($long_url)){
		$long_url = end($long_url);
	}
}

echo $long_url;
?>

```
Automated detection of build directory in waf

In the build process, bld.cur_script is set as a running script node.
We can use bld.cur_script to detect building directory.

```py
bld.cur_script.relpath() # Returns relative path from root waf script
```

I add handy function to bld object as below.

```py
def build(bld):
  def add_prefix(bld, path):
    return os.path.join(os.path.dirname(bld.cur_script.relpath()), str(path))

  bld.add_prefix = functools.partial(add_prefix, bld)
  bld.recurse('dir1 dir2 ... dir3')
```
ブックマークを便利にする設定

ファイルのある位置をブックマークするのに便利な設定をしました。

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

```common-lisp:.emacs.d/init.el
;; ブックマークを変更したら即保存する
(setq bookmark-save-flag 1)
;; 超整理法
(progn
  (setq bookmark-sort-flag nil)
  (defun bookmark-arrange-latest-top ()
    (let ((latest ( bookmark-get-bookmark bookmark)))
      (setq bookmark-alist (cons latest (delq latest bookmark-aliset))))
    (bookmark-save))
  (add-hook 'bookmark-after-jump-hook 'bookmark-arrange-latest-top))
```

超整理法の設定をすると最近使ったブックマークを上に持ってきてくれるようになります。

ブックマークしたい箇所で、`C-x r m`(`bookmark-set`)をします。ブックマーク名を聞いてくるので、後で思い出しやすい名前を入力します。

`C-x r l`(`bookmark-bmenu-list`)をすると登録しているブックマークの一覧のバッファに移動します。一覧から移動したいファイルを選択します。

## 参照
「Emacsテクニックバイブル」P89
multitail でログを見やすく表示する

```tail -f```よりもうすこしみやすくログを流したい。
multitail を使う。

![画像](https://img.skitch.com/20120613-1wne758dhg6wqrkw2j8x3mn2bm.png)

```yum install multitail``` とかパッケージで入る。

今は php のエラーログを見たいので ```sudo vim /etc/multitail.conf``` して設定ファイルを開き、php のエラー用シンタックスを追加する。デフォルトでも apache のログの設定などは入っている。

# 設定
正規表現で色を指定して、ログの path を指定すると、
```multitail /log_dir/hoge.log``` で色付きのログが流れていく

```/etc/multitail.conf
### PHP Error log scheme
colorscheme:php_error:php error
cs_re:yellow:line .*
cs_re:cyan:^\[..-...-.... ..:..:.. ...\]
cs_re:green:PHP 
cs_re:blue:in .*
cs_re:red:Warning:
cs_re:red:Fatal error:
cs_re:red:Parse error:

# path
scheme:php_error:/log_dir/hoge.log
```

カラフルだとやる気がでる。
.bashrcでのCygwinとMinGWの見分け方

CygwinとMinGWでの`which bash`の出力が違うので、それを利用する。
Cygwinだと`/usr/bin/bash`、MinGWだと`/usr/bin/bash.exe`と言われるので、

```.bashrc
_bash=`which bash`
if [ $_bash = "/usr/bin/bash" ] ; then
  LANG=ja_JP.UTF-8
elif [ $_bash = "/usr/bin/bash.exe" ]; then
  LANG=ja_JP.sjis
  JLESSCHARSET="japanese-sjis"
  OUTPUT_CHARSET=sjis
fi
```

を記載するとCygwinとMinGWでLANGなどの設定を変えられる。

6/13 17:11追記
コードが微妙に間違ってたので書き直しました
ファイルの文字コードを変換して出力する。（おまけで改行コード変換）

# 文字コードの変換
``` groovy
// それぞれの文字コードで書かれたテキスト
def sjis = /C:\work\sjis/
def euc = /C:\work\euc/
def utf8 = /C:\work\utf8/

// sjisのファイルをそれぞれの文字コードで出力
new File(sjis + "_sjis").write(new File(sjis).getText("MS932"),"MS932")
new File(sjis + "_euc").write(new File(sjis).getText("MS932"),"EUC_JP")
new File(sjis + "_utf8").write(new File(sjis).getText("MS932"),"UTF-8")

// eucのファイルをそれぞれの文字コードで出力
new File(euc + "_sjis").write(new File(euc).getText("EUC_JP"),"MS932")
new File(euc + "_euc").write(new File(euc).getText("EUC_JP"),"EUC_JP")
new File(euc + "_utf8").write(new File(euc).getText("EUC_JP"),"UTF-8")

// utf8のファイルをそれぞれの文字コードで出力
new File(utf8 + "_sjis").write(new File(utf8).getText("UTF-8"),"MS932")
new File(utf8 + "_euc").write(new File(utf8).getText("UTF-8"),"EUC_JP")
new File(utf8 + "_utf8").write(new File(utf8).getText("UTF-8"),"UTF-8")
```

# 改行コードの変換
``` groovy
// LFに変換
assert "hoge\r\nhoge".normalize() == "hoge\nhoge"
assert "hoge\nhoge".normalize() == "hoge\nhoge"

// 実行環境に依存した改行コードに変換
// ※Windows環境以外では例外が投げられます。
assert "hoge\nhoge".denormalize() == "hoge\r\nhoge"
assert "hoge\rhoge".denormalize() == "hoge\r\nhoge"
```

参考
http://d.hatena.ne.jp/orangeclover/20100103/1262483981
http://d.hatena.ne.jp/orangeclover/20110111/1294676227
http://npnl.hatenablog.jp/entry/20110325/1301006575
Groovyでzip処理（圧縮 and 解凍）

## 圧縮
・フォルダ内のファイルを圧縮

``` groovy
def dir = $/C:\work\test/$
def zipfile = $/C:\work\a.zip/$
new AntBuilder().zip(destfile:zipfile,basedir:dir)
```

・特定のファイルをまとめて圧縮

``` groovy
def zipfile = $/C:\work\a.zip/$
def f1 = $/C:\work\20120613\a.txt/$
def f2 = $/C:\work\20120613\b.txt/$

new AntBuilder().zip(destfile:zipfile) {
  tarfileset(file : f1)
  tarfileset(file : f2)
}
```

## 解凍
``` groovy
new AntBuilder().unzip(src:"hoge.zip", dest:".") 
```

## ちなみにgzipの場合
- 圧縮 : 「zip」 → 「gzip」
- 解凍 :  「unzip」 → 「gunzip」

## まとめ
AntBuilderって便利！
ただ、あまりないとは思いますが、Groovyがインストールされていない環境で実行させる場合、「groovy-all-X.X.X.jar」以外にantのjarが必要になってくるので注意が必要。（grapを使用するなり、GROOVY_HOME内のlibにあるのを使用しましょう）
使用するタスクによって違うでしょうけど、今回の場合「ant-X.X.X.jar」、「ant-launcher-X.X.X.jar」が必要でした。
instrumentsでmalloc_historyをチェックする


1. Product>Profile
1. Zombiesを選択
1. Zombie Messagedの詳細をクリック
1. RefCtにリテインカウントが表示されているので、-1の箇所をチェック

![](http://i.stack.imgur.com/JS81X.png)
![](http://i.stack.imgur.com/arL7G.jpg)

[Getting info about bad memory address in LLDB](http://stackoverflow.com/questions/9853100/getting-info-about-bad-memory-address-in-lldb)
Ruby で 抽象クラス/メソッド を作りたい

Ruby では抽象クラスや抽象メソッドをサポートしていないが、抽象メソッドとして使用したいメソッドで例外を投げることで、似たような役目を果たせる。

```ruby
# -*- coding: utf-8 -*-
class AbstractClass
  def my_print
    puts_string
  end

  # 抽象メソッド
  def puts_string
    raise "Called abstract method: my_print"
  end
end

class SuperClassA < AbstractClass
  def puts_string
    puts "a"
  end
end

class SuperClassB < AbstractClass
  def print_string
    print "a\n"
  end
end


c = SuperClassA.new
c.my_print

c = SuperClassB.new
c.my_print
```
Emacs: カーソル行を画面の中央/最上部/最下部に移動して再描画

よく忘れるのでメモ。

Emacsで

* カーソル行を画面の中央に移動(vimのzz)

> C-l

* カーソル行を画面の最上部に移動(vimのzt)

> C-u 0 C-l

* カーソル行を画面の最下部に移動(vimのzb)

> C-u -1 C-l
すっと頭に再帰が浮かぶようになりたい

haskell本読んでたらscala開眼を思い出して、再帰関数を書きたくなったけど、自信がないからqsortで我慢した。脳内レジストリにきちんと再帰をこびりつけてもっとかっこいい再帰を書きたい。ループ書くときはいつでも再帰で書くとどうなるかを想像しながら書くとよい気がした。

```python:qsort.py
import random
a = [i for i in range(100)]
random.shuffle(a)
print "before"
print a 

def qsort(l):
  if len(l) > 1:
    pivot = random.randrange(len(l))
    smaller = [i for i in l if i < l[pivot] ]
    bigger = [i for i in l if i >= l[pivot] ]
    l = qsort(smaller) + qsort(bigger)
  return l

a = qsort(a)
print "after"
print a
```##出力結果

###before
[5, 40, 28, 72, 7, 68, 64, 91, 37, 67, 23, 90, 85, 43, 39, 93, 58, 62, 75, 41, 53, 14, 3, 52, 47, 94, 44, 15, 80, 99, 89, 56, 33, 84, 86, 70, 10, 61, 59, 76, 35, 1, 60, 96, 55, 19, 26, 24, 32, 97, 30, 57, 66, 25, 69, 98, 12, 42, 78, 27, 87, 51, 21, 82, 92, 71, 9, 95, 11, 6, 83, 2, 81, 73, 17, 63, 16, 46, 34, 22, 77, 4, 48, 79, 49, 88, 36, 65, 29, 50, 31, 8, 18, 54, 45, 38, 20, 0, 74, 13]
###after
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
Titanium で CoffeeScript を使う


Titanium でも [CoffeeScript](http://coffeescript.org/) を使いたい！

→ .coffee ファイルを作成・変更したら自動で .js にコンパイルして Resources フォルダ内に入るようにしたい。

→ Jitter っていう便利なものがあるよ！

## 前提

- Mac

- npm (入ってない人は[コチラ](http://qiita.com/items/52f4138295d0b89c6634)を参考に)

## Jitter のインストール

[Jitter](https://github.com/TrevorBurnham/Jitter) を使うと、ファイルの変更を検知して自動で JavaScript を CoffeeScript に変換してくれます。

まだ CoffeeScript をインストールしてない場合は

```
$ npm install -g coffee-script
```

でインストールしてください。

次に Jitter を

```
$ npm install -g jitter
```

でインストール。


## coffee コードの自動コンパイル

`Resources/coffee` フォルダ内に CoffeeScript でソースコードを書いて、その変換コードを `Resources/js` フォルダ内に生成することにします。

`coffee`, `js` フォルダを作ったら、`Resources` フォルダ内で

```
$ jitter coffee js
```

とするだけ！

試しに `coffee` フォルダ内に .coffee ファイルを作成すれば、`js` フォルダに .js ファイルができるはず。


## Growl を使ったエラー表示

[growlnotify](http://growl.info/extras.php) をインストールすれば、CoffeeScript に文法エラーがあった場合に Jitter が自動で Growl 通知をしてくれるという素敵さ。
Titanium Studio の Android SDK セットアップ


## 前提
- Mac OS X 10.7 Lion
- Titanium Studio 2.0.2


## Android SDK をインストール

[Homebrew](http://mxcl.github.com/homebrew/) でインストールします。

```
$ brew install android-sdk
```

インストールが終わったら

```
$ android
```

で Android SDK Manager が開くので、必要なバージョンをインストールします。

## Titanium Studio での設定
Titanium Studio の Configuration Wizard から、「Install or Update Android SDK」をクリック。

SDK のパスを聞かれるので、

```
/usr/local/Cellar/android-sdk/r18
```

と入力（バージョンによって適宜変更）。

アップデートにものすごい時間がかかりました。
Goutte -PHPスクレイピングライブラリ


Symfony2の機能を利用した「Goutte」というWebスクレイピングライブラリがある。
https://github.com/fabpot/Goutte
Githubからダウンロードし、中の「goutte.phar」ファイルのみをサーバーに配置し、
読みこむだけで利用できる。

```php
require_once 'goutte.phar';
$client = new Client();
$crawler = $client->request('GET', 'http://example.com');
echo $crawler->filter('#contents')->text();  //id="contents"内の文字列が出力される
```

HTMLのパースにはSymfonyのDomCrawlerコンポーネントを利用していて、
上記のようにCSSセレクタを用いて取得することができる。
Crawlerクラスのソースコードは以下で確認できる。

http://trac.symfony-project.org/browser/branches/2.0/src/Symfony/Component/DomCrawler/Crawler.php


しばらくGoutteを使ってみたが、requestメソッドのHTMLパース時に
マルチバイト文字の扱いで次のようなエラーが発生した。

```
Error parsing body - doesn't seem to be a chunked message
```

最初は単純にphp-mbstringをインストールしてやることで解決したのだけど、
別のHTMLをパースする際にまた同様のエラーが発生してしまい、今度は原因がわからなかったので、
現在は結局Simple HTML DOM Parserなどと併用する形で使っている。
Microsoft Excel/Wordで、意図せずにF1キーを押しヘルプが暴発するのを防ぐ

AutoHotKeyをインストールした状態で、以下のスクリプトを実行して常駐させれば、
例えばExcelで、F2を押すつもりがF1キーを押してしまい、
ヘルプが起動してしまってイライラすることがなくなります。

```ahk:delay_f1.ahk
#If WinActive("Microsoft Excel") or WinActive("Microsoft Word")
$F1::
  KeyWait, F1, T0.2    ; 0.2秒以上キーが離されなかったら、ErrorLevel=1
  if ErrorLevel
    Send, {F1}
  else
    TrayTip, 警告, ExcelやWordでヘルプを表示するには、F1キーを長押ししてください。

  ; キーが離されるまで待つ
  keywait, F1

  return
#If
```
コマンドプロンプトから、エクスプローラでデスクトップを表示する

コマンドプロンプトから以下のコマンドを入力します。

```bat:show_desktop_by_explorer.bat
shell:desktop
```

# 参考

* [Shell コマンドで開く特殊フォルダー一覧（Windows 7）](http://pasofaq.jp/windows/mycomputer/shellfolder7.htm)
特定のメジャーモードのバッファをリスト化する Elisp 関数

例えば dired-mode のバッファのみをリスト化したいならこんな感じ。

```cl
(defun dired-mode-buffer-list ()
  (loop for buf in (buffer-list)
        for m = (with-current-buffer buf major-mode)
        when (eq m 'dired-mode)
        collect (buffer-name buf)))
```

5行目の `'dired-mode` を別のメジャーモードに書き換えれば、そのモードのバッファをリスト化できる。リスト化したいメジャーモードが複数になるなら memq を使用するといい。
配信中のUstreamチャンネル名を指定するとrtmpdumpで録画してくれるシェルスクリプト

api.ustream.tvからjsonをwgetしてgrepでchannelIDを入手し
cdngw.ustream.tvからamfをwgetしてgrepでrtmpエンドポイントURLを入手し
rtmpdumpコマンドを実行する

保存先は、channenName-unixtime.flvになる

チャンネル名は日本語でもOK

cronなどと組み合わせると定点カメラの映像を定期的に収集するといった事にも使える

wget, rtmpdump, ffmpegが無いと動かないです

-----

*update:*

* 引数の数ふやした
* rtmpdumpがタイミング次第で壊れたflvを出力してしまうようなので、ffplayで再生に成功するまで再試行するようにしてみた
* h264配信をrtmpdumpするとどうしてもffplayで再生できないflvになってしまうため何回やっても失敗する。いまのところ対応できていない

```bash:ustreamdump.sh
if [ $# -ne 3 ]; then
  echo "usage: ustreamdump.sh channenName recordingPath recordingSeconds"
  exit 1
fi

chid=$(wget http://api.ustream.tv/json/channel/${1}/getInfo?key=yourDevKey -q -O -|grep -Po '"id":[0-9]*?,'|grep -Po '[0-9]*')
if [ ! $chid ]; then
  echo "api error, channelName: ${1}"
  exit 1
fi
echo $chid

rtmp=$(wget http://cdngw.ustream.tv/Viewer/getStream/1/${chid}.amf -q -O -|grep -Pao 'rtmp:\/\/[a-zA-Z].*')
if [ ! $rtmp ]; then
  echo "$1 is not live"
  exit 1
fi
echo $rtmp

retry=10
check=1
while [ $check -ne 0 ] ; do
  rtmpdump -v -k 5 -B ${3}\
    -r "${rtmp}/streams/live" -y "streams/live"\
    -a "ustreamVideo`echo ${rtmp}|grep -Pao '\/[0-9].*$'`"\
    -f "LNX 10,0,45,2" -o ./${2}
  check=$( (ffplay ${2} -loglevel error -nodisp -autoexit > /dev/null) 2>&1 | wc -l )
  retry=`expr $retry - 1`
  if [ $retry -le 0 ] ; then
    break
  fi  
done
```
Meet Windows Azure 2.0


※ _[ブログ記事](http://aws.lefthandz.org/wordpress/2012/06/meet-windows-azure-2-0/)作成時のメモを公開〜_ ※

先日 6/8 5:00 AM の早朝にライブ配信された Meet Windows Azure.

以下、初見メモです。(あくまで、初心者の初見です(汗))
もっと詳しいことは、有識者の方々が続々と情報を提供下さっているので、そちらをご参考頂ければ幸いです。

Microsoft Windows Azure 2.0
====================================

今回の新機能！
-------------------------
 * __Web Sites__
 * __Virtual Machines & Virtual Networks__

急いで _Try it Now_ !
-------------------------
新機能登録は、 _先着順(?)_ なんですかね？ 発表直後 (6:00 AM) は、すぐに Queued → Active になりました。

 詳細は[こちら](https://account.windowsazure.com/PreviewFeatures)

 新機能は、 _3ヶ月の Free trial ！_
--------------------------
この新機能については、既存機能の Free trial が期限切れでも、3-month Free Trial が適用されているようです。良かった…(^^;

詳細は[こちら](https://www.windowsazure.com/en-us/pricing/details/)

Web Sites は 10 site まで、など Free trial の範囲が掲載されています。

ななななんと、 _Mac_ から利用できるように！
-------------------------------------------
[Windows Azure SDK for Mac](https://www.windowsazure.com/en-us/develop/other/) が出ました！


Web Sites
=========================================

さて、私が一番気になっているのは、Heroku のように、__Git__ で __デプロイ__ できる PaaS の登場です！

FTP でもデプロイできます。

データベースとの連携も簡単らしく、
新規作成時に、既存のものと連携 or 新規作成を選択できます。
Azure の SQL Database と MySQL を選べるようです。

対応言語
-----------------------
* .NET
* node.js
* java
* php
* python
* PowerShell 用 SDK
* Mac 用 SDK
* ソースコードも公開されています

詳細は[こちら](https://www.windowsazure.com/en-us/develop/downloads/)	


FROM GALLERY では
----------------------
また、いくつかの Blog や CMS などが事前に登録されていて、簡単に使えるようになっています。

* Drupal
* Joomla
* Wordpress
* ...他にもあります


余談
------------------------
ちなみに、デプロイ前にこのアドレスアクセスすると、
_first.**scm**.azurewebsites.net_
にリダイレクトされました。
[Kudu](https://github.com/projectkudu/kudu/wiki/Kudu-Service-REST-API) って Git の REST API を使ってるみたいです。


Virtual Machines & Virtual Networks
=========================================
まだ全然見てませんけど、このあたりは、有識者の方々がわんさか情報載せてくれることでしょう〜

ちょっとだけ覗くと、QUICK CREATE には、おなじみ。

* SQL Server 2012 Evaluation Edition (64-bit) 
* Windows Server 2008 R2 SP1, May 2012
* Windows Server 2012 Release Candidate

そして、FROM GALLERY をのぞくと、注目のオープンソースOS たちが。

* OpenLogic CentOS 6.2
* SUSE Linux Enterprise Server
* Ubuntu Server 12.04 LTS
* openSUSE 12.1
zshのグローバルエイリアス


メモ。

普通のエイリアスはコマンドラインの最初の要素だけしか対象にならない。

しかし、グローバルオプションをつけて設定したエイリアスは、コマンドの任意の場所で展開できるようなのだ。
これは多分zshだけの機能なのかな。
　　

グローバルなエイリアスを設定するのは簡単で、-gのオプションをつけるだけ。
zshのグローバルエイリアスの設定でよく見かけるのが

```bash:.zshrc
alias -g G='| grep'
alias -g L='| less'
# こんなかんじ
```

とかっていう感じ。
パイプでよく使う、grepだのを登録していくと便利である。
　　

僕はこんな感じで登録している。

```bash:.zshrc
alias -g @g='| grep'
alias -g @x='| xargs'
# ~ …続く… ~ #

```

大文字ひとつよりもタイプ数が増えるが、見た目にもわかりやすいので気に入っている。
bashと比べてzshのどこがいいのーという方は参考までに。
パッチ適用済みelscreenを使う

探してみたらgithubにあった。
[elscreen patched to work with recent Emacs](https://github.com/knu/elscreen)

elscreenの問題については既出。

- [Emacs+elscreen: "command-line-1: Symbol's value as variable is void: dir"](http://d.hatena.ne.jp/klon/20110822/1314002901)

- [Emacsでファイル名指定して実行しても、Symbol's value as variable is void: dirと表示されてファイルを開けない](http://jyukutyo.hatenablog.com/entry/20111115/1321414549)

自分でパッチを当てるのが面倒な方や、
[elscreenの本家](http://www.morishima.net/~naoto/elscreen-ja/)からelscreenアドオンを個別にダウンロードするのが面倒な方はどうぞ。
IEユーザーを撲滅させるためのJavaScript。さぁ今すぐWebサイトに組み込もう！

2013/11/26追記：久々にやってきたらこんなネタにすごい量のストックが。恐縮。ちなみにIE10は普通にいいと思いますよ(これ書いた時ってIE最新はまだ9で、表示のバグも多くぐぬぬしてたもので。)といっても、実質辛いのはCSS3のほぼ使えないIE8以下。WindowsXPのIEは8でストップなので当分怨嗟は止まらんのでしょうな

##結論-IEを判別してアラートを出し、モダンブラウザのダウンロードページに移動させる

そのためのコードがこちら。headタグ直下にでも配置しましょう。

```javascript:death-ie.js
<script language="javascript">
var isMSIE = /*@cc_on!@*/false;
if (isMSIE) {
	if(confirm('〇〇〇〇*はInternet Explorerに対応しておりません。本サイトを閲覧するためにはGoogle Chrome,Mozilla Firefox等のモダンなブラウザをご利用ください(無料)。対応ブラウザのダウンロードページに移動しますか？')==true) {
		location.href="http://www.google.co.jp/chrome/intl/ja/landing_ff.html";
	} else {
	}
} 
</script>
//*はサイトの名前を記入
```

>参考サイト:[JavaScriptでIEかどうかをたったの1行で判別する方法-PHPSPOT開発日誌](http://phpspot.org/blog/archives/2007/04/javascriptie1.html)


このタグを設置すると、IEでページを開くとYES/NOアラートが表示され、「〇〇〇〇*はInternet Explorerに対応しておりません。本サイトを閲覧するためにはGoogle Chrome,Mozilla Firefox等のモダンなブラウザをご利用ください(無料)。対応ブラウザのダウンロードページに移動しますか？」といった文章が出てきます。
YESを押すと、Google Chromeのダウンロードページへ。NOならそのままサイトを表示します。


##解説(必要なのか？)

confirmはYES/NOの選択肢付きのアラートを出すもの。
こちらの本文に *あ　か　ら　さ　ま　に　I　E　対　応　を　サ　ボ　っ　た* 旨を書いてしまいます。

そして、YESをクリックしたら、任意のブラウザダウンロードページへとlocationで飛ばします。（サンプルではGoogle Chromeにしています。私はFirefoxユーザーですけど、CMとかの影響で乗り換えやすいかなって。画面が表示された途端に「無料」という文字が大きく見えるのもポイントですね）

こうして、IEしか知らないユーザーをモダンなブラウザへと華麗に移行させます
「へー、最近のWebサイトを見るにはブラウザを変えなきゃならないんだー」と思わせれば勝ち。


##余談：なぜこのようなダークサイドに落ちたか

最近、スマートフォンサイトばっかり作ってたわけです。すると、こうCSS3を使って軽量でナイスなサイトが、もうバンバン作れちゃうわけです。特に角丸とかグラデーションのボタンとか。
CSSだけでここまで表現できちゃうものだから、もうデザインカンプなんか手抜きでやってしまって、HTMLとCSSで書いたほうが早いくらいです。泣きそうです。

もちろん、IE7や8でも角丸にする手法などは世に公開されていて、できないことはないですが、まーそりゃめんどくさいことこの上ない。

そしてついに、IE対応を捨て去って、CSS3フル活用でWEBサイトを作ってみたわけです。すると

*な ん と い う こ と で し ょ う*

工程数は2/3から1/2程度に抑えられ、かつ書くのが楽しくてたまりません。HTMLとCSSなのに。
めんどくさいベンダープレフィックスのことはSASSで吸収すればなんの問題もなく。
アイコン画像を使うためだけにTwitter Bootstrapを使い、などなど。

可能性が広がります。
クロスブラウザという名のもとに犠牲になったWebデザイナーの胃の調子と髪の毛を救うことができます。

さらに、このタグを各サイトがみな設置してしまえば、どんどんIEからユーザーが撤退します。


##最後に：より鬼畜に推し進めるなら

上記タグを全ページに設置すれば、IEでサイトにきているユーザーはリンクで画面が遷移するたびにアラートが表示されます。めんどくさくてページなんてみれられません。

おそらく、ページを見ることをやめるか、ダウンロードするかの二択になります。

リスクは高いが、リターンも大きい。
さぁ、IE対応がめんどくさいなら、いますぐ設置しよう。
WordPressなら、header.phpに設置してしまえば、もう全ページ対応完了さ！

Webデザイナーが一斉蜂起して全サイトに組み込まれだしたら、IEさん死滅やでぇ。
一枚絵の背景を導入するプラグイン

とりあえず、見つけたものをメモメモ

Backstretch
---------------------------
http://srobbin.com/jquery-plugins/backstretch/

> a simple jQuery plugin that allows you to add a dynamically-resized background image to any page

-> [View Demo](http://srobbin.com/jquery-plugins/backstretch/) (ページの中程に _Demos_ があります。)


bgStretcher 2
----------------------------
http://www.ajaxblender.com/bgstretcher-2-jquery-stretch-background-plugin-updated.html

> bgStretcher jQuery Plugin Allows to Add Background Image to Page and Proportionally Resize it to Fill Entire Window Area.

背景でスライドショーもできるとのこと。

-> [View Demo](http://www.ajaxblender.com/script-sources/bgstretcher-2/demo/index.html)


Supersized
---------------------------
http://buildinternet.com/project/supersized/

> Supersized is a fullscreen background slideshow built using the jQuery library.

背景をタイマーで切り替えるスライダーにもできるみたい。

-> [View Demo](http://buildinternet.com/project/supersized/slideshow/3.2/demo.html)


jQuery Anystretch
-----------------------------
https://github.com/danmillar/jquery-anystretch

> Anystretch is a jQuery plugin that allows you to add a dynamically-resized background image to any page or block level element. The image will stretch to fit the page/element, and will automatically resize as the window size changes.

responsive 対応

-> [View Demo](http://static.elliotjaystocks.com/responsive-background-images/examples/solution.html)
Math.maxで配列中の最大値を取得する

普通のJSで配列の最大値を取る場合ってどうします？Math.maxは普通２個の引数を取って大きい方を返しますが、実は何個でも引数を取れます。これを応用してMath.maxをapplyすると適当な配列の最大値を返せます。

```js
Math.max.apply(null, [1,4,8,7]); //=> 8
```

jquery.masonry.jsで使われてます。
https://github.com/desandro/masonry/blob/master/jquery.masonry.js#L177

最近はunderscore.js等でmaxなどを使うかもしれませんが、備忘録として。
Ruby on Railsのgeneratorのヘルプ


いつもググってばかりいたのですが一覧を出す方法をやっと知りました（-ω-）

`rake -T`みたいなのですね。

```terminal
$ rails g -h
Usage: rails generate GENERATOR [args] [options]

General options:
  -h, [--help]     # Print generator's options and usage
  -p, [--pretend]  # Run but do not make any changes
  -f, [--force]    # Overwrite files that already exist
  -s, [--skip]     # Skip files that already exist
  -q, [--quiet]    # Suppress status output

Please choose a generator below.

Rails:
  assets
  controller
  generator
  helper
   :
```


です。

コマンドにも指定できて詳細なヘルプが出ます。

```terminal
$ rails g controller -h
Usage:
  rails generate controller NAME [action action] [options]

Options:
      [--skip-namespace]        # Skip namespace (affects only isolated applications)
      [--old-style-hash]        # Force using old style hash (:foo => 'bar') on Ruby >= 1.9
   :
```

今更な自分に涙目…
Xcode4.3以降のiOSシミュレータの場所

Xcode4.3から /Developer が作られなくなり、Xcode.app の中に同梱されている。

Xcode.app で右クリックして「Show Package Contents」を選ぶ。

以下、階層。
Contents > Developer > Platforms > iPhoneSimulator.platform >
Developer > Applications > iOS Simulator.app


深いなぁ。
json_encode()の戻り値をUnicodeエスケープしないようにする

第2引数に `JSON_UNESCAPED_UNICODE` フラグを指定

```php
<?php
var_dump(json_encode(array('ゆどうふ' => 'をぞぞ')));
//string(49) "{"\\u3086\\u3069\\u3046\\u3075":"\\u3092\\u305e\\u305e"}"

var_dump(json_encode(array('ゆどうふ' => 'をぞぞ'), JSON_UNESCAPED_UNICODE));
// string(28) "{"ゆどうふ":"をぞぞ"}"
```
使えるのはPHP 5.4からですけどね。
anythingで前後の情報源表示のキー割り当て

anythingで情報源を移動するには矢印キー（`←`、`→`）を使って前後の情報源を表示します。例えば、ファイルを開く際に「最近使ったファイル」や「バッファ」から串刺しで候補を見つけられますが、「最近使ったファイル」や「バッファ」に絞って候補を探したい場合には矢印キーを使って各情報源を表示します。

結構使用頻度が高そうなので、ホームポジションで操作できるように、次の情報源(`anything-previous-source`)に`C-M-n`、前の情報源(`anything-previous-source`)に`C-M-p`を割り当てます。

```common-lisp:.emacs.d/init.el
(define-key anything-map "\C-\M-p" 'anything-previous-source)
(define-key anything-map "\C-\M-n" 'anything-next-source)
```
anything.elを導入する

以前から気にはなっていたのですが、なかなか導入できずにいたanything.elをようやく導入してみました。

インストールはコマンド一発でします。

```
M-x auto-install-batch anything
```

`C-c C-c`でそれぞれのファイルをインストールしていきます。

設定は、`.emacs.d/init.el`に下記を追加します。

```common-lisp:.emacs.d/init.el
(require 'anything-startup)
```

これでEmacsを再起動すればanythingの世界になります。
アスペクト指向(AOP)


```javascript
    //for AOP
    function _after(target, methodName, aspect) {

        var method = target[methodName];

        //overwrite the method.
        target[methodName] = function () {

            var args = Array.prototype.slice.call(arguments),
				  result;
            
            result = method.apply(this, arguments);
            args.push(result);
            args.push({
                target: this,
                methodName: methodName,
                method: method
            });

            return aspect.apply(this, args);
        };
    }

    function _apply(func, target, methodNames, aspect) {
    
        if (Object.prototype.toString.call(methodNames) !== '[object Array]') {
            methodNames = [methodNames];
        }

        var i = 0, mName;

        for (; mName = methodNames[i]; i++) {
            func(target, mName, aspect);
        }
    }

    function after(target, methodNames, aspect) {
    
        _apply(_after, target, methodNames, aspect);
    }
```
WordPressで、特定ユーザーの画像一覧を取得する


たぶんこんな感じ。

```SQL:getattachment.sql
SELECT p.*FROM wp_users u, wp_posts pWHERE u.ID = p.post_author AND u.user_nicename = 'admin' AND p.post_mime_type LIKE 'image/%' AND p.post_type = 'attachment';
```

細かいところは、それぞれ読み替えて下さい。
nvm を使った Node.js のインストール


## nvm をインストール

[nvm](https://github.com/creationix/nvm) (Node Version Manager) は Node.js のバージョンマネージャです。Ruby でいう [rvm](https://rvm.io/) ですね。

次のコマンドで `~/.nvm` に nvm がインストールされます。

```
$ git clone git://github.com/creationix/nvm.git ~/.nvm
$ source ~/.nvm/nvm.sh
```

自動で読み込まれるようにするためには、`.bash_profile` または `.bashrc` に下記の２行を追加してください。

```~/.bash_profile
source ~/.nvm/nvm.sh
[[ -r $NVM_DIR/bash_completion ]] && . $NVM_DIR/bash_completion
```

## Node.js をインストール
それでは nvm を使って [Node.js](http://nodejs.org/) の現在の最新バージョン v0.8.0 をインストールします。

```
$ nvm install v0.8.0
```

ダウンロード、コンパイルが終わったら、下記のコマンドで、デフォルトで使用する Node.js を 0.8.x の最新バージョンに設定します。

```
$ nvm use 0.8
$ nvm alias default 0.8
```

これで Node.js がインストールされました。

```
$ node -v
v0.8.0
```

nvm で Node.js をインストールすると、[npm](http://npmjs.org/) (Node Package Manager) も一緒にインストールしてくれます。
npm は Ruby でいう RubyGems ですね。

例えば npm を使って Node.js の Webフレームワーク [Express](http://expressjs.com/) をインストールするには、

```
$ npm install express -g
```

で入れられます。
空のディレクトリを登録するには


ディレクトリの中に空の .gitignore を作れば良い

```shell
mkdir foo
touch foo/.gitignore
```

でも ```.gitignore``` じゃなくて ```.gitkeep``` の方が意味が合うのでもっといいようです！！！

だって無視するものなんてないんだから。

```shell
mkdir foo
touch foo/.gitkeep
```
.gitignore の書き方


```.gitignore
# コメントは `#'

# .svn フォルダ
# ディレクトリは最後にスラッシュ
.svn/ 

# vim のバックアップファイル
# * は展開される
*.swp

# /tmp のように '/' から始めれば
# カレントディレクトリの tmp のみ無視
# /hoge/tmp などは無視されない
/tmp

```

http://git-scm.com/book/ja/ch2-2.html#id25
Salesforceのsobjectのフィールド一覧を出力する


###前提
forcetk.js+rest api+proxy.php
oauth認証済み

```javascript:get_fields.js
solocb = function(o){
  for(var i=0;i < o.fields.length;i++){
    console.log(o.fields[i].label);
    console.log(o.fields[i].name);
  }
}

common.client = new forcetk.Client(common.client_id, null, common.proxy_url);

common.client.describe('User',solocb);

```

###出力結果
ユーザ ID
Id
ユーザ名
Username
姓
LastName
名
FirstName
氏名
Name
会社名
CompanyName
ディビジョン
Division
部署
Department
役職
Title
町名・番地
Street
市区郡
City
都道府県
State
郵便番号
PostalCode
国
Country
メール
Email
電話
Phone
Fax
Fax
携帯電話
MobilePhone
別名
Alias
コミュニティのニックネーム
CommunityNickname
有効
IsActive
タイムゾーン
TimeZoneSidKey
ロール ID
UserRoleId
地域
LocaleSidKey
ニュースレター
ReceivesInfoEmails
管理者向けニュースレター
ReceivesAdminInfoEmails
メールの文字コード
EmailEncodingKey
プロファイル ID
ProfileId
ユーザ種別
UserType
言語
LanguageLocaleKey
従業員番号
EmployeeNumber
代理承認者 ID
DelegatedApproverId
マネージャ ID
ManagerId
最終ログイン
LastLoginDate
前回のパスワードの変更またはリセット
LastPasswordChangeDate
作成日
CreatedDate
作成者 ID
CreatedById
最終更新日
LastModifiedDate
最終更新者 ID
LastModifiedById
System Modstamp
SystemModstamp
Force.com Connect Offline トライアル期限
OfflineTrialExpirationDate
Sales Anywhere トライアル期限
OfflinePdaTrialExpirationDate
マーケティングユーザ
UserPermissionsMarketingUser
オフラインユーザ
UserPermissionsOfflineUser
コールセンターへの自動ログイン
UserPermissionsCallCenterAutoLogin
Apex モバイルユーザ
UserPermissionsMobileUser
Salesforce CRM Content ユーザ
UserPermissionsSFContentUser
ナレッジユーザ
UserPermissionsKnowledgeUser
Force.com Flow ユーザ
UserPermissionsInteractionUser
Service Cloud ユーザ
UserPermissionsSupportUser
Site.com Contributor ユーザ
UserPermissionsSiteforceContributorUser
Site.com Publisher ユーザ
UserPermissionsSiteforcePublisherUser
売上予測を許可
ForecastEnabled
ActivityRemindersPopup
UserPreferencesActivityRemindersPopup
EventRemindersCheckboxDefault
UserPreferencesEventRemindersCheckboxDefault
TaskRemindersCheckboxDefault
UserPreferencesTaskRemindersCheckboxDefault
ReminderSoundOff
UserPreferencesReminderSoundOff
DisableAllFeedsEmail
UserPreferencesDisableAllFeedsEmail
DisableFollowersEmail
UserPreferencesDisableFollowersEmail
DisableProfilePostEmail
UserPreferencesDisableProfilePostEmail
DisableChangeCommentEmail
UserPreferencesDisableChangeCommentEmail
DisableLaterCommentEmail
UserPreferencesDisableLaterCommentEmail
DisProfPostCommentEmail
UserPreferencesDisProfPostCommentEmail
DisableAutoSubForFeeds
UserPreferencesDisableAutoSubForFeeds
ApexPagesDeveloperMode
UserPreferencesApexPagesDeveloperMode
DisableMentionsPostEmail
UserPreferencesDisableMentionsPostEmail
DisMentionsCommentEmail
UserPreferencesDisMentionsCommentEmail
DisCommentAfterLikeEmail
UserPreferencesDisCommentAfterLikeEmail
DisableLikeEmail
UserPreferencesDisableLikeEmail
DisableMessageEmail
UserPreferencesDisableMessageEmail
DisableBookmarkEmail
UserPreferencesDisableBookmarkEmail
DisableSharePostEmail
UserPreferencesDisableSharePostEmail
取引先責任者 ID
ContactId
取引先 ID
AccountId
コールセンター ID
CallCenterId
内線
Extension
SAML 統合 ID
FederationIdentifier
自己紹介
AboutMe
現在の状況
CurrentStatus
実寸大の写真の URL
FullPhotoUrl
写真サイズのサムネイルの URL
SmallPhotoUrl
Chatter メールハイライト送信頻度
DigestFrequency
グループに参加する場合のデフォルト通知頻度
DefaultGroupNotificationFrequency
Macでキーボードのタブ移動を可能にする

デフォルトではテキストボックスとかにしか移動できないので、
cancel や ok ボタンにもタブで移動した場合は設定を変更する必要がある。

どこをイジればよいか忘れがちなのでメモ。

```:
System Preferences > Keyboard > Keyboard Shortcusタブ > All controls ラジオボタン
```

を有効にする。
ファイルからMimeTypeを取得する

javax.activation.FileTypeMapを使うとこんな感じで取得可能。

```java
import javax.activation.FileTypeMap;

import org.junit.Test;

public class MimeTypeTest {

    @Test
    public void test() {
        String filepath = "/tmp/test.gif";
        FileTypeMap filetypeMap = FileTypeMap.getDefaultFileTypeMap();
        String mimetype = filetypeMap.getContentType(filepath);
    }

}
```
Desktop AIR パッケージ ANTテンプレート

```xml:build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="＊＊＊＊＊＊＊＊">
	<!-- 
	////////////////////////////////////////////////////////////////////////
		Desktop AIR パッケージ ANTテンプレート
	////////////////////////////////////////////////////////////////////////
	 -->
	<property name="ProjectPath" value="プロジェクトのパス"></property>
	
	<property name="adt" value="flexSDKのパス/bin/adt"></property>
	
	<property name="SWF_NAME" value="＊＊＊＊"></property>
	
	
	<!-- output folder -->
	<property name="OUTPUT_FOLDER_PATH" value="${ProjectPath}/bin/"></property>
	
	<!-- discripter -->
	<property name="APP_XML" value="${ProjectPath}/bin/＊＊＊＊-app.xml">
	</property>
	
	<!-- certificate -->
	<property name="CERT" value="${ProjectPath}/cert/＊＊＊＊.p12"></property>
	<property name="PASS" value="＊＊＊＊"></property>
		
		
		
	<target name="[package]">
			<!-- [air package] -->
			<exec executable="${adt}">
				<arg line="-package" />
				<arg line="-storetype" />
				<arg line="pkcs12" />
				<arg line="-keystore" />
				<arg line="${CERT}" />
				<arg line="-storepass" />
				<arg line="${PASS}" />
				<arg line="-target" />
				<arg line="air" />
				<arg line="${OUTPUT_FOLDER_PATH}/${SWF_NAME}.air" />
				<arg line="${APP_XML}" />
				<arg line="-C" />
				<arg line="${ProjectPath}/bin/" />
				<arg line="${SWF_NAME}.swf" />
			</exec>
	</target>
	

</project>
```
Windows7にて、コマンドラインから「UAC」を無効にする

UAC 設定画面は、以下のコマンドで開くことが出来ます。

```bat
UserAccountControlSettings
```

さらに、コマンドからUACをOFFに設定するには、以下のバッチでレジストリを行なって
Windowsを再起動すると反映されます。

```BAT:disable_UAC.bat
rem Windows7 で、 UAC 設定画面を開く
rem http://journal.mycom.co.jp/column/windows/067/index.html

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 0 /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v PromptOnSecureDesktop      /t REG_DWORD /d 0 /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v EnableLUA                  /t REG_DWORD /d 0 /f
```


![](https://lh5.googleusercontent.com/-0ifTKBOQXIM/T9YXF347PhI/AAAAAAAAEOA/gSf7dddDWn4/s800/2012-06-12_00h53_24.png)

# 参考

* [【コラム】Windowsスマートチューニング (67) Win 7編: UAC設定をレジストリから制御し、スムーズなセキュリティ設定を実現する | パソコン | マイナビニュース](http://news.mynavi.jp/column/windows/067/index.html)
YaTeXのプレビュー(C-c t p)でプレビューアを追加する

# 設定方法
 
__Emacs__の __YaTeXモード__でプレビュー(C-c t p)を使うとき、
指定したPreview Commandによっては
Preview Fileの拡張子が自動補完されない場合がある。
この場合には、補完リストを自分で追加する。
補完リストは`yatex`ディレクトリ内にある`yatexprc.el`の849-852行目で
以下のように定義されている(YaTeX 1.76)。

```common-lisp:yatex/yatexprc.el
(defvar YaTeX-dvi2-command-ext-alist
  '(("[agx]dvi\\|dviout" . ".dvi")
    ("ghostview\\|gv" . ".ps")
    ("acroread\\|pdf\\|Preview\\|TeXShop\\|Skim\\|evince" . ".pdf")))
```

例えば、プレビューアとしてdviに`emacsclient`、
pdfに`apvlv`を追加したい場合には以下の定義に変更するか、`~/.emacs`に書く。

```common-lisp:~/.emacs
(defvar YaTeX-dvi2-command-ext-alist
  '(("[agx]dvi\\|dviout\\|emacsclient" . ".dvi")
   ("ghostview\\|gv" . ".ps")
   ("acroread\\|pdf\\|Preview\\|TeXShop\\|Skim\\|evince\\|apvlv" . ".pdf")))
```
以上のように設定すれば、
これらのプレビューアでも拡張子が自動補完されるようになる。

# 補足 (YaTeXモードのプレビュー)

__Emacs__でTeXを編集するときには、
入力補完の強い __YaTeXモード__を導入しておくと便利である。

https://www.yatex.org/

http://www.nk.rim.or.jp/~naru/yatex/

C-c t pはプレビューにバインドされており、
編集中のtexファイルをコンパイルして得たdviやpdfのファイルを
Emacsから開いて閲覧することができる。
具体的には、`~/.emacs`で設定した`dvi2-command`

```common-lisp:~/.emacs
(setq dvi2-command "xdvi")
```

がEmacsの下の方にあるミニバッファに

> Preview Command: xdvi

などと表示される。その後RETを押すと、

> Preview File: hoge.dvi

と表示され、さらにRETを押すとそのファイルを開くことができる。

このとき、Preview Commandをミニバッファで編集することもでき、
その場合は指定したコマンドに応じて
Preview Fileの拡張子が自動補完される。例えば、

> Preview Command: xpdf

と編集してRETを押すと、

> Preview File: hoge.pdf

と拡張子が補完される。
コマンドプロンプトから「アプリケーションの追加と削除」を起動する

「コマンドプロンプト」もしくは「ファイル名から実行」にて、以下のコマンドを実行します。

```bat
appwiz.cpl
```

「アプリケーションの追加と削除」画面が一発で起動します。
地味に便利。

![](https://lh6.googleusercontent.com/-VKJ7yTGl5YY/T9YRDHhX1iI/AAAAAAAAEN0/Hqr_bu_cmH8/s640/2012-06-12_00h37_00.png)
Mac で pecl install pecl_http で失敗する場合

新しい iMac で PHP 環境を整えようと、sudo pecl install pecl_http で
拡張モジュールをインストールしようとしたら、

```:phpizeという処理？でエラー
Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable is set correctly and then rerun this script.
```

のようなエラーが出てインストールできない。
どうも、昔の Xcode が autoconf というものもインストールしてくれていたようで、
これがないためにエラーが発生した模様。
※新しい Xcode(/Developerにインストールされないヤツ)からの問題

というわけで、autoconf をインストールする。

http://ftp.gnu.org/gnu/autoconf/

から最新のものをダウンロード。(2.69をダウンロードした)
解凍したら、そのディレクトリまでターミナルで移動し、

```:
./configure --prefix=/usr
```

終わったら、

```:
make
```

終わったら、

```:
sudo make install
```

最後に、問題となった

```:
sudo pecl install pecl_http
```

を実行してみる。
特に問題が起きなければエラーが発生せずにインストールが完了する。
AssemblyAttributes.vbを開けません

VisualStudio2010で開発していたら突如下記のエラーが発生。

```
モジュールファイル 'R:\TEMP\.NETFramework,Version=v4.0.AssemblyAttributes.vb' を開けません: 指定されたファイルが見つかりません。
```

以下の手順で解決した。

1.suoファイルを削除
2.ソリューションをリビルド
VirtualDocumentRoot でローカル開発環境を整理する

Zend Server や XAMPP など、ローカルで開発用の Apache を動かしている場合、hosts ファイルに存在しないホスト名を定義し、プロジェクト毎にバーチャルホストを設定する手法がよく取られます。ルートパス以下をまるごと使用できるため本番環境と同じパスにしたい場合など、バリバリの開発者じゃなくてもコーダーさんやデザイナさんでも使われている方多いんじゃないでしょうか。

例えばローカルの Apache で WordPress を動作させ h ttp://wordpress.local/ という URL で動作確認したい場合は、

1. /etc/hosts に「127.0.0.1  wordpress.local」の行を追加
2. ドキュメントルートにプログラムを展開（WordPressを解凍）
3. httpd.conf に VirtualHost の記述を追加
4. Apache 再起動

という手順で構築します。
（※もちろんローカルに Apache 入れるとかは必須）

一つ追加するだけならそれほど面倒ではないのですが VirtualHost がたくさん増えると設定ファイルが煩雑になりがちです。あれ？このバーチャルホスト使ってるんだっけー？とか、消していいんだっけー？ということで時間をとられるのも嫌なので、ぼくは Apache の *VirtualDocumentRoot* という機能を使用して3と4の手順を省略しています。

*VirtualDocumentRoot* は、ホスト名やサブドメインなどの文字列をもとにバーチャルホストのドキュメントルートを自動でマッピングしてくれる便利な機能です。**一度設定しておけば hosts ファイルにホスト名を記述し、ドキュメントルートのディレクトリを作成するだけで、すぐにブラウザからアクセス出来る Web 環境が作れます。** Apacheのリロードすら必要ありません。

設定はとても簡単。httpd.conf （もしくは conf.d 以下の任意のファイル）に、以下のように ServerName をワイルドカードで定義し、VirtualDocumentRoot のパスにホスト名を埋め込みます。

```conf:httpd.conf
<VirtualHost *:80>
    ServerName *
    VirtualDocumentRoot /Users/shigeta/Vhosts/%0/htdocs
</VirtualHost>
```

これだけで http://wordpress.local/ へのアクセスに対するドキュメントルートは、ローカルの /Users/shigeta/Vhosts/wordpress.local/htdocs へ自動でマッピングされます。あとは wordpress.local を hosts に書けばブラウザから h ttp://wordpress.local にアクセスできます。conf ファイルも簡潔になるしドキュメントルートも１箇所にまとまって一石二鳥！


私は以下のファイルを conf.d/vhosts.conf に保存しています。

```conf:conf.d/vhosts.conf
<VirtualHost _default_:80>
    ServerName *.dev
    VirtualDocumentRoot /Users/shigeta/vhosts/%0/htdocs
    VirtualScriptAlias /Users/shigeta/vhosts/%0/cgi-bin
    <Directory /Users/shigeta/vhosts/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
```
フレームワークなどを使ったプロジェクトの場合は、htdocs 自体をアプリケーションの web 公開ディレクトリへのシンボリックリンクにしてやるとよいです。

ちなみにローカルに PHP 環境を作るのであれば Zend Server Community Edition がお薦めです。PHP/Apache/MySQL の環境と、PEAR / Zend Framework のソースも含んだオールインワンなパッケージ群なので、本番環境も Zend Server にしちゃえば環境構築に時間を取られないし、バージョンの差異を起因としたバグに悩まされることが少なくなります。

もちろん VirtualDocumentRoot は、ローカル環境に限った話では無いです。私は外向けのサーバにワイルドカード証明書入れて SSL 環境もバーチャルドキュメントルート化してます。
超便利ー！


参考）

* Apache HTTP Server Documentation (Dynamically Configured Mass Virtual Hosting)
  http://httpd.apache.org/docs/2.4/vhosts/mass.html

* Zend Server Community Edition
  http://www.zend.com/en/products/server-ce/
Visual Studio 2010で一部のフォントを使用している場合文字幅が揃わなくなる


のはバグとしてMSにはバグとして認識されているらしい。
http://connect.microsoft.com/site550/feedback/details/684023/-ascii-2

僕の環境では[Inconsolata](http://levien.com/type/myfonts/inconsolata.html)に[メイリオをフォントリンク](http://tanakh.jp/posts/2011-11-15-windows-terminal.html)して使っていると、空白の文字幅が他の文字と揃わなくなって結果インデントがおかしくなる。
エディタの表示倍率を100%以外にすると治る（ように見える）ので、これが一つのworkaroundかな。
ActivityGroupの子からstartActivityForResultしても結果が受け取れない

ActivityGroup内で表示している子のActivityから、

```java:ChildActivity.java
startActivityForResult(intent);
```

とかしても、onActivityResultが呼ばれない。親のActivityGroup#onActivityResultに来ている気配もない。

【対処法】
親のActivityGroupからstartActivityForResultを呼ぶと、親のonActivityResultには来るので、そこから子Activityにdispatchしてやる必要がある。
親から呼んでもらえるように、子のonActivityResultはpublicにしてやる。

```java:ChildActivity.java

@Override
public void startActivityForResult(Intent intent, int requestCode) {
	getParent().startActivityForResult(intent, requestCode);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
){
  // 処理
}
```

```java:ParentGroup.java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  Activity child = getLocalActivityManager().getCurrentActivity();
  if( child instance of ChildActivity ){
     ((ChildActivity)child).onActivityResult(requestCode,resultCode,data);
  }
}
```
配列に入れたオブジェクトをソートする（PHP5）


``` php:test.php
<?php

class Shop
{
	var $kana;
	var $shopName;
	var $tel;
	
	function __construct($kana, $shopName, $tel)
	{
		$this->kana = $kana;
		$this->shopName = $shopName;
		$this->tel = $tel;
	}
}

function cmp($a, $b)
{
	$cmp = strcmp($a->kana, $b->kana);
	return $cmp;
}

// オブジェクトを配列に入れる
$shopList[] = new Shop("やまだとけいてん", "山田時計店", "03-6234-5678");
$shopList[] = new Shop("かとうふとんてん", "加藤ふとん店", "03-4234-5678");
$shopList[] = new Shop("うおとく", "魚徳", "03-3234-5678");
$shopList[] = new Shop("やまだとうふてん", "山田豆腐店", "03-5234-5678");
$shopList[] = new Shop("いのうえせいにくてん", "井上精肉店", "03-2234-5678");
$shopList[] = new Shop("あんどうせいかてん", "安藤青果店", "03-1234-5678");

// 配列をソート
usort($shopList , "cmp");

// 確認
print_r($shopList);

/*
結果

Array
(
    [0] => Shop Object
        (
            [kana] => あんどうせいかてん
            [shopName] => 安藤青果店
            [tel] => 03-1234-5678
        )

    [1] => Shop Object
        (
            [kana] => いのうえせいにくてん
            [shopName] => 井上精肉店
            [tel] => 03-2234-5678
        )

    [2] => Shop Object
        (
            [kana] => うおとく
            [shopName] => 魚徳
            [tel] => 03-3234-5678
        )

    [3] => Shop Object
        (
            [kana] => かとうふとんてん
            [shopName] => 加藤ふとん店
            [tel] => 03-4234-5678
        )

    [4] => Shop Object
        (
            [kana] => やまだとうふてん
            [shopName] => 山田豆腐店
            [tel] => 03-5234-5678
        )

    [5] => Shop Object
        (
            [kana] => やまだとけいてん
            [shopName] => 山田時計店
            [tel] => 03-6234-5678
        )

)
*/

?>
```
vimのヘルプを日本語に

1, 以下のリンクから日本語ヘルプファイルをダウンロード
　https://github.com/downloads/vim-jp/vimdoc-ja/vimdoc-ja.tar.gz (tarファイル)
　https://github.com/downloads/vim-jp/vimdoc-ja/vimdoc-ja.zip (zipファイル)

2, ダウンロードしたdoc/内のファイルとsyntax/内のファイルを以下のディレクトリにコピー
　Windowsの場合
　　$HOME
　　　vimfiles/
　　　　doc/ (このディレクトリにダウンロードしたdoc/内のファイルをコピー)
　　　　syntax/ (このディレクトリにダウンロードしたsyntax/内のファイルをコピー)
　Macの場合
　　$HOME
　　　.vim/
　　　　doc/ (このディレクトリにダウンロードしたdoc/内のファイルをコピー)
　　　　syntax/ (このディレクトリにダウンロードしたsyntax/内のファイルをコピー)

3, vimを起動して以下の:helptagsコマンドを実行、これで:helpが日本語になります

```vim:
"Windowsの場合
:helptags $HOME/vimfiles/doc
"Macの場合
:helptags $HOME/.vim/doc
```
Powのアップデートに失敗する場合

割とはまる人多そうなのでメモ。

[Pow](http://pow.cx/)が0.4.0になり、[xip.io](http://xip.io/)に対応したりしたそうなのでアップデートした。
が、iTerm2上で普通に**curl get.pow.cx | sh**とやると

```
    *** Installing Pow 0.4.0…
    *** Installing local configuration files...
    /Users/errorhandler/Library/LaunchAgents/cx.pow.powd.plist
    *** Installing system configuration files as root...
    /Library/LaunchDaemons/cx.pow.firewall.plist
    *** Starting the Pow server...
    *** Performing self-test...
    !!! Couldn't find a running Pow server on port 20559
```

と出て失敗してしまう。
この場合、Terminal.appから実行すれば成功する。
（[このissueを参照](https://github.com/37signals/pow/issues/143)）

理由は分かりません・・・
Tig の表示方法あれこれ

Tig の表示方法あれこれ

このエントリーはGitアドベントカレンダーの十一日目です。十日目は [kyanny](http://qiita.com/users/kyanny) さんの[「Git における SSH オプション指定方法あれこれ」](http://qiita.com/items/c397370862095c305cbe)でした。タイトルは、パクr...リスペクトしました！

## Tigとは？
Tig は ncurses ベースの Git のためのテキストユーザインタフェースです。
Gitリポジトリ内の変更内容を、Vimライクな操作で高速に閲覧することができます。

## インストール
Mac なら Homebrew か MacPorts でインストールできます。
あとは[こちら](http://jonas.nitro.dk/tig/)で。

## 基本的な使い方
Git レポジトリ内で tig コマンドを打つと、カレントブランチの変更履歴が表示されます。
h でヘルプが見られるので、ビューの切り替え方法などの操作方法を調べることができます。

## 本題
tig コマンドに引数を渡す事で、開き方を変えることができます。

特定の１つまたは複数のブランチを表示:

    $ tig master new_feature
全てのブランチを表示:

    $ tig --all
リモートブランチの最新コミットを表示:

    $ tig origin/HEAD

2つのブランチ間の差を表示:

    $ tig test..master
単一ファイルの変更点を表示:

    $ tig -- README.rdoc
特定のリビジョンにおける README.rdoc ファイルの内容を表示:

    $ tig show v3.2.5:README.rdoc
README.rdoc ファイルの、ある期間のリビジョンを表示:

    $ tig --after="2012-01-01" --before="2012-06-11" -- README.rdoc
README.rdoc ファイルの、直近 1 週間のリビジョンを表示:

    $ tig --since=1.week -- README.rdoc
コードのそれぞれの行を、誰が、いつコミットしたのかを表示:

    $ tig blame README.rdoc

tig 便利ですね！

## 参考
* man tig - ネタ元。すべてここに書いてあります。
* [The tig Manual](http://jonas.nitro.dk/tig/manual.html) - man よりももう少し突っ込んだ使い方が書いてあります。

-----
明日は [T_Hash](http://qiita.com/users/t_hash) さんです。
bootstrapでKaminariを使ってpaginateする


paginate（データベースのデータがページに収まりきらない時に、それを分割して、複数ページにする）するのに、Kaminariを用いて実現しようとした場合、bootstrapで定義されているpaginateのスタイリングとkaminariのスタイリングがうまく噛み合わず、表示がくずれる。それをどうやって修正するのかメモをしておく。

**２０１３年３月１８日追記**
**どうやら公式のTHEMEにbootstrap向けのtemplateがあった模様**
**手動でやる方法の後に追記**

>themes

>The generator has the ability to fetch several sample template themes from the external repository (github.com/amatsuda/kaminari_themes) in addition to the bundled “default” one, which will help you creating a nice looking paginator.


##railsにKaminariを導入する
**gemの導入**
Gemfileにkaminariをついかする

```ruby:Gemfile
gem 'kaminari'
```

そしていつもどおりbundleしてgemをインストールする。

**controller**
そして、コントローラでデータベースからデータフェッチしてくる時に、リレーションに.pageと.perメソッドを追加してやる。
この時、.pageは表示したいページ番号を引数で渡してやる。ここの例ではkaminariではparams[:page]にページ番号を自動的にわたしてくれるのでそれを利用して、kaminariが生成してくれるリンクから行きたいページを取得して表示出来るようにしてる。また、.perメソッドはページあたりのレコード数を指定する。デフォルトでは25件となっている。

また、この時にリレーションを作成時にorder句でスコープをしてやることがお行儀がいいようである。kaminariは内部的にlimitとoffsetを利用してるので、orderを追加してやることで予測できない順番でレコードを取得するのを回避するようである。

```ruby:someController.rb
@user_statuses = UserStatus.order('ex_point DESC').limit(20).includes("last_treasure").page(params[:page]).per(10)
```

**view**
ページのリンクを表示したいところに

``` haml:someView.html.haml
= paginate @user_statuses, :window => 2
```

paginateヘルパーに先程のcontrollerで用意したページングしたいインスタンス変数を渡してやればいい。オプションで:windowハッシュで前後のページへのリンク数を指定することもできる。

また、毎回オプションを指定するのが面倒となる場合は、cofigureファイルを用意してやることで手間を軽減できる。

``` Bash:
% rails g kaminari:config
```

作成されるconfig/initializers/kaminari_config.rbを編集してやればデフォルト値をいじることができる。

これで、とりあえずの導入は完了する。
しかし、これでレンダリングしてやるとbootstrapが用意してるpagination用のスタイルが適応され、表示崩れる。

##KaminariをBootstrapに合った形に変更する
###手動でbootstarpに合う形にする。
**以下に紹介するやり方は、実は回りくどかったみたいです。templateにboostrapのものが用意されているのを見落としていたので手動でやった時のメモです。他のフレームワークを使った時に手動でやらねばならないことがあると思うのでその時の参考になると思うのでその方法を残しておきます。bootstrapを使われてる方は読み飛ばしてください。**


kaminariではspanをつかってページリンクリストを実現しているが、bootstrapではulをつかって実現している。この不整合と、bootstrapで定義されてるクラスを追加していく。

まず、テンプレートを作成する。

``` Bash:
% rails g kaminari:views default
```

するとviews/kaminari以下にファイルが作られる。
基本的には、各ファイルのspanになっている箇所をliに変える。
以下に変更がほかにも及ぶファイルの一覧を示す。

```haml:_paginator.html.haml
= paginator.render do
  %div.pagination.pagination-centered
    %ul
	#以下標準状態
```

```haml:_page.html.haml
%li{:class => "page_num #{'active' if page.current?}"}
  = link_to page, url, {:remote => remote, :rel => page.next? ? 'next' : page.prev? ? 'prev' : nil}
```

```haml:_gap.html.haml
%li.page.gap.disabled
  %a= raw(t 'views.pagination.truncate')
```
これでbootstrapのpaginationのスタイルを利用できるようになる。


###もっとシンプルに
用意されているtemplateを利用してやるにはテンプレートを作成時にdefaultではなくbootstrapを指定してやれば一発で作成される。

``` Bash:
%rails g kaminari:views bootstrap
```

##他のテンプレート
他に用意されてるものはbootstrapを含め３つのようです。

>avaliable themes: bootstrap, github, google



##参考リンク
[bootstrap](http://twitter.github.com/bootstrap/components.html#pagination)
[本家のレシピ]( https://github.com/amatsuda/kaminari/wiki/Kaminari-recipes)
[本家Readme](https://github.com/amatsuda/kaminari/blob/master/README.rdoc)
LayoutParamsを正しく選択する

動的にLayoutParamsを設定する際に複数あるLayoutParamsのどれを使うかに注意が必要
正しいLayoutParamsを設定しないと、

```
java.lang.ClassCastException: android.view.ViewGroup$LayoutParams
```

というExceptionが発生してしまう。

正しくは、今設定しようとしているViewの親のクラス内にあるLayoutParamsを使う。
LinearLayoutに追加しようとしているのであれば、LinearLayout.LayoutParams
ListView用のArrayAdapterのgetView()内でreturnするviewであれば、AbsListView.LayoutParamsを使う。

普段LinearLayoutしか使ってなかったので、この使い分けにはまった。
特に、Adapter内では親がどのViewクラスか意識しにくいので注意が必要。
vundle.vim の設置


## セットアップ
vundle 自身も管理するように考慮する。
モジュールは、~/.vim/bundle 以下で管理されるので、vundle 自身をそこに置けばいい。

```bash
mkdir -p ~/.vim/bundle
cd ~/.vim/bundle
git clone https://github.com/gmarik/vundle.git
```

.vimrc を編集

```.vimrc
filetype off
if has('vim_starting')
	set rtp+=~/.vim/bundle/vundle/
	call vundle#rc()
endif
```

## モジュールの取得方法の設定
+ Github から取得する場合

```
Bundle 'username/repository_name'
ex)
Bundle 'gmarik/vundle'
```

+ [vim-scripts](http://vim-scripts.org/vim/scripts.html) から取得する場合

```
Bundle 'script_name'
ex)
Bundle 'Align'
```

+ それ以外の Git リポジトリから取得する場合

```
Bundle 'git://repository_url'
```

## インストール
インストール

```vim
:BundleInstall
```

アップデート

```vim
:BundleInstall!
```
Homebrew の備忘


## サイト
[Homebrew](http://mxcl.github.com/homebrew/)

## インストール
[Github](https://github.com/mxcl/homebrew/wiki/installation) を参考

```
/usr/bin/ruby -e "$(/usr/bin/curl -fsSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)"
```

/usr/local/Cellar 以下にインストールされる。

## 簡単な使い方
+ ヘルプを見る
```
brew help
```
+ Homebrew自体を最新にする
```
brew update
```
+ パッケージを検索する
```
brew search zsh
```
+ パッケージをインストールする
```
brew install zsh
```
+ formula(パッケージを最新にする)
```
brew upgrade
```
+ インストールされているパッケージの一覧を表示
```
brew list
```
要素を編集可能にする

https://plus.google.com/u/0/116445437433162945363/posts/FQUN2hm8BEy で知った。
contenteditable 属性を使う。

```html:contenteditable.html
<div contenteditable>
  Hello, World!!
</div>
```

form で囲っても案の定送信されないのでどうするのかな、と思ったら、やっぱり JavaScript でどうにかするのかな。
http://stackoverflow.com/questions/6247702/using-html5-how-do-i-use-contenteditable-fields-in-a-form-submission
PHP5.4.3でImagickのコンパイルエラー



PHP5.4.3をインストール後、下記のようなエラーが発生した。

```
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/imagick.so'
```

そこでPECLのimagickについて調べたところ、
2011年9月リリースのimagick3.1.0RC1でPHP5.4に対応したとのこと。
このバージョンはβ版のため、通常のpecl installではインストールされない。


そこで、

```
$ pecl install imagick-beta
```

でインストールしなおしたところ、エラーは発生しなくなった。
PHP5.4はリリース直後なので、こういう事例がたくさん出てきそうだ。
Code Complete #15

条件文の使用

最初に判断するケース（if文に書くケース）
-正常なケース
-意味のあるケース
-最も一般的なケース
-出現頻度の最も高い評価ケース

解釈：
正常なケースの処理を書いてから、例外ケースの処理を書く。
つまり、ifのあとに正常処理を書き、elseifに例外ケースを書く。

if文の中に意味のある処理を書き（elseifよりif文内に重要な処理を行わせる）、elseif文の必要性を検討する。


その他ヒント：
すべてのケースが全部評価されているかどうかを確認する。
判断条件が複雑の場合、bool関数に入れ、単純化にするとよい。
switch-caseは評価条件が単純の場合のみ利用する。そうでない場合、if-then-else文を利用する。
switch-case文のdefault文はエラー処理専用にすべき。
s3のbucket内のファイルをまとめて消去する

大量のログが残ってたので、s3cmdというツールを使ってまとめて削除した。

1. AWSの`My Account/Console`から`Security Credentials`に移動して、`Access Keys`タブから`Access Key ID`と`Secret Access Key`をメモる
2. http://s3sync.net/wiki から`*current* version`のtar.gzを落として解凍
3. tarを解凍したディレクトリで下記コマンドを実行

```
$ AWS_ACCESS_KEY_ID="Access Key IDの値" AWS_SECRET_ACCESS_KEY="Secret Access Keyの値" ruby s3cmd.rb deleteall バケット名
```