OmniAICreator/Qiita-1.07M huggingface dataset:
Webサービスでバイナリーデータの送信

Webサービスにおいて、バイナリーデータを送信したい場合、以下３つの方法がよく利用されています。

- Base64：バイナリーデータをBase64エンコードする。
- SwA：SOAP with Attachments（添付ファイルを利用する）
- MTOM/XOP：Message Transmission Optimization Mechanism　（ビット・ストリーム伝送を最適化する）

#Base64

バイナリーデータをBase64エンコードすることで、画像等のバイナリーデータを文字列として送信できます。Base64の欠点は、元のデータサイズより更に1.3倍増加し、データサイズが大きい場合、メッセージの転送時間が長く、エンコード・デコード処理にオーバーヘッドが発生する。

以下はBase64を利用する場合、SOAPメッセージの例です。

```xml
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
	<S:Body>
		<ProductInput xmlns="product.test.co.jp:schema">
			<ProductInfo>
				<ProductID>PDT001</ProductID>
				<ProductName>IPhone SE</ProductName>
				<Price>10000</Price>
				<Image>VGhpcyBpcyB*****Here is a image with very very big size.*****FnZS4=</Image>
			</ProductInfo>
		</ProductInput>
	</S:Body>
</S:Envelope>
```

#SwA
Base64の欠点を解決するために、SwAの登場です。
SwA（SOAP with Attachments）は、MIMEコンテンツ・タイプを使用し、バイナリーデータを添付として SOAP エンベロープの外に置きます。SwAの問題は、添付ファイルはXML（SOAPエンベロープ）の部分と無関係であり、XMLパーサーに通らない点です。

以下はSWAを利用する場合、SOAPメッセージの例です。

```xml
--uuid:e26aa9af-605d-45db-bdfb-f82c06dcce01
Content-Type:application/soap+xml; charset=utf-8

<?xml version="1.0" ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
	<env:Header></env:Header>
	<env:Body>
		<ProductInput xmlns="product.test.co.jp:schema">
			<ProductInfo>
				<ProductID>PDT001</ProductID>
				<ProductName>IPhone SE</ProductName>
				<Price>10000</Price>
				<Image></Image>
			</ProductInfo>
		</ProductInput>
	</env:Body>
</env:Envelope>

--uuid:e26aa9af-605d-45db-bdfb-f82c06dcce01
Content-Id:<6bfec2dc-4cc5-4528-b431-b3fba55d2ab8>
Content-Type:image/jpeg
Content-Transfer-Encoding: binary

*****Here is a image with very very big size.*****

--uuid:e26aa9af-605d-45db-bdfb-f82c06dcce01--
```

#MTOM

MTOM は SOAP 1.2 仕様の一部で、SwAと非常に似っていますが、唯一異なる点としては、SOAPエンベロープ内のSOAPボディからMTOM/XOP仕様形式の添付を参照する方法は，XOP要素のhref属性が使用されることです。Base64に比べて、バイナリーデータの占有スペースが小さくて済むので、MTOM を使用するとプロセッサー使用量が増えることはありますが、伝送時間を短くできます。

以下はMTOM/XOPを利用する場合、SOAPメッセージの例です。

```xml
--uuid:d8c9f386-9762-4b9f-8edc-1c605beae853
Content-Id:<rootpart*d8c9f386-9762-4b9f-8edc-1c605beae853@example.jaxws.sun.com>
Content-Type:application/xop+xml;charset=utf-8;type="application/soap+xml;action=\"\""
Content-Transfer-Encoding: binary

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
	<S:Body>
		<ProductInput xmlns="product.test.co.jp:schema">
			<ProductInfo>
				<ProductID>PDT001</ProductID>
				<ProductName>IPhone SE</ProductName>
				<Price>10000</Price>
				<Image xmlns:xop="http://www.w3.org/2004/08/xop/include">
					<xop:Include
						href="cid:fd72e747-1f04-49e2-af6d-c4b35b3e50d2@example.jaxws.sun.com"></xop:Include>
				</Image>
			</ProductInfo>
		</ProductInput>
	</S:Body>
</S:Envelope>

--uuid:d8c9f386-9762-4b9f-8edc-1c605beae853
Content-Id:<fd72e747-1f04-49e2-af6d-c4b35b3e50d2@example.jaxws.sun.com>
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary

*****Here is a image with very very big size.*****

--uuid:d8c9f386-9762-4b9f-8edc-1c605beae853--
```
#C よく見る"Bus error: 10"の原因追求

Cでプログラムを書いてコンパイル，実行したときに以下のようなメッセージを吐かれることがしばしば．

```
$ ./a.out
Bus error: 10
```
これについて原因を追求してみた。

```
int main(void)
{
	char *str;

	str = "ABCDE";
	*str = 'X';
	printf("%s\n", str);

	return 0;
}
```
これが実際にエラーを吐かれたときに実行したプログラム。文字列リテラル`"ABCDE"`の1文字目を'X'に変えたいわけだが、これじゃだめらしい。いろいろと調べた結果、

```
	str = "ABCDE";
```
どうもこの部分で引っかかっている模様。以下のように配列を使って書き換えてみる。

```
int main(void)
{
	char str[] = "ABCDE";

	*str = 'X';
	printf("%s\n", str);

	return 0;
}
```
実行結果が以下。

```
$ ./a.out
XBCDE
```
これでうまくいきました。
原因は文字列リテラルとコンパイラの関係みたいで、
- ポインタ変数に文字列リテラルを直接設定すると、変更（上書き）ができない
- 配列にすると自由に書き換え可能
とのことです。配列に直接設定するのとポインタに直接設定するのではメモリに対して扱いが変わると。このことに関しての詳細はまた時間があれば。
Ubuntu 16.04LTS にLaTeX をインストール

試験環境
■ Ubuntu 16.04 LTS（on Hyper-V 2012R2）

Ubuntu 16.04LTS がリリースしたため、 LaTeXの環境の構築をテストしました。
※物理環境の構築ではなく、Hyper-V（Win2012R2）をもとにしています。

----
※適時、sudoを入れること

1. 事前作業
とりあえず、アップグレードする
> apt-get update
> apt-get upgrade
 
2. リポジトリのインストール
> sudo apt-add-repository ppa:texlive-backports/ppa

3. TexLiveのインストール
> sudo apt-get install texlive-lang-cjk

4. 動作試験
Test.texで保存

>
>¥documentclass{jarticle}
>¥begin{document}
>こんにちは、世界
>¥end{document}

コンパイル
> platex test.tex
> dvipdfmx text.dvi

EX. 便利なアプリ
1. VIM
※標準のViでは生産性が低いので、とりあえずVIM入れましょう。
> sudo apt-get install vim
[ docker ] tag情報も調べたい


`docker search`だとタグ情報は見れない。今のところ。curlでAPIを叩くしかないっぽい。

```bash

curl https://registry.hub.docker.com/v1/repositories/jenkins/tags | jq .
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2955    0  2955    0     0   1836      0 --:--:--  0:00:01 --:--:--  1835
[
  {
    "layer": "ed0ea37c",
    "name": "latest"
  },
  {
    "layer": "7afdc21a",
    "name": "1.554"
  },

```
AWSでAMIのルートパーティションをLVMに変換する 

# やったこと

AWSのEC2にて、ルートパーティションが非LVMのイメージを使っていたのですが、ルートパーティションをLVMのイメージに変換してみました。

今回対象としたAMIは次のような構成のものです。

- 仮想化方式 : hvm
- ブロックデバイス : /dev/xvda にスナップショットが1つだけ
- パーティション : /dev/xvda1 だけが存在し、その中にルートや/bootが入っている
- OS : CentOS 6 （ゼロからインストールしたもの）
- SELinux : **無効**

変換後のAMIのパーティションは次のようにしました。

- /dev/xvda1 と /dev/xvda2 が存在する
- /dev/xvda1 は普通のパーティションで、/boot の中身が入っている
- /dev/xvda2 はLVMで、1つのLVを作り、その中にルートが入っている


# 作業準備

作業用のインスタンスを準備しましょう。
Linuxなら何でも良いと思いますが、今回は上記のAMIから作ったインスタンスを使いました。


# 変換作業

## EBS作成＆アタッチ

AWSマネジメントコンソールにて、対象のAMIのスナップショットからEBSを作り、作業用インスタンスにアタッチします。
今回は /dev/sdf にアタッチしました。（OSでは /dev/xvdf として認識される。）

また、変換後のAMIになる空のEBSを作り、作業用インスタンスにアタッチします。
先に作ったものと同じサイズで作り、/dev/sdg にアタッチしました。


## fdiskでパーティション作成

作業用インスタンスにて、fdiskで変換先のEBSにパーティションを作成します。
（partedでも良いですが、fdiskのほうが慣れているので…。）

```bash
fdisk /dev/xvdg << EOF
n
p
1

64
u
n
p
2


t
2
8e
w
EOF
```

1つ目のパーティションは /boot 用で、ざっくり500MB程度として作っています。
（512byte × 255 × 63 × 64 ≒ 502MB）


