OmniAICreator/Qiita-1.07M huggingface dataset:
Google Closure Library memo


#goog.ui.Componentについて


   * this.createDom
      * Componentが生成されたタイミングで実行される。Component内で使用するルート要素などを生成。
   * this.enterDocument
      * Componentによって生成された要素がrenderされたときに呼び出される
      * Eventを張るのはこのタイミングが適切。
   * this.decorateInternal
      * 渡されたHTML要素をデコレートする機能を提供
      * this.setElementInternal(element); でルート要素を登録する。以降は、this.getElement()で参照できる。
   * this.disposeInternal
      * disposeが呼ばれた際に処理をする。
      * goog.base(this, 'disposeInternal'); による、スーパークラスのメソッドも合わせて呼ぶ必要あり。


##namespaceの定義
`goog.provide('hoge.fuga.foo.bar')`
で行う。
内部で行なっているのは、渡された引数のパスの位置にオブジェクトがあるかのチェックと、なければそれを生成、の処理。

## goog.requireの正体
Closure Library側で予めrequireできるJSのパスの一覧を保持していて、
渡されたStringがそのリストにマッチするかのチェックと、マッチした場合にそのscriptを
script tagの生成によって読み込む処理を実装。
そのため、requireを宣言したscriptファイルとそれを使うscriptファイルは別にしないと
読み込みが完了していないためundefinedになってしまう。
※document.writeで書き出しているため、同期が取られるものと思われる。
rubyでcoffee scriptのコンストラクタみたいなもの

CoffeeScriptのコンストラクタは名前に@をつけるだけでプロパティへの代入もしてくれる.それをrubyで組んでみた

```rb:
class Class
    def instance_vars(*vars)
        class_eval <<-EOS
            alias initialize_ initialize
            def initialize(*args)
                #{ vars.inject(""){|code, var| code << "@#{var} = args.shift;"  }}
                initialize_(*args)
            end
        EOS
    end
end
```
`class_eval`のブロックを渡したら、initialize内でvarsが使えなかったので文字列にした。

使い方

```rb:
class Pair
    attr_accessor :key, :val
    instance_vars :key, :val
end

pair = Pair.new(:hoge, 'aaa')
p pair #=> #<Pair:0x00000000defe90 @key=:hoge, @val="aaa">
```

`initialize`を使うことも出来るが、`instance_vars`を後ろに置かなければいけないのが難点。

```rb:
class Person
    def initialize(upcase = false)
        @name.upcase! if upcase
    end
    instance_vars :name, :age, :sex
end

person = Person.new('John', 20, :male, true)
p person #=> #<Person:0x00000001a3ec50 @name="JOHN", @age=20, @sex=:male>
```
Ext.Containerにscrollable:'vertical'したら長文の折り返しが画面外に行っちゃう罠

ちょっとした文章を表示するContainerをExt.Containerを継承して作ってみたら、折り返しがおかしいっていう。

```js:例
Ext.define('MyContainer', {
    extend: 'Ext.Container',
    xtype: 'agreement',
    config: {
        fullscreen: true,
        styleHtmlContent: true,
        scrollable: true,
        html: 'あいうおえかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん',
        items: [
            {
                docked: 'top',
                xtype: 'titlebar',
                title: 'ぶんしょ。'
            }
        ]
    }
});
```

こんな感じのを表示させると、AndroidのchromeとiOSのchrome, safariで折り返しがおかしくなる。PC用のchromeでも同じ現象。

scrollableを外すと期待した折り返しになるものの、今度はスクロールしない（当たり前）。で困ってググったら素敵な記事を発見。

http://www.sencha.com/forum/showthread.php?259714-scrollable-quot-vertical-quot-changes-width

SCSSを変更することで今回は解決。

```scss:
.x-scroll-container {
  &>.x-inner {
    width: 100% !important;
  }
}
````

さて、もうひと頑張りしよう(´・ω・`)
WebStormでバグが混在しにくいJavaScriptのソースを書こう

# JSLint と JSHint

## そもそもJSlintってなにさ？

>JavaScriptのソースコードをチェックすることができます。

>LintはC言語のソースコードをチェックするツールとして開発され、JSLintはJavaScript用のLintとして開発され、JavaScriptのソースコードをチェックすることができます。

> ドキュメントはこちら。http://jslint.com/lint.html

