OmniAICreator/Qiita-1.07M huggingface dataset:
iOSアプリ提出に必要なアイコン作成に使える「ImageMagickを用いたシェルスクリプト」

iOSアプリ開発では、中級者以上のPG/SEでも躊躇してしまうような面倒な点がいくつもあります。
UIKitを使いこなすのもそうでしょうし、レイアウト云々もそうでしょうし、storyBoardを使う使わないもそうでしょうし、普通にプログラミングをやってきた人にとって面倒だと思えることが多々あります。

ですが、逆に面白いと食いつく人がいるとも思えます。
例えば、自身のiOSデバイスで動かすのが嬉しいとか、オリジナルのアイディアが生きるとか、Developer登録すれば個人でも
リリース出来るなど、様々な理由があります。

UIKitやstoryBoard関連、プログラミング言語に関する情報は、調べていただければいくらでもあると思いますが、案外
面倒だけど知られていないことがいくつかあって、私の中ではアプリのアイコン作成が面倒という問題があげられます。
数年前までは、アイコンの画像サイズは3つぐらいでいけたのですが、突然増えた次第でして、様々なサイズの画像を要求されます。

個人で開発していると、画像系ソフトもあんまり充実していない場合もあるでしょうし、何でもかんでもソフトをいちいち立ち上げてやるのは面倒になってきます。
そこで私は、一つのサイズのアイコンを作成さえすれば、必要なサイズのアイコンを生成してくれるシェルスクリプトを作成してみました。
簡単ですが便利なので、おすすめです。

#(1)ImageMagickのインストール
ImageMagickをダウンロードしてインストールします。
それに関しては、
http://www.imagemagick.org/
http://cactuslab.com/imagemagick/
などをご参照下さい。
XQuartzも必要となるので、インストールされていなければXQuartzがバンドルされたパッケージをダウンロードすれば
良いかと思います。

#(2)シェルスクリプトの作成
シェルスクリプトをお好きなエディタを用いて作成します。(拡張子はshです。)
その前に、まず用いるImageMagickのコマンドについてですが、以下の通りです。
`convert -geometry (変換後の画像サイズ) (変換元ファイル名) (変換後ファイル名)`
変換後の画像サイズですが、80x80の画像サイズに変換したいのであれば、80x80と記述します。
注意点として、画像サイズの縦横比を維持したい場合はこれでよいのですが、維持したくない場合は80x80!というように、
!をつけます。
変換元ファイルの画像サイズが小さいと、拡大したときに荒くなってしまうので、それなりに大きい画像サイズの
ファイルを一つ作成して下さい。(例として、私は960x960の画像を用意しています。)

そして、以下のようにxxx.sh(お好きなファイル名にして下さい)を作成します。
ここでは仮に、960x960.jpgを準備したとします。

```she'll:xxx.sh

#!/bin/sh
convert -geometry 29x29! 960x960.jpg 29x29.png
convert -geometry 40x40! 960x960.jpg 40x40.png
convert -geometry 50x50! 960x960.jpg 50x50.png
convert -geometry 57x57! 960x960.jpg 57x57.png
convert -geometry 58x58! 960x960.jpg 58x58.png
convert -geometry 72x72! 960x960.jpg 72x72.png
convert -geometry 76x76! 960x960.jpg 76x76.png
convert -geometry 80x80! 960x960.jpg 80x80.png
convert -geometry 87x87! 960x960.jpg 87x87.png
convert -geometry 100x100! 960x960.jpg 100x100.png
convert -geometry 114x114! 960x960.jpg 114x114.png
convert -geometry 120x120! 960x960.jpg 120x120.png
convert -geometry 144x144! 960x960.jpg 144x144.png
convert -geometry 152x152! 960x960.jpg 152x152.png
convert -geometry 180x180! 960x960.jpg 180x180.png
convert -geometry 960x960! 960x960.jpg 960x960.png
convert -geometry 1024x1024! 960x960.jpg 1024x1024.png
```

パーミッションなどは各自設定して下さい。
当然ですがlaunchImageに関しても、同様にこのシェルスクリプトを改変すれば作成出来るということになります。

これで、現行のxcodeで多くのバージョンに対応したiOSアプリを作成したとしても、必要なアイコンは事足りるはずです。
アイコンを作ってくれる専門の人がいたり、画像系ソフトが充実している方であれば、このようなことは特に必要ない
かもしれませんが、まあ私のような人がいるということも想定して、参考程度に書いてみました。
GitBucket をQNAPで運用する

