OmniAICreator/Qiita-1.07M huggingface dataset:
iPhone5/iOS8.0 SafariでCSSの不具合

#iPhone5/iOS8.0 SafariでCSSの不具合

現象としては

**"このWebページで問題が起きたため、再度よみこまれました"**
**"～URL～で問題が繰り返し起きました。"**

と表示されページが読み込めない。

原因っぽかったのは要素を指定するのに

```css
.hoge > div:nth-child(3) > div > div > div:nth-child(3) a
```
のように**E:nth-child(n)**を複数回しようすると上記のようなエラーが起こるっぽい。

そもそも設計の仕方が間違えてると思うんだけど。。。
誰が書いたか分からないCSSにはまった。。。
ui-router で 404 ページを表示する

`templateUrl` に 404 ページを設定したステートを作成し、`otherwise` に設定したハンドラで `$state.go` メソッドを使って 404 ページを表示する。

`$urlRouterProvider.otherwise` を使わず `$rootScope.$on("$stateChangeError")` のハンドラで行ってもよいと思う。

```js
angular.module("myapp").config(function ($stateProvider, $urlRouterProvider) {
  $stateProvider
      .state("404", {
        templateUrl: "/views/404.html"
      });

  $urlRouterProvider
    .otherwise(function ($injector) {
      $injector.get("$state").go("404");
    });
});
```

