OmniAICreator/Qiita-1.07M huggingface dataset:
Aurelia docs(get-started) update: 8/6


前回の投稿の直後に、Aureliaの[Breaking Update](http://blog.durandal.io/2015/08/05/aurelia-release-for-jspm-beta/)が発表され、ドキュメントもそれに合わせて更新されました。

取り急ぎget-startedの訳を更新しました。現在、pull request中でまだ更新されていない内容も含まれるため、本エントリの内容については[fork先](https://github.com/bohnen/documentation/tree/update-japanese-docs)を確認してください。

## jspm beta をインストール 
jspmのbetaバージョンをインストールする必要があります。

```
$ npm install -g jspm@beta
```

## 相対パス指定のやり方が変わった

今まではルートのmoduleIdで、 `./welcome` のように指定していましたが、これが　`welcome` になります。それに伴い、[skeletonサンプルアプリケーション](https://github.com/aurelia/skeleton-navigation)や、ドキュメントの該当部分が更新されました。

## Flickrサンプルの削除

Flickrの画像を表示するサンプルではなく、Githubのユーザーを表示するサンプルになっています。

## HttpClientパッケージの変更

HttpClientは、今までは `aurelia-http-client` パッケージでしたが、`aurelia-fetch-client` に変更になりました。

## サンプルアプリケーション

https://github.com/aurelia/skeleton-navigation

ただ、現在のところユニットテストのコードは古いままなので、`gulp test`でのkarmaの実行が失敗します。

forkして修正&Typescript用のスケルトンを作成しました。
* [unitテスト修正版](https://github.com/bohnen/skeleton-navigation/tree/fix_broken_test)
* [typescript用スケルトン](https://github.com/bohnen/skeleton-navigation/tree/typescript)

Typescriptの方は、jspm@beta だとkarmaで失敗する（理由不明）なので、jspm 0.15.7 で使っています。
SourceTreeでファイルをaddしようとしたらUnable to createがでる解決方法。

SourceTreeでファイルをステージに上げようとしたらエラーがでました。環境はMacです。

# SourceTreeからaddが失敗
SourceTreeでファイルをAddしようとしたところエラーがでました。

```git:エラーが発生
git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree add -f -- hoge.scss fatal: Unable to create
```
hoge.scssをaddしようとしたのに**Unable to create**と言われます。

# .gitディレクトリのパーミッションを変更
ターミナルからSourceTreeが開いているプロジェクトが置いてある`.git`ディレクトリの権限をログイン中のユーザーの権限に変更します。

```bash:.gitディレクトリのパーミッションを変更
sudo chown ユーザ名 -R .git
```
今回の場合元の`.git`ディレクトリのパーミッションが`root`になっていたのでsudoをつけています。

ユーザー名を知りたいときは`whoami`コマンドを使います。

```bash:ユーザー名を調べる
whoami
kawasakiosamu
```
ここだと`kawasakiosamu`がユーザー名です。

```bash:.gitディレクトリのパーミッションを変更
sudo chown kawasakiosamu -R .git
```

# SourceTreeで再度add
こんどはaddが成功しました(๑╹ڡ╹๑)

# 参考
http://stackoverflow.com/questions/3813962/git-problem-fatal-unable-to-write-new-index-file
xamppのトップページ？が表示されない事について

![xampp_img11a.png](https://qiita-image-store.s3.amazonaws.com/0/88876/42880546-4cd2-6680-1184-1f1f9a826d1e.png)
![xampp_img11.png](https://qiita-image-store.s3.amazonaws.com/0/88876/9744b47f-327d-2628-7986-417b9f550406.png)

ザンプインストールしたけど、あれ？なんかスタートページが参考本＆サイトと違うぞ？と困った方もいるのでは？

調べてみたら、xamppのバージョン5.5.27 & 5.6.11くらいから、新しいスタートページ(トップページ)導入したらしいので、そのせいかもしれません。

その場合、少し古いバージョンをインストールしなおすと解決します。

参考URL
http://stackoverflow.com/questions/31653694/xampp-keeps-showing-dashboard-welcome-page-instead-of-the-configuration-page

私は5.5.24を入れたら、ちゃんと従来のスタートページが表示されました。

xampp側が新しいスタートページを導入しただけなんですが、初心者にとっては、本と違う画面がでてくるだけで不安になりますよね。

次はポート番号がふさがってて、xamppのアパッチェがスタートできない場合についてやります。
c++ > template > 特定の型のインスタンスに対して、あるクラスの特定メソッドを専用にすることもできる

引用: C++のためのAPIデザイン by マーティン・レディ
5.3 テンプレートベースのAPI

>特定の型のインスタンスに対して、あるクラスの特定メソッドを専用にすることもできる

```
template <>
void Stack<int>::Push(int val)
{ 
  // 整数専用のプッシュ実装
}
```
c++ > c++コンパイラが生成したオブジェクトファイル > 同じ関数でも表現が異なる > 関数のオーバーロードによる

引用: C++のためのAPIデザイン by マーティン・レディ

> Cの関数はC++関数とはリンケージが異なる。つまり、CコンパイラとC++コンパイラが生成したオブジェクトファイルでは、同じ関数でも表現が異なるのだ。これは、C++でサポートされた関数のオーバロードが原因の一つだ。その結果、C++の関数名は、パラメータの個数や型などの追加情報を符号化するために「マングル」される。
...
この問題を切り抜けるには、extern "C"構造にC APIをラップして、格納された関数にはCスタイルのリンケージを使うようにC++コンパイラに指示する。

<hr>
http://stackoverflow.com/questions/1041866/in-c-source-what-is-the-effect-of-extern-c
c++11 > k(キロ)やm(million)の定義 > 45_k / 1_m > constexpr long long operator "" _k(long long l) {     return l * 1000; } // 時間についてはstd::chrono::millisecondsなどがある

http://qiita.com/hashimotoryoh/items/609ed5bf4dd4cd90178a
のやりとりを見ていて、1e6と1000000の違いが気になった。

http://stackoverflow.com/questions/24389678/is-scientific-notation-safe-for-integer-constants-in-c
を見つけて、その中で単位のつけかたが今後使えそうと思ったのでメモ。

```cpp:definition
constexpr long long operator "" _k(long long l) {
    return l * 1000;
}

constexpr long long operator "" _m(long long l) {
    return l * 1000 * 1000;
}
```

```cpp:usage
long long delay = 1_m;
long long wait = 45_k;
```

constexprはC++11から導入されたようだ。
http://en.cppreference.com/w/cpp/language/constexpr

<hr>
(2015/08/11追記)

時間に関するリテラル(std::chrono::millisecondsなど)があるとのこと、以下にて @egtra さん、@h2suzukiさんに教えていただいた。感謝。

http://qiita.com/hashimotoryoh/items/609ed5bf4dd4cd90178a#comment-bfc464f7263aac1d76c3

http://qiita.com/hashimotoryoh/items/609ed5bf4dd4cd90178a#comment-a9b58b07cd6cae7cd60a

<hr>
[TS-7553](メモ) 起動スクリプト など..


### 起動スクリプト(initrd内)
* 起動時のスクリプトは、initrdの中の `/linuxrc` (symbolic link) 

```shell-session
Type 'tshelp' for help
# ls -l linuxrc*
lrwxrwxrwx    1 root     root           16 Jun  8  2011 linuxrc -> linuxrc-fastboot
-rwxr-xr-x    1 root     root         4667 Aug 31  2011 linuxrc-fastboot
-rwxr-xr-x    1 root     root         4330 Jun  8  2011 linuxrc-nandmount
-rwxr-xr-x    1 root     root         3891 Jun  8  2011 linuxrc-sdmount
-rwxr-xr-x    1 root     root         5502 Jun  8  2011 linuxrc-sdroot
-rwxr-xr-x    1 root     root         5850 Jun  8  2011 linuxrc-sdroot-readonly
-rwxr-xr-x    1 root     root         5142 Jun  8  2011 linuxrc-usbroot
```


### 起動時のUART(CONSOLE)
* 起動スクリプトの以下の記述のあたり。
`let dio9="0"`とすると、Defaultで、TS-7553のCOMポートが使用される。(SW1の長押しは必要なくなる)

```shell-session
...
# If the RESET switch is being pushed,
# set the CONSOLE to the DB9 port (/dev/pts/#)
eval `ts7500ctl --getdio`
let dio9="(dio >> $resetsw) & 0x1"
XCONSOLE=0
...
```

* `% vi linuxrc-fastboot` で編集後は、`% save`で、RAMDISKの内容を保存する。

### Debianの自動起動
* linuxrc-sdrootにリンクを張ることで、Debianまで起動する。
`% rm linuxrc; ln -s /linuxrc-sdroot /linuxrc; save`


### fastboot でとめたい (Debianへいかずに)
* Debian時に、/fastboot を作ることで、`linuxrc-sdroot`使用時でも、初期起動時にプロンプトをだしてとまる。initrdを編集するときなど。
`%  touch /fastboot`
* `exit`でDebian起動へ継続。`/fastboot`は、削除される。

### フラッシュメモリ(NAND/SD)の構成
```shell-session
-XNAND
 /dev/nbd0 - whole disk device of XNAND drive
 /dev/nbd1 - 1st partition (kernel partition)
 /dev/nbd2 - 2nd partition (EXT2 initrd)
 /dev/nbd3 - 3rd partition (~252MByte mini Debian EXT3 filesystem)
 /dev/nbd4 - 4th partition (unused)

-SD
 /dev/nbd5 - whole disk device of microSD card
 /dev/nbd6 - 1st partition of SD card (Windows VFAT filesystem on devkit card)
 /dev/nbd7 - 2nd partition of SD card (kernel partition on devkit card)
 /dev/nbd8 - 3rd partition of SD card (EXT2 initrd partition on devkit card)
 /dev/nbd9 - 4th partition of SD card (Debian EXT3 filesystem on devkit card)
```
技術英語 > To the layman, it would be virtually [indecipherable].

@ Star Trek Voyager > EX POST FACTO

クルーの脳の診断についてTuvokがドクターにレポートを見たいと言い、そのことに対してドクターからの回答

> To the layman, it would be virtually indecipherable.

「素人にはわからんぞ」という訳がついていた。

<hr>

http://www.merriam-webster.com/dictionary/indecipherable
> indecipherable
> not able to be read or understand

<hr>

virtuallyはalmostと同じように使われ「ほとんど」という意味で使われるのを別の資料で見たことがある。

http://english.stackexchange.com/questions/59200/virtually-is-like-almost-or-practically
http://ell.stackexchange.com/questions/48053/difference-between-virtually-and-almost
カレントディレクトリのフルパスをクリップボードにコピー

何かに使えるのでは?と思い作ったけれど未だ使い道が見つからない(笑)

```langage:.zshrc
alias path='echo -n `pwd` | pbcopy'
```

###使い方
フルパスを取得したいところで```path```と打つだけ。
Slackでの誤爆を防止できるChrome Extension作ってみた

## Slack Message Checker

ターミナルで`ls`と打ったつもりが、フォーカスがSlackになってて、そのまま送信・・・なんてことがよくあります。

そんなSlackでの誤爆を防止できるChrome Extensionを作りました。

* [Slack Message Checker - Chrome Web Store](https://chrome.google.com/webstore/detail/slack-message-checker/bpbfbabfppmapfaimkbkgdnmgolbpoei?hl=ja)

あらかじめフィルタリングルールを作成しておき、メッセージ送信時にSlack Message Checkerが自動的にメッセージをチェックします。

メッセージがルールに当てはまる場合は、指定されたアクション（後述）を実行します。

Slackで`ls`を送信しようとすると、以下の様な確認ダイアログが出るようになります。

![slack_ls.png](https://qiita-image-store.s3.amazonaws.com/0/15153/be3adf51-d3ff-3703-76ba-702f8493ef1c.png)


## 使い方

Slack Message Checkerをインストール後、拡張機能ページ（chrome://extensions/）を開きます。

更に、Slack Message Checkerのオプションページを開き、ルールを設定していきます。

![extension_page.png](https://qiita-image-store.s3.amazonaws.com/0/15153/09ee155d-7b74-1fb3-1fcf-0bff0582c946.png)

Generalでは、全Slackチーム（https://*.slack.com）に適用されるルールを設定します。

![option_page_start.png](https://qiita-image-store.s3.amazonaws.com/0/15153/805d2640-1d20-faf6-46d4-74184549c127.png)

「add」ボタンを押してルールを追加していきましょう。

設定項目はkeywordとmatch typeとactionの3つです。

keywordとmatch typeにより、actionの実行条件が決まります。

match typeは、

- contain - 送信しようとするメッセージにkeywordで指定した文字列が含まれている場合
- equal - 送信しようとするメッセージがkeywordで指定した文字列と一致する場合
- regexp - 送信しようとするメッセージがkeywordで指定した正規表現にマッチする場合

となります。

actionは、

- block - アラートダイアログを表示し、メッセージの送信を完全にブロック
- confirm - メッセージの送信を行うかどうかの確認ダイアログを表示

となります。

以下の設定例では、送信しようとするメッセージが`ls`の場合に確認ダイアログを表示するようになっています。

![option_page.png](https://qiita-image-store.s3.amazonaws.com/0/15153/ede1e64d-0816-d22f-325c-e9eab8744d1b.png)

どんな時でも確認ダイアログを出したいという人は、keywordを`.*`、match typeをregexpにしてみましょう。

チーム別の設定を行う場合は、左上の「add team」ボタンからチームを追加して下さい。

Generalと違い、ルールを適用するChannelも指定可能になります。

Channelはカンマ区切りで複数指定できます。無指定又は"*"を入力すると全Channelにルールが適用されます。

ルールの設定が完了したら、右上の「save」ボタンを押して、ルールを保存して下さい。

以上で設定は終わりです。新しいタブでSlackを開いて動作を確認してみましょう。

## その他

Slackの仕様変更により動作しなくなる可能性があります。

開発は以下のリポジトリで進めています。

github: https://github.com/nabeix/slack-message-checker
オブジェクトを進行方向に前傾させる

# オブジェクトを向いている方向に傾けたい
まず一般的(?)なドローンを想像して欲しい。4つの羽で飛ぶあれだ。
あれはホバリングするだけならば地面に対して水平方向を向いているが、移動する場合は移動する方向に傾く。
また、移動速度によって傾きも変わる。
今回はそんな感じの物を実装したいと思います。

# 何をするか
今回必要な情報は"**移動方向のベクトル**"、その中でも必要なのは"**X方向**"と"**Z方向**"のみになります。
それで得られた情報にほんの少し手を加えるだけで、良い感じの傾きを得る事が出来ます。

# 書いてみた
```cs:ForwardTilt.cs
using UnityEngine;
using System.Collections;

public class TestRotater : MonoBehaviour {
	// X方向のベクトル
	[SerializeField, Range(-5f, 5f)]
	float vectorX = 0f;

	// Z方向のベクトル
	[SerializeField, Range(-5f, 5f)]
	float vectorZ = 0f;

	// 傾きベクトルの調整値
	[SerializeField, Range(1f, 10f)]
	float devideNum = 5f;

	// Update is called once per frame
	void Update () {
		// 向きベクトルから縦の傾きを得る
		float y = Mathf.Pow ((vectorX*vectorX)+(vectorZ*vectorZ), 0.5f) / devideNum;
		Vector3 tiltVector = new Vector3(vectorX, -y, vectorZ);

		// 回転をかける
		transform.rotation = Quaternion.Slerp (transform.rotation,
		                                       Quaternion.LookRotation(tiltVector - transform.position),
		                                       0.1f);
	}
}
```
# 解説
手続きを簡単に説明しますと、以下の様になります。

1. **vectorX**と**vectorZ**からベクトルの大きさ(仮に**vectorLength**と置きます)を取得。
2. **vectorLength**を**devideNum**で割り、傾きのベクトルとなる**tiltVector**のYを作成。
3. **tiltVector**を**transform.position**で引くと向いて欲しい座標を取得できるので、これをクォータニオンに変換。
4. Sleap()でゆっくり回転させる。

**vectorLength**を**devideNum**で割っているのは傾きベクトルのYがとてつもなく大きい数字になるのを防ぐためです。
**devideNum**の値が大きければ傾きは小さくなり、小さければ大きくなります。
Spring web と組み合わせた lombok の使いどころ

主に spring と組み合わせたときの Lombok の使い方

## 設定 Bean 作成
こんなコードで Property ファイルから設定を読み込んだ Immutable な Configuration Bean ができる

```java:SampleConfiguration.java
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;


@lombok.Value
@PropertySource("classPath:/someprop.properties")
@Configuration
public class SimpleConfiguration {
  @Value("${prop}")
  String prop;

  @Value("${feature.enabled}")
  boolean featureEnabled;

  @Value("#{'${server.id}'.split(',')}")
  private List<Integer> serverId;
}
```

```text:someprop.properties
prop=Hello, world.
feature.enabled=true
server.id=100,102,103
```

## コントローラー定義

`@Controller` には，`@Slf4j`, `@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true)`, `@RequiredArgsConstructor(onConstructor = @__(@Autowired))` を着けると幸せになれる．`@Autowired` は `@Inject` にするとよりいいっぽい．

```java:SampleController.java
@Slf4j
@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true)
@RequiredArgsConstructor(onConstructor = @__(@Autowired /* or @Inject */))
@Controller
class SampleController {
  static String CONST_STR = "この変数は実際には private static final";

  /** 作成されたコンストラクターを使って，Spring が値を入れてくれる */
  HttpServletRequest request; // 実際には private final 変数
  XxxService xxxService;
  SampleConfiguration config;

  @RequestMapping("/home")
  public String getHome(final ModelMap modelMap) {
    if (!request.isSecure()) {
      log.info("redirect");
      return "redirect:" + request.getRequestURI();
    }

    if (config.isFeatureEnabled()) {
      modelMap.put("xxxs", xxxService.getItems());
    }

    modelMap.put("message", "Hello, world!");

    return "home.thymeleaf.xhtml";
  }
}
```
クロージャを調べてみた


#クロージャを使えば関数の処理を省略的に書ける#

変数に内容を代入することができ、その場合は```{}```でくくればできます。
関数名は書きません。

```swift

import Foundation

 var Closure = { (num1 : Int , num2 : Int) -> Int in
    return num1 * num2
}

print(Closure(10, 10))  //100
```

関数の宣言、インスタンスを生成といった記述を簡潔に書けます。
swiftでは関数を値として処理する。

短くて済むし解りやすい！
Karabiner で "karabiner cannot connect with kernel extension" と言われたら

Qiitaに書く内容ではないかもしれないけれどひとまずメモとして...

## Karabinerが機能しなくなった
OS を El Capitan beta 6 にアップデートしたら，Karabinerが機能しなくなった．
インストールしなおしてもダメ．

しばらくすると
``"karabiner cannot connect with kernel extension"``
とエラー通知ウィンドウが出てきた．
カーネル拡張とやりとりできない...権限の問題？

調べたところ，他の人も同様の状態になっている模様
[OSX 10.11 Beta (15A244d) 6 - unable to load kext · Issue #450 · tekezo_Karabiner](https://github.com/tekezo/Karabiner/issues/450)
このissueの中に答え書いてあった．

## 解決方法
手動でカーネル拡張用ファイルを読み込ませる．
``(sudo) kextload /Applications/Karabiner.app/Contents/Library/Karabiner.signed.kext``
僕の環境では``sudo``必要だった．これで動くようになった．
Haxeの正規表現でマッチした値を取得する

こう書く

```hx
using StringTools;

class Main {
    static function main() {
        var str     = ':foo|bar|:baz';
        var m       = ~/:[a-z]+/g;
        var pos     = 0;
        var matches = [];
        
        while (pos < str.length) {
            if (m.matchSub(str, pos)) {
                var m_pos = m.matchedPos();
                matches.push(str.substr(m_pos.pos, m_pos.len));
                pos = m_pos.pos + m_pos.len;
            } else {
                pos = str.length;
            }
        }
        
        trace(matches); // [ ":foo", ":baz" ]
    }
}
```

もっと楽な方法があったら教えてほしい。
ReactのJSXでifやforを使いたい場合


JSPとかerbとかHTML系のテンプレートに慣れていると、
ReactのJSX内でifやforが使えないのがもどかしい事があると思います。

React的にはコンポーネントとして括り出すのがいいのは承知の上で、
ちょっと動作を確認したい時や、本当に大したことない処理の場合は
やはりインラインで書きたいものです。

以下のように即時関数を使えば実現できます。

```js:
export default class Header extends React.Component {
  render() {
    return <div className={s.root}>
      <div className={s.logo}>
        LOGO
      </div>

      {(() => {
        if (this.props.loggedIn)
          return <button style={{width:100}} onClick={this.onLogout.bind(this)}>
          Logout
        </button>;
      })()}
    </div>;
  }
}
```

これくらいシンプルな場合は、三項演算子使った方が読みやすいかも。

```js:
export default class Header extends React.Component {
  render() {
    return <div className={s.root}>
      <div className={s.logo}>
        LOGO
      </div>

      {(() => {
        return this.props.loggedIn ? <button style={{width:100}} onClick={this.onLogout.bind(this)}>
          Logout
        </button> : null;
      })()}
    </div>;
  }
}
```

参考:
https://facebook.github.io/react/tips/if-else-in-JSX.html
powが使えなくて詰まる(解決編）

前回powの設定が良くわからなくポート番号を指定して使ってましたが、
事情によりそれでは駄目だという事でまた調べました。

情報収集

`launchctl list | grep -i pow `
動いているデーモンの確認

```
652	-	cx.pow.powd
-	1	cx.pow.firewall
```

`cx.pow.firewall`
このデーモンがポートフォワーディングをしてくれるので、
今回の要になる部分です。
`cx.pow.powd`
こっちのデーモンは無いとpow自体が動かないみたいです。

`lsof -i`
ポート番号確認

```
node      652  TCP *:20559 (LISTEN)
node      652  UDP *:20560
node      652  TCP localhost:20559->localhost:49620 (ESTABLISHED)
```

一応ポートも見てみます。うまく行った時に、
`node      652  TCP *:20559 (LISTEN)`
ここの表示が変わると思ったのですがそんな事は無かったです。

色々調べながら手当り次第にファイルを書き換えたり戻したり、
powを何度も入れたり消したりする事２時間ほど・・・。

http://d.hatena.ne.jp/passingloop/20110926/reviewing_pow_installation
ここのサイトを参考に`cx.pow.firewall`の中身が怪しいとようやく気がつきました。

```
-----自分のcx.pow.firewall-----
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>cx.pow.firewall</string>
        <key>ProgramArguments</key>
        <array>
                <string>/bin/sh</string>
                <string>-c</string>
                <string>
                  sysctl -w net.inet.ip.forwarding=1;
                  echo "rdr pass proto tcp from any to any port {80, 20559} -> 127.0.0.1 port 20559" | pfctl -a "com.apple/250.PowFirewall" -Ef -
                </string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>UserName</key>
        <string>root</string>
</dict>
</plist>
```


```
----サイトのcx.pow.firewall----
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>cx.pow.firewall</string>
	<key>ProgramArguments</key>
	<array>
		<string>sh</string>
		<string>-c</string>
		<string>ipfw add fwd 127.0.0.1,20559 tcp from me to me dst-port 80 in &amp;&amp; sysctl -w net.inet.ip.forwarding=1</string>
	</array>
	<key>RunAtLoad</key>
	<true/>
	<key>UserName</key>
	<string>root</string>
</dict>
</plist>
```

この記事は書かれて数年が経っているので多少違う点はあって当然かと思いますが、
明らかに自分のところでおかしな点が・・・。
`echo "rdr pass proto tcp from any to any port {80, 20559} -> 127.0.0.1 port 20559"`
port {80, 20559}、ここが怪しいです。
以下に修正。
`echo "rdr pass proto tcp from any to any port 80 -> 127.0.0.1 port 20559"`

ここを修正したらようやくpowが思うように動いてくれました。
ファイルを見比べると差異が分かるのでとても助かりました。
Windowsでtail -f

まさにそのままのがｇｇったらあった。

[Windows で tail -f する方法 - maruko2 Note.](http://www.maruko2.com/mw/Windows_%E3%81%A7_tail_-f_%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95)
>
Get-Content コマンドレットのエイリアス[1]として cat, gc, type が登録されているので、cat でも同じ結果になる。
cat "LogFiles\Firewall\pfirewall.log" -wait -tail 10


```
C:\tmp> powershell
Windows PowerShell
Copyright (C) 2014 Microsoft Corporation. All rights reserved.
PS C:\tmp> cat a.txt -wait
aaaaa
aaa
aa
aa
```

golangではgotailというパッケージがあるらしい

```bash
$ go get github.com/ActiveState/tail
$ cp src/github.com/ActiveState/tail/cmd/gotail/gotail.go .
$ go build gotail.go
$ GOOS=windows GOARCH=amd64 go build gotail.go
$ ./gotail -h
Usage of ./gotail:
  -F=false: follow, and track file rename/rotation
  -f=false: wait for additional data to be appended to the file
  -max=0: max line size
  -n=0: tail from the last Nth location
  -p=false: use polling, instead of inotify
$ ./gotail -f a.txt
aaaaa
aaa
aa
aa
```

Windowsでも動く

```
PS C:\tmp> .\gotail.exe -h
Usage of C:\tmp\gotail.exe:
  -F=false: follow, and track file rename/rotation
  -f=false: wait for additional data to be appended to the file
  -max=0: max line size
  -n=0: tail from the last Nth location
  -p=false: use polling, instead of inotify
PS C:\tmp> .\gotail.exe -f a.txt
aaaaa
aaa
aa
aa
```

# 参考
複数ファイルの tail -f を heroku logs っぽく表示する「9t」 - Thanks Driven Life
http://gongo.hatenablog.com/entry/2015/03/09/221231
↑ソースはそんなに長くないのでgolangの勉強になる
ActiveState/tail
https://github.com/ActiveState/tail
'git push origin master'禁止にする設定

## `.zshrc`に追記するだけ

```
function disable_git_push_origin_master() {
    if [[ $2 = "git push origin master" ]]; then 
        exit
    fi
}

autoload -Uz add-zsh-hook

add-zsh-hook preexec disable_git_push_origin_master
```

以後

```
git push origin master
```

とタイプすると、Terminal.appだと`[Process completed]`と出力され以後何もできなくなり、iTerm.appだとウィンドウが閉じる。

##　gitのhooksを使うやり方

- [git-hooksを使って，誤ってmasterブランチにpushしてしまわないようにした． - hasen's tech life](http://hasen.hatenablog.com/entry/2015/03/16/213612)
- [master への push を禁止するローカル git hook の正しい書き方 - 永遠に未完成](http://d.hatena.ne.jp/thinca/20150306/1425639218)

この辺は見送った。

- repositoryごとに設定=>面等
- グローバルに設定 => .zshrcでもいいのでは
- 動かない既存repositoryがあった
    - `${remote_ref##refs/heads/}`が`master`かどうかをチェックするのが、git hooksのキモなんだが、中身が空になってしまうrepositoryがあり、治し方わからんかった

##今後

- 現状（寝ぼけて`git push origin master`は回避できてる）は一応満足
- git hooks使うやり方をちゃんと動くようにする（どっちを使うかを選べれるようにする）
PHPで行列演算

PHPの配列って行列のようなものだからそういうライブラリくらい有るだろう、と思ってたら何気に意外と見当たらない。
ワンライナー転置行列と、PHP4時代の遺物[Math_Matrix](https://pear.php.net/package/Math_Matrix)程度しかない。
仕方ないので自作することにした。
え？Matlabでも呼び出せ？その発想はなかったわ。

```php
class Matrix{
	
	/**
	* 行数
	* @param 二重配列 行列1
	* @return int 行数
	*/
	public function countRow(array $a){
		return count($a);
	}
	
	/**
	* 列数
	* @param 二重配列 行列1
	* @return int 列数
	*/
	public function countCol(array $a){
		return count($a[0]);
	}
	
	/**
	* 行列のサイズ
	* @param 二重配列 行列1
	* @return array [行数,列数]
	*/
	public function countSize(array $a){
		return [$this->countRow($a), $this->countCol($a)];
	}
	
	/**
	* 和
	* @param 二重配列 行列1
	* @param 二重配列 行列2
	* @return 行列1 + 行列2
	*/
	public function add(array $a, array $b){
		if($this->countSize($a) !== $this->countSize($b)){
			throw new Exception('Different Matrix size.');
		}
		foreach($a as $x=>$v){
			foreach($v as $y=>$val){
				$a[$x][$y] += $b[$x][$y];
			}
		}
		return $a;
	}
	
	/**
	* 差
	* @param 二重配列 行列1
	* @param 二重配列 行列2
	* @return 行列1 - 行列2
	*/
	public function sub(array $a, array $b){
		if($this->countSize($a) !== $this->countSize($b)){
			throw new Exception('Different Matrix size.');
		}
		foreach($a as $x=>$v){
			foreach($v as $y=>$val){
				$a[$x][$y] -= $b[$x][$y];
			}
		}
		return $a;
	}
	
	/**
	* 積
	* @param 二重配列 行列1
	* @param 二重配列 行列2
	* @return 行列1 * 行列2
	*/
	public function multiply(array $a, array $b){
		$c = $this->countCol($a);
		if($c !== $this->countRow($b)){
			throw new Exception('Invalid Matrix size.');
		}
		$r = $this->countRow($a);
		
		$ret = [];
		for($i=0;$i<$r;$i++){
			for($j=0;$j<$r;$j++){
				$ret[$i][$j] = 0;
				for($k=0;$k<$c;$k++){
					$ret[$i][$j] += $a[$i][$k] * $b[$k][$j];
				}
			}
		}
		return $ret;
	}
	
	/**
	* スカラー倍
	* @param 二重配列 行列1
	* @param float スカラー倍
	* @return 行列1 * float
	*/
	public function scalar(array $a, float $m){
		array_walk_recursive($a, function(&$v, $k, $m){
			$v = $v*$m;
		}, $m);
		return $a;
	}
	
	/**
	* 転置行列
	* @param 二重配列 行列1
	* @return 行列1の転置行列
	*/
	public function transpose(array $a){
		return call_user_func_array('array_map', array_merge([null], $a));
	}
}

	// 使い方
	$matrix = new Matrix();

	$a = [[1,2,3], [4,5,6]];
	$b = [[7,8,9], [10,11,12]];
	$c = [[13,14], [15,16], [17,18]];

	$sum = $matrix->add($a, $b);
	$diff = $matrix->sub($a, $b);
	$product = $matrix->multiply($a, $c);
	$scalar = $matrix->scalar($a, 2);
	$trans = $matrix->transpose($b);
```

いやあ、この開発は辛かった。
何が辛いって行列なんて10年以上触ってないから全く覚えてないのが辛かった。
必要なのは基本的なところだけだったので、最低限のものしか実装していません。
逆行列？特異値分解？なにそれ？？？
続き誰か頼んだ。
Route53にドメイン登録

AWS Route53でにドメインを登録するまでのまとめ。
※ドメインはお名前.com等で事前に取得しておく

# Hosted Zoneの作成
1. Create Hosted Zoneボタンをクリックし、Create Hosted Zoneを表示する。
2. Domain Nameに事前に取得したドメインを入力する。
3. createボタンをクリックし、Hosted Zone作成完了。 

![スクリーンショット 2015-08-06 23.26.10.png](https://qiita-image-store.s3.amazonaws.com/0/70049/d347e01a-72fa-8402-7f0f-6487921c1d89.png)

# Record Setの作成
Aレコードを作成する。
1. Create Record Setボタンをクリックし、Edit Record Setを表示させる。
2. Nameに任意の値を入力する。空の場合はHosted Zoneに入力したドメインが適用される。
3. ValueにPublicのIPを入力する。
4. createボタンをクリックし、Recordの作成完了。

![スクリーンショット 2015-08-06 23.44.36.png](https://qiita-image-store.s3.amazonaws.com/0/70049/eef37c97-2813-1514-0152-03a9bf65b12c.png)

# ネームサーバの設定変更
Record SetのTypeがNSの行をクリックし、Valueに表示されているネームサーバをドメイン取得元のネームサーバ設定変更で設定する。
![スクリーンショット 2015-08-06 23.29.32.png](https://qiita-image-store.s3.amazonaws.com/0/70049/d02d68b7-d72c-5076-2987-e6be550ddff3.png)

以上で設定完了。WEBサーバでドメインを設定しアクセスしてみてください。
Android Studio 1.4をフライングした話

Android Studio 1.3でAllocation Trackerなどのいくつかの機能が追加されましたが
Android Studio 1.4にはTheme EditorやVector Imageの機能が入っています。
ビルドすることによってそれらの現状をみることができるので紹介します。



# Android Studio 1.4の入手方法
大体こちらにかいてあって、`repo sync `してソースコードを持ってくるのですが、だいたい14GBぐらいの空き容量があればできるようです。
http://tools.android.com/build
あとはIntelliJで開いてビルドすればAndroid Studioが起動します。
![image](https://qiita-image-store.s3.amazonaws.com/0/27388/42f1751b-8ac8-03a4-a0ed-f19cab05d080.png)


# Theme Editor
AndroidのTheme要素はどこに反映されるのか分かりにくいという問題があり(例えばcolorAccentって実際どこに反映されるのかなど)、どの要素がどこに反映されているのかひと目でわかるので便利です。
![image](https://qiita-image-store.s3.amazonaws.com/0/27388/af8a1ce5-6e24-c23a-f507-9aa342639c9f.png)

APIレベルを変更して2.3ではどう見えるのかなどを見ることもできます。
![image](https://qiita-image-store.s3.amazonaws.com/0/27388/41296be8-1a23-16e7-29cb-ed64b7235564.png)


# Vector Image
AndroidのDrawableとしてVectorDrawableというベクトルデータの画像リソースがLollipop(5.0)以上から利用できますが、Kitkat(4.4)以前の端末で動かす場合には画面密度ごとにいくつもpng画像が必要でした。
それをAndroid Gradle Pluginがpngファイルを自動生成して利用できるようになりました。

Google I/Oでの説明
![image](https://qiita-image-store.s3.amazonaws.com/0/27388/e58a56a1-1de1-6d8c-81a9-88be25cfac75.png)

新しくファイルを作るときの画面に、VectorAssetというものが追加されており、
![image](https://qiita-image-store.s3.amazonaws.com/0/27388/d8deb2a4-2e41-8ae8-c3dc-1180d8c7d698.png)
それを使うとSVGファイルを読み込めたり、Material Design iconsから画像を選択したりできるようで
![image](https://qiita-image-store.s3.amazonaws.com/0/27388/77e2878a-dc87-4c67-f4e1-00b5a254ec57.png)
それを行うと手軽にvectorタグが使われているリソースファイルが作成されます。
![image](https://qiita-image-store.s3.amazonaws.com/0/27388/9c251849-09dc-a4d5-f4cf-3122cb9434e6.png)

Android Gradle Pluginを1.4.0-alpha1をビルドして利用するとbuildフォルダの中にpng画像が生成されているようで、4.4端末で動くことが確認できました。
![image](https://qiita-image-store.s3.amazonaws.com/0/27388/70a26047-9667-fb16-6b3d-a7cce8ceea07.png)


他にもAsset Studioなどの機能があり、覗いてみると楽しいかもしれません

# まとめ
Android Studioは割と手軽にフライングできます
ThemeEditorはどこに反映されるか分かって便利です
Vector Imageはpngファイルたくさん作ったり、置かないといけない問題を解決できそうです
BLAST の進捗状況


を、アバウトに知るワンライナー、但し、テーブル形式の奴のみ。


```
$ perl -lne 'BEGIN{ chomp ( $a = qx{tail -1 TABLE | cut -f 1} ); } $b ++ if />/ ;  next if !/\b\Q$a\E\b/ ; print $b }{ print $b ' FASTA
```

* `TABLE` に現在作成されつつあるテーブルを。 `FASTA` には、使ったファスタファイルを。
* `\Q\E` は `quotemeta`。 これをしとかないと、`|` でハマる。


`*sh` の `function` としてはコレ。

```
function check_blast(){
    a=`tail -1 $1 | cut -f 1`
    perl -lne 'BEGIN{ $a = shift } $b ++ if />/ ; next if !/\b\Q$a\E\b/ ; print $b }{ print $b ;' $a $2
}
```
pigz


`.fastq` を `.gz` するのが、遅くて切れた。

CentOS にインストール

```
% wget -q http://zlib.net/pigz/pigz-2.3.3.tar.gz 
% tar zxf pigz-2.3.3.tar.gz
% cd pigz-2.3.3/
% make
% mv pigz unpigz ~/cmd/bin/
% mv pigz.1 ../../share/man/man1/
```

おおっ、速い速い。

一応、Mac 側で `gunzip` で解凍出来る事だけは確認。
IUPAC nucleotide code から uniq sequence を取得


例えば、`AAARCCCWTTTNGGG` とかって IUPAC 配列があり、 `R`, `W`, `N` を `[ACGT]` に変換した全ての配列が欲しくなった場合。

## 普通に書く

```perl:
my %nbc = (
    M => [ qw( A C ) ],
    R => [ qw( A G ) ],
    W => [ qw( A T ) ],
    S => [ qw( C G ) ],
    Y => [ qw( C T ) ],
    K => [ qw( G T ) ],
    V => [ qw( A C G ) ],
    H => [ qw( A C T ) ],
    D => [ qw( A G T ) ],
    B => [ qw( C G T ) ],
    N => [ qw( A C G T ) ],
    A => [ qw( A ) ],
    C => [ qw( C ) ],
    G => [ qw( G ) ],
    T => [ qw( T ) ],
) ;

my $str = q{AAARCCCWTTTNGGG} ;
my @ret = ( q{} ) ;
for my $s ( split //, uc $str ){
    @ret = map { my $r = $_ ; map{ $r . $_ } @{$nbc{$s}} } @ret 
}

printf "%s\n", $_ for @ret ;
```

## Bio::Tools::IUPAC

BioPerl の [これ](http://search.cpan.org/~cjfields/BioPerl-1.6.924/Bio/Tools/IUPAC.pm) の例文ほぼそのまんま。

```
use Bio::PrimarySeq;
use Bio::Tools::IUPAC;

my $ambiseq = Bio::PrimarySeq->new(-seq => 'AAARCCCWTTTNGGG', -alphabet => 'dna');
my $iupac = Bio::Tools::IUPAC->new(-seq => $ambiseq);
while (my $uniqueseq = $iupac->next_seq()) {
    print $uniqueseq->seq . "\n" ; 
}
```
アセンブリ参照が足りないとき

うまいことusingでアセンブリ参照を追加できなかったけど、解決したのでメモ

MSDNのヘルプページには、そのクラスや有効になる.NET Frameworkのバージョン表記の下に必ずこういうのが付いてる

>名前空間: System.Windows.Media
>アセンブリ: PresentationCore (presentationcore.dll 内)

このアセンブリの方をソリューションの参照設定から追加すれば
usingで指定してもアセンブリ参照が足りない、みたいなことを
言われずに済む。(済んだ
RCSの基本的な使い方

# RCSってなに
- Revision Control System
- いわゆる差分/バージョン管理
- 今流行りのgitみたいなやつ

# そもそも
- 初期のバージョン管理システム
- RCS自体は大分古い
- CVSのリポジトリは未だにRCS

# 特徴
- 1度に1つのファイル操作
- 複数ユーザの同時利用は想定外
- シンプル

# 使い方
- 基本的にciとcoコマンドを使う
    - ci : チェックイン(要はcommit)
    - co : チェックアウト(要はpush)
    - rcsdiff : diff

1. リビジョン管理したいファイルを登録する(ci -i)
2. ファイルをロックして他の人が変更できないようにしてから編集する(co -l)
3. 編集が終わったらアンロックする(ci -u)
4. 2へ戻る

## 例
```bash
$ mkdir RCS
$ ci -i index.html                      # リビジョン管理対象に登録
RCS/index.html,v  <--  index.html
enter description, terminated with single '.' or end of file:
NOTE: This is NOT the log message!
>> initial
>> .
initial revision: 1.1
done
$ ls
RCS 
$ co -l index.html                      # ファイルのロック(他の人は編集不可 
RCS/index.html,v  -->  index.html
revision 1.1 (locked)
done
$ ls
RCS index.html
$ echo "hoge" > index.html              # 何かしら編集する
$ ci -u index.html                      # 編集終わったのでアンロックする
RCS/index.html,v  <--  index.html 
new revision: 1.2; previous revision: 1.1
enter log message, terminated with single '.' or end of file:
>> add "hoge"                           # いわゆるコミットメッセージ
>> .
done

$ rcsdiff index.html                    # 最新版との差分を見る
===================================================================
RCS file: RCS/index.html,v
retrieving revision 1.2
diff -r1.2 index.html
$ rcsdiff -r1.1 index.html              # 特定のバージョンとの差分を見る(今回は1.1)
===================================================================
RCS file: RCS/index.html,v
retrieving revision 1.1
diff -r1.1 index.html
0a1                                     
> hoge                                  # 変更が加えられている
```

## メリット
- シンプル -> 学習コスト低い
- コンフィグの差分管理とかにはこれで十分
    - 複数人で"同時に/並列して"編集することがない

とにかくシンプルですぐ使い始められるのが大きなメリットに感じます。
Play frameworkで独自のActionを作って認証処理を挟んだり、出力を変える

# やりたいこと
通常のActionを利用するとこんな感じ

```
def hoge(mage: Int) = Action(parse.json) {
  // do something
  Ok
}
```

いい感じの認証用Actionを用意して、認証失敗なら共通のレスポンスを自分で設定したい
(Jsonを出力するとか)

```
// 認証が通らなければ {"auth" -> "failed"} を返す
def hoge(mage: Int) = AuthAction(parse.json) {
  // do something
  Ok(Json.obj("auth" -> "success"))
}
```

# 独自Actionを作る
まずはActionBuilderを継承したobjectを適当な所に作る

```
import play.api.mvc.{ActionBuilder, Request}
import scala.concurrent.Future

object AuthAction extends ActionBuilder[Request] {

  // invokeBlockはabstractなので、実装しないといけない
  override def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]): Future[Result] = {
    // do anything
  }
```

当然何も返さないと怒られるので、レスポンスを用意してあげる。

```
import play.api.mvc.{ActionBuilder, Request}
import scala.concurrent.Future

object AuthAction extends ActionBuilder[Request] {

  override def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]): Future[Result] = {
    println("hogehoge")
    block.apply(request)
  }
```

試しにこのAuthActionを使えば処理は何も変わらないけどhogehogeがコンソールに表示されていることを確認できる。

# 認証処理

sessionを使った適当な認証を書いてみる

```
import play.api.mvc.{ActionBuilder, Request}
import scala.concurrent.Future

object AuthAction extends ActionBuilder[Request] {

  override def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]): Future[Result] = {
    request.session.get("foo") == "bar" match {
      case true => // 認証OK
      case _ => // 認証NG
    }
    block.apply(request)
  }
```

# 自分でレスポンスを設定

あとは認証失敗時のレスポンスを自分で作れればOK

```
import play.api.mvc.{Results, ActionBuilder, Request, Result}
import scala.concurrent.Future
import play.api.libs.json.Json

object AuthAction extends ActionBuilder[Request] {

  override def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]): Future[Result] = {
    request.session.get("foo") == "bar" match {
      case true => block.apply(request)
      case _ => Future.successful(Results.Status(401).apply(Json.obj("auth" -> "failed")))
    }
  }
```

Unauthorized ... Results.Status(401).apply() という事になるので、
出てきたResultを適当にFutureで包んであげればよいことになる

これで要認証Actionと認証不要Actionを手軽に使い分けられる
Lollipop で CardView に影がつかない時の対処法

## 原因
Lollipop とそれ以前の OS バージョンでは CardView のサイズが違うため、
Lollipop でも影は出ているが、カードが被ってしまって影が見えなくなっている。

## 対応
`card_view:cardUseCompatPadding="true"` を CardView のプロパティに設定する。

```layout.xml
<android.support.v7.widget.CardView
    android:id="@+id/media_card_view"
    android:layout_width="match_parent"
    android:layout_height="130dp"
    card_view:cardBackgroundColor="@android:color/white"
    card_view:cardElevation="2sp"
    card_view:cardUseCompatPadding="true"
    >
...
</android.support.v7.widget.CardView>
```
東京五輪エンブレム for Android


瞬発力で作ってみました

![olympic.png](https://qiita-image-store.s3.amazonaws.com/0/39324/0fac553e-97f8-304e-4b7e-ea2ebe052d53.png "olympic.png")


```java:TokyoOlympicLogo.java
public class TokyoOlympicLogo extends View {

    public TokyoOlympicLogo(Context context) {
        super(context);
    }

    public TokyoOlympicLogo(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public TokyoOlympicLogo(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        RectF rectF;

        // 左側のゴールド
        paint.setColor(0xffb08e47);
        rectF = new RectF(0, 0, getWidth() / 3f, getHeight() / 2f);
        canvas.drawRect(rectF, paint);

        // 右側のシルバー
        paint.setColor(0xffb4b3b4);
        rectF = new RectF(getWidth() * 2 / 3f, getHeight() / 2f, getWidth(), getHeight());
        canvas.drawRect(rectF, paint);

        // 中央の白
        paint.setColor(0xffffffff);
        canvas.drawCircle(getWidth() / 2f, getHeight() / 2f, getWhiteCircleRadius(), paint);

        // 中央のグレー
        paint.setColor(0xff363838);
        rectF = new RectF(getWidth() / 3f, 0, getWidth() * 2 / 3f, getHeight());
        canvas.drawRect(rectF, paint);

        // 右上の赤
        paint.setColor(0xffd7151a);
        canvas.drawCircle(getWidth() * 5 / 6f, getHeight() / 6f, getHeight() / 6f, paint);
    }

    private float getWhiteCircleRadius() {
        float centerX = getWidth() / 2f;
        float centerY = getHeight() / 2f;
        float x = getWidth() / 3f;
        float y = 0;
        return (float) Math.sqrt((centerX - x) * (centerX - x) + (centerY - y) * (centerY - y));
    }
}
```
CustomViewをfindViewByIdしてnullになる時の原因

ものすごいしょうもないところでハマってしまったのでメモです。

結論から言うと、 **CustomViewを作ったときはちゃんと `super(context, attrs)` を呼んであげないと findViewById()でnullになるよ**、という話です。

以下は詳しい説明。

こんな感じのCustomViewを作って

```java
public class PhotoInfoView extends RelativeLayout {

    // 略

    public PhotoInfoView(Context context, AttributeSet attrs) {
        super(context);
        // 略
    }

}
```

別のxmlで呼び出した場合

```java
<com.konifar.materialcat.views.PhotoInfoView
    android:id="@+id/photo_info"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
```

この状態で、 `findViewById` を呼で呼び出すとnullになります。

```java
View view = findViewById(R.id.photo_info)
// => null
```

原因は、AttributeSetを引数に持つコンストラクタをoverrideしているのに、 `super(context, attrs)` ではなく `super(context)` を呼んでしまっていることです。

ちゃんと `super(context, attrs)` を呼んであげないと、 `id` などの attributes も無視されてしまいます。

まぁ当たり前のことなんですが、ハマるとしんどいので気をつけようという話でした。
Emacsで単語単位の移動をキャメルケースで区切りたい

EmacsでM-f、あるいはM-bで単語単位の移動をすると、通常は英文字の大文字小文字を区別しない。そのため、たとえば moveToNextWord() の先頭でM-fすると、カーソルは ( の前に移動する。しかし、最近業務で使っているGoでは、コーディング規約上キャメルケースを使うので、M-fによる移動をキャメルケースの途中の大文字の箇所で区切って欲しいことが多々ある。
そのような場合はsubword-modeを使うと良い。

```el:20-go-mode.el
(defun my-go-mode-hook
    (subword-mode 1))
(add-hook 'go-mode-hook 'my-go-mode-hook)
```

これで、上と同じ状況でM-fすると、カーソルはTの前に移動する。
ちなみに、全てのメジャーモードでこれを有効にしたいときには、`(global-subword-mode 1)`でOK。

ただし、この方法、人によってはちょっとした不都合があるかもしれない。
と言うのは、たとえばmoveToNextWord()のvの前にカーソルがある状態で、`M-t`(transpose-words)すると、結果はTomoveNextWord()となり、toMoveNextWord()とはならないからだ。
でも自分の場合、transpose-wordsを使ってないのでとりあえずこれで問題なし。

***
確認環境
GNU Emacs 24.5.1

参考URL
http://wikemacs.org/wiki/Subword-mode
Objective-Cで文字列をURLエンコード/デコードする


NSStringをURLエンコード/デコードする方法です。

## 方法

### エンコード

```objc:encode
NSString *escapedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(
        NULL,
        (CFStringRef)text, // ← 元のテキスト
        NULL,
        CFSTR("!*'();:@&=+$,/?%#[]"),
        kCFStringEncodingUTF8);
```
 
### デコード

```objc:decode
NSString *decodedString = (NSString *) CFURLCreateStringByReplacingPercentEscapesUsingEncoding(
        NULL,
        (CFStringRef)text, // ← 元のテキスト
        CFSTR(""),
        kCFStringEncodingUTF8);
```


## 注意

NSStringで用意されている以下のメソッドを使用した場合、
エンコード/デコードしてくれない記号や特殊文字があります。

```objc:encode/decode
// エンコード
NSString *escapedString = [text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// デコード
NSString *decodedString = [text stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
```
IntelliJのファイルヘッダーコメントを変更する

# はじめに

IntelliJでScalaファイル等を生成したときに作られるコメントをJavadoc的にしたい

```
/**
 * @author iwamatsu0430
 */
```

こんな感じ

# フォーマットの変更

Preference > Editor > File and Code Template から Includes タブの File Header を選択
いきなり書き変えられる。

```
/**
 * @author ${USER}
 */
```

# ${USER}の変更
デフォルトではログインユーザ名になっているので、好きな名前が勝手に入るように変更する。
IntelliJのディレクトリ配下にあるbin/idea.vmoptionsを参照する。
(MacでApplicationディレクトリに入れているのであれば/Applications/IntelliJ\ IDEA\ 14\ CE.app/Contents/bin/idea.vmoptionsとかになる）

ファイルを適当なエディタで開き、以下のようにする。

```
-Duser.name=iwamatsu0430
```

IntelliJを再起動すれば反映される。
scalaで外部プログラムを非同期(hogehoge&)実行

scalaのシェル REPLで以下を実行して確認

```scala
import scala.sys.process._
Process("perl -e sleep(5);printf(111)") run
Process("perl -e sleep(6);printf(222)") run
Process("perl -e sleep(7);printf(333)") run
Process("perl -e sleep(8);printf(444)") run

```

ちょっと待つと結果がかえってくる


```
scala>111222333444
```
Intel Edisonをいじる


* 何年たってもJavaScriptが上達しなくて案件がつらいし、nodejsでもやろうか -> nodeでやることないしな -> 最近はシングルボードコンピュータでnodeよく使われてるっぽい -> じゃあEdison買うか
* MacOSX Yosemiteでやるぞ
* Mac側の作業かEdison側の作業かわかりやすくするためにプロンプトを冗長に書いてある

# 用意するもの

* [Intel Edison Breakout Board Kit](https://www.switch-science.com/catalog/1957/)
* USB microBケーブル 2本

# シリアルコンソールで接続してみる

```sh
miminashi@miminashi-no-MacBook-Pro:~$ screen /dev/tty.usbserial-A502F2QB 115200
```


# Edisonのファームウェアをアップデート

* ブラウザで https://software.intel.com/en-us/iot/hardware/edison/downloads を開く
* `Download Release x.x Firmware` をクリックしてから最新のファームウェア（2015-08-05 現在、2.1）をダウンロードする
* zipを展開して、USBストレージとして認識されているEdisonに中身をコピーする

以下のコマンドを実行

```sh
root@edison:~# reboot ota
```

# リカバリ

## 結論

Linuxの入った物理マシンを用意しろ



## 手順

```sh
ubuntu:~/$ sudo apt-get install dfu-util
ubuntu:~/edison$ cd edison
```


# Remote NDISの設定

Remote NDISというのは、平たく言うとIP over USB。
Macで利用するにはHoRNDISというのをいれる。

## HoRNDISのインストール

```sh
miminashi@miminashi-no-MacBook-Pro:~$ brew cask install horndis
```

HoRNDISをいれたらMacを再起動

## おすすめのssh設定

* RemoteNDISが有効だと`ssh edison`だけで接続できるようになる
* Edisonをflashallしてsshdのfingerprintが変わってもいちいち.known_hostsから設定を削除しなくてよくなる

`~/.ssh/config`に以下の設定を追加。

```
Host edison
  StrictHostKeyChecking no
  UserKnownHostsFile /dev/null
  User root
  HostName 192.168.2.15
```


# [WIP]RemoteNDIS経由でEdisonからインターネットに出られるようにする

* この部分まだ未完
* Macのインターネット共有を利用してEdisonからインターネットにアクセスできるようにする

## Mac側

* NDISアダプタ（=Edison）がMultification Composite Gadgetという名前で認識されていた
* Multification Composite GadgetのIPアドレスを192.168.2.1に設定
* インターネット共有を有効化

## Edison側

```bash
root@edison:~# ip route replace default via 192.168.2.1
root@edison:~# ip route
default via 192.168.2.1 dev usb0 
192.168.2.0/24 dev usb0  src 192.168.2.15
```

参考:

* http://www.server-memo.net/centos-settings/network/linux-routeing.html#ip-3


~~うまくいかないので一旦諦めてWiFiを使えるようにする・・・~~
Edisonをアップデートしたら使えるようになった・・・


# WiFiの設定

```sh
root@edison:~# configure_edison --wifi
```

# nodejsのインストール

* 最初からはいってる


# FAQ

## USB Mass Storageとして認識されるフラッシュをEdison側からmountするには？

* https://communities.intel.com/thread/55520
* ブロックデバイスとして直接マウントできないっぽいしめんどくさそうなのでやめとけ


# 資料

## 公式ドキュメント

* [Edison Module Hardware Guide](http://akizukidenshi.com/download/ds/intel/edison-module_HG_331189-002.pdf)
* [MRAA Noとピン番号の対応表](http://iotdk.intel.com/docs/master/mraa/edison.html)

## その他

* http://trac.switch-science.com/wiki/IntelEdisonStartGeneric
怪しいhtmlタグ/cssプロパティ


# html
### dl/dt/dd
定義リスト
dlタグでリスト本体を定義し、dtタグでリストの項目を定義し、ddタグにそのリストの内容を記述する。

### option
セレクトボックスの選択肢

# css

### display(inline, block, inline-block)
displayプロパティは、ブロックレベル・インライン等の、要素の表示形式を指定する際に使用します。

### cursor
マウスカーソルの形状を指定。

### position
基準位置の定義。
static : 初期値top、bottom、left、rightは適用されません。
relative : 相対配置。staticを指定した位置が基準位置。
absolute　: 絶対配置。親ボックスがstatic以外ならば、親ボックスの左上が基準位置。それ以外はウィンドウ全体の左上が基準位置。

### float
浮かして、左、もしくは右に回り込む。　

### z-index
重なりの優先順位、階層が同じじゃないと効かない。

### overflow
ボックスの範囲内に内容が入りきらない場合に、はみ出た部分の表示の仕方を指定する際に使用。
*.confとかバックアップファイルを複数纏めてワンライナー

# あらまし

- 設定変更する時にリビジョン管理してればいいよね
    - してない！
    - 困った！
    - cp -p で頑張るか…
    - それコンフィグファイルが無数にあっても頑張れる？

# 大体の例

- よくあるパターン
`$ sudo cp -p hogehoge.conf hogehoge.conf.YYYMMDD`
`$ sudo cp -p hogehoge.cfg{,.org}`

- 3つくらいとかなら頑張れる

# こうしてみる
- for文の条件式にfindの結果を投げる
- dateコマンドで日付は自動入力

```bash
$ mkdir ./OLD/
$ ls 
OLD commands.cfg  contacts.cfg  localhost.cfg  printer.cfg  switch.cfg  templates.cfg  timeperiods.cfg  windows.cfg
$ for cfg in $(find ./ -name "*.cfg"); do  sudo -S cp -p ${cfg} ./OLD/${cfg}.`date +%Y%m%d`; done
$ ls OLD/
commands.cfg.20150806  localhost.cfg.20150806  switch.cfg.20150806     timeperiods.cfg.20150806
contacts.cfg.20150806  printer.cfg.20150806    templates.cfg.20150806  windows.cfg.20150806
```

# 結論

- シェルスクリプト慣れると便利
東京五輪エンブレム for iOS

東京オリンピックのエンブレム（ロゴ）を Processing や JS で実装してオープンソースに、という記事を見かけて、

- [これでみんないつでも描けるね！ 東京五輪エンブレムのコードがオープンソースに - ねとらぼ](http://nlab.itmedia.co.jp/nl/articles/1508/03/news114.html)

確かに、このデザインはコードで再現しやすいし、円・矩形・弧・塗りつぶしといった**パス描画の基本要素**が揃っていて、描画APIの練習には最適な題材だなーと。

そんなわけで、iOS 用に Swift で描いてみました。


##コード

```swift:TOEView.swift
class TOEView: UIView {

    var l: CGFloat!
    var r: CGFloat!
    
    override func awakeFromNib() {
        super.awakeFromNib()

        l = frame.size.width / 3
        r = sqrt(1.5 * 1.5 + 0.5 * 0.5) * l
    }
    
    override func drawRect(rect: CGRect) {
        
        self.drawYellowArc()
        self.drawBlackRect()
        self.drawRedOval()
        self.drawGreyArc()
    }
    
    private func drawYellowArc() {
        let path = UIBezierPath(
            arcCenter: CGPointMake(l * 1.5, l * 1.5),
            radius: r,
            startAngle: CGFloat(-M_PI_2),
            endAngle: CGFloat(-M_PI),
            clockwise: false)
        path.addLineToPoint(CGPointZero)
        
        UIColor(red: 1.0, green: 0.84, blue: 0.0, alpha: 1.0).setFill()
        path.fill()
    }

    private func drawBlackRect() {
        
        let rect = CGRectMake(l, 0, l, l * 3)
        let path = UIBezierPath(rect: rect)
        
        UIColor.blackColor().setFill()
        path.fill()
    }

    private func drawRedOval() {

        let rect = CGRectMake(l * 2, 0, l, l)
        let path = UIBezierPath(ovalInRect: rect)
        
        UIColor.redColor().setFill()
        path.fill()
    }
    
    private func drawGreyArc() {
        
        let path = UIBezierPath(
            arcCenter: CGPointMake(l * 1.5, l * 1.5),
            radius: r,
            startAngle: 0,
            endAngle: CGFloat(M_PI_2),
            clockwise: true)
        path.addLineToPoint(CGPointMake(l * 3, l * 3))
        
        UIColor(white: 0.5, alpha: 1.0).setFill()
        path.fill()
    }
}
```

##解説

パッと見、長いですが、

- 黄色い円弧を描画
- 黒い長方形を描画
- 赤い円を描画
- グレーの円弧を描画

の4ステップで、各ステップも

- パス（`UIBezierPath`）生成
- 色をセット `setFill()`
- 塗りつぶし `fill()`

をやってるだけなので、とてもシンプルです。

元の Processing のコードでは「黄色い部分とグレーの部分を長方形として描画して、真ん中に白い円を描く」というロジックでしたが、こっちの方が直感的かなーという理由で各色オブジェクトを描画していくようにしました。

あと、正方形しばりは IB 上で Auto Layout でやってます。

##実行結果

![tokyo-olympic.png](https://qiita-image-store.s3.amazonaws.com/0/3180/e8f08d0d-e6cd-faf1-682e-3e61ae5d32fa.png)

（2015.8.7 追記： 実物を見たら色が全然違ったので修正しました！）

##for watchOS

ちなみに `UIBezierPath` は watchOS 2 でも使えるので、Apple Watch 上でも東京五輪ロゴを楽しめます。ただし `UIView` は使えず、直接 `WKInterfaceObject` に描画できないので、いったん UIImage として書き出す、ということをやります。詳細は以前書いたこちらの記事とスライドをご参照ください。

- [watchOS 2 の Core Graphics は何ができて何ができないのか](http://d.hatena.ne.jp/shu223/20150714/1436875676)
- [Core Graphics on watchOS 2](http://www.slideshare.net/t26v0748/core-graphics-on-watchos-2)


##ソースコードのダウンロード

GitHub に置いてあります。Swift的にいけてない部分のご指摘、パラリンピックサポート等、プルリク大歓迎です！

- https://github.com/shu223/TokyoOlympicEmblem-for-iOS

（2015.8.6 追記： 記事をアップして1時間もしないうちにパラリンピックサポートのプルリクいただきました！詳細はコメント欄にて。）
Windowsでショートカットアイコンがおかしくなったら

Windows7の例。
レジストリエディタを起動。

この場所を探す。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.link\

UserChoice

フォルダを削除。へんなOpenWithのところにも変なプログラムが関連付けされている場合もあるので、その際はそのプログラムが記述されているエントリを削除する。
gulpの導入手順

# gulpの導入手順

gulpを導入して若干経過したので、つまづいたことなどのまとめです。

## 想定環境
- Windows 7 (管理者ではない)
- コマンドプロンプト (Cygwinでは動かないコマンドがあったため)

## 準備
- Node.jsをインストールする。
  - `node -v` を入力してバージョンが表示されればOK。
- グローバルに gulp を入れる。
   - `npm i gulp -g`
   - gulpが入っているか不明なら、`npm list -g gulp` で調べられる。

## 通知設定の準備
- コンパイルエラーなどの通知のため、Growlというソフトを入れる。
  - MacやWindows 8の場合はOSデフォルトの通知を使えるが、Windows 7には通知機能がないため。
  - http://www.growlforwindows.com/gfw/
- インストールしたら、以下を設定する。
    - Growlの [Displays] メニューで任意の表示方法を選択。
      - [Preview] で動作チェックし、[Set as Default] で設定する。
    - Growlをインストールしたディレクトリに、パスを通す。
      - C:\Program Files (x86)\Growl for Windows
- Growlが動くかのテスト。
  - コマンドプロンプトを起動し、適当な場所に移動。
  - `npm i growl` でGrowlのパッケージをインストール。
  - テスト用のJSファイルを作成。

```lang:test.js
var growl = require("growl");
growl("error");
```
  - `node test.js` でGrowlの [Preview] ボタンで動作チェックしたのと同じ方法で表示されればOK。

## gulpファイルの作成

- コマンドプロンプトで作業対象ディレクトリに移動。
- `npm init` でpackage.json 作成。
  - プロジェクト名などを聞かれるので適宜入力。考えるのが面倒なら全部エンターでもOK。
  - 後で変更したい場合、エディタで編集すればOK。
- ローカルにgulpを入れる。`-D` で package.json に必要なパッケージとして追記。
  - `npm i -D gulp`
  - package.json にリポジトリなどを書いていない場合、npm WARN されるけど気にしない。
- gulpを入れたのと同様に、必要なパッケージをばしばし入れる。ばしばし。
   - `npm i -D gulp-concat`
   - `npm i -D gulp-htmlhint`
   - `npm i -D gulp-jshint`
   - `npm i -D gulp-kss`
   - `npm i -D gulp-load-plugins`
   - `npm i -D gulp-pleeease`
   - `npm i -D gulp-plumber`
   - `npm i -D gulp-prettify`
   - `npm i -D gulp-sass`
   - `npm i -D gulp-sourcemaps`
   - `npm i -D gulp-uglify`
- Windows 7の場合、以下は管理者権限でしかインストールできないので、管理者としてコマンドプロンプトを実行して入れる。使う場合は管理者じゃなくてOK。
   - `npm i -D gulp-jsdoc`
- gulpfille.js を作る。
   - ファイル名はこれ固定。
   - 後は中身を書く。

## gulpfile.js
### 全般
- gulp ではLintなどのバリデートは監視しない。
  - 主要なエディタではLint系の機能 (パッケージ) がある。そちらを使うほうが便利。
  - 確認という作業として必要な場面があるので、gulp-htmlhint (gulp-jshint) のタスク自体は用意する。
- アンダースコアで始まるファイルは除外する。Sassのパーシャルと同じ考え方。

```lang:gulpfile.js
gulp.src([
  "src/**/*.js",
  "!src/**/_*.js"
])
```

## パッケージ選択の際の方針

- 必要性を検討する。
- タスクを分解する。
  - 監視し随時実行したほうがよいタスクか、作業として実行したほうがよいタスクか。
  - すべて反映したほうがよいタスクか、差分のみ反映のほうがよいタスクか。
大文字略語とActiveRecord

Railsのクラスでは、大文字小文字のメリハリを付けて書く必要がありますが、略語は大文字で書くことが推奨されています。

# クラス名の設定
モデルを作るために、`rails g model CSVDescription`とすると、いろいろ変換が入って、以下のようなものが生成されます。
* `models/csv_description.rb`に、`class CsvDescription`
* `db/migrate/**_csv_descriptions.rb`に、`create_table :csv_descriptions`

データベースのテーブル名は全て小文字で正当なのですが、`CsvDescription`は見づらいので、`CSVDescription`と書き換えたとします。これでも、Rails内部でのオートロードは正常に機能して、`csv_description.rb`からクラスを見つけ出してくれます。

なお、`config/initializers/inflections.rb`へ、以下のように書いておくと、クラスの生成時点で`CSV`が一語だと判断して、最初から`CSVDescription`クラスを生成してくれます。

```rb:config/initializers/inflections.rb
ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.acronym 'CSV'
end
```

# リレーションの設定
ところが、`has_many`や`belongs_to`といったリレーションをかけようとすると、このままではうまく行かなくなってしまいます。

`has_many :csv_descriptions`とすると、このリレーション名からクラス名を定数として起こすのですが、それは`CsvDescription`となってしまって、正しい`CSVDescription`につながりません（`inflections.rb`を書いていても同じです）。クラス名を明示して、`has_many :csv_descriptions, class_name: 'CSVDescription'`のように書くしかありません。

# 関連ページ
* [ActiveSupport::Inflectorで定義した頭字語が`has_many`を解釈してくれない時の解決法](http://programming.ironsand.net/2015/activesupportinflector%E3%81%A7%E5%AE%9A%E7%BE%A9%E3%81%97%E3%81%9F%E9%A0%AD%E5%AD%97%E8%AA%9E%E3%81%8Chas_many%E3%82%92%E8%A7%A3%E9%87%88%E3%81%97%E3%81%A6%E3%81%8F%E3%82%8C%E3%81%AA%E3%81%84/)
横可変 縦固定でYoutubeを背景動画にする方法

#01 YTPlayerを使う
https://github.com/pupunzi/jquery.mb.YTPlayer

#02 headに以下挿入
```
<script>
var myPlayer;
jQuery(function () {
var isIframe=function(){var a=!1;try{self.location.href!=top.location.href&&(a=!0)}catch(b){a=!0}return a};if(!isIframe()){var logo=$("<a href='http://pupunzi.com/#mb.components/components.html' style='position:absolute;top:0;z-index:1000'><img id='logo' border='0' src='http://pupunzi.com/images/logo.png' alt='mb.ideas.repository'></a>");$("#wrapper").prepend(logo),$("#logo").fadeIn()}
myPlayer = jQuery("#video").YTPlayer();
});
</script>
```

#03 bodyに以下挿入
```
<div class="customElement">
    <div class="testText">
        <h1>test</h1>
        <h2>test</h2>
    </div>
</div>
<!--qvuILbcXlg8-->
<div id="video" class="player" data-property="{videoURL:'youtubeの動画ID',containment:'#customElement', showControls:false, autoPlay:true, loop:true, mute:true, startAt:10, opacity:1, addRaster:true, quality:'default'}"></div> <!--BsekcY04xvQ-->
```
#スタイルを設定

```
#customElement {
	width: 100%;
	height: 400px;
	background: rgba(81, 150, 191, 0.60);
	position: relative;
	top: 0;
	left: 0;
	z-index: 0;
	background: url("images/top/movie01.jpg") no-repeat center center;
	background-size: cover;
}

#testText {
		position: absolute;
		font-size: 40px;
		text-align: center;
		line-height: 80px;
		color: #fff;
		width: 100%;
		margin-top: 0;
}
```


![スクリーンショット 2015-08-06 20.46.59.png](https://qiita-image-store.s3.amazonaws.com/0/88471/4b47bd07-804a-3533-10af-97e3b0a57a7d.png)

以上、こんな感じで表示される。
縦サイズは固定、横はブラウザのサイズにあわせて可変し、動画も可変する。