OmniAICreator/Qiita-1.07M huggingface dataset:
Ractive.jsのテンプレートに外部ファイルを使用する

> ここを読んだほうが早い
> 
> * https://github.com/ractivejs/ractive/issues/131

***

## サンプルはこれ

( ＾ω＾) ここに [公式 60-second-setup](http://www.ractivejs.org/60-second-setup) があるじゃろ？

### ( ＾ω＾) これを…

```html:index.html
<div id='container'></div>

<script id='template' type='text/ractive'>
  <p>Hello, {{name}}!</p>
</script>

<script src='http://cdn.ractivejs.org/latest/ractive.min.js'></script>

<script>
  var ractive = new Ractive({
    el: 'container',
    template: '#template',
    data: { name: 'world' }
  });
</script>
```

### ( ＾ω＾) こうじゃ

```html:hello.html
<p>Hello, {{name}}!</p>
```


```html:index.html
<div id='container'></div>

<!-- これは不要
<script id='template' type='text/ractive'>
  <p>Hello, {{name}}!</p>
</script>
 -->

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src='http://cdn.ractivejs.org/latest/ractive.min.js'></script>

<script>
  $.get('hello.html').then( function(template) {
    var ractive = new Ractive({
      el: 'container',
      template: template,
      data: { name: 'world' }
    });
  });
</script>
```

以上
今日遭遇したReactのバグっぽかった挙動

## 問題
突然onClickが発火しなくなった

## 解決
内部に複数のバージョンのReactが存在しており、v0.12.1でReact.createElement(...) したvdomをv0.12.0のReact.renderで描画させると成功したようにみえるもハンドラが発火しなかった。


いや、まあバグというにも僕のミスっぽいけど、webpackつかっていて、諸事情でpackage.jsonが複数存在する小さなモジュールに分割しており、複数のReactが存在すると、昔と違って複数のjqueryがグローバルで衝突するという問題は起こらないけど、まあ普通はこういうことやっちゃだめですね。


当たり前っぽいけど僕はこの特定に4時間費やしたということだけを書き残しておきます
俺のconsulがこんなに仮想メモリを食う訳が無い

あまりにショックだったので釣りタイトルになってしまった...

[consul](https://github.com/hashicorp/consul) の検証をしようと、ちょっくらバイナリを落としてサーバを立ち上げようとしたら以下のようなエラーになった。

```shell-session
[root@manage001 /]# consul agent -server -bootstrap -data-dir /var/consul/data
==> WARNING: Bootstrap mode enabled! Do not enable unless necessary
==> WARNING: It is highly recommended to set GOMAXPROCS higher than 1
==> Starting Consul agent...
fatal error: unexpected signal during runtime execution
[signal 0xb code=0x1 addr=0x98 pc=0x40559a]

runtime stack:
runtime: unexpected return pc for runtime.sigpanic called from 0x40559a
runtime.throw(0x1063e05runtime/cgo: out of memory in thread_start
)
        /opt/go/src/pkg/runtime/panic.c:520 +0x69
runtime: unexpected return pc for runtime.sigpanic called from 0x40559a
runtime.sigpanic()
        /opt/go/src/pkg/runtime/os_linux.c:222 +0x3d

goroutine 16 [syscall]:
runtime.cgocall(0x403ad0, 0x7f3abb3f4050)
        /opt/go/src/pkg/runtime/cgocall.c:143 +0xe5 fp=0x7f3abb3f4038 sp=0x7f3abb3f3ff0
github.com/armon/gomdb._Cfunc_mdb_env_open(0x1492c30, 0x1491170, 0x1ed00200000, 0x0)
        github.com/armon/gomdb/_obj/_cgo_defun.c:232 +0x31 fp=0x7f3abb3f4050 sp=0x7f3abb3f4038
github.com/armon/gomdb.(*Env).Open(0xc2080363b8, 0xc2080358e0, 0x19, 0x200000, 0x1ed, 0x0, 0x0)
        /opt/gopath/src/github.com/armon/gomdb/env.go:88 +0xa6 fp=0x7f3abb3f4090 sp=0x7f3abb3f4050
github.com/hashicorp/raft-mdb.(*MDBStore).initialize(0xc208035960, 0x0, 0x0)
        /opt/gopath/src/github.com/hashicorp/raft-mdb/mdb_store.go:84 +0x10d fp=0x7f3abb3f4168 sp=0x7f3abb3f4090

```

怖!!! なんだこれ...

よく見ると `out of memory` と書いてある。いやいやメモリ普通に1GBぐらいは空いてますから...、と思って同僚氏（というか @hiboma さん）のアドバイスに従い `sysctl -w vm.overcommit_memory=0` した（`vm.overcommit_memory=2` だったので）。

### 立ち上がった様子

一応これで立ち上がったが、そんなにメモリ使うの...??

```shell-session
[root@manage001 ~]# ps alx | grep -e consul -e RSS
F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
0     0  7494  7294  20   0 107456   952 pipe_w S+   pts/2      0:00 grep -e consul -e RSS
4     0 24991 24687  20   0 42447616 11892 epoll_ Sl pts/0      0:01 /usr/local/bin/consul agent -server -bootstrap -data-dir /var/consul/data
```

フーン 12MB ぐらいか〜と思って見逃していたがVSZが半端無い。仮想メモリを40GB（4GBではない）近く要求している......それは、 `vm.overcommit_memory=2` では立ち上がらんやつですね...。

### なんでこうなってるの

理由は[公式FAQ](https://www.consul.io/docs/faq.html)にあって、雑に言うとLMDBのパフォーマンスをアジャイルに最大化するため大量にバッファしているもよう。`in practice`ではそんなに使わないよって言われても...

具体的には、以下の箇所でハードコードしている容量を確保する（これも hiboma さんが見つけたんですが...）。

* https://github.com/hashicorp/consul/blob/master/consul/server.go

```go:server.go
const (
    //...
    raftDBSize64bit uint64 = 8 * 1024 * 1024 * 1024 // Limit Raft log to 8GB
)
```

* https://github.com/hashicorp/consul/blob/master/consul/state_store.go

```go:state_store.go
const (
    //...
    dbMaxMapSize64bit uint64 = 32 * 1024 * 1024 * 1024 // 32GB maximum size
)
```

なので **設定できない** 。設定できるようにPRでも出せば良いだろうけど、なんか、設定無しで動くよ！と言うのが大事な気もするのでなんとも。

### まとめ

* consul server はガツっとメモリを用意しとく、もしくは `vm.overcommit_memory=0` で...良いと思う...
* consul client はこんなに気合いの入ったmmapはしない模様。

### 参考記事（とてもタイムリー）

* [64bit時代のバッファ処理](http://blog.kazuhooku.com/2014/12/64-bit.html)
Express Windows7にインストール

一通りnode.jsをいじってみたのでExpressを入れてみる。


```bash
npm install -g express

npm install -g express-generator
```

2行目のコマンドを忘れるとexpressコマンドが使えないから注意。

インストールが完了したら、アプリケーションを作成したいディレクトリに移動する。
（ちなみにwindowsだけどgit bushでコマンド打っている）


```bash
cd /c/web
```

移動後にexpressコマンドでアプリケーションを作成してみる。

```bash
express app
```

/c/web配下にappディレクトリが出来上がる。
コマンドログの最後に以下のように表示される。


```text
# コマンドログ
install dependencies:
  $ cd app && npm install

run the app:
  $ DEBUG=app ./bin/www
```

./bin/wwwあるしもうrunできんの？と思って実行したら依存ファイルが無いと怒られるので言われたとおりにする。

```bash
cd app

npm install
```

npm installのコマンドログを見ると何が入ったかわかる。


```text
# コマンドログ
debug@2.0.0 node_modules\debug
└── ms@0.6.2

cookie-parser@1.3.3 node_modules\cookie-parser
├── cookie@0.1.2
#省略

serve-favicon@2.1.7 node_modules\serve-favicon
├── fresh@0.2.4
#省略

morgan@1.3.2 node_modules\morgan
├── basic-auth@1.0.0
#省略

express@4.9.8 node_modules\express
├── range-parser@1.0.2
#省略

body-parser@1.8.4 node_modules\body-parser
├── raw-body@1.3.0
#省略

jade@1.6.0 node_modules\jade
├── character-parser@1.2.0
#省略

```

さて、いよいよ実行

```bush
node ./bin/www

#こっちでもOK
npm start
```

npm startはappディレクトリにある「app.js」から関連ファイルを遡って、
./bin/wwwを見つけ出して実行してるだけかな。

デフォルトポートの3000にアクセス。⇒ http://localhost:3000

Welcom to Express

と表示されればOK。
Writing Lua on Mac

#Install lua on mac

I'm not sure that whether Lua is built on mac originally.

(Ok, tested on Mac OSX 10.9, there is Lua in it.)

So I installed Lua via Homebrew.

##Install homebrew (optional)

```bash
$ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
```

##Install Lua by homebrew

```bash
$ brew install lua
```

#Writing Lua

You can use command: lua to interact with lua. (just like php -a or irb)

```lua
print("Hello World")
```


```lua
function fact(n)
  if n == 0 then
      return 1
  else
      return n * fact(n-1)
  end
end

print("enter a number:")
num = io.read("*number")
print(fact(num))
```
PHPでカレンダー出力

PHPだと1日の曜日とか月末をdate()関数で一発で取ってこれるのが味噌
strtotime()も強い

```php:cal.php
<?php
$col_width = 3;
$title_format = '-*- Y-m -*-';

// 引数がない場合は今月
$ts = strtotime("first day of");
if (isset($argv[2])) {
    $ts = strtotime("first day of {$argv[1]}-{$argv[2]}");
}
list($y, $m, $t, $w) = explode(',', date('Y,m,t,w', $ts));
// title
$title = str_replace(array('Y', 'm'), array($y, sprintf('%2d', $m)), $title_format);
echo str_repeat(' ', ($col_width * 7 - strlen($title)) / 2) . $title . PHP_EOL;
echo str_repeat(' ', $w * $col_width);
for ($i = 1; $i <= $t; $i++) {
    echo sprintf("%{$col_width}d", $i);
    if (($w + $i) % 7 == 0) {
        echo PHP_EOL;
    }
}
echo PHP_EOL;
```

出力

```shell-session
   -*- 2014-12 -*-
     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

```
初期画面のページング表示でページ数を動的に変えてみよう！


この記事はWatchKit Advent Calendar 17日目の記事です。

WatchKitアプリでは、写真アプリのように、横にスワイプして一つづつ画面を表示するページング表示が作れます。

## 初期画面でページングする

NDAの関係でスクリーンショットを用いて説明できないのが心苦しいですが、
Watch Appのストーリーボードでも、iOSアプリのストーリーボードと同様cmd+ドラッグアンドドロップで
InterfaceController同士をSegueを繋げられます!

ボタンなどのタッチUIからSegueを引くとPush or Modalの遷移がヒントとして出てきますが、
それ以外の部分でSegueをつなぐとNext Pageというヒントが出てきます。
これを選択することで、初期画面でページングUIが作れます。
３ページ以上にしたい場合はNext Pageで繋がった最後のInterfaceControllerから更に別のInterfaceControllerへNext Page Segueをつなぐだけです。

## 初期画面のページ数を動的に変える
このようにストーリーボードで、初期画面のページングUIを作ることはできるのですが、beta1ではこの数を後から動的に変更できませんでした。

beta2で新たに`WKInterfaceController.reloadRootControllersWithNames(names:contenxts:)`クラスメソッドが追加され、ついに初期画面でも動的にページ数を変更できるようになりました。

使い方は`presentControllerWithNames(names:contexts:)`メソッドとほぼ同じです。
ストーリーボードでInterfaceControllerにIdentifierを設定しておき、第一引数のnamesでそのidentifierの配列を表示する要素数分指定します。第二引数にはそれぞれに渡したいcontextをnamesと同じ要素数の配列で渡します。
すると初期画面がリロードされ、指定した分のページが表示されます。

この`reloadRootControllersWithNames`メソッドで要素を１つだけ指定しても、表示の最下部にページングコントロール(白い丸)が表示されるので、このメソッドを呼ぶと強制的にページングUIになるようです。

## 徐々にやれることは増えてる？
beta1からbeta2にかけて、本体アプリと連携する機能が増えたりと、少しずつですが改善されています。
正式リリースまで、どこまでbetaが進むのかわかりませんが、最終的にWatchKitはどのようなものになるのでしょうか。
引き続き追っていきたいと思います。


## P.S.
誠に恐縮ながら、この度縁がありまして、Swiftの本を執筆させていただきました！

[![swift_mynavi.jpeg](https://qiita-image-store.s3.amazonaws.com/0/32525/5e588efb-d92c-7ae8-3825-35443bd51334.jpeg "開発のプロが教える Swift標準ガイドブック")](http://www.amazon.co.jp/dp/4839953546)
**[開発のプロが教える Swift標準ガイドブック](http://www.amazon.co.jp/dp/4839953546)**

この本は、Swiftの文法に始まり、Optional型の説明、UIKit・Foundationの利用やObjective-CからSwiftへの移行など盛りだくさんで、実践で使えることをテーマに詰め込みました！

WatchKitアプリを作る際には、ついでにSwiftにもチャレンジする良いきっかけかなと思います。是非一度手にとっていただきたいと思います。

12月25日発売なので来週木曜日、クリスマス発売です！

クリスマスに **[開発のプロが教える Swift標準ガイドブック](http://www.amazon.co.jp/dp/4839953546)** をどうぞよろしくお願いします！
EXCELのVBAマクロでOutlookメールを作成する方法

決められたフォーマットでOutlookメールを自動生成したい場合に参考にしてください。

```MakeMail
Option Explicit

'#########################################
'
' 関数名:MakeMail
' パラメータ:
'   toAddress(String):宛先アドレス
'   ccAddress(String):CCアドレス
'   bccAddress(String):BCCアドレス
'   subject(String):件名
'   mailBody(String):本文
'   credit(String):メール末尾の署名文
'   replaceList(Object[Scripting.Dictionary]):件名と本文の置換リスト
' 説明:
'   入力パラメータを基にOutlookメールを作成する。
' 備考:
'   replaceListはディクショナリで{<%start_date%>, '20141217'}のような
'   データが入るイメージ
'
'#########################################
Sub MakeMail(toAddress As String, _
             ccAddress As String, _
             bccAddress As String, _
             subject As String, _
             mailBody As String, _
             credit As String, _
             replaceList As Object)

    On Error GoTo ErrHandler
    
    'メール作成に必要なOutlookオブジェクトを生成する
    Dim outlookObj As Outlook.Application
    Dim mailItemObj As Outlook.MailItem
    Set outlookObj = CreateObject("Outlook.Application")
    Set mailItemObj = outlookObj.CreateItem(olMailItem)
    
    'メール情報の設定
    mailItemObj.To = toAddress
    mailItemObj.CC = ccAddress
    mailItemObj.BCC = bccAddress
    mailItemObj.subject = subject
    
    Dim tmpSubject As String
    tmpSubject = subject
    
    Dim tmpMailBody As String
    tmpMailBody = mailBody & credit
    
    Dim key As Variant
    Dim value As Variant
    
    '件名を置換する
    For Each key In replaceList
        value = replaceList.Item(key)
        tmpSubject = Replace(tmpSubject, key, value)
    Next key
    
    'メール本文を置換する
    For Each key In replaceList
        value = replaceList.Item(key)
        tmpMailBody = Replace(tmpMailBody, key, value)
    Next key
    
    mailItemObj.subject = tmpSubject
    mailItemObj.Body = tmpMailBody
    
    '下書き保存(保存したければコメントを外す)
    'mailItemObj.Save
    'メール表示
    mailItemObj.Display
    
    'オブジェクトの解放
    Set mailItemObj = Nothing
    Set outlookObj = Nothing
    
    Exit Sub

' 例外処理
ErrHandler:

    Set mailItemObj = Nothing
    Set outlookObj = Nothing
    
    MsgBox "メール作成時に例外発生"

End Sub
```

以上
コピペで動く。bootstrap-daterangepickerの導入と日本語化

※ 2016/3/10に更新しました。

日付を範囲で選択する場合に便利なbootstrap向け、日付のピッカーです。ライセンスはMITです。

https://github.com/dangrossman/bootstrap-daterangepicker

使い方とオプションの説明はこちらをご確認下さい。

http://www.daterangepicker.com/

この導入と日本語化を行ったのでそのメモ書きです。

jqueryとbootstrapに依存しているので、これらを先に読み込みます。bootswatchになっている箇所は環境に合わせて置き換えてください。

```html
<!-- jquery -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script>
<!-- bootstrap -->
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootswatch/3.3.0/cosmo/bootstrap.min.css" />
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
```

次にmomentを使っているので、それを読み込みます。momentには日本語ファイルも付いているのでそれを利用します。

http://momentjs.com/

```html
<!-- moment -->
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.2/moment.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.2/locale/ja.js"></script>
```
CDN URL: https://cdnjs.com/libraries/moment.js/

次に本題のbootstrap-daterangepickerを読み込みます。

```html
<!-- daterangepicker -->
<link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/bootstrap-daterangepicker/2.1.18/daterangepicker.min.css" />
<script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-daterangepicker/2.1.18/daterangepicker.min.js"></script>
```
CDN URL: https://cdnjs.com/libraries/bootstrap-daterangepicker

これでファイルの読み込みは完了しました。次にbootstrap-daterangepickerを初期化します。@current_date_rangeとある部分は、inputに入る初期値ですので置き換えて下さい。

```js+erb

    $(document).ready(function() {
      $('#daterange').daterangepicker({      
        startDate: '<%= @current_date_range.first.strftime("%Y-%m-%d") %>',
        endDate: '<%= @current_date_range.last.strftime("%Y-%m-%d") %>',
        format:'YYYY/MM/DD',
        showDropdowns: false,
        ranges: {
          '直近30日': [moment().subtract('days', 29), moment()],
          '今月': [moment().startOf('month'), moment().endOf('month')],
          '先月': [moment().subtract('month', 1).startOf('month'), moment().subtract('month', 1).endOf('month')]
       },
       opens: 'left',
       locale: {
         applyLabel: '反映',
         cancelLabel: '取消',
         fromLabel: '開始日',
         toLabel: '終了日',
         weekLabel: 'W',
         customRangeLabel: '自分で指定',
         daysOfWeek: moment.weekdaysMin(),
         monthNames: moment.monthsShort(),
         firstDay: moment.localeData()._week.dow
       },
      },
      function(s, e){
        console.log(s)
        console.log(e)
      });
    });
```

これで日本語になっていると思います。

年月の部分が「10月 2014」と逆になっている箇所についてはオプションを与えてカスタマイズできる仕組みではなかったので、もしここも修正したい場合には以下ソースコードの688行目が該当する箇所に見えるので、ここを書き換える必要があります。

https://github.com/dangrossman/bootstrap-daterangepicker/blob/master/daterangepicker.js

```js
var dateHtml = this.locale.monthNames[calendar[1][1].month()] + calendar[1][1].format(" YYYY"); // <-- たぶんここ！
```

Admin/管理画面系で良く使われているプラグインのようで、分かりやすく使いやすいのでおススメです。

質問などあればコメントにお願いします。
君(Kotlin)は僕(Swift)に似ている

# 君(Kotlin)は僕(Swift)に似ている

こちらはKotlinアドベントカレンダーの17日目の記事です。
最近Swiftがすごく勢いがあるということで、Kotlinと比較してみることにしました

## コメント

コメントの形式は全く同じ！

* Swift

```swift
// 1行コメント

/*
 * 複数業コメント
 */
```

* Kotlin

```kotlin
// 1行コメント

/*
 * 複数業コメント
 */
```

## 変数／定数

valとletが違うぐらいで、おおよそ似てますね。

* Swift

```swift
// 変数
var christmas = "2014/12/25"

// 定数
let dinner = "のりべん"
```

* Kotlin

```kotlin
// 変数
var christmas = "2014/12/25"

// 定数
val dinner = "のりべん"
```

## クラス／メソッド

なんとKotlinはイニシャライザがクラス宣言時に盛り込まれている！  

* Swift

```swift
class Person {

    var name
    var age
    
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
    
    func outputMessage() {
        println("クリスマス爆発しろ！")
    }
}
```

* Kotlin

```kotlin
class Person(name : String, age : Int) {
   val name = name
   val age = age
   
   fun outputMessage() {
       Log.v(TAG, "クリスマス爆発しろ！");
   }
}
```

### usage

イニシャライザから呼び出しまで全く同じ

* Swift

```swift
var person = Person("もあい", 23)
person.outputMessage() // -> クリスマス爆発しろ！
```

* Kotlin

```kotlin
var person = Person("もあい", 23)
person.outputMessage() // -> クリスマス爆発しろ！
```

## for文

めちゃくちゃ似ている

* Swift

```swift
for arg in args {
    println(arg)
}
```

* Kotlin

```kotlin
for(arg: Type in args) {
    println(arg)
}
```

## タプル

ほぼ一緒！・・ではない

```
@ngsw_taro さんの指摘よりタプルは廃止になったとのことなので、
Pairによる生成に変更しました -> 2014/12/18
```

* Swift

```swift
("left", "right")
```

* Kotlin

```kotlin
Pair("left", "right")
```

# 終わりに

SwiftもKotlinもいつもコソコソ書いてるんですが、書いてて全然違和感なく  
Swift⇄Kotlinに移れます。  
まあ正直最近のモダンと言われてる言語は機能が均一化してきているので  
書き易い文法に統一されていくのは当たり前かもしれませんね。    
SwiftやっててAndroid/Javaに興味有る方はKotlinおすすめです！  
みんなで良いKotlinライフを送ろう！
bootstrapで現在のサイズの確認

# 概要
サイズによって表示されるクラスを利用します。

```html
<!-- bootstrap -->
<div class="clearfix visible-xs-block">XS</div>
<div class="clearfix visible-sm-block">SM</div>
<div class="clearfix visible-md-block">MD</div>
<div class="clearfix visible-lg-block">LG</div>
```
ファイル名一括置換

ディレクトリ内の
01.txt　999.txt 　abc.txt
というファイル名を
01_.txt　999_.txt　abc_.txt
に変更したい場合は以下。

`for filename in *.txt; do mv $filename ${filename/.txt/_.txt}; done;`


・\$filename　に　"01.txt" "02.txt" "03.txt" が代入されるループになる
・${変数名/置換前/置換後} で文字列置換
・ for A in *; do ~~ ; done; はたまに使うので暗記したい・・


（bashの文字列置換参考：http://d.hatena.ne.jp/ozuma/20130928/1380380390）
（sedで正規表現を用い置換する場合の参考：http://d.hatena.ne.jp/anmino/20091022/1256175088）
Polymer core-ajax の使い方


Polymerの[core-ajax](https://www.polymer-project.org/docs/elements/core-elements.html#core-ajax)の使い方。

まずは、index.html

```index.html
<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <script src="./bower_components/webcomponentsjs/webcomponents.js"></script>
  <link rel="import" href="my-topics.html">
</head>
<body fullbleed vertical layout unresolved>
  <my-topics></my-topics>
</body>
</html>
```

`my-topics`というCustom Elementに実際の処理を書く。JSONで、とあるサーバからデータを取得する、という想定。本当はJSONPで取りたかったんだけど、それは次回までの課題で...

```my-topics.html
<polymer-element name="my-topics" attributes="">
  <link rel="import" href="bower_components/core-ajax/core-ajax.html">
  <template>
    <core-ajax auto url="http://url.to.api/"
      handleAs="json"
      on-core-response="{{handleResponse}}"></core-ajax>
    <table id="topics">
      <tr template repeat="{{topic in topics}}">
        <td><a href="{{topic.uri}}">{{topic.title}}</a></td>
      </tr>
    </table>
  </template>
  <script>
    Polymer('my-topics',{
      handleResponse: function(ev,res){
        this.topics = res.response;
      }
    });
  </script>
</polymer-element>
```

`core-ajax`の`on-core-response`は、ajaxで取得でき時に呼ばれ関数を指定する。実際のレスポンスは、指定した関数の第2引数に格納される。実際の第1引数(ev)と第2引数(res)には次のような値が入る。

```JSON
>ev
CustomEvent {detail: Object, clipboardData: undefined, path: NodeList[12], cancelBubble: false, returnValue: true…}

>res
Object {response: Array[398], xhr: XMLHttpRequest}
```
nvm で Node.js をインストールして npm で wscat をインストールしたときの作業記録

# はじめに

`wscat` コマンドを使いたくなったので， `nvm` で Node.js をインストールして， `npm` で `wscat` をインストールしたときの記録です．

# ログ

実行環境は，

* Mac OS X 10.8.5
* Zsh 4.3.11

です．

## nvm インストール

コマンドライン一行でインストールできます．

```
~/work % curl https://raw.githubusercontent.com/creationix/nvm/v0.11.1/install.sh | bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  3329  100  3329    0     0   9205      0 --:--:-- --:--:-- --:--:-- 11639
=> Downloading nvm from git to '/Users/********/.nvm'
=> Cloning into '/Users/********/.nvm'...
remote: Counting objects: 2710, done.        
remote: Total 2710 (delta 0), reused 0 (delta 0)        
Receiving objects: 100% (2710/2710), 514.65 KiB | 95.00 KiB/s, done.
Resolving deltas: 100% (1478/1478), done.
Checking connectivity... done.
Note: checking out 'v0.11.1'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 7a423b7... v0.11.1
Deleted branch master (was 080f214).

=> Source string already in /Users/********/.zshrc
=> Close and reopen your terminal to start using nvm
```

ターミナルを閉じろと言われていますが，閉じずに次のコマンドを実行します．

```
~/work % exec zsh --login
```

## Node.js のインストール

`ls-remote` で確認できる最新のものをインストールします．

```
~/work % nvm ls-remote | tail
     v0.11.5
     v0.11.6
     v0.11.7
     v0.11.8
     v0.11.9
    v0.11.10
    v0.11.11
    v0.11.12
    v0.11.13
    v0.11.14

~/work % nvm install v0.11.14
############################################################################################### 100.0%
Now using node v0.11.14

```

## wscat のインストール

```
~/work % type npm
npm is /Users/********/.nvm/v0.11.14/bin/npm
```

この時点で `npm` を使えるようになっているので，`npm` で `wscat` をインストールします．

```
~/work % npm install -g wscat
> ws@0.4.32 install /Users/********/.nvm/v0.11.14/lib/node_modules/wscat/node_modules/ws
> (node-gyp rebuild 2> builderror.log) || (exit 0)

/Users/********/.nvm/v0.11.14/bin/wscat -> /Users/********/.nvm/v0.11.14/lib/node_modules/wscat/bin/wscat
wscat@1.0.0 /Users/********/.nvm/v0.11.14/lib/node_modules/wscat
├── tinycolor@0.0.1
├── commander@2.5.1
└── ws@0.4.32 (options@0.0.6, commander@2.1.0, nan@1.0.0)

```

## テスト

https://www.websocket.org/echo.html でテストします．

```
~/work % wscat -c wss:echo.websocket.org
[2K[Econnected (press CTRL+C to quit)
[1G[0J> [3Ghello world!
[1G[0J> [3G[2K[E< hello world!
```

大丈夫そうです．
オレオレMySQLアンチパターン：One-track Minded

# MySQLアンチパターン

社内勉強会でMySQLアンチパターンというスライドを作成しました。
基本的にはオライリーさんから出ている『SQLアンチパターン』の内容からチョイスしているのですが、1つだけオレオレアンチパターンを考えたので、せっかくなのでまとめてみました。

SpeakerDeckのリンクだけを載せるのもどうかなと思いますし。。

## アンチパターン：One-track Minded

**なんでもInnoDBなんでもInt**

### アンチパターン概要

* 全てのテーブルのストレージエンジンをInnoDBにする。
* 全ての整数型のカラムをInt型にする。

つまり、何の考えもなしに（バ◯のひとつ覚え=One-track Minded）ストレージエンジンや型を決める。

### シーン（どういう時に困るか）

* 顧客から急に全文検索機能の実装を依頼された。
* ログテーブルが肥大化して、サロゲートキー（主キー）がオーバーフローした。

＼(^o^)／ｵﾜﾀ

### デメリット（問題点）

**InnoDB**

* 全文検索が利用出来ない
* 参照処理がMyISAMに比べて遅い
* データサイズがMyISAMに比べて大きい

**Int型**

* 最高で40億桁程度”しか”格納出来ない
* データサイズが常に4バイト

銀の弾丸などない( ｰ`дｰ´)ｷﾘｯ

### 解決策

ストレージエンジンはInnoDB、整数型はIntをデフォルトとしつつ、用途に応じた選択をする。

（例）ログテーブルのストレージエンジンはMyISAM、サロゲートキーはBIGINTとする。
（例）フラグのカラムはTINYINT型とする。


### ストレージエンジン / 整数型一覧

まずは知ることから始める。

**ストレージエンジン一覧**

|種類|主な特徴| 
|:-----------:|:------------|
|InnoDB|トランザクションが利用可能<br>行単位のロック|
|MyISAM|参照処理が高速<br>全文検索が可能<br>トランザクションが利用不可|
|MERGE(MyISAM)|複数テーブルを仮想的に1つにみせる<br>巨大なテーブル向け|
|MEMORY|インメモリ<br>参照処理が高速|
|CSV|カンマ区切り<br>SQL発行可能|
|ARCHIVE|データを圧縮して保存<br>INSERTとSELECTのみをサポート|
|BLACKHOLE|内部処理なし<br>スレーブ側だけにデータを保存する|
|FEDERATED|他のMySQLサーバーと連携する<br>トランザクション利用不可|
|EXAMPLE|ストレージエンジンのテンプレート（自作用）|

**整数型一覧**

|種類|範囲|サイズ|
|:-----------:|:------------|:------------:|
|INT|2147483648から2147483647<br>符号無しの場合0から4294967295|4byte|
|TINYINT|128から127<br>符号無しの場合0から255|1byte|
|SMALLINT|32768から32767<br>符号無しの場合0から65535|2byte|
|MEDIUMINT|8388608から8388607<br>符号無しの場合0から16777215|3byte|
|BIGINT|9223372036854775808から9223372036854775807<br>符号無しの場合0から18446744073709551615|8byte|

### まとめ

InnoDBはとても優れたストレージエンジン（5.5系からデフォルトになったし）ですし、Int型も使いやすいデータ型ですので、基本的にはファーストチョイスになることは間違いありませんが、他の選択肢があることを知った上で（1秒でも）検討した上で利用してください。というお話です。


## 勉強会資料

https://speakerdeck.com/itosho525/mysqlantipatan
【Unity】YosemiteでUnity起動時エラー Opening file failed？

# 新しいMac
会社にお願いしたら新しいMacを買ってもらえることになり、
ワクワクしながら届いたのを開封してセットアップしていた所、
この問題に遭遇しましたので、メモがてら残しておきます。

・iMac 27inch Retina 5Kモデル OS Mac OS X Yosemite(10.10.1)
・Unity 4.6.0f3 , 4.6.1

# Unityをインストール
uGUIがとても便利になったUnity4.6.0f3をインストールしました。
なお、現在は4.6.1がリリースされていますが、
UnityはVersionを合わせるのが鉄則ですので、4.6.0f3を選択。

# 完了後、起動したら
こんなエラーが出ました。
![スクリーンショット 2014-12-17 15.16.00.png](https://qiita-image-store.s3.amazonaws.com/0/26453/619c3c3e-3ced-cb18-a8b8-6fd9b2016932.png)

# なんじゃこれは
まず以下のことを試しました。
・インストール失敗したかなーと再インストール
・困った時のPC再起動
・対応してないのかとUnity4.6.1をインストール→同じ結果に
etc...

色々やってみたものの、治る気配がありません。

# 解決策
回答を先に言っちゃいますと
「**Manual License Activate**」
を行った所解決しました。

1.PCのWiFiを切る、またはLANケーブルを抜き、通信できない状態で
Unityを起動

2.こんな画面が出ますので、「**Manual Activation**」を押下。
![スクリーンショット 2014-12-17 15.27.03.png](https://qiita-image-store.s3.amazonaws.com/0/26453/274d9e46-b5d4-4a22-bef1-5dfe3654888a.png)

3.この画面に進みますので、Save Licenseを押下して保存先を決めると「Unity_v4.6.0f3.alf」というファイルが出力されます。
![スクリーンショット 2014-12-17 15.27.13.png](https://qiita-image-store.s3.amazonaws.com/0/26453/00b6edec-c776-1104-11f5-1e1621f72bc4.png)

4.書かれている[Unity Manual Activate URL](https://license.unity3d.com/manual)に行き、先ほど出力したalfファイルを選択してOK
![スクリーンショット 2014-12-17 17.03.20.png](https://qiita-image-store.s3.amazonaws.com/0/26453/b520bc5d-c7cd-7ac7-1533-7ebb7f589dd8.png)

5.ライセンスを選択する画面が出ますので、自分の使いたいライセンスを選択してOK
![スクリーンショット 2014-12-17 17.04.37.png](https://qiita-image-store.s3.amazonaws.com/0/26453/c91a10ac-7c18-302a-72b9-eab2a80a04d8.png)

6.ライセンス登録が完了しますので、Download Licenseを押下すると「Unity_v4.x.ulf.txt」がDownloadされます。
![スクリーンショット 2014-12-17 17.05.40.png](https://qiita-image-store.s3.amazonaws.com/0/26453/edbe09b1-28e4-ea7b-1f3d-41abab84faa4.png)

7.**【超重要】txtからulfに拡張子を変更する**
この.txtを消して
![スクリーンショット 2014-12-17 17.07.53.png](https://qiita-image-store.s3.amazonaws.com/0/26453/6102188f-2346-ce87-3706-47ab64f84ce8.png)
.ulfを選択します
![スクリーンショット 2014-12-17 17.08.15.png](https://qiita-image-store.s3.amazonaws.com/0/26453/a0f855c9-8884-9226-59fe-8c61bc1c7cc2.png)

8.また回線を外してUnityを起動し「Manual Activation」→「Load License」でulfファイルを選択します。ここで.txtのままだと選択できませんので注意。
![スクリーンショット 2014-12-17 15.27.13.png](https://qiita-image-store.s3.amazonaws.com/0/26453/85d22196-82c7-109f-386c-4a3227601939.png)

9.ここでUnityがフリーズします(笑）

10.一度Unityを強制終了でもして一旦落とします。
その後通信回線を繋ぎ直してから起動しなおすと無事に起動できます。
![スクリーンショット 2014-12-17 17.14.43.png](https://qiita-image-store.s3.amazonaws.com/0/26453/bf7cbfc4-62a9-2df6-3fc5-c4e5900d12ef.png)

# ホッとした
流石はUnityです、こんな手段もあるんですね。
恥ずかしながら知りませんでした。
これでまたバリバリ開発できます。
フィールドとラベル


Swift では型チェックが厳密なため、テキストフィールドとラベルではテキストへのアクセスの仕方が変わってきます。
(Objective-C ではどちらも.text でアクセスできました）

UITextField の `text` プロパティは

	var text: String!
	
と定義されているのに対して、UILabel の `text` プロパティは、


	var text: String?

と定義されています。
このため、テキストフィールドのテキストを評価するときには、

	myTextField.text

で String を取り出すことができますが、テキストラベルの時には、

	myLabel.text
	
では `Optional` 型で取り出されてしまいます。従ってテキストラベルのテキストを取り出す時には、

	myLabel.text!

とする必要があります。ただし、ラベルは初期値が nil なので何も設定していない可能性があるときにはチェックが必要です。

テキストフィールド例：

	var myField = UITextField(frame: CGRectMake(0, 0, 80, 30))
	myField.text = "Wow"
	switch myField.text {
		case "Wow":
			print(myField.text)
		default:
			print("Nothing")
	}

テキストラベル例：

	var myLabel = UILabel(frame: CGRectMake(0, 0, 80, 30))
	myLabel.text = "Wow"
	switch myLabel.text! {
		case "Wow":
			print(myLabel.text!)
		default:
			print("Nothing")
	}
cygwinをインストールする時に気をつけた事

setup.exeを実行して、最低限環境を作成した時の手順。

## パッケージダウンロード先
.jpがついている物をとりあえず全部選択。
ピンポイントに選択していると、パッケージが足りなかったり、ダウンロード接続に失敗した時に初めからやり直しになってしまう。接続先を複数選んでおくと、安定してダウンロードできるので保険をかけた。

## アプリケーションを選択する時に入れたい最低限のもの。

* Baseの中のものはひととおり。
* 次のものは検索して取得しておく
 * wget
 * gawk
 * bzip2

## apt-cygのインストール
shellファイルであり、ソースが公開されているので、/usr/local/bin配下にviでコピペ作成。
その後chmod 0755 で実行権限をつけた。

これで最低限のcygwin実行環境構築が完了。
TabもCtrl+Eも別のことで使うからEmmetの展開方法をCommand+Eに変えた。[Sublimetext3]

ついにQiitaに初投稿ですー。

みなさんSublimetext使ってますかー。私はそんなに使っていません。
なのでたまーに開いたときにあれ？ってなることがあるんですね。

今回はSublimetext3にEmmetを入れてあれ？ってなったお話。
Sublimetextに釣られてきたけど、Emmetって何？って人は、うん、まあEmmet便利だから使ってみてください。

#Sublimetext3にEmmetのパッケージを入れたら困ったこと
普段から当然の欲求として

- Ctrl+Eを押したら行末へいきたい。
- Tabは日本語予測変換したい。

というのがあります。

**なんでEmmet入れるとどっちも使えなくなるん？？(半ギレ)**

ということで、空いてそうなCommand+Eにそれを割り当てることにしました。

[補足1]Ctrl+Aで行頭いきたい欲求よりもCtrl+Eで行末へいきたい欲求のほうが強いです。
[補足2]日本語の予測変換はSublimetextのデフォルトの設定ではできないので、カスタマイズする必要あります。参考URL貼っておきます。
[SublimeText3での日本語入力時Tabキーでの変換候補選択を有効にする](
http://qiita.com/niwaken/items/8e6a54ed533cda2f5bd9?p=a)

##1.展開のショートカットをCtrl+EからCommand+Eに変える方法
SublimeText3からKeyBindingsのデフォルトをそう簡単には設定変更させないような仕様なのは、パッケージの場合でもそうみたいですね。
####Step.1 - KeyBindigs Defaultの新規保存
Sublimetext3 > Preferences > Package Settings > Emmet > KeyBindings Defaultを開く。

/Users/ユーザ名/Library/Application Support/Sublime Text 3/Packages/Emmetに新規保存(⌘+Shift+S)
たぶん最後のディレクトリEmmetは最初は存在しないと思うので、そのときはつくってください。

Sublimetext3を再起動すると追記できるようになっています。

####Step.2 - 書き換え
ctrl+eになっているところをcommand+eに変更しましょう。(ざっくり)

![image](https://qiita-image-store.s3.amazonaws.com/0/58800/0416e84b-d674-1153-0874-e7294985f791.png)

画像の通り。デフォルトはctrl+eって書いてあるけど、command+eに書き換えるだけ。検索か置換すれば一発ですね。はい。
上書き保存忘れずに。

####結果
これでctrl+eは行末に飛んでくれるし、command+eでemmet展開してくれるようになります。
 
※UserLibrary見えないんだけどって人はTerminalで以下のコマンドうっておいてください。
ユーザライブラリを見える化するコマンド
```chflags nohidden ~/Library/```

ユーザライブラリを見えない化したい人は以下をうっておいてください。
```chflags hidden ~/Library/```


##2.Tabを押しても展開させない方法
日本人なのでTab押したら予測変換使いたいんです。デフォルトではできないんですけど、その設定方法はQiitaにもあがっているので今まで気になってた人はやってみてください。
[SublimeText3での日本語入力時Tabキーでの変換候補選択を有効にする](
http://qiita.com/niwaken/items/8e6a54ed533cda2f5bd9?p=b)
(ページ上部のリンクとこのリンクのURLを変える開発者の鑑)

####Step.1 - Sublimetext3の設定に追記
Sublimetext3 > Preferences > Settings Userを開く。( ⌘+, でおｋ)
そのファイルに以下の1行を追記しましょう。

```"disable_tab_abbreviations": true ```  

![image](https://qiita-image-store.s3.amazonaws.com/0/58800/6292e9f2-c5f3-fc77-013b-5e790e516955.png)  

これだけ。忘れそうな人はコメントも書いておけばいいと思います。保存忘れないでください。(自戒)

####結果
tabで展開されない(当たり前)

Command+E面倒じゃないのって人は割り当てを変えれば良いと思います。空いてるか使わないやつが割り当てられているところを調べて。でもEmmetのデフォに近い形なのでなかなかバランス良いと思ってます。


##**まとめ**

- Tabは日本語の予測変換
- Ctrl+Eは行末へ飛ぶ
- Command+EはEmmetの展開


これやったって話をしたら、やり方教えてーという人がいたのでニーズがあるのかなと思い書きましたけど、本当にニーズあるんですかね。知らないです。

[参考] というか覚書

- [Emmet cheat-sheet](
http://docs.emmet.io/cheat-sheet/)
- [SublimeText3での日本語入力時Tabキーでの変換候補選択を有効にする](
http://qiita.com/niwaken/items/8e6a54ed533cda2f5bd9?p=c)
- [【便利ツール】Emmetで、ちょっと気持ちいいコーディング with sublime text 2・上巻](
http://dev.classmethod.jp/tool/emmet-sublimetext2-1/)
Gunosyの広告サーバに関して勉強会で喋った事


## 承前

Gunosyの粟飯原と申します。広告配信周りの下から上まで問題が起きたら対応する障害対応おじさんをやってります。

12/16日にFreakOut様のオフィスにて開催された[マーケティングテクノロジーの最先端を支える技術を大公開！](http://eventdots.jp/event/263388)に登壇して、Gunosyのアドサーバに関しての発表させて頂きました。こちらAdvent Calenderの場を借りて資料を公開させて頂きます。


## speakerdeck

![](https://speakerd.s3.amazonaws.com/presentations/3ff5e2d067bf0132b9567edec47ac34f/thumb_slide_0.jpg)

<a class="embedly-card" href="https://speakerdeck.com/shunsukeaihara/2014-12-16-dots">ゼロから始めた Gunosyアドサーバ開発運用記 / 2014-12-16-dots</a>
<script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script>


## 一年振り返り

ほぼ一年前にひっそりと始まったGunosyの広告配信事業ですが、たった一年で10倍のユーザ数、数千倍の広告配信量にまで成長しました。初期の想定をはるかに超える成長を迎え、スケールアップに対応する中で、多くの地雷を踏み抜きに踏み抜いてきました。

自分も中途入社組ですのでCMの開始して少し経ったぐらいから開発に関わりだしたのですが、その頃からユーザが指数的に増え始め、もともと大規模向けではなかったシステムを、収益性を保ち、スループットを確保しつつ安定稼働に持っていくということにほぼ全ての時間を使った半年でした。サーバ落ちた時間分の損失が全て計算できる(自分の人件費分が一瞬で飛ぶような)サーバを運用しつつ、スケールアップと高効率化・安定化・高速化の改修するというのはなかなかに刺激的な体験でした。


## 入社してから今に至るまでのアドサーバの運用で身にしみたこと

- Redisは使い勝手が良いけれど頼りすぎては行けないし、速度・容量が問題になってきたら運用負荷がとても高い
- RedshiftはメモリにKeyの設計や列圧縮の設計が正しくてもデータが増えると動作が遅くなるので運用負荷大きい
- ユーザデータ無限に増えるのでデータのライフサイクル設計が難しい
- No Free Lunch. 夢の技術は存在しない


小世帯で、収益性と広告商品開発に注力してしまったがゆえに、システム全体のQAであったり、増える開発工数に対するチームメイキングなど課題も残してしまいました。今後はGunosyらしいエッジな技術への挑戦を進めると同時に開発負荷・運用負荷を下げていけるようなプロダクト・体制づくりを進めていければと思っております。
アプリ内のWeb Viewで絶対に使う

css。いつも忘れるので、忘れないようにメモ。。。

```css
*{
  /* タップしたときに表示される枠を非表示にする */
  -webkit-tap-highlight-color: rgba(0,0,0,0);

  /* リンク長押しの時に出るメニューを非表示にする */
  -webkit-touch-callout: none;

  /* 文字や画像を選択できなくする */
  -webkit-user-select: none;
}
/* inputとtextareaでは user-select を autoにしないと入力できなくなる／(^o^)＼ので */
input,
textarea {
  -webkit-user-select: auto;
}
```
Dual Displayに渡ってフルスクリーンにする


Mac OS 10.9 Mavericks,openframeWorks0.8.4でDual Displayに渡ってフルスクリーンにする方法。OSとかoFのバージョン違いで色んな方法がありそうなので備忘として。

### Macの設定

* 環境設定 > Mission Control「ディスプレイごとに個別の作業スペース」のチェックを外す > 再起動

### oFのコード

```main.c
#include "ofAppGLFWWindow.h"

int main( ){
    ofAppGLFWWindow win;
    win.setMultiDisplayFullscreen(true);
    ofSetupOpenGL(&win, 1280,720, OF_FULLSCREEN);
	ofRunApp( new ofApp());
}
```

以上。
[備忘録]LinuxMint 17.1 Cinnamon　初期設定[ja,latex,etc...][Sony VAIO Pro 11]

UbuntuStudio,XUbuntu,Kubuntuと使って最終的にLinuxMint Cinnamonに落ち着いた
Sony VAIO Pro11に施した初期設定を残しておく

#言語設定
はこちらhttp://linuxmint-jp.net/download.htmlから引用
ほかのバージョンについてもそちらに

```shell-session
wget -q http://packages.linuxmint-jp.net/linuxmint-ja-archive-keyring.gpg -O- | sudo apt-key add -
sudo wget http://packages.linuxmint-jp.net/sources.list.d/linuxmint-ja.list -O /etc/apt/sources.list.d/linuxmint-ja.list
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install mint-gnome-ja --install-recommends
```

#ホームディレクトリの日本語ディレクトリ名を英語に変更
```shell-session
LANG=C xdg-user-dirs-gtk-update
```

#マウス共有Synergy
```shell-session
sudo apt-get install synergy
```
もしくはこちらからNightlyBuildをダウンロード
https://synergy-project.org/nightly

#Git,make,gccなど開発環境用パッケージ
```shell-session
sudo apt-get install aptitude apt-file zsh lv curl vim vlc rar unrar samba gparted gpart gnuplot gnuplot-doc build-essential automake cmake gimp inkscape git cvs gcc g++ ruby-full wine flac audacity avidemux
```

#Latex

```shell-session
sudo apt-get install texlive texlive-math-extra texlive-lang-cjk texlive-fonts-recommended ptex-bin xdvik-ja dvipsk-ja dvipng gv texlive-science texlive-publishers texlive-bibtex-extra xpdf ispell latexmk latex-mk
```

#省電力設定
```shell-session
sudo add-apt-repository ppa:linrunner/tlp
sudo apt-get update
sudo apt-get install tlp

sudo tlp start
```

#バッテリ保護
充電上限を設定する。80％の場合は以下のように設定

```shell-session
echo 80 | sudo tee /sys/devices/platform/sony-laptop/battery_care_limiter
```
AWS SDK for PHP v3 with ReactPHP

# ReactPHP + AWS SDK for PHP v3

## composer.json
```json
{
    "require": {
        "react/react": "0.4.*",
        "aws/aws-sdk-php": "~3.0@dev",
        "wyrihaximus/react-guzzle-ring": "dev-master"
    }
}
```

## Example
```php
use React\EventLoop;
use Aws\DynamoDb\DynamoDbClient;
use WyriHaximus\React\RingPHP\HttpClientAdapter;

$loop  = EventLoop\Factory::create();

$ddbClient = DynamoDbClient::factory([
    'region'  => 'ap-northeast-1',
    'version' => 'latest',
    'key'     =>  '<your aws key>',
    'secret'  =>  '<your aws secret>'
    'ringphp_handler' => new HttpClientAdapter($loop)
]);

/** @var \Aws\Common\FutureResult $ddbResult */
$ddbResult = $ddbClient->putItem([
    'TableName' => 'table_name',
    'Item' => [
        'id'          => [ 'S' => $id ],
        'createdTime' => [ 'N' => (string)$createdTime ],
    ],
    '@future' => true
]);

$dbbResult->then(
    function ($result) {
        /** @var Aws\Common\Result $result **/
        echo 'done';
    },
    function (\Exception $e) {
        echo 'fail';
    }
);

$loop->run();
```
Mac でスクリーンショット撮影した画像の保存先を変更する方法

コマンドラインで変更できます.
この例では保存先を ~/Hoge に変更しています.

```bash
$defaults write com.apple.screencapture location ~/Hoge
$killall SystemUIServer
```

ちなみにデフォルトに戻す方法はこちら

```bash
$defaults delete com.apple.screencapture location
$killall SystemUIServer
```

デフォルトがデスクトップだと散らばったりするので
オススメ♪
LibreOffice で TeX による数式を記述する

データ分析には表計算ソフトウェア、ドキュメントの執筆にはワープロが活躍します。このようなとき [LibreOffice](https://ja.libreoffice.org/) は[自由ソフトウェア](https://www.gnu.org/philosophy/free-sw.ja.html)であり、なおかつクロスプラットフォームなオフィススイートですから、多くの環境で無料で使えてとても便利です。

この LibreOffice には Math という数式エディタが付いており特に理系分野で多く登場する数式の表現に役立ちます。ただし、いくつか問題があります。

1. TeX と異なる独自記法のため TeX に慣れた人には扱いづらい
2. 一部正確に表現できない記述がある

この Qiita も TeX で数式を記述出来ますが、やはり LibreOffice でも手慣れた TeX で記述できたほうが便利です。そこで OpenOffice.org 用の LaTeX 拡張であった [OOoLaTex](http://ooolatex.sourceforge.net/) の派生である [TexMaths](http://roland65.free.fr/texmaths/) を利用します。これにより LibreOffice で数式を含んだ文書をスラスラと書くことができるようになり大変に便利です。

## TexMaths の環境を用意する

まず TeXLive の環境が必要です。これについては[以前詳しく書きました](http://qiita.com/ynakayama/items/706ae9e59c1b6fd3e3d2)。

次に LibreOffice 用の拡張を[ここ](http://sourceforge.net/projects/texmaths/files/latest/download?source=files)からダウンロードします。 

LibreOffice のツール - 拡張機能マネージャから最新版の拡張を取り込んで起動しなおせば完了です。

## TexMaths を使う

TexMath をインストールすると次のようにツールバーが表示されていますので、ここから数式を作成したり設定を変更することができます。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/38501/efda40d8-3a2a-37f7-e1df-085ce6ec0f3c.png)

論文風に注釈付きの数式を加えるなら Numbered Equations を選択します。

数式ウィンドウでは TeX を入力します。たとえば標準得点を求める次の式を書いてみましょう。

```math
Z = \frac {X - \mu} {\sigma}
```
![2.png](https://qiita-image-store.s3.amazonaws.com/0/38501/2acdd58b-11ad-58c6-6859-b38ef72e7847.png)

右上の Image Format が既定では SVG を描画するようになっていますが png にすると画像を生成します。

![3.png](https://qiita-image-store.s3.amazonaws.com/0/38501/35e6af58-86a6-912a-96e4-65eec8352756.png)

このようなかたちで文書中に数式を記述することができました。

## 参考

Libreoffice で正確な数式を表現
http://kurumatorajirou.blogspot.jp/2013/01/ubuntulibreoffice.html

Ubuntu12.10 LibreOfficeでTeX文法で数式を書く
http://d.hatena.ne.jp/cmphys/20130418/1366281436
objgraphでメモリリークを調査する

objgratph http://mg.pov.lt/objgraph/

```objgraph```の```show_growth```を使うと, リークしているオブジェクトの種類と増加数を標準出力に出力できる.

```pycon
>>> import objgraph
>>> objgraph.show_growth()
```

呼び出す度にリークしているオブジェクトの増加数が出力される. ```show_growth```は内部で```gc.collect```を呼び出しているので, 自分でGCする必要はない.
<:<を使ってメソッド引数の型を限定する (例: IntもしくはBooleanもしくはString

**うまく限定出来ないケースが見つかったためそれに対応するための [続<:<を使ってメソッド引数の型を限定する](http://qiita.com/mtoyoshi/items/13ac0500aa23fb4fa0d4) を書きました(2014.12.22)。**

## はじめに
型はなんでもいいのですが、例えばInt型,Boolean型,String型のいずれかを受け付けるfoo関数を定義したいとする。

## 案１　親クラス(trait)で型を宣言する
今回の場合、IntとBooleanとStringのみに共通する親クラスやtraitは存在しないのでこの作戦は使えない。

## 案２　オーバーロード
YES、出来る。
けどScalaさんならもっと違う書き方あるんでしょう？と勘ぐるくらいにはScalaに慣れてきた。

```scala
def foo(arg: Int) = println(arg)
def foo(arg: String) = println(arg)
def foo(arg: Boolean) = println(arg)
```

## 案３　<:<
見つけた。

```scala
def foo[T](arg: T)(implicit ev: Int with Boolean with String <:< T) = println(arg)
```

動作確認してみる。

```scala
foo(1)  // 1
foo(true)  // true
foo("hello")  // hello

foo(2.3) // error: Cannot prove that Int with Boolean with String <:< Double.
```

Double型渡したらコンパイルエラーになった。成功！

## ところで <:< ってなんだよ？
型だよ。
[Predef.scala](https://github.com/scala/scala/blob/v2.11.4/src/library/scala/Predef.scala#L365-L388)で宣言されている。

```scala
@implicitNotFound(msg = "Cannot prove that ${From} <:< ${To}.")
sealed abstract class <:<[-From, +To] extends (From => To) with Serializable
```

- さっきのコンパイル時のエラーメッセージはimplicitで宣言された型に対するインスタンスが見つからないために出ていたメッセージだった
- <:<は型パラメータを2つ取るクラス。先程のは中置記法で書かれていた。

### 中置記法ってなんだよ？
型パラメータを２つとる場合、Scalaでは２つの書き方がある。
例えばMap。以下どちらの方法で書いてもコンパイルは通る。

```scala
// その１
def foo(m: Map[Int, String]) = ???

// その２
def foo(m: Int Map String) = ???
```

### どういう仕組みだよ？

```scala
sealed abstract class <:<[-From, +To] extends (From => To) with Serializable

private[this] final val singleton_<:< = new <:<[Any,Any] { def apply(x: Any): Any = x }

implicit def $conforms[A]: A <:< A = singleton_<:<.asInstanceOf[A <:< A]
```

これが全貌。

以降、話を簡単にするために、継承関係がイメージしやすいAnimal - Catを使う。 
先の例を書き換えて以降foo関数とは以下のこととする。

```scala
def foo[T](arg: T)(implicit ev: Cat <:< T) = arg
```

foo関数にAnimal型のインスタンスを渡したとすると、implicit部は ```Cat <:< Animal``` となる。 ```Cat <:< Animal``` なインスタンスが見つかればOKだし見つからなければ ```could not find implicit value ...``` というおなじみのエラーになる（今回の<:<の場合エラーメッセージを変えているので通常のこれではないが）。

インスタンスが返ってくるのはimplicit defで宣言されている$conforms。
コードを読むと実際にはインスタンス生成はしておらず唯一のインスタンスであるsingleton_<:<をキャストして返しているだけだ。

$conformsは型パラメータを１つしか取っていないので<:<の一つ目の型パラメータが渡ってくる。この例だと ```ev: Cat <:< T``` なので１つ目はCat、つまり$conformsからは ```Cat <:< Cat``` が返ってくる。
なお、探しているのは ```Cat <:< Animal``` なのに ```Cat <:< Cat``` が返ってきてもOKな理由は<:<の宣言部にある。 
<:<は ```<:<[-From, +To]``` と宣言されており、To部分は共変である。共変で馴染み深いのは ```List[+A]``` だろう。
以下のようにList[Cat]はList[Animal]に代入可能。

```scala
val a: List[Animal] = List(new Cat)
```

つまり ```Cat <:< Animal``` に ```Cat <:< Cat``` は代入可能。よって ```Cat <:< Animal``` は見つかった、ということになる。


### 追記
あ、もちろん、Tは<:<の１番目の型パラメータに指定しても大丈夫。

```scala
def foo[T](arg: T)(implicit ev: T <:< Animal) = arg
```
[Unity] プロジェクトを git や svn で管理するまえにやっておくこと

Unity のプロジェクトでデフォルトの設定でgitとかで管理してると
たまに binary のファイルが競合起きたりしますよね？ scene ファイルとか.

もうこうなってしまったら中身は binary なのでマージなんて簡単に
できないし手詰まりになっちゃいます.

ってことでちょっと調べたら, 最近(2014/12時点)の Unity ではバイナリではなくテキストで
管理するモードがありました!!

今回はその設定方法について紹介します.

## やること

- メニューの [Edit] -> [Project Settings] -> [Editor] を選択
- (Inspector に [Editor Settings] が表示される)
- [Version Control] -> [Mode] を **`Visible Meta Files`** に変更
- aaa[Asset Serialization] -> [Mode] を **`Force Text`** に変更

![スクリーンショット 2014-12-17 15.29.12.png](https://qiita-image-store.s3.amazonaws.com/0/7756/e015e1fb-8450-cf8f-00df-0bc4d1e2aca1.png)


## どうなるの？

- シーンやマテリアル, プレハブなどがテキスト化される
- 修正箇所がわかる
- なので競合が起きたときに対応できる
- git の差分管理効率も良くなったりする


これは必ず最初にやっておくことをお勧めします.

シーンいじったときになんとなく何が変更されているのかを把握できるし,
どんなプロパティがあるのかも知る事ができるので Unity の内部を知ることにもつながるので.

でわでわノシ
SoftLayerのサポートチャットを活用する

このエントリは[SoftLayer Advent Calendar 1枚目の17日目](http://qiita.com/advent-calendar/2014/softlayer "SoftLayer Advent Calendar 1枚目の17日目")のエントリです．

# 概要
SoftLayerには，専任のオペレータがチャットを介してトラブルの解決をサポートしてくれる窓口があります．このチャットサポートは全員が無料で利用可能で，簡単なトラブルであればオペレータの権限で調査，回答してくれます．また，複雑な問題は新しいチケットに問題が引き継がれ，オペレータとチケット担当者の間で申し送りが行われるため，問題解決の取り掛かりとしてチャットを利用するのは有用です．
しかし，現在チャット窓口が英語ということもあり，どのように利用したらいいのか分からないと感じてしまう人も多いかと思います．そこで今回はチャットサービスの基本的な利用方法と，相談した3つのトラブルがどのように解決に至ったかを紹介します．

# トラブル発生！そんな時あなたは？
SoftLayer上で運営しているサービスにトラブルが発生しました！しかし問題を切り分けていくうちに，どうもSoftLayer側のトラブルなのではないか？という疑念がむくむくと沸き上がってきました．[メンテナンス情報](http://status.softlayer.com/ "メンテナンス情報")を見ても特に記述はありません．湧き上がる疑念を払拭するため，サポートチャットに相談してみましょう．チャットを開始するには，ポータル右上の吹き出しが2つ重なっているアイコンをクリックし，Support Chatをクリックします．

![chat_start.png](https://qiita-image-store.s3.amazonaws.com/0/60269/de49a441-878f-24b1-68fd-09ff967b93da.png)

すると，チャットウインドウがポップアップし，自動でオペレータに接続されます．

![chat_email.png](https://qiita-image-store.s3.amazonaws.com/0/60269/77d5cf4e-39aa-1aa6-0847-d29f4a049763.png)

右枠のEMAILをクリックしてメールアドレスを入力しておくと，チャット終了時にチャット内容を纏めてメールにて送信してくれるため，後から参照する際に非常に便利です．

ここからは実際にあったトラブルとその顛末を紹介します．以下に示すチャットの内容は，実際に私が投稿した内容をほぼそのまま訳していますが，裏返せば単純な英語を並べるだけでもある程度対応して貰えることを感じて貰えたらと思います．

## Digital Transcodingサービスにログインできない
SoftLayerには，Digital Transcodingという無料の動画変換サービスが存在します．しかし，そのサービスを利用するためのパスワードが表示される欄は，いつまで経ってもロードが終わらず表示されない状況でした．

![DT.png](https://qiita-image-store.s3.amazonaws.com/0/60269/222739e2-a81f-4922-5cce-612d020a03a8.png)

以下チャット内容(意訳)

```chat1
チャット担当者(以下チ):どうしたの？
私:Transcoding Serviceがおかしい
チ:どんな風に？
私:パスワードが表示されない
チ:もうちょっと詳しく
私:Service -> Digital Transcodingクリックしたら
私:アカウント情報が出る筈だよね？
チ:うん
私:そこがLoadingのまま
私:表示されない
チ:OK,ちょっと調べてみる…(暫くの間)
チ:あーほんとに出てこないね．とりあえずアカウントの情報だけ出そうか？
私:それでよろしくー
チ:IDはuserで，パスワードはpasswordねー．
私:さんきゅー
```
ユーザー名とパスワードを確認することができて，無事にDigital Transcodingサービスにログイン出来ました．

## 日本のエンドポイントのアドレスは？
サポート情報に載っていない情報を確認したいも，チャットが便利です．

SoftLayerは各地のデータセンターと各地のネットワークエンドポイントで構成されており，日本にもエンドポイントが存在しています．しかし，[VPNのエンドポイント一覧](http://knowledgelayer.softlayer.com/procedure/set-pptp-vpn-mac-os-x-10x "VPNのエンドポイント一覧")に日本のアドレスが記載されていません．ということで，早速問い合わせてみましょう．


```chat2
チャット担当者(以下チ):どうしたの？
私:VPNのエンドポイントで確認したい事があります
チ:何を知りたいの？
私:日本に住んでるから
私:日本のエンドポイントを使いたいんだけど
私:ナレッジベースに日本のアドレスが載ってない．
チ:ちょっと待ってね
チ:あ，本当に載ってないね．今調べてくる．
チ:見つけたよー．日本のエンドポイントは pptpvpn.tok02.softlayer.com です．
私:さんきゅー
```

日本のエンドポイントを確認できたので，これを用いてVPNでSoftLayerのプライベートネットワークに接続できました．

## SendGridについて
最後はサービスに関する疑問を問い合わせる場合です．

[SoftLayer Advent Calendar 1枚目4日目](http://qiita.com/nsas454/items/44790032f3ba8f70fa70 "SoftLayer Advent Calendar 1枚目4日目")の記事で紹介されているように，メール配信サービスのSendGridをSoftLayer上で利用することができます．しかし，SendGridはSoftLayerとは独立したサービスなので，利用する際のアカウントは？課金制度は？と，疑問は尽きません．そんな時はサポートチャットに問い合わせてみましょう！

```chat3
チャット担当者(以下チ):どうしたの？
私:SendGridのサービスについて聞きたいんだけど
チ:何を知りたいの？
私:SendGridってSoftLayerとは別サービスみたいだけど
私:利用するアカウントってどうなるの？
私:登録とか課金とか
チ:個別に登録する必要は無いよ．
チ:SoftLayer上で注文したら利用できるし，課金もSoftLayerで一括して行います．
私:おっけー了解．
```

# まとめ
駆け足でしたが，SoftLayerのチャットサービスを簡単に紹介しました．ちょっとサービスが不調な時，ドキュメントに網羅されていない情報を確認したい時などには，チャットサービスが最適です．また相談する内容についても，紋切り型な質問を準備して投稿する必要はなく，ちょっとした疑問にもフランクに対応して貰えるため大変便利です．何か疑問が出てきた際は，是非一度チャットサービスを試してみてください．
Install node.js on Ubuntu trusty 

The old way that too many you have seen is :

```
$ sudo add-apt-repository ppa:chris-lea/node.js
$ sudo apt-get update
$ sudo apt-get install nodejs
```

but now you should use the new way.

```
$ curl -sL https://deb.nodesource.com/setup | sudo bash -

$ sudo apt-get install -y nodejs
```

because now node.js is using NodeSource.
Swiftでユーザー名とパスワードを入力させるアラート表示（UIAlertController）

# はじめに

`UIAlertController`を使用して、`UITextField`をあつかうアラートができるようです。

簡単な例として、ユーザー名とパスワードを入力させるものを作ります。


![ios8-textalert.png](https://qiita-image-store.s3.amazonaws.com/0/32256/7edbe734-93bb-5986-bc95-1b04132f8818.png)

# 前提

- `UIButton`の`@IBAction`で以下のコードを呼び出す
- 入力値を表示するラベルを２つ用意して、`@IBOutlet`接続しておく（`self.user_name`,`self.password`の部分）

# ユーザー名とパスワードを入力できるアラート

```swift:ViewController
var alert = UIAlertController( title:"ユーザー名とパスワード", message: "入力してね",
        preferredStyle: UIAlertControllerStyle.Alert)

alert.addTextFieldWithConfigurationHandler( { (user: UITextField!) -> Void in
	})
alert.addTextFieldWithConfigurationHandler( { (pw: UITextField!) -> Void in
    pw.secureTextEntry = true
    })
        
alert.addAction(
    UIAlertAction(title: "OK", style: .Default, handler: {
    	(action: UIAlertAction!) -> Void in
                
        let textFields:Array<UITextField>? =  alert.textFields as Array<UITextField>?
        if textFields != nil {
        	for textField:UITextField in textFields! {
                // secureTextEntryの状態で判定
            	if textField.secureTextEntry == true {
                	// ラベルにパスワード表示
                	self.password.text = textField.text
                } else {
                	// ラベルにユーザー名表示
                	self.user_name.text = textField.text
				}
            }
	    }
	})
)
        
alert.addAction( UIAlertAction(title: "Cancel", style: .Cancel) {
	action in
})

presentViewController(alert, animated: true, completion: nil)
```

# おわりに

- `alert.addAction`のブロックがゴチャっとしてしまった
- `secureTextEntry`以外でテキストフィールドを判定する方法はあるのか？
[Unity] Unity と Monodevelop を繋いでデバッグしよう!!

規模の大きい開発だったり, 途中アサインのプロジェクトの場合
コードが大きくなりすぎて処理を追うのが大変だったりしますよね？

そんなときに必須な機能がデバッギング( debugging )です.

コード中にブレークポイントを置いて処理を止めて
その時の変数の中身をみたり, 呼び出し元に遡ったりするあれです.

今回は, Unity でそれやるメモです.


## 1. Unity と MonoDevelop を connect する

まずは Unity と MonoDevelop をつなぎます.
Unity と MonoDevelop を開いた状態で MonoDevelop の再生アイコンをクリックします.

![スクリーンショット 2014-12-16 22.05.57.png](https://qiita-image-store.s3.amazonaws.com/0/7756/c1d50fc1-6346-e353-8160-45839c05439a.png)


するとプロセスにアタッチするためのダイアログが表示されます.

`Unity Editor(Unity)` を選択して右下のアタッチボタンをクリックします.

<img src="https://qiita-image-store.s3.amazonaws.com/0/7756/b0e13962-fc80-acba-362d-e5346c13eb76.png" width=460 />

これで connect 完了です.
ちなみに, 低スペックな PC だと高頻度で失敗します.
失敗するときは, PC を再起動してクリーンな状態でアタッチすると成功したりします.

早く安定してくんないかな...


## 2. デバッグする

MonoDevelop 上でコードの行数の左をクリックするとブレークポイントという赤い玉が生成されます.
これはブレークポイントといってその場所に処理が来た際に止まってくれという印になります.

![breakpoint.png](https://qiita-image-store.s3.amazonaws.com/0/7756/11d40308-3374-6bae-4da5-a33655059ba0.png)

Unity とアタッチした状態で, Unity のゲーム実行を押すと, このブレークポイントのところで
処理を止めてくれます.

![スクリーンショット 2014-12-16 21.48.51.png](https://qiita-image-store.s3.amazonaws.com/0/7756/d96dabd3-1867-a279-ade6-730974983ea1.png)


ここからがポイントです!
止めたソースコード上で変数にマウスカーソルを持っていくとそのときの中身を見ることができます!!

![スクリーンショット 2014-12-16 21.47.48.png](https://qiita-image-store.s3.amazonaws.com/0/7756/dd67acea-485c-03e4-bd8c-8d7c2311a9d9.png)


また処理を 1step ずつ進めることができます.

![スクリーンショット 2014-12-16 22.00.03.png](https://qiita-image-store.s3.amazonaws.com/0/7756/082972a1-755a-b3d8-b07f-3fd26ff6a6bf.png)

左から

- Run/Pause ... 再生/停止
- StepOver ... 1行ごとに実行
- StepIn ... 1行ごとに実行. 関数の場合は内部に飛ぶ.
- StepOut ... 実行している関数の終わりに飛ぶ.

これで基本的なデバッグができます.


## 便利なパネル

表示されていない場合は [Toolbar] -> [ビュー] -> [デバッグウィンドウ] でそれぞれ
表示できます.

### ローカル変数パネル

ブレーク中の名前空間にあるローカル変数の中身を見ることができます.

![スクリーンショット 2014-12-16 21.49.01.png](https://qiita-image-store.s3.amazonaws.com/0/7756/cd132940-bd7c-f750-e543-d7f5cbfc4699.png)



### コールスタックパネル

一番便利なのがこの **コールスタック パネル** です.
これは止めた位置にどの関数経由で来たのかを遡ってみることができます.

![スクリーンショット 2014-12-16 21.50.46.png](https://qiita-image-store.s3.amazonaws.com/0/7756/12b9488f-cb18-d6fd-17a1-acf10babc917.png)


基本的にこの **ローカル変数 パネル** と **コールスタック パネル** さえあれば
大抵の処理は追うことができます.

他にもウォッチやイミディエイトといった便利なものもあるのですが
それはまた次回ということで.
[Unity] 全体に反映されるマクロ(シンボル)を定義する

Unity で全体に反映されるマクロを定義する方法についてのメモです.


Unity では, そのファイルで `#define` したマクロは
そのファイルでのみ有効になります.

ちょっとしたデバッグ処理の on/off だったらそれで良いのですが,
ファイルをまたいだい処理の切り替えにはちょっと不便です.

ちょい前までの Unity では全体に反映させるマクロを定義する場合ゴニョゴニョする必要があったらしいですが,
最近のUnity(2014/12)時点ではサクッと設定する方法が用意されてます.

今回はその紹介です.

## Flow 

- メニューの [Edit] -> [Project Settings] -> [Player] を選択
- (Inspector に PlayerSettings が表示される)
- [Configuration] -> [Scripting Define Symbols] という欄があるのでそこに定義したいシンボルを記述
- 例) HOGE;FOO;BAR
- すると HOGE, FOO, BAR というシンボルが定義されたことになる

ビルド先の環境ごとにセッティングできて便利です♪

<img src="https://qiita-image-store.s3.amazonaws.com/0/7756/f8dd27e2-5c71-6281-a86d-72be2963240b.png" style="border:1px solid black;" />

↓

![ss01.png](https://qiita-image-store.s3.amazonaws.com/0/7756/4d4afcbb-6a09-7c01-3b8a-72794d0744e5.png)


ちなみにデフォルトで定義されてるマクロのリストは[こちら](http://docs-jp.unity3d.com/Documentation/Manual/PlatformDependentCompilation.html).
[Unity] 現在のシーン名を取得

`Application.loadedLevelName` で取得できます.


```csharp
Debug.Log(Application.loadedLevelName);
```


特定のシーンのときのみ何かしたいときは

```csharp
if (Application.loadedLevelName == "HogeScene") {
	// TODO: 
}
```

って感じでいけます.
[Unity] デバッグログを出す方法

`Debug.Log(honyarara)` で変数の中身表示したりできます.

```csharp
var num = 128;
Debug.Log(num);
Debug.Log("Hello, world!");
```

Console ウィンドウに出力結果が表示されます.

![ss.png](https://qiita-image-store.s3.amazonaws.com/0/7756/78709fed-3e2f-6690-c369-dc6ab6f490f4.png)

最後の出力結果は左下に出てたりもします.

![ss2.png](https://qiita-image-store.s3.amazonaws.com/0/7756/8d18703a-1b10-6b06-c26b-55ca703b50f4.png)




ちなみに `Deubg.Break()` で一時停止できます.