OmniAICreator/Qiita-1.07M huggingface dataset:
Windows  が誰と時間同期してるか調べる


```w32tm /monitor /domain:hoge``` を使う。


```bat
C:\Users\foo>w32tm /monitor /domain:hoge
DCHOGE.hoge.local *** PDC ***[[::1]:123]:
ICMP: 0ms 遅延
NTP: +0.0000000s DCHOGE.hoge.local の時刻からのオフセット
RefID: ntp-b2.nict.go.jp [133.243.238.163]
階層: 2
dchoge2.hoge.local[10.203.143.10:123]:
ICMP: 6ms 遅延
NTP: +0.0017949s DCHOGE.hoge.local の時刻からのオフセット
RefID: DCHOGE.hoge.local [10.10.10.10]
階層: 3
```

```RefID``` の行に同期先が表示される。
2Dゲームでオブジェクトをつかんで、ドラッグで動かして当たり判定を出す方法

こんにちは、この記事では2Dゲームで１つのオブジェクトをつかんでドラッグで動かして、もう１つのオブジェクトとの当たり判定を出す方法をまとめます。

#手順

１、2D ObjectからSpriteを選択、動かしたい画像を入れる
２、もう１つSpriteを出して、当たり判定を出したい画像を入れる、タグもつける
３、2つのObjectに2DColliderとRigidbody2Dをつける
４、スクリプトを書く
５、動かしたい画像に関連付ける



#１、2D ObjectからSpriteを選択、動かしたい画像を入れる

