OmniAICreator/Qiita-1.07M huggingface dataset:
ADT v23にバージョンアップ後、コンパイルエラーが発生したとき処方箋

先日、Android SDK Tools の v23 がリリースされました。
折角なので、最新版のSDKにバージョンアップしたのですが、突如コンパイルが通らなくなってしまいました。
対処方法の発見に時間がかかってしまったので、戒めを込めて対処方法を書かせて頂きます。

<del>問題の原因は、v23になって<android-sdk>/tools/support/annotations.jarがフォルダからなくなったことのようです。</del>
どうやら、annotations.jarが存在しないこと以外にもproguard でエラーが発生したり、スマートフォンを接続してリモートデバッグモードができないなど多々問題があったようです。

# 2014/07/01 23.0.1 Release
昨夜、23.0.1 がリリースされました。
最新版の23.0.1をインストールするとこの問題は発生しなくりました。

# 発生する環境
 * ecliseを利用（※）
 * Android SDK v23 以前バージョンでプロジェクトを作成
 * NDK(Native Developer Tools)を利用

※Eclipseバージョンは、3.7, 4.2, 4.4 で確認しました。

# 対処方法
対処方法は、<del>２つ</del>３つあります。（コメント頂きありがとうございました。）僕の環境では、すべての対処方法で問題なく解決することができました。環境によってうまく通らないこともあるかもしれませんので、特に対処１を実行するときにはご注意ください。

## 対処１ Java Build Path から Android Dependencies を削除する
 1. プロジェクトを右クリックし、メニューから[Properties]をクリック
 2. 画面左側のメニューから[Java Build Path]を選択
 3. [Libraries]タブを選択
 4. 画面中央一覧から「Android Dependencies」を選択
 5. 画面右側のボタンから[Remove]を選択
 6. [OK]ボタンをクリック
 7. 再コンパイル

## 対処２ annotations.jar をコピーする
<android-sdk>/extras/android/support/annotations/android-support-annotations.jarを<android-sdk>/android-sdk-linux/tools/supportにコピーします。
このとき、コピー先のファイル名を「annotations.jar」にすることにご注意ください。

```shell-session
# 例
# <android-sdk>は、自分の環境のAndroid SDKがインストールされたフォルダパスに置き換えてください。
cp -p <android-sdk>/extras/android/support/annotations/android-support-annotations.jar <android-sdk>/tools/support/annotations.jar
```