#1. QNAP準備
##1.1. Web管理(http://あどれす:8080)のページからAppCenterへ
##1.2. ツールをインストールする
1.Optware IPKG
2.JRE
3.Tomcat
4.Git
#2. GitBucketの入手
今回は2.6を入手
 (https://github.com/takezoe/gitbucket/releases/download/2.6/gitbucket.war)
#3.　Tomcatへの設定
##3.1. Tomcatへブラウザからログイン(http://あどれす:7080)
##3.2. MnageAppに移動
##3.3. 配備にgitbucket.warを指定
##3.4. 起動
#4. Gitbucketへアクセス(http://あどれす:7080/gitbucket)
##4.1. おしまい
【Amazon SES ✕ ムームードメイン】Domainのstatusがpending verificationから一向にverifiedにならない


そして数日後にfailメールがくるのですが、、笑

今回の要件

* ムームーDNSを利用
* Gmailの迷惑メール対策等がうざいのでAmazon SESを利用
* その他AWSサービスは使用していません

設定手順は色々なサイトで紹介されているので書きませんが、
普通にtxtレコードとCNAMEを追加して行く感じです。

## pending verificationからverifiedにならない・・・

承認は72時間以内と書かれてますが、私の場合、正しい設定をすると5分くらいで承認されました。

結論言うとfailした後に送られてきた下記のリンクがすべてなのですが、英語なので軽く解説します。
http://docs.aws.amazon.com/ses/latest/DeveloperGuide/domain-verification-problems.html


とりあえずレコード追加したけど、うまくいってるかわからない方は下記でチェックしてみましょう。

```console
$ nslookup -type=NS <domain>
```

これでnameserverがわかると思います。
ムームーだとdns01.muumuu-domain.com.とかですかね。

そして

```console
$ nslookup -type=TXT  _amazonses.<domain> <name server>

# 例えば
$ nslookup -type=TXT  _amazonses.example.com dns01.muumuu-domain.com.
```
とやると、valueにセットした値が返ってくる、はず。


## valueにセットした値が返ってこない！

という方は、_amazonses.example.comのところを、
_amazonses.example.com.example.comと2回続けて書いてみてください。

これで返ってきたら私と同じ原因です。このせいで一向にverifiedされませんでした。

先ほどのAmazonのリンクにもある例なのですが、
__ムームードメインはtxtレコードの場合、nameの終わりにドメイン名をappendする__ 
という仕様らしく、、

なので、txtレコード登録時に、nameには「_amazonses」とだけ登録するようにするとうまくいきます。


## それでも解決しない方

ちょっと私にはわかりませんが、[先ほど貼ったリンク](http://docs.aws.amazon.com/ses/latest/DeveloperGuide/domain-verification-problems.html)が詳しいので
こちらに解決策がある可能性が高いです。
まずはがんばって翻訳して読んでみてください！


### 2014/12/07追記
DKIMについても上記と同じです。txtレコードだけかと思ってましたが、CNAMEでもムームードメインの場合はお尻にドメイン名がappendされるようです。
AnsibleのFact Cachingを使う

この記事は [Ansible Advent Calendar 2014](http://qiita.com/advent-calendar/2014/ansible) の3日目の記事です。

> **注意**
> 初出時まったくのデタラメ書いていました。申し訳ございません！

Fact Cachingとは、Ansible 1.8から導入された機能で、Factを他のホストからも使えるようにする機能です。

webサーバーとdbサーバーの２つがあり、webサーバーはdbサーバーのアドレスを知らなければならない、としましょう。このためには、

``` {.sourceCode .yaml}
- hosts: db
  tasks: []

- hosts: web
  tasks:
	- template: ...
```

とし、webサーバーに対するtemplateで `{{hostvars['db']['ansible_os_family'] }}` としてdbのアドレスを使えます。

こうすればできますが、webサーバーに対するplaybookなのにまずdbサーバーに対して実行しなければなりません。Fact Cachingは一定時間取得したFactをキャッシュしておくことで、dbサーバーに対するplaybook実行をする必要がなくなります。

Fact Cachingを使ってみる
------------------------

デフォルトでは無効化されているので、以下の設定をansible.cfgに記載します。

``` {.sourceCode .ini}
[defaults]
fact_caching = redis
fact_caching_timeout = 86400 # seconds
```

キャッシュしたfactを保存する場所は現在のところredisのみです。

redisに保存する
---------------

redisを使うには、redisのpythonライブラリを入れる必要があるので、

``` {.sourceCode .bash}
pip install redis
```

する必要がります。

ちなみにredisには以下の２つのkeyが登録されるようです。

-   "ansible\_cache\_keys"
-   "ansible\_factstargetmachine"

ファイルに保存する
------------------

ドキュメントには書かれていませんが、redisの他に

-   jsonfile
-   memcached
-   memory

が使えます。このうちjsonfileを使うにはこうします。

``` {.sourceCode .ini}
[defaults]
fact_caching = jsonfile
fact_caching_connection = /tmp/cache
fact_caching_timeout = 86400 # seconds
```

が、まだこの辺りは公式ではないので流動的なのと、日本語が入っていると

<https://github.com/ansible/ansible/blob/60b51ef6c3e4eeca5ee1170ba32bc39284db97ae/lib/ansible/utils/__init__.py#L232>

のあたりでJSONを書き出せずにこけたりするので、しばしお待ちください。
([Issue](https://github.com/ansible/ansible/issues/9700) あげ中)
[iOS8] Swiftで文字列を初期化（空に）する方法

Swiftで文字列を初期化（空に）する方法をサンプルコードを利用して説明します。

方法としては、3つあります。
・型を宣言し直す
・””を代入する
・nilを代入する

<pre class="lang:swift decode:true ">var str = "Hello World!"
str = ""           // ""
str = "Hello World!"
str = String()     // ""
</pre>
[iOS8] Swiftでデバッグ出力する方法

Swiftでデバッグ出力する方法と表示形式を、サンプルコードを使って説明します。
ojective-cではNSLog()を利用していましたが、ここではprintln()を利用します。

また、swiftではバックスラッシュを使って、改行やダブルクォーテーションなどの表示が可能になりました。
&nbsp;<h2>関数：print, println, NSLog</h2><pre class="lang:swift decode:true"> print("Hello, ") // Hello,
 print("world")   // World</pre><a href="http://tech.eversense.co.jp/wp/wp-content/uploads/2014/11/f290e53d765657e3dd12c64f4ed7c48e.png"><img class="alignnone size-full wp-image-899" src="http://tech.eversense.co.jp/wp/wp-content/uploads/2014/11/f290e53d765657e3dd12c64f4ed7c48e.png" alt="スクリーンショット 2014-12-03 10.08.15" width="204" height="98" /></a>
&nbsp;
&nbsp;
<pre class="lang:default decode:true"> println("Hello, ") // Hello, + 改行
 println("world")   // world  + 改行</pre><a href="http://tech.eversense.co.jp/wp/wp-content/uploads/2014/11/036fbd6603f5996a73beee39c0a30a3a.png"><img class="alignnone size-full wp-image-900" src="http://tech.eversense.co.jp/wp/wp-content/uploads/2014/11/036fbd6603f5996a73beee39c0a30a3a.png" alt="スクリーンショット 2014-12-03 10.08.38" width="168" height="110" /></a>
&nbsp;
&nbsp;
<pre class="lang:swift decode:true "> NSLog("Hello, world") // 2014-11-25 15:32:56.425 Swift-Debug[45312:1978824] Hello, world
</pre>&nbsp;<h2>改行：\n, println</h2><pre class="lang:swift decode:true">println("Hello,")        // Hello,
print("world")           // world

// \n
print("Hello, \nworld")  // Hello,
                         // world 
</pre>&nbsp;<h2>\\\：バックスラッシュ</h2><pre class="lang:swift decode:true">print(" \\\ Hello, world \\\ ")  // \ Hello, world \
</pre>&nbsp;<h2>\t：タブスペース</h2><pre class="lang:swift decode:true">print(" Hello,\tworld  ")  // " Hello,    world "
</pre>&nbsp;<h2>\"：ダブルクォーテーション</h2><pre class="lang:swift decode:true">print(" \" Hello, world \" ")  // " Hello, world "
</pre>&nbsp;<h2>\'：シングルクォーテーション</h2><pre class="lang:swift decode:true">print(" \' Hello, world \' ")  // ' Hello, world '
</pre>&nbsp;<h2>変数：string, int, double, bool</h2>bool型はNSLog()や、文字列として出力してもtrue, falseと表現されます。  
<pre class="lang:swift decode:true">// string
let test = "100points"
println("result : " + test)  // result : 100points
println("result : \\(test)")  // result : 100points
 
// Int, double
let intPoint    = 100
let doublePoint = 100.10
println("result : \\(intPoint) points")    // result : 100 points
println("result : \\(doublePoint) points") // result : 100.1 points
 
// Bool
let yes = true
let no  = false
println(yes)     //true
println(no)      //false</pre>
&nbsp;
Javaのプロジェクトで使う.gitignore


毎回書くのめんどくさいんでまとめます。
ベースはGithubのgitignoreから。

```

# Java
*.class
*.jar
*.war
*.ear

# Eclipse
.project
.classpath
.settings

# Idea
.idea
*.iml
*.iws
*.ipr

# OS
Thumbs.db
.DS_Store

# Gradle
.gradle
!gradle-wrapper.jar

# Maven
target

# Build
out
build
bin

# Other
*.log
*.swp
*.bak

```

jarファイルは基本入れないんですけど、例外的に追加したいものは除外します。

```
!gradle-wrapper.jar
```
Skype (Mac) の自動ボリューム調整を強制OFFする方法


元記事
http://ja.katzueno.com/2014/12/3323/

Skype は自動的に入力ボリュームを調整してくれますが、時々煩わしい時があるので、それを、Skype 全体的に OFF する方法です。

1. Skype を終了
1. `/Users/[自分のアカウント]/Library/Application Support/Skype/shared.xml` をエディタで開く
1. `<VoiceEng>` という部分を探す
1. そこにある `AGC`というオプションの値を 1 から 0 にする

	```xml:shared.xml
	<AGC>
		0
	</AGC>
	```
1. Skype を起動

元に戻したい時はAGCの数値を`1`に戻せばよいです。

[参考：Skype ユーザーフォーラム](http://community.skype.com/t5/Mac-archive/Input-volume-setting-adjusted-automatically-by-Skype/td-p/62678)
どうやってdockerのコンテナに入ればいいですか？

はじめに
====

少しdockerを触っていると、どこからか小学校4年生らしき声が聞こえてくると思います。

> どうやってdockerのコンテナに入ればいいですか？

これにざっくり答えてみたいと思います。

##SSHは使ってはいけないらしい

仮想OSと同じように、SSHで接続すればいいんでしょ？
そう思ってたけど違うみたいです。

ざっくり言うと、

* コンテナ内には必要なもの（例： phpとかmysqlとか）だけを入れたい。接続するためだけにSSHは入れたくない。

という考えみたいです。

詳しくをこれを読んでください。
[Dockerコンテナ内でSSHDを実行してはいけない理由](http://postd.cc/docker-ssh-considered-evil/)

##ではどうすればいいの？

ぐぐる。 <code>nsinit</code> か <code>nsenter</code> のどちらかを使えばいいと分かる。

なるほど！

##nsinitとかnsenterって何？

今回はやりません（＝よく分かっていない）。良い説明の記事とかあったら誰か教えてくれると助かります。

##nsinitもしくはnsenterの入れ方

* 既にどちらかが入っているOSを使う！

* それ以外は下記の記事を見てがんばって入れる。（結構面倒くさいと思います。）
[RHEL/CentOS 6で Docker に nsinit/nsenter する](http://qiita.com/comutt/items/2f873a0e7eaddd3f647e)
[Dockerコンテナに入るなら SSH より nsinit が良さそう](http://mizzy.org/blog/2014/06/22/1/)

##コンテナに入ってみよう！

1、 エイリアスを使って簡単にしましょう。~/.bashrc に下記のシェルスクリプト関数を記載するか、/etc/profile/ディレクトリ内にdocker.shとか適当に名前付けてファイルを置きましょう。

* nsenterの場合

    <pre>docker-attach()
    {
      pid=$(docker inspect --format '{{.State.Pid}}' $1)
      sudo nsenter --target $pid --mount --uts --ipc --net --pid
    }</pre>

* nsinitの場合

    <pre>docker-attach()
    {
      id=$(docker inspect --format '{{.Id}}' $1)
      root=/var/lib/docker/execdriver/native/$id
      sudo sh -c "cd $root && $GOPATH/bin/nsinit exec $2"
    }</pre>

2、 <code>docker ps</code> でコンテナIDを取得します。
3、 下記のいずれかの方法で、コンテナIDを引数にして実行すればOKです。

* nsenterの場合
<pre>docker-attach [コンテナID]</pre>

* nsinitの場合
<pre>docker-attach [コンテナID] /bin/bash</pre>

おわりに
====

Docker1.3以降の場合は下記の<code>docker exec</code>でコンテナに入れるので、この記事のことは全て忘れてください（号泣）
[コンテナに入りたい？それ docker exec でできるよ](http://qiita.com/yosisa/items/a5670e4da3ff22e9411a)

##参考資料
docker-attachのシェル関数は下記からもらいました。
https://gist.github.com/chidakiyo/478c1f74f5097dd832c7
https://gist.github.com/yukinagae/d7368e15f135a8337171
[iOS8] Swiftで辞書型(Dictionary)を初期化する方法

Swiftで辞書型配列を初期化する方法をサンプルコードを利用して説明していきます。

基本的に初期化には2パターンあります。

<h3>変数を新規生成</h3>
<pre class="lang:swift decode:true">var dic  = [String: Int]()                    // 0key/value pairs

let dic2 = ["one": 1, "two": 2, "three": 3]   // ["one": 1, "two": 2, "three": 3]
</pre>
dicが初期値無し、dic2は初期値有りです。

<h3>[ : ]で上書き</h3>
<pre class="lang:swift decode:true">var dic3 = ["one": 1, "two": 2, "three": 3]  // ["one": 1, "two": 2, "three": 3]

dic3     = [:]  // 0 key/value pairs</pre>
&nbsp;
baserJSでYouTubeを埋め込む

コーポレートサイトにちょうどいいJavaScriptライブラリ **baserJS** の解説記事です。

Webサイトと詳しいAPIリファレンスはこちら [baserJS Webサイト](http://baserproject.github.io/baserjs/)

## YouTubeを埋め込む

※クラス名・jQueryのセレクタは任意です。仮に`youtube`とします。

### 基本

基本的にこれだけ。`data-id`にYouTubeの動画IDを設定します。

```html
<div class="youtube" data-id="FUgM105uN4c" data-width="1920" data-height="1080"></div>
```

```js
$('.youtube').bcYoutube();
```

### 再生リストに対応する

（※ v0.0.16-alphaで実装中、v0.1.0ではきちんと実装予定）

HTML側で`data-id`にYouTubeのIDをカンマ区切りで設定します。

```html
<div class="youtube" data-id="FUgM105uN4c,KAuzzR56KvU" data-width="1920" data-height="1080"></div>
```

### 表示やコントールを変える

JS側でオプションで指定します。

```js
$('.youtube').bcYoutube({
	rel: false,
	autoplay: true,
	stopOnInactive: true,
	controls: false,
	loop: true,
	showinfo: false
});
```

#### オプション

|プロパティ|型|初期値|説明|
|---|---|---|---|---|
|rel|boolean|false|関連動画を再生後に表示させるかどうか|
|autoplay|boolean|true|自動再生させるかどうか|
|stopOnInactive|boolean|false|ウィンドウがアクティブでなくなった時に再生を停止するかどうか|
|controls|boolean|false|コントロールを表示させるかどうか|
|loop|boolean|true|ループ再生するかどうか|
|showinfo|boolean|false|タイトル・動画情報を表示させるかどうか|

* * *

次回は YouTube動画を背景にする方法 を解説します。
【スマートフォンではなく】パソコンが始める Prolog 【インストール編】

# 【スマートフォンではなく】パソコンが始める Prolog 【インストール編】

Prolog Advent Caldener 2014 、  [2日目] はお楽しみいただけましたでしょうか。

さで、 [1日目] は [Ideone] というサービスを利用すると、スマートフォンから [Prolog] が楽しめることをあなたにお伝えしました。

しかしながら、パソコンをお使い……いや失礼、パソコンそのものであるあなたには、[Ideone] は少しまどろっこしかったかもしれません。

そこで、今回はパソコンであるあなた自らに Prolog をインストールする方法をご紹介いたします。

> :memo: *インターネットやジャバそのものである方には対応しておりません。あからじめご了承ください。*

今回、あなたにインストールして頂くのは諸事情により、 [SWI Prolog] という Prolog 処理系です。

## あなたが Debian 系 Linux Distributionの場合

もしあなたが Debian系(または Ubuntuのような) Linux であれば、もはや Prolog はあなたの手中にあるようなものです。

端末を立ち上げ……失礼、あなた自身を開き、以下のコマンドを入力してインストールしてみましょう。

```shell
$ sudo apt-get update
$ sudo apt-get -y install swi-prolog
```

インストール済みの確認は swipl コマンドで確認するとよいでしょう。

```shell
$ swipl --version
SWI-Prolog version 5.10.4 for amd64
```

> :memo: version 5.10.4 の部分はあなたの環境により異なるかもしれません

----

> :memo: もし swi-prolog の「安定した最新版(stable)」や「開発版(Development )」がインストールしたければ、[SWI-Prolog 公式サイト](http://www.swi-prolog.org/build/Debian.html) が参考になることでしょう。
> :memo: 皮肉にもあなたが CentOS 場合には、`apt-get` では間に合わないでしょう。 [SWI-Prolog 公式サイトのインストール方法](http://www.swi-prolog.org/build/Redhat.html) が参考になるかもしれません。

## あなたが Windows の場合

あなたがWindowsであるならば、 [SWI-Prolog 公式サイト](http://www.swi-prolog.org/download/stable) より以下のようにPrologをダウンロードするとよいでしょう。

![2014-12-03_swi-prolog-windows02.jpg](https://qiita-image-store.s3.amazonaws.com/0/42096/6ef50cb0-4456-e837-2e93-b81b3f568264.jpeg)

ダウンロードしたのちに適当にインストールしましたら、「アプリ」や「スタートメニュー」などから `Prolog` を探し、実行してみましょう。

![2014-12-03_swi-prolog-windows03.png](https://qiita-image-store.s3.amazonaws.com/0/42096/a768afd7-0471-18b9-5dde-6ff115c8d150.png)

OK、以下のような対話型の画面が現れたならば、問題ないでしょう。

![2014-12-03_swi-prolog-windows01.png](https://qiita-image-store.s3.amazonaws.com/0/42096/b7bc3237-9f7e-9a9f-6842-eb1401395ded.png)



----

> :memo:  もし幸いなことに あなたが Windows 8 以降ならば下記のように `CTRL+Q` キーから `Prolog` を探すと「早い」かもしれません。
> 
> ![2014-12-03_swi-prolog-windows04.png](https://qiita-image-store.s3.amazonaws.com/0/42096/57aece62-e5ff-a14b-493a-68a1fd349e53.png)

## あなたが Mac OS Xの場合

あなたが Mac OS Xの場合は、OS X一族の間で `Homebrew` と呼ばれている器官 － 恐らくここを見ているあなたはご存知でしょう － を利用することで、[SWI Prolog] が[インストールできるとの情報](http://www.swi-prolog.org/build/macos.html)がありました。

```
brew install swi-prolog
```

実のところわたしの親族には Mac OS X はおらず、残念ながら動作確認までは行えませんでした。

わたしの代わりに、ぜひあなた自身の目で確かめてみてください。


----

もしこのまま人類が滅ばず、あなたというパソコンも壊れていなければ、
次回はインストールしたPrologの「動作確認」記事をお目にすることでしょう。

それでは、今回はこの辺で失礼いたします。

![man-148339_320.png](https://qiita-image-store.s3.amazonaws.com/0/42096/e7c449dd-2208-0e2c-6e9a-932a32b5a717.png)


[Prolog]: http://ja.wikipedia.org/wiki/Prolog
[Ideone]: http://ideone.com/ "Ideone.com - Online Compiler and IDE"
[SWI Prolog]: http://www.swi-prolog.org/
[1日目]: http://qiita.com/toby_net/items/1f4cb7c780b136ca1552
[2日目]: http://qiita.com/mandel59/items/0111154e5dbeb537ec32
【FileMaker】日付などの関数・計算

元々FileMakerな人ではなかったので、最初はFileMakerでフツーに日本語がファイル名や引数に使えたりするのがアウェイ感漂っていたのですが、今では平気です。
でも、まだ慣れないのが日付です。

ここでまとめておきます。

* 当日を求める
    * Get(日付)
* 当年を求める
    * Year(日付)
* 去年を求める
    * Year(日付) - 1
* 来年を求める
    * Year(日付) + 1
* 曜日（日本語）を求める
    * DayNameJ(日付)
* 当日を含んだ１週間を検索する
    * DayOfWeek(Get(日付)) + 1  & "..."  &  Get(日付) - DayOfWeek(Get(日付)) + 7
* 当日から数えて先週を検索する
    * ( Get ( 日付 ) - DayOfWeek ( Get ( 日付 ) ) - 6 ) & "..." & Get ( 日付 ) - DayOfWeek ( Get ( 日付 ) )
* 当日から数えて来週を検索する
    * Get ( 日付 ) - DayOfWeek ( Get ( 日付 ))  & "..." & ( Get ( 日付 ) - DayOfWeek ( Get ( 日付 ) ) + 6 )
* 月初
    * Date(Month(Get(日付));1;Year(Get(日付)))
* 月末
    * Date(Month(Get(日付))+1;0;Year(Get(日付)))


よくFileMakerを使わない技術者（例えばJavaな人とか）から「この日付っていうところには何を入れればいいの？」と聞かれます。
FileMaker屋さん以外から見ると、「日付」と書いてあったら「きっと日付関数を使って当日を求めてから代入するんだ」と思われがちですが、

**日付**

と書くだけです。
日本語で

**日付**

と書くだけなんです！

本家の日付関数については、こちらから。
[FileMaker 日付関数一覧](http://www.filemaker.co.jp/help/html/func_ref1.31.12.html#774485)
bundle install すると Could not find xxx in any of the sources と怒られる場合の対処法


## 問題

gitから新しくRailsアプリをチェックアウトしてきたり、Rubyのバージョンを上げたりして、 `bundle install` を実行すると以下のようなエラーが出る。
（`did_you_mean-0.8.0` の部分は状況によって変わる）

````
bundle install
Fetching gem metadata from https://rubygems.org/
Could not find did_you_mean-0.8.0 in any of the sources
````

## 原因

`Gemfile.lock` で指定されているgemのバージョンがyank（削除）されてしまっている。

## 確認方法

http://rubygems.org/ にアクセスして、問題が出ているgemを検索する。

エラーになっているgemのバージョンがリストになければyankされている。

例: http://rubygems.org/gems/did_you_mean

バージョン0.8.0がない。
![Screen Shot 2014-12-03 at 8.25.59.png](https://qiita-image-store.s3.amazonaws.com/0/7465/5ef22045-93e6-0732-c259-8fdbffe31de3.png "Screen Shot 2014-12-03 at 8.25.59.png")

## 解決策

対象のgemをupdateする。

````
bundle update did_you_mean
````

### 備考1

バージョンが大きく変わってしまう場合は後方互換性がなくなっているかもしれないので、`Gemfile`で適切なバージョンを指定してから `bundle update` する。

````
gem 'did_you_mean', '~> 0.9.0'
````

### 備考2

他にもyankされているgemがある場合は同時にupdateする。

**エラーの例**

````
bundle update did_you_mean
Fetching gem metadata from https://rubygems.org/
Could not find jpmobile-4.1.2 in any of the sources
````

**同時にupdate**

````
bundle update did_you_mean jpmobile
````

## 参考文献

- http://www.oiax.jp/books/rails3book/could-not-find-jquery-rails-2-0-0.html
IoTと聞いたので、WoTでもいいだろうと。

# IoTと聞いたので、WoTでもいいだろうと。

> https://twitter.com/okame_okame/status/539786746838282240
> というのを見たので。

音楽が好きなものです。

IoTと聞いて、インターネットを通じていろんなものをつなげればいいんだよね、じゃ。
というわけで、最近WoTに興味があるので、ブラウザとMIDIとOSCを繋ぐことなどについてツラツラ書いてみることに。

> 本日出勤中の通勤電車の中でしか書けないというタイムトライアルにつき、いろいろ乱雑なのでご容赦を。

## MIDI

MIDIはシンセとかを繋ぐプロトコルで、30年くらい前からあります。

[MIDI (wikipedia)](http://ja.wikipedia.org/wiki/MIDI)

なぜかMIDIというと、パソコンの横に白い小さな箱を繋いで、「ウチコミ」と呼ばれる何が楽しいんだかわからない作業をしたあげく、ヒット曲のカラオケをいかにリアルに作るか？というのが昔流行っていて。未だに何が楽しくてそんなことしてたのか、やって無かった人にはさっぱりな話で、MIDIの話をすると、その話をするオッサンばかりが近くに多くてあまり良い印象がありません。

しかし、そんな個人的な思いとは関係なく、実際のところは、もうえらく長い間、電子楽器を繋ぐためのプロトコルとして、多くの楽器に搭載されてきたわけです。不動の地位かと思いきや、しかし最近になって、アナログシンセ流行の影響か、なんとMIDIより古いCV/Gateという方式が一緒に復権してきた模様。どんどん新しい技術が生まれてるのに、不思議な話ですね。。。

まぁ、そんな具合で楽器界隈では少々立場が弱くなってんじゃね？と感じなくもないMIDIですが、Webに進出することで生き残りをかけてる模様。

[Web MIDI API](http://www.w3.org/TR/webmidi/)がそれです。またか。という話ですので、あまりここでは書きません。

参考リンクだけ貼っておきます。

- [Web MIDI API](http://www.w3.org/TR/webmidi/)
- [Web MIDI API (日本語)](http://g200kg.github.io/web-midi-api-ja/)
- [JavaScriptだけでMIDIで遊べる！最高に乱暴なWeb MIDI API利用方法](http://qiita.com/tadfmac/items/e26fdf1034ad6dad4504)

まぁ、個人的には白い箱で使うくらいならIoTみたいに、さっぱり別の何かで使っ方が面白いと思うわけです。

MIDIを使うメリットはUSBで直接ブラウザと繋がる（なんて乱暴な説明！）ところでしょう。

逆にデメリットは、音楽用に細かく送れる情報が決まっていて、あまり融通が効かないのと、送れる情報が少ないので細かいアナログセンサーの情報を送ったりするのにはあまり向かない、といったところでしょうか。

あと、Arduinoを使えば、USB-MIDIが簡単に作れるので、いろいろなヘンテコデバイスが簡単に作れるのもMIDIの使いどころといえそうです。

そのへんも、何度か書いてますので、ご興味のある方は見ていただけるとうれしいです。

- [超簡単！Arduino UNOをMIDIコントローラーにしよう！](http://qiita.com/tadfmac/items/9136f47ae1eea99a4ef7)
- [Arduinoで作るMIDIコン](http://www.slideshare.net/tadfmac/arduinomidi)

記事ではコントローラーのことしか書いてませんが、MIDIを受けて動くものももちろん作れます。
MIDIで動くIoT機器も作れると思いますよ！（強引w）

## OSC

さてOSCですが、こちらはMIDIに取って替わるぞ！と言ってどこぞの大学で作ってるプロトコルです。

[OSC (wikipedia)](http://ja.wikipedia.org/wiki/OpenSound_Control)

なんだろ、こっちはMIDIと違ってかなりルールが緩いです。

名前決めてサイズ決めて好きなデータ送れる、みたいな自由奔放な感じです。
iPhoneやiPadのコントローラ系のアプリなどでは結構使われてて、Max/MspとかProcessingとかやってる人にはお馴染みのプロトコルですが、いまいち流行ってない気がします。

> ルールが緩すぎて、結局上位プロトコルがないと機器間で互換性が保てないんですよね。。。
> IPベースというのもいいのか、わるいのか。。。といった部分が足をひっぱってるような。。。

これの使いどころですが、独自にこれからつなげる全ての機器をコレにルールを合わせる、みたいな使い方はあまり意味がなくて（そんなことならWebSocketを普通に使えばよいし）、最初からOSCに対応してる機器やアプリを普通にWebに繋いでいくのに使うと面白いんじゃないかと思っています。

WebでのOSCの使い方ですが、OSCのコントローラからWebへデータを送るような場合は、ブラウザでOSCを読む必要があります。
やり方はモハヨナオさんのblogを見てください。

[OSC in the browser / 音の鳴るブログ 鳴らないこともある](http://mohayonao.hatenablog.com/?page=1413890031)

一方、Webから普通にOSCに流すには、WebSocketを間に挟むと楽です。
こちらは、手前味噌ですが以前書いた[ブラウザからWebSocketとOSCを使ってMAXを操作してみる](http://qiita.com/tadfmac/items/319891223b88ab02b8a8)を見てください。

## まとめ

音楽好きなので身近なMIDIとOSCがWoTに使えないか考えてみました。
MIDIやOSCに対応したアプリや機器（楽器など）は結構多くて、しかも「繋がれば楽しい」モノが多いのが特徴！
というわけで、どんどん繋いでいきたいですね！

> もちろん、ブラウザと色々なモノを繋ぐには、MIDIやOSCだけでなく、WebSocketやhttpや、WebRTCなんかを組み合わせて使っていくことになります。そのあたりも機会があれば書いていきたいです。
[Swift] Alamofireのサンプルコード


[AlamoFire](https://github.com/Alamofire/Alamofire)の基本的な使い方のサンプルコードをいくつか。備忘録。

## GET

受信中のバイト数の表示付き。

```Swift
Alamofire.request(.GET, "http://example.com")
  .progress { (bytesRead, totalBytesRead, totalBytesExpectedToRead) in
    println(totalBytesRead)
  }
  .response { (request, response, data, error) in
    println(data) 
  }
```

## POST

```Swift
let param = [
   "param1":  "hoge",
   "param2":  "moge",
]
        
Alamofire.request(.POST, "http://example.com", parameters: param)
```

## ファイルアップロード

```Swift
// リソースファイルをアップロード
let fileURL = NSBundle.mainBundle().URLForResource("data", withExtension: "zip")
        
Alamofire.upload(.POST, "http://example.com", fileURL!)
  .progress { (bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) in
    println(totalBytesWritten)
  }
  .response { (request, response, data, error) in
    println(data) 
  }
```

## タイムアウト付きGET

```Swift
var alamofireManager : Alamofire.Manager?

func some(){
  let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
  configuration.timeoutIntervalForResource = 2 // seconds

  self.alamofireManager = Alamofire.Manager(configuration: configuration)
  self.alamofireManager!.request(.GET, "http://example.com/")
    .response { (request, response, data, error) in
      println(data) 
    }
}
```

## 参考文献

* https://github.com/Alamofire/Alamofire
* http://blogger.tempus.org/2013_11_01_archive.html
Unityのバージョンを上げたらuv座標を変更するアニメーションがうまくいかなくなった

Unityのバージョンを上げてなかったので一気に4.6にしたときにuv座標を変更するアニメーションがうまく動かなくなった。
具体的にはuv座標を1以上の値に設定したときにテクスチャがリピートしてくれなくなった。
テクスチャの`Texture Type`を`Texture`にした後`Wrap Mode`を`Repeat`にしたらうまく動くようになった。

## 参考
[Unityのチュートリアル](http://japan.unity3d.com/developer/document/tutorial/2d-shooting-game/game/06.html)
[Textureのリファレンス](http://docs-jp.unity3d.com/Documentation/Components/class-Texture2D.html)
Titanium + Alloy + napp.alloy.adapter.restapiで作る簡単Qiitaビューワーアプリ応用編（ページネーション機能の実装）

[Titanium Advent Calendar 2014](http://qiita.com/advent-calendar/2014/titanium)の3日目です。

[TitaniumMobile勉強記](http://h5y1m141.hatenablog.com/)というブログで毎年Titanium Advent Calendar 書いてますが今回はQiitaの方にTitanium Advent Calendar 出来たのと最近の流れでTitanium関連ネタがQiitaに集約されてきてるので今年はこっちに書くことにします

## 前置き

今年の6月にフリーランスになって、仕事でちょっとTitaniumで開発もできるようになったし、その辺りのことでも・・と思ったのですが、それは自分のブログに書くことにして、ひとまず技術ネタを書きます。

ネタとしては[Titanium + Alloy + napp.alloy.adapter.restapiで作る簡単Qiitaビューワーアプリ](http://qiita.com/h5y1m141@github/items/c343ea92181cbb0fb2c2)の続編です


## やりたいこと

前回は単純にQiitaのAPIにアクセスして取得しただけでしたが

https://qiita.com/api/v1/tags/qiita/items?page=2

みたいに2ページ目の投稿情報を取得するような機能が実装されてないのでそこについて解説します。

### 結論だけ知りたい人

先に書いてしまうと、呼び出す側のControllerで、urlparamsというオプション項目をつけて


```coffeescript

qiitaItems = Alloy.createCollection 'qiita'
qiitaItems.fetch
  urlparams:
    page     : 2
  success: () ->
    # 成功時の処理を書く

  error: () ->
    # 失敗時の処理を書く

```

のようにすればOKです

## 上記のurlparamsについての解説

ここから解説というか、このパラメーターをどのように見つけたのか順番に触れていきます

### そもそもの話ですがページネーションについての実装方法について解説がない・・・

[GitHubのnapp.alloy.adapter.restapi](https://github.com/viezel/napp.alloy.adapter.restapi/)さんのREADMEを見る限りでは、パラメータの渡し方について記載がありません。。

色々カンでやっていたのですが、中々解決方法がわからなかったので、素直にソースコードを読むことにしました

### 関連しそうなコード

全部をしっかり読んでないですが以下のあたりが関連するのかなと思いました。

140行目あたりのmethodMapの所で、HTTP Methodとの対応処理っぽいことをやっているようでした。ひとまず今はGETメソッドのクエリーをどうやって渡すのか知りたいので、GETに対応するreadという所に注目

```js
// 140行目あたり
	// REST - CRUD
	var methodMap = {
		'create' : 'POST',
		'read' : 'GET',
		'update' : 'PUT',
		'delete' : 'DELETE'
	};
```

230行目あたりでこのような処理があり、case 'read'が関連するようでここを読み込むことにしました

```js

	switch(method) {
		case 'create' :
		// 中略 
		case 'read':

```

240行目で

```js
			if (params.urlparams) {
				// build url with parameters
				params.url = encodeData(params.urlparams, params.url);
			}
```
という処理があります。

コメントに**build url with parameters**ということが書かれており、urlparamsというオプションを渡してあげると、イイ感じにパラメータを引き渡してくれそうな予感がしました。

そこで呼び出す側のControllerから

```coffeescript

qiitaItems = Alloy.createCollection 'qiita'
qiitaItems.fetch
  urlparams:
    page     : 2
  success: () ->
    # 成功時の処理を書く

  error: () ->
    # 失敗時の処理を書く

```

のようにしてあげることで意図したとおりに２ページ目の投稿情報を取得してくれます。

また、urlparamsにpageというパラメーターを渡すだけではなく

```coffeescript

qiitaItems = Alloy.createCollection 'qiita'
qiitaItems.fetch
  urlparams:
    page     : 2
    per_page : 5
  success: () ->
    # 成功時の処理を書く

  error: () ->
    # 失敗時の処理を書く

```

のようにしてあげることで、１ページあたりの取得件数を５件に絞り2ページ目の投稿情報を取得してくれます。QiitaのWebAPIの仕様でデフォルトの取得件数は20件になってます。くわしくは[Qiitaの開発者向けのドキュメントサイト](https://qiita.com/docs)をご覧ください

![shot-2014-12-01-7.01.13.png](https://qiita-image-store.s3.amazonaws.com/0/10187/aa3eb9df-962c-2a59-83fb-2a1f1cd6fda9.png)

## まとめ

napp.alloy.adapter.restapiは便利だけど、ページネーションどうやって実現するのかドキュメントに記載はありませんでした。ただソースコード読んだら意外と簡単に使い方がわかりました。

ネイティブのモジュールのソースコードを読むのはちょっと敷居がたかいかもしれませんが、JavaScriptで書かれたライブラリならTitaniumでの開発の延長線上でなんとか理解できるケースがあるのかなと考えて今回その辺りのアプローチ方法についてもご紹介してみました。


明日は、ユーザ会会長の[yagi_さん](http://qiita.com/yagi_)がPubNubを使ってリアルタイムメッセージング（簡単）について書くようなので、楽しみですね！
ChromeのDeveloper Toolsを活用する

Webサイトにデータがあるけどプログラムから使いやすいデータじゃない。
そんなときはDeveloper Toolsを使用すると楽にスクレイピングできます。
以下の記事が参考になります。

[Chromeコンソールでお手軽クローリング](http://qiita.com/cognitom/items/babefa7b85ffc050d4bd)
[意外と知らないChrome Developer Toolsの便利な機能](http://qiita.com/grapswiz/items/1e48815f8b6c921c2f1c)

# 個人的に便利だと思うこと

よく使うけどあまり知られていないと思われるのが`$0`を使用した要素へのアクセスです。

![0.png](https://qiita-image-store.s3.amazonaws.com/0/42193/7ea00c35-2e9b-c85e-aa4d-1dafa756477f.png)

上の図のようにElementsのパネルで選択した要素に`$0`でアクセスすることができます。
「そういやこのサイトのログインパスワードってなににしてたっけ」というときにパスワードの部分を選択して`$0.value`を実行することで何を設定していたか調べることもできます。(Chromeの設定からも調べることができますが)

![1.png](https://qiita-image-store.s3.amazonaws.com/0/42193/fd51673d-6c5a-3815-1372-ca09d6a26270.png)


設定のLog XMLHTTPRequestsにチェックを入れておくことでXMLHTTPRequestが行われたときにコンソールに表示されるようになります。

![2.png](https://qiita-image-store.s3.amazonaws.com/0/42193/3f362c95-33d8-e462-f52f-f68ddedf20e6.png)


Log XMLHTTPRequestsにチェックをいれた状態でqiitaの投稿画面でDeveloper Toolsを開くと`http://qiita.com/api/preview`にリクエストを送っていることがわかります。
さらにこのurl部分をクリックするとNetworkパネルの該当する部分を見ることができるのでどんなデータを送っているのかを調べることもできます。

![3.png](https://qiita-image-store.s3.amazonaws.com/0/42193/cc4fd482-def3-c26c-00e0-b8bb7a01f286.png)

# Qiitaの新着をスクレイピングする
Developer Toolsを用いてQiitaの新着をスクレイピングしてcsvで保存してみます。

虫眼鏡のボタンを使い要素の構造を調ながらコンソールで実践していきます。

調べると`.activities`がアイテムのリストで`.item-box`がアイテムのコンテナ、`.user a`が投稿者、`.item-box-title h1 a`がタイトル、`.item-box_tagList a`がタグだということが判明します。
`.activities`を選択した状態で`$($0).find(".item-box")`を実行すると各アイテムを取ってくることができます。

よって以下のように書けば投稿者、タイトル、タグがコンマで区切られた文字列をとってくることができます。

```js
var csv = "";
$($0).find(".item-box").each(function(){
    var row = "" + $(this).find(".user a").text() + "," + $(this).find(".item-box-title h1 a").text();
    $(this).find(".item-box_tagList a").each(function(){
        row += "," + $(this).text();
    });
    csv += row.replace(/\s/g, "") + "\n";
});
csv;
```

![4.png](https://qiita-image-store.s3.amazonaws.com/0/42193/bb54a8c1-4e98-bdf3-0cf4-9bfd12492636.png)


ここまでくれば[javascriptからファイル保存ダイアログを出す](http://qiita.com/yaegaki/items/914ced7595f86eb00afd)を参考に以下のようにかけばcsvとしてダウンロードすることができる。(Mimeタイプに`text/csv`を指定しても拡張子がつかない為、ファイル名に拡張子を付けている。UTF-8で保存されるためエクセルで開くと文字化けする。)

```js
var a = document.createElement('a');
a.href = URL.createObjectURL(new Blob([csv], { type:"text/csv" }));
a.setAttribute('download', 'activity.csv');
a.dispatchEvent(new CustomEvent('click'));
```

![download.png](https://qiita-image-store.s3.amazonaws.com/0/42193/1b503f1d-3c73-4295-4131-9dcd002c1d61.png)


![csv.png](https://qiita-image-store.s3.amazonaws.com/0/42193/ca1f7399-69d9-3307-450f-7b6bbd6e0df9.png)
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

rbenv + ruby2.1の環境で,berkshelfでクックブックを取得しようとしたところ、表題のエラーが。内容は、証明書の検証がうまくいっていないというもの。原因は、検証に利用するCA証明書の指定ががうまくいっていないことが原因。

参考:http://d.hatena.ne.jp/riocampos+tech/20140408/ruby_reinstall_caused_by_openssl_vulnerability

やったこと

```bash
#opensslアップデート
$brew update
$brew upgrade openssl
$brew link openssl --force

#rbenvのrubyを再インストール
$env CONFIGURE_OPTS="--with-readline-dir=`brew --prefix readline` --with-openssl-dir=`brew --prefix openssl`" rbenv install -f 2.1.2

#バージョン指定
$rbenv local 2.1.2

#rubyで読み込むCA証明書のパス確認
$ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE"
# => "/usr/local/etc/openssl/cert.pem" 

#最新のCA証明書を取得し、上記パスに保存
#参考http://railsapps.github.io/openssl-certificate-verify-failed.html
$curl -O http://curl.haxx.se/ca/cacert.pem
$sudo mv cacert.pem /usr/local/etc/openssl/cert.pem

#環境変数SSL_CERT_FILEの設定

$echo "export SSL_CERT_FILE=/usr/local/etc/openssl/cert.pem" >> ~/.bash_profile

#設定読み込み
$source ~/.bash_profile

#確認
$env | grep SSL_CERT_FILE
SSL_CERT_FILE=/usr/local/etc/openssl/cert.pem

```
リクエストとトランスファー

[アプリケーションはオブジェクトグラフ](http://qiita.com/koriym/items/49c7f10bf6ce642e873e)の続きです。アプリケーションスクリプトを見ることでBEAR.Sundayの基本動作を解説します。


## 前回まで

1.オートローダーの登録

```php
require dirname(__DIR__) . '/vendor/autoload.php';
```

2.アプリケーションインスタンスの生成

```php
$app = (new Injector(new AppModule))->getInstance(AppInterface::class);
```

アプリケーションはスクリプトで利用するサービスを保持するだけのインスタンスです。

3.ルーター

```php
$request = $app->router->match($GLOBALS);
```

スーパーグローバル変数からマッチした`$request`を取得します。

## 4. リクエスト


ルーターでマッチした`$request`のリクエストメソッド、リソースパス、クエリーでページリソースへのリクエストをつくります。

```php
    $page = $app->resource
        ->{$request->method}         // 'get'
        ->uri($request->path)        // 'page://self/'
        ->withQuery($request->query) // []
        ->request();
```

上記のコードで作成されるのはリクエストです。

`request()`の前に`eager`をつければリクエストではなく、リクエストを行った結果が返ります。

```
->request(); // リクエスト
->eager->request(); //　リクエスト結果
```

リソースリクエストでページリソースは値を持ちます。

## 5.トランスファー

```php
$page()->transfer($app->responder);
```
ページリソースのリクエストを行い、アプリケーションが持つレスポンダー(`$app->responder`)を使ってクライアントに転送します。
（このデモはWeb用なのでheader関数でヘッダーを出力して、echoでコンテンツを出力しています。）

リクエストの処理中の例外はHTTPコードに準じたPHPの例外をキャッチして処理します。

アプリケーションの
「ページにリクエストが行われ、その表現結果が出力される」... アプリケーションスクリプトはこのHTTPリクエストの働きを単純に記述しています。

## リソースクラス

HelloWorldアプリのページリソースクラスです。

```php
<?php

namespace MyVendor\HelloWorld\Resource\Page;

use BEAR\Resource\ResourceObject;

class Index extends ResourceObject
{
    public function onGet($name = 'World')
    {
        $this->body['greeting'] = 'Hello ' . $name;

        return $this;
    }
}
```

GETメソッドの時に渡されたクエリー(`?name=Name`)を使い、自身のコンテンツ(`$this->body`)を返しています。クエリーがついていないときは`World`が使われます。

ルーターからディスパッチされて呼ばれる箇所でMVCフレームワークでいうとコントローラーに当たる箇所なのですがこれもリソースです。

 * リクエストオブジェクトを利用していない
 * リクエストメソッドを判別していない
 * 出力に対して無関心（出力を行っていない）
 * 責任を持つのは出力ではなく自身の構成

コントローラーと違うのはこんなところでしょうか。

他のリソースを扱う事もできるのでコントローラーとしての側面もありますが、そのドメインだけを取り扱うという点ではモデルのようでもあります。また実際そのまま出力できるのでレスポンスオブジェクトのようになものとも言えます。

## Object as a service

リソースクラスは統一されたメソッドを持ちPHP標準の順序順の引数ではなく名前付き引数で呼ばれます。`コード`、`ヘッダー`、`ボディ(コンテンツ)`の公開された(public)プロパティを持ちPHPのクラスとRESTのリソースが融合しています。

リソースオブジェクトは**サービス**として振舞います。アクセスするには通常のPHPシンタックスではなく、アプリケーションスクリプトでリクエストの時に使ったリソースクライアントを使ってアクセスします。

 * 統一されたメソッド
 * URI
 * クエリー（名前付き引数）
 * ステートレス

BEAR.Sundayのアプリケーションはこれらの**極小のPHPのサービス**を提供するリソースの集合です。

## まとめ

* アプリケーションスクリプトは起動から終了までの動作（ページがリクエストされその表現が転送されること）が記述されています。
* アプリケーションスクリプトにはMVCという３つのコンポーネントではなく、リソースというコンポーネントだけが登場しています。
* リソースはPHPのオブジェクトですがWebサービスのように振舞います。
* アプリケーションはリソースの集合です。
Flyway で SQL ベースの Migration を Gradle から行う．

以下は簡単なので SQLite ですが適宜 JDBC の classpath と url を変更．

```grooby:build.gradle
apply plugin: 'flyway'

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.flywaydb:flyway-gradle-plugin:3.1'
        classpath 'org.xerial:sqlite-jdbc:3.8.7'
    }
}

flyway {
    url = 'jdbc:sqlite:/path/to/sqlite/db/file'
    locations = ['filesystem:/path/to/migration/sql/files']
}
```
if-pythonのglobals()にもっと気を使わなくていいの？という話

## 問題

こんな感じで、vimscriptの中にpythonのコード書けるじゃないですか。

```vim
python3 << EOS
def check(path):
  print(path) # 何らかのチェックをしてると思ってくださいな
EOS

function! CheckSomething()
python3 << EOS
import vim
path = vim.eval('expand("%")')
check(path)
EOS
endfunction
```

で、こう書いた場合、 ``check()`` はグローバルに定義される訳ですよね。
ついでに ``path`` も、見た目上は ``CheckSomething()`` 内の変数ですがPythonの世界ではグローバルです。
なので、まったく別のプラグインのコードのどこかにpythonのコードが埋め込まれていて、そこで ``check`` という名前の関数なり変数なりが定義されていたら、それを読み込んだ時点で上の ``CheckSomething()`` は動かなくなってしまいます。

## 対応
グローバルでの名前の衝突を避けるために考えられる方法としてぱっと思いつくのはこんなとこでしょうか。

### プレフィックスをつける

  ```vim
  python3 << EOS
  def hogeplugin_check():
    """以下略"""
  EOS
  ```

### クラスに包む

```vim
python3 << EOS
class PyHogePlugin:
  @classmethod
  def check(cls):
    """以下略"""
EOS
```

### 別のファイルにcheck()を定義してモジュールとして読み込む

```vim
python3 << EOS
import sys
sys.path.append(...) # 参照パスを適当に追加
import pyhogeplugin  # pyhogeplugin.check() として呼ぶ
EOS
```

## 実際のところは？

と、上記のようなことをした方がいいんじゃないかと僕は思うのですが、有名どころのプラグインのコードを見てもその辺無頓着なのが多い気がします。
僕が考えすぎなのか、何か勘違いしているのか、やっぱり気をつけるべきなのか、よく分からないのでVimmerの人々に聞いてみたいところです。


※ python以外のif-XXXでも同じような話はあると思います
与えられたn個の数字から任意の2つの値の差が最小となる組み合わせを得る

ブラウザで開発者ツールのコンソールにはっつけて貰えば動きます。
数値変えたい場合は最後の配列を適当にいじってもらえれば。

```
(function (arr) {

	var min = {};
	min.balance = Infinity;
	var tmp;

	arr.sort(function (a, b) {
		return Number(a) > Number(b) ? 1 : -1;
	});

	for (var i = 0; i < arr.length - 1; i++) {
		tmp = Math.abs(arr[i + 1] - arr[i]);

		if (tmp < min.balance) {
			min.balance = tmp;
			min.num = arr[i + 1] + '&' + arr[i];
			if (tmp === 0) {
				return min.num + ':' + min.balance;
			}
		}
	}
	return min.num + ':' + min.balance;
})([2, 3, 5, 1, 23]);
```
Cocos Studioで生成した.csbをcocos2d-xに読み込んだ際に"libpng warning: iCCP: known incorrect sRGB profile"

#問題
Cocos Studioで生成した.csbをcocos2d-xに読み込んだ際に"libpng warning: iCCP: known incorrect sRGB profile"

#原因
Photoshop等で生成したPNGファイルを利用していると出る

>http://discuss.cocos2d-x.org/t/libpng-warning-iccp-known-incorrect-srgb-profile/12883

#解決方法
ターミナルでimagemagickを利用して、pngを変換しなおす

```terminal.app
mogrify -format png *.png
```

####おまけ：Homebrewimagemagickのインストール

```terminal.app
brew install imagemagick
```
WebCLのデモを動かす


# はじめに

CUDA & OpenCL Advent Calendar 2014の3日目です。

今回のAdvent Calendarでは、ブラウザ上でOpenCLと同様の機能を実現するWebCLについて3回ぐらいに分けて書いていこうと思いますが、初回の今回はWebCL自体の紹介や実行環境の準備、デモの紹介をしていきます。


# WebCLとは

Webがアプリケーションのプラットフォームとして成熟しつつある昨今、Webアプリケーションを高速化したいという要求も徐々に強くなってきたように感じます。

最近では、asm.jsなどのJavaScriptを高速化する仕組みや、Web WorkersなどのJavaScriptを並行動作させる仕組みも整備されてきました。
そのような他の技術に対して、WebCLは基本的にOpenCLのラッパーになっているので、デバイスで走るプログラムはネイティブアプリと同じものとなり、ネイティブコードが走ることやGPUなどのヘテロジニアス環境に対応できるという大きなメリットがあります。

セキュリティ上の問題や、コーディングの難しさ、代替手段の存在などからなかなかWebの本流までは道のりの長いWebCLですが、アプリケーションによっては、サーバー側が負担してきた演算リソースを、比較的余裕のあるクライアント側のブラウザ上でまかなうことができるようになるかもしれません。

# 実行環境の準備

さて、個人的に非常に期待を寄せているWebCLですが、2014年12月現在で主要なブラウザ(IE、Firefox、Google Chrome、Safari)で標準的にはサポートされていません。
いくつかWebCLを動作させる手段がありますが、FirefoxにNokiaの[WebCL extension](https://github.com/toaarnio/webcl-firefox)を使うのが簡単なように思います。

Firefoxのバージョンについて、[WebCLのWebサイト](http://webcl.nokiaresearch.com/)ではFirefox 30 ~ 35でテストされていると書かれています。
対応したバージョンのFirefoxを立ち上げたら、[リンク](http://webcl.nokiaresearch.com/extensions/firefox/multiplatform/latest/webcl-1.0.xpi)をポチッと押して出てくる指示に従ってextensionをインストールします。
インストールの許可やらブラウザの再起動やらをし終わればOKです。
[チュートリアルページ](http://webcl.nokiaresearch.com/tutorials/tutorials.html)に動作確認リンクがあるので、以下の様な表示がされるか確認しましょう。
![kobito.1417537165.165295.png](https://qiita-image-store.s3.amazonaws.com/0/4249/a00637d5-0db9-20ac-f4f2-02cce1572c3a.png "kobito.1417537165.165295.png")

Mac OS 10.10.1 & Firefox 34.0で動作確認できました。

他の実行環境としては、AMDが開発している[Chromium-WebCL](https://github.com/amd/Chromium-WebCL)なんかがあります。
また、ブラウザ上で動かすものではありませんが、NodeJS向けにWebCLと同等のJavaScript APIを提供する[node-webcl](https://github.com/Motorola-Mobility/node-webcl)がMotorolaによって開発されています。

ちなみに[WebCL Specification](https://www.khronos.org/registry/webcl/specs/latest/1.0/)のEditorがNokiaの人とAMDの人で、Workind DraftにはMotorolaの人も入っていたりします。

# デモを動かす

WebCLのデモで面白かったものを少しだけピックアップしてみます。

* [Path Tracing](http://webcl.nokiaresearch.com/smallptgpu/webcl-smallptgpu.html)

OpenCLデバイスの変更や、キー操作によるカメラの移動ができます。
カメラが動くと当然再描画が必要なんですが、デバイスがGPUだとなかなかサクサク描画してくれます。

![kobito.1417537881.922482.png](https://qiita-image-store.s3.amazonaws.com/0/4249/4f38f1c1-a9e0-a418-0946-101ba90339b6.png "kobito.1417537881.922482.png")

* [N-Body Simulation](http://webcl.nokiaresearch.com/RiverTrail/examples/nbody-webgl/NBody.html)

こちらは、JavaScript実装とWebCL実装で速度比較ができるようです。
JavaScript実装が結構早くてビビリます…。

![kobito.1417539049.759548.png](https://qiita-image-store.s3.amazonaws.com/0/4249/447b63ff-539e-5720-fb4a-3114028907cb.png "kobito.1417539049.759548.png")

これらを見てお分かりの通り、WebGLとバッファの共有ができるのでタフな計算をしながら描画するということがWebアプリでもできるようになっています。

その他のデモは[こちら](http://webcl.nokiaresearch.com/demos.html)から。

# おわりに

簡単な紹介だけでしたが、ブラウザ上でGPUコンピューティングをする魅力を感じてもらえれば幸いです。
次回からWebCLプログラミングの話に入っていきます。

CUDA & OpenCL Advent Calendar 2014の4日目は@gos_kさんです。
Church encoding の Haskell 実装

これ。
http://en.wikipedia.org/wiki/Church_encoding#Church_booleans

どうやら `True` とか `False` とかを関数（ラムダ式）だけで実現できるらしい。

# `True` と `False` と `Bool`
```hs
Prelude> let fTrue = \a b -> a
Prelude> let fFalse = \a b -> b
Prelude> let fBool = \f -> f True False
Prelude> fBool fTrue
True
Prelude> fBool fFalse
False
```

# `And` と `Or` と `Not` と `If`
```hs
Prelude> let fAnd = \a b -> a b fFalse
Prelude> fBool $ fAnd fTrue fFalse
False
Prelude> fBool $ fAnd fTrue fTrue
True
Prelude> fBool $ fAnd fFalse fTrue
False
Prelude> fBool $ fAnd fFalse fFalse
False
Prelude> let fOr = \a b -> a fTrue b
Prelude> fBool $ fOr fTrue fFalse
True
Prelude> fBool $ fOr fTrue fTrue
True
Prelude> fBool $ fOr fFalse fTrue
True
Prelude> fBool $ fOr fFalse fFalse
False
Prelude> let fNot = \p -> p fFalse fTrue
Prelude> fBool $ fNot fTrue
False
Prelude> fBool $ fNot fFalse
True
Prelude> fBool $ fNot (fAnd fTrue fFalse)
False
Prelude> let fIf = \p t e -> p t e
Prelude> fIf fTrue "hoge" "fuga"
"hoge"
Prelude> fIf fFalse "hoge" "fuga"
"fuga"
```

# `Pair` と `First` と `Second`
```hs
Prelude> let fPair = \a b -> \f -> f a b
Prelude> let fFirst = \f -> f fTrue
Prelude> let fSecond = \f -> f fFalse
Prelude> fFirst (fPair "aaa" "bbb")
"aaa"
Prelude> fSecond (fPair "aaa" "bbb")
"bbb"
```
Visual Studio の機能を呼び出すショートカット "クイック起動" の解説

Visual Studio には多くの便利な機能、オプション、テンプレート、メニューがありますが、機能が多く搭載されているがゆえに、探し出すのに手間がかかることもあります。
この手間を省くために [クイック起動] 機能が追加されました。クイック起動を使うことで目的のものを素早く検索・起動することができるようになり、生産性を高めることができます。

**具体的な手順**
1.Visual Studio を起動します。Visual Studio にフォーカスをあてた状態で、[Ctrl + Q] をキーボード上で押下します。 
2.[クイック起動] テキストボックスにフォーカスがあたります。
ここに任意の文字列を入力することで、その文字列に関連する Visual Studio の機能が検索されます。
 ![1[1].png](https://qiita-image-store.s3.amazonaws.com/0/34023/0590a2d4-0c39-8009-e258-21d9d8537fc1.png)
   
3.今回は例として、”行番号” と入力してください。 
4.“行番号” と入力すると、以下のように候補が表示されますので、[テキスト エディター → すべての言語 → 全般] をクリックします。
 ![2[1].png](https://qiita-image-store.s3.amazonaws.com/0/34023/b2e135b8-fc02-4c43-f0dc-249f716b2da3.png)

   
5.該当する項目を含む設定画面が表示されます。
![3[1].png](https://qiita-image-store.s3.amazonaws.com/0/34023/1d802484-936d-360d-1217-58557c2ea833.png)


参考) [MSDN ライブラリ: クイック起動](http://msdn.microsoft.com/ja-jp/library/hh417697.aspx)
はじめてのおぶじぇくとしこう

オブジェクト指向プログラミングの勉強に使用した本を紹介するアドベントカレンダーがあると聞いて！

![IMG_0107.jpg](https://qiita-image-store.s3.amazonaws.com/0/11233/e3301911-c0a5-9f61-2bd6-5492bba1c579.jpeg)
作ったアプリをブラウザ即見せでモチベーションアップ！！TestFlightよりお手軽なアプリ配布サービスappetize.io

by @mixiappwchr

![スクリーンショット 2014-12-03 0.40.50.png](https://qiita-image-store.s3.amazonaws.com/0/37731/e2a17449-eb98-940a-e987-9aa7595e373d.png)


SwiftからiOSアプリ開発を始めてもりもりアプリを作っている技術者も多いことかと思います。
ただやっぱり作ったアプリをだれかにみてもらわないとモチベーションがあがりませんよね？

TestFlightとか導入すれば少しは敷居は下がりますが、それでも作って即触ってもらうにはなかなか
ハードルがあったりします。
iPhoneを持っている人が周りにいなければなおさらですね。

そこでまだベータですが面白いサービスを見つけました


# appetize.io
https://appetize.io

このサービスはデバッグビルドでいいのでサーバーにアップロードすれば、なんとブラウザでシミュレータが動き、
確認できるというサービスです！

DEMO
https://appetize.io/demo
ブラウザでシミュレータが動いてますね！
![スクリーンショット 2014-12-03 0.41.07.png](https://qiita-image-store.s3.amazonaws.com/0/37731/66708b20-5954-e2b8-2c5f-1e84e6761086.png)


# 使い方


使い方は簡単
ビルドしたアプリは
~/Library/Developer/Xcode/DerivedData/<project-name>/Build/Products/Debug-iphonesimulator/<app-name.app>
以下にあるのですが、ここにあるビルドをzipなどで圧縮して

![スクリーンショット 2014-12-03 1.01.11.png](https://qiita-image-store.s3.amazonaws.com/0/37731/54044866-a23f-c430-d36e-970562871086.png)

でアップロードするだけです！
あとは送りたい相手のメアドをいれると、相手に確認用のリンクが届きます

サンプル
https://appetize.io/app/4h2k2hkp8mw21vbx2603k1v0hw

PCじゃないと重いし、パフォーマンス的は全く良くないですが、お手軽にみてもらう点ではTestFlightより大分簡単！

他にも色々な使い方ができそうです。
azure web site での簡単なログの取り方

[1日目](http://devadjust.exblog.jp/21354537/)、[2日目](http://takekazuomi.github.io/2014/12/02/introduction_to_azure_batch.html)とレベルの高い話が続いていますが、3日めはがっつりとレベルを落としていきます！

ということで、azure を利用し始めた時に、自分の中で一番困ったことをまとめました。

## 対象
+ [Azure Portal](https://manage.windowsazure.com/) から Websites を立ててみたことがある人
+ visual studio 2013 が入っている人
+ プログラムからログを出力したい人

## azure の右も左もわからなかった時に一番こまったこと
+ ログの出し方がわからなかった

## Websiteの仮想マシンは基本的に使い捨てである
そのため、ログのような捨てられると困るものは、`仮想マシン外のどこか` に保存しておく必要がある

今となっては当たり前だよね～、と笑って言えるのですが右も左もわからなかった当時はそこを理解しておらず、ぽっきりと心が折れました。豆腐メンタルすぎますね。

この過去はお墓まで持って行こうかとも思っていたのですが、世の中にはきっと同じ思いをしている人が数人はいるだろう、ということで カレンダーのネタとして放出することにしました。

## ログを出力するまでにやること
(`azure-advent-calendar-20141203.azurewebsites.net` に`debug`で発行するとする)
1. azure のポータルから構成タブをクリックする
![構成.PNG](https://qiita-image-store.s3.amazonaws.com/0/18789/b042da4e-6b8a-8edc-43b9-183ff6841e7c.png)
2. 
アプリケーション診断のアプリケーション ログ記録(ファイル システム)を`オン`に、ログレベルを`詳細`に設定し、保存する
![アプリケーションログを有効に.PNG](https://qiita-image-store.s3.amazonaws.com/0/18789/fbae0bc8-2c1e-fec5-0d3f-bd7ab7cf9b60.png)
![保存.PNG](https://qiita-image-store.s3.amazonaws.com/0/18789/ab5f297c-3af2-c472-404c-4e820f80497a.png)
3. 適当なコードで、ログを出力したい場所に`System.Diagnostics.Trace.WriteLine("log message")` を入れ、azureに発行する

```csharp
    // 例えば web api の getメソッドに仕込むとこんな感じ
    public class LogOutputController : ApiController
    {
        public string GetMessage(string msg)
        {
            // ここでログを出力
            Trace.WriteLine("get:message:" + msg);
            return msg;
        }
    }
```

## ログを確認するためにやること
azure上の`Trace.WriteLine` を通るような処理を何かしら実行する。
(今回の場合なら、[Apiを叩く](http://azure-advent-calendar-20141203.azurewebsites.net/api/LogOutput?msg=testmessage))
1. visual studio 2013 を立ち上げ、`表示` -> `サーバエクスプローラ` をクリックし、サーバエクスプローラを表示させる
2. `Azure/Websites/azure-advent-calendar-20141203.azurewebsites.net/Log Files/Application/[システムが生成したっぽい感じのファイル名].txt` を開く(Trace.WriteLine の実行後すぐに作成されるわけではないので、ない場合数分待ってから再度確認する)
![ログ.PNG](https://qiita-image-store.s3.amazonaws.com/0/18789/ef522794-f9a2-3797-5b25-e10d4101024f.png)
3. ログが出力されているので心が折れない
![outputlog.PNG](https://qiita-image-store.s3.amazonaws.com/0/18789/8438a0a4-00df-8e99-1f04-3b18a8cc873b.png)


### まとめ
ログの出力ができずに心が折れた人たちが、`もう一度azureを使ってみよう`という気持ちになってくれれば嬉しく思います。
PHP + TwistOAuthでタイムラインを読み込む最短パターン

こんにちは。Twitterを利用して協調フィルタリングを実装してみようと思いPHPに手を出すことにしました。
初めてでタイムライン読み込みさえハマってしまったので、反省程度に残しておきます。
動作確認やテンプレートにでもお使いください。

**（2014/12/03更新）** @mpyw 様から、TwistOAuthを利用したより良いコードを提示して頂いた為、誠に勝手ながらこちらで引用させて頂きたいと思います。

```php
<?php

require_once 'TwistOAuth.php';

function h($str, $double = true) {
    return htmlspecialchars($str, ENT_QUOTES, 'UTF-8', $double);
}

date_default_timezone_set('Asia/Tokyo');

$ck = '';
$cs = '';
$at = '';
$as = '';

try {
    $to = new TwistOAuth($ck, $cs, $at, $as);
    $statuses = $to->get('statuses/home_timeline', ['count' => '20']);
} catch (TwistException $e) {
    $error = $e->getMessage();
}

header('Content-Type: text/html; charset=utf-8');

?>
<!DOCTYPE html>
<html>
<head>
    <title>PHP TwistOAuth test</title>
</head>
<body>
<?php if (isset($error)): ?>
    <p style="color:red;"><?=h($error)?></p>
<?php else: ?>
    <ul>
<?php foreach ($statuses as $status): ?>
        <li style="margin:10px;">
            <ul>
                <li>名前 … <?=h($status->user->screen_name)?></li>
                <li>スクリーンネーム … @<?=$status->user->screen_name?></li>
                <li>現在地 … <?=h($status->user->location)?></li>
                <li>自己紹介 … <?=h($status->user->description)?></li>
                <li>時刻 … <?=date('Y/m/d H:i:s', strtotime($status->created_at))?></li>
                <li>本文 … <?=h($status->text, false)?></li> 
            </ul>
        </li>
<?php endforeach; ?>
    </ul>
<?php endif; ?>
</body>
</html>
```



（下記が元バージョンになります）

使ったもの: PHP、[twitteroauth (GitHub: abraham)](https://github.com/abraham/twitteroauth)

```php
<html>
<head>
    <meta charset="UTF-8">
    <title>PHP twitteroauth test</title>
</head>
<body>

<?php
// twitteroauth.phpを読み込む。パスは適宜変更してください
require_once("twitteroauth.php");

// Consumer key
$consumer_key = "コンシューマーキー";
// Consumer secret
$consumer_secret = "コンシューマーシークレット";
// Access Token
$access_token = "アクセストークン";
// Access Token Secret
$access_token_secret = "アクセストークンシークレット";

// OAuthオブジェクト生成
$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);

// ホームタイムラインを取得。JSONデコードは済んでいる
$req = $to->get("statuses/home_timeline",array("count"=>"20"));

// JSONの配列(結果)を表示
echo "<pre>";
var_dump($result);
echo "</pre>";

?>

</body>
</html>
```
WordPressでブログ開設してみた

こんばんは、ガーデンです。

@n0bisuke からアドベントカレンダーでブログを書けと言われたのですが

qiita投稿ネタが無くて焦ってます（汗）

とりあえずWordPressでブログを書こうと思い立ったので

その時の事を備忘録がわりに書きます。（低レベルですいません…！w）

# 【Wordpressでのブログ開設方法】

### １.アカウント作成はらくちん。（公式サイトで登録）

<a href="https://kikuchigarden.files.wordpress.com/2014/12/wordpress.png"><img src="https://kikuchigarden.files.wordpress.com/2014/12/wordpress.png?w=660" alt="wordpress" width="660" height="344" class="aligncenter size-large wp-image-116" /></a>


### ２.JETPACKをダウンロード。
#### （後ほど"Markdown記法"を使えるようにするため）

<a href="https://kikuchigarden.files.wordpress.com/2014/12/jetpack.png"><img src="https://kikuchigarden.files.wordpress.com/2014/12/jetpack.png?w=660" alt="JETPACK" width="660" height="352" class="aligncenter size-large wp-image-119" /></a>

### ３.Wordpressの設定で”Markdown記述を使用する。”にチェック。これだけで使える！

<a href="https://kikuchigarden.files.wordpress.com/2014/12/markdownsetting.png"><img src="https://kikuchigarden.files.wordpress.com/2014/12/markdownsetting.png?w=660" alt="markdownsetting" width="660" height="357" class="aligncenter size-large wp-image-121" /></a>

### ４.実際に書いてみる。

WordPressでは**"Markdown記法"**なるものが使われるらしいですね。

このサイトに色々書いてありました。

[**Markdown記法について**](http://jsdo.it/help/markdown)

とりあえず覚えておくとHTML周りを書く時とかに使えて便利そうなので少しずつ勉強してみたいと思います。

>強調「**」「_（アンダーバー）」で可能。

>センタリング：CENTERタグはmarkdownでは使えない。
> ⇒Div align = center...
でできた！
（最近ではCSSでやらないとDisられるらしいけどいいや）

>引用：「&gt;」インラインと同じ。

>見出し：「♯」♯の数だけH◯タグと同じになる。
>※半角スペース入れないと正しく反映されない！


これ確かに、覚えるとかなり早く書けそうな感じですね。


もっと覚えてブログとかもさくさく書けるようになったらいいなあ


自己満ですが始めたブログです。笑
http://kikuchigarden.wordpress.com/