![スクリーンショット 2016-07-07 11.33.26.png](https://qiita-image-store.s3.amazonaws.com/0/132541/344a926a-1a86-7774-1c16-082c3064b7da.png)

![スクリーンショット 2016-07-07 11.34.00.png](https://qiita-image-store.s3.amazonaws.com/0/132541/a1b9806b-5942-3669-c3d6-8f916ed689f5.png)

#２、もう１つSpriteを出して、当たり判定を出したい画像を入れる、タグもつける

１と全く同じように画像を表示させます
また、後で当たり判定を出す際にタグをつけなければならないのでここでつけます。

![スクリーンショット 2016-07-07 14.55.13.png](https://qiita-image-store.s3.amazonaws.com/0/132541/38a62d1b-4f3a-859a-0976-0cda7a6b6159.png)

![スクリーンショット 2016-07-07 14.55.27.png](https://qiita-image-store.s3.amazonaws.com/0/132541/f70200ae-7350-2776-72e8-02d06637f574.png)


Tagのところを選択して、自分で作ったタグにします。ここではflowerというタグにします


#３、2つのObjectに2DColliderとRigidbody2Dをつける

![スクリーンショット 2016-07-07 14.40.03.png](https://qiita-image-store.s3.amazonaws.com/0/132541/ea8d867c-d542-badc-6223-595d211bdba9.png)

Is Kinematicにチェックをつけないと落ちていってしまうので注意してください。


#４、スクリプトを書く

そのObjectに触った時につかんでドラッグして動くようなスクリプトを書きます
ここではスクリプトの名前をmouseとします。

```csharp:mouse.cs
using UnityEngine;
using System.Collections;

public class mouse : MonoBehaviour {
    private Vector3 screenPoint;
    private Vector3 offset;

    void OnMouseDown() {
        this.screenPoint = Camera.main.WorldToScreenPoint(transform.position);
        this.offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
    }

    void OnMouseDrag() {
        Vector3 currentScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
        Vector3 currentPosition = Camera.main.ScreenToWorldPoint(currentScreenPoint) + this.offset;
        transform.position = currentPosition;
    }
}

```

そして、flowerというタグが付いているObjectを触った時に”触ったよ”という表示が出るようにします

```csharp:mouse.cs
void OnTriggerStay2D(Collider2D coll){
		if (coll.gameObject.tag == "flower") {
                  Debug.Log ("触ったよ");
		}
　　}

```

#５、動かしたい画像に関連付ける

今作ったmouseというスクリプトを動かしたい方のObjectに関連付けます。

すると

![触ったよ.mov.gif](https://qiita-image-store.s3.amazonaws.com/0/132541/6b2bd594-92e0-d5a7-2ce7-9ecfde33252a.gif)


このようにドラッグして動かして、当たり判定も出すことができます。

#参考にしたサイト
http://www.happytrap.jp/blogs/2011/12/26/6382/
xcodeライブラリファイル（.framework）から特定のアーキテクチャのみ抽出する方法


# .frameworkファイルに余計なアーキテクチャが含まれていてApp Storeにアップロードできない
AWS SDKのframeworkファイルにはシミュレータ(i386)およびOS X(x86_64)のアーキテクチャが含まれており
App Store にアップロードできずエラーになったため、

```
Unsupported Architectures.The executable  フレームワーク.framework contains unsupported architectures "[x86_64,i386]"
```

特定のアーキテクチャのみ抽出して.frameworkを再生成しました。
そのときの対策を記載しておきます。

![unnamed.png](https://qiita-image-store.s3.amazonaws.com/0/55077/585c8195-dbd2-5054-e71a-f2ae472059bc.png)


# .frameworkファイルから特定のアーキテクチャのみ抽出する

今回は以下の４つの.frameworkファイルに対して修正しました。

* AWSCognito.framework
* AWSAPIGateway.framework
* AWSCognitoIdentityProvider.framework
* AWSCore.framework

lipoツールにて修正を行います。
今回はarmv7およびarm64のみ抽出しました

```
# 含まれているアーキテクチャを確認する
$lipo -info AWSCognito.framework/AWSCognito
Architectures in the fat file: AWSCognito.framework/AWSCognito are: i386 x86_64 armv7 armv7s arm64 
# 特定のアーキテクチャのみ抽出する
$lipo -extract arm64 AWSCognito.framework/AWSCognito -o AWSCognito.framework/AWSCognito-arm64
$lipo -extract armv7 AWSCognito.framework/AWSCognito -o AWSCognito.framework/AWSCognito-armv7
# 抽出したアーキテクチャから再生成する
$lipo -o AWSCognito.framework/AWSCognito-merged -create AWSCognito.framework/AWSCognito-armv7 AWSCognito.framework/AWSCognito-arm64
$lipo -info AWSCognito.framework/AWSCognito-merged 
Architectures in the fat file: AWSCognito.framework/AWSCognito-merged are: armv7 arm64 
# 元のファイルを削除し、置き換える
$rm -rf AWSCognito.framework/AWSCognito
$mv AWSCognito.framework/AWSCognito-merged  AWSCognito.framework/AWSCognito
$rm -rf AWSCognito.framework/AWSCognito-*
# AWSAPIGateway.framework、AWSCognitoIdentityProvider.framework、AWSCore.frameworkに関しても同様に行う
```

余談ですが、
otoolとかlipoとかnmとか使うと
特定のコンパイル済みファイル（.o）を除外したり、
静的ライブラリ（.a）ファイルを結合とか変態的なことができるみたい
自然言語/音声認識学習用データのまとめ

自然言語処理、また音声認識を学習するためのデータは各種の研究機関などから提供されています。
ここでは、それらのデータのありかをまとめておきます。他にもあるぞ、という情報がありましたらぜひお寄せください。


## [高度言語情報融合フォーラム](https://alaginrc.nict.go.jp/)(有料)

多様な言語資源、音声資源、ソフトウェアツールを提供してくれている団体です。ただし、ダウンロードには会員登録が必要です(入会金10万円だが、年会費などはなし)。

データセットはこちらから参照できます。研究機関限定ですが、楽天のデータなどもあります。

[ALAGIN 言語資源・音声資源サイト 資源](https://alaginrc.nict.go.jp/resources.html)

それと、毎年開催されている[音声認識・音声対話技術講習会](http://www.alagin.jp/event/event.html)に優先枠で申し込むことができます。この講習会は音声対話を行おうとしている人なら一回入っておくといい講習会なので、こちらもおすすめです。

## [コーパス開発センター](http://pj.ninjal.ac.jp/corpus_center/)(有料)

その名が正に体を表すサイト。書き言葉、話し言葉など豊富なコーパスを提供してくれています。データを取得するには申請＋支払が必要ですが、書き言葉のオンライン検索は無料で試すことができます。

[少納言 KOTONOHA 「現代日本語書き言葉均衡コーパス」](http://www.kotonoha.gr.jp/shonagon/search_form)


## [音声資源コンソーシアム](http://research.nii.ac.jp/src/list.html)

多くの音声資源が無償で提供されています。マルチモーダル情報つき、音声の感情評定といったデータも無償で手に入れることができます。

## [IEMOCAP DATABASE](http://sail.usc.edu/iemocap/)

動画だけでなく、モーションキャプチャー情報などのマルチモーダル情報に対し感情のアノテーションが行われたデータを提供しています。
研究論文、およびデータを取得するための申し込みは以下から行えます。

[IEMOCAP RELEASE](http://sail.usc.edu/iemocap/iemocap_release.htm)

## [NII 情報学研究データリポジトリ](http://www.nii.ac.jp/dsc/idr/datalist.html)(研究者限定)

研究者向けに提供されている様々なデータがまとめられています。最近提供されたデータセットも公開されているので、ここを最初に見るのが一番良いかも。

## [言語情報処理ポータル](http://www.jaist.ac.jp/project/NLP_Portal/)

JAISTがまとめている自然言語処理に関する情報ポータル。この中の、下記ページに日本の言語資源・ツールについてまとめられています。

[日本の言語資源・ツールのカタログ](http://www.jaist.ac.jp/project/NLP_Portal/doc/LR/lr-cat-j.html)

有用なのは、言語資源に付随してそのユースケース(その言語資源を利用した論文)が分かるようになっている点。こちらを参照すれば、利用してどんなことができるのか、どう利用すればよいのか知見が得られるようになっています。


## オープンデータ

自然言語/音声認識のデータではないですが、オープンデータについてもまとめておきます。観光案内などの需要が増えれば、ここにも自然言語資源や音声資源が登録されてくる・・・と思います。

* [ビッグデータ・オープンデータ活用推進協議会オープンデータポータル](http://chiba-ckan.cloudapp.net/)
 * [千葉県などが主体となって進めている](http://itpro.nikkeibp.co.jp/article/NEWS/20130128/452381/)。ただ、記事の通り2013年始同でその後更新がないと思われる(提供されているデータも2013年近辺)
* [データカタログサイト](http://www.data.go.jp/)
 * [総務省肝入り](http://www.soumu.go.jp/menu_seisaku/ictseisaku/ictriyou/opendata/)で作られているサイト。
CentOSでchefを利用して環境構築

## scene
- ローカル環境で利用したレシピ(chef)を稼働想定環境で利用したい
- 社内の誰かが作ったレシピを利用してローカル環境を構築したい

## what's chef ?
- chef(シェフ)はknife(調理用具)とcookbook(recipe:レシピ)を使い調理(環境構築)をするイメージ
- recipeがあれば誰でも環境を構築することができる

## usage
4 step
　1. chef, knifeのインストール
　2. cookbook(料理本の作成)
　3. recipeの作成
　4. 実行

```bash:console
# # 1. chef, knifeのインストール
# sudo rpm -ivh https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chefdk-0.3.0-1.x86_64.rpm
Retrieving https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chefdk-0.3.0-1.x86_64.rpm
warning: /var/tmp/rpm-tmp.K6Y37k: Header V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
Preparing...                ########################################### [100%]
   1:chefdk                 ########################################### [100%]
Thank you for installing Chef Development Kit!
# 
# chef -v
Chef Development Kit Version: 0.3.0
# 
# chef gem install knife-solo
# 
# # 2. cookbook(料理本の作成)
# knife solo init /var/chef
WARNING: No knife configuration file found
Creating kitchen...
Creating knife.rb in kitchen...
Creating cupboards...
Setting up Berkshelf...
# 
# ls -la /var/chef/
total 44
drwxr-xr-x   9 root root 4096 Jul  6 08:57 .
drwxr-xr-x. 20 root root 4096 Jul  6 08:57 ..
drwxr-xr-x   2 root root 4096 Jul  6 08:57 .chef
-rw-r--r--   1 root root   12 Jul  6 08:57 .gitignore
-rw-r--r--   1 root root   35 Jul  6 08:57 Berksfile
drwxr-xr-x   2 root root 4096 Jul  6 08:57 cookbooks
drwxr-xr-x   2 root root 4096 Jul  6 08:57 data_bags
drwxr-xr-x   2 root root 4096 Jul  6 08:57 environments
drwxr-xr-x   2 root root 4096 Jul  6 08:57 nodes
drwxr-xr-x   2 root root 4096 Jul  6 08:57 roles
drwxr-xr-x   2 root root 4096 Jul  6 08:57 site-cookbooks
# knife cookbook create project -o /var/chef/site-cookbooks/
WARNING: No knife configuration file found
** Creating cookbook project
** Creating README for cookbook: project
** Creating CHANGELOG for cookbook: project
** Creating metadata for cookbook: project
# # 
# # 3. recipeの作成
# vi /var/chef/site-cookbooks/project/recipes/default.rb 
# 
# # 4.実行
# chef-solo -o project
```

**※ recipeをgitなどからcloneできると配布できてステキ**

```
# git clone ssh://hoge/project.git project
```

## reference
[chefDK](http://knowledge.sakura.ad.jp/tech/2825/)
[knifeコマンド](http://qiita.com/kami_zh/items/7e4eac152df6945ffa48)
[cookbookとsite-cookbookの違い](http://qiita.com/kidach1/items/b222fb2892e6108c46d5#2-5)
[Ruby]URI.parseしたいのに邪魔な文字列


```
>URI.parse('https://hoge[piyo].com')
```

↓

```
URI::InvalidURIError: bad URI(is not URI?): https://hoge[piyo].com
```

なるほど。角括弧[]がいけないのはわかる。でもどうすれば...

###解
https://github.com/sporkmonger/addressable
```
gem install addressable
```

```
>Addressable::URI.parse('https://hoge[piyo].com').host
=> "hoge[piyo].com"
```


解決しました。
ありがとうございました。
Arel使わずにLIKEのOR検索

# 経緯

あるカラム内にある複数パターンの文字列をLIKE検索したい
正規表現でもいいけど、配列で文字列管理したいとき
Arelでもいいけど、可読性悪いし個人的に好きじゃないし、公式ドキュメントにないので怖い
http://qiita.com/joker1007/items/5c851526e73b3bc0273a

# これだけ
```ruby
Product.where(
  SEARCH_WORDS.map { |attr|  "\"products\".\"description\" LIKE ?" }.join(' OR '),
  *SEARCH_WORDS.map { |attr| "%#{attr}%" }
)
```


最近よくつかうのでメモ

[関連?]
http://qiita.com/takuya0301/items/e18696c49c5a61aff45f
rbenvとは？（rbenvを利用したRubyのインストール）


前回　”RVMとは？”　という内容を記録しましたが、今回はrbenvについて説明させていただきます。
#rbenvとは？

Simple Ruby Version Management: rbenv

rbenv lets you easily switch between multiple versions of Ruby. It's simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well.

もっとsimpleなRVMという意味か、、？
とりあえずどんな特徴があるか見てみます。

#rbenvの特徴
○ Rubyの本体に付属していない
○ Ruby on Railsの開発者が入る37signalsが作った。
○ rvmをよりシンプルにしたRuby自体のバージョン切り替え
○ rvmより動作が軽い<font color="green">
○ Do 1 ユーザー権限ごとにバージョンを切り替え(システム全体には影響しない)
○ Do 2 プロゼックトごとに合わせた、Rubyバージョンのサポート
○ Do 3 そのため開発する際, Rubyバージョンに合わせた環境変数を用意する。
</font>

#rvmとrbenvの違い
○ shellのロード
代わりにrbenvのアプローチは$PATHに対しディレクトリを追加します。
○ shell commandの上書き
cdコマンドを上書きする事は、危険なエラーが発生しやすいです。
○ 設定ウァイルを持つこと
rbenvでは使用したいRubyのバージョン以外は設定する必要はありません
○ Rubyのインストール
rbenvでは自分自身でRubyをコンパイル＆インストールするか、またはruby-buildを使って自動インストールができます。
○ gemsetsの管理
<font color="green"><b>RVMと違いgemは管理しません。 Bundlerは依存関係を管理するための良い方法です。　まだ利用していなければrbenv-gamesプラグインをインストールできます。</b></font>
○ プロゼックトを切り替えた時のエラー警告表示
rbenvでは各プロゼックトごとにバージョン名を読み取りますので簡単です。

また、railsの公式ウェブサイトではrbenvを利用してRubyをインストールする事をオススメしています。
(railsを作ったDHHもrbenvを使用している。。。という話も。。ありますね。。)

#rbenvを利用したRubyのインストール

Linux環境でRubyのバージョン管理をサポートするrbenvをインストールしてみましょう

```shell-session
$ git clone git://github.com/sstephenson/rbenv.git .rbenv
```

コマンドプロンプトでrbenvを実行できるようにshell環境変数を修正します。
.bashrcファイルを読めるようにエディターを開けて .bash_profileに次のように追加します。

```shell-session
[ -f "$HOME/.profile" ] && source "$HOME/.profile"
[ -f "$HOME/.bashrc" ] && source "$HOME/.bashrc"

```

.bashrcの内容は次のように作成します。rbenvが保存されているディレクトリをRBENV_ROOT環境変数にrbenv実行ファイルが入っているディレクトリをPATHに追加します。
shellを実行するたびにrbenv init - コマンドを実行します。

```shell-session
export RBENV_ROOT="${HOME}/.rbenv"
if [ -d "${RBENV_ROOT}" ]; then
  export PATH="${RBENV_ROOT}/bin:${PATH}"
  eval "$(rbenv init -)"
fi
```

Rubyをインストールするためにはrbenvのプラグインruby-buildが必要です。
.rbenv/plugins　ディレクトリを作ってgithubからruby-buildをダウンロードします。

```shell-session
$ mkdir -p ~/.rbenv/plugins
$ cd ~/.rbenv/plugins
$ git clone git://github.com/sstephenson/ruby-build.git
```

install オプションを利用してRubyをインストールしてみましょう。
2.3.1を基準でインストールしました。

```shell-session
$ rbenv install 2.3.1
```

rehashオプションは新しい環境を再設定するオプションで新しくRubyをインストールしたりgemをインストールした後で実行しなきゃいけないです。

```shell-session
$ rbenv rehash
```

global オプションはシステムで該当Rubyを使うために使用します。

```shell-session
$ rbenv global 2.0.0-p451
```

欲しかったバージョンがちゃんとインストールされたか確認しましょう。

```shell-session
$ ruby -v
```
インストールが終わったらgemを管理するた目にbundlerをインストールします。
新しい環境を再設定するためrehashを忘れないでください。

```shell-session
$ gem install bundler
$ rbenv rehash
```

#ETC
rbenv-gem-rehashをインストールすると、毎回　rbenv rehashコマンドを実行しなくていいです。

#参考ページ
https://rorlab.gitbooks.io/railsguidebook/content/contents/rbenv.html
http://mukaer.com/archives/2012/03/09/rubyrvmgemrbenv/
AWS EC2にCakePHP3.2をインストール・環境構築

Amazon EC2(Amazon Elastic Compute Cloud)のインスタンス（Amazon linux）の設定および立ち上げが終わったところから手順のご案内をスタートします。

#１、LAMP環境構築

まずは、下記コマンドでルートユーザーに変更するとともに、yumでインストールしたパッケージのアップデートを行います。

```
$ sudo -i
$ yum update
```

その後、下記の通り、AWS EC2にLAMP環境を構築していきます。

##　1-1、Apacheのインストール
今回は、Apache2.4のバージョンをインストールします。

```
$ yum install -y httpd24
$ chkconfig httpd on
$ service httpd start
```

##　1-2、PHPのインストール
次はPHPをインストールします。今回インストールするPHPのバージョンは5.6です。

```
$ yum install -y php56
```

##　1-3、MySQLのインストール
下記コマンドで、MySQLは最新のバージョンがインストールされます。

```
$ yum install -y mysql-server
$ chkconfig mysqld on
$ service mysqld start
```

###　1-3-1、MySQLをバージョンを指定してインストール
リポジトリを以下で追加し、MySQLをインストール

```
$ rpm -Uvh http://dev.mysql.com/get/mysql57-community-$release-el6-7.noarch.rpm
$ yum install mysql-community-server
$ cp -p /etc/my.cnf /etc/my.cnf.orig
$ vi /etc/my.cnf
```

```ruby:qiita.rb
[mysqld]
character-set-server=utf8    <-- [mysqld]セクションに追加する
```

サービス起動し、初期パスワードを取得後、セキュリティチェック

```
$ service mysqld start
$ grep 'temporary password' /var/log/mysqld.log
$ mysql_secure_installation
```

##　1-4、拡張ライブラリーのインストール

```
$  yum install php56-intl
それと、
$ install php56-mbstring
PDOクラスがないと怒られるので、
$ yum install php56-pdo
//$ yum install -y php56-mysqlnd
//$ yum install php-mysql
```

#2、CakePHP3のインストール
CakePHP3では、バージョン３からはcomposer（コンポーザー）でのインストールが推奨されてます。このため、composerを利用する形でCakePHP3のインストールの手順をご案内します。

##　2-1、composer(コンポーザー)のインストール
ドキュメントルートのディレクトリーにcomposerをインストースし、compposerにパスを通します。

```
$ curl -sS https://getcomposer.org/installer | sudo php
$ mv composer.phar /usr/local/bin/composer
$ ln -s /usr/local/bin/composer /usr/bin/composer
```

##　2-2、CakePHPのプロジェクトを作成
composerを利用しドキュメントルートに下記コマンドを実行しプロジェクトを作成します。その後、コンポーザーをインストールします。

```
$ composer self-update && composer create-project --prefer-dist cakephp/app app名
$ sudo composer install
```

すると、プロジェクトが作成され、プロジェクト内のapp/vendor にライブラリーがインストールされます

以上でCakePHP3.2のインストールは終わりになります。
次は、データベースの作成と設定の手順をご案内します。

##　2-3、データベース作成
インストールしたCakePHP3のプロジェクトためのデータベースを作成するとともに、MySQLユーザーを作成しその権限を付与します。

```
$ mysql -u root -p
mysql> CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
mysql> CREATE DATABASE `cakephp`;
```

作成したユーザーに対して、該当データベースへの権限を付与する

```
mysql> GRANT ALL PRIVILEGES ON `cakephp`.* TO "user"@"localhost";
mysql> FLUSH PRIVILEGES;
mysql> exit
```

##　2-4、データベースの設定

```
$ vi app/config/app.php
```

```ruby:app.php
'Datasources' => [
        'default' => [
            'className' => 'Cake\Database\Connection',
            'driver' => 'Cake\Database\Driver\Mysql',
            'persistent' => false,
            'host' => 'localhost',
            /**
             * CakePHP will use the default DB port based on the driver selected
             * MySQL on MAMP uses port 8889, MAMP users will want to uncomment
             * the following line and set the port accordingly
             */
            //'port' => 'non_standard_port_number',
            'username' => 'ユーザー名',
            'password' => 'パスワード',
            'database' => 'データベース名',
            'encoding' => 'utf8',
            'timezone' => Asia/Tokyo,
            'flags' => [],
            'cacheMetadata' => true,
            'log' => false,
```
Flashについて

## Flashとは
* アドビシステムズが開発している動画やゲームなどを扱うための規格
* 競合としては、Microsoft Silverlightがある
* Flash Player又はAIR上で動作する
* Adobeの最新製品からFlashの名前が排除され、Adobe自身がHtml5への移行を促していることと、その他もろもろの要因の為、徐々に衰退している

* * *
## Flashにおけるキーワード
* Flex
* Flash Player
* AIR

* * *
## Flexとは
* Adobe Flexは高度なUIを持つWebアプリケーションのフレームワーク
* Flexで作ったアプリケーションは様々な環境で動作する
 * Webブラウザの中　⇒　**Flash Player**上で動作する
 * WindowsやMac OS X、Linuxにインストールして使うデスクトップアプリケーション　⇒　**AIR**上で動作する

* * *
## FlashとFlexで何が違うのか
* FlexはFlashの一部
* 開発環境が異なる
* Flashはもともと、Webアニメーションの開発ツールから出発している
* Flashはデザイナーのためのツール、Flexはプログラマーのためのツールという棲み分けになっている
* どちらのツールで作っても、Flash Player上で動作する、Flashファイル（swf）を生成することになる

* * *
## Flash Playerとは
* 「Adobe Flash」で作成したコンテンツを**Webブラウザ**などで再生するためのプラグインソフト
* Flash PlayerはWindows、Mac OS X、Linuxなど主要なOSのほとんどに対応している
* 主要なWebブラウザをサポートするが、最新Webブラウザでは対応しないものがでてきている
* iPhone、Androidでは動作しない

* * *
## AIRとは
* Flash、Flexで作ったアプリケーションを実行ファイルの形式で書き出すことができる
* Javaと同じくOSごとにランタイムが用意されており、一度作成したAIRパッケージは、OSを選ぶことなく同じように動かすことができる
* ローカルのリソース（ファイルシステムやデータベースなど）を利用することが可能
* AIR for iOS、Androidでスマホアプリを作成できる

* * *
## 開発するには
* 有料
 * Flash Builder 4系（60日無料体験版あり）

* 無償
 * FlashDevelop（オープンソース）
 * GUIコンポーネントは提供されていないのでコード入力となる
 * MinimalCompsを使えばGUI可能、導入方法は[こちら](http://kiyara.seesaa.net/article/294369190.html)

* * *
## Flash Builderについて
* Adobeの製品（バージョン3まではAdobe Flex Builderという名前だった）
* Flexの開発に用いる（Eclipseをベースにプラグインとして開発されている）


* * *
## FlashDevelopについて
* Flashコンテンツの開発に必要となる言語をコーディングし、SWF(スウィッフ)ファイルを作成することができる
* SWFはFlashコンテンツのファイルであり、HTMLページに組み込むことでWebに公開することができる
* Hexeに対応している為、ActionScript、C++、C#、java、PHPのソースコードを生成できる

* * *
## Flash Builderインストール
下記をインストールする必要がある

* Flash Builder 4.7 Premium（[60日無料体験版](https://creative.adobe.com/ja/products/download/flash-builder)）　⇒　なんと4.7から**デザイナー機能廃止**、4.6を使えとのこと・・・
* Flash Builder 4.6（[60日無料体験版](http://www.adobe.com/support/downloads/thankyou.jsp?ftpID=5517&fileID=5536)）　⇒　**4.6**をまだダウンロードできるので助かった

* * *
## FlashDevelopインストール
下記をインストールする必要がある
* [JRE 8](http://www.java.com/ja/download/)
* .net framework 3.5以上（Windows7以降は標準装備）
* [FlashDevelop 5.1.1.1](http://www.flashdevelop.org/community/viewtopic.php?f=11&t=12584)
* [Flex SDK 4.6](https://sourceforge.net/adobe/flexsdk/wiki/Download%20Flex%204.6/)

* * *
## ActionScript3について
*  Flashに使用される言語で最新版が3（2008年12月19日）
*  JavaScriptにクラスベースのオブジェクト指向の機能を付加
*  Javaの構文とよく似ている

``` sample1.cs
//javaの場合
File f = new File();
```
``` sample2.cs
//ActionScript3の場合
var f:File = new File();
```

* * *
## 実際にみてみよう

* * *
## 郵便番号APIによる住所検索

* * *
## Windows Desktop Application

* * *
## Mac Desktop Application

* * *
## Web Application
Rspecをいちいちコンソールで実行するのめんどいよね。

## Atomのパッケージ、その名もRspec が素敵

Atomユーザの私。
テストコードを書いて、ターミナルに移動して、``` bundle exec rspec xxxxx_spec.rb``` って打って、テストを実行。
あれ？コーディング間違えている、もっかいAtomに戻って、コード直して、ターミナルに移動して、、、、、、、

 **めんどい。**

 
そこで、Atomでなんか良さげなパッケージを探す。発見。

### Rspec

名前がそのまんま。ストレートにRspec。
https://atom.io/packages/rspec



### 初期設定

Atomにパッケージをインストールしたら、すぐ使える。
かと思ったけど、なんか上手くいかない。
テストしたいspecファイル上で ``` option + shift + T ``` で、テストが実行できる。
はずなんだけど、```bash: line 1: undefined: command not found ```とか出てきやがる。

本家のIssueを見たら、ちゃんと解決案が載っていた。

![image](https://qiita-image-store.s3.amazonaws.com/0/100538/944c2192-934a-758f-bc49-f91f79dea199.png)

ああ、なるほどね。
Atomの設定ファイルを開いて、```bundle exec rspec```がコマンドだって教えてやればいいわけね。

``` .atom/config.cson 
'rspec':
  'command': 'bundle exec rspec'
``` 
書いた。**実行。**　
できた。

### 使い方

キーバインドはデフォでこんな感じ

``` Ctrl+Alt+T ```  - 今カーソルがあるspecファイルに書いてるテストを全部実行。
``` Ctrl+Alt+X ```  - 今カーソルがあるspecのテストをそのブロックだけ実行する。
``` Ctrl+Alt+E ```  - 直近実行したspecテストを実行する。

超、便利。泣きそう。Atomユーザのみんなはすでに使っていたのか。。。
ExcelでF1キー→ヘルプ起動を抑制（ウザいから）

エクセルの作業中、
私は、EscキーとF1キーを押し間違える。

すると、頼んでないのにヘルプが起動してウザい。
（自分が押してるんですが）

という訳で、F1キーを無効にしてしまいました。

下のコードをWorkbookのOpenイベントに書いて、
アドインとして登録しておくと、
自分のExcelではF1キーは無効となり、ヘルプが出ることもありません。

```vbnet
Private Sub Workbook_Open()
    Application.OnKey "{F1}", ""
End Sub
```

他のアドイン等でショートカットが登録してある場合、
それも無効になってしまうので、ご注意下さい。
アプリ用Google AnalyticsのSDK取得方法

# この記事について
アプリ用のGoogle Analyticsを導入するためにSDKを取得するときの手順です。

# アプリ用Google AnalyticsのSDK取得方法
## 1. まずは今回導入したいAnalyticsのアカウントとプロパティを作成します。
ここまでの手順については、今回省略いたします。
SDK取得に際して、アカウント名とプロパティ名が必要になってくるので、これをメモしておいてください。

![Desktop Landscape Copy 4.png](https://qiita-image-store.s3.amazonaws.com/0/108017/c2e7151c-fc57-56e5-8dbe-07b8c401fce3.png)

## 2. iOSかAndroidかを選択し、スタートガイドへ遷移
スタートガイドをクリックすると、英語で色々と設定方法が記載されていますが、「Get a configuration file」をクリックしてください。

![Screen Shot 2016-07-07 at 1.53.46 PM.png](https://qiita-image-store.s3.amazonaws.com/0/108017/01866560-10b1-bfd1-394f-7552e4840af1.png)

## 3-a. iOSの場合
アプリ名とアプリに登録する（もしくは、されている）Bundle IDを記入します。

![Desktop Landscape.png](https://qiita-image-store.s3.amazonaws.com/0/108017/d5024489-f8bd-9510-e3d7-6003e3840b40.png)

## 3-b. Androidの場合
アプリ名とアプリに登録する（もしくは、されている）Package Nameを記入します。

![Desktop Landscape Copy.png](https://qiita-image-store.s3.amazonaws.com/0/108017/3656873e-ade3-8616-f526-30e1cb30f11e.png)

## 4. 導入するものを選択
今回はアナリティクスの導入なので、アナリティクスを選択し1でメモしておいた、アカウント名とプロパティ名を記入して、「ENABLE ANALYTICS SERVICE」を選択後、「CONTINUE TO Generate configuration files arrow_forward」をクリックして、ダウンロードしてください。

![Desktop Landscape Copy 2.png](https://qiita-image-store.s3.amazonaws.com/0/108017/35efe072-c405-f6db-7487-4e8c2b2588c0.png)
最速のレスポンシブWeb

#とりあえずこれだけやっとく
下記の記事が長かったので最低限必要な部分だけテンプレートにまとめました。
http://qiita.com/kenz_firespeed/items/5cab42ad323913957935
PCとスマートフォンで使うときに変な挙動がでないようにする最低限抑えておきたいHTMLとCSSです。
見栄え的なものは適用していないのでご自由につくってください

レスポンシブというとついついブートストラップみたいなテンプレートに頼りがちですが、巨大なテンプレートを導入して手に負えなくなるよりは最初はシンプルなところから始めてみては如何でしょう？

#HTMLのテンプレート

```html
<!DOCTYPE html>
<html>
  <head>
    <title>TITLE</title>
    <link rel="stylesheet" href="style.css" />
    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
    <meta charset="UTF-8" />
  </head>
  <body>
    <header>
      <nav>
        <a href="">page</a><a href="">page</a><a href="">page</a>
      </nav>
    </header>
    <h1>全体見出し</h1>
    <main>
      <article>
        <h2>記事の見出し</h2>
        <p>記事の内容</p>
      </article>
    </main>
    <footer><small>著作権的なこと</small></footer>
  </body>
</html>
```

#cssのテンプレート

```css
body{
    -webkit-text-size-adjust: 100%;
}

a{
  display: inline-block;
  padding: 0.3em;
  margin: 0.3em;
}

```

#最低限の解説
詳しい解説は元記事を見てほしいけれど、最低限の部分だけ

```html
<link rel="stylesheet" href="style.css" />
```
見た目に関する部分は無条件でcssにするんだ

```html
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
```
モバイル対応サイトであることをスマートフォンに伝えて余計な処理をさせない

```html
<meta charset="UTF-8" />   
```
今から作るならUTF-8で作ろう

```html
    <header>
      <nav>
        <a href="">page</a><a href="">page</a><a href="">page</a>
      </nav>
    </header>
```

`header`や`nav`といった意味を表すタグはレスポンシブ抜きにしてあとからコードをいじるときに見やすくなるので積極的につかおう。
メニューを`ul`でまとめるのは昔流行ったけれど今となってはあまりやる価値ないと思う。

```css
body{
    -webkit-text-size-adjust: 100%;
}
```
画面回転への対応

```css
a{
  display: inline-block;
  padding: 0.3em;
  margin: 0.3em;
}
```
タッチパネルではテキストのリンクを押しにくいのでinline-blockにしてpaddingを設定することでタップ領域を確保している。
リンクが隣りあった時に隙間を開けるためにmarginもいれる。
Ansible [変数定義について]~随時更新

## inventoryファイルでの定義
* inventoryファイルではシーケンス・マッピングを使用できない

```ini
[target-1]
10.0.0.90

[target-2]
10.0.0.22

[target:children]
target-1
target-2

[target-1:vars]
ansible_port=22
ansible_user=ec2-user
ansible_ssh_private_key_file=/home/ec2-user/.ssh/ansible-id_rsa

[target-2:vars]
ansible_port=22
ansible_user=centos
ansible_ssh_private_key_file=/home/ec2-user/.ssh/ansible-id_rsa
```
* 結果

```yaml
10.0.0.90 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
```


## Playbookでの定義
* 外部ファイルからの読み込み①
    * group_varsに接続情報変数を置く
        * Playbook内でvars_filesディレクティブを使用する

```yaml:group_vars/target-1_vars.yml
---
- name: target-1_vars
  ansible_port: 22
  ansible_user: ec2-user
  ansible_ssh_private_key_file: /home/ec2-user/.ssh/ansible-id_rsa
```

```yaml:target-1_ping.yml
---

- name: vars-files test
  hosts: target-1
  become: True
  vars_files:
    - group_vars/target-1_vars.yml
  tasks:
    - name: ping test
      ping:
```

* 結果

```bash
PLAY [vars-files test] *********************************************************

TASK [setup] *******************************************************************
ok: [10.0.0.90]

TASK [ping test] ***************************************************************
ok: [10.0.0.90]

PLAY RECAP *********************************************************************
10.0.0.90                  : ok=2    changed=0    unreachable=0    failed=0 
```

* 外部ファイルからの読み込み②
    * group_varsにfact毎にPlayを置く
        * Playbook内でinclude_varsを使用する

* distribution_versionでそれぞれのPlayを実行させる

```yaml:target-all_ping.yml
---
- name: different os family
  hosts: all
  become: True
  tasks:
    - include_vars: /etc/ansible/group_vars/{{ ansible_distribution_version }}_task.yml
```

* Amazon 2016.03用

```yaml:/etc/ansible/group_vars/2016.03_task.yml
  tasks:
    - name: ping test
      ping:
```

* CentOS 6.7用
 
```yaml:/etc/ansible/group_vars/6.7_task.yml
  tasks:
    - name: ping test
      ping:
```

* 結果

```bash
PLAY [different distribution_version] *****************************************************

TASK [setup] *******************************************************************
ok: [10.0.0.22]
ok: [10.0.0.90]

TASK [include_vars] ************************************************************
ok: [10.0.0.90]
ok: [10.0.0.22]

PLAY RECAP *********************************************************************
10.0.0.22                  : ok=2    changed=0    unreachable=0    failed=0   
10.0.0.90                  : ok=2    changed=0    unreachable=0    failed=0 
```
Row-major orderとColumn-major order

参考: [Wikipedia: Row-major_order](https://en.wikipedia.org/wiki/Row-major_order)

行列を配列に格納するときにどのような順番に格納するかとしてRow-major orderとColumn-major orderの2種類があります。

たとえばこのような行列があったとき

![](https://wikimedia.org/api/rest_v1/media/math/render/svg/0d2606537373aed9f7c6240cc6c94efcce12c53a)

Column-major orderとRow-major orderではそれぞれ以下のように配列に格納されます。

Address | Column-major order | Row-major order
--- | --- | ---
0 | ![a11](https://wikimedia.org/api/rest_v1/media/math/render/svg/411c26881c752d514e61bfdd5eb8463c6e808202) | ![a11](https://wikimedia.org/api/rest_v1/media/math/render/svg/411c26881c752d514e61bfdd5eb8463c6e808202)
1 | ![a21](https://wikimedia.org/api/rest_v1/media/math/render/svg/372531d1d09885784f3430660f8654b0d48eb394) | ![a12](https://wikimedia.org/api/rest_v1/media/math/render/svg/e062aea942fa88bbd0aa72d26f8fc011b323bf5e)
2 | ![a12](https://wikimedia.org/api/rest_v1/media/math/render/svg/e062aea942fa88bbd0aa72d26f8fc011b323bf5e) | ![a13](https://wikimedia.org/api/rest_v1/media/math/render/svg/de4f86c305ff1b04fabb1cddcedd192853d6815c)
3 | ![a22](https://wikimedia.org/api/rest_v1/media/math/render/svg/f7a66fac4dcd116c0dca38bd6cd9a805f62b69f4) | ![a21](https://wikimedia.org/api/rest_v1/media/math/render/svg/372531d1d09885784f3430660f8654b0d48eb394)
4 | ![a13](https://wikimedia.org/api/rest_v1/media/math/render/svg/de4f86c305ff1b04fabb1cddcedd192853d6815c) | ![a22](https://wikimedia.org/api/rest_v1/media/math/render/svg/f7a66fac4dcd116c0dca38bd6cd9a805f62b69f4)
5 | ![a23](https://wikimedia.org/api/rest_v1/media/math/render/svg/e214e4d1b4dcc0f3909e915fd69012c5bd1b7b7b) | ![a23](https://wikimedia.org/api/rest_v1/media/math/render/svg/e214e4d1b4dcc0f3909e915fd69012c5bd1b7b7b)

Row-major order は C/C++/Objective-C (for C-style arrays), Mathematica, PL/I, Pascal, Speakeasy, SAS, and C#/CLI/.Net などで使われています。
Column-major order は Fortran, OpenGL and OpenGL ES, MATLAB, GNU Octave, S-Plus, R, Julia, Rasdaman, Scilab などで使われています。

並び順の異なる行列ライブラリ間でデータをやりとりする場合等は、気をつけましょう。
curlでjsonをPOSTするワンライナー

実際には1行で。

```shell-session
curl -v
 -H "Accept: application/json"
 -H "Content-type: application/json"
 -X POST -d "{\"title\":\"I was born.\",\"rating\":\"9.9\",\"year\":\"1984\"}" http://localhost:8080/movie/tt9999999
```
Xcodeの基本ショートカットまとめ

　
先月から、swiftを勉強し始め、Xcodeの基本ショートカットを先輩エンジニアから教えてもらったので、まとめて載せます。
## 検索
###プロジェクト内検索 `command + shift + o` 
ファイル名から、メソッド、変数名まで検索できちゃいます。
検索して、目的のファイルに移動した後は、`command + shift + j`を押すと、
開いたファイルにプロジェクトナビゲーターが移動するので便利です。
全文検索は、`command + shift + f`です。

## ファイル間の移動 
###タブの追加 `command + t`
新たにタブを追加します。
また、左側のプロジェクトナビゲーターからファイルをダブルクリックすることでも、新規のタブを追加をすることができます。
タブを閉じるときは、`command + w`で閉じることができます。
###タブの移動 `command + shift + ] or [` 
左右に、タブの移動ができます。

##ファイル内の移動
#### ファイル内一覧 `ctrl + 6` 
ファイル内のメソッド、プロパティの一覧が表示されます。
そのまま検索をかけると、簡単にメソッド/プロパティへ移動することができます。pragmaを用いると、より見やすくなります。
参考: [#pragma markで見通しを良くする](http://qiita.com/chibi929/items/9bacf1a2d3af0acc5787)

## ファイル内の編集
#### コメントアウト `command + /` 
#### 自動インデント `ctrl + i`
自動でインデントしてくれます。

## ビルド&デバッグ周り
#### 実行 `command + r` 
#### ビルド `command + b` 
#### クリーン `command + shift + k` 
キャッシュクリアする時に使います。
#### ブレイクポイント `command + \`
処理の途中で止めたい時に便利です。 

## シミュレーター周り
#### ウインドウサイズ変更 `command + 1〜5`
ウインドウサイズが大きすぎて、画面全体見れないときに便利です。

#### ホームボタン `command + shift + h`

## storyboard周り
#### アップデートフレーム `option + shift + =`
auto layoutをかけている時に、見た目と制約がずれているときによく使います。

## view周り
#### アシスタントエディター表示 `option + command + return` 
画面を分割する表示です。
分割の状態を戻したいときは、`command + return`です。
GAE/Go 複数アカウントの追加・切り替えと goapp deploy での403エラーを取り除くまで

# 開発環境の前提

- Windows10 x64
- Google Cloud Platform SDK インストール済み
- Google App Engine SDK for Go インストール済み

![gcloud.png](https://qiita-image-store.s3.amazonaws.com/0/2883/0e4371f4-6b89-b8ac-ed82-c4de42dcc19c.png)

![gae.png](https://qiita-image-store.s3.amazonaws.com/0/2883/855e78f2-c4fc-c29c-7221-caee2650803d.png)


# アカウントの追加

## activeアカウントの確認

```shell-session
> gcloud auth list
Credentiald accounts:
 - first-account@gmail.com (active)
```

`first-account@gmail`のアカウントがアクティブであることを確認。

## アカウントを追加する

```shell-session
> gcloud auth login
```

ブラウザが開きます。
追加したいアカウントでログインします。ログイン完了でターミナルに制御が戻りアカウントの追加が完了します。


```shell-session
> gcloud auth list
Credentiald accounts:
 - first-account@gmail.com (active)
 - second-account@gmail.com
```

上記の状態でOK。

# activeアカウントの切り替え

```shell-session
> gcloud config set account second-account@gmail.com
>
> gcloud auth list
Credentiald accounts:
 - first-account@gmail.com
 - second-account@gmail.com (active)
```

# goapp deploy 時の403 Errorの解決


```shell-session
> cd %USERPROFILE%
> dir
```
この位置の以下のファイルを削除する。
- .appcfg_oauth2_tokens
- .appcfg_nag

その後、あらためて`goapp deploy`。
ログイン状態のキャッシュが無くなっているので、初回のみブラウザに遷移してログインを求められます。追加した`second-account@gmail.com`でログインすればOK。
JSFのFormでGETもどきを実装する


JSFのFormを出力するタグ `h:form` には `method` 属性がない。強制的に `POST` でリクエストされる。
登録や更新ならそれでもいいけれど、検索フォームの時に `POST` は違和感が残る。リロードすると「フォームの内容を再送信しますか？」のようなメッセージがでてしまうからだ。

要するに `GET` で

```
http://hoge.com/search?id=2&name=taro
```

のようにしたいのでやってみる。

View
-----

```
<f:metadata>
  <!-- クエリパラメータをセットして初期化処理を呼ぶ -->
  <f:viewParam name="id" value="#{sampleController.id}" />
  <f:viewParam name="name" value="#{sampleController.name}" />
  <f:viewAction action="#{sampleController.init()}" />
</f:metadata>

<h:form>
  <!-- 普段と変わらないForm -->
  <h:inputText value="#{sampleController.id}" />
  <h:inputText value="#{sampleController.name}" />
  <h:commandButton value="検索" action="#{sampleController.search()}" />
</h:form>

```

BackingBean
----

```
@Getter
@Setter
private String id;

@Getter
@Setter
private String name;

public void init(){
  //idとnameを条件にして検索
}

public String search(){
  //パラメータをつけてリダイレクト
  //※ パラメーターに null とかでないようにちゃんとしてね
  return String.format("search.xhtml?faces-redirect=true&id=%s&name=%s",id,name);
}
```

こんなふうにすると

`検索ボタン` - POST -> `アクションメソッド` - GET -> `検索メソッド`

のような流れになって `GET` で検索しているようにできる。なので `もどき` 。
`h:commandButton` と `f:param` と `includeViewParams=true` を組み合わせればアクションメソッドなしでもできるかもしれない。

以上。
Windows VirtualBoxをMacで設定するあれやこれ

#Windowsダウンロード
- windows
https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/
テスト期間180日だけ使用可能

- virtualbox
https://www.virtualbox.org/
無料で使える

#日本語設定
コントロールパネルから
keybordやformatをjapanに変更
display language設定

vistalizatorをダウンロード
言語をダウンロード
http://www.froggie.sk/jp/7lp32sp1.html

visualizatorを起動して、languageを設定


#初期設定
##ユーザーデータ
ID IEUSER
PASS Passw0rd!
ASP.Net Core + Razorで日本語がエスケープされないようにする

#結論

Startup.cs に以下の記述を加える

```csharp
using System.Text.Encodings.Web;
using System.Text.Unicode;

public void ConfigureServices(IServiceCollection services) {
    services.AddSingleton(HtmlEncoder.Create(UnicodeRanges.BasicLatin,
                                             UnicodeRanges.CjkSymbolsandPunctuation,
                                             UnicodeRanges.Hiragana, 
                                             UnicodeRanges.Katakana,
                                             UnicodeRanges.CjkUnifiedIdeographs));
    // その他 .AddMvc() など...
}
```

#解説

デフォルトでは`HtmlEncoder.Default`が使われ、これがU+0000..U+007F以外は全てエスケープする設定になっている。
そこでDIにて日本語も許容するように設定した物を突っ込む。
必要に応じて他のコード範囲も加える事が可能。

[CoreFxのソース](https://github.com/dotnet/corefx/blob/master/src/System.Text.Encodings.Web/src/System/Text/Encodings/Web/HtmlEncoder.cs)を参照。
PDFに関するPowerShellいろいろ

メモです

# ExcelファイルをPDFに変換する
```ps1:convertExcel2Pdf.ps1
# エクセルオブジェクト取得
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false

# 引数からファイル名を取得
$fileName = $args[0]
$absolutePath = Convert-Path($fileName)

# Excelファイルを開き、1シート目を選択
$book = $excel.Workbooks.Open($absolutePath)
$sheet = $book.Worksheets.Item(1)

# PDFに変換
$pdfName = $absolutePath + ".pdf"
$sheet.ExportAsFixedFormat(0, $pdfName)

# エクセルを閉じる
$book.Close($false)
$excel.Quit()
$excel = $null
$book = $null
$sheet = $null
```

# ページ数が1ページより大きいPDFファイルを表示(ワンライナー)
```ps1
# pdftk.exeを使用
Get-ChildItem | %{ $pdf = pdftk $_.FullName dump_data; $NumOfPages = [rege
x]::match($pdf, 'NumberOfPages: (\d)').Groups[1].Value; If ($NumOfPages -gt 1) { Write-Host $_.Name" "$NumOfPages"ページ
" } }
```
word2vecのC#実装

単語の意味をベクトルで表現する手法を提供する[word2vec](https://code.google.com/archive/p/word2vec/)ですが、これをC#で実装したものがgitHubに上がっています。

https://github.com/eabdullin/Word2Vec.Net

元々のC言語のソースと見比べてみましたが、もうほとんど同じですね。そのままソース持ってきて、C#の文法に沿って微修正したような印象を受けました。

#ただし、ちょっと不具合と思われる箇所が...

不具合に１か所気づいたのでメモしておきます。

Word2Vec.cs中のコンストラクタの部分です。ここにシグモイド関数の計算結果をテーブルに保持させるロジックがあります。

```csharp:Word2Vec.cs
 for (var i = 0; i < ExpTableSize; i++)
 {
     _expTable[i] = (float)Math.Exp((i / ExpTableSize * 2 - 1) * MaxExp); // Precompute the exp() table
     _expTable[i] = _expTable[i] / (_expTable[i] + 1); // Precompute f(x) = x / (x + 1)
 }
```

恐らくシグモイド関数の計算時間を節約するために、あらかじめ計算結果をテーブル化させておいているんでしょうね。

問題は、このロジック中の変数 i なのですが、VisualStudioのデバッガで確認したところ、int型として扱われています。なので、Exp()関数の引数中の計算式「i / ExpTableSize * 2」は、常に0になってしまいます。ですので、_expTable[]にはシグモイド関数の計算結果は入りません。一定の値（0.00247262325）が全配列要素に入るだけです。

なので、以下のように修正する必要があると思います。

```csharp:Word2Vec.cs
 for (var i = 0; i < ExpTableSize; i++)
 {
     _expTable[i] = (float)Math.Exp(((float)i / ExpTableSize * 2 - 1) * MaxExp); // Precompute the exp() table
     _expTable[i] = _expTable[i] / (_expTable[i] + 1); // Precompute f(x) = x / (x + 1)
 }
```

  変更前：Math.Exp((i / ExpTableSize * 2 - 1) * MaxExp);
  変更後：Math.Exp((<Font color="red">(float)</Font>i / ExpTableSize * 2 - 1) * MaxExp);
Node.js+log4js+Fluentd：カテゴリごとにFluentdの挙動を分ける

※「≈≈≈」は省略を表す
※Express.jsも使っているため、一部それ用の書き方をしています。
　過去記事：<a href="http://qiita.com/cobachan/items/953a507c7eb772f7f5d8">Node.js+Express.js+log4js</a>


# バージョン

```
$ rpm -qi td-agent
Name        : td-agent
Version     : 2.3.1
Release     : 0.el7
Architecture: x86_64
≈≈≈
```

```
$ node -v
v6.2.1
```

```
$ cat package.json
{
  ≈≈≈
  "dependencies": {
    "log4js": "^0.6.37",
    "fluent-logger": "^1.1.1",
    ≈≈≈
  },
  ≈≈≈
}
```

# Fluentdの設定
```
$ cat /etc/td-agent/td-agent.conf 
≈≈≈
<match nodejs.access.*>
        type file
        path /var/log/nodejs/td-access.log
</match>

<match nodejs.system.*>
	type file
	path /var/log/nodejs/td-system.log
</match>
```

```
$ /etc/init.d/td-agent restart
```

# log4jsの設定
```
$ cat modules/logger.js 
var log4js = require('log4js');

log4js.configure({
    "levels": {
      "access": "ALL",
      "system": "ALL",
      "error": "ERROR"
    }
});

log4js.addAppender(
        require('fluent-logger').support.log4jsAppender("nodejs.access", {
                host: "localhost",
                port: 24224,
                timeout: 3.0,
                levelTag: true
        }),
        ["access"]
);
log4js.addAppender(
        require('fluent-logger').support.log4jsAppender("nodejs.system", {
                host: "localhost",
                port: 24224,
                timeout: 3.0,
                levelTag: true
        }),
        ["system", "error"]
);

// 以下は、Express.js用の設定
module.exports = {
  access: log4js.getLogger('access'),
  system: log4js.getLogger('system'),
  error: log4js.getLogger('error'),
  express: log4js.connectLogger(log4js.getLogger('access'), {level: log4js.levels.INFO}),
  isDebug: function(category) {
    return (log4js.levels.DEBUG.level >= category.level.level);
  }
};
Symfony2 で Resources とかからファイルを読み込む

Symfony2 で Resources 下にファイルを置いといて、それを参照してなにかする、ってことをやるときのメモです。

kernel の locateResource でバンドル内のファイルのパスを取得できます。

```php
$kernel = $this->get('kernel');
$path = $kernel->locateResource('@MyBundle/Resources/views/Default/test.html.twig');
$cont = file_get_contents($path);
```
FB Graph API（V5）で360度画像をアップする（PHP）

仕事でFacebookに360度画像をアップする企画があがり、
アップした画像をタイムライン上で360度ビューワー表示させるための調査です。
#通常の投稿方法
Graph APIで普通に投稿する方法は以下の記事が詳しいです。
[Facebook SDK v5 for PHPを使ってFacebookページに自動投稿する方法](http://smkn.xsrv.jp/blog/2016/02/howto-fb-sdk-v5/)

上記URLの方法で画像投稿すれば勝手に360度になってくれるかと思いきや
長い画像が表示されるだけだったので方法を模索。
#360度画像の投稿方法
↓ヒントはここに！！
[Graph API User Photo Edge - 参考資料 - 開発者向けFacebook](https://developers.facebook.com/docs/graph-api/reference/user/photos/)

パラメーターに「allow_spherical_photo」というのがあります。
デフォルト値は「false」。
こいつを「true」にしてポストデータに突っ込んでやれば良いわけです。

他のパラメータ名も若干変わってます。
あとpost先はfeedじゃなくて「photos」です。

```php
$post_data = array(
	'allow_spherical_photo' => true,
	'url' => 'xxx.jpg',
	'caption' => '画像キャプション'
);
$fb->post('/me/photos', $post_data, MY_APP_TOKEN);
```
#パーミッションも注意
忘れちゃいけないのがアプリのパーミッションで、
スコープに「publish_actions」「user_photos」を含めること。
laravelのユニットテストを行う際にSeederが見つからないと言われた場合[訂正]

個人メモレベルです

# 症状
TestCaseクラスの中から, 

```
$this->seed('HogeSeeder')
```

とSeederを呼び出すと

```
ReflectionException: Class HogeSeeder does not exist
```

というエラーが返される

# 訂正
下記の対応にて, 「composer.jsonを編集して~」と書かれておりますが
この部分は不要でした.
このSeederが見つからないという現象の原因は, 手動でSeederファイルを作成した場合
オートロード設定ファイル(/vendor/composer以下のファイル群のことだと思う)が更新されないため
ファイルをロードすることができないことのようです.
この場合は, コマンドラインから`composer dump`としてオートロード設定ファイルを再生成してやれば問題は解決します.

```
$ php artisan make:seeder
```
とartisanコマンドを使ってSeederを作った場合、自動的にオートロード設定ファイルも更新されるので
この作業は必要ありません.


# 対応
```
	"autoload-dev": {
		"classmap": [
			"tests/TestCase.php"
		]
```

となっている部分を

```
	"autoload-dev": {
		"classmap": [
			"tests/TestCase.php",
			"database"
		]

```

に変更.
`composer dump`を実行後, 再度テストを行えば, 少なくともエラーの内容は変わるはず
Windows7 32-bitでChocolateyが使えなくなった時の原因と対処(v0.9.10.3)

先日、職場で使用しているPCでChocolateyをChocoleteyでUpgradeしたら突然パッケージが更新できなくなった。
もちろん、新規インストールもできない
かと思えばアップデートやインストールできるパッケージもある

という状態になったけど原因がわかったのでメモがてら書いておこうかなと思います。

もしかしたら環境依存かもしれないのと正確にいつのバージョンから発生するようになったのかは不明です

- 環境

Windows7 32-bit
Chocolatey v0.9.10.3

原因を探すにあたってデバッグモードと詳細メッセージを出力して確認しました。
実際に原因が特定できるまで自宅の64-bit PCでやってみたりパス名が長すぎるんじゃないかと環境変数いじったりとしてみたものの全然関係ありませんでした。

```text:cmd.exe
> cint -yvd autohotkey.portable

(省略)

Extracting C:\Users\(username)\AppData\Local\Temp\chocolatey\autohotkey.portable\1.1.24.00\AutoHotkey112400.zip to C:\ProgramData\chocolatey\lib\autohotkey.portable\tools...
7zip found at 'C:\ProgramData\chocolatey\tools\7z.exe'
Executing command ['C:\ProgramData\chocolatey\tools\7z.exe' x -aoa -bd -bb1 -o"C:\ProgramData\chocolatey\lib\autohotkey.portable\tools" -y "C:\Users\(username)\AppData\Local\Temp\chocolatey\autohotkey.portable\1.1.24.00\AutoHotkey112400.zip"]
ERROR: Exception calling "Start" with "0" argument(s): "The specified executable is not a valid application for this OS platform."
 at Get-ChocolateyUnzip, C:\ProgramData\chocolatey\helpers\functions\Get-ChocolateyUnzip.ps1: line 159
at Install-ChocolateyZipPackage, C:\ProgramData\chocolatey\helpers\functions\Install-ChocolateyZipPackage.ps1: line 154
at <ScriptBlock>, C:\ProgramData\chocolatey\lib\autohotkey.portable\tools\chocolateyInstall.ps1: line 6
at <ScriptBlock>, C:\ProgramData\chocolatey\helpers\chocolateyScriptRunner.ps1: line 48
at <ScriptBlock>, <No file>: line 1

(省略)
```

エラーメッセージを見てみると

```text:cmd.exe
ERROR: Exception calling "Start" with "0" argument(s): "The specified executable is not a valid application for this OS platform."
```
というようにPlatformがどうたらって出てるんですよね…英語は苦手なんでChocolateyで使用している7zipの実行ファイルを直接叩いてみた

```text:cmd.exe
> 7z.exe
このバージョンの C:\ProgramData\chocolatey\tools\7z.exe は、実行中の Windows のバージョンと互換性がありません。コンピ
ューターのシステム情報を確認して、プログラムの x86 (32 ビット) のバージョンと x64 (64 ビット) のバージョンのどちらが
必要か確認してから、ソフトウェアの発行元に問い合わせてください。
```

どうやら、x86用ではなくx64用に差し替わっているっぽい？

ここからは自分がやった方法であって今後のアップデートで再びx64用に差し替わってしまったりする可能性があるので参考程度で

まず、[7-Zip](https://sevenzip.osdn.jp/)のサイトから32-bit版の最新をローカルにダウンロードしてきて適当な場所に解凍する
そして、Chocolateyをインストールしているディレクトリの`tools`フォルダ内の`7z.exe`と`7z.dll`をローカルに解凍したファイルと差し替える
差し替える前に念のため名前を変えて元のファイルは残しておいた方が良いかも(私は検証用に残した)

これで、問題なくZip圧縮系のパッケージがインストールできるようになった。
これChocolatey側の設定なのか本家のほうの問題なのかどこかで報告すれば良いのかもしれないけども、報告場所がわからないので何かご存知の方がいれば教えていただきたいです。

- 追記

既にIssuesに上がっていました。
https://github.com/chocolatey/choco/issues/836
次のバージョンで修正予定のようです。

~~現状、v0.9.10.3以前を使用しているならアップデートせずに、v0.9.10.4が出るのを待ったほうが良さそうです。
もし既にv0.9.10.3にアップデートしてしまった場合はバージョンを戻すか、一時的な対応として上記の対処をするかで良いかと思います。~~

確認が遅くなりましたが8月15日にv0.10.0で修正されたようです。
https://github.com/chocolatey/choco/milestone/25?closed=1

動作確認しましたが7-zipに関しては問題なく使えています。
Vue.js Version2 で何が変わるのか



[2016.04 のVue.js 2.0の発表](http://jp.vuejs.org/2016/04/27/announcing-2.0/)から早数ヶ月、 preview 版も alpha 8 まで洗練されもうじきbetaの声が聞こえてくるのでは…？ということで、ちょっとVue.js 2.0触ってみることにしました。

## Sampleでみる性能比較

Vue.js 2.0 の開発は [nextブランチ](https://github.com/vuejs/vue/tree/next)にて開発が進められており、example や benchmarksのフォルダから幾つかのサンプルを確認する事が出来ます。

驚くべきことに、Vue.js 2.0 の記述は Vue.js 1.0 の記述とほとんど遜色の無いものとなっているため、パフォーマンスの比較検証なども、同じコードをそのままで検証することが可能となっています。

Vue.js 2.0 最大の特徴として仮想DOMの導入が上げられます。

Webコンパイラの導入で HTMLで記述したテンプレートが内部で自動的に仮想DOMへと変換されるとのことで、仮想DOMのためにJSXのような特殊な記述を覚える必要はありません。

以下にVue.js 1.0と2.0の比較のためのサンプルを用意しました。Benchmarks にあるSVGのサンプルコードを、アプリJS部分は全く同じコードで、Vue.js 1.0 版と Vue.js 2.0 版で公開し、パフォーマンスの比較が出来るようにしました。

https://github.com/mikakane/vue2-sample

Vue.js

https://mikakane.github.io/vue2-sample/svg/vue.html

Vue.js 2

https://mikakane.github.io/vue2-sample/svg/vue2.html

全く同じコードで Vue.js 2.0 版の方が 10fps程度向上しているのは驚きです(手許比)。

Vue.js 2.0 と 1.0 のAPI変更一覧は、
https://github.com/vuejs/vue/issues/2873
に掲載されていますが、ほぼ主要な機能の全てが2.0でも生きているのが分かるかと思います。

手軽に2.0に移行しつつ、性能UPの恩恵に預かれるのは地味にありがたいなぁと思います。
  

## 仮想DOMで何が変わるのか

仮想DOMのメリットとしてSSRが出来るようになる、ということですので、その辺りもぼちぼち暇を見つけてサンプル制作など取り組んで行ければ良いなぁ…と思います。

まぁもともとミニマムなフレームワークということで、特に目新しい追加機能とかもなかったりするのですが、ベースの描画パフォーマンス性能向上と言うのはやはりありがたいです。
そろそろベータ公開されたりしないかなぁ。
Pythonista でiPhoneの写真撮影場所へルート案内

## Pythonista は写真も弄ることができる

　「ひとりぶろぐ」さんの記事「iOS上で動作する革命的ものづくり環境「Pythonista 3」の魅力をとくと語る」（ http://hitoriblog.com/?p=42145 ）の記事によると、Pythonista3 では、iPhone で撮影した写真からジオタグを取り出すことも簡単にできそうだった。

## 場所を記録するために写真を撮る
　先日、知人に案内されて行った場所を、さりげなく記録しようとGPSオンで写真を撮っていた。
Macに取り込めば、その写真のジオタグを表示したりできるが、iPhone だけで完結すると、もっと便利だ。
　iPhoneやiPadではルート案内もできるので、いっそのこと写真からジオタグを参照して、撮影地までのルート案内までできるようなアプリを作ってみた。

## Pythonista3 でルート表示まで
　作成したアプリは、起動すると iPhone のライブラリから写真を選択するように促す。写真を選択すると、Google Maps アプリを起動して、現在の場所から写真の撮影地まで車で行くルートを表示する。
Google Maps のURLスキームは https://developers.google.com/maps/documentation/ios-sdk/urlscheme?hl=ja を参照。

## ソースプログラム

```Python:goForPhotoLocation.py
​#!python3
# _*_ coding: utf-8 _*_
import photos
import webbrowser
gm = 'comgooglemaps://?center='
p = photos.pick_asset()
pl = p.location
loc = str(pl['latitude']) + ',' + str(pl['longitude'])
url = gm + loc + '&daddr=' + loc + '&directionsmode=driving'
webbrowser.open(url)
```
symfony2 で PHPUnit を使って Controller の特定 Action をテストしたいけどエラーがでてよくわかんない

```php
public function testHogeIndexAction () {
  $hogeController = new HogeController();
  $result = $hogeController->hogeIndexAction();
  $this->assertTrue($result, 'hoge');
}
```
みたいなことしたいけど、なんかcontrollerのcontainerがないかんじでおこられる

```php
public function testHogeIndexAction () {
  $kernel = static::createKernel();
  $kernel->boot();

  $hogeController = new HogeController();
  $hogeController->setContainer($kernel->getContainer());

  $result = $hogeController->hogeIndexAction();
  $this->assertTrue($result, 'hoge');
}
```

これでOK
AWSのCloudFormationで自分自身のSecurityGroupを許可するSecurityGroupを作る

SecurityGroupで、「同じSecurityGroup」からのアクセスを許可する、という設定を書く時に。

```
  "Resources":{
    "DefaultSecurityGroup" : {
      "Type" : "AWS::EC2::SecurityGroup",
      "Properties" : {
        "VpcId" : { "Ref" : "VpcId" },
        "GroupDescription" : "Enable access to itself"
      }
    },
    "DefaultSecurityGroupIngress" : {
      "Type" : "AWS::EC2::SecurityGroupIngress",
      "Properties" : {
          "GroupId" : { "Ref" : "DefaultSecurityGroup" },
          "IpProtocol" : "tcp",
          "FromPort" : "0",
          "ToPort" : "65535",
          "SourceSecurityGroupId" : { "Ref" : "DefaultSecurityGroup" }
      },
      "DependsOn" : "DefaultSecurityGroup"
    },
    ....
  }
```

SecurityGroupを作るときに、同時にSecurityGroupのIDを取得することはできない(なぜならまだIDを発行していないから)。
従って、SecurityGroupの作成と同時に一発で目的のものを作ることはできない。

なので、一度空のSecurityGroupを作って(それによりSGのIDを発行して)、それを使って設定の追加のようなことを行う。
GUIのときだって同じような手順でしょと言われるとその通りでした。
フォームに入力した文字列を置換する

# 想定状況
ウェブページのフォームに入力した文字列を置換したい
例えば...
- 使用不可な文字があった
- 単語のスペルを間違えた

など…

# 対処方法
以下の機能を使います

- JavaScriptを使えば文字列を置換できます．
- 代表的なウェブブラウザには表示中のページに対してJavaScriptを実行できる環境（スクラッチパッドなど）があります．

「，．」を「、。」にリプレースする例です．
スクラッチパッドで以下のコードを実行します．

``` lang:replace.js
// テキストエリアの置換
textareas = document.getElementsByTagName('textarea');
for( var i = 0 ;i < textareas.length ;i ++ ){
    textareas[ i ].value = textareas[ i ].value.replace( /，/g ,'、' );
    textareas[ i ].value = textareas[ i ].value.replace( /．/g ,'。' );
}

// テキストの置換
inputs = document.getElementsByTagName('input');
for( var i = 0 ;i < inputs.length ;i ++ ){
  if( inputs[ i ].type == 'text' ){
    inputs[ i ].value = inputs[ i ].value.replace( /，/g ,'、' );
    inputs[ i ].value = inputs[ i ].value.replace( /．/g ,'。' );
  }
}
```

# 応用例
特定の入力フォームに対して同じ操作をしたい場合に便利です．

- 不要なスペースやタブを取り除く．
- 空行や改行を取り除く．
- 全てのチェックボックスをチェックする，アンチェックする．

など．．．
# 余談
私は普段から読点としてカンマ，句点としてピリオドを使います．しかし，普通の書類では「、」と「。」を使う必要があります．そして，自己紹介や志望理由などを専用ページに入力する企業が増えています．いちいち原文をリプレースすると「，．」と「、。」が混在する危険がありますし，何より面倒くさいなぁと思っていました．それで思いついたのが，この方法です．簡単だし，結構使えます．
Solr 6.1.0 をインストールスクリプト使わずに使う



# まとめ
- コマンドラインで `bin/solr start` でだいたいオッケー
- `java -jar start.jar --module=http` で動かせる

# 前提
[Solr 6.0.1 インストールしてからコアの追加まで](http://qiita.com/debari/items/305c4a945572754e0b97) という内容を書いてからそんなに経ってないのに Solr 6.1.0 が既にリリースされていて、`brew install solr` とかコマンドを打つと 6.1.0 がインストールされる時代が既にやってきているという話を [karumado](http://qiita.com/karumado)氏がしていたので、時代の進歩は速いなぁ、と遠い目をしている次第です。

ところで、vagrant で仮想環境を作って、コアの設定ファイルは Mac 側に置いて、vagrant でファイル共有して、`/opt/solr/data/core1/conf` にシンボリックリンクを貼る…とかやっていると、`vagrant up` したときにファイル共有より先にサービスが立ち上がっちゃうので、コアが立ち上がらない状態になっちゃうんですよね。再起動なりリロードなりをしないとコアが読み込めないのであれば、開発中に Solr をサービスとして立ち上げておく必要はないわけで、ここは素直にコマンドラインから Solr をフォアグラウンドで立ち上げるのがいいのかな、という結論に至りました。

# インストール
```sh
$ curl -O http://ftp.jaist.ac.jp/pub/apache/lucene/solr/6.1.0/solr-6.1.0.tgz
$ tar xvzf solr-6.1.0.tgz
$ cd solr-6.1.0
```

今回はインストールスクリプトを使わないので解凍即ちインストールです。(ホントか？)

# 起動

README.txt に書いてあるとおりにやると 

```sh
$ bin/solr start
```

完了です。

```sh
$ ps aux | grep java
```

```
vagrant   3824  7.3 21.1 2622216 215852 pts/0  Sl   11:58   0:06 java -server -Xms512m -Xmx512m -XX:NewRatio=3 -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=8 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:ConcGCThreads=4 -XX:ParallelGCThreads=4 -XX:+CMSScavengeBeforeRemark -XX:PretenureSizeThreshold=64m -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=50 -XX:CMSMaxAbortablePrecleanTime=6000 -XX:+CMSParallelRemarkEnabled -XX:+ParallelRefProcEnabled -verbose:gc -XX:+PrintHeapAtGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:/home/vagrant/solr-6.1.0/server/logs/solr_gc.log -Djetty.port=8983 -DSTOP.PORT=7983 -DSTOP.KEY=solrrocks -Duser.timezone=UTC -Djetty.home=/home/vagrant/solr-6.1.0/server -Dsolr.solr.home=/home/vagrant/solr-6.1.0/server/solr -Dsolr.install.dir=/home/vagrant/solr-6.1.0 -Xss256k -XX:OnOutOfMemoryError=/home/vagrant/solr-6.1.0/bin/oom_solr.sh 8983 /home/vagrant/solr-6.1.0/server/logs -jar start.jar --module=http
```


結構色々オプションがついてきます。バックグラウンド実行でもある。実際に起動に使われているのは `solr-6.1.0/server/start.jar` です。`start.jar` をそのまま使って、フォアグラウンドで最低限のオプションで実行するのであれば、`solr-6.1.0/server/` まで移動して以下のコマンドを打ち込めばいいわけです。

```sh
$ cd server
$ java -jar start.jar --module=http
```

次こそコアをちゃんと作る話を書く。