OmniAICreator/Qiita-1.07M huggingface dataset:
2015年に Sloppy Swiping（画面内スワイプ）で前の画面に戻ることができるようになった有名 iOS アプリ

昨年末に [インタラクション時代における iOS アプリの戻る（閉じる）操作の種類のまとめ 2014年版](http://qiita.com/tdksk/items/36d892fca5fcba07f8eb) という記事を書き、そこで iOS アプリで前の画面に戻るインタラクションの種類について、具体的なアプリとともに何パターンか挙げました。2015年はそこまで大きな変化はなかったものの、画面端だけでなく画面内の任意の場所をスワイプして画面を戻る [Sloppy Swiping](http://thenewsprint.co/2014/04/16/sloppy-swiping/) が有効なアプリが増えてきた印象があります。そこで、今回は2014年には Sloppy Swiping が有効でなく2015年から有効になった有名 iOS アプリをいくつかご紹介します。

- Facebook
- Twitter
- LINE
- Medium
- SmartNews

### Facebook

- 2014年：スクロール時無効 Screen Edge Swipe（画面端スワイプ）
- 2015年：スクロール時有効 Sloppy Swiping

2015年の頭で Screen Edge Swipe がスクロール時にも有効になり、その後スクロール時にも有効な Sloppy Swiping に対応しました。Instagram の Sloppy Swiping はスクロール時に無効なので興味深いです。

### Twitter

- 2014年：スクロール時無効 Screen Edge Swipe
- 2015年：スクロール時無効 Sloppy Swiping

### LINE

- 2014年：スクロール時有効 Screen Edge Swipe
- 2015年：スクロール時有効 Sloppy Swiping

### Medium

- 2014年：ジェスチャー未対応
- 2015年：スクロール時無効 Sloppy Swiping（画面が指についてくる速度が不自然な時がある）

Medium は戻るボタンが左下にある時期もありましたが、今は通常のナビゲーションバー（左上に戻るボタン）になりました。

### SmartNews

- 2014年：指の動きについてこない Sloppy Swiping（トランジションが特殊）
- 2015年：指の動きについてくる Sloppy Swiping（トランジションが特殊）

相変わらず特殊トランジションのままですが、ジェスチャーでトランジションが発火するタイプのものでなく、指の動きに合わせて画面が変化するタイプになりました。

## 所感

いくつかの有名アプリが Sloppy Swiping に対応したことで、この流れは加速しそうです。特殊なトランジションよりも操作性向上のほうに全体的に向かうことは個人的には嬉しい流れですね。
BlueZにてBLEのアドバタイズパケットを変更する

# Overview
* BlueZにてBLEアドバタイズパケットの内容を変更する．
* Service UUIDをアドバタイズパケットにのせる．

# コマンド
`
$ sudo hcitool -i hci0 cmd 0x08 0x0008 AdvLength AdvData`
※各データは16進数表記．1オクテットごとにスペース区切り．リトルエンディアン．
　リトルエンディアンとは：http://www.wdic.org/w/TECH/%E3%83%AA%E3%83%88%E3%83%AB%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3

## AdvLength (Advertising_Data_Length)
|値|説明|
|:--|:--|
|0x00-0x1F|Advertising_Dataのオクテット数|
## AdvData (Advertising_Data)
|値|説明|
|:--|:--|
| |Advertising Data (最大31オクテット)|
| |すべてゼロ (**初期値**)|

# Advertising Data Format
```sh:format
Length[1 octet]  Type[n octet]  Data[Length-n octet]
```
## Type : 0x01  "Flag"
|bit|説明|
|:--|:--|
|0|LE Limited Discoverable Mode|
|1|LE General Discoverable Mode|
|2|BR/EDR Not Supported|
|3|Simultaneous LE and BR/EDR capable (Controller)|
|4|Simultaneous LE and BR/EDR capable (Host)|
|5...7|未使用|
## Type : 0x07  "Complete List of 128-bit Service Class UUIDs"
|値|説明|
|:--|:--|
|(128bit)|Service UUIDs (**リトルエンディアン**)|

# 備考
* いろいろパラメータをいじった場合，`hciconfig hci0 leadv 3`にてアドバタイズを開始しないこと．    
`hcitool -i hci0 cmd 0x08 0x000a 01`にてアドバタイズを開始すること．
* **リトルエンディアン記法に注意**．

# 実行例
* UUID「E1F40469-CFE1-43C1-838D-DDBC9DAFDDE6」をパケットに乗せる．
* FlagはLE General Discoverable Mode，BR/EDR Not Supportedとする．

```
$ hcitool -i hci0 cmd 0x08 0x0008 15 02 01 06 11 07 e6 dd af 9d bc dd 8d 83 c1 43 e1 cf 69 04 f4 e1
$ sudo hcitool -i hci0 cmd 0x08 0x000a 01
```

# 参考
* http://stackoverflow.com/questions/21124993/is-there-a-way-to-increase-ble-advertisement-frequency-in-bluez
* https://www.bluetooth.org/en-us/specification/adopted-specifications  
(Core Version 4.2参照)
* http://todotani.cocolog-nifty.com/blog/2013/02/bluetooth-le-bt.html
テトリスをつくってみました 　　その０

http://coderecipe.jp/recipe/iHjJBJx9Si/
【JavaScript】200行で作るテトリスのレシピ【HTML5】

おっ立ち野郎

これで元ネタです。
これをみて、これならできそうだ」と思って書いてみました。

さらに、以下の点が納得いきませんでした。
・オブジェクト指向で書かれていない
・画面描画の呼び出しがいい加減

自分の思う正しいjavascript作法をはっきりさせるためでしたね。


ファイル
・index.html
・tetris.js
・tetris2.js
・controller.js
・objCopy_lib.js


趣味のプログラマの方へ

趣味でやっているプログラマの方へ向けて一連の記事を書いています。（専門家の方は、その点おてやらわかにコメントお願いします。わたしもまだ、初心者なのです。）

１、以下印刷；
ーーー200行で作るテトリスのレシピ　おっ立ち野郎」さんの説明ページ
ーーー200行で作るテトリスのレシピ　おっ立ち野郎」さんのソースコード

これ大事です。

２、印刷したもので、よくプログラムを理解する。こまかいfor分の中身などはどうでもいい。

理解できたら、３へ

３、自分で書いてみる
４、書きながら調べる；僕のページ、書籍、グーグル先生


これでいけるはずです。


使った書籍
・速効!図解プログラミング JavaScript　古籏 一浩 
・独習javascript（6章まで、付録AでOK)
・まるごとJavaScript & Ajax ! Vol.1 （最初のprototype.jsあたりまで）
・改訂第3版 JavaScriptポケットリファレンス 

使ったツール
・firefox
・firefoxのデバッガ
・geany（linuxのメモ帳的ツール）

これらをまず揃えましょう。

質問歓迎　（ただし、条件あり
必ず、２日ほど自分で考えてからにしてください。）

わすれてました。
おっ立ち野郎」さん、ナイスなホームページありがとうございます。おかげさまでjavascript勉強が一歩すすみました。（あのページが見やすくて、アカウントとって同じように投稿できるかと思ったらできなかった。おっ立ち野郎だけが投稿するサイトなんですね）
Markdown( mermaid.js )で圏論の図式を書いてみれなかった

年越しQiitaっぽい！！

# Markdown( mermaid.js )で圏論の図式を書いてみる

