OmniAICreator/Qiita-1.07M huggingface dataset:
Ubuntu 14.04のルーター化

Network Routingの覚え書き

# やりたいこと

nicが2つあるPCにUbuntuを入れてルータにしたい。

* nic
 * eth0: 外に繋がっているインターフェース
 * eth1: 新規で切るセグメント

## 検証環境

* Ubuntu Server 14.04

## ネットワーク/インターフェースの定義

eth0, eth1 のインターフェースの設定を行う。
各ネットワークを定義。(file: /etc/network/interfaces)

```/etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
  address 192.168.1.1
  netmask 255.255.255.0
  network 192.168.1.0
  broadcast 192.168.1.255
  gateway 192.168.1.100
  dns-nameserver 8.8.8.8

auto eth1
iface eth1 inet static
  address 192.168.2.100
  netmask 255.255.255.0
  network 192.168.2.0
  broadcast 192.168.2.255
  gateway 192.168.2.100
  dns-nameserver 8.8.8.8
```

## IPフォーワードの有効化
デフォルトではIPフォワードは無効になっているので
有効化する必要あり。(file: /etc/sysctl.conf)

```/etc/sysctl.conf
...(略)...
# コメントアウトする
net.ipv4.ip_forward=1
...(略)...

```

## IPマスカレードの設定

このままでは、戻りの経路情報が不明であるために、192.168.2.0 内から外に向けたpingが失敗する。
そこでIPマスカレードを設定する.

```$ sudo /sbin/iptables -t nat -A POSTROUTING -s 192.168.2.0/255.255.255.0 -j MASQUERADE```

### iptables 起動スクリプト作成

さきほどの設定を保存
```$ sudo /sbin/iptables-save -c > /etc/iptables.rules```

設定を読み込んで起動するスクリプトを作成。
(file: /etc/network/if-pre-up.d/iptables_start)

```/etc/network/if-pre-up.d/iptables_start
#!/bin/sh
/sbin/iptables-restore < /etc/iptables.rules
exit 0
```

実行権限を付与
```$ sudo chmod +x iptables_start ```

これで再起動すれば、最小ルーティング設定は完了。

※ 192.168.2.0 以下にさらにセグメントを掘り、192.168.1.0 からアクセスを通したい際はUbuntu Severのルーティングテーブルを更新する必要がある。

# 参考