## LV作成＆フォーマット

/boot 用のパーティションは普通にext4でフォーマットします。

```bash
mkfs.ext4 /dev/xvdg1
```

ルート用のパーティションにはPV＆VG＆LVを作って、ext4でフォーマットします。

```bash
pvcreate /dev/xvdg2
vgcreate VGroot /dev/xvdg2
lvcreate -n LVroot -l 100%FREE VGroot
mkfs.ext4 /dev/VGroot/LVroot
```

パーティションにラベルを付けておきます。

```bash
e2label /dev/xvdg1 BOOT
e2label /dev/VGroot/LVroot /
```



## マウント

変換元、変換先のルートパーティションがそれぞれ /mnt/src , /mnt/dest になるようにマウントします。

```bash
mkdir /mnt/src
mount /dev/xvdf1 /mnt/src

mkdir /mnt/dest
mount /dev/VGroot/LVroot /mnt/dest

mkdir /mnt/dest/boot
mount /dev/xvdg1 /mnt/dest/boot
chmod 555 /mnt/dest/boot

rmdir /mnt/dest/lost+found/
rmdir /mnt/dest/boot/lost+found/
```


## ファイルのコピー

変換元のファイルをまるっと変換先にコピーします。

```bash
shopt -s dotglob
cp -pr /mnt/src/* /mnt/dest/
```


## grubのインストール＆設定

単純にファイルをコピーしただけではAMI化しても起動しないので、MBRにgrubをインストールします。

```
cat << EOF | grub --batch
device (hd0) /dev/xvdg
root (hd0,0)
setup (hd0)
EOF
```

/boot を独立したパーティションに分けたので、grub.conf で指定している kernel や initrd のパスから "/boot" を除去します。

```bash
sed -i -e "s/\/boot//g" /mnt/dest/boot/grub/grub.conf
```


## fstabの設定

ルートと /boot がマウントされるように fstab を次のような感じに設定します。

```bash
vi /mnt/dest/etc/fstab
---
LABEL=/    /         ext4    defaults         1 1
LABEL=BOOT /boot     ext4    defaults         1 2
(その他はお任せ)
---
```


## アンマウント

ファイル操作はこれで終わりなのでアンマウントします。
EBSを正しくデタッチできるようにするために、VG＆LVを無効にするのをお忘れなく。

```bash
umount /mnt/dest/boot/
umount /mnt/dest/
umount /mnt/src/

vgchange -an VGroot
```


## EBSデタッチ＆スナップショット作成＆AMI登録

AWSマネジメントコンソールに戻り、変換後のEBSをデタッチしてスナップショットを作成し、AMIとして登録します。


# 動作確認

AMI登録が終われば、インスタンスを起動して確認しましょう。
期待通り起動することを祈りましょう。


# 後始末

新しいAMIで問題なければ、作業用のインスタンスやEBSを削除しましょう。
変換前のAMIやスナップショットもバッサリと削除したら漢ですね。


# おまけ（備忘録）

ルートパーティションをLVMにすることのメリットは、インスタンスを起動したまま簡単に容量を増やせることです。
増やしたいサイズの空のEBSを作成してインスタンスにアタッチし、次のようにすれば容量を増やせます。

```bash
※EBSを /dev/sdf にアタッチした場合

fdisk /dev/xvdf
pvcreate /dev/xvdf1
vgextend VGroot /dev/xvdf1
lvextend -l +100%FREE /dev/VGroot/LVroot
resize2fs /dev/VGroot/LVroot
```
広告タグを非同期で読み込みたい！jQuery.getScriptがウルトラ便利！


広告を入れるたびにgoogle page speedなどで指摘されるrenderingブロックの警告は、悩みの種です。
ということで、タグを非同期で呼びたいんだけど、jsファイル読むだけじゃなくて、その後関数を実行するような広告タグに出会いました。
その時に使った `jQuery.getScript` をご紹介します。

## 通常はasync, deferで対応出来る
広告用のscriptタグなど、非同期で読み込みたい時、普通は下記のように、 `async` や `defer` 属性を付けて対応すると思います。これで、renderingブロックせず、documentの解析が終わったらscriptを読むようにしてくれます。

```
<script type="text/javascript" src="xxxx.js" async></script>
```

## scriptを読み込み後、関数を実行したい時はjQuery.getScript

しかし、scriptを読み込んだ後に、関数を実行するようなタグも一部存在します。実際にもらったコードはこんな感じでした。

```
# 某AdNetwork担当者: 「下記をbodyの上に埋め込んでください」
<script type="text/javascript" src="xxxx.js"></script>
<script type="text/javascript">AAAAA.run()</script>
```

この場合、asyncなどで呼び出した場合、順番が保証されず、 `AAA is not defined` というエラーが出て、広告が表示されない場合が出てきます。
（deferだと一部ブラウザでは順番保証されてるっぽいけど）
そこで、 `jQuery.getScript` です

```
<script type="text/javascript">
jQuery.getScript("xxxx.js", function(){
  AAAAA.run()
});
</script>
```

これで、 `xxxx.js` が読み込まれた後に、関数が実行されることを保証できました。簡単♪