_引用元: [はてなキーワード](http://d.hatena.ne.jp/keyword/JSLint)_

## オリジナルのlintってどんなことしてくれるの？

>lintとは、主にC言語のソースコードに対し、コンパイラより詳細かつ厳密なチェックを行うプログラムである。

>* 型の一致しない関数呼び出し
>* 初期化されていない変数の参照
>* 宣言されているが使われていない変数
>* 同じ関数を参照しているが、戻り値を使う場合と使わない場合がある[疑問点 – ノート]
>* 関数が戻り値を返す場合と返さない場合がある

>など、コンパイラではチェックされないが、バグの原因になるような曖昧な記述についても警告される。

_引用元: [Wikipedia](http://ja.wikipedia.org/wiki/Lint)_

ちなみに
>ただ、最近のコンパイラは、細かな警告を出す機能が強化されているため、以前はlintを使わなければ検出できなかった類のミスも、コンパイル段階で検出できるようになっているものがある。

とのこと。

まあ、JavaScriptはコンパイラがあるわけでもないし、有効かもしれないね。

## JSLintとJSHintの違い

>|種類	 |Lintの厳しさ	 |Lintの種類|
>|:--|:--|:--|
>|Intections	 |うるさくない程度、解決策も提案	 |HTML/CSS/JS等対応|
>JSHint	 |JSLintより優しい、たまにうるさい	 |JavaScript|
>JSLint	 |厳しさ : ダグラス|	 JavaScript|

_引用元: [WebStorm指南書](http://azu.github.io/slide/webstorm/webstorm.html#slide29)_
Git Bashが後付けドライブを認識しない

USBハードディスクなど後付けドライブが認識されないことがあります。


```
$ ls /d
ls: /d: No such file or directory

$ cd /d
sh.exe": cd: /d: No such file or directory
```

[windows - How to register newly mounted drive in git bash? - Stack Overflow](http://stackoverflow.com/questions/5197540/how-to-register-newly-mounted-drive-in-git-bash)

[msysgit - mount external drive on windows7 for git - Super User](http://superuser.com/questions/342534/mount-external-drive-on-windows7-for-git)

Windowsでログアウトしてログオンし直せば(Windows 8からはサインアウト／サインインと呼ぶらしい)認識しました。
Font for Programming

# 比較
- [プログラミング用フォントをまとめてみました（Source Code Pro/Ricty/Consolasなどなど） | memobits](http://m.designbits.jp/13051409/)
- [少しでもコーディングするなら“コーディング用フォント”を導入しよう - Moxbit](http://www.moxbit.com/2013/05/coding-programming-font.html)

# Consolas + MeiryoKe_Console
##Reference

- [等幅フォントのメイリオ「MeiryoKe_Console」をWindows7にインストールする方法 » スキコミ](http://www.sukicomi.net/2012/11/meiryo-console.html)
- [Windows7 搭載マシンを買ってきてやったことまとめ - IT戦記](http://d.hatena.ne.jp/amachang/20111226/1324874731)

# Ricty
##Reference
- [プログラミング用フォント Ricty](http://save.sys.t.u-tokyo.ac.jp/~yusa/fonts/ricty.html)
- [RictyフォントをWindowsで生成する（2012年7月03日版） - itouhiroメモ](http://d.hatena.ne.jp/itouhiro/20120703)
- [公式サイト](http://nkzn.hatenablog.jp/entry/2012/06/01/234855)
- [Mountain Lion Rails 最新環境 詳解 構築手順](http://morizyun.github.io/blog/ricty-font-homebrew-mac/)
[2013/07/22] Mac homebrew で rmagick がインストール出来ないときは pkg-config を入れるとOK

ハマったのでメモ。

```
# imagemagick ver. 6.8.6-3
# rmagick ver. 2.13.2 or ver. 2.13.1 # どっちか忘れた
# pkg-config vier. 0.28
```

brew install imagemagick
brew install pkg-config
gem install rmagick

どうもimagemagickを入れただけだとpkg-configってライブラリが入って無く、rmagickのインストールにコケる模様。
誤って必要だったブランチを消してしまい、涙目なあなたへ。

```
git branch
```
の出力結果が多すぎたので、
「そうだ、ブランチを整理しよう」
と思い、不必要なブランチを

```
git branch -D ブランチ名
```

で消す。

「さて、この間の開発の続きをしよう」と思ったら、、、

(; Д) ﾟ ﾟ　< 間違って必要だったブランチ消してしまたー！！！

(´・ω・｀) <さっきまでバリバリ開発してたのに、、、pushもしてないし、、、しょうがない、がんばって思い出そう。。。

などとまどろっこしいことしなくとも、2コマンドで復活出来ます。

### 消してしまったブランチを復活させるには？

```
git reflog
消してしまったブランチの最後のコミットを見つけたら
git branch ブランチ名 HEAD@{ログ番号}
```

### git reflog

HEADがどのように変更されてきたか見ることができます！



これで、バリバリ開発中のブランチを消してしまい、
期限延ばして下さい。と土下座しなくても大丈夫です。
間違ってresetしてしまった場合にも有効そうですね。
PDOでATTR_EMULATE_PREPARESを適切に設定してないとSQLインジェクションの原因になるかも（MySQL編）

確認環境
---------------------------------------------

MySQL　5.5.27
PHP　5.4.7


現象
---------------------------------------------

PDO::setAttribute( ATTR_EMULATE_PREPARES, false )

をせず、prepareしても静的プレースホルダは使用されない。


確認
---------------------------------------------

```php:
<?php

$dsn = 'mysql:dbname=test;host=localhost';
$user = 'root';
$password = '';

try{
    $pdo = new PDO($dsn, $user, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

    $sql = 'select blog_id, blog_name from blogs where blog_name like ?';
    $stmt = $pdo->prepare($sql);
    $stmt->execute(array('%my%'));

}catch (PDOException $e){
    print('Error:'.$e->getMessage());
    die();
}
```



結果
---------------------------------------------

　MySQLのクエリーログで確認



setAttribute(PDO::ATTR_EMULATE_PREPARES, true)またはデフォルトの場合：

>
>130722 14:40:59	    2 Connect	root@localhost on test
>		    2 Query	select blog_id, blog_name from blogs where blog_name like '%my%'
>		    2 Quit	
>

setAttribute(PDO::ATTR_EMULATE_PREPARES, false)した場合：

>
>130722 14:41:26	    3 Connect	root@localhost on test
>		    3 Prepare	select blog_id, blog_name from blogs where blog_name like ?
>		    3 Execute	select blog_id, blog_name from blogs where blog_name like '%my%'
>		    3 Close stmt	
>		    3 Quit	


まとめ
--------------------------------

　SQLインジェクションの対策としてプリペアドステートメントの使用が推奨されますが、PDOにおいてデフォルトではPDO::ATTR_EMULATE_PREPARESがtrueに設定されており、この状態ではprepareでプレースホルダを指定してもエミュレートされ、実際にMySQLにわたる際にはプリペアドステートメントではなくなってしまいます（普通にSQL発行するのと同じ）。この状態では、 **自動エスケープはされるものの** 、SQLインジェクションの危険があると思います。
（2013.07.22 19:14 訂正：　「追記」を参照してください。)

　PDOで静的プレースホルダを使用する場合（少なくともMySQLでは）、PDO::ATTR_EMULATE_PREPARESを「false」にするべきでしょう。
（え、常識？）


**（2013.07.22 18:57 追記)**
　ATTR_EMULATE_PREPARESがデフォルトの状態（true）でエミュレーションが効いている場合、ドライバ側で自動エスケープしてくれるみたいです。

　だから安心かというとそうではなくて、文字コード変換を利用した下記攻撃でSQLインジェクションできてしまいました。

　ちなみにATTR_EMULATE_PREPARESをfalseにすると下記プログラムでもTRUNCATEは実行されません（SQLインジェクション対策できている）。

```php:
$dsn = 'mysql:dbname=test;host=localhost';
$user = 'root';
$password = '';

try{
    $pdo = new PDO($dsn, $user, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//  $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

    $pdo->query('SET NAMES sjis');

    $attack = "\x97' OR 1=1; truncate blogs; #";

    $sql = 'select blog_id, blog_name from blogs where blog_id = ?';
    $stmt = $pdo->prepare($sql);
    $stmt->execute(array($attack));

    while($result = $stmt->fetch(PDO::FETCH_ASSOC)){
        print_r($result);
    }

}catch (PDOException $e){
    print('Error:'.$e->getMessage());
    die();
}

```
Sync SublimeText3 Settings in every PCs

*** Still under construction and have not been finished ***

# Install "SublimeText3"
- Download from official site.
- [Sublime Text - Download](http://www.sublimetext.com/3)

# Install "Package Control"
### Case in Windows
- The following operation is done in "Git Bash".
- Before the following operations, install git from the official site.
- * Git official site link: -> [Git](http://git-scm.com/)

```bash:Windows
cd ~/AppData/Roaming/Sublime\ Text\ 3/Packages
git clone https://github.com/wbond/sublime_package_control.git "Package Control"
cd "Package Control"
git checkout python3
```

### Case in Mac

```bash:Mac
cd ~/Library/Application\ Support/Sublime\ Text\ 3/
git clone https://github.com/wbond/sublime_package_control.git "Package Control"
cd "Package Control"
git checkout python3
```

# Move setting files into the folder that can be shared over the network.
- Use Dropbox share folder, and push it on the Git repository.

# Replace local PC setting files with symbolic links which are destinated toward shared and synced remotely.


# Reference
- [Sublime Text: 初期設定など（ST2 / ST3） :: log.chocolateboard](http://log.chocolateboard.net/sublime-text-setting/)
- [Installation – Sublime Package Control – a Sublime Text 2 Package Manager by wbond](http://wbond.net/sublime_packages/package_control/installation#ST3)
- [Windowsでsublime text 3の設定をDropBoxで共有うんたら。 - ぐるんぐるん](http://isiz.hateblo.jp/entry/2013/07/17/Windows%E3%81%A7sublime_text_3%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%82%92DropBox%E3%81%A7%E5%85%B1%E6%9C%89%E3%81%86%E3%82%93%E3%81%9F%E3%82%89%E3%80%82)
Google Maps Android V2 APIキーでハマった点

Google Maps Android API v2を使用するには、APIキーを取得してAndroidプロジェクトに組込必要があるのですが、そのAPIキー絡みでハマリまくったメモ。

##パッケージ名でハマる
Google API Consoleでプロジェクト作成→ Servicesをオン→Create new Android keyでキーストアのSHA1を登録。
*[キーストアのSHA1;アプリのパッケージ名]*
の形で登録しないといけないのですが、

NGな例：
*[キーストアのSHA1;com.example.app.name]*

OKな例：
*[キーストアのSHA1;com.example.app_name]*

ええ、２日ほどハマリましたよ…。

アプリのパッケージ名はドメインを逆にして後ろにアプリ名を付けるのが通例。
アプリ名の中にうっかり.を含めてしまったために実行すると

```
E/Google Maps Android API(32437): Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors).
```

パッケージ名を直したらあっさり動きました。
パッケージ名の付け方に関して明確なルールは無いんだろうか…？

##Manifest.xmlでハマる
キーストアのSHA1を登録したらManifest.xmlに

```Manifest.xml
<meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="APIキー" />
```

のようにAPIキーを埋め込むのですが、上記のエラーのおかげで、あっちこっち触りまくっていたら、meta-dataが複数入ってしまっていて、実行すると

```
E/Google Maps Android API(32437): Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors).
```

Manifest.xmlはちゃんと整理しましょう…。
GHUnitでiOSアプリのビューをテストするには（紹介と個人的な補足）

まずはビューのテストがどんなものか、ご紹介します。

1. テストを走らせると以下のような画面がシミュレーターで起ち上がります。

![名称未設定.png](https://qiita-image-store.s3.amazonaws.com/0/12939/8c1a523b-9250-b4a9-dca7-36e6414e2b24.png)

2. ビューのコードを修正しました。ビューのテストに失敗します。

![名称未設定 2.png](https://qiita-image-store.s3.amazonaws.com/0/12939/730982b6-ef25-e1b1-d164-686e409abb4b.png)

3. 該当の項目をタップすると、ビューが実際に描画されます。

![名称未設定 3.png](https://qiita-image-store.s3.amazonaws.com/0/12939/93bd7c5b-9611-8788-038a-18cc896567ca.png)

4. 縮小されているビューをタップすると、等倍で表示する事もできます。

![名称未設定 4.png](https://qiita-image-store.s3.amazonaws.com/0/12939/7305a8e0-5bea-f0ca-5925-556e56e241df.png)

5. 「Diff」をタップすると、差分が表示されます。

![名称未設定 5.png](https://qiita-image-store.s3.amazonaws.com/0/12939/e02c623b-2ca5-03c0-97d3-e8fa54ce8a16.png)

6. 「Approve this change」をタップして、新しいビューを正しいものとしましょう。

![名称未設定 3.png](https://qiita-image-store.s3.amazonaws.com/0/12939/93bd7c5b-9611-8788-038a-18cc896567ca.png)

7. するとテストは成功します。

![名称未設定 6.png](https://qiita-image-store.s3.amazonaws.com/0/12939/88deeb06-ccdd-0f09-c590-5f108603ff39.png)

8. 生成された画像ファイルを所定の場所にコピーするシェルスクリプトを走らせて、もう一度テストをRunしてみると、新しいビューのテストにも成功します。

![名称未設定 7.png](https://qiita-image-store.s3.amazonaws.com/0/12939/b4d3cafb-0b64-66fb-2b1a-05aade869032.png)

9. 以上がビューのテストの流れになります。

で、環境の作り方なのですが、基本的に下記のページにしたがってやればできます。

http://yaakaito.hatenablog.com/entry/2012/07/10/133038

以下は個人的に行き詰まったところ。

- **非ARC**なプロジェクトに最新版のGHUnitを入れると動かない。プロパティの設定で「strong」とかやっているのが見えるので、どうもARCなプロジェクトである事を前提としている模様。仕方ないのでiOS4のために書かれた**GHUnit 0.4.33**を下記のページから引っぱってきて入れました。

https://github.com/gabriel/gh-unit/downloads

- 導入するシェルスクリプトの中のパスの設定は、絶対パスにしました。最初に挙げたページでは下記のように書いている。

```bash:
UI_TEST_IMAGES_DIR="$PWD/VerifyViewTipsTests/TestImages"
```

これだとカレント・ディレクトリが合ってないとうまく動かないので、下記のようにしてしまう。

```bash:
UI_TEST_IMAGES_DIR="/Users/user_name/Documents/Project/Tests/TestImages"
```

- テストコードですが、以下のようにGHUnitフレームワークをimportしなければなりません。最初何をインポートしたら良いのかわかりませんでした。

```objc:SampleViewTest.h
#import <GHUnitIOS/GHUnit.h>

@interface SampleViewTest : GHViewTestCase

@end
```

- よく考えたら当然なのですが、元のプロジェクトにある実装ファイルは、ターゲットを普通のビルドに加えてテストのビルドも追加しておかなければなりません。最初からすべての実装ファイルをテストビルドにもターゲットするのは、やってみましたが、あちこちでエラーが出て大変でした。とりあえずテスト対象となるファイルのみをテストビルドにターゲットするのが良いかなと思います。

- 画像が保存されないときは、コピーしたシェルスクリプトの中のパスの設定を確認しましょう。あと、私は**PrepareUITests.sh**をテストターゲットではなく本プロジェクトターゲットの方に入れてしまい、あとで気づくのに時間がかかってしまいました。気をつけましょう。


-----
ブログやってます：[PAPA-tronix !](http://weed.cocolog-nifty.com/wzero3es/)
Google Maps Android V2 アプリ署名時にエラー


Google Maps Android V2を組み込んだアプリのリリース時に、署名をつけてビルドしようとしたら、

```
"app_name" is not translated in af, am, ar, be, bg, ca, cs, da, de, el, en-rGB, es, es-rUS, et, fa, fi, fr, hi, hr, hu, in, it, iw, ja, ko, lt, lv, ms, nb, nl, pl, pt, pt-rPT, ro, ru, sk, sl, sr, sv, sw, th, tl, tr,  uk, vi, zh-rCN, zh-rTW, zu
```

というようなエラーが出てくる場合の対処法。
ちなみにデバックビルドでは出てこないのでリリース直前に焦る事になる。

##参考資料
Non-translatable Strings | Android Tools Project Site
http://tools.android.com/recent/non-translatablestrings

stackoverflow | Android Lint asks to translate strings to MANY languages which i don't use in app [duplicate]
http://stackoverflow.com/questions/13905544/android-lint-asks-to-translate-strings-to-many-languages-which-i-dont-use-in-ap

stackoverflow | Lint: How to ignore “<key> is not translated in <language>” errors?
http://stackoverflow.com/questions/11443996/lint-how-to-ignore-key-is-not-translated-in-language-errors
* * *
害は無いからエラーを無視しちゃえ、ということらしい。
Herokuで現在実行中のSchedulerを止める方法


タイトルの通りです。
妙なエラーを出し続けているタスクを「今すぐ止めたい！」というときに。


##1. スケジューラーのプロセスIDを確認する
下の例では`scheduler.2868`が対象のプロセスIDです。

````
$ heroku ps --app (your-app-name)
=== scheduler (1X): `bundle exec rake hoge_task`
scheduler.2868: up 2013/07/22 10:40:57 (~ 17m ago)

=== web (1X): `bundle exec rails server thin -p $PORT -e $RACK_ENV`
web.1: up 2013/07/21 15:50:50 (~ 19h ago)
````

##2. プロセスIDを指定して、スケジューラーを停止させる
`heroku ps:stop (プロセスID)`でプロセスを停止させます。

````
$ heroku ps:stop scheduler.2868 --app (your-app-name)
Stopping scheduler.2868 dyno... done
````

##3. プロセスが停止したことを確認する
念のため、対象のプロセスがなくなっていることを確認しましょう。

````
$ heroku ps --app (your-app-name)
=== web (1X): `bundle exec rails server thin -p $PORT -e $RACK_ENV`
web.1: up 2013/07/21 15:50:50 (~ 19h ago)
````
git svn dcommitを対話的に行う

`git-svn`を導入した当初は、`git svn dcommit`が怖くてビビったりする事がよくありました(私の場合)。
そこで実際にどのような事が行われるか、シミュレートする方法に関してメモしておきます。

## --dry-runを利用したシミュレート
`git svn dcommit --dry-run`を実行する事で、実際に実行されるコマンドの内容をシミュレートする事が出来ます。
実行した結果もdiffとして確認する事が可能です。

```shell
root$ git svn dcommit --dry-run
Committing to file:///tmp/work/svn-repo ...
diff-tree e0dfd8fc7b5e6b563a7fd303fc734f9b38a1081f~1 e0dfd8fc7b5e6b563a7fd303fc734f9b38a1081f
```

dcommitによって複数回svnに対してコミットが行われる場合は、diffツリー自体も複数のhashが表示されるので安心です。

```bash
root$ git svn dcommit --dry-run
Committing to file:///tmp/work/svn-repo ...
diff-tree e0dfd8fc7b5e6b563a7fd303fc734f9b38a1081f~1 e0dfd8fc7b5e6b563a7fd303fc734f9b38a1081f
diff-tree 9bd86d34a8521c120da9e32296b4eb0fa5b99c0b~1 9bd86d34a8521c120da9e32296b4eb0fa5b99c0b
```

```shell
root$ git svn dcommit --dry-run
Committing to file:///tmp/work/svn-repo ...
diff-tree e0dfd8fc7b5e6b563a7fd303fc734f9b38a1081f~1 e0dfd8fc7b5e6b563a7fd303fc734f9b38a1081f
```


## --interactiveによる対話的実行
`--dry--run`によってコミットされる内容は確認できますが、コミットメッセージを確認することが出来ません。コミットされるメッセージを確認したい場合は`git svn dcommit --interactive`とする事で、コミット処理を対話的に実行することが可能になります。
なお、`--interactive`自体は実際にSVNにコミットされますのでご注意下さい。

```shell
root$ git svn dcommit --interactive
Committing to file:///tmp/work/svn-repo ...
commit 0f2eb0e4e92102bd810df6c04dc7df4377228d69
Author: root <root@localhost.com>
Date:   Mon Jul 22 10:20:11 2013 +0900

    コミットメッセージ

Commit this patch to SVN? ([y]es (default)|[n]o|[q]uit|[a]ll): y
        M       README.txt
Committed r4
        M       README.txt
r4 = a1da0584f58583456ba93c6f40b09a8a9b8dd603 (refs/remotes/git-svn)
No changes between 0f2eb0e4e92102bd810df6c04dc7df4377228d69 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
```



docmmitによって複数回svnにコミットが行われる場合は、上記の対話処理がコミットの分だけ表示されます。

```shell
root$ git svn dcommit --interactive
Committing to file:///tmp/work/svn-repo ...
commit 176f050c80caf383412953b6189dba064d33d98c
Author: root <root@localhost.com>
Date:   Mon Jul 22 10:17:45 2013 +0900

    1回目のコミットメッセージ

Commit this patch to SVN? ([y]es (default)|[n]o|[q]uit|[a]ll): y
commit d754728696117ff954d689b75c20139f1be80146
Author: root <root@localhost.com>
Date:   Mon Jul 22 10:18:02 2013 +0900

    2回目のコミットメッセージ

Commit this patch to SVN? ([y]es (default)|[n]o|[q]uit|[a]ll): y
        M       README.txt
Committed r2
        M       README.txt
r2 = f24ab0e968bad921f4c50a14d9c9fde7e16800ff (refs/remotes/git-svn)
        M       README.txt
Committed r3
        M       README.txt
r3 = ef6602e45749bd53d2b415e88282d48abbbb0127 (refs/remotes/git-svn)
No changes between d754728696117ff954d689b75c20139f1be80146 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
```

以上です。
縦置きのタイムバーをcocos2dで実装する。

```objc:timebar.m
CCProgressTimer *time_bar = [CCProgressTimer progressWithSprite:[CCSprite spriteWithFile:@"timebar.png"]];
//タイムバーの生成を行う。

time_bar.percentage = 100.0;
//時間切れでゲームを止めるので初期値を100にする。

time_bar.type = kCCProgressTimerTypeBar;
//タイムバーのタイプレクタングルが他にある。

time_bar.barChangeRate = ccp(0, 1);
//バーをどの方向に変化させていくか。この場合y軸方向のみに変化する。

time_bar.midpoint = ccp(0.5f,0);
//どこから、バーを変化させるか。バーの上辺、の中心点から変化させるようにした。

[self addChild:time_bar];
//いつも通りにaddChild

[self schedule:@selector(timer) interval:0.01f];
//タイマーを呼んで、時間経過に合わせてバーを減らして行く。


-(void)timer {
        int seconds = 1;
        float speed = 1 / seconds;
        progress_timer.percentage -= speed;
        //分かりやすいように、秒ごとの変化値をいじればバーの進行早さを変えられるようにしてみた。

        if(progress_timer.percentage == 0) {
            [self unschedule:@selector(timer)];
            /* タイマーがゼロになったらタイマーを止める、ここでゲームを終了させるなどすれば
                タイマーを使ったゲームが作れる！ うれしい。 */
        }
}

```
php pdo_mysql インストール

```
#pecl install pdo_mysql

checking for mysql_config... not found
configure: error: Cannot find MySQL header files under
ERROR: `/tmp/pear/temp/PDO_MYSQL/configure' failed
```

⇒headerファイルがないのでインストールできなかった。



```:ソースをダウンロード
$pecl download pdo_mysql
cd PDO_MYSQL-1.0.2
$ ./configure --with-pdo-mysql=shared,/usr/local/mysql
make 
make test
su 
make install
```

```:pdo_mysql.soが出来る
/usr/local/lib/php/extensions/no-debug-zts-20090626/
```

```:php.iniを修正
extension=pdo_mysql.so
```

phpinfo()のPDOにmysqlが表示されていればOK
Node.jsでスクレイピングからファイル保存[メモ]

```js:
var scraper = require('scraper');
scraper('http://hoge.com/hoge', function(err, $) {
	// データを取得
	if (err) {throw err;}
	var ans = /<div>([0-9]*)<\/div>/ig.exec($('html').html());
	if (ans === null || !ans[1]) { throw 'No match'; }
	
	// 書き込みデータ作成
	var dt = new Date();
	var dtString = ("0" + dt.getHours()).slice(-2) + ':' + ("0" + dt.getMinutes()).slice(-2);
	
	// ファイルへ保存
	var fs = require('fs');
	fs.appendFileSync("/temp/data.txt", dtString + "\t" + ans[1] + "\n");
});
```
web2pyのadminのpassword

web2pyの作者，Pierroさんは今web3pyの名前でPython3対応版に着手しているようです．

web2pyのadmin画面へのログインパスは，規定値がmd5になってます．なんかちょっとやですね．なんとなく．

```Python:web2py/applications/admin/models/access.py
return _config['password'] == CRYPT(digest_alg="sha512")(password)[0]
```

上記のdigest_algを指定してやればとりあえずhash関数は変えられます．
web2py直下にparameters_xxxx.py（xxxxはadmin画面へのログインのためのport番号）とかいうのおいて中にパスワードをhash化したデータ書いておけばよいのです．

```Python:web2py/parameters_65537.py
password="d8b9fda3db38bc4b6664f391210878e9f090a41396638a7fe902a7482445acd00f7876ada6f490866ed150016aa7e20556f0fe7ee000449dfbac5231d1c69f5d"
```

こんなファイルを作って設置しておきます．
（80とか443のadminへのアクセスはすべてBANして，65537 portへは特定のIPからのみアクセス可能にしておく，みたいな）
http://fqdn:65537/admin にアクセスすれば，ログイン画面出るので，パスワード入力してログインしますと幸せです．
q要素とか

<del datetime="2014-12-16 16:55:00+09:00">Qiita先生、文書に `q` 要素使っちゃあかんのん…?</del>

<dfn>dfn element</dfn> <q>q element</q>

> <dfn>dfn element</dfn> <q>q element</q>

## expected

```html
<blockquote>
<p><dfn>dfn element</dfn> <q>q element</q></p>
</blockquote>
```

## actual

```html
<blockquote>
<p><dfn>dfn element</dfn> q element</p>
</blockquote>
```
msysgitでSTATUS_ACCESS_VIOLATIONを解消する方法の1つ

# gitが動かない！
Windows7でmsysgitを使っていたところ、何かを境にしてSTATUS_ACCESS_VIOLATIONが起きるようになりgitを使えなくなりました。

＿人人人人人人人人＿
＞　突然のgit死亡　＜
￣Y^Y^Y^Y^Y^Y^Y￣

症状は[Fails with Exception: STATUS_ACCESS_VIOLATION](https://github.com/msysgit/msysgit/issues/25)と同じです。

# 試行錯誤の日々

藁にもすがる思いで何とか見付け出した解決方法を色々と試してみました。
結論を先に書くとどれもダメでした。

## cygwinやmsysと混ぜるな危険

msysgitのmsys-1.0.dllがcygwinやmsysのDLLと干渉することがあるらしいのですが、そもそも使ってないので他に原因があるようです。

## DLLをrebase

gitのrebaseコマンドではなく、msys-1.0.dllをロードするアドレスが他のDLLと干渉するため、rebaseコマンドでアドレスを変更する方法らしいです。
環境によって干渉しないアドレスが違い、一度DLLをロードするとrebaseしても再起動するまで反映されないので時間ばかり食われた挙句、諦めてしまいました。

## 新規アカウントで試す

システム自体に問題があるのか、アカウントの環境に問題があるのか切り分けるために新規アカウントで作ったのですが、こちらでは問題ありません。どうやらアカウントの環境に問題があるようです。

# やっと解決

何となく **TEMPフォルダのゴミファイルを削除したら** gitが動くようになりました！
もう意味が分かりません。msysgitってTEMPフォルダから何かロードしているのでしょうか？

何はともあれ動くようになったのですが、試行錯誤の数ヶ月の間に覚えたTortoiseHGが便利すぎて戻れなくなってしまいました。

※TEMPフォルダは環境変数`TEMP`や`TMP`が指すフォルダです。
Rubyのimapでyahooメール受信

すこしはまったのでメモ

|Yahooメールのサーバー設定||
|:----------------------------------|----------------------------:|
| 受信メール（IMAP）サーバー  | imap.mail.yahoo.co.jp |
| 受信メール（IMAP）通信方法  | SSL                            |
| 受信メール（IMAP）ポート番号 | 993                            |

```rb:
require 'net/imap'
require 'io/console'

$stderr.print 'user : '; user = gets.chomp
$stderr.print 'pass : '; pass = STDIN.noecho(&:gets).chomp

imap = Net::IMAP.new('imap.mail.yahoo.co.jp', 993, true, 'cacert.pem')

imap.authenticate('LOGIN', user, pass)
imap.examine('INBOX')

msgids = imap.search(["ALL"]).last #最新一件を取得
imap.fetch(msgids, %w(BODY[HEADER] BODY[TEXT])).each do |mail|
    puts mail.attr["BODY[HEADER]"]
    puts mail.attr["BODY[TEXT]"]
end
```

cacert.pemという証明書が必要。自分は http://curl.haxx.se/ca/cacert.pem から持ってきた。
brew doctor したら Error: Failed to import って言われたのを直した。

brew doctorしたら、以下の様な出力が得られた。

```
$ brew doctor
Error: Failed to import: dotjs
No available formula for dotjs
Error: Failed to import: fbcmd
No available formula for fbcmd
Error: Failed to import: kindlegen
No available formula for kindlegen
Error: Failed to import: kzipmix
No available formula for kzipmix
Error: Failed to import: live-f1
No available formula for live-f1
Error: Failed to import: mandoc
No available formula for mandoc
Error: Failed to import: mongodb-dev
No available formula for mongodb-dev
Error: Failed to import: mono
No available formula for mono
Error: Failed to import: openmotif
No available formula for openmotif
Error: Failed to import: perlbrew
No available formula for perlbrew
Error: Failed to import: pngout
No available formula for pngout
Error: Failed to import: princexml
No available formula for princexml
Error: Failed to import: rtmpdump-yle
No available formula for rtmpdump-yle
Error: Failed to import: sc
No available formula for sc
Error: Failed to import: simian
No available formula for simian
Error: Failed to import: svm_light
No available formula for svm_light
Error: Failed to import: terminus-font
No available formula for terminus-font
Error: Failed to import: tmux-iterm2
No available formula for tmux-iterm2
Error: Failed to import: tsocks
No available formula for tsocks
```

よくわからんけど直したいのでぐぐったら、このページが見つかった
https://github.com/mxcl/homebrew/issues/18237
ここのコメントの通り

```
brew prune
brew cleanup
brew update
brew tap --repair
brew doctor
```

したら直った。
--mirrorリポジトリをpost-commitで指定した場合の--git-dirに関して

詳細は[gitのbareリポジトリのバックアップをとる](http://d.hatena.ne.jp/shim0mura/20120914/1347591103)を参照してください。
というか基本的には`--git-dir`以外は全部一緒です。

参照先では、bareリポジトリをpost-commitを利用したバックアップ方法が紹介されています。
自分の場合はbareリポジトリではなく通常のローカルリポジトリをこの方法を利用してバックアップを取りたかったので設定してみました。
ちなみに`git`のバージョンは以下の通りです。

```bash
home$ git --version
git version 1.8.3.2
```

では、実際にバックアップまでの手順です。

```bash
# 共用リポジトリからcloneします
git clone http://xxxx.zzzz.yyy local.git
# クローンしたローカルリポジトリから--mirrorでバックアップリポジトリを作ります。
git clone --mirror local.git backup.git
```

`local.git`の`.git/hocks/post-commit`を作成します。

```bash
cd local.git/.git/hocks
touch post-commit
chmod +x post-commit
```
こんな感じに`post-commit`を変更します。

```bash
#!/bin/sh

cd /tmp/work/backup.git && git --git-dir=. fetch --all -f
```
参照サイトと違うのは、`--git-dir`の部分で、参照先は``--git-dir=.git`となっていましたがここでは`--git-dir=.`となっている点です。
また、`git rebase -i`するとミラーリポジトリでエラーになってしまうので、`-f`を追記しています。


`--git-dir`の意味が(cdしたあとの)カレントディレクトリから相対的に`.git`がどこかを示すと理解して、`--mirror`の場合はそのディレクトリそのものと判断して`--git-dir=.`と指定したらうまく行きました。

これで、`local.git`にコミットしたタイミングでこんな感じでログがでてローカルリポジトリにバックアップされます。

```bash
root$ git commit -m "commit message"
Fetching origin
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /tmp/work/local.git
   eb51dd3..74d93d4  master     -> master
[master 74d93d4] commit message
 1 file changed, 1 insertion(+)
```

### 余談
#### `git --reset hard HEAD^`
とかした後どうなるかなと思ったんですが、問題なくバックアップリポジトリに反映されるみたいです
#### `git rebase -i XXXX`
とかした場合はバックアップリポジトリには反映されません。rebaseの場合もバックアップに通知したいなら`post-rbase`とかにも書けばいいと思います(未確認)。

### 20130724追記
`git rebase -i` でコミットを減らすとこんな感じでエラーになってしまいました。

>fatal: bad object 8405f55743755504b6178bd338b2a7ea32f76e97
error: /Users/ymorika/sourcecodes/git/cloudmailer.git did not send all necessary objects

`-f`をつけてあげるとよいようです。


以上です。
telnetでHTTPリクエスト発行してみる

TLで「そもそもWebとかHTTPとはなんぞや？」みたいな話題を見かけたので。

----

こんなページを返す"Webサービス"があるとして…

![Screen Shot 2013-07-21 at 10.58.52 PM.png](https://qiita-image-store.s3.amazonaws.com/0/9676/fcd033b3-f1da-1412-2057-7c9d9a2336e3.png)

Webブラウザはものすごーく大雑把にいうとこんなリクエストを発行してます。

```shell-session:
[mazgi@Ardbeg] $ telnet localhost 80
Trying ::1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.0

HTTP/1.1 200 OK
Date: Sun, 21 Jul 2013 13:57:02 GMT
Server: Apache/2.2.22 (Unix) DAV/2 mod_ssl/2.2.22 OpenSSL/0.9.8x
Content-Location: index.html.en
Vary: negotiate
TCN: choice
Last-Modified: Fri, 28 Dec 2012 12:23:10 GMT
ETag: "35d4b-2c-4d1e8b9ffa780"
Accept-Ranges: bytes
Content-Length: 44
Connection: close
Content-Type: text/html
Content-Language: en

<html><body><h1>It works!</h1></body></html>Connection closed by foreign host.
```

最後の1行にインデント入れてみると見慣れたHTMLソースになりますね♪

```html:
<html>
  <body>
    <h1>It works!</h1>
  </body>
</html>
```

いちいち `telnet` コマンド叩くのも手間だと思うので `curl` オススメ。
(`-v` または `--verbose` 付けましょう)

```shell-session:
[mazgi@Ardbeg] $ curl -v localhost
* About to connect() to localhost port 80 (#0)
*   Trying ::1...
* connected
* Connected to localhost (::1) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8x zlib/1.2.5
> Host: localhost
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Sun, 21 Jul 2013 14:05:28 GMT
< Server: Apache/2.2.22 (Unix) DAV/2 mod_ssl/2.2.22 OpenSSL/0.9.8x
< Content-Location: index.html.en
< Vary: negotiate
< TCN: choice
< Last-Modified: Fri, 28 Dec 2012 12:23:10 GMT
< ETag: "35d4b-2c-4d1e8b9ffa780"
< Accept-Ranges: bytes
< Content-Length: 44
< Content-Type: text/html
< Content-Language: en
< 
* Connection #0 to host localhost left intact
<html><body><h1>It works!</h1></body></html>* Closing connection #0
```
技術検証するならVPSレンタルより、自分のPCで、Vagrant + Chefを使って仮想サーバを立ち上げよう【導入編】【vagrant入門】


# 前提条件
#### インストール済みパッケージ
ruby 1.9.3p448
gem 1.8.23

#### VirtualBox
https://www.virtualbox.org/wiki/Downloads
version 4.2.16
をインストール済み

# 仮想環境を立ち上げる作業開始

#### 仮想環境構築で使う、gemパッケージのvagrantをインストール

```bash
$ gem install vagrant
$ vagrant -v
Vagrant version 1.2.2
```

#### OSイメージを取得してbox化
$ vagrant box add centos64_64 http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130309.box

boxとはインスタンス生成のために使うベースとなるもの。
OSだけではなく、予め様々なパッケージがインストール済みのものもある。
今回は、OSだけで

#### box listの確認

```bash
$ vagrant box list
centos64_64 (virtualbox)
```

#### 作業用の環境作成

```bash
$ mkdir ~/vagrant
$ cd ~/vagrant
```

#### 作業環境の初期化

```bash
$ vagrant init
```

#### vagrant起動設定ファイルの作成

```bash
$ vim Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant::Config.run do |config|
  #使用するbox名
  config.vm.box = "centos64_64"

  #コメントを外すと、VirtualBoxのアプリが立ち上がるよ
  config.vm.boot_mode = :gui
end
```

#### どきどきの仮想環境立ち上げ！！！（●＾o＾●）

```
$ vagrant up
```

お、VirtualBoxが立ち上がったぞ！！
でも、毎回立ち上がったら面倒臭いので、、、設定を変えて見ましょう

#### vagrant起動設定ファイルの作成（修正版）

```bash
$ vim Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant::Config.run do |config|
  #使用するbox名
  config.vm.box = "centos64_64"

  #コメントを外すと、VirtualBoxのアプリが立ち上がるよ
  #config.vm.boot_mode = :gui
end
```

#### 2回目の立ち上げ実行

```
$ vagrant up
```

ただし２回目はVirtualBoxが立ち上がらないので、どうなったのか心配になります。。

#### そこで、立ち上がったか確認

```bash
$ vagrant status
Current machine states:

default                  running (virtualbox)
```

running…起動してるやん。

#### 仮想環境につないでみよう( ｰ`дｰ´)ｷﾘｯ

```
$ vagrant ssh
```

#### 接続後の環境でおふざけ（これはスルー推奨）

```bash
$ echo 'Hello VM'
Hello VM
```

あまり意味はありません、とりあえす「こんにちは世界（VirtualMachine）」をしたかっただけです。

#### では、もったいない気もするが破壊します。

```bash
$ vagrant destroy
```

これだけ。。๑゜д˚๑
キヲツケテモウモドラナイ

#### 本当に破壊したか確認

```bash
$ vagrant status
Current machine states:

default                  not created (virtualbox)
```

not created。。モウないのか

今回は、仮想環境立ち上げまでだけなので終わりですが 作って壊せる環境がただ！っていうのが嬉しいところ！！ 次は、chefとかを使って、色々httpd起動とかやってみます。

# 参考
https://gist.github.com/voluntas/5525719
Mixpanelにイベントが正しく送信されているか簡易的に確認する方法

## 前提
- JavaScriptでイベントを送信している場合に使える方法です
- Google ChromeのDeveloper Toolsを使って行います

## 下準備
1. イベント送信を確認したいページを開く
2. Developer Toolsを開き、Sourcesタブを選択
3. XHR Breakpointsに`mixpanel`を追加

![スクリーンショット 2013-07-21 20.16.39.png](https://qiita-image-store.s3.amazonaws.com/0/2/f2d7e3f1-f912-b3b8-ad80-1284095b2cc3.png "スクリーンショット 2013-07-21 20.16.39.png")

## 確認手順
1. 追加したブレイクポイントに✔が入っていることを確認した上で、確認対象イベントが送信されるアクションを実行
2. 実行すると適当なところで止まるので、Call Stackを確認
3. それっぽいのがあるはずなのでそれをクリック
4. クリックするとScope Variablesに中身が表示されるので、送信する内容が正しく設定されているか確認

これでおそらく送信できているであろう、ということが確認できます。
どこまで書いていいものかわからなかったので後半かなりふわっとしててすいません…
matplotlibで欲しいグラフの書き方がわからない時はgalleryを見ると便利


あのグラフをmatplotlibで書きたいんだけど、グラフの名称が分からないしどうやって検索したらいいか分からない、そんなときはmatplotlibの[gallery](http://matplotlib.org/gallery.html)を見ると答えが見つかるかもしれない。

![Screen Shot 2013-07-21 at 8.07.48 PM.png](https://qiita-image-store.s3.amazonaws.com/0/1538/f1412075-55f6-bb19-b75d-0046c88e5a1c.png "Screen Shot 2013-07-21 at 8.07.48 PM.png")

こんな感じで様々なグラフがある。なぜかCOBOLの開発者、[グレース・ホッパー](http://ja.wikipedia.org/wiki/%E3%82%B0%E3%83%AC%E3%83%BC%E3%82%B9%E3%83%BB%E3%83%9B%E3%83%83%E3%83%91%E3%83%BC)の写真を使った例もある。もはやグラフの域を超えている。galleryの画像ファイルをクリックするとサンプルコードがあるページへ飛ぶことが出来て便利。
ARCではオブジェクトのスタック変数がnil初期化される


ARCの場合ローカルで宣言したオブジェクトのスタック変数はnil初期化される（環境はXcode4.6.3デフォルトのApple LLVM compliler 4.2）。

調べてみるとAppleの日本語リファレンス[Objective-Cによるプログラミング](
https://developer.apple.com/jp/devcenter/ios/library/documentation/ProgrammingWithObjectiveC.pdf)のp41"nilの取り扱い"では、ローカル変数のオブジェクトがnil初期化されると記述されている。

> 初期値を指定しなければ、コンパイラが自動的に、nilに初期化するからです。
> XYZPerson *somePerson;
> //somePersonの値は自動的にnilになる

また、[Transitioning to ARC Release Notes](http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html)のStack Variables Are Initialized with nilの項目にはstrong,weak, autoreleaseingを使用した場合にnil初期化されるとある。

> Using ARC, strong, weak, and autoreleasing stack variables are now implicitly initialized with nil. For example:

ローカルで宣言されるオブジェクトは暗黙的にstrongなのでnil初期化されるのは仕様通りとなるが、下記のように__unsafe_unretainedにして試してみると

```
- (void)myMethod {
    NSString __unsafe_unretained *name ;
    NSLog(@"name %@",name); //nil初期化されている
}
```
やはりこれもnil初期化される。__unsafe_unretainedにした場合、仕様に明記されていないがコンパイラが自動的にnil初期化してくれるということなんだろうか。
最も簡単なOpenSpending用のデータの作り方

[OpenSpendingへの予算データの登録方法](http://qiita.com/niryuu/items/4adb658c627d2e6d48e4) では [Excelを使った入力方法](http://qiita.com/niryuu/items/4adb658c627d2e6d48e4#2-1)が紹介されていますが、CSVの作成と公開には **Googleドキュメントのスプレッドシート** を使った方が何かと便利なのでオススメです。（[Windows PC での「Spending.jp クローンサイトの立ち上げ手順 (OpenSpending 対応版)」実行マニュアル](https://docs.google.com/document/d/19HSh1b4SgT500AIOCRwpVhCmvP5LmC6ZrTEsYYL2VoU/edit#heading=h.bjf6hz2qsiid)でチラッと紹介されています。）

## メリット
* 文字コードを気にしなくてよい。（メモ帳で開いて、文字コードをUTF-8に変更して保存し直す、という作業が不要。）
* 公開するためのサーバーを用意しなくてよい。（Dropbox などにアップする作業が不要。）
* データの入力やチェックを複数人で協業しやすい。

## 作成方法

1. [スプレッドシートを新しく開きます。](https://docs.google.com/spreadsheet/)
2. データを入力します。項目や注意事項は [OpenSpendingへの予算データの登録方法](http://qiita.com/niryuu/items/4adb658c627d2e6d48e4#2-1) と同じです。

## 公開方法

1.「ファイル」メニューの「ウェブに公開...」を選びます。

![130721-0001.png](https://qiita-image-store.s3.amazonaws.com/0/4629/a3689111-bece-7204-7963-f8f7be18103a.png)

2.「公開開始」ボタンをクリックして公開状態にします。

![130721-0003.png](https://qiita-image-store.s3.amazonaws.com/0/4629/018e9841-d376-6451-eb8c-b4ecb8ee0afb.png)

3.「公開データへのリンクを取得」がアクティブになるので、「CSV（カンマ区切り値）」を指定します。

![130721-0002.png](https://qiita-image-store.s3.amazonaws.com/0/4629/e5e53d0f-8f7f-5d3f-ee8b-d55bf20f9ced.png)

一番下のURLがCSVデータの公開用URLです。これを[OpenSpending](http://openspending.org/) への登録に利用します。

![130721-0006.png](https://qiita-image-store.s3.amazonaws.com/0/4629/50e3cfe8-d612-7eca-e4a5-480b58ee47f6.png)

あとは、[OpenSpendingへの予算データの登録方法](http://qiita.com/niryuu/items/4adb658c627d2e6d48e4) に従って、データを登録して下さい。
base64コマンドを使ってbase64エンコード文字列をデコード


Railsのログに吐き出されるBase64エンコードされた文字列をお手軽に見たいとき`base64`ってそのままのコマンドがあるのでそれをつかう

```bash
echo '見たい文字列' | base64 -d
```
MySQLのblobカラムをSQLだけでファイルに保存する


例えばusersテーブルのphotoっていうカラムをダンプしたいとき

```sql
select id,photo into dumpfile '/tmp/path' from users;
```


http://stackoverflow.com/questions/4646533/exporting-blob-from-mysql-database-to-file-with-only-sql
Berkshelfが作ったCookbookの中身を理解する



# はじめに

[前々回](http://qiita.com/ychubachi@github/items/8c57481b85865e562c47)，[前回](http://qiita.com/ychubachi@github/items/befe8ab4cd0765643628)の続きです．ChefやBerkshelf，Vagrantの初心者が勉強しながら執筆しています．

今回はberksコマンドで最初に作ったCookbookについて勉強が進み，少しわかったことが増えましたので，メモします．


# berksコマンドが作ったCookbook

ここで前々回で行った作業をふりかえります．最初にberksコマンドを用いて，

    $ berks cookbook precise

というコマンドを実行しました．これにより，preciseという名前のcookbookが作成されました．このcookbookの名前は，metadata.rbの一行目にかかれています．

    name             'precise'
    maintainer       'YOUR_NAME'
    maintainer_email 'YOUR_EMAIL'
    license          'All rights reserved'
    description      'Installs/Configures precise'
    long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
    version          '0.1.0'


# CookbookのRecipeの参照方法

このpreciseという名前のcookbookは，Vagrantfileのrun\_listから参照されます．run\_listにあるcookbookはvagrantprovisionの時などにChef（料理人）が調理します．

    ...
    chef.run_list = [
        "recipe[precise::default]"
    ]
    ...

ここのpecise::defaultの箇所が，参照をしているところです．では，「default」とは何でしょう．これは，cookbook（料理本）にあるrecipe（レシピ）の名前です．具体的にはrecipes/フォルダのなかのdefault.rbファイルです．

ところで，recipes[&#x2026;]は省略できます．そして，defaultも省略できるようです（要出典）．なので，上の例は

    ...
    chef.run_list = [
        "precise::default"
    ]
    ...

ないしは

    ...
    chef.run_list = [
        "precise"
    ]
    ...

としても同じ結果になりました．


# おわりに

今回学んだことは，berks cookbookpreciseコマンドで作成したのは，preciseという名前のcookbookであることです（なんだか，アタリマエのことに気づいた感じです）．そして，recipes/の中にレシピがあることがわかりました．そうすると，この場所にレシピを追加すればいろいろとVMを鍛えていくことができることになります．

また，run\_listのなかにcookbook名を書いてあげると，そのcookbookのdefaultのレシピを指定できます．さらに，precise::defaultのように，レシピの名前まで指定することができます．



------
 - **source** /mnt/c/Users/yc/Dropbox/org/qiita/d286ccab0fa0d501a45c.org
Google AnalyticsをRails 4のTurbolinksに対応させる



1. \<head\>要素内にトラッキングコードを置く(\<body\>に置いたスクリプトは毎回実行されるので二重に送信されてしまう)
2. 以下のスクリプトを追加、もしくは[google-analytics-turbolinks gem](https://github.com/shukydvir/google-analytics-turbolinks)を使う

```coffeescript:google-analytics-turbolinks.js.coffee
$(document).on 'page:load page:restore', ->
  # Universal Analyticsの場合
  if window.ga?
    ga('set', 'location', location.href.split('#')[0])
    ga('send', 'pageview')

  # 標準のアナリティクスの場合
  if window._gaq?
    _gaq.push(['_trackPageview'])
```

- ~~Turbolinksでページを読み込んだとき(とキャッシュから復元されたとき)page:changeイベントが発火するので、ここでPV送信メソッドを実行~~
- page:changeは通常の遷移時にも発火してしまうため、`page:load page:restore`でTurbolinksでの遷移と履歴復元時にPV送信メソッドを実行する
- Universal Analyticsではなぜか正しいパスが取得できず元のURLのまま送信されてしまうため、ga('set', 'location')を使って[locationを指定する](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#location)ことで対処した


## 参考にしたページ
- [Turbolinks Compatibility with Google Analytics](http://reed.github.io/turbolinks-compatibility/google_analytics.html)
- [Rails 4のturbolinksについて最低でも知っておきたい事 | KRAY Inc](http://kray.jp/blog/must-know-about-turbolinks/)
- [rails/turbolinks](https://github.com/rails/turbolinks/)
- [Introduction to Analytics.js - Google Analytics — Google Developers](https://developers.google.com/analytics/devguides/collection/analyticsjs/)
- [Turbolinksをオフしないためにやった事](http://qiita.com/saboyutaka/items/bcc0966313c6f7399a6e)
GASでinput type="date | number" を使ってみる

**HtmlServiceをNATIVEモード**にするとHTML5が使えるようなので
**&lt;input type="date"&gt;**タグを使ってみた

[input type=date](http://www.htmq.com/html5/input_type_date.shtml)
このサイトによるとchrome10以上、operaは10以上から使えるらしい。

とりあえず、index.htmlをNATIVEモードにして出力。

```gas:doGet.gs
function doGet(){
  var html = HtmlService.createTemplateFromFile('index').evaluate();
  html.setSandboxMode(HtmlService.SandboxMode.NATIVE);
  return html;
}
```

```html:index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<form onsubmit="alert(this.a.value);return false;">
<input name="a" type="date" value="">
<input type="submit" >
</form>
</body>
</html>
```

ウェブアプリケーションとして実行すると確かに日付入力が表示されます。

![sample.jpg](https://qiita-image-store.s3.amazonaws.com/0/8121/3c91538b-2500-082b-7f6f-06e5130f870c.jpeg)

試してみたchromeのバージョンは28.0.1500.72 m

`// html.setSandboxMode(HtmlService.SandboxMode.NATIVE);`

doGetのこの箇所をコメントアウトすると日付入力にならない。

**ちなみに初期値を入力するにはストリングで以下の形式で**

+ "yyyy-mm-dd"

`<input type="date" value="2001-02-01">`

以下の書き方はダメらしい

+ ｘ  "2001/02/01"
+ ｘ  "2001-2-1"
+ ｘ  "20010201"
+ ｘ  "01/02/2001"

**required**属性についてはNATIVE,非NATIVEどちらでも使えるみたい。（chrome ver28)

`<input type="date" value="2001-02-01" required>`

空欄のまま「送信」ボタンを押すと
![sample03.jpg](https://qiita-image-store.s3.amazonaws.com/0/8121/61d52888-1712-4ca2-e6be-ee233892143b.jpeg)

エラーがでます。
ただ、NATIVEモードと非NATIVEモードではcajaがonsubmitを書き換える??らしい。
NATIVEだと入力送信してもalertが出なかった。
cajaはいろんなとこでいろいろとやらかす。。。

ちなみに非NATIVEが上、NATIVEが下に書き換わる。。

`<form onsubmit="alert(this.a.value);return false;">`

非NATIVE
`<form onsubmit="action="http://8b9b4...">`

NATIVE
`<form onsubmit="try { return ___.plugin_dispatchEvent___(this, event, 0, 0, 1); } finally { return false; }">`

-----------
###inputをこんどはtype="number"に置き換えて実行。

`<input name="a" type="number" value="-1" min="0" required >`

このまま送信ボタンを押すともちろんエラーがでます。
![sample05.jpg](https://qiita-image-store.s3.amazonaws.com/0/8121/71a5d703-1147-ff16-1ffa-76993c5e4dd1.jpeg)

空欄にして送信すると
「このフィールドを入力してください。」

数値以外を入力して送信すると
「数字を入力してください。」

とエラーがでました。

+min属性
+max属性
もふつうに使えるようです。

###***patern***も試してみた

`<input name="a" type="text" value="" pattern="^[0-9A-Za-z]+$" required >`

type="text"に置き換えて、patternを英数字に限定。

下図のようなエラーがでます。
![sample04.jpg](https://qiita-image-store.s3.amazonaws.com/0/8121/d746065c-9bdc-d946-d331-9fe03341d8b9.jpeg)
deviseでCould not find a valid mapping for エラー


rspecを実行していると以下のエラーが発生するようになった。

```console
Failure/Error: user = FactoryGirl.create(:user)
RuntimeError:
   Could not find a valid mapping for #<User _id: 51eb486fe138233d1b0001cd, email: 〜
```

## 原因／対処方法
キャッシュを無効にしていたことが原因っぽい。
ただ、キャッシュを無効にしないとModelがリロードされないことがあるので、キャッシュを無効にしていたのですが・・・。

```enviroments/test.rb
config.cache_classes = false
```

一先ず、キャッシュを有効にしたら治りました。
（根本解決にはなっておりませんが・・）

```enviroments/test.rb
config.cache_classes = true
```
--squashでマージするのは避けるべき

--squashでマージすると枝が分岐したままマージされてしまうので色々困る。トピックブランチにはどうでもいいローカルコミットが大量にあることが多くて--squashしたくなるけど代わりにマージ前にrebase -iして元の枝のコミット自体をまとめてしまうほうがいいかもしれない。
Herokuで前のデプロイした状態に戻す。


[Releases | Heroku Dev Center](https://devcenter.heroku.com/articles/releases)

```bash:
$ heroku rollback v40
```

v40 部分は戻したい部分を

```bash:
$ heroku releases
```
で確認した数字（v32 とか v50 とか）を入れる。
emscriptenでOpenGLついでにOSXでコマンドラインのみでOpenGLソースのコンパイル

# 背景
emscriptenをつかってどこぞのゲームエンジンを動かせた！とかそういった
記事を目にして、OpenGLをWebGLとしてemscriptenで扱えることは
認識していた。
しかし、具体的にOpenGLなソースをどうやって.htmlに出来るのかを
解説したサイトが見つけられなかった。

そんな訳でやってみた。

# 結論

```bash:
emcc hege.c -o hoge.html
```

これだけ。
少なくともGLUTなOpenGLなソースはこれで行けそう。


## ハマりそうなプラットフォームは避けてるｗ
Windowsは分かりたくないので、OSXとUbuntuでやってる

# 忘れるとこだった
おっと、OSXでのコマンドラインでOpenGLなソースは

```bash:
clang -framework glut -framework opengl hoge.c
```

で、a.outが作ってもらえます。

# 関連記事

- [libiconvをemscriptenでjs化し、node.jsで使った](http://abrakatabura.hatenablog.com/entry/2015/04/18/115323)
- [jsdo.itでEmscriptenを動かすときのメモ](http://abrakatabura.hatenablog.com/entry/2014/04/17/072514)
- [slコマンドのWebGL版を作ろうとしたら](http://abrakatabura.hatenablog.com/entry/2014/04/09/071724)
- [Emscriptenでファイルを読み込む](http://abrakatabura.hatenablog.com/entry/2013/10/03/120831)
- [emscriptenでOpenGL](http://abrakatabura.hatenablog.com/entry/2013/07/20/081301)
- [SLコマンドをEmscriptenでWeb化する 2014年秋編](http://abrakatabura.hatenablog.com/entry/2014/11/01/170855)
LinuxのTerminalでビールアイコン(Beer Mug)を表示する。

Mac OS XでHomebrewを使っている人にはお馴染みのビールアイコン(Beer Mug)をLinuxのTerminalで表示する方法です。(ただし、モノクロ)
いろいろ調べた結果、CentOS 6では単に絵文字のフォントが無いだけだと判明。

##Mac OS Xの場合

```sh
$ echo -e "\xF0\x9f\x8d\xba"
```
![beermug_macosx.png](https://qiita-image-store.s3.amazonaws.com/0/13477/f9b3205b-0680-dc37-6498-8eced4283054.png) ←結果

##CentOS 6の場合

```sh
$ wget http://users.teilar.gr/~g1951d/Symbola.zip
$ unzip Symbola.zip -d ~/.fonts
$ echo -e "\xF0\x9f\x8d\xba"
```
![beermug_centos6.png](https://qiita-image-store.s3.amazonaws.com/0/13477/ac4782b6-2626-3a09-8381-3d67979a9286.png) ←結果

##参考サイト

How can Homebrew print a beer mug in Terminal?
http://superuser.com/questions/538061/how-can-homebrew-print-a-beer-mug-in-terminal

Unicode Character 'BEER MUG' (U+1F37A)
http://www.fileformat.info/info/unicode/char/1f37a/index.htm

Make Emoji Work in Linux
http://www.kirsle.net/blog/kirsle/make-emoji-work-in-linux

【Linux】全Unicode fonts install に挑戦(CentOS6)
http://pythonlife.seesaa.net/article/310893977.html

Unicode Fonts for Ancient Scripts
http://users.teilar.gr/~g1951d/
Eclipse Keplerで仮想環境上（リモート上）のファイルを編集する。

最近の仮想化ブームで、開発がローカル環境で閉じることは稀になりましたね。
Vagrantを使ってVirtualBoxで仮想環境をたちあげて、その上で開発とか、よくやります。

そんな時にもEclipseを使って開発効率を高めたい！
でも、仮想環境上でXとかのGUIを立ち上げるのはメモリを喰って大変だ。そんな時にはEclipseで仮想環境のディレクトリをプロジェクト内に取り込んで開発してみましょう。

1. プラグインのインストール
-------------
help → Install New Softwareから、Work with で Keplerを選択し、General Purpose Tool → Dynamic Languages Toolkit -Remote Development Support をインストールします。これは、多分、昔はRSDと呼ばれていたプラグインだと思います。

2. リモートへの接続
-------------
Window → Open Perspective → Remote System Explorer でパースペクティブを開いて、 Remote Systems ビューでNew Connection → SSH OnlyでNext, Host name にリモートのホスト名、もしくはIPを入れてConnection nameとDescriptionには適当な名前(ホスト名と同じがオススメ)を入れて、Finish ボタンを押してください。
Remote Systemsビューに接続が出てきますので、中を開いていき、Sftp Filesから編集したいディレクトリを開きます。（途中、パスワードを聞かれるでしょう。）
編集したいフォルダを右クリックCreate Remote Project をすると、プロジェクトが作られます。J2EEパースペクティブ等でProject Explorerなどで見ると、ホスト名_ディレクトリ名でプロジェクトが作られています。

3. 編集
-------------
できたプロジェクト上で、リモートのファイルが見れます。編集＋保存すればリモートのファイルに即時反映されています。新しいファイルを作っても、すぐに作成されます。便利。
padrino+will_paginate+bootstrap向けにカスタムレンダラを実装

# 目標
padrinoでwill_paginateを使ってページ処理をする。
ついでに、bootstrap用のCSSスタイルを適用するために、
カスタムレンダラを使用する。

## 不思議現象
windows、ruby1.9.3のpadrinoで、will_paginateを使うと、なぜか埋め込まれるべきHTMLコードがそのまま画面に出てくる。

```
テストユーザー13 　 (経理部)
テストユーザー14 　 (経理部)
<div class="pagination"><span class="previous_page disabled">&#8592; Previous</span> <em class="current">1</em> <a rel="next" href="/users/?page=2">2</a> <a href="/users/?page=3">3</a> <a href="/users/?page=4">4</a> <a href="/users/?page=5">5</a> <a href="/users/?page=6">6</a> <a href="/users/?page=7">7</a> <a href="/users/?page=8">8</a> <a href="/users/?page=9">9</a> <span class="gap">&hellip;</span> <a href="/users/?page=133">133</a> <a href="/users/?page=134">134</a> <a class="next_page" rel="next" href="/users/?page=2">Next &#8594;</a></div>
```
これでは困るので、とりあえず
`= will_paginate(@collections).html_safe`
と html_safe を追加してやり過ごす。

```
 テストユーザー14 　 (経理部)
← Previous 1 2 3 4 5 6 7 8 9 … 133 134 Next →
```

## ついでにbootstrapのpaginate用CSSを利用したい！
[will_paginate-bootstrap](https://github.com/nickpad/will_paginate-bootstrap)で、
gemとして公開しているものがあるけど、自分の環境ではうまく動かなかった。
なので、直接カスタムレンダラを作成することに。

カスタムレンダラについては本家の[https://github.com/mislav/will_paginate/issues/158](https://github.com/mislav/will_paginate/issues/158)で話題にあり、その中でrails用に作成していただいているgist [https://gist.github.com/1248807](https://gist.github.com/1248807)があり、そのgistのコメント欄にsinatra/padrinoバージョン[https://gist.github.com/phildionne/5785087](https://gist.github.com/phildionne/5785087)を公開している方が！！
ありがたく拝借して、ソースを丸のままルートにあるlibフォルダ内に`bootstrap_renderer.rb`などとして設置。
テンプレートのwill_paginate部分も
`= will_paginate(@collections,renderer: WillPaginate::ViewHelpers::BoostrapLinkRenderer).html_safe`
と変更。

## しかし!
![will.png](https://qiita-image-store.s3.amazonaws.com/0/26556/49322031-1f4c-e95c-8b79-5b3eb5c23693.png)
こんな風に。bootstrapのpaginate cssの部分を調べると、paginate本体を構成するul>liを、さらにDIVでくるんで、そのDIVにpaginateクラスを適用するみたい。
それに対し、先ほど設置したカスタムレンダラのhtmlコードを見ると、ulタグ自身にpaginateクラスを付けている。
なので、先ほど設置した`lib/bootstrap_renderer.rb`の中の`def html_container`を一部改変。

```rb:lib/bootstrap_renderer.rb
def html_container(html)
  # tag(:ul, html, container_attributes) <= もともとのコード
  tag(:div, tag(:ul, html), container_attributes)
end
```
DIVでくるんであげると、
![will2.png](https://qiita-image-store.s3.amazonaws.com/0/26556/73afa791-989e-ea9e-fbd0-f214cc028c44.png)
完成！
zsh の分からない用語を man から素早く探す

zsh でいろいろやろうとするとき man が頼りになるんだけど、大きすぎて目的の単語を探しにくいことがある。そういうときは man の中で検索すればいいんだけど、それを一気にやってくれる関数を作っておくと便利なので紹介する。[10 new zsh tricks you may not know...](http://chneukirchen.org/blog/archive/2012/02/10-new-zsh-tricks-you-may-not-know.html) という記事に書いてあったのを元にしてる。

### 書き方
これを `~/.zshrc` に書いておく。

```zsh
function zman() {
    PAGER="less -g -s '+/^       "$1"'" man zshall
}
```

### 使い方の例
`zman 調べたい単語` というふうに使う。

```zsh
# 例
% zman fpath
```

単純に単語で検索しただけでなくて、その単語で始まる行を探してる。なのでその単語の説明になってるところにすぐに移動できる。

![zman_fpath.png](https://qiita-image-store.s3.amazonaws.com/0/204/da623e5a-a9e9-b8e4-4c34-f9bf09f08022.png)

これで man を読みまくると賢くなれると思う。
taint と Class, Module, singleton_class

```rb:
RUBY_DESCRIPTION #=> "ruby 2.1.0dev (2013-08-09 trunk 42473) [x86_64-linux]

$VERBOSE = true

obj = Object.new
mod = Module.new.taint

obj.taint.singleton_class.tainted? #=> true

obj2 = Object.new
obj2.singleton_class.taint
obj2.tainted? #=> false

obj3 = Object.new
obj3.extend mod
obj3.tainted? #=> false

obj4 = Object.new
obj4.singleton_class.__send__ :include, mod
obj4.tainted? #=> false

(mod2 = Module.new { include mod }).tainted? #=> true
Module.new { include mod2 }.tainted? #=> true
(cls = Class.new { include mod2 }).tainted? #=> true
Class.new(cls).tainted? #=> false
Class.new(Class.new.taint).tainted? #=> false
cls.new.tainted? #=> false
Class.new.taint.new.tainted? #=> false
```
RubyMine Tips

## 環境情報
MacOS Version : 10.8
RubyMine Version : 5.4.3.2.1
KeyMaps : Mac OSX 10.5+

## ショートカット（設定：Preference > Keymap）
| ショートカットキー | 効果 | ショートカット名|
|:-----------|:------------|:------------|
| F4 | メソッドジェンプ | Main menu > View > Jump to Source |
| control + space | 補完呼び出し | Main menu > Code > Completion > Basic |
| command + option + L | コードフォーマット | Main menu > Code > Reformat Code... |
| command + option + ↑ | 対応するコントローラ、ビュー、テストを表示 | Main menu > Navigate > Related Files |
| command + shift + O | ファイル名による検索 | Main menu > Navigate > Files... |
| command + / | コメントイン、コメントアウト | Main menu > Code > Comment with Line Comment |
| command + shift + ↑↓ | 選択箇所を上下移動 | Main menu > Code > Move Statement UP, Down |
| command + shift + . | <%= %>を挿入 | Main menu > Tools > Extensions > Erb > Inseert '<%= %>' |
※開発環境によって、初期のショートカットキーが異なる場合があります。

## Editor設定
- カーソル位置が自由すぎるのを行の最後にする
Settings > Editor > Allow placement of caret after end of lineをオフにする