## 対処３ v22のファイルをコピーする
コメントで教えて頂き、[AOSPのIsse](https://code.google.com/p/android/issues/detail?id=72419#c12)リストに書かれていた対処方法です。
Android ADK v22 をダウンロード後、該当するファイルをコピーしてね！という内容でした。

 * [Windows版](http://dl.google.com/android/android-sdk_r22.6.2-windows.zip)
 * [Mac版](http://dl.google.com/android/android-sdk_r22.6.2-macosx.zip)
 * [Linux版](http://dl.google.com/android/android-sdk_r22.6.2-linux.tgz)

ダウンロード後、下記のファイルをそれぞれコピーすれば良いそうです。
 * tools/hprof-conv
 * tools/support/annotations.jar
 * tools/proguard

```shell-session
# 例
# <android-sdk-v22>と<android-sdk-v23>は、自分の環境のAndroid SDKを展開したV22とV23のフォルダパスに置き換えてください。
cp -p <android-sdk-v22>/tools/hprof-conv <android-sdk-v23>/tools/
cp -p <android-sdk-v22>/tools/proguard <android-sdk-v23>/tools/
cp -p <android-sdk-v22>/tools/support/annotations.jar <android-sdk-v23>/tools/support/
```
libMagickCore-6.Q16.so.2: cannot open shared object file: No such file or directory のエラー対処

rubyのバージョンアップしてrailsサーバ立ち上げたら表題のエラーが出た。
pathを通す必要があるよう。

調べてみると/usr/local/lib/以下に該当ファイルがあったので、下記を明記して対応。

```.bashrc
export LD_LIBRARY_PATH=/usr/local/lib/
```

もし、一時的にpathを通すのであれば、記入せず直接コンソールで実行。

```
export LD_LIBRARY_PATH=/usr/local/lib/
```
pecoでsshするやつ

# peco+ssh

## 超簡易版

```sh
alias s='ssh $(grep -iE "^host[[:space:]]+[^*]" ~/.ssh/config|peco|awk "{print \$2}")'
```

s[Enter]とすることで絞り込みしてssh接続できます。

## zsh

コメントで頂いてものを少しだけ修正してみました。

```zsh
function peco-ssh () {
  local selected_host=$(awk '
  tolower($1)=="host" {
    for (i=2; i<=NF; i++) {
      if ($i !~ "[*?]") {
        print $i
      }
    }
  }
  ' ~/.ssh/config | sort | peco --query "$LBUFFER")
  if [ -n "$selected_host" ]; then
    BUFFER="ssh ${selected_host}"
    zle accept-line
  fi
  zle clear-screen
}
zle -N peco-ssh
bindkey '^\' peco-ssh
```

bind-keyについてはお好みで。

## bash

```
function peco-ssh () {
  local selected_host=$(awk '
  tolower($1)=="host" {
    for (i=2; i<=NF; i++) {
      if ($i !~ "[*?]") {
        print $i
      }
    }
  }
  ' ~/.ssh/config | sort | peco --query "$LBUFFER")
  if [ -n "$selected_host" ]; then
    ssh ${selected_host}
  fi
}
```
Spray:引数が1つのクラスはJSON文字列に変換したい


コンストラクタの引数がひとつしかないcase classをJSONに変換するとき、`{"key": "value"}` という形ではなく、ストレートに `"value"` という形に整形したい。

spray-jsonの `jsonFormat1` 関数を使うと前者になってしまう。次の例は、苗字と名前で氏名を構成する概念的な統一体(conceptual whole)についてのコードだ。このコードでは苗字と名前それぞれを `jsonFormat1` を用いてJSONを変換している。

```scala
case class FirstName(firstName: String)
case class LastName(lastName: String)
case class Name(first: FirstName, last: LastName)

import spray.json.DefaultJsonProtocol

object NameJsonProtocol extends DefaultJsonProtocol {
  implicit val FirstNameFormat = jsonFormat1(FirstName)
  implicit val LastNameFormat = jsonFormat1(LastName)
  implicit val NameFormat = jsonFormat2(Name)
}

import spray.json._
import NameJsonProtocol._

println(Name(FirstName("Alice"), LastName("Brown")).toJson)
```

出力結果が冗長的になってしまう。firstやlastが2度出てくるためバイト数が増える。
加えて、ネストしているのでJSONをデコードするクライアント実装にも負担になる。

```json
{"first":{"firstName":"Alice"},"last":{"lastName":"Brown"}}
```

理想的にはネストがなく冗長的でないJSONになってほしい。たとえばこのような:

```json
{"first":"Alice","last":"Brown"}
```

これを実現するコードはこうなる:

```scala
case class FirstName(firstName: String)
case class LastName(lastName: String)
case class Name(first: FirstName, last: LastName)

import spray.json.{ JsString, JsValue, RootJsonFormat, DefaultJsonProtocol }

object NameJsonProtocol extends DefaultJsonProtocol {
  // map case classes with 1 string parameter to JSON string
  def jsonString[A](construct: (String) => A)(stringify: A => String): RootJsonFormat[A] = new RootJsonFormat[A] {
    def write(x: A): JsString = JsString(stringify(x))
    def read(json: JsValue): A = json match {
      case JsString(x) => construct(x)
      case x           => deserializationError("Expected JsString, but got " + x)
    }
  }

  implicit val FirstNameFormat = jsonString(FirstName)(_.firstName)
  implicit val LastNameFormat = jsonString(LastName)(_.lastName)
  implicit val NameFormat = jsonFormat2(Name)
}

import spray.json._
import NameJsonProtocol._

println(Name(FirstName("Alice"), LastName("Brown")).toJson)
```
Xcodeについてるgitじゃなくて、brewでインストールしたgitを使う


## git2.0を利用

Xcodeについてるgitのバージョンは古いので、新しいバージョンを使いたいときはhomebrewを利用する。

```
$ brew install git
```

ただしこれだけだと古い方が優先して読み込まれ、バージョンが切り替わらない。

```
$ which git
/usr/bin/git
```

brewでインストールされたパス`/usr/local/bin`よりも、もとのgitがあるパス`/usr/bin`のほうが、優先順位が高くなっているのが原因。

zsh + oh-my-zshを利用しているのだが、`.zshrc`を書き換えることで優先順位を変えた。

```.zshrc
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
```

上記のように書くと、`/usr/local/bin`の方が優先されるようになった。

```
$ git version
git version 2.0.0
```

バージョン2.0が利用できるようになった。

## おまけ: `git diff`を見やすく
こちらのページを参考に、`git diff-highlight`コマンドを利用する。
[Git の diff を美しく表示するために必要なたった1つの設定 #git](http://motemen.hatenablog.com/entry/2013/11/26/Git_%E3%81%AE_diff_%E3%82%92%E7%BE%8E%E3%81%97%E3%81%8F%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E3%81%9F%E3%81%A3%E3%81%9F_1_%E3%81%A4%E3%81%AE%E8%A8%AD)


homebrewでインストールしたgitには`diff-hightlight`も同梱されているが、デフォルトではパスが通っていない。シンボリックリンクを張って対応。

```
$ ln -s /usr/local/share/git-core/contrib/diff-highlight/diff-highlight /usr/local/bin
```

これでコマンド利用可能。

あとは上記の記事通り、`~/.gitconfig`に

```
[pager]
  log = diff-highlight | less
  show = diff-highlight | less
  diff = diff-highlight | less
```

と設定すれば`git diff`が見やすくなる。
swiftを使ってみた（1）

先日、swiftの勉強会に出席した。その復習も兼ねてswiftを使って色々試行してこうと思う。

# xcode6のインストール

最初、HPの誘導に従ってxcode6をインストールしようとしたらxcode6が見つけられなかった。

![01.xcode6-download_no_link2.jpg](https://qiita-image-store.s3.amazonaws.com/0/44076/d2873869-17c6-5bdc-8fa1-b6f583ed7563.jpeg)

よく見たら、上に **iOS 8 beta 2** のタブがあることに気づいて、切り替えたら出てきた。
（ここで詰まったの私だけ？ｗ）

![02.xcode6_download_show_link2.jpg](https://qiita-image-store.s3.amazonaws.com/0/44076/561c7e8c-9b1e-b8a4-5afc-284cb36f80c9.jpeg)

# xcode6でのプロジェクト作成

xcode6のプロジェクト作成時は言語の指定が出るようになっている。今まで通りObjective-Cも指定が可能。
完全に言語切り替えも覚悟していたので一安心。
（使用ガイドには、swift Objective-C の混在もできるという説明が書いてる）

 **<いま、xcode6のスクリーンショットを出すのはまずいとの指摘を受けたので一時削除します>**


# playgroundの使用

swiftの学習をする際は、そのまま実装する前にplaygroundを使用すると理解が深まって良いと思う。
playgroundファイルは、左側に処理を記述すると右側にインタプリタ的に結果が出てくる。

ファイル作成でプレイグラウンドを選択するとplaygroundファイルが作成される。

 **<いま、xcode6のスクリーンショットを出すのはまずいとの指摘を受けたので一時削除します>**

実際に左側にコードを記入すると右側に逐次結果が出力される。
これは、定数値に値を入れようとするとエラーになっている例。

 **<いま、xcode6のスクリーンショットを出すのはまずいとの指摘を受けたので一時削除します>**

現在のplaygroundは、正常なコードの最中にエラーコードを追記すると右側に結果が出るが、エラーコードを含んだままplaygroundファイルを開いても右側に結果が何も出ないので注意。
エラーコードを含んだファイルをサンプルでもらったときは、エラーコード箇所を回避してから開かないといけない。

次回は、swift と Objective-C の実装コードの比較を行う予定です。
SprayでUUIDをJSONに変換したい


spray-jsonを使ってUUIDをJSONに変換する方法。

UUIDのエンコード・デコードの方法のプロトコルを定義する:

```scala:UUIDJsonProtocol.scala
import java.util.UUID
import spray.json.deserializationError
import spray.json.{ JsString, JsValue, RootJsonFormat, DefaultJsonProtocol }

object UUIDJsonProtocol extends DefaultJsonProtocol {
  implicit object UuidJsonFormat extends RootJsonFormat[UUID] {
    def write(x: UUID): JsString = JsString(x.toString)
    def read(value: JsValue): UUID = value match {
      case JsString(x) => UUID.fromString(x)
      case x           => deserializationError("Expected UUID as JsString, but got " + x)
    }
  }
}

```

JSONに変換するサンプルコード:

```scala
import java.util.UUID

import spray.json._ // toJsonを使えるようになる
import UUIDJsonProtocol._ // プロトコルを元にコンバートできるようになる

println(UUID.randomUUID.toJson)
```
SprayでDateTimeをJSONに変換したい


spray-jsonを使ってjoda-timeのDateTimeをJSONに変換する方法。


DateTimeのエンコード・デコードの方法のプロトコルを定義する:

```scala:DateTimeJsonProtocol.scala
import org.joda.time.{ DateTimeZone, DateTime }
import org.joda.time.format.ISODateTimeFormat
import spray.json.deserializationError
import spray.json.{ JsString, JsValue, RootJsonFormat, DefaultJsonProtocol }

object DateTimeJsonProtocol extends DefaultJsonProtocol {
  implicit object DateTimeJsonFormat extends RootJsonFormat[DateTime] {
    private lazy val format = ISODateTimeFormat.dateTimeNoMillis()
    def write(datetime: DateTime): JsValue = JsString(format.print(datetime.withZone(DateTimeZone.UTC)))
    def read(json: JsValue): DateTime = json match {
      case JsString(x) => format.parseDateTime(x)
      case x           => deserializationError("Expected DateTime as JsString, but got " + x)
    }
  }
}

```

JSONに変換するサンプルコード:

```scala
import org.joda.time.DateTime

import spray.json._ // toJsonを使えるようになる
import DateTimeJsonProtocol._ // プロトコルを元にコンバートできるようになる

println(new DateTime().toJson)
```

出力結果:

```
"2014-06-29T22:33:33Z"
```
Scala: joda-timeで日付をISO-8601形式にフォーマットしたい


Scalaでjoda-timeライブラリを用いて、現在日時を[ISO-8601]形式で整形する方法。

```scala
import org.joda.time.DateTime
import org.joda.time.format._

val parserISO = ISODateTimeFormat.dateTimeNoMillis()
val dateString = parserISO.print(new DateTime())

// dateString: String = 2014-06-30T07:13:33+09:00
```

上の例では実行環境のタイムゾーンになる。UTCでフォーマットしたい場合は、タイムゾーンをUTCに指定したDateTimeオブジェクトを渡す。

```scala
import org.joda.time.DateTime
import org.joda.time.format._
import org.joda.time.DateTimeZone

val parserISO = ISODateTimeFormat.dateTimeNoMillis()
val dateString = parserISO.print(new DateTime().withZone(DateTimeZone.UTC))
```


なお、joda-timeを使うためには、build.sbt の `libraryDependencies` に `joda-time` と `joda-convert` を書いておく。

```scala:build.sbt
libraryDependencies ++= Seq(
  "joda-time" % "joda-time" % "2.3",
  "org.joda" % "joda-convert" % "1.6"
)
```

## 関連

* [Java/Scala/PHPの日付フォーマット対応表 - Qiita](http://qiita.com/suin/items/be5a677a3861a45ad024)
[ISO-8601]: http://en.wikipedia.org/wiki/ISO_8601
behat 3.0 でBDD:ログインセッション継続

※2016/6/20 追記
この記事は検証が不十分な点が多々あったので参考程度に見てください。

[behat]:http://behat.org/
[behat3]:http://behat.readthedocs.org/en/latest/
[zombie.js]:http://zombie.labnotes.org
[phantomjs]:http://phantomjs.org/

関連記事:

 * [behat3とzombiejsでBDDに挑戦(1)]
 * [behat3とzombiejsでBDDに挑戦(2)]
 * [behat 3.0 とzombiejsでBDDに挑戦(3)]
 * [behat 3.0とphantomjsでBDDに挑戦(4)]
[behat3とzombiejsでBDDに挑戦(1)]:http://qiita.com/dozo/items/be0ff9e9443413a32d25
[behat3とzombiejsでBDDに挑戦(2)]:http://qiita.com/dozo/items/4cb29ee55c4bd8891786
[behat 3.0 とzombiejsでBDDに挑戦(3)]:http://qiita.com/dozo/items/ec0448ffcbb703df9e43
[behat 3.0とphantomjsでBDDに挑戦(4)]:http://qiita.com/dozo/items/5a5f81061a5aade383d6

ヾ(・ω<)ﾉ"　三三三●　ⅱⅲ コロコロ♪

------------------- ↓ 余談はここから ↓-------------------

[behat3]を実運用すると待ち時間と同様に困ることが一つある。
それは

> ログイン継続

[behat3]の仕組みでは１つのシナリオごとに１セッションという扱いになっていて、
シナリオを跨ぐとCookieはリセットされている。
(たぶん[behat]2も)

例えば会員向けサイトがあったとして、
シナリオアウトラインを使って会員専用ページのテストをしようとすると、
テスト一つ一つに必ずログイン認証のフローが必要になる。
テストファーストを念頭にやっているととてもじゃないがテストの時間がかかりすぎてしまう。

そこでセッションを継続できないか調査してみたのだが、
異常なまでに難しくて何度か断念した。
（cookieファイルを丸ごと入れ替えまでやったが駄目だった。。。）

o(￣ー￣；)ゞううむ無理かな。。。

ある日、とあるパッケージ(後日記事にすると思うが)を触っていると、
何気にセッションが継続されていることに気が付いた。
理由を調べてみると意外にも簡単な方法だった。
なので、今回はそれを紹介してみる。

------------------- ↑ 余談はここまで ↑-------------------

ヾ(・ω<)ﾉ"　三三三●　ⅱⅲ コロコロ♪

------------------- ↓ 本題はここから ↓-------------------

# ログインセッション継続

FeatureContextに以下の内容を記述。

```FeatureContext.php
  /**
   * @AfterScenario
   */
  public function closeBrowser()
  {
    $this->getSession()->stop();
  }
```

これだけ。

------------------- ↑ 本題はここまで ↑-------------------

ヾ(・ω<)ﾉ"　三三三●　ⅱⅲ コロコロ♪

------------------- ↓ 補足はここから ↓-------------------

では解説。
一つのシナリオの開始から終了までのライフサイクルを書いてみると、

 1. シナリオ開始
 2. @BeforeScenarioを抽出し実行
 3. シナリオの内容を取得
 4. 現在動いているセッションをすべて抽出し、すべてのCookieを削除
 5. シナリオの動作開始
 6. シナリオの動作完了
 7. @AfterScenarioを抽出し実行
 8. シナリオ完了

といった具合。
シナリオを始める前にCookieの初期化が行われ、
この時点でセッションが継続できなくなるわけだ。

だが、一つだけポイントがある。
削除されるCookieは

> ”現在動いている”セッション

に限ったものになる。
つまり停止しているセッションは対象外となるわけだ。
ならばシナリオが開始される前、つまり前回のシナリオが終わった時点でセッションを停止すればいい。

ログインがいちいち切れてお困りの方は試してみるといいだろう。
Android Studio 0.8.1でのsupport-v4関連トラブル


Android Studioがついにベータになりました。
Android L preview, Android 4.4Wなどのリリースに合わせてSDK周りも多数バージョンアップされていますが、これを反映すると、どうやらsupport-v4ライブラリを使っているプロジェクトでエラーが発生することがあるようです。
(おそらく、support-v4に依存したライブラリを含んでいるプロジェクト)

以下は、問題の内容と解決策(一部)です。

## エラー内容

### エラー1

```
Error:Module version com.android.support:support-v13:19.1.0 depends on libraries but is not a library itself
```

### エラー2

```
Error:The project is using an unsupported version of the Android Gradle plug-in (0.11.2)
<a href="fixGradleElements">Fix plug-in version and re-import project</a>
```

### エラー3

```
Error:Execution failed for task ':app:processDevDebugManifest'.
> Manifest merger failed : uses-sdk:minSdkVersion 14 cannot be smaller than version L declared in library com.android.support:support-v4:21.0.0-rc1
```

### エラー4

```
Execution failed for task ':app:processDgateDebugManifest'.
> Manifest merger failed : Attribute manifest@package value=(com.xxxx) from AndroidManifest.xml:3:5
  	is also present at com.android.support:support-v4:20.0.0:15:70 value=(android.support.v4)
  	Suggestion: add 'tools:replace="package"' to <manifest> element at AndroidManifest.xml:2:1 to override
```

## (参考)環境

* OS X 10.9
* Android Studio 0.8.1
* Android SDK Tools r23
* Android SDK Platform-tools r20
* Android SDK Build-tools r19.1
* Android Support Repository r6
* Android Support Library r20
* Android Gradle Plugin 0.11.+
* Gradle 1.10

## (参考)設定

`dependencies`部分の抜粋です。

```goovy:build.gradle
dependencies {
    compile 'com.android.support:support-v13:19.+'
    compile 'com.github.ksoichiro:richbuttons:0.1.1@aar'
    compile 'com.mcxiaoke.viewpagerindicator:library:2.4.1'
    dgateCompile 'com.deploygate:sdk:3.1'
}
```

## 解決策

Stack OverflowやGoogle Groupでも、以下のような情報がここ数日分でいくつも見つかります。
[Manifest merger failed : uses-sdk:minSdkVersion 14](http://stackoverflow.com/questions/24438170/manifest-merger-failed-uses-sdkminsdkversion-14)

最終的に、こちらに書かれている方法＋αで解決しました。
[http://stackoverflow.com/a/24445639](http://stackoverflow.com/a/24445639)

### support-v13アップデート

1つ目のエラーの解決策です。
`19.1.+`から`20.+`にアップデートしました。  

### Android Gradle Plugin＆Gradleのアップデート

2つ目のエラーの解決策です。

* Pluginを`0.11.+`から`0.12.+`に変更しました。
* Gradleは`1.10`から`1.12`にアップデートしました。

### maven-metadata.xmlの修正

3つ目のエラーの解決策です。
あまりやりたくない方法ではありますが、
Support Libraryの`maven-metadata.xml`を編集し、以下のようにversion 21.0.0-rc1の部分をコメントアウトします。
(場所は`$ANDROID_HOME/extras/android/m2repository/com/android/support/support-v4`)

```xml:maven-metadata.xml
      <!--<version>21.0.0-rc1</version>-->
```

上記のプロジェクトではsupport-v4を直接使ってはいませんが、間接的に使っている(依存している)ライブラリが入っていたためと思われます。

### どうしても解決しなかった問題...

4つ目のエラーはどうしても解決できませんでした。
上記のプロジェクトでは、あるProductFlavorにAndroidManifest.xmlを分けて配置していたのですが、こreが原因のようです。

エラーメッセージ中に`Suggestion`とある内容に従い、`tools:replace="package"`を`<manifest>`タグに追加してみましたがダメでした。
以下が同じ問題と思われます。
[tools:replace="package" deadlock. Strange behaviour](https://groups.google.com/forum/#!topic/adt-dev/2g7s42cp39c)

ここで触れられていた`useOldManifestMerger true`の設定もうまくいかず(さらにエラーが多数発生)。
バグ修正をレビューに出すとのことなので、反映を待つしかなさそうです。

上記のAndroidManifest.xmlは、DeployGate用のビルドでパーミッションを追加するために用意していたものだったので、一時的にAndroidManifest.xmlを削除することにしました。
(削除するとエラーは消えましたが、とても解決とは言えないですね。。。)
<続> goで作るexeファイルにアイコンを埋め込んでみる (Windows)

(2025-06-12：更新版の記事を作成しました → [Goで作るexeファイルにアイコンとかライセンス情報とか git の tag から得たバージョンなどを埋め込んでみる #Go - Qiita](https://qiita.com/zetamatta/items/05e6121d25c11d539dfd)）

# トピック

* [前回](http://qiita.com/zetamatta/items/4aa36661336a56b95e06)は、[rsrc.exe](https://github.com/akavel/rsrc) というツールで .syso というファイルを作れば Ok であった。
* が、MinGW についてくる windres.exe があれば、別に [rsrc.exe](https://github.com/akavel/rsrc) が無くてもよかった

# 手順

nyagos.ico というアイコンがある場合は、次のようなテキストファイルを用意する

```nyagosico.rc
#include <winver.h>

GOPHER ICON nyagos.ico
```
(GOPHER はリソース名なので、別に何でもよい)

windres.exe で、.syso ファイルを作成する。

```
windres --output-format=coff -o nyagosico.syso nyagosico.rc
```

この .syso ファイルが、*.go ファイルと同じフォルダーにあれば、`go build` を実行するだけで、.syso ファイルは自動で取り込まれる。

# 補足

* 実は[前回](http://qiita.com/zetamatta/items/4aa36661336a56b95e06)も一度この方法を試してはいたのだが、`go build ファイル名` という形で実行していたのと、拡張子が .syso でなければいけないという2点にひっかかっていたのであった。
* rc ファイルをちゃんと書けば、たぶん exe ファイルに(プロパティーで確認できる)バージョンナンバーを組み込むこととかもできるだろう。
Unityでアルファ付きのムービーを再生したい


[forum.unity3d.com](http://forum.unity3d.com/threads/video-texture-with-alpha-channel-works-but.41269/)
２つのムービーを用意して、
ひとつはRGB、
もう一つはAのみのムービーを、
同時に再生してシェーダーで混ぜるとあった。


実際に試してみると、
ムービーを２つ再生するのが、重いし、同期の確実性もない。

---

![Screen Shot 2014-06-30 at 4.52.04.png](https://qiita-image-store.s3.amazonaws.com/0/14330/e6d226d8-2649-4f4f-41dc-23f7e9aa9f01.png "Screen Shot 2014-06-30 at 4.52.04.png")

そこで、１個のムービーで上の画像のようにしちゃって、shaderで合わせてみました。

---

シェーダーのリンクはこちら。
[Gistリンク](https://gist.github.com/asus4/1c949f2f653f9faccf23)

追記
Unity4.5からじゃないと動かない設定入れてたので、ご利用はUnity4.5からでお願いします。
R17.0のeunitでタイトルに日本語を使う方法

Erlang/OTPのR17.0からソースコードのデフォルトエンコーディングがISO-8859-1(latin-1)からUTF-8へと変更されたらしい。
ただ、eunitがまだユニコードに完全に対応できていないようで、ユニットテストのタイトル部分に日本語を使うと、以下のようなエラーが表示されてしまう。

```erlang
%% サンプルユニットテスト
-module(sample_tests).

-include_lib("eunit/include/eunit.hrl").

hoge_test_() ->
  [
   {"テストのタイトルを日本語で記述",
    fun () ->
      ?assert(true)
    end}
  ].
```

```bash
$ erl
> c(sample_tests).
{ok,sample_tests}

> eunit:test([sample_tests]).
undefined
*unexpected termination of test process*
::{badarg,[{erlang,list_to_binary,
                   [[12486,12473,12488,12398,12479,12452,12488|...]],
                   []},
           {eunit_data,parse,1,[{file,"eunit_data.erl"},{line,394}]},
           {eunit_data,next,1,[{file,"eunit_data.erl"},{line,170}]},
           {eunit_data,lookahead,1,[{file,"eunit_data.erl"},{line,530}]},
           {eunit_data,group,1,[{file,[...]},{line,...}]},
           {eunit_data,next,1,[{file,...},{...}]},
           {eunit_data,iter_next,1,[{...}|...]},
           {eunit_proc,get_next_item,1,[...]}]}

=======================================================
  Failed: 0.  Skipped: 0.  Passed: 0.
One or more tests were cancelled.

=ERROR REPORT==== 30-Jun-2014::04:38:26 ===
Error in process <0.80.0> with exit value: {badarg,[{erlang,list_to_binary,[[12486,12473,12488,12398,12479,12452,12488,12523,12434,26085,26412,35486,12391,35352,36848]],[]},{eunit_data,parse,1,[{file,"eunit_data.erl"},{line,394}]},{eunit_data,next,1,[{file,"eunit_data.erl"},{line,170}]},{eunit_data,lookahead,1,[{file,"eunit_data.erl"},{line,530}]},{eunit_data...

error
```
タイトル部分の文字列はユニコード文字としてパースされているのに、それを(1byte文字に対してのみ適用可能な)  **erlang:list_to_binary/1**を使ってバイナリに変換しようとしているためにエラーが発生している模様 (**unicode:characters_to_binary/1**を使うのが正解)。

とりあえずの暫定対処としては、下記のように、ユニットテストモジュールの先頭でソースコードのエンコーディングを明示的にlatin-1と指定するようにすれば、(R16以前と同じ挙動となり)エラーはでなくなる。

```erlang
%% coding: latin-1
%% エンコーディングの指定方法は http://www.erlang.org/doc/man/epp.html を参照
%%
%% サンプルユニットテスト
-module(sample_tests).

-include_lib("eunit/include/eunit.hrl").

hoge_test_() ->
  [
   {"テストのタイトルを日本語で記述",
    fun () ->
      ?assert(true)
    end}
  ].
```

```bash
$ erl
> c(sample_tests).
{ok, sample_tests}.

> eunit:test([sample_tests]).
  Test passed.
ok
```
PHP built-in webserverでphalconとwebtoolsも併用する

[PHP ビルトインサーバーの利用¶](http://docs.phalconphp.com/ja/latest/reference/built-in.html)でのコードでは、以下のように.htrouter.phpを指定して起動しますが。
これだと、webtools.phpやコントローラー、アクションにクエリ文字列を付与する時などにうまく動作してくれないので・・・


```php:.htrouter.php
<?php
// これはphalconのマニュアルに記載
if (!file_exists(__DIR__ . '/' . $_SERVER['REQUEST_URI'])) {
    $_GET['_url'] = $_SERVER['REQUEST_URI'];
}
return false;
```

以下のように書き換えるなどしてみました。

```php:.htrouter.php
<?php
// これならwebtools.phpもOK
if (!file_exists(__DIR__ . '/' . $_SERVER['REQUEST_URI'])) {
	list($url, $querys) = explode('?', $_SERVER['REQUEST_URI']);
	$_GET['_url'] = $url;
	if ($querys) {
		$params = explode('&', $querys);
		foreach ($params as $param) {
			list($key, $value) = explode('=', $param);
			$_GET[$key] = $value;
		}
	}
}
return false;
```
express4でforever start


若干ん?ってなったのでメモ

##forever startするとき
###express3の場合
```
$ cd プロジェクトフォルダ
$ forever start app.js
```

###express4の場合
```
$ cd プロジェクトフォルダ
$ cd bin
$ forever start www
```

という違いが

4系になって起動コマンドが`$node app.js`じゃなくて`$node bin/www`になってたのね。
ksnctf q21 Perfect Cipher

http://ksnctf.sweetduet.info/problem/21
ワンタイムパッドだから復元は無理とか言ってる。
##やったこと（ネタバレ）
ファイルの中身を見るとseedで初期化した、メルセンヌ・ツイスタで暗号してる。
とりあえず、encrypt.cppとencrypt.encからencrypt.keyを復元。
メルセンヌ・ツイスタは624個の連続した値があれば、その後の乱数を予測可能なので、ソースを見つつ予測するコードをかいたらflag.jpgが復元できた。
ksnctf q5 Onion

http://ksnctf.sweetduet.info/problem/5
なんか文字列がある。
##やったこと（ネタバレ）
何も考えずにOnion encryptionあたりでググるがそれっぽい奴は出てこない。
アルファベット+数値だけなのでBase64でデコードしてみると、ほとんど何も変わらない文字列が出力される。
つまり、Base64で何度もデコードできるっぽいんでプログラミを書いてやったら、begin 666 <data>という謎の文字列が出てくる。
適当にぐぐったら、なんかのエンコードっぽいんでuudecodeでデコードして終わり。
ruby gold 受験を振り返る

ネットの海は広大で偉大です。
ここのテキストが無くても参考になるものはたくさんある。

なのでここに示しているのはただの記録、参考になる人がいるのかどうかはその人次第。

他でも言われている通り（ここにたどり着いたということは他の情報も当然手に入れているでしょ？）参考書は以下の通り。

+ 公式教科書
+ メタプログラミングRuby

あとはたのしいRuby、はじめてのRubyを読んだ。Rubyは３年くらい使っている。Railsはわからん。純粋に汎用スクリプト言語としてのRubyが好き。

業務では使い捨てのような、テキスト処理メインの業務アプリをRubyで書いてOcraでexe化したりして活用している。自身のプログラミングのレベルはかなり低い。
が、Rubyならなんとか問題解決まで導いてくれているからナイフ程度の武器に成っている。

本題。ruby goldを２０１４年６月に受験した。あと１問でも間違えたら不合格というギリギリでの合格。silverは一年前に取得済み。

要するにかなり苦戦したということ。

以下のような問題が出題されたと記憶している。複数回答の問題が気分的には半分くらいあって面食らった。

+ 定数の探索:クラスを開いたり、定数のスコープとか（トップレベルとクラス内で同じ名前の定数を定義した場合の動作）
+ プライベートメソッドの継承、再定義:継承先での再定義するとどうなるか（可視性が変更できることなど）
+ プライベートメソッドの継承先での呼び出し可否:上と似た問題が出ていた
+ protectedなメソッドの呼び出し結果:とにかくpublic、protected、privateの動き、他の言語との違いを問う
+ 正規表現:match、scanの動きを押さえた上で正規表現の部分一致や最短一致とかまで問う問題
+ オブジェクトの作成:new、initializeの動き
+ スレッドの作成:よくあるrunは無いよ的な問題
+ 再定義可能な演算子:再定義の記述の仕方まで含めて問う（+、-、<<などを押さえる）
+ ソケットクラス:持っているメソッドとかを問う
+ EXITを捕捉:例外の捕捉とその後の動き
+ rescueを後置する書き方:補足した結果どうなるか問う
+ マーシャル:できる事できない事

```

```

+ superを入れ子で呼び出す:親クラスの中、そこにincludeしたモジュール内でのsuperなど
+ Module:できる事できない事、クラスとの違いの理解を問う
+ クラス変数とスコープの関係:Object内で定義したり、継承先で呼び出す順番でどんな結果になるかなど
+ attrシリーズ:定義の仕方
+ 可変長引数:受け取り、表示時の展開
+ オプション引数:デフォルト値とか、受け取った結果とか
+ case式:実行結果
+ Comparator:定義して動作させた結果（<=>）
+ Moduleのミックスイン:include、extendした結果
+ 大域脱出:出題範囲にありますが、本当に出題されます
+ 冗長モード:引数でオプションを与え、$VERBOSE、$WARNなど指定した場合の動作を問う
+ lambda、Procの呼び出し:引数で与えた後の呼び出し方などを問う
+ yieldの動き:引数を与えたり、呼び出したりを問う
+ ロードパス:特殊な変数と引数のオプションを絡めて問う
+ require、loadの動き:違いを問う
+ 多重継承について:文章問題で多重継承は可能か否か問う
+ 変数のスコープ:有効な範囲を問う
+ rdocの記述:正しい記述を選ぶ
+ 継承のチェーン:孫クラスにModuleをincludeした動作を絡めたところまで問う
+ 継承時のメソッドの呼び出し:undef、undef_methodまでの理解を問う
+ each〜の動き:Arrayのeach系のメソッドの動き
+ doと{}の違い:結合度の違いを見抜けるか問う(括弧を省略してよいケース、エラーに成るケース)
+ 論理演算子の評価:nilがどう評価されるかなどの理解を問う
+ freezeしたArray:どのような操作ができる、できないを問う（変更は不可、再代入は可などの理解）
+ dupとclone:そもそもなにができるか、違いは何かの理解を問う

```
cloneは凍結状態、汚染状態、信頼状態をコピーする。dupは汚染状態と信頼状態のみ。
cloneは特異メソッドもコピーする。dupメソッドはしない。
```

+ 特異メソッドの定義:クラス内での特異メソッドの定義、呼び出し可否の理解を問う（<<でクラス内でクラスをオープン、特異メソッドの定義など）

```
class << A
  def b
    p "b"
  end  
end
A.b #=> "b"
```

+ ブロックの受け取り:引数としてブロックを受け取り、利用した結果を問う
+ 少数の加算結果と整数との比較:誤差が発生する事や、同値判定になる、成らないケースについて問う

```
1/2 #=> 0
1.0/2 #=> 0.5
```

+ inspectを選ぶ問題:メソッドの関連性の知識を問う

```
2.0.0 か ら Object#inspect が使われることになっている
```

+ トップレベルでのメソッド定義:スコープの範囲や定義の内容を問う
+ グローバル変数のスコープ:クラス内やトップレベルでどのように振る舞うか問う（def内は呼び出されるまで評価される？されない？など）
+ エラーの継承:例外がどのように捕捉されるか問う
+ injectの動作:加算だけではなく、初期値とブロック内での処理結果を問う

細かいところは意見があれば思い出してみます。

追記：[２．１を受験したのでメモ] (http://qiita.com/hide381815963/items/5c321d09e5b8d0b80acb)
unite.vimで検索辞書を設定して検索単語入力を減らす

unite.vimはunite#custom#substituteで検索用の置換辞書を設定することができます。設定次第でunite.vimによる絞り込み検索が楽になるんじゃないかと思って設定してみました。

引数は以下のようになります

```.vimrc
" 指定したprofile_nameでkeywordを入力した時にpatternで置換する。
call unite#custom#substitute(profile_name, keyword, pattern, priority)
```

検索でkeywordを入力した時にpatternに置換されます。

たとえば私はrailsを使って開発しているので、以下の様な設定にしてunite-railsっぽくしてみます。

```.vimrc
" 面倒なのでdefaultにしている priorityは省略
call unite#custom#substitute('default', '[[:blank:]]\zsm\ze[[:blank:]]\|^\zsm\ze[[:blank:]]', 'models')
```

この設定を入れると、unite.vimでの検索時にm\<Space\>と入力することで、検索キーワードにmodelsと入力したことと同じ意味になります。
ちょっと長いのでfunctionにしましょう。名前はテキトーです。

```.vimrc
function! Unite_substitute(pattern, substitute)
  call unite#custom#substitute('default', '[[:blank:]]\zs' . a:pattern ze[[:blank:]]\|^\zs' . a:pattern . '\ze[[:blank:]]', a:substitute)
endfunction
```

最終的には以下のようにしました。

```.vimrc
call Unite_substitute('m', 'models')
call Unite_substitute('v', 'views')
call Unite_substitute('c', 'controllers')
```

あとは好きなように検索辞書を充実させるとキータイプが減るかもしれません。
Android Support Repositoryのコマンドラインからのインストール方法


support-v4ライブラリなどを含んでいるAndroid Support Repositoryを使う場合に、とあるプロジェクトのTravis CIのビルド(コマンドラインでSDKのアップデート)が失敗するようになりました。

## 解決策(ローカル)

Mac環境ですが、こちらではSDKアップデート時に`--all`オプションをつければこれまで通り使えました。
(2014/06/29時点、アンインストール＆再インストールで成功することを確認)

```
android update sdk --all --filter extra-android-m2repository --no-ui --force
```

これを付けないと`extra-android-m2repository`がインストールできず、`support-v4:19.1.0`などが解決できずにビルドエラーが発生します。

## 解決策(Travis CI)

Travis CIでは上記でもダメでした。
`--all`をつけても`extra-android-m2repository`見つかりません。

```
Error: Ignoring unknown package filter 'extra-android-m2repository'
Warning: The package filter removed all packages. There is nothing to install.
         Please consider trying to update again without a package filter.
```

ちなみにこれは大分前にセットアップした`.travis.yml`だったため、`language:java`の指定でした。

現在β版でAndroid用の環境として用意されている`language:android`を指定して、デフォルトでインストールされている`extra-android-m2repository`を使えばビルドできました。
[Travis CI: Building an Android Project (beta)](http://docs.travis-ci.com/user/languages/android/)

ただ、`language:android`でも、`components`に`extra-android-m2repository`を明示的に指定すると上記のエラーが発生してしまいます。
Travis CIで出力されるXMLのリストがローカルで実行した場合と異なっていたので、Travisでは古いXMLがキャッシュされたりしているのかもしれません。(推測)

**(2014/7/11追記)**
試行錯誤してようやく分かりましたが、`tools`もアップデートが必要だったようです。
`tools`(r23)が入っていれば、`extra-android-m2repository`がインストールできました。
`tools`が`build-tools-20.0.0`に依存しているため、まず`build-tools-20.0.0`を入れ、その後`tools`を入れるのが良いようです。

## 補足：Maven Centralを使わない理由

support-v4ライブラリを使う場合、Android Studio(Gradle)から使うときには次の二つの方法があると思います。

1. Maven Centralからインストール
1. Android Support Repositoryからインストール

両者は以下のように指定の仕方が異なります。

1. `compile 'com.google.android:support-v4:r7'`
1. `compile 'com.android.support:support-v4:19.1.0'`

1.を使えれば良いのですが、
1.の方は少し古く、2.の方にしか含まれないものがあります。
例えば、ViewPager.PageTransformerがあります。
このインタフェースを使うとViewPagerでの画面遷移アニメーションをカスタマイズできます。
こうしたクラスを使う場合は2.の方を選ぶ必要があります。
Factory Method by ruby

＊自分用の復習も兼ねてのメモなので適当・雑です。

「ペアになるオブジェクトを生成してくれるメソッド」
「newをしてインスタンを生成する代わりに呼ぶメソッドではない」

```rb
class Creator
  ...
  def createProduct
    # create instance
  end
end
class Product
....
end
```

ファクトリーメソッドを使用しない場合だとコール元でCreatorとProductのインスタンスの組み合わせをしないとだめだが、このパターンによってCreator側にその処理を任せることにより、コール元では自動的にCreatorのペアとなるProductのインスタンスがcreateProductをコールすることで得られる。
人間のランダム感覚がいかにいい加減かという話

# はじめに
業務中に音楽をシャッフル再生して開発効率をあげている皆様、こんばんは。
かくいう私もコーディングに集中するときはイヤホンつけていることが多いです。

しかしたまに、シャッフル再生にもかかわらず、「またGLAYかよ！」とか「同じ曲が二回続いた！」とか
「今日はJUDY AND MARYが多いな！」
ってことありませんか？　きっとあるあるかとおもいます。
そして「これってほんとにランダムなの？」って音楽再生ソフトを疑うところまでが様式美です。

それ、多くの場合、自分の「ランダムってこうだよね」感にだまされています。
案外人間の感覚ってあてになりません。
それを体感するクイズをやってみましょう。

# クイズ：どれがランダムでしょうか
さて、A から D の[0 <= x,y <= 1]を満たす散布図を用意しました。
これら4つの図の中で完全にx,yの組がランダムに生成された図は1つだけです。あててみてください。

![スクリーンショット 2014-06-29 22.57.34.png](https://qiita-image-store.s3.amazonaws.com/0/44801/89da632e-cddd-9f0f-accc-9ca5bcd1fed2.png)

# クイズ：答え合わせ
では種明かし。下記の図をみながらじっくりみていきましょう。

![スクリーンショット 2014-06-29 23.03.34.png](https://qiita-image-store.s3.amazonaws.com/0/44801/8c1ef965-c08e-adcd-e507-3c6d1eb5f8d0.png)

## 図D
図Dは下記のような数式を満たすプロットです。

```math:D
x = 0.1 \times rand() + C_1 \\
y = 0.1 \times rand() + C_2
```
ここで rand() は 0 <= rand() < 1 を満たすランダム生成関数です。
この C の値を0から0.1刻みでプロットしています。
([C1, C2]が[0,0]から[0.9,0.9]までの100組をダブり漏れなく網羅するように刻んでいます。)
そのため、0.1 × 0.1 の箱の中に必ず1つの点が存在しています。
一番均等に散らばっているのでランダムに見えますが、図Dはランダムではありません。選んだ人残念。

## 図C
図Cは下記のような数式を満たすプロットです。

```math:C
x = rand() \\
y = C
```

図Cでは、この C の値を0から0.01刻みでプロットしています。
つまり、y=[0, 0.01, 0.02,...] となっています。
わかりやすくするために、y軸に 0.1 刻みで目盛りを振っています。
横長長方形の中に、プロットが10個ずつ存在するのがわかると思います。
選んだ人残念。

## 図B
図Bは下記のような数式を満たすプロットです。

```math:B
x = C \\
y = rand()
```

図Bでは、この C の値を0から0.01刻みでプロットしています。
ぶっちゃけ、図Cのx軸とy軸を入れ替えているだけのロジックです。
つまり、x=[0, 0.01, 0.02,...] となっています。
わかりやすくするために、x軸に 0.1 刻みで目盛りを振っています。
縦長長方形の中に、プロットが10個ずつ存在するのがわかると思います。
選んだ人残念。

## 図A
図Aは下記のような数式を満たすプロットです。

```math:A
x = rand() \\
y = rand()
```

これが完全ランダムです。選んだ人すごい。
図Dと同じように0.1 × 0.1 の箱に区切ってみましたが、図Dと異なり、
プロットが存在しない箱、存在する箱、複数存在する箱といったランダム性があるのが一目瞭然かと思います。
音楽の例につなげると、GLAYが連続したり、JUDY AND MARY が1日に何回も流れてきたりすることこそが、
ランダムなのです。

# おわりに
はじめにで紹介した、「またGLAYかよ！」とか「同じ曲が二回続いた！」とか
「今日はJUDY AND MARYが多いな！」という現象、ランダムだから起こるってことが伝わったでしょうか？
ランダムに懐疑的になる前に、自分の中のランダム感を疑いましょうという話でした。

(注意)
音楽再生ソフトのよっては シャッフル再生 = ランダム再生 ではないものも存在するかもしれません。
あくまでランダムを疑う例として音楽再生ソフトを話の導入に使ってみただけです。

(備考)
プログラム言語や表計算ソフトに実装されている rand() が厳密にいうとランダムではないという話はまた今度。
熱力学のシミュレーション屋だった自分からすると、かなーーーーり気にする話なのでそのうち書く。
libGDXの基礎の基礎２ ～ 画像を表示する

[libGDXの基礎の基礎](http://qiita.com/shinsan68k/items/07825b66e6e3d25b09ac)の続きです。


前回はクロスプラットフォームで動かすところまでとライフサイクルメソッドの説明だけをしました。


今回は画像を表示します。

ここではenemy.pngという画像ファイルを用意しています。256x256のサイズです。

# 画像を置く場所

画像を置く場所ですが、PC版はカレントディレクトリからの相対パスとなります。
NetBeansならばプロジェクトのルートにおいてください。タブをファイルに切り替えるとファイルシステムそのままの表示になりますので、ここでプロジェクトのルートに配置します。

![libgdx-project.png](https://qiita-image-store.s3.amazonaws.com/0/46371/fec24688-93f2-65b3-3c4e-f76240b4a55d.png)


AndroidはAssetsへ、robovmならばdata（設定による）ディレクトリへ配置してください。

ディレクトリを作って階層化してもよいでしょう。今回はわかりやすくするためにルートに配置します。

# ソースコード

windows/linux/mac版は以下のようになります。そのほかのプラットフォームではmain部分を消して差し替えてください。

```java
package test.libgdx;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;


public class MainListener2 implements ApplicationListener{
    SpriteBatch batch;
    Texture texture;

    @Override
    public void create() {
        batch = new SpriteBatch();
        texture = new Texture("enemy.png");
    }

    @Override
    public void resize(int w, int h) {
    }

    @Override
    public void render() {
        Gdx.gl.glClearColor(0, 0, 0.2f, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        
        
        batch.begin();
        batch.draw(texture, 0, 0);
        batch.end();
    }

    @Override
    public void pause() {
    }

    @Override
    public void resume() {
    }

    @Override
    public void dispose() {
    }

    
    public static void main(String[] args) {
        new LwjglApplication(new MainListener2(), "libGdxTest", 512, 512);
    }

}

```

# windows/mac/linuxで実行

Netbeansならばmainクラスを選択してシフト+F6で実行可能です。

![libgdx2.png](https://qiita-image-store.s3.amazonaws.com/0/46371/dc133911-0d21-b76f-93c1-fa94bba7830c.png)


# Android実行

NBAndroidプラグインをいれたNetbeansならばF6で即実機へ転送、実行できます。mainクラス単位での実行ではなく、プロジェクト単位の実行となります。

![Screenshot_2014-06-29-21-41-12.png](https://qiita-image-store.s3.amazonaws.com/0/46371/0c362d66-c2f0-c601-1916-353bfc11757a.png)

# 解説

まずPC版のみにあるmainメソッドですが、描画エリアを512x512でウインドウ生成しています。ウインドウのタイトルも指定しています。今回はしていませんが、アイコン指定も可能です。Androidでは横320ピクセル、高さはそれに合わせた比率になっています。

<br>
createメソッドでテクスチャをロードしています。先ほどおいた画像ファイルを指定してください。

<br>
renderメソッドが描画の本体となります。

SpriteBatchというものを使って描画します。SpriteBatchはbeginメソッドとendメソッドの間に描画命令を実行することで描画されます。

ここで先ほど生成したTextureのインスタンスを渡します。drawメソッドの引数の0,0はXとY座標です。画面の左下が原点となります。これらの数値を変更してみてください。また、複数のdrawメソッドを記述してみてください。重ね合わせなども確認するとよいでしょう。

今回利用したdrawメソッドはもっとも単純なものですが、SpriteBatch#drawメソッドは複数あります。拡大縮小、上下左右反転だけならこれだけで実現できます。


<br>
これで最も基本な画像描画はできました。キーボードやマウス、タッチイベントなどをかけばもうゲームは作れそうです。

----

ちなみにこのキャラクターはマモノバスター／マモノバスター2に登場するミミックです。2はAndroid/iOSともに配信中ですのでよかったらどうぞ。バージョンアップの予定もあります。
Julia でグラフを描画する…ちょっとだけ解析してみた


[『プログラミング言語 Julia でグラフを描画する』](http://qiita.com/akmiyoshi/items/a2aca5369c8e3c11ae59) でとりあえずサンプルを動かすことに成功したが、自分の(Julia言語の)プログラムで作ったデータを使ってグラフを描画するにはどうしたら良いかを調べることにした。
サンプルソースを改造して文末のソースを作ってみた(保存する時は、文字コードを UTF-8 にして保存してください)。
`data = [1, 2, 3, 4, 5, 10, 20, 5]` の部分で要素数 8 の配列を `data` という変数にセットしてみた。
後は、`p1.plot(data)`、`p2.plot(data,…)`、`p3.plot(data,…)` のように plot メソッドの第一引数に配列を渡して上げれば良いようだ。基本はこれで OK かも！

![2014-0629-2232.png](https://qiita-image-store.s3.amazonaws.com/0/32879/b6dac8d9-adb3-97bb-acbe-dd7629f39bd7.png)


```jl:basic-plot.jl
using PySide
reload(Pkg.dir("PySide", "src", "pyqtgraph.jl"))
using PyQtGraph

w = Widget()
lyt = VBoxLayout(w)
setLayout(w, lyt)

win = GraphicsLayoutWidget(w)
addWidget(lyt, win)
set_size(w, 800, 200)

raise(w)

data = [1, 2, 3, 4, 5, 10, 20, 5]

p1 = addPlot(win, title="Basic array plotting (基本)")
p1.plot(data)

p2 = addPlot(win, title="Multiple curves (複数)")
p2.plot(data, pen=(255,0,0))
p2.plot(data .+ 5, pen=(0, 255, 0))
p2.plot(data .+ 10, pen=(0,0,255))

p3 = addPlot(win, title="Drawing with points (ポイント)")
p3.plot(data, pen=(200, 200, 200), symbol='f', symbolPen='w', symbolBrush=(255,0,0))

PySide.app[:exec_]()
```
staticな要素は$watchから外してdigest loopを高速化

ng-bind, ng-classなどにbindすると、scopeのwatchに登録され、digest loopが走る毎に変更があったか否かがチェックされる。
watchに紐づく要素が僅かであれば問題ないが、数百数千のオーダーになるとパフォーマンスが低下しラグが発生する。キー入力系のイベントのように、入力する度にdigest loopが走る場合、画面がフリーズした様な感覚になる。

bindonceはこの問題を解決するdirectiveで、最初のbind以降はwatch対象から外すことで無駄なチェックを省いてくれる

Pasvaz/bindonce
[https://github.com/Pasvaz/bindonce](https://github.com/Pasvaz/bindonce)

基本的には、ng-*をbo-*に置き換えるだけでOKで気軽に使える
絶対に変更しないであろう文言や画像パスなどはbo-*に置き換えていけばよい
ng-repeatの時はbindonceを指定する必要があるので注意

```
<ul>
    <li bindonce ng-repeat="person in Persons">
    ...
```


類似のプロジェクトとしてangular-once, watchFightersがある

angular-once
[https://github.com/tadeuszwojcik/angular-once](https://github.com/tadeuszwojcik/angular-once)

watchFighters
[https://github.com/abourget/abourget-angular](https://github.com/abourget/abourget-angular)

[参考]
AngularJSのパフォーマンス改善入門
http://qiita.com/zoetro/items/5156aef51222e81dd022

[追記]
Angular1.3から標準で一度だけのbindを実現できる
機能が付くようです。下のzoetroさんのコメントを参照下さい!
OpenCVで写真データを2値化


写真データを白黒の２値にして、Blenderの入力にしたいと思い調査しました。

以下のサンプルプログラムを参考にしています。

[python - Converting an OpenCV Image to Black and White - Stack Overflow](http://stackoverflow.com/questions/7624765/converting-an-opencv-image-to-black-and-white)

## ２値化したファイルを表示

```
import cv as cv1
import cv2 as cv
import numpy as np
import sys

argvs = sys.argv

# 写真ファイル
src = argvs[1]
# 出力データ
output = argvs[2] 

im_gray = cv.imread(src, cv.CV_LOAD_IMAGE_GRAYSCALE)
im_gray_mat = cv1.fromarray(im_gray)
im_bw = cv1.CreateImage(cv1.GetSize(im_gray_mat), cv1.IPL_DEPTH_8U, 1)
im_bw_mat = cv1.GetMat(im_bw)

threshold = 0
cv1.Threshold(im_gray_mat, im_bw_mat, threshold, 255, cv1.CV_THRESH_BINARY | cv1.CV_THRESH_OTSU)

cv.imshow('gray image', np.asarray(im_bw_mat))
cv.waitKey(0)
cv.destroyAllWindows()
```

## ２値化した行列をsavatxtでデータ出力
```
import cv as cv1
import cv2 as cv
import numpy as np
import sys

argvs = sys.argv

src = argvs[1] 
output = argvs[2]

im_gray = cv.imread(src, cv.CV_LOAD_IMAGE_GRAYSCALE)
im_gray_mat = cv1.fromarray(im_gray)
im_bw = cv1.CreateImage(cv1.GetSize(im_gray_mat), cv1.IPL_DEPTH_8U, 1)
im_bw_mat = cv1.GetMat(im_bw)

threshold = 0
cv1.Threshold(im_gray_mat, im_bw_mat, threshold, 255, cv1.CV_THRESH_BINARY | cv1.CV_THRESH_OTSU)

print np.asarray(im_bw_mat)
a = np.asarray(im_bw_mat)

np.savetxt(output, a, fmt='%10.5f', delimiter='\t')

```


線形代数とか、必要になるんだろうなと感じました。
Vimperatorのコマンドラインで単語移動


zsh, Emacs, vimのコマンドラインではM-bとM-fで単語移動ができるのでカーソルを大きく移動させるときは大体使っていますが、VimpではFirefoxデフォルトのキーバインドに振られているままで誤爆が多かったので今更ですが設定しました。

## 設定
```javascript
mappings.addUserMap(
    [modes.COMMAND_LINE],
    ['<M-b>'],
    'word previous',
    function () {
        editor.executeCommand("cmd_wordPrevious", 1);
    },
    {}
);

mappings.addUserMap(
    [modes.COMMAND_LINE],
    ['<M-f>'],
    'word next',
    function () {
        editor.executeCommand("cmd_wordNext", 1);
        editor.executeCommand("cmd_charNext", 1);
    },
    {}
);
```

下記のリンクを参考に設定できたのはいいけど、こういうFirefox内部実装へのアクセスの仕方はどう調べたらいいんだろうか

## 参考
> [コマンドラインの &lt;C-a&gt; を二段階移動にする - Death to false Web browser! - vimperatorグループ](http://vimperator.g.hatena.ne.jp/nokturnalmortum/20120726/1343240083)
[MinGW] Link pthread statically [Ubuntu]

※MinGWアプリがlibwinpthread-1.dllを要求するのを(-staticせずに)防ぐには以下のスクリプトを実行します。※

In the latest, the very basic programs not-using threads are also linked to pthread. The worse is the library is libpthread.dll.a in default, which requires libwinpthread-1.dll runtime.

Therefore, linking pthread statically is preferred. You can use -static of course, but I still wanted to use msvcrt.dll as C runtime.

I use the Ubuntu package of MinGW. So, to prevent dynamic library, I have done the following:

```bash
#!/bin/bash
for dir in i686-w64-mingw32 x86_64-w64-mingw32; do 
mv /usr/${dir}/lib/libpthread.dll.a{,_}
mv /usr/${dir}/lib/libwinpthread.dll.a{,_}
mv /usr/${dir}/lib/libwinpthread-1.dll{,_}
done
```
[Swift] 列挙型の作りが面白い

Swfitの列挙型が面白いです。

~~C#のように数値が割り当てられない代わりに~~
列挙型に関数が作れます。いろいろ応用が効きそうです。

``` swift
enum CompassPoint {
    case North
    case South
    case East
    case West

    // 各列挙値に対して文字列で返す
    func toString () -> String {
        switch self{
            case CompassPoint.North:
                return "北"
            case CompassPoint.South:
                return "南"
            case CompassPoint.East:
                return "東"
            case CompassPoint.West:
                return "西"
            default :
                return ""
        }
    }

    // ボタン押下アクション
    @IBAction func ButtonClick(sender : UIButton) {
        hoge(CompassPoint.West)
    }

    // 文字列で表示
    func hoge(key:CompassPoint){
        println(key.toString())
    }

}
```

ただし。上記のように値を返すだけであれば関数不要です。
自由な型で返せるのがすばらしい。

```swift
    enum CompassPointA : String {
        case North = "北"
        case South = "南"
        case East = "東"
        case West = "西"
    }

    // ボタン押下アクション
    // toRawを忘れずに。
    @IBAction func ButtonClick(sender : UIButton) {
        println(CompassPointA.North.toRaw())
    }

```
初めてのCocoaPods


2014年ある夏の日、[CocoaPods](http://cocoapods.org/)始めました。

## 1. インストール

CocoaPodsのインストールにはRubyが必要ですが、
MacにはRubyがデフォルトでインストールされていますので、
以下のコマンドを実行します。

```
sudo gem install cocoapods
```

## 2. レポジトリ情報のセットアップ
以下のコマンドで~/.cocoapods以下にCocoaPodsのレポジトリ情報をセットアップします。

```
pod setup
```

レポジトリ情報を更新する場合は、再度「pod setup」コマンドを実行すればOKです。

## 3. ライブラリの確認
以下のコマンドでCocoaPodsで管理できるライブラリを確認できます。

```
pod list
```

## 4. Podfileの作成
CocoaPodsを利用したいアプリの.xcodeprojディレクトリがあるディレクトリでPodfileという名前のファイルを作成します。
Podfileには利用するライブラリの定義を記載します。

```
platform :ios, "7.0"
pod 'AFNetworking', '~> 2.3.1'
```

例では、AFNetworkingの2.3.1以降の2.3.xのバージョンを利用するように指定しています。
バージョンを指定しなければ、その時点での最新版を取得します。

バージョンの記述ルールは下記になります。

|記述|意味|
|:-----------|:------------|
|'1.0'|バージョン1.0を使用|
|'> 1.0'|1.0 より上のバージョンを使用|
|'>= 1.0'|1.0 以上のバージョンを使用|
|'< 1.0'|1.0 未満のバージョンを使用|
|'<= 1.0'|1.0 以下のバージョンを使用|
|'~> 1.0.2'|1.0.2 以降のバージョン 1.0.xを使用|

## 5. ライブラリのインストール
Podfileを作成したら、ライブラリをインストールをします。
Podfileがあるディレクトリに移動して以下のコマンドを実行します。

```
pod install
```

Podfileを編集してライブラリの追加、削除する場合は以下のコマンドを実行します。

```
pod update
```

インストールに成功した場合、Podsディレクトリと、<プロジェクト名>.xcworkspaceディレクトリが作成されます。

## 6. .gitignoreの設定
ライブラリが格納されているPodsディレクトリはバージョン管理外にしましょう。

```.gitignore
Pods
```

## 7. 準備完了
CocoaPods導入後は、新しく生成された<プロジェクト名>.xcworkspaceでプロジェクトを開いて開発してください。
Emacs に cask を導入した。


[Emacs のパッケージ管理を package.el + el-get から Cask + pallet に乗り換えました - Thanks Driven Life](http://gongo.hatenablog.com/entry/2014/05/09/230836 "Emacs のパッケージ管理を package.el + el-get から Cask + pallet に乗り換えました - Thanks Driven Life") にインスパイアされて、cask と pallet の導入をした。

## 目標
Windows, OS X, Linux のいずれの環境でも動くように cask を導入する。
GitHub で管理している dotfiles で Cask ファイルを管理できるようにする。

## 下調べ

cask は Emacs のパッケージ依存関係をいい感じに解決してくれるもの。

## 結果

Windows まで考えるといろいろな障害があり、下記構成でいけばなんとかなることがわかった。

cask は dotfiles に subtree として追加する。
cask コマンドの使用はあきらめて cask.el が提供する Cask API を利用する。
具体的には以下のコードを init.el に追加した。

```el
(require 'cask "~/.cask/cask.el")
(setq user_bundle (cask-initialize "~/.emacs.d"))
(cask-install user_bundle)
(cask-update  user_bundle)
```



Windows では cask の ReadMe にある通りのインストール方法ができない
Windows では cask コマンドが使えないのでコマンドでの利用は諦める。


Windows ではコマンドでは動かない。
Cask API を使えば全然使える。

cask でインストールしたパッケージは ~/.emacs.d/.cask におかれる。
NAD11設定メモ


自宅用回線としてWiMAX2+対応ルータ「NAD11」を使用してみたので、設定項目等のメモです。
個人的には、LAN側IPアドレスの設定やSSIDの変更/隠蔽、簡単なファイアウォール設定などができるので、家庭用の無線LANルータと比較しても十分満足できる機器だと思います。

# NAD11のファームウェアのバージョン
```
1.7.0
```

# 無線LAN設定
| 項目 | 変更可否 | 初期値 |
|:-----------|------------:|:------------:|
| SSID | 可能 | nad11-xxxx|
| WPA暗号化キー(PSK) | 可能 | xxxxx|
| ESS-IDステルス機能(SSIDの隠蔽) | 可能 | 無効 |
| MACアドレスフィルタリング | 可能 | 無効 |
| セカンダリSSIDの無効化| 可能 | 無効 (初期は利用可能です) |

# 詳細設定
| 項目 | 変更可否 | 初期値 |
|:-----------|------------:|:------------:|
| LAN側IPアドレス | 可能 |192.168.179.1/24|
| DHCPサーバ設定 | 可能 |　有効 |
| DHCP固定割当 | 可能 |　無効 |
| IPv４パケットフィルタ | 可能 |　※ |
| ポートマッピング | 可能 |　無効 |
| 静的ルーティング | 可能 |　無効 |

### ※ IPv4パケットフィルタ初期設定値
| 種別 | 方向 | プロトコル | 送信元 | 送信元ポート | 宛先 | 宛先ポート | 優先度 |
|:-----------|------------:|:------------:|:------------:|:------------:|:------------:|:------------:|:------------:|
| 廃棄 | out | udp | any | any | any | 137-139 | 1 |
|廃棄|out|tcp|any|any|any|137-139|2|
|廃棄|out|udp|any|any|any|445|3|
|廃棄|out|tcp|any|any|any|445|4|
|廃棄|out|tcp|any|any|any|2049|5|
|廃棄|out|udp|any|any|any|2049|6|
|廃棄|out|tcp|any|any|any|1243|7|
|廃棄|out|tcp|any|any|any|12345|8|
|廃棄|out|tcp|any|any|any|27374|9|
|廃棄|out|tcp|any|any|any|31785|10|
|廃棄|out|udp|any|any|any|31789|11|
|廃棄|out|udp|any|any|any|31791|12|
|廃棄|in|tcp|any|any|any|1243|13|
|廃棄|in|tcp|any|any|any|12345|14|
|廃棄|in|tcp|any|any|any|27374|15|
|廃棄|in|tcp|any|any|any|31785|16|
|廃棄|in|udp|any|any|any|31789|17|
|廃棄|in|udp|any|any|any|31791|18|


# 備考
LAN側の無線LAN電波は壁を挟むと弱まります。
クレードルの有線LANポートに、別途中継用の無線LANルータを接続するなどの工夫は必要です。
Light Tableのプラグインからユーザ設定ファイルの読み書き

Light TableのプラグインからUser keymapのような、ユーザ用の設定ファイルを作って読み書きしたい場合、
`lt.objs.files/lt-user-dir`を使うと、Light Tableのuser.keymapやuser.behaviorsがあるパスが取れます。
あとは、そこに対して`save`と`open-sync`で読み書きをすればOKです。

```clj
(ns sample.one
  (:require [lt.objs.files :as files]
            [cljs.reader :as reader]))

(def sample (files/lt-user-dir "settings/sample.edn"))
(files/save sample [:a 990 '(:c "abc" {:a1 :a2}) #{:e 11}])

(def v (files/open-sync sample))
(reader/read-string (:content v))
```

ClojureScriptでは、`read-string`は`cljs.reader`にあるのでそれを使って元に戻します。
なぜか`:1a`のような数字から始まるキーワードは`read-string`でエラーになるので注意です。
netBSDでユーザを追加する。

Linuxもまともに扱えない自分のための備忘録。

こちらのサイト様を参考にさせていただいた。
http://d.hatena.ne.jp/nyanobsd/20080527/1211944503


<pre>
# useradd -c 'hoge' -G wheel -m hoge
# passwd hoge
Changing password for hoge.
New Pass word:********
Retype New Password:********
</pre>

-G と -mを逆にしたら動かなかった。
-c でフルネームを、
-G wheel で管理者グループへの所属を、
-m で/home/以下へのディレクトリ作成並びにユーザ追加を表しているそうな。
[Blender] 個別にマテリアルを割り当てる


通常、Blenderで生成したオブジェクトにはひとつのマテリアルが割り当てられます。
しかし、例えひとつのオブジェクトであったとしても、細かい部分で単一のマテリアルだけで表現することは困難です。

Blenderでは、単一のオブジェクトであったとしても、頂点単位でマテリアルを設定する方法が用意されています。
Object modeではマテリアルの選択はひとつしか行えませんが、Edit modeで頂点を選択している状態になると、マテリアルの設定画面が下記のように切り替わります。

![スクリーンショット 2014-06-29 19.50.26.png](https://qiita-image-store.s3.amazonaws.com/0/5616/7cbca917-845f-477d-1ff8-bfec26a5c2de.png "スクリーンショット 2014-06-29 19.50.26.png")
*※マテリアルは右の「＋」ボタンを押すことで増やすことが出来ます。*

この状態で、個別のマテリアルを割り当てたい頂点を選択した状態にし、さらに設定したいマテリアルを選び、その下部にある「Assign」ボタンを押すことで、選択中の頂点に対して「だけ」マテリアルを割り当てることができます。

意外と忘れてしまいそうなのでメモ。
Single View Application Project - ViewController.swiftの解説

Single View Application Projectを作成した時、以下のswiftファイルがデフォルトで作成されます。

+ AppDelegate.swift
+ ViewController.swift

本ブログではViewController.swiftについて解説します。

```swift:ViewController.swift
import UIKit

class ViewController: UIViewController {
                            
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

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

}
```

**UIKitフレームワークをインポートする。**
[UIKit Framework Reference(英文)はこちら>>](https://developer.apple.com/library/ios/documentation/uikit/reference/uikit_framework/_index.html)

```swift
import UIKit
```

**UIViewControllerを継承したViewControllerクラスを作成する。**
※UIViewControllerとは
すべてのiOSアプリケーションのための基本的なビューの管理モデルを提供するクラス

```swift
class ViewController: UIViewController {
```

**UIViewControllerで定義されたviewDidLoadメソッドを再定義する。**
viewDidLoadはビューの読み込みが終了した時に呼ばれるメソッド。初期値では親クラスのviewDidLoadメソッドを呼び出ししているが、必要に応じて処理を加える。

```swift
override func viewDidLoad() {
    super.viewDidLoad()
}
```

**UIViewControllerで定義されたdidReceiveMemoryWarningメソッドを再定義する。**
didReceiveMemoryWarningはアプリケーションがメモリ不足の警告を発した時この呼ばれるメソッド。必要に応じて処理を加える。

```swift
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}
```

[IOS8アプリ開発日誌掲載中！！](http://qiita.com/kilhyungdoo/items/087dcbf971ac5e05d3f0)
RuboCop | Style/EmptyLineBetweenDefs

# RuboCop | Style/EmptyLineBetweenDefs

## 概要

RuboCopの「Style/EmptyLineBetweenDefs」警告について。

メソッドの定義間に空白行を必要とするかどうかを設定し、チェックします。
デフォルトは空白行を必要としません。

### 設定値一覧

|設定対象|設定値|内容|デフォルト|
|:-------|:-----|:---|:--------:|
|AllowAdjacentOneLineDefs|false|無効|○|
|AllowAdjacentOneLineDefs|true|有効|--|

## EmptyLineBetweenDefs

各設定値（ *false* , *true* ）での検証結果をまとめます。

### 検証プログラム

empty_line_between_defs.rb

~~~ruby
def hoge
  'hoge'
end
def hige
  'hige'
end
~~~

### 実行結果 デフォルト の場合

.rubocop.yml

※明示的に設定しているが、デフォルト値なので何も設定しなくてもよい

~~~yaml
EmptyLineBetweenDefs:
  AllowAdjacentOneLineDefs: false
~~~

メソッド間に空白行がありませんが、警告は出ません

~~~bash
$ rubocop empty_line_between_defs.rb
Inspecting 1 file
.

1 file inspected, no offenses detected
~~~

### 実行結果 EmptyLineBetweenDefs を trailing に変更した場合

.rubocop.yml

~~~yaml
EmptyLineBetweenDefs:
  AllowAdjacentOneLineDefs: true
~~~

メソッド間に空白行があるため、警告が発生しました

~~~bash
$rubocop empty_line_between_defs.rb  -a
Inspecting 1 file
C

Offenses:

empty_line_between_defs.rb:2:3: C: [Corrected] Prefer single-quoted strings when you don't need string interpolation or special symbols.
  "hoge"
  ^^^^^^

1 file inspected, 1 offense detected, 1 offense corrected
~~~

## 補足
この警告は rubocop -a で修正可能です。