## 参考
[jQuery getScript](https://api.jquery.com/jquery.getscript/ "jQuery getScript")
ディープラーニングをやってみた

#Caffeを使って見る

Caffeとは、、、
C++で実装されたディープラーニングのオープンソースライブラリ。カリフォルニア大学バークレー校の研究センターBVLCが中心となって開発、C++・Python・MATLABで利用可能。

他のライブラリとしては、以下がある。

|ライブラリ|内容|
|:---|:-----|
|Torch7|ニューヨーク大|
|Cuda-convert|トロント大|
|Chainer|Preferred Networks|
|TensorFlow|Google|

ひとまず、他は置いておいて、caffeに必要なものをインストール

```
brew install --fresh -vd snappy leveldb gflags glog szip lmdb  
brew install hdf5 opencv
brew install --build-from-source --with-python --fresh -vd protobuf
brew install --build-from-source --fresh -vd boost boost-python
brew install openblas

#必要に応じで以下もやらなきゃかも
sudo xcodebuild -license
brew tap homebrew/science
```
|ライブラリ|内容|
|:-----------|:------------|
|lmdb|key-value型データストア|
|hdf5|ファイルフォーマット|
|opencv|画像処理ライブラリ|
|protobuf|インターフェース定義言語で構造を定義するためのライブラリ
|boost-python|C++のクラスや関数をラップするPythonモジュールを簡単に書くライブラリ|
|openblas|高速なBLAS|

Caffeのダウンロード

```
git clone https://github.com/BVLC/caffe.git
cd caffe

cp Makefile.config.example Makefile.config
vim Makefile.config
```
configファイルを修正
1. `BLAS := atlas` を `BLAS := open` に変更する
2. 以下のコメントアウト(#)を外す

```Makefile.config
`# CPU_ONLY := 1`
`# BLAS_INCLUDE := $(shell brew --prefix openblas)/include`
`# BLAS_LIB := $(shell brew --prefix openblas)/lib`
```

ダウンロードするとcaffeフォルダができているので、そこに行き、

```
make clean
make all -j4
make test -j4
make runtest

cd python/
for li in $(cat requirements.txt); do sudo pip install $li; done

cd ../
make pycaffe
```

うまくいかない、、、

>```
>CXX/LD -o python/caffe/_caffe.so python/caffe/_caffe.cpp
>python/caffe/_caffe.cpp:10:10: fatal error: 'numpy/arrayobject.h' file not found
>#include <numpy/arrayobject.h>
>         ^
>1 error generated.
>make: *** [python/caffe/_caffe.so] Error 1
>```

よくわからないからTensorFlowに乗り換える！以下に続く

TensorFlowでdeep learningをやってみる
http://qiita.com/northriver/items/17e936343110d392cce8
html5j Webプラットフォーム部 第12回勉強会 Satis function( ){ ... }; メモ

# html5j Webプラットフォーム部 第12回勉強会
2016-04-28（木）19:00 - 21:30@日本マイクロソフト株式会社

キーワードメモ

## 「実践F＃」MSエバンジェリストの荒井さん

- IPL 1956年(！)
- 昔はLISP専用機→関数型言語はコンピュータリソースを必要とする。
- sql→集合に特化

- 関数型言語→もともと組み込みで集合を扱うことが前提になっている
 - map、reduce
 - forはいらない
 - IFステートメントではなく、IF関数

- コンパイラが完全チェック、曖昧さを許してくれない→バグが混入しにくい
- immutable 並列処理のデッドロック回避
- 遅延実行、遅延評価

- 関数型基本原則
 - 引数をとって値を返す
 - 引数を入れたら必ず答えが返る
 - →参照透明性、副作用が無い

- オブザーバーパターン
- パイプライン
- リアクティブ

## Y＝f=>(x=>f(x(x)))(x=>f(x(x))) - Mozilla清水さん

- データと操作
 - 操作 手続き型、すごろく
 - データ 関数 ワームホール

- JS
 - 第一級関数

1. 関数定義
 - 無名関数
- 式
 - 評価すると値を返す
- 関数を引数に取る関数
- リスト処理
 - filter/sort
 - map/reduce
 - foreach
- 関数を返す関数
- 関数を引数として関数を返す

- 参照透過性
 - 同じ入力に対して同じ出力
 − closureを使って状態スナップショットをとれば参照透過
 - counter.nex().next().next()
- カリー化
    - 複数の引数を取る関数を、１つの引数をとる関数（複数）に変える
    − カリー化を利用した条件分岐
    - yコンビネーター

- パフォーマンス
 - イベントハンドリング
 - イベント＝時系列データ
 - ストリームからデータを拾って処理する→関数をでかくと自然な処理を書ける

## Introduction to Reactive Extensions - Ohzeki-san

- Rx
 - observable
 - operator
 - subject
 - scheduler

- define a source of an event as observable
- apply operator, and create a new observable
- repeat them until you get an final value
- scheduler can control timing to deliver a value

- __Rx is just "advanced" observer pattern__.
- push/pull whcich is more suitable for your usecase ?

## References
- [第12回勉強会 Satis function( ){ ... };](https://webplat.doorkeeper.jp/events/42974)
- [Y＝f=>(x=>f(x(x)))(x=>f(x(x)))](http://www.slideshare.net/chikoski/20160428-html5jwebplat)
- [Introduction to Rx without saying "reactive" or "functional"](https://speakerdeck.com/saneyuki/introduction-to-rx-without-saying-reactive-or-functional)
PHP+postfix with Gmail on El Capitan

OSX上で`php -S localhost:8080`なんぞして、`mb_send_mail`なアプリを作ってたんですが、メール送信テストしたくてもまーなかなか上手く行かないもので。やっとの思いで一通したのでここに眠らせる。R.I.P.

## ベースとなった環境

* OSX El Capitan 10.11.4
* postfix (mail_version = 2.11.0)
* PHP 5.6.21 (cli) (built: Apr 29 2016 02:31:44)
    * これだけ`homebrew`による。

## 用意する各種設定ファイル

* postfix 設定ファイル

```/etc/postfix/main.cf
# :
# : 前略
# :

# CUSTOM ########
# Minimum Postfix-specific configurations.
mail_owner = _postfix
setgid_group = _postdrop

myhostname = smtp.gmail.com
relayhost=[smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
smtp_use_tls = yes
smtp_sasl_mechanism_filter = plain
```

* postfix パスワードファイル (`/etc/postfix/sasl_passwd`)

    ```
    [smtp.gmail.com]:587 hoge@hoge.com:hogehogehoge
    ```

    * ここは、自分（送信元）のGoogleアカウントのメールアドレスとパスワードをコロンつなぎで記入する
    * Googleアカウントで二段階認証を使ってる場合、[アプリパスワード](https://support.google.com/accounts/answer/185833?hl=ja)を用意して使う必要がある

* PHP 設定ファイル

    ```/usr/local/etc/php/5.6/php.ini
    ;
    ; 前略
    ;
    [mail function]
    ; For Win32 only.
    ; http://php.net/smtp
    SMTP = smtp.gmail.com
    ; http://php.net/smtp-port
    smtp_port = 587

    ; For Win32 only.
    ; http://php.net/sendmail-from
    sendmail_from = hoge@hoge.com

    ; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
    ; http://php.net/sendmail-path
    sendmail_path =/usr/sbin/sendmail -t -i

    ; Force the addition of the specified parameters to be passed as extra parameters
    ; to the sendmail binary. These parameters will always replace the value of
    ; the 5th parameter to mail().
    ;mail.force_extra_parameters =

    ; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
    mail.add_x_header = On
    ```

    * `sendmail_from` のところは、さきと同じくGoogleアカウントのアドレスを設定すること
    * homebrewでインストールしたPHPはこのパスに設定ファイルがある。
    * それ以外の方法でインストールしたPHPについては知らぬ！

## 設定ファイルを用意した上で、やるべきこと

* postfix用のパスワードファイルをハッシュ化して、postfixを再起動する

    ```sh
    sudo postmap hash:/etc/postfix/sasl_passwd
    sudo postfix reload
    sudo postfix stop
    sudo postfix start
    ```

## 試す

```sample.php
<?php
date_default_timezone_set('Asia/Tokyo');
mb_send_mail(
    "hoge@hoge.com",
    "test for postfix",
    "test for PHP+postfix with Gmail on El Capitan",
    "From: hoge@hoge.com"
);
?>
```

* ここのFromは先のグーグルアカウントを使っておくこと。


## 余談

メール関連は面倒が多すぎるので、[Mailgun](https://www.mailgun.com/)みたいな外部サービスに投げたほうが健全だなぁとおもいます。まる
Windows10でPhoenix / Elixir使えるようにしてみた

# 環境
- Windows10
- コンソールはcmd.exeのみ

# 参考
- Windows 8.1にElixirを導入するメモ
http://qiita.com/tsutorm/items/3485458379d542ef628a
- CentOS7に入れた時の記録 http://qiita.com/it__ssei/items/d389be34372f88e38c28

# 準備
## chocolatelyインストール
macでいうhomebrew。

コマンドプロンプトを管理者で開く

```bat
@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin
```

## 確認
コマンドプロンプトを管理者で再起動して

```bat
choco --help
```

## nodejs入れる

```bat
cinst nodejs
```

途中何か訊かれたら「1) yes」を選択すればOK。

## npm

```bat
cinst npm
```

## elixir

```bat
cinst elixir
```

erlangも一緒に入る

## 確認
コマンドプロンプトを再起動して

```bat
choco list -l

mix help
```

# Phoenix
## インストール

```bat
mix local.hex
mix archive.install https://github.com/phoenixframework/archives/raw/master/phoenix_new.ez
```

## 試作

```bat
mix phoenix.new hello_phoenix
cd hello_phoenix

mix deps.get

mix phoenix.server
```

## アクセス

ブラウザで
http://localhost:4000/
【中華レーザー】レーザーチューブの設置

# 土台の整備

土台をネジ止め。

![DSC09505.jpg](https://qiita-image-store.s3.amazonaws.com/0/63450/771576da-5726-8412-a475-18d5b436f2c2.jpeg)

レーザを載せる台と取り付ける。

![DSC09507.jpg](https://qiita-image-store.s3.amazonaws.com/0/63450/f8098e23-4156-7537-a801-fe92fcd16b97.jpeg)

反対側の土台も。

![DSC09515.jpg](https://qiita-image-store.s3.amazonaws.com/0/63450/07ccdcad-28c5-fc98-e724-9f869e0f11bd.jpeg)

レーザを載せる台を取り付ける。

![DSC09516.jpg](https://qiita-image-store.s3.amazonaws.com/0/63450/9d93de83-28e2-c8c6-1e5c-0445d6da7200.jpeg)

上から見るとこんな感じ。　

![DSC09517.jpg](https://qiita-image-store.s3.amazonaws.com/0/63450/a9a15b5c-cd12-ad95-683f-c2b1b66c56b8.jpeg)

# レーザを載せる

レーザーを乗せて、固定する

# 配線

レーザー発信側は青い配線を接続。

![DSC09520.jpg](https://qiita-image-store.s3.amazonaws.com/0/63450/5a0c0e9d-832d-17e6-4823-16240440b4d8.jpeg)

OUTLETの注水用のチューブを接続。

![DSC09519.jpg](https://qiita-image-store.s3.amazonaws.com/0/63450/e33578df-9160-0aa6-5db9-1fcffc10c788.jpeg)

反対側も同様に、配線とINLETのチューブを接続。

![DSC09523.jpg](https://qiita-image-store.s3.amazonaws.com/0/63450/5b653c1f-b21c-6b10-a1aa-14e7a21de3a5.jpeg)

配線後はケースをつける。

![tube002.JPG](https://qiita-image-store.s3.amazonaws.com/0/63450/663b0fdd-3b51-71e4-db2d-9346eb6aed62.jpeg)

高さを調整。

![tube001.JPG](https://qiita-image-store.s3.amazonaws.com/0/63450/5771847b-b98c-1277-e56c-d8514a341621.jpeg)

これでレーザーチューブの配置完了。

# 中華レーザー関連

【中華レーザー】工業用冷却装置
http://qiita.com/akira-sasaki/items/c89af9ab370c722ea974
ROS_02:準備編　ROSのインストール

#参考
http://wiki.ros.org/jade/Installation/Ubuntu
を参考にしている。

#ROSのインストール
##sources.listを設定
```
$sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
```
##鍵の設定
```
$sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 0xB01FA116
```
##インストール
パッケージの更新
まずUbuntuのパッケージを最新版に更新する。

```
$sudo apt-get update
```

ubuntu 14.04.4なので

```
$sudo apt-get install xserver-xorg-dev-lts-utopic mesa-common-dev-lts-utopic libxatracker-dev-lts-utopic libopenvg1-mesa-dev-lts-utopic libgles2-mesa-dev-lts-utopic libgles1-mesa-dev-lts-utopic libgl1-mesa-dev-lts-utopic libgbm-dev-lts-utopic libegl1-mesa-dev-lts-utopic
```

を実行するように書いてあるのですが、エラーが発生してうまく行きませんでした。
先にapt-get updateやらupgradeをしてしまったからかなあ

[Ubuntu 14.04.3にROS Jadeをインストール](https://daichiahl.wordpress.com/2016/01/08/ubuntu-14-04-3%E3%81%ABros-jade%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/)
を参考にして下記をコマンドを実行したらうまく行きました。

```
$sudo apt-get install --install-recommends linux-generic-lts-vivid xserver-xorg-core-lts-vivid xserver-xorg-lts-vivid xserver-xorg-video-all-lts-vivid xserver-xorg-input-all-lts-vivid libwayland-egl1-mesa-lts-vivid libgl1-mesa-glx-lts-vivid libglapi-mesa-lts-vivid libgles1-mesa-lts-vivid libegl1-mesa-lts-vivid           xserver-xorg-dev-lts-vivid mesa-common-dev-lts-vivid libxatracker-dev-lts-vivid libgles2-mesa-dev-lts-vivid libgles1-mesa-dev-lts-vivid libgl1-mesa-dev-lts-vivid libgbm-dev-lts-vivid libegl1-mesa-dev-lts-vivid
```
##ROSのすべてのデスクトップ環境のインストール
```
sudo apt-get install ros-jade-desktop-full
```
[Ubuntu 14.04.3にROS Jadeをインストール](https://daichiahl.wordpress.com/2016/01/08/ubuntu-14-04-3%E3%81%ABros-jade%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/)によるとGAZOがインストールされない見たいので

```
$sudo apt-get install gazebo5
```

も実行
##rosdepの初期化

```
$sudo rosdep init
$rosdep update
```

##環境設定
毎回立ち上げ時に環境を読み込むように以下を実行

```
$echo "source /opt/ros/jade/setup.bash" >> ~/.bashrc
$source ~/.bashrc
```
#rosinstallの準備
```
$sudo apt-get install python-rosinstall
```
ionicコマンドメモ


プロジェクトを作成

```
ionic start sampleProject
```


プラットフォームを追加

```
ionic platform add ios
```


サーバー立ち上げ

```
ionic serve 
ionic serve --lab #labで立ち上げ
```

ビルド

```
ionic build ios
```

エミュレータ立ち上げ

```
ionic emulate ios

#実機でログを見る
ionic emulate ios --livereload 

#としたあとでコマンドラインで
consolelogs
#または
serverlogs

```


実機テスト

```
ionic run android
```


ionicへアップロード

```
ionic upload
```
paiza.ioでruby

#概要
paiza.ioでズンドコやってみました。
#実際
https://paiza.io/projects/y74gSBSqvuJd7gJ1LDdR-g
#サンプルコード
```
zun = "ズン"
doko = "ドコ"
zun_doko = ""
while zun_doko != "ズンズンズンズンドコ" do
    zun_doko = ""
    5.times do
    zun_doko = zun_doko + [zun, doko].sample
end
puts zun_doko
end
print zun_doko + "キ・ヨ・シ！"

```
VirtualBoxでLinuxVMの共有ディレクトリのパーミッションを解決する

VirtualBoxの共有ディレクトリを作成してもアクセス権限の問題で毎回 `sudo` を使わないとアクセスできない問題の解決方法を調べた。

結論としては今のユーザーを `vboxsf` グループに追加すればよいことが分かった。

```bash:vboxsfグループに現在のユーザーを追加
$ sudo usermod -aG vboxsf ${USER}

# Groupにvboxsfが追加されているか確認する
$ groups ${USER}
```

GUIのファイラとかからのアクセスは再起動しないと有効にならなかったので注意。

# 参考
[File permission issues with shared folders under Virtual Box (Ubuntu Guest, Windows Host) - Unix & Linux Stack Exchange](http://unix.stackexchange.com/questions/52667/file-permission-issues-with-shared-folders-under-virtual-box-ubuntu-guest-wind)
jsod.itでriot.js

#概要
jsdoでriotやってみた。
#実際
http://jsdo.it/ohisama1/e7hW
http://jsdo.it/ohisama1/W4nc
http://jsdo.it/ohisama1/GdEO
http://jsdo.it/ohisama1/WzlV
http://jsdo.it/ohisama1/YEJ8
http://jsdo.it/ohisama1/SNm8
http://jsdo.it/ohisama1/w6SZ
#サンプルコード
```
<script src='https://cdnjs.cloudflare.com/ajax/libs/riot/2.2.4/riot+compiler.min.js'>
</script>
<script>${script}</script>
<app title='Hello, Riot.js'>
</app>
<script type='riot/tag'>  
  <app>
    <h1>{ title }</h1>    
    <ul>
      <li>{ name }</li>
      <li>{ title || "タイトルないよー" }</li>
      <li>{ flag ? 'ready' : 'loading' }</li>
      <li>{ new Date() }</li>
      <li>{ Math.round(64.5) }</li>
    </ul>    
    <ul>
      <li each='{list0}' class='{done:done}'>{ title }</li>
    </ul>
    <style>
      li.done {
        color: #a00;
        text-decoration: line-through;
      }
    </style>
    <button onclick='{click}'>click</button>
    <ul>
      <li each='{list1}'>
        <button onclick='{clickItem}'>{name}</button>
      </li>
    </ul>
    this.list1 = [
      {name: 'hoge'},
      {name: 'foo'},
      {name: 'bar'},
    ];
    this.click = function() {
      alert('click されたよー');
    };
    this.clickItem = function(e) {
      alert(e.item.name + 'が click されたよー');
    };
    this.title = opts.title;
    this.name = 'test';
    this.flag = false;   
    this.list0 = [
      {
        title: 'Hello, world!',
        done: false,
      },
      {
        title: '牛乳を買う',
        done: true,
      },
      {
        title: '豚肉を買う',
        done: false,
      },
    ];       
  </app>
</script>
<script>
    riot.mount("*");
</script>
'''
Python3で自作モジュール全体を読み込もうとした時の勘違いのメモ

# 何が起こったか
ある自作モジュール(fruits.py)の中にある，複数のclass(Apple, Orange, Grape)を`import fruits`で読み込もうとした時の勘違いをメモ．
参考：http://www.python-izm.com/contents/basis/import.shtml


# 今回の勘違い
以下のようなモジュールがあるとする．

```fruits.py
class Apple():
  def hoge():
    pass

class Orange():
  def hoge():
    pass

class Grape():
  def hoge():
    pass
```
このモジュール内のクラスを`import fruits`で読み込んで，インスタンスを作成しようとしたところ，以下のエラーが出た．

```Error
>>> import fruits
>>> apple = Apple()
                                                                                            
>>> type(apple)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'Apple' is not defined  
```

正しくは，`モジュール名.クラス`のように扱う．今回の勘違いは`import モジュール`で`type(クラス名)`のように扱おうとしたことが原因だった．

```
>>> import fruits    
>>> type(fruits.Apple)
<class 'type'>   
```

もし`type(クラス名)`のように扱う場合は，以下のようにする．

```
>>> from fruit import Apple
>>> type(Apple)
<Class 'type'>
```

# 追記
shiracamusさんからコメントを頂きました．
type(クラス)のようにしたい場合は，`from モジュール import *`と書けば可能です．

```
>>> from fruit import *
>>> type(Apple)
<class 'type'>
```
Alfrescoを構築するdocker-compose.yml

# 背景

[脱ファイルサーバ！！個人でも会社でも使えるOSSのドキュメント管理システム！その名も「Alfresco」！](http://qiita.com/sadayuki-matsuno/items/f57b5f01789080cfc1a0)
こちらの記事でAlfrescoを知り、へえ～こんなのあるんだ～、ちょいと試してみますかと思い立ったものの、
Alfrescoは構成要素が多く構築するだけで一苦労です。(インストーラーはかなりのことをしてくれますが、それでも)
構築が終わるころにはそれで満足してしまい、本来の目的である機能の検証がおろそかになってしまいがちではないでしょうか。
そこで、こんな時のコンテナやろがい！と、dockerの使いどころを求めていた私はdocker-compose.ymlをこしらえました。
構築が面倒な方はぜひ使ってみてください。

インストール手順は下記の記事をまるっと参考にさせて頂いております。:bow:
[Alfrescoのインストール作業をコマンド単位で丁寧に記載します](http://qiita.com/sadayuki-matsuno/items/87fb9793b1d38ab58e18)

# reqired
ホストのメモリ >= 2GB
docker >= 1.10
docker-compose >= 1.6

# docker-compose.yml
```docker-compose.yml
version: "2"
services:
  nginx:
    image: nginx
    volumes:
      - "./nginx/alfresco.conf:/etc/nginx/conf.d/alfresco.conf:ro"
    ports:
      - "80:80"
    depends_on:
      - alfresco
    networks:
      - flat-network
  alfresco:
    build: ./alfresco
    expose:
      - "8080"
    depends_on:
      - db
    volumes:
      - "alfresco-data:/opt/alfresco/alf_data/"
    networks:
      - flat-network
  db:
    image: mysql:5.7
    volumes:
      - "db-data:/var/lib/mysql"
      - "./db/mysql/conf.d/:/etc/mysql/conf.d:ro"
    environment:
      MYSQL_ROOT_PASSWORD: "change_my_password"
      MYSQL_DATABASE: "alfresco"
      MYSQL_USER: "alfresco"
      MYSQL_PASSWORD: "alfresco"
    networks:
      - flat-network
volumes:
  db-data:
  alfresco-data:
networks:
  flat-network:
```
NginxとMySQLは公式イメージを利用して、Alfresoはビルドしています。
AlfrescoのDockerfileやその他付随するファイルが気になる方は https://github.com/muk-ai/docker-alfresco をご覧下さい。
Alfrescoもイメージを指定した方が速いですが、Community Editionのダウンロード前にユーザー登録があり、
勝手に埋め込むのはよくないと思ったのでこのようになりました。
データベースとAlfrescoのデータはVolumeを使って永続化しています。

# 動かしてみる
```
git clone https://github.com/muk-ai/docker-alfresco.git
cd docker-alfresco/
docker-compose up
```
上手く実行できていれば、ブラウザでport 80にアクセスするとログイン画面が表示されます。
![alfresco_login.png](https://qiita-image-store.s3.amazonaws.com/0/120222/43b01934-2b31-3db5-725b-9a9649fe21fa.png)
adminのパスワードは`alfresco/optionfile.txt`の`alfresco_admin_password`で指定したものになります。適宜、変更下さい。
`optionfile.txt`はAlfrescoのインストーラーに参照させるファイルです。
このファイルを変更した時はイメージのリビルド(`docker-compose build alfresco`)を行ってください。
`docker-compose.yml`の`MYSQL_*`環境変数と、`optionfile.txt`ファイルの`jdbc_*`の値も必要に応じて変更して下さい。

# 雑感
## メモリについて
メモリが2GB未満だとこんなメッセージが出てインストールが失敗します。

```
1.95 GB の RAM では、テストまたは本番環境で Alfresco を実行するには不十分です。
Alfresco が正しく動作しないことがあり、その場合は正常に機能しません。
サーバーの RAM を最低 2.0 GB にアップグレードしてください。推奨 RAM サイズは 4.0 GB です。
```
なくなく、t2.mediumを使いました。。
それでもけっこうもっさりしているのでチューニングが必要ですかね。
`.soffice.bin`というプロセスがCPU100%になるのも原因わからず・・・

## `.soffice.bin`について
`alfresco/Dockerfile`の中で一見、無意味なコマンドを打っているように見えますが

```
RUN /opt/alfresco/libreoffice/scripts/ctl.sh start || exit 0
```
このスクリプトの途中で実行される、`/opt/alfresco/libreoffice/program/.soffice.bin`が必ず最初の1回だけ失敗して、
結果としてDockerコンテナが止まるので、この行を追加しました。理由は追えていません。
しかし、`.soffice.bin`が動いてないとOfficeドキュメントのプレビュー機能が動かないのです。

## Alfrescoイメージについて
公式イメージのように、adminのパスやらDBのアカウントやらを環境変数で渡すようにできるとよいのですが、
再利用可能なイメージを作るにはAlfresco自体への理解を深めないといけないのと、Docker職人のレベルを上げる必要を感じました。
Alfrescoを作っている人がDockerfileを用意してくれると嬉しいですね。試用までのハードルが下がります。
$sudo visudoでenv_resetなど項目が見つからない

- VirtualBoxとVagrant上環境下にCentOS6.7インストール。
- Node.js 0.12.4。
- MacOS10.9.5。

Node.jsインストール後、sudoコマンド実行時のパスをユーザーパスと同等に設定する為
```
[vagrant@localhost ~]$ sudo visudo 
```
と実行。viエディタが開くも設定編集すべき「env_reset」や「env_keeps +="HOME"」の項目が見つかりません。
代わりに出てきたコードが以下の様になります。

```
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
##
## This file must be edited with the 'visudo' command.

## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
# Host_Alias     FILESERVERS = fs1, fs2
# Host_Alias     MAILSERVERS = smtp, smtp2

## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem


## Command Aliases
## These are groups of related commands...

## Networking
# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

## Installation and management of software
# Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

## Services
"/etc/sudoers.tmp" 118L, 4000C
```
他の参考サイトを見ると、どうやら環境変数PATHが関係するそうですが解決方法が分かりません。
ご助言頂けたら幸いです。
【しずおかアプリ部】活動ログ　第18回

![しずおかアプリ部2.jpg](https://qiita-image-store.s3.amazonaws.com/0/88105/1373b384-9c37-189c-d75d-f1bdc4ed47bc.jpeg)

■タイトル
第１８回


■開催日
２０１６年４月3０日（土）　１６：００～１８：００


■参加者
７名


■活動内容（概要）
・最近のゲーム業界の話題

・保坂プレゼン「Cocos2d-xで作る物理演算ゲーム ～軌跡の点線を消す編～」

・菅原プレゼン「Unityはじめるよ　～地形を作る～」

・部員さん　「Gear VR」オススメソフト体験

・小学生部員さん　Scratchでプログラム言語開発


■活動内容（詳細）
【実演・プレゼン】

・「Cocos2d-xで作る物理演算ゲーム ～軌跡の点線を消す編～」
　　前回には、チキンを飛ばした軌跡に点線を表示していたが、
　　常に描画していたため、不要な部分にまで点線が評されてしまっていた。
　　今回は、その対処方法を紹介した。
　　障害物にぶつかったことを判定できるようにし、
　　「もしぶつかったなら点線の描画をやめる」
　　という実装とした。

　　今回のプロジェクト一式
　　http://monolizm.com/sab/src/AngryChicken18.zip


　　資料：[第18回_プレゼン資料_保坂(Cocos2d-xで作る物理演算ゲーム　～軌跡の点線を入れてみる②～).pdf](http://monolizm.com/sab/pdf/第18回_プレゼン資料(Cocos2d-xで作る物理演算ゲーム軌跡の点線を入れてみる②).pdf)



・「Unityはじめるよ　～地形を作る～」
　　Terrainの使い方を、体験しながら学ぶ。
　　
　　・Terrainとは
　　・Terrainの作り方
　　・Terrainの使い方
　　　　地形の凹凸を作る
　　　　地形にテクスチャをペイントする
　　　　地形に木を植える
　　　　地形に草を植える
　　　　ライトの設定
　　　　フォグの設定
　　　　風の設定

　　みんなに実際に体験してもらいながら補足説明をしたので、
　　今までのような、聞くだけのプレゼンよりはるかに、覚えやすくなると思う。

　　資料：[第18回_プレゼン資料_菅原(Unityはじめるよ～Terrain～) .pdf](http://monolizm.com/sab/pdf/第18回_プレゼン資料(UnityはじめるよTerrain) .pdf)


・部員さん　「Gear VR」オススメソフト体験
　アベンジャーズを体験
　ゲーム性の無いソフトだが、グラフィックのクオリティが高く、没入感が強い。


・部員さんTIPS
　・Macのズーム機能
　　画面の一部を簡単にズームすることができる。
　　プロジェクター接続時などに、画面の一部をズームしたいときに便利
　　システム環境設定　＞　アクセシビリティ　＞　ズーム機能から

　・Win/Macの仮想デスクトップ
　　Macはミッションコントロールから、Winはタスクバー左下の[□]マークから仮想デスクトップを扱える。
　　簡単操作で、アプリを各デスクトップに割り付けることができる。


・小学生部員さん　Scratchでプログラム言語開発
　Scratch上のテキストボックスにプログラムを書き、実行できる環境を作成。
　Scratchでここまでできるとは。


　
　
　
　
　
■活動後記----------------------------
ゲームでプログラミング（Unity、Scratch、Cocos2d-x）、最新技術のVRもおまけで体験。
新しい「しずおかアプリ部」開催！
　
皆さんこんにちは！モノリズムです。
さて、ついに新環境になって初めてのしずおかアプリ部が開催されました。
　
新しい期になり、前期のアプリ部から大幅にいろいろなものが改善されました。
参加者用MacBookAirの導入、最新プロジェクター、そして新しい教室などなど。
そのかいもあり、今まで以上に皆さま、本当に楽しそうに体験していました！
　![0.jpg](https://qiita-image-store.s3.amazonaws.com/0/88105/682d42ce-4cf6-d845-0d73-87358bd2331c.jpeg)

今回のメインはUnity, Cocos2d-xでゲーム作り・プログラミング。
　
Unityの方では、３Ｄマップフィールドを製作。たった３０分程度ですが、簡単に写真のようなモノができました！中には初心者の小学生の方もおり、面白楽しく個性のあるマップ作りを体験していました。
　![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/88105/d9f1858e-9d2b-810a-7192-ab231a11ca4c.jpeg)

Cocos2d-xでは、かの有名な「アングリーバード」ならぬ
「アングリーチキン」の製作過程を引き続きプレゼン。Ｃ＋＋言語でのプログラミングと中身のロジックについての説明などをしながら、カタカタとプログラミングをしていただきました。
　![4.png](https://qiita-image-store.s3.amazonaws.com/0/88105/dfb6b04f-a0f0-71fb-a36a-a1e134b05712.png)

今まで聞くことしかできませんでしたが、体験できるように代わり、初めての体験に感動する方、技術をさらに深める方、みなさん、それぞれの楽しみ方をしていました！
　
さらに部員さんが持ってきてくださったGearVRでVRを全員で体験し、また小学生の部員さんが作っているスクラッチの作品をプレゼンしてもらいました。いや、今の小学生は本当にすごいですね。。。。
　![5.jpg](https://qiita-image-store.s3.amazonaws.com/0/88105/1c5c2928-ce4b-02e6-c844-9177605738f2.jpeg)

さて、そんなしずおかアプリ部、新しくなってからは今まで以上に、初心者の方も楽しめる内容となっています！
ご興味ある方はモノリズムアプリ部へご入部ください。
無料体験もやっていますので、ぜひご参加ください。
　
ここまでしっかりとゲーム作りの体験・学べるのはモノリズムだけです！
　
http://monolizm.com/sab/
　
お待ちしております！
＊パソコンの台数と参加人数には制限がございます。状況によっては１台のパソコンを共有してもらうこともあります。何卒ご了承くださいませ。
「公共クラウドシステム」のAPIレスポンスをGsonを使ってオブジェクトに変換する

# 「公共クラウドシステム」とは？
総務省のプロジェクト[「地域の元気創造プラットフォーム」](http://www.chiikinogennki.soumu.go.jp/)内で公開中のオープンデータ。
利用は無料で、全国の観光情報がCSV形式でダウンロードできたり、APIで検索・取得ができるというもの。利用は無料。
[公共クラウドシステム](https://www.chiikinogennki.soumu.go.jp/k-cloud-api/)

## APIへのアクセス方法
HTTPのGETでKeyなどなしにAPIへのアクセスが可能。

以下のURL形式でAPIにアクセスすることができる。
https://<ホスト名>/k-cloud-api/<バージョン>/kanko/<ジャンル>/<出力データ形式>?<パラメータ群>

cf. ジャンル：温泉＋名称：小滝鉱泉で検索しJSON形式でレスポンスを受け取るURL
https://www.chiikinogennki.soumu.go.jp/k-cloud-api/v001/kanko/温泉/json?limit=20&name=小滝鉱泉

APIなどの詳しい仕様については公共クラウドシステムのサイトを参照。
https://www.chiikinogennki.soumu.go.jp/k-cloud-api/genre/137.html

# 「公共クラウドシステム」APIのレスポンスをGsonを使って変換

## Gson変換クラス
[Gson object class for Kokyo Cloud System API - GitHub](https://github.com/equinestudio/CloudTourspots)
GitHubに置きましたのでどうぞご利用ください。

### サンプルコード
Volleyを使ってAPIにリクエストを送り、そのレスポンスをオブジェクトに変換する。

```java
package com.test.example;

import android.app.Activity;
import android.os.Bundle;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;

import jp.co.equinestudio.cloudtourspot.TourSpots;

public class TestActivity extends Activity {

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
        String uri = "https://www.chiikinogennki.soumu.go.jp/k-cloud-api/v001/kanko/%e6%b8%a9%e6%b3%89/json?limit=20&name=%e5%b0%8f%e6%bb%9d%e9%89%b1%e6%b3%89";
        Request request = new StringRequest(uri, new Response.Listener<String>() {
            @Override
            public void onResponse(final String response) {
                Gson gson = new Gson();
                Type listType = new TypeToken<TourSpots>() { } .getType();
                TourSpots apiResponse = gson.fromJson(response, listType);
                
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(final VolleyError error) {
                // エラー時の挙動を書く
            }
        });
        queue.add(request);


    }
}

```

### Lombok
コードがスッキリして見やすくなるのでLombokを使用している。
[Project Lombok](https://projectlombok.org/)

# 「公共クラウドシステム」を使うとこんなアプリが作れるよ！の例
## [全国観光情報 - Google Play](https://play.google.com/store/apps/details?id=jp.co.equinestudio.sightseeing)
![screen_001.png](https://qiita-image-store.s3.amazonaws.com/0/102757/21876e13-308f-9478-e6fb-7d4520b6c862.png) ![screen_002.png](https://qiita-image-store.s3.amazonaws.com/0/102757/a3a9c272-e774-a3e7-4fd0-48cc3148fd67.png)
Slack | 複数行を簡単に引用する ( >>> )

`>>>` でOK。

## 入力

![image](https://qiita-image-store.s3.amazonaws.com/0/90607/92a797eb-f439-eaea-ad14-4f600542f9c4.png)

## 表示

![image](https://qiita-image-store.s3.amazonaws.com/0/90607/22eed5c7-8769-44d9-88cb-c43eaac67e9f.png)

# 参考

- https://get.slack.help/hc/en-us/articles/202288908-Formatting-your-messages

# 環境

- Slack ver 1.1.2 (Mac App)



<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
Instagram APIを使用し画像を表示できるjQueryプラグイン


jQueryプラグインを利用して、Instagramの画像を表示できる方法です。

#Instagramアプリケーションを登録
https://www.instagram.com/developer/deprecated/

![アプリケーションを登録](https://qiita-image-store.s3.amazonaws.com/0/123689/6998532d-3534-8c50-4485-0d26406a9e4e.jpeg "01.jpg")
上記赤枠のところRegister Your Applicationをクリックします。

![Register New Client](https://qiita-image-store.s3.amazonaws.com/0/123689/9a8e0ca3-a3f1-f9af-b22e-ce7c83a0aa32.png "Insta-D1.png")
各項目を入力し、緑のRegisterボタンを押せば完了です。

![登録完了](https://qiita-image-store.s3.amazonaws.com/0/123689/da841090-b779-e282-c177-194d820a291a.jpeg "02.jpg")
完了するとこのような項目が表示されます。

#APIの利用に必要な'userId'を確認
API Consoleにアクセス
https://www.instagram.com/developer/deprecated/api-console/

- Get users/searchを選択
- Authenticationを「OAuth 2」に変更
![OAuth 2](https://qiita-image-store.s3.amazonaws.com/0/123689/3ffd9844-ee07-88d9-3cfb-c362e5117b39.jpeg "04.jpg")

- 「q」にユーザー名を入力
- Responseの下の方にuser_idが出てくる

#「Instafeed.js」をダウンロード
http://instafeedjs.com/

jQueryプラグインを読み込みます。

	<script type="text/javascript" src="jquery-1.9.1.min.js"></script>
	<script src="instafeed.min.js"></script>
	
	
次のようなjQeuryを記述して、画像を読み込むハッシュタグや画像数を設定します。

	$(document).ready(function() {
    var userFeed = new Instafeed({
	    target: '表示したい場所(今回は#instafeed)',
        get: 'user', //ユーザーから取得
        userId: '000000000', //ユーザーID(先ほど確認した'user_id')
        sortBy: 'most-recent',//最新記事から順に取得
        links: true , //画像リンク取得
        limit: 3, //取得する画像数を設定
        resolution: 'low_resolution', //画像サイズを設定
        template: '<li><a href="{{link}}" target="_blank"><img src="{{image}}"></a></li>',
        accessToken: '000000000.000aaaa.0aaaa0000000000aaaa' //アクセストークン
   	 	});
    	userFeed.run();
	});

下記のようなhtmlが吐き出されます。

	<ul id="instafeed">
		<li><a href="https://www.instagram.com/p/〜〜/" target="_blank"><img src="" alt=""></a></li>
		<li><a href="https://www.instagram.com/p/〜〜/" target="_blank"><img src="" alt=""></a></li>
		<li><a href="https://www.instagram.com/p/〜〜/" target="_blank"><img src="" alt=""></a></li>
	</ul>

 - ul#instafeedを空の状態でマークアップしておけば自動でliが生成されます。

 - 画像の大きさはCSSでも指定が可能です。
OpenCVのOptical Flowを包括的に試すサンプル


![HSV](https://raw.githubusercontent.com/daisukelab/cv_opt_flow/master/sample_result/hsv.png "HSV")

(更新 2016.5.7) Raspberry Piをサポート
(更新 2016.9.22) 金出先生の綴りを修正 ⇒ [ロボットに「目」を授けた男、金出武雄：Meet the Legend | WIRED.jp](http://wired.jp/2016/09/04/interview-takeo-kanade/)

## はじめに

画像の動きを解析する手法の一つとして、[Optical Flow | Wikipedia](https://en.wikipedia.org/wiki/Optical_flow)があります。
これを使いたいときに、試しやすいサンプルをまとめてみました。

[Optical Flow | Wikipedia](https://en.wikipedia.org/wiki/Optical_flow)のサンプルは、Web検索するといくつかあります。
特にOpenCVの記事や、付属しているサンプルなどが分かりやすいです。

- [Optical Flow | OpenCV](http://docs.opencv.org/3.1.0/d7/d8b/tutorial_py_lucas_kanade.html#gsc.tab=0)

また特にこちら、原理的にすごく参考になりますし、

- [OpenCVでとらえる画像の躍動、Optical Flow | Qiita](http://qiita.com/icoxfog417/items/357e6e495b7a40da14d8)

そこからのリンク先の下記解説がすごく分かりやすくて、どう応用していくか、考えを進めてくれます。

- [定量生物学の会チュートリアル 画像情報学研究者は何をやっているのか？](http://q-bio.jp/images/8/81/ImageProcessing05.pdf)

いくつか試したので、その「まとめ」として、Webcamの映像をOpenCVに入力したときの動きを包括的に確認できるものにしてみました。
(サンプルが断片的に散らばっていることもあり)

## Githubに置きました
- [daisulelab/cv_opt_flow | Github](https://github.com/daisukelab/cv_opt_flow)

こちらに置きました。cloneして、

	$ git clone https://github.com/daisukelab/cv_opt_flow.git
	$ cd cv_opt_flow

main.pyを実行すると試すことができます(※要カメラ、ノートPC内蔵など)。
※ Raspberry Piでは、raspi_main.pyを実行して下さい。
	
	$ python main.py
	Hit followings to switch to:
	1 - Dense optical flow by HSV color image (default);
	2 - Dense optical flow by lines;
	3 - Dense optical flow by warped image;
	4 - Lucas-Kanade method.

	Hit 's' to save image.

	Hit 'f' to flip image horizontally.

	Hit ESC to exit.
	(previewウインドウが開き、そこに解析結果をリアルタイムで表示)

## コードもやや整理して
OpticalFlowShowcase.pyに、それぞれの表示を分けてクラス化してあります。

![Class diagram](https://raw.githubusercontent.com/daisukelab/cv_opt_flow/master/classOFS.png "Class diagram")

## サンプル
手を左右にゆっくり振った時のサンプルです。

- Gunnar-Farneback method: By HSV

![HSV](https://raw.githubusercontent.com/daisukelab/cv_opt_flow/master/sample_result/hsv.png "HSV") ![HSV SRC](https://raw.githubusercontent.com/daisukelab/cv_opt_flow/master/sample_result/hsv_src.png "HSV Source")

- Gunnar-Farneback method: By lines

![LINES](https://raw.githubusercontent.com/daisukelab/cv_opt_flow/master/sample_result/lines.png "LINES") ![LINES SRC](https://raw.githubusercontent.com/daisukelab/cv_opt_flow/master/sample_result/lines_src.png "LINES Source")

- Gunnar-Farneback method: By warping

![WARP](https://raw.githubusercontent.com/daisukelab/cv_opt_flow/master/sample_result/warp.png "WARP") ![WARP SRC](https://raw.githubusercontent.com/daisukelab/cv_opt_flow/master/sample_result/warp_src.png "WARP Source")

- Lucas-Kanade method

![Lucas-Kanade](https://raw.githubusercontent.com/daisukelab/cv_opt_flow/master/sample_result/lk.png "Lucas-Kanade")
Rubyでクラスインスタンス変数にインスタンスメソッドからアクセスする

あるクラスのインスタンス間でデータを共有する必要がありました。
クラス変数はクラスを継承した動作などに癖があるみたいなので、クラスインスタンスを使いたいところです。


インスタンスメソッドからはクラスインスタンス変数に直接アクセスできないので、クラスメソッドを挟む必要がありました。
以下のようにすれば目的の動作が実現できました。

```rb
class C
	class << self
	  # proxy methods
		def class_instance_variable
			@class_instance_variable
		end
		def class_instance_variable=(other)
			@class_instance_variable = other
		end
	end
	@class_instance_variable = 12

	def get_class_instance_variable
		self.class.class_instance_variable
	end

	def set_class_instance_variable(other)
		self.class.class_instance_variable = other
	end
end

a = C.new
p a.get_class_instance_variable # => 12

b = C.new
p b.get_class_instance_variable # => 12

a.set_class_instance_variable(-44)
p a.get_class_instance_variable # => -44
p b.get_class_instance_variable # => -44
```



# 2016/05/07 追記
@QUANON さんから「アクセサリを使えばもっとシンプルに書けるよ！」とのご指摘を頂きました。ありがとうございます！

```rb
class C
	class << self
	  # proxy methods
		attr_accessor :class_instance_variable
	end
	@class_instance_variable = 12

	def get_class_instance_variable
		self.class.class_instance_variable
	end

	def set_class_instance_variable(other)
		self.class.class_instance_variable = other
	end
end

a = C.new
p a.get_class_instance_variable # => 12

b = C.new
p b.get_class_instance_variable # => 12

a.set_class_instance_variable(-44)
p a.get_class_instance_variable # => -44
p b.get_class_instance_variable # => -44
```
El Capitan では LD_LIBRARY_PATH, DYLD_LIBRARY_PATH が環境変数にならない


シェルスクリプトから走らせると自作の共有ライブラリがみつからず四苦八苦。ターミナル（zsh）からは問題ないのに。

```bash
% sh test.sh
Library not loaded: libmockgal.so
  Referenced from: /usr/local/lib/python3.5/site-packages/mockgallib/_mockgallib.cpython-35m-darwin.so
  Reason: image not found
```

原因は El Capitan から LD_LIBRARY_PATH, DYLD_LIBRARY_PATH がセキュリティ強化のため環境変数にできなくなったために、/bin/sh から LD_LIBRARY_PATH が見えないことにあった。

```bash
% export LD_LIBRARY_PATH=hoge
% echo $LD_LIBRARY_PATH # 変数はある
hoge
% env | grep LD # LD_LIBRARY_PATH は環境変数にない
```

ログインシェル（`zsh`）で作業する分には良いのだけれども、シェルスクリプトでライブラリがみつからないことに。

```bash
#!/bin/sh
echo $LD_LIBRARY_PATH # 空っぽ
```

"System Integrity Protection (SIP)" なるものをがんばって無効にしてもよいけれど [[2]]、そこまでではない。あきらめて、/usr/local/lib に自作のライブラリへのリンクを作りました。



## 参考

1: https://github.com/meteor/meteor/issues/5431

2: http://www.macworld.com/article/2986118/security/how-to-modify-system-integrity-protection-in-el-capitan.html

[2]: http://www.macworld.com/article/2986118/security/how-to-modify-system-integrity-protection-in-el-capitan.html
ESM オフラインリアルタイムどう書く 拡大版

2016/03/24,25 に [ESM](http://agile.esm.co.jp/) の社内イベントとして秩父にてリアルタイムオフラインどう書くを開催しました。
今回で第3回目となるESM オフラインリアルタイムどう書くですが、今回は合宿で行ったということもあり、初日に得意な言語で、2日目に複数人で、指定された異った言語で解くというイベントを行いました。

問題は「ESMじゃんけん大会」というタイトルで、詳細は https://gist.github.com/kunitoo/76b1d56cc6ffeef9bb62 にあります。

この問題の想定時間としては、2時間弱を想定しています。解き方が分かると実装じたいはそんなに時間かからない気もしています。

実装できた方は、コメント欄に実装へのリンクなどコメントいただけるとうれしいです。

実装例として私の Ruby での実装を以下に示しておきます。

https://gist.github.com/kunitoo/93f72f9dba1aeecb0265522b2b187560
Fiji (ImageJ)のマクロで開いている画像TIFFファイルで保存する

ウェスタンブロットで撮影したgelファイルの画像をTIFFファイルに変換することが多いので、マクロにした。

```saveAsTiff.ijm
saveAsTiff();

function saveAsTiff(){
	path = getDirectory("image");
	name = getInfo("image.filename");
	saveAs("tiff", path+replace(name, ".gel", ".tif"));
}
```

`getDirectory("image")`で開いている画像のディレクトリを取得し、`getInfo("image.filename")`で拡張子付きのフィアル名を取得してます。`saveAs()`関数を利用して画像を保存する際に、ファイル名の拡張子を`replace()`関数で`.gel`から`.tif`に変えてます。

自分が扱うときには、一度に複数の写真を撮るので、指定したフォルダから`.gel`のファイルを抜き出して、片っぱしからループで`saveAsTiff()`を実行させてる。
JUnit時にprivate変数を無理矢理確認/設定するメソッド

JUnit時にprivate変数を確認したいときがたまにあります。
そういうときはリフレクションを使って無理矢理に変数を引っこ抜いてしまえば確認できます。

```Java
    public static <T> T pickValue(Object obj, String name) throws Exception {
        Field field = obj.getClass().getDeclaredField(name);
        field.setAccessible(true);
        return (T) field.get(obj);
    }

    public static void replaceValue(Object obj, String name, Object value) throws Exception {
        Field field = obj.getClass().getDeclaredField(name);
        field.setAccessible(true);
        field.set(obj, value);
    }
```

[すべてのコード](https://github.com/cattaka/AndroidSnippets/blob/master/snippets/src/androidTest/java/net/cattaka/android/snippets/test/TestUtils.java#L30)
windows10 UWPアプリの配布とサイドローディング


配布方法と必要ライセンスのまとめ

# 配布の種類
## Windowsストア
 
開発者アカウントが必要
誰でも購入できる


## サイドローディング

クライアントにappx形式でアプリを配布、PowerShellでインストール
開発者アカウントが必要
AzureADを使わない場合、クライアントで開発者向け機能ONと証明書のインストールが必要。


## 基幹業務(LOB)アプリ

開発者アカウントが必要
ビジネスアカウントが必要
従業員にはAzureAD必須


# サイドローディング方法

> UWPアプリのパッケージ化
https://msdn.microsoft.com/ja-jp/library/hh454036.aspx

ソリューションを右クリック→ストア→アプリパッケージ作成

* 証明書が必要(ソリューション名_TemporaryKey.pfx)
マニュフェスト編集→パッケージ化タブ→証明書の選択→テスト証明書の作成

バッケージの作成完了後、ローカルコンピュータ→Windowsアプリ認定キットを起動する

アプリ認定後、AppPackages以下にソリューション名_バージョン_Testフォルダが出来るので、インストールしたい端末にコピーする

*開発者モードにしておく
Add-AppDevPackage.ps1を右クリック→PowerShellで実行→インストールされる

スタートページから実行
jQuery の セレクタ タグの中身の値、タグの中身のテキスト　を取得する書き方


inputタグの中身の取得

<pre>
var x = $("input[name='link_text']").val();
</pre>

urlタグの中身のspanタグの中のテキスト取得

<pre>
var y = $("#url span").text();
</pre>
gentooでmklを使ったnumpy

intel MKLのパッケージ
sci-libs/mkl
は壊れているのか,うまく入らなかったので手動でインストールする．
次にUSEにmklを追加して以下のebuildでnumpyをインストールするとmklを使うnumpyになる

https://github.com/niitsuma/niitsuma-overlay/blob/master/dev-python/numpy/numpy-1.11.0.ebuild

.bashrcに
export LD_LIBRARY_PATH=/opt/intel/mkl/lib/intel64:$LD_LIBRARY_PATH
を追加するのも忘れずに

echo "/opt/intel/mkl/lib/intel64" >> /etc/ld.so.conf.d/mkl.conf
Railsでつくったサービスにシェアボタン（Facebook / Twitter）をつけてみる


FacebookとTeetボタンをつけたので、備忘がてらメモを残します。

### Facebook

#### 手順
	1. FacebookデベロッパーページからHTMLスニペットを取得する
	2. HTMLスニペットをファイルにコピペする

#### FacebookデベロッパーページからHTMLスニペットを取得する

以下のページのシェアボタン構成ツールに必要なシェアしたいURLと、
ボタンのタイプを選択して、コードを取得ボタンをクリックします。

https://developers.facebook.com/docs/plugins/share-button

![FB_シェアボタン.png](https://qiita-image-store.s3.amazonaws.com/0/118590/29dc4f75-981e-14b7-2e12-a1cdd53f06ae.png "FB_シェアボタン.png")

* サンプルとしてyahoo!さんのurlをかりました
* レイアウトの種類はプルダウンで変更後、すぐ下のプレビューで確認できます
* モバイルiframeにチェックをつけると、iframeでシェアダイアログを表示する

コードを取得ボタンで生成されたコードは以下の通り。

![HTMLスニペット.png](https://qiita-image-store.s3.amazonaws.com/0/118590/cc81ced6-31f7-7cda-be5a-104ccb7fcf60.png "HTMLスニペット.png")


#### HTMLスニペットをファイルにコピペする

1. app/views/application.html.erb（階層やファイルは適宜読み替えてください）の<body>タグ内に上記画像の上部のソースをコピペ
2. app/views/（ボタンを表示させたいファイル）.html.erbに上記画像の下部のソースをコピペ

シェアボタンをクリックするとyahoo!さんのページをシェアすることができるようになりました。


### Twitter

#### 手順
	1. TwitterのページからHTMLスニペットを取得する
	2. HTMLスニペットをファイルにコピペする

#### TwitterのページからHTMLスニペットを取得する

* まず以下のページでボタンのタイプ（ツイート、@xxxxをフォローなど）を選択

https://about.twitter.com/ja/resources/buttons

* 必要な情報を入力して、右下のHTMLスニペットを取得

![Tweetボタン.png](https://qiita-image-store.s3.amazonaws.com/0/118590/2245c1c5-ec9c-3a86-0c58-61761914f30c.png "Tweetボタン.png")

#### HTMLスニペットをファイルにコピペする

1. app/views/（ボタンを表示させたいファイル）.html.erbに先ほどのHTMLスニペットをコピペ
2. scriptタグ内のスニペットだけ、app/views/application.html.erb（階層やファイルは適宜読み替えてください）の<body>タグ内に移動させる

* 1.の手順だけでもOKです

ツイートボタンをクリックすると、ツイートボタンを設置したページに関してのツイート画面に遷移できるようになりました。
TrelloのMacアプリ化

参考記事だと、ちょっとオプションまわりが変わっていたので、いくつか変更したら、ちゃんとアプリ化できたので

```bash
$ nodebrew install-binary v4.4.4
$ nodebrew use v4.4.4
$ npm install nativefier -g

$ nativefier --version
6.13.0

$ wget http://c16e.com/1511170923/trello.icns
$ nativefier --name Trello --platform osx --arch x64 --icon=./trello.icns https://trello.com/
```

参考: http://c16e.com/1511170923/
通知センターに通知する


基本的に、重たい作業はあまりしないのですが、Macが古いのでLaTeX4ページをビルドするにも数秒掛かる. 

# いまこんな感じで執筆中。

- atom で texファイルに打ち込み
- watchdog モジュールで監視されている
- 変更来た!!ってなったら、invoke ファイルが走る. (近いうちにfabに変えたい)
    - makefile はよく分からない.(文法が気持ち悪い)
- 走り終わったら, 通知センターに通知される。"LaTeX Build Finish!!"的な。

この記事は、slackが流行る中敢えて通知センターを使おうという話。

# セットアップ
## モジュールを入れましょう

- [pync 1.6.1](https://pypi.python.org/pypi/pync)

```shell 
$ pip install pync
```

## ソースを書きます

```py
#! python
from pync import Notifier

def mac_notify(msg=""):
    try:
        Notifier.notify("Task Finish. %s " % msg, title="Invoke Task")
    except:
        Notifier.notify("Task Finish.", title="Invoke Task")

if __name__ == "__main__":
   mac_notify("テスト")
```

# 結び

このモジュールは, MacOS用なのでLinuxは別に探す必要がある. 

> でも個人的には, Linuxはデスクトップで使う事あんまりないからな...
ymlファイルでhashed arrayを表現するには 

##memo

chefのattributes/default.rbがこんな感じになっていたとする。

```json
{
  "testattributes":{
    "category01": {
      "contents01": [
        {
             "foo": "bar", 
             "hoge": "hogehoge"
        }
      ]
    }
  }
}
```

これをymlにしてみる。


http://yaml-online-parser.appspot.com/
このサイトでパーステストしながらやってみた。

```yaml
  testattributes:
   category01:
     contents01:
         - {"foo":"bar", 
            "hoge":"hogehoge"}
```

こうすると`kitchen.yml`からテストできた。`{}`は要らないと思ってたら必要だった。
helmとsolarized-darkの色の相性が悪い

### リストを出す
- `M-x list-faces-display`

### 変更
- helm-selectionを選択  
  - Background の Chooose にカーソル移動して RET して色を選ぶ
  - State にカーソル移動してRET→1で .emacs に設定保存  

参考したリンクは[こちら](http://memo.willnet.in/entry/2013/03/10/153820)
atomでjavascriptでrequire/importしたファイルにジャンプする

# 入れるべきパッケージ
https://atom.io/packages/hyperclick
https://atom.io/packages/js-hyperclick

# 使い方
cmd押しながらクリックすればおk
[jsxもcoffeeもおk](https://github.com/AsaAyers/js-hyperclick#why-doesnt-js-hyperclick-see-my-jsx-files)

ずっと探してた。
パッケージ見つけるのむずい。

# 問題
~~でも過去記事のやつ~~
~~[webpackでrequireやimportのパスのroot指定する](http://qiita.com/193/items/92a7db9a6d1e29aed051)~~
~~と併用できない。ぐへ。~~

~~一旦の回避策はjs-hyperclickの中身をいじること~~
~~https://github.com/AsaAyers/js-hyperclick/issues/17#issuecomment-212885213~~

[2016-10-21]
神修正来た
https://github.com/AsaAyers/js-hyperclick/pull/32

```json:package.json
{
  ...
  "moduleRoots": [ "ここにpathを書く" ],
  ...
}
```