OmniAICreator/Qiita-1.07M huggingface dataset:
Ruby の IO.read でバイナリファイルを読み込むときの注意点

# IO.read の挙動
Ruby の IO.read は 引数 length が指定された場合バイナリ読み込みモードとして、そうでない場合テキスト読み込みモードとして動作します。

```ruby:test.rb
file_size = File.size("./hoge.tif")
read = File.read("./hoge.tif")

p "file size: #{file_size}"
p "read size: #{read.size}"
```

```bash:実行結果
$ ruby1.9.3 test.rb
"file size: 53642"
"read size: 52181" # テキストエンコーディングの影響でサイズが変わってしまっている
```

したがってこのように、バイナリモードで読み込んでいるつもりでテキストモードとして誤って読み込んでしまうことがあります。

# IO.binread
引数 length を指定しなくてもバイナリモードとして読み込んでもらいたい場合、 IO.binread があります。

```ruby:test2.rb
file_size = File.size("./hoge.tif")
read = File.binread("./hoge.tif")

p "file size: #{file_size}"
p "read size: #{read.size}"

```

```bash:実行結果
$ ruby1.9.3 test2.rb
"file size: 53642"
"read size: 53642" # バイナリとして読み込んだのでサイズが一致している
```

# 参考
[class IO](http://doc.ruby-lang.org/ja/1.9.3/class/IO.html)
PhpStormの「Open in GitHub」っていうプラグインを作ってみた


エディタ上で表示しているソースコードをGitHub上で開けるようなプラグインを作ってみました。

http://plugins.jetbrains.com/plugin?pr=&pluginId=7190

IntelliJ IdeaとPhpStormで動作確認済。たぶんAppCodeとかPyCharmとかRubymineでも動くはず。

<p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/r/rinrin900/20130310/20130310225310.png" alt="f:id:rinrin900:20130310225310p:plain" title="f:id:rinrin900:20130310225310p:plain" class="hatena-fotolife" itemprop="image"></span></p>

つかいかたはかんたん。上のプラグインをインストールするだけ。
あとは[Find Action]-[Open in GitHub]で実行すれば、デフォルトブラウザでGitHubが開く。

※Open in GitHubのデフォルトキーマップは[Ctrl+Shift+g]に設定してます。

複数行を選択した状態でOpen in GitHubを実行すると行が選択された状態で開きます。

<p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/r/rinrin900/20130310/20130310225251.png" alt="f:id:rinrin900:20130310225251p:plain" title="f:id:rinrin900:20130310225251p:plain" class="hatena-fotolife" itemprop="image"></span></p>


<p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/r/rinrin900/20130310/20130310225208.png" alt="f:id:rinrin900:20130310225208p:plain" title="f:id:rinrin900:20130310225208p:plain" class="hatena-fotolife" itemprop="image"></span></p>

ちなみにGitHub Enterpriseは未対応。要望があれば対応するかも。

そういえば、公式で公開されてる「GitHub」っていうプラグインにも[Open in browser]っていうコマンドがあるけど、
こっちは自身のリポジトリ上のファイルしか開けないらしい。
PhpStormで『GotoFileでクォート文字列のファイル名を送る』マクロ


PhpStormでマクロを初めて使ってみたけど便利な使い方出来て、思ってたより色々捗りそう。

CakePHPとかのフレームワークを使ってると、テンプレート→別テンプレートに飛ぶことが多くて、その度にファイル名入力してジャンプするけど若干煩わしい。

そんなわけで、『GotoFileアクションにシングルクォーテーション内のファイル名を送る』マクロを作ってみた。

※以下はIdeaVimプラグインを入れてVimキーバインドになっている想定です。

<p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/r/rinrin900/20130306/20130306191546.png" alt="f:id:rinrin900:20130306191546p:plain" title="f:id:rinrin900:20130306191546p:plain" class="hatena-fotolife" itemprop="image"></span></p>

## 設定手順

手順は以下の通り。

1) [Edit]-[Macro]-[Start Macro Recording]を選択

2) エディタ上に任意の箇所で[vi']-[Ctrl+Shift+A(GotoFile)]の順に入力

3) [Edit]-[Macro]-[Stop Macro Recording]を選択

4) 任意のマクロ名を指定して保存

これでマクロが完成。

次に、作成したマクロに任意のショートカットを割り当てる。

<p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/r/rinrin900/20130306/20130306192027.png" alt="f:id:rinrin900:20130306192027p:plain" title="f:id:rinrin900:20130306192027p:plain" 
class="hatena-fotolife" itemprop="image"></span></p>

## 使い方

ジャンプしたいファイル名が書かれているシングルクォート内で、先ほど作成したマクロを実行するだけ。

<p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/r/rinrin900/20130306/20130306192239.png" alt="f:id:rinrin900:20130306192239p:plain" title="f:id:rinrin900:20130306192239p:plain" class="hatena-fotolife" itemprop="image"></span></p>

<p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/r/rinrin900/20130306/20130306192357.png" alt="f:id:rinrin900:20130306192357p:plain" title="f:id:rinrin900:20130306192357p:plain" class="hatena-fotolife" itemprop="image"></span></p>

こんな感じ。
ちなみに、GotoFileの代わりにGotoClassとか指定すれば、クラス名指定でのジャンプが出来るようになるはず。

PhpStorm上のエディタ機能だけでなく、自前でインストールしたプラグインとも組み合わせてマクロが組めるみたい。
頻繁にやる操作をマクロ化しておけば効率も桁違いに上がるはずなので、積極的につかってみようとおもう。
PhpStormでちょっと便利な『ソースコードの階層まで自動的にスクロール』する機能


最近知ったPhpStormのちょっと便利機能を紹介。
今時のフレームワークとか使ってて、コードが多いと意外と面倒なのがディレクトリ移動。
基本的にファイル移動はファイルとかクラス名指定でジャンプするけど、ディレクトリツリーからファイルを辿りたくなることもしばしば。

この設定をしておくと、「常に開いているファイルまでディレクトリツリーが自動的に開いてスクロールする」というスグレモノ。
Find Actionにも出てこないし、Preferencesからも設定出来ないので、知らない人も多そう。

設定方法はとても簡単。Tool Windowの[Project]上で右クリック→[Autoscroll from Source]にチェックを入れるだけ。

