OmniAICreator/Qiita-1.07M huggingface dataset:
Wheel Collider の具体的な使い方が意外と解りづらいのでメモ

Wheel Collider を使って車両を作ろうと思い使ってみたが、何故か motorTorque にゼロ以外の値を入れて回した直後に地面にめり込んでしまう。

親子関係がない単独のホイールに至っては、そのまま地面をすり抜けて落っこちていく。

日本語でサイトを調べても、あまり具体的な使い方や解りやすい解説がないので困ってしまい、海外サイトを漁ってようやく最低限の使い方を理解した。


# 要点

* Wheel Collider を追加したオブジェクトの Rigidbody の「Freeze Rotation」には必ずチェックを入れる。


# 何故？

Wheel Collider を追加したオブジェクトを回転させてはならないから。というのも、Wheel Collider は下方向への当たり判定しか取っていない。

http://docs-jp.unity3d.com/Documentation/Components/class-WheelCollider.html
> ホイールの衝突検出は、ローカルな Y 軸を通じて、Centerから下に光線を放つことで実行されます。

http://docs-jp.unity3d.com/Documentation/ScriptReference/WheelCollider.html
> ホイールの衝突検知は center （中心）からローカル座標 Y 軸下向きに Raycast により行ないます。

...この説明で解った人に敬礼したい。自分はさっぱりだった。

要するに直感からは外れるのだが、 Wheel Collider 自体は「地面をすべるように」動くことが前提のようだ。


# じゃあ、見かけ上は回転できないの？

これも、後で読み返したらヒントは書いてあったのだが...回転させてはならないってことを理解してから、初めて意味を察することができた。

http://docs-jp.unity3d.com/Documentation/Components/class-WheelCollider.html
> ホイール コライダ オブジェクトを転動または回転させて、車両を制御しません。ホイール コライダが追加されたオブジェクトは常に車両自体に関連して固定される必要があります。 しかし、ホイールのグラフィック表示を回転および転動させたい場合があります。 これを行う最良の方法は、ホイール コライダと表示されているホイールに対して個々のオブジェクトを設定することです。

要するに「見かけ上回転する担当と、衝突や動き担当の2つのオブジェクトを作れ」ってことみたいで。

幸いこの WheelCollider はコライダとしては魔改造の部類で、色んなデータが取れるようになっているようなので、それで何とかなりそう。

上記サイトでも紹介されている GetGroundHit() を実装したりとか、簡易的なら rpm とかでも実装できるかも。
OpenCV


Opencv
http://docs.opencv.org/trunk/doc/tutorials/introduction/linux_gcc_cmake/linux_gcc_cmake.html

cmake
http://www.wakayama-u.ac.jp/~chen/cmake/cmakecv.html

そのままですが前提.
gcc,OpenCV,CMakeインストール済み。

ステップ
1.DisplayImage.cpp
2.CMake file CMakeLists.txt
3.cmake make
4.Run

Using OpenCV with gcc and CMake
Note We assume that you have successfully installed OpenCV in your workstation.
The easiest way of using OpenCV in your code is to use CMake. A few advantages (taken from the Wiki):
No need to change anything when porting between Linux and Windows
Can easily be combined with other tools by CMake( i.e. Qt, ITK and VTK )
If you are not familiar with CMake, checkout the tutorial on its website.
Steps

Create a program using OpenCV
Let’s use a simple program such as DisplayImage.cpp shown below.

```cpp:DisplayImage.cpp
#include <stdio.h>
#include <opencv2/opencv.hpp>

using namespace cv;

int main(int argc, char** argv )
{
    if ( argc != 2 )
    {
        printf("usage: DisplayImage.out <Image_Path>\n");
        return -1;
    }

    Mat image;
    image = imread( argv[1], 1 );

    if ( !image.data )
    {
        printf("No image data \n");
        return -1;
    }
    namedWindow("Display Image", WINDOW_AUTOSIZE );
    imshow("Display Image", image);

    waitKey(0);

    return 0;
}
```

Create a CMake file
Now you have to create your CMakeLists.txt file. It should look like this:

```CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )
```

Generate the executable
This part is easy, just proceed as with any other project using CMake:

```
cd <DisplayImage_directory>
cmake .
make
```
Result
By now you should have an executable (called DisplayImage in this case). You just have to run it giving an image location as an argument, i.e.:


```
./DisplayImage lena.jpg
```