- [URL Routing · angular-ui/ui-router Wiki](https://github.com/angular-ui/ui-router/wiki/URL-Routing#otherwise-for-invalid-routes)
Windowsで、特定のポート番号でLISTENINGしているプロセスを強制終了させる方法

eclipse を強制終了させたら、 eclipse から立ち上げていたサーバーのプロセスが生きてて困った時のメモ。

#ポート指定で LISTENING 中の PID を取得する
```text:
> netstat -aon | find "<探したいポート番号>"
```

```text:例
> netstat -aon | find "8080"
  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       5664
  TCP    [::]:8080              [::]:0                 LISTENING       5664
```

一番右に表示されているのが、 PID 。

#タスクを kill する
```text:
> taskkill /pid <kill したい PID>
```

```text:例
> taskkill /pid  5664
成功: PID 5664 のプロセスに強制終了のシグナルを送信しました。
```

#参考
- [Windows TIPS：netstatでリッスンしているプロセスを特定する - ＠IT](http://www.atmarkit.co.jp/ait/articles/0207/30/news002.html)
- [WindowsのプロセスをIDでKillする方法 - Hello, world! - s21g](http://blog.s21g.com/articles/392)
MacのXamppでのヴァーチャルホストの設定（xamppをインストールした場所以外にアクセス出来るようにする）


MacでXamppを使っていて、Xamppをインストールした場所以外の場所でもlocalサーバーとしてアクセスさせたい場合の設定方法をまとめました。

# httpd.confの編集
Apacheの設定ファイルを編集します。XAMPPのApacheは初期設定ではバーチャルホストを許可していません。
/Application/XAMPP/etc/httpd.conf を開いて、460行目あたりの下記文言先頭にある「#」を外します

`# Virtual hosts
 # Include /Applications/XAMPP/etc/extra/httpd-vhosts.conf`
↓
`# Virtual hosts
Include /Applications/XAMPP/etc/extra/httpd-vhosts.conf`
これでバーチャルホストの設定ファイルを読み込むようになります。

# httpd-vhosts.confの編集

次は、さきほどのhttpd.confで読み込むように設定したバーチャルホストのファイルを編集します。
注意点としては、バーチャルホストを有効化したら今まで設定していた「http://localhost/」の設定ももう一度やり直さないと行けません。
`/Applications/XAMPP/xamppfiles/etc/extra/httpd-vhosts.conf`
このファイルを編集します。
元々このファイルに書かれている下の部分はサンプルなので消すなりコメントアウト(全部の行頭に「#」を追加)しても問題ないです。

こちらをすべてコメントアウト

```file:httpd-vhosts.conf
<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/Applications/XAMPP/xamppfiles/docs/dummy-host.example.com"
    ServerName dummy-host.example.com
    ServerAlias www.dummy-host.example.com
    ErrorLog "logs/dummy-host.example.com-error_log"
    CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.example.com
    DocumentRoot "/Applications/XAMPP/xamppfiles/docs/dummy-host2.example.com"
    ServerName dummy-host2.example.com
    ErrorLog "logs/dummy-host2.example.com-error_log"
    CustomLog "logs/dummy-host2.example.com-access_log" common
</VirtualHost>
```


# 今まで使ってたドキュメントルートを設定
次に、今までlocalhostでアクセスしていた箇所を記載します。

```file:httpd-vhosts.conf
<VirtualHost *:80>
    DocumentRoot "/Applications/XAMPP/xamppfiles/htdocs"
    ServerName localhost
</VirtualHost>
```

これを追加すれば今まで通り「http://localhost/」でXAMPPの設定画面にアクセスできます。
新しいドキュメントルートの追加
やっと新しいドキュメントルートを追加できます。以下のように記述しましょう。

```file:httpd-vhosts.conf
<VirtualHost *:80>
    DocumentRoot "/Users/ユーザ名/YourDirectory/"
    ServerName local.domain.com
</VirtualHost>
```

# hostsファイルの編集
設定の最後はhostsファイルの編集です。手動でやってもいいですが、今回はHosterというアプリを使います。
http://www.redwinder.com/macapp/hoster/

hostsファイルとは「このマシンのブラウザでアクセスしたURLの飛び先を設定するファイル」です。
ダウンロードしたアプリを開いて、左上のプラスボタンで新規セットを作成します。
「ホスト名」にさっき入力した新しいドメイン(ServerNameに書いた文字)を入力して、「IP」には「127.0.0.1」を入力しましょう。


# 最後にApacheの再起動
これを忘れると設定が反映されません。
設定したバーチャルホストにアクセスしてみましょう。

# 「アクセス出来ません」と出たら
ターミナルから
`chmod 755 設定したフォルダ`
で権限を付与してあげましょう。
RubyKaigi 2014 を通して感じた昨今の定番構成。そして人的負債 #rubykaigi 

# RubyKaigi 2014 を通して感じた昨今の定番構成。そして人的負債
## 概要
RubyKaigi 2014 を通して感じた昨今の定番構成。そして人的負債について

## 関連技術
* DevOps, Immutable Infrastructure, Infrastructure as Code
    * AWS, Vagrant, Chef, etc...
* ChatOps
    * Hubot, Communication Tools(Slack, Idobata, etc...)
* Git, GitHub, GitLab
* Pull Request(Merge Request) ベースのワークフロー
* CD (継続的デリバリー)
* CI
    * Jenkins, Travis CI, etc...
* Automation
    * 全ての要素を徹底的に自動化
* DSL
* DRY
    * Gem
    * Meta Programming
* Web API
* concurrency
* 知識の見える化
* retrospective, 継続的改善, KPT

## ほとんど知っている？
特別に上記の要素に関して RubyKaigi で話題になったわけではないのですが、
RubyKaigi では登壇者・聴衆含め、ほとんどの方たちが上記のような情報は
基礎知識として持っていたように感じました。
改めて説明するまでもなく、みんなわかってるよね、という前提で話が進み、
実際にみんな「うんうん」と頷いて分かっている。

逆に、上記について所属エンジニアがほとんど知らなかったり、ほとんど導入していない（できない）ような
現場だとシステム開発の生産性や成果物の質に大きな差があり、今後のその差は広がっていくように感じます。

システム開発において、開発に関わる技術や手法の進化のスピードはどんどん早まり、
新規技術の学習・試行・選択の重要性は高まっているように思います。

## 人的負債
上記のような要素を理解し、遂行していく組織・チームを作るためには
全員がそれを理解、実践し、継続的な学習を苦にしない気質を持っている必要があるように感じます。

実際に経験したことがあるのですが、チーム内に1人でもこういった点に無頓着な人＝「人的負債」がいると、
その人の成果物は負債化し、逆にその人がいなくなるとチームの改善が一気に進行します。
チームメンバーが一人減ったにもかかわらず、長期的に見ると前以上の成果物を生み出すことができるようになっています。

人的負債がいると、結局は誰かが手直ししたり、補足したり、細かくヒアリングして見える化したりする必要が出てきます。
そう、負債を返済する必要が出てくるのです。
徹底的な自動化・効率化・知見の共有など、あらゆる面で足をひっぱられることになります。
本当はうまくいくはずの技術や手法が失敗しているように感じることもあるでしょう。

## 人的負債の解消
* 技術力と技術に対する姿勢を加味した採用。
* 良い開発風土づくり
* 良い開発者がとどまり続けるような評価制度と環境づくり
* 人的負債には暮らしにくい環境作り
    * 人的負債が居心地悪くて自発的に離脱するといいですね

## 補足
もちろん、技術や手法の重要性は理解しつつも組織の制約で全てを導入できない、
ということもあるでしょうけど、制約の多い現場に居続けるよりも、
理にかなったことを提案すれば、実行に移せる場に転職した方が
エンジニアにとっては長期的に得をすると思ったりします。
Highcharts利用方法

# 概要
Highchartsとはインタラクティブなグラフを作成できるJavaScriptライブラリ。

Highcharts：http://www.highcharts.com/

## ダウンロード
![スクリーンショット 2014-09-21 21.04.24.png](https://qiita-image-store.s3.amazonaws.com/0/53572/3281552e-b471-4cf8-a7d2-b5ef8c6aa920.png)

![スクリーンショット 2014-09-21 21.24.47.png](https://qiita-image-store.s3.amazonaws.com/0/53572/93c50bba-3864-7f9c-a858-12ace9f56d12.png)

+ Highcharts-4.0.4.zipファイルを解凍。
+ index.htm から様々なグラフのデモを確認できる。
+ highcharts.jsをHTMLにインポートし利用する。※jQueryが必要

## サンプル
折れ線グラフを描画する。

```html:index.html
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>Sample Line Bar</title>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
        <style type="text/css">
            ${demo.css}
        </style>
        <script type="text/javascript">
        $(function () {
            $('#container').highcharts({
                title: {
                    text: 'Monthly Average Temperature',
                    x: -20 //center
                },
                subtitle: {
                    text: 'Source: WorldClimate.com',
                    x: -20
                },
                xAxis: {
                    categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                        'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
                },
                yAxis: {
                    title: {
                        text: 'Temperature (°C)'
                    },
                    plotLines: [{
                        value: 0,
                        width: 1,
                        color: '#808080'
                    }]
                },
                tooltip: {
                    valueSuffix: '°C'
                },
                legend: {
                    layout: 'vertical',
                    align: 'right',
                    verticalAlign: 'middle',
                    borderWidth: 0
                },
                series: [{
                    name: 'Tokyo',
                    data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]
                }, {
                    name: 'New York',
                    data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5]
                }, {
                    name: 'Berlin',
                    data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0]
                }, {
                    name: 'London',
                    data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]
                }]
            });
        });
        </script>
    </head>
    <body>
        <script src="./js/highcharts.js"></script>
        <script src="./js/modules/exporting.js"></script>
        <div id="container" style="min-width: 310px; height: 400px; margin: 0 auto"></div>
    </body>
</html>
```

![スクリーンショット 2014-09-21 22.31.47.png](https://qiita-image-store.s3.amazonaws.com/0/53572/e60d317c-b4de-6c99-1b79-e898c131b413.png)
Swift - 1.0 (Xcode 6.0) と 1.1 (Xcode 6.1) 両方に対応する

すでにして Swift 1.0 と Swift 1.1 の Conflict が発生したので、対処法を。

## Foo or Foo?

問題となったのは、ここ

[Failable Initializer](http://qiita.com/dankogai/items/fe86f43a0158c13082ad#2-3)
> これまでは
> 
> ````swift
> let foo = Foo.fromBar(yourBar) // foo:Foo?
> ````
> 
> とFactory Methodを用意していたものが、
>
> ````swift
> let foo = Foo(bar:yourBar) // foo:Foo?
> ````

Swift 1.0 では`Foo`、1.1では`Foo?`と型が違うわけです。どうすればこの差を吸収できるのでしょう?

## Foo as Foo?

以下がその答えとなります。

````swift
let foo = Foo(bar:yourBar) as Foo? // Good for 1.[01]
````

この件は、[swift-json]で発覚しました。以下、その時のtwitterにおける会話。

[swift-json]: http://qiita.com/dankogai/items/e3d9882f4d25bc44cc03

<blockquote class="twitter-tweet" lang="en"><p>.<a href="https://twitter.com/__gfx__">@__gfx__</a> 1.1でもvalid。git push した。念のため確認を</p>&mdash; Dan Kogai (@dankogai) <a href="https://twitter.com/dankogai/status/513675471775481856">September 21, 2014</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

@gfx ++

まあ、(Swift 1.0|Xcode 6.0)もYosemiteと同時リリースなはずの(Swift 1.1|Xcode 6.1)までの短い命ではあるのですが、
すでに意外と現場で使われはじめているというのは、swift-jsonに対するバグレポートからも伺い知ることが出来ました。

早く来い来い Xcode 6.1 …

Dan.the.Swift.Newbie
AngularJSでCanvasアニメーションしてもあまり威力は発揮できなかった


### AngularJS
先週ぐらいからAngularJSを本格的に勉強始めました。
AngularJSの記事を何本か書きました。

**Angular.js学習メモ vol.01**
http://qiita.com/kenjiSpecial@github/items/72074e89762556a105e4

**AngularJSの学習メモ　Directiveについて**
http://qiita.com/kenjiSpecial@github/items/c99198406e93916f9ba0

**AngularJSでよく見るDependency Injectionについて**
http://qiita.com/kenjiSpecial@github/items/6b7db5591bb2684058d5

**ArduinoとNode.jsで室内温度計を作るまで、、vol.02**
http://qiita.com/kenjiSpecial@github/items/2f6337d6cd3f33975c20

DOMとかにはかなり威力を発揮できるのはわかったのですが、果たしてCanvasアニメーションはどうなのかというところが謎でした


### Canvasアニメーション
Canvasアニメーションではloopでフレーム毎に計算し、レンダリングを更新するのが重要です。

```javascript
function draw(){

	// 計算

	// CanvasApiで描画

	requestanimationframe(draw);
}

draw();

```

drawをひたすら回し続けます。

### AngularJSでCanvasアニメーション
理想をいうとControllerをマイフレームを呼び出したいのですが、それはできなさそう、、

今回は力技で攻めました。。

```html:index.html
<body ng-app="animation01App" ng-controller="CanvasCtrl">
  <canvas></canvas>
</body>
```

```javascript:main.js

window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;

angular
  .module('animation01App', []);

angular.module('animation01App')
    .controller('CanvasCtrl', ['$scope', '$document', function($scope, $document){
        //var canvas =  $document;
        var canvas = $document.find('canvas')[0];
        canvas.width  = window.innerWidth;
        canvas.height = window.innerHeight;
        var ctx    = canvas.getContext('2d');

        var x = 0;
        var y = 0;

        function draw(){
            x += 1;
            y += 1;

            ctx.fillStyle = '#000';
            ctx.fillRect(0, 0, window.innerWidth, window.innerHeight);

            ctx.fillStyle = "#ffffff";
            ctx.beginPath();
            ctx.arc(x, y, 10, 0, 2 * Math.PI, false);
            ctx.closePath();

            ctx.fill();

            requestAnimationFrame(draw);
        }

        draw();

    }]);
```

controller内にdraw関数を作成して、controllerが呼び出されたら、draw関数を呼び出します。
一度呼び出したら、ひたすら呼び出し続けると行った感じです。

codepenにアップしたので、こちらをみてください。。

<p data-height="268" data-theme-id="4918" data-slug-hash="hHgGl" data-default-tab="result" data-user="kenjiSpecial" class='codepen'>See the Pen <a href='http://codepen.io/kenjiSpecial/pen/hHgGl/'>Angular Canvas Animation</a> by Kenji Saito (<a href='http://codepen.io/kenjiSpecial'>@kenjiSpecial</a>) on <a href='http://codepen.io'>CodePen</a>.</p>
<script async src="//codepen.io/assets/embed/ei.js"></script>


もっといい方法を模索したいです。
Go入門と実践 | GoでJSONデータを扱う方法


##入門編

Go言語を使ってみました。

###gojson

[gojson](https://github.com/ChimeraCoder/gojson)は、json出力をgolang形式に変換してくれるツールです。

これにより、golangでjsonデータを扱いやすくなります。また、応用可能性が広がります。

```bash:
$ sudo go get github.com/ChimeraCoder/gojson
```

インストールが上のコマンドで出来ると思ったのですが、できなかったので、手動ビルドします。

```bash:
$ cd $GOPATH/src/!$

$ sudo go build json-to-struct.go
```

さて、`gojson`を試しに使ってみましょう。

```bash:
# sample run!
$ curl -s https://api.github.com/repos/chimeracoder/gojson | ./json-to-struct -name=Repository
```

うまい具合に、go型が出力されると思います。

###web server

ここで、試しに、Web サーバーを立ち上げて、そこに、jsonを置いてあるという想定で実行してみたいと思います。

```go:main.go
package main

import (
  "encoding/json"
  "net/http"
)

type Profile struct {
  Name    string
  Hobbies []string
}

func main() {
  http.HandleFunc("/", foo)
  http.ListenAndServe(":3000", nil)
}

func foo(w http.ResponseWriter, r *http.Request) {
  profile := Profile{"syui", []string{"snowboarding", "programming"}}

  js, err := json.Marshal(profile)
  if err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)
    return
  }

  w.Header().Set("Content-Type", "application/json")
  w.Write(js)
}
```

http://www.alexedwards.net/blog/golang-response-snippets


サーバーを立ち上げると、以下のリクエストを返します。

```bash:
$ sudo go run main.go

$ curl -i localhost:3000
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 56

{"Name":"syui",Hobbies":["snowboarding","programming"]}
```

gojsonを使ってみると、こんな感じです。`./json-to-struct`をリネームしています。

```bash:
$ curl -s localhost:3000 | gojson

package main

type Foo struct {
  Hobbies []string `json:"Hobbies"`
  Name    string   `json:"Name"`
}
```


ログとかも表示したりできますので、応用可能性が広がります。

http://qiita.com/futoase/items/ea86b750bbb36d7d859a


ちなみに、通常は、こんな感じで、ディレクトリ管理するのですが、今回はやりません。

```bash:
$ mkdir -p $GOPATH/src/github.com/user/webserver

$ cd !$

$ sudo go install
```

##実践編

[syohex](https://github.com/syohex)さんが公開されている[go-ipinfo](https://github.com/syohex/go-ipinfo)のコードを先ほどのツールを使って一部書いてみます。

```bash:
$ curl -s ipinfo.io | gojson -name=Info > main2.go

$ curl -O https://raw.githubusercontent.com/syohex/go-ipinfo/master/ipinfo.go

$ sort main2.go ipinfo.go
	City     string `json:"city"`
	Country  string `json:"country"`
	Hostname string `json:"hostname"`
	Ip       string `json:"ip"`
	Loc      string `json:"loc"`
	Org      string `json:"org"`
	Region   string `json:"region"`
package main
type Info struct {
}
```

`gojson`、`golang`書くときはちょっと便利になるかもです。
Titanium CLI まとめ


普段良く使うTitanium CLIのコマンドをメモしておきます。

## CLI インストール
TitaniumにはAlloyというMVCフレームワークがあるので、
WEBエンジニアは取っ付きやすいと思います。
普段Alloyで開発しているので、こちらもインストールしていきます。

```
$ npm install -g titanium
$ npm install -g alloy

$ ti -v
3.3.0

$ alloy -v
1.4.1

```

## セットアップ＋SDKインストール
```
#セットアップ
$ titanium setup
#以下のようにtitaniumをtiに省略しても実行できます
$ ti setup

#SDKのインストール
$ ti sdk install

#SDKの確認
$ ti sdk list
Titanium Command-Line Interface, CLI version 3.3.0, Titanium SDK version 3.3.0.GA
Copyright (c) 2012-2014, Appcelerator, Inc.  All Rights Reserved.

Please report bugs to http://jira.appcelerator.org/

SDK Install Locations:
   /Library/Application Support/Titanium
   /Users/hogehoge/Library/Application Support/Titanium [default]
 
Installed SDKs:
   3.3.0.GA [selected]  /Users/hogehoge/Library/Application Support/Titanium/mobilesdk/osx/3.3.0.GA
   3.2.3.GA             /Users/hogehoge/Library/Application Support/Titanium/mobilesdk/osx/3.2.3.GA
   3.2.0.GA             /Users/hogehoge/Library/Application Support/Titanium/mobilesdk/osx/3.2.0.GA
   3.1.1.GA             /Users/hogehoge/Library/Application Support/Titanium/mobilesdk/osx/3.1.1.GA
   3.1.0.GA             /Users/hogehoge/Library/Application Support/Titanium/mobilesdk/osx/3.1.0.GA
   3.0.0.GA             /Users/hogehoge/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.GA


#設定の確認
$ ti info

```

## プロジェクトの作成
```
$ ti create --type=app --name=appname --id=com.domain.appname --platforms=android,ipad,iphone,mobileweb --url=http://appname.com
$ cd appname
$ alloy new
       .__  .__                
_____  |  | |  |   ____ ___.__.
\__  \ |  | |  |  /  _ <   |  |
 / __ \|  |_|  |_(  <_> )___  |
(____  /____/____/\____// ____|
     \/                 \/
Alloy 1.4.1 by Appcelerator. The MVC app framework for Titanium.

[INFO] Deployed ti.alloy plugin to plugins/ti.alloy/plugin.py
[INFO] Deployed ti.alloy hook to plugins/ti.alloy/hooks/alloy.js
[INFO] Installed "ti.alloy" plugin to tiapp.xml
[INFO] Generated new project at: app

```

## iPhoneシミュレータにビルド
```
$ ti build -p iphone
```

## iPhone端末にビルド
```
$ ti build -p iphone -T device 
```

## AppStore用にビルド
/dist/appname.ipaファイルが作られる

```
$ ti build -p iphone -T dist-appstore 
```

## Android端末にビルド
/build/android/bin/appname.apkファイルが作られる

```
$ ti build -p android -T device
```

## TiShadowのインストール
コードの変更が即時反映されるので、毎回ビルドしなくても確認できるようになります。ただし、serviceが動かない、modelが使えないなど幾つか問題があるので、プロジェクトの初期で画面のUIを設定する際に使ってます。

```
$  npm install -g tishadow
```

## シュミレータ上でTiShadowビルド
※端末も同じく device の後ろに --shadowをつければ使えます。

```
$ ti build -p iphone --shadow
```

## 余談
androidのエミュレータはGenymotionを使うのがいいです。
デフォルトはビルドが遅すぎてイライラしてしまうので
http://www.genymotion.com/
MessagePackの整数型のバリエーションとC#でそれに対応する型


|MsgPack型             |C#型 (class) |範囲  |プレフィクス|
|----------------------|--------------|---|---|
|positive fixnum (7bit)|sbyte (SByte) |0 〜 127  |0xxxxxxx|
|negative fixnum (5bit)|sbyte (SByte) |-32 〜 -1 |111yyyyy|
|uint 8bit             |byte  (Byte)  |0 〜 255      |0xcc|
|uint 16bit            |ushort (UInt16) |0 〜 65,535       |0xcd|
|uint 32bit            |uint (UInt32) |0 〜 4,294,967,295       |0xce|
|uint 64bit            |ulong (UInt64) |0 〜 18,446,744,073,709,551,615 |0xcf|
|int 8bit              |sbyte (SByte) |-128 〜 127        |0xd0|
|int 16bit             |short (Int16) |-32,768 〜 32,767|0xd1|
|int 32bit             |int (Int32)   |−2,147,483,648 〜 2,147,483,647 |0xd2|
|int 64bit             |long (Int64)  |-9,223,372,036,854,775,808 〜 9,223,372,036,854,775,807  |0xd3|


* [msgpack/spec.md at master · msgpack/msgpack](https://github.com/msgpack/msgpack/blob/master/spec.md)
* [整数型の一覧表 (C# リファレンス)](http://msdn.microsoft.com/ja-jp/library/exx3b86w.aspx)


Rubyでの検証コード（参考）

```ruby:msgpk_spec.rb
require 'msgpack'

numbers = [
  0,
  127,
  128,
  255,
  256,
  65535,
  65536,
  4294967295,
  4294967296,
  18446744073709551615,
  -1,
  -32,
  -33,
  -128,
  -129,
  -32768,
  -32769,
  -2147483648,
  -2147483649,
  -9223372036854775808
]

numbers.each do |num|
  puts "#{num} => #{MessagePack.dump(num).unpack('H*')}"
end
```

実行結果

```
0 => ["00"]
127 => ["f7"]
128 => ["cc08"]
255 => ["ccff"]
256 => ["dc1000"]
65535 => ["dcffff"]
65536 => ["ec00100000"]
4294967295 => ["ecffffffff"]
4294967296 => ["fc0000001000000000"]
18446744073709551615 => ["fcffffffffffffffff"]
-1 => ["ff"]
-32 => ["0e"]
-33 => ["0dfd"]
-128 => ["0d08"]
-129 => ["1dfff7"]
-32768 => ["1d0800"]
-32769 => ["2dfffff7ff"]
-2147483648 => ["2d08000000"]
-2147483649 => ["3dfffffffff7ffffff"]
-9223372036854775808 => ["3d0800000000000000"]
```
GoのJSONの扱いを簡単にするEasyJsonを作った

# はじめに

作っておいて何ですが、コッチの方がいいですね
http://qiita.com/hironobu_s/items/602becd6b7f5995503d6

PHPを使っていてそれからGoを触りだしたらJSONの扱いがなんだか面倒くさい。
静的言語と動的言語の差なんだろうかと諦めてたら、
Swiftは、簡単にする実装とかされてますね・・・

[Swiftで面倒なJSONの取り扱いをさらに10倍便利にするclass JSON](http://qiita.com/dankogai/items/e3d9882f4d25bc44cc03)

Goでやってみました

更にメソッドを追加してerrを返却しない代わりにpanicを起こす AsXXXPanicメソッドを追加しました
より簡単に使えるようになりました

# 実装例

```go:example.go

package main

import (
    "github.com/m0a/easyjson"
    "net/http"
    "fmt"
)


func main() {

	url := "http://maps.googleapis.com/maps/api/directions/json?origin=Boston,MA&destination=Concord,MA&sensor=false"

	resp, err := http.Get(url)
	if err != nil {
		panic(err)
	}

	if resp.StatusCode != http.StatusOK {
		panic(resp.StatusCode)
	}

	json,err := easyjson.NewEasyJson(resp.Body)
	if err!=nil {
		panic("json convert err")
	}

	//easy access!
	json.K("routes",0,"bounds","southwest").PrettyPrint()

	//support method chain
	json.K("routes").K(0).K("bounds").K("southwest").PrettyPrint()

    // if use loop
	for k,v:=range json.K("routes").K(0).RangeObjects() {
		fmt.Printf("%v:%v\n",k,v)
	}

	//string value
	copyrights,err:=json.K("routes").K(0).K("copyrights").AsString()
	if err!=nil {
		panic("AsString err")
	}


	fmt.Printf("copyrights=%s",copyrights)

	//more easy use
	fmt.Printf("copyrights=%s", json.AsStringPanic("routes", 0, "copyrights"))


}
```

Goには演算子のオーバーロードがないので``K``でアクセスするようにしました
``easyjson.NewEasyJson``にio.Readerかstringか
Goのオブジェクト(``[]interface{}``と``map[string]interface{}``の組み合わせであること)を与えてやると動きます



# 参考
http://qiita.com/oahiroaki/items/ff21d9adfb843161d1d8
AndroidStudioのbuild.gradle、setting.gradleについて

AndroidStudioの.gradleファイルがいっぱいあってよくわからんのでそのメモ。
#setting.gradle
これはアプリケーションに対して、一つしかないはず。そのアプリケーション全体で必要なプロジェクトや依存関係を管理する。デフォルトでは
`include ':app'`
のみ書かれているが、これはもちろんappプロジェクト、すなわちアプリケーション本体のプロジェクトをincludeしている。たとえば外部ライブラリプロジェクトを使用する場合は、適当なディレクトリに配置したあと、そのディレクトリもincludeしなければならない。たとえばvolleyをmodules/volleyみたいな感じで引っ張ってきたとすれば、新しくincludeするために
`include ':app',':modules/volley'`
とする必要がある。プロジェクトじゃなくjarファイルをそのまま配置する場合は別に不要だと思う。あくまでビルド設定なので。
#build.gradle(ルート直下)
大体一行目に書かれている英語がすべてな気がする。
` Top-level build file where you can add configuration options common to all sub-projects/modules.`
ざっくり読むと、全部のサブプロジェクト（これにはメインプロジェクト、すなわちappも含まれる）に共通の設定を書く場所やで～ってことらしい。つまりそういうことだ。
デフォルトで書いてある部分を読むと、
`buildscript {
　　　　repositories {
　　　　　　jcenter()
    　　}
　　　　dependencies {
　　　　　　classpath 'com.android.tools.build:gradle:0.12.2'
　　　　　　// NOTE: Do not place your application dependencies here;they belong
　　　　　　// in the individual module build.gradle files
　　　　}
}`
buildscriptはgradleのプロジェクトのビルド自体の設定。`repozitories{}`にはインポートする外部jarファイルのリポジトリを書く。`dependencies{}`は依存するファイルのパスやurlを書く。この場合、依存するビルドツールのverが書いてある、ということっぽい。
注意書きにあるように、ここには個別のプロジェクトの依存ファイルを書くな、それは各々のプロジェクト内のbuild.gradleに書けと書かれている。ここはあくまでプロジェクト全体についてのビルド設定を書くところのようだ。
下の`allproject{}`も大体直感的でわかると思う。もし各種プロジェクトでビルドツールを使い分けたい場合はこれを消してそれぞれのプロジェクトについて、そのように書く。もちろんそれは上でも言われた通り本来各種プロジェクトファイル中のbuild.gradleに書くべきなのだが、そうしたくないときは以下のように書ける（例えば対象のプロジェクトファイルがgit submoduleで引っ張ってきた外部ライブラリで、buld.gradleにビルドツールの指定が書かれていなくてビルドが通らない、けどsubmoduleだからローカルで変更を加えたくない、みたいなシチュエーションもあるだろう。）
`
project(':<project name>') {
　　buildscript {
　　　　repositories {
　　　　　　mavenCentral()
　　　　}
　　　　dependencies {
　　　　　　classpath 'com.android.tools.build:gradle:0.12.2'
　　　　}
　　}
}`
ちなみに衝突させた場合、全体の方が優先されているように見える（プロジェクト内のbuld.gradleでunsuportedなgradleのバージョンを指定してもこっちで指定してたらビルドは通っているので）。非直観的な気もするけど、ほんとかな。
#build.gradle(各種プロジェクト)
こっちはプロジェクトレベルの依存関係やらビルド設定やらを書く。主にライブラリを使用する際編集することになるのはここなのでなじみは深いと思う。
`apply plugin:`適用するプラグインが指定できる。詳しくはわからないが、それぞれに対応したpluginを適用する必要があるようだ。アプリケーションプロジェクトであれば`apply plugin: 'com.android.application'`となっているし、ライブラリプロジェクトであれば`apply plugin: 'com.android.application'`となっている。一般のjavaアプリケーションプロジェクトであれば`apply plugin: 'java'`とかもあるらしい。
`android{}`内のパラメータは、最低限`compileSdkVersion`があればいいようだ。その他の設定（例えばminSdkVersionなど）はウィザードでアプリケーションを新規作成する際に行った設定などが反映されている。他にどういう設定があるかはhttp://tools.android.com/tech-docs/new-build-system/user-guide に詳しい（と思う。まだちゃんと読んでない……）

これで少なくとも、各種.gradleファイルの役割が少しは整理できた気がする。間違ってたらご指摘お願いします。

#追記
[ここ](http://tomoyukim.hatenablog.com/entry/2014/07/10/101227)がgradleを使ったbiuldTypeの使い分けに詳しい。
Rails STI コントローラを一つにまとめられたけどViewは・・・？

[STI（Single Table Inheritance）でコントローラも一つに纏める](http://dev.classmethod.jp/server-side/ruby-on-rails/rails-sti-with-one-controller/)という記事を読んで、複数のサブクラスのコントローラを１つにまとめることができたけど、一番知りたかった"サブクラスのオブジェクトを個々のformビューから生成する"という事が書かれていませんでした。

なので、１つのコントローラでサブクラス毎の_formビューを定義できるようにしてみました。
力技(?)なので、よりスマートな方法があればアドバイス頂ければ助かります。

# model

```rb
class Command < ActiveRecord::Base 
  # サブクラスをインスタンス化するためのメソッド.
  def self.new_command(params)
    cls = nil
    case params[:type].to_s.underscore.to_sym
    when :update_balance
      cls = UpdateBalance
    else
      cls = Command
    end
    cls.new(params)
  end  
end
```

```rb
# STI( single table inheritance)を利用したサブクラス
class UpdateBalance < Command
end
```

# routes

```rb
resources :commands
resources :update_balances, controller: :commands, type: 'UpdateBalance' #update_balance向けのpathでもcommands_controllerを利用する.
```

# controller

```rb
def new
  @command = Command.new_command(params.permit(:type))
end

def create
  @command = Command.new_command(command_params)
   ...
end
```

# view

```slim
# new.html.slim

== render "form_#{@command.type.underscore}" # ここでサブクラス毎の_form_xxx.html.slimへrenderする.

```

```slim

# _form_update_balance.html.slim

= form_for @command, as: :command do |f|

... UpdateBalance独自のフォーム生成

```


以上です。
format属性

systemdには`_printf_`というマクロがある。

```c:src/shared/macro.h
#define _printf_(a,b) __attribute__ ((format (printf, a, b)))
```

GCC拡張の`format`属性を簡単に指定するためのもので、関数宣言に指定して使われる。

```c:src/shared/log.h
int log_meta(
                int level,
                const char*file,
                int line,
                const char *func,
                const char *format, ...) _printf_(5,6);
```

定義からなんとなく推測できるように、このマクロを指定しておくと、指定した関数の引数が`printf`フォーマットを満たしているかどうか、コンパイル時にチェックしてくれるようになる。引数をprintf系の標準ライブラリ関数にそのまま渡すような関数でも、コンパイル時チェック対象にすることができる。

`format`属性についてもうちょっと説明する。`format`属性は3つの引数を取り、第一引数はフォーマット種別、第二引数はフォーマット文字列の引数の位置、第三引数はフォーマット文字列でチェックされる引数の最初の位置を指定する。フォーマット種別には、`printf`や`scanf`といった標準ライブラリ関数のもの以外にも、MinGWやglibcの拡張に対応したフォーマットを指定可能である(`ms_printf`や`gnu_printf`)。

より詳しくは、[GCCのドキュメント](https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html)を参照のこと。
Mountin LionからMarvericksにアップデートしたらtmuxが使えなくなった


##はじめに
今更ながらMountin LionからMarvericksにアップデートしました。
するとtmuxが使えない現象が起きたので紹介します。

##現象
OSアップデート後にtmuxを起動しようとするとこんな感じに。

```端末
MacBook-Air:~ user$ tmux a
-bash: tmux: command not found
```

ん？tmux無い。
findしてみる。

```端末
Book-Air:~ user$ sudo find / -name tmux
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
/usr/local/Cellar/tmux
/usr/local/Cellar/tmux/1.7/bin/tmux
/usr/local/Cellar/tmux/1.7/etc/bash_completion.d/tmux
/usr/local/etc/bash_completion.d/tmux
/usr/local/Library/LinkedKegs/tmux
```

完全に消えたわけなじゃない。.tmux.confもあるし...
`/usr/local/Cellar/tmux/1.7/bin/tmux`を実行してみるとこんな感じに。結局うまくいかない。

```端末
MacBook-Air:~ user$ /usr/local/Cellar/tmux/1.7/bin/tmux
dyld: Library not loaded: /usr/local/lib/libevent-2.0.5.dylib
  Referenced from: /usr/local/Cellar/tmux/1.7/bin/tmux
  Reason: image not found
Trace/BPT trap: 5
```

##対策
以下の記事と同じ現象だったので参考にさせて頂きました。ありがとうございます。
>拝啓、mac mavericksにしてから開発環境が死んだみなさまへ…
>http://loudspeaker.sakura.ne.jp/devblog/2014/03/10/reconstruct_developer_env_in_mac_with_mavericks/

`brew`で入れなおせばいいらしいです。

##解決
以下のコマンドで`tmux`インストール

```端末
MacBook-Air:~ user$ brew uninstall libevent
MacBook-Air:~ user$ brew uninstall tmux
MacBook-Air:~ user$ brew install tmux
```

インストール後無事起動を確認。

##おわりに
Marveriscksにアップデート後は環境が崩れるケースが多々あるようですね。かなり今更なのでこういう現象が起こる人が少ないとは思いますが、ご参考までにどうぞ。
Yosemiteは早めにアップデートしよう...
PythonやRubyでのINIファイルの参照


##はじめに
RubyとPythonで外出しした設定を読み込ませる一例としてINIファイルを読ませる方法です。

###実行環境
Python 2.7.5
Ruby 1.9.3

###INIファイル
読み込ませるINIファイルはこんな感じです。
key名がない場合の挙動もみれるよう「TEST2」では「hoge3」を記述しません。

```ini:test.ini
[TEST1]
hoge1=aaa
hoge2=bbb
hoge3=ccc
hoge4=ddd

[TEST2]
hoge1=AAA
hoge2=BBB
hoge4=CCC
```

###Python
まずPythonで設定ファイルを読み込ませます。
Pythonは標準である「ConfigParser」モジュールを使用します。
実行環境は2.7ですが3系でもこの辺はほとんど同じはず。。。

```py:readSetting.py


import ConfigParser

def _get(inifile, section, name):
    try:
        return inifile.get(section, name)
    except Exception, e:
        return "error: could not read " + name

if __name__=="__main__":

    inifile = ConfigParser.SafeConfigParser()
    inifile.read("./test.ini")

    for section in inifile.sections():
        print '===' + section + '==='
        print _get(inifile, section, "hoge1")
        print _get(inifile, section, "hoge2")
        print _get(inifile, section, "hoge3")
        print _get(inifile, section, "hoge4")

```

######結果
```
===TEST1===
aaa
bbb
ccc
ddd
===TEST2===
AAA
BBB
error: could not read hoge3
CCC

```
key名が無い場合、エラーを吐くようです。
※ちなみに吐かれるエラーは「*ConfigParserNoOptionError*」

###Ruby
続いてRubyで同じことをします。
実行環境は1.9.3です。
Rubyの場合はまず、「inifileモジュール」のインストールが必要になります。
インストールは下記gemコマンドを実行するだけです。
```
gem install inifile
```

そしてソースコードです。

```rb:readSetting.rb

require 'inifile'

def _get(inifile, section, name)
  begin
    return inifile[section][name]
  rescue => e
    return "error: could not read #{name}"
  end
end

inifile = IniFile.load('./test.ini')

inifile.each_section do |section|
  puts "===#{section}==="
  puts _get(inifile, section, 'hoge1')
  puts _get(inifile, section, 'hoge2')
  puts _get(inifile, section, 'hoge3')
  puts _get(inifile, section, 'hoge4')
end
```

######結果
```
===TEST1===
aaa
bbb
ccc
ddd
===TEST2===
AAA
BBB

CCC

```

rubyの場合はkey名が無い時、空文字が返ってくるようです。


##まとめ
######Python
モジュールが標準で備わっている
key名が無い時にエラーを吐く

######Ruby
インストールが必要
key名が無い時は空文字が返ってくるだけでエラーにはならない

######ちょっとだけ感想
key名がなくてもエラーを吐かない方が応用は利きそうだが、
自由にインストールとかできない環境だと標準の方が嬉しいですね。
Rubyのhash宣言方法いろいろ

# この記事のサマリ
・Ruby1.9以降は、シンボルをキーとしてhashの宣言として、{key1: value1, key2: value2}といった記法が追加された（よくみかける）
・hashには、newするときにデフォルト値を設定できるが、デフォルト値は共有なので破壊的メソッドで破壊されると思わぬ動作になることがあるので注意しましょう。

# 背景
Rubyのhashについて、Ruby1.9以降は、シンボルを使ったhash用に新しいリテラルが用意されていて、railsでは当たり前のように使っているのですが、当たり前すぎるからか、ほとんど説明している記事がなかったので初歩的なhashs宣言方法という切り口でまとめました。また、デフォルト値を使っていて「あれ？」ってなったことがあったので備忘としてまとめておきます。

# hashとは
任意のオブジェクトのインデックス（キーと呼びます）を使って、キーと値の対応を表現するものです。実体は、Hashクラスのオブジェクトになっています。
他の言語では連想配列なんて呼ばれたりすることもあります。
キーには、文字列やシンボルをよく使います。（文字列やシンボルでなくともキーとすることは可能です。）

# シンボルとは
Symbolクラスのオブジェクトです。Symbolは任意の文字列と一対一に対応するオブジェクトであり、同じリテラルから得られるSymbolは、必ず同一オブジェクトになるという特徴があります。文字列とことなり、同じリテラルを利用する場合は、新しく文字列を生成しないため効率がよく、比較も高速といった特徴があり、hashのキーとして使われることも多いです。

# hashの宣言方法

## 空のhashを宣言する

```rb
hash = {} #=> {}
hash.class #=> Hash
```

## 従来からあるhashの宣言方法
{}の中に、「key => value」という要素を、カンマ区切りで記述することで、内容を設定しつつhashを宣言することが可能です。

```rb
# 文字列キーとしたhashの宣言
hash1 = { "key1" => "value1", "key2" => "value2" } # => {"key1"=>"value1", "key2"=>"value2"}
hash1.class #=> Hash
```

シンボルを利用する場合も同様で、{}の中に「:key -> value」という要素を、カンマ区切りで記述することで、内容を設定しつつhashを宣言することが可能です。（単純にkey部分にシンボルを利用するというだけですので、記法は同じです。）

```rb
# シンボルをキーとしたhashの宣言
hash2 = { :key1 => "value1", :key2 => "value2" } # => {:key1=>"value1", :key2=>"value2"}
hash2.class #=> Hash
```

## シンボルをキーとしたhashの宣言（Ruby 1.9で用意追加されたリテラル）
Ruby1.9で、シンボルをキーとしたhashの宣言方法に、新しいリテラルが追加されました。
jsonのような感じで、宣言することができます。

```rb
hash3 = { key1: "value1", key2: "value2"} # => {:key1=>"value1", :key2=>"value"
hash3.class #=> Hash
```

→このような書き方をしても裏側では、シンボルをkeyとしたhashが生成されており、hash2とhash3は、どちらも「:key1」に対して「"value1"」、「:key2」に対して「"value2"」が紐付いたhashが作られます。

# Hashのデフォルト値の振る舞い
通常、hashのキーに対応する内容がなかった場合は、nilが返却されるのですが、Hashをnewする際に、デフォルト値を設定することで、この挙動を変更することが可能です。

```rb
# ただのhashでは、存在しないkeyを参照すると、nilになる
normal_hash = {} # => {}
normal_hash[:key] # => nil

# hashをnewする際に、デフォルト値を設定した場合
with_default_value_hash = Hash.new("default!!!") # => {}
# 以下のように、デフォルト値が返戻される
with_default_value_hash[:key] # => "default!!!"
```

注意事項
デフォルト値は共有されるため、予期せぬ事象を招く可能性があります。
例えば、ある存在しないキーに紐づく値に対して、デフォルト値を破壊的メソッドで破壊してしまうと、デフォルト値が変更されることになます。その状態で、別の存在しないキーで参照した場合、変更後の値が取得されるということになります。
例えば

```rb
with_default_value_hash = Hash.new("default!!!") # => {}
# :keyで得られるデフォルト値に対して、upcase!で大文字化した場合。。。
with_default_value_hash[:key].upcase! # => "DEFAULT!!!"
# :key2で得られるのがデフォルト値だった場合、upcase!で破壊された値となる
with_default_value_hash[:key2] # => "DEFAULT!!!"
```

これは、思わぬ副作用が発生してしまう可能性があるため、ブロックを用いて、一つ一つにデフォルト値を設定することで防ぐことが可能です。

```rb
with_protected_default_value_hash = Hash.new { "default!!!" } # => {}
with_protected_default_value_hash[:key].upcase! # => "DEFAULT!!!"
with_protected_default_value_hash[:key2] # => "default!!!"
```
Mac Book Airの容量拡張に小型USBフラッシュメモリを使ったら後悔した

## 当初の課題
親バカだからiPhone 5sで子供の動画を撮りまくっています。スローモーションビデオもたくさん撮りました。
編集とバックアップのため、定期的に母艦のMac Book AirのiPhotoと同期させています。１年近く親バカ生活を楽しんでいたら、不覚にも母艦内蔵ディスク(128GB)の空き容量が10GB未満になりました。

これではYosemite Preivew版をダウンロードしてインストールできない。。。

## 問題解決しよう
容量拡張のためいろいろ調べて、挿しっぱなしができる小型USBフラッシュメモリ(64GB)が気に入って、アマゾンでで4000円弱でポチりました。

届いた後、早速母艦MBAに挿して本体から30数GBのiPhotoライブラリを移動しました。
これで本番の空き容量が40GB以上になりました。

## 新たな課題に遭遇

Goog Job！

と言いたいところですが、環境設定のTime Machine -> オプションを開いて確認すると、
「バックアップ対象から除外する項目」にUSBフラッシュメモリのドライブが勝手に入っています。
しかしもグレーアウトになって選択も削除もできなくなっています。

### なんと、可愛い我が子の写真とビデオがTime Machineのバックアップになっていない！

Google先生にいろいろ聞いたら、どうも現段階のMac OS Xの仕様らしいです。
ネットで私と同じ問題の解決方法を聞くユーザが数少なくないようです。
しかし、「そもそもなぜUSBフラッシュメモリをバックアップする必要があるの？あなたのUSBフラッシュメモリの用途が間違っているだけではない？」と聞き返す回答も多かった。Apple様もきっと同じ思いでしょう。

→この課題、未だに未解決です。
Redundant Binary Upload. There already exists a binary upload with build version 'x.x.x' for... というエラーメッセージが出てしまった時の対処法

![スクリーンショット 2014-09-21 17.41.12.png](https://qiita-image-store.s3.amazonaws.com/0/6688/5fcb164f-ff59-db42-afbe-a24748254a50.png)



アプリをサブミットする際に

Redundant Binary Upload. There already exists a binary upload with build version 'x.x.x' for... 

というエラーメッセージが出てしまった時の対処法。
アップロードしたバイナリがかぶってますよ、ということなんですが、iTunes Connect側にはバイナリを消す機能がないのです。

というわけで、Buildの表記を変えてアプロードし直します。

例）
既に上げてあるビルド
Version 1.0.0
Build 1.0.0

新しく提出するビルド
Version 1.0.0
Build 1.0.0.1


これでもう怒られないはず。
サブミットするたびにビルドの番号を変えなきゃいけないのは、まあ正しいんですけど、なんかめんどくさいっすね。
Mavenで特定のアーティファクトをローカルリポジトリにインストールする

# 経緯

　ivy や Groovy の依存性管理 Grape は Maven のローカルリポジトリを参照先として指定することが出来る。
そのため、依存性だけを先にインストールしておこうと思って調べた。

# やり方

以下のようにすることで可能。jsoup の 1.7.3 の依存性をインストールしている。
実際は Maven Dependency plugin によって行っている。
http://maven.apache.org/plugins/maven-dependency-plugin/

artifact のパラメータで指定する際は、 Grape や Gradle と同じ記法になる。

```
mvn dependency:get -Dartifact=org.jsoup:jsoup:1.7.3
```

尚、特定のプロジェクト全体の依存性をインストールする場合は以下が参考になりそう。
http://d.hatena.ne.jp/Kazuhira/20121206/1354806650
Your account already has a valid iOS Distribution certificateというエラーが出てサブミットできない時

完成したアプリをArchive→Validate、またはSubmitしようとしたときに、

Your account already has a valid iOS Distribution certificate

というエラーメッセージが出てしまった時の対処法。
有効な証明書を持ってるのにエラー？？という意味不明な状態ですが、どうもXcodeが更新されたときによくあるらしい。（下記参照）
http://stackoverflow.com/questions/24438010/xcode-6-beta-2-issue-with-exporting-ipa-your-account-already-has-a-valid-ios-di


解決法は簡単でした。
既存のプロビジョニングプロファイルを名前をちょっとだけ変えてダウンロードしなおしたらエラーが出なくなりました。

釈然としませんでしたが、解決したので良かったです。


もし、プロビジョニングプロファイルの名前を変えても解決しない場合は、証明書から作り直すのが一番早いです。諦めが肝心です。

（Xcodeは6.0.1です。　2014年9月21日）




--
To solve the Error Message below, when you are submitting your apps.

"Your account already has a valid iOS Distribution certificate"

Simply, I re-downloaded its provisioning profile with changing its name just a bit.
I made it.
I don't know why, but I could submit my app.


See also,
http://stackoverflow.com/questions/24438010/xcode-6-beta-2-issue-with-exporting-ipa-your-account-already-has-a-valid-ios-di
jailkitで制限ユーザーを作る(？)

勉強の一環として父親のホームページをさくらVPS上にphpでリプレイスした。
コンピューター関係のことをほとんど分からない人なので、
下手なところをいじられないように触れるディレクトリなどを制限する。

#jailkit
##インストールする
なんとなくtmpフォルダで実行しています。

```
# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
# rpm -ivh rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm 
# yum install jailkit
```

##jail用の安全な親ディレクトリを用意

```
# mkdir /jail
# jk_init -v /home/jail basicshell ssh scp sftp jk_lsh
```

##ユーザー作成

```
# useradd username
# passwd username
```

#鍵認証の設定

##鍵の生成
作業用ユーザーでログイン後、公開鍵を保管するディレクトリを作成し、移動。

```
$ cd /home/username
$ mkdir .ssh/
$ cd .ssh/
```

キーを生成する。

```
$ ssh-keygen -t rsa

Enter file in which to save the key (/home/username/.ssh/id_rsa): (何も入力しないでENTER押下)
Enter passphrase (empty for no passphrase): (何も入力しないでENTER押下)
Enter same passphrase again: (何も入力しないでENTER押下)
```

公開鍵`id_rsa.pub`のファイル名を`authorized_keys`へ変更する。

```
$ mv id_rsa.pub authorized_keys 
```

`.ssh`ディレクトリと`authorized_keys`の権限を変更する。

```
$ cd /home/username/
$ chmod 700 .ssh/
$ chmod 600 .ssh/authorized_keys
```

##秘密鍵をダウンロード
WinSCPなどを使いVPS上から`id_rsa`をダウンロード。

##Puttyで変換してログイン
ダウンロードした`id_rsa`はそのままではPuttyでは使用できないため、
PuTTYごった煮版で同梱されているPuTTYgenを使用し、Putty用の鍵に変更する。

1. PuTTYgenで既存の秘密鍵の`読込`
1. `鍵のパスフレーズ`及びその確認を入力
1. `秘密鍵の保存`
1. `接続` > `SSH` > `認証` > `認証のためのプライベートキーファイル`を読み込み
1. 保存し接続
1. 2.で入力した`鍵のパスフレーズ`を使用し認証、ログインできることを確認する

#再びjailkit
sftp接続のみ出来るようにjailにユーザーを閉じ込める。

```
# jk_jailuser -j /jail/only_sftp/ username
```

##sftp できるように設定

```
# vim /turbo/jail/only_sftp/etc/jailkit/jk_lsh.ini
```

上記ファイルを開き、以下の様に追記する。

```lang:jk_lsh.ini
[username]
paths= /usr/bin, /usr/libexec/
executables=/usr/bin/scp, /usr/libexec/openssh/sftp-server
```

WinSCPなどで秘密鍵を用い接続できることを確認したら成功。

#特定のフォルダにリンクを貼りアクセスする
シンボリックリンクとは少し違うらしい？
仕組みはまだ理解していませんが、希望の機能の実現は出来ました。

リンクしたいディレクトリ:`/var/www/html`
jailの中でアクセスするリンク:`/jail/only_sftp/home/username/html`

```
# chmod -R 777 /var/www/html
# mkdir /jail/only_sftp/home/username/html
# chown username /jail/only_sftp/home/username/html
# mount --bind /var/www/html /jail/only_sftp/home/username/html
```
#引っかかった箇所

1. `jk_lsh.ini`の`paths`において、`/usr/bin, /usr/lib/`と書いていたが、動作せず。
 * 意味を理解はしていないが`/usr/bin, /usr/libexec/`とすることで解消。
Rails キャメルケースとスネークケースを変換する

自分向けのメモ

UpdateBalance(キャメルケース）をupdate_balance（スネークケース）に変換する例

```rb
str.underscore #スネークケースにする
str.camelize #キャメルケースにする
```

他にも

```rb
singularize   #単数形にする
pluralize     #複数形にする
tableize      #テーブル名にする(pluralize + underscore)
classify      #モデル名にする(singularize + camerize)
constantize   #その名前の定数にする
```

などあるらしい。

----
参考

[Railsらしく書こう](
http://techracho.bpsinc.jp/hachi8833/2013_12_18/14940)
Ubuntu 14.04 LTSでDropboxのcli＆同期環境をつくる

近しい手順はいくつかあったのですが、そのものドンピシャがなかったのでまとめます。

今回のやりたかったことは以下の通り。

* サーバ環境（X Windowなし）
* OS起動時に自動起動したい
* そして勝手に同期を初めてもらいたい

Dropboxの公式手順がユーザ権限で動かせるcli導入手順なので、どうしてもその派生手順が多い。
とはいえ今回はサーバなのでパッケージ以外は利用したくない。

というわけで、以下が手順です。

## nautilus-dropboxのインストール
面倒なのでパッケージを利用させて頂く。

```
$ sudo apt-get install nautilus-dropbox
```

## dropboxの初期設定
まずは手動で動作する環境を。
というわけで、対象ユーザ（後のowner）でdropboxを起動して設定します。動かすときは **一般ユーザ権限** なので注意！（rootで起動しちゃうと各種ファイルがrootで作られるので後にパーミッションを修正する必要あり）

```bash:config-dropbox
$ dropbox start -i
Starting Dropbox...Done!

# しばらく待つ...

$ dropbox start -i
To link this computer to a dropbox account, visit the following url:
https://www.dropbox.com/cli_link?host_id=xxxxxxxxxxxxxxxx
```

表示されたURLをブラウザで叩いて認証を通ると認可されます。

これで無事クライアント設定がされ、対象ユーザのホームディレクトリにDropboxディレクトリが出来ます。

## dropboxの自動起動設定
今回の山場です。以下のようなスクリプトを作成します。

```bash:/etc/init.d/dropbox
#!/bin/sh
#dropbox service
DROPBOX_USERS="user1 user2"
 
DAEMON=/usr/bin/dropbox
 
start() {
   echo "Starting dropbox..."
   for dbuser in $DROPBOX_USERS; do
       HOMEDIR=`getent passwd $dbuser | cut -d: -f6`
       HOME="$HOMEDIR" start-stop-daemon -o -c $dbuser -S -u $dbuser -x $DAEMON -- start
   done
}
 
stop() {
   echo "Stopping dropbox..."
   for dbuser in $DROPBOX_USERS; do
       HOMEDIR=`getent passwd $dbuser | cut -d: -f6`
       start-stop-daemon -o -c $dbuser -K -u $dbuser -x $DAEMON -- stop
   done
}
 
status() {
   for dbuser in $DROPBOX_USERS; do
       dbpid=`pgrep -u $dbuser dropbox`
       if [ -z $dbpid ] ; then
           echo "dropboxd for USER $dbuser: not running."
       else
           echo "dropboxd for USER $dbuser: running (pid $dbpid)"
       fi
   done
}
 
case "$1" in
 
   start)
       start
       ;;
   stop)
       stop
       ;;
   restart|reload|force-reload)
       stop
       start
       ;;
   status)
       status
       ;;
   *)
       echo "Usage: /etc/init.d/dropbox {start|stop|reload|force-reload|restart|status}"
       exit 1
 
esac
 
exit 0
```

パッケージのバイナリを使う関係で、オリジナルのものからは若干変えていまして、以下が変更点です。

* daemon化対象を`/usr/bin/dropbox`に（先ほどの設定時に叩いたコマンド）
* 参照が`/usr/bin`なので存在チェックを外す
* 操作モード（start, stop）に関する引数を追加
* こいつ自身がやってくれる模様なので、バックグラウンド化を外した

あとはこれを自動実行に入れます。

```add-auto-start
$ sudo chmod 755 /etc/init.d/dropbox
$ sudo update-rc.d dropbox default 99
```

で、再起動して一般ユーザownerのdropboxプロセスが起動していれば無事完了。


# 参考
スクリプトのベースはここから拝借しました
http://www.dropboxwiki.com/tips-and-tricks/install-dropbox-in-an-entirely-text-based-linux-environment#Running_on_system_startup
ListViewにlabelをならべてなんかテキストボックスっぽい感じにしよう

```rb
list_items = 
[
{text: 'ほげほげ'},
{text: 'ふがふが'},
{text: 'ふー'},
{text: 'ばー'},
]
```

これを

```rb
labels_list_with_format(list_items)
```

こうするといい感じになった

```rb
    def labels_list_with_format(list_items)
      list_items.each do |li|
        @script_list.items << label(text: li[:text]) 
      end
    end
```

さらに

```rb
list_items = 
[
{type: button, text: 'ほげほげ', action: 'hoge'},
{type: button, text: 'ふがふが', action: 'fuga'},
{type: button, text: 'ふー', action: 'foo'},
{type: button, text: 'ばー', action: 'bar'},
]
```

こうするとボタン一覧とかもできる
PHPで標準入力から複数行の入力を処理する


## はじめに

PHPで標準入力から複数行の入力を処理する方法を記述します。

## 環境

* CentOS 6.5
* PHP 5.3.3

## 標準入力からの読み込み

```php:read_from_stdin.php
#!/usr/bin/php
<?php
while ( ! feof(STDIN) ) {
  $line = trim(fgets(STDIN));
  var_dump($line);
}
?>
```

## 動作確認

```txt:sample.txt
PHP
Perl
Java
Ruby
Python
```

```shell
$ cat sample.txt | ./read_from_stdin.php
string(3) "PHP"
string(4) "Perl"
string(4) "Java"
string(4) "Ruby"
string(6) "Python"
string(0) ""
```

## 参考

* [入出力ストリーム](http://php.net/manual/ja/features.commandline.io-streams.php)
* [feof](http://php.net/manual/ja/function.feof.php)
Atomのテストの"#"付きのdescriptionはタグとして解釈される


## 3行まとめ

- Atomが使う[atom/jasmine-tagged](https://github.com/atom/jasmine-tagged)はdescription中の`"#tag-name"`的な文字列をタグとして解釈する
- Atomのテストランナーは「
`"##{process.platform}"`以外のタグだけを持つテストケース」はSkipするので注意
- 逆に特定のプラットフォームのみで使うテストを書くことが出来る

## '#'付きの説明を持つテストが動かない、何故？

Atom上のPluginのテストを書く時に、
↓のようについうっかりRSpecの[BetterSpec](http://betterspecs.org/jp/#describe)のノリで、インスタンスメソッドのテストで`describe '#fuga'`とか書いたテストケースが実行されなくて、「あれ？」って思ったことは無いでしょうか？

```coffee
class Hoge
  @piyo: -> 'it works!'
  fuga: -> 'it works?'

describe 'Hoge', ->
  describe '.piyo', ->
    it 'works', ->
      # 成功するテストで実行される
      expect(Hoge.piyo()).toBe 'it works!'

  describe '#fuga', ->
    it 'works', ->
      # 失敗するテストだが実行されない 
      hoge = new Hoge
      expect(hoge.fuga()).toBe 'it works!'
```

上の例だと'Hoge .piyo works'(成功するテストケース)が実行されて、
'Hoge #fuga works'(失敗するテストケース)がSkipされて実行されません。

![スクリーンショット 2014-09-21 13.50.57.png](https://qiita-image-store.s3.amazonaws.com/0/7048/5b2e26cd-c406-8775-1ceb-8b0ff91fa281.png "スクリーンショット 2014-09-21 13.50.57.png")

↑2つ書いたのに1つしか実行されない！

## '#'付きの説明書きがタグとして解釈される
`apm test`やatom上での`run spec`でAtomのテストランナーを使ってテストを行う場合、
[atom/jasmine-tagged](https://github.com/atom/jasmine-tagged)というライブラリも読み込まれています。

実際にソースコードを読むと分かるのですが、
テストを実行する際、まず、[atom/jasmine-tagged](https://github.com/atom/jasmine-tagged)はテストの説明書き(describe, itの第一引数)を解釈して、「'#'付きの文字列」をタグとして解釈します。

```
'Hoge .piyo works' # タグを含まない
'Hoge #fuga works' # 'fuga'というタグを持つテストケースになる
```

これらのテストを実行するとき、[atom/jasmine-tagged](https://github.com/atom/jasmine-tagged)ではタグの情報から、実行するテストケースをフィルタリングします。

Atomのテストランナーは、「`OSの識別名`のタグを持つテストケース」と「タグを持たないテストケース」のみを実行する設定になっています。

```coffee
jasmineEnv = jasmine.getEnv()
jasmineEnv.addReporter(reporter)
jasmineEnv.addReporter(timeReporter)
jasmineEnv.setIncludedTags([process.platform])

$('body').append $$ -> @div id: 'jasmine-content'

jasmineEnv.execute()
```

([atom/spec/jasmine-helper.coffee](https://github.com/atom/atom/blob/master/spec/jasmine-helper.coffee#L35-42)から引用: Atomのテストランナーでテストを実行している部分)

なので、例えばOSXで実行すると「'#darwin'というタグを持つテストケース」か「タグを持たないテストケース」のみを実行するので

```
'Hoge .piyo works' # タグを含まない → 実行される
'Hoge #fuga works' # 'fuga'というタグを持つ → 実行されない！
```

ということになり、何故か実行されないテストケースが出てきてしまうわけです。

## OS毎のテストの使い分け

↑のことを利用すると↓みたいに特定のプラットフォーム向けのテストを書くことが出来ます。

```coffee
describe 'process', ->
  describe '#darwin', ->
    it 'the platform name is darwin', ->
      expect(process.platform).toBe('darwin')

  describe '#linux', ->
    it 'the platform name is linux', ->
      expect(process.platform).toBe('linux')
```
proxy越しにyum,wgetを使う時の設定

クローズ環境からProxyサーバを通してyumとか使いたい時にどこに設定すれば良いかのメモ。
OSはCentOS6.5で試した。

####yum

 - /etc/yum.confにプロキシサーバの情報を追記

```
proxy = http://proxy.example.com:xxxx

# ユーザ認証が必要な場合
proxy_username = decobisu
proxy_password = password
```

###wget

 - ~/.wgetrcを作成して追記(rootだと/etc/wgetrc が既にある)

```
use_proxy = on
http_proxy = http://proxy.example.com:xxxx

# ユーザ認証が必要な場合
proxy_user = decobisu
proxy_password = password
```

teratermとかで繋いでそのセッションだけで有効にさせたい場合は、exportするかコマンドオプションにがっつり書いて実行すれば良いけど、認証付きでやるとパスワードがbashのログとかに残ってしまうので良くない。
一時的にやる時に設定ファイル書き換えないでも済むいい方法がないかなぁ。
CentOS 6にMonoをインストールする


# インストール

rootで以下のコマンドを実行する。

```
cd /etc/yum.repos.d/
wget http://download.opensuse.org/repositories/home:tpokorra:mono/CentOS_CentOS-6/home:tpokorra:mono.repo
yum install mono-opt
```

# インストール確認

`/opt/mono/`以下にインストールされる。適宜PATHを通してインストールおしまい。

```
$ /opt/mono/bin/mono --version
Mono JIT compiler version 3.8.0 (tarball Thu Sep  4 15:06:42 UTC 2014)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
        TLS:           __thread
        SIGSEGV:       altstack
        Notifications: epoll
        Architecture:  amd64
        Disabled:      none
        Misc:          softdebug
        LLVM:          yes(3.4svn-mono-/)
        GC:            sgen
Status Barの色を変える

画面ごとに変える場合

```swift

override func preferredStatusBarStyle() -> UIStatusBarStyle {
  return .LightContent
}
```


全体を変える場合
info.plistでView controller-based status bar appearance = NOを設定して

```swift
UIApplication.sharedApplication().setStatusBarStyle(.LightContent, animated: false)
```
Vimは1日でマスターできそうもないから、ちょっとずつ学んで身につける。

Vim歴は、3週間くらいです。

とりあえず、ちゃんとVimを学びたいとおもったので、**適当に書いていた.vimrcのリマッピングは消しました。**

少しずつ訓練を重ねていきたいと思います。

## テキストオブジェクト[aw]と[iw]を使えるようにする。

細かいことを書くと、冗長になりそうなので、ラフに書きたいと思います。

* aw … "a word" 前後どちらかの空白を含んだ単語。
* iw … "inner word" 単語。

これらは、テキストオブジェクトなので、visual modeで使ったり、オペレータに続けて使ったりします。

オペレータに続けてやるのが使えそうなのでソレをやるのですが、オペレータというのは、`y`とか`d`とか`c`とかです。

### 例えば、「daw」これは結構使えそうです。

```vim
It always seems impossible until it’s done.
                  ^
この状態で「daw」と打つと下になります。
It always seems until it’s done.
```
カーソルのある単語とその後ろの空白（`aw`）が`d`によって削除されました。これは使えそうです。

### つづいて「yiw」

```vim
It always seems impossible until it’s done.
                  ^
この状態で「yiw」と打つと「impossible」がヤンクされます。
```

カーソルのある単語（`iw`）が`y`でヤンクされました。（単語のヤンクであれば、単語先頭にカーソルがあって、`ye`でやることの方が多いと思いますが。原理の説明として。）


まずは、この辺を日々の鍛錬で使っていきたいと思います。


# レジスタを理解して、コピペ->削除->貼付けで戸惑わない。

hogeをヤンクして、piyoを削除して、その場所に貼付けようと思って、ナイーブにやれば大抵失敗する。

```vim
hoge
^
piyo
```

僕は長いこと、先に削除してから、ヤンクして貼付けるという、修行をしてきた。けど、これはレジスタをちゃんと知れば大丈夫です。

### ヤンクレジスタ「"0」

ヤンクした情報は、ヤンクレジスタ`"0`に格納されるので、貼付けるときに、そのデータを貼付ければ良い。

```vim
hoge
^
piyo
```
この状態から、`ye`でhogeをヤンク。`j`で移動して、`de`とかでpiyoを削除。（このタイミングで無名レジスタにpiyoが入るので、その前のhogeが上書きされてしまう！）

hogeのはりつけは、少し面倒臭いのですが、`"0p`でいけました。

まずはこの辺の機能を訓練して参ります。ありがとうございました。

それにしても、`"0`ってすごく打ちづらい…。(˚∆˚)
JSON Lintをつかって文法チェック


# はじめに
CloudFromationを書いている時困るのがjsonの記述ミスです。いちいちStackの構築のエラーが出るのを待つのもつらいので、手元でエラーチェックができるツールをさがしていました。

[yajl-toolsのjson_verifyを利用する](http://qiita.com/sawanoboly/items/bd6fab931c026ba1ad2b)で紹介されていたjson_verifyもつかってみましたが、エラーの場所を教えてくれません! CloudFormationのtemplateを書くと数百行は普通にあるので、これは死にます。ということで探したところ[JSON lint](https://github.com/zaach/jsonlint)というツールがあったので、紹介します。

# インストール
npmでインストールできます。Macでnpmから入れる場合はこんなかんじです。

```bash
$ brew install npm
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/node-0.10.32.mavericks.bottle.tar.gz
######################################################################## 100.0%
==> Pouring node-0.10.32.mavericks.bottle.tar.gz
==> Caveats
Bash completion has been installed to:
  /usr/local/etc/bash_completion.d
==> make install
==> /usr/local/bin/npm install --global npm@latest --prefix /usr/local
==> Summary
?  /usr/local/Cellar/node/0.10.32: 1678 files, 19M

$ npm install jsonlint -g
/usr/local/bin/jsonlint -> /usr/local/lib/node_modules/jsonlint/lib/cli.js
jsonlint@1.6.2 /usr/local/lib/node_modules/jsonlint
├── JSV@4.0.2
└── nomnom@1.8.0 (underscore@1.6.0, chalk@0.4.0)
$

```

# 使い方

使い方は簡単です。jsonlintに検証したいファイルを引数としてわたすだけです。 **-q**は、正常終了時になにも出力しないオプションです。

```bash

$ jsonlint -q test.cfn
[Error: Parse error on line 307:
...        }        "LogBucketPolicy" :
--------------------^
Expecting 'EOF', '}', ',', ']', got 'STRING']
```

エラー発生行数がちゃんとでてますね。よかった。。。