OmniAICreator/Qiita-1.07M huggingface dataset:
iBeacon で忍者が密会する

先日、iBeacon を使ったアプリを AppStore で公開しましたので、簡単に紹介させていただきたいと思います。このアプリは複数名で開発しており、私は実装担当でした。

* [Ninja Tryst](http://www.appstore.com/ninjatryst)

# iBeacon の特徴

iBeacon は、ざっくり言えば、様々な機器が発するビーコン信号を iOS デバイスが検出する仕組みです。

iBeacon の特徴を簡単に述べておきます。詳しい情報は、昨日や一昨日の Advent Calendar の記事が参考になると思います。

* BLE (Bluetooth Low Energy) を利用
	* 一般の BLE 通信と異なり、ペアリングが不要
* 受信側デバイス
	* BLE 搭載の iOS デバイス
* 発信側デバイス
	* BLE 搭載の機器で、iBeacon 仕様のビーコン発信を実装したもの
* アプリがバックグラウンドのときでも、ビーコンを検出してユーザに通知できる
* おおまかな距離の情報が取得できる

## Ninja Tryst では

今回のアプリ開発ではこれらの特徴の中から、距離の情報が取得できる、という点に着目してみました。

# iBeacon の実装

次に、iBeacon をアプリに組み込む実装方法を簡単に述べておきます。これも、詳しい情報は、昨日や一昨日の Advent Calendar の記事が参考になると思います。

また個人的には、WWDC のサンプルコードである AirLocate のコードを参考資料として読みました。iOS Dev Center でダウンロードできます。

## ビーコンの受信

BLE を利用していますが、Core Bluetooth を使うわけではありません。iBeacon は、Region Monitoring に近い性格のものとして位置づけられているように思えます。

* Core Location フレームワークを使う
	* 従来は、位置情報取得や Region Monitoring の機能があった
	* ここに iBeacon 受信機能が追加された
* `CLLocationManager`
	* ビーコン領域の検出
		* `startMonitoringForRegion:` で開始
		* ビーコン領域に入ったり出たりすると `locationManager:didDetermineState:forRegion:` が呼ばれる
	* 個々のビーコン信号を取得
		* `startRangingBeaconsInRegion:` で開始
		* ビーコン信号を取得すると `locationManager:didRangeBeacons:inRegion:` が呼ばれる

## ビーコンの発信

iOS デバイスは主にビーコンの受信側として使われることが多いと思いますが、ビーコンの発信側になることもできます。こちらは、BLE 周辺機器として実装します。

* Core Bluetooth フレームワークを使う
	* 参考：[iOS デバイスを Bluetooth LE 機器にする](http://blog.fenrir-inc.com/jp/2013/10/bluetooth-le-ios-2.html)
* `CBPeripheralManager`
	* ビーコン発信
		* `startAdvertising:` で発信
		* 発信するデータは `CLBeaconRegion` で生成する（`peripheralDataWithMeasuredPower:` を使う）

## Ninja Tryst では

iBeacon は一般的には、ビーコン発信器を特定の場所に固定で設置して、iOS デバイスがビーコン受信器になる、という使い方です。

しかし今回のアプリ開発では、iOS デバイスが発信側にもなれる、という点に着目して、iOS デバイス同士でビーコンの発信・受信を行うようにしました。

* ビーコンの発信と受信を同時に行う
     * `CLLocationManager` と `CBPeripheralManager` を両方動かす
* 2台のデバイスそれぞれがお互いのビーコンを受信する

# Ninja Tryst の概要

さて、アプリの紹介ですが、一言でいえば、待ち合わせを手助けするアプリです。ビーコンによって、相手までのおおまかな距離をアプリ画面に表示します。

という書き方をすると真面目なアプリのようですが、ビーコンで忍者が密会するアプリです。ぶっちゃけ、アホアプリの部類に入ります（注：「アホアプリ」という言葉は褒め言葉です）。

まあ、はっきり言って、ちゃんと使おうとすると不便なアプリです。

詳しくは、公式 Web サイトがオススメです。また、開発メンバの紹介記事も見ていただくのがいいかと思います。

* [Ninja Tryst](http://www.ninjatryst.com/) : 公式 Web サイト
* [iBeacon実験アプリ NinjaTryst リリースしました。](http://guchitaka.com/?p=119) : たいへんインパクトが強いデザインを作ったデザイナー
* [クソアプリカンパニーの地獄部屋 — Ninja Trystの開発に参加してました](http://kuso-app-president.tumblr.com/post/68367994900/ninja-tryst) : そもそもこの人がいなかったらこのアプリはなかった、リーダー＆企画

## 距離の表示

距離は次の4段階で表示しています。

* 隠：ビーコン未検知
* 忍：ビーコンの proximity の値が Far
* 獲：ビーコンの proximity の値が Near
* 顕：ビーコンの proximity の値が Immediate

# 実際に動かしてみて

ビーコンから取得できる距離情報に注目したわけですが、期待していたほど距離の精度はよくないという印象を受けました。

ビーコンの accuracy プロパティが距離の数値っぽいと思いきや、この数値から正確な距離を知ることは無理でした（そもそも、Apple のドキュメントにそういう目的には使うなと書いてあります）。ビーコンの proximity プロパティがおおまかな距離を示す値ですが、これもわりとブレがあります。また、移動中に値が更新されるのが思ったよりも遅い気がしました。

また、ビーコンからは方向の情報は得られません（BLE だから当たり前といえば当たり前）。下手な使い方では、位置推定に使うのはつらい感じです。

と、欠点ばかりずらずら書きました。それでも、使えない技術だと思っているわけではありません。大事なことは、何ができるのかを把握してうまく使うことです。

iBeacon の特性をつかんで上手に生かすような使い方を考えれば、有益な技術であることは間違いないと思います。
自分流の .emacs管理

.emacs Advent Calendarということで、自分の.emacsの管理方法について書いてみました。

* package.elとel-getの同時利用
* init-loaderによる設定分割
* 自分の設定分割の単位

http://shibayu36.hatenablog.com/entry/2013/12/03/213942
vim-powerline (lightline.vim)


##はじめに

この記事は､[みんなで作ろう最強の設定ファイル Advent Calendar 2013](http://qiita.com/advent-calendar/2013/dotfiles)という企画の一部です｡

```bash:
$ mkdir -p ~/dotfiles/.zsh/

$ cd !$

$ git clone https://github.com/syui/dotfiles.git
```

##解説

`vim`というエディタで使える`powerline`があります。[lightline.vim](https://github.com/itchyny/lightline.vim)といいます｡



まずは、ツールをダウンロードしていきましょう｡

```vim:~/.vimrc
NeoBundle 'itchyny/lightline.vim'
```

ちなみに、[NeoBundle](https://github.com/Shougo/neobundle.vim)のプラグインをコマンドラインからインストールできるようにするには､以下の様な感じのコマンドを使います｡

```vim:
$ . ~/.vim/bundle/neobundle.vim/bin/neoinstall
```

または、

```bash:
$ vim +NeoBundleInstall +q
```

ちなみに、以下の様なシェルスクリプトを使って、インストールするものを引用したりも出来ます｡

```bash:~/dotfiles/bin/neobundle-install
#!/bin/bash
vimrc=$HOME/dotfiles/.vimrc.bundle
fpion=`grep -n "filetype plugin indent on" ${vimrc} | sed -e 's/[^0-9]//g'`

sed -i -e "${fpion}d" ${vimrc} && echo -e "NeoBundle '$1'\nfiletype plugin indent on" >> ${vimrc} && vim +NeoBundleInstall +qall
```

```bash:
$ chmod +x ~/dotfiles/neobundle-install

$ . !$ itchyny/lightline.vim
```

次に､設定していきます｡[MacVim に lightline.vim をインストール](http://yuzuemon.hatenablog.com/entry/2013/12/02/223804)の記事が参考になります｡

```vim:~/.vimrc
" lightline.vim
let g:lightline = {
      \ 'colorscheme': 'wombat',
      \ 'component': {
      \   'readonly': '%{&readonly?"\u2b64":""}',
      \ },
      \ 'separator': { 'left': "\u2b80", 'right': "\u2b82" },
      \ 'subseparator': { 'left': "\u2b81", 'right': "\u2b83" },
      \ }

" カラー設定
set t_Co=256
```

こちらの設定は、`iTerm2` の `Preferences > Profiles > Terminal` の `Report Terminal Type` を `xterm-256color` に設定すれば不要になります。

```bash:~/.zshrc
" カラー設定
export TERM=xterm-256color
```

また、フォントの三角部分が上手く表示されないようなら､パッチを当てましょう｡

```bash:
# リポジトリの clone
$ git clone https://github.com/Lokaltog/vim-powerline.git 
$ cd vim-powerline/fontpatcher

# fontpacher の適用
$ fontforge -script ./fontpatcher ＜フォントのパス＞hoge.ttf
$ fontforge -script ./fontpatcher ＜フォントのパス＞hoge.ttf
```
LaunchRockでプロジェクト名を削除する。

ティザーサイトを簡単に作成できるLaunchRockというサービスで、
プロジェクト名を入力した際に、デフォルトではプロジェクト名が必ず表示されますが、
それを表示させないようにする方法です。

LaunchRockでは直接htmlコードを編集できる機能がありますので、
その機能を使って、プロジェクト名を表示させているコードを削除します。

##Advanced Code Editorを編集

ページ右下のAdvanced Code Editorというボタンをクリックし、
htmlコードの編集画面を開きます。
3分割されていますが、一番左がhtmlコードになります。

一番左のコードから以下の一文を探し、削除するとプロジェクト名が表示されなくなります。

```html:
<h1 class="LR-site-title">TITLE</h1> <!-- プロジェクト名 -->
```


##以下のコードで他の部分も編集できます。


・Headerイメージ

```html:
<div class="LR-bg-img LR-header-bg-image-container LR-header-show-on-bg-image"></div> <!-- Headerイメージ -->
```


・サイトロゴ

```html:
<div class="LR-site-logo"><img src="js/ignition/themes/focus/img/logo.png" alt="Site Logo"/></div> <!--サイトロゴ -->
```

・説明文 

```html:
<div class="LR-site-description opensans"></div> <!-- 説明文 -->
```
Model で Validation したい? それならば Ardent だ！

# はじめに

はい、4日めです。引き続き [@localdisk](http://twitter.com/localdisk) です。よろしくお願いします。

本日は Model で Validation を行うパッケージ [Ardent](https://github.com/laravelbook/ardent) のご紹介。

# Validation のおさらい

その前に [Laravel](http://laravel.com) の Validation についておさらいしておきましょう。

Laravel の Validation は大体こんな感じ。ほとんどの場合で Controller か、routes.php に書くことになると思います。

```php
// ルール
$rules = [
    'username' => 'required|alpha_dash|unique:users',
    'email'    => 'required|email|unique:users',
    'password' => 'required|between:4,11|confirmed',
    'password_confirmation' => 'between:4,11',
];
$validator = Validator::make($rules);

// Validation 作成
$validator = Validator::make($inputs, $rules);

if ($validator->fails()) {
    // Validation 失敗
    return Redirect::back()->withInput()->withErrors($validator);
}
if ($validator->passes()) {
    // ちなみにこれが成功
}
```

わかりやすい！ ` fails`  と ` passes`  というひと目見てわかるメソッド名が素晴らしいですね。こういうところが Laravel のよいところです。

# Ardent の導入

まずは ` composer.json`  の ` require`  セクションに下記を追加

```js
{
    "require": {
        "laravelbook/ardent": "dev-master"
    }
}
```

そして ` composer update`  で OK. 他のパッケージだと必要な ` ServiceProvider`  や ` Facade`  の登録は必要ありません。

# 基本的な使い方
まず、対象の Model を用意します。User という Model にしましょう。普通に作ると

```php
class User extends Eloquent {}
```

こうなりますね。Ardent は

```php
use LaravelBook\Ardent\Ardent;

class User extends Ardent {}
```

となります。継承するクラスを Eloquent から Ardent に変更します。そして Validation の定義はこう。

```php
class User extends Ardent {
    public static $rules = [
        'username' => 'required|alpha_dash|unique:users',
        'email'    => 'required|email|unique:users',
        'password' => 'required|between:4,11|confirmed',
        'password_confirmation' => 'between:4,11',
    ];
}
```

はい、このように $rules フィールドに Validation ルールを記述するだけです。簡単ですね。このように記述すると Model の登録/更新時に Validation が適用されます。

# 一時的に、違うルール、メッセージを適用する
「基本的にはこれでいいんだけど、XX の場合だけ Validation 変更できない?」というケースも安心です。

save メソッドを呼び出すときに引数で渡すこともできます。

```php
$rules = [
    'password' => 'required|between:4,11|confirmed',
];
$message = [
    'required' => 'パスワードを入れないとかどうかと思うよ。',
];
$user->save($rules, $message);
```

第1引数にルール、第2引数にカスタムメッセージを渡せば OK.

# Validation を適用したくない
これもよくあるパターンですね。その場合はこうしましょう。

```php
$user->forceSave();
```

余談ですが、初めて使った時にハマりました。ドキュメントの斜め読みよくない。

# この Model だけ、違うメッセージを出したい
その場合は、Model に $customMessages を定義ます。

```php
class User extends Ardent {
    public static $customMessages = [
        'required' => 'パスワードを入れないとかどうかと思うよ。',
    ];
}
```

# 更新時は unique を適用しない
Laravel の Validaton には unique というルールがあり、これは対象テーブルのカラムの内容が unique かどうかを検査します。
しかし、更新時はそのルールが邪魔になってしまいます。この場合、save(ユニークを外したルール) とすることもできますが ` updateUniques`  を使用するほうが
よりスマートです。

```php
// 更新時、unique ルールを適用したくない場合
$user->updateUniques();    
```

以上、4日目は Ardent というパッケージを紹介しました。明日は日本の Laravel 神である [@HiroKws](http://twitter.com/HiroKws) さんです！
Cross Platform MIDI Tools Advent Calendar #3: MIDIプレイヤーAPIとプラットフォーム中立性

前回のMIDIライブラリの説明が長くなりすぎたので、本来書くつもりだった話がまるっと一日ずれてしまったのだけど、今回はMIDIプレイヤーのAPIについて。今日は時間が無いので短い内容で。

話の続きを書く前に、コードのリポジトリを明記しておこうと思う: https://github.com/atsushieno/managed-midi/

MIDIプレイヤーの基本設計は単純だ。前回書いたSMFライブラリで得られたMIDIメッセージ（デルタタイムとMIDIイベント）のマージされた集合を入力として、デルタタイムが経過するのを待機してタイミング良くMIDIイベントを「送信」するだけだ。

上記の動作を反映したものが、MidiPlayerというクラスとして実装されている。特筆すべきこととして、このクラスはMIDIイベントを送信する部分については「何もしない」。正確に言えば、「もしイベントハンドラーが登録されていたら、それを呼び出す」。

今回のAdvent Calendarの第１回で、MLDSPというMoonlightベースのプレイヤーを作ったという話を書いた。このプレイヤーは実は（当然というべきか）Silverlight（あるいはブラウザ上のMoonlight）でも動作する。Silverlightはブラウザプラグインだから、MIDIアクセスのAPIは存在しない。少なくともSilverlight3までは、デスクトップのネイティブAPIにアクセスする手段は全く無かった（MLDSPはSilverlight 2.0の頃に作られている）。ブラウザ上で動作するMLDSPでは、MIDI音源へのアクセスは一切無い。何をしていたかというと、「何もしなかった」。つまり、楽曲のMIDIメッセージ送信タイミングに合わせて、画面上でキーボードやキーオンメーターなどが踊っていただけだった。もちろんMIDIプレイヤーとしてはほぼ意味がないのだけど、このMIDIプレイヤーAPIが限りなくプラットフォーム中立なかたちで利用できることが分かると思う。

筆者が見てきた限りでは、世にある.NETのMIDIライブラリは、Windows（winmm）を前提としたものばかりで、他のプラットフォームに対応しているものは無く、汎用性に欠ける。managed-midiライブラリは、platform abstraction layerを明確に切り離すことで、プラットフォームの流行に巻き添えを食わない形で生き残れるようにしたいと思っている。

実際にデスクトップ上で動作するMIDIプレイヤーでは、portmidiというCベースのクロスプラットフォームMIDIライブラリのラッパーAPIをC#で作成し、それを呼び出すPortMidiPlayerというクラスを使っている（MLDSPでも使っていた）。

クロスプラットフォームなネイティブMIDIアクセスライブラリは、portmidi以外にもあって、たとえば筆者が最近乗り換えを検討しているのはrtmidiというライブラリだ。こちらはiOSなどにも対応している。これに対応したRtMidiPlayerを作るのも簡単だった。（ちなみに乗り換えを検討しているのは、portmidiがJava SDKをセットアップしていないとビルドできないという問題があって、開発者の多くがビルドできないことが予想されたためだ。portmidiに依存するせいで利便性が巻き添えになっては困る。）

rtmidiのバインディング及びプレイヤーは既に作成してみたのだけど、rtmidi本体はC++で書かれているので別途Cで作り直したAPIが必要になったことと、まだ一度も実際に使っていないこともあって、github上には https://github.com/atsushieno/rtmidi-sharp として置いてあるものの、いずれモジュールを分割した上で、今あるものは廃棄される予定だ。

このMidiPlayerは、演奏時に遅延が生じると、単純に遅延を引きずってしまう。適時タイマーの計測値とデルタタイムの総計を比較するだけなので、補正処理を入れようと思えば出来なくはないけど、とりあえずその必要が生じたことがないので、やっていない。他の言語におけるMIDIプレイヤーのAPIとの大きな違いは、そのくらいだろうかと思う。
Haxeの関数値について雑多なこと

さてさて、Haxeネタ書きます。今日はClojureネタ書いたので軽めに。

# 関数値としてのHaxe

## 関数値

さてさて、Haxeは関数を値として持ち、また、それを好きなときに呼び出すことができます。

```hx:Sample.hx
class Sample{
	public static function main(){
		var foo = function(){ trace('foo!'); };
		foo();
	}
}
```

## メンバ変数にメソッドを代入する

また、Haxeは関数値なので、メンバ変数として利用することもできます。

```hx:Hoge.hx
class Hoge{
	public var foo : Void -> Void;

	public function new(){}

	public function callFoo(){
		this.foo();
	}
}
```

このように、外から関数値を代入することができます。

```hx:SampleHoge.hx
class SampleHoge{
	public static function main(){
		var hoge = new Hoge();
		hoge.foo = function(){ trace("hoge!"); };
		hoge.callFoo();
	}
}
```

ちなみに、var foo : Void -> Void; dynamic public function foo(){}とほぼ同等です。

```hx:Hoge2.hx
class Hoge2{
	dynamic public function foo(){};

	public function new(){}

	public function callFoo(){
		this.foo();
	}
}
```

## メソッドをメンバ変数に代入する

さて、bazメソッドを持つPiyoというクラスがあったとします。

```hx:Piyo.hx
class Piyo{
	public var bar = "piyo";
	
	public function new(){}
	
	public function baz(){
		trace(this.bar);
	}
}
```

このように、メソッドをメンバに代入して、 代入したオブジェクトで、呼びだすことができます。

```hx:SamplePiyo.hx
class SamplePiyo{
	public static function main(){
		var hoge = new Hoge();
		var piyo = new Piyo();


		hoge.foo = piyo.baz; 
		hoge.callFoo(); 
                // => piyo! 

		piyo.bar = "piyopiyo";
		hoge.callFoo();
                  // => piyopiyo!
	}
}
```

# 関数値を利用例

では、実際に関数値を利用する場合はいつでしょうか? 
実際に良くある事例を一例を挙げます 。

## Ajaxの非同期通信のコールバック関数として

まずは、これでしょう。Ajaxが簡単に書けます。

```hx:SampleAjax.hx
import haxe.Http;

class SampleAjax {
    static function main() {
        var http = new Http("piyopiyo.json");
        http.onData = function( data:String ){ 
           trace(data); 
        };
        http.onError = function( data:String ){ 
           trace(data); 
        };
        http.request( false );
    }
}
```

## 関数型プログラミングとして

ここに書くにはスペースが足りなさすぎる!!!

### まとめ

関数値が扱かえるって良いよwww!

明日は、だれも書かない様子なら僕が書きまう。
土曜日は@shohei909さんです。よろしくおねがいします。
StoreApp objectとプロパティ名からプロパティ値を得る

[WindowsRT/StoreApp]

PropertyChanged イベントを受け取った。
`void Handle(object sender, PropertyChangedEventArgs e)`

プロパティの持ち主は `sender`, プロパティ名は `e.PropertyName` である。
このふたつからプロパティ値を手に入れる。

```csharp
using System;
using System.Reflection;
// これを忘れると Type.GetTypeInfo() できないので注意！
// なぜなら GetTypeInfo() は System.Reflection に定義された拡張メソッドであるからだ。
...
public static bool TryGetPropertyValue(object target, string propertyName,
                                             out object propertyValue) {
  if ( target != null ) {
    Type type = target.GetType();
    TypeInfo typeInfo = type.GetTypeInfo();
    foreach ( PropertyInfo prop in typeInfo.DeclaredProperties ) {
      if ( prop.Name == propertyName ) {
        propertyValue = prop.GetMethod.Invoke(target, null);
        return true;
      }
    }
  }
  propertyValue = null;
  return false;
}

void Handle(object sender, PropertyChangedEventArgs e) {
  object result;
  if ( TryGetPropertyValue(sender, e.PropertName, out result) ) {
    // result にプロパティ値が得られる
  }
}
```
**※ reflection/introspection を使ったこのコード、C++/CXでは実装できない。
　C++/CX には Platform::Type はあるが Platform::TypeInfo が存在しないので。**
Hubot-scriptsのmsg.randomを学ぶ


チャット相手が毎回同じ応答を返してくるとすぐ飽きますよね。

私：「おはよう」
hubot：「やっほー」
私：「おはよう」
hubot：「やっほー」
私：「おはよう」
hubot：「やっほー」
　　　　：

こんな感じではやる気がなくなってきます。今回はランダムに応答を返すという方法を試してみましょう。

## シンプルなランダムに応答を返すスクリプト

こんにちはに対して、ランダムに答えるscriptを紹介します。

```randommes.coffee
module.exports = (robot) ->
  robot.hear /こんにちは/, (msg) ->
    msg.send msg.random ["ちわー", "こんにちはっ", "ちゃーす", "こ、こんにちは"]
```

ポイントは msg.send の後の、msg.randomです。msg.randomに配列を渡すと、その中からランダムに応答を返してくれます。

結構簡単ですよね。
pip install 元に github のリポジトリを指定する

```
% pip install -e git+https://github.com/PyYoshi/python-daemon.git@master#egg=daemon-origin
```

egg= はパッケージ名を指定するようだが、python-daemon や daemon ではダメだった http://www.pip-installer.org/en/latest/usage.html
よく分からないけど、そういうものらしい。

また、`pip install https://github.com/PyYoshi/python-daemon/archive/own.zip` のようにする方法もあるけど、pip freeze でパッケージを見失うのがイマイチ。
mruby-meta-circularの紹介　その２

[前回](http://qiita.com/miura1729/items/15d564894d315cfef1b1)からの続きです

mruby-meta-circularのmrblib/irep.rbにはmrubyのirepを操作するのに便利なメソッドがいろいろ入っています。RiteOpcodeUtilモジュールはmrubyのopcode.hに相当するバイトコードを取り扱うメソッドが入っています。
たとえば、こんな感じのメソッドがあります

* **get_opcode(op)**  32bitのRITE命令コードopから命令コードを取り出す
* **getarg_a(op)** 32bitのRITE命令コードopからA引数を取りだす
* **mkop_A(op, a)** A引数だけがある32bitのRITE命令コードを生成する
* **mkop_ABC(op, a, b, c)** A引数, B引数, C引数がある32bitのRITE命令コードを生成する

これまでに説明したメソッドやクラスを使うとmrubyでRITE VMのインタプリタが書けます。 mrblib/irep.rb中の [RiteVMクラス]（https://github.com/miura1729/mruby-meta-circular/blob/master/mrblib/irep.rb#71 ) がそれです。

mruby-meta-circularはirepを読みだけではなく作ることもできます。

```rb
include RiteOpcodeUtil
# Make irep
iseq = [
  mkop_ABx(Irep::OPTABLE_CODE[:STRING], 1, 0),
  mkop_ABC(Irep::OPTABLE_CODE[:SEND], 0, 0, 1),
  mkop_ABx(Irep::OPTABLE_CODE[:NOP], 0, 1),
  mkop_A(Irep::OPTABLE_CODE[:RETURN], 0)
]

irep = Irep.new_irep(iseq, ["Hello World", 0, 0], [:p], 2, 1)
p = irep.to_proc
```
これでHello Worldを表示するProcオブジェクトが変数pに入ります。さっそく上で説明したRiteOpcodeUtilモジュールを使っています。Irepを作成したいのなら、メソッドが呼び出されるとR0にselfがR1に第１引数が、R2が第二引数が・・・　入ることを覚えておくとよいでしょう。

Itrp.new_iseqは新たなIrepオブジェクトを作成します。引数には命令列、プールの内容、シンボルテーブル、使用するレジスタの数、ローカル変数の数を指定します。iseqがどういった意味なのか知りたい人はmrubyのvm.cを読みましょう(投げやり)。

最後のirep.to_procはirepオブジェクトをProcオブジェクトに変換します。こうするとmrubyレベルでcallメソッドで実際に実行できます。

```rb
i = 0
while i < 100
  p.call
  i = i + 1
end
```
こんな感じで何回も呼び出すことができます。

終わり
続・フリーなオフィススィートを翻訳すること

この記事は[Doc-ja Advent Calendar 2013](http://qiita.com/advent-calendar/2013/docja)の三日目です。

といっても中身はぼくのブログにおいてあります。
http://d.hatena.ne.jp/naruoga/20131203/1386063346

明日は jmatsuzawa さんです。よろしくお願いします！
シェルスクリプトを書くときはset -euしておく

1行目を

```bash
#!/bin/bash -eu
```

とするか、または、

```bash
set -eu
```

を書いておく。以下解説。

## `set -e`

エラーがあったらシェルスクリプトをそこで打ち止めにしてくれる（`exit 0`以外が返るものがあったら止まるようになる）。「あっあれここでうまくいってないからデータ準備できてないのにあれあれっもうやめて！」ってなるのを防げる。

## `set -u`

未定義の変数を使おうとしたときに打ち止めにしてくれる。Perlでいう`use strict 'vars';`的なもの。

```bash
rm -rf $TMEP_DIR/
```

って気軽な気持ちで書いてしまって、「ん、やたら時間かかると思ったらスペルミスうわなにをするやめ」ってなるのを防げる。

## 一部だけ例外にしたい

はてなブックマークのコメントより

> -e は command1 || command2 みたいなことが出来なくなるの使うことないな。-uは付けといて良いが。

確かにおっしゃるとおりですね。コマンドの失敗を考慮して書いている部分については（もしくはやたら`exit 0`以外するコマンドを呼ばないといけないときなど）、スクリプトの一部に限り `-e` を無効にしたいかもしれません。そんなときは以下のようにできます。こうするとエラーハンドリングを全部しっかり考えて作っていない限りは使わない意味はない気がします。

```bash
set -eu

# :
# do something
# :

# ここからは set -e を無効にする
set +e

command1 || command2

# ここからは再度有効にする
set -e

# :
# do something
# :
```
CoffeeScriptでインスタンス作成する際の記法？

これで行けるけど、なんかふわふわしててアレ。`if`とかの字下げは大して違和感ないんだけど。慣れれば普通？　それとも「出来るけどやらない」ような類の記法？

```coffeescript:script.coffee
obj = new MyKlass
  foo: bar
  hoge: fuga
```

↓

```js:script.js
var obj;

obj = new MyKlass({
  foo: bar,
  hoge: fuga
});
```

* [実際のコンパイル結果](http://coffeescript.org/#try:obj%20%3D%20new%20MyKlass%0A%20%20foo%3A%20bar%0A%20%20hoge%3A%20fuga)
Javascriptでスクレイピング

# クロスドメイン制限
- ドメインが異なるサイトをJSからスクレイピング(xhrで取るとか）は制限される。
- 取得先のコンテンツがレスポンスヘッダーで`Access-Control-Allow-Origin`(ACAO)を返し、かつ実行JSがホストされているドメインがこのACAOリストに該当していればOK。
- `jquery.xdomainajax.js`を使うとクロスドメインできるが、インターネット上で公開されているサイトに限られる（イントラ限定コンテンツなどはNG）。内部で`Yahoo Query Language`を呼び出してそのレスポンスとして対象ページのコンテンツを取得している。[Yahoo! Query Language - YDN](http://developer.yahoo.com/yql/)

# Related Articles
- [[jQueryで仕事効率化（スクレイピング）] by シロのITメモ](http://shiroit.blog.fc2.com/blog-entry-33.html)
- [Javascriptスクレイピング！jquery.xdomainajax.js-ITかあさん](http://www.kaasan.info/archives/1858)
- [PhantomJS でログインが必要なページでも自由自在にスクレイピング - 凹みTips](http://d.hatena.ne.jp/hecomi/20121229/1356785834)
- [casperJSでwebスクレイピング | THE SPORTS BUSINESS](http://thesportsbusiness.jp/archives/189)

# Reference
- [jquery.fn/cross-domain-ajax at master · padolsey/jquery.fn](https://github.com/padolsey/jquery.fn/tree/master/cross-domain-ajax)
- [Yahoo! Query Language - YDN](http://developer.yahoo.com/yql/)
Max/MSP/Jitterをはじめるメモ

もともと興味はあったはずなのに、いつの間にかその気持ちが薄れ早数年。急に仕事で必要になり、勉強をはじめることにしました。

これを書いてる現時点で、触ったことがないどころか、入手方法、いくらぐらいするのかすらわからない（まだググってもいない）、という状況です。


##入手方法

###amazon.co.jp

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00DHXW140/22301-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/31fIqHcki6L._SL160_.jpg" alt="Max 6J [日本語版]" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00DHXW140/22301-22/ref=nosim/" name="amazletlink" target="_blank">Max 6J [日本語版]</a>

¥42,000。プロ用ソフトとして高いとは思わないけど、まずはちょっとかじりたいだけなので、保留。


###amazon.com

見つからず。パッケージ売りは日本だけなのかも。

###Cycling 74 - MI7 Japan

[MI7 Japan - Cycling 74 | デモ](http://www.mi7.co.jp/products/cycling74/demo/)

デモ版がダウンロードできるようなので、これで。

デモ版の制限や、プロダクト版のライセンス価格は不明（書うことになったら調べる）。


##インストール

環境はMac OS X 10.9 です。

ダウンロードしてきた〜.dmgから普通にインストールするだけ。

![](http://f.cl.ly/items/1d3q221Q3B1R1V131z1r/install_r1_c1.jpg)


##Hello World

起動すると、デモ版として使うか、認証しろという画面。

![](http://f.cl.ly/items/01361S0C1E0M3w430n2i/demo.jpg)

30日もあれば十分買うかどうかの判断できるので、助かる。

で、Demoを選んで進むと、こういう初期画面が出てきます。

![](http://f.cl.ly/items/031O410k2R1L472j0B22/first.jpg)

とりあえず New Patcher を選び、

![](http://f.cl.ly/items/1C2A1V161V2q0f3S2w0E/newpatch.jpg)

**最初のHello World的な一歩がわからない** のでここでググりました。

で、見つけた yoppa.org さんの下記記事を見つつ、

[イントロダクション、Max/MSP Jitter入門](http://yoppa.org/ssaw10/798.html)

下記のような **音が出るだけ** のパッチをつくりました。

![](http://f.cl.ly/items/1303211l0y2z43231y39/halloworld_2.jpg)

ビルドという概念がないらしく、「で、どうしたらいいの」となりましたが、

- プロジェクトをセーブ
- 左下の鍵アイコンをクリックしてロック
- スピーカーっぽいやつをクリック

したら無事音が出ました。
ファイルダウンロードが開くリンクから直接クライアントJSにデータ読み込みする

# 概要
通常はファイルダウンロードダイアログが開くデータを、JSプログラム中に読み込んで扱えるようにする。

## 方法１：データタイプを指定する（XHR2）
xhrならば`XMLHttpRequest.responseType`で応答テキストの取り扱いタイプを変更できる。

``` js
$(function (){

    var xhr = new XMLHttpRequest();
    xhr.open('GET', '../csv/data.csv', true);
    xhr.responseType = 'text';

    xhr.onload = function(e) {
        var response_document = this.responseText;
        console.log(response_document);
    };
    xhr.send();
});
```

jQueryなら`dataType`を指定

```js
$(function (){
    var data_src = '../data/location_list.csv';

    var parse_data = function(res){
        var dataArray = CSVData.parse(res);
        alert(dataArray);
    }

    $.ajax(
            {
                url     : data_src,
                type    : 'GET',
                cache   : false,
                dataType: 'text',
                success : parse_data
            }
    );
});
```

## 方法２：`XMLHttpRequest.overrideMimeType`を指定する
読み込みの文字コードも変更したいなどの時はこちら。

``` js
$(function (){

    var xhr = new XMLHttpRequest();
    xhr.open('GET', '../csv/data.csv', true);
    xhr.overrideMimeType('text/plain; charset=shift-jis');

    xhr.onload = function(e) {
        var response_document = this.responseText;
        console.log(response_document);
    };
    xhr.send();
});
```

```js
$(function (){
    var data_src = '../data/location_list.csv';

    var parse_data = function(res){
        var dataArray = CSVData.parse(res);
        alert(dataArray);
    }

    $.ajax(
            {
                url     : data_src,
                type    : "GET",
                cache   : false,
                mimeType: 'text/plain; charset=shift-jis',
                success : parse_data
            }
    );
});
```

# 参考サイト
- [XMLHttpRequest2 に関する新しいヒント - HTML5 Rocks](http://www.html5rocks.com/ja/tutorials/file/xhr2/)
- [Ajaxの文字化けとその解決法 | 言葉の海のプログラマー](http://lostlinksearch.net/blog/2012/03/ajax%E3%81%AE%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91%E3%81%A8%E3%81%9D%E3%81%AE%E8%A7%A3%E6%B1%BA%E6%B3%95/)
- [jQuery.ajax() | jQuery API Documentation](http://api.jquery.com/jQuery.ajax/)
【JavaScript】【解決】外部jsファイルから読み込みは</body>直前でも可能であり、ページの表示速度が早くなる。

こんにちは。

まだまだ勉強中です。

ランダムで表示される、簡単な掛け算プログラムを作ろうとしていたところ
はたまた壁にぶち当たりました。

ほとんどsetIntervalで悩んだときと同じ。
http://qiita.com/g_lay_tomohiko/items/73cdc1c2151f7fdaf7d6

ただこれは　deep_blue_ao　さんに下記のご教授をいただき解決。

>一番最初に書いていたコードは単純に
```js nowTime() ``` を呼んでいないだけではないでしょうか。
```js setInterval("nowTime()",1000); ```を実行する位置が関数の外じゃないといつまでたっても呼ばれないと思います。

前回自身ではonloadでOKかと思っていましたが、枠外から呼び出すことで解決しました。

ただ今回、全く同じことをやっても解決しない・・・。
//かなり簡略化してます。

書いたコード

```js
function newSet(){
     document.newForm.newNumber.value = Math.random(); 
}

newSet();
```

```html
<body>
<form name="newForm">
<input type="text" size="2" name="newNumber"> 
<input type="button" value="書き換えた数字" onclick="myCheck()">
</form>

</body>
```

これだと初回アクセスした際に数値が表示されず。

でも

```html
<body onload="newSet()">
<form name="newForm">
<input type="text" size="2" name="newNumber"> 
<input type="button" value="書き換えた数字" onclick="myCheck()">
</form>

</body>
```

Jsはそのままでonloadを使ったり、

```html
<body onload="newSet()">
<form name="newForm">
<input type="text" size="2" name="newNumber"> 
<input type="button" value="書き換えた数字" onclick="myCheck()">
</form>

</body>
```

```html
<body>
<form name="newForm">
<input type="text" size="2" name="newNumber"> 
<input type="button" value="書き換えた数字" onclick="myCheck()">
</form>
<script type="text/javascript">
<!--
newSet();
// -->
</script>
</body>
```

外部Jsを利用せず、HTML内にJavaScriptを記述すると
初回アクセスでも表示される。

このきちんと表示される後者2つは前回のsetInterval()と同じなのに
現在？が飛び交ってます。

日々勉強ですね。
ヒントやいいサイトなどあったらご教授いただけると幸いです。

それではこれからもよろしくお願いいたします。

*****
追記：
解決しました。

外部jsファイルの読み込みは、<head>内だけじゃなくて、<body>要素ないでも読み込み可能だったんですね。
直打ちのみ可能だと思ってました。

しかも棚ぼたで、
> head内ではなく、/body直前に書くことで
hoge.js → hoge.html
ではなく、
hoge.html → hoge.js
と読み込むことになるので、
HTMLの表示速度も早くなる。

ストレスも少なくなりますね。
調べていると、jQeryでも解決方法はありそうなのでこれからが楽しみです。

sukobuto　さん
ありがとうございます！
Virtualboxのマシンにsshする

→ネットワーク設定でNATを設定する
→ポートフォワーディングを設定する
Host port 3022, guest port 22, name ssh, other left blank.
（コマンドラインで設定も可能）
```
VBoxManage modifyvm myserver --natpf1 "ssh,tcp,,3022,,22"
```
→ssh -p 3022 user@127.0.0.1でいける
another-org-info ちょっとはましになったんじゃないかな?

前回も書いた another-org-info ですが、
README というか EXAMPLE が頼りなかったので、github-pages で見られるようにしました。

http://guicho271828.github.io/another-org-info/

Fork me というか改善できる案があればなんでもぶっこみたい感じですね
あとデザインセンスは無いので、配色とかはどうも苦手です。醜くてもご愛嬌。
あとはCSSの量が増えてきたので、整理・分割も課題。

repo はこっち

https://github.com/guicho271828/another-org-info
PhpStromを使ってみる

phpを書くのに、以前はWindows+秀丸を使っていました。
開発機をMacにかえてからmiとかCotEditorなんかを使ってみました。
ん〜どれもしっくりこない・・・。

そうこうしていたところ、とある集まりでPhpStromというのを知りまして。
いちまんえん弱するのですが、30日間の試用期間があるということで、意を決してダウンロードしてみましたよ。

はてさて、上手く使いこなせますやら・・・。
HTTP Request Headerがどういう感じでRackのenvに変換されるか

* http://ruby-doc.org/stdlib-2.0.0/libdoc/webrick/rdoc/WEBrick/HTTPRequest.html#method-i-meta_vars

`WEBrick::HTTPRequest#meta_vars` の実装を読むととても分かりやすい。

で、この変換規則は、コメントの通り [CGI version 1.1](http://www.ietf.org/rfc/rfc3875) に準拠している。RDocの方がリンク切れなのでプルリク事案っぽい...

このmeta_varsの内容＋Rackの独自オブジェクトでenvが出来上がる。Rack独自オブジェクトの付与の仕方は、RackのWEBrickハンドラの[こっからここまで](https://github.com/rack/rack/blob/master/lib/rack/handler/webrick.rb#L41-L71)を読んどけば理解できるんじゃないだろうか。

というか、WEBrickが存在するおかげでRackの実装の入り口から出口までRubyのコードで分かるのですばらしいですね。
Fedora 19 に プログラミング用フォント Ricty をインストールする

#Rictyフォント
(http://save.sys.t.u-tokyo.ac.jp/~yusa/fonts/ricty.html)
linux使い始めたけどフォントがイマイチ！と感じてから改善までのメモ。
Rictyフォントとは「Inconsolata」(英字)と「Migu 1M 」（日本語）というフォントを**合成**して作った綺麗なフォントの事です。Macのように綺麗なのでlinuxやwindosユーザーからのニーズがあるようです。
もともとはプログラミングを快適にするために作成れたフォントのようです。

##大まかな手順
1.2つのフォントを**合成**するためのプログラムを入手する。(rictyのこと)
2.「Inconsolata」と「Migu 1M 」を入手する。
3.フォント合成によるRictyフォント作成
4.fontsディレクトリに配置
5.tweak-tool(gnome)等でシステムのフォント設定してインストール完了する。
以上の流れになります。

##具体的な手順
1.rictyの入手:GitHub(https://github.com/yascentur/Ricty/tree/3.2.2)で配布されているのでGitを活用します。

```
cd ~
git clone git clone https://github.com/yascentur/Ricty.git
```

2.フォントの入手
Inconsolata:
http://levien.com/type/myfonts/inconsolata.html
にてOpenTypeFileをダウンロード

Migu1M:
http://mix-mplus-ipa.sourceforge.jp/migu/
にてMigu1Mをダウンロード
解凍

```
unzip migu-1m-*.zip
```

3.合成
まずフォントファイルを全てRicty/配下に集めておく。

```
ls ~/Ricty/
ricty_generator.sh
Inconsolata.otf
migu-1m-bold.ttf
migu-1m-regular.ttf
...のような感じ。
```

```
cd ~/Ricty
sh ricty_generator.sh auto
```
これで2分ほどでフォントが合成されます。

4.fontsフォルダへ配置
fedora19の場合フォントは
/usr/share/fonts/の下に各フォントごとのディレクトリに保存されています。

```
cd ~
su
password:****  ファイル作成の権限が必要
mkdir /usr/shre/fonts/ Ricty
cp Ricty/Ricty* /usr/shre/fonts/ Ricty
```
以上でファイルの配置が完了です。

5.gnomeのシステム設定を行う。
システム全体で標準で使用するフォントを設定します。GUIの設定ツールをいんすとーるしてからおこないます。

```
yum info gnome-tweak-tool
```
![setting_font.png](https://qiita-image-store.s3.amazonaws.com/0/26413/ac2ece95-41d2-abcb-9f9e-c78f7cf0d8dd.png)
ここで設定して完了です！！
ラテン語文解析プログラムを書くことを目的としたラテン語学習（前編）

## ご挨拶

こんにちは。@naoya_t と申します。

縁あって7shiさん主宰の初級ラテン語リーディングの会に参加させて頂いているのですが
ラテン語でアドベント・カレンダーをやる、しかも「ラテン語プログラミング」だと言うので
喜んで参加させて貰うことにしました。

多分この（閑散とした）感じだと、12/25までに何回か登場することになりそうですので、
とりあえず軽めに始めたいと思います。

（12/2担当なのですがアメリカ西海岸もそろそろ日が変わろうという時間になってしまいました。申し訳ありません）

## 

こんなツールを作っています。
https://github.com/naoyat/latin

![スクリーンショット 2013-12-03 15.08.53 12-03.png](https://qiita-image-store.s3.amazonaws.com/0/4372/8c684aa6-9d71-b899-fc5e-128f2d7e77db.png)

ラテン語文を入力すると、活用形を推測したり辞書を引いたりして、何となくの日本語に訳してくれます。（テキストに出てくる単語を手動で辞書に入れてるので、テキストに出てこない単語は解しません）

若干の北米英語訛りがありますが、テキストを（高低アクセントも付けつつ）音読してくれる機能もあります［MacOSXのみ］

## ラテン語文の解析

例えば英語では、何が主語で何が目的語なのかを語順（というか文型）で表しますが、ラテン語では、名詞（や形容詞など）が格変化することで表現します。そして語順は割と自由です。また、動詞の活用も（英語などに比べて）複雑な上、動詞の活用形で主語が十分に分かるので主語にあたる代名詞が（必要でない限り）使われなかったりします。

皆さんご存知 "Cogito, ergo sum." （我思う故に我在り）でも、動詞cogito (I think) もsum (I am) もその活用から1人称単数であることが分かるので（英語の I にあたるような）主語を改めて立てる必要がありません。

というわけで、ラテン語文の意味を捕捉するためには、出てくる単語の品詞だけでなく、動詞の活用や名詞の格変化を把握する必要があります。

初級ラテン語リーディングの会では秋以降、新しい（易しくてわかりやすい）テキストが採用されて、辞書を引いたり活用形を考えたりする機会が減っているのですが、以前用いていたテキストでは動詞の活用や名詞・形容詞の格変化を割とちゃんと考える必要がありました。

## 「活用表の暗記」

ラテン語は昔ひと通り齧っているので、今回は「ラテン語の文を解析するプログラムを書くことを目的としてラテン語を学んでみる」ことにしてみました。

動詞の活用とか名詞の格変化とか、それぞれ何パターンもあって（動詞なんか不規則なやつがうじゃうじゃあったりして）ラテン語の勉強で一番面倒くさい所ですよね。

でも折角PCがあるのだから、プログラムを書いて何とかしてしまいたいですよね。
ついでに辞書をいちいち引くのも面倒くさいからそこも何とかしたい。

活用形解析のアプローチは大きく分けて

(1) 文中に出てきた語形（表層形）の語尾変化から原形と活用形をその都度推測
(2) あらかじめ全ての語形変化を求めてDBに放り込んでおいてそこから検索

のような2つの方向があると思うのですが、今回は(2)のアプローチで行ってみます。
実際には外にDBは立てず、その都度ハッシュテーブル（というかdict）に入れています。

## 実装言語

結論からいうとPython (2.7) を使っています。拙い自分の言語力から消去法で。

書ける書けないで言えばどの言語でだって書けますが、言語選択をネタにされるのは疲れるのでここは無難なところで、といった心理もおそらく働いています。

* 文字列処理（正規表現を含む）が楽（という所でC++が消えた）
* ユニコード文字列をそれなりに自然に扱える（という所でOCamlが消えた）
* 書き慣れている（という所でJavaが消えた）

最終的にPython, Gauche, JavaScriptあたりで悩みましたが、単語活用回りの簡単めの処理をそれぞれでちょっと書いてみて、この中でならPythonが書きやすいかなと思ってPythonにしました。

## Futurus persevero...

書きたいことは色々あるのですが、時間が足りないのと、あとカレンダーの後の方がガラ空きなのとで、後日に続きを書くことにします。

引き続き、よろしくお願い致します。
ubuntu 13.10　で capslock を ctrl　へ変更する


元のxmodmapを .xmodmapにする

```
% xmodmap -pke> "~/.xmodmap"
```

~/.xmodmapを編集する

```変更前
keycode 37 = Control_L NoSymbol Control_L        #ctrl
keycode 66 = Caps_Lock NoSymbol Caps_Lock   #caps lock
```

```変更後
keycode 37 = Caps_Lock NoSymbol Caps_Lock
keycode 66 = Control_L NoSymbol Control_L
```

.xmodmapの最後の行に以下を追加する

```
clear Lock
add Control = Control_L
```

.zshrcに以下を追加する

```
xmodmap $HOME/.xmodmap
```

以下を実行すれば変更が有効

```
% . ~/.zshrc
```
iOS 「12月」の12というintを受け取ってDecemberという文字列を返すメソッド

備忘という名のスタックオーバーフローからの転載。
http://stackoverflow.com/questions/4488373/ios-how-to-get-a-proper-month-name-from-a-number

数字を受けて、英語の月名を返す。
例外は考えてない。

```objc
- (NSString *)getMonthNameFromMonthNumber:(int)monthNumber
{
	// 月を数字から文字列に変換
	NSDateFormatter *df = [[NSDateFormatter alloc] init];
	NSString *monthName = [[df monthSymbols] objectAtIndex:(monthNumber-1)];
	return monthName;
}
```

逆はこちら
Get month number from month name?
http://stackoverflow.com/questions/9114829/get-month-number-from-month-name
iOS ユーザーの設定言語が日本語かどうか判定するメソッド

こちらに書かれている内容をメソッドにしただけですが。
http://ios-dev.info/how-to-get-selected-lang/


日本語ならYES、そうでなければNOを返します。
"ja"の部分を変えればいろんな言語に応用できます。

```objc
// 日本語かどうか判定
-(BOOL)isLocaleJapanese{
	//まず言語のリストを取得します。
	NSArray *languages = [NSLocale preferredLanguages];
	// 取得したリストの0番目に、現在選択されている言語の言語コード(日本語なら”ja”)が格納されるので、NSStringに格納します。
	NSString *languageID = [languages objectAtIndex:0];
	
	// 日本語の場合はYESを返す
	if ([languageID isEqualToString:@"ja"]) {
		return YES;
	}
	
	// 日本語の以外はNO
	return NO;
}
```
Ceylonの良いとこ説明コードその１

今回は
[Ceylon言語ってどんなもの？](http://qiita.com/newta/items/2ca98051450c4751b4b1)
で紹介したCeylonの良いとこをコードで紹介。

Ceylon開発環境は [Ceylon環境の作り方](http://qiita.com/newta/items/d84200874645fa5cef26)からどうぞ。


#リテラル定義が便利
Javaは定義のときが固過ぎてListやMapを定義したいときに不便だなーと感じるところがありますが
その辺が改善されています。
（Java8でちょっと改善されそうだけど、まだリリースされないんだよね・・・。）

配列はいつものように出来ます

```ceylon
String[] a = ["a","b","c"];
Integer[][] b = [[2, 3], [5, 7], [11, 13]];
````

Listで受け取ればListになっちゃいます。

```ceylon
List<String> a2 = ["a","b","c"];
List<List<Integer>> b2 = [[2, 3], [5, 7], [11, 13]];
````

もちろんジェネリクスも効いているので型は安全。

Mapも出来ます。

```ceylon
Map<String,String> m = LazyMap{ "test"->"hogehoge", "foo"->"bar" };
````

key -> valueの順で宣言して「,」で複数できます。
簡単ですね！

#静的型付けである
なんと言ってもJava好きな人はこれは重要な事項だと思います。
メソッドやフィールドの参照先は正確に飛べるし、
間違ったメソッド名などでは事前にコンパイルエラーで教えてくれるし
静的な型付けのメリットはありますよねー。
動的なのが好みの人にはわずらわしいと感じる部分もあるけど
保守とか長い目で見ると便利な面が多いかなーと個人的には思ってます。

```ceylon
	List<List<Integer>> a = [[2, 3], [5, 7], [11, 13]];
	print(a.get(1)); // [5,7]
	print(a.hoge()); // コンパイルエラー
````

定義されていないメソッドがあれば当然コンパイルエラーになります。
実行されるまで分からない動的言語との違いかなと思います。

#型推論がある
先ほどのList宣言されたものですが、

```ceylon
value a = [[2, 3], [5, 7], [11, 13]];
````
のように書き換えることが出来る。

```ceylon
  value s = "hoge"; // String
  value i = 1; // Integer
  value f = 1.0; // Float
````
上記のように宣言すれば
それぞれvalueと指定されていても
コメントでの型として処理されるので楽です。

型も効きつつ、手軽に宣言出来ます。
特にネストされたListやMapなどは楽になります。

リテラル定義のときに出てきた

```ceylon
Map<String,Object> m = LazyMap{ "test"->"hogehoge", "foo"->"bar" };
````
このコードも

```ceylon
value m = LazyMap{ "test"->"hogehoge", "foo"->"bar" };
````
とすればMap<String,String>として利用出来ます。

#デフォルトで変数のnull禁止

```ceylon
String s1 = null; // コンパイルエラー
````
上記のように普通に宣言しただけではnullをセット出来ず
コンパイルエラーとなります。

nullをセット出来る変数を作成するには「?」を型の名前の後ろにつけます。

```ceylon
String? s1 = null;
````
さらにnullを許容する変数を参照して呼び出す場合
existsでチェックしたスコープの中でしか使うことが出来ません。

```ceylon
String? s2 = "hoge";
print(s2.size); // コンパイルエラー
````
上記のコードではコンパイルエラーになります。

nullを許容する変数を使うには以下のようにします。

```ceylon
String? s2 = "hoge";
if(exists s2) {
  print(s2.size);
}
````

これでJavaで悩まされていたnullの扱いを制限し
よく目にしていたNullPointerExceptionが発生しなくなると思われます！

#デフォルトで変数に再代入できない
変数を宣言しただけではその変数に再代入出来ません。

```ceylon
String s3 = "foo";
s3 = "bar"; //コンパイルエラー
````

書き換え可能な変数を宣言するにはvariableを付けて宣言する必要があります。

```ceylon
variable String s3 = "foo";
s3 = "bar";
````

あえて書き換えが可能にする必要があるときだけ
その変数を宣言するということで意識することが出来ます。


#基本的にキャスト禁止（型チェックのスコープが厳密）
```ceylon
	value list = ["hoge", 1 , 1.0];
	
	for (e in list) {
		if(is String e) {
			// Stringとしてeを使うことが出来る
		}
		if(is Integer e) {
			// Integerとしてeを使うことが出来る
		}
		if(is Float e) {
			// Floatとしてeを使うことが出来る
		}
	}
````

Javaであればinstanceofなどでチェックした後に
自前でキャストしていましたが
Ceylonでは「is 型」でチェックし、その後のスコープでのみ
その型として扱うことが出来るようになっています。
スコープを出ると型として使うことが出来ず、
型固有のメソッドなどを呼び出そうとしてもコンパイルエラーとなります。

この機能によって潜在的なキャストエラーを防ぐことが出来ます。

#まとめ

Javaで暗黙的に行われることで潜在的なエラーとなっていた
nullやキャストの問題、変数の宣言時の固さなどが改善されて
細かいけれども重要な部分に気を使われていて、「これ良いな！」って自分は感じました！

それで居ながらJavaとほとんど変わらない感覚で書けるし
Scalaほどたくさんの機能が入って難しくなってる訳でもない感じがいい感じ。
Ceylonの良さが光ります。

これを読んで興味出た人は
JavaをEclipseでやってる人はプラグインを入れればすぐ出来るので
[開発環境を設定して](http://qiita.com/newta/items/d84200874645fa5cef26) ぜひ触ってみて見てくださいー。
iPhone5sの位置情報水平精度を取得してみた


**サンプル取得回数も少なく、適当に計測しているので正確な値ではない可能性があります。ここの値を鵜呑みにしないようお願いします。**

CLLocationManagerが出力する値の水平精度が気になったので、開発中のアプリにFlurryエベントを仕込んで確認してみた。自転車通勤のデータなので、約1時間20分くらい。Flurry側には1000レコードほどログが記録されていて、おそらくアプリケーションからFlurryに記録可能なログの上限と思われる。

コードはこんな感じ（アプリのコードから抜粋＋加工なので、コピペで動かないかも。あしからず）。

```objectivec
- (id)init
{
    self = [super init];
    if (self) {
        _locationManager = [[CLLocationManager alloc] init];
        _locationManager.delegate = self;
        [_locationManager startUpdatingLocation];

        [Flurry startSession:@"YOUR_FLURRY_API_KEY"];
    }
    return self;
}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    // ログ用のdictionaryを作成
    NSDictionary *params = @{
            @"latitude": [NSNumber numberWithDouble:newLocation.coordinate.latitude],
            @"longitude": [NSNumber numberWithDouble:newLocation.coordinate.longitude],
            @"horizontalAccuracy": [NSNumber numberWithDouble:newLocation.horizontalAccuracy],  // 水平精度
            @"verticalAccuracy": [NSNumber numberWithDouble:newLocation.verticalAccuracy],  // 垂直精度
    };

    // Flurryにログ記録
    [Flurry logEvent:@"CLLocation" withParameters:params];
}
```

ロジックを実行すると`locationManager:didUpdateToLocation:fromLocation`が呼び出されてFlurryにイベントログが記録される。イベントログはFlurryを開いて **Events** → **Event Logs** から参照する。

![kobito.1386043979.326856.png](https://qiita-image-store.s3.amazonaws.com/0/29860/f327f47d-4ce0-0315-a25b-33560823ff76.png "kobito.1386043979.326856.png")

で、肝心の水平精度はどうなのよ？というと、取得開始直後は次のような感じ。場所は屋内→屋外（ただし建物のすぐ隣）。

![スクリーンショット_2013-12-03_13.16.07-6.png](https://qiita-image-store.s3.amazonaws.com/0/29860/1b92469f-ea92-8bef-871d-d2e3d6c653b4.png "スクリーンショット_2013-12-03_13.16.07-6.png")

走りだして少ししたら精度が良くなった。

![スクリーンショット 2013-12-03 14.13.43.png](https://qiita-image-store.s3.amazonaws.com/0/29860/f8eb4f41-0bc9-18ed-8b93-86e65cfa4f95.png "スクリーンショット 2013-12-03 14.13.43.png")

他にもいくつかデータを取得して表にまとめてみた。セルラーがXになっているのはSIMを抜いたiPhone5（iPhone5sではない）のもの。

| Cellular  | WiFi | Bluetooth | 場所 | 精度 |
|:--|:--|:--|:--|--:|
| ○ | ○ | ○ | 屋内 | 65m |
| ○ | ○ | ○ | 屋外で建物のすぐ隣 | 50m |
| ○ | ○ | ○ | 見晴らしのいい屋外 | 5m - 10m |
| X |  ○ |  ○ | 屋内 | 65m |
| X | X | ○ | 屋内 | 450m - 3000m |
| X | X | X | 屋内 | 450m - 3000m |
| X | ○ | ○ | 屋外 | 5m - 10m |
| X | X | ○ | 屋外 | 5m - 10m |

まとめると次のような傾向がある。

* 水平精度の最高値は5m
* GPSが利用可能であれば、セルラー、Wi-Fiの有無を問わず、水平精度5m - 10mで位置を取得できる
* GPSが利用不可能な場合、Wi-Fiをベースに水平精度50m - 100m程度で位置を取得できる
* 屋外では、見通しが良い場合、悪い場合で精度がかなり違う（5m - 100mくらい）
* セルラー、Wi-Fiがなくてもおおよその位置を把握できる（どうやってるんだ？過去の値か？）

以上。ツッコミ歓迎。
MavenでMySql JDBC Connector設定

```pom.xml
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.6</version>
</dependency>
```

## Eclipseでインストール
- Project Explrer で pom.xml を右クリック
- Run As..クリック
- Maven Install クリック
MavenでJUnit

## JUnitをPOMに追加

``` pom.xml
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.11</version>
  <scope>test</scope>
</dependency>
```

## Eclipseでインストール
- Project Explrer で pom.xml を右クリック
- Run As..クリック
- Maven Install クリック
CentOSにgem hpricotをインストール時にGem::Installer::ExtensionBuildErrorが出たときの対処方法

CentOSにgem hprocotを入れたかったんですが下記エラー。

```zsh
Installing hpricot (0.8.6)
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

        /usr/bin/ruby1.9 extconf.rb
mkmf.rb can't find header files for ruby at /usr/share/ruby/include/ruby.h


Gem files will remain installed in /home/ec2-user/.gem/ruby/1.9.1/gems/hpricot-0.8.6 for inspection.
Results logged to /home/ec2-user/.gem/ruby/1.9.1/gems/hpricot-0.8.6/ext/fast_xs/gem_make.out
```

上記にある通り

` mkmf.rb can't find header files for ruby at /usr/share/ruby/include/ruby.h` なので、

下記コマンドで解決しました。

```
sudo yum install ruby-devel ruby19-devel
```

:smile:
iOS5.1でテキストエリアタップで落ちる件

Product Name (アプリアイコンの下に出る名前) に英語とカタカナを使用していたのを英語だけにすると落ちなくなりました。なぜかはわかりませんが。。。
【AAA - エーエーエー】　⇒　【AAA】
【JavaScript】うまく動かない時に行うこと(デバッグ作業)

こんにちは。

記事を書き、フィードバックをいただくことで理解が深まり
身に付くことに喜びを感じている今日この頃です。

備忘録として、今回はsetIntervalで流れる文字を作ったり
点滅させたりということを書こうと思いましたが、参考サイトと全くもってかぶってしまうのでやめました。

>URLメモ：
http://www.red.oit-net.jp/tatsuya/java/Fblink.htm

さて色々な方にアドバイスを頂いていますが、
以前の記事で　ktty1220　さんに確認の方法を教えていただきました。
http://qiita.com/g_lay_tomohiko/items/7da2beea4ff366a4af6d


ほかに本日自分でやってみたデバッグもメモとして残していきます。


__JavaScriptが全く反応しない__
という状態に今日は陥りました。

まぁでも落ち着いて。

1、```js alert("hoge") ; ```で、どこで通っていないかを確かめる
2、HTMLの中に実際にScriptを書いてみる(外部ファイルから読み込んでいる場合)
3、コメントアウトを行い、一番外側にある{}からコメントアウトを外していく

今回僕がなった現象は、3で解決しました。

■STEP1
functionの中に1を入れてみる
→反応しない

■STEP2
1を一番外枠で実行するように指定し、外部ファイルを読み込んでいるか確認
→OK

■STEP3
読み込んでいることを確認したので、きちんとスクリプトが動くか2で確認
→NG

■STEP4
3を実行し、どこでalertがでなくなるか確認


しらずのうちに{が1つ多かったところをみつけ、無事動くことを確認しました。
焦りますね。

つい最近なにかで読んだ。
ブログだったか、書籍だったか忘れてしまいましたが
”コードではなく、まずは自分を疑うこと”
地道な作業ですが、これでまた一歩前進。
できましたかね。

それでは、
これからもよろしくお願いいたします。
Ubuntu precise 64にmongoDBを入れてみる


仕事でmongoDBを使いそうなので、vagrantで構築したUbuntuの環境にmongoDBを入れてみた。

下記サイトを参考にインストール

[Install MongoDB on Ubuntu](http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/)

```
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
$ echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
$ sudo apt-get update
$ sudo apt-get install -y mongodb-10gen
```

mongoDBの起動

```
sudo service mongodb start
```

mongoDBの停止

```
sudo service mongodb stop
```

mongoDBの再起動

```
sudo service mongodb restart
```

サイトに載ってるまんまだけど、これでとりあえずインストール完了
my.confの設定

環境
OS: mac lion
パッケージ管理: homebrew

my.confの設定
参考: [MySQL5.6公式サイト](http://dev.mysql.com/doc/refman/5.6/en/option-files.html)
http://www.karakaram.com/install-mysql56-homebrew

mysql5.6 クエリログ設定
参考: http://dev.mysql.com/doc/refman/5.6/en/query-log.html


インストール後にMySQLに関するメッセージを見る

```
>> brew info mysql
```

mysqlは下記のpathにある。
/usr/local/Cellar/

バイナリログ・データベースの保管場所
/usr/local/var/mysql

バイナリログの状態を確認

```
> show master logs;

```



my.cnfの設定

```
[client]
port=3306
socket=/tmp/mysql.sock

[mysqld]
port=3306
socket=/tmp/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M
pid-file = /usr/local/var/mysql/MacOSX.local.pid

#エラーログの確認
log-error=/var/log/mysql/error.log

#クエリログを表示
general_log=1
general_log_file=/var/log/mysql/query.log

#　バイナリログを残す日数
expire_logs_days = 2

# basic
datadir = /usr/local/var/mysql
tmpdir = /tmp
character-set-server = utf8
default-storage-engine = InnoDB
innodb_buffer_pool_size = 128M

[mysqldump]
quick
```


実行ファイル場所


```
/usr/local/Cellar/mysql/5.6.14/bin
```

バイナリログ削除参照ページ
http://wiki.bit-hive.com/tomizoo/pg/MySQL%20%A5%D0%A5%A4%A5%CA%A5%EA%A5%ED%A5%B0%A4%CE%BA%EF%BD%FC
Lhaplusによる自動解凍


*Lhaplusにより、指定したフォルダ内の*.tar.gzを自動解凍するサンプルです。*

```bat
@echo off
 
set CURRENT_PATH=C:\テストデータ（10月度）
set OTPUT_DIR=%CURRENT_PATH%
 
echo -----------------------------------
rem set /p RES=選択ファイルをzip圧縮   Y/N ? 
set /p RES=解凍します。よろしいですか？...   Y/N ? 
echo -----------------------------------
 
pushd %CURRENT_PATH%
 
if /i {"%RES%"}=={"N"} (
  exit
  ) else (
  rem echo %CURRENT_PATH%\直下の「*.tar.gz」ファイルを全部解凍します。
  for %%i in (*.tar.gz) do (
    Echo %%iを解凍します。
    call :SUB %%i
    )
  )
 
goto END
 
:SUB
set INPUT_FILE=%1
REM 圧縮命令メモ： "C:\Program Files\Lhaplus\Lhaplus.exe" %MOTO% /c:gz /o:"%Dest_DIR%"
 
"C:\Program Files\Lhaplus\Lhaplus.exe" /o:"%OTPUT_DIR%" %INPUT_FILE%
exit /b
 
:END
pause
exit
```
JUnit4の@Beforeは継承してても有効

```java:親テストクラス
package test;

import org.junit.Before;

public class ParentTest {
    
    @Before
    public void parentSetup() {
        System.out.println("parent @Before");
    }
    
}
```

```java:子テストクラス
package test;

import org.junit.Before;
import org.junit.Test;

public class ChildTest extends ParentTest {
    
    @Before
    public void childSetup() {
        System.out.println("child @Before");
    }
    
    @Test
    public void test() {
        System.out.println("@Test");
    }
}
```

```text:実行結果
parent @Before
child @Before
@Test
```

基本的に複数のテストクラスで共通の処理は Rule に書くべきなのだろうだけど、 jMockit の `Expectations` が Rule では上手く動作しなかったので、共通親テストクラスを作って、そこの `@Before` メソッド内で `Expectations` を宣言することで対処した。
クロスリファレンスを出力するプログラムについて

## はじめに

lexを使って識別子のクロスリファレンスを出力するプログラムについて書きます。このプログラムの入力はC言語プログラムを想定しています。

## 経緯

いろいろな本（Ruby Hacking Guideなど）を読んでいくうちに字句解析と構文解析にたどり着きました。そこで字句解析と構文解析の情報を集めようと関連する書籍を読み始めました。

まず、「yacc/lex プログラムジェネレータ on UNIX」（テクノプレス）で挫折しました。簡単なサンプルコードは動いたのですが、理論のところに集中できず挫折しました。けれど、はじめの数章はとても読みやすかったです。なんとなく、lexとyaccの関係がつかめました。

次に、「ふつうのコンパイラをつくろう」（ソフトバンククリエイティブ）を少し読んで挫折しました。はじめのほうの第１部はすごく読みやすかったのですが、いざ、この書籍に登場するCフラットというプログラム言語のコンパイラをビルドしてみると、私の環境（OSX 10.9）だと動きませんでした。Linuxであれば動くとのことです。残念です。

現在、「コンパイラ」（コロナ社）を読んでいて識別子のクロスリファレンスのサンプルコードをようやく読解できたという状態です。そこで学んだことを書こうと思います。

## 仕様

ここで識別子のクロスリファレンスとよんでいるものは、識別子が何行に出てきたかを表示するプログラムのことです。

## 実装

``` ref.l
%{
#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 1000

  struct LNUM {
    int lineno;
    struct LNUM *next;
  };

  struct LIST {
    struct LIST *next;
    char *word;

    struct LNUM *history;
    struct LNUM *target;
  };

  int lineno = 1;
  struct LIST *h, *tmp, *tmp2;
  struct LNUM *tmp3;
%}

%%
"auto"
"break"
"case"
"char"
"const"
"continue"
"default"
"do"
"double"
"else"
"enum"
"extern"
"float"
"for"
"goto"
"if"
"int"
"long"
"register"
"return"
"short"
"signed"
"sizeof"
"static"
"struct"
"switch"
"typedef"
"union"
"unsigned"
"void"
"volatile"
"while"
[0-9]+
[0-9]+\.[0-9]+
^#.*\n { /* c macro */ }
[_a-zA-Z][_a-zA-Z0-9]* {
  for (tmp2 = h; tmp2->next != NULL; tmp2 = tmp2->next) {
    // 識別子をアルファベット順にソート
    if (strcmp(tmp2->next->word, yytext) > 0) {
      break;
    }
  }

  tmp3 = (struct LNUM*)malloc(sizeof(struct LNUM));
  if (tmp3 == NULL) {
    exit(EXIT_FAILURE);
  }

  tmp3->lineno = lineno;
  tmp3->next = NULL;

  if (strcmp(yytext, tmp2->word) != 0) {
    // 初出の識別子の場合
    tmp = (struct LIST*)malloc(sizeof(struct LIST));
    if (tmp == NULL) {
      exit(EXIT_FAILURE);
    }

    tmp->word = (char*)malloc(strlen(yytext) + 1);
    if (tmp->word == NULL) {
      exit(EXIT_FAILURE);
    }

    strcpy(tmp->word, yytext);

    tmp->history = tmp3; /* このLNUMへのポインタは最後まで保持する。各識別子に一つ。 */
    tmp->target = tmp3;
    
    tmp->next = tmp2->next;
    tmp2->next = tmp;
  }
  else {
    // 既出の識別子の場合
    tmp2->target->next = tmp3; /* targetの長さが1増える。historyの長さも1増える。 */
    tmp2->target = tmp3; /* targetの長さが1となる。 */
  }
}
. { /* do nothing */ }
"\n" { lineno++; }

%%
int
main() {
  h = (struct LIST*)malloc(sizeof(struct LIST));
  if (h == NULL) {
    exit(EXIT_FAILURE);
  }

  h->next = NULL;
  h->word = "";
  
  while (yylex() != 0) {
  }

  for (tmp = h->next; tmp != NULL; tmp = tmp->next) {
    printf("%s : ", tmp->word);
    
    for (tmp3 = tmp->history; tmp3 != NULL; tmp3 = tmp3->next) {
      if (tmp3->next != NULL) {
        printf("%d, ", tmp3->lineno);
      }
      else {
        printf("%d", tmp3->lineno);
      }
    }

    printf("\n");
  }
}
```

ざっくりとプログラムの流れを解説します。

- 識別子をアルファベット順にソートします。
- 初出の識別子と既出の識別子を判定します。
- 初出の識別子だったら新規の構造体LISTのノードを追加します。
- 既出の識別子だったら既存の構造体LISTのノードに新規の構造体LNUMのノードを追加します。
- 入力ファイルのEOFを検知すると、yylex()は0を返します。
- 最後に表示します。

## ビルドと使い方

ビルドはつぎのコマンドラインの実行になります。

> $ lex ref.l
> $ cc lex.yy.c -ll -o ref.exe

使い方はつぎのようなコマンドラインになります。

> $ ./ref.exe < path_to_source.c
さくらで最初にやること

1)Iptables
空っぽなので設定
SSHとHTTPのみ許可、あとはdロップ
/etc/sysconfig/iptables

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
COMMIT

2)ユーザ作る
useradd sakura
passwd sakura

sudo 設定
%sakura ALL=(ALL) ALL

vi /home/sakura/.ssh/authorized_keys 
公開鍵をコピペ

3)SSH設定
vi /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
[2013年] jQueryを使ってローディング画像を表示

javascriptで何かしらの処理中にローディング画面を出そうと思ったとき、
プラグインを使うのもいいですが自分で作るのもそう難しいことじゃありません。
一見難しそうに見えるローディング画面も簡易的なものなら割とすぐに実装できてしまいます。

こんな感じの関数とスタイルシートを用意して`loadingView(true)`で表示、
`loadingView(false)`で消す、といったような使い方ができます。
もし自分で実装する場合はCSSは適宜自分用にカスタマイズされることをお勧めします。

js

```js
function loadingView(flag) {
  $('#loading-view').remove();
  if(!flag) return;
  $('<div id="loading-view" />').appendTo('body');
}
```

css

```css
#loading-view {
 /* 領域の位置やサイズに関する設定 */
 width: 100%;
 height: 100%;
 z-index: 9999;
 position: fixed;
 top: 0;
 left: 0;
 /* 背景関連の設定 */
 background-color: #000000;
 filter: alpha(opacity=85);
 -moz-opacity: 0.85;
 -khtml-opacity: 0.85;
 opacity: 0.85;
 background-image: url(/images/loading.gif);
 background-position: center center;
 background-repeat: no-repeat;
 background-attachment: fixed;
}
```

jsではまず`#loading-view`が存在したら消しておき、
表示開始で`div#loading-view`をbodyに挿入するといったごく単純なものです。

軽く要所を説明すると、cssでは以下のように設定しておきます。

* `width`,`height`を`100%`にして縦横を表示領域の分確保
* `position` を `fixed`にして画面に固定
* 背景を透過させる
* 背景画像として中央にローディング用画像を配置
といった感じです。

ちなみにこのやり方、毎回DOMオブジェクトを作って挿入するのも非効率だなぁ、
と思った方は最初からローディング領域をhtmlソースに埋め込んでおき、
`addClass()`や`removeClass()`でクラスをつけることで表示・非表示を制御、といったやり方や直接cssをいじって`display:none;`と`display:block;`を切り替えるといった方法もあります。

ちなみに利用方法の例ですが、

```js
$.ajax({
  beforeSend: function(){
    loadingView(true);
  },
  complete: function(){
    loadingView(false);
  },
  /*その他のオプション(省略)*/
});
```
といったように、ajaxメソッドのbeforeSendとcompleteで指定してやると、
通信の開始前に表示して通信が完了したら(成否にかかわらず)消すといった使い方ができます。
前面にdivを表示してあるのでローディング画面を出した瞬間に後ろの部品をクリックすることができなくなり、処理中のクリック操作の抑止などにも重宝します。
Mysql　コマンド一覧

###Mysql起動

```
mysql.server start
```

###Mysql再起動

```
mysql.server restart
```

###Mysqlストップ

```
mysql.server stop
``` 

####データベースの一覧を見る

```
SHOW DATABASES;
```

####Datebaseを作る

```
CREATE DATABASE データベース名;
```

####Datebaseを削除する

```
DROP DATABASE データベース名;
```

####データベースの選択

```
USE データベース名;
```

####ユーザー確認

```
SELECT host,user FROM mysql.user;
```

####特定のデータベースを入れる

```
mysql -u root データベース名 < dump.sql(SQL名) 
```
CentOS6.5でLAMP環境を作る最速手順

DVDでインストール終わってログインした後、以下実施

```bash:
yum groupinstall "Web サーバー" "MySQL データベースサーバー" "MySQL データベース接続クライアント" "PHP サポート"
iptables -F
iptables-save > /etc/sysconfig/iptables

chkconfig httpd on
chkconfig mysqld on

reboot
```

注意: selinuxをdisabledにして再起動するとkernel panicする。意味がわからない。
jQueryプラグイン作成で躓いたこと２

普段見ないエラーがいくつか出て困りました・・・

#Uncaught TypeError: Illegal invocation 
cssの書き方を間違えたため起こりました。シングルクォートで囲んだらエラーが消えました。

```css
.css(top, ***)
↓
.css('top', ***)
```

#Object 数値 has no method 'match' 
他のmatchを使った場所では起きてないため調べたところ、matchした文字列のところに数値が入っていました。数値を文字列化したらエラーが消えました。
文字列化参考サイト：http://tamamemo.blogspot.jp/2011/12/javascript_29.html

```js
String(数値)
```