* [Linuxマシンをルータにする方法](http://redhatlinux.kt.fc2.com/cont/router.htm)
* [試してわかるルーティング](http://ascii.jp/elem/000/000/579/579855/)
* [知らなきゃ損するiptablesのTips (1/3)](http://www.atmarkit.co.jp/ait/articles/1008/23/news100.html)

## その他便利だったツール
* [サブネットマスク計算（IPv4)](http://note.cman.jp/network/subnetmask.cgi)
[Scala]Elastic Beanstalk(Docker)でevolutionが自動実行されないとデプロイに失敗する件[Play]


## 症状

Elastic Beanstalk(Docker)に、Scala+Play+MySQLで作成したWEBアプリをデプロイしようとしたところ、起動の段階でエラーがでる。
ログを見ると、次のようなエラーがでていた。

```text:/var/log/eb-docker/containers/eb-current-app/unexpected-quit.log
play - Run with -DapplyEvolutions.default=true if you want to run them automatically (be careful)
```

## 解決策

application.confに２行追加する。
>!Downsを含まない場合は、２行目はいらないかも。

```text:conf/application.conf
applyEvolutions.default=true
applyDownEvolutions.default=true
```

evolutionを自動で実行する設定なので、場合によっては、問題が起きるかもしれません。



## 参考

[Playで起動時に無確認でevolutionが実行されるようにする ](http://nil639.blogspot.jp/2013/05/playevolution.html)
scipy.sparse.linalg.svds は特異値を昇順で返す

`numpy.linalg.svd`, `scipy.linalg.svd` は降順で返す一方で、 `scipy.sparse.linalg.svds` は昇順で返すので注意。はまりました。

## 動作確認用のコード

```py
# coding: utf-8

import numpy as np
import scipy.linalg
import scipy.sparse.linalg

x = np.random.rand(7, 7)

U, S1, V = np.linalg.svd(x)
print S1

U, S2, V = scipy.linalg.svd(x)
print S2

U, S3, V = scipy.sparse.linalg.svds(x)
print S3

# S1, S2と等しくなる
print S3[::-1]
```

## 降順にしたい場合

http://stackoverflow.com/questions/24498854/singular-values-sorted-in-descending-order-using-svds-from-scipy-sparse-linalg

A. 自分で書く（降順にするオプションはありませんでした
express+jadeで書いてるページにscriptべた書きするときのメモ


O'ReillyのSPA本のサンプルを読みながら、せっかくだからjade式に書いてみよう、なんて思ったら、scriptべた書きを上手く表現できなかったので。

#構成

基本的にnodeclipseのexpressプロジェクトの構成をそのままに。

##app.js
実はapp.jsの中身は良く理解していない。(今後の課題）
prettyをtrueにして、読み易いHTMLを出力するようにだけした。

```javascript:app.js

/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' === app.get('env')) {
  app.use(express.errorHandler());
  app.locals.pretty = true; //ここだけ追加
}

app.get('/', routes.index);
app.get('/users', user.list);

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});
```

## layout.jade
デフォルトだとコンテンツのみをblockで呼び出していたが、scriptはページごとに違うの呼びたいよねってことで、script部分にもblockをいれた。（というか、headerって名前にしておけばいいんじゃないだろうか）

本だとスタイルシートもべた書きしているけれど、デフォルトでstylesheets/style.cssを読み込むように設定されていたので、そっちに記載することにした。

```jade:layout.jade
doctype html
html
  head
    title= "SAP Chapter1 section 1.2.2"
    link(rel='stylesheet', href='/stylesheets/style.css')
    script(type='text/javascript', src='/scripts/jquery-2.1.js') //jqueryはどのページでもロード
    block scripts //個別のスクリプトは別途記述
  body
    block content
```

## index.jade
jade環境下で生javascriptを書くときは、scriptタグの尻尾に.を打ってやる。これでscriptタグの内部がjade構文でないと認識されるらしい。

```jade:index.jade
extends layout

block scripts
  script(type='text/javascript'). //文末の.が重要
    var spa = (function( $ ){
       var configMap={},
       $chatSlider,
       toggleSlider, onClickSlider, initModule;
   ... 
　　}());
    
block content
  #spa //<div id="spa">の省略記法
    .spa-slider //<div class="spa-slider">の省略記法
```

#結果
```html:index.html
<!DOCTYPE html>
<html>
  <head>
    <title>SAP Chapter1 section 1.2.2</title>
    <link rel="stylesheet" href="/stylesheets/style.css">
    <script type="text/javascript" src="/scripts/jquery-2.1.js"></script>
    <script type="text/javascript">
      var spa = (function( $ ){
         var configMap={},
         $chatSlider,
         toggleSlider, onClickSlider, initModule;
      }());
      
    </script>
  </head>
  <body>
    <div id="spa">
      <div class="spa-slider"></div>
    </div>
  </body>
</html>
```

というわけで、やりたいことは実現できたわけだけれども、jadeエディタ上ではjavascriptのシンタックスチェックしてくれないし、オートインデントも効かなくなるから、外だししてロードする方が色々と楽かも。小さなページでちょっとだけスクリプト書きたいとか、よっぽどの用途がない限りもうやらないな。

#memo
##appの立ち上げ
app.jsは```node app```で立ち上げるより、supervisor.jsを使って

```bash:commandline
$ supervisor app 
```
としておいたほうが楽。これで参照フォルダ内で変更が起きた際に自動で再ロードしてくれるようになる。今はコイツをターミナルで呼んでるけれど、Eclipseの外部コマンド呼び出しに設定してやればいいかな。

jadeファイルだけ監視する場合は```-w　views```とかオプションを付けてやればいいと思う。
supervisor.jsは

```
sudo npm install -g supervisor
```
としてインストール。-gオプションの影響か、スーパーユーザ権限を聞かれたので、sudoで解決。（Macで開発してます)
Sambaで下位ディレクトリに書き込めない


Sambaをマウントしてファイルサーバとして使っていたのですが、マウントしたディレクトリには書き込めるのに、その下位ディレクトリに書き込めず、少しハマりました。
解決策としては単純なのですが、いつか忘れそうなので書いておきます。

#環境
- デスクトップ
 - Mac OS X 10.9.5
- ファイルサーバ(FS)
 - FreeBSD  9.2-RELEASE-p4
- Samba
 - 4.1.6

#状況
Sambaを使ってファイルサーバをマウントできるようにしました。

```console:smb4.conf(FS)
[public]
    path = /mnt/public
    writeable = yes
（中略）                                                                                                                     
    inherit owner = no                                                                                                                  
    inherit permissions = no                                                                                                           
    hide dot files = yes                                                                                                                
    guest ok = yes                                                                                                                      
```

このように`writable = yes`なので書き込みOKで、`guest ok = yes`なので認証なしでもいける！ようにしたつもりです。
ということでMacでマウントすると、`/Volumes/public`というディレクトリができています。
なので、ここにディレクトリを作成してみます。

```shell-session:Mac
$ pwd
/Volumes/public
$ mkdir parent
$ ls
parent
```

作成できているようです。
では次に作成した`parent`ディレクトリの下にディレクトリを作成してみます。

```shell-session:Mac
$ cd parent
$ mkdir child
mkdir: cannot create directory ‘child’: Permission denied
```

ここでなぜか怒られます。
Macで見た時のパーミッション的には問題無いので、なぜ書き込めないのか少し悩みました。
考えた結果、Sambaの方のパーミッションがおかしいのではないのかということで、再度`smb4.conf`を確認します。

```console:smb4.conf(FS)
[public]
    path = /mnt/public
    writeable = yes
（中略）                                                                                                                     
    inherit owner = no                                                                                                                  
    inherit permissions = no                                                                                                           
    hide dot files = yes                                                                                                                
    guest ok = yes                                                                                                                      
```

やはり`writable = yes`になっているしなーと思って眺めていると、`inherit permissions`という項目があることに気づきます。
inheritという言葉が今の状況に非常に合っているような気がして、`inherit permissions = yes`にしてSambaを再起動してみます。

```console:FS
# /usr/local/etc/rc.d/samba_server restart
Performing sanity check on Samba configuration: OK
Waiting for PIDS: 3256.
Stopping smbd.
Waiting for PIDS: 3253.
Stopping nmbd.
Waiting for PIDS: 3250.
Performing sanity check on Samba configuration: OK
Starting nmbd.
Starting smbd.
Starting winbindd.
```

この状態で再度`parent`を作りなおして、`child`を作成してみます。

```console:Mac
$ mkdir parent
$ cd parent
$ mkdir child
$ ls
child
```

ということでできるようになりました。
`inherit acl`と`inherit persmissions`の違いなどは
http://damedame.monyo.com/?date=20100901
などがわかりやすかったです。
gonを使ったRailsとJavascriptの連携について

RailsアプリケーションとJavascriptの連携をしたい場合、[gon](https://github.com/gazay/gon)というgemがあります。これを使うとcontroller内でセットした変数をJavascript(rails3以上だとcoffeescriptを使うケースが殆どだと思いますが）内で使う事ができます。

# 設定
Gemfileにまずは追記します。

```ruby:Gemfile
gem 'gon'
```
で書いたらbundle installを実行
>bundle install

次にapp/views/layouts/application.html.erbに以下を追記します。

```ruby:app/views/layouts/application.html.erb
 ・・・・・
 <%= include_gon %>
 <%= javascript_include_tag "application" %>
・・・・・・・
```
# 使ってみる
controllerに内で変数をJavascript(coffeescript)内で使ってみましょう。

```ruby:app/controllers/users_controller.rb
  def index
    gon.user_name = 'テスト太郎'
  end
```

で、Javascriptのソースです。今回はcoffeescriptを使います。

```coffeescript:app/assets/javascripts/users.js.coffee
$ ->
  $("div#movie_list").click (e) ->
    alert(gon.user_name)
```

これでusersのindexメソッドにアクセスすると「テスト太郎」と表示されるはずです。
では今度は、DBから取得した値をJavascript内で使ってみましょう。例えばクリックした位置を取得し、そこにDB内のusersテーブルから1件取得し、その1件のうちのname属性の値を出力させてみましょう。

```ruby:app/controllers/users_controller.rb
  def index
    @users = User.all
    gon.user_name = @users.first.name
  end
```

```coffeescript:app/assets/javascripts/users.js.coffee
$ ->
  $("div#movie_list").click (e) ->
    [x, y] = pointedBlock(e)
    block = $("<div class='block' style='left: #{x}px; top: #{y}px;'>#{gon.user_name}</div>")
    $(e.target).append(block)

pointedBlock = (e) ->
  canvas = $(e.target)
  x = e.pageX - canvas.position().left
  y = e.pageY - canvas.position().top
  [x, y]
```

こう書くとクリックした箇所にusersテーブルから取得したデータのnameカラムの値を表示します。
このgonには他にもメソッドがあります。

```ruby
gon.all_variables #設定した変数を全件取得
gon.clear # 設定した変数を削除する
```

javascriptとrailsの連携が出来たと思います。これを使うとまた開発の幅が広がる気がします。
iOSの課金周り　消費型 入門編

iOSの課金周りの消費型の入門編。
とりあえずシーケンスっぽいものを作った。
正常系のみ。
まだ実装はしていないので、実装して何かあったら編集していく。
![Sequence Diagram (2).png](https://qiita-image-store.s3.amazonaws.com/0/19638/7c6c247c-5936-9f2d-ed38-f6706874c851.png "Sequence Diagram (2).png")
RubyでLinuxコマンドの再実装(ls編)


Rubyの勉強にRubyで有名ドコロのLinuxコマンドたちを再実装してみたいとおもいます。

少しずつ追記する形にできればと思っています。よりよい実装方法などありましたらぜひご教授いただけると幸いです。

[RubyでLinuxコマンドの再実装(ls編) - Qiita](http://qiita.com/agatan/items/af0c3bbc881f60667c85)
[RubyでLinuxコマンドの再実装(tree編) - Qiita](http://qiita.com/agatan/items/4c50554ae22aa4181cc1)


## ls
ではまずは`ls`です。簡単そうだったし個人的に一番良く使うコマンドなので。

```rb
#! /usr/bin/env ruby
#
# ls: 引数なしの場合現在のディレクトリの状態を返す。
#     引数ありの場合そのディレクトリの状態を返す。

target = ARGV[0] || Dir.pwd

entries = Dir::entries(target)

entries.select!{|entry| entry[0] != '.'}

entries.map! do |entry|
  if File::directory?(File.join(target, entry))
    "#{entry}/"
  else
    entry
  end
end

puts entries.join(' ')
```

ディレクトリの場合は末尾に`/`をつけるようにしています。

`-a`オプションで隠しファイル隠しディレクトリも表示するようにしたり, `--color`オプションで色をつけたりすることが目標です。

コマンドライン引数の順番や, `-a -l -F`と`-alF`などややこしそうな部分は制約をつけてお茶を濁してしまうかもしれません...

### 追記
--------
@riocamposさんにコメントでコマンドライン引数の利用方法を教えていただきました！
`require 'optparse'`とすればパーサが利用できるようになります。

というわけでこれを反映し修正したものがこちらです。

```ls.rb
#! /usr/bin/env ruby -w
#
# ls: 引数なしの場合現在のディレクトリの状態を返す。
#     引数ありの場合そのディレクトリの状態を返す。

require 'optparse'

def set_color_and_reset(entry, color)
  case color
  when :red
    "\e[31m#{entry}\e[0m"
  when :green
    "\e[32m#{entry}\e[0m"
  when :blue
    "\e[34m#{entry}\e[0m"
  when :cyan
    "\e[36m#{entry}\e[0m"
  else
    entry
  end
end

options = ARGV.getopts('aF', 'color')
target = ARGV[0] || Dir.pwd

entries = Dir.entries(target)

if options['a']
  options['a'] = false
else
  entries.select! { |entry| entry[0] != '.' }
end

if options.value? true
  entries.map! do |entry|
    fullpath = "#{target}/#{entry}"
    case
    when File.directory?(fullpath)
      entry = set_color_and_reset entry, :blue if options['color']
      entry += '/' if options['F']
    when File.symlink?(fullpath)
      entry = set_color_and_reset entry, :cyan if options['color']
      entry += '@' if options['F']
    when File.executable?(fullpath)
      entry = set_color_and_reset entry, :red if options['color']
      entry += '*' if options['F']
    end
    entry
  end
end

puts entries.join(' ')
```

`-l`オプションは対応していません...`-aF --color`に対応しました。
表示の桁揃えとかしたほうが綺麗なんでしょうけれど...

次は`tree`に挑戦してみます。
LPV81CなAndroid L-Previewのバグまとめ

@eaglesakuraです。

# 俺、L-Previewやめるってよ

Android L PreviewがリリースされてからこのかたずっとLを使い続けていました。日経ソフトウエアで新APIの記事書いてるので、みんな買ってね♡

さて、Lの新機能は非常に良く出来ていますが、ぶっちゃけて言えばDeveloper Previewなのでバグバグです。どのくらいバグバグかといえば、たまに3G/LTE回線にすら繋がらなくなる（電波は3本立っている）くらいバグバグです。

Preview版なので、別に完璧は求めてません。単に、俺個人の感想として「L-Previewは人類には早すぎた」とか思ってるだけです。

ようやくまとまったお金を手に入れることができ、常用端末と開発用端末を切り離すことが出来ました。喉元過ぎて忘れないため、L−Previewで何が問題だったかをメモっておきます。

なお、ここでのバージョンはLPV81Cの段階です。

## イラッとするバグ（もしくは仕様）

### Android WearのGoogle Musicと正常に連動できない

Android Wearを装備状態でMusicを再生すると、Wearに「次へ」とかのボタンが出る。しかし、L-Previewは「次へ」ボタンを押しても「停止」ボタンを押しても何も反応がない。ただのしかばねのようだ。

### Amazonのアプリで干し芋リストの2ページ目移行が表示されない

買い物を控えさせてくれる親切心ですね、わかります。

直せください。

### ロック画面にWidgetが配置できない

ロック画面にパスワードとかジェスチャーで鍵をかけてしまうと、Widgetが何も配置できなくなって、左スワイプの「電話」か右スワイプの「カメラ」しか使えない。

そのカメラも、Intentを発行しているだけだから複数のカメラアプリがインスコされていると選択ダイアログが表示される -> ロック画面だから押せない -> 詰んだ＼(^o^)／ となる

直せください。

### Notificationでステータスバーの通知を左右スワイプで消せない

左右スワイプで消そうとすると、画面端2〜3ピクセル？くらいを残してバーが止まってしまい、永遠に消せなくなる。コレ見たわー、ゲーム開発してた頃によく見たわー。こういうバグよくあるわー。

直せください。

### Activityが死ぬしきい値が低くなった？

特にHome画面でActivityが稀によく死んでる気がする。メモリリロードが多いから、結果的にイライラ感がましている。

直せください。

### LINE漫画が購入できない

謎のエラー90001。

直せください。

## ヤバいけど仏の心をもってすれば耐えられるバグ（もしくは仕様）

直せください。

### Twitterを起動すると落ちる

なにか地雷踏んだ？

直せください。

### 3G/LTEの電波を掴んでいてもネットに繋がらない

一旦3G/LTEをOFFにする -> 再度ONで直る。それやるまで永遠につながらない。

直せください。

### Wi-Fiの電波を掴んでいてもネットにつなが（ｒｙ

他のデバイスは普通に繋がってる。Wi-FiをOFFにする -> 再度ONで直る。それやるまで永遠につながらない。

直せください。

### Bluetoothの電波を掴んでいても（ｒｙ

現象同じ。直し方同じ。

直せください。

### 

## マジで死ねるし仕事に支障出るからさっさと直せくださいなバグ（これはもはや仕様ではない）

### 一部、Google謹製SDKでSEGVが出て死ぬ

お陰でLだけ某SDKで表示をしないようにする必要があった。

直せください。

### Play ServiceのOAuthでリソースが無くて死ぬ

俺のアプリじゃないぞ。Play Serviceでリソースが不足してる？らしくて特定の組み合わせでOAuthのトークンを取得しようとすると死ぬぞ。だからLは非対応にしちゃったんだぞ♡

直せください。

### テザリングしても正常にネットに繋がらない

テザリングをONにしても、Wi-Fi AP化まではできるが、ネットワークが外に出て行かないため、結局ネットが出来ない。特に打ち合わせ先で同行者が誰も居ないとネット難民と化してメールのログとか見れなくなって致命的な致命傷。

マジでもう1回線契約するか悩むレベル。あ、BIC SIMとかヨドバシ SIMとか良さそうですね。使ってる人たちの意見とか参考にしたいです。

こればっかりはマジでさっさと、直せください。


## まとめ

開発するなら、常用端末じゃなくて開発用の別端末を用意しようね☆

何か思い出したら追記します。
Shellとシェルスクリプト

#「シェルを書いて」

  私はいわゆるSIerで働いてるのですが、「シェルスクリプトを書く」という意味で、「シェルを書く」という方が非常に多い気がするのですが、これは普通の感覚なんですかね？？

今はもう慣れましたが、初めて「シェルを書いて」といわれたときに、「ん？新しくshellを作るの？」と勘違いしてしまいましたが、よくよく聞いてみると「とある処理の起動用の『シェルスクリプト』を書いて欲しい」ということでした。

「shellって何か知ってますか？」と聞くと「ん？何言ってるの？windowsでいうバッチファイルみたいなものですよ。(そんなこともしらないんですか？的なとまどい)」と言われて閉口してしまいました。

現場でよく飛び交う会話は
「この処理起動させたいんだけど、それ用のCシェル書ける人いてる？」
「これやるんだったらシェルかかないとね」

...うーん。。
【Titanium】これから始めるときにこれ知ってると色々楽だなぁと思うまとめ


なんだがTitaniumとお付き合いが長いです。私です。
今回は、ぐぐってもなかなかHitしなかった知っておくと便利な知識集や、先輩のコードを見てあぁ、なるほどな！と感じたAlloyフレームワークを用いた知識など５点程紹介します。

## httpClientで持ってきたオブジェクトの中身確認したい。

htmlclientとかでjsonにしてobjectで引っ張ってきたものを取れているか確認するときに
ただ単純にTi.API.info(object)ってやると[object object]って表示される時ありますよね？
あれ凄くイラッとするんですけど

```javascript
Ti.API.info(JSON.stringify(object));
```

こーすると上手く表示してもらえます。

## 基本、大きく機能が変わら無い限りwindowは一つでいいと思う！

大きく仕様が変わる画面に移動しない限り、
windowは最初アプリが起動した時のindexの時のwindowのまま、
上に載せるビューを切り替えていくのが正解のような気がします。

それってどうするのって話ですけどTitaniumのAlloyフレームワークを使ったやり方ですと、

```javascript
var newController = Alloy.createController('nextpage').getView();

removeChildren($.index);
$.index.add(newController);


function removeChildren(view) {
	var children = view.getChildren();
	Ti.API.debug(children);
	
	var len = children.length;
	for(var i=0; i<len; i++) {
		var child = children[i];
		var childId = child.id;
		view.remove(child);
	}
}
```

こんな感じに記述して、外部化してどこからでも引っ張ってこれるようにするとスマートかもしれません。

一応順を追ってどうなっているか説明しますと。
１，アプリ起動する。index.xmlで記述してあるだろうwindowとview部分が描画される。
２，ページが遷移するアクションが引き起こされた際に、Alloy.createControllerでnextpageのviewの読み込みが走る。nextpageにはwindowの記述はない。
３，先に$.indexで既に記述されているview部分をremoveChildrenという関数で閉じる。※上手く書かないとaddEventが消えないので注意！
４，$.indexで生成されている真っ白なwindowにnextpageのviewが乗っかる！

って感じです。ちょっとviewの管理体制を最初に作るのがやや濃いかもしれないけど
一度作ってしまえば全てのviewの行き来を一括管理できるかららくだと思います。

一度indexでwindow生成して、全部の箇所で使うイベントはfireEventにしてindexに予めaddしておけば、整理が凄い簡単ですね。


## alloy.jsは活用しまくろう。

Titanium使い始めで意外と忘れがちなのがこの子です。
アプリ起動時に最初に動作するalloy.js君。

この子はどんどん活用しよう。
最初に処理しておきたいあんなこと。
宣言しておきたグローバル変数。

例えばview通しでフラグの確認をする際に、
一番最初に起動したところで変数を作るとか、そんな感じのところは全部allot.jsくんに任せてしまおう。

## データの持ち越しはSQliteをガシガシ使おう。

アプリを終了して、その時のデータを持ち越したいときは間違いなくSQliteを使ってデータをアプリ内で保存した方がいいです。

変にファイル生成して管理してるとわかりにくくなると思いますので...

AlloyだとModelとして宣言しているので分かりやすいと思います。
Titanium SQlite 使い方
とかでググれば潤沢に情報が引き当てれるはずです。

## ファイルを分けてデバイス対応しよう。

TitaniumでAlloyを使い始めだと地味に気づきにくくて、地味に優秀な機能。

view-Android-index.xml
	┗ios-index.xml
	┗index.xml

こんな感じでディレクトリ構造にしておくと、デバイスごとに処理を完全に分岐できます。
ルールとして、中身空っぽでもいいので、view直下に読み込み先のファイルを用意しておく必要があるみたいです読み込むものはデバイスに対応したものを見に行きます。

styleでも同じ事ができますので、デバイスごとに描画ルールが地味に違いに悩んだら思い切って作り分けするのが良いです。

ちなみに、対応したデバイスのディレクトリが無い時はview直下にあるものを読み込みます。
対応しているのがiosとAndroidだけなら、Androidというフォルダを用意しておけばiosは直下のファイル。AndroidはAndroidディレクトリの中のファイルを読み込む。みたいな感じに出来ますね。

## まとめ

とまぁ、ざっくり五点ほど紹介しましたが、いかがだったでしょう？
案外知らなさそうなところから、先輩からの学び等を入れてみました。

ざっくり書きすぎて細かいぶぶわからないかもですが、余裕があれば質問にはお応えします。（僕以外のTitaniumMobilerがきっと...w）

では、お疲れ様でしたー。
[質問]jQueryやjavascriptで遷移先のページに選択肢のvalue属性を渡す方法

jQueryやjavascriptで、遷移先のページに選択肢のvalue属性を渡す方法があれば、そのメソッド名などを教えてもらっていいですか？

具体的には、1ページ目にはチェックボックスとボタンがあり、いくつかのチェックボックスをチェックしてボタンを押すと、別のページにうつり、そのページの内容がチェックした内容に基づいて切り替わることを想定しています。

何か方法などあれば教えてください。よろしくお願いします。
Phoenix を heroku で動かす

## はじめに
Phoenix v0.17.0 で検証しています。[公式のやり方](http://www.phoenixframework.org/docs/heroku)に沿うのが最も新しく確実な情報です。

## Phoenix でサンプルアプリを作る

Phoenix のインストールは[こちら](http://www.phoenixframework.org/docs/installation)を。
[Phoenix の Up And Running](http://www.phoenixframework.org/docs/up-and-running) に沿って、以下を実行する(記事を書いている時点で v0.17.0 が Phoenix の最新版)。

```console
$ mix archive.install https://github.com/phoenixframework/phoenix/releases/download/v0.17.0/phoenix_new-0.17.0.ez
$ mix phoenix.new /path/to/scaffold/sample_app
$ cd sample_app
$ mix phoenix.server
```

一連のコマンドが上手くいけば localhost:4000 にアプリが立ち上がる。

## heroku-buildpack-elixir で heroku 用の設定を作る

heroku-buildpack-elixir はいくつかあるので注意。https://github.com/HashNuke/heroku-buildpack-elixir これを使う。
buildpack の指定を以下のようにし、heroku アプリを作成する。

```console
$ heroku create --buildpack "https://github.com/HashNuke/heroku-buildpack-elixir.git"
```

https://github.com/HashNuke/heroku-buildpack-elixir の README に沿って、`elixir_buildpack.config` と `Procfile` を作成する。
私はそれぞれ以下の内容で作成した。

```:elixir_buildpack.config
# Erlang version
erlang_version=17.5

# Elixir version
elixir_version=1.0.4

# Always rebuild from scratch on every deploy?
always_rebuild=false

# Export heroku config vars
config_vars_to_export=(DATABASE_URL)

# A command to run right after compiling the app
post_compile="pwd"
```

```:Procfile
web: mix phoenix.server
```

## heroku-buildpack-phoenix-static で assets 用 buildpack を設定する

これを設定することでデプロイ前に static ファイルをビルドしてくれる。

```console
$ heroku buildpacks:add https://github.com/gjaldon/heroku-buildpack-phoenix-static.git
```

## `config/prod.exs` の変更

`SECRET_KEY_BASE` と `DATABASE_URL` 環境変数を設定するために変更します。

```diff
--- a/config/prod.exs
+++ b/config/prod.exs
@@ -56,6 +56,14 @@ config :logger, level: :info
 #     config :sample_app, SampleApp.Endpoint, server: true
 #
 
-# Finally import the config/prod.secret.exs
-# which should be versioned separately.
-import_config "prod.secret.exs"
+# In this file, we keep production configuration that
+# you likely want to automate and keep it away from
+# your version control system.
+config :sample_app, SampleApp.Endpoint,
+  secret_key_base: System.get_env("SECRET_KEY_BASE")
+
+# Configure your database
+config :sample_app, SampleApp.Repo,
+  adapter: Ecto.Adapters.Postgres,
+  url: System.get_env("DATABASE_URL"),
+  pool_size: 20
```

## 環境変数を heroku に設定する

以下の通り。`mix phoenix.gen.secret` で生成される `HOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGE` を `SECRET_KEY_BASE` 環境変数に設定する。

```console
$ mix phoenix.gen.secret
HOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGE
$ heroku config:set SECRET_KEY_BASE="HOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGE"
```

## heroku にあげる

ここまで準備できたら後は `git push heroku master` すれば heroku 上で起動しているのが確認できる。

## SEE ALSO

* http://www.phoenixframework.org/docs/heroku
* https://github.com/phoenixframework/phoenix
* https://github.com/HashNuke/heroku-buildpack-elixir
* https://github.com/gjaldon/heroku-buildpack-phoenix-static
* https://github.com/sapporo-beam/phoenix-heroku
turbolinksでtwitterのtimelineを期待通り表示させる

期待通りに動作させるまで苦労したので、ここで共有します。

#問題
1. 戻るボタンを押すと、ツイッターのタイムラインが空欄になっている。
2. 戻るボタンを押しても空欄にならなくなったが、ページロード時にタイムラインが表示されない。

#問題を解決したコード
参考リンクの１番目をお手本にしています。

````app/views/layouts/application.html.erb
- <a class="twitter-timeline" 
-   href="https://twitter.com/twitterapi" 
-   data-widget-id="YOUR-WIDGET-ID">Tweets by @twitterapi
- </a>

+ <div class="twiiter-timeline-container" 
+   data-widget-id="YOUR-WIDGET-ID" 
+   data-widget-options="<%= { borderColor: '#abcdef' }.to_json %>">
+ </div>
````
`a`で与えられていた情報を元に、タイムラインを表示したい場所へ上記の`div`を配置します。

````app/assets/javascripts/twitter.js.coffee
$ ->
  loadTwitterSDK()
  $(document).on 'page:change', renderTimelines

loadTwitterSDK = ->
  $.getScript "//platform.twitter.com/widgets.js", ->
    renderTimelines()

renderTimelines = ->
  $('.twitter-timeline-container').each ->
    $container = $(this)
    widgetId = $container.data 'widget-id'
    widgetOptions = $container.data 'widget-options'
    $container.empty()
    twttr?.widgets.createTimeline widgetId, $container[0], null, widgetOptions
````

#解説
1. 戻るボタンを押すと、ツイッターのタイムラインが空欄になっている。
  →`$(document).on 'page:change'`をトリガーにして`div`にタイムラインを表示させました。

2. 戻るボタンを押しても空欄にならなくなったが、ページロード時にタイムラインが表示されない。
  →`getScripts`の後にタイムラインを読み込ませました。

誰かの参考になれば幸いです。

#参考
https://github.com/reed/turbolinks-compatibility/issues/22
http://semooh.jp/jquery/api/ajax/jQuery.getScript/+url,+callback+/
http://reed.github.io/turbolinks-compatibility/twitter.html
rbenvの使い方


## rbenvとは
rbenvは複数バージョンのrubyを管理するためのツールです。

類似ツールに、”rvm(ruby version manager”がある。
rvmは高機能で動作が複雑、rbenvは軽量でシンプルである。
rvmとは共存できないみたいようだ。

## インストールできるバージョンの一覧
$ rbenv install -l (or --list)

## インストール
$ rbenv install version

ex) $rbenv install 1.9.3-p547

未インストール状態であれば、ソース取得からビルドまで実行される。

## バージョン
### 現在バージョンの確認
$ rbenv versions


### バージョンの切り替え
$ rbenv [global|local|shell] version

ex) $ rbenv global 1.9.3-p547

+ global
システム全体のバージョンを指定する場合に指定する
"~/.rbenv/version"を書き換える

+ local
あるアプリケーションでバージョンを指定する場合に指定する
実行ディレクトリに".ruby_version"を作成する

+ shell
カレントシェルで使用するバージョンを指定する
環境変数"RBENV_VERSION"にセットされる

## 参考
参考にさせていただいたページ

+ http://blog.excale.net/index.php/archives/3722
+ http://dev.classmethod.jp/server-side/language/build-ruby-environment-by-rbenv/
OCaml 4.01.0 から、異なるレコード型で同一のフィールド名を持つことができるようになった


これまでは、あるレコード型のフィールド名は、スコープ内でユニークなものでなければならなかったけど、OCaml 4.01.0 からは、異なる型で同一のフィールド名を持つことができるようになったようだ。

> It is now possible to have several variant constructors or record fields of the same name in scope, and type information will be used to disambiguate which one is used -- instead of always using the last one.

> ```ocaml
(* $ ocaml -w +41 # warning 41, disabled by default,
                   # warns when the last-in-scope is used without type information *)
# type t = A | B;;
# type u = A;;
# let x : t = A;;
val x : t = A
# let y = A;;
Warning 41: A belongs to several types: u t
The first one was selected. Please disambiguate if this is wrong.
val y : u = A
```
This slightly controversial feature can be tweaked in various ways through an extensive set of warning (40, 41, 42): by converting some of them as errors, you can disable it completely or control its applicability. See http://www.lexifi.com/blog/type-based-selection-label-and-constructors for a more detailed description of the feature.

From [[Caml-announce] OCaml release 4.01.0](http://yquem.inria.fr/pipermail/caml-announce/2013-September/000006.html)

実際に試してみる。

```ocaml
(*    OCaml version 4.01.0      *)

(* 同一名のフィールドを持つ、異なる二つのレコード型を定義 *)
# type student = { name : string; id : int };;
type student = { name : string; id : int; }
# type foo = { name : string };;
type foo = { name : string; }

(* 問題なく foo 型も student 型も作成できている *)
# { name = "Harou" };;
- : foo = {name = "Harou"}
# { name = "Test"; id = 22 };;
- : student = {name = "Test"; id = 22}

(* 同じフィールド名の組み合わせを持った場合は既存の型が上書きされてしまうようだ *)
# type hoge = { name : string; id : string };;
type hoge = { name : string; id : string; }
# { name = "Test"; id = 22 };;
Characters 22-24:
  { name = "Test"; id = 22 };;
                        ^^
Error: This expression has type int but an expression was expected of type string

# type student = { name : string; id : int };;
type student = { name : string; id : int; }
# type hoge = { name : string; id : int };;
type hoge = { name : string; id : int; }
# { name = "Test"; id = 22 };;
- : hoge = {name = "Test"; id = 22}
```
rails console から アプリケーションに対して GET や POST リクエストを発行して調査するには


## GET リクエストの場合

```ruby
# bin/rails console

> app.get '/users/new'
Started GET "/users/new" for 127.0.0.1 at 2014-04-10 16:25:28 +0900
  ActiveRecord::SchemaMigration Load (0.5ms)  SELECT "schema_migrations".* FROM "schema_migrations"
Processing by UsersController#new as HTML
  Rendered shared/_error_messages.html.erb (4.7ms)
  Rendered users/new.html.erb within layouts/application (34.7ms)
Completed 200 OK in 183ms (Views: 167.2ms | ActiveRecord: 0.3ms)
=> 200

> app.request.params
=> {"action"=>"new", "controller"=>"users"}

> app.request.headers
=> #<ActionDispatch::Http::Headers:0x007f8818eb2bf0 @env= {"rack.version"=>[1, 2], "rack.input"=>#<StringIO:0x007f881afc8fb0>, ... }

> app.controller.class
=> UsersController
```

## POST リクエストの場合

POST リクエストを発行するためには、CRSF 対策に対応するために authenticate token を取得する必要がある点に注意。

```ruby
# devise での認証が必要な場合、
# > u = User.find_by({name: "admin"})
# > include Warden::Test::Helpers
# > login_as u, scope: :user
                
> app.get '/users/new'

> require 'nokogiri'
> token = Nokogiri::HTML.parse(app.response.body).xpath('//input[@name="authenticity_token"]').attribute('value').value

> app.post '/users', { user: { name: 'tom' }, authenticity_token: token }
Started POST "/users" for 127.0.0.1 at 2014-04-08 16:29:04 +0900
Processing by UsersController#create as HTML
  Parameters: {"user"=>{"name"=>"tom"}, "authenticity_token"=>"54XB85ieDmTKxSNZDggnIf1grq7/T8XiproSXTphYQ8="}
   (10.4ms)  BEGIN
  User Exists (4.4ms)  SELECT 1 AS one FROM "users" WHERE "users"."email" IS NULL LIMIT 1
   (4.9ms)  ROLLBACK
  Rendered users/new.html.erb within layouts/application (4.2ms)
  Rendered layouts/_shim.html.erb (0.1ms)
  Rendered layouts/_header.html.erb (0.4ms)
  Rendered layouts/_footer.html.erb (0.2ms)
Completed 200 OK in 68ms (Views: 19.7ms | ActiveRecord: 19.8ms)
=> 200

> app.controller.params
=> {"user"=>{"name"=>"hoge"},
 "authenticity_token"=>"UhlDVaeqFeTphJ7WyHv6je1Gu/JX1VbGu9U/pOOIvL4=",
 "action"=>"create",
 "controller"=>"users"}

> app.controller.instance_variable_get(:@user).errors.full_messages
=> ["Email can't be blank", "Email is invalid"]
WebGLのShaderをHTMLに直接書くと消耗するので、外部ファイルにしてJadeかSlimでincludeしちゃおう


# そのへんのサンプルをみるとシェーダーがHTMLに直接書いてある

```sample.html
<script id="vertexShader" type="x-shader/x-vertex">
uniform float hoge;
void main() {
  float fuga = 1;
  gl_Position = projectionMatrix * modelViewMatrix;
}
</script>
```

こんな感じでHTMLに埋め込まれている。

* いちいちhtmlを触らないといけない
  * → 再利用性がない
* シンタックスハイライトもないので、開発がめんどくさい。

# 別ファイルにしよう

2つの戦略がある。

外部ファイルにするShaderファイルを作成し

1. jsでロードする
2. JadeなどでHTMLに埋め込む

ここではJSでロードすると単純にめんどくさいのと、ロード時間が増えて、メリットがなさげなのでやめておく。


# Jadeでの埋め方
jadeと同じ階層の`test.vert`ファイルを埋め込む

```
script#vertexShader(type='x-shader/x-vertex')
  include test.vert
```

# Slimでの埋め方

`source/shader/hoge.vert`ファイルを埋め込む

```
script#vertexShader type="x-shader/x-vertex"
  == File.read('./source/shader/hoge.vert')
```


# ちなみにGLSLシェーダーファイルの拡張子は `.vert`, `.frag`

特に拡張子の指定はないが、慣習的にこうなってるらしい。

* `.vert`
* `.frag`


[GLSLシェーダの正しいファイルの拡張子は何ですか？](http://goo.gl/V6jWMg)

`.vs`, `.fs`としている派閥もいるらしい。

## `.vert`, `.frag`のシンタックスカラーは`C/C++`などにしとくとよし

GLSLはC言語をベースとしているらしいので、それでいいんじゃないかな！？

### IntelliJ IDEAだとプラグインあり

1. GLSL Supportっていうのがあるので、それをインストール
2. [Settings] → [File Types] → [OpenGL Shadeing...]で`*.vert`, `*.frag`追加

でOK！

![Preferences.png](https://qiita-image-store.s3.amazonaws.com/1334/2631/509a5277-586b-bdc9-2494-c870bab6a24b.png "Preferences.png")



だけど、シンタックスハイライトがうまく設定できなくて、ちょっときもちわるい。

![Preferences.png](https://qiita-image-store.s3.amazonaws.com/1334/2631/372a6f01-9fb7-cf15-8080-daf447e4ba84.png "Preferences.png")
n! 階乗計算例（template練習）

## n!階乗計算例
template練習メモです．

```c++:factorial.cpp
// n! 階乗計算 =====================================
#include <iostream>
using namespace std;

/// ------------------------------------------
/// 階乗計算を行う
/// factorial<N>()関数テンプレート定義
/// ------------------------------------------
template<int N>
int factorial(){
  return factorial<N-1>() * N;
}

template<>  /// 特殊化：factorial<N=”1”>だったら，値を返す
int factorial<1>(){ 
  return 1;
}
/// ------------------------------------------

int main(){
  cout << factorial<1>()  << endl; /// Ans  1! = 1
  cout << factorial<3>()  << endl; ///      3! = 6
  cout << factorial<4>()  << endl; ///      4! = 24
  cout << factorial<10>() << endl; ///     10! = 3628800

}
```

##実行結果
```
clang++ -std=c++11 factorial.cpp 
./a.out
1
6
24
3628800
```
VC++について

VC++でフォームアプリケーションを用いるときは、はじめにwhile文を使うとエラーがおき、プログラムが終了しなくなる。
C++では、人工無能の処理は向かないようだがボトムをうまく使えばできる。

テキストのプロパティー監視をうまく利用しよう。
Haskellドリル（リスト編）解答例

## 課題1
### 指示
リストの最後の要素を取得する関数 myLast を作れ。  
ただし、再帰を用いること。

    Prelude> myLast [1, 2, 3, 4]
    4

### 解答例
```haskell:myLast.hs
myLast 			:: [a] -> a
myLast			= f where
	f []		= error "No last for empty list"
	f [x]		= x
	f (_ : xs)	= f xs
```


## 課題2
### 指示
リストの最後の要素を取得する関数 myLast を作れ。  
ただし、再帰を用いず、Prelude にある関数を合成して作成すること。

    Prelude> myLast [1, 2, 3, 4]
    4

### 解答例
```haskell:myLast2.hs
myLast 	:: [a] -> a
myLast	= head . reverse
```


## 課題3
### 指示
リストの n 番目の要素を取得する関数 myIndex を作れ。

    Prelude> myIndex [1, 2, 3, 4] 2
    2
    Prelude> myIndex [1, 2, 3, 4] 3
    3

### 解答例
```haskell:myIndex.hs
myIndex					:: [a] -> Int -> a
myIndex					= f where
	f [] _				= error "too large index"
	f (x : xs) n
		| n == 0		= x
		| n > 0			= f xs (n - 1)
		| otherwise	= error "negative index"
```


## 課題4
### 指示
与えられた文字列を全て大文字に変える関数 myUpper を作れ。

    Prelude> myUpper "aBcDeFghi"
    ABCDEFGHI

### 解答例
```haskell:myUpper.hs
myUpper     :: String -> String
myUpper     = map toUpper
```


## 課題5
### 指示
与えられた整数リストのうち、奇数だけの合計値を求める`oddSum`を作れ。
ただし、`foldl`と`filter`を合成して作成すること。

    Prelude> oddSum [1,2,3,4,5,8,9,11]
    29

### 解答例
```haskell:oddSum.hs
oddSum		:: [Int] -> [Int]
oddSum		= foldl (+) 0 . filter odd
```

## 課題6
### 指示
与えられたテキストファイルに行番号を付与する関数 lineNum を作れ。
ただし、行番号の桁揃えなどを行わなくて良い。

### 解答例
```haskell:lineNum.hs
lineNum			:: [String] -> [String]
lineNum			= f where
	f			= map g . zip [1..]
	g (ln, st)	= show ln ++ " " ++ st
```
Railsでcookieが使えなくなってハマった時は


Gemfileのなかに[rails-api](https://github.com/rails-api/rails-api)が入ってないか確認しましょう。
不要であれば削除するか、`config.api_only`を`false`にすれば良いみたいです。
(参考: https://github.com/plataformatec/devise/issues/3143)

めちゃくちゃハマった....
cocos2d-x 3.2 + Cocosbuilder 3.0-alpha5 でのCallback指定

# 再生完了時のコールバック設定

<pre>
auto ccbr = new ::cocosbuilder::CCBReader();
ccbr->getAnimationManager()->setAnimationCompletedCallback(target, selector);
</pre>

target, selector にコールバックの関数を指定する。

(CCBReaderを扱うオブジェクトに`CCBAnimationManagerDelegate`を継承させ、`ccbr->getAnimationManager()->setDelegate(継承オブジェクト)`とする方法もある）


# TimelineのCallbacksで設定したコールバックの設定

### 三行結論

* 本来のやり方では、CCBReaderを扱うオブジェクトが`CCBSelectorResolver`を継承する必要があり、望ましくない
* `JS-Controlled`が設定されている場合は文字列をキーとして関数が登録できる
* cocosbuilder関連のコードを改変し、`JS-Controlled`が設定されていなくても文字列をキーとして関数を登録できるようにする

### （本来の）実装の仕方

CCBReaderを扱うオブジェクトが`CCBSelectorResolver`を継承し、以下のコールバック用の関数
  * `onResolveCCBCCCallFuncSelector` (TimelineのCallbacksに設定したコールバック)

を定義することで実装する。

ちなみに・・・。
このResolverは、MenuおよびCCControl用のコールバック
  * `onResolveCCBCCMenuItemSelector` (Menuのクリックに対するコールバック) 
  * `onResolveCCBCCControlSelector` (CCControlに対するコールバック)

も持つ。

### 問題の提起

コールバックのためだけに`CCBSelectorResolver`を継承したくない。
単純に「文字列をキーとして関数を登録する」だけが望ましい。

### 問題の補足

ここで、実はCocosbuilderの設定を`JS-Controlled`にした場合、以下の様に文字列をキーとしてコールバック関数を登録できる。

<pre>
ccb_reader->getAnimationManager()->setCallFunc(
    CallFunc::create(CC_CALLBACK_0(selector, target)),
    "key"
);
</pre>

### コード改変

`JS-Controlled`設定と同様の処理を、非設定の方でも行うようにする。

https://gist.github.com/tttreal/e9e3bcc5e37a9e24d53b#file-ccbanimationmanager-cpp-L659-L717

### 使い方の例

ヒットエフェクトのアニメーションにおいて、アニメーションの途中で敵がダメージを受ける演出を行うタイミングを指定をしたい。


* CocosbuilderでのCallbacks指定

![ccb_ss.png](https://qiita-image-store.s3.amazonaws.com/0/31118/1a44f105-8cc5-91e8-23dd-01ef4fe830dd.png))

(option + クリックで登録可能)

任意のタイミングで
`キー: damage`
を登録する

* コード

<pre>
ccb_reader->getAnimationManager()->setCallFunc(
    CallFunc::create(CC_CALLBACK_0(Battle::damageToEnemy, this)),
    "damage"
);
</pre>


# 補足

* `cocos2d-x`および`Cocosbuilder`のバージョンが違っても問題ない可能性があります（未検証）
Elixir Comprehensions(内包表記) generator and filter

# Elixir Comprehensions(内包表記) generator and filter

## 概要
Elixir の Comprehensions(内包表記) generator and filter について。

数列など、各要素に対する処理を記述するジェネレータは以下の様に記述できます。

~~~
seq = 1..5
for n <- seq, do: n + 1
# => [2, 3, 4, 5, 6]
~~~

この際、フィルタを利用して要素を絞ることができます

~~~
seq = 1..5
for n <- seq, n > 2 , do: n + 1
# => [4, 5, 6]
~~~

## generator and filter の例

~~~
defmodule Hoge do
  def hoge do
    IO.inspect for n <- ["hOgE", "hIgE", "hAgE"], do: String.upcase(n)

    values = [ok: "hOgE", ok: "hIgE", ng: "hAgE"]
    # パターンマッチで ok のみを対象とする
    IO.inspect for {:ok, n} <- values, do: String.upcase(n)

    values = ["hOgE", "hIgE", "hAgE"]
    # フィルタで I を含むもののみを対象とする
    IO.inspect for n <- values, String.contains?(n, "I") , do: String.upcase(n)
  end
end

Hoge.hoge
~~~

* 出力

~~~
["HOGE", "HIGE", "HAGE"]
["HOGE", "HIGE"]
["HIGE"]
~~~

## 参照
* http://elixir-lang.org/getting_started/18.html#18.1-generators-and-filters
Vagrant + Chef で WindowsにRails環境構築

Berkshelfが公式にWindowsにも対応してたので、WindowsでRailsをするためにVagrant + Chef で環境構築してみた。

## 必要なもの

・Chef-dk
・knife-solo
・Vagrant(+Virtualbox)
・cygwin(基本パッケージ + ssh と rsync)
・git (Windowsのパッケージ版。cygwinのだとBerkshelfと相性悪い。)

## インストール方法

・ダウンロードしてきてダブルクリックするだけのやつは適当にします。
・`knife-solo`は`$ chef gem i knife-solo` でいれる。
・`git`は`Chocolatey`を使うと楽に入れれる。
・cygwinの`ssh`の設定ファイルを読み込むように `/etc/passwd` の中の `/home/user` を `/cygdrive/c/Users/user`に変えておく。

## Vagrant の初期設定

```
vagrant init ubuntu/trusty64
```
でVagrantfileを作って、port forwarding だけしとく。

```Vagrantfile
...
config.vm.network "forwarded_port", guest: 3000, host: 8080
...
```

Vagrantfileにchefの設定を色々書く方法もあるけど、それだとローカルモードで自分自身にレシピを適用させるときやVPSにあてるときに使えないので私は使いません。

あとは`ssh trusty`で繋げるように`ssh-config`を保存しとく。

```
$ vagrant ssh-config --host trusty >> ~/.ssh/config
```

## Chef の設定

適当なフォルダを作ってその中に`Berksfile`を作る。

```Berksfile
source "https://api.berkshelf.com"

cookbook 'apt'
cookbook 'rbenv'
cookbook 'ruby-rails-wrapper', github: "ironsand/cookbook-ruby-rails-wrapper"
```

インストールするRubyのバージョンとかを変えたいとか他のgemを入れたいときは、この`ruby-rails-wrapper`の中で指定してるので適当に変えて使ってください。

あと`runlist`を指定する json ファイルがいるので作る。

```nodes/trusty.json
{
  "run_list": [
        "apt",
        "rbenv",
        "ruby-rails-wrapper"

  ]
}
```

これで準備ができたのであとは`$ knife solo cook trusty` とするだけで設定が終わります。

エラーなく動き始めたら時間がかかるのでしばらく放置しておきましょう。

## 動作確認

ちゃんと動いてるか確認するために`ssh trusty`してから

```
$ rails new foo
$ cd foo
$ bundle install
$ bundle exec rails s
```
でWebrickサーバーを立ち上げて、ホスト側のWindowsのブラウザで`localhost:8080`を開いてRailsの初期画面が出てたら設定完了です！

かなり短くしたつもりなのにそれでもなげえなあ…。

Chefは全然わかってない部分が多々あるので色々と指摘いただけると嬉しいです。
VMware toolsがダウンロードできなくなった？

VMwareを久しぶりに起動したら共有フォルダにアクセスできなくなって、え？え？ってなってたんですが、調べてみると、VMware toolsを再インストールすればよいらしい。

ということで再インストールしようと、「Player>管理>VMware Toolsのインストール」と進んでOKを押して待っていたら、今度はいつまでだっても「ダウンロードしています」で止まってしまいました。

散々調べて悩んだ結果分からず、ふと「そういえばインストールとかするなら管理者権限いるのでは」と思ったら、それが正解で**単にVMware toolsを再インストール（ダウンロード）するには管理者として実行する必要がある**というだけでした。

無駄に1時間使ってしまった・・・。
OutlookVBAでRedmineへRestAPI経由でチケット登録する例

Exchange環境でメールからRedmineへチケット自動追加をしたいと思ったが、なかなか既存の情報からはうまくいかず、OutlookVBAで直接RedmineのRestAPIをたたいてチケット追加を試してみた。

まずは、RedmineでRestAPIを有効化する。
「管理」→「設定」と進み、「RESTによるWebサービスを有効にする」をチェック
![01API有効化.png](https://qiita-image-store.s3.amazonaws.com/0/48177/b15814d8-a26e-b5bd-98c9-6f71b36c0a79.png)

そのあと、個人設定へ移り右側のAPIアクセスキーの「表示」リンクを押して、キーを取得しておく。
![02APIキー取得.png](https://qiita-image-store.s3.amazonaws.com/0/48177/f3ed91db-07b9-8a4f-ea3b-76a56b1590a7.png)

Outlookで書いたVBAマクロは以下の通り

```vbnet:CustomRuleMakeTicket.vb
Option Explicit

Const REDMINE_API_KEY = "<上記で取得したAPIキー>"
Const REDMINE_URL = "http://localhost/redmine" '対象RedmineへのURL

Const PROJECT_ID = 1

Public Sub CustomRule_MakeTicket(Item As Outlook.MailItem)
    Dim ReqStatus

    ReqStatus = PostIssue(Item.Subject, Item.Body)

    If ReqStatus <> False Then
        MsgBox "登録成功"
    Else
        MsgBox "登録失敗"
    End If
End Sub

' PostIssue - Redmineにチケットを登録する
'
' [引数]
' Subject:  チケットの題名
' Body:     チケットの内容
'
' [戻り値]
' True:  成功
' False: 失敗
'
Function PostIssue(Subject As String, Body As String)
    Dim xhr
    Dim RequestURL As String
    Dim RequestBody As String
    Dim bPmary() As Byte

    RequestURL = REDMINE_URL & "/issues.xml?format=xml&key=" &
REDMINE_API_KEY

    Set xhr = CreateObject("Microsoft.XMLHTTP")
    xhr.Open "POST", RequestURL, False
    xhr.SetRequestHeader "Content-Type", "text/xml"

    RequestBody = "<?xml version=" & Chr(34) & "1.0" & Chr(34) & "?>"
    RequestBody = RequestBody & "<issue>"
    RequestBody = RequestBody & "<project_id>" & PROJECT_ID & "</project_id>"
    RequestBody = RequestBody & "<subject>" & Subject & "</subject>"
    RequestBody = RequestBody & "<description>" & Body & "</description>"
    RequestBody = RequestBody & "</issue>"

    xhr.Send (RequestBody)

    If xhr.Status = 201 Then
        PostIssue = True
    Else
        PostIssue = False
    End If

End Function
```

上記のマクロを登録しておき、Outlookの振り分けルールでスクリプトを実行するアクションを定義し、上記のマクロを指定すれば自動でチケット登録ができるはず
Emacsインストール/設定

# インストール

```
brew uninstall emacs 

brew update

brew install --with-gnutls --japanese emacs
```


以下を実行するとApplicationsにAliasが作成される
```
brew linkapps
```
# 設定

設定ファイルを作成

```
emacs ~/.emacs.d/init.el

```

ターミナルの環境設定... ＞ 設定 ＞ キーボードの中にある「メタキーとして option キーを使用」をチェック

control + spaceを無効化
システム環境設定で「キーボードとマウス」-「キーボードショートカット」で「Spotlight検索フィールドを表示する」のチェックを外す


[今使ってる設定ファイル](https://github.com/saito400/dotfiles/blob/master/.emacs.d/init.el)




# Mac+iterm2でoptionキーをMetaキーとして使う場合

iterm -> Preference -> Profiles -> Keys -> Left option key acts as "+Esc"
設定ファイルに以下を追加
```
(setq mac-option-key-is-meta t)
```

# MELPAからインストールしたパッケージを更新
```
M-x list-packages [RETURN] U [RETURN] x [RETURN]
```
swiftでjson取得

---
とりあえず1階層目の値をDictionaryにして取り出す。ボタンのクリックイベントに実装。

```ViewController.swift
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var textview: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func button1(sender: AnyObject) {
    
        
        //
        let URL = NSURL(string: "http://www.bluecode.jp/test/stock/price.php")
        
        let jsonData :NSData = NSData(contentsOfURL: URL)
        let json :Dictionary = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: nil) as NSDictionary
        
        var price:String
        
        price = json["price"] as NSString
        
        textview.text = price
        
        
    }

}
```
ajax login with django-allauth and django-angular

# django apps

* https://github.com/pennersr/django-allauth
* https://github.com/jrief/django-angular

# 問題点

以下、sampleのようにすれば一応動くが問題がある。

* POSTでサーバのvalidation errorとなった場合、`$scope.form`の各値が`undefined`になってしまい正しく取得出来ない。

# sample

```py3:forms.py
from allauth.account import forms

from djangular.forms import NgFormValidationMixin, NgModelFormMixin
from djangular.styling.bootstrap3.forms import Bootstrap3FormMixin


class LoginForm(NgModelFormMixin, NgFormValidationMixin, Bootstrap3FormMixin, forms.LoginForm):
    form_name = 'login_form'
    scope_prefix='form'
```

POST後のサーバエラー時はdjangoForm.setErrors()でセットするのだが問題がある。
この内部では`$setValidity('rejected', false)`としていて`$error`が設定される。
しかし、`$error`があると`$scope.form`の各値がundefinedになってしまい正しく取得出来ない。

ユーザが入力したら`$error`を取り除きたいらしいが、`$error`がある場合は`$viewChangeListeners`が呼ばれないので取り除くのに失敗している。
`$setValidity('rejected', false)`は不要じゃないかと思われる。

```js:app.js
     angular.module('app', ['ng.django.forms']).config(function($httpProvider) {
       $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
       $httpProvider.defaults.headers.common['X-CSRFToken'] = '{{ csrf_token }}';
     }).controller('ctrl', function($scope, $http, $window, djangoForm) {
       $scope.submit = function($event) {
         if($scope.form){
           $http({
             method: 'POST',
             url: $scope.action,
             headers: {'Content-Type': 'application/x-www-form-urlencoded'},
             transformRequest: function(obj) {
               var str = [];
               for(var p in obj)
                 str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
               return str.join("&");
             },
             data: $scope.form
           }).success(function(d) {
             //$window.location.href = d.location;
             console.log(d);
           }).error(function(d) {
             if(typeof d == 'object' && 'form_errors' in d){
               console.log(d);
               djangoForm.setErrors($scope.login_form, d.form_errors);
             }
           });
         }
       };
     });
```

formのPOST先を`$scope`へ入れる。

```html:top.html
<form name="{{ form.form_name }}" class="login" method="POST" ng-init="action = '{% url 'account_login' %}'" novalidate ng-controller="ctrl" ng-submit="submit()">
```
SwiftとObjective-Cでenumの相互利用

## SwiftでObjective-Cのenumを使う

enumではなく、NS_ENUM()またはNS_OPTIONS()で定義する。

```objc:ColorType.h
#import <Foundation/Foundation.h>
typedef NS_ENUM(NSUInteger, ColorType) {
    ColorTypeRed,
    ColorTypeGreen,
    ColorTypeBlue,
    ColorTypeAlpha,
};
```

Swiftで利用するために、ヘッダファイルをBridging Headerでimportする。

```objc:Bridging-Header.h
#import "ColorType.h"
```

Build SettingsでBridging Headerの指定を忘れずに。

![BuildSettings_BridgeingHeader.png](https://qiita-image-store.s3.amazonaws.com/0/26040/cba3c0ec-c751-d4c0-3c2a-7873ac2e9492.png)


Swiftのenumと同様に使える。

```swift:AnyClass.swift
class AnyClass {
    func test(type: ColorType) {
        switch type {
        case .Red:
            NSLog("Red");
        default:
            NSLog("Others");
        }
    }
}
```

## Objective-CでSwiftのenumは使えない

- 参考 > [Using Swift from Objective-C](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_85)
ubuntu

#first setup
##How to make caps lock key to ctrl key
http://askubuntu.com/questions/444714/how-do-i-swap-escape-and-caps-lock-in-14-04

##How to input japanese in ubuntu
http://symfoware.blog68.fc2.com/blog-entry-1397.html

##change keybord assignment
http://www.server-world.info/query?os=Ubuntu_14.04&p=keymap

#middleware install
##install hipchat
https://www.hipchat.com/downloads

##install nvm
https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-an-ubuntu-14-04-server
https://github.com/creationix/nvm

##install openstack
http://gihyo.jp/admin/serial/01/ubuntu-recipe/0341

If "unauthorized please try logging again openstack instance" message appeared while creating instance with dashboard. Select only ubuntu network.
GnuTLSライブラリを使ったスタティックなFFmpegの作り方＆【質問】Mavericksで古いOS対応のバイナリを作る方法

##書きました。
[GnuTLSライブラリを使ったスタティックなFFmpegの作り方＠Mac - 別館 子子子子子子（ねこのここねこ）](http://d.hatena.ne.jp/riocampos+tech/20141013/how_to_install_static_ffmpeg_with_gnutls_on_os_x)
書き写すのが面倒（というかまとめられない）なので、上記リンクからのはてなダイアリーをご覧ください。
##質問
Mavericks で Leopard や Lion などの古い OS 向けのバイナリを作る方法が分からないです。
`-mmacosx-version-min` とか `-isysroot` とかを使うとかいう情報を見かけたのですが、よく分かりません。
もしご存じの方が居られましたら、ヒントでも結構ですのでお教えください。
（CFLAGS とか LDFLAGS とか分かってないのがよろしくないです、ええ。）
CSSでのwidth指定ではみ出る場合の原因と対応について

## 原因

widthは内容(Content)だけに適用される。 実際の横幅は Content, Padding, Border の幅合計になる。

widthに100%且つPaddingかBorderがサイズ指定されている場合などは横幅が親より大きくなる。


## 対応策

CSSの box-sizing プロパティを設定することで、width算出挙動を指定することができる。

先述のプロパティに border-box を指定することで、widthが実際の横幅になる。(Content幅は width - Padding + Border になる)

※border-sizingはIE8から利用可能。今ならたいていの場面で使用可能なはず。


## 確認用HTML

http://jsfiddle.net/hmhvs9p7/

```html
<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>SizeBoxing</title>
    <style>
        .container{
            width: 600px;
            height: 120px;
            border: 1px solid #000;
            background: #b6ff00;
            margin: 0 auto;
            margin-top: 50px;
        }

        .box1{
            width:100%; /* "Content"を親のWidthと同じ(600px)にする */
            background:#ff6a00;
            padding: 10px;
        }

        .box2{
            width:100%; /* "Content"+"border"+"padding" を親のWidthと同じ(600px)にする */
            background:#0f30ce;
            color: #f8f7f7;
            padding: 10px;
            box-sizing: border-box;
            border: 2px solid #ff0000;
        }

    </style>
</head>
<body>

    <div class="container">
        <p>はみ出る</p>
        <div class="box1">あああああああああああああああああああああああああああああああああああああああああああああ</div>
    </div>

    
    <div class="container">
        <p>はみ出ない</p>
        <div class="box2">いいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいい</div>
    </div>

</body>
</html>
```

## 参考資料

+ http://ginpen.com/2012/12/05/css-box-model/
+ http://caniuse.com/#search=box-sizing