OmniAICreator/Qiita-1.07M huggingface dataset:
Kobito に個人用アクセストークンを登録する手順

この記事では、 Kobito のログイン画面でうまくログインできない場合に、個人用アクセストークンでログインする手順を説明します。 Kobito 2.2.0 以上が対象です。

## 1. Qiita で個人用アクセストークンを発行する

https://qiita.com/settings/tokens/new を開きます。 Qiita にログインしていない場合はページが表示されないので、ログインして再度開きます。

「個人用アクセストークンを発行する」フォームの「アクセストークンの説明」に適当な説明を入力します。「スコープ」のチェックボックスすべてにチェックを入れます。「発行する」ボタンをクリックします。

> ![「個人用アクセストークンを発行する」フォーム](https://qiita-image-store.s3.amazonaws.com/0/735/68e2c2f9-c39b-fde3-68e6-22cac798cbca.png)

発行された個人用アクセストークンをメモしておきます。（トークンは再表示することができないので注意してください。トークンが分からなくなってしまったら上の手順で新しく発行してください。）

> ![発行された個人用アクセストークン](https://qiita-image-store.s3.amazonaws.com/0/735/1b9fc2c0-3218-e6ab-e7c0-6efaa129ffd6.png)

## 2. Kobito に個人用アクセストークンを登録する

Kobito が起動していたら終了しておきます。

Finder で「アプリケーション」フォルダ内の「ユーティリティ」フォルダを開きます。その中の「ターミナル」アプリケーションを起動します。

> ![ターミナル](https://qiita-image-store.s3.amazonaws.com/0/735/8bdde6e8-4a54-de13-473c-e2951f7a6cea.png)

ターミナルに以下の文字列を入力します。 `YOUR_USER_ID` の部分はあなたのユーザーIDに置き換えます。最後にエンターキーを押します。

```
defaults write com.qiita.Kobito username YOUR_USER_ID
```

続いてターミナルに以下の文字列を入力します。 `YOUR_TOKEN` の部分は先ほどメモしたトークンに置き換えます。最後にエンターキーを押します。

```
defaults write com.qiita.Kobito APIv2AccessTokens -dict qiita.com YOUR_TOKEN
```

入力し終えると以下の画面のようになっているはずです（他にエラーメッセージなどが出力されていたらこの記事のコメントでお知らせください）：

> ![ターミナル](https://qiita-image-store.s3.amazonaws.com/0/735/4c52d0fd-c007-7ad5-c5e6-0c20cf772262.png)

これで個人用アクセストークンの登録は完了です。ターミナルは終了して構いません。 Kobito を起動して限定共有記事の投稿などを試してみてください。

もしも Kobito を起動したときにログイン画面が表示されたなら、トークンの登録がうまくいかなかった可能性があります。再度この記事の手順を試してみてください。それでもうまくいかない場合はコメントでお知らせください。
Oracle覚書 WindowsにOracle 11g Express Edtionをインストールする

サンプルブログラムを動かす為に、Oracle 11g Express EdtionをWindows7 Professional sp1 64bit環境にインストールする。

***
参考サイト：http://log.noiretaya.com/223
　　　　　　http://www.cyberarchitect.net/blog/archives/670

インストールが32bit版だったため、下記のエラーが発生
![image](https://qiita-image-store.s3.amazonaws.com/0/67341/c527537f-9c51-1c28-0c59-646b57ff37c2.png)

確かに、ファイルがない(>_<)

参考サイト様の手順に従って「C:\Users\<ユーザ名>\AppData\Local\Temp」の中で「OracleMTSRecoveryService.reg」を検索し、コピーし、「KEY_XE.reg」にリネームする。
参考サイト様でも書かれているが、間違っても「OracleMTSRecoveryService.reg」をリネームしないように！！

無事にエラーなしでインストール完了！！！

***
ついでに、dampファイルからデータを戻す方法を調べてみる。

が、分からぬまま動かしていたら
「[ORA-01033] Oracleの初期化またはシャットダウン中です」
が出て困ったけど、参考サイト様の手順通りにコマンドプロンプトからコマンドを入力して解決

>sqlplus /nolog
>connect sys/xxx as sysdba
>shutdown normal
>startup mount
>recover database
>alter database open

参考サイト：http://blogs.yahoo.co.jp/tksoft/60463379.html
***

さぁ、気を取り直してimportの続きをやるのだ！！！
ユーザーもパスワードも分からないので、フルでimportする。

c:\>imp system/xxx commit=y full=y ignore=y file=c:\XXXX.DMP

なんとか入ったみたいだけど…
はたしてサンプルプログラムは動くのか不安です。

***
結局動かず…
原因は、フルでdmpファイルからimportとしても、ユーザーまでは作ってくれなかったから。
結局、ユーザーを作って、そのユーザーの対してimportさせる事で解決しました。
やっぱり、ObjectBrowserは便利ですね！！
Rubyでメソッド名の後ろにある「?」と「!」

Rubyでメソッド名の後ろにある「?」について。

書籍やサンプルにあって感覚的にはわかるのですが、いまいち理解していなかったので。

★Ruby 2.2.0 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.2.0/doc/spec=2fcall.html

>メソッド名には通常の識別子の他、識別子に ? または ! の続い たものが許されます。慣習として、述語(真偽値を返すメソッド)には ? を、同名の(! の無い)メソッドに比べてより破壊的な作用をもつメソッ ド(例: tr と tr!)には ! をつけるようになっています。

慣習なんでつけてもつけなくても変わらないようですね。

直感的にわかるためのお作法というところでしょうか。
bundlerが参照するURLを読み替える

# 前提
会社でサーバー構築する場合、外部のインターネットに接続できない環境があったりします。
このような環境の場合、gemファイルをインストールするだけで大変だったりします。
対応方法としては、

* 外部接続できる環境で`bundle package`をやって、`--local`オプションをつけてbundleする
* 内部にミラーサーバーを作成して、そちらを参照する

の２通りがあるかと思うのですが、
今回は、「ミラーサーバーを参照する」について、記述しています。

# 今までと問題点
`Gemfile`に、`source 'https://rubygems.org'`と書いてある場所を、`source [ミラーサーバー]`と書き換えていました。
この場合、以下のような問題がありました。

* 新しいプロジェクトを立ち上げる度に書き換えが必要
* gemごとに参照URLを書き換える場合、変更箇所が多くなる
* 開発環境と本番環境でミラーサイトが違うと、デプロイするときに書き換えが必要
* などなど

# 改善策
以下、Ruby 2.2.0以降から有効な方法です。（bundlerのバージョンが1.5以降）
（それ以前の場合、`Gemfile`の`source`を直接変更するしかなさそうです。）

[http://bundler.io/v1.5/bundle_config.html](http://bundler.io/v1.5/bundle_config.html)に答えが書いてありました。

`Gemfile`の`source`はそのままにしておいて、

```bash
$ bundle config mirror.https://rubygems.org https://localgems.lan
```

と打つだけです。

要約すると、bundleの設定で、`https://rubygems.org`を、`https://localgems.lan`に読み替えますよ。
ということです。
（`https://localgems.lan`の部分は、それぞれの環境で設定しているミラーサイトにしてください。）

`~/.bundle/config`ファイルに読み替えの定義が記述されるので、一度設定しておけば、新しいプロジェクトを作成しても大丈夫です。

開発環境と、本番環境で参照先を変えておけば、`Gemfile`は変更することなく、bundlerが読み替えてくれます。
若手エンジニアが学んでおくべき５つの言語

この投稿は*一番求人が多い業務系アプリケーションの開発を行おうとしている20代前半の若手エンジニアを対象*にしています。私個人の見方なので、いろいろ意見がある人もいるかと思いますが、よろしければコメントしてください。

#1. Java

国内においては、業務系アプリ開発の主流になっていると思われます。プロジェクトや求人が多いので多くのチャンスがあるでしょう。

言語仕様が C 言語や C# と似ているので、そういう言語を学ぶ時も Java を知っているとすんなり入れるかもしれません。

Java は完全なオブジェクト指向言語です。オブジェクト指向の考え方を最初から頭に叩き込めるので他のオブジェクト指向言語（最近の言語はたいていそうだが）を学ぶ時にも役立つでしょう。

忘れてならないのが、Java のクラスライブラリでサードパーティ製も含めれば膨大な量があります。これらは膨大なので、すべて学ぶのは不可能ですが、よく使われるコレクション関係クラスなどは習熟しておいたほうがいいでしょうね。

#2. 英語

プログラミング言語ではありませんが必須です。 なぜなら、最新の技術情報は英語で発信されていますし、日本語化されていないマニュアルなども多数あるためです。

話したり書いたりすることはあまりありませんが、ある程度のスピードで専門用語が多く含まれる文書を読みこなせる実力が必要です。

#3. シェル言語

「シェル言語」という言語があるわけではなく、ここでは、Bash や Csh のことを指しています。

業務系アプリでは、１日の終わりなどにその日の取引の集計などを行います。これは、ふつう、夜間に行われるので「夜間バッチ」などと呼ばれます。夜間バッチでは、各支店などから吸い上げた営業データなどをデータベースに入力し、集計したり解析したりします。これらの制御にはよく「シェル言語」が使われます。

ただ、シェル言語だけできればいいというものではなく、Unix コマンドや Awk, Perl と言ったものが同時に使用されるので、それらの知識も必要になります。

Windows サーバでは、これらの代わりに PowerShell や Batch, Wsh が使われています。Windows サーバもカバーするならそれらも学んでおいた方がいいです。

#4. C# または Visual Basic.NET

業務系アプリケーションでは Windows もよく使われます。以前は、Visual C++ や Visual Basic が使われてきましたが、現在では C# あるいは Visual Basic.NET が多く使用されています。

どちらもクラスライブラリは共通なので片方を知っていれば、他方も学びやすいかもしれません。ただし、言語仕様はまったく関連性がないので、頭の柔軟さが必要ですね。

これらの開発には、ふつう Visual Studio が使われますが、高機能で使い勝手がよく効率的な開発ができるのも強みです。

#5. VBA (Visual Basic for Application)

Excel など MS Office 製品のマクロとしての機能を持った言語です。これを使うと、自動でオフィス文書を処理することができます。

言語仕様としては、旧世代の Visual Basic と共通で、Visual Basic.NET とは互換性がありません。しかし、MS Office 製品は必ずと言っていいほど、企業では使われていて、未だに VBA は健在です。

また、ちょっとしたツール作りやデータ処理、テストデータ作成などにも使えて便利です。


[原文はこちら...](http://bonk.red/show.php?id=11)
puppetmasterでcert --cleanしてしまったので再登録手順

## 問題

下記のようにcertを削除したとする。

```bash:puppetmaster
# sudo puppet cert --list
client.local
# sudo puppet cert --clean client.local
```

```bash:client.local(これは動く)
# sudo puppet agent --server puppetmaster.local --test --noop --verbose
```

この状態だとpuppetmaster側からclient側に`puppet kick`が出来なくなっていると思う。

## puppet client側で実施

```bash:もし起動していたら止める
# service puppet stop
```

```bash:/var/lib/puppet/ssl/をざっくり削除
# mv /var/lib/puppet/ssl/ ~/ssl.gomi/
```

```bash:
# sudo puppet agent --server puppetmaster.local --test --noop --verbose
```

これでpuppetmaster側にて`cert --list`で表示される。

```bash:puppetmaster
# sudo puppet cert --list
client.local
```

あとはsignしてあげればよい。
ぐだぐだな branchを gitを駆使して綺麗にする。

機能ができたよ、と PRされたんだけどどうにもその branchが汚い。commitの順番がくるってるとか、commitを 2つに分けたいとかだけなら `git rebase -i` でなんとかなるけど、論理的にはひとつの変更が複数の commitに分かれていたり、さらにはどこが論理的なまとまりかわからない。reviewしようにもとっかかりもない。かと言って突き返してもこれ以上改善するとも思えない。0から自分で実装する時間もないので、なんとか機能は組み込みたいけど。こまった。どうしよう。現実逃避に twitterでもみるか。

そんな状況があなたにもあるでしょう。そんなときに使える tipsを提供します、というか、単にやったことをまとめてみます。いろいろ改善点はあるだろうからツッコミも常時うけつけます。

## 前提
```
- A  [*] (master trunk)
   \- B0 - B1 - B2 (messy_branch)
````
こんな感じです。 `B0` とかが、もうどうしようもない commit群です。

ちなみに図中の `[*]` は current branchぐらいのいみで使ってます。

### messy_branchを潰す
もう、commitの単位は意味ないので、つぶしちゃいます。

```
git checkout messy_branch
git reset master
git add files   # stage necessary files!
git commit -m 'squashed!'
```

この時に、ついでに自明にいらない変更は (いらないコメントの追加、空行の追加とか) 適当に編集して直しちゃったほうが後は楽かもしれません。やりませんでしたが。

あとで気づきましたが、ここは `git rebase -i` で、全部 squashしちゃうほうが、addしわすれとかなくていいかも。

あと、upstreamがあった場合、 `git branch --unset-upstream`  しておいたほうが unpulledがどうのこうの言われなくていいかもしれません。

### refactor_branchを生やしてそこで作業。

```
git checkout master
git checkout -b refactor_branch
```

```
- A (master)
  |\- B99 (messy_branch)
   \.     [*] (refactor_branch)
```

### messy_branch からとりあえずわかる単位を引き剥がす
```
git checkout -p messy_branch
```
こうすると chunk単位で元 branchにとりこむか聞いてきます。そもそも、一つの chunkに複数の変更がはいってたりすることもあるかもしれないけど、そこは取り込んだ後、編集したりしてなんとかします。

とりあえず、依存関係のない単純な部分から引き剥がして後の作業を楽にすることを考えます。他のライブラリを導入するためだけの変更とかがまずは楽でした。

commitの順序の入れ替えとか、2つの commitを一つにまとめるとかはあとで更に refacor_branchを `rebase -i`すればなんとかなるので、ここではわかりやすいものをちと小さめに引き剥がしちゃえばいいでしょう。

binary fileは `checkout -p`では扱ってくれないみたいなので、`git checkout messy_branch - binary_file` とかでとりこむ必要があるでしょう。

もちろん、変更を取り込んでちゃんと動くのを確認した後は commitするのを忘れずに!

```
- A (master)
  |\- B99 (messy_branch)
   \- C0  [*] (refactor_branch)
```

`C0`が新しくできた、論理的にまとまった commitです。

### messy_branchから取り込んだ内容を差っ引く

```
git checkout messy_branch
git rebase refactor_branch
```

こうやって messy_branchのなかから取り込んだ内容を差っ引きます。当然、conflictはするだろうから頑張って解消して `rebase --continue` してください。

このときにも明らかに不要な変更は消しちゃうのもありです。

テストして commitすると、ツリーは以下のようになってるはず:

```
- A (master)
   \- C0      (refactor_branch)
       \- B98 [*] (messy_branch)
```

### 以下繰り返し

こうやって refactor_branch と messy_branchの間を行き来してどんどん論理的な単位を引き剥がしていきます。すると以下のようになるでしょう。

```
- A (master)
   \- C0 - C2 - C3 - C1 - C4 (refactor_branch)
                      \- B95 [*] (messy_branch)
```

もう、`B95` を rebaseしたらいらない変更しかない。そうなったら一段落です。

あとは、refactor_branchを `git rebase -i master` して、適当に順序入れ替えたり、squashしたりして最後の調整してください。

まあ、これも結構時間かかりますが、確実にコードの理解は深まりますし、テスト中にさらに綺麗になったりするのでやる甲斐はある場合もあるかもしれませんよ、ということで。
deviseでconfirmable設定をした際の確認メールをスキップさせる skip_confirmation! は、対象のオブジェクトをsaveする前に書く

deviseでconfirmable設定をした際に、メアドのactivationメール（確認メール）の送信をスキップさせる方法のメモ。


```rb
obj.skip_confirmation!
```

↑の様に書けばスキップします。


## skip_confirmation!を指定するタイミング

@user.saveのタイミングで（UserモデルをDeviseの管理対象にしている場合）、メールが送信される様です。

なので、skip_confirmation!は@user.saveの前に書きます。
new〜saveの間ですかね。

```rb
user = User.new(:username => data.name,
                :email => data.email,
                :password =>    Devise.friendly_token[0,20]
                )
user.skip_confirmation!
user.save
```

こんな流れになるかと思います。

## 例

```rb
class Users::RegistrationsController < Devise::RegistrationsController

  def create
    @user = User.new(sign_up_params)
    @user.skip_confirmation!
    if @user.save
      #@user.skip_confirmation! #not moved
    end
  end
```


# References
- http://stackoverflow.com/questions/8672189/devise-skip-confirmation-not-working
Java覚書 TomcatをWindowsにインストールする

Webアプリを起動させるために、Tomcatをインストールするので色々と調べてみた。
***
参考サイト：http://thinkit.co.jp/free/article/0708/2/3/

Tomcatをインストールする前に、Javaの実行環境(Java VM)がインストールされている事が必要であるらしい。

PCのJava環境を調べるには、下記のコマンドを実行する

```
java -fullversion
```

すでにインストールされていれば
![image](https://qiita-image-store.s3.amazonaws.com/0/67341/3e2ca323-c669-bf1c-16e7-79a303a3d433.png)

インストールされていなければ
![image](https://qiita-image-store.s3.amazonaws.com/0/67341/6e4b688e-0264-717f-de21-068626323f03.png)

と表示されます。
今回は、インストールされていなかったので、Tomcatの前にJava実行環境をインストールします。

***
有識者の指示では、「Apache Ant 1.9.4」をインストールするように！！
とのこなので、まずはそっちをインストールしてみる。

参考サイト：http://note.onichannn.net/archives/3243
　　　　　　http://kakakikikeke.blogspot.jp/2013/08/windowsant.html

1.解凍したフォルダを任意の場所にコピーする
2.環境変数"ANT_HOME"を追加し、変数値に1.でコピーした先のPathを設定する
3.環境変数"Path"に、値を追加する。「;%ANT_HOME%\bin」

![image](https://qiita-image-store.s3.amazonaws.com/0/67341/fa912f6b-7ea1-72a5-681e-02541fb13b66.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/67341/e62991ab-5e8d-3c48-182e-727a5ef498b2.png)

【フォルダの解凍でエラーが発生】
　原因は「Lhaplus」を使っていたかららしい、なので「7_ZIP」をインストールしてリトライ
　無事にエラーなく解凍できました。

故意に「JDK」をインストールしていないので、コマンドプロンプトで下記のコマンドを実行しても反応なし…

```
ant -v
```

参考サイト様に「またJavaのインストールおよびJAVA_HOMEが設定されていないと動作しないので未インストールの場合は合わせてインストールしてください」と記載されていたので、反応がないのはあたりまえだと思う。
一応インストールは完了したので、このままTomcatインストール作業を進めてみる。

が…

![image](https://qiita-image-store.s3.amazonaws.com/0/67341/19039cec-d280-1bf8-6283-69a740942792.png)

JDKのインストール先を指定するところでエラー…
やっぱり「JDK」のインストールは必要なのではないでしょうか？

>Tomcat 5.5からはTomcat自身にIBMが無償で提供しているJavaのJDT（Java Development Tools）コ>ンパイラが内蔵されています。このためTomcat 5.5.以降のバージョンでは、JREだけでもJSPのコンパ>イルを行うことが可能ですが、それ以前のバージョンのTomcatではJDKがないとJSPを実行できません。>JDKのインストールについてはSunのインストールガイドを参照ください。

参考サイト様で、上記のように記載されているので、今回インストールしようとしているTomcatはバージョン7.0.56なので、JREだけインストールしてみることに。

![image](https://qiita-image-store.s3.amazonaws.com/0/67341/ecfe46d4-bedd-6138-e722-e09bf15563d7.png)

下から二番目のをインストールしてみた。
そしたら、ANTのコマンドも使用できたし、Tomcatもインストールできました。

Tomcatの起動は、Configure Tomcatから行う。
起動確認は、Webブラウザーで「http://localhost:8080/」が表示出来ればＯＫ

***
実は、この後Oracle 11g Express Edtionをインストールしたのですが、その時「ポート番号」を同じ「8080」で設定してしまいTomcatが動かなくなってしまう事態に…
ポート番号が原因だと分かる前に、下記の参考サイト様で記載されている「Tomcatの管理者権限アカウント設定の方法」も試してみたけどダメではまってしまった。

参考サイト：http://d.hatena.ne.jp/takigawa401/20101119/1290092862

最終的には、Tomcatをインストールしなおして、その時にひょっとしたら番号重複しているかもと思い、番号を変更して、ついでに管理者権限アカウントの設定したら、問題なく起動(^_^;)

まだまだですね…
デバッグメモ CSSライブラリ


相当面倒なライブラリ依存の不具合動作に直面したため、
繰り返さないようにメモ。

forkしたjQueryプラグインを検証していたところ、
iOSのモバイルSafariでのみ、以下のような現象に遭遇。

「表組みされた要素が時刻部分のみスクロールしない」

![スクリーンショット_2015_02_20_9_17.png](https://qiita-image-store.s3.amazonaws.com/0/17043/8aaf31a8-458a-d072-8693-e483b9993e94.png "スクリーンショット_2015_02_20_9_17.png")

概要は、

- CSSでabsolute設定で表組みしたスケジューラのプラグイン
- 時刻を横軸に持ち、スクロールできる
- Bootstrapのmodal上で動作させた際に発生
- iOSのモバイルsafariでのみ発生（iPad, iPhone）

ここで検討をつけたのは、iOS固有のCSS処理が影響していること。
けれど、全く検討違いのライブラリの動作が影響していた。

「animate.css」で上記のプラグインを動作後に「fadeIn」アニメーションを使用していた場合にのみ発生していた。


animate.cssの読み込みが影響していたわけではなく、addClass,removeClassでanimate.cssのクラスを付加・削除する動作がスクロール動作に影響していた。

Chromeでもウィンドウサイズを変えるとレスポンシブなBootstrapのtab部分が崩れてしまう現象も経験したけど、動的にCSSを触ることが他の動作に影響する（環境依存で）というとてもデバッグしにくい現象でした。

そもそも表組みのHTML要素とCSSの組み方が悪い気がしているので、
余裕があるときにプラグインを見直そうと思う。
不可視のFizzBuzz (Ruby)

某FizzBuzzの記事を読んでたら急にFizzBuzzを書きたくなりました。
Rubyです。

```rb:invisible_fizzbuzz.rb
eval [<<"".chomp.tr(" -‍ 　", "0-9a-f")].pack("H*")
```
>1
2
Fizz
4
Buzz
Fizz
7
>
*** しょうりゃく ***
>
94
Buzz
Fizz
97
98
Fizz
Buzz

ごく普通のFizzBuzzです。
ただし、上のソースをコピペしても絶対に動きません。

コピペじゃ無理なのでGitHubにアップロードしました。
下のリンクから右クリック等で **ファイルを直接ダウンロードして** 実行してください。
(下のリンクからでも、コピペじゃたぶん無理です)

https://gist.githubusercontent.com/zakuroishikuro/c239807c06347dd9c242e7b7840bddd5/raw/a9f1aa42a59a62d3323fcf9884e9c9c7d1414c7c/hidden_fizzbuzz.rb

あと環境によっても動かないかもしれません。
以下の環境で動作確認しました。

Mac OS X 10.10.2
Ruby 2.2.0p0

# 説明

予想付くかもですが、空白の部分にソースを書き込んであります。
見えてる部分はヒアドキュメント`<<""`で空行までの文字列(空白)を取り出し、元の文字列に直して`eval`してるだけです。

一番上のソースは空白の部分を削除してるので、動くわけがありません。
(どうせ見えないし、コピペしても動かないからいいよね。)

スペースってたくさんあるので、ちょっとした文字列なら隠せます。
さっきのソースの`eval`をはずして`puts`にすると以下のソースが出てきます。

```rb:自分なりのFizzBuzz
(1..100).zip(([nil]*2<<:Fizz).cycle,([nil]*4<<:Buzz).cycle){|n,*z|puts z.any?&&z*""||n}
```
元は以下のようなソースです。
空白が小さいほうがバレにくいので上のように短くしました。

```rb:cycleとzipを使ったFizzBuzz
fizz = [nil] * 2 << :Fizz
buzz = [nil] * 4 << :Buzz

(1..100).zip(fizz.cycle, buzz.cycle) do |n, *f|
  puts f.any? ? f.join : n
end
```

空白に変換するには、見えてる部分のソースと逆のことをやるだけ。

```rb:ソースを空白に変換
src = '(1..100).zip(([nil]*2<<:Fizz).cycle,([nil]*4<<:Buzz).cycle){|n,*z|puts z.any?&&z*""||n}'

hex = src.unpack("H*")[0] # 16進数にする
#=>"28312e2e313030292e7a697028285b6e696c5d2a323c3c3a46697a7a292e6379636c652c285b6e696c5d2a343c3c3a42757a7a292e6379636c65297b7c6e2c2a7a7c70757473207a2e616e793f26267a2a22227c7c6e7d"

spaces = hex.tr("0-9a-f", " -‍ 　") # 16種のスペースで置き換える
#=> "                                                                                                                                                                              "
```
空白の文字列はコピペじゃうまく扱えなかったりするので、パイプでファイルに書き出すとかしたほうがいいかも。

スペースは通常の半角・全角に加えて、`U+2000`〜`U+200D`を使いました。
連番なので扱いやすいです。

```rb:16種類のスペース
[*"\u2000".."\u200d"] + [" ", "　"]
```

```rb:しらべてみる
spaces = [*"\u2000".."\u200d"] + [" ", "　"]

spaces.size #=> 16
spaces.uniq.size #=> 16

# 「/\s/」に引っかかるのは普通の半角スペースだけ。
spaces.grep(/\s/)
#=> [" "]

# 「/[[:space:]]/」にはほとんど引っかかる。引っかからないスペースは3つ。
spaces.reject{|s| /[[:space:]]/ === s }.map{|s| s.ord.to_s(16)}
#=> ["200b", "200c", "200d"]
```

合わせてちょうど16種類なので16進数を表現できます。
文字列を16進数にすれば完全に隠蔽できます。

`tr`に渡している文字列は以下のようになってます。
見えないので補足しないと何がなんだかわかりませんね。

```
spaces = "\u2000" + "-" + "\u200d" + " " + "　"
```

スペースの種類はWikipediaにたくさん。

- [Whitespace character - Wikipedia, the free encyclopedia](http://en.wikipedia.org/wiki/Whitespace_character)
- [スペース - Wikipedia](http://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9)

これらの空白は変数名としても使えたので、頭が痛くなるようなソースはいくらでも書けそうです。
全部試したわけではないですが。

```
 = 1
  
puts 
#=> 1
```

# 追記

ってかこれFizzBuzz関係ない。
ブラウザ標準API DOMトラバース用 まとめ


DOM Elementの検索と走査を標準APIでどこまでできるか調べました。
脱jQueryを目指しています。

## 検索

### querySelectorAll

原則として[document.querySelectorAll](https://developer.mozilla.org/ja/docs/Web/API/document.querySelectorAll)を使います。

引数にはCSSセレクタを指定できます。カンマで区切って複数つけることもできます。

たとえば

```js
var matches = document.querySelectorAll( "div.lightbox, div.popup" );
```

文書中の、 "lightbox" または "popup" のクラス名を持つすべての div 要素のノードリストを返します。

特定のelement配下を検索したい場合は[element.querySelectorAll](
https://developer.mozilla.org/ja/docs/Web/API/Element.querySelectorAll)を使います。

たとえば

```js
var matches = document.body.querySelectorAll('p');
```

### querySelector
要素が一個しか取れないことがわかっている場合、[document.querySelector](
https://developer.mozilla.org/ja/docs/Web/API/document.querySelector)を使っても良いです。
インデックスアクセスを省略できます。

```
var el = document.body.querySelector("#hoge");
```

[element.querySelector](
https://developer.mozilla.org/ja/docs/Web/API/Element.querySelector)もあります。


## 走査

### [Node](https://developer.mozilla.org/ja/docs/Web/API/Node)インターフェース
DOMはツリー構造です。Nodeインターフェースには、ツリー構造の構成要素を走査するためのプロパティがあります。
Document、Element、TextNodeが本インターフェースを持ちます。


#### 親ノード
1. [parentNode](https://developer.mozilla.org/ja/docs/Web/API/Node.parentNode) 親ノード


#### 子ノード

1. [childNodes](https://developer.mozilla.org/ja/docs/Web/API/Node.childNodes) 子ノードの collection
1. [firstChild](https://developer.mozilla.org/ja/docs/Web/API/Node.firstChild) 最初の子ノード。子ノードがなければ null 
1. [lastChild](https://developer.mozilla.org/ja/docs/Web/API/Node.lastChild) 最後の子ノード。子ノードがなければ null


#### 兄弟ノード

1. [nextSibling](https://developer.mozilla.org/ja/docs/Web/API/Node.nextSibling) 次のノード。なければnull
1. [previousSibling](https://developer.mozilla.org/ja/docs/Web/API/Node.previousSibiling) 前のノード。なければnull

ただし、これらのAPIではElementとTextNodeを両方を取得します。


### [ParentNode](https://developer.mozilla.org/en-US/docs/Web/API/ParentNode)インターフェース

子ノードのうち、Elementだけを取得する場合はParentNodeインターフェースのプロパティを使用します。
Element、Document、DocumentFragmentが本インターフェースを持ちます。

1. [children](https://developer.mozilla.org/en-US/docs/Web/API/ParentNode/children) 子Elementの collection
1. [firstElementChild](https://developer.mozilla.org/en-US/docs/Web/API/ParentNode/firstElementChild) 最初の子Element。子Elementがなければ null 
1. [lastElementChild](https://developer.mozilla.org/en-US/docs/Web/API/ParentNode/lastElementChild) 最後の子Element。子Elementがなければ null

### [NonDocumentTypeChildNode](https://developer.mozilla.org/en-US/docs/Web/API/NonDocumentTypeChildNode)インターフェース

兄弟ノードのうち、Elementだけを取得するにはNonDocumentTypeChildNodeインターフェースのプロパティを使います。
Element、CharacterDataが本インターフェースを持ちます。

1. [nextElementSibling](https://developer.mozilla.org/en-US/docs/Web/API/NonDocumentTypeChildNode/nextElementSibling) 次のElement。なければnull
1. [previousElementSibling](https://developer.mozilla.org/en-US/docs/Web/API/NonDocumentTypeChildNode/previousElementSibling) 前のElement。なければnull

## 参考リンク
[[DOM連載①] これが使えなきゃ始まらない DOMで要素の参照を使いこなす - WEBサービス構築ブログ](http://akioblog.com/2013/03/07/756/)
Web版のTwitterやFacebookページを公式iPhone/iPadアプリで開きなおすブックマークレット

[Ohajiki Web Browser](http://ohajiki.ios-web.com)を開発している福山です。

以下はiPhone/iPadのSafariや他のブラウザアプリで開いているTwitterやFacebookのページを、それぞれの公式アプリで開くというブックマークレットです。ユーザーさんからのご要望があったので書いてみましたが、修正や注意点などありましたらコメント欄に宜しくお願いします。

## ブックマークレット

### Twitter
```js
javascript:(function()%7Bvar%20url%20=%20location.href;if%20(/%5C.twitter%5C.com/.test(url))%20%7Bvar%20result;if%20(/%5C/status%5C//.test(url))%20%7Bvar%20status%20=%20url.replace(/.+%5C/status%5C/(%5B0-9%5D+).*/,%20'$1');if%20(/%5CS/.test(status))%20%7Bresult%20=%20'twitter://status?id='+status;%7D%7D%20else%20%7Bvar%20user%20=%20url.split('/')%5B3%5D;if%20(/%5CS/.test(user))%20%7Bresult%20=%20'twitter://user?screen_name='+user;%7D%7Dif%20(result)%20%7Blocation.href%20=%20result;%7D%7D%7D)();
```

### Facebook
```js
javascript:(function()%7Bvar%20url%20=%20location.href;if%20(/%5C.facebook%5C.com/.test(url))%20%7Bvar%20openInFacebook%20=%20function(id)%20%7Bvar%20fbURL%20=%20'fb://profile/'+id;location.href%20=%20fbURL;%7D;if%20(!/id%5C=/.test(url))%20%7Bvar%20splited%20=%20url.split('/');var%20user%20=%20splited%5Bsplited.length-1%5D;user%20=%20user.replace(/(.+?)%5B?%23%5D.*/,%20'$1');if%20(!/%5CS/.test(user))%20return;if%20(/%5E%5B0-9%5D+$/.test(user))%20%7BopenInFacebook(user);return;%7Dvar%20xhr%20=%20new%20XMLHttpRequest();xhr.open('get',%20'http://graph.facebook.com/'+user);xhr.onload%20=%20function%20(e)%20%7Bvar%20o%20=%20JSON.parse(xhr.responseText);openInFacebook(o.id);%7D;xhr.send();%7D%20else%20%7Bvar%20id%20=%20url.replace(/.+id%5C=(%5B0-9%5D+).*/,%20'$1');openInFacebook(id);%7D%7D%7D)();
```

## 元のソースコード

URLスキームを使って開くのですが、その前にユーザーやページ固有のIDを取得する必要があります。複数あるURL構造に対応出来ていないかもしれません。もっとスマートな方法がありましたら是非とも教えてください。

### Twitter
```js
(function(){
  var url = location.href;

  if (/\.twitter\.com/.test(url)) {
    var result;

    if (/\/status\//.test(url)) {
      var status = url.replace(/.+\/status\/([0-9]+).*/, '$1');
      if (/\S/.test(status)) {
        result = 'twitter://status?id='+status;
      }
    } else {
      var user = url.split('/')[3];
      if (/\S/.test(user)) {
        result = 'twitter://user?screen_name='+user;
      }
    }

    if (result) {
      location.href = result;
    }
  }
})();
```

### Facebook

```js
(function(){
  var url = location.href;

  if (/\.facebook\.com/.test(url)) {

    var openInFacebook = function(id) {
      var fbURL = 'fb://profile/'+id;
      location.href = fbURL;
    };

    if (!/id\=/.test(url)) {

      var splited = url.split('/');
      var user = splited[splited.length-1];
      user = user.replace(/(.+?)[?#].*/, '$1');
      if (!/\S/.test(user)) return;

      if (/^[0-9]+$/.test(user)) {
        openInFacebook(user);
        return;
      }

      /* URLからユーザIDが取れなかったので割り出し */
      var xhr = new XMLHttpRequest();
      xhr.open('get', 'http://graph.facebook.com/'+user);
      xhr.onload = function (e) {
        var o = JSON.parse(xhr.responseText);
        openInFacebook(o.id);
      };
      xhr.send();

    } else {
      var id = url.replace(/.+id\=([0-9]+).*/, '$1');
      openInFacebook(id);
    }
  }

})();
```
PHPからTwitterツイート（2015年2月版）

##概要
Twitter の bot をつくってみようと、 TwitterOAuth をつかって、PHPからツイッターにツイートする、というのを
http://webkaru.net/php/twitter-bot/
http://qiita.com/rana_kualu/items/357a031c0453a3538ad3
http://qiita.com/ltd/items/cb25853cabbaf98e456c
などを参考にやってみようとしたら、意外とそのまま動かなかったので、まとめます。
※上記記事が間違っているのではなく、以前から何か仕様がかわったのだろう、という仮定から2015年2月版とつけました。

##準備
###twitterのアカウント作る
省略

###開発サイトでアプリケーションを作る
上記記事などで紹介されている
https://dev.twitter.com/
にアクセスすると、よくわからなくて迷う。。。
![スクリーンショット 2015-02-20 08.42.39.png](https://qiita-image-store.s3.amazonaws.com/0/24420/b25e2134-143e-09cf-a722-0d9213132412.png)

https://apps.twitter.com/
にアクセスするのが正解。
![image](https://qiita-image-store.s3.amazonaws.com/0/24420/cde7aab1-543b-6e5b-c606-1d79dbeebd76.png)

「Create New App」からアプリ作成。（キャプチャは１つ作ってあります。）

・Consumer Key
・Consumer Secret
・Access Token
・Access Token Secret

の４つが必要になるが、これはたいして迷わずつくれるので、ここでは省略。

１点注意としては、デフォルトで、Access level が「Read Only」になっているが、これだとツイートできないので、「Read and Write」に変更する

##PHPコード
###TwitterOAuthのダウンロード
![image](https://qiita-image-store.s3.amazonaws.com/0/24420/e70ea105-3303-9a63-ffaa-b5adc761744d.png)
https://github.com/abraham/twitteroauth
このライブラリをまるごとダウンロードする。
Gitとかよくわからなくても、右側の「Download ZIP」ボタンからダウンロードすればOK

ダウンロードしたファイルを解凍すると、「twitteroauth-master」というフォルダ名なので、「twitteroauth」にリネーム

─ tweettest.php ←これからつくるファイル
─ [twitteroauth] フォルダ
　└ autoload.php など

という階層になるようにする。

###ツイートするコード
上記フォルダ構造とした場合の tweettest.php のコードです。

```php:tweettest.php
<?php

// OAuthライブラリの読み込み
require "twitteroauth/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;

//認証情報４つ
$consumerKey = "XXXXXX";
$consumerSecret = "XXXXXX";
$accessToken = "XXXXXX";
$accessTokenSecret = "XXXXXX";

//接続
$connection = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);

//ツイート
$res = $connection->post("statuses/update", array("status" => "テストメッセージ"));

//レスポンス確認
var_dump($res);

```

これでうまくいきました。

ライブラリの読み込みあたりが、

```php
require_once('twitteroauth/twitteroauth.php');
```

となっている記事が多いのですが、そもそもこんなファイルがないので、仕様変わったのではないかと思っています。

あと、連続してまったく同じテキストをツイートするとはじかれるようなので、上記コードのまま何度も実行しているとうまくいかなくなるかもしれません。


上記だけできれば、ランダムにツイート文言選んで、cron 実行、という感じで bot完成するかと。
【SQLite】"database is locked"というエラーが出たときの原因と対処

#はじめに
SQLiteを使っていたら初めて`"database is locked"`というエラーが出てきて戸惑っていたらあるサイトの記事に助けられたので、メモ。

* 参考サイト：[SQLite を使ってみる](http://www.antun.net/tips/api/sqlite.html)

#原因
上記サイトを参考に今回なんで自分が`"database is locked"`というエラーに見まわれたかと思ったら、C++でデータベースにアクセスしている最中の処理でエラーが出たので`control+C`で強制終了させたことで、`./a.out`のDBとのセッションが切れてなかったからみたいです(^^;)
あまりよろしくはなかったかもしれないですが、ターミナルを閉じることで強制的に./a.outを終了させ、新しくターミナルを開いて`sqlite3`コマンドでさきほど`"database is locked"`というエラーが出たDBに接続して操作したら今度はエラーが出ずに扱えました。
まぁ、とりあえず良かった(´Д｀｡)
Zendframework2.3.3でjoinをする時、同じcolumnが2個あってダメだぜって言われるエラーの解消方法

#### zendframework2(zf2)でmodelでjoinをしていると、以下error文が出る
```
 Statement could not be executed (42S21 - 1060 - Duplicate column name 'id')
```

#### 原因は
　「joinした時に、2つのテーブルに同じcolumn名が存在するため」
　同じの2つはダメだぜ、と上のようなエラー文が出てしまう

#### case study
　・テーブル1
　　　ーTabel名：Cost
　　　ーColumn：id, user_id, cost
　　　ーデータ：1, 1, 100
　・テーブル2
　　　ーTable名：User
　　　ーColumn：id, name, email
　　　ーデータ：1, taro, taro@example.com
　というテーブルが存在したとする。
　これらを以下のようにjoinさせてみる

```
        $select = $sql->select();
        $select->from('User')
        ->join('Cost','Cost.user_id = User.id");
```

このとき、何もしないと、実質view側には
```
(id => 1, name => taro, email => taro@example.com, id => 1, user_id=>2, cost=>100)
```
が送られるため
```
 Statement could not be executed (42S21 - 1060 - Duplicate column name 'id')
```
というエラーが出てしまう。

そこで、以下のようにjoinの後に
　　array('変更後の名前'　=> '元々のcolumn名')
を追加してあげる
```
        $select = $sql->select();
        $select->from('User')
        ->join('Cost','Cost.user_id = User.id", 
            array('cost_id' => 'id',
                )
            );
```

するとview側では
```
(id => 1, name => taro, email => taro@example.com, cost_id => 1, user_id=>2, cost=>100)
```
と
joinされる側のテーブルのcolumn名を変更して送られるので
本エラーが回避できる
Rails - 長い文字列を省略して表示する

モデルが属性として持っている長い文字列を省略して、「隣の客はよく柿食う...」のように表示したい。

こんな時は、モデル側で省略後の文字列を返すメソッドを定義して、ビューからそれを呼び出せば良いと考えてました。

```rb:app/models/hoge.rb
class Hoge < ActiveRecord::Base
  def short_description
    description[0, 9] + '...'
  end
end
```

```erb:app/views/hoge/index.html.erb
<%= @hoge.short_description %>
```

しかし、表示に関わることをモデルに書くのはどうなんだろうという気がして、ヘルパーメソッドを作った方がいいんじゃないかと思いました。
そして調べてみたら、`truncate`というメソッドを見つけました。

```erb:app/views/hoge/index.html.erb
<%= "This is a pen. That is a desk.".truncate(20) %>
<%# "This is a pen. Th..." %>
```

ActiveSupportでStringクラスに追加されたメソッドです。
オプションは以下のような感じです。

|オプション|説明|デフォルト|
|:-------|:---|:---|
|:omission|省略された文字列の後ろにつける文字列|...|
|:separator|区切り文字。中途半端なところで文字列が切れないようにする。|なし|

```erb:app/views/hoge/index.html.erb
<%= "This is a pen. That is a desk.".truncate(24) %>
<%# "This is a pen. That i..." %>

<%= "This is a pen. That is a desk.".truncate(24, omission: '~~~') %>
<%# "This is a pen. That i~~~" %>

<%= "This is a pen. That is a desk.".truncate(24, separator: ' ') %>
<%= "This is a pen. That is a desk.".truncate(24, separator: /\s/) %>
<%# "This is a pen. That..." %>

<%= "This is a pen. That is a desk.".truncate(24, separator: '.') %>
<%# "This is a pen..." %>
```

ヘルパーメソッドにもありました。省略後の文字数がオプションになっています。

```erb:app/views/hoge/index.html.erb
<%= truncate(@hoge.description, length: 10) %>
```

|オプション|説明|デフォルト|
|:-------|:---|:---|
|:length|省略後の文字列長|30|
|:omission|上と同じ|...|
|:separator|上と同じ|なし|
|:escape|HTMLエスケープ(falseを指定するとエスケープしない)|true|

ブロックを渡すと、ブロックの戻り値が、省略後文字列の末尾に追加されます。

```erb:app/views/hoge/index.html.erb
<%= truncate(@hoge.description) do %>
  <p>(省略されました。続きを読むには<%= link_to 'ここ', ... %>をクリックしてください。<p>
<% end %>
```
Androidアプリ「アプリ間共有の助け」公開

![ic_launcher.png](https://qiita-image-store.s3.amazonaws.com/0/24511/219450ca-5534-3df4-6b29-e064fa011167.png) ![ic_launcher.png](https://qiita-image-store.s3.amazonaws.com/0/24511/7e0a508e-3d4b-d4ac-3246-890186f99186.png)
このほど、自作Androidアプリ「アプリ間共有の助け」というアプリを公開させていただきました。Androidにおけるアプリ間のデータ共有を少しだけ便利にするアプリです。よろしければ、お使いください！

# はじめに
みなさん、Android端末のスマホを使っていると、ちょっとだけ使いにくいな～と思うような機能の1つや2つありますよね？ 私は、各アプリの共有メニューを選択し、共有先のアプリを選択するダイアログが出たときに、ちょっとだけ使いにくいな～と、いつも思っていました。ダイアログでは、沢山のアプリが綺麗に並んでいるのですが、私が選択したいアプリは、ずいぶんと下の方にあったりするのです。毎回、スクロールさせるのが煩わしいのです。

そして、Google Playを探すと、共有メニューをカスタマイズできるアプリがいくつもあることを知り、使ってみました。ですが、カスタマイズする手間が煩わしかったりして、自分にはしっくりきませんでした。

であれば、作ってしまえ！ ということで今回のアプリを作成しました。（そんなわけなので、かなり自分勝手なアプリですね。）

# 主な特徴
共有先アプリの選択時に、よく使用するアプリを先頭に表示します。（Android標準機能では、使用頻度を考慮してくれません。）

![アプリ選択画面1B_s.png](https://qiita-image-store.s3.amazonaws.com/0/24511/743da734-08bf-f248-4001-d5ae54b19304.png)

特定の共有先アプリを「標準」として設定することで、選択画面をスキップして、共有先アプリを起動します。標準設定は、共有元アプリ、共有の種類ごとに設定可能です。（Android標準機能では、共有元によらず、共有の種類のみでしか設定できません。）

標準設定した共有先アプリを解除するのも簡単です。

詳細＆ダウンロードは、[こちら](https://play.google.com/store/apps/details?id=com.kurukurupapa.appsharehelper)です。

# プログラム
このアプリですが、プログラムをGitHubで公開しています。よろしければ、ご覧下さい。

[kurukurupapa/AndroidAppShareHelper](https://github.com/kurukurupapa/AndroidAppShareHelper)

# リンク

[アプリ間共有の助け - Google Play の Android アプリ](https://play.google.com/store/apps/details?id=com.kurukurupapa.appsharehelper)

[kurukurupapa/AndroidAppShareHelper - GitHub](https://github.com/kurukurupapa/AndroidAppShareHelper)
IchigoJamでバイオリズムを描く


## バイオリズムとの出会い
昔々、[バイオリズム](http://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%82%AA%E3%83%AA%E3%82%BA%E3%83%A0)というのが流行った時期がありました（笑）
その頃、ちょうど BASIC が動くポケットコンピュータが登場していたので、その上で動作するバイオリズム・グラフィックというプログラムを投稿して、まんまとポケコンライブラリーという本を手に入れたものです。

## IchigoJam で作ってみよう
[「IchigoJam - BASICプログラミング専用こどもパソコン」](http://ichigojam.net/) で BASIC を思い出し懐かしい思いをしていましたが、最近、IchigoJam に EEPROM へのプログラムの書き込み／読み出しができるようになったので、少し大きなプログラムを書いてみようという気になり、題材として昔を思い出してバイオリズム・グラフィックを選びました。
１MBのEEPROMには、127本のプログラムが保存できるし、嬉しいのは IchigoJam 本体のファームウェアをバージョンアップなどで書き換えてもプログラムが消えないこと。以前は3本しか保存できず、折角打ち込んでもファームウェアを書き換えると消えてしまうので、長いプログラムを作ろうという気にはなかなかならなかったが、消えないで残るのなら...という気になったのだった。
![biorhythm_SCR.png](https://qiita-image-store.s3.amazonaws.com/0/16491/5160347e-04b9-1822-2af6-dc5173580d67.png)

## コンバージョンできない（泣）
IchigoJam の BASIC インタプリタには次のような制約があります。
* 数学関数が無い（グラフを書くのに SIN 関数が使えない）
* 数値は整数のみ
* 数値の制限値（-32,767 〜 32,767）
* メモリー制約（プログラムは 1KB以内）
実数演算や数学関数が使えないため、ポケットコンピュータ版の BASIC プログラムをコンバージョンすることを諦め、新規に作ることにしました。

## 工夫したこと
前述の制約をクリアするために次のような工夫をしました。
### SIN関数の代わりに配列に値をセットして使う
0度〜360度までを10度刻みに SIN の値を画面上の縦の座標に変換したものを配列に入れておき、それぞれの周期（P:23、S:28、I:33）に合わせて取り出して使うようにした。
### 誕生日から目的の月までの日数計算
ポケットコンピュータのプログラムでは、バイオリズムを作成する年月と誕生日の年月、それぞれの基準年からの通算日数を計算し、その差から通算日数を計算していたのですが、値の制約（32,767）でこの方法が使えず、作成年月と誕生日の年月の差分を直接計算するようにした。さらに計算式の途中結果も小数点以下が切り捨てられ整数化されるため、それを考慮した式にした。ま、INT関数が不要という利点も^^;
### 誤差補正の手抜き
日数の最大値（32,767）は、89.7年に相当するので、うるう年の計算は単純に4年に1回とし、100年、400年ルールは無視した。また、うるう年該当年なのかどうかの判定も省略しているので、誕生日からの日数計算ではプラスマイナス1日の誤差出る場合があります。

##  ソースコード
前置きが長くなりましたが、ソースコードは次のとおりです。サイズはぎりぎりの990バイト ^^;
IchigoJam の BASIC 言語仕様は「[IchigoJam BASIC リファレンス](http://ichigojam.net/IchigoJam.html)]」を参照してください。
なお、このプログラムは89年以上はサポートしていませんし、バイオリズムの値も保証していません^^;　（人のリズムは外部要因や健康・精神状態で変動するはずですので、誕生日から正確にこれらの周期が繰り返されるはずはないと、私も思っていますし（笑））
ということを、前提にIchigoJam をお持ちでしたら、遊んでみてください。
もしかすると、SINカーブの書き方や、日数計算のしかたは参考になるかもしれません。
だれかの参考になれば私も嬉しい。


``` BASIC:Biorhythm.bas
5 REM Biorhythm for IchigoJam by Y.Nomura
10 [0]=12:[1]=10:[2]=9:[3]=7:[4]=6:[5]=5:[6]=4:[7]=4:[8]=3:[9]=3
20 [10]=3:[11]=4:[12]=4:[13]=5:[14]=6:[15]=7:[16]=9:[17]=10:[18]=12:[19]=14
30 [20]=15:[21]=16:[22]=18:[23]=19:[24]=20:[25]=20:[26]=21:[27]=21:[28]=21:[29]=20
40 [30]=20:[31]=19:[32]=18:[33]=16:[34]=15:[35]=14
50 CLS:?"BIRTHDAY YYYY";:INPUT Y
60 CLS:?"BIRTHDAY MM";:INPUT M
70 CLS:?"BIRTHDAY DD";:INPUT D
80 CLS:?"KIBOU YYYY";:INPUT K
90 CLS:?"KIBOU MM";:INPUT L
100 CLS:?" BIRTHDAY:";Y;"/";M;"/";D;"  KIBOU:";K;"/";L
110 I=2
120 LC1,I:?"|"
130 IF I<=22 THEN I=I+1:GOTO 120
140 LC1,12:?"+"
150 I=1
160 LCI+1,12:? (I%10)
170 IF I<31 THEN I=I+1:GOTO 160
180 LC1,24
190 IF M<3 THEN M=M+12:Y=Y-1
200 IF L<3 THEN L=L+12:K=K-1
210 F=(306*M+5)/10+D:T=(306*L+5)/10
220 IF F>T THEN T=T+365:K=K-1
230 N=365*(K-Y)+(K-Y)/4+T-F
240 I=1
250 LCI+1,[(N+I)%23*36/23]:?"P"
260 LCI+1,[(N+I)%28*36/28]:?"S"
270 LCI+1,[(N+I)%33*36/33]:?"I"
280 IF I<31 THEN I=I+1:GOTO 250
290 LC1,24:?" DAYS:";N
300 END

```
xkbで無変換にctrlを割り当てる

僕はここ５年位、無変換にctrl、変換にenterを割り当てて開発をしています。(Mac)
ubuntuでどうやるのかわかっていなくて調べてできたので書いておきます。

2015年現在の新し目のubuntuでは、キーマップの変更はxkbを使うのが推奨されているようなので、それを使います。

https://wiki.archlinux.org/index.php/Keyboard_Configuration_in_Xorg_(日本語)

~/.xkbディレクトリに以下のようにファイルを設置して

```sh
% tree
.
├── keycodes/
│   └── mykeycodes
├── keymap/
│   └── mykbd
└── symbols/
    └── myswap

```

ファイルの中身はこんな感じ


```sh
% cat keycodes/mykeycodes
xkb_keycodes "mycodes" {

    <NFER> =   102;             // Muhenkan
    <XFER> =   100;             // Henkan
};



% cat keymap/mykbd
xkb_keymap {
  xkb_keycodes  { include "evdev+aliases(qwerty)+mykeycodes(mycodes)" };
  xkb_types     { include "complete" };
  xkb_compat    { include "complete+japan" };
  xkb_symbols   { include "pc+jp(106)+myswap(swapkeys)" };
  xkb_geometry  { include "pc(jp106)" };
};

% cat symbols/myswap
partial modifier_keys
xkb_symbols "swapkeys" {
  replace key <LCTL>  { [ Caps_Lock ] };
  replace key <CAPS> { [ Control_L ] };

  replace key <NFER> { [ Control_L ] };
  modifier_map Control { <NFER> };

  replace key <XFER> { [ Return ] };

  replace key <AB11> { [ underscore ] };

};


```

重要そうなのは、ディフォルトのkeycodesにNFERとXFERが入っていないので、 `keycodes/mykeycodes` で、それを追加する。
102やら100やらのkeycodeは xevなどで調べる。多分日本語キーボードならほぼ同じ。

`keymap/mykbd` ではmykeycodesと後述のmyswapを読み込む

`symboles/myswap` で実際に置き換えるキーを指定する。

上の例では、

- ctrlとcapsを入れ替え
- 無変換をctrl
- 変換を改行
- 右下のBackslashをunderscoreへ

としている。

で、これらを起動時に読み込ませないといけないのだけど、`.xinitrc` や `.xsessionrc` やらに起動スクリプトを書いてみたけど、
ディスプレイが見つからないなどのエラーで実行できなかったので、起動時に手動で実行するスクリプトにした。
一緒にSandSの設定も読み込む

SandSの設定は以下を参考に。
http://qiita.com/ychubachi@github/items/95830219f1bdf912280b
https://gist.github.com/xr0038/11311831

```sh
# xkb_startup.sh

test -f $HOME/.xkb/keymap/mykbd && xkbcomp -I$HOME/.xkb $HOME/.xkb/keymap/mykbd $DISPLAY 2> /dev/null

# sands

xmodmap -e 'keycode 255=space'
xmodmap -e 'keycode 65=Shift_L';
PID=`pidof xcape`
if [ -z ${PID} ]; then
  xcape -e '#65=space'
fi

```
このスクリプトを起動のたびにダブルクリックする。

本当は起動時に勝手に設定されて欲しくて、これわからないとスリープするたびにセッション切れてスクリプト実行し直さないといけないのでなんとかしたい。
アカウント情報が正しいのにデータベース接続エラー

※対象のバージョンは4.1です

WordPressインストール時にwp-config.phpに正しいデータベース接続情報を入力してもinstall時にデータベース接続エラーが表示される場合があります

その調査・対処方法を記します

#なぜデータベースエラーが起こるかを調査する
データベース接続処理はwp-admin/install.phpを見ると

```php:wp-admin/intall.php
require_once( ABSPATH . WPINC . '/wp-db.php' );
```

で行っているようなのでその処理を見てみます

wp-includes/wp-db.phpの578行目にコンストラクタが定義されています

```php:wp-includes/wp-db.php
    public function __construct( $dbuser, $dbpassword, $dbname, $dbhost ) {
        register_shutdown_function( array( $this, '__destruct' ) );

        if ( WP_DEBUG && WP_DEBUG_DISPLAY )
            $this->show_errors();
```

#テスト用コードの実行

コンストラクタの実装はわかったので、wp-db.phpと同じディレクトリにテストコードを書いてみます

```php:
<?php
  require('./wp-db.php');
  $dbuser = 'wordpress';      #データベースに設定したユーザを指定してください
  $dbpassword = 'wordpress';  #上のユーザのパスワード指定してください
  $dbname = 'wordpress';      #データベース名を指定してください
  $dbhost = 'localhost';
  $db = new wpdb($dbuser, $dbpassword, $dbname, $dbhost);
```

そしてこちらを実行してみます
すると以下のようなエラーが表示されます

```
PHP Warning:  mysql_connect(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /usr/local/apache2/htdocs/wp/wp-includes/wp-db.php on line 1416
```

ん？/tmp/mysql.sockにsocketファイルを探しに行ってるようです
実際にsocketファイルがどこにあるのか確認します

```
$ ps -ef | grep mysql
root     15423     1  0 Feb11 ?        00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
mysql    15642 15423  0 Feb11 ?        00:06:43 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
```

/var/lib/mysql/mysql.sockになってますね。。。

#socketファイルのパス指定方法調査と修正
もう一度wp-db.phpを見てみると1370行目に

```php:wp-db.php
$port_or_socket = strstr( $host, ':' );
```

という記述がある。ということは$dbhostを

```
localhost:/var/lib/mysql/mysql.sock
```

と指定すればよいということになります
テストコードで動作確認をし、エラーなくインスタンスの生成ができることを確認しました
※$port_or_socketという変数名ですがlocalhost:3306では動作しませんでした

#wp-config.phpの修正

```php:wp-config.php
define('DB_HOST', 'localhost:/var/lib/mysql/mysql.sock');
```

に修正してからインストールを実行するとエラーが解消されました
Rubyの``(コマンド出力リテラル)でコマンドの標準入力に文字列を渡す

(追記: なんだこのうんこ記事...(唖然))

各行が100未満の数値を持つ10行の文字列を作成した。

```rb
numbers = Array.new(10){ rand 100 } * "\n"

puts numbers
```

>17
32
63
2
70
12
84
7
87
52

この文字列を`sort -n`コマンドに渡してソートしたいとする。
(ただの例え話なので「Rubyでやれ」とか言わない。)

適当にコマンドの実行結果を得るなら「``」「%x||」のコマンド出力リテラルが便利。
だけどこれらには標準入力を使う機能がないから普通はこんな感じと思う。たぶん。

```rb:open
sorted = open("|sort -n", "r+") do |io|
  io.puts str
  io.close_write
  io.read
end

puts sorted
```

```rb:IO.popen
sorted = IO.popen("sort -n", "r+") do |io|
  io.puts str
  io.close_write
  io.read
end

puts sorted
```

```rb:Open3
require 'open3'

sorted = Open3.popen3("sort -n") do |stdin, stdout, stderr, wait_thr|
  stdin.puts str
  stdin.close
  stdout.read
end

puts sorted
```


# ＿人人人人人人＿
# ＞　めんどい　＜
# ￣Y^Y^Y^Y^Y￣


----

シェルのヒアドキュメントを使えば「``」でも標準入力に文字列を渡せる。

**使い捨てスクリプトなら** だいじょぶだいじょぶ。


```rb:コマンド出力リテラル
puts `sort -n <<X\n#{numbers}`
```

>2
7
12
17
32
52
63
70
84
87

終端識別子と改行のあとに、渡したい文字列を置くだけ。
識別子は「X」にしたけど文字列の中に同じ行がないなら適当でだいじょぶ。

ほんとは「X」で閉じなきゃいけないけど「``」は勝手に閉じてくれるみたい。
たぶんだいじょぶだいじょぶ。

----

Rubyの中で書いた他のスクリプトのソースを今すぐ実行しないと死ぬ時などに便利。

```rb:AppleScript_in_Ruby.rb
# AppleScriptのソースを文字列に入れる
src = <<APPLESCRIPT

tell application "System Events"
  set greeting to "ドーモ、#{ENV["LOGNAME"]}=サン。"
  display dialog greeting
end tell

APPLESCRIPT

# 実行
`osascript <<XXX\n#{src}`
```

----
シェルのヒアドキュメントとRubyのヒアドキュメントを組み合わせるとさらにキモい。

```rb
`osascript <<XXX\n#{<<APPLESCRIPT}`

tell application "System Events"
  set greeting to "ドーモ、#{ENV["LOGNAME"]}=サン。"
  display dialog greeting
end tell

APPLESCRIPT
```

----
意味ない気がするけどRubyのヒアドキュメントからそのまま実行。

```rb
<<`APPLESCRIPT`
osascript <<XXX

tell application "System Events"
  set greeting to "ドーモ、#{ENV["LOGNAME"]}=サン。"
  display dialog greeting
end tell

APPLESCRIPT
```
----
DATA.readも便利。

```rb
`osascript <<XXX\n#{DATA.read}`

__END__
tell application "System Events"
  display dialog "hello hello"
end tell
```

----
追記: さらにパイプに渡したいときは順番に注意。
渡す文字列はかならずいちばん最後。

```rb
src = "3\n2\n1"

sorted = `cat <<X | sort -n \n#{src}`

puts sorted
#=> "1\n2\n3\n"
"
```

----

(追記: 編集リクエストありです！)

# 参考

[bashのヒアドキュメントを活用する - Qiita](http://qiita.com/take4s5i/items/e207cee4fb04385a9952)
要素の表示/非表示を切り替えるChrome Extensionを作った

開発時にdisplay: none;の要素があると、どんな要素なのか確認するのがちょっと面倒です。例えばモーダルとかドロップダウンとか。
DevToolsを開いて見つけて要素を表示しても、リロードするとまた消えてしまうし面倒くさい。

そこで、要素の表示/非表示を切り替えることができる拡張機能を作ってみました。

## インストール
githubからインストールします。
[konweb/extension-display-switch](https://github.com/konweb/extension-display-switch)

## 使い方
ダウンロードしたフォルダ内に`.crx`というファイルがあるので、Chormeの拡張機能のページにドラッグ&ドロップすれば追加されます。
追加したら、使用したいページでアイコンをクリックで実行できます。

![sample.gif](https://qiita-image-store.s3.amazonaws.com/0/48677/9b339539-1ea6-b1fd-88fa-4665fac7557e.gif)


今の段階では、displayのみに対応していて、opacityやvisivilityなどには対応していません。今後不便だと思ったら対応していこうと思っています。

また、表示されなくてもいい要素が表示されてしまったりとちょこちょこ不具合があるので、その都度修正していこうと思う。
CoreDataでSerious application error


**ここに記載している内容は、私が出くわした時の解決法且つ手っ取り早いやり方です。抜本的な対策ではないのでご注意ください**

UITableViewの

```
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
```

の中でCoreDataのUpdateを行ったら以下のようなエラーが出て、すっぽりドツボにハマりました

```
CoreData: error: Serious application error.  Exception was caught during Core Data change processing.  
This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification.  
Invalid update: invalid number of rows in section 0.  
The number of rows contained in an existing section after the update (5) must be equal to the number of rows contained in that section before the update (5), 
plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out). with userInfo (null)
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0.  The number of rows contained in an existing section after the update (5) must be equal to the number of rows contained in that section before the update (5), plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).'
```

色々書いてありますが、簡単に言うと、更新後のUITableViewのメソッドが、CoreDataのfetchedResultsControllerを呼ぶのですが、
それを読み込んだ時点で、ManagedObjectContextと不整合が起きた為、この手のエラーが発生しました。

なので、私が出くわした際は、以下のメソッドの中身を変更しました。

```
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
       atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
      newIndexPath:(NSIndexPath *)newIndexPath
{
	case NSFetchedResultsChangeDelete:
			/*処理*/
            break;
    case NSFetchedResultsChangeMove:
    	[self.tableView reloadData];
            break;
}
```

今作っているアプリは、リアルタイムにCellの更新を行わなくても良いものなので、ここでのcell更新を解除し、endUpdate内でreloadDataを行うようにしました。

```
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
    @try {
        [self.tableView endUpdates];
    }
    @catch (NSException *exception) {
		/*error!*/
    }
    @finally {
        
    }
}
```

リアルタイムverも、取り掛かって見ようと思ったのですが、時間切れなのでここまでで。
Go入門 vol.2 〜Go言語の基本文法（main パッケージ、インポート、組込み型、変数）〜

## はじめに

Go 言語に入門します。第 2 回目になります。
ひたすら写経です。

教材などについての説明は、
下記リンクの中の Go 入門の第一回目をご参照くださいね。

### Go入門リンク

* [Go入門 vol.1 〜Go言語の特徴〜 - Qiita](http://qiita.com/megu_ma/items/6fad257345af2d748dbe "Go入門 vol.1 〜Go言語の特徴〜 - Qiita")

## 学習内容

今回は、

Go言語の基本文法（main パッケージ、インポート、組込み型、変数）

について、簡単にまとめていきたいと思います。

## Go言語の基本文法

hello world のプログラムを元に基本文法を学びます。

```go:hello.go
package main

import (
	"fmt"
)

func main() {
	fmt.Println("hello world")
}
```

### main パッケージ

Go のコードは、パッケージの宣言から始まります。

```go:
package main
```

プログラムをコンパイルして実行すると、
まず main パッケージの中にある main()関数が実行されます。

```go:
func main() {
}
```

### インポート

import は、プログラム内にほかのパッケージを取り込むために使用します。

```go:
import (
	"fmt"
)

func main() {
	fmt.Println("hello world")
}
```

インポートしたパッケージ内へは、パッケージ名にドットをつけてアクセスできます。
上記の例では、fmt パッケージの Println() を使用して出力しています。

どうでもいい私の話ですが、
最初 import のカッコを`()`ではなく`{}`で書いて怒られました・・・（恥）

#### 複数パッケージの取り込み

複数パッケージを取り込む場合は、並べて記述します。

```go:
import (
	"fmt"
	"github.com/meguma/gosample"
	"strings"
)
```

#### オプションの指定

インポートするパッケージ名の前には、いくつかのオプションが指定できます。

```go:
package main

import (
	// プログラム内でのパッケージ名を変更できる
	f "fmt"
	// 使用しないインポートパッケージをコンパイラに伝える（書かないとコンパイルエラー）
	_ "github.com/meguma/gosample"
	// 使用時にパッケージ名を省略できる
	. "strings"
)

func main() {
	// fmt.Println()がf.Println()になり
	// strings.ToUpper()がToUpper()になっている
	f.Println(ToUpper("hello world"))
}
```

### 組込み型

色々あるので、公式などを参考にされたし。

* [The Go Programming Language Specification - The Go Programming Language](https://golang.org/ref/spec#Types "The Go Programming Language Specification - The Go Programming Language")
* [types - GoDoc](https://godoc.org/golang.org/x/tools/go/types "types - GoDoc")


### 変数

変数宣言は、`var 変数名 型` の順番で行います。 

下記の例では、
hello world プログラムの出力メッセージを、
message という string の変数に代入しています。

```go:
var message string = "hello world"

func main() {
	fmt.Println(message)
}
```

#### 一度に複数の宣言と初期化

一度に複数の宣言する場合は、こんな風にも記述できます。

```go:
var foo, bar, buz string = "foo", "bar", "buz"
```

2つ目以降の型を省略する、といった次ような書き方もできます。

```go:
var (
	a string = "aaa"
	b        = "bbb"
	c        = "ccc"
)
```

#### 関数内部での宣言と初期化

変数宣言と初期化を関数の内部で行う場合は、
var と型宣言を省略し、 `:=` という記号を用いることができます。

```go:
func main() {
	// どちらの書き方も同じ意味
	// var message string = "hello world"
	message := "hello world"
	fmt.Println(message)
}
```

この書き方の場合、変数の型は代入する値からコンパイラによって推論されます。
今回は文字列を代入していることから、変数 message の型が string であると推論されます。

#### 定数

変数宣言の `var` を `const` に変えると定数になります。
定数宣言できる型は、組込み型のうち error 以外の型です。

```go:
func main() {
	const Hello string = "hello"
	Hello = "bye" // cannot assign to Hello
}
```

上記のような、定数に対する再代入はコンパイルエラーになります。
（ちなみに、IntelliJ IDE の go plugin は何も言ってこなかった・・・。）

#### ゼロ値

変数を宣言し、明示的に値を初期化しなかった場合、
変数はゼロ値というデフォルト値で初期化されます。

ゼロ値は型ごとに決まっていて、
例えば int のゼロ値は 0 であるため、次のコードは 0 を出力します。

```go:
func main() {
	var i int      // i はゼロ値で初期化
	fmt.Println(i) // 0
}
```

型ごとのゼロ値は次のようになります。

| 型 | ゼロ値 |
|:-----------|:------------|
| 整数型      | 0     |
| 浮動小数点型 | 0.0   |
| bool       | false |
| string     | ""    |
| 配列        | 各要素がゼロ値の配列 |
| 構造体       | 各フィールドがゼロ値の構造体 |
| そのほかの型  | nil |

nil は値がないことを示す値です。
ほかの言語における null などに相当します。


以上、おわり。
python 2.7.9とpypy 2.5.0のファイル書き込み速度比較実験

研究でpythonを使っているのですが，データがGB単位になると計算がなかなか終わらない．
そこで，JITコンパイラを搭載したpypyなるものを使って
ササッと終わらせちゃおうと考えました！！
同じようにコードを書いてみたら，確かに計算の部分はめちゃめちゃ早くなったが，
csvモジュール使ったファイル書き込みに関してはあまり早くなっていない気がする，，
なんでだろうと思ったところ，pypyのページにこんなことが書いてあった

>**Missing RPython modules:** A few modules of the standard library (like csv and cPickle) are written in C in CPython, but written natively in pure Python in PyPy. Sometimes the JIT is able to do a good job on them, and sometimes not. In most cases (like csv and cPickle), we're slower than CPython, with the notable exception of json and heapq.

http://pypy.org/performance.html

マジかよ．と思ってその場はpythonを使ったんですが，やはりpythonでは遅い，，，

公式から遅いと言われているpypyはどれくらい遅いのか気になって今回実験してみました．

それがこれ

```python:test.py
#coding:utf-8

import csv
import time



start = time.clock()
test_sentence = ["which","is","faster","Python","or","Pypy","?"]
iter_list = [100,1000,10000,100000,1000000,2000000,5000000,10000000]
time_list = []

with open("fast_writing.csv","wb")as f:
    writer = csv.writer(f)
    for i in iter_list:
        loop_start = time.clock()
        for j in xrange(i):
            writer.writerow(test_sentence)
        end_time = time.clock() -loop_start
        time_list.append(end_time)

end_loop = time.clock() - start
time_list.append(end_loop)
print "かかった時間は{0}".format(end_loop)

with open("pythonresult.csv","wb")as f:
    writer= csv.writer(f)
    writer.writerow(time_list)
```

![スクリーンショット 2015-02-20 1.03.12.png](https://qiita-image-store.s3.amazonaws.com/0/45154/4fd8a644-9a33-1b7e-4034-8fc4fbc8440f.png)

回数が増えると段々とpypyが早くなっていますね．
確かに1万回程度の書き込みであればpythonの方が早そうです

条件にもよるんでしょうか．こんなしょっぱい実験ではあまり効果が分からないんですかね

しかし書き込み回数が増えると，pypyのほうが早くなっています．
大規模な行列に対して処理をかけるときはpypyの方が調子が良さそうです．
pypyにはnumpyもあるらしく行列処理であればpypyを使って高速に処理するのがいいんじゃないでしょうか．ただし，pypyを使うときには注意すべき点がいくつかあり，怠ると処理時間が無駄に長くなるので気をつけたいですね．
うるう年判定の練習

#問題
>
入力された整数がグレゴリオ暦（いつも使ってるやつ）でうるう年であるか判定せよ

※[こちらのサイト](http://vipprog.net/wiki/exercise.html)から引用

#解答
```ruby:leap_year.rb
# 結果を表示するメソッド
def year_show(current_year, leap_judge)
  # うるう年だった場合
  if leap_judge
    puts "#{current_year}年はうるう年です"
    
  # うるう年ではなかった場合
  else
    puts "#{current_year}年はうるう年ではありません"
  end
end

# 西暦を入力
print "西暦を入力してください : "
YEAR_JUDGE = gets.to_i

# case文でうるう年判定
case
# 400で割り切れたらうるう年
when YEAR_JUDGE % 400 == 0
  year_show(YEAR_JUDGE, true)
  
# 100で割り切れたらうるう年ではない
when YEAR_JUDGE % 100 == 0
  year_show(YEAR_JUDGE, false)
  
# 4で割り切れたらうるう年
when YEAR_JUDGE % 4 == 0
  year_show(YEAR_JUDGE, true)

# それ以外はうるう年ではない  
else
  year_show(YEAR_JUDGE, false)
end
```

#結果
>
西暦を入力してください : 2015
2015年はうるう年ではありません
>
西暦を入力してください : 2016
2016年はうるう年です
Django 導入時に苦戦

1 - sudo pip install python-dotenv
2 - copy .env.example -> .env
3 - sudo pip install -r requirements.txt ([Error] EnvironmentError: mysql_config not found)
4 - sudo brew install mysql
5 - export PATH=$PATH:/usr/local/mysql/bin
6 - sudo pip install MySQL-Python
7 - sudo pip install -r requirements.txt
8 - python manage.py migrate
9 - python manage.py runserver ([Error] return Database.Cursor.execute(self, query, params) django.db.utils.OperationalError: no such table: hosts_listing. [Error] You have unapplied migrations; your app may not work properly until they are applied. Run 'python manage.py migrate' to apply them.)
10 - comment out settings/base.py LINE 89
11 - python manage.py migrate
12 - python manage.py runserver
13 - access to http://127.0.0.1:8000/
14 - got it

* source /usr/local/bin/virtualenvwrapper.sh