![](http://f.cl.ly/items/0I1J2S0V0M3r453w3h2B/Image%202013.04.17%2018%3A51%3A52.png)

チェックをしてある状態だと、Project内のディレクトリツリーが開いているファイルまで自動的にスクロールしてくれるようになる。

![](http://f.cl.ly/items/3s331D3v2L3v33142j0N/Image%202013.04.17%2018%3A52%3A21.png)

こんな感じ。ディレクトリツリー開いて作業するときには地味に便利。
ちなみに同じ設定欄にある[Autoscroll to Source]はディレクトリツリー上で選択したファイルを自動的に開くという設定。
こっちの使い道は。。うーん。
ENUMの便利な使い方「その２」

[その１](http://qiita.com/items/98c9bd10f31d06d422ea)で作ったEnumを今度は条件付けのフラグとして使う
こうやって使うというサンプルなので動きません

```javascript:item2.js
var SLOT = {
 NONE : 0,
 EQUIP : 1,
 INVENTORY : 2,
 STORAGE : 3,
 _SIZEOF : 4,
};
var SLOT_FLAG = {
 NONE : 1<<SLOT.NONE,
 EQUIP : 1<<SLOT.EQUIP,
 INVENTORY : 1<<SLOT.INVENTORY,
 STORAGE : 1<<SLOT.STORAGE,
 WEAPONITEM : SLOT_FLAG.EQUIP | SLOT_FLAG.INVENTORY,//装備品は装備スロットとインベントリに設置可能
 EVENTITEM : SLOT_FLAG.INVENTORY,//イベントアイテムはインベントリに設置可能
 CONSUMPTIONITEM : SLOT_FLAG.INVENTORY|SLOT_FLAG.STORAGE,//消耗品はインベントリと倉庫に設置可能
};

function getSlotCond(item){
    switch(item.type){
    case ITEM_TYPE.WEAPON:
        return SLOT_FLAG.WEAPONITEM;
    case ITEM_TYPE.CONSUMPTION:
        return SLOT_FLAG.CONSUMPTIONITEM;
    case ITEM_TYPE.EVEMT:
        return SLOT_FLAG.EVENTITEM;
    }
    return 0;
}

function moveSlot(item,toslot){
    if(getSlotCond(item) & (1<<toslot)){
        item.slot_type = toslot;
        return true;
    }
    return false;
}
```
ENUMの便利な使い方「その１」

配列をハッシュ的に扱う方法
JSで書いてるけど言語は問わないはず。
C言語ではよく使う。
こうやって使うというサンプルなので動きません

```javascript:item.js
var SLOT = {
 NONE : 0,
 EQUIP : 1,
 INVENTORY : 2,
 STORAGE : 3,
 _SIZEOF : 4,
};

var item_slot = new Array(SLOT._SIZEOF);
item_slot[SLOT.NONE] = new SlotNone();
item_slot[SLOT.EQUIP] = new SlotEquip();
item_slot[SLOT.INVENTORY] = new SlotInventory();
item_slot[SLOT.STORAGE] = new SlotStorage();

item_slot[SLOT.INVENTORY].add(new Item(1001001));
var items = item_slot[SLOT.INVENTORY].pickup([1001001]);
items.forEach(function(item){
    item_slot[SLOT.EQUIP].remove(item);
});
items.forEach(function(item){
    switch(item.slot_type){
    case SLOT.NONE:
        item_slot[SLOT.STORAGE].add(item);
        break;
    default:
        throw new Error("エラーです");
        break;
    }
});
```

[その２](http://qiita.com/items/bdf3d3cea1fcffd1d09d)があります
Ruby の case 文で，値が配列に含まれているかを調べる

ある値 num が配列 ary1 に含まれているとき，配列 ary2 に含まれているとき，それ以外のときで処理を分岐させたいときは，配列の前に '*' を前置して配列を展開することで実現できる．

```ruby
num = 4
ary1 = [1, 2, 3]
ary2 = [4, 5, 6]

case num
when *ary1
  puts 1
when *ary2
  puts 2
else
  puts 3
end

# >> 2
```
既存パッケージ内のS4メソッドの書き換え


a_bickyさんの記事( http://d.hatena.ne.jp/a_bicky/20130324/1364102923 )見て試してみた。

手元の関数で既存パッケージ内のS4メソッドを書き換える。結構面倒。どんだけ汎用性があるのかわからないけど、この方向で行けそう。
もっと簡単な方法あるのかな？

```r
> updateS4 <- function(fname, def, signature, package) {+   ns <- asNamespace(package)+   environment(def) <- ns+   gen <- getGeneric(fname, ns)+   obj <- methods:::.TableMetaName(fname, gen@package)+   unlockBinding(obj, ns)+   unlockBinding(fname, ns)+   setMethod(fname, signature, def, where = ns)+   lockBinding(fname, ns)+   lockBinding(obj, ns)+ }> > f <- function(x, decreasing = FALSE, ...){+   cat("int64!\n")+   .Call( int64_sort, x, FALSE, decreasing )+ }> > library(int64)> > # function name, definition, signature, package name> updateS4("sort", f, "int64", "int64")> > x <- as.int64(5:1)> sort(x)int64![1] 1 2 3 4 5
```
Oracle 11g アンインストール

#サービスの停止
「Oracle」という名前がついているサービスをすべて停止

#Universal Installer から製品の削除
スタートメニューおよびサービスからOracle関連がなくなっている

#フォルダ削除
* [installDraive]:\app\user
* [installDraive]:\Program Files\Oracle

#Oracle一時ディレクトリ・ファイル 削除
DRIVE_LETTER:\Documents and Settings\user_name\Local Settings\Temp

#レジストリ削除
HKEY_LOCAL_MACHINE\Software\Oracle

#環境変数
Oracleのパスを削除
Heroku 上で Rails に非同期処理の sidekiq を導入する


## 基本セットアップ

Gemfile

````ruby
gem 'sidekiq'
````

アプリ上では

````ruby
obj.foo_process
````

を

````ruby
obj.delay.foo_process
````

という感じで実装すれば遅延処理になる


## 管理Webviewを設定

管理WebViewにはBasic認証をかける

routes.rb

````ruby
require 'sidekiq/web'

Sidekiq::Web.use Rack::Auth::Basic do |username, password|
  username == 'basicuser' && password == 'basicpass'
end
mount Sidekiq::Web => '/sidekiq'
````

Heroku上ではCSSの読み込みが失敗するのを修正

config/envirments/production.rb

````ruby
config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'
````

## 開発環境等では非同期にしない

config/initializer/sidekiq.rb

````ruby
unless Rails.env.production?
  require 'sidekiq/testing/inline'
end
````

## Heroku上でRedisを入れる

````shell
heroku addons:add redistogo:nano
````

## ローカル環境

Macでのセットアップ

````shell
brew install redis
````
maven-release-pluginの"release:perform"実行時にdeployしない

maven-release-pluginのrelease:perform実行時、特に何もしないとdeployしようとするが、「リリース準備だけしてdeployとかは特にしたくない」みたいなときはgoalにinstallみたいなのを指定しておけばいいらしい。

```xml:pom.xml
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-release-plugin</artifactId>
  <version>2.4.1</version>
  <configuration>
        <releaseProfiles>release</releaseProfiles>
        <goals>install</goals> <!-- instead of 'deploy' -->
   </configuration>
</plugin>
```

正直他にいい方法があるかもしれないが、これでやりたいことはできる。
Redmine2.3.0をサブディレクトリで動かす(Ruby2.0版)


## 目的

今まではredmineをサブドメインで動かしていたのだけれど、redmine以外もSSLで繋がるようにしたかったので、サブディレクトリで動かす設定を調べた。

## 環境

* Ruby 2.0.0
* Redmine 2.3
	* Rails 3.2.13
* Passenger 4.0 RC6

## 設定内容

Redmineは /usr/share/redmine-2.3.0 にある、という想定。

### シンボリックリンクを張る

	$ cd your-web-document-root
	$ ln -s /usr/share/redmine-2.3.0 redmine

### Apache 設定ファイル

	<Location /redmine>
		PassengerAppRoot /usr/share/redmine-2.3.0
		RackBaseURI /redmine
	</Location>

## 追記: 以前のパスからリダイレクトする

redmine.example.com -> example.com/redmine/ な設定。
ファイルが存在しなかった場合にのみリダイレクトする。 他のSSL接続するコンテンツにWordPressとかがあるとバグるかも。
Redmineのroutesに併せた正規表現でも書いてやれば確実か…？

        RewriteEngine on
        RewriteCond %{REQUEST_FILENAME} !-f [OR]
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(/redmine) - [L]
        RewriteRule /(.*) https://example.com/redmine/$1 [R,L]
        <Location /redmine>
                PassengerAppRoot /usr/share/redmine-2.3.0
                RackBaseURI /redmine
        </Location>
NumberPickerダイアログのカスタマイズ

##レイアウトファイルの作成
Dialogのレイアウトを作成します。

```xml:dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="50dp"
        android:layout_marginLeft="30dp"
        android:layout_gravity="center"
        android:textSize="18dp"
        android:text="開始日" />
    <NumberPicker
        android:id="@+id/numberPicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</LinearLayout>
```

##Dialogの生成
Dialogを表示する所で、以下を定義

```java
    private void showDialog() {
        class MainFragmentDialog extends DialogFragment {
            @Override
            public Dialog onCreateDialog(Bundle savedInstanceState) {
                LayoutInflater inflater = getActivity().getLayoutInflater();
                View view = inflater.inflate(R.layout.setting_dialog, null, false);

                NumberPicker np = (NumberPicker) view.findViewById(R.id.numberPicker);
                np.setMaxValue(31);
                np.setMinValue(1);

                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                builder.setTitle("Number Picker");
                builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        // OKクリック時の処理
                    }
                });
                builder.setNegativeButton("Cancel", null);
                builder.setView(view);
                return builder.create();
            }
        }

        // Dialogの表示
        MainFragmentDialog dialog = new MainFragmentDialog();
        dialog.show(getFragmentManager(), "span_setting_dialog");
    }
```

##備考
Android4.0以降の設定画面で見れる、DataUsageの様なNumberPickerが作成出来ます。
※APIレベルが11以上でないと、NumberPickerが使えません。
sample
https://github.com/rmizusawa/NumPickerOnDialog
'Conn close because of connect error SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: (null)'って言われてhttpsなサイトに接続できない


サンプルコード:

```
# -*- coding: utf-8 -*-
require 'net/https'

https = Net::HTTP.new('www.example.com', 443)
https.use_ssl = true   # SSL で接続
https.verify_mode = OpenSSL::SSL::VERIFY_PEER
https.set_debug_output($stderr)
https.start do
  request = Net::HTTP::Get.new("/path/to/page")
  request.basic_auth('user_name', 'password')
  response = https.request(request)
end
```

これを実行すると、

```
opening connection to www.example.com...
opened
Conn close because of connect error SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: (null)
```

という感じで接続できない状態だった。

Mac OS X 標準でインストールされている OpenSSL が古いためいろいろ問題が発生するらしいので、Homebrew で OpenSSL を入れ直して、rubyも再インストール（のついでにパッチレベルあげ）したら治った。

```
$ brew install openssl

$ rvm get               # RVM自身の更新
$ rvm list known        # インストール可能なリストの表示
$ rvm autolibs enable   # なんか要求されたので実施（必要なライブラリがbrewコマンドでインストールされたっぽい）
$ rvm upgrade 1.9.3     # 1.9.3 のパッチレベル上げ
```
pandocでmarkdownからredmineのwiki文法に変換する


kobitoさんを使い始めてからmarkdownが使いやすくredmineのwiki文法に嫌気が刺したので変換できないか探してたらpandocに出会った

## 環境

* macosx10.8
* yosemite

## 参考にしたサイト

* [Pandoc ユーザーズガイド 日本語版](http://sky-y.github.io/site-pandoc-jp/users-guide/)
* [Pandocインストール](http://d.hatena.ne.jp/ts_asano/20121202/1354408701)
* [Haskell製のMarkdownをHTMLやLaTeXに変換できるPandocのインストールとサンプル](http://d.hatena.ne.jp/sandai/20120604/p1#)

## pandocとは？

[Haskell製のMarkdownをHTMLやLaTeXに変換できるPandocのインストールとサンプル](http://d.hatena.ne.jp/sandai/20120604/p1#)から引用

>Haskell製のドキュメントコンバータ。markdownをhtmlにしたりLaTeXにしたりっていうことができるやつ。変換できる形式が多い。便利だ。

## インストール

```shell
brew install ghc cabal-install
cabal update
cabal install pandoc
```


### PATHを通す

pandocをインストールすると
$HOME/.cabal/binにpandocがあるので.zshrcにPATHを通す

```shell:~/.zshrc
PATH=${HOME}/.cabal/bin:$PATH
```

反映

```shell
source ~/.zshrc
#又は
source ~/.bashrc
```

## 変換

これでいける

```shell
pandoc -s -S markdown.md -t textile -o markdown.textile
```

なんでhaskellのインストールってあんなにかかるんだろう。。。
ニコニコ動画の再生位置を取得するスクリプト


参考 : [tamanegiage ブログ ニコニコ動画 再生位置を取得するスクリプト](http://tamanegiage.pazru.com/%E3%83%8B%E3%82%B3%E3%83%8B%E3%82%B3%E5%8B%95%E7%94%BB/nicogettime)


```javascript:

document.getElementById("external_nicoplayer").ext_getPlayheadTime();

```

返り値は秒数。
Geocodeサービスを使った住所→緯度経度変換処理

Google Geocodeでは規約違反になるらしいので、Yahoo!ジオコーダAPIを利用

```javascript
var request = require('request');

var geocodeURI = 'http://geo.search.olp.yahooapis.jp/OpenLocalPlatform/V1/geoCoder?';
var address = process.argv[2];
if(!address){
    console.log('Not Found address')
    return ;
}
geocodeURI += "&appid=" + "アプリケーションID"; //Yahooデベロッパーネットワークで取得
geocodeURI += "&output=json";
geocodeURI += "&query=" +encodeURI(address.toString("utf8"));

console.log(geocodeURI);

request(geocodeURI, function (error, response, body) {
  if (!error && response.statusCode == 200) {
    var  json = JSON.parse(body);
    console.log(json)
  }
});
```

実行

```bash
 node geocode.js 高崎市
```

http://shimz.me/blog/node-js/2749
メモ: Go言語で自作のパッケージを使えるようにする

備忘です。

環境変数GOPATHに設定されたパスの下にあるsrcディレクトリ以下のディレクトリをパッケージ名として識別する。
以下のようにGOPATHが設定されていてソースsrc.goが置かれている場合、

```
GOPATH=/home/user/work/golang

/home/user/work/golang/
    src/
        pkga/
            src.go
```

以下の様なimport文で参照できる。

```go:
import "pkga"
```

Goにも作法に従うことで設定を省くというRoR風の哲学があるみたいです。
お作法はこれから使いながら身につけよう。
grunt.jsによるlessの自動css化メモ

もうlessファイルをいちいちcrunchでコンパイルしたくないんやー。
ということで
自動コンパイル＆minifyとか色々できちゃうgrunt.jsのメモ。
http://gruntjs.com/
動作環境はmac。node.js。

##1.やりたいこと
・less/import.less   // 内部でreset.less, var.less, mixins.less使用
・less/prize.less     // 内部でmixins.less使用
・less/result.less    // 内部でvar.less使用
・less/var.less        // html上から単独呼び出し無し
・less/mixins.less  // html上から単独呼び出し無し
・less/reset.less     // html上から単独呼び出し無し
今回はこんなlessファイル達があるとして、
修正保存される度に下記cssファイルを吐き出したい。
・style/import.css
・style/import.min.css
・style/prize.css
・style/prize.min.css
・style/result.css
・style/result.min.css
var.cssやmixin.cssは必要無いよって話。


##2.grunt.jsインストール
node.jsインストール済みとして、
ターミナルにて下記コマンド実行

```terminal
sudo npm install -g grunt-cli
```

これで完了。かんたーん。
pcにインストールされるので1回だけでok。

##3.grunt.jsの設定とか
grunt.jsやるには
 package.json：設定ファイル。使用するプラグイン等記入。
 Gruntfile.js：実行作業ファイル。処理内容記入。
が必要。

```package.json
{
  "name": "testGruntApp",
  "version": "0.1.0",
  "devDependencies": {
    "grunt": "~0.4.0",
    "grunt-contrib-less": "*",
    "grunt-contrib-watch": "*"
  }
}
```

今回はlessのcss化と監視をするので、
プラグインは"grunt-contrib-less"と"grunt-contrib-watch"を使用。



```Gruntfile.js
module.exports = function (grunt) {

  grunt.loadNpmTasks('grunt-contrib-less');
  grunt.loadNpmTasks("grunt-contrib-watch");

  // watch less files name
  var arLessFileNamse = ['import','prize','result'];

  var arLessConfig = {};
  arLessFileNamse.forEach(function(val){
    arLessConfig[val] = {
      src: 'less/' + val +'.less',
      dest: 'style/' + val +'.css'
    };
    arLessConfig[val + 'Min'] = {
      options:{ yuicompress:true},
      src: 'less/' + val +'.less',
      dest: 'style/' + val +'.min.css'
    };
  });
//  console.log(arLessFileNamse);
//  console.log(arLessConfig);

  // setting
  grunt.initConfig({
    less: arLessConfig, 
    watch : {
      less : {
        files : ['less/*.less'],
        tasks : ['less']
      }
    }
  });

  // do task
  grunt.registerTask('default', [ 'less', 'watch']);
};
```

全ファイルcss化したく無いので、
配列arLessFileNamseにcss化したいlessファイル名を入れる方法にした。


##4.実行
まず実行環境を整える。
下記コマンドでpackage.jsonに記入されてるプラグインのインストールとかやってくれる。
この作業はgrunt.jsインストールとは違い、各プロジェクトごとに必要。

```terminal
sudo npm install
```

成功するとnode_modulesフォルダが作成され、
中に下記フォルダが作成されてるはず。
・grunt
・grunt-contrib-less
・grunt-contrib-watch

そしてそして、下記コマンドで
Gruntfile.jsに記入されてる監視＆ビルド実行

```terminal
grunt
```

ターミナルが
Waiting...
表示になったら成功。
監視しているのでlessファイルを修正&保存すると自動的にcssファイルを吐き出してくれます。

最後に
control + c　で監視終了！
おつかれさまー。
Vimの環境設定


まずは、**Vundle**を導入する。
VundleはRubyのBundlerみたいなプラグイン管理システムだそうです。

まずは、[gmarik/vundle](https://github.com/gmarik/vundle "gmarik/vundle")からcloneしてくる。

```
$ git clone git://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
```

.vimrcを編集

```.vimrc
set nocompatible
filetype off

set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

" Vundle自身もVundleで管理
Bundle 'gmarik/vundle'

filetype plugin indent on
```

一度保存して、`:BundleInstall`

とりあえず、ここまで

##参照
・[vim のプラグイン管理に Vundle を使う。](http://slumbers99.blogspot.jp/2012/02/vim-vundle.html "vim のプラグイン管理に Vundle を使う。")
・[Vundle で plugin をモダンに管理する](http://vim-users.jp/2011/04/hack215/ "Vundle で plugin をモダンに管理する")
Perlで日本標準時(JST)を取得

```perl:
use strict;
use warnings;
use LWP::Simple;
use Time::Piece;

# NICT:日本標準時 http://www2.nict.go.jp/aeri/sts/tsp/PubNtp/clients.html
my $getTime = get( q(http://ntp-a1.nict.go.jp/cgi-bin/time) );

# 改行が入っていると パース時に怒られる...
chomp($getTime);

# タイムゾーンは %Z で指定するとエラーになる。 ここでは JSTに決め打ち
my $t = Time::Piece->strptime($getTime, q(%a %b %e %H:%M:%S %Y JST));

print $t->strftime('%Y-%m-%d %H:%M:%S');
```
ASIN取得ブックマークレットをWP:AmazonJSプラグイン向けに拡張

自分用バックアップ的メモです。

いつぞやどこからか拾ったASIN取得のブックマークレットです

```JavaScript
javascript:var%20li=document.getElementsByTagName('li'),i=0,e,t;while(e=li[i++])void((t=e.innerHTML).match(/ASIN:|ISBN-10:/)&&prompt('ASIN/ISBN-10',t.replace(/^.+%20(.+)$/,'$1')))
```

これを、最近「Simple Amazon」から入れ替えた「AmazonJSプラグイン」のデフォルトショートコード向けに拡張しました。

```JavaScript
javascript:var%20title=document.title;var%20li=document.getElementsByTagName('li'),i=0,e,t;while(e=li[i++])void((t=e.innerHTML).match(/ASIN:|ISBN-10:/)&&prompt('ASIN/ISBN-10',t.replace(/^.+%20(<\/b>)?(.+)$/,'[amazonjs asin="$2" locale="JP" tmpl="Small" title="'+title+'"]')))
```

えぇ、誰でもできる拡張ですとも＾＾

<a href="http://himatama.sakura.ne.jp/amazon-associate-bookmarklet/">Amazonアソシエイトの短縮URLを取得するブックマークレット | 暇魂 -HiMA TAMA-</a>を元にさせていただき、新しくしました。

```JavaScript
javascript:(function(){var d=document,asin=d.getElementById('ASIN').value,atitle=d.getElementById('btAsinTitle').innerHTML;prompt('WP:AmazonJS','[amazonjs asin="'+asin+'" locale="JP" tmpl="Small" title="'+atitle+'"]');})();
```
Emacsで拡張を使わず複数ファイルの複数行に渡る置換を行う

# 概要
ぐぐると`grep-edit.el`や`moccur-edit.el`の使い方出てくるけど、複数行の変更が出来なかった。んだけど拡張使わずに実現する方法を見つけたので備忘録的に書く。

# やり方
## 置換したい対象のファイルを選択する
```
M-x find-dired
Run find in directory: /path/to/dir/
Run find (with args): -type f
```
`Run find in directory:`と`Run find (with args):`はemacsのメッセージ。その横が自分の入力。`-type f` 以外にも`-name "*php"`等、`find`のオプションを使う。
これを実行すると、`find-grep`の条件にあったファイルがリストアップされる。この中から置換するファイルを選ぶ。全部置換するなら`*s`とタイプするとすべてのファイルが選択出来る。

## 置換する
`Q`を押して`dired-do-query-replace-regexp`を呼び出す。置換前文字列と置換後文字列を入力する。改行を入力するには`C-q C-j`で入力する。これは普通の置換と同じ。
実行後は普通の置換と同じく`y`で置換を実行、`n`で実行せず次、`!`でそのバッファのヒットした文字列全部置換。普通の置換と違うのは、複数ファイル全て問答無用で置換したい場合は`Y`を押す。

## 保存する
これだけだと保存されてないので保存する。`M-x ibuffer`呼び出して、`*u`で変更したけど保存してないbufferを選択して、`S`で保存、`D`でそのバッファのkill。

## 以上

# 参考
大体一つ目のページを訳しただけ

* http://ergoemacs.org/emacs/find_replace_inter.html
* http://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html

# ひとりごと
日本語でぐぐっても`grep-edit.el`, `moccur-grep.el`の情報ばっかりだったけど、英語でぐぐったら一発で見つかった。しかも拡張elisp使わず出来るんやん。今までモダンなelispとかに頼りきってたので、`find-dired`, `ibuffer`とか初めて使った。勉強なった。
Vagrant1.1がリリースされてずいぶん経つけど、とりあえず1.0でBoxを作ってみる


## 趣旨

* Chefのクックブックを検証するための環境がほしい
* 似たような環境を作ったり、何度も環境を作り直せるようにしたい
* Veeweeを使えばVirtualBoxのイメージをサクッと用意できる
* Vagrant1.1がリリースされているけど、ここでは1.0を使う

## バージョン情報など

* MacOSX 10.7
* Ruby 1.9.3-p392(rbenv)
* VirtualBox 4.2.12
* veewee 0.3.7
* vagrant 1.0.7

## 手順

### VirtualBoxのインストール

* https://www.virtualbox.org/wiki/Downloads からダウンロード、インストール

### Box作り

作業用ディレクトリの用意

```
mkdir veewee
cd veewee
rbenv local 1.9.3-p392
```

bundlerをインストール

```
gem install bundler
rbenv rehash
bundle init
```

Gemfileを記述

```
gem 'veewee'
```

gemのインストール(作業ディレクトリ以下に)

```
bundle install --path=vendor/bundle --binstubs
```

CentOS6.3のbaseboxを定義する

```
bin/vagrant basebox define centos6_3 'CentOS-6.3-x86_64-minimal'
```

作成されるファイル

```
definitions/centos6_3
├── base.sh
├── chef.sh
├── cleanup.sh
├── definition.rb
├── ks.cfg
├── puppet.sh
├── ruby.sh
├── vagrant.sh
├── virtualbox.sh
└── zerodisk.sh
```

定義の修正

* base.sh
  * リリースに合うkernel-develがみつからないのでreleaseverを明示
* definition.rb
  * iso_srcのURLを国内など近いものに変更
  * postinstall_files から ruby.sh, chef.sh, puppet.sh を除外
     * knife solo prepareでChef(と同梱する形でRubyも)をインストールするから
* ks.cfg
  * lang, timezoneを修正

仮想マシンを作成し、Boxとしてエクスポート

```
bin/vagrant basebox build centos6_3
bin/vagrant basebox export centos6_3 centos6_3
```

→ centos6_3.boxができあがる。

### Vagrantから利用する

パッケージ版のVagrantを別途インストールしてしまう(いかがなものか)

* http://downloads.vagrantup.com/tags/v1.0.7 からダウンロード、インストール
* 利用する側はchefやknife-soloがインストールされている環境なので、vagrantをgemとしてインストールしたくないという理由

先ほど作ったBoxをVagrantに登録する

```
vagrant box add centos6_3 /path/to/centos6_3.box
```

セットアップ、起動、接続

```
vagrant init centos6_3  # Vagrantfileが作成される
vagrant up
vagrant ssh
```

### Vagrantについて

1.1からgemとしての提供は廃止され、パッケージのみとなった

> Vagrant 1.0.x had the option to be installed as a RubyGem. This installation method has been removed for installers and packages only.

* http://docs.vagrantup.com/v2/installation/index.html

1.0用に作られたBoxは1.1以降でも使える

> Box files made for Vagrant 1.0.x and VirtualBox continue to work with Vagrant 1.1+ and the VirtualBox provider.

* http://docs.vagrantup.com/v2/boxes/format.html

将来的にはBoxを作る仕組みが提供されるらしい

> A future release of Vagrant will provide additional mechanisms for automatically creating such images.

* http://docs.vagrantup.com/v2/virtualbox/boxes.html

### その他

* VirtualBox Guest Additionsのためにgccなどをキックスタートでインストールしているが、実機にインストールするクックブックの作成を忘れがち(自分だけ？)
* Githubに上げました
  * https://github.com/hapicky/vagrant_boxes

## 参考

* [Veewee](https://github.com/jedi4ever/veewee)
* [Vagrant](http://www.vagrantup.com)
今日見つけた 1.8.7 と 1.9.3 の非互換性

```
def foo(*args)
  args
end

p foo:bar
```

これを Ruby 1.8.7 と Ruby 1.9.3 で実行したらこうなるよ。

```
$ RBENV_VERSION=ree-1.8.7-2012.02 ruby foo.rb
[:bar]
```
```
$ RBENV_VERSION=1.9.3-p392 ruby foo.rb
foo.rb:5:in `<main>': undefined local variable or method `bar' for main:Object (NameError)
```
ヘッダーをちょいワル系で使う

ヘッダーのインクルードとは、単なる「ファイルの内容を挿入」することに他なりません。
例えば、

hoge.hファイルに１行以下のコードがあったとします。

```
NSLog(@"hoge");
```

そして、mainのプログラムでこう書きます。

```
#import <Foundation.h>

int main()
{
    #include "hoge.h"
    return 0;
}
```

するとこれはコンパイル時には

```
#import <Foundation.h>

int main()
{
    NSLog(@"hoge");
    return 0;
}
```

と展開されますね。
つまり結局はマクロなのですね。

これを利用すると、普通の関数呼び出しやクラス等でのコードの再利用とは、
スケールの違ったありえないレベルでコードの使い回しが可能になります。
アスペクト指向なんて目じゃないです。
こういった無茶ができるのがC系統言語のいいところだと思います。

え？　あまりお行儀よくないって？
ええ、まったくおっしゃる通りでございます。
ご利用は計画的に。
javascript ライブラリお試し用 テンプレ(requireJS)

# 無数に存在するjavascriptライブラリをお手軽に試したい

## 問題
試すライブラリ自体がいろいろなライブラリに依存しているので、毎回準備してパスを通すのが面倒

## 解法

1. 一度使用した事のあるライブラリは、使いたいと思った瞬間に使えるように辞書化する
2. 依存ライブラリの取り込み作業が減るように、それらを出来る限りCDNで読み込めるようにする

----

その結果

```require_def.js

(function(){
    'use strict';

    requirejs.config({
        urlArgs : "nocache=" + new Date().getTime(),    //nocache
        shim: {
            'jquery.ascensor': ['jquery']
           ,'jquery.easing': ['jquery']
           ,'jquery.scrollTo': ['jquery']
           ,'jquery.tmpl': ['jquery']
           ,'jquery.splmenu': ['jquery']
           ,'jquery.pnotify':['jquery']
           ,'jquery.bottom':['jquery']
           ,'underscore':{
                exports:"_"
           },'backbone':{
               deps:["underscore","jquery"]
               ,exports: 'Backbone'
           }
        },
        baseUrl : '/javascripts',
        paths : {
            'jquery.splmenu' : 'libs/plugins/jqsimplemenu'
            ,'jquery.ascensor' : 'libs/plugins/jquery.ascensor'
            ,'jquery.pnotify' : 'libs/pnotify-1.2.0/jquery.pnotify.min'
            ,'jquery.bottom' : 'libs/jquery.bottom' 
            //CDN
            ,'jquery' : '//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min'
            ,'jquery.tmpl' : '//ajax.aspnetcdn.com/ajax/jquery.templates/beta1/jquery.tmpl.min'
            ,'jquery.easing' : '//cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js'
            ,'underscore' : '//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.3.3/underscore-min'
            ,'backbone' : '//cdnjs.cloudflare.com/ajax/libs/backbone.js/0.9.2/backbone-min'
            ,'mdn' : '//cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js'
        }
    });    
    require_use();  //callback
})();
```
----

で、呼び出し側

```test.html

    function require_use(){
       require(['jquery.bottom','underscore'],loadFinish);
    }

    function loadFinish(){
        //use require lib
    }
```

新たに試したいライブラリはrequire_def.jsに追加して
使うと、個人的な感触ですが、後々楽になってきた気がしてます。

あと、http://cdnjs.cloudflare.com 便利です。
PEARのNet_URL2のクエリーのあたりを評価

クエリーパラメーターの配列にアクセスする時、パーセントエンコードするのかしないのかということが気になった。

    $  phpunit --colors eval-net-url2.php
    PHPUnit 3.7.13 by Sebastian Bergmann.
    
    ..
    
    Time: 0 seconds, Memory: 4.00Mb
    
    OK (2 tests, 8 assertions)

```php:eval-net-uri2.php
<?php
require_once 'Net/URL2.php';
// source: http://pear.php.net/package/Net_URL2/docs/latest/__filesource/fsource_Net_URL2__Net_URL2-2.0.0NetURL2.php.html
// documentation: http://pear.php.net/package/Net_URL2/docs/latest/Net_URL2/Net_URL2.html
class URL2Test extends PHPUnit_Framework_TestCase
{
  public function setUp()
  {
    $this->rawUri = 'http://example.net/';
    $this->queryVariables = array('include space'  => 'ye s',
                                  'include slash/' => 'sla/sh',
                                  'include amp&'   => 'a&p');
  }

  public function testEncodeKeysFalse()
  {
    $options = array('Net_URL2::OPTION_USE_BRACKETS' => false,
                     'Net_URL2::OPTION_ENCODE_KEYS'  => false);
    $uri = $this->buildUri($options);
    $this->assertSame('http://example.net/?include%20space=ye%20s&include%20slash%2F=sla%2Fsh&include%20amp%26=a%26p', $uri->getURL());
    $qv = $uri->getQueryVariables();
    $this->assertSame('ye s', $qv['include space']);
    $this->assertSame('sla/sh', $qv['include slash/']);
    $this->assertSame('a&p', $qv['include amp&']);
  }

  public function testEncodeKeysTrue()
  {
    $options = array('Net_URL2::OPTION_USE_BRACKETS' => false,
                     'Net_URL2::OPTION_ENCODE_KEYS'  => true);
    $uri = $this->buildUri($options);
    $this->assertSame('http://example.net/?include%20space=ye%20s&include%20slash%2F=sla%2Fsh&include%20amp%26=a%26p', $uri->getURL());
    $qv = $uri->getQueryVariables();
    $this->assertSame('ye s', $qv['include space']);
    $this->assertSame('sla/sh', $qv['include slash/']);
    $this->assertSame('a&p', $qv['include amp&']);
  }

  protected function buildUri(array $options)
  {
    $uri = new Net_URL2($this->rawUri, $options);
    $uri->setQueryVariables($this->queryVariables);
    return $uri;
  }

}
```
RailsでTODC Bootstrapを使う

TODC BootstrapはTwitter Boostrapの定義を上書きする仕様なので、まずはTwitter Boostrapを導入。これはgemで提供されているので、Gemfileに以下を追記。

```ruby
gem 'twitter-bootstrap-rails'
gem 'less-rails', :group => :assets
```

以下のコマンドで必要なファイルを作成。

```
$ bundle exec rails g bootstrap:install less
```

次にTODC Bootstrapを導入。gemで提供されていないので、http://todc.github.io/todc-bootstrap/getting-started.html より、TODC Bootstrapのソースをダウンロードし、中のlessディレクトリにあるすべての.lessファイルを`APP_ROOT/vendor/assets/stylesheets`以下に配置する。

最後に下記の1行を`app/assets/stylesheets/bootstrap_and_overrides.css.less`に追記。

```less
@import "todc-bootstrap";
```

以上でTODC Bootstrapが使えるようになる。
Chromeでconsole.logにスタイルを適用する

https://github.com/adamschwartz/log
これのソース読んでて知りました。

```javascript
console.log('あいうえお%cかきくけこ', 'color: red');
```

このようにすると`%c`よりあとの文字(`かきくけこ`)にCSSが適用されて赤くなります。

```javascript
console.log('%cred %cgreen %cblue', 'color: red', 'color: green; font-weight: bold', 'color: blue');
```

こんなふうに複数のCSSを使えます。

```javascript
console.log('normal %cbold%c normal', 'font-weight: bold; font-size: large', '');
```

空の文字列を渡すと元のスタイルに戻るみたいです。

うまくログにスタイルをつければ、デバッグも捗るかな。
その HTML タグ、使うべきか 使わないべきか？

HTMLページを作っていて、すこし目新しいタグを使ってみようとおもったら、
次のサイトでブラウザ・バージョン別のサポート状況をチェックすると良いです。
javascript:void(0);
- http://caniuse.com/  
＞ Compatibility tables for support of HTML5, CSS3, SVG and more in desktop and mobile browsers.
 
 サイト名は "Can I use?" (使えるか？) から来ています。
 
追加情報
======
実際に　ブラウザでの動作状況をしらべるなら、  

* http://acro-engineer.hatenablog.com/entry/20110616/1308271306
　> Modernizr.jsを使ってHTML5のクロスブラウザ問題に立ち向かう！    
  
* http://modernizr.github.io/Modernizr/test/index.html
　>  Modernizr test suite to quickly test your current browser’s features.
Ubuntuで不要なファイルを削除してディスクスペースを確保する

* VM で利用している Ubuntu 10.04 Desktop で，ディスクスペースが十分でないという警告が出たので，いくつかスペースを確保する手段を講じました．

1. Chromium, Firefox のキャッシュファイルを削除
2. 不要なパッケージを削除
3. 不要な linux-image パッケージを削除

## 1. Chromium, Firefox のキャッシュファイルを削除

Chromium のキャッシュは，

```
~/.cache/chromium/Cache
```

にある．Firefox のキャッシュは，

```
~/.mozilla/firefox/{random}.default/Cache
```

にある．それぞれ中身を削除．

## 2. 不要なパッケージなどを削除

まず，apt のパッケージキャッシュをクリア．

```
$ apt-get clean
```

他に不要なパッケージを削除する．例えば，

- gnome-games
- gnome-user-guide
- Mozilla Thunderbird
- OpenOffice（私の環境では既に削除してあった）

など不要なパッケージを削除．このへんは個人の環境に依ると思います．
削除対象のパッケージは参照[1]を参考にしました（ちょっと情報が古い）．

```
$ apt-get autoremove
```

を使うと，依存関係のない不要なパッケージを削除してくれるようです．

## 3. 不要な linux-image パッケージを削除

やることは 2 とだいたい同じなんですが，かなり効果的だったので分けました．
長く使っているVMということで，古い linux kernel のパッケージがたくさん残されており，それがかなりのスペース（2.4GB）を消費していました．

```
$ dpkg -l 'linux-image-*'
```

とやると，インストール済みの linux-image パッケージがリストされ，いま使っているカーネル以外のパッケージを削除することでスペースを確保出来ます．いま使っている linux カーネルは，

```
$ uname -r
```

することで確認できます．この使っているもの以外の linux-image パッケージのリストアップと，その削除を一発でやるコマンドが参照[2]に挙げるページにありました．```sed``` コマンドの細かい解説も書いてあり，親切です．

```
dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge
```

これらを実行することで，最終的にスペースを 20% ほど開放することができました（```df``` コマンドで確認）．

## 参照

- [1] [How do I free up disk space?]("http://askubuntu.com/questions/5980/how-do-i-free-up-disk-space")
- [2] [Cleanup Unused Linux Kernels in Ubuntu]("http://markmcb.com/2013/02/04/cleanup-unused-linux-kernels-in-ubuntu/")
How to use Adobe Scout with grunt-idea-project-deploy?

1) Login to https://creative.adobe.com/apps (Create a account if necessary)
2) Download Adobe Scout from https://www.adobe.com/products/gaming/tools.edu.html 
3) Download and install the "AIR 3.7 & compiler" SDK from Adobe http://www.adobe.com/devnet/air/air-sdk-download.edu.html
4) Use the new compiler in your Gruntfile
5) Add asc2: true to your grunt-idea-project-deploy Gruntfile
6) Add "advanced-telemetry": "true" to the same Gruntfile

Example:

```javascript:Gruntfile.js
grunt.loadNpmTasks('grunt-idea-project-builder');
grunt.initConfig({
  idea: {
    main: {
      flexHome: 'air-3.7-with-compiler-path',
      path: '.',
      module: 'common',
      compile: {
         air: {
           version: 'test',
           'package': false,
           swf: {
             asc2: true,
             'advanced-telemetry':  'true'
          }
        } 
      }
    }
  }
});
```

7) Compile the .swf using these new settings

  ```sh
  grunt idea:main
  ```

8) Open Adobe Scout.app
9) Select the important telemetry settings

  ![Scout example settings](https://dl.dropboxusercontent.com/u/19407988/quiita/scout-settings-A.png)

10) Start the created .swf (in our case: air)

  ```sh
  adl common.xml
  ```

11) Select the running swf in the Adobe Scout list

  ![Scout example list entry](https://dl.dropboxusercontent.com/u/19407988/quiita/scout-settings-B.png)
php.ini の追記例


標準のphp.iniに追記変更するときの例。よく忘れるのでメモ書き

```php.ini
expose_php = Off
max_input_nesting_level = 6
log_error_max_len = 4096
default_charset = "UTF-8"
max_file_uploads = 3
upload_tmp_dir = /var/lib/php/file
```
ファイルごとにARCを利用するか決める

iPhoneアプリを作っていると便利なオープンソースライブラリなどが沢山あるので使いたい場面が沢山あるかと思います。
しかし、そんな時自身の使っているプロジェクトがARCを有効にしていないと、予めARCを想定しているライブラリなどを利用したい時は一手間が必要になります。

xcodeでプロジェクトを選択
↓
Build Phasesのタブを選択
↓
Compile Sourcesを開きARCを適用する（しない）ファイルをダブルクリックして

-fobjc-arc（ARCを有効に）
-fno-objc-arc（ARCを無効に）

というオプションを書き込んで下さい。
Ext JS 4.2にてビルド後...

Ext JS 4.2で、Sencha Cmdでスケルトンを作成後、早い段階でテストでビルドすると、それ以降の開発時に画面のレイアウトが崩れる場合があります。

それは、bootstrap.cssの内容が書き換わってしまうからです。
もとのbootstrap.cssはこんな内容。

    @import 'packages/ext-theme-classic/build/resources/ext-theme-classic-all.css';

bootstrap.cssの内容も、そのCSSをインクルードするというものに変わってしまうのです。

一旦ビルドされると、MyApp-all.cssというCSSがbuildの中にできるのですが、必要なCSSしかインクルードされません。
プロジェクトの初期にはあまりコンポーネントを使っていないので、ここに入ってこないCSSは沢山あることになります。
それが原因であとで追加で使うようになったコンポーネントの表示とかが崩れたりするわけです。
途中でビルドをすれば、MyApp-all.cssの内容も更新され、ちゃんと表示されるようになります。
また、bootstrap.cssを前掲の内容に書き戻してやってもレイアウトの崩れは解消されます。
Processingでproxyサーバを介してwebのリソースを利用する

手軽にビジュアルプログラミングを体験できる[Processing](http://www.processing.org/)ではスケッチ上にwebのリソースを利用することもできる。

例えば[日本語版WikipediaのProcessingのページ](http://ja.wikipedia.org/wiki/Processing)に掲載されている日本地図を塗り分けるサンプルコードでは

```javascript
PShape japan;
int square_len = 512;
void setup() {
  japan = loadShape("http://upload.wikimedia.org/wikipedia/commons/5/56/Blank_map_of_Japan.svg");
  size(square_len,square_len);
  smooth();
  noLoop();
}
```
と定義することで、指定したURLのリソースをスケッチ内に利用できる。

ところがproxyサーバを介して外部ネットワーク通信が行われる環境下にてこのサンプルコードを実行すると、

```
java.net.UnknownHostException: upload.wikimedia.org
...
```

このエラーがコンソールに表示されスケッチの実行ができない。

これは通信にproxyサーバを介している事によりDNSの名前解決ができないために起こっており、エラーを解消するにはproxyサーバの場所をスケッチに定義する必要がある。

# 対処その１：スケッチのsetupメソッド内でSystemのプロパティ設定を行う

スケッチ実行時、一度だけ実行されるsetupメソッドにて、Systemプロパティにproxyサーバの場所を定義する。

```javascript
import java.util.Properties;
PShape japan;
int square_len = 512;
void setup() {
  Properties systemSettings = System.getProperties();
  systemSettings.put("http.proxyHost", "my.proxy.example.com");
  systemSettings.put("http.proxyPort", "8080");
  System.setProperties(systemSettings); 

  japan = loadShape("http://upload.wikimedia.org/wikipedia/commons/5/56/Blank_map_of_Japan.svg");
  size(square_len,square_len);
  smooth();
  noLoop();
}
```
参考: http://www.processing.org/discourse/beta/num_1274721911.html


# 対処その２：preferences.txt にproxyサーバの場所を設定する。
その１の方法ではスケッチ毎のsetupメソッドに設定を行う必要がある。常にproxyサーバ設定を有効にするためにProcessingの環境設定ファイル：preferences.txtに設定を行う事もできる。

* ProcessingのIDEより[File]-[Preferences]と選択しPreferencesダイアログを表示
* Preferencesダイアログ下部の "More preferences can be edited directly in the file..." の行で示されたパス位置の preferences.txt を開く。
* 一旦Processingを終了する
* preferences.txt を開き、プロパティ"run.options"の値を編集する。
```
run.options=-DproxyHost=my.proxy.example.com -DproxyPort=8080
```
* preferences.txtを保存して、Processingを再起動する

参考：http://mayoi.net/archives/2005/05/10-1116_539.php
JSPでレイアウトのテンプレートを作る

●基本
```
<jsp:include page="header.jsp"/>
```
このようにコード内にインポートするjspファイルを書くとそのページを読み込むことができる。

【全体のコード例】
```
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<title>test\</title>
</head>
<body>
<jsp:include page="header.jsp"/>
<div id="main">
  contents
</div>
<jsp:include page="footer.jsp"/>
</body>
</html>
```
この例ではヘッダーとフッターをそれぞれjspファイルを読み込んでいるので、header.jspやfotter.jspを変えるとこのページのレイアウトも変わる

●外枠を作りたい場合

レイアウトの中に${param.title}というように　param.パラメータ名　でテンプレート読込先の内容を変えることができる

取り出しはテンプレート読込先で
```
<jsp:param name="title" value="テスト"/>
または
 <jsp:param name="content">
    <jsp:attribute name="value">
            test  //ここにcontentの中身がくる
    </jsp:attribute>
 </jsp:param>
```
のように書くと中身をテンプレートに入れ込むことができる

例
・main_layout.jsp
```
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<title>${param.title}</title>
</head>
<body>
<jsp:include page="header.jsp"/>
<jsp:include page="navigation.jsp"/>
<div id="main">
  ${param.content}
</div>
<jsp:include page="footer.jsp"/>
</body>
</html>
```
・sample.jsp
```
<%@page pageEncoding="UTF-8" contentType="text/html" %>
<jsp:include page="../layout/main_layout.jsp">
 <jsp:param name="title" value="テスト">  
  <jsp:param name="content">
    <jsp:attribute name="value">
            test  //ここにcontentの中身がくる
    </jsp:attribute>
  </jsp:param>
</jsp:include>
```
JAVA + Tomcatでlocalhostを独自ドメインに変更する(WINDOWS)

●127.0.0.1を自分のドメインに
http://stackoverflow.com/questions/2212240/how-to-create-a-domain-like-http-username-mysite-com-in-a-j2ee-web-applicati

\windows\system32\drivers\etc\hosts
を開いて
127.0.0.1  username.mysite.com
と記述する

サーバを再起動してusername.mysite.com:8080にアクセスするとつながるはず

●ポート:8080をつけないで済むようにする
Apacheの設定

C:\Program Files\Apache Software Foundation\Apache2.2\conf
のhttpd.confを編集する

<Location /yourdirectory/>
ProxyPass ajp://localhost:8009/yourdirectory/
</Location>

を追加する。
Locationはフォルダの位置を、ProxyPassは表示させたいドメインのサブディレクトリを記述する
Sublime Text 2でGoプログラムを書いて実行する


## Goのインストール

http://code.google.com/p/go/downloads/ からプラットフォームに合ったものをダウンロードしてインストールする。

Windows版はソースから入れる以外ではzipを解凍するかMSIインストールを使うかの選択肢がある。バージョンアップなどを考えるとzipの解凍の方が管理しやすいだろうか？ ``C:\go`` に配置するのが無難。

OS Xの場合は欲しいバージョンがHomebrewにあったらそれで入れるのが楽。

```bash:
$ brew info go
go: stable 1.0.3, HEAD
↑でよければ brew install go
$ brew install go
```

## GoSublimeのインストール

Sublime Text2のプラグインとして **[GoSublime](https://github.com/DisposaBoy/GoSublime)** がある。( [GoSublimeのデモ動画](http://www.youtube.com/user/GoSublime/videos) )

``Package Control: Install Package`` でインストールできる。

Homebrewでパスが通っているところにインストールする場合や、C:\goにインストールした場合は特に設定は不要だった。パスが通っていない場合などは ``Packages/User/GoSublime.sublime-settings`` にてPATHやGOROOTを設定しないといけないようだ。

```json:
// C:\_goに入れた場合
  {
    "env": { 
      "PATH": "C:\\_go\\bin;$PATH",
      "GOROOT": "C:\\_go"
    }
  }
```

## プログラムの実行

以下のようなプログラムを書く。

(GoSublimeは ``package`` と入力するとディレクトリ名を名前にして補完してくれる。しかし goプログラムが実行する ``main`` 関数は ``main`` パッケージにないといけないのでしばらくそれでハマった)

```go:
package main

import (
	"fmt"
)

func main() {
	fmt.Println("Hello, Wolrd")
}
```

### コマンドシェルから実行する

GoSublimeには **9o** というコマンドシェルがあり、``ctrl+9`` or ``command+9`` で開ける。

コマンドシェルから ``run`` と打てばビルドと実行が行われる。

無限ループなどで強制終了が必要なときは ``tskill`` と打つとタスクが表示されるので ``tskill t1`` のようにタスクIDを指定して打つと確認のプロンプトが表示され終了できる。

その他コマンドについては[ドキュメント](https://github.com/DisposaBoy/GoSublime/blob/master/9o.md) を参照。
powerlineをいつ使う？今でしょ！

Vim Advent Calendar 2012 136日目
さて、便利でカッコいいpowerlineさんを使う時が来たようだ！
この記事を読んでカッコいいVimにしよう！

## この記事で分かること。

・最新のpowerline化
・TabLineもpowerline化
・powerlineを使う人のTmux

## powerlineとはなんぞ？

「CUIってダサいよねー。どうにかしたいねー。」
「Vimってダサいよねー。」

はい、powerlineっと。

![alpaca_powertabline]( https://a248.e.akamai.net/camo.github.com/8a63810a39b08548c3ce51a796f589b79d9df4be/687474703a2f2f662e636c2e6c792f6974656d732f31443430317630553355306f336733553054306e2f616c706163615f7461626c696e652e706e67 )

*お..お、ぉぉ...サロメ。(※1 神の雫より)*

### 最新のpowerline化

tmux, zsh, vimのpowerlineが元々ありましたが、最近ひとつに統合されました。
多くの人がvim-powerlineを使っていますが、個人的には新しいpowerlineの方がおすすめです。

あと、この前遊んでたらtablineもpowerline化出来ました。やった！


### powerlineのインストール

NeoBundleで一発。
Vundleとか未だに使ってる人は、なんというか、、残念です。

```vim:.vimrc
NeoBundle 'alpaca-tc/alpaca_powertabline'
NeoBundle 'Lokaltog/powerline', { 'rtp' : 'powerline/bindings/vim'}
NeoBundle 'Lokaltog/powerline-fontpatcher'
```

### フォントにパッチをあてます

powerlineは既存のフォントを拡張して、かっこ良くしてるんですよね。
パッチを当てないと文字化けするので、さくっとフォントにパッチを当てましょう。
**10分ぐらい**で終わるかと思います。
*[インストール中はアルパカを見て癒されましょう(10分)](http://www.youtube.com/watch?v=t0EhLtEMg5Q)*

fontforgeのインストール。
大抵のパッケージ管理で入れれます。こんな感じでしょうか。
自分の使っているパッケージ管理で入れましょう。

- `brew install fontforge --with-python`
    - see https://github.com/FontCustom/fontcustom/issues/170
- `port install fontforge`
- `yum install fontforge`
- `apt-get install fontforge`

#### パッチを当てる

フォントを取り出してきて、パッチを当てます。
Macならこんな感じ。
パスは各々読み替えてください。

`sudo cp /System/Library/Fonts/Ricty-Regular.ttf $HOME/.font/`

`fontforge -lang=py -script $HOME/.bundle/powerline-fontpatcher/scripts/powerline-fontpatcher $HOME/.font/Ricty-Regular.ttf`

**完了！ 楽勝ですね。**


## powerlineを使う人のTmux

### tmux-powerline

.tmux.confに下記追加。
パスは書き換えてね。

`source ~/.bundle/powerline_master/powerline/bindings/tmux/powerline.conf`

個人的にはtmux1.8から追加されたこのセンタリングオプションもおすすめ。
`set-option -g status-justify "centre"`

### 修正版tmux

- iTerm2 1.0.0 20130319
- tmux-for-iTerm2-20130319

iTerm2でpowerlineを使うと崩れちゃう、vimの文字が崩れる...。
という経験のある方はiTerm2のDouble-Width Charactersにチェックを入れたことがあるかと思います。
ただ、そうするとtmuxの分割線が崩れるんですよね...。

tmuxのこの問題、パッチで解消されてました。

[iTerm2のHP](https://code.google.com/p/iterm2/downloads/list)より、tmux-for-iTerm2-20130319をダウンロードしてインストールしてください。
こんな感じになるのかな。

```sh
# tmuxのbuildに必要なパッケージのインストール
wget https://iterm2.googlecode.com/files/tmux-deps-v2.tar.gz
tar xvf tmux-deps-v2.tar.gz
tar xvf autoconf-2.69.tar.gz
tar xvf automake-1.13.1.gar.gz
tar xvf gettext-0.18.2.tar.gz
tar xvf libevent-2.0.19-stable.tar.gz
tar xvf pkg-config-0.27.tar.gz

# それぞれのディレクトリで
./configure --prefix=$YOUR_BIN_PATH
make && make install
```

```sh
wget https://iterm2.googlecode.com/files/tmux-for-iTerm2-20130319.tar.gz
tar xvf tmux-for-iTerm2-20130319.tar.gz
cd tmux-for-iTerm2-20130319
./configure --prefix=$YOUR_BIN_PATH
make && make install
```

ちなみに、最新のiTermとTmuxはclipboard連携が出来たり、分割後のディレクトリが同じディレクトリだったり、
便利ですよ、色々と。

### おわり

お次...も@tyruさんです。笑
よろしくお願いします。
Intel XDKの起動からハマった。(Ubuntu 13.04beta)

朝起きたらIntel XDKが話題になっていて、なんかカッコ良さそうでした。
ところが、ぼくのUbuntuではまず起動から難儀だったので、是非、共有しておきたくメモします。

# Javaのセキュリティポリシ
まず一発、[このChrome Extension](https://chrome.google.com/webstore/detail/intel%C2%AE-xdk/onmkoldigcfmebcinpmineoadckalllb)をインストールしてJavaアプレットの起動を待ったら、当然の如く起動ができませんでした。  
表示されたのはこんな感じのエラー。

![AccessControlException](https://dl.dropboxusercontent.com/u/19936633/images/qiita_install_xdk_1.png)

パッと見でOpenJDKの問題を疑ったんですが、冷静に見ると根っこはAccessControlExceptionだったので権限周りの問題だという事は理解できました。
さらっと調べてみるとOpen JDK(Iced Tea)は、OracleのJavaに比べて[デフォルトの権限が厳しいらしい](http://docs.fedoraproject.org/ja-JP/Fedora/9/html/Release_Notes/sn-Handling-Java-Applets.html)ですね。
そういうわけで、ココらへんを治す方向性で進めていきます。

```
 # vim /usr/lib/jvm/java-6-openjdk-amd64/jre/lib/security/java.policy 
```

IcedTeaのjavawsはJDK7ではなくJDK6で動くようだった(これは手元のビヘイビアがそうだったというだけで、根拠は持っていない)、このポリシを編集します。以下の行を足します。

```
grant codeBase "http://xdk-software.intel.com/distribution/*" {
        permission java.security.AllPermission;
};
```

僕はJavaに明るくないんですが、jnlpをエディタで割ったらcodeBaseというattrでこのURLが指定されてるので、とりあえずこれを指定したら上手く行きました。
本当はパーミッションをもっと細かく設定するべきなんだと思いますが、とりあえずこれでいい。

# ChromeのPath
ここまでで上手く言ったと思ったら今度はchromeのpathがわからないと怒られました。

![AccessControlException](https://dl.dropboxusercontent.com/u/19936633/images/qiita_install_sdk_2.png)

これも、メッセージのシンプルさから想像できる以上にハマった。
google-chromeをwhereisして、ソレを指定してやるだけで良いというのが最初の考え。僕の環境では"/usr/bin/google-chrome"というシンプルな場所に居るようだったので、これを["SetChromeLocation"で指定](http://xdk-software.intel.com/images/set_chrome_location.png)してやった。

ら、動かなかった。OSXとはコマンドの呼び出しの勝手が違うらしい。(?)

これは解決できないかなと諦めかけていたんですが、よく考えたらIntel XDKの前身はAppMobiであって、このノーハウで検索すると良いのではないか･･･と[思ったらビンゴ](http://blog.livedoor.jp/imoimo_kun/archives/51346723.html)でした。

先のリンクを参考に、chromeから下記localhostにアクセスするとXDKを使用することが出来るようになりました。

```
 http://localhost:58888/_emulator/_ide/index.html
```

![view](https://dl.dropboxusercontent.com/u/19936633/images/qiita_install_xdk_3.png)

これで僕のUbuntuでもIntel XDKで遊ぶことが出来ます。

# 感想
本題に移るまでが大変だった。
楽しみます。
Perl で古いログ・ファイルから４つ削除する

```perl:
# 古いログ・ファイルから４つ削除する
unlink @f = (
         map  { $_->[0] }
         sort { $b->[1] <=> $a->[1] }
         map  { [$_, -M] } <*.log>
       ) [0..3];
```
Perl でシュフォーツ変換

```perl:
# シュフォーツ変換 とか言うらしい。。。
my @logFiles = 
     map  { $_->[0] }              # 4) ファイル名のみ取り出す
     sort { $b->[1] <=> $a->[1] }  # 3) ファイルサイズをキーにして降順ソートする
     map  { [ $_ , -s ] }          # 2) ファイル名とファイルサイズを組みを作成
     <*.log>;                      # 1) カレントディレクトリのログファイルが対象
```
Perl でメタ文字をエスケープする方法いろいろ

```perl:
# メタ文字をエスケープしないまま正規表現にかけると地味にハマるので。。。

# メタ文字をエスケープする : 
my $path = qq(C:\\hogehoge\\hoge.dll);

#  (1) エスケープシーケンス \Q ... \E 使用
print qq(\Q$path\E);
# > C\:\\hogehoge\\hoge\.dll

#  (2) 関数 quotemeta　使用
print quotemeta $path;
# > C\:\\hogehoge\\hoge\.dll
```
gem install rmagickを通す

忘れないメモ

`gem install rmagick`すると

```
$ gem install rmagick
WARNING:  Error fetching data: too many connection resets (http://production.s3.rubygems.org/latest_specs.4.8.gz)
Building native extensions.  This could take a while...
ERROR:  Error installing rmagick:
	ERROR: Failed to build gem native extension.

        /Users/****/.rbenv/versions/1.9.3-p194/bin/ruby extconf.rb
checking for Ruby version >= 1.8.5... yes
checking for gcc... yes
checking for Magick-config... no
Can't install RMagick 2.13.2. Can't find Magick-config in /Users/****/.rbenv/versions/1.9.3-p194/bin:/usr/local/Cellar/rbenv/0.3.0/libexec:/Users/****/.rbenv/shims:/usr/local/bin:/usr/local/share/npm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/MacGPG2/bin

*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
	--with-opt-dir
	--without-opt-dir
	--with-opt-include
	--without-opt-include=${opt-dir}/include
	--with-opt-lib
	--without-opt-lib=${opt-dir}/lib
	--with-make-prog
	--without-make-prog
	--srcdir=.
	--curdir
	--ruby=/Users/****/.rbenv/versions/1.9.3-p194/bin/ruby


Gem files will remain installed in /Users/****/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rmagick-2.13.2 for inspection.
Results logged to /Users/****/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rmagick-2.13.2/ext/RMagick/gem_make.out
```

とエラーが出た。imagemagickを入れていなかったので
`brew install imagemagick`
で入れたは良いがまだgemが入らない。
`brew link imagemagick`
を実行すると

```
Linking /usr/local/Cellar/imagemagick/6.8.0-10... Warning: Could not link imagemagick. Unlinking...

Error: Could not symlink file: /usr/local/Cellar/imagemagick/6.8.0-10/share/ImageMagick
/usr/local/share is not writable. You should change its permissions.
```

権限が変になっているらしいので
`sudo chgrp -R admin /usr/local/share/`
`sudo chmod -R g+w /usr/local/share/`
を実行してから再度`brew link imagemagick`
して最後に`gem install rmagick`でDONE！