　[mermaid.js](http://knsv.github.io/mermaid/)の[graph](http://knsv.github.io/mermaid/#graph)で圏論の図式を書けるのではないか？
と思い、試しに書いてみた。  

確認した環境 ( mermaid.js対応のmarkdownビュワー ) は以下。
- [http://knsv.github.io/mermaid/live_editor/](http://knsv.github.io/mermaid/live_editor/)

　結論から言うと、微妙だった。  
まずは簡単な図式をば。

[例1](http://knsv.github.io/mermaid/live_editor/#/view/Z3JhcGggTFIKICBBKChBKSktLT58aWRfQXxBCiAgQigoQikpLS0-fGlkX0J8QgogIEMoKEMpKS0tPnxpZF9DfEMKICBBLS0-fGZ8QgogIEItLT58Z3xDCiAgQS0tPnxnIC4gZnxD)

```
graph LR
  A((A))-->|id_A|A
  B((B))-->|id_B|B
  C((C))-->|id_C|C
  A-->|f|B
  B-->|g|C
  A-->|g . f|C
```

![exam_1.png](https://qiita-image-store.s3.amazonaws.com/0/84945/16ed79cd-51e1-e1d3-6926-974046aea97a.png)


諸点があるものの、だいぶ見れるものだと思う。

* 良さポイント
  - 書ける
  - 超簡単に書ける

* 微妙ポイント
  - 射の線が多角的
  - 全角文字に対応していないため、合成演算子を表す文字に「❍」が使えない
    - 上記では「.」を使用している

- - -

ではもう少し踏み込んでみる。

[例2](http://knsv.github.io/mermaid/live_editor/#/view/Z3JhcGggTFIKICBzdWJncmFwaCBDCiAgICBBKChBKSktLT58ZnxCKChCKSkKICAgIEEtLT58Z3xDKChDKSkKICAgIEItLT58aHxEKChEKSkKICAgIEMtLT58aXxECiAgICBBLS0-fGt8RAogIGVuZAoKICBzdWJncmFwaCBTCiAgICBYKChYKSkKICBlbmQ)

```
graph LR
  subgraph C
    A((A))-->|f|B((B))
    A-->|g|C((C))
    B-->|h|D((D))
    C-->|i|D
    A-->|k|D
  end

  subgraph S
    X((X))
  end
```

![exam_2.png](https://qiita-image-store.s3.amazonaws.com/0/84945/900c92f7-afa0-21c8-00a8-803a7ec7d99a.png)


* 良さポイント
  - subgraphを使用すると、1つの圏をくくれる

* 微妙ポイント
  - 対象の配置が、意図した通りにならなかった
    - 本当は`射k`を`対象B,C`の間に入るようにしたかった

* 致命的
  - `関手F : C -> S-`を書こうとしたけど、subgraphを線で繋ぐ方法が見つからなかった


- - -

## 結論
ごめんなさい、書けませんでした。

でもmermaid.jsはすごいんですよー。
テトリスをつくってみました　　その4　ソースコードindex.html

index.html



```html
<!DOCTYPE html>
<html>
    <head>
        <title>HTML5 Tetris</title>
        <link rel='stylesheet' href='style.css' />
    </head>
    <body>
        <audio id="clearsound" src="sound/pop.ogg" preload="auto"></audio>
        <canvas width='300' height='600'></canvas>
		<script src='js/objCopy_lib.js'></script>
        <script src='js/tetris.js'></script>
        <script src='js/tetris2.js'></script>
        <script src='js/controller.js'></script>
        
    </body>
</html>
```
CocoaPods + Swift で Travis CI を使う

# この記事のゴール
以下の環境で GitHub へのプルリクエスト・プッシュ時にユニットテストが走る環境を構築することを目指します。

- GitHub は公開リポジトリ
- Swift
- CocoaPods 使用

# 全体の流れ
- Travis CI に登録
- XCode のプロジェクトの修正
- .travis.yml の作成

以下その手順です。

# Travis CI に登録
[Travis CI](https://travis-ci.org) に登録をします。

Travis CI の[プロフィールページ](https://travis-ci.org/profile/halhorn)に行き、 CI したいリポジトリを ON にします。
![image](https://qiita-image-store.s3.amazonaws.com/0/61079/688ee3e1-8ab8-4dc4-aa18-8fb2177cf74d.png)

# プロジェクトの修正
出展：[Building an Objective-C Project](https://docs.travis-ci.com/user/languages/objective-c)

Travis CI を使うために XCode でプロジェクトに以下の修正をする必要があります。

- テスト対象のプロジェクトを Shared にする
- 依存モジュールを明示的にビルドするようにする

以下手順

1. メニューから Product -> Scheme -> Manage Schemes を選択
    - ![image](https://qiita-image-store.s3.amazonaws.com/0/61079/a2654a2e-7b92-7d5b-8759-6f08fa2f5dce.png)
2. テスト対象のプロジェクトの **Shared** チェックボックスを ON にします
    - ![image](https://qiita-image-store.s3.amazonaws.com/0/61079/d09ebea5-c1b6-7685-9ac8-160d3c70b270.png)
3. Cocoa Pods などプロジェクト間の依存がある場合、明示的に依存関係を設定します
    1. テスト対象プロジェクトを選択して Edit を選択
        - ![image](https://qiita-image-store.s3.amazonaws.com/0/61079/f8adbe65-74bf-ca03-41bc-83310bc7608f.png)
    2. 左パネルの **Build** タブを選択
    3. **+** ボタンから、各依存モジュールをプロジェクトに追加。 CocoaPods は Pods という名前で表示されています
        - ![image](https://qiita-image-store.s3.amazonaws.com/0/61079/e45fe222-7366-1e50-71ee-019f1ce9af0b.png)
    4. 依存モジュールをテスト対象より上にドラッグして移動
        - ![image](https://qiita-image-store.s3.amazonaws.com/0/61079/979b76ac-88b1-26c6-0eb8-e04a1e9769d1.png)

## UITests を無効化
![image](https://qiita-image-store.s3.amazonaws.com/0/61079/606452a2-a61e-7bfb-406b-0508b2c41331.png)

当方の環境では UITests が TravisCI で動かなかったため、これを無効化しました。
UITests が必要な人は頑張って下さい。
https://github.com/facebook/xctool/issues/534 あたりが関係あるかもしれません。

# .travis.yml をリポジトリに追加
以下のような内容で .travis.yml を作ります。 TimeLogger の部分は自分のテスト対象に書き換えます。

```yaml
language: objective-c
osx_image: xcode7.2
xcode_workspace: TimeLogger.xcworkspace
xcode_scheme: TimeLogger
xcode_sdk: iphonesimulator
```

- Swift の CI ですが language は objective-c で大丈夫です
- XCode のバージョンによってコードがコンパイルできないことがあるので、開発に使っている XCode のバージョンを osx_image に指定
- 公式では xcode_scheme は HogeHogeTests を指定するようになっていますが、テスト用の Scheme が無ければテスト対象の Scheme を指定すれば動きます
- xcode_sdk をつけないと code signing うんぬんで落ちます

以上を commit, push します

# 完了！
![image](https://qiita-image-store.s3.amazonaws.com/0/61079/6f765e6a-04f8-d1fe-9a09-dcb308f4deb2.png)
やったね！
（うまく動かないのを調べたりやり過ごしたりで１日つかいました。。）

# Travis CI 対応での修正 PR サンプル
私の環境での差分です。
https://github.com/halhorn/TimeLogger/pull/3

# その他はまったところ

## .ruby-version があるとはまる
Travis CI は .ruby-version に従って ruby を install しようとするが失敗する。
結局 .ruby-version を消しました。悲しい。

## Cocoa-Pods 導入時は最低一つはライブラリ入れてる必要あり？
一つも入っていない場合、
![image](https://qiita-image-store.s3.amazonaws.com/0/61079/e45fe222-7366-1e50-71ee-019f1ce9af0b.png)
のオレンジ色のアイコンが出なかった。
テトリスをつくってみました　　その3　ソースコード objCopy_lib.js

objCopy_lib.js



```js
function shallowCopy(oldObj) {
    var newObj = {};
    for(var i in oldObj) {
        if(oldObj.hasOwnProperty(i)) {
            newObj[i] = oldObj[i];
        }
    }
    return newObj;
}

function deepCopy(oldObj) {
    var newObj = oldObj;
    if (oldObj && typeof oldObj === 'object') {
        newObj = Object.prototype.toString.call(oldObj) === "[object Array]" ? [] : {};
        for (var i in oldObj) {
            newObj[i] = deepCopy(oldObj[i]);
        }
    }
    return newObj;
}

```
goでバイナリファイルにqmlをパッキングする方法

「[Goでバイナリファイルにqmlをパッキングする方法 - Goとキュート(Qt)な日々](http://miyabishi.hatenablog.com/entry/2015/12/31/203753)」からの転載。

# 環境

* go version go1.5.2 darwin/amd64
* OS El Capitan‎

# 方法

goでバイナリファイルにqmlをパッキングは"genqrc"というコマンドを使用します。
そのため、まずはターミナルを開き以下を実行し"genqrc"を取得しておきます。

```
go get gopkg.in/qml.v1/cmd/genqrc
```

具体的なqmlリソースのパッキング方法を、以下のディレクトリ構成を例に説明します。

```
┣main.go ・・・ ソースファイル
┗assets ・・・ ディレクトリ
　┗goqml.qml ・・・qmlファイル
```

まずは"main.go"に、どこでもよいので以下の様に、"//go:generate genqrc" の後にリソースファイルの含まれるディレクトリ名を記述した1行を記入します。

```
//go:generate genqrc assets
```

qmlをロードする際にパスを"qrc:///"に続けて記述します。
以下に"assets"ディレクトリ下の"goqml.qml"ファイルをロードする際の例を示します。

```
component, err := engine.LoadFile("qrc:///assets/goqml.qml")
```

その後、ソースコードのあるディレクトリで以下を実行します。

```
go generate
go build
```

qmlをパッキングしたバイナリファイルが生成されます。

以上です。

# 参考

* [genqrc - GoDoc](https://godoc.org/gopkg.in/qml.v1/cmd/genqrc)
* [Packing resources into Go qml binaries | Labix Blog](http://blog.labix.org/2014/09/26/packing-resources-into-go-qml-binaries)
* [コードのジェネレート (Generating code)](https://ymotongpoo.github.io/goblog-ja/post/generate/)
Javascriptでアニメーションを簡単に使えるmove.jsを使ってみる


https://visionmedia.github.io/move.js/

簡単な記法で、アニメーションをすることができます。
中では、transition-delayとかを使っているようです。

## インストール

```bash
bower i move.js
```
- `i`と書くと`install`を略すことができます。

## 普通にやると怒られる！

中でonload時に`document.body`を呼び出しているので、
普通に`script`タグで読み込んでもエラーが出てしまいます。
次のように読み込みましょう。

```js
document.addEventListener("DOMContentLoaded", () => {
  var movejs = document.createElement("script");
  movejs.src = "bower_components/...."; // move.jsのインストール先
  document.head.appendChild(movejs);
});
```

## アニメーションしよう！

まず構文。

```js
move("クエリ")/*..... アニメーション処理 */.end();
```

`move()`から`end()`の間に処理を書くわけです。
処理は、[公式サイト](https://visionmedia.github.io/move.js/)にたくさん書いてあります。
ここでは一部を紹介します。

### cssプロパティを指定する

```js
.set("CSSプロパティ名", 値)
```

例:

```js
move("div.box")
  .set("opacity", 0)
  .end();
```

### アニメーションの時間を指定する

```js
.duration("秒数")
```

例:

```js
move("div.box")
  .set("opacity", 0)
  .duration("1s");
  .end();
```

### 移動する

```js
.translate(x, y)
```

例:

```js
move("div.box")
  .translate(100, 80)
  .duration("0.5s")
  .end();
```

### アニメーションが終わった後に実行する

```js
.then()/* 処理 */.pop()
```

例:

```js
move("div.box")
  .translate(100, 80)
  .then()
  .set("opacity", 0)
  .pop()
  .end();
```

例では、移動をしてから、opacityを0に指定します。
  
  
便利なので、使ってみてください！
OSXのSublimeText3でGoogle日本語入力の不満を解消し、さらにMarkdown環境を整える

軽いエディタとして最高なSublime Textですが、日本語IMEとの相性が悪かったり、デフォルトではMarkdown環境がなかったり、プログラムを書くにはいいけど日本語を書くには微妙だと思われています。

しかし、ちゃんと設定すれば全部解決するのでSublime好きな人はやりましょう。

## ショートカットを無効にし、OSXでのIMEの日本語入力をマトモにする
Sublimeはデフォルトでは、Google日本語入力「Tabによる変換候補選択」「Control+Kによる無変換」が機能しません。

これは、Sublimeのデフォルトキーバインドと衝突してしまうのが原因です。普段から使いまくっているショートカットキーが潰されることで「Sublimeを日本語エディタにするのはつらい」という印象を抱きがちですが、それら余計なキーを潰すことで解決します。

#### 手順
[SublimeText3 - sublime text3で日本語入力変換が機能しない場合の解消３ステップ - Qiita](http://qiita.com/akippiko/items/1382faa29833379621f6)

- `/Users/ユーザ/Library/Application Support/Sublime Text 3/Packages`を開く
- Sublime Text -> Preferences -> Key Bindings - Default を開き、`⌘+S`
    - Sublime Text -> Preferences -> Package Folder
    - Defaultフォルダに`Default (OSX).sublime-keymap`ファイルが現れている。
- **Sublime以外のエディタで**これを編集して潰したいキーをコメントアウトし保存
- Sublimeを再起動

コメントアウトするのは、100行目付近の、

```
  // { "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": true} },
  // { "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": false},
  //  "context":
  //  [
  //    { "key": "setting.tab_completion", "operator": "equal", "operand": true },
  //    { "key": "preceding_text", "operator": "regex_match", "operand": ".*[^0-9]$", "match_all": true },
  //  ]
  // },
```

に加えて、683行目付近の

```
  // { "keys": ["ctrl+k"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete to Hard EOL.sublime-macro"} },
```

です。完了後、日本語入力が快適になっていることを確認します。


## Markdown環境を整える
このままMarkdown執筆もやっていけるように設定します。プラグイン色々ありますが、とりあえず「MarkdownPreview」入れておきましょう。

ショートカット一発ででき便利です（.htmlを生成してそれをブラウザで開いてくれる）。

他のプラグインでは、PDFやスライドが生成できるそうです。
[SublimeText3+MarkdownでPDF文書やスライドを作る - Qiita](http://qiita.com/siquare/items/08ddd77dea1860db1246)

#### 手順

- 「MarkdownPreview」をInstall Package
- プレビューのショートカットキーを設定する
- プレビューに使用するブラウザを設定する

ショートカットキーの設定は、Sublime Text -> Preferences -> Key Bindings - User にて

```
{ "keys": ["control+m"], "command": "markdown_preview", "args": {"target": "browser"} }
```

#### プレビューはSafariで開くのがおすすめ


- 普段Safari使わないので、デフォルト放置されたSafariは余計なプラグインもなく、プレビュー用途にヌルサク快適です。
- Chromeを使った場合、プレビュー更新の度htmlを開くので新しいウィンドウが開いてしまい、タブが無限に増殖する問題があります。Safariではうまいことやってくれます。

プレビューに使用するブラウザの設定は、  
Sublime Text -> Preferences -> Package Settings -> Markdown Preview -> Setings User にて

```
{
    "browser": "/Applications/Safari.app",
}
```

です。

## まとめ
Sublime Text 軽くておすすめです。

<img width="832" alt="スクリーンショット 2015-12-31 20.32.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/29945/69adce41-3ee7-dd39-a890-d9cd0c0d02db.png">
Unity2DでRaycastを使って座標からGameObjectを取得する

Raycastの練習として、やってみました。
ほかの取り方もあるかもしれません。

```csharp
Vector3 pos = new Vector3(/* 好きな値 */);
RaycastHit2D hit = Physics2D.Raycast(pos, new Vector3(0, 0, 1), 100);

// 可視化
Debug.DrawRay(pos, new Vector3(0, 0, 100), Color.blue, 1);

// コンソールにhitしたGameObjectを出力
Debug.Log(hit.collider);
```

この`hit.collider`でGameObjectを取れます。

## マウス座標からもとれるよ

このやり方だと、遠回りになるかもしれませんが、
マウス座標からとるのも簡単です！
上のコードの最初の行を、次のように変えるとできます。

```csharp
Vector3 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
```
FabricでTwitterのタイムラインを表示する(サンプル版）

# FabricのサンプルでTwitterのタイムラインを表示する

[先の記事](http://qiita.com/g-1/items/05e20de236fb486cb84c)でTwitterのタイムラインを表示できるようになりましたが、Fablicにはもっと簡単にタイムラインを表示するための[サンプル](https://docs.fabric.io/ios/twitter/show-timelines.html?highlight=twtrapiclient)がありまして、これを使うことで容易になる・・・はずでした。
ただワークショップムービーの方法ではうまく行かなくて頓挫してたのですが、先の記事での調査の結果、問題になっている箇所が判明し、うまく動作させることができました。

## 修正コード

下記のようにTWTRAPIClientクラスにUserIDを渡してやることでうまく動作するようになりました。

```swift:MainViewController.swift
import UIKit
import TwitterKit

class MainViewController: TWTRTimelineViewController {
  var userId: String?
  
  override func viewDidLoad() {
    super.viewDidLoad()
    
    let client = TWTRAPIClient(userID: self.userId)
    self.dataSource = TWTRUserTimelineDataSource(screenName: "fabric", APIClient: client)
  }
}
```

先の記事同様にLoginAPIをコールしたあとに返ってくるTWTRSessionデータからUserIDを取得して渡してやればOKです。

```swift:LoginViewController.swift
import UIKit
import TwitterKit


class LoginViewController: UIViewController {

  override func viewDidLoad() {
    super.viewDidLoad()

    let logInButton = TWTRLogInButton { (session, error) in
      if session != nil {
        self.performSegueWithIdentifier("main", sender: session!.userName)
      } else {
        NSLog("Login error: %@", error!.localizedDescription);
      }
    }
    
    // TODO: Change where the log in button is positioned in your view
    logInButton.center = self.view.center
    self.view.addSubview(logInButton)
  }
  
  override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let session = sender as? TWTRSession
    let dest = segue.destinationViewController as! MainViewController
    dest.title = session!.userName
    dest.userId = session?.userID
    
  }
}
```

超簡単ですね。
ムービーにあるようにUIViewControllerのviewをUITableViewに変更するなど、ややトリッキーな操作が必要ですが、それを考えてもこんなに簡単に実装できるのは魅力的です。

## 最後に

今年最後の記事となりますが、まったりコード書きながら過ごす年越しも悪くないですね。
皆様、良いお年を。
WSFC(Windows Server Failover Clustering)の情報採取

```ps1
## やること ##
# 1.WSFC(Windows Server Failover Clustering)の情報を、
#   Get-Clusterや、Get-ClusterResourceなど複数の参照コマンドレットを利用し、採取する
#
# 2.Excelの設計書と比較するので、CSV形式で採取する 
#   出力するCSVファイルは、「ホスト名_参照コマンドレット名.csv」と名前を付けて、1つのフォルダに出力する
#
# 3.参照コマンドレットのどれかが失敗した場合に、このスクリプトのログに出力する
# 　このスクリプトのログは2と同じフォルダに出力する
#
# 4.実行したい参照コマンドレットが増えた場合に、簡単に追加できるようにする
#
# CSV出力フォルダ作成 → メイン処理関数定義 → 
# 　前処理関数(メイン処理に渡す)定義 → 前処理関数を実行(引数1)


# ↓ここからPowershell(PS1)はじまり

# 日付
$TODAY = Get-Date -format "yyyy-MMdd-HHmm"

# ホスト名
$HOSTNAME = Invoke-Expression -Command hostname

# CSV出力先フォルダ定義
  # ※ $OUTDIRで定義するディレクトリ配下に、「yyyy-mmdd-hhmm_ホスト名__WSFC_Getinfo」という名前で作成
$OUTDIR = "c:\work"
$OUT = "${OUTDIR}\${TODAY}_${HOSTNAME}_WSFC_Getinfo"



# CSV出力先フォルダの作成

  $ErrorActionPreference = "Stop"
    # フォルダ作成に失敗した場合、処理を終了するため、エラーストップを設定
    # .NET の例外は、try{}catch{} で取得できる
    # コマンドレットの例外は、$ErrorActionPreferenceを設定する
    # 詳しくは→http://tech.guitarrapc.com/entry/2013/07/22/000738


  try {
  # CSV出力先作成
  mkdir ${OUT}
  # 実行結果を変数格納
  $RESULT = "フォルダ名【${OUT}】正常に作成できました"
  } catch [Exception] {
  # エラー時に実行結果の変数書き換え
  $RESULT = "フォルダ名【${OUT}】作成に失敗しました"
  # 出力先作成に失敗した場合、終了
  exit 100
  } finally {
  # 結果を標準出力
  Write ${RESULT}
  # 結果をログ出力
  Write ${RESULT} | Out-File ${OUT}\WSFC_Getinfo_${TODAY}.log
  }





# CSV出力処理


 ## メイン処理関数
  ### 第一引数で受け取ったコマンドラインを実行して、結果を取得
  ### 第二引数で受け取ったコマンドレット名を、メッセージに付与し、
  ### 結果をこのスクリプトのログに出力する
function main {
  # 受け取った2つの引数を変数格納
  param($param1,$param2)
  try {
  # 第一引数($param1)をコマンドとして実行
    ## &でコマンドとして扱う
    & ${param1}
    $RESULT = "【${param2}】の処理が正常に終了しました"
  } catch [Exception] {
    $RESULT = "【${param2}】の処理が異常終了しました"
  } finally {
    Write ${RESULT}
    Write ${RESULT} | Out-File ${OUT}\WSFC_Getinfo_${TODAY}.log -Append
  }
}




 ## 前処理用関数
  ### メイン処理関数に渡す第一引数(コマンド名)、
  ### 第二引数(実行するコマンドライン)を作成

function watasu {
# 第一引数は実行コマンド名
param($param1)
   ## 第一引数の実行コマンド名を${COMMAND}に格納。
  $COMMAND = ${param1}
   ## メイン処理関数で実行するコマンドライン作成
    ### 実行コマンドをパイプでExport-csvに渡し、CSV出力。
    ### 上で作成したCSV出力先に、UTF8で出力。
    ### 「ホスト名_コマンド名.csv」で出力
  $COMMANDLINE = {& ${COMMAND} | Export-Csv -Encoding UTF8 ${OUT}\${HOSTNAME}_${COMMAND}.csv}
  ## 実行するコマンド名を第一引数に、
  ## 実行するコマンドラインを第二引数にして、メイン処理関数を呼び出し
  main ${COMMANDLINE} ${COMMAND} 
}






## 前処理用関数に第一引数としてコマンド名を渡し、実行させる
## コマンドを追加したい場合、一番下に同じ形式で追加すれば、CSVで結果を出力してくれます
## 増えてきたら外ファイルに持たせます
## やり方は、gc使ってCSV読み込むなどを検討中
watasu {Get-Cluster}
watasu {Get-ClusterQuorum}
watasu {Get-ClusterGroup}
watasu {Get-ClusterResource}
watasu {Get-ClusterNode}
watasu {Get-ClusterNetwork}
watasu {Get-ClusterNetworkInterface}
# watasu {Get-Alias}
# watasu {Get-Command}
Swift (2.1)で一通り正規表現を触ってみた

# Swift (2.1)で一通り正規表現を触ってみた

## はじめに

Swiftは言語機能として正規表現をサポートしておらず、Objective-CからあるFoundationのNSRegularExpressionを利用することで正規表現の機能を使うことができます。
ですがSwift2からNSRegularExpressionは`try`・`catch`で書かなければならなかったり、一致どうだっけ、置換どうだっけって毎回引っかかるので備忘録として基本的な機能の使い方を残します。

## 前提

### 開発環境

* Xcode 7.2

### 言語

* Swift 2.1

### ライブラリ

```swift
import Foundation
```

## NSRegularExpression

### 正規表現オブジェクトを生成

```swift
let regex: NSRegularExpression
do {
    let pattern = 正規表現パターン
    regex = try NSRegularExpression(pattern: pattern, options: [NSRegularExpressionOptions.{オプション}])
} catch let error as NSError {
    // エラー処理
}
```

* エラーとしてcatchのスコープにくるケースは以下
    * patternが空文字
    * pattern内のエスケープ文字が不適切(バックスラッシュなど)
* オプションの細かい挙動については当ページの[こちら](https://moapp.qiita.com/__moai/items/c1fb943a646f8201f71f#nsregularexpressionoptions)を参照

### 正規表現による一致

```swift
let string = 検索対象文字列
let results: [NSTextCheckingResult] = regex.matchesInString(string, options: [], range: NSMakeRange(0, string.characters.count))

var matchStrings = [String]()
for (idx, result) in results.enumerate() {
    let range = result.rangeAtIndex(idx)
    if range.location != NSNotFound {
        let matchString = (string as NSString).substringWithRange(range) as String
        if !matchString.isEmpty {
            matchStrings.append(matchString)
        }
    }
}
```

正規表現のパターンに一致する文字列を配列の形で取得する例です、ポイントとしては走査してるときにNSNotFoundがNSRangeのlocationの中に飛んでくるので、そこをちゃんと判定してあげる必要があります。

### 正規表現による置換

```swift
let string = 置換対象文字列
let replaceString = 置換文字列
let convertedString = regex.stringByReplacingMatchesInString(string, options: [], range: NSMakeRange(0, string.characters.count), withTemplate: replaceString)

print(convertedString) // -> 正規表現に一致する箇所を置換した文字列を出力
```

正規表現のパターンに一致する文字列をまとめて置換する例です。

## NSRegularExpressionOptions

### CaseInsensitive

* 大文字・小文字の区別をしないようになる

### AllowCommentsAndWhitespace

* 以下の文字列を無視するようになる
    1. 空白
    2. #から始まるコメント

### IgnoreMetacharacters

* 正規表現のメタ文字を無視するようになる

### DotMatchesLineSeparators

* 処理対象の文字列の改行文字列(`\n`)を`.`として認識するようになる

### AnchorsMatchLines

* 1行ごとに`^`一致、`$`一致を判定してくれるようになる

### UseUnixLineSeparators

* Unixの改行コードである`\n`のみを改行コードとして扱うようになる

### UseUnicodeWordBoundaries

* `Use Unicode TR#29 to specify word boundaries (otherwise, traditional regular expression word boundaries are used).`

よく把握してないのでドキュメントの英語そのまま載せておきます
EclipseでLinuxカーネルソースを閲覧する

EclipseでLinuxカーネルソースを閲覧する準備を整えるまでの覚書。
Eclipse上でのソース閲覧はEclipseが動作する環境ならOSを問わないものの、
一部の手順でLinux(のカーネルビルド環境)が必要。

# Linuxカーネルソース取得
対象バージョンのLinuxソースをGitリポジトリ(https://github.com/torvalds/linux)
もしくは、[The Linux Kernel Archives](https://www.kernel.org/pub/linux/kernel/)
から持ってくる。

# Eclipse
[Eclipse Downloads](https://www.eclipse.org/downloads/) から
[Eclipse IDE for C/C++ Developers]をダウンロード。

# Eclipse設定
公式に詳細な手順がある。
[HowTo use the CDT to navigate Linux kernel source - Eclipsepedia](https://wiki.eclipse.org/HowTo_use_the_CDT_to_navigate_Linux_kernel_source)

タグジャンプを有効にするにはautoconf.hが必要

## autoconf.hの作り方
※要Linuxカーネルビルド環境

~~~
make oldconfig
make prepare
make scripts
./include/linux/autoconf.h にできる(Linuxバージョンによって出力先が変わる場合あり)
~~~

後は前述の手順でいけた

## Eclipseプラグイン
必須ではないものの、Bracketeer for C/C++ をインストールしておくと便利。

[汚いコードをハイライト表示するEclipseプラグイン[Bracketeer for C/C++] | Futurismo](http://futurismo.biz/archives/1219)
Powershellでフォルダ内のファイルをフルパスで取得する

```PS1
# 例// C:\work配下のファイルをフルパスで取得
#  C:\workを変数格納
$DIRFOL = "C:\work"


# dir = C:\work配下をリスト取得(Get-Childitem)
 ## -Receurse = 再帰的に取得する 
 ## -File = ファイルのみ取得する(フォルダ除く)
$DIRFILE = dir -Recurse -File ${DIRFOL}


# .fullname = フルパスで取得し表示する
$FULLNM = ${DIRFILE}.fullname
C#で、asyncを利用した別タスクから、UIコントロールをさわる

C#で、重い処理をしているときなどに、マルチスレッドで、
別タスクからUIをさわりたいときがあるのですが、エラーが出てしまいます。

そんなときは、*Task<T>型の関数を、awaitで実行*すればいいのです。

## 例

```csharp:taskUI.cs
using System.Threading.Tasks;

// 省略

async void Main()
{
    var heavyResult = await runTask(); // 1.
    label1.Text = heavyResult;
}
async Task<string> runTask()
{
    await Task.Delay(1000); // 2.
    return "hogehoge"; // 3.
}

```

番号はコード内のコメントの番号と対応しています。
1. 非同期で`runTask`関数を実行
2. 別Taskでの動作の確認のために、1秒間止める。この間もUIは動作する。
3. 1秒間たった後、文字列`hogehoge`を返す。
4. 戻り値をlabelに書きだす。

- Mainメソッドに、asyncをつけています

また、タスクを別のメソッドにしなくてもできるようです。

```csharp:taskUI2.cs
using System.Threading.Tasks;

// 省略

async void Main()
{
    var heavyResult = await Task.Run(async () =>
    {
        await Task.Delay(1000);
        return "fugafuga";
    }
    label1.Text = heavyResult;
}

```

## 何回もLabelを書き替えたい

なんか重い処理が、「何%進みました」みたいな処理をやるときは、
複数回Labelを書き替える必要があります。
その時は、Taskをつなげて行うのではなく、1%ごとに分けて行うとできます。

```csharp
async void Main()
{
    for (var i = 0; i < 100; i++)
    {
        label1.Text = await progress(i);
    }
}
async Task<string> progress(int percent)
{
    await Task.Delay(100);
    return $"{percent}% 完了しました";
}
```


## 追記:Reactive Extensions

Reactive Extensionsを使うと、複数のタスクに分けず、JavaScriptのコールバックみたいなことができます。
デフォルトでは、Reactive Extensionsが入っていないので、
NuGetで「Rx-main」をインストールしてください。
詳細: [https://msdn.microsoft.com/en-us/data/gg577610.aspx#dotnet](https://msdn.microsoft.com/en-us/data/gg577610.aspx#dotnet)

```csharp
using System.Reactive.Linq;
using System.Reactive.Disposables;
using System.Threading.Tasks;

void Main()
{
    Observable.Create<string>(async o =>
    {
        for (var i = 0; i < 100; i++)
        {
            await Task.Delay(100);
            o.OnNext($"{i}% 完了しました。");
        }
        o.OnNext("最後の処理をしています...");
        await Task.Delay(1000);
        o.OnNext("完了");
        return Disposable.Empty;
    }).Subscribe(x =>
    {
        label1.Text = x;
    });
}
```

この方法だと、毎回違う処理をする場合でも、一つのObservableで処理ができます。

NetSeedさん、chocolamintさん、ありがとうございます。
x86の浮動小数計算とSIMD命令の変遷

# 8087(1980)
浮動小数点演算ユニット(FPU)。
精度は80bit、スタック型のレジスタが8本。
# 80486(1989)
FPUがCPUに内蔵化された。
# MMX Pentium(1997)
FPUレジスタ80bit×8のうち64bitを使ってmmレジスタとし、8bit×8～32bit×2の整数SIMD計算が可能(MMX)。
わざわざレジスタを共用にしたのは、コンテキストスイッチ時のレジスタ退避の仕組みに変更点がなく、OSの対応を待つ必要がなかったため。
# Pentium Ⅲ(1999)
128bitのxmmレジスタを8本新設、32bit×1、32bit×4の浮動小数点演算が可能(SSE)。
# Pentium 4(2000)
xmmレジスタで64bit×1、64bit×2の浮動小数点演算に加え、8bit×16～64bit×2の整数演算も可能(SSE2)。
以降、機能拡張が続いたが、レジスタ幅などの変更はなし。
# Sandy Bridge(2011)
xmmレジスタを16本に増やし、さらに256bitに伸ばしてymmレジスタとした(下位128bitはxmmレジスタと共用)。
32bit×8、64bit×4の浮動小数点演算が可能になった(Intel AVX)。
# Haswell(2013)
ymmレジスタで8bit×32～64bit×4の整数演算が可能に(Intel AVX2)。

# 内容別
## 80bit浮動小数演算、超越関数(sin,cos,exp,log)計算
x87命令(実際にはSSE以降でソフトウェア的に計算した方が速い)
## 64bit・32bit浮動小数演算
SSEで4並列(32bit)
SSE2で2並列(64bit)
AVXで4並列(64bit)、8並列(32bit)
逆数命令、逆数平方根命令は64bitでは使用できない
## 64bit～8bit整数演算
MMXで2並列(32bit)～8並列(8bit)
SSE2で2並列(64bit)～16並列(8bit)
AVX2で4並列(64bit)～32並列(8bit)
一部不可能な命令あり
備忘録：C++のStringでファイルのパス、ファイル名、拡張子の取得

###これは何？
コマンドライン引数などでファイルのフルパスを渡されたときに、パス、ファイル名、拡張子を取得する方法の備忘録

環境はWindows

###サンプル

```C++:get-path_and_file
std::string fullpath = "C:\\aaa\\bbb.txt";//fullpath.size() = 14
int path_i = fullpath.find_last_of("\\")+1;//7
int ext_i = fullpath.find_last_of(".");//10
std::string pathname = fullpath.substr(0,path_i+1);//0文字目から７文字切り出す "C:\\aaa\\"
std::string extname = fullpath.substr(ext_i,fullpath.size()-ext_i); // 10文字目から４文字切り出す ".txt"
std::string filename = fullpath.substr(path_i,ext_i-path_i);// ７文字目から３文字切り出す　"bbb"
```
Angular.jsの練習6(イベント)


```html
<!DOCTYPE html>
<html ng-app="myApp">
<head>
  <meta charset="UTF-8" />
  <title>AngularJS TIPS</title>
  <script src="https://code.angularjs.org/1.4.8/angular.min.js"></script>
  <script src="1_myscript.js"></script>
  <script src="2_myscript.js"></script>
</head>
<body>
  <div ng-controller="myCtrl">
    <ul>
      <li ng-repeat="user in users" ng-controller="userItemCtrl">
        {{user.name}} {{user.age}}
        <button ng-click="increment()">+1</button>
      </li>
    </ul>
  </div>
</body>
</html>
```

```1_myscript.js
(function(){
  angular.module('myApp', []);
  angular.module('myApp')
    .controller('myCtrl', ['$scope', function($scope) {
        $scope.users = [
          {"name":"urano", "age":35, "money":50000},
          {"name":"nakanishi", "age":25, "money":1000000},
          {"name":"shinji", "age":45, "money":444000},
          {"name":"john", "age":49, "money":424000},
          {"name":"yna", "age":42, "money":934100},
          {"name":"miha", "age":25, "money":124000},
          {"name":"kazu", "age":43, "money":834000},
          {"name":"taka", "age":15, "money":799000}
        ];
        $scope.today = new Date();
    }]);
})();
```

```2_myscript.js
(function(){
  angular.module('myApp')
    .controller('userItemCtrl', ['$scope', function($scope) {
      $scope.increment = function(){
        $scope.user.age++;
      };
    }]);
})();
```

###イベント一覧

| ディレクティブ | 概要 |
|:-----------|:------------|
| ng-click	|クリックした時|
| ng-dblclick	|ダブルクリックした時|
| ng-mousedown	|マウスボタンが押されたとき|
| ng-mouseup	|マウスボタンが離されたとき|
| ng-mouseenter	|要素にマウスポインターが入った時|
| ng-mouseleave	|要素からマウスポインターが出た時|
| ng-mousemove	|要素上をマウスポインターが移動した時|
| ng-mouseover	|要素上にマウスポインターが重なった時|
| ng-mouseout	|要素上に重なっていたマウスポインターが外れた時|
| ng-focus	|要素にフォーカスした時|
| ng-blur	|要素からフォーカスが外れた時|
| ng-keydown	|キーを押した時|
| ng-keypress	|キーを押し続けている時|
| ng-keyup	|キーを離した時|
| ng-change	|値を変更し時|
| ng-copy	|コピーした時|
| ng-cut	|カットした時|
| ng-paste	|ペーストした時|
| ng-submit	|サブミットした時|
Angular.jsの練習5(イテレーションでの変数)


イテレーションの時に使える変数の確認

```practice5.html
<!DOCTYPE html>
<html ng-app="myApp">
<head>
  <meta charset="UTF-8" />
  <title>AngularJS TIPS</title>
  <script src="https://code.angularjs.org/1.4.8/angular.min.js"></script>
  <script src="1_myscript.js"></script>
  <style type="text/css">
  .even {
    background: #ccc;
  }
  .odd {
    background: red;
  }
  </style>
</head>
<body>
  <div ng-controller="myCtrl">
  <ul>
    <li ng-repeat="user in users">
      {{user.name}}
      {{$index}}
      {{$first}}
      {{$middle}}
      {{$last}}
    </li>
  </ul>
  <ul>
    <li ng-repeat="user in users" ng-class-even="'even'" ng-class-odd="'odd'">
      {{user.name}}
      {{$index}}
      {{$first}}
      {{$middle}}
      {{$last}}
    </li>
  </ul>
  </div>
</body>
</html>
```

```1_myscript.js
(function(){
  angular.module('myApp', []);
  angular.module('myApp')
    .controller('myCtrl', ['$scope', function($scope) {
        $scope.users = [
          {"name":"urano", "age":35, "money":50000},
          {"name":"nakanishi", "age":25, "money":1000000},
          {"name":"shinji", "age":45, "money":444000},
          {"name":"john", "age":49, "money":424000},
          {"name":"yna", "age":42, "money":934100},
          {"name":"miha", "age":25, "money":124000},
          {"name":"kazu", "age":43, "money":834000},
          {"name":"taka", "age":15, "money":799000}
        ];
        $scope.today = new Date();
    }]);
})();
```
Angular.jsの練習4(高度なフィルター)


ORDER BY, LIMIT, 入力項目での検索など

```practice4.html
<!DOCTYPE html>
<html ng-app="myApp">
<head>
  <meta charset="UTF-8" />
  <title>AngularJS TIPS</title>
  <script src="https://code.angularjs.org/1.4.8/angular.min.js"></script>
  <script src="1_myscript.js"></script>
</head>
<body>
  <div ng-controller="myCtrl">
  <h3>LIMIT 4</h3>
  <ul>
    <li ng-repeat="user in users | limitTo:4">
      {{user.name | uppercase}}
      {{user.age}}
      {{user.money | number}}
      {{user.money | currency}}
      {{user.money | currency:"¥"}}
      {{ today | date:'yyyy-MM-dd'}}
    </li>
  </ul>
  <h3>ORDER By age ASC</h3>
  <ul>
    <li ng-repeat="user in users | orderBy:'age'">
      {{user.name | uppercase}}
      {{user.age}}
      {{user.money | number}}
      {{user.money | currency}}
      {{user.money | currency:"¥"}}
      {{ today | date:'yyyy-MM-dd'}}
    </li>
  </ul>
  <h3>ORDER By age DESC and LIMIT 3</h3>
  <ul>
    <li ng-repeat="user in users | orderBy:'-age' | limitTo:3">
      {{user.name | uppercase}}
      {{user.age}}
      {{user.money | number}}
      {{user.money | currency}}
      {{user.money | currency:"¥"}}
      {{ today | date:'yyyy-MM-dd'}}
    </li>
  </ul>
  <h3>Serach by Name</h3>
  <p><input type="text" ng-model="query.name">
  <ul>
    <li ng-repeat="user in users | filter:query">
      {{user.name | uppercase}}
      {{user.age}}
      {{user.money | number}}
      {{user.money | currency}}
      {{user.money | currency:"¥"}}
      {{ today | date:'yyyy-MM-dd'}}
    </li>
  </ul>
  <h3>Serach by Age</h3>
  <p><input type="text" ng-model="query2.age">
  <ul>
    <li ng-repeat="user in users | filter:query2">
      {{user.name | uppercase}}
      {{user.age}}
      {{user.money | number}}
      {{user.money | currency}}
      {{user.money | currency:"¥"}}
      {{ today | date:'yyyy-MM-dd'}}
    </li>
  </ul>
  </div>
  </div>
</body>
</html>
```

```1_myscript.js
(function(){
  angular.module('myApp', []);
  angular.module('myApp')
    .controller('myCtrl', ['$scope', function($scope) {
        $scope.users = [
          {"name":"urano", "age":35, "money":50000},
          {"name":"nakanishi", "age":25, "money":1000000},
          {"name":"shinji", "age":45, "money":444000},
          {"name":"john", "age":49, "money":424000},
          {"name":"yna", "age":42, "money":934100},
          {"name":"miha", "age":25, "money":124000},
          {"name":"kazu", "age":43, "money":834000},
          {"name":"taka", "age":15, "money":799000}
        ];
        $scope.today = new Date();
    }]);
})();
```
Angular.jsの練習3(フィルター)


様々なフィルターを使うことができる

```practice3.html
<!DOCTYPE html>
<html ng-app="myApp">
<head>
  <meta charset="UTF-8" />
  <title>AngularJS TIPS</title>
  <script src="https://code.angularjs.org/1.4.8/angular.min.js"></script>
  <script src="1_myscript.js"></script>
</head>
<body>
  <div ng-controller="myCtrl">
  {{ users.length}}
  <ul>
    <li ng-repeat="user in users">
      {{user.name | uppercase}}
      {{user.age}}
      {{user.money | number}}
      {{user.money | currency}}
      {{user.money | currency:"¥"}}
      {{ today | date:'yyyy-MM-dd'}}
    </li>
  </ul>
  </div>
</body>
</html>
```

```1_myscript.js
(function(){
  angular.module('myApp', []);
  angular.module('myApp')
    .controller('myCtrl', ['$scope', function($scope) {
        $scope.users = [
          {"name":"urano", "age":35, "money":50000},
          {"name":"nakanishi", "age":25, "money":1000000},
          {"name":"shinji", "age":45, "money":444000},
          {"name":"john", "age":49, "money":424000},
          {"name":"yna", "age":42, "money":934100},
          {"name":"miha", "age":25, "money":124000},
          {"name":"kazu", "age":43, "money":834000},
          {"name":"taka", "age":15, "money":799000}
        ];
        $scope.today = new Date();
    }]);
})();
```
UITextViewのpadding/余白を消す

検索するとcontentInsetにマイナスの値を設定する方法が出てくるが、フォントが変わると値も変えないといけなさそう。
いろいろ調べた結果、このやり方で消えたのでメモ。

```swift
textView.textContainerInset = UIEdgeInsetsZero
textView.textContainer.lineFragmentPadding = 0                    
```
WPFのDataGridで複数列ソート

特別な記述などは不要で、既に何かの列で並び替えている状態でShiftを押下しながら別の列でソートすればOKです。
![GIF.gif](https://qiita-image-store.s3.amazonaws.com/0/41133/28498049-d973-d275-a1d4-6e7e496a293a.gif)

Shiftなのがわかりづらいですね…

データは[なんちゃって個人情報](http://kazina.com/dummy/index.html)で作成しました。
Angular.jsの練習2(イテレーター)


値の表示
controllerにCtrlという名前をつけるのは作法
これで配列をグルグル回す

```html
<li ng-repeat="user in users">
```


```practice2.html
<!DOCTYPE html>
<html ng-app="myApp">
<head>
  <meta charset="UTF-8" />
  <title>AngularJS TIPS</title>
  <script src="https://code.angularjs.org/1.4.8/angular.min.js"></script>
  <script src="1_myscript.js"></script>
</head>
<body>
  <div ng-controller="myCtrl">
  {{ users.length}}
  <ul>
    <li ng-repeat="user in users">
      {{user.name}}
      {{user.age}}
    </li>
  </ul>
  </div>
</body>
</html>
```

```1_myscript.js
(function(){
  angular.module('myApp', []);
  angular.module('myApp')
    .controller('myCtrl', ['$scope', function($scope) {
        $scope.users = [
          {"name":"urano", "age":35, "money":50000},
          {"name":"nakanishi", "age":25, "money":1000000},
          {"name":"shinji", "age":45, "money":444000},
          {"name":"john", "age":49, "money":424000},
          {"name":"yna", "age":42, "money":934100},
          {"name":"miha", "age":25, "money":124000},
          {"name":"kazu", "age":43, "money":834000},
          {"name":"taka", "age":15, "money":799000}
        ];
        $scope.today = new Date();
    }]);
})();
```
UILabelで、特定文字の装飾を変更する

UILabelで、文章中の特定文字列などに対して文字色の変更や
太字などの装飾をしたいことがあります。

そんな時のために、UILabelのカテゴリを作成しておくと便利です。

```objc:UILabel+attributed
@implementation UILabel (attributed)

/**
 *  指定テキストの箇所を太字にする
 */
- (void)atr_addAttributeBoldForText:(NSString *)text {
    NSInteger numberOfLines = self.numberOfLines;
    
    NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedText];
    
    UIFont *font = [UIFont boldSystemFontOfSize:self.font.pointSize];
    [attr addAttribute:NSFontAttributeName value:font range:[self.text rangeOfString:text]];
    
    self.numberOfLines = numberOfLines;
    self.attributedText = attr;
}

/*
 *  指定テキストの箇所を赤太字にする
 */
- (void)chz_addAttributeRedForText:(NSString *)text {
    NSInteger numberOfLines = self.numberOfLines;
    
    NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedText];
    
    UIFont *font = [UIFont boldSystemFontOfSize:self.font.pointSize];
    
    [attr addAttribute:NSFontAttributeName value:font range:[self.text rangeOfString:text]];
    [attr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:[self.text rangeOfString:text]];
    
    self.numberOfLines = numberOfLines;
    self.attributedText = attr;
}

@end
```

気をつけなくてはいけないのは、attributeの更新をすると
numberOfLinesの情報がデフォルトで上書きされてしまったりすること。
（NSParagraphStyleを変更しなければ大丈夫だったかな？）

変更前に情報を保持しておいて、最後にセットし直すようにしておくと安全です。
NSParagraphStyleを変更する場合は、textAlighmentやlineBreakModeなどの
情報も含まれているので上書きする際には注意が必要です。
Angular.jsの練習1

テキストボックスに入れた値が表示されます。

```practice.html
<!DOCTYPE html>
<html lang="ja" ng-app>
<head>
  <title>Angular1</title>
  <script src="https://code.angularjs.org/1.4.8/angular.min.js"></script>
</head>
<body>
  <h1>practice</h1>
  <input type="text" ng-model="name">
  <p>hello! {{ name }}</p>
  <p>calculate {{ 5 * 3 }}</p>
</body>
</html>
```
seedデータの投入方法

#seedデータとは？
railsアプリを作成する際にあらかじめ適当なデータを投入する。このデータベース初期化用のデータをseedデータと呼ぶ。
#投入方法
1.dbフォルダの`seeds.rb`にseedデータを投入するスクリプトを記載する。


```ruby:db/seeds.rb
Post.create(title: "seedデータについて", body: "seedデータとはダミーデータのことである", category: "プログラミング")

今回はPostモデルに、

* title
* body
* category

の３つのカラムを作成している。

```

2.ターミナルの操作

```bash
$ rake db:seed

```

これでデータベースに反映される
しかしこれでは１件しかデータが投入できない。この記法で１００件分のデータを投入するには１００回`Post.create()`と記載する必要がある。一気にデータを投入したい時には以下の記法を用いる。

```ruby:db/seeds.rb
100.times do |index|
  Post.create(title: "タイトル#{index}", body: "ブログの内容#{index}", category: "カテゴリー#{index}")
end
```

![kobito.1451459348.177148.png](https://qiita-image-store.s3.amazonaws.com/0/93394/6d1b929c-db1f-bf1b-2da3-f0351f9c1caa.png "kobito.1451459348.177148.png")


Rubyのtimesメソッドを用いて１００件分のデータを登録できる。
等幅フォント比較：プログラミング用

プログラミングに使う等幅フォントの主観による比較。

# 観点
1. アルファベットの見易さ
1. 日本語フォントの見易さ
1. アルファベットO(o)とゼロ(0)の区別
 - 0内に斜線が表示されるか。個人的にあるとうれしい。
1. 小文字L(l)とバーティカルバー(|)の区別
 - 文字だと差の表現が難しいので後述の表中に小文字Lとバーティカルバーの画像を挿入

# 比較
○△☓の三段階評価。評価は主観です。

no|Font|アルファベット|日本語フォント|oと0区別|lとバーティカルバー区別|備考
---|---|---|---|---|---|---
1|MSゴシック|△|△|☓|☓ ![MS_gothic.png](https://qiita-image-store.s3.amazonaws.com/0/107537/2b785d01-b1f1-980b-7505-3f7de027b625.png)| 
2|IPAフォント|△|○|○|☓|フォントサイズによってはアルファベットの下部が潰れた感じになる
3|VLゴシック|○|○|○|△ ![VL_gothic.png](https://qiita-image-store.s3.amazonaws.com/0/107537/0757ea76-1420-2de8-ddd4-1bb4c25b0e77.png)|同サイズの他フォントと比較して縦に長い(横サイズはあまり変わらず)
4|Myrica M|○|○|○|○ ![Myrica.png](https://qiita-image-store.s3.amazonaws.com/0/107537/35e0766d-e8d2-c935-a112-2ac252456c1b.png)| 

## IPAフォント
要インストール。
IPAexフォントもあるが、そちらは可変幅フォントのみ。

- 公式: [IPAexフォント/IPAフォント](http://ipafont.ipa.go.jp/old/)
- Installation (Ubuntu): `sudo apt install fonts-ipafont`

## VLゴシック
Windowsでは要インストール。Linuxのどれかのディストリビューション(Vine?)では標準で入っている。

- 公式: [VL Gothic Font Family]( https://ja.osdn.net/projects/vlgothic/ )
- Installation (Ubuntu): `sudo apt install fonts-vlgothic`

## Myrica M
要インストール。
[プログラミングフォント Myrica](http://myrica.estable.jp/)

## Source Han Code JP（源ノ角ゴシック)
コメントで教えていただいた等幅フォント。
使ってみる。

- [日本語表示も考慮されたコーディング向けのフォント「Source Han Code JP」が公開 - 窓の杜](http://www.forest.impress.co.jp/docs/news/20150612_706667.html)
- https://github.com/adobe-fonts/source-han-sans/tree/release/SubsetOTF

## 追記: Fira Code
最近はこれを使用中

- 公式: https://github.com/tonsky/FiraCode/
- [How to install]( https://github.com/tonsky/FiraCode/wiki )
    - Ubuntu 17.04以上: `sudo apt install fonts-firacode`
    - Windows: `choco install firacode`

- 参考:
    - [コーディング用フォント「Fira Code」を使おう](http://qiita.com/shuntksh/items/1995e87fe5c1ac88296f)

## 追記: Ricty
- 公式: [プログラミング用フォント Ricty]( https://www.rs.tus.ac.jp/yyusa/ricty.html )
- Installation: 
    - Ubuntu: `sudo apt install fonts-ricty-diminished`
    - Windows: `choco install fonts-ricty-diminished`


# おまけ
インストール済みフォント一覧表示

```:Linux
$ sudo apt install fontconfig
$ fc-list
```
Array.prototype.forEachでBreakするユニークな方法


参考:  
http://stackoverflow.com/questions/2641347/how-to-short-circuit-array-foreach-like-calling-break

上のサイトの情報で、ユニークな方法がありました。

```js
var ar = [ "apple", "lemon", "soda" ];
var breakException = {};
try {
  ar.forEach(i => {
    if (i === "lemon") {
      // breakしたい！
      throw breakException;
    }
  });
} catch (e) {
  if (e !== breakException) throw e
}
```

例外がスローされると、関数の実行が停止するのを応用して、  
「Breakしたい！」と思ったら、強制的に例外を出しちゃうという方法です！
でも、本当の例外が発生してしまったときのために、  
`catch`内で`breakException`かどうかを判断しています。  

`try-catch`文がこんな方法に応用できるなんて面白いです！
NanoVG を CPU で描画する

漢だったら NanoVG vector graphics library(https://github.com/memononen/nanovg) を OpenGL 使わずに CPU でも描画したいですよね!

できました.

https://github.com/syoyo/nanovg-nanort

NanoRT(SW raytracer)を使って OpenGL 不要でどこでも動きます!

![render.png](https://qiita-image-store.s3.amazonaws.com/0/36275/c055810e-02c3-a0cb-9104-f4695ba1e45c.png)

## TODO

* アンチエイリアシング周り　
* レンダリング最適化(マルチスレッドレンダリングなど)
* Duktape (http://duktape.org/) と組み合わせて HTML5 Canvas API っぽいレイヤーを実装してスクリプトで記述できるようにする.

## まとめ

ベクターグラフィックスはたのしい! ベクターグラフィックスやりましょう!
「Pepperプログラミング」でインタラクィブの起動トリガーでうまく動作しなかったので公式マニュアル通りにしたらきちんと動作した。

Choregraphe バージョン 2.4.2.26
Naoqi Version:  2.4.2

Pepperプログラミングブックのp.119,p120に記載のある下記コードで
Pepperが質問をしてきてくれませんでした。
```
(('Launchpad/NumPeopleZone2' > 0) ~ 5)
&& ('Launchpad/PreviousActivity' !="アクティビティの識別子")
```

そこで公式サイトを参照すると下記の記載があり修正したところうまくいきました。
```
(('Launchpad/NumPeopleZone2' > 0) ~ 5)
&& ('Launchpad/PreviousActivity' !="アクティビティの識別子/congrats")
```
参照元：https://cloud.aldebaran-robotics.com/naoqidoc/2-4/software/choregraphe/tutos/create_interactive_activity.html






Pepperプログラミングブック
http://www.amazon.co.jp/dp/4797384492
MySQLコマンドメモ


コマンドをすぐに忘れちゃうので、
自分の備忘録的にメモしてまいります！

## ルートユーザのパスワード設定 
```
$mysqladmin -u root password 新しいパスワード
```


## mysqlクライアントの実行
```
$mysql -u root -p 
```


## データベース作成
文字コードを指定して表示

```
CREATE DATABASE データベース名 CHARACTER SET utf8;
```

## データベース一覧表示
	mysql > SHOW DATABASES;

## テーブルの一覧を表示
	mysql > SHOW TABLES;
	

## テーブルの構造の確認
```
mysql > desc table;
```
BluemixでVMを動かしてみよう

#やりたいこと
Bluemixのサービス「IBM Virtual Machines (BETA)」を使って、Bluemix上でSoftLayerと同じようにVMを作成してログインするところまでやりたいと思います
SoftLayerはまだOpenstackベースではないですが、こちらはOpenstackですね
<img width="277" alt="スクリーンショット 2015-12-31 15.51.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/101361/5776b9ad-ecc3-8609-eb6f-b3daf208b4bb.png">


#VM作成手順
USデータセンターから仮想マシンの実行を選択
<img width="307" alt="スクリーンショット 2015-12-31 15.48.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/101361/b69f776c-8cf1-a5e3-0222-8656f57d63da.png">

すると以下の画面が出る（20151231時点）
<img width="730" alt="スクリーンショット 2015-12-31 15.46.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/101361/e8c0c5eb-1375-1c45-7204-65be210cdd94.png">

ので、UKを選択しなおす
<img width="284" alt="スクリーンショット 2015-12-31 15.50.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/101361/511a69e8-270a-00d2-832a-282d045c621c.png">


再度仮想マシンを実行
<img width="307" alt="スクリーンショット 2015-12-31 15.48.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/101361/1f819031-0289-90f3-ef81-6457e54850a6.png">

すると構成画面が出現
<img width="1232" alt="スクリーンショット 2015-12-31 15.40.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/101361/d765b05c-14d8-10ce-6a64-a66ec6299e69.png">

#構成画面詳細
###OSは以下の４つが選択可能

- debian8.0
- centos6.5
- centos7.0
- centos7.1

またはqcow2形式イメージをアップロード可能です
たとえば以下のOpenstackのページから追加できますね
http://docs.openstack.org/image-guide/obtain-images.html

###パブリックIP割り当てにチェック
パブリックIP、X.X.X.Xはログインに使います
###鍵の作成・ダウンロード
今回は新規にpemファイルを作成します（もちろん既に持っているものでも使えます）
ダウンロードしたままのファイル権限設定（644）だとオープンすぎると怒られるので、groupとothersを0にします（600）
chmod o-r test.pem 
chmod g-r test.pem 

#まとめ
作成を押すと**1〜2分で**VMが立ち上がり、以下のコマンドでログインできます
ssh -i /pathto/test.pem ibmcloud@X.X.X.X (X.X.X.XはパブリックIP)


#参考リンク
IBM Virtual Machines (BETA)
https://www.eu-gb.bluemix.net/docs/virtualmachines/vm_index.html
BluemixでVMを使用してみる
http://www.slideshare.net/unokichi/bluemixvm-45505199
Python2.5でsixを使う際の注意点

Python 2.5が動作する環境下で動くpythonスクリプト中でsixを使う際の注意点。

# sixとは
sixが何かは公式ドキュメントを参照。
[Six: Python 2 and 3 Compatibility Library — six 1.10.0 documentation](http://pythonhosted.org/six/)

> Six provides simple utilities for wrapping over differences between Python 2 and Python 3. It is intended to support codebases that work on both Python 2 and 3 without modification. six consists of only one Python file, so it is painless to copy into a project.

公式リポジトリ([gutworth / six — Bitbucket](https://bitbucket.org/gutworth/six))
現時点(2015/12)で最新版は1.10.0

公式ページの日本語訳は現時点で1.9.0まで。
[Six: Python 2 と 3 の互換性ライブラリ — six 1.9.0 ドキュメント](http://hhsprings.bitbucket.org/docs/translations/python/six-doc-ja/)


# 結論
Python 2.5環境でも動かす可能性がある場合は　six 1.8.0 を使用する。


# 詳しく
1.10.0ではPython 2.5はサポート対象外となっている。

[six 1.10.0 : Python Package Index](https://pypi.python.org/pypi/six/1.10.0)

> Six supports every Python version since 2.6. It is contained in only one Python file, so it can be easily copied into your project. (The copyright and license notice must be retained.)

1.9.0ではPython 2.5はサポート対象となっている。

[six 1.9.0 : Python Package Index](https://pypi.python.org/pypi/six/1.9.0)

> Six supports every Python version since 2.5. It is contained in only one Python file, so it can be easily copied into your project. (The copyright and license notice must be retained.)

ところが、Python 2.5で動かない operator.methodcaller を使っている。
ソース差分を見ると、1.8.0 -> 1.9.0 でoperator.methodcallerを使うように修正されている。

というわけで、Python 2.5もサポートする場合はsix 1.8.0を使用しましょうというお話。
[Cocoa]Singleton

<p>大晦日になって、自分が知らなかったことに気がついてしまった。</p>

<p>マルチスレッドの環境でシングルトンを実装する場合、ロックが思っていたが、Swiftでは状況が異なるようだ。
</p>

<p>Objective-Cで実装する場合、以下の通り。</p>

```swift
+ (instancetype)sharedInstance {
    static id _sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _sharedInstance = [[self alloc] init];
    });
 
    return _sharedInstance;
}
```

<p>Swiftだとstatic変数はクラスアクセス時に生成されるので、以下のように記述できる。</p>

```swift
class Singleton {
    static let sharedInstance = Singleton()
}
```

<p>シングルトンなインスタンス生成時に設定が必要な場合は以下となる。</p>

```swift
class Singleton {
    static let sharedInstance: Singleton = {
        let instance = Singleton()
        // setup code
        return instance
    }()
}
```

<p>もし、シングルトン以外のインスタンス生成を許したくない場合は、C++でコンストラクタをpriateにするのと同様に、privateなinit()関数を用意すればいい。</p>

```swift
    private init() {
        // setup code
    }
```

関連情報
<a href="http://qiita.com/advent-calendar/2015/cocoa/">Using Swift with Cocoa and Objective-C (Swift 2.1)</a><br />

【Cocoa練習帳】
<a href="http://www.bitz.co.jp/weblog/">http://www.bitz.co.jp/weblog/</a><br />
<a href="http://ameblo.jp/bitz/">http://ameblo.jp/bitz/</a>（ミラー・サイト）<br />
<a href="https://t.co/6P3h2jtbRk</a>note<br />
<a href="http://qiita.com/m_yukio">Qiita</a><br />