OmniAICreator/Qiita-1.07M huggingface dataset:
Processing.jsを使ってみる

## はじめに
Webアプリの作成を始めたので、ビジュアルデザインに使えるらしいProcessing.jsを使ってみます。Fx0を入手したので、Processing.jsをFx0上でも動かしてみようと思います。

![processing_home.gif](https://qiita-image-store.s3.amazonaws.com/0/72852/ea856826-75db-4a06-9b44-3e1693a91844.gif)
[Processing.js](http://processingjs.org/)

上のページの「About Processing.js」を見ると、Processing.jsはブラウザ上でProcessingというプログラミング言語を実行するJavaScriptのライブラリのようです。

## Processingを使う
Processing.jsの前にProcessingの動作を確認してみます。

![processing.gif](https://qiita-image-store.s3.amazonaws.com/0/72852/f4b7853f-503b-0973-b2c9-e834b5f8cd79.gif)

「Download Processing」からProcessingの開発環境をダウンロードするとプログラムの作成から実行までできました。

**プログラム作成**
![processing_env.gif](https://qiita-image-store.s3.amazonaws.com/0/72852/2e37d0b9-2813-6210-e081-c8e613ba40eb.gif)

**プログラム実行結果**
![running_on_processing_env.png](https://qiita-image-store.s3.amazonaws.com/0/72852/b682d616-d54d-e184-5e6d-e60c5ea121fe.png)

## おわりに
Processingのプログラムが動作が確認できたため、次はブラウザでProcessing.jsを使ってProcessingを実行したいと思います。

[Processing.jsを使ってみる （２）](http://qiita.com/Souj/items/fe8aa34f1b1339a94427)
[Processing.jsを使ってみる （３）](http://qiita.com/Souj/items/cc4037995ec77d043bed)
[Processing.jsを使ってみる （４）](http://qiita.com/Souj/items/958ada020d2fdda2d2e6)
Monacaについての事前学習

前からちょっと気になってたMonacaの本が最近出て、しかも発売記念セミナーをやるとのことで、先週末セミナーに行ってきたのでそれのめも。


[クラウドでできるHTML5ハイブリッドアプリ開発 Cordova/Onsen UIで作るiOS/Android両対応アプリ (Monaca公式ガイドブック)]
(http://www.amazon.co.jp/dp/4798140287/ref=pd_lpo_sbs_dp_ss_1?pf_rd_p=187205609&pf_rd_s=lpo-top-stripe&pf_rd_t=201&pf_rd_i=4774162116&pf_rd_m=AN1VRQENFRJN5&pf_rd_r=06EQJG0Z3HTB94YDT15T)

#Monacaについて

HTML、CSS、JavaScriptでiOS・Androidアプリが作れる。
C言語、JAVAがわからなくても大丈夫。
iOS・Android用でわざわざ作り直さなくてもいいのでとってもお手軽。
また通常、アプリを作るときはいろいろ開発環境が面倒だけど、Monacaだとクラウド上に開発環境があるから、面倒な設定をしなくてもOK。
ブラウザで開発→実機でデバッグ→ブラウザでビルドといったかんじでスムーズに開発できる。

##ハイブリッドアプリ

Monacaで作るアプリはハイブリッドアプリという位置づけになる。
ちなみにアプリについてはWEBアプリ、ネイティブアプリ、ハイブリッドアプリという区分けがある 

### WEBアプリ  
HTML5で書かれたWebサイトで、ブラウザ上で動作する。

### ネイティブアプリ  
端末にダウンロード・インストールして使うアプリ。
AndroidやIOSなど特定のOS用に作るから、各デバイスの機能にあるカメラやGPS、マイク、アドレス帳などと連動した機能を持つアプリ。
処理が早く、ガチなゲームアプリはだいたいネイティブアプリであることが多い。  

### ハイブリッドアプリ
端末にダウンロード・インストールして使うアプリ。
WebとOSの技術両方を使って開発する

といったかんじ。

##ハイブリッドアプリのメリット/デメリット

###メリット
* いろんなOSで動く！

###デメリット
* ネイティブよりはちょっと遅い...

高速化についてはこの本が参考になるっぽい。
[[iOS/Android対応] HTML5 ハイブリッドアプリ開発[実践]入門](http://www.amazon.co.jp/Android%E5%AF%BE%E5%BF%9C-HTML5-%E3%83%8F%E3%82%A4%E3%83%96%E3%83%AA%E3%83%83%E3%83%89%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA-Software-Design/dp/4774162116)

スライドだとこの辺が参考になりそう
[AngularとOnsen UIで作る最高のHTML5ハイブリッドアプリ](http://www.slideshare.net/AsialCorp/angularonsen-uihtml5)

# フレームワーク
## CSS
Onsen UI
Monacaには初期状態だとCSSがプレーンな状態なので、別で用意する必要がある。　　
公式のおすすめは[Onsen UI](http://ja.onsen.io/)

## JS
公式のおすすめは[AngularJS](https://angularjs.org/)
ただ来年2.0が出る予定で、そのときに内容がらっとかわるっぽいので注意。
jquerymobileと比べると学習コストは高い様子...
おすすめの本はこの本　[AngularJSリファレンス](http://www.amazon.co.jp/AngularJS%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9-%E6%B1%A0%E6%B7%BB-%E6%98%8E%E5%AE%8F/dp/4844336681)

#Crosswalk

CrosswalkというIntelが開発したWebViewWebViewでアプリをビルドすると高速化できるからいいよーとのこと。
サイズは10MB位。 
Android4系なので2.3切り捨てる必要有り。

参考サイト：[Crosswalkを使うとどれくらいパフォーマンスがアップするかテストしてみました]
(http://blog.asial.co.jp/1338)


#プランについて
BASIC（無料）プランの上限は3つまでなので、一回手元にエクスポートして、後からインポートで復元すればいっぱい作れる。
練習用にいじる場合はデバッガーが優秀なので、無料でも問題なさそう。
ビルドしないといけない時期だけプランあげるといいかも。

[エンタープライズ向け有料プラン](http://ja.monaca.io/enterprise.html)


#他参考サイト
* [サンプル](http://mb.cloud.nifty.com/doc/tutorial/tutorial.html)
* 困ったときの[stackoverflow](http://ja.stackoverflow.com/questions/tagged/monaca)。
* [サポート＆サービス](https://monaca.mobi/ja/support/index)
* [Monaca入門](http://www.buildinsider.net/mobile/monaca/)
GlassfishでNoClassDefFoundErrorがでるときにチェックすべきこと

Glassfishにアプリケーションをデプロイしたけど、NoClassDefFoundErrorが出て動かん！なんでやねん！このこんぴゅーたおかしいわ！
なんてつぶやいてしまうときにチェックすべきことです。

# 環境

- Glassfish 4.1

# チェック項目

0. 名前が違う
一番プリミティブな問題です。その名前のクラスが存在するかチェックします。

0. *ドメインディレクトリ*/lib/に余計なjarがある
*ドメインディレクトリ*/lib/にあるクラスが他クラスに依存していて、そのクラスが*ドメインディレクトリ*/lib/に存在しないとエラーになります。余計なjarがないかチェックします。
windows > バイナリエディタ > 構造体の情報を得る

動作確認

    Windows 8.1

バイナリエディタで任意の構造体の値を読めるものを探していたら、以下のものを見つけた。

[Binary Editor BZ](http://www.forest.impress.co.jp/docs/review/20130702_605515.html)
[Link](https://code.google.com/p/binaryeditorbz/)

例として、[ツール]-[BZ.DEFの編集]において、以下のような構造体を定義する。

```
struct BootPartitionHeader {
    dword	ImageWordLen;
    dword	DataWordLen;
    dword	PartitionWordLen;
    dword	LoadAddr;
    dword	ExecAddr;
    dword	PartitionStart;
    dword	PartitionAttr;
    dword	SectionCount;
    dword	Pads[7];
    dword	CheckSum;
} BootPartitionHeader;
```

あとは[表示]-[構造体表示]を選択して、左側に表示される「Structures」のうち、読みたい構造体を選択し、右側のHEX表示の部分で任意の場所をダブルクリックすると構造体のメンバの値が読み取れる。
kobitoの初期設定


# install

brew caskを使えば簡単

```command
brew cask install kobito
```

# setup

kobito起動後、最初にID/PASSを設定するのだが
QiitaにgithubIDでログインしていると
ID/PASSに何を入れたらよいかわからなくて認証失敗。

という人はkobitoの最初の画面にある「パスワード未設定」を
選択。左の画面を進めていくとgithubのログインができる。

その後、Qiitaユーザ名が表示されるので
画面右のログイン部分に
ID: 表示されたQiitaユーザ名
PASS: githubログイン時のパスワード

でログインできる
Laravelで大量のSQLを発行する場合の注意点

Laravelで(バッチ等によって)大量のSQLを発行する場合、
メモリー違反が発生することがあります。

Laravelではデフォルトでメモリにクエリログが記録され、
それがオーバーフローしてしまう場合があるためです。

上記を解決するには(つまりクエリログを記録しないようにするには)、
下記を処理の先頭に記述しておきましょう。

```php

\DB::connection()->disableQueryLog();

```
現在のインデックスから、最遠のインデックスを求める方法。さらに最短方向を求める。

・最遠の判定
総数が偶数の場合、最遠は１つだけ存在する。
abs(cur - max) == max / 2  //max >= 0

総数が奇数の場合、最遠は２つ存在する
(max / 2) - (cur - max) = x
x < 1 && x > -1


・差による判定から・・・どうするか、
　中心より下か上かにより
　　a >= max/2
（a = abs(cur − max）)


■絶対値にする必要はないのだろうか？
laravel5でbladeのextensionを作成 + 曜日の表示

最近laravelで開発をすることになりまして、ちょうど5がリリースされたタイミングだったということもあり、laravel5でドキュメントや記事が少ない中色々と奮闘しております。
ちょっとでも参考になればと。

#bladeのextension + 曜日の出力
さて、、日付を出力する際に、色々と試行錯誤してしまったため、情報共有できればと思い始めて書きました！

例えばDBから抽出したものをそのまま表示しようとすると、
> YYYY-MM-DD
> YYYY-MM-DD HH:ii:ss

といった感じで出てしまうため、blade内では例えば

```
{!! date('Y/m/d', strtotime($user->date) !!}
```

といった記述が必要になるかと思います。
しかし、特に問題になったのが「曜日」の表示。
それを要件に出された時、一瞬頭が白くなりましたｗ

smartyには慣れていたので、どうにかしてbladeも拡張できないものかと。
色々と調べていた結果、ようやく見つけました。
[php - Where to place Blade::extend - Stack Overflow](http://stackoverflow.com/questions/18329541/where-to-place-bladeextend)

こちらを参考にさせて頂き、以下のソースで上手く出力することが出来ました。

```php:app/Providers/BladeServiceProvider.php
<?php namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class BladeServiceProvider extends ServiceProvider {

    public function boot()
    {
        \Blade::extend(function($view, $compiler)
        {
            $pattern = $compiler->createOpenMatcher('date_and_week');
            $replace = '$1<?php \$week = array(\'日\', \'月\', \'火\', \'水\', \'木\', \'金\', \'土\'); echo date(\'Y/m/d\', strtotime$2)).\'(\'.\$week[date(\'w\', strtotime$2))].\')\'; ?>';
            return preg_replace($pattern, $replace, $view);
        });
    }

    public function register()
    {}
}
```

ちょっと無理矢理感はありますが、blade内に

```php:xxxxx.blade.php
@date_and_week($date)
```

で
> YYYY/MM/DD(曜日)

と出力することが出来ます。

注意として、コンパイルされたファイルを一旦削除する必要があります。

```
php artisan clear-compiled
```

もしくは

```
storage/framework/views/ 内のファイルを削除
```

応用すれば日付の出力フォーマットを固定することも出来ると思います。
参考になればと思います。

また、こうした方がいいんじゃない？とかのアドバイスなどもあれば是非お願いします！
Rails4 WEBrick Color

$ rails server にちゃんと色つけて、controllerでlogger.debug check_object したときに表示する値を目視ですぐに確認したいなと思って以下の設定を書いた。

```config/initializers/log_formatter.rb
class ActiveSupport::Logger::SimpleFormatter
  # from activesupport/lib/active_support/core_ext/logger.rb
  def call(severity, time, progname, msg)
    "#{severity_msg_color(severity, msg)} \n"
  end

private

  def severity_msg_color(severity, msg)
    case severity
    when "DEBUG"
      "\033[0;32;40m[DEBUG]\033[0m \033[32m#{String === msg ? msg : msg.inspect}\033[0m"
    when "INFO"
      "\033[1;30;40m[INFO]\033[0m \033[30m#{String === msg ? msg : msg.inspect}\033[0m"
    when "WARN"
      "\033[1;33;40m[WARNING]\033[0m \033[33m#{String === msg ? msg : msg.inspect}\033[0m"
    when "ERROR"
      "\033[0;31;40m[ERROR]\033[0m \033[0;31m#{String === msg ? msg : msg.inspect}\033[0m"
    when "FATAL"
      "\033[7;31;40m[FATAL]\033[0m \033[31m#{String === msg ? msg : msg.inspect}\033[0m"
    else
      "[#{severity}]" # none
    end
  end
end

```

## ANSI Color code (16colors)

```
# Text attributes
#  0  All attributes off
#  1  Bold on
#  4  Underscore (on monochrome display adapter only)
#  5  Blink on
#  7  Reverse video on
#  8  Concealed on
 
 
# Foreground colors
#  0;30   Black          1;30   Dark Gray
#  0;34   Blue           1;34   Light Blue
#  0;32   Green          1;32   Light Green
#  0;36   Cyan           1;36   Light Cyan
#  0;31   Red            1;31   Light Red
#  0;35   Purple         1;35   Light Purple
#  0;33   Brown          1;33   Yellow
#  0;37   Light Gray     1;37   White
 
 
# Background colors
#  40   Black
#  41   Red
#  42   Green
#  43   Yellow
#  44   Blue
#  45   Magenta
#  46   Cyan
#  47   White
```

## Log(iTerm2)

![スクリーンショット 2015-03-23 13.09.58.png](https://qiita-image-store.s3.amazonaws.com/0/10697/0a3b0a75-5d5c-513a-c4f2-042a0b421dea.png)

## 参考リンク

* [Beautiful logging for Ruby on Rails 4 | I have a black belt in geek.](https://cbpowell.wordpress.com/2013/08/09/beautiful-logging-for-ruby-on-rails-4/)
* [#56 The Logger (revised) - RailsCasts](http://railscasts.com/episodes/56-the-logger-revised?view=comments)
* [bash/zshで16色(ANSI カラーコード)と256色のカラーパレットを表示 - よんちゅBlog](http://yonchu.hatenablog.com/entry/2012/10/20/044603)
[JavaScript] Object.setPrototypeOf の簡易実装

`Object` の **`setPrototypeOf`** [ES6] を実装してみた。

もちろん最低限 **`__proto__`** が実装されている場合に限る。
※`__proto__`がvalueなのかgetter/setterなのかは気にしない

![javascript.jpg](https://qiita-image-store.s3.amazonaws.com/0/16128/c84d931d-8f17-39e9-0789-8fb140732447.jpeg)

# どういう所で`setPrototypeOf`が役に立つのか?

配列みたいなオブジェクトや、禁断の方法で`arguments`をいじってみた。

```js
// 配列みたいなオブジェクト
var arrayLike = {length: 3,
  0: 'one', 1: 'two', 2: 'three'};

// joinプロパティは無い
console.log(typeof arrayLike.join); // -> undefined
console.log([].join.call(arrayLike, ', ')); // -> onw, two, three

// オブジェクトのプロトタイプを配列に変更
Object.setPrototypeOf(arrayLike, Array.prototype);

// joinプロパティが使える
console.log(typeof arrayLike.join); // -> function
console.log(arrayLike.join(', ')); // -> onw, two, three

// argumentsオブジェクトを配列にしてみる
function getArrayFromArgs() {
  // [].slice.call(arguments) の代わり
  Object.setPrototypeOf(arguments, Array.prototype);
  return arguments.join(', ');
}

console.log(getArrayFromArgs('one', 'two', 'three')); // -> onw, two, three

// argumentsを破壊しても大丈夫かどうか確認してみる
var arrayLike2 = {length: 2, 0: 'one', 1: 'two'};
console.log(typeof arrayLike2.join); // -> undefined
getArrayFromArgs.apply(null, arrayLike2);
console.log(typeof arrayLike2.join); // -> undefined
// applyしても元のオブジェクトには影響しないのでOK
```

# `Object.setPrototypeOf` 簡易実装

`Object.setPrototypeOf` は以下の様になる。

```js:Object.setPrototypeOf
if (!Object.setPrototypeOf) {
  Object.defineProperty(Object, 'setPrototypeOf', {
    value: function setPrototypeOf(obj, proto) {
      obj.__proto__ = proto;
    }, writable: true, configurable: true});
}
```

※基本的に`setPrototypeOf`は黒魔術なので使わなくて済むなら使わない様にネ。

# `Object.getPrototypeOf` 簡易実装

`Object.getPrototypeOf` は以下の様になる。

```js:Object.getPrototypeOf
if (!Object.getPrototypeOf) {
  Object.defineProperty(Object, 'getPrototypeOf', {
    value: function getPrototypeOf(obj) {
      return obj.__proto__;
    }, writable: true, configurable: true});
}
```

# グローバルな `Object` を汚染したくない時

以下の様に通常の関数 **`getProto`**, **`setProto`** を定義して使う。

```js:getProto&setProto
  var getProto = Object.getPrototypeOf ? Object.getPrototypeOf :
    function getProto(obj) { return obj.__proto__; };

  var setProto = Object.setPrototypeOf ? Object.setPrototypeOf :
    function setProto(obj, proto) { obj.__proto__ = proto; };
```

※私は上記を色んな所でコピペして使っています(npmに登録するまでも無い)

# 参考文献

[Object.setPrototypeOf を作る - hogehoge @teramako]
(http://d.hatena.ne.jp/teramako/20130319/p1)
[Object.setPrototypeOf の作成 - Gist/teramako]
(https://gist.github.com/teramako/5193838)

[Object.setPrototypeOfが実装された - JS.next]
(http://js-next.hatenablog.com/entry/2014/01/20/194125)

[prototype.`__proto__` - js STUDIO]
(http://js.studio-kingdom.com/javascript/object/prototype_proto)

[Google流 JavaScript におけるクラス定義の実現方法]
(http://www.yunabe.jp/docs/javascript_class_in_google.html)
NSTimerを同時に複数使う場合

#条件

* Objective-C(まだ、Swift勉強中ですので、すみません。)
* NSTimerを同時に複数使う


#解決案
NSTimerのtimerWithTimeIntervalメソッドを使用すれば解決
それぞれのNSTimerインスタンスを以下のように宣言して使えばよい.
**追記あり(ページ下の追記項目かコメントを見てください[2015/03/23])**

```objc:test.m
- (void)initAllTimer{
  //タイマーそれぞれ初期化
  [self performSelectorInBackground:@selector(initTimer1) withObject:nil];
  [self performSelectorInBackground:@selector(initTimer2) withObject:nil];
}

- (void)initTimer1{
 //１：timerWithTimeIntervalでインスタンス作成
 NSTimer *timer1 = [NSTimer
                         timerWithTimeInterval:20
                         taraget:self
                         selector:@selector(hoge1)
                         userInfo:nil
                         repeats:NO
                        ];

 //2:タイマーが発動するように実行ループに追加
 id runLoop1 = [NSRunLoop currentRunLoop];
 [runLoop1 addTimer:timer1 forMode:NSDefaultRunLoopMode];
 [runLoop1 run];
}

- (void)initTimer2{
 //１：timerWithTimeIntervalでインスタンス作成
 NSTimer *timer2 = [NSTimer
                         timerWithTimeInterval:350
                         taraget:self
                         selector:@selector(hoge2)
                         userInfo:nil
                         repeats:NO
                        ];

 //2:タイマーが発動するように実行ループに追加
 id runLoop2 = [NSRunLoop currentRunLoop];
 [runLoop2 addTimer:timer2 forMode:NSDefaultRunLoopMode];
 [runLoop2 run];
}


-(void)hoge1{
  //20秒後に呼び出されます
}

-(void)hoge2{
  //350秒後に呼び出されます
}
````

#はまりポイント
**NSRunLoopのrunメソッドを呼ぶことで、NSTimerのfireメソッドを呼ぶ代わりになる。**

#追記(2015/03/23)
scheduledTimerWithTimeIntervalメソッドを使うことで、NSRunLoopを明示的に呼ぶ必要はなさそうです。また、NSTimerインスタンス作成をバッググラウンドで呼ぶ必要もなさそうです。まだ、追記の追記があるかも。。。
CircleCIの料金体系

## 料金体系

[Pricing and Information - CircleCI](https://circleci.com/pricing)
> The first container is free and each additional one is $50/mo.

1Container無料で1Container増設毎に$50/月。

## Containerって何？

じゃあContainerって何なのか。そのまま答えになりそうな記事があったので雑に和訳した。

[Pricing and Information - CircleCI](https://circleci.com/pricing)
>#### How do containers work?

>Every time you push to GitHub, we checkout your code and run your build inside of a container. If you don't have enough free containers available, then your builds queue up until other builds finish.

>Everyone gets their first container free and your team can run as many builds as you want with that container. More containers allows faster builds through parallellism in addition shorter queue times

>Parallelism is an extremely powerful feature and allows you to dramatically speed up your test suite. CircleCI automatically splits your tests across multiple containers, finishing your build in a fraction of the time.

---

> #### コンテナってどういう働きをするの？

> GitHubにpushしたらCircleCIはコードをチェックしてコンテナの中でビルドを走らせます。もし、空きコンテナが存在していなかったら、他のビルドが終了するまで待ってから実行します。

> 全ての開発者は1つめのコンテナを無料で手に入れることができ、あなたのチームはたくさんのビルドをそのコンテナの中で走らせることができます。たくさんのコンテナがあれば待ち時間が少なくなるのに加え、並列性によってビルドが早く終了します。

> 並列性はとても強力な特徴で、テストの実行を加速してくれるでしょう。CircleCIは自動的にテストを複数のコンテナに分散し、ビルドを少しの時間で終わらせます。

コンテナ数がいっぱいあると他のビルドと重なっても待ち時間が少なくビルドが高速に終わる。逆に1コンテナだけだと待ち時間が長いし、テストをいっぱい書くとビルドもその分長くなる。その辺りを加減しつつ課金してねということのよう。

## 他のCIサービスの料金体系

正式サービスが始まっている代表的なCIを調べてみた。コンテナに課金するというのはCircleCIだけではない模様。

### コンテナ数に課金するサービス

- [Travis CI](https://travis-ci.com/plans): 2コンテナで $129/月
- [CircleCI](https://circleci.com/pricing): 1コンテナ無料 追加の1コンテナ毎に $50/月

### リポジトリ数に課金するサービス

- [drone.io](https://drone.io/): 5プライベートプロジェクトで $25/月
- ~~[PhantomCI](https://phantomci.com/): 1プライベートプロジェクトにつき $20/月~~ クローズしたかも

## 結論

**CircleCIはリポジトリ数自体は課金対象ではない。**
はてなキーワードAPIで躓きました

はてなキーワードAPIで躓きました。
スクリプト自体は問題なく動きますので、ユニコード処理だけ上手くいけばいいんじゃないかと。

```python:hatenaapi.py
#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
import xmlrpclib
import sys, codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout)

get_input = raw_input("prease keywords: ")


server = xmlrpclib.ServerProxy("http://d.hatena.ne.jp/xmlrpc")
res = server.hatena.getSimilarWord({"wordlist": get_input})
print res["wordlist"]
```

実行すると拾いはするんですが、ユニコード処理に問題が。
表示される文字列にユニコードがそのまま出ちゃうのです。

このままでもまぁ、関連キーワードを拾うくらいなら・・・。
勉強不足を実感したので覚書にと。

＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊

とりあえずユニコードエスケープをどうにかしたらなんとかなるんじゃないかと発想し、
一旦外部にtxtで保存して読み込んでみました。

```python:hatenaapi.py
#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
import xmlrpclib
import sys, codecs
sys.stdin  = codecs.getreader("utf-8")(sys.stdin)
sys.stdout = codecs.getwriter("utf-8")(sys.stdout)

get_input = raw_input("prease keywords: ")

server = xmlrpclib.ServerProxy("http://d.hatena.ne.jp/xmlrpc")
res = server.hatena.getSimilarWord({"wordlist": get_input})


f = open("hatena.txt" , "aw")
lists = res["wordlist"]

for x in lists:
	f.write(str(x) + "\n")
	f.close


f = open("hatena.txt","rb")
data = f.read()
f.close()
print data.decode("unicode-escape")
```

もっと簡単にできないもんですかね・・・。
windows > ウィンドウを左右に並べて表示 > 左に持ってくるものの指定

win8.1にてタスクバー上にて右クリックして出てくる「ウィンドウを左右に並べて表示」をよく使う。

でも、2つウィンドウがある場合、どちらが左にくるかよくわかっていなかった。

左に来るのは、「その時点でフォーカスしているウィンドウ」だということがわかった。

以下のようにすれば希望の配置になる。

- 左に来てほしいウィンドウをクリックしてアクティブにする
- タスクバー上にて右クリック > 「ウィンドウを左右に並べて表示」
Laravel(blade template)でvue.jsのmustache記法を使用する


laravelアプリケーションを作成する際、viewには[blade template](http://laravel.com/docs/5.0/templates)が使用されています。bladeでのdataの出力では"{{}}"が使用されており、bladeテンプレート内で普通にmustache記法を使用すると競合してしまい、ErrorExceptionになるか、予測していない情報が表示されたりしてしまいます。ということで2つ対応方法をご紹介。

## vue.jsのmustache記法に使用する記号を変更する（"{{}}"を別の記号にする）
vue.jsドキュメント[Global API](http://vuejs.org/api/global-api.html)のVue.configに"delimiters" という設定があります。

```Vue.config
{
  // print stack trace for warnings?
  debug: true,
  // attribute prefix for directives
  prefix: 'v-',
  // interpolation delimiters
  // for HTML interpolations, add
  // 1 extra outer-most character.
  delimiters: ['{{', '}}'],
  // suppress warnings?
  silent: false,
  // interpolate mustache bindings?
  interpolate: true,
  // use async updates (for directives & watchers)?
  async: true,
  // allow altering observed Array's prototype chain?
  proto: true
}
```

たとえば"{{}}"を"(%%)"の様な書き方に変更する場合は"new Vue()"を実行する前にconfigを変更します。

```example.js
Vue.config.delimiters = ['(%', '%)'];
var vm = new Vue({
	el: '#myApp',
	data: {
		username: 'hogehoge'
	}
});
```

```example.blade.php
<div id="myApp">
	<p>(%username%)</p>
</div>
```

## blade template内で"{{}}"の前に"@"を付ける

blade templateでは"{{}}"の前に"@"を付けると"{{}}"をそのまま出力することが出来ます。

[Blade Templating](http://laravel.com/docs/5.0/templates)の「Displaying Raw Text With Curly Braces」に書かれています。

```example.blade.php
@{{ This will not be processed by Blade }}
```

こうすれば"{{}}"が直接出力されるのでErrorExceptionは発生しません。

---

ちなみに今回は前者を採用しました。後者であればconfigを変更せずに使用できるのですが、正直ごちゃってくる可能性が大いにあったので、そこはちゃんと住み分けて使用する方がいいと考えたからです。blade template側の設定を変える方法もあると思いますが、今回はあくまでlaravelアプリケーションに対してVue.jsを使用したかったので、Vue.js側のconfigを変更しました。

意外とまだまだ日本での実績は少ないみたいですので、これからもっと使ってみたいですね。
プロジェクトのカオスについて

プロジェクトにはカオスという概念がある
カオスの発生要因はプロジェクトについて不安や不確定要素や変化の可能性、そのほかもろもろ。「予測できない、計画外のこと」や「現場からの変化」によってカオスは発生する。

なおこのポエムの種本は[エッセンシャルスクラム](http://www.amazon.co.jp/%E3%82%A8%E3%83%83%E3%82%BB%E3%83%B3%E3%82%B7%E3%83%A3%E3%83%AB-%E3%82%B9%E3%82%AF%E3%83%A9%E3%83%A0-Kenneth-S-Rubin-ebook/dp/B00MB6GO7E)である。
良い本なのでできれば読んで欲しい。
Kindle版もある

# カオスの量に合わせたマネジメントスタイル
## ウォーターフォール
カオスの量が少量であれば、先は見渡しやすく変化も少ないのでウォーターフォールのような計画を重視したスタイルが望ましい。
小規模で、見通しも明確であるならばなおさらだ。
すべての資源は無駄なく効率良く利用される。

## スクラム
カオスの量が中程度であれば、スクラムがよい
大規模なプロジェクトや、新規参入した事業、新しいユーザー層に訴求する機能、あるいは年単位でユーザー数が急速に増える(あるいは減る？)、そういったカオスが湧き出てくる要因にあふれているのであれば、変化を受容し現実に合わせて計画を変更するためにスクラムがよい。

## 帝政
「戒厳令」ともよばれるパターン。カオスの量が多すぎる場合に用いられる
重篤なバグの発生やネットで炎上するレベルの大障害とその事後対応などが必要になるほどの大問題が起きたケース。
カオスが「民主制」によって扱うには多すぎる場合、一人のタフで優秀なマネージャーの下に全戦力と権限を集め、問題が解決する日まで強力なリーダーシップのもとで戦時体制で戦う。
かつての共和制ローマが戦時などに独裁官を任命したように、一頭制はカオスにたいする強靭な耐性を発揮する
Google Chrome拡張で特定のページで動くJavaScriptを書く

 http://www.google.com/ でJavaScriptを動かしてみます。

## 手順
### `manifest.json`に`content_scripts`を書く

```json
{
  "name": "Sample",
  "version": "1",
  "manifest_version": 2,
  "description": "This is sample",
  "content_scripts": [{
    "matches": ["https://www.google.co.jp/*"],
    "js": ["script.js"]
  }]
}
```

`matches`でマッチしたサイトで`js`で指定したScriptが`run_at`のタイミングで実行されます。

### `script.js`を追加

```js
console.log('hello chorme extension')
```

### Google ChromeでChrome拡張を読み込む

1. Google Chromeで`chrome://extensions/`を開く
1. 右上の`デベロッパー モード`にチェックを入れる
1. `パッケージ化されていない拡張機能を読み込む...`ボタンを押す
1. `manifest.json`を入れたフォルダを開く

### 動作確認

Google Chrome で http://www.google.com/ を開いて開発ツールを起動します。

コンソールに次の文字が表示されたら成功です。

```
hello chorme extension
```

## 参考リンク
- [jQuery を使って 30 分で Chrome 拡張を作ってみた (フェンリル | デベロッパーズブログ)](http://blog.fenrir-inc.com/jp/2012/09/jquery-chrome-extension.html)
- [Content Scripts - Google Chrome](https://developer.chrome.com/extensions/content_scripts)

## 合わせて読みたい
- [最小構成のGoogle Chrome拡張を作る](http://qiita.com/ledsun/items/f55926dbd08fb1881894)
データベースの内容をコピーして、新規に保存する


Eloquentモデルで、データベースのとある行の内容を一部だけ変えて新規に保存したい場合の方法。

```php
<?php

	$item = Item::findOrFail($itemId);

    // create new object
    $newItem = $item->replicate();

    $newItem->hoge = "new value";

    // make any required changes to object
    $newItem->save();
```

こんな感じ。clone じゃないのね。


http://forumsarchive.laravel.io/viewtopic.php?id=3788
Onsen UI と Monaca について


簡単にモバイルアプリのUI作成ができそうな Onsen UI と Monaca について調べてみました。

# ■ Onsen UI とは

モバイルアプリ開発に特化した UI フレームワークでナビゲーション機能と UI コンポーネント機能を持っています。

HTML5 で画面遷移や画面上の効果としてのトランジションを含んだ UI を簡単に作成することが出来ます。

![onsen_ui_ss.jpg](https://qiita-image-store.s3.amazonaws.com/0/27642/f6ed0ce4-17a1-9409-951e-be1df63a2759.jpeg "onsen_ui_ss.jpg")

[OnsenUI公式ページ](http://ja.onsen.io/)

主な特徴
* モバイルアプリ作成に必要なUI機能を豊富に提供
　ページ遷移時のアニメーション、ボタン、タブバーなど
* タグで機能を利用できるため、使い方が簡単
* アプリ開発プラットフォーム Monaca に標準搭載
* ドラッグ＆ドロップでGUIを配置できるツールも提供される(予定)
　ただ、残念ながらまだ無いみたいです。2015年3月にリリース予定

# ■ Monaca について

今更語るまでも無いかもしれませんが、クラウドベースのモバイルアプリを開発する為のプラットフォームです。
マルチプラットフォーム対応で、 HTML, JavaScript を使用して iOS, Android 対応のアプリ開発を行うことが出来ます。

主な特徴
* 無料
* クラウドIDEが用意されており、ローカルPC上で開発環境を整える必要がない。
* ローカルPC上で使うための開発環境も用意されている
* 日本の会社(アシアル株式会社)によって運営されているので、日本語のドキュメントが充実している。
* Onsen UI が組み込まれているため、Onsen UI を利用した開発がしやすい。

OnsenUI 関連のドキュメント
http://ja.onsen.io/guide/overview.html
http://ja.onsen.io/reference/javascript.html

UIを作るのであれば、 Monaca と Onsen UI を使うことで簡単に作れそうです。
test-queueを使って、rspecのテストを高速化

## test-queueとは？
* テストを同時に実行するgem
  * https://github.com/tmm1/test-queue
* rspecやtestunitに対応
* parallel_testsやrrrspecのように、専用のDBやクライアントは不要（なのでテスト対象に変更が入らないのが嬉しい）
* 実際のテストでは20分かかっていたのを、3分に短縮できた

## インストール
`$ gem install test-queue`

## 実行
` $ rspec-queue spec`

* `rspec` -> `rspec-queue`にするだけなので簡単
* デフォルトの同時実行数はCPUのコア数
* 同時実行数を指定したい場合は、`TEST_QUEUE_WORKERS`を使う  
   `$ TEST_QUEUE_WORKERS=4 rspec-queue spec`

## 実行結果
```
Run options:
Starting test-queue master (/tmp/test_queue_25534_206036260.sock)

==> Summary (4 workers in 295.0616s)

    [ 3]       650 examples, 0 failures    8 suites in 277.5766s      (pid 25545 exit 0)
    [ 1]       550 examples, 0 failures    3 suites in 285.6700s      (pid 25539 exit 0)
    [ 4]       692 examples, 0 failures    4 suites in 286.9296s      (pid 25548 exit 0)
    [ 2]       645 examples, 0 failures    5 suites in 295.0375s      (pid 25542 exit 0)
```
* 同時並行した数（プロセス）ごとに結果が出力される

## 注意すること
* テスト中の進捗が分からない（`Fuubar`を指定しても進捗は出なかった）   

```text:通常のFuubar
Run options:
  include {}
  exclude {}
394/2537 |========= 15 ==========>                                   |  ETA: 00:16:40
```

```text:test-queueのFuubar
Run options:
  include {}
  exclude {}
Starting test-queue master (/tmp/test_queue_17895_161019340.sock)
```

* HTML出力が正しく出力されない（同時に同じファイルに書き込む為）
 * 対策としてはテキスト出力にする、もしくはHTMLファイルをプロセスごとに分けることで対応可能 
 
> 参考: [test-queue で worker 毎に設定値を変更したくなったらこうする - Thanks Driven Life](http://gongo.hatenablog.com/entry/2014/10/10/153345)

* `--fail-fast`を指定しても、該当プロセスのみテストを途中で中断するだけで、テスト全体は止まらない
やっておいた方がいいホワイトスペースの設定


Atom はカーソルがある行の末尾のホワイトスペースを削除してくれない。

## どういうことか

![atom](https://qiita-image-store.s3.amazonaws.com/0/41720/fd0459f8-8bf5-9d9b-8bbb-ff852bd9cbf0.gif "atom.gif")

行を編集しているときにうっかり保存しちゃった場合に備えてこうしてあると思うんだけど、自分の場合だとこれはうっかりスペースを残してコミットしちゃうことにつながっていたので解決したくなった。

## 解決法

Atom はホワイトスペース系の処理を [whitespace](https://atom.io/packages/whitespace) で行っている。このパッケージはデフォルトで入っているパッケージで、このパッケージの設定で解決できる。

Preferences... > Whitespace > Settings > Ignore Whitespace On Current Line のチェックを外す。

## まとめ

よかったー :smile:
ターミナルの作業が捗るかもな小技５つ


ターミナルで作業する事が多いんですが、そのときによく使っているちょっとしたときに便利なコマンドなどを紹介します。
bashで説明します。
(zsh でもつかえるし、もっと便利になる物も多いですが)

## 1. 並列な階層に複数ディレクトリを一度に作成

`{}` を利用します。
aa,bb,cc というディレクトリを作るとき。

```bash
mkdir {dir1,dir2,dir3}
```
例：
![スクリーンショット 2015-03-22 19.27.06.png](https://qiita-image-store.s3.amazonaws.com/0/30588/68b4f31e-e86e-63f1-9215-5a41bcf5feb2.png "スクリーンショット 2015-03-22 19.27.06.png")

複数ディレクトリ以下に複数ファイルを touch するみたいなのもできます

```bash
touch {dir1,dir2}/{file1,file2}
```
例：
![スクリーンショット 2015-03-22 19.56.36.png](https://qiita-image-store.s3.amazonaws.com/0/30588/308bffa4-7768-9d01-355d-d5770c82e012.png "スクリーンショット 2015-03-22 19.56.36.png")

また、名前の一部が違うようなディレクトリやファイルを同時に作成できます。

```bash
touch foo{1,2,3}bar
```
例
![スクリーンショット 2015-03-23 23.13.03.png](https://qiita-image-store.s3.amazonaws.com/0/30588/a7e38ddf-11b9-fefa-2a12-206d80b36db8.png "スクリーンショット 2015-03-23 23.13.03.png")

バックアップをとるときなども使えます。
(@tukiyo3 さんにコメントでいただいた例を追記しました。ありがとうございます！)

```bash
cp foobar{,.bak}
```
例：
![スクリーンショット 2015-03-23 23.16.26.png](https://qiita-image-store.s3.amazonaws.com/0/30588/73ec3412-f734-6d70-ed84-0fa5b7f74a3c.png "スクリーンショット 2015-03-23 23.16.26.png")


## 2. ディレクトリを作って移動

```bash
mkdir /the/directory/path; cd $_
```
よくありますよね。何度も打つとめんどくさいですね。
`$_` で直前のコマンドの引数を取得できます。
(行分けても書けます)

例：
![スクリーンショット 2015-03-22 20.13.53.png](https://qiita-image-store.s3.amazonaws.com/0/30588/e3699ad2-566b-3c63-3696-53bcbf2aa9b6.png "スクリーンショット 2015-03-22 20.13.53.png")

`cd` で移動ではなく `touch` でそのディレクトリにファイル作成などもできます。


また、`ESC-.` でも `$_` と同じものを挿入できます。
(@tukiyo3 さんありがとうございます！)
例：
![bash2.gif](https://qiita-image-store.s3.amazonaws.com/0/30588/c845a0cf-8d11-b52c-9cee-95cec2d6bd9c.gif "bash2.gif")

## 3. 1つ前にディレクトリに戻る

```bash
cd - 
```
これは結構使います。

例
![スクリーンショット 2015-03-22 20.16.48.png](https://qiita-image-store.s3.amazonaws.com/0/30588/9e248de0-c3b5-00ad-4e2c-b023e6cb1451.png "スクリーンショット 2015-03-22 20.16.48.png")


## 4.  コマンドを複数プロセスで並列実行

xargs の `-P(maxprocs)` オプション使えば、複数プロセスで並列に実行できます。
たとえば、以下のようなurlリスト `url.list` があったときに、ここに記載されたURL各行に並列に curl したいとします。


```url.list
http://example.com
http://example.co.jp
http://example.jp
http://example.net
http://example.asia
```
下記コマンドでできます。(5プロセスで実行)

```bash
cat url.list | xargs -L1 -P5 curl
```

xargs は他にも色々できますね。

## 5. カーソルを単語ごとに移動

カーソル移動は、
`Ctrl-A` で先頭、 `Ctrl-E` で末尾には飛べますが、
`ESC-f` で1単語進める、 `ESC-b` で1単語戻る事ができます。
さらにこの `ESC` は `CTRL-[` でもokです。 Vim もそうですね。

![](http://fat.gfycat.com/AnguishedSnarlingGoldenretriever.gif)


## まとめ

色々あるとは思いますが、操作できれば良いんだと思います。
もっと詳しくは `man bash` に色々書いてあります。
エディタはVim派です。
CakePHPのfind()で関連モデルのデータを取得しない方法（joinさせない方法）

recursiveプロパティを-1に設定する。（Cakeは当該モデルのデータだけを取得します。joinしません。）

```php
$this->Post->recursive = -1;
$posts = $this->Post->find('all');
```
または、

```php
$posts = $this->Post->find('all', array(
    'recursive' => -1,
    'conditions' => ...
);
```


## 参考
モデルの属性
http://book.cakephp.org/2.0/ja/models/model-attributes.html#recursive

Retrieving models without getting associated models - CakePHP
http://stackoverflow.com/questions/5575884/retrieving-models-without-getting-associated-models-cakephp
CakePHPのfind()で取得結果からモデル名を取り除く方法

・コントローラの中でやる場合

```php
$things = $this->Thing->find('all');
$things = Set::extract('/Thing/.', $things);
```

・モデルの中でカスタムfind()を定義する場合

```php
public $findMethods = array('getList' => true); //カスタムfindを定義
protected function _findGetList($state, $query, $results = array())
{
    if ($state == 'after') {
        $results = Set::extract('/Thing/.', $results);
        return $results;
    }
    return $results;
}
```


## 参考
Redundant ModelName in CakePHP find Results
http://stackoverflow.com/questions/11876745/redundant-modelname-in-cakephp-find-results
新参

取りあえずアカウント作りました。
まずjavaがクソ初心者な上にMarkdownって奴に殺されそうです。
Markdownの練習とjavaの初心者具合をお見せします。

```java:test
public class HelloWorld {
	public static void main(String[] args){
		System.out.println("Hello World!");
	}
}
```

まず「`」初めて使いました、探すのに苦労しました。
つーかHelloWorldとSystem.out.printlnが波線引かれてるんだけどもう諦めていいんかな。
systemd-nspawn使ってみた

OpenVzに似ていたので使いやすく感じた。docker使いづらい

## 参考

* [コンテナ型仮想化!Dockerより柔軟なsystemd-nspawnの使用感](http://www.geeks-dev.com/docker%E3%82%88%E3%82%8A%E6%9F%94%E8%BB%9F%E3%81%AA%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E5%9E%8B%E4%BB%AE%E6%83%B3%E5%8C%96systemd-nspawn%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F/)
* [Arch Linux Distribution -- General Discussion](http://comments.gmane.org/gmane.linux.arch.general/53245)
* [systemd-nspawn - ArchWiki](https://archlinuxjp.kusakata.com/wiki/Systemd-nspawn?rdfrom=https%3A%2F%2Fwiki.archlinux.org%2Findex.php%3Ftitle%3DArch_systemd_container_%28%25E6%2597%25A5%25E6%259C%25AC%25E8%25AA%259E%29%26redirect%3Dno)


## ホスト:Fedora22にて作業

```bash:コンテナ作成
yum -y --releasever=22 --nogpg --installroot=/srv/fc22 \
  --disablerepo='*' --enablerepo=fedora install systemd passwd yum \
  fedora-release-server vim-minimal
```

```bash:初期パスワードを設定
sudo chroot /srv/fc22
passwd
exit
```

```bash:ブート
sudo systemd-nspawn -D /srv/fc22 --boot
```

* 抜けるには Ctrl-] を3回
* `--boot`をつけないとsystemdが使えない

## ログイン

```bash:
machinectl login fc22
```
iPhoneアプリ [概要] 1

#1. iPhoneアプリとは
iPhone上で動作するアプリケーションの総称。
(パソコンの場合は「ソフト」という用語ですが、iPhoneの場合は「アプリ」と呼ぶ。

#2. アプリ開発の収入
アプリを開発したら**App Store**で販売し、その売上の**30%**をApple社が手数料として差し引き、残りの**70%**が開発者の収入になる。収入は指定した銀行口座に振り込まれる。

#3. アプリ開発の流れ
##(1) 企画
どんなアプリを作成するのかを考えて決定する
##(2) 開発
企画したアプリを作っていく、プログラミングする
##(3) テスト
作ったアプリが正しく動作するのかを確認する
##(4) 公開
テストを終えたアプリをApp Storeに公開する
##(5) 保守
公開したアプリのメンテナンスやサポートなどを行う

#4. 課金方法
収入を得る方法、App Storeに公開しユーザに課金する方法。
##(1) 有料ダウンロード
アプリをダウンロードする時に課金する方法。
一度払えばアプリを削除して再ダウンロードしても課金はされない
##(2)広告 
アプリ内に広告を表示させて収益を得る方法。
##(3) アプリ内課金
アプリ内で課金する方法。
ゲームアプリなどで利用されている課金方法。

#5. アプリ開発で必要な7つのモノ
(1)インターネット環境(必須)
Xcodeをダウンロードする際、アプリを登録する際に使用する為、必須です。
(2)Mac(必須)
周知ではありますが。必須です。
(3)Xcode(必須)
iPhoneアプリの開発に必要なツールで。
Eclipseのよう(統合開発環境)
アップル社から無料で提供されている。
(4)iPhone本体
「iOSシュミレータ」Mac上でiPhone上で使用する模擬画面があるので
iPhoneにインストールする際には必要になるが、それ以外は必須ではない。
(5)iOSデベロッパプログラムへの登録
アプリをiPhoneにインストールしたり、App Storeで販売する際には登録が必要になります。年額11,800円です。
(6)クレジットカード
iOSデベロッパプログラムへの登録する際に必要になる。
(7)銀行口座
報酬を受け取る際に必要になります。
Rails Tutorial　メモ

Rails Tutorial に関してテスト投稿としてちょっとメモを残してみる。

5.1.2 BootstrapとカスタムCSS
Gemfileに
<pre>
gem 'bootstrap-sass', '2.3.2.0'
gem 'sprockets', '2.11.0'
</pre>
を追記した。
<pre>$bundle install</pre>
でエラーが出たが、どうやら先にsprocketをインストールしろと。。。
bundleでインストールした後に無事できた。

<font color="#0000cd">config/application.rb</font> で、Asset Pipeline互換の行も一応記述した。
問題の<font color="#0000cd">app/assets/stylesheets/custom.css.scss</font>だが
<pre>@import "bootstrap";</pre>

でどうやらエラーが出る。。。
<pre>
custom.css.scss|1 error| File to import not found or unreadable: bootstrap. Load path: /Users/username/rails_projects/sample_app/app/assets/stylesheets                                                  </pre>
<pre>rails s</pre>
でサーバーを起動してみると一応ちゃんと表示はされているようだ。
Haskell で条件分岐

可読性のためにいろいろ使われているが、全て`case` 式の構文糖衣である。

## case
すべての条件は`case` で表せる。ただし可読性を優先してそれぞれ使い分けることになる。
`case`では、パターンマッチまたは式の評価を行える。

> パターンマッチとは、引数にとるなどした値が、**どのコンストラクタで作られたか**によって場合分けを行う方法を指す。

```hs
case 式 of
	パターン1 -> 式1
	パターン2 -> 式2
	| ガード条件1 -> 式3
	| ガード条件2 -> 式4
	| ガード条件3 -> 式5
```

## if
条件の真偽によって宣言を分けたい、という意味合いが強ければ`if`が適している。

```hs
if 条件式 then 式1 else 式2
```

## ガード
幾つかの条件を優先度の高い順に指定して、真になったタイミングで宣言を分岐させたい、という意味合いならばガード。並列的に複数の条件を記述したければこちらだろうか。

```hs
関数 引数		
		| ガード条件1 = 式1
		| ガード条件2 = 式2
        | otherwise = 式3
```

## if をcase に変換する
条件式の結果が`True` コンストラクタにマッチするか、`False` コンストラクタにマッチするかの場合分けを行っている。

```hs
case 条件式 of
	True  -> 式1
	False -> 式2
```

## ガードを case に変換する

パターンマッチは行っていないので無視していて、ガードのみ使っている。

```hs
case () of
	_
		| ガード条件1 -> 式1
		| ガード条件2 -> 式2
		| ガード条件3 -> 式3
```
文字列の幅を調べる∴∵

「文字列の幅」は∴∵のひとことで済(●)∴∵ませるには人∴∵(○)∴∵には難解∴∵すぎる。

が、皆その厄介∵（●）∴∵さを見て見ぬふりで無視して済ませ∵るので、今回の記事でも深入りしないことにする∴∵ [東アジアの文字幅 - Wikipedia](http://ja.wikipedia.org/wiki/%E6%9D%B1%E3%82%A2%E3%82%B8%E3%82%A2%E3%81%AE%E6%96%87%E5%AD%97%E5%B9%85)は∴∴.読むこと∵∵∴∴

## ∵∴(●)どうするか∵∴

例に∵∵∵(･)∴∴.よって[zonuexe/stringwidth](https://packagist.org/packages/zonuexe/stringwidth)をつくった∵∴∴∴.∵∵∵

`composer require 'zonuexe/stringwidth:~0.1.1'` とかでインストールして∴∴kださい ・.・・..：(･)∴∴.(･)∵.

```php
<?php

\Teto\StringWidth::asSingle('ABC'); //=> 3
\Teto\StringWidth::asDouble('ABC'); //=> 3

\Teto\StringWidth::asSingle('☆☆☆'); //=> 3
\Teto\StringWidth::asDouble('☆☆☆'); //=> 6

\Teto\StringWidth::asSingle('도서관'); //=> 6
\Teto\StringWidth::asDouble('도서관'); //=> 6
```

∵∴∵∵∵∵∵このライ∵∴∵∵リは私がつ∵∵∵たのでは∴∴∴な∴∴∴∵∴[tanasinn](http://saitoha.github.io/tanasinn/)∴∴∵∴∵∵∵∵∵∴∴∴∴∴∴∴∴（●）∴∴∴∵∴∴∴∴∴（●） ∴∴∴∴∴∴∵∴∵∵∴∴∴∵∴∵∵∵∵∴∴∴∵∴∵∵∴∴∴∵∴∵∵
Serverspecを使ってみた

# 前提条件
* OS X 10.9.5
* Ruby 2.1.0

# インストール
* Serverspec用のディレクトリを作成し、下記のGEMをインストールする。
<pre>
$ mkdir serverspec
$ cd serverspec
$ bundle init
$ vim Gemfile
</pre>

```rb:Gemfile
gem ‘serverspec’
```
<pre>
$ bundle install --path vendor/bundle
</pre>

# 初期設定
* Serverspecの初期設定を対話式で行う。
* 今回はvagrantというホストに対して、SSH接続する設定とした。
<pre>
$ bundle exec serverspec-init
</pre>

```bash
Select OS type:

  1) UN*X
  2) Windows

Select number: 1

Select a backend type:

  1) SSH
  2) Exec (local)

Select number: 1

Vagrant instance y/n: n
Input target host name: vagrant
 + spec/
 + spec/vagrant/
 + spec/vagrant/sample_spec.rb
 + spec/spec_helper.rb
 + Rakefile
 + .rspec
```

# Serverspecテストコード実装
* NGINXのテストコードを実装する。
<pre>
$ cd spec/vagrant
$ vim nginx_spec.rb
</pre>

```rb:nginx_spec.rb
require 'spec_helper'

describe package('nginx') do
  it { should be_installed }
end

describe command('nginx -v') do
  its(:stdout) { should match /nginx\/1.6.*/ }
end

describe service('nginx') do
  it { should be_enabled }
  it { should be_running }
end

describe port(80) do
  it { should be_listening }
end
```

# Serverspecテスト実施
* Serverspecのテストを実施する。
<pre>
$ bundle exec rake spec
</pre>
MEAN環境をVagrantで構築してみた

## MEANとは？
MEANとは以下のJSフレームワーク等を組み合わせて作られるフルスタック環境です
・MongoDB
・Express
・Angular.js
・Node.js

今回VagrantにのせたOSはCentOS6.5です

## VagrantにCentOS6.5を構築
[Vagrant環境構築方法はこちら](http://qiita.com/kurun/items/41725e31b8e13d2151dd)

Vagrant構築の際に、Vagrantfileの修正をして立ち上げる

```:Vagrantfile
# config.vm.network "private_network", ip: "192.168.33.10"
↑コメントアウトを外す

config.vm.network "private_network", ip: "192.168.33.10"
```

## 下準備
個人的にvimとepelを有効化

```
sudo yum -y install vim epel-release
```
開発ツールを一括インストール、更新

```
sudo yum -y groupinstall "Development Tools"
sudo yum -y update
```
これで下準備完了

## Node.js,npmのインストール
epelレポジトリからインストール

```
sudo yum -y install --enablerepo=epel nodejs npm
sudo rm -rf /usr/lib/node_modules/inherits
sudo mv /usr/lib/node_modules/inherits@2 /usr/lib/node_modules/inherits
```

## MongoDBのインストール
MongoDBレポジトリの追加

```
sudo vim /etc/yum.repos.d/mongodb.repo
```

```:/etc/yum.repos.d/mongodb.repo
[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1
```

インストール,起動,自動起動

```
sudo yum -y install mongodb-org
sudo service mongod start
sudo chkconfig mongod on
```

## bowerのインストール
インストール

```
sudo npm install -g bower
```

## gruntのインストール
インストール

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

## YEOMAN（ヨーマン）のインストール
インストール

```
sudo yum install libpng-devel
sudo npm install -g yo
```

Angular-Fullstackのインストール

```
sudo npm install -g generator-angular-fullstack-jp
```

YEOMAN実行

```
yo
```

もしココでこけたら以下のコマンド

```
bower install & npm install
yo
```

Gruntfileの変更

```
sudo vim Gruntfile.js
```

```Gruntfile.js
   if (target === 'debug') {
      return grunt.task.run([
        'clean:server',
        'env:all',
        'concurrent:server',
        'injector',
        'wiredep',
        'autoprefixer',
        'concurrent:debug'
      ]);
    }

    grunt.task.run([
      'clean:server',
      'env:all',
      'concurrent:server',
      'injector',
      'wiredep',
      'autoprefixer',
      'express:dev',
      'wait',
  //    'open', ←コメントアウト（539行目）
      'watch'
    ]);
  });
```

## サーバの起動
ビルド

```
grunt serve
```

ビルド後にアクセス
[http://192.168.33.10:9000/](http://192.168.33.10:9000/)

![スクリーンショット 2015-03-11 15.47.22.png](https://qiita-image-store.s3.amazonaws.com/0/63733/c3c7c355-4719-8d3f-8825-618203590c86.png)
この画面が出たら構築完了

YEOMANすげぇー(・∀・)
Twitter APIを使ってみる

## アプリケーション登録
1.[こちら](https://apps.twitter.com/)にアクセスし、「Create New App」を選択
2.必要事項を入力し、「Create your Twitter application」を選択

## Access Token取得
1.先の操作後の画面で「Keys and Access Tokens」タブを選択
2.「Create my access token」(画面最下部)を選択
3.同じ最下部あたりに情報が出力される。

## Pythonでちょっとテスト
### 環境
python関連のパッケージ。インストール方法等は他サイトを参考にしてください。

* python 2.7.9
* pip 1.3.1

※　python 2.7.6では、REST APIとの通信の際に以下のようなエラーが出た。

```
/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/util/ssl_.py:79: 
          InsecurePlatformWarning: A true SSLContext object is not available. 
          This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. 
          For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
```

上記サイトの説明を読むと、2.7.9へのアップグレードを推奨すると。ということで、2.7.9へアップグレードしました。


OAuthの認証ライブラリをインストール

```
$ pip install requests requests_oauthlib
```

### テストコード
ソースコード

```twitter_api_test.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import json

from requests_oauthlib import OAuth1Session

oauth_info = {
    'consumer_key': os.environ.get('TWITTER_API_CONSUMER_KEY'),
    'consumer_secret': os.environ.get('TWITTER_API_CONSUMER_SECRET'),
    'access_token': os.environ.get('TWITTER_API_ACCESS_TOKEN'),
    'access_token_secret': os.environ.get('TWITTER_API_ACCESS_TOKEN_SECRET')
}

oauth = OAuth1Session(
    oauth_info['consumer_key'],
    oauth_info['consumer_secret'],
    oauth_info['access_token'],
    oauth_info['access_token_secret']
)

url = 'https://api.twitter.com/1.1/search/tweets.json'
params = {
    'q': u'#python',
    'lang': 'ja',
    'result_type': 'recent',
    'count': '15'
}

res = oauth.get(url, params=params)

if res.status_code != 200:
    print '[ERROR] Unexpected code: %d' % res.status_code
    exit(1)

tweets = json.loads(res.text)

for tweet in tweets['statuses']:
    print '-----'
    print tweet['text']
```

実行

```
$ export TWITTER_API_CONSUMER_KEY=xxx	# 以下4行には、「Access Token取得」で得たものを使用します。
$ export TWITTER_API_CONSUMER_SECRET=yyy
$ export TWITTER_API_ACCESS_TOKEN=zzz
$ export TWITTER_API_ACCESS_TOKEN_SECRET=aaa

$ python twitter_api_test.py
```

### 結果
こんな感じに。

```
-----
RT @_liongarden: Pythonエンジニア募集！一緒にクラウドマーケットプレイスをつくりましょ by 株式会社LionGarden https://t.co/REcRr7RdkM #wantedly #python #nodejs #angularjs
-----
RT @_liongarden: Pythonエンジニア募集！一緒にクラウドマーケットプレイスをつくりましょ by 株式会社LionGarden https://t.co/REcRr7RdkM #wantedly #python #nodejs #angularjs
-----
ShannonLabが地元八王子にてpythonの勉強会を定期的に行なっております。プログラミングの初級者の方も参加出来ます。「Python　勉強会　八王子」で検索してね。 ATND から登録出来ます。 #python
-----
RT @_liongarden: Pythonエンジニア募集！一緒にクラウドマーケットプレイスをつくりましょ by 株式会社LionGarden https://t.co/REcRr7RdkM #wantedly #python #nodejs #angularjs
-----

(以下省略)
```
CSVをSQLで集計する方法


CSVのデータのレコード数や合計値、平均値などを求めたい時ってたまにある。

エクセルなど表計算ソフトで読み込んで求めるってのがよくやる方法だと思うが、ある列の値が同じ行の値の合計値や平均を求めたい場合では「SQLでできれば...」と思ってしまう。

そんな時にはH2DBが役立つ。

と思っていたが、2017年12月現在では [Run SQL directly on CSV files \| Text as Data \| q](http://harelba.github.io/q/) の方がお手軽だと思う。

## H2DBとは
Java製のRDBMS。エンジンとJDBCドライバーがjarファイル一つになっている。

[H2 Database Engine](http://h2database.com/html/main.html)

上記サイトからダウンロードできるAll Platforms向けのzipファイルにはjarファイルの他、ドキュメントやソース、起動スクリプト等も含まれている。

## 使い方
zipファイルを展開するとbinディレクトリが含まれている。このディレクトリにjarファイルと起動スクリプトが入っている。

### コンソールの起動
binディレクトリに入って次のように起動スクリプトを実行するとWebブラウザが起動し、H2DBのWebコンソールが開く。

```bash
> ./h2.sh
```

最初に表示されるのはログイン画面。
CSVファイルを読み込ませて検索するだけなら、設定する項目はないので、そのまま接続ボタンを押せば良い。

![H2ログイン.png](https://qiita-image-store.s3.amazonaws.com/0/32533/a806f577-f1d8-b00e-e8b2-52aeca7c87e2.png "H2ログイン")

すると次のようなコンソールが表示される。
SQLステートメントにSQLを書き込んで実行ボタンを押せば良い。

![H2コンソール.png](https://qiita-image-store.s3.amazonaws.com/0/32533/2915c2e7-e7b8-47d2-021b-8bc0c4f4c38c.png "H2コンソール")

#### H2DBのシェル
Webコンソールよりターミナルという方は次のコマンドでH2DBのシェルを起動できる。最初に幾つか質問されるが、CSVを検索するだけならRETERN連打でOK。

```bash
java -cp h2*.jar org.h2.tools.Shell
```

### CSVを読み込むSQLの実行
CSVを読み込むには CSVREAD 関数をFROM句で使う。

```sql
SELECT count(*) FROM CSVREAD('ファイルパス')
```

CSVファイルの先頭行がヘッダ行となりカラム名として認識される。
ヘッダ行がない場合には、CSVREAD関数の第2引数で指定することもできる。詳しくは [CSVREAD関数のドキュメント](http://h2database.com/html/functions.html#csvread) を参照のこと

注意点としては、数字のカラムもvarcharとして読み込まれてしまうので、AVGやSUMなど数値としての計算が必要な関数を使う場合には[CAST関数](http://h2database.com/html/functions.html#cast)か[CONVERT関数](http://h2database.com/html/functions.html#convert)で数値に変換してから使う。

```sql
SELECT product, COUNT(*), SUM(CAST(cost as INT)) FROM CSVREAD('sample.csv')
GROUP BY product;
```

## GUIツールから使う
[Execute Query](http://executequery.org/index.php)のようなJDBCドライバーを組み込んでDBに接続できるツールでもH2DBは利用できる。慣れたツールがあるならそのつーるから使う方が便利。

ツールにより項目名は変わるかもしれないが、次のように設定すればよい。

|設定項目|設定値|
|---|---|
|JDBCドライバ|h2-1.x.xxx.jar|
|クラス名|org.h2.Driver|
|データソース|jdbc:h2:mem:hoge|

データソースの mem はオンメモリでの動作を示し、 hoge は何でも良い。


## 他に同様のツールは？
これも良さそう。

- [textql](https://github.com/dinedal/textql)

そういえば昔マイクロソフトがCSVとかApacheのログとかをSQLチックな検索言語で処理できるツールを出してたけど、どうなったのかな。
CoffeeScriptで配列宣言いじり倒し

CoffeeScriptって面白い宣言するなーと思ったので今回は配列に絞っていろいろやってみました。もしかするともっと面白い宣言があるかもしれないので、こんなのもあるよ！というものがあればぜひ教えてほしいです。

# CoffeeScriptコード

```coffeescript:array.coffee
# 基本形
arr0 = ["a", "b", "c"]

# カンマのみならず, 改行でも要素を区切れる
arr1 = [
  "a", "b", "c"
  "d", "e", "f"
  "g", "h", "i"
]

# カンマ+改行(任意回)でも一つの区切りとして認識
# 最末尾にカンマを入れてもOK
# カンマを複数回重ねるとNG
arr2 = [
  "a", "b", "c",
  "d", "e", "f",

  "g", "h", "i",
  # "j", "k", "l",,, <- NG
]

# 最初の要素は空白を開ける必要あり
# 2個目以降は空けなくてもOK
arr3 = [
 "a"
"b"
"c"
]

# 1から10までの配列
arr4 = [1..10] # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 逆向きも負の数もOK
arr5 = [10..-1]

# 小数点もいけるけど1.0ずつ増えていくため末尾の数値が表示されないことがある
arr6 = [0.1..3.0] # [0.1, 1.1, 2.1]

# 文字列は無理
arr7 = ["a".."z"] # [ "a" ]

# booleanでもいけなくはない
arr8 = [true..false] # [true, 0]
arr9 = [false..true] # [false, 1]
arr10 = [true..3] # [true, 2, 3]
arr11 = [true..-3] # [true, 0, -1, -2, -3]
```

# コンパイル後
コンパイルを通すとjsファイルになります。これを見るとなぜ上の結果になるか丸わかり。

```js:array.js
// Generated by CoffeeScript 1.9.1
(function() {
  var arr0, arr1, arr10, arr11, arr2, arr3, arr4, arr5, arr6, arr7, arr8, arr9, i, j, k, l, m, results, results1, results2, results3, results4;

  arr0 = ["a", "b", "c"];

  arr1 = ["a", "b", "c", "d", "e", "f", "g", "h", "i"];

  arr2 = ["a", "b", "c", "d", "e", "f", "g", "h", "i"];

  arr3 = ["a", "b", "c"];

  arr4 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

  arr5 = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1];

  arr6 = [0.1, 1.1, 2.1];

  arr7 = (function() {
    results = [];
    for (var i = "a"; "a" <= "z" ? i <= "z" : i >= "z"; "a" <= "z" ? i++ : i--){ results.push(i); }
    return results;
  }).apply(this);

  arr8 = (function() {
    results1 = [];
    for (var j = true; true <= false ? j <= false : j >= false; true <= false ? j++ : j--){ results1.push(j); }
    return results1;
  }).apply(this);

  arr9 = (function() {
    results2 = [];
    for (var k = false; false <= true ? k <= true : k >= true; false <= true ? k++ : k--){ results2.push(k); }
    return results2;
  }).apply(this);

  arr10 = (function() {
    results3 = [];
    for (var l = true; true <= 3 ? l <= 3 : l >= 3; true <= 3 ? l++ : l--){ results3.push(l); }
    return results3;
  }).apply(this);

  arr11 = (function() {
    results4 = [];
    for (var m = true; true <= -3 ? m <= -3 : m >= -3; true <= -3 ? m++ : m--){ results4.push(m); }
    return results4;
  }).apply(this);

}).call(this);
```

このfor文が肝ですね。

```js
for (var i = "a"; "a" <= "z" ? i <= "z" : i >= "z"; "a" <= "z" ? i++ : i--){ results.push(i); }
// i++, i-- はNaNになるため、2回目の判定でfalseとなりfor文を抜ける
```

trueやfalseはインクリメント（デクリメント）しようとすると数値の1や0とみなされるからあのような結果になるのですね。
ファイルを分割して結合する方法

数百MB～の大容量ファイルをファイル転送する場合、どうしても問題が出る問題ケースがあります。
最近では減りましたが、未だに存在します。

その場合、```spilt``` と ``` cat ``` を使いましょう。下手なツールを使わず、コマンドでだけでいけます。
Windows でも minttyとか導入すれば可能です。私はそれでやっています。

# ファイルの分割 - Windows (約100Mずつ)
```shell
$ split -b 100000000 bigdata.zip bigdata.zip.
$ cat bigdata.zip.* > bigdata.zip 
$ ls -al
-rw-r--r-- 1 BIGUSER Administrators 100000000 Apr  7 13:38 bigdata.zip.aa
-rw-r--r-- 1 BIGUSER Administrators 100000000 Apr  7 13:38 bigdata.zip.ab
-rw-r--r-- 1 BIGUSER Administrators 100000000 Apr  7 13:38 bigdata.zip.ac
-rw-r--r-- 1 BIGUSER Administrators 100000000 Apr  7 13:38 bigdata.zip.ad
-rw-r--r-- 1 BIGUSER Administrators 100000000 Apr  7 13:39 bigdata.zip.ae
-rw-r--r-- 1 BIGUSER Administrators 100000000 Apr  7 13:39 bigdata.zip.af
-rw-r--r-- 1 BIGUSER Administrators  56026876 Apr  7 13:39 bigdata.zip.ag
```

転送

# ファイルの結合 - Linux
```
$ ls -al
-rw-r--r--. 1 smalluser users 100000000 2015-04-07 13:41 bigdata.zip.ab
-rw-r--r--. 1 smalluser users 100000000 2015-04-07 13:42 bigdata.zip.ac
-rw-r--r--. 1 smalluser users 100000000 2015-04-07 13:42 bigdata.zip.ad
-rw-r--r--. 1 smalluser users 100000000 2015-04-07 13:43 bigdata.zip.ae
-rw-r--r--. 1 smalluser users 100000000 2015-04-07 13:43 bigdata.zip.af
-rw-r--r--. 1 smalluser users  56026876 2015-04-07 13:44 bigdata.zip.ag
$ cat bigdata.zip.* > bigdata.zip 
$ ls -l bigdata.zip
-rw-r--r--. 1 smalluser users 656026876 2015-04-07 13:47 bigdata.zip
```

良きLinux Lifeを
【アセンブラ】システムコールの呼び出し方メモ

ちょっと学習したい事柄があり、その過程でアセンブラを勉強中。
HelloWorldから勉強しており、システムコールの呼び出し方についてのメモ。

### 環境
* CentOS7 on Windows(VMWare)
* x86_64

### システムコールの呼び出し方

ベースのコードを[こちらのページ](http://homepage2.nifty.com/hanpen/assemblry.html)から拝借。

#### int 0x80

まず`int 0x80`による呼び出し方法

```:hello.asm
section .data 
message db 'Hello, World', 0x0a
length      equ $ -message 
section .text
global _start

_start:
mov     ecx, message
mov     edx, length
mov     eax, 4
mov     ebx, 1
int     0x80

mov     eax, 1
mov     ebx, 0
int     0x80
```

```:出力結果
Hello, World
```

`int 0x80`命令の場合、eaxレジスタにシステムコール番号を入力することが必要なようです。上記の例では４です。で、これが何のシステムコールかということは`/usr/include/asm/unistd_32.h`に記載されているようです。
以下に一部を抜粋すると4のところに出力の命令が来ているのが分かります。

```:unistd_32.h
#ifndef _ASM_X86_UNISTD_32_H
#define _ASM_X86_UNISTD_32_H 1

#define __NR_restart_syscall 0
#define __NR_exit 1
#define __NR_fork 2
#define __NR_read 3
#define __NR_write 4
```

#### syscall
上記ですが、`unistd_32.h`からも分かるとおりx86のシステムコール番号を参照した実行方法のようです。使用しているOSはx86_64なので、せっかくだからx86_64のシステムコール番号で呼び出したいところです。これは`syscall`命令を使用すると呼び出せるとのこと。
またシステムコール番号はunistd_64.hを参照すれば分かります。今度は1が出力なのでそれを指定します。
指定するレジスタ名も異なるようです。具体的には[こちら](http://en.wikibooks.org/wiki/X86_Assembly/Interfacing_with_Linux)を参照。

```:hello.asm
section .data 
message db 'Hello, World', 0x0a
length      equ $ -message 
section .text
global _start

_start:
mov     rsi, message　←変更点
mov     rdx, length　←変更点
mov     rax, 1　←変更点
mov     rdi, 1　←変更点
syscall

mov     eax, 1
mov     ebx, 0
int     0x80
```

```:出力結果
Hello, World
```

### 参考
X86 Assembly/Interfacing with Linux - Wikibooks, open books for an open world http://en.wikibooks.org/wiki/X86_Assembly/Interfacing_with_Linux

Linux で NASM http://homepage2.nifty.com/hanpen/assemblry.html

<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/B00OCF5YUA/kuredev-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51VOzDTtIcL._SL160_.jpg" alt="32ビットコンピュータをやさしく語る　はじめて読む486 (アスキー書籍)" 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/B00OCF5YUA/kuredev-22/ref=nosim/" name="amazletlink" target="_blank">32ビットコンピュータをやさしく語る　はじめて読む486 (アスキー書籍)</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/" title="amazlet" target="_blank">amazlet</a> at 15.04.11</div></div><div class="amazlet-detail">KADOKAWA / アスキー・メディアワークス (2014-10-21)<br />売り上げランキング: 10,873<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00OCF5YUA/kuredev-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>