OmniAICreator/Qiita-1.07M huggingface dataset:
Emacs Lisp を簡単にインストールするための package.el & MELPA


![package-list](http://cdn-ak.f.st-hatena.com/images/fotolife/t/tuto0621/20120515/20120515030929_original.jpg?1337018972)

## 1. package.el をインストールする
[technomancy/package.el](https://github.com/technomancy/package.el)

以下のURLから.elをロードパスの通った場所に置くか

Emacs24 : http://bit.ly/pkg-el
Emacs23 : http://bit.ly/pkg-el23

auto-install がある場合は以下のS式を評価してインストールして下さい。

```el
; Emacs24
(auto-install-from-url "http://repo.or.cz/w/emacs.git/blob_plain/HEAD:/lisp/emacs-lisp/package.el")

; Emacs23
(auto-install-from-url "http://repo.or.cz/w/emacs.git/blob_plain/1a0a666f941c99882093d7bd08ced15033bc3f0c:/lisp/emacs-lisp/package.el")
```

## 2. MELPAをレポジトリに追加
[MELPA](http://melpa.milkbox.net/#development)はgithubで管理されたパッケージレポジトリです。

まずは melpla.el をインストールします。

```el
(progn
  (switch-to-buffer
   (url-retrieve-synchronously
    "https://raw.github.com/milkypostman/melpa/master/melpa.el"))
  (package-install-from-buffer  (package-buffer-info) 'single))
```

package.el経由でインストールしたパッケージは``~/.emacs.d/elpa``以下に置かれます。

.emacs.d/init.el に以下を追加します。

```el
(require 'package)

; Add package-archives
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/")) ; ついでにmarmaladeも追加

; Initialize
(package-initialize)

; melpa.el
(require 'melpa)
```

## 3. 実際に使ってみる
``M-x package-list-packages`` で一覧を取得します。ページ先頭のような画面が出るので後は選んでインストールしていきます。試しにyaml-modeをインストールしてみます。メニューから探してマウスクリックか``ENTER``を押して下さい。

インストール終了後、.emacs.d/init.elに設定を書き加えて完了です。

```el
(require 'yaml-mode)
(add-to-list 'auto-mode-alist '("\\.yml$\\|\\.yaml$" . yaml-mode))
```
twiccaへの画像intent

twiccaに画像送るときに"image/*"使っちゃダメ。
mimetypeできちんと切り分ける。

```
      String url=URLEncoder.encode(targetFile);  
      String extention=MimeTypeMap.getFileExtensionFromUrl(url);  
      String mtype="";  
      
      //拡張子を小文字に変換     
      extention=extention.toLowerCase();  
      
      mtype=MimeTypeMap.getSingleton().getMimeTypeFromExtension(extention);  
      if (mtype==null)
      {
    	  //判定してくれてない場合の手動処理  
          if(targetFile.endsWith(".jpeg")){
              PLANETEXT="image/jpeg";         	  
          }
    	  //....  

```

ていうか、外部に送る時にワイルドカード使うのが多分ダメ。
ワイルドカードは最終手段。
各mimetypeで切り分けて個別に判別した上で該当なしの場合のelseとして使うくらい。
ただし、その場合エラー処理を外部に任せることになるのでそこは考慮。
Ruby の範囲指定の正体

この投稿 http://qiita.com/items/da15035975b3369c0330 を見て，見た目は確かに範囲指定ですが，その実態はオブジェクト指向な Ruby ならではなものがあるのになぁ…と思い立ったので書いてみます．

この動作の実態は，Array クラスのインスタンスの `[]` メソッドに Range クラスのインスタンスを渡しているわけです．

```ruby:array_range.rb
alpha = ["a", "b", "c", "d", "e"]

p alpha.[](Range.new(2, 4)) #=> ["c", "d", "e"]
p alpha.[](2..4)            #=> ["c", "d", "e"]
                            # Range.new(2, 4) と 2..4 は等価．
p alpha[2..4]               #=> ["c", "d", "e"]
                            # .[](arg) と [arg] は等価．
                            # (前者はメソッド呼び出しであることを強調した感じ．)
p alpha[Range.new(2, 4)]    #=> ["c", "d", "e"]
                            # 当然こうなる．

p alpha.[](Range.new(2, 4, true)) #=> ["c", "d"]
p alpha.[](2...4)                 #=> ["c", "d"]
                                  # Range.new(2, 4, true) と 2...4 は等価．
                                  # new の第 3 引数は exclude_end
                                  # (デフォルトが false) である．
```

まず [Ruby では「全てがオブジェクト」](http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fintro.html "Ruby 1.9.3 リファレンスマニュアル > spec/intro")です．配列もオブジェクトです．その配列にアクセスするための添字の如く書いた `2..4` と `2...4` もオブジェクトです．

`2..4` は，Range クラスのインスタンスです．インスタンスならコンストラクタで生成しないの？…となったとき，いちいちそう書かなくても楽に同等のものが書けるよー，という風に用意されているのが**リテラル**です．

Range クラスとは**範囲**を表現するためのものです．

なので，**範囲**を生成するために，そのパラメタとして**始まりの数値**，**終わりの数値**，**終わりの数値を終端から除外するの？**の 3 つを与えるのです．3 つ目は与えなければ勝手に false にされます (参考 : http://doc.ruby-lang.org/ja/1.9.3/class/Range.html の特異メソッド new の部分)．

実際に見てみましょう．

```range.rb
p Range.new(2, 4) == (2..4)        #=> true
p Range.new(2, 4, true) == (2...4) #=> true

# 「範囲」ならではなメソッドを持っている
p Range.new(2, 4).include? 3 #=> true
p Range.new(2, 4).include? 5 #=> false
p Range.new(2, 4).first      #=> 2
p Range.new(2, 4).last       #=> 4
```

次に，メソッド呼び出しについてです．

`[]` は配列にアクセスするための組み込みの機能のようですが，少し発想を変える必要があります．

配列というオブジェクトにおいて，n 番目にアクセスするという機能を備えたメソッドが `[]` という名前で用意されているのです．そして，それを `alpha[n]` のように**書くことも出来る**だけなのです．

あるオブジェクト `x` の `do_something` というメソッドを呼び出すときは `x.do_something()` と記述するはずです．ならば，`[]` というメソッドがあるならば `x.[]()` で呼び出すのが道理．これがまかり通るのが Ruby です．(※setter メソッドの話や block の話はここでは考えません．)

信じられない？じゃあ以下を実行してみて下さい．

```method.rb
p ["a", "b", "c"].[](0) #=> "a"

# こんなことも出来ます
p 6.+(2)
p 6.-(2)
p 6.*(2)
p 6./(2)
p 6.%(2)
```

Array クラスの `[]` メソッドは，Range のインスタンスを受け取った時に特別な動作をするように出来ています (参考 : http://doc.ruby-lang.org/ja/1.9.3/class/Array.html のインスタンスメソッド self[range] の部分)．

以上の事柄から，あたかも配列の範囲指定が出来るように見える書き方が出来ているわけです．

よって，結論としては，範囲指定の方法というよりも Range のリテラルにおいての `*..*` と `*...*` の違い，`[]` メソッドに Range も渡せる Ruby ちゃんマジ可愛い！　…と考える方が理解も深まり良いかと思います．
~/.gitignore_globalの有効化


新しいmac環境にしたらgitに.DS_Storeが含まれちゃっていてなんでだ？って思ったら~/.gitignore_globalが聞いていなかったみたい。

有効にするにはこのコマンドを叩く。

```shell
git config --global core.excludesfile ~/.gitignore_global
```

そしてkobitoからQiitaに初投稿。
Apple が提供している API リファレンスに MacRuby / RubyMotion の記述方法を表示する

Apple が提供している API リファレンスはとても充実していますが、説明されている API は Objective-C による構文ととなっています。

そこで、[macruby-docs-js](https://github.com/joakimk/macruby-docs-js) というユーザスクリプトをブラウザにインストールします。インストール後に API リファレンスを閲覧すると、MacRuby / RubyMotion で記述するとどのようになるのか表示されます。

1. Google Chrome で [macruby-docs.user.js](https://github.com/joakimk/macruby-docs-js/raw/master/macruby-docs.user.js) をクリックしインストールします。(Firefox の場合には、Greasemonkey などをあらかじめインストールしておけば良いのかと思います)
2. [NSString Class Reference](https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html) などの API リファレンスをブラウザで閲覧します。下の図のように、各 API の Objective-C の構文の下に MacRuby / RubyMotion での記述方法が表示されるようになります。(C Blocks を利用する API の表示がおかしいような感じではありましたが。)

![MacRuby/RubyMotionの記述が表示される](http://cdn-ak.f.st-hatena.com/images/fotolife/W/Watson/20120514/20120514232955.png?1337005803)
Specの結果に色を付ける。


##インストール

gitから取ってきてファイルをコピーするだけ。

```sh
git clone https://github.com/mdks/rm-redgreen.git

cd rm-redgreen
cp app/app.rb ~/hoge_project/app
cp app/rm-ansiterm.rb ~/hoge_project/app
cp app/string.rb ~/hoge_project/app
cp spec/00-redgreen.rb ~/hoge_project/spec
```

##使い方

通常のと同じ。

```sh
rake spec
```


また```spec/00-redgreen.rb```の先頭をいじると出力形式のカスタマイズができる。


```ruby:spec/00-redgreen.rb
# :focused :full :original
style = :focused
```
Away3D CubeGeometry の UVマップバグ修正版


http://away3d.com/forum/viewthread/476/

このフォーラムで上がってる方法で　override してみたらさっくり動いたのでメモ。
謎のincludeは無視して下さい。

```ruby:AmCubeGeometry.as

#include <cpp/AmDevelop.h>

package am.graphics
{
    import away3d.primitives.*;
    import away3d.core.base.*;

public class AmCubeGeometry extends CubeGeometry
{

    public function AmCubeGeometry(width:Number, height:Number, depth:Number, segmentsW:uint, segmentsH:uint, segmentsD:uint, tile6:Boolean = true):void {
	super(width, height, depth, segmentsW, segmentsH, segmentsD, tile6);    
    }

    override protected function buildUVs(target : SubGeometry) : void
    {
	var uvData : Vector.<Number>;
	var i : uint, j : uint, uidx  :  uint; // indices
	var hw : Number, hh : Number, hd : Number; // halves
	var dw : Number, dh : Number, dd : Number; // deltas

	var u_tile_dim : Number, v_tile_dim : Number;
	var u_tile_step : Number, v_tile_step : Number;
	var outer_uv : Number;

	var numUvs : uint = ((segmentsW + 1) * (segmentsH + 1) +
			     (segmentsW + 1) * (segmentsD + 1) +
			     (segmentsH + 1) * (segmentsD + 1)) * 4;

	if (target.UVData && numUvs == target.UVData.length)
	    uvData = target.UVData;
	else
	    uvData = new Vector.<Number>(numUvs, true);


	// half cube dimensions
	hw = width/2;
	hh = height/2;
	hd = height/2;

	// Segment dimensions
	dw = width/segmentsW;
	dh = height/segmentsH;
	dd = depth/segmentsD;

	if (tile6) {
	    u_tile_dim = u_tile_step = 1/3;
	    v_tile_dim = v_tile_step = 1/2;
	}
	else {
	    u_tile_dim = v_tile_dim = 1;
	    u_tile_step = v_tile_step = 0;
	}

	for (i = 0; i <= segmentsW; i++) {
	    outer_uv = u_tile_dim * (i/segmentsW);

	    for (j = 0; j <= segmentsH; j++) {
		uvData[uidx++] = outer_uv;
		uvData[uidx++] = 1-v_tile_dim * (j/segmentsH);
		uvData[uidx++] = 1-outer_uv;
		uvData[uidx++] = 1-(v_tile_step + v_tile_dim * (j/segmentsH));
	    }
	}

	for (i = 0; i <= segmentsW; i++) {
	    outer_uv = u_tile_step + u_tile_dim * (i/segmentsW);

	    for (j = 0; j <= segmentsD; j++) {
		uvData[uidx++] = outer_uv;
		uvData[uidx++] = 1-v_tile_dim * (j/segmentsD);
		uvData[uidx++] = 1-outer_uv;
		uvData[uidx++] = 1-(v_tile_step + v_tile_dim * (j/segmentsD));
	    }
	}

	for (i = 0; i <= segmentsH; i++) {
	    outer_uv = v_tile_step + v_tile_dim * (i/segmentsW);

	    for (j = 0; j <= segmentsD; j++) {
		uvData[uidx++] = (u_tile_dim * ((segmentsD-j)/segmentsD));
		uvData[uidx++] = 1-outer_uv;
		uvData[uidx++] = 1-(u_tile_dim * ((segmentsD-j)/segmentsD));
		uvData[uidx++] = v_tile_step + v_tile_dim * ((segmentsW-i)/segmentsW);
	    }
	}

	target.updateUVData(uvData);
    }

}
}

/*
 * Local variables:
 * compile-command: "make --directory=../../ all"
 * End:
 */

```
特定の文字を行末に追加して元のカーソル位置に戻る

以下のスクリプトを利用すれば、例えばインサートモードで行末以外にカーソルがある時に、行末にセミコロンを付加し元のカーソル位置で入力を続けられる。

以下のスクリプトを保存し、コマンドを割り当てればインサートモードでshift+returnでセミコロンを付加出来る。

```vim:~/.vim/plugin/append_char.vim
function! AppendChar()
	:let pos = getpos(".")
	:let text = ";"
	:execute ":normal A".text
	:call setpos('.', pos)
:endfunction
```

```vim:~/.vimrc
inoremap <S-CR> <ESC>:call AppendChar()<CR>a
source ~/.vim/plugin/append_char.vim
```

これ、上記最終行のように.vimrc内でsourceを使ってファイルを呼び出さないと利用できないのですが
この記述無しで利用できる方法をどなたか教えて頂けないでしょうか。
設定ファイル内のパスワード等を環境変数で隠すための How to 色々

Rails 5.2からは何でもかんでも環境変数に設定するのではなくcredential管理機能を使おう．

Rails 6からは更に環境ごとに `credentials.yml.enc` を切り替えることも可能になっている．

それでもどうしても必要になる一つの環境変数，`RAILS_MASTER_KEY` を参照する方法のためだけにこの記事は参考にされたし．それにしてももう随分古い記事になるので今でも全てそのまま通用するかは分からないので，ダメだった場合は編集リクエストを下さい．

## 参考

- https://railsguides.jp/5_2_release_notes.html#credential%E7%AE%A1%E7%90%86
- https://techracho.bpsinc.jp/hachi8833/2018_10_09/62784#1-1

---

config/database.yml 内の DB のユーザ名・パスワード，また config/environments/production.rb 内のメール設定のユーザ名・パスワードなどを plain text で書いてしまうと，GitHub などにやすやすとアップ出来ない．

なので，そこは環境変数を用いることによって直接書かないようにする．

Ruby では，環境変数 VAR があれば，それに ENV['VAR'] でアクセス出来る．

よって，YAML ファイル内では例えば以下のように書けば良い．

```config/database.yml
production:
... (中略)
  username: <%= ENV['DB_USERNAME'] %>
  password: <%= ENV['DB_PASSWORD'] %>
```

通常の *.rb ファイル内では例えば以下のように書けば良い．

```config/environments/production.rb
Appname::Application.configure do
... (中略)
  ActionMailer::Base.smtp_settings = {
    address: ENV['MAIL_ADDRESS'],
    port: 25,
    user_name: ENV['MAIL_USERNAME'],
    password: ENV['MAIL_PASSWORD'],
    authentication: :login,
  }
end
```

# 環境変数の設定方法

## rails server コマンドでの起動時に指定

```
VAR=abc rails server
```

## Nginx + Passenger

/etc/init.d/nginx に以下を記載しておく．(参考 : http://qiita.com/items/83bb3fb5cb7f46484d4b)

```/etc/init.d/nginx 
VAR=abc ; export VAR
```

もしくは

```/etc/init.d/nginx
export VAR=abc
```
日々の定型作業を自動化する auto-shell-command.el を作りました

[前にQiitaに投稿した記事](http://qiita.com/items/0e45e4bfa5a813c1b9e4) からバージョンアップしました。

* [日々の定型作業を自動化する auto-shell-command.el を作りました - おんがえしの日記](http://d.hatena.ne.jp/tuto0621/20120514/1336983541) 
  * モードラインへの実行中プロセス数の表示
  * 一時的なコマンドを追加 (ascmd:add)
  * ファイルを書き換えずに関連づけたコマンドを実行する (ascm:exec)

・・・等、色々と便利な機能を足しています。
tar+pipe+sshでremoteに圧縮しつつ転送


サーバーAにいる状態で、サーバーB(10.152.99.222)の好きな場所にカレントディレクトリ以下のファイルをすべて転送する

~~~~
tar zcf - * | ssh -i ~/.ssh/id_rsa ubuntu@10.152.99.222 "(cd /mnt/hoge/save && tar zxfp - )" 
~~~~
ハッシュをURLのパラメータに変換

```ruby
  foo_hash.each_pair.map{ |x,y|
    "#{x}=#{CGI.escape(y)}"
  }.join("&")
```
URI::encodeみたいなのはRuby1.9からは推奨されていない
下記3つも使える

- CGI.escape
- URI.www_form_encode
- URI.www_form_encode_component
VMwarePlayerのvmnetcfgのインストール

VMwareにUbuntuをいれて、ゲストOSのネットワークはNATを使うようにしています。標準だとネットワークのIPアドレスのレンジがランダムで割り振られてしまうので、vmnetcfg.exeを使って指定のネットワークにするようにしています。このvmnetcfg.exeが標準のインストール手順でははいらないので、その手順を残しておきます。

コマンドプロンプトで、ダウンロードしたパッケージがあるフォルダでパッケージを指定のフォルダに解凍します。

```
> VMware-player-4.0.2-591240.exe /e extracted
```

extractedフォルダーをエクスプローラーで開いて、さらにnetwork.cabというファイルを開きます。 その中にvmnetcfg.exeという実行ファイルがあるので、C:\Program Files\Vmware\VmwarePlayer へコピーします。
tmux で新しいウィンドウを開いてコマンド実行


screen 風に使える。要 Ruby 1.9。

```ruby
#!/usr/bin/env ruby
require "shellwords"
command = ARGV.first
exec %{tmux new-window} unless command
raise "No such file or directory: #{command}" unless system("which #{command.shellescape}", out: "/dev/null")
exec %{tmux new-window -n #{command.shellescape} #{ARGV.shelljoin.shellescape}}
```

パスの通ったところに t という名前で保存。`chmod a+x` しておく

```bash
tmux
# 引数がなければ新しいウインドウを開くだけ
t
# コマンド (+引数) を渡せば新しいウィンドウで実行
# ウィンドウの名称はコマンド名になる
t sleep 5
```
GitHub で Organization を Follow できるようにする UserScript

GitHub 、前は Organization を Follow するボタンが表示されてたんですが、最近表示されなくなってきてます。GitHub の方針はともかくとして、 Organization を Follow できた方がいいという人もいると思います。以下のUserScript で簡単に Organization を Follow できるようになって便利です。 @technolize++

[github の organization ページにもフォローボタンを表示する — Gist](https://gist.github.com/2438054 "github の organization ページにもフォローボタンを表示する — Gist")
Emacs Lisp の情報源

他にあれば是非とも知りたいです。 ※ 随時更新中！！

## 便利な Emacs Lisp を探す
* [Emacs Lisp を簡単にインストールするための package.el & MELPA](http://qiita.com/items/e81fca7a9797fe203e9f)
  * [package.el](http://tromey.com/elpa/package.el) : Emacs24で標準搭載予定のパッケージ管理スクリプト
  * [MELPA](http://melpa.milkbox.net/) : パッケージレポジトリの一つ、github管理
* [EmacsWiki: Site Map](http://emacswiki.org/)
  * auto-intall.el 経由で直接インストール可能なwikiサイト
* [Emacs Lisp List](http://www.damtp.cam.ac.uk/user/sje30/emacs/ell.html)

## 日本語で読める情報源
* [(rubikitch loves (Emacs Ruby CUI Books))](http://d.hatena.ne.jp/rubikitch/)
  * anything.el の作者でもある、るびきちさんのblogです。[Emacs Lisp基礎文法最速マスター](http://d.hatena.ne.jp/rubikitch/20100201/elispsyntax) とかおすすめです
* [Emacs23 (Cocoa Emacs) 入門から中毒まで : 紹介マニア]
(http://sakito.jp/emacs/emacs23.html)
  * OSXでEmacsを使う上で貴重な情報がたくさんあります
* [Meadow/Emacs memo:](http://www.bookshelf.jp/soft/)
  * 最近は更新されていないようですが、昔よくお世話になってました

## 書籍
るびきちさんの本です。使い方からelispの書き方までほぼ網羅されていおり、私はこの二冊でほぼ事足りました。最近だと[Emacs実践入門](http://www.amazon.co.jp/Emacs実践入門-～思考を直感的にコード化し、開発を加速する-WEB-DB-PRESS-plus/dp/4774150029/ref=sr_1_1?ie=UTF8&qid=1336923333&sr=8-1)が評判よいみたいですがまだ読めていません。

* [Emacsテクニックバイブル　~作業効率をカイゼンする200の技~](http://www.amazon.co.jp/Emacsテクニックバイブル-～作業効率をカイゼンする200の技～-るびきち/dp/4774143278/ref=sr_1_2?ie=UTF8&qid=1336923333&sr=8-2)
* [Emacs Lispテクニックバイブル](http://www.amazon.co.jp/Emacs-Lispテクニックバイブル-るびきち/dp/4774148970/ref=sr_1_4?ie=UTF8&qid=1336923333&sr=8-4)

## 資料
* [taiyaki.org/elisp programming techniques](http://lc.linux.or.jp/lc2002/papers/komatsu0920h.pdf) - Linux Conference 2002 での小松弘幸氏の発表資料(pdf)
* [多様なelispインストール手法に関する一考察](http://d.hatena.ne.jp/shigemk2/20120428/1335604884) -  #kansai_emacs - by shigemk2氏
xibファイルを使う。


1.3からInterfaceBuilderで生成したxibファイルを使えるようになった模様。

xibファイルを```resources```フォルダに入れて、```ViewController```を生成する際、下記のようにする。

```ruby:app/app_delegate.rb
# UseXibViewController.xibを読み込む
@window.rootViewController = UseXibViewController.alloc.initWithNibName("UseXibViewController",
                                                                            bundle: nil)

```

xibファイル内のボタンなどはtagで参照する。

```ruby:app/use_xib_view_controller
class UseXibViewController < UIViewController
  def viewDidLoad
	# xibに設定したタグでボタンを特定
    @button = self.view.viewWithTag 1
    @button.addTarget(self,
                     action: "clicked",
                     forControlEvents: UIControlEventTouchUpInside
                     )
  end
end

def clicked
  alert = UIAlertView.new
  alert.message = "Hello"
  alert.show
end
```
gem のディレクトリに一発 cd する

今入ってるバージョンの gem のソースを確認したいときに。

```
% cd $(dirname $(gem which <gem>)) 
```

&lt;gem&gt; は正確には require するファイル名なので、期待したのと違うディレクトリに行ってしまうこともあるけれど、細かいことは気にしない。使うときはたいてい連打するハメになるので、シェル関数として定義してみたり。

```.zshrc
cdgem () {
        cd $(dirname $(gem which $1))
}
```

pry が入っていれば pry に頼ればいいという話もあったりなかったり。
zsh + rvm環境でPowを使う場合


rvm環境を~/.zshrcから~/.zshenvに移動する

```bash:~/.zshenv[[ -s "/Users/****/.rvm/scripts/rvm" ]] && source "/Users/****/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*
```

****はユーザー名

https://github.com/37signals/pow/wiki/Troubleshooting

powのリスタートはpowderを使う場合は

```bashpowder down
powder up```

`powder restart`ではだめみたい
Rubyメモ

# Mac OSに rbenv + ruby 1.9.3 + Rails 3.2.3な環境を構築したときのメモ
##rbenvのインストール
rvmで困ってないからいいんでない？というのは本音。

###rbenvとは
[ここ](http://route477.net/d/?date=20120203 "rvmからrbenvに乗り換えた")が分かりやすかった。

###インストールコマンド
* rvmをインストールしているなら共存できないのでアンインストールする。

```
> rvm implode
```

~/.zshrcのrvm設定も削除する。

* rbenv、ruby_buildのインストール 

renvはシンプルなのでrvmのinstallコマンドに相当する機能はない。rubyをインストールするにはruby_buildを使うため一緒にインストールする。

```bash:
> brew install rbenv
> brew install ruby_build
> echo 'eval "$(rbenv init -)"' >> ~/.zshrc
> source ~/.zshrc
```

##ruby 1.9.3のインストール

```bash:
> CONFIGURE_OPTS="--with-readline-dir=/usr/local" install 1.9.3-p125
> rbenv rehash
> rbenv global 1.9.3-p125
```

`ruby -v`で ruby 1.9.3p125的な文字列が出ればおk。

## rbenvコマンド
とりあえず使ってみた物だけ。もっとある。

* versions: rbenvで管理されているrubyのバージョンを表示する。
* version : 現在利用しているrubyのバージョンを表示する。
* grobal [rubyバージョン] : デフォルトで利用するrubyのバージョンを設定する。
* local  [rubyバージョン] : そのフォルダ以下で利用したいrubyのバージョンを設定する。

##ruby-buildオプション
これもとりあえず使ったものだけ。もっとある(と思う。)

--definitions : インストール可能なrubyのバージョンを表示する。

##Bundlerでrails 3.2.3インストール
###bundlerのインストール

````
> gem install bundler
````
`bundle -v`で　Bundler version 1.1.3　的な文字列が出ればおk。

###railsのインストール
railsのインストールってよりはBundlerの使い方だな。

```bash:
> mkdir /your/railsapp/path
> cd /your/railsapp/path
> bundle init
```

bundle initで簡単なGemfileができるので生成されたGemfileを修正する。

```ruby:編集前Gemfile
# A sample Gemfile
source "https://rubygems.org"

# gem "rails"
```

```ruby:編集後Gemfile
# A sample Gemfile
source "https://rubygems.org"

gem "rails" , '3.2.3'
```

編集できたら`bundle install --path vendor/bundle`
railsのインストールが完了したら`bundle exec rails -v`でRails 3.2.3がでればおk。

```bash:
bundle exec rails new .
```
Gemfileが衝突するので上書きする。
バージョンによるものなのか不明だが、下記エラーが表示された場合にはtherubyracerが足りないので、上書きしたGemfileでコメント化されているgem ‘therubyracer’を追加して再度

`bundle install –-path vendor/bundle`を実行する。
(パスは指定する必要ないと思うが念のため。)

```bash:エラー内容
/usr/local/rvm/gems/ruby-1.9.3-p125/gems/bundler-1.0.22/lib/bundler/resolver.rb:280:in `resolve': Could not find gem 'jquery-rails (>= 0) ruby' in any of the gem sources listed in your Gemfile. (Bundler::GemNotFound)
```

後はrailsコマンド等を使う場合は`bundle exec`を忘れず付けることぐらい。
Mission controlのアニメーション速度を変える


ターミナルから下記コマンド

[速度指定]
`defaults write com.apple.dock expose-animation-duration -float 0.15; killall Dock`

[いたずらモード(超遅い)]
`defaults write com.apple.dock expose-animation-duration -int 10; killall Dock`

[アニメーションを消す]
`defaults write com.apple.dock expose-animation-duration -int 0; killall Dock`

[設定の初期化]
`defaults delete com.apple.dock expose-animation-duration; killall Dock`
.gitignore for objective-c


~~~
build/*
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
*.xcworkspace
!default.xcworkspace
xcuserdata
profile
*.moved-aside
DerivedData
*.xcuserstate
Redcar で RubyMotoin のコードを補完する


[Redcar](http://redcareditor.com/) に [redcar-rubymotion](https://github.com/kattrali/redcar-rubymotion) というプラグインをインストールすると RubyMotoin  のコードが補完できるようになります。

## Redcar のインストール

```
$ sudo gem install redcar
```

## redcar-rubymotion のインストール

```
$ git clone https://github.com/kattrali/redcar-rubymotion.git ~/.redcar/plugins/rubymotion
```

## コード補完の準備

RubyMotion プロジェクトを作成したのち、

```
$ rake ctags
```

とタグファイルを作成しておきます。(redcar-rubymotion インストール後、[Cocoa]->[Generate Tags] で作成できるようなのですが、私の環境ではエラーとなってしまいました) 

## コード補完

```
$ redcar .
```

のように Terminal から Redcar を起動し、RubyMotion アプリを書いていきましょう。コード補完が必要になったときには control + shift + space キーを押します。

![コード補完](http://cdn-ak.f.st-hatena.com/images/fotolife/W/Watson/20120513/20120513151438.png?1336889699)
TextMate で RubyMotoin のコードを補完する

[TextMate](http://macromates.com/) に [RubyMotion.tmbundle](https://github.com/libin/RubyMotion.tmbundle) というバンドルをインストールするとRubyMotoin のコードが補完できるようになります。

## インストール

- TextMate v1.5.10 の場合

```
$ cd ~/Library/Application\ Support/TextMate
$ git clone https://github.com/libin/RubyMotion.tmbundle.git Bundles/RubyMotion.tmbundle
```

- TextMate v2.0 の場合

```
$ cd ~/Library/Application\ Support/
$ git clone https://github.com/libin/RubyMotion.tmbundle.git Avian/Bundles/RubyMotion.tmbundle
```


## コード補完の準備

TextMate を起動し、[Bundles]->[RubyMotion]->[Compile Compiletion List] を選択します。これにより、コード補完用のデータが作成されます。時間がかかるので気長に待ちましょう。これは、最初に一度実行すれば良いようです。


## コード補完

RubyMotion アプリを書いていきましょう。コード補完が必要になったときには option + ESC キーを押します。RubyMotion の "Compiletions for Word" を選択するとコード補完のリストが表示されます。

![コード補完](http://cdn-ak.f.st-hatena.com/images/fotolife/W/Watson/20120513/20120513132226.png)
Vim用のスニペットを生成する


##tagsファイル生成

該当プロジェクトのディレクトリに移動し```rake ctags```を実行

```sh
cd hoge_project
rake ctags
```

##生成用スクリプトの入手

https://gist.github.com/2652913
からsnipper.rbを入手し上記で生成した```tags```と同じディレクトリに置く。

##スクリプト実行

```sh
ruby snipper.rb
```

実行後、```ruby.snippets```が生成されいてるので自身の環境に適用して完了。
Mac lion に GrowlNotifyをインストールする


iTunesから Growl 1.3.3を購入したのですが、コマンドラインツール GrowlNotify がインストールされない模様。

# 解決方法

こちらの公式サイトのこちらのページから 
GrowlNotify 1.3 の .pkg ファイルをダウンロードします。

[Growl General Downloads](http://growl.info/downloads#generaldownloads)

あとはインストーラーの指示に従ってインストールすればOK

![ダウンロード画面](https://lh6.googleusercontent.com/-EGIoQ41zhGs/T66MMErfOBI/AAAAAAAAEFg/McKdzxJKdMY/s400/Growl%20-%20Downloads.png)

これで、growlnotify コマンドが使えるようになりました。

![GrowlNotify](https://lh6.googleusercontent.com/-PJEqv7IUj8Q/T66MCW9GWTI/AAAAAAAAEFY/c_Kj5IXSozQ/s800/%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB%20%E2%80%94%20zsh%20%E2%80%94%2080%C3%9724.png)
ディスクのアクセス権の修復のやり方


OSの調子が悪い時や、OSをアップデートした時にしておいた方がいいらしい。

1. デスクトップで `COMMAND`+`SHIFT`+`U` を押し、ユーティリティ フォルダを表示させる。 
2. [ディスクユーティリティ] をダブルクリックする。
3. [Macintosh HD] を選択し、[ディスクのアクセス権を修復] を実行する。(MacBook Air で約40分)

![ディスクの修復](https://lh5.googleusercontent.com/-NTsiK85QhAw/T66FkUuZP2I/AAAAAAAAEFM/Rp0PLS4h3PU/s640/Macintosh%20HD.png)
 

結構色々警告が出てきましたね。早速修復。
new Array()と[]の違い

JavaScriptで配列を生成するにはコンストラクタ `new Array()` とリテラル `[]` の二つがあるので違いをまとめておく。
個人的には、簡潔で読みやすいので、なるべく `[]` を使うべきだと思っている。

# 機能面での違い

どちらも配列オブジェクトを生成する。
ただし、整数を一つだけ渡した際の挙動が異なる。

* `new Array(3)` はlengthが3の配列を生成する。中身は0から2まですべてundefinedになっている。
* `[3]` は要素をひとつだけ含む配列を生成する。

```javascript:基本的な使い方
console.log( new Array(1,2,3) ); //1,2,3
console.log( [1,2,3]          ); //1,2,3

console.log( new Array(3) ); //undefined, undefined, undefined
console.log( [3]          ); //3
```

逆に言えば、

* new Array()は[3]のように整数一つだけを含む配列を作成できない
* []はサイズを指定して配列を作成できない

ということになる。

# 速度面での違い…はほとんどない

先に結論を書いてしまった。エンジンにもよるし使い方にもよる。どちらが速いというものでもないので、読みやすさを優先すればよい。

完璧主義者のために、差が出るポイントをまとめてみる。

## 参照解決のコスト

「Array」は予約語ではないので、ローカル変数を指している可能性がある。JavaScriptエンジンからすれば、「Array」が組み込みオブジェクトのArrayであることを特定する作業が必要になるのだ。わずかだがここにコストがかかる。
これに対してリテラルは変数ではないので参照解決の必要がない。

このため、理論上は[]の方が速い。
ただ、実際に測定してみるとほとんど差が感じられない。with()を10段重ねるとか、わざとらしいコードを書けば影響がわかるが、普通そんなことはしない。JavaScriptエンジンの最適化がよく効いているのだと思う。
むしろ次の配列長の方が影響が大きい。

## 配列長の変更コスト

配列の長さを変更するのにも少しコストがかかる。
このため、[]で作った配列を埋めていくより、最初から必要な配列長を指定して確保しておくと、速くなることがあった。（過去形です）

```javascript
var arr = [];
for (var i=0; i<1000; i++) {
  arr[i] = i;
}
//古いブラウザでは↓の方が速い
var arr = new Array(1000);
for (var i=0; i<1000; i++) {
  arr[i] = i;
}
```

一つずつ要素を入れて配列長をじわじわ伸ばしていくより、最初にまとめて確保しておいた方が軽いという理屈だ。
古いJavaScriptエンジンでは有効なテクニックだったのだが、エンジンの進歩により、逆転現象が起きている。V8で測定すると[]を使った方が2倍ほど速かった。

というわけで、今の時代、タイプ数の多い `new Array` をあえて使う必要はない。
MacでMD5, SHA1を確認する。


コマンドラインから

```
$ md5 ファイル名
```

でMD5を確認出来ます。

確認のため、http://www.python.org/download/releases/3.3.0/ からPython-3.3.0a3.tar.bz2をダウンロードし、MD5を確認してみます。ダウンロードページには、ファイルのMD5チェックサムが記載されているので、手元で表示したものが正しいかどうか確認が出来ます。

```
$ md5 Python-3.3.0a3.tar.bz2 
MD5 (Python-3.3.0a3.tar.bz2) = dbd5f88ab17528ac67f3a45ff991f1b0
```


SHA1は、以下のコマンドで確認出来ます。

```
$ openssl sha1 ファイル名
```

実行例です。

```
$ openssl sha1 Python-3.3.0a3.tar.bz2 
SHA1(Python-3.3.0a3.tar.bz2)= 92fe6fd35aada66f4e4ccd697547560593815ffd
```
newを省略できるコンストラクタ

newをつけずにコンストラクタを呼んだ場合、グローバル変数を増やしてしまうことがある。

```javascript
/**
 * Hogeクラス
 */
function Hoge(foo, baa) {
  this.foo = foo;
  this.baa = baa;
}

var hoge = Hoge(1,2); //newつけ忘れた！
console.log(foo, baa); //グローバル変数ができてる…
```

ちょっとガード節を書いておくだけで防げる。

```javascript
/**
 * Hogeクラス
 */
function Hoge(foo, baa) {
  if (! (this instanceof Hoge)) { //newつけずに呼んだ際はtrue
    return new Hoge(foo, baa);
  }
  this.foo = foo;
  this.baa = baa;
}

var hoge1 = Hoge(1,2); //newをつけてないけど、問題ない
var hoge2 = new Hoge(1,2); //これでももちろん動く
MixIn に強い Webistrano Recipe の書き方


Webistrano はプロジェクト間でレシピを共有できる。レシピの再利用を促進する設計になっているので、「単機能のレシピをたくさんつくって組み合わせる」という使い方をしたい。

しかしロールが絡むと話がややこしくなる。ややこしくなる具体的な例があったほうが後述するテクニックの利点を説明しやすいので、まず「単機能のレシピを再利用しづらくなる例」を示す。

## 仕様

電子書籍の執筆・販売プラットフォームを提供するウェブサイトがあり、 `:app`, `:web`, `:db` の他に `:pdf`, `:drm` というロールが存在する、としよう (注: 実在のウェブサイトとは関係ありません、あくまで例です)

`:pdf` ロールのサーバはダウンロード販売のマスターデータとなる PDF ファイルを非同期で作成する。 `:drm` ロールのサーバは購入者のメールアドレスを埋め込んだ PDF ファイルを非同期で作成する。いずれのロールも Resque のワーカーが常時起動している。

## レシピの例 (改善前)
この場合、普通は以下のような二つのレシピを用意し、 Webistrano で新規プロジェクトを作成後、両方のレシピを登録するだろう (注: あくまで例なので、このままコピペしても動きません。利用の際は環境にあわせて適時修正してください)

```
# Recipe: Restart Unicorn
namespace :deploy do
  task :restart, :roles => [:app]
    run "kill -s QUIT `cat /var/run/unicorn.pid`"
    run "unicorn -c /etc/unicorn.rb -E production"
  end
end
```
```
# Recipe: Restart Resque
namespace :resque do
  task :restart, :roles => [:pdf, :drm] do
    run "kill -s QUIT `cat /var/run/resque.pid`"
    run "PIDFILE=/var/run/resque.pid QUEUE=pdf,drm RAILS_ENV=production rake environment resque:work"
  end
end

after 'deploy:restart', 'resque:restart'
```

## 問題点
この二つのレシピの組み合わせは、 `[:app, :pdf, :drm]` という三つのロールが全て定義されているプロジェクトならば問題なく動く。典型的には、全てのロール、つまり全てのサーバに対してデプロイしたい場合だろう。小規模でシンプルなシステム構成のウェブサイトであれば、全台にデプロイするプロジェクトが一つあれば十分だ。

サーバの台数が増えてくると、 `:pdf` ロールだけにデプロイして Resque ワーカーを再起動したくなるかもしれない。 Webistrano を使う場合、デプロイ実行時に対象サーバのチェックを外すよりもプロジェクトを分けるほうがわかりやすいので、新しいプロジェクトを作って `:pdf` ロールを指定し、レシピを二つ登録しよう。

しかしこれはうまくいかない。 `resque:restart` というタスクには `[:pdf, :drm]` というロールが指定されているため、 `:drm` というロールがないとデプロイ実行時にエラーがでてしまうのだ。

タスクの定義時にロールをインラインで直接指定しているのが原因だが、実行時に環境変数でロールを渡せる Capistrano とは違い、 Webistrano のインターフェースではデプロイ時にロールを特定するのは手間がかかる。サーバの台数が増えるとチェックを外すのも一苦労だし誤操作のおそれもある。

レシピを再利用できないからといってロール指定だけが異なるレシピを複数作るのも良くない。タスク定義部分のコードが複数レシピ間で重複してしまうので修正漏れのおそれがあるし、似たようなレシピがたくさんあると管理もしづらい。タスク定義の重複はなくし、ロール指定は柔軟に行えるようにしたい。

## レシピの例 (改善後)
そこで、 http://tech.feedforce.jp/capistrano.html で紹介されている `Tips : タスクをメソッド内で定義` というテクニックを使う。

```
# Recipe: Restart Resque
def prepare_resque_tasks(target_roles)
  namespace :resque do
    task :restart, :roles => target_roles do
      run "kill -s QUIT `cat /var/run/resque.pid`"
      run "PIDFILE=/var/run/resque.pid QUEUE=pdf,drm RAILS_ENV=production rake environment resque:work"
    end
  end
end

end

resque_roles = [:pdf, :drm]

after 'deploy:restart' do
  defined_roles = roles.keys
  prepare_resque_tasks(resque_roles & defined_roles)
  resque.restart
end
```

`resque.restart` というタスクを実行する *前に*  `prepare_resque_tasks` というメソッドを呼び出して、動的にタスクを定義している。このとき、プロジェクトに指定されているロールを `roles.keys` で取得し、あらかじめ列挙しておいた  `resque_roles` との集合の積をとり、それを `prepare_resque_roles` に渡すことで、「`resque:restart` を実行可能 *かつ* このプロジェクトで指定されているロール」に対して `resque:restart` タスクが実行されるように、柔軟にタスクを定義できる。

このテクニックを利用すると、「プロジェクトに指定されているロールとレシピが期待するロールの組み合わせが矛盾して実行時エラー」というトラブルを避けて、安全にレシピを再利用できる。
Rubyでサブコマンド付きのコマンドを簡単に書けるThor (2) -hオプションを有効にする


## 問題
サブコマンドのヘルプを見るには``demo help subcommand``と入力する必要があります。
出来れば ``demo subcommand -h``と打ちたい所です。

```sh
# ok
$ demo help abc
print 'abc'

# error
$ demo abc -h
demo abc requires at least 0 argument:
```

## 解法
``class_option``の設定と``Thor::invoke_task``の上書きで実現します。

```ruby:demo.rb
#! /usr/bin/env ruby
# -*- coding: utf-8 -*-

require 'rubygems'
require 'thor'

class Demo < Thor
  class_option :help, :type => :boolean, :aliases => '-h', :desc => 'Help message.'

  desc "abc", "print 'abc'"
  def abc
    puts 'abcdefg!'
  end

  desc "efg [option]", "print 'efg'"
  option :upcase, :type => :boolean, :aliases => '-u', :desc => "disp upcase"
  def efg
    if options[:upcase]
      puts 'EFG!'
    else
      puts 'efg!'
    end
  end

  no_tasks do
    # デフォルトメソッドを上書きして -h を処理
    # defined in /lib/thor/invocation.rb
    def invoke_task(task, *args)
      if options[:help]
        Demo.task_help(shell, task.name)
      else
        super
      end
    end
  end
end

Demo.start
```

``demo subcommand -h``と``demo help subcommand``のどちらでも可能になります。

```sh
$ chmod +x demo2
$ demo2 abc -h
print 'abc'
$ demo2 help abc
print 'abc'
```

## 実例
[Milkode](http://milkode.ongaeshi.me/wiki/Main_Page)の次のバージョンに組み込まれます。[milkコマンドの内部](https://github.com/ongaeshi/milkode/blob/develop/lib/milkode/cli.rb)で利用しました。

tomykairaさんのパッチにより実現されました。
SCSSに更にCompassを入れる準備

Compassを導入したいと思ってその準備で調査。
公式のドキュメント見ればいいんだけどやっぱり手を動かしておいた方がいいので。

```html:index.html
<!DOCTYPE html>
<link rel="stylesheet" type="text/css" href="stylesheets/sandbox.css">
<body>
  <div>
    <p>Compass!</p>
    <ul>
      <li class="icons-brick">on compilcation error</li>
      <li class="icons-brick_link">custome class name for sprites</li>
      <li class="musi">bug</li>
    </ul>
  </div>
</body>
```

スプライトユーティリティの使い方
----------------------------------
`$ ls images/icons/`

    brick.png                find.png              ruby.png
    brick_link.png           macFFBgHack.png       tag_green.png
    bug.png                  package.png           wrench.png
    bullet_black.png         page_green.png        wrench_orange.png
    bullet_toggle_minus.png  page_white_text.png   zoom.png
    bullet_toggle_plus.png   page_white_width.png
    date.png                 plugin.png

```scss:sass/sandbox.scss
@import "compass";
@import "icons/*.png";
@include all-icons-sprites;
```

1. `@import "icons/*.png;"`でicons/*.pngを全部繋げたスプライト画像が作られる。
2. `@include all-icons-sprites;`をすると、自動でclassと画像とが対応付けられる。
  * `<li class="icons-brick">`に対してはimages/icons/brick.pngが割り当てられる。
  * all-icons-spritesのiconsはディレクトリー名

### クラス名をカスタマイズする

```scss:sass/sandbox.scss
.musi {
  @include icons-sprite(bug);
}
```

と、`@include ****-sprite(クラス名)`とすると、ディレクトリー名プリフィクス（`icons-`）無しで、任意のclass名（`musi`）が使える。
`bug`はimages/bug.pngの`bug`。

#### 複数形に注意

```scss:sass/sandbox.scss
.musi {
  @include icons-sprites(bug);
}
```
とspriteを複数形にしてしまうと

```css:stylesheets/sandbox.css
.musi .icons-bug {
  background-position: 0 -16px;
}
```
と、セレクター二つの組み合わせになってしまうので注意。

#### 画像ファイルを弄っても更新されない

画像ファイルだけを編集したり追加したりしても、スプライトは再作成されない。
何らかのSCSSファイルを弄ったり`touch`コマンドで触る必要があるので注意。

コンパイルエラー時のフック（通知など）
---------------------------------------

http://qiita.com/items/96953b4b767753162875
に書いたように、`compass watch`している間にコンパイルエラーがあったらIRCなどに通知したい。
config.rbを使う。

```ruby:config.rb
on_stylesheet_error do |filename, message|
  $stderr.puts 'ERROR OCCURED!!!'
  # or notify via IRC and so on
  $stderr.puts "#{filename}: #{message}"
end
```

これでCompass導入もできるようになったと思う。
ちゃんと使い方説明できればね。
配列のkeyを初期化する

array_diffは配列のkeyを初期化しない。
array_diffの結果をそのままSQLのwhere条件などにしようとするとエラーになる

```php

$id = array(100, 200);
$delete_id = array(100);

$id = array_diff($id, $delete_id);
print_f(id);

```

結果:
Array
(
    [1] => 200
)


本来の関数の目的とは異なるが、array_valuesを使用すると
配列のkeyを初期化することができる。

```php

$id = array(100, 200);
$delete_id = array(100);

$id = array_values(array_diff($id, $delete_id));
print_f(id);

```

結果：
Array
(
    [0] => 200
)
Octopressで独自ドメインを設定する

octpressのプロジェクトディレクトリで、

```
$ echo 'example.com' >> source/CNAME
```

デプロイします。

```
$ rake deploy
```

これで、githubページ側の設定ができたので、DNSサーバには、`www.example.com` のようなサブドメインであれば `organization.github.com` や `username.github.com` をCNAMEで登録します。また、`example.com` のようなトップドメインであれば `207.97.227.245` をAレコードで登録します。
cakephpのShellとかTaskの情報へのリンク


http://c-brains.jp/blog/wsg/09/07/22-170044.php
http://c-brains.jp/blog/wsg/10/06/10-110652.php
http://morio-dev.seesaa.net/article/201728987.html
http://book.cakephp.org/1.3/view/1110/Running-Shells-as-cronjobs
http://book.cakephp.org/1.3/ja/view/1107/シェルやタスクを作成する
cron機動時刻によってスクリプトに渡す値を変える

cronにはこんな感じで記述
0 6 * * 1-6 /var/www/lib/batch/nyan.sh 1
0 14 * * 1-6 /var/www/lib/batch/nyan.sh 2

```Bash:nyan.sh

#!/bin/sh
ROOT_PATH="/var/www/lib"
COMMAND="/usr/bin/php ${ROOT_PATH}/batch/nyan.php"
CONFIG_FILE="${ROOT_PATH}/conf/nyan.ini.php"

if [ $# -ne 1 ] || [ "$1" != "1" -a "$1" != "2" ]; then
  echo "Please input for arg[1] 1 or 2"
  exit 1
fi

if [ $1 -eq 1 ]; then
  DATE_FROM=`date -d '1 days ago' '+%Y-%m-%d 00:00:00'`
  DATE_TO=`date '+%Y-%m-%d 12:30:00'`
  SHIPPING_DATE=`date '+%Y-%m-%d'`
else
  DATE_FROM=`date '+%Y-%m-%d 06:00:00'`
  DATE_TO=`date '+%Y-%m-%d 14:00:00'`
  SHIPPING_DATE=`date '+%Y-%m-%d'`
fi

${COMMAND} --config-file "${CONFIG_FILE}" --date-from "${DATE_FROM}" --date-to "${DATE_TO}" --shipping-date "${SHIPPING_DATE}"

exit 0

```
マクロにVLOOKUPさせる


```vb:nyan.vb

Sub getValue()

Application.Calculation = xlManual   '再計算の停止'
Application.ScreenUpdating = False  '描画の停止'

     Dim Rng As Range
     Dim SerchArea As Range
     Dim Results As Variant

     'Function.VLookupの検索範囲の設定'
     MaxRow = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row '縦'
     MaxCol = Worksheets("Sheet2").Cells(1, Columns.Count).End(xlToLeft).Column '横'

     Set Rng = Worksheets("Sheet2").Cells(MaxRow, MaxCol)
     Set SerchArea = Worksheets("Sheet2").Range("A2", Rng)

     '初期設定'
     Endrow = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
     Endcol = Worksheets("Sheet2").Cells(1, 1).End(xlToRight).Column
     Stpnt = Worksheets("Sheet1").Cells(3, 1).End(xlToRight).Column    'Resultsの初期挿入位置'
     Stpnt = Stpnt + 1

     r = 3
     b = 2

    If Endcol = 2 Then 'Sheet2の表のColumnが2列しか無い場合（主に前日の実績を入れる時）'
    
           For rowloop = 3 To Endrow Step 1
                 On Error Resume Next
                 asid = Worksheets("Sheet1").Cells(r, 1).Value
                 Results = Application.WorksheetFunction.VLookup(asid, SerchArea, b, False)

                 If Err <> 0 Then Results = 0
                 Worksheets("Sheet1").Cells(r, Stpnt).Value = Results
                 r = r + 1
           Next rowloop
    Else                        'Sheet2の表のColumnが3列以上（マスタ更新時の過去実績の取得や、連休中の実績をまとめて取得する時）'
    
           For colloop = 2 To Endcol Step 1
                On Error Resume Next

                        For rowloop = 3 To Endrow Step 1
                              asid = Worksheets("Sheet1").Cells(r, 1).Value
                              Results = Application.WorksheetFunction.VLookup(asid, SerchArea, b, False)

                              If Err <> 0 Then Results = 0
                              Worksheets("Sheet1").Cells(r, Stpnt).Value = Results
                              r = r + 1
                       Next rowloop

                Stpnt = Stpnt + 1
                b = b + 1
                r = 3
          Next colloop
        
    End If

     Set SerchArea = Nothing
     Set Rng = Nothing

MsgBox "処理が完了しました"

Application.Calculation = xlAutomatic '再計算の再開'
Application.ScreenUpdating = True     '描画の再開'

End Sub

```
PHPのヒアドキュメント内で関数(htmlspecialchars等)を利用する方法

引用元

個人的自由帳
http://blog.half-moon.org/archives/390

htmlspecialcharsをクラス化し変数に代入。
 
```php:nyan1.php

<?php
class HSC_Class {
  public function enc($output){
    return htmlspecialchars($output);
  }
}
$hsc = new HSC_Class();
?>

```

すると、以下のような形で記述できるようになる。

```php:nyan2.php

<?php
$tempstr = ‘<a href=”http://www.google.com/”>2行目</a>’;
 
echo «< EOT
1行目<br />
{$hsc->enc($tempstr)}<br />
3行目
EOT;
?>

```

出力

```html:nyan3.html

1行目
<a href=”http://www.google.com/”>2行目</a>
3行目

```
再計算と描画のON、OFF切り替え

```vb:nyan.vb

Sub foo()
'メインルーチン実行時のパフォーマンス改善に有効'

Application.Calculation = xlManual     '再計算の停止'
Application.Calculation = xlAutomatic '再計算の再開'

Application.ScreenUpdating = True     '描画の再開'
Application.ScreenUpdating = False     '描画の停止'

End Sub

```
クエリを指定してExcel形式でファイルのエクスポートを行う

```vb:nyan.vb

Private Sub export_Click()

Dim W1 As Long
Dim OUT_FILE As String
Dim CUR_FLD As String
Dim Q_NAME As String

Q_NAME = "query_name"

If DCount("*", Q_NAME) = 0 Then
   MsgBox "レコードが存在しません。" & vbCrLf & "処理を中止します。"
Exit Sub
End If

CUR_FLD = Left(CurrentDb.name, InStrRev(CurrentDb.name, "\"))

WizHook.Key = 51488399
W1 = WizHook.GetFileName(0, "", "", "", OUT_FILE, CUR_FLD, "xlsxファイル(*.xlsx)|*.xlsx", 0, 0, 4, False)
WizHook.Key = 0

If W1 <> 0 Then
Exit Sub
End If

DoCmd.TransferSpreadsheet acExport, 10, Q_NAME, OUT_FILE

End Sub

```
skitchで画像のトリミング（切り抜き）を行う方法

画像に簡単に文字や矢印を載せて、説明画像を作るのに重宝するアプリ、[skitch](http://skitch.com/jp/)。
トリミングのやり方がわかずに困っていたのですが、解決したのでメモ

## トリミングのやり方

__画像の四隅をドラッグすると、トリミングすることができます。__

![ドラッグする箇所](https://lh3.googleusercontent.com/-Ff1wdougVJU/T6vtzXVSpMI/AAAAAAAAEEw/c6Uc-sWfzkM/s640/Skitch-1.png)

選択範囲で囲んで、メニューからトリミングを実行する、というやり方ではないので戸惑いました。
Windows で Growl 通知を行う


## Growl とは

Growlは、WindowsやMacで使える、邪魔にならない通知支援アプリです。

![通知](https://lh4.googleusercontent.com/-GGdrMmt7_cQ/T6vheYf_vdI/AAAAAAAAEEY/g_gPs60AGQc/s800/2012-05-11%2000h22_55.jpg)

Growlの通知は、他のアプリのダイアログ表示のように、フォーカスを奪われて邪魔になりません。

バッチファイル等自分が作ったプログラムから呼び出すことができるので、時間のかかる処理が終わったら通知とか、色々な使い道が考えられると思います。

## インストール
[Growl for Windows](http://www.growlforwindows.com/) をダウンロードし、インストーラの指示に従ってインストールします。

## 設定

1. スタートメニュー から Growl for Windows を起動し、タスクトレイのGrowlのアイコンを右クリックして設定画面を表示させます。

2. あとは以下の様な感じでいいんじゃないでしょうか？まあお好みで。

3. １点だけ注意を。__Windows版では、なぜかパスワードを指定しないと通知が表示されなかった__ので、適当に設定します。
この例では「password」と設定しました。


![初期設定](https://lh4.googleusercontent.com/-WX47y7bpIT8/T6vhZCmAstI/AAAAAAAAEEA/tYDbRVtSwTY/s640/2012-05-10%2022h27_49.jpg)

![Display選択](https://lh4.googleusercontent.com/-I1Y8uwkaOuw/T6vhdMH0NHI/AAAAAAAAEEQ/QGUKwNZ0t88/s640/2012-05-10%2022h28_04.jpg)

![パスワードを設定](https://lh5.googleusercontent.com/-Nbn6vhlT7gM/T6vhjMnNX1I/AAAAAAAAEEg/Z1OxE8md5Lo/s640/2012-05-10%2022h28_13.jpg)

## コマンドラインから、

growlnotifyコマンドを実行すれば、Growlで通知が表示されます。

growlnotifyコマンドは、普通にインストールした場合は、以下の場所にあるはずです。PATHを通しておいてください。

```
C:\Program Files\Growl for Windows
```

* growlnotify.com - コマンドプロンプト出る版
* growlnotify.exe - コマンドプロンプト出ない版（ヘルプも表示さないが、AutoHotKeyとかから呼び出すならこちらの方が最適）

試しに、コマンドプロンプトから以下のようにコマンドを実行します。

```
growlnotify.exe /t:"title" /pass:"password" message
```

こんな感じで通知が表示され、数秒後に消えます。

![通知](https://lh4.googleusercontent.com/-GGdrMmt7_cQ/T6vheYf_vdI/AAAAAAAAEEY/g_gPs60AGQc/s800/2012-05-11%2000h22_55.jpg)

以下のように sticky オプションを追加すると、__クリックするまで通知が消えずに残る__ようになります。

```
growlnotify.exe /t:"title" /s:true /pass:"password" message
```

設定画面を開くと、Application が追加されていると思います。

![Applicationが追加されます](https://lh6.googleusercontent.com/--qPpV_Ps-C8/T6vhcJMKgjI/AAAAAAAAEEI/gdvsgscO3v0/s640/2012-05-10%2022h27_59.jpg)
端末の空き容量をコマンドで減らす方法

次のコマンドで空き容量(Free)とブロックサイズ(Blksize)を確認

```bash:qiita.rb
df /data
Filesystem             Size   Used   Free   Blksize
/data                   64M    11M    52M   4096
```

次のコマンドでダミーファイルを好きなサイズで作成する。

```bash:qiita.rb
dd if=/dev/zero of=/data/dummy1 bs=4096 count=1000
```

of=****：ファイル名　／　bs=ブロックサイズ　／　count=生成するブロック数
最終的に作成されるファイルサイズは bs×count の積となる。
参考：http://yuki312.blogspot.jp/2011/11/rom0rom-0io-android4.html
ディレクトリ内のファイル1つ1つに対して一気にシンボリックリンクを作成する

一部のファイルを修正してビルドしたい。でもマスター環境いじるわけにもいかないし、環境まるごとコピーするのも時間かかるし・・・そんなときに役立つコマンドがあります。

```bash:Usage（説明めんどくさいから最低限必要な分だけ）
lndir fromdir [ todir ]
```

lndir は、リンク元ディレクトリの中にあるファイル1つ1つに対してシンボリックリンクを作成します。
なお、リンク元ディレクトリの中にサブディレクトリがあった場合、リンク先ディレクトリにサブディレクトリを作成します。そしてその作成したサブディレクトリの中に、リンク元サブディレクトリ内のファイルへのシンボリックリンクを作成します。
（リンク元ディレクトリに対するシンボリックリンクを作成するわけではない）


```bash:使用例
$ find dir_src -type f         # リンク元のファイル一覧を表示
dir_src/data1
dir_src/data2
dir_src/subdir/data3
dir_src/subdir/data4
$ 
$ mkdir dir_dest               # あらかじめディレクトリを作成しておく
$ lndir $PWD/dir_src dir_dest  # リンク元は絶対パスにする
$ 
$ ls -F dir_dest/*             # 作成されたシンボリックリンクの一覧を表示
dir_dest/data1@ dir_dest/data2@

dir_dest/subdir:
data3@ data4@
```

----

(2016/08/05 追記)
lndirのsh見つけたので置いときます

https://opensource.apple.com/source/X11/X11-0.46.4/lndir.sh
PHPをソースからコンパイルした際に前回のconfigureのオプションを調べる方法

PHPをソースからインストールしていて、バージョンアップのときに「あれ？前回コンパイルした際のオプションなんだったっけ？」って時には、ソースディレクトリ内にあるconfig.niceまたはconfig.statusを見れば、前回configure時に指定したオプションが記録されています。

```config.nice
#! /bin/sh
#
# Created by configure

LDFLAGS='-lstdc++' \
'./configure' \
'--with-apxs2=/usr/sbin/apxs' \
'--enable-mbstring' \
'--enable-zend-multibyte' \
'--without-mysql' \
'--with-ldap' \
'--with-openssl' \
'--with-curl' \
'--enable-sockets' \
"$@"
```

config.statusの場合は、ファイルの最初の方に書かれています。紛れているので取り出して加工が必要ですが。

```config.status
ac_cs_usage="Usage: ./config.status [--recheck] [--version] [--help]"
for ac_option
do
  case "$ac_option" in
  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
    echo "running ${CONFIG_SHELL-/bin/sh} ./configure  --with-apxs2=/usr/sbin/apxs --enable-mbstring --enable-zend-multibyte --with-ldap --with-openssl --with-curl --enable-sockets --no-create --no-recursion"
    exec ${CONFIG_SHELL-/bin/sh} ./configure  --with-apxs2=/usr/sbin/apxs --enable-mbstring --enable-zend-multibyte --with-ldap --with-openssl --with-curl --enable-sockets --no-create --no-recursion ;;
  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
    echo "./config.status generated by autoconf version 2.13"
    exit 0 ;;
  -help | --help | --hel | --he | --h)
    echo "$ac_cs_usage"; exit 0 ;;
  *) echo "$ac_cs_usage"; exit 1 ;;
  esac
done
```
Readability のブックマークを全削除

```python:readability_delete_bookmarks.py
#!/usr/bin/env python

import readability

CONSUMER_KEY = ''
CONSUMER_SECRET = ''
USERNAME = ''
PASSWORD = ''

token = readability.xauth(CONSUMER_KEY, CONSUMER_SECRET, USERNAME, PASSWORD)
rdd = readability.oauth(CONSUMER_KEY, CONSUMER_SECRET, token=token)

for bookmark in rdd.get_me().bookmarks():
    print 'delete %s' % bookmark.article.url
    bookmark.delete()
```
flymakeのデバッグmessage設定

`M-:`(eval-expression)などで

```cl:elisp
(setq flymake-log-level 3)
```
を評価する。flymakeが走るたびに`*Messages*`bufferにログ情報が出力される。どんな一時ファイルが作成されてどんなコマンドが実行されているのか、確認できる。

log levelは以下のようになっていて、defaultは`-1`。

```
-1 = NONE,
 0 = ERROR,
 1 = WARNING,
 2 = INFO,
 3 = DEBUG
```
inspectの実験

```python
import inspect
def call_1():
	sample = inspect.stack(1)[1]
	file_name = sample[1]
	line_num = sample[2]
	method_name = sample[3]
	format_mes = "File:%s Line:%s Method:%s"
	res = format_mes % (file_name, line_num, method_name)
	print res
	

def call_2():
	call_1()
	
def call_3():
	call_2()

#Example
print "--------------------"	
call_2()
print "--------------------"
call_3()
	
```
JavaScriptのテンプレートをCoffeeScriptで書く

JavaScriptの場合、ファイル名は```new.js.erb```、CoffeeScriptの場合は```new.js.coffee```とすればよい。JavaScriptと同様にERBも使える。

```/app/views/products/new.js.coffee
<% @html = j render(partial: 'form')  %>
<% logger.debug(@html) %>
$('.modal-body').html("<%= @html %>")
$('#inputModal').modal('show')
```
LaTeXでハイフネーションを抑制する

プリアンブルに以下を記述することで、ハイフネーションを禁止できる。

```tex
\hyphenpenalty=10000\relax
\exhyphenpenalty=10000\relax
\sloppy
```

この記述により2段組の英語論文でハイフネーションを完全に排除できた。

ただ、完全に禁止してしまうといくつかバランスがおかしい行が現れるかもしれない。その場合は上2行の10000の値を小さくするといい。個人的には2段組だと1000程度の値がちょうど良いと感じた。
ファイル名の補完


作業ディレクトリでタブを押した時、ファイル名を補完して表示する設定

~/.zshrc に記述

```zsh
zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}' '+m:{A-Z}={a-z}'
```


via: http://gihyo.jp/dev/serial/01/zsh-book/0005
capistranoでデプロイ先がrvmの場合

下記のcapistranoでmigrateするとrakeがないというエラーが発生してしまいました。

```
$ cap deploy:migrate
```

デプロイ先のサーバのrubyがrvmで動いており、その場合下記の記述がcapistranoの設定ファイルに必要でした。

```
$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) # Add RVM's lib directory to the load path.
require "rvm/capistrano"                  # Load RVM's capistrano plugin.
```
ATrpmsリポジトリのダウンロードに失敗する

突然、[ATrpms](http://atrpms.net/ "A Third party rpm repository")リポジトリのダウンロードに失敗するようになった。

表示されるメッセージは以下の通り。

```bash:
http://dl.atrpms.net/el5-x86_64/atrpms/stable/repodata/repomd.xml: [Errno 12] Timeout: <urlopen error timed out>
Error: Cannot retrieve repository metadata (repomd.xml) for repository: atrpms. Please verify its path and try again
```

「`yum clean metadata`」や「`yum clean all`」をして再度実行するも、エラーは出続ける…。

また、この「`http://dl.atrpms.net/el5-x86_64/atrpms/stable/repodata/repomd.xml`」を当該サーバからwgetしても取得できない…。

ただ、別サーバや、手元からだと取得できる。
当該サーバからも、pingは通っており、名前解決結果についても、どこからでも「160.45.254.22」を呼んでいて特に違いはない。

また、当該サーバに設定されているnameserverについても、同じものが設定されている別サーバでは問題なくDLできているので、そこが原因とも思えない。

多分こういうのは「時間が経過すると勝手に解決してる」系なので面倒臭い。
そういうものに限って、「経過を待つわけにはいかず、今すぐ何らかの対応をしないといけない」んだよなぁ…。

完全に手詰まりになったので、repoファイルを直接編集することに。

[昔は、ATrpmsのmirrorlistを自動振り分けしてくれるスクリプトがあった](http://www.dknss.com/18/mirrors/atrpmsnet-mirror "DKNSS &#187; Blog Archive &#187; ATrpms.net Mirror")のだけど、それも今は動いてないので、適当に決め打ちで入れる。

というわけで、デフォルトから変更し、また戻しやすいURLになっている[UK Mirror Service](http://mirrorservice.org/)（[英ケント大](http://unikent.jp/)運営）のmirrorを利用し、「`s/dl.atrpms.net/mirrorservice.org\/sites\/dl.atrpms.net/g`」と書き換え。

内容は以下の通り。

```cfg:/etc/yum.repos.d/atrpms.repo
[atrpms]
name=Red Hat Enterprise Linux $releasever - $basearch - ATrpms
failovermethod=priority
baseurl=http://mirrorservice.org/sites/dl.atrpms.net/el$releasever-$basearch/atrpms/stable
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-atrpms
```

```cfg:/etc/yum.repos.d/atrpms-testing.repo
[atrpms-testing]
name=Red Hat Enterprise Linux $releasever - $basearch - ATrpms testing
failovermethod=priority
baseurl=http://mirrorservice.org/sites/dl.atrpms.net/el$releasever-$basearch/atrpms/testing
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-atrpms
```

```cfg:/etc/yum.repos.d/atrpms-bleeding.repo
[atrpms-bleeding]
name=Red Hat Enterprise Linux $releasever - $basearch - ATrpms bleeding
failovermethod=priority
baseurl=http://mirrorservice.org/sites/dl.atrpms.net/el$releasever-$basearch/atrpms/bleeding
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-atrpms
```
Tcl/Tkでステータスバーを作る

Tcl/Tkでステータスバーもどきを作ろうとすると、なかなか文字列を上手く左右に配置できません。左寄せで出す文字列と右寄せで出す文字列の間にダミーの文字列を入れる事で、フレームの両端に文字を表示できます。

![画像](https://www.evernote.com/shard/s25/sh/c049c211-3b0c-4280-8e21-1b8b25eaf200/8bd6607c906a1ef2c0ee73e92d4d57a8/res/816cf813-6ca5-4b5c-a2bd-93c371274daa/ScreenClip.png)

```tcl:frame.tcl
frame .f
label .f.left -text "左寄せ"
label .f.space -text " "
label .f.right -text "右寄せ"
pack .f.left  -side left -anchor w 
pack .f.space -side left -expand yes -fill x ; #真ん中だけを -expand yes に設定する。
pack .f.right -side left -anchor e 
pack .f -anchor w -fill x  ;# -fill でx方向へ引き延ばす
```
キーボードで操作した場合でもセレクトイベントを取得する

セレクトボックスの変更時のイベントを取得するとき、カーソルキーで値を変更するとイベントが発生しない。
正確にはフォーカスが外れるか、Enterキーが押されるまでイベントが発生しないようだ。（Firefox12, Safari5で確認）
「セレクトボックスを開いてメニューを表示してから、カーソルキーで値を選択し、Enterを押す」という操作しか考慮していないっぽい。
セレクトボックスの値に応じてscriptでformの内容を修正していたりすると、マウスでSubmitを押したときにイベントが発生するため、ユーザの意図しない動作をする可能性がある。

対処としては、keyupイベントでフォーカスを一度外す。
jQueryではこんな感じ。

```
  $('select').change(function(){
    alert("select changed");
  }).keyup(function(){
    $(this).blur().focus();
  });
```
EPELリポジトリのmirror反映がずれてる…

[EPEL](http://fedoraproject.org/wiki/EPEL/ja "Extra Packages for Enterprise Linux")リポジトリのmirrorへの反映にばらつきがあるようで、インストールできるパッケージに差が出てる…。


仕方ないので、repoファイルを編集して、mirrorlistをコメントアウト（`s/^mirrorlist/#mirrorlist/g`）、baseをアンコメント（`s/^#baseurl/baseurl/g`）。
（※ちなみに、epel-releaseをrpmインストールしてると、上記のようにmirrorlistのみ有効化されています。）

それから、[EPEL本体のDL先URLが変更されてる](http://lists.fedoraproject.org/pipermail/announce/2012-February/003040.html "Please update links: download.fedora.redhat.com -> dl.fedoraproject.org - Announcements related to the Fedora Project")ので、「`s/download.fedoraproject.org/dl.fedoraproject.org/g`」。

以下はCentOS 5.x等RHEL5系での例（※epelはデフォルト有効化、epel-testingはデフォルト無効化してます）。

```ini:/etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 5 - $basearch
baseurl=http://dl.fedoraproject.org/pub/epel/5/$basearch
#mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
```

```ini:/etc/yum.repos.d/epel-testing.repo
[epel-testing]
name=Extra Packages for Enterprise Linux 5 - Testing - $basearch
baseurl=http://dl.fedoraproject.org/pub/epel/testing/5/$basearch
#mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=testing-epel5&arch=$basearch
failovermethod=priority
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
```
SELECT文でSQL Cacheを無効にする


頻繁に忘れて検索している気がするのでメモ。

```SQL
SELECT SQL_CACHE id, name FROM customer;
SELECT SQL_NO_CACHE id, name FROM customer;
```

MySQLのドキュメント的にはここを参照
http://dev.mysql.com/doc/refman/5.5/en/query-cache-in-select.html
ターミナルの背景を黒にする方法


## 設定手順

1.ターミナル.app起動
2.画面上部のメニューから、ターミナル → 環境設定
3.設定画面から → 設定アイコン → 「Pro」を選択 → デフォルトボタンを押して記憶
2.フォントも Osaka等幅-14pt に変更 して閉じる

![](https://lh3.googleusercontent.com/-eTV7btxMSO4/T6qUAeI7j-I/AAAAAAAAEDk/3SP30EwSXqs/s800/%E8%A8%AD%E5%AE%9A.png)

## 設定後の画面

実際には、下のデスクトップが透けて見えます。

![設定変更後のターミナル画面](https://lh4.googleusercontent.com/-fXMRLrsWlVg/T6qUANURpOI/AAAAAAAAEDg/MQWC7h3VoUU/s800/%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB%20%E2%80%94%20zsh%20%E2%80%94%2080%C3%9724.png)