You should get a nice window as the one shown below:
![kobito.1418230875.688432.png](https://qiita-image-store.s3.amazonaws.com/0/33317/563bcfe4-6ff7-8963-1904-23875dcd32da.png "kobito.1418230875.688432.png")
簡単な結果を返すサーバーを立ち上げる

# ClientのIPアドレスを返す

iPhoneとか開発中に実機のIPアドレスを取得したいことありますよね？
開発中はずっと画面にIPアドレス表示したままにしたいことあるよね！

## PHPのビルトインサーバーを使う

`$ php -S 0.0.0.0:8080 router.php`

```php:router.php
<?php
echo $_SERVER["REMOTE_ADDR"] . "\n";
```

## node.js を使う

`$ node app.js`

```js:app.js
var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
  res.end(ip + '\n');
}).listen(8080);
```
【セキュリティを考える】ログインユーザの制限

サーバセキュリティの第一歩としてサーバにログインできるユーザの制限をかけたいと思います。

環境
OS:CentOS release 6.4 (Final)

やること
<ol><li>root以外のユーザを作る<li>su でrootになれるグループに新規ユーザを追加する<li>rootでのログインを禁止する</ol>



<h2>root以外のユーザを作る</h2>
新しくユーザを作成しそのユーザにパスワードを設定します。

![スクリーンショット 2014-12-11 0.35.25.png](https://qiita-image-store.s3.amazonaws.com/0/58014/ec76e351-8ec7-a5c2-e944-8990f176fa12.png)

パスワードが短すぎたり同じ文字を繰り返したりすると上のSSのように怒られますので注意です。

早速新しくユーザでログインしてみましょう。

![スクリーンショット 2014-12-11 0.38.34.png](https://qiita-image-store.s3.amazonaws.com/0/58014/5c7a2252-aeac-239c-6537-671f9ac6216a.png)

無事にnewUserでログインすることができました。

また、ユーザとパスワードは

```
cat /etc/passwd
```

でも確認可能です。

![スクリーンショット 2014-12-11 0.41.10.png](https://qiita-image-store.s3.amazonaws.com/0/58014/7f454280-b47c-fc53-b6d3-4c8bb299e719.png)

newUserというユーザがいるのがわかります。

<h2>su でrootになれるグループに新規ユーザを追加する</h2>

addgroupコマンドで新しくグループを作成しgpasswdコマンドでパスワードを設定します。

![スクリーンショット 2014-12-11 0.46.29.png](https://qiita-image-store.s3.amazonaws.com/0/58014/f464f50c-0041-4ed6-83c2-5690f377a4c8.png)

usermodコマンドで先ほど作成したユーザ「newUser」をこの新しく作成されたグループ「rootGroup」に加入させます。

![スクリーンショット 2014-12-11 0.50.19.png](https://qiita-image-store.s3.amazonaws.com/0/58014/f1a244bf-2e3d-8664-cee1-62f42dd8cb7a.png)

```
$ cat /etc/group
```

で確認します。

![スクリーンショット 2014-12-11 0.51.07.png](https://qiita-image-store.s3.amazonaws.com/0/58014/02f7bbae-1057-0051-b8fe-7d6dbab1d6a8.png)

newUserがrootGroupに入っているのが確認できました。

さて、rootになれるグループを限定する設定を行います。

```
vi /etc/pam.d/su
```

・・・・・・？？？？？

おっと、もうすでにroot権限になる用のグループが初期で用意されているみたいです。

![スクリーンショット 2014-12-11 1.26.06.png](https://qiita-image-store.s3.amazonaws.com/0/58014/0317d248-6883-d53d-8657-c2f9f0cd1247.png)

「wheel」というグループ名だそうです。

とりあえず初期でコメントアウトされている

```
#auth required pam_wheel.so use_uid
```

という箇所のコメントアウトを外して保存します。

そして

```
$ usermod -G wheel newUser
```

でnewUserをwheelに加入させます。


これでrootになれるグループの設定は終わりです。
このグループに所属していないユーザが

```
$ su
```

で、例え正しいパスワードを入力したとしてもrootになることはできません。


<h2>rootでのログインを禁止する</h2>

```
vi /etc/ssh/sshd_config
```

で設定ファイルを開き、

![スクリーンショット 2014-12-11 0.55.15.png](https://qiita-image-store.s3.amazonaws.com/0/58014/3351344a-26e1-9871-62bd-0aa792df3c5f.png)

初期状態で

```
#PermitRootLogin yes
```

となっている箇所をコメントアウトを外し、noに変えてあげる。
そして

![スクリーンショット 2014-12-11 0.58.17.png](https://qiita-image-store.s3.amazonaws.com/0/58014/9d60dafb-91a9-0816-b3a4-1262e4416e21.png)

初期状態で

```
#PermitEmptyPasswords no
```

となっている箇所のコメントアウトを外す。


以上、簡単ではありますが、サーバのセキュリティ向上に欠かせないログインユーザ制限設定の方法のまとめでした。

最後までお読みいただきありがとうございました。
VirtualDocumentRoot使うとサブドメを自由に作成できるね

# サブドメインをディレクトリっぽく

DocmentRootがずれてると何も出来ない僕です。
そのための設定するためだけnamedのファイルを開いたり、rndc reloadやったりするのはもうこりごりなのです。ちょっと調べてみたら、あっという間に出来ちゃう事がわかったので対応してみました。仮サイトで使うのでbasic認証もおまけでついてます。安心ですね！

##今回設定した条件を書いておきますね。

- URLは、http://VERSION.PROJECT.DOMAIN.JP/
(バージョン・プロジェクト名・自分のドメイン)という順番にします。
- ファイルの実体があるディレクトリ構成は、/home/www/project/version/public/を想定しています。
- basic認証のパスワードは共通する場所（/home/www/.htpasswd）

##順にやってみると動くはずです！
素のApacheは何も設定されてないのかという感じでしたので、一応書いておきます。a2enmodというコマンドでモジュールをアクティブに出来たので、ホント簡単でした。

###1.mod_rewrite追加
「戻りライト」と聞き間違えないようにするためにも追加しておきます。
```
sudo a2enmod rewrite 
```

###2.vhost_aliasを追加（a2enmodで出来るかも？）

VirtualDocumentRootを使うためにはこの設定がミソっぽいです。

```
sudo ln -s /etc/apache2/mods-available/vhost_alias.load /etc/apache2/mods-enabled

```

###3.password認証の設定
一応、仮環境なので、パスワード認証もつけます。Googleさんが見に来ないためにも大切なとこですね。
```
sudo a2enmod authz_groupfile
vi /home/www/.htpasswd
```

###4.confファイル編集

あとは設定ファイルをいじるだけです。

```
sudo vi /etc/apache2/sites-available/000-default.conf 

```
中身を下記のようにします。パスワード制限が不要であれば、<Directory>タグ内は不要なのでもっと簡単ですー（DOMAIN.JPはみなさんのドメインに）

```
　<VirtualHost *:80>
  ServerName web.DOMAIN.JP
  ServerAlias  web.DOMAIN.JP  *.DOMAIN.JP
  VirtualDocumentRoot /home/www/%2/%1/public

  RewriteEngine on
  RewriteMap    lowercase    int:tolower
  RewriteRule   ^/server-status - [L]
  RewriteRule   ^/icons/ - [L]
  RewriteCond   %{HTTP_HOST} ^(.+)\.(DOMAIN.JP)(:(80|443))?$
  RewriteCond   /home/www/%2/ -d
  RewriteRule   ^/(.*)$ /home/www/%2/%1/public/$1


  <Directory /home/www/*/*/public>
    AuthUserFile /home/www/.htpasswd
    AuthGroupFile /dev/null
    AuthName "Secret Area"
    AuthType Basic
    require valid-user

    <Files ~ "^.(htpasswd|htaccess)$">
      deny from all
    </Files>

  </Directory>
</VirtualHost>

```

###5.再起動

サーバを再起動します。今回はreloadでやってしまいますね。
（configtestからのreloadの方がオススメです）

```
sudo service apache2 reload

```


これでイロイロな面倒から解放されるはずです！僕はすごく解放されましたー
Gruntでrsync走らせて、HubotでSlackに通知するとかまでやったのですが、そちらはまた書きます。

MarkDown記法でグレーで括るやり方がわかって楽しくなってきました。
皆さん、快適な開発環境になって、いいモノを作っていきましょう！
Ruboty | Ruboty の help を正規表現で検索する ruboty-help_query を作成しました #ruboty

# Ruboty | Ruboty の help を正規表現で検索する ruboty-help_query を作成しました

## <i class="fa fa-cubes" style="font-size:1em;"></i> 概要
Ruboty の help を正規表現で検索する ruboty-help_query を作成しました

## <i class="fa fa-cube" style="font-size:1em;"></i> 用途
Ruboty 本体に付属している help は help 全体を表示する機能はありますが、
任意の help を検索した結果を返却する機能がありません。
そのため、 plugin の数が増えてくると help を見るのも一苦労になります。
そこで、当 Ruboty::HelpQuery によって正規表現による検索機能を提供します。

## <i class="fa fa-cube" style="font-size:1em;"></i> Installation

Add this line to your application's Gemfile:

```ruby
gem 'ruboty-help_query'
```

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install ruboty-help_query

## <i class="fa fa-terminal" style="font-size:1em;"></i> Commands

|Command|Pattern|Description|
|:--|:--|:--|
|help|/help *(?&lt;query&gt;.+)\z/|Show all help commands that match &lt;query&gt;.|

## <i class="fa fa-file-text-o" style="font-size:1em;"></i> Usage
### help
* Show all help commands that match &lt;query&gt;.

~~~
>ruboty help ping
>ruboty /ping\z/i       - Return PONG to PING
>
>ruboty help p
>ruboty /help( me)?\z/i - Show this help message
>ruboty /ping\z/i       - Return PONG to PING
~~~

## <i class="fa fa-gears" style="font-size:1em;"></i> ENV

|Name|Description|
|:--|:--|
|--|--|

## <i class="fa fa-puzzle-piece" style="font-size:1em;"></i> Dependency

|Name|Description|
|:--|:--|
|--|--|

## <i class="fa fa-arrow-circle-right" style="font-size:1em;"></i> 参照
* <i class="fa fa-external-link" style="font-size:1em;"></i> [ruboty-help_query GitHub](https://github.com/tbpgr/ruboty-help_query)
* <i class="fa fa-external-link" style="font-size:1em;"></i> [ruboty-help_query RubyGems](http://rubygems.org/gems/ruboty-help_query)
Intel Edisonのバイナリ互換性を調べる


# 課題
　EdisonはCPUが遅いしRAMも小さいし，内蔵ROMの書き換え限界回数もよく分からないので，いつもの開発PCで作成したバイナリがそのまま使えると嬉しい！
　でも，気づいたら自分の周りのPCは，64bit化してた！

# 検証
　まずは，64bitの開発PC（Ubuntu 14.04 LTS）に32bit環境を整えます．

$ sudo apt-get install lib32z1-dev gcc-multilib g++-multilib


あとは適当に何かプログラムを．

```cpp:hello_c.c
#include <stdio.h>

int main(int argc, char *argv[])
{
	printf("Hello world!\r\n");
	return 0;
}
```

```cpp:hello_cpp.cpp
#include <iostream>

int main(int argc, char *argv[])
{
	std::cout << "Hello world!" << std::endl;
	return 0;
}
```

```bash:Makefile
CC = gcc
CXX = g++
CFLAGS =-m32 -O4

.PHONY: all clean hello_c hello_cpp 

all: hello_c hello_cpp 

clean:
	rm -f ./*.o
	rm -f hello_c hello_cpp 

hello_c: hello_c.o
	$(CC) $(CFLAGS) -o $@ $^

hello_cpp: hello_cpp.cpp
	$(CXX) $(CFLAGS) -c $^
	$(CXX) $(CFLAGS) -o $@ hello_cpp.o

%.o: %.c
	$(CC) $(CFLAGS) -Wall -g -c $<

```

CFLAGSに **-m32** をわたしているところがミソです．

　他にも手持ちのプログラムをいくつか試してみたんですが，他のライブラリをリンクしないものに関しては，全然問題なかったです．当たり前か．
　本当はSSL使うプログラムをビルドしたかったんですが，sslのライブラリをi386指定でインストールしようとしたら，build-essentialとコンフリクトしてるらしくて，なんか厄介なことになりそうだったんで，それ以上は追い込まないことに．

　と，ここまで調べたんだけど，これも例によって数時間差で[Cannonball WikiさんがMRAAまで含めたバイナリの互換性について調査してくださっていた](http://www.cannon-ball.info/pukiwiki/index.php?DIY%2FEdison%2FL%E3%83%81%E3%82%AB)ので，この記事は二番煎じです，ハイ．


　そういえば，Breakoutボードに直接ハンダ付けするという手抜きをしてたら，ついにランドがはがれてしまったので，ちょっと何とかしなければならないと思い，千石でこんなのを買って来ました．
![Active High回路](https://pbs.twimg.com/media/B4gIIzkCIAAZX4q.jpg "回路(Active High)")
スルーホールに挿せばOKなようです．[Amazonからも買える](="http://www.amazon.co.jp/gp/product/B00J7LFHVU/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00J7LFHVU&linkCode=as2&tag=yoneken05-22)みたい．
「すごいE本読書会@福岡」をやった話

# すごいE本読書会をやった話

## はじめに

今回は、特に、Erlangエンジニアが喜ぶ話では無いかもしれないですが、なにか読書会をやる方の参考になればと思いまして、書きます。

## 現在の状況

9回目まで進んでます。
http://fukuoka-sugoe-book.connpass.com/event/10305/

勉強会は15章まで進んでますが、僕個人では、一応27章まで読んでます。

## なぜ?Erlang読書会をやったか?

「すごいErlangゆかいに学ぼう本」が確か7月に発売されてまして、良い機械ができ、またあの、あの分厚いのもあって、これは読書会でも開催して、なんとか、みんなで読んで、頓挫しないようにしようという主旨でした。

### 心が弱い人のための読書会


ErlangはErlangでマトモなアプリケーションを作るまで、結構、学習コストがそもそも高いと感じている心が弱い方が中心となって、継続して、分かんないとことか、そもそもあの厚さもみんなで読めばなんとかなるよね?という感じです。

「読書会するなら覚悟するように」と誰かが言ってましたが、むしろ、みんなで助け合いながら読もうというわけです。

## 勉強会の進め方とか

### 予習はしない。

「読書会」と聞いて、「予め読んでおいて、要約をみんなの前で発表する」という形式がなんとなく、多いと思いますが、今回はみんな社会人で忙しいのと、僕の心が弱いので、たぶん、そんなハードなのは無理だと思いました。

なので、事前準備とか無しで、その場で、一人づつ順番に、ある程度の範囲を、音読していく方針を取りました。そして、たまに、疑問になったことを「なんだろ?これ?」みたいな形で雑談しながら解決していくって感じです。

### ツールとか

また、勉強会の連絡とかは、[Facebookグループ](https://www.facebook.com/groups/1434582936828653/)でやりました。んで、また、なんとなく、[すごいE本@福岡のgithub Organizations](https://github.com/erlang-fukuoka)をつくって、サンプルコードをアップロードしたりしなかったりしました。[connpass](http://fukuoka-sugoe-book.connpass.com)でイベントページを作り、出席の確認をしましたりしました。あと、[typetalk](http://www.typetalk.in/ja/)で、リンクの共有とかチャットしたりしますた。

### 案外2章づついけた。

最初は、書籍が厚いのとか、以前は「7つの言語7つのデータベース」の読書会で、すごい時間が掛っているのを見たので、1日1章が限度かなぁとか思っていました。

しかし、案外読みやすく、スイスイ行けました。たまに難しいところはありますが、何とか理解できます。

なので、1日1章で、終わらなかったら、宿題!みたいなことやろうとしましたが、まぁやってないです。

### 参加者について

実務で使用している方、実務では使ってないけど、以前から触ったことがある人、まったくやったことが無い方、まぁいました。

## Erlang読書会をやって感想

### たぶん15章がいちばんきつい

全部は読んでないのですが、15章が一番きついと思いました。有限ステートマシン、つらい。

### OTPの紹介がすばらしいでし。

すばらしかったでし。なるほどと思いました。

### ぜーんぜん、違うプログラミングパラダイム

まぁ、これは、読書会の感想では無くて、Erlang自体の話しなのですが。

Erlang言語は、手続き型や、オブジェクト指向などの、**ただ直列のプログラミングをやってきた方**にとってはぜーんぜん違う仕組みです。もちろん、直列な他の関数型言語と比較しても、全然違う仕組みです。なので、**新しい言語を覚える**というより、**新しい環境で、全然違う構築方法を覚える**といった感じです。


## 今後

心が弱いなりに、まだまだ、読みつづけるので、今後もよろしくお願いしまつ。
Windows 7かMac OS X上でE-Cell4を使ってみる

**以下の情報は時代遅れです。最新の情報は[こちら](https://github.com/ecell/ecell4#installation)を参照してください。**

# インストールの方法

__注意: E-Cell4は只今絶賛開発中です. 多分に人柱的要素がありますのでご注意下さい.__

- レポジトリ: https://github.com/ecell/ecell4
- 公式ドキュメント: http://ecell4.readthedocs.org/en/latest/

jupyter[notebook], numpy, matplotlibなどのインストールは本当は任意だが, まず間違いなく使った方が良い.

## Windowsの場合

1. [http://conda.pydata.org/miniconda.html](http://conda.pydata.org/miniconda.html)から**32ビット版**のMiniconda for Windowsをインストールする[^1].

[^1]: 容量に余裕のある人は全部入りのAnacondaを使うと手間が省ける. https://www.continuum.io/downloads

2. コマンドプロンプト`cmd`を起動して, 依存する他のPythonライブラリをインストールする[^2].

    ```
conda update pip
conda install hdf5 jupyter matplotlib
```

[^2]: Anacondaの場合は不要.

3. つづけてE-Cell4をインストールする. Python3の場合は下の方を実行して下さい.

    ```
pip install https://github.com/ecell/ecell4/releases/download/4.0.0/ecell-4.0.0-cp27-none-win32.whl
# pip install https://github.com/ecell/ecell4/releases/download/4.0.0/ecell-4.0.0-cp35-none-win32.whl
```

オプションだが, 動画表示機能を使いたい人は[http://ffmpeg.zeranoe.com/builds/](http://ffmpeg.zeranoe.com/builds/)などからFFmpegをインストールしてパス`PATH`を通しておく.

## Macの場合

Mac OS Xの場合, E-Cell4そのものはhomebrewでインストールできる.

```
brew tap ecell/ecell4
brew install ecell4
```

### homebrewを使ったgslのinstall

```
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install gsl
```

### Python環境の準備

Python, numpy, matplotlibは既に入っているのでIPython Notebookをpipを使ってインストールする.


```
curl -O https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
sudo pip install "ipython[notebook]"
```

### E-Cell4のインストール

つづいて, E-Cell4をインストール. Yosemite (10.10)の場合は,

```
sudo pip install https://github.com/ecell/ecell4/releases/download/4.0.0-beta2/ecell4-4.0.0b2-cp27-none-macosx_10_10_intel.whl
```

Mavericks (10.9)の場合は,

```
sudo pip install https://github.com/ecell/ecell4/releases/download/4.0.0-beta2/ecell4-4.0.0b2-cp27-none-macosx_10_9_intel.whl
```

でインストールできる.

# 使い方

IPython Notebookをインストールしている場合は下記の要領で立ち上げる. 勝手にブラウザが起動し, IPython Notebookのメインページに飛ぶはず. IEかSafariを利用する場合は, 問題が生じる場合があるので注意して下さい.

```
ipython notebook
```

新規ノートブックを作成して最初の行で```%matplotlib inline```を実行した後で, 下記のコードを実行すればシミュレーションの結果をグラフとして表示できる.

```py:test1.py
%matplotlib inline
import numpy
from ecell4 import *

with reaction_rules():
    A + B == C | (0.01, 0.3) # 可逆反応

run_simulation(10, {'A': 60, 'B': 60})
```

結果は以下のようになるはず.

![plot0.png](https://qiita-image-store.s3.amazonaws.com/0/49421/013a07da-ca02-48e8-c240-7dd0d48b68d4.png)

より詳しい使い方については下記の記事を参照して下さい.

- [E-Cell4の簡単な使い方 初級編](http://qiita.com/kaizu/items/0513f2c572a0a8041f71)
- [E-Cell4の簡単な使い方 中級編](http://qiita.com/kaizu/items/d7bd83dcf525de6bc9a0)
- [E-Cell4の簡単な使い方 上級編](http://qiita.com/kaizu/items/b4948640dc4d9e45fab7)
Gitのせいでbrew updateできないエラーを回避するシェルスクリプト


## brew updateできない

最近自分のMacのシェルで`brew update`を打ってもエラーを吐かれてアップデートできないという事態が頻発しまして、[調べてみる](http://qiita.com/harapeko_wktk/items/f4f44ddb5d3912e15ea2)とGit関連でエラーが出ているらしいとのこと。毎回調べてコマンドを打つのも面倒くさいので、シェルスクリプトを書いてみようと決意しました。

## 注意

これが自分にとっての初めてのシェルスクリプトです。とりあえず自分の環境では動くので公表しましたが、使用については自己責任でお願いします。また、何か問題点などがありましたら、コメント等で指摘していただけると幸いです。

## Gistにアップしたコード

Gistの[ここ](https://gist.github.com/marmot1123/a7ac81ee8108a6d5ccf2)にも置いておいたのですが、こちらにも一応直接載っけておきます。

```sh:brewupdate.sh
#!/bin/sh

cd $(brew --prefix)
sudo git fetch origin
sudo git reset --hard origin/master
brew update
```

## （一応）解説

~~カレントディレクトリを一時的に変数に保存することでどこから実行しても`brew update`した後にカレントディレクトリに戻ってこれるようになっているハズです。~~
下のコメントでご指摘頂きました通り、この部分はなくてもきちんとカレントディレクトリに戻ってこられるそうです。修正致しました。@heliac2000さん、ありがとうございました。

真ん中の部分に関しては[ここ](http://qiita.com/harapeko_wktk/items/f4f44ddb5d3912e15ea2)をまんま参考にさせて頂きました。

## 最後に一言

初Qiita投稿、初Gist投稿、初シェルスクリプトの初々づくしですが、皆さんのお役に立てればと思います。よろしくお願いします。

## 参考資料
[ヾ(oﾟωﾟo)ﾉﾞbrew updateでエラーでたった[Homebrew]](http://qiita.com/harapeko_wktk/items/f4f44ddb5d3912e15ea2)
zshでgrepのようなことをする

zsh で簡易 grep 的なことができたので、紹介します。

## 実行例

`${name:#pattern}` と `(M)` フラグを組み合わせると配列から glob pattern にマッチしたものだけ抜き出せます。

```console
% echo ${(FM)${(f)"$(< /etc/hosts)"}:#*local*}
127.0.0.1       localhost
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
```

`(M)` フラグなしだと `grep -v` のようにマッチしなかったものだけが残ります。

```console
% echo ${(F)${(f)"$(< /etc/passwd)"}:#*:[1-8]*}
root:x:0:0:root:/root:/bin/bash
news:x:9:9:news:/var/spool/news:/bin/sh
```

詳細な解説は [blog](http://blog.n-z.jp/blog/2014-12-11-zsh-grep.html) を参照してください。
データの読み込み時に「しばらくお待ちください」を表示する。

#データの読み込み時に「しばらくお待ちください」を表示する。

コンポーネントがロードされるタイミングに合わせて処理を行うためには、renderer.jsに処理を記述します。
「コンポーネント名+Renderer.js」という名前でjavascriptファイルが作成されます。

Renderer.jsには４つのメソッドを上書きすることが出来ます。

| # | 関数 | 説明 |
|:-----------|:------------|:------------|
| 1 | render |コンポーネントの読込開始のタイミングで呼び出される。このタイミングでコンポーネントの要素にアクセスしても取得できない。renderを記述するとフレームワークがコンポーネントを作成する処理を上書きしてしまうので、「this.superRender()」を呼び出してコンポーネントを作成する必要がある。|
| 2 |afterRender|コンポーネントの作成が終わった後に呼び出される。このタイミングだとコンポーネントを取得できる。~~<strong>※afterRenderを上書きすると、値が入力フィールドに入力した値がバインドされない事象を確認中・・・。継続して調べてますが、使用には要注意。</strong>~~ render関数だけでなく、afterRenderでも「this.superAfterRender」関数を呼び出して上げる必要がありました。|
| 3 |rerender|コンポーネント内の要素を再描画する際に、呼び出される。|
| 4 |unRender|コンポーネントを破棄したタイミングで呼び出される（らしい）。まだ使ってないです。|


``` renderer.js
({
    render:function(cmp,helper){
      var ele = $A.util.getElement('waiting'); //ここでElementを取得してもnull
      var s = this.superRender();      
      return s;
    },

    afterRender:function(cmp,helper){
      var ele = $A.util.getElement('waiting'); //ここだとElementを取得できる
    },
    
    rerender:function(cmp,helper){
        var ele = $A.util.getElement('waiting');  //当然ここでもElementを取得できる。
    }
})


```

上記をふまえて、初期表示時に「しばらくお待ちください」を表示させるための実装をしてみました。

doInitのアクションで、childListを取得してきます。
childListを取得してくる間、画面に「しばらくお待ちください」を出します。

```
<aura:component controller="TLP.AdventCal">
    <aura:handler name="init" value="{!this}" action="{!c.doInit}" />
    <div id="waiting">しばらくお待ちください</div>
    <aura:attribute name="childList" type="List"/>
    <div>
	    <aura:iteration var="item" items="{!v.childList}">
    	        <div>{!item.Name}</div>
                <div>{!item.parentName}</div>
	    </aura:iteration>
    </div>
</aura:component>
```

データを取得後、rerender関数が呼び出されるため、そこで、「しばらくお待ち下さい」を非表示にするためにクラスを追加します。

```AdventCalendarRenderer.js
({
    rerender:function(cmp,helper){
        var ele = $A.util.getElement('waiting');
        $A.util.addClass(ele,'nonDisplay');
    }
})
```

スタイルで要素を非表示にします。

```AdventCalendarCmp.css
.THIS.nonDisplay{
	display:none;
}
```
werckerでDockerfileのテストをする


[株式会社リクルートテクノロジーズ Advent Calendar 2014](http://qiita.com/advent-calendar/2014/recruit-technologies)の11日目の記事です。

werckerは[Docker Boxのサポートをしています](http://blog.wercker.com/2013/11/28/Announcing-docker-support.html)。
今つくっているソフトウェアはDockerコンテナとして動作させているため、Dockerfileのテストを行うためにweckerのbox内部で`docker`コマンドを実行しています。

はじめはDockerfile内でテストコマンドを実行していたのですが、開発中に気軽にコンテナをビルドしようとするとテストに時間がかかって煩わしくなりました。
最終的に「werckerで`docker build`後に`docker run`でテスト実行する」という方針にしてみたところ、まあまあいい感じに運用できています。

## Dockerfile内でテスト実行する

Dockerfileというものを知ったときには、「この中でテストも全部してしまえば、CI環境でいろいろやらなくてもDockerfile単体で完結する！」と思いつき、実際にDockerfileの中でテストを走らせていたりもしました。

```Dockerfile
# Dockerコンテナ内部で使う自作gemのインストール
ADD builder /tmp/builder
WORKDIR /tmp/builder
RUN /opt/ruby-2.1.2/bin/bundle install --path=vendor/bundle
# テスト実行
RUN /opt/ruby-2.1.2/bin/bundle exec rake spec
RUN /usr/local/bin/gem build builder.gemspec
RUN /usr/local/bin/gem install builder-0.0.1.gem

```

しかし、実際にDockerfileを作ってみると、必要なライブラリやソフトウェアをインストールするだけでそれなりに時間がかかります。ここにテストの実行時間も加わると、やる気を削がれます。

また、開発中にDockerfileでADDしているモジュールを修正して試しに動かしてみようとすると、毎回ビルドとテストが走って待ちの時間が入るのでリズムを崩されてしまいます。

## werckerで`docker build`後に`docker run`でテスト実行する

そこでDockerfileからテスト実行コマンドを取り除き、wercker.ymlを以下のように書き換えてみました。

```wercker.yml
box: wercker-labs/docker
build:
  steps:
    - script:
        name: docker build
        code: docker build -t pool ./docker/pool
    - script:
        name: run system test
        # 実際には他にオプションを与えているのですが、見やすくするため省略します
        code: |
        	sudo docker run -workdir="/tmp/builder" pool  /opt/ruby-2.1.2/bin/bundle exec rspec --tag system_test
```

1度ビルドしたイメージでコンテナを起動させ、`--workdir`オプションでテスト対象ディレクトリに移動、コマンドにテスト実行コマンドを指定することでテスト実行しています。
werckerでビルドされたイメージは次の`script`コマンド実行時も保持されているため、

1. `docker build -t <イメージ名>`でテスト対象イメージを作成
2. イメージ作成後に`docker run <イメージ名> <テスト実行コマンド>`でテスト

とすることによって、手元でコンテナを立ち上げる分には長時間かかるテストを実行せずにすみます。
werckerはブランチをプッシュすると自動でビルドを実行してくれて、Pull Requestにも実行結果が表示されるため、レビュー時には結合テストも通っているかが確認できます。

![Screen Shot 2014-12-11 at 19.04.53.png](https://qiita-image-store.s3.amazonaws.com/0/5882/a9f8ee6b-120a-5a81-810a-ea167b491710.png "Screen Shot 2014-12-11 at 19.04.53.png")

(落ちてます。。)

## 結合テスト環境としてのDockerコンテナについて

werckerに限らず、ビルドパイプライン中で「`docker build`後に`docker run`でテスト実行する」というやり方は結合テストを実行する場合に便利ではないかと思います。
テストを実行する際には、実行環境の状態が等しいというのが理想ですが、毎回AWSのインスタンス+プロビジョニングツールなどの組み合わせでまっさらな環境を用意しているとテスト実行に時間がかかってしまいます。

しかし、テスト実行環境をDockerイメージとしてビルドした後にrunコマンドでテスト実行コマンドを与えてあげれば、毎回同じ状態の環境に対して異なるテストを実行してあげることができます。

結合テストの自動テストをやる際には、このやり方を試してみたいなと思っています。
[FuelPHP] ReferectionClassを使ってProfilerを無理やりLogに出力する

# 概要
FuelPHPでプロファイルを見たいときには[PHP Quick Profiler](http://fuelphp.com/docs/general/profiling.html)をベースにしたProfilerが一番簡単だが、ファイルやログに出力できない？のが非常に使いにくい。

特にAPI Serverなどを開発している時にはQuick Profilerなんて見れない。
↓他の人は`fuel/core/classes/profiler.php`を置き換えたりしているが、コアライブラリを置き換えるのはなるべくやめたい。

そこで、`FuelPHPのEvent`と`ReflectionClass`を使ってプロファイルをログに出力することをやってみる。

- [FuelPHPで３種のprofilerを使ってみた](http://www.slideshare.net/MiuraKatsu/ss-26186401) 

# Reflection Class
ReflectionClassはPHP5から導入されている。

>情報工学においてリフレクション (reflection) とは、プログラムの実行過程でプログラム自身の構造を読み取ったり書き換えたりする技術のことを指す。by wikipedia

ようは外部からクラスの中身をいじったりできる機能である。

# コード
方針としてはReflectionClassでProfilerクラスの変数を外部からアクセス可能な状態にして必要な情報を取得する。

ログを出力する場所はリクエストを送った後の終了時にする。
そこでFuelPHPの[Eventクラス](http://fuelphp.jp/docs/1.6/classes/event.html)はリクエストを送った後の終了時のイベントハンドラを登録することができる。

実際には`app/config/event.php`に以下のコードを置く。

```php
<?php

return array(
	'fuelphp' => array(
		'shutdown' => function() {
			$ref = new ReflectionClass('Profiler');
			$prop = $ref->getProperty('profiler');
			$prop->setAccessible(true);
			$profiler = $prop->getValue();
			if ($profiler) {
				$profiler->db = $profiler;
				$profiler->gatherConsoleData();
				$profiler->gatherPathData();
				$profiler->gatherFileData();
				$profiler->gatherMemoryData();
				$profiler->gatherQueryData();
				$profiler->gatherSpeedData();
				\Log::info(print_r($profiler->output, true));
			}
		},
	),
);
```

```
(
    [logs] => Array
        (
            [console] => Array
                (
                    [0] => Array
                        (
                            [data] => 1.412 ms
                            [type] => speed
                            [name] => Fuel\Core\Profiler::init Start
                        )

                    [1] => Array
                        (
                            [data] => 2.361 ms
                            [type] => speed
                            [name] => Fuel\Core\Fuel::init End
                        )

                    [2] => Array
                        (
                            [data] => 2.433 ms
                            [type] => speed
                            [name] => Fuel\Core\Uri::__construct Start
                        )
...
```
WebStormでRe:VIEWを書く (Custom File Type)

こんにちは、らこです。今日は電子書籍用のマークアップ言語とその周辺システムである「Re:VIEW」を例に、「WebStormでサポートされていない言語を書く」というテーマで行こうと思います。

「Re:VIEW」のフォーマットや仕組み等には詳しく触れませんので、興味がある方は[こちらの記事](http://dev.classmethod.jp/tool/try-review-01/)が入門にピッタリだと思います。

## File Typeを作成する
WebStormでサポートされていないファイルにシンタックスハイライトや入力補完を有効にする方法は２つあります。

1. プラグインを導入する
2. File Typeを追加する

すでにプラグインがある言語ならば1を選ぶのがよいです。例えばMarkDownやBash Script等はプラグインが存在します。
しかし今回のRe:VIEWはプラグインなんてありません。プラグインを作るのはとても大変です。そもそもJavaで書く必要があるのでWebStormでは作れずIntelliJ IDEAが必要になります。よって、簡単に作れる2のFile Type追加を選択します。

早速ですが追加後のFile Typesがこちら

![image](https://qiita-image-store.s3.amazonaws.com/0/20253/cb144621-086f-b9dc-58df-64d95728a00d.png)

[Editor]>[File Types]からWebStormでサポートしているファイル形式一覧を見ることが出来ます。File Typeは1つ以上の拡張子パターンを持ちます。Re:VIEWファイルの拡張子は「.re」なのでそのように書いてあります。

File Typeを追加するには右上の「+」ボタンを押します。

![image](https://qiita-image-store.s3.amazonaws.com/0/20253/2d8c3f90-4ed6-886d-1152-54f7433d1788.png)

上からFile Typeの名前と説明、シンタックスハイライトの設定になっています。

### Line comment
コメント行の開始文字列を指定します。右の「Only at line start」は行の途中からでもコメント開始できるかを決めます。
### Block comment start / end
複数行コメントの開始/終了文字列を指定します。Re:VIEWに複数行コメントはないので空にしてあります。
### Hex prefix
16進数の数字リテラルを入力するときの接頭辞を指定します。例えば「0x」等ですね
### Number postfixes
数字リテラルの後ろに結合できる文字列を指定します。わかりにくいですが、例えば「E-3」と指定すると、「6E-3」と入力したときに「E-3」まで含めて数字リテラルとして扱われます。
### Support paired braces / brackets / parens 
それぞれ`{}`と`[]`と`()`の片方にカーソルを当てた時に対応するカッコをハイライトするかどうか、また対応する閉じカッコを自動入力するかどうかです。
### Support string escapes
`\"`等のエスケープ記号をハイライトするかどうかです。
### Keywords
シンタックスハイライトさせたいキーワードを4色まで振り分けて設定できます。
1～4のグループごとに色が割り振られます。

以上の設定によってこんな感じにRe:VIEWのキーワードにシンタックスハイライトが効くようになります

![image](https://qiita-image-store.s3.amazonaws.com/0/20253/39d09f8c-cdba-23db-c221-4f2a5f1c9892.png)

## しかし補完はいまいち
File Typeを追加することで独自のファイル形式に対応することは出来ますが、「言語」への対応はできませんので、文脈に応じた補完候補を表示させることはできません。設定したすべてのキーワードが常に補完候補に上がってきます。

![image](https://qiita-image-store.s3.amazonaws.com/0/20253/d34879e0-c0ec-5cb4-abc3-bade904b9626.png)

今回扱っているRe:VIEWは`{}`で囲われたブロックや、`()`内に引数を取る関数もあり、この補完だけではスムーズな入力ができないので、次はLive Templates先生の力を借ります。

## Live Templateの作成
Live Templatesというのはわかりやすく言うと「スニペット」です。よく使うコードを簡単に呼び出すことが出来ます。こちらも[Editor]>[Live Templates]から一覧を見ることが出来ます。

Re:VIEWのlist文をLive Template化したのがこちらです

![image](https://qiita-image-store.s3.amazonaws.com/0/20253/88c3194f-31c6-b684-a954-0ce037d71784.png)

AbbreviationにはLive Templateを呼び出す際のキーワードを指定します。`list`としておけば、エディタ上で`list`と打ち込んでTabを押せば展開されます。

テンプレート中には`$...$`の形式で変数を埋め込むことが出来ます。展開後は埋め込まれた順に変数の位置にカーソルが移動し、最後に`$END$`の位置で止まります。`$END$`以外は自由に変数を作ることが出来ます。

一番下にある「Applicable in Other」は、どの言語上で有効にするかという設定です。JavaScript上で有効にしたいLive TemplateはここをJavaScriptにします。

## おまけ
File Watcherは言語ではなくFile Type基準で監視してくれます。Re:VIEWのコンパイルもFile WatcherでRe:VIEWファイルを監視することで簡単に自動化することができます。

![image](https://qiita-image-store.s3.amazonaws.com/0/20253/6c2bfcfd-8fd2-6827-cf37-a326fe6be015.png)

----
以上、「Re:VIEW」を例にした独自File Type追加の方法でした。
Qiita:TeamとSlackを連携させると世界が変わるというお話

このエントリは [Slack Advent Calendar 2014](http://qiita.com/advent-calendar/2014/slack) の10日目になります。

「Qiita:Team」と「Slack」を連携させるとめちゃめちゃ便利だよ！という記事を書きます。


##Qiita:Teamとは
![スクリーンショット 2014-12-03 9.31.12.png](https://qiita-image-store.s3.amazonaws.com/0/45617/e56d2d65-8b09-b042-a582-fe1e3fba8580.png)


Qiitaをベースにしたドキュメント共有サービスです。

メールやwikiだけで情報のやりとりをやっているチームには非常に効果があるサービスです。[利用事例](https://teams.qiita.com/customers)とか見るとめちゃくちゃ欲しくなります。

30日のお試し期間があるのでとりあえず試してみるのが吉

[Qiita:Team - みんなが手軽に書ける情報共有ツール : https://teams.qiita.com/](https://teams.qiita.com/)


##Slackとは
![スクリーンショット 2014-12-03 9.46.52.png](https://qiita-image-store.s3.amazonaws.com/1/45617/18c0682e-7ff0-21b8-6c18-c20053f06f75.png "スクリーンショット 2014-12-03 9.46.52.png")



目的別にチャンネルを作りそこでやりとりする事によって整理整頓ができるチャットツールと言ったところでしょうか。

何が良いって

- Markdown使える
- URLを貼るとwebサイトのプレビューが表示される
- ファイルのやりとりが出来る
- チャンネルという区切りで流す情報を決められる

とか色々あるんでとりあえず使ってみましょう。
webアプリケーションとしても使えますし OSXやiOSだとアプリもありますよ！

[Slack: Be less busy : https://slack.com/](https://slack.com/)


##連携するとどうなるの？
Qiita:Teamの更新情報がSlackで流れるようになります

結局Qiita:Team、wiki等書いた所で更新に気づかないと誰も見ないんですよね。

メールもタイトルだけで既読をつけたりしてしまいます

そこでチャットに通知することによって自然なコミュケーションの中で通知することによってみんなが見てくれます。

通知される情報は

- [x] 投稿
- [x] 投稿が更新
- [x] 投稿にコメント
- [x] メンバーが追加さ
- [x] プロジェクトが作成
- [x] プロジェクトが更新

の以上です

現在Qiita:TeamではSlackとHipChatとChatWorkの連携を対応しています。

今回は最近アツいSlackを取り上げて行きます。 ~~というかQiita開発チームではSlackを使ってやっているのでそっちの方が楽~~


連携するとこのように流れます

![スクリーンショット 2014-12-10 12.01.30.png](https://qiita-image-store.s3.amazonaws.com/1/45617/9fe6decb-f1e3-4fe7-23f8-6fba2b2f22b7.png "スクリーンショット 2014-12-10 12.01.30.png")

##どうやって連携させるの
###1.SlackからWebhook URLを持ってくる
Slackの[App Directory](https://slack.com/apps)から [**Incoming WebHooks**](https://slack.com/apps/A0F7XDUAZ-incoming-webhooks) を選んだ後 **Add Configuration** を選択

<img width="70%" alt="Slack に Incoming WebHooksを追加" src="https://qiita-image-store.s3.amazonaws.com/0/1624/0983b38f-b637-f4ff-898f-8e559d0bc187.png">

後は好きなチャンネル選択するとWebhook URLが出てきます。

###2.Qiita:TeamにWebhook URLを打ち込む
自分のQiita:Teamの **チーム設定のページ** で **サービス連携** から **Slack** を選択します。

<img width="100%" alt="Qiita:Teamのサービス連携から Slack" src="https://qiita-image-store.s3.amazonaws.com/0/1624/af5d7435-c2d5-25c1-f8fe-5e87c218819b.png">


**Webhook URL**のところに先程Slackで取得したWebhook URLを入力してチーム名を入れれば完了です。

<img width="100%" alt="Qiita:Teamのサービス連携でSlackのWebhook URLを入力" src="https://qiita-image-store.s3.amazonaws.com/0/1624/2b1492ea-f991-747a-7881-5272957190e7.png">
パーティションテーブルの中身をLinuxのコマンドラインで確認してみる

### MBR、パーティションテーブルについて

まず、前提知識となる、MBR、パーティションテーブルの解説をいくつかのサイトから引用します（太字は引用者）。

#### マスターブートレコード (MBR)とは

>マスターブートレコード (MBR) とは、**ハードディスクの最初のセクタ (512 バイト)** です。
http://www13.plala.or.jp/naka_jima/pc/MBR.html

#### パーティションテーブルとは

>このうち，**446バイト目から始まる64バイト**がパーティションテーブルである.[…]16バイトのエントリ四つからなる．
http://www.cqpub.co.jp/interface/toku/200107/toku1_5.htm

> ハードディスクの先頭に置かれ、コンピュータの起動時に最初に読み込まれるMBR(マスターブートレコード)に用意された、パーティション情報を記録する領域。**1つのパーティションにつき16バイト**で、4パーティション分が用意されている。
http://goo.gl/QA2hvs

>1エントリは，アクティブフラグ（1バイト），CHSによる開始セクタ（3バイト），パーティションタイプ （1バイト），CHSによる終了セクタ（3バイト），LBAによる開始セクタ（4バイト），パーティションサイズ（4バイト）の各フィールドからなる．**LBA開始セクタおよびパーティションサイズは，リトルエンディアン**で表現される
http://www.cqpub.co.jp/interface/toku/200107/toku1_5.htm

### Linuxコマンドラインでの確認

次に実際に実機でパーティションテーブルの中身を確認してみます。

#### 環境
* さくらVPS
* CentOS 6.3 x86_64

#### コマンド

まずさくらVPSの仮想ディスクのMBRからパーティションテーブルを抜き出してみます。デバイスファイルに対して、`hexdump`コマンドを使って中身をダンプしてみます。
この時、パーティションテーブルは上記の通り、「446バイト目から始まる64バイト」なので、そこを抜粋します。

```
# hexdump -C -s 446 -n 64 /dev/vda
000001be  00 fe ff ff ee ff ff ff  01 00 00 00 ff ff 7f 0c  |................|
000001ce  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000001fe 
```

このパーティションテーブルの1エントリ目は以下であることが分かります。

```
00 fe ff ff ee ff ff ff  01 00 00 00 ff ff 7f 0c
```

また、上記の解説から、それぞれの値が意味するのは以下となります。

|                 項目                | サイズ |      値     |
|:-----------------------------------:|:------:|:-----------:|
|             ブートフラグ            |  1Byte |      00     |
| パーティションの最初のセクタ値(CHS) |  3Byte |   fe ff ff  |
|         パーティション識別子        |  1Byte |      ee     |
| パーティションの最後のセクタ値(CHS) |  3Byte |   ff ff ff  |
| パーティションの最初のセクタ値(LBA) |  4Byte | 01 00 00 00 |
|   パーティションの全セクタ数(LBA)   |  4Byte | ff ff 7f 0c |



今回は例として、このパーティションテーブルの中に格納されているセクタ数を確認してみます。

上記で引用しているように、パーティションサイズは、リトルエンディアンで表現されるため、実際の値としては後ろのバイトから読みます。すなわち、`0c7fffff`が値となります。これを10進数に変換すると、`209715199`となります。

では、実際に合っているか確かめてみます。`fdisk`コマンドでセクタ数を表示してみます（一部省略）。

```
# fdisk -lu /dev/vda
Sector size (logical/physical): 512 bytes / 512 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/vda1               1   209715199   104857599+  ee  GPT

```

一致していることが分かります。

また、容量についても、確認してみます。1セクタは512Byteであると上の結果から見えていますので、これを計算すると、100GByteとなり、さくらVPSのプランと一致しています。

```
209715199セクタ*512Byte=107374181888Byte=100GByte
```

#### 参考

マスターブートレコードの解析 http://nobumatu.web.fc2.com/boot/mbr.html
2001年7月号　特集第1章 http://www.cqpub.co.jp/interface/toku/200107/toku1_5.htm
http://www13.plala.or.jp/naka_jima/pc/MBR.html
Appの有効な“aps-environment”エンタイトルメント文字列が見つかりません

### 開発環境

OS X 10.9.5
Xcode 6.1.1 (6A2008a)


### 状況
TestFlight向けにArchiveしたビルドをAdHoc配信して起動した所、下記エラーが出力されるのを確認した

> Appの有効な“aps-environment”エンタイトルメント文字列が見つかりません

### ひとまずやったこと

1. 対象アプリのAPNS証明書を全環境削除
2. 対象アプリのProvisioning Profileを全環境削除
3. 対象アプリのAPNS証明書を全環境作成
4. 対象アプリのProvisioning Profileを全環境作成
5. Xcode -> preferences -> (account) -> View Details の左下にある更新ボタンを押下
6. Build SettingsでCode Signingの項目を適切に設定

Provisioning Profile関係で何かあったら大抵は5,6でコトは済むが、今回はそれでもダメだったので1から全て行った。
全部作り直しも常套手段だ。

それでも解決しなかったので調べた所、この[Stack Overflow](http://stackoverflow.com/questions/25973792/ios-8-notifications-stopped-working-in-new-ad-hoc-version)がヒットした。

> Xcode6 seems to reject any ad hoc profiles that do not include all registered devices.

### 原因と対応

確かに今回は全てのデバイスを選択していなかったので、改めて全て選択した上で上記5,6の手順を繰り返した。
これによるAdHocのipaでは、同じエラーは発生しなくなった。

aps_environmentのエンティティが含まれるかどうかは、[こちらの方法](http://qiita.com/kaktaam/items/abf1bd42ffa7ad60673b)で確認できる。
別メッセージループでのフォーム起動


##概要
描画にアホ程時間がかかるので、画面を要素で分割し、並列処理にしようと思った.
##問題点
パラレルとかで別スレッドに処理を任せても、メッセージループは一緒な訳ですよ。
例えば↓なんか片方が重い処理をすると片方も止まる。
http://kawakawa2000.jugem.jp/?eid=55
##解決策
Application.Runメソッドの使用

##具体例

```program.cs
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    //別スレッドで二枚目起動
    Thread t1 = new Thread(new ThreadStart(anotherThread));
    t1.Start();

    //一枚目起動
    Application.Run(new Form1());

    // 終了処理
    t1.Abort();
    t1.Join();
}

public static void anotherThread()
{
   Form2 anotherForm = new Form2();
    //二枚目起動
    Application.Run(anotherForm);
}	
```
 + とりあえず、片方のタイマースリープしても、もう片方は更新を続けた。
 + 静的クラスもそれぞれインスタンス化されるかと思ったら共有できた。

##結論
C#では様々な並列処理に対して、スレッド、メッセージループの二要素で考える必要があるのかもしんまい。言葉は間違ってたら申し訳。
DOBON先輩もこの特性を知らないみたいでした。
http://dobon.net/vb/dotnet/form/runvsshowdialog.html
うちの会社で一番頼りになるDOBON先輩も知らなかったから
こんな仕様が必要になる時点でハードウェア側の設計ミスだね！

C＃で画像大量に使って低スペックマシンで動かしてね（はぁと）ってのがおかしい訳だ。
何が技術開発グループだ！くたばれ！
あとvisualstudioは命名ルールをある程度統一してほしい。
環境変数をいじらずにSQL*Plusでログインする

勝手にNLS_LANGをいじって試行錯誤を繰り返す事案が発生したために、環境変数をいじらずにログインする方法を編み出した。

```コマンド
$ env NLS_LANG=Japanese_Japan.AL32UTF8 sqlplus / as sysdba
```

envコマンドは省略できるみたい。

```コマンド
$ NLS_LANG=Japanese_Japan.AL32UTF8 sqlplus / as sysdba
```
FormData は multipart/form-data で application/x-www-form-urlencoded は URLSearchParams

この記事は、今のところどのアドベントカレンダーにも属していません。

## FormData

XHR2 での Form の POST などには、 FormData オブジェクトが使えます。
例えばこんな感じ。

```html
<form id="fileUpload" name="fileUpload" method="post" action="/server">
 <input type="text" name="fileName" value="memo.txt">
 <input type="file" name="file">
 <input type="submit">
</form>

<script>
var fileUpload = document.getElementById('fileUpload');
fileUpload.addEventListener('submit', function(e) {
  e.preventDefault();
  var xhr = new XMLHttpRequest();
  xhr.open('POST', '/');
  xhr.send(new FormData(myform)); // ここ
});
</script>
```

もしくは Form を経由せずに自分で組み立てることもできます。


```js
var form = new FormData();

// file のような blob
var file = new Blob(['this is my memo'], { type: "text/plain" });

form.append('fileName', 'memo.txt');
form.append('file', file);

xhr.send(form);
```

ところが、これはどちらかというと Blob や File を送ることを想定されているため、
FormData を send したら、 multipart/form-data として送られます。

それはまあ、いいのですが、例えば `<input type="text">` のみの Form や、
テキストのみを append した FormData を送ったとしても、 multipart になってしまいます。

```js
var form = new FormData();
form.append('id', '123456');
form.append('username', 'jxck');
xhr.send(form);


// ------WebKitFormBoundaryIieqlAAUtjBHtKc1
// Content-Disposition: form-data; name="id"
//
// 123456
// ------WebKitFormBoundaryIieqlAAUtjBHtKc1
// Content-Disposition: form-data; name="username"
//
// jxck
// ------WebKitFormBoundaryIieqlAAUtjBHtKc1--
// Response Headersview source
```

例え XHR に content-type のヘッダを追加していても form-urlencoded にはならず、
ちょっと直感に反する気がしてしまう。(かつ、 Twitter で検索したら同じことをつぶやいてる人はいる模様)

という話を ML で聞いてみたら、それは URLSearchParam でやれとのことだった。

[[whatwg] why FormData dosen't support x-www-form-urlencoded ?](http://lists.w3.org/Archives/Public/public-whatwg-archive/2014Dec/0037.html)


## URLSearchParams

URL の query を組み立てるための API 的な感じ。

https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams


絶賛仕様策定中の [URL spec](https://url.spec.whatwg.org/) の一部として定義されています。
(この話はまたどっかで)


```js
var paramsString = "q=URLUtils.searchParams&topic=api";
var searchParams = new URLSearchParams(paramsString);

console.log(searchParams.has("topic") === true); // true
console.log(searchParams.get("topic") === "api"); // true
console.log(searchParams.getAll("topic")); // ["api"]
console.log(searchParams.get("foo") === null); // true
console.log(searchParams.append("topic", "webdev") === undefined);
console.log(searchParams.toString() === "q=URLUtils.searchParams&topic=api&topic=webdev");
console.log(searchParams.delete("topic") === undefined);
console.log(searchParams.toString() === "q=URLUtils.searchParams");
```

まあ、 API 自体は直感的というか。良い意味でなんでも無い感じ。

実装はまだ FireFox くらいしかないようなので、片手間に実装してみる。

[Jxck / URLSearchParams.js](https://gist.github.com/Jxck/4b3a89cab04f3725a245)


## まとめ

でも、 getElementById で取得した Form をそのまま xhr.send() しても、 multipart/formdata になるのはちょっとなぁと思わなくはない。
サーバが対応してれば別にいいのだけれど、 OAuth 系とかそうじゃないものもある気がするし。

Form から一旦 input を取り出して、自分で URLSearchParams を組み立てて送るのもなぁ。
これをバグとして上げるべきかどうか、ご意見あれば頂きたいです。
Compute Engine インスタンスから Cloud Storage にアクセスする

# はじめに
GCE インスタンスから Cloud Storage にアクセスしたい．プロジェクト内部からのアクセスなので [OAuth 2.0 を直接用いた方法](https://cloud.google.com/storage/docs/json_api/v1/json-api-python-samples) より簡単な[サービスアカウント](https://cloud.google.com/compute/docs/authentication)を用いる．

# 認証
始めに，メタデータサーバからアクセストークンを取得する．

```py
import json
import urllib2

METADATA_SERVER = "http://169.254.169.254/computeMetadata/v1/instance/service-accounts"
SERVICE_ACCOUNT = "default"

req = urllib2.Request("{0}/{1}/token".format(METADATA_SERVER, SERVICE_ACCOUNT))
req.add_header("Metadata-Flavor", "Google")

data = json.load(urllib2.urlopen(req))

token = data["access_token"]
token_type = data["token_type"]
```

# トークンを用いたアクセス
Cloud Storage へのアクセスは受け取ったトークンを使う．

## オブジェクトの取得

```py
from apiclient import discovery

sp = discovery.build("storage", "v1")
req = sp.objects().get_media(bucket=<BUCKET>, object=<PATH>)
req.headers["Authorization"] = "{0} {1}".format(token_type, token)
res = req.execute()
```

[サンプルコード](https://cloud.google.com/compute/docs/authentication)では `oauth2_client.AccessTokenCredentials` を使っていたが，上記の方法でもアクセスできる．

## チャンク形式でオブジェクトのアップロード

```py
from apiclient import discovery
from apiclient.http import MediaIoBaseUpload

sp = discovery.build("storage", "v1")
# fp: アップロードするデータ, mimetype: MIME type
media_body = MediaIoBaseUpload(fp, mimetype, resumable=True)

req = sp.objects().insert(bucket=<BUCKET>, body=dict(name=<PATH>), media_body=media_body)
req.headers["Authorization"] = "{0} {1}".format(token_type, token)
req.execute()
```

# 参考
  * [Authenticating from Google Compute Engine - Google Compute Engine &mdash; Google Cloud Platform](https://cloud.google.com/compute/docs/authentication)
  * [Downloading files from google cloud storage using service account authentication with nodejs google-api-nodejs-client](http://qiita.com/ku0522a/items/0bba0f44644195e4fec0)
gnuplotをHomebrewからインストール

## 実行環境
- MAC OS X 10.10 yosemite
- Homebrew 0.9.5
- gnuplot 4.6.6

## AquaTermのインストール
事前にインストールしとく
http://sourceforge.net/projects/aquaterm/

## gnuplotのインストール
下記コマンドでインストール

```
brew reinstall gnuplot --with-aquaterm
```

## 確認
下記コマンドでグラフがプロットされれば、インストール完了

```
$ gnuplot
$ plot(x)
```
buildozerを使ってスマホ向けKivyアプリを開発する取っ掛かり

pythonのクロスプラットフォーム開発ライブラリにKivyというものがあります。
Kivy自体の細かい仕組みはとかは一旦置いておいて（まだそこまで使えていません）、
Kivyが提供しているiOS/Android用パッケージを作成するまでの大まかな方法を紹介していこうと思います。


# python-for-android と kivy-ios

## python-for-android

Kivyのandroid向けパッケージングを行うプロジェクトです。（Google Codeにあるものとは別物らしいです）
Android SDK + NDKをベースにARM向けPythonをビルドして(=hostpytthon)、hostpythonに実際のアプリを動かす仕組みみたいです。

``` パッケージングの際に一緒にビルドするPythonパッケージ環境を作って、apkファイルを作る過程
$ cd python-for-android
$ ./distribute.sh -m "openssl pil kivy"
$ cd dist/default
$ ./build.py --package org.test.touchtracer --name touchtracer --version 1.0 --dir ~/code/kivy/examples/demo/touchtracer debug
```

実行自体はそんなに難しい手順を必要としないのですが、

* 環境変数を何個か定義しないといけない
* Kivyアプリ実行時に必要なパッケージをAndroid向けビルドをするには、recipesにビルド用のレシピを用意しないといけない。

というあたりが少々面倒。


# kivy-ios

こちらは、iOS向けのxcodeプロジェクトを作成してするプロジェクト。

``` 使い方の例：インストール準備までは省略
$ ls 
kivyapp <- ここにKivyアプリが入っている
$ git clone https://github.com/kivy/kivy-ios
$ ./tools/build-all.sh
$ ./tools/create-xcode-project.sh kivyapp ./kivyapp
```

コマンド自体はpython-for-androidと同様にシンプルですし割りとあっさり実機動作の確認が出来るのですが、

* xcoeproject がtools/ 以下に生成されてしまう。
* 何故かxcodeproject生成時の対応端末がiPadのみになっている。
* ApplicationDelegate 探すのが大変
* シミュレータでは動かない。
* pythonの標準ライブラリをかなり詰め込むらしく、ファイルが肥大化しやすい

といったのも抱えてるのが気になります。


# buildozer でAndroid/iOSビルド環境をまとめて準備する

[Buildozer](https://github.com/kivy/buildozer) は上記2プロジェクトをまとめてコントローする事ができるツールで、
最終的には

* (Android側)
    * Android-SDK, NDKのダウンロード
    * SDKのtools,buildtoolsのダウンロード
    * python-for-androidのダウンロード
    * パッケージング
* (iOS側)
    * Cythonのインストール
    * kivy-iosのダウンロード
    * xcodeprojectの生成
    * パッケージング

と言ったパッケージングに関わることの大部分を取り扱ってくれます。

## インストールしてみる

PyPIにも登録されているのですが、個人的にはgithubのソースからインストールする方がいいです。（stableでは、いろいろな問題でandroid系環境構築が進みません）

```
$ git clone git://github.com/kivy/buildozer
$ cd buildozer
$ python setup.py install
```

基本的にはインストール時に使用可能になるbuildozerコマンドで大半が片付きます。

```
$ buildozer init
$ ls -l
(アプリのソース)
buildozer.spec <- ここにビルド/パッケージングに必要な項目を記述していきます（アプリ名、iOSのAppIDなど）
$ buildozer android debug <- android向けapkファイルのパッケージング。途中の過程もこのコマンド一発で実行してくれる
$ buildozer ios debug <- ios向けipaパッケージング。途中の過程もこのコマンド一発で実行してくれる
```

ね、簡単でしょ？

buildozer.specには、AndroidSDKやNDKのパスなども記述できるため、既にダウンロードしているものを使うことも可能です。
また、--profileオプションを用いて個別の変数も設定できるので細かいビルドもできます。


## 気をつけた方がいい点

上に書いたとおり、SDK,NDKなどのパスを指定できるのですが、何も編集せずに実行すると全部ダウンロードしようとします。
また、あくまでpython-for-androidやkivy-iosをダウンロードして、特定コントロール下のみでまとめて取り扱うため、
上の課題がまるまる残っています。

それでも、よほど変わったPythonパッケージを使わない限りKivy上でのアプリ開発に集中できるのでオススメです。


# オマケ
![スクリーンショット 2014-12-10 22.39.02.png](https://qiita-image-store.s3.amazonaws.com/0/6805/e38aa572-b37f-6bed-7621-4d215b03dff0.png)

Hello worldのボタンだけ表示するアプリをパッケージングしてみた結果です。

見事にipaファイルが肥大化しました。逆にApkファイルは思いの外小さかったのが印象に残りました。
日本向けRailsアプリケーションをHerokuで走らせるためのまとめ

Heroku Toolbeltが導入され、ログインされていることが前提となります。
くわしくは[こちら](http://qiita.com/ytkt/items/6888bc9291c3de8028e9)


## herokuにapp作成
```bash
$ heroku apps:create [NAME]
Creating [NAME]... done, stack is cedar-14
https://[NAME].herokuapp.com/ | https://git.heroku.com/[NAME].git
```

## リモートリポジトリ登録
```bash
$ heroku git:remote -a [NAME]
```
`heroku`というリモート名にリポジトリがセットされます。

## Stackのタイムゾーンを`Asia/Tokyo`に設定
```bash
$ heroku config:add TZ=Asia/Tokyo
```

## 環境変数LANGを`ja_JP.UTF-8`に変更
```
heroku config:set LANG=ja_JP.UTF-8
```

## 表示時のタイムゾーンをJSTに変更

```ruby:config/application.rb
config.time_zone = 'Tokyo'
```

## serve static assetsを有効に
precompileされたassetsを配布する設定を有効にします。

```ruby:config/environments/production.rb
config.serve_static_assets = true
```

`rails_12factor`というgemをproduction環境のみで有効にするという手もあります。

```ruby:Gemfile
gem 'rails_12factor', group: :production
```


## Let's デプロイ！
```bash
$ git push heroku master
```

## DBのマイグレーション
```bash
$ heroku run rake db:migrate
```

## 確認
```bash
$ heroku open
```
Heroku Toolbeltの導入

## Homebrewでインストール
```bash
$ brew install heroku-toolbelt
```

## pkgでインストール
[Heroku Toolbelt](https://toolbelt.heroku.com/)からパッケージダウンロード & インストール

# Herokuへのログイン
```bash
$ heroku login
Enter your Heroku credentials.
Email:example@example.com
Password (typing will be hidden): 
Authentication successful.
```
Smalltalk Web開発編 その0（Teapot）

## はじめに
マイクロWebフレームワーク「<a href="http://smalltalkhub.com/#!/~zeroflag/Teapot">Teapot</a>」の紹介です。

SmalltalkのWebアプリケーションフレームワークといえば、Seaside、AIDA、Iliad、Amber Smalltalkといったところが有名ドコロです。
しかしながら、「ちょっとした小物を作りたい」という用途には、思想が独特であったり、歴史を経て大きくなっていたりと、やや取り回しが面倒です。

Teapotは、小さくて理解しやすい、どこかで見たことがあるような、どちらかといえば庶民向けのフレームワークです。
「Smalltalkに入門するついでにWebもお試しで」という用途にもうまくはまると思います。



## Teapotの守備範囲
Teapotは、Pharo Smalltalkに同梱されている、[Zinc HTTP Components](http://zn.stfx.eu/zn/index.html)を薄くラッピングしたライブラリです。
主に、「GET、POST等のHTTPメソッド」「URLパターン」「リクエストに対するアクション」の三つ組みを取り扱います。

```smalltalk:Example01
| teapot |
Teapot stopAll.
teapot := Teapot configure: {
    #port -> 8080.
}.

teapot
    GET: '/cat/<who>/<name>' -> [:req | (req at: #who) , ' は ' , (req at: #name) , ' である'];
    start.
```


## 環境の準備
[Pharo 3.0](http://pharo.org/) を入手し、以下のスクリプトを実行することでTeapotのインストールができます。

```smalltalk:InstallTeapot
Gofer it
  url: 'http://mc.stfx.eu/Neo';
  package: 'Neo-JSON-Core';
  load.

Gofer it
    smalltalkhubUser: 'zeroflag' project: 'Teapot';
    configuration;
    loadStable.
```

解説はしませんが、テンプレートエンジンに「Mustache」を使用する場合は、以下も合わせて実行すると良いでしょう。

```smalltalk:InstallMustache
Gofer it
  smalltalkhubUser: 'NorbertHartl' project: 'Mustache';
  configurationOf: 'Mustache';
  loadStable.
```


## サンプルプログラム「アクセス カウンター」
シンプルなアクセスカウンターです。
Webブラウザで、http://localhost:8080/countup にアクセスする度にカウントアップします。

```smalltalk:AccessCounter
| teapot count |
Teapot stopAll.
teapot := Teapot configure: {
    #port -> 8080.
}.

count := 0.
teapot
    GET: '/countup' -> [:req | count := count + 1. count];
    start.
```


## サンプルプログラム「ゴッドクラス/ゴッドメソッド ランキング」
「[オブジェクト指向の神　〜ゴッドクラス と ゴッドメソッド〜](http://qiita.com/tomooda/items/12a8581149fca481e1ca)」がいい感じなので、こちらでもやってみましょう。
JSON形式で、ランキングを返します。

```smalltalk:GodRanking
| teapot cache |
Teapot stopAll.
teapot := Teapot configure: {
    #port -> 8080. #defaultOutput -> #json.
}.

cache := Dictionary new.

teapot
  GET: '/god/own' -> [:req |
    cache
      at: req uri
      ifAbsentPut: [(ProtoObject allSubclasses collect: [:c | {c selectors size. c name}])
                      asSortedCollection: [:a :b | a first > b first]]];
  GET: '/god/total' -> [:req |
    cache
      at: req uri
      ifAbsentPut: [(ProtoObject allSubclasses collect: [:c | {c allSelectors size. c name}])
                      asSortedCollection: [:a :b | a first > b first]]];
  GET: '/god/method' -> [:req |
    cache
      at: req uri
      ifAbsentPut: [(CompiledMethod allInstances 
                      collect: [:m | {m getSource asString lines size. m name}])
                        asSortedCollection: [:a :b | a first > b first]]];
  start.
```

## おわりに
マイクロWebフレームワーク「<a href="http://smalltalkhub.com/#!/~zeroflag/Teapot">Teapot</a>」のちょっとした紹介でした。
この他、<a href="http://smalltalkhub.com/#!/~zeroflag/Teapot">こちら</a> をざっと眺めれば、大体のことは把握できると思います。
イロイロ簡単にやれそうな感じがするのではないでしょうか。お試しあれ。