OmniAICreator/Qiita-1.07M huggingface dataset:
Node.js express4 res.send()で数値型指定すると、ステータスコードになってしまう

はまったのでメモしておく

````js
$.ajax({
   url:hoge,
   method:post,
   data:{table:'hoge',param:JSON.stringify({title:'foo',content:'bar'})}
).then(function(result){
   console.log(result);
});
````

として、サーバー側
DBにデータをinsertし、insertしたIDを取得するもの

````routes/hoge.js

var express=require("express");
var router=express.Router();
var sql = require("sql");
router.post('/',function(req, res, next) {
     sql.insert(req.body.table,req.body.param,function(result){
            res.send(result);
    }
});
````

これで結果が返ると思ったら帰らない。
なぜかHTTP　ステータスコードに、インサートしたIDが入っている。
どうやら数値型を`send`するとこうなるらしい。

こうやったらちゃんとresponse bodyに結果が返ってきた

````routes/hoge.js

var express=require("express");
var router=express.Router();
var sql = require("sql");
router.post('/',function(req, res, next) {
     sql.insert(req.body.table,req.body.param,function(result){
            res.send(String(result));
    }
});
````
**res.send(String(result));**

これだけで30分も損した。
【注意点と】ircslackrelayを動かしてみた【推奨設定】

以前からずっと動かしたいと思っていた[sifue/ircslackrelay](https://github.com/sifue/ircslackrelay)を動かしてみました。
以下自分が引っかかった点と推奨設定を書きます。

## 注意点

[SlackとIRCを相互リレーする話 - Qiita](http://qiita.com/sifue/items/4fd6efee608da0cc849d)に日本語の手順があるのでその通りにすれば半分寝ててもできるんですが、Slack APIを使ったことがないとgateway・API tokenのところで少しだけ引っかかると思います。

gatewayは https://my.slack.com/account/gateways から表示されるんですが、このURLは最後にアクセスしたチームのページに飛びます。
例えば最後にアクセスしたチームが"abc"の場合、https://my.slack.com/account/gateways にアクセスすると https://abc.slack.com/account/gateways に飛ばされる、という具合です。
もしリレーを設定したいチームとリダイレクト先のチームが違う場合、単純にURLを書き換えてチームを指定してください。

また、gatewaysのページにも書かれていますがこの設定を行うためには管理者の許可が必要です。
もしIRC gatewayがdisableの場合、teamの管理者に有効化を依頼してください。


もう1つ引っかかったのはSlack APIのAPI tokenを得る方法で、 [apiのトップページへ行っても](https://api.slack.com/)API tokenを得る方法がよくわからなかったのですが[Web APIサブページ](https://api.slack.com/web)の一番下にありました。発行自体はボタン1発でできて楽ちん。

## 推奨設定

```ircslackrelay.conf
…
irc.nickname="from_slack"
slack.api.username="from_irc"
slack.api.icon_url="https://pbs.twimg.com/profile_images/605693940256243714/tKPa4Zp7.png"
…
```

slack側でbotのアイコンを表示すると、発言者のアイコンと並んで表示されるためだれが発言しているのかわかりづらくなります。
なので無地の白一色のアイコンを設定しました。
またirc側・slack側それぞれのボット名を"from_slack", "from_irc"とすることでリレーしていることをよりわかりやすくしています。
core-jsだとSymbolについてのkey in objectが誤判定する

```lang:js
s1=Symbol('hoge');
s2=Symbol('fuga');
o={};
o[s1]=1;
console.log(s1 in o);// true
console.log(s2 in o);// false
core-jsだと両方trueになる
```

primitiveではなくobjectをpropertyのkeyにした場合はToPrimitiveしてkeyにする。native実装のSymbolはprimitiveだけどpolyfillだと当然object。

どうも同一コンストラクタのobjectをpropertyのkeyにするとkey in objectで区別できないっぽい

これによる問題がcore-js@0.9.13ではまだある模様

native実装のSymbolがない場合は、Symbolをkeyとしているpropertyについて、key in objectしないとするのが解決策っぽい。IE11,AppleWebKit/600がなくなったら心配ない。

想定問答

Q:babel使ってはどうか?
A:帰れ
【メモ】R のデフォルトパッケージを調べる #rstatsj

```r:R
library(dplyr)
installed.packages() %>% .[.[, "Priority"] %in% "base", ] %>% row.names
```

```:結果
 [1] "base"      "compiler"  "datasets"  "graphics"  "grDevices"
 [6] "grid"      "methods"   "parallel"  "splines"   "stats"    
[11] "stats4"    "tcltk"     "tools"     "utils"
```

```r:R
installed.packages() %>% .[.[, "Priority"] %in% "recommended", ] %>% row.names
```

```:結果
 [1] "boot"       "class"      "cluster"    "codetools"  "foreign"   
 [6] "KernSmooth" "lattice"    "MASS"       "Matrix"     "mgcv"      
[11] "nlme"       "nnet"       "rpart"      "spatial"    "survival"
```

## 追記

「デフォルトパッケージ」という言葉に突っ込みが入りました。

<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">親分のこの「デフォルトパッケージ」って何のことなんだろうか？sessionInfo()とは挙動が違うし【メモ】R のデフォルトパッケージを調べる <a href="https://twitter.com/hashtag/rstatsj?src=hash">#rstatsj</a> by <a href="https://twitter.com/hoxo_m">@hoxo_m</a> on <a href="https://twitter.com/Qiita">@Qiita</a> <a href="http://t.co/4VFnddZN2i">http://t.co/4VFnddZN2i</a></p>&mdash; ホクソエム (@u_ribo) <a href="https://twitter.com/u_ribo/status/606053893529739265">2015, 6月 3</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">デフォルトのパッケージってgetOption(&quot;defaultPackages&quot;)で表示されるやつ、という意味とは違うのかしら。</p>&mdash; ホクそうむ (@R_Linux) <a href="https://twitter.com/R_Linux/status/606270498431856640">2015, 6月 4</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

この記事では、R をインストールした時点ですでに入っているパッケージのことで、`install.packages()` しなくても `library()` でロードできるやつという意味で使ってました。
まぎらわしくてごめんなさい。
AWSLambdaで「Configurations overlap. Configurations on the same bucket cannot share a common event type」というエラーが出た場合の対応

lambdaをマネージメントコンソールから操作して以下の契機で **Configurations overlap. Configurations on the same bucket cannot share a common event type** というエラーが発生してしまいました。

![Screen Shot 2015-06-03 at 11.05.02 AM.png](https://qiita-image-store.s3.amazonaws.com/0/20193/08ac6f30-b9c2-03c4-6540-11d4ea5ac49e.png)


+ lambdaファンクションは作成済み
+ add event sourceにて一度、S3のnotificationを設定
+ 設定後、lambdaのコンソール画面でS3のnotificationを削除
+ 再度、同じファンクション、同じS3にnotificationを設定→エラー発生

# 解決方法

該当するS3のバケットの画面を表示し、Eventを確認するとlambdaのイベントが登録されているのでこれを削除すればOKです。

![Screen Shot 2015-06-03 at 11.07.10 AM.png](https://qiita-image-store.s3.amazonaws.com/0/20193/ca8c28a3-629d-4586-4266-064207e1f8f9.png)


# なぜ上記のようになるのか

lambdaのマネージメントコンソールでadd event sourceにてS3のnotificationの設定を行うと内部的には以下二つのAPIが呼ばれていると思われます(AWS CLIで操作するとそうしなければよいので）

1. lambda functionに対して **add permission** APIの呼び出し
1. S3バケットに対して指定したイベント時にlambda function を呼び出す **put-bucket-notification** APIの呼び出し

ただし、lambdaのマネージメントコンソール上で削除を行うと上記の「1」に該当する削除しか行われないため、そのまま再登録しようとするとS3のイベント設定が重複しているよということで別途S3のイベント削除する必要があります。
RESTful API Proxy サーバーを Brunch で使う

SPA な開発をしていると、RESTful API 用の Proxy が欲しくなります。でも、そのために Apache 入れたり nginx 入れるのはちょっと違うよなと思っていて、Brunch 使っている人向けの情報です。

# Brunch でローカルサーバーをカスタマイズ

brunch-config.coffee でサーバーを指定すればよろしい。

```coffeescript:brunch-config.coffee
exports.config =
  # See http://brunch.io/#documentation for docs.
  files:
    javascripts:
      joinTo:
        'javascripts/app.js': /^app/
        'javascripts/vendor.js': /^(?!app)/

    stylesheets:
      joinTo: 'stylesheets/app.css'

    templates:
      joinTo: 'javascripts/app.js'

  server:
    path: 'local-server.coffee'
    run: yes
```

# ローカルサーバーを書く

いろいろあると思いますが、オーソドックスに [Express](https://www.npmjs.com/package/express) を使います。http proxy 用に [request](https://www.npmjs.com/package/request) も使います。

```coffeescript:local-server.coffee
express = require 'express'
sysPath = require 'path'
http = require 'http'
request = require 'request'

exports.startServer = (port, path, callback) ->
  app = express()
  app.use express.static path

  proxy = 'http://192.168.80.96:8080'
  api_endpoint = 'http://192.168.80.150:8002'

  request = request.defaults
    proxy: proxy

  app.all '/api/*', (req, res) ->
    req.pipe(request(api_endpoint + req.url)).pipe(res)

  # rewrite other resource to index.html
  app.all '/*', (req, res) ->
    res.sendFile sysPath.resolve sysPath.join path, 'index.html'

  server = http.createServer app
  server.listen parseInt(port, 10), callback
  server
```

実装は単純で、/api 宛てのリクエストを絶対 URL にして、request に pipe して結果を res に pipe。抽象度高すぎてしびれます。それ以外の URL については index.html を返すようにしてリロード対策。

この例では内部 proxy 指定してますけど、API サーバーに直接アクセス可能なら、いらない設定です。あとは、google maps など外部の API を呼ぶときに corporate proxy 経由しないとダメーなときに指定したりします。

# はまりどころ

当初、proxy 用に [http-proxy](https://www.npmjs.com/package/http-proxy) を使ってたんですが、内部 proxy を経由するとどうにもうまく動きませんでした。原因究明に疲れ果てた頃に request に出会い、試しに使ってみると拍子抜けするくらいあっさり成功。。。

下手に利用実績のあるプロダクトだと、なんとか動かそうと執着して時間を無駄にしてしまうことがあり、良くない傾向だなと反省しました。

# 参考

- [Brunch Config](https://github.com/brunch/brunch/blob/stable/docs/config.md)
- [Brunch Guide - Writing your own server](https://github.com/brunch/brunch-guide/blob/master/content/en/chapter10-web-server.md#writing-your-own-server)
- [Express 4.x API Reference](http://expressjs.com/4x/api.html)
- [request - github](https://github.com/request/request)
Cocos2d-xでBoostを使う


iOSとAndroidプロジェクトでBoostを使用する手順のメモ
タイトルはCocos2d-xとしたがC++を使うプロジェクトなら
別にCocos2d-xは無くても使用可能

※ ただしヘッダーオンリーで使えるライブラリのみ [参考](http://boostjp.github.io/tips/build_link.html)

### 実行した環境 ###

+ Xcode v6.3.2
+ Android NDK r10e
+ Cocos2d-x v3.6


### Boostをダウンロードしてプロジェクトに追加する ###

http://www.boost.org/
![boost.png](https://qiita-image-store.s3.amazonaws.com/0/67518/4620de7f-28bd-330c-73ef-5195ceb2fda6.png "boost.png")


### インクルードパスを設定する(iOS) ###

TARGETS > Build Settings > Search Paths > Header Search Paths
に "$(SRCROOT)/../Libraries/boost/include" を追加する。
![xcode.png](https://qiita-image-store.s3.amazonaws.com/0/67518/cb3d4a43-737e-7433-0b86-290fe1a4f2e1.png "xcode.png")


### インクルードパスを設定する(Android) ###

Android.mkに　
`LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../Libraries/boost/includ`
を追加する

```Android.mk
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

$(call import-add-path,$(LOCAL_PATH)/../../cocos2d)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/external)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos)

LOCAL_MODULE := cocos2dcpp_shared

LOCAL_MODULE_FILENAME := libcocos2dcpp

LOCAL_SRC_FILES := hellocpp/main.cpp \
                   ../../Classes/AppDelegate.cpp \
                   ../../Classes/HelloWorldScene.cpp

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes

# ここに追加
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../Libraries/boost/include

# _COCOS_HEADER_ANDROID_BEGIN
# _COCOS_HEADER_ANDROID_END


LOCAL_STATIC_LIBRARIES := cocos2dx_static

# _COCOS_LIB_ANDROID_BEGIN
# _COCOS_LIB_ANDROID_END

include $(BUILD_SHARED_LIBRARY)

$(call import-module,.)

# _COCOS_LIB_IMPORT_ANDROID_BEGIN
# _COCOS_LIB_IMPORT_ANDROID_END
```

### 使ってみる ###

```cpp
#include <string>
#include <boost/lexical_cast.hpp>
#include <boost/uuid/random_generator.hpp>
#include <boost/uuid/uuid_io.hpp>
#include "cocos2d.h"
void test_boost() {
    boost::uuids::random_generator gen;
    auto uuid = boost::lexical_cast<std::string>(gen());
    CCLOG("uuid = %s", uuid.c_str());
}
```

おわり
2重foreachをLINQを使って

```csharp

public class Student
{
    public string Name;
}

public class Class
{
    public Student[] Students;
}

public class School
{
    public Class[] Classes;
}
```
Schoolから全Studentの名前のリストを作りたい場合

foreachなら

```csharp

var names = new List<string>();
foreach (var @class in school.Classes)
{
    foreach (var student in @class.Students)
    {
        names.Add(student.Name);
    }
}
```
LINQを使うと

```csharp

var names = school.Classes
    .SelectMany(o => o.Students)
    .Select(o => o.Name)
    .ToList();
```
YahooID連携のSDKについて

注文検索APIなどを利用するにあたって仕組みは以下の通りと認識しております。

Authorizationエンドポイントにてユーザ認証→認可コード取得
→Tokenエンドポイントにてアクセストークン取得→WebAPIリクエスト
このような流れであると認識しています。

このYahooID連携について
PHPやJAVAのSDKが提供されていますが、C#版はございませんでしょうか。
動作保障のないサンプルでも結構ですのでございませんでしょうか。

以上よろしくお願いいたします。

自己解決しましたので投稿を取り消します。
PHPでよく使う正規表現

全て、以下のように`preg_match`関数で使用します。

```php
preg_match($regex, $string);
```

### 全角カタカナにマッチ

```php
$regex = '/\A[\x{30A1}-\x{30FC}().-]+\z/u';
```
「ヱ」や「・」なども含んでいるので用途に合わせて適宜修正して下さい。
参考:[unicode表](http://ja.wikipedia.org/wiki/Unicode%E4%B8%80%E8%A6%A7_3000-3FFF)

### 半角カタカナにマッチ

```php
$regex = '/\A[\x{FF66}-\x{FF9F}]+\z/u';
```
参考:[unicode表](http://ja.wikipedia.org/wiki/Unicode%E4%B8%80%E8%A6%A7_F000-FFFF)

### メールアドレスにマッチ

```php
$regex = '/\A[\p{L}0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[\p{L}0-9!#$%&\'*+\/=?^_`{|}~-]+)*@(?:[_\p{L}0-9][-_\p{L}0-9]*\.)*(?:[\p{L}0-9][-\p{L}0-9]{0,62})\.(?:(?:[a-z]{2}\.)?[a-z]{2,})\z/ui';
```

実際のところ、メールアドレスの正規表現については普遍的な正解というものは有りませんので状況に応じて適宜修正してご利用下さい。
参考:[PHPしか書けないザコがメールアドレス正規表現でガチ勢に挑んでみた](http://qiita.com/mpyw/items/257eabe0b43b1e02e6f7)

### クレジットカード番号にマッチ

全てのカード会社のカードにマッチするのは以下。

```php
$regex = '/\A(4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|6(?:011|5[0-9]{2})[0-9]{12}|^(?:2131|1800|35\d{3})\d{11}$)\z/';
```

VISAにマッチするのは以下。

```php
$regex = '/\A4\\d{12}(\\d{3})?\z/';
```

MasterCardにマッチするのは以下。

```php
$regex = '/\A5[1-5]\\d{14}\z/';
```

JCBにマッチするのは以下。

```php
$regex = '/\A(3\\d{4}|2100|1800)\\d{11}\z/';
```

Amexにマッチするのは以下。

```php
$regex = '/\A3[4|7]\\d{13}\z/';
```

Dinersにマッチするのは以下。

```php
$regex = '/\A(?:3(0[0-5]|[68]\\d)\\d{11})|(?:5[1-5]\\d{14})\z/';
```

Discoveryにマッチするのは以下。

```php
$regex = '/\A(?:6011|650\\d)\\d{12}\z/';
```

### IPアドレスにマッチ

IPv4にマッチするのは以下。

```php
$regex = '\A(?:(?:25[0-5]|2[0-4][0-9]|(?:(?:1[0-9])?|[1-9]?)[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|(?:(?:1[0-9])?|[1-9]?)[0-9])\z';
```

IPv6にマッチするのは以下。

```php
$regex = '\A((([0-9A-Fa-f]{1,4}:){7}(([0-9A-Fa-f]{1,4})|:))|(([0-9A-Fa-f]{1,4}:){6}(:|((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})|(:[0-9A-Fa-f]{1,4})))|(([0-9A-Fa-f]{1,4}:){5}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){4}(:[0-9A-Fa-f]{1,4}){0,1}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){3}(:[0-9A-Fa-f]{1,4}){0,2}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){2}(:[0-9A-Fa-f]{1,4}){0,3}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:)(:[0-9A-Fa-f]{1,4}){0,4}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(:(:[0-9A-Fa-f]{1,4}){0,5}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})))(%.+)?\z';
```

### UUIDにマッチ

```
$regex = '/\A[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[0-5][a-fA-F0-9]{3}-[089aAbB][a-fA-F0-9]{3}-[a-fA-F0-9]{12}\z/';
preg_match($regex, $uuid);
```
参考:[RFC4122](http://tools.ietf.org/html/rfc4122)
多段ssh先からsshコマンドでファイルを取得


あるサーバにアクセスするために踏み台サーバを用意する会社は多いかと思います。
さらにログを記録するため、ポート転送やProxyCommandも禁止されている場合、ファイルを持ってくるとしたら2回scpするしかありません。
結構面倒ですし、2回scpするシェルスクリプトも書きたくない。
ということで、sshの標準出力を使って持ってこようと思います。

# 検証環境
- Mac
	- OS X Yosemite(10.10.3)

# 参考
- [SSHでscpを使わずにファイルをコピーする](http://labs.timedia.co.jp/2011/04/rawssh-filecopy.html)
 - 基本的のこのサイト通りですが、一部うまくいかず直してあります。

# ファイルの場合

## catを使う
まずは`cat`を使った方法を紹介します。

### サーバから取得
二回sshして、その先で`cat`して標準出力を手元のマシンで受け取ります。

```console
$ ssh user@fumidai "ssh user@server 'cat remote.txt'" > local.txt
```

### サーバへ送る
@ngyukiさんに教えていただきました。ありがとうございます。

```console
$ ssh user@fumidai "ssh user@server 'cat > remote.txt'" < local.txt
```


## ddを使う
`cat`を使わずに`dd`コマンドで持ってきます。

### サーバから取得
これは少しハマりました。
持ってくるファイルがどうしても違うなーと思ってdiff見たら標準エラー出力が混ざってました。
sshで持ってくると標準出力と標準エラー出力の区別ができないっぽいです。
ということでサーバ側で標準エラー出力を捨ててから持ってきます。

```console
$ ssh user@fumidai ssh user@server 'dd if=remote.txt 2> /dev/null' > local.txt
```

### サーバへ送る
`cat`だとうまくいきませんでしたが、`dd`コマンドならうまくいきました。

```console
$ ssh user@fumidai ssh user@server 'dd of=remote.txt' < local.txt
```
型が無いならtypeofつけちゃえばいいじゃない(toStringの方が安全のよう)

僕は新卒で働き始めた頃ActionScript3.0からスタートしたので、型がある生活が普通でした。
functionに違う型の引数渡したら丁寧にエラーをはいてくれて。

時は流れ

JavaScriptが台頭しはじめ、僕も触り始めました。
そして戸惑う。型が無いことに。特にエラーもはいてくれない。

*そこで出会ったのがtypeof*

[typeof 演算子 - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/typeof)

変数の型(語弊があるかも)を判別して文字列で返してくれる。

```js
function add(a, b) {
    if(typeof a === "number" && typeof b === "number") {
        return a + b;
    }
    else {
        throw new TypeError("数値以外の引数が混ざっています。");
    }
}
```

少し友達になれた気がしました。

2015/7/8 追記
typeofですが少々癖があるとのことでした。こちらの投稿のようにいろいろ判定方法はあるようで、toStringの方が安全とのことです。

JavaScriptの「型」の判定について
http://qiita.com/south37/items/c8d20a069fcbfe4fce85
GitHubユーザーが公開しているプロジェクトの一覧が欲しい


[Google Samples](https://github.com/googlesamples) にあるサンプルの一覧を取得したかったが、Webから一つ一つコピペするのも面倒なので、APIを叩いて一括して取ってくる方法があるはずだろうと思って調べた時のメモ

curlを使うのが一番簡単そう。 [Getting Started | GitHub API](https://developer.github.com/guides/getting-started/)、 [Repositories | GitHub API](https://developer.github.com/v3/repos/) を見ながら。

```
$ curl https://api.github.com/users/googlesamples/repos
{
    "id": 23589308,
    "name": "android-ActionBarCompat-Basic",
    "full_name": "googlesamples/android-ActionBarCompat-Basic",
    "owner": {
...
```

これが得られればあとはフィルタをかければいい。

まずファイルに落として

```
$ curl https://api.github.com/users/googlesamples/repos > googlesamples.json
```

名前を出力する rubyのフィルタを書く。

```rb
require 'json'

File.open(ARGV[0], "r") do |f|
  json = f.read
  result = JSON.parse(json)

  result.each do |prj|
   puts prj["name"]
  end
  
end
```

実行。

```
$ ruby filter.rb googlesamples.json
android-ActionBarCompat-Basic
android-ActionBarCompat-ListPopupMenu
android-ActionBarCompat-ShareActionProvider
android-ActionBarCompat-Styled
android-ActiveNotifications
android-ActivityInstrumentation
android-ActivitySceneTransitionBasic
...
```

Jolly good.
scalaで外部コマンドを実行する

Scalaプログラムから ImageMagickを使ってリサイズなどを行う簡単な
ライブラリを作ったのでその一環でscala.sys.process を利用したので
それについて簡単にまとめます。

## scala.sys.process パッケージについて
scala 2.9.0 から導入された
外部プロセスの実行、パイプ、リダイレクトなどが簡単にできる
外部プロセスを実行して、その結果をプログラム内で利用するのも簡単


## REPLで動かしながら、scala.sys.processを試す
<br>

+ コマンドを実行して結果を標準出力(非同期)

```
scala> import scala.sys.process._
import scala.sys.process._

scala> Process("ls") run
res8: scala.sys.process.Process = scala.sys.process.ProcessImpl$SimpleProcess@15df07a5

scala> LICENSE
README
activator
activator-launch-1.3.2.jar
app
<略

```

+ 実行結果をString で取得したい場合は !!

```
scala> Process("ls") !!
res9: String =
"LICENSE
README
activator
activator-launch-1.3.2.jar
<略
"
```


+ 実行結果をコレクションで取得したりもできる

```
scala> Process("ls").lines.toList
res11: List[String] = List(LICENSE, README, activator, ...)
```


+ 同期処理でコマンド実行したい場合は、!　(終了コードを返す)

```
scala> Process("ls") !
LICENSE
README
activator
<略
res10: Int = 0
```

・よりダイレクトな感じでも書ける
ProcessImplicits traitに stringToProcess, stringSeqToProcessとか暗黙の型変換が
定義されてて勝手にProcessBuilder型に変換してくれます。

```
scala> "ls" run
res13: scala.sys.process.Process = scala.sys.process.ProcessImpl$SimpleProcess@53f28395

scala> LICENSE
README
activator
activator-launch-1.3.2.jar
<略
```

+ パイプする #|

```
scala> "ps aux" #| "grep java" !
```

+ リダイレクト #>

```
scala> "ps aux" #> new File("hoge.txt") !
```

１つ目のコマンドが成功したら次のコマンド実行するとかも用意されてる -> #&&



## ImageMagickで 16x16の画像をリサイズしてみる

convertコマンドについてはこちらを参照
<a href="http://www.envinfo.uee.kyoto-u.ac.jp/user/susaki/image/magick_process.html" target="_blank">http://www.envinfo.uee.kyoto-u.ac.jp/user/susaki/image/magick_process.html</a>


```
scala> import scala.sys.process._

scala> import javax.imageio._

scala> import java.awt.image.BufferedImage

scala> import java.io.File

//processを使ってconvertコマンドを実行
scala> Process(Seq("/usr/local/bin/convert", "-geometry", "30x30", "-quality", "99", "./public/images/favicon.png", "./copied.png")).lines
res5: Stream[String] = Stream()


//ImageIOで画像がリサイズされてるか確認
scala> val src: BufferedImage = ImageIO.read(new File("./copied.png"))
src: java.awt.image.BufferedImage = BufferedImage@44755eae: type = 6 ColorModel: #pixelBits = 32 numComponents = 4 color space = java.awt.color.ICC_ColorSpace@f42d738 transparency = 3 has alpha = true isAlphaPre = false ByteInterleavedRaster: width = 30 height = 30 #numDataElements 4 dataOff[0] = 3
```
ByteInterleavedRaster: width = 30 height = 30 ってことでリサイズに成功しました

余談ではありますが、ImageMagickも良きにはからってくれて便利でした。
例えば、
200x100の画像で、サイズを400x300に指定した場合、
縦横比を保持したまま、指定したサイズの内接最大(今回は400x200)にリサイズしてくれます。
(縦横比を保持しないで指定サイズにリサイズとかその他も色々できる)

## まとめ
簡単で便利でした。 シェル叩くのに近い感じの関数が色々用意されてていい感じです。

<br>
C# EnumとSwitchは相性が良い、可読性の話

あまりこれ関係の記述をネット上で見なかったので。

例えば Enumをこのように記述します。

```lang:Enumの記述
        public enum Target
        {
            OFF,
            ON,
            NONE,
            COMPLETE
        }
```

これらの判定をSwitchでする場合、数値で判定するよりも、この記述が可読性も高く、見易いです。

```lang:Switchの記述
switch (Target)
            {
                case Target.OFF:
                    ///OFFの場合の動作を記述
                    return;
                case Target.ON:
                    ///ONの場合の動作を記述
                    break;
                case Target.NONE:
                    ///NONEの場合の動作を記述
                    break;
                case Target.COMPLETE:
                    ///COMPLETEの場合の動作を記述
                    break;
                default:
                    return;
            }
```
ruby+Sequel+win32oleでパスワード付きSQL Server Compact (.sdfファイル)にアクセスする方法

#結論だけ読みたい人へ

```rb
#ruby
require "sequel"
DB = Sequel.ado(:conn_string=>'Provider=Microsoft.SQLSERVER.CE.OLEDB.4.0;'\
'Data Source=.\db.sdf;ssce:database password=hoge',
:driver=>'SQL CE')
#driverに適当な文字列設定しないとMSSQLとみなされて非対応コマンド送りつけられる
```
#昔の話
SQL Server Compact EditionなるMS版SQLiteみたいなのがあったらしい
.net+EntityFrameworkとやらでそれなりにお手軽に扱えてたらしい
#今の話
理由までは知らないがMSさんが今後非推奨な
って言い出したので下火
残された遺産としてたまにsdfファイルに遭遇すると困る

「ADO.NETで接続できるらしい」
という情報は見つかるが、.Net Framework使いたくない事もあるよね

#ADO(非.NET)でも接続できるらしい
ADO素人が頑張って探したところ、

```
Provider=System.Data.SqlServerCe.4.0;
```
がADO.NET用で

```
Provider=Microsoft.SQLSERVER.CE.OLEDB.4.0;
```
がADO用のProviderらしい

```rb
:conn_string=>'Provider=Microsoft.SQLSERVER.CE.OLEDB.4.0;'\
'Data Source=.\db.sdf;Password=hoge'
```
でいけるんじゃないかなと思ってたが失敗
頑張って更に探したところ
http://stackoverflow.com/questions/4991694/ado-connection-to-sql-server-compact-edition-4-0
を見つける
どうやらパスワードは
ssce:database password=hogeにするらしい

#実験
```irb:
#irb -rsequel
irb(main):001:0> DB = Sequel.ado(:conn_string=>'Provider=Microsoft.SQLSERVER.CE.OLEDB.4.0;'\
irb(main):002:1* 'Data Source=.\db.sdf;ssce:database password=hoge')
=> #<Sequel::ADO::Database: {:adapter=>:ado, :conn_string=>"Provider=Microsoft.S
QLSERVER.CE.OLEDB.4.0;Data Source=.\\db.sdf;ssce:database password=hoge
kwalker"}>
irb(main):003:0> DB["select * from fuga"].all
=> #省略
```
おし、fugaテーブルの中身が取れた

そう喜んでたが、

```irb
irb(main):004:0> DB[:fuga].all
Sequel::DatabaseError: WIN32OLERuntimeError: (in OLE method `Execute': )
    OLE error code:80040E14 in Microsoft SQL Server Compact OLE DB Provider
      �R�}���h�������� 1 �ȏ�̃G���[���������܂
��B
    HRESULT error code:0x80020009
      Exception occurred.
```
文字化けして読めないけど80040E14エラーですって
Sequelのソース読んだら、どうやらADO接続時に:driverを指定しないとMS SQLServerだと思って

```sql
SELECT CAST(SERVERPROPERTY('ProductVersion') AS varchar)
```
を投げつけるがCompactEditionでは非対応らしい

#結論
冒頭でも提示したが

```rb
#ruby
require "sequel"
DB = Sequel.ado(:conn_string=>'Provider=Microsoft.SQLSERVER.CE.OLEDB.4.0;'\
'Data Source=.\db.sdf;ssce:database password=hoge',
:driver=>'SQL CE')
#driverに適当な文字列設定しないとMSSQLとみなされて非対応コマンド送りつけられる
```
でカレントディレクトリ内のdb.sdfファイルをパスワードhogeで開けます。
後は、

```rb
DB[:fuga].where(:name => "ほげほげ").all
```
などでお好きな様に
wordpress 一覧ページでタイトルなどの文字数を制限する

いわゆる「あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめも…」のように、
文字数を超えた部分を、…と表示する方法。タイトルと本文2つ用意してみた。
文字数以下ならば、…と表示されないようにしている。


タイトル

```
<?php if(mb_strlen($post->post_title)>20) { $title= mb_substr($post->post_title,0,20) ; echo $title. ･･･ ;
} else {echo $post->post_title;}?>
```

http://studio-freetown.com/post-776/


本文

```lang:function.php

/*excerpt*/
function change_excerpt_mblength($length) {
return 150;
}
add_filter('excerpt_mblength', 'change_excerpt_mblength');

function new_excerpt_more($more) {
	return '…';
}	
add_filter('excerpt_more', 'new_excerpt_more');
```

```lang:表示させるphp

<?php the_excerpt(); ?>
```
おもしろい method_missing

Rails のソースを読んでいると、あらゆるところで `method_missing` をオーバーライドしています。
例えば、`String` クラスにある `inquiry` は

```rb
env = 'production'.inquiry
env.production?  #=> true
env.development? #=> false
```

というふうに文字列に `#{文字列}?` と問い合わせると `true/false` を返してくれるようになるメソッドですが、実装を見ると

```rb
class String
  def inquiry
    ActiveSupport::StringInquirer.new(self)
  end
end

========================================================================

class StringInquirer < String
  private

    def respond_to_missing?(method_name, include_private = false)
      method_name[-1] == '?'
    end

    def method_missing(method_name, *arguments)
      if method_name[-1] == '?'
        self == method_name[0..-2]
      else
        super
      end
    end
end
```

こんな感じで `method_missing` を使って定義しています。
`method_missing` は呼び出したメソッドが存在しないときに、呼ばれるメソッドです。

そのため、例えば `env.production?` と呼ぶと、そんなメソッドはないので `StringInquirer` の `method_missing` が呼ばれます。

すると、一行目の

```rb
if method_name[-1] == '?'
```

で `true` となり（`method_name` には、呼び出したメソッド名が入ってくる）、

```rb
self == method_name[0..-2]
```

「自分自身」と「`?` を除いたメソッド名」との比較が行われます。

試しに、`?` がつかないメソッドを呼んでみると

```rb
'production'.inquiry.production #=> NoMethodError
```

`else` に入って、祖先クラスの `method_missing` が呼ばれている事が分かります。

試しに作ってみます。

```rb
class String
  private

  def method_missing(method_name, *arguments)
    if /AA\z/ === method_name.to_s 
      puts <<-EOF
      　 ∧_∧
      　( ･ω･)
      　｜⊃／(＿＿＿
      ／└-(＿＿＿_／
      ￣￣￣￣￣￣
      EOF
    else
      super
    end
  end
end

'oyasumi'.to_AA #=>
#      　 ∧_∧
#      　( ･ω･)
#      　｜⊃／(＿＿＿
#      ／└-(＿＿＿_／
#      ￣￣￣￣￣￣

'oyasumi'.toooooooooooo_AA #=>
#      　 ∧_∧
#      　( ･ω･)
#      　｜⊃／(＿＿＿
#      ／└-(＿＿＿_／
#      ￣￣￣￣￣￣
```

できた！
ただし、これだけではメソッドは「存在していない」ことになっているので、

```rb
'oyasumi'.respond_to? :to_AA #=> false
```

respond_to_missing? をオーバーライドして、メソッド存在させます。

```rb
class String
  private

  def respond_to_missing?(method_name, include_private = false)
    /AA\z/ === method_name.to_s 
  end  
end

'oyasumi'.respond_to? :to_AA #=> true
```

確かに、`String` に `to_AA` というメソッドが存在しています。

こうやって、ライブラリとかは動的にメソッドを作っているんですね。おもしろい！
Qiita API v2 Ruby Versionを使いQiitaに投稿する方法



```bash:
$ sudo gem install qiita

$ qiita create_item < params.json -a "$QIITA_ACCESS_TOKEN"
```

こんなかんじでQiitaのライブラリをインストールすると、コマンドラインから使えるクライアントもインストールされます。それを使って`json`で書かれたテキストをポストできます。

ここで、`$QIITA_ACCESS_TOKEN`は環境変数に入れても良いし、そのまま指定しても使えるみたいです。これは、Qiitaのマイページ、プロフィール設定のアプリケーションから発行できます。



以下、ポストする記事の形式です。

```json:parmas.json
{
  "body": "# Example",
  "coediting": false,
  "gist": true,
  "private": false,
  "tags": [
    {
      "name": "example",
      "versions": [
        "0.0.1"
      ]
    }
  ],
  "title": "hello world",
  "tweet": true
}
```

https://github.com/increments/qiita-rb


|項目|内容|
|---|---|
|body|投稿の本文です。|
|coediting|この投稿が共同編集状態かどうかを表します。Qiita:Team以外では常にfalseになります。|
|gist|trueの場合、連携アカウントを利用して本文中のコードをGistに投稿します (限定共有投稿とQiita:Teamでは無効)。|
|private|この投稿が限定共有状態かどうかを表します。Qiita:Teamでは常にfalseになります。|
|tags|紐付けられるタグを表します。Qiita:Team以外では必ず1つ以上のタグが存在します。|
|title|投稿のタイトルを表します。|
|tweet|trueの場合、連携アカウントを利用してTwitterに投稿を共有します (限定共有投稿とQiita:Teamでは無効)。|


https://qiita.com/api/v2/docs#post-apiv2items
個別解をどう盛り込むか

現実社会においては、全体の仕様から外れるような例外的な要件というのが割に高頻度で発生する。この○○だけは××になるようにしたい。「このクライアントだけは」「このユーザーだけは」「この画像だけは」、理由は広告だったり会社の力関係だったり、なにかのもめ事だったりと様々だが、まあしょっちゅう発生する。

そうなると、「はて、今回の要件は今後も同じような状況が発生するだろうか？」と考えるし、要件にからむステークホルダーと議論もするわけだが、だいたいにおいて不明確な場合がおおい。発生するような気もするし、気もしないし。

年月を経たアプリケーションには少なからずそういう仕様が散在し、幸運な場合は、古くからいる人だけがかろうじて覚えてる、不幸な場合は、担当者が退職しちゃってて誰も分からない、といった状況になる。そうなると開発速度は急激に下がり、障害のリスクは増える。いまいち要件が分からないからリファクタできないし、下手に消したりすると思いもよらないところから問題が上がってくる。

とはいっても、やらないわけにもいかないので、どうやって実装するかが考えどころとなる。ざっとレベル分けすると以下の４つになるだろうか

* レベル１： if文をソースに書き込む
* レベル２： YAMLか何かのconfigファイルに対象だけ外だしする
* レベル３： RDBのエンティティ・アトリビュート・バリューパターン（SQLアンチパターンにのってるやつね)となってるテーブルに持つ
* レベル４： 該当テーブルにカラムを追加して持つ

レベル３は明らかに筋が悪いが、割に見かけることがある。カラムをふやしてゴミになるのをためらった、といった背景だろう。

さて、どういった時にどのレベルを選択するのがよいだろうか。また、どうやってもゴミになるリスクはあるとして、どうすれば引き継げる仕様となるだろうか？コメント、ドキュメント、テスト、そういったもので地雷化は防げるだろうか。

といったことをうつらうつらと考えているところ。（つづく）
RailsでＷＥＢサービスを作るうえで、最低限知っておいたほうが良いことは？

現在railsでＷＥＢサービスのプロトタイプを作ろうと思っています。
本当はもう少し基礎を勉強してからやりたかったのですが、諸事象ありましてプロトタイプは早急に制作しなければいけなくなってしまいました。
その際最低限これだけは知っておいたほうがいいという事はありますでしょうか？

現在の自分の知識としては
■HTML、CSS
２，３ホームページを作った事があります。
■rails
rails チュートリアルを終わらせ、基礎の基礎はやっと理解できた

こういったステータスとなっております。

また会員登録機能を実装しようと思っているのですが、色々調べてみるとdeviseというgemがrailsで会員登録機能を作る際、一般的に使われるとの事でした。
かなり会員登録機能を簡単に実装できるようなのでぜひ使いたいのですが、セキュリティ面などで問題があったりしないでしょうか？

ざっくりとした質問で大変申し訳ございませんが、よろしくお願いいたします。
forやめろ？ やめねーよ！

#ぷんぷんっ！

「[forやめろ](http://www.slideshare.net/esehara/for-38276816)」なんて記事を見かけたので。nextTickについて調べていて[この記事](http://jxck.hatenablog.com/entry/for-with-eventloop)から知ったのだが。2014年ならまだ賞味期限、かな？

あれはすごく数学的なもんだ。ごちゃごちゃ機能が多すぎるなんてゆーな。一応C/C++/Java/Javascriptの構文で書く。Basicのはアレはちょっち綺麗じゃない。

**for(初期化;条件;イテレータ)**

なんて読むからごちゃごちゃする。一応、評価される順に並べ替えてあるからね。

**for(初期化;イテレータ)**

コレって、[数学的帰納法](http://ja.wikipedia.org/wiki/%E6%95%B0%E5%AD%A6%E7%9A%84%E5%B8%B0%E7%B4%8D%E6%B3%95)だろ？　整列集合の表現として、これほど適切なものはあるまい。

で、プログラミングの場合、たいてい有限な集合を表したいから、条件をつける。

**for(初期化;イテレータ)where(条件)**

こう書けば分かりやすいかな？　forが嫌いなら、そーゆーsugar用意すれば良いと思うよ。プリプロセッサとかでさ。

元記事、数論の人なんだろ？　ペアノおじさんの霊にしばかれるぞ。

#余談
ついにこの切れ味の良い記事も、蛇足を付け加えることになってしまった。元記事の「1から100の整数を出力してください。ただし5つの異なる方法を用いて」という問題に対する、最も本質的な解は上記の通り①forだ。そして、最も高速な解は② console.log '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100' だと思っていた。ここまではふざけてないよ。最適化勝負なら真っ当な答えだ。しかし、なんと、それよりも高速な解が見つかったのでご報告しておきたい。しかも、多くの言語でソースコードの変更が必要なく、なんと、実行前に出力されるのだ。（オチがそろそろバレ始める頃合いだな）③

```coffeescript:compile-error.coffee
1から100の整数
```

「コンパイル結果」はこうだ。実行しようとしても出力結果は同じだ。

```:コンパイル結果
/path/to/script/compile-error.coffee:1:2: error: unexpected identifier
1から100の整数
 ^^^^^^^^
```

まあ、これはタチの悪い答えだが、出力はしている。「異なる方法」の中での異なり方は、ちょっと他の追随を許さないんじゃないかな。他に、④ファイル名を例のカンマ区切りにして、ソースコードを「"」だけにする、という似て非なる方法もある。コンパイラエラーの種類も違う。そして、⑤1行80文字以上の適当な数字とカンマを入力してそれを100行繰り返し、CoffeeLintにかけると行番号として1から100の数字が出力される。これも似て非なる方法だ。こっちはコンパイル通るしね。これで5種類コンプリート。

元記事のメッセージに対しては、上の本文で充分に正面からディスったと思うので、余談はとんちでごめんよ。

では。
postfix3.0のStress設定を有効にする (大量にエラーを出すSMTPクライアントを遅くする)

ArchLinux + Postfix3.0

## 問題

> see http://www.postfix.org/STRESS_README.html for examples of stress-adapting configuration settings
service "submission" (587) has reached its process limit "100": new clients may experience noticeable delays
to avoid this condition, increase the process count in master.cf or reduce the service time per client

* http://www.postfix.org/STRESS_README.html を見たがどこで設定するんだ？

↓

## ググってみた

* [[postfix-jp: 3199] Re: Busyをなるべく出さないチューニング方法について](http://www.postfix-jp.info/ML/arc-2.4/msg00198.html)

> http://www.postfix-jp.info/trans-2.3/jhtml/TUNING_README.html
> http://www.postfix.org/STRESS_README.html
> あたりを読むといいのではないでしょうか。
> default_process_limit を大きくするとか。

## 今の設定確認

```bash:
$ postconf| grep \^default_process_limit
default_process_limit = 100
```

この設定値か。

```bash:
$ postconf| grep stress
address_verify_poll_count = ${stress?{1}:{3}}
postscreen_command_time_limit = ${stress?{10}:{300}}s
postscreen_greet_wait = ${stress?{2}:{6}}s
smtpd_hard_error_limit = ${stress?{1}:{20}}
smtpd_junk_command_limit = ${stress?{1}:{100}}
smtpd_per_record_deadline = ${stress?{yes}:{no}}
smtpd_starttls_timeout = ${stress?{10}:{300}}s
smtpd_timeout = ${stress?{10}:{300}}s
stress =
```

> stress=

今回はこれを`yes`にすればよいということがわかった。

## main.cfへ設定

```diff:/etc/postfix/main.cf
+ stress=yes
```

```bash:
systemctl restart postfix
```

```bash:確認
$ postconf | grep \^stress
stress = yes
```

yesになった。様子見する


## master.cf に記述する場合

```diff:/etc/postfix/master.cf
 # ==========================================================================
 # service type  private unpriv  chroot  wakeup  maxproc command + args
 #               (yes)   (yes)   (yes)   (never) (100)
 # ==========================================================================
 smtp      inet  n       -       n       -       -       smtpd
+    -o stress=yes
 submission inet n       -       n       -       -       smtpd
+    -o stress=yes
```
Appcelerator studio : Failed to encrypt JavaScript files

今日はAppcelerator studio（旧titanium studio） です。

* Windows版
* Androidアプリ制作

です。

最近 titanium studio を触っていたのですが、HDDがクラッシュする事態に遭遇し、
直近のソースはほぼ失ってしまいました。

とはいっても、運良く肝心なコードは別PCに逃していたりして、それほどたいへんなことには
ならなかったのが、不幸中の幸いです。

そんな中で titanium studio がAppcelerator studio と名前を変えたわけですが、
旧titanium studio はダウンロードできなくなっていて、どこを探してもインストーラーを
DLさせてくれる人はいません（そりゃそうですね）。

ということで、 Appcelerator studio をインストールしたのですが、いきなり詰まりました。
以下のエラーです。

```
[INFO] :   Processing JavaScript files
[INFO] :   Encrypting JavaScript files: C:\ProgramData\Titanium\mobilesdk\win32\4.0.0.RC4\android\titanium_prep.win32.exe "eea45972a671-eee9-f354-f765-82fdb466" "com.rgbz.twotesttabapp" "C:\Users\robhg_000\Documents\Appcelerator_Studio_Workspace\TwoTabAppTest\build\android\assets" "alloy/CFG.js" "app.js" "alloy/backbone.js" "alloy/constants.js" "alloy/controllers/BaseController.js" "alloy/controllers/index.js" "alloy/styles/index.js" "alloy/sync/localStorage.js" "alloy/sync/properties.js" "alloy/sync/sql.js" "alloy/underscore.js" "alloy/widget.js" "alloy.js" "ti.cloud.js" "_app_props_.json"
[INFO] :   Encrypting JavaScript files: C:\ProgramData\Titanium\mobilesdk\win32\4.0.0.RC4\android\titanium_prep.win64.exe "664bdf28-567f-453f-9eee-176a27954aee" "com.rgbz.twotesttabapp" "C:\Users\robhg_000\Documents\Appcelerator_Studio_Workspace\TwoTabAppTest\build\android\assets" "alloy/CFG.js" "app.js" "alloy/backbone.js" "alloy/constants.js" "alloy/controllers/BaseController.js" "alloy/controllers/index.js" "alloy/styles/index.js" "alloy/sync/localStorage.js" "alloy/sync/properties.js" "alloy/sync/sql.js" "alloy/underscore.js" "alloy/widget.js" "alloy.js" "ti.cloud.js" "_app_props_.json"
[ERROR] :  Failed to encrypt JavaScript files
TRACE  | titanium exited with exit code 1
[ERROR] Application Installer abnormal process termination. Process exit value was 1
```

どうやらJava関係の問題らしいですが、
JAVA_HOME を変えても、path に新しく書き加えても問題は解決せず。
２時間ほど煮詰まってました。

結論からいうと、これは64bit対応の問題でした。
Appcelerator studio は現在32bit版しかなく、64bitに対応していません。
なので、JDK も32bit版でないと動かないようです。

というわけで、x86版JDK をDLしてきてJAVA_HOME 、pathを修正したら、見事動きました。
これで仕事の続きができます。

参考まで。
Good luck!
見えないところでにょきにょきとメソッドを生やす Ruby の標準ライブラリ 「OpenStruct」 のコードリーディングでメタプログラミングを学ぶ #ruby

## <i class="fa fa-cubes" style="font-size:1em;"></i> 概要
Ruby の標準ライブラリ OpenStruct のコードリーディングでメタプログラミングを学びます

## <i class="fa fa-search" style="font-size:1em;"></i> OpenStruct の挙動を見る
OpenStruct は、構造体の要素の追加・削除を動的に行います。
事前に定義していない要素に対して値を設定すると
内部でアクセサメソッドを定義してくれます。

### <i class="fa fa-code" style="font-size:1em;"></i> サンプルコード
~~~ruby
require 'ostruct'
tanaka = OpenStruct.new
p tanaka.instance_variable_get(:@table)
tanaka.name = 'tanaka'
p tanaka.name
p tanaka.instance_variable_get(:@table)
tanaka.age = 32
p tanaka.name
p tanaka.age
p tanaka.instance_variable_get(:@table)
~~~

### <i class="fa fa-file-text" style="font-size:1em;"></i> 出力
にょきにょきとメソッドが生えていることが分かります。

~~~
{}
"tanaka"
{:name=>"tanaka"}
"tanaka"
32
{:name=>"tanaka", :age=>32}
~~~

## <i class="fa fa-code" style="font-size:1em;"></i> いざ、コードリーディングへ
### <i class="fa fa-tint" style="font-size:1em;"></i> コンストラクタ
ハッシュにキー・値を設定し、その後 new_ostruct_member メソッドで
動的にアクセサを定義しています。

<i class="fa fa-github" style="font-size:1em;"></i> [OpenStruct.initialize L87 - L96](https://github.com/ruby/ruby/blob/da4942c9d7924dcfad7d0977ce80f701c46fbdca/lib/ostruct.rb#L87-L96)

### <i class="fa fa-tint" style="font-size:1em;"></i> new_ostruct_member
`respond_to?` でメソッドの有無を確認し、存在しなければ <i class="fa fa-external-link" style="font-size:1em;"></i> [define_singleton_method](http://ruby-doc.org/core-2.2.0/Object.html#method-i-define_singleton_method) で
動的に読み取りと書き込みのメソッドを定義しています。

<i class="fa fa-github" style="font-size:1em;"></i> [OpenStruct#new_ostruct_member L161-L174](https://github.com/ruby/ruby/blob/da4942c9d7924dcfad7d0977ce80f701c46fbdca/lib/ostruct.rb#L161-L174)

### <i class="fa fa-tint" style="font-size:1em;"></i> method_missing
メソッド名が `任意の名前=` で引数が一つの場合、アクセサを動的に定義します。
メソッド名が `任意の名前` で引数がない場合、 @table ハッシュから値を取り出します。
それ以外の場合は, エラーとしています。

<i class="fa fa-github" style="font-size:1em;"></i> [OpenStruct#method_missing L176-L190](https://github.com/ruby/ruby/blob/da4942c9d7924dcfad7d0977ce80f701c46fbdca/lib/ostruct.rb#L176-L190)

## <i class="fa fa-file-text" style="font-size:1em;"></i> 補足
define_singleton_method は、特異メソッドを定義します。

### <i class="fa fa-question-circle" style="font-size:1em;"></i> 特異メソッドとは？
あるインスタンス固有のメソッドのこと。

~~~ruby
class Hoge;end

def hello_hoge
  hoge = Hoge.new
  def hoge.hello;"Hello Hoge";end
  hoge.hello
end
puts hello_hoge

class Hige
  def furinige_dynamic
    define_singleton_method('hige') { |msg| puts msg }
  end
end

def hello_hige
  hige = Hige.new
  print hige.methods.grep(:hige),
  hige.furinige_dynamic
  puts hige.method(:hige)

  hige.hige('ひげ') #=> ひげ
end

hello_hige
~~~

* 出力

~~~
Hello Hoge
[]
#<Method: #<Hige:0x00000600442798>.hige>
ひげ
~~~

## <i class="fa fa-book" style="font-size:1em;"></i> 外部資料
* <i class="fa fa-external-link" style="font-size:1em;"></i> [OpenStruct - るりま](http://docs.ruby-lang.org/ja/2.2.0/class/OpenStruct.html)
* <i class="fa fa-external-link" style="font-size:1em;"></i> [特異メソッドの定義の仕方 - Ruby 初級者のための class << self の話 (または特異クラスとメタクラス) - るびま](http://magazine.rubyist.net/?0046-SingletonClassForBeginners#l5)
gulpを使ってNODE_ENVで出力を分ける


developmentの時だけ必要なものとか、productionの時だけ必要なものとかあったりするのはよくあること。

NODE_ENVの内容によって特定の場所の出力内容を変える、というのを試してみた。

## 準備

### gulp-preprocessのインストール

gulp-preprocessを使うのでインストールする。

```bash
$ npm install --save-dev gulp-preprocess
```

### gulpfileの編集

gulpfileでは、preprocessを適当なタイミングで読んであげるようにする。

```coffeescript:gulpfile.coffee
preprocess = require 'gulp-preprocess'

gulp.task 'coffee', () ->
  gulp.src 'src/js/**/*.coffee'
    .pipe preprocess()
    .pipe coffee()
    .pipe gulp.dest('dist/js')
```

## 使う

### コードにNODE_ENVごとの処理を書く

基本的に@ifと@endifで囲む。

@ifの後に分岐の判定を書くんだけど、==じゃなくて=なのが注意。

```coffeescript:hello_world.coffee
console.log 'Hello World.'
# @if NODE_ENV='development'
console.log 'I am debug mode.'
# @endif
```

### タスクの実行

あとはgulpでタスクを実行するときにNODE_ENVを指定すれば、その時々で条件ごとに出力内容が変わる。

```bash
$ NODE_ENV=production gulp coffee
```
「AWS Summit Tokyo 2015」1日目

## Day1 キーノート

「クラウドは今やニューノーマルに」これかな。

いろいろ盛り込まれてたので、途中で書くのが疲れちゃった。。。

![20150602-aws-key01.png](https://qiita-image-store.s3.amazonaws.com/0/53620/9f6bcd65-3858-c176-d741-117166d5495c.png)

クラウドワークス 吉田さんの話に「働き方を変える」っという言葉が記憶に残りました。
信頼っという表現しにくいものを見えるようにしようと努力しているから、クラウドソーシングが成り立つんだろうなー。


## DevCon オープニングキーノート

オープンソース貢献へのワークフローの標準化

![20150602-aws-key02.png](https://qiita-image-store.s3.amazonaws.com/0/53620/263ddc12-506d-c121-9f3c-3d41ba9c2b90.png)

オープンソース活動と企業活動で、開発ワークフローが違うのは仕方がないっと思って、思考停止していた。
ちょっと視野を広げれば気づけることなのに。

「すべての企業がソフトウェア企業になる」だったかな。これも良い言葉だね。
SIer で強みのない御用聞きは、仕事がなくなるのかなー。

ぼくもイライラを見つけてサービスを作ってやる。


## 【パネルディスカッション】デベロッパーが切り拓く、次の時代

「相対的な自分のポジションを把握する」

![20150602-aws-dev02.png](https://qiita-image-store.s3.amazonaws.com/0/53620/a77e657a-2c98-ddb7-463d-d89ef9adf903.png)

曖昧な状況で、モヤっとしているけど、前に進んで開発していかないと何もわからない。
そんな開発の中で力を発揮できるようにならないといけない。
逃げ道はいっぱいあるから、言い訳はいっぱい言えそうだけど、そんな無駄なことはせずにまっすぐに進んで、実現する。
そんな人がいたら、仕事を依頼する／任せる。よね。

「変化を受けれらない人」は、「制度の設計をしすぎる（だったかな）」、「ゴールを決めて進む（ゴールを決めてもらわないと進めない、だったかな）」というのは印象に残った（はっきりとした言葉は覚えてないくせに。。。）。


## 【パネルディスカッション】ユーザに直撃質問 – クラウドファースト時代で変化する IT ベンダーの役割とは？

途中から参加したんだけど、アンデルセンサービス 堀尾さんの言葉が良かった。

Mindmap はかけなかった。バッテリーの都合で。

ITベンダーに対して、
「運用で削減した費用を開発に回してもらう」
「若手が育てやすくするために長い契約（ホスティング契約）をする」
っという感じで、自社のサービスのためにITベンダーのことを本当に考えていると思った。

ユーザーにおんぶにだっこで良いのかな。
ITベンダーは、アンデルセンサービスさんが行っていることを自身で営業して獲得していかないと。

こんなに立派なユーザーを当てにしないと成り立たないようであれば、、、未来はないだろうね。。。ITベンダー
Method#===に引っかかった

caseの条件にProcを渡すのが格好いいと思い、次のようなコードを書いた。

```rb
x = 0.9
case x
when 1.method(:>) then "less than 1"
when 1...10 then "more than 1 and less than 10"
when 10.method(:<=) then "more than 10"
end
```

`"less than 1"`が返ってくることを期待していたが、実際には`nil`が返る。

何故か。

caseが条件を判定するときは、条件に渡されたオブジェクトの`===`メソッドに`x`が渡されて判定される。
`Proc#===`は`Proc#call`のエイリアスなので、真偽を返すProcを条件に渡すというのはよく利用されている。

で、同じノリで`1.method(:>)`を渡したらいいかんじじゃね？と思ったけれど、`Object#method`で返ってくるのは`Proc`ではなく`Method`。
そして`Method#===`は`Proc`とは違い、`Method#call`のエイリアスではない。
(`Method#===`は定義されておらず、`Object#===`が呼び出される。)

よって上記のコード場合は`#<Method: Fixnum#>>`と`0.9`が比較されているだけで、当然ながら結果は`false`。


これを踏まえて上記のコードを修正すると

```rb
x = 0.9
case x
when 1.method(:>).to_proc then "less than 1"
when :<.to_proc.curry(2)[1] then "カレーは飲み物"
when 1...10 then "more than 1 and less than 10"
when 10.method(:<=).to_proc then "more than 10"
end
```

めっちゃ冗長 :<
【UniRx】UniRxとコルーチン

**この記事はちょっと古いのでこちらの新しい記事を参照ください**
[UniRx入門 その5 -コルーチンとの併用-](http://qiita.com/toRisouP/items/c4b9c5701dd6c991b481)

---
UniRxはコルーチンと組み合わせることでより便利になります。
今回はその方法を紹介します。

#コルーチンをObservableに変換する

`Observable.FromCoroutine`を使うことでコルーチンをObservableに変換することができます。
FromCoroutineについては@neueccさん本人が詳しく説明されていますので、こちらを参考にされるのが一番良いかと思います。

>[Unityのコルーチンの分解、或いはUniRxのMainThreadDispatcherについて](http://neue.cc/2014/12/18_499.html)


FromCoroutineは特に**コルーチンから戻り値のあるObservableを作る**方法の汎用性が高く、ファクトリーメソッドやオペレータを組み合わせるよりもより簡潔に処理を記述できる場合があります。

###例)一定条件の時のみカウントダウンするタイマをコルーチンから作る

```csharp:戻り値のあるObservableをコルーチンから作る
private void Start()
{
    //
    //playerの初期化とかここでやってる
    //

    //プレイヤが生存している時間を30秒間カウントダウンする
    //タイマの現在のカウント[秒]が通知される
    Observable.FromCoroutine<int>(observer => CountDownCoroutine(observer, 30, player))
        .Subscribe(count => Debug.Log(count));
}

/// <summary>
/// プレイヤが生きている間だけカウントダウンするタイマー
/// プレイヤが死んでいる場合はカウントは停止する
/// </summary>
IEnumerator CountDownCoroutine(IObserver<int> observer,int startTime,Player player)
{
    var currentTime = startTime;
    while (currentTime > 0)
    {
        if (player.IsAlive)
        {
            observer.OnNext(currentTime--);
        }
        yield return new WaitForSeconds(1);
    }
    observer.OnCompleted();
}

```

#Observableをコルーチンに変換する

Observableをコルーチンに変換する場合は`StartAsCoroutine`を使います。

```csharp:StartAsCoroutineの例

private void Start()
{
    StartCoroutine(CoroutineA());
}

IEnumerator CoroutineA()
{
        
    //コルーチンの実行結果を保存する変数
    var result = 0;

    //Observable.Rangeをコルーチンに変換する
    yield return Observable.Range(0, 10).StartAsCoroutine(c => result = c);

    Debug.Log("Result:"+result);
}
```

```text:実行結果
Result:9
```

StartAsCoroutineは以下の特徴があります。

* **OnCompletedが発行されるまでの間yield return nullを繰り返し続ける**
* StartAsCoroutineの引数に渡した関数はOnCompleted発行時に**1回だけ実行され最後のOnNext値が渡される**

###StartAsCoroutineの使いドコロ

StartAsCoroutineを上手く使うと、非同期処理が入り組んだ処理を同期処理っぽく扱えるようになります。
いわゆるTaskのawait処理っぽいものを実現することができるようになります。

```csharp:


private IEnumerator HeavyTaskCoroutine()
{
    //実行結果
    bool result = false;

    //非同期処理の待ち受け
    //Observable.Startは別スレッドで処理を実行する
    yield return Observable.Start(()=>HeavyTask()).StartAsCoroutine(x => result = x);

    //実行結果を判定する
    if (result)
    {
        Debug.Log("Success");
    }
    else
    {
        Debug.Log("Failure");
    }
}

/// <summary>
/// 実行に時間がかかる重い処理
/// </summary>
/// <returns>成否</returns>
bool HeavyTask()
{
    //重い処理をする
    Thread.Sleep(3000);

    //実行の成否を返す（擬似的にランダムにtrue/falseを返す）
    var random = new System.Random();
    return random.Next() % 2 == 0;
}
```

#まとめ

UniRxはコルーチンと組み合わせることでより真価を発揮します。
全てをRxのストリームで無理に書くのではなく、FromCoroutineとStartAsCoroutineを上手に利用して読みやすく扱いやすいコードを書きましょう。
GoとNginxコンテナを連携させ、そして中でgodoでファイル監視してgojiを使った開発を行えるようにした。

以前書いた、[http://qiita.com/shinofara/items/3bf0e88ba889364c5059](http://qiita.com/shinofara/items/3bf0e88ba889364c5059)のパワーアップ版です。

# 事前準備

## 必要な物

* [docker](https://docs.docker.com/userguide/)
* [docker-compose](https://docs.docker.com/compose/)
* [docker-machine](https://docs.docker.com/machine/)

## dockerのhost環境をvirtualboxで作成

今回は```docker-machine``` を利用

dockerのhost作成

```
$ docker-machine create -d virtualbox dev
INFO[0000] Creating SSH key...
INFO[0000] Creating VirtualBox VM...
INFO[0009] Starting VirtualBox VM...
INFO[0009] Waiting for VM to start...
INFO[0056] "dev" has been created and is now the active machine. 
```

確認

```
$ docker-machine ls
NAME   ACTIVE   DRIVER       STATE     URL                         SWARM
dev    *        virtualbox   Running   tcp://192.168.99.100:2376
```

dockerコマンドも確認

```
$ docker ps
CONTAINER ID        IMAGE                               COMMAND                CREATED             STATUS              PORTS                         NAMES
```

当然なにもない

## サンプルをクローン

サンプルはこのリポジトリですが

```
$ git clone https://github.com/shinofara/golang-web-application.git
$ golang-web-application
```

## Containerを立ち上げる

```build an image for your code, and start everything up```

ビルドして、そして全部立ち上げます。

```
$ docker-compose up -d
Recreating demo_go_1...
Recreating demo_nginx_1...
Attaching to golangwebapplication_go_1, golangwebapplication_nginx_1 
```

最後にgoをnginxにアタッチと出てます。
これはnginxコンテナにgoコンテナをリンク付けした感じです

## 確認してみましょう

```
$ curl -l http://<docker host serverのIP>/hello/world
Hello World !
```


## 編集してみましょう

vimなどで```main.go```を編集してください。

```
- fmt.Fprintf(w, "Hello, %s!", c.URLParams["name"])
+ fmt.Fprintf(w, "Hello 2, %s!", c.URLParams["name"])
```

編集したら保存しましょう。閉じちゃってもOKです。

## 確認してみましょう

```
$ curl -l http://<docker host serverのIP>/hello/world
Hello 2 World !
```

## 更新されましたか？

コンテナ内のgoは```go run``` 状態であるはずなのに、なぜ？

それは、goコンテナ内では```go run``` ではなく、```godo``` が実行状態にあるからです。
```godo``` は、gruntのようなものでファイルの変更を検知して、様々なtasksを実行してくれます。

このコンテナではgo run main.goを再実行する様に定義しています。
なので```main.go``` の変更を検知して、内部で```go run main.go``` を再実行してくれたのです。

# 最後に

ここまでで

1. Nginxコンテナ作成
2. Go FCGIコンテナ作成
3. GoのWAFであるgojiの導入
4. ファイルの更新を検知しするタスクランナーgodoの導入

といった４つの事が出来るようになりました。
あとはMysqlコンテナを作って連携すればひと通りのWEBサービス開発を行える状態になりそうです。

作成したコード一式
https://github.com/shinofara/golang-web-application/tree/goji
ド素人の統計勉強メモ with Scala ~ 累積分布関数(CDF)編

# 累積分布関数(Cummulative Distribution Function)
PMF(Probability Mass Function: 確率質量関数: 正規化されたヒストグラム)ではランダムノイズの影響が大きくなってしまうらしい。(?)

ググってもあんまりパッとわかる説明が見当たらない。

描いてみれば分かるかも。

基本は[前回](http://qiita.com/FScoward/items/0ab50f5e5af26a489489)参照

```scala:Main.scala
/**
 * Created by FScoward on 15/06/01.
 */

import breeze.linalg.{sum, DenseVector}
import breeze.numerics.{sqrt, pow}
import breeze.plot.Figure
import breeze.stats.distributions.Gaussian
import breeze.plot._

object Main {
  
  def main(args: Array[String]): Unit = {
    
    // 例えば10人の生徒がテストでそれぞれ以下の点数を取ったとする。
    val dv = DenseVector(61, 74, 55, 85, 68, 72, 64, 80, 82, 59)
    
    // μ: 分布の平均
    val mu = sum(dv) / dv.length
    // σ: 標準偏差
    val sigma = sqrt(sum(dv.map(x => pow(mu - x, 2))) / dv.length)
    
    val figure = Figure()
    val gaussian = Gaussian(mu, sigma)
    // subplot(m,n,p) は、現在の Figure を m 行 n 列のグリッドに分割し、p で指定された位置のサブプロットに座標軸を作成します
    // つまりグラフをどこに配置するかという話。
    val p = figure.subplot(0)
    // 100点満点
    val maxScore = 100
    // 100までの増分1のリスト
    val counts = 0.0 to maxScore by 1.0
    // cdf を出して リストにする
    val list = counts.map(gaussian.cdf(_)).toList
    
    p += plot(counts, list, '+')
  }

}
```

# グラフ(累積分布関数)

![cdf.png](https://qiita-image-store.s3.amazonaws.com/0/39243/a4bc35f5-e004-fd43-bbb7-28939c27b10c.png)

分布の累積を表したものとなる。

# 参考資料

[Think Stats ―プログラマのための統計入門](http://www.amazon.co.jp/gp/product/4873115728/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4873115728&linkCode=as2&tag=coward0d-22)
RailsでHTML5のCanvasの画像をDBに保存する方法

#RailsでHTML5のCanvasの画像をDBに保存する方法

お絵かきサイトもどきを作ろうと思い、調べてみました。

##Form側
```erb:new.html.erb
<canvas id="draw-area" width="257" height="257"></canvas>
<%= form_for @picture do |f| %>
    <%= f.text_field :name %><br>
    <%= f.file_field :photo %>
    <%= f.hidden_field :image_url, :value => '' %>
<% end %>
<span id="save-button">保存</span>
```
pictureモデルを用意し、hiddenフィールドでimage_urlフィールドを用意する。
（nameやphotoは無くても良いかも）


##CoffeeScript側
```coffee:pictures.coffee
  canvas = $('#draw-area')

  #お絵かき処理は省略・・・

  #保存ボタン押下時にhiddenフィールドに画像のURLを持たせ、Postアクションを呼ぶ
  $("#save-button").click ->
    url = canvas[0].toDataURL()
    $("#picture_image_url").val(url)
    $("#new_picture").submit()
```

##Controller側
```rb:pictures_controller.rb
  def create
    @picture = Picture.new(picture_params)
    @picture.image_url = params['picture']['image_url']
    if @picture.save
      redirect_to @picture, notice: '保存しました。'
    else
      render :new
    end
  end

  def picture_params
    params.require(:picture).permit(:name, :photo, :image_url)
  end
```

簡単ですが、上記の方法で出来ました。
他にも色々方法があると思います。
DBにはバイナリで登録されているので、
実際に表示する場合はまた別途コンバートする必要あり。
【AWS】node.js on AWS

AWSのEC2上にサーバーサイドのスクリプト言語である、node.jsをセッティングしてみようと思います。


1. 必要なパッケージの入手
yumコマンドでインストールします。
`$ sudo yum install git`
`$ sudo yum install gcc-c++`
`$ sudo yum install make`
`$ sudo yum install openssl-devel`

2. nvmをリポジトリからダウンロード
`$ git clone git://github.com/creationix/nvm.git .nvm`
.bash_profileにnvm(Node Version Manager)を使えるようにする
`$ source ~/.nvm/nvm.sh`

3. インストールが可能なバージョンの確認
`$ nvm ls-remote`
私が確認したところ、V0.12.4が最新のようでしたので、このバージョンをインストールします。

4. インストール
`$ nvm install v0.12.4`
コマンド実行後、パーミッションが足りないとのエラーメッセージが出力されました。
エラーメッセージで出力されたディレクトリと権限を付与してあげて、再度インストールを実行しました。
※実行後、コンパイルも走るため、結構待ちます。

5.  インストール後の確認
`$ node -v `
実行結果
>[ec2-user@ip-xx-xx-xx-xx ~]$ node -v
v0.12.4

6.expressアプリケーションを作成
>Expressは、JavaScriptのMVC雛型ソースを自動生成してくれるモジュールです。
`$ npm install express-generator -g`

アプリケーションを作成
`$ express 任意のアプリ名`

アプリケーションフォルダに移動してnvmパッケージをインストール
`$ cd アプリ名 && npm install`

expressを起動
`$ node ./bin/www`

7. ブラウザからアクセス
http://パブリックDNS:3000(セキュリティグループで設定)

![aws_000006.JPG](https://qiita-image-store.s3.amazonaws.com/0/59666/7a8c3ca9-4306-540b-0402-9f85e9e67709.jpeg)

以上。
何やらコマンドとしてわからないものが多いので、引続き手を動かして覚えていきたい。