OmniAICreator/Qiita-1.07M huggingface dataset:
まわせ! Bouwkamp!!


今回厳しいですね。計算量はO(W^2)。酷い。
泥臭くない解法、<del>あったら教えてほしいです。</del>とりあえず鍋谷さんの答案を理解してみます。。

```rb:tyama_henae01.rb
#!/usr/bin/ruby
#http://qiita.com/Nabetani/items/4bf43031749c81c35526
#http://nabetani.sakura.ne.jp/hena/orde01rotbk/

STDOUT.sync=true
while gets
	a=$_.chomp.split(':')
	n=a[0].to_i
	a=a[1][1..-2].split(')(').map{|e|e.split(',').map(&:to_i)}

	width=a[0].reduce(:+)
	m=width.times.map{[nil]*width}
	aheight=[0]*width # 各列何行目まで埋めたか
	mheight=0 # aheightの最小値
	a.each{|e|
		cur=0
		x=0
		width.times{|i|
			if aheight[i]==mheight
				break if cur==e.size ### 同じ行だが別のグループ ###
				e[cur].times{|j|
					m[aheight[i]][i]=e[cur]
					aheight[i]+=1
				}
				x+=1
				if x==e[cur]
					x=0
					cur+=1
				end
			end
		}
		mheight=aheight.min
	}
	#時計回りに回転
	m=m.reverse.transpose

	lst={}
	m.each{|line|
		# その行で始まるグループ一覧 (lineに2つ以上グループが存在することがある)
		a=line.uniq.chunk{|e|!lst.include?(e)}.select{|k,v|k}.map{|k,v|v}
		a.each{|e|
			e.each{|f|lst[f]=1}
			n-=1
			if n==0
				puts '('+e*','+')'
				break
			end
		}
	}
end
```
rosgoを使ってgoでros nodeを作る



rosgoのドキュメントが特に見当たらないので使い方をまとめる。catkinで結構やれるっぽい。catkinビルドシステムに慣れていないのでとてもめんどくさい。

golangとロボット制御とか分散ノード作るのって凄い親和性高いと思うのでrosにつなげるのは良い。ros使わずにgobotでやりたいけど。

2016/02/19に構成が結構変わったので一部修正


#環境設定

ubuntu 14.04 LTS環境を前提とする。macでもvagrantなんかでやってください。goは1.5.3で動作確認。goのインストールはgvm何かを使ってやってください。

## goのインストール

一応書く

```
$ bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
$ gvm install go1.4
$ gvm use go1.4
$ gvm install go1.5.3
$ gvm use go1.5.3
```

どうせcatkinでGOPATH書き換えるので、pkgsetとかは使わなくて良い。

## rosのインストール

### ros周りインストール

```
$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu trusty main" > /etc/apt/sources.list.d/ros-latest.list'
$ wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install ros-indigo-desktop-full
$ sudo apt-get install python-rosinstall
```

### ros初期化

```
$ sudo rosdep init
$ rosdep update
$ echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
$ source ~/.bashrc
```

## rosgoの環境構築

### catkin workspaceの作成

rosgo周りのパッケージや、自作のrosgoパッケージを保存する場所を初期化する. ここでは`~/rosgo_ws`とする

```
$ cd ~/rosgo_ws 
$ mkdir src
$ cd src
$ catkin_init_workspace
```


### パッケージのダウンロード

```
$ cd ~/rosgo_ws/src
$ git clone git@github.com:akio/rosgo.git  # rosgoのメタパッケージ
$ git clone git@github.com:akio/gengo.git  # msgからstructを生成するライブラリ
$ git clone git@github.com:akio/rosgo_messages.git  # buildツール
$ git clone git@github.com:akio/rosgo_tests.git  # rosgoのサンプル
```

### ビルドしてみる

```
$ cd ~/rosgo_ws/
$ catkin_make
```

catkin_makeで、goのソースなどが`~/rosgo_ws/devel/lib/go/src`以下に配置される。rosgo_testの中に定義されているmessageのstructも、gengoを元に、`~/rosgo_ws/devel/lib/go/src/rosgo_tests`に生成されている。

また、実行ファイルが、`~/rosgo_ws/devel/lib/go/pkg/`以下に作成されている。


### rosgo_testの実行

作成したワークスペースに関する環境変数の読み込みを行い、rosrunでnodeを起動する

```
$ source ~/rosgo_ws/devel/setup.bash
```

- roscore実行

```
$ roscore
```

- node実行

```
rosrun rosgo_tests test_listener
```

nodeが起動する。あとは、このrosgo_testsの構成を真似て、rosのnodeをgolangで書いていけば良さそう。

## 独自のライブラリの配置等

`~/rosgo_ws/devel/lib/go/`をGOPATHにする必要が有るので、`go get`先をこちらにするようにgo pathを書き換える処理を入れる。多分こんな感じでgo getすれば良い。多分。要検証

```
GOPATH=~/rosgo_ws/devel/lib/go/ go get hoge
```

適当なパッケージを作って(この場合はrosgo_cmakeとする)、その中にこんな感じのcmake scriptを入れておくとCmakeListの中で依存パッケージを記述しておけばcatkinのdevel以下にパッケージを落とせる。

```rosgo_cmake/cmake/rosgo_cmake-extras.cmake.em
function(rosgo_get package)
        set(old_gopath "$ENV{GOPATH}")
        set(ENV{GOPATH} "${CATKIN_DEVEL_PREFIX}/lib/go/")
        execute_process(
           COMMAND go get "${package}"
            )
        set(ENV{GOPATH} "${old_gopath}")
endfunction()
```

使うときはCMakeLists.txtの中でこんな感じに記載するとGOPATHを気にしなくて良くなる

```
rosgo_get("golang.org/x/net/context")
```

# rosgoでパッケージを作る

後で追記
UnityEditorで使ったコールバックまとめ

UnityEditorで特定のタイミングに処理を差し込むのに使用またはテストしたものを随時記載（ほぼ自分用）
※MonobehaviourのAwakeやStart等はMonobehaviourのリファレンスを見れば全部わかるので省略
※使用例もリファレンス見れば載ってるので一覧のみ
※Unityスクリプトリファレンス⇒（http://docs.unity3d.com/ja/current/ScriptReference/index.html）

# delegate系
* **UnityEditor.EditorApplication.playmodeStateChanged**
  * Editor上での実行を再生/停止/一時停止した際に呼ばれる
  * 編集したパラメータを使用して一時データを再計算する際に使用
* **UnityEditor.Undo.undoRedoPerformed**
  * Undo/Redoした後に呼ばれる
  * Undo/Redoで戻したパラメータを使用して一時データを再計算する際に使用
* **UnityEditor.PrefabUtility.prefabInstanceUpdated**
  * PrefabをApplyした後に呼ばれる
  * Prefabを更新・保存したパラメータを元に一時データを再計算する際に使用
* **UnityEditor.EditorUserBuildSettings.activeBuildTargetChanged**
  * SwitchPlattformした際に呼ばれる
  * Resources等のアプリ内に含まれるデータをプラットフォーム毎に差し替える為に使用

# Attribute系
* **[UnityEditor.Callbacks.PostProcessScene(0)]**
  * シーンのロード後に呼ばれ、プレイヤービルドした際はビルドするシーンの数だけ呼ばれる
  * シーンロード時のログ出力ぐらいにしか用途がないような･･･
  * static関数でないとエラー扱い
  * Attributeの引数は処理順序
* **[UnityEditor.Callbacks.PostProcessBuild(0)]**
  * プレイヤービルドした際に呼ばれる
  * Plugin等のプラットフォーム依存の処理を行う際に使用
  * static関数でないとエラー扱い
  * 関数の引数は２つ(BuildTarget target, string pathToBuiltProject)
  * Attributeの引数は処理順序

#余談
~~Handlesのアンカーをホールド・リリースした際のコールバックが欲しいのだが･･･
ControlIDやらEventやら検知しないと出来ないらしいがMouseUp,MouseDownがHandlesのアンカー上では検知できず難航中~~
Handlesを操作する前に検知すればとれました
EA LPC4088 QSB fail.txtの対処方法

EA LPC4088 QuickStart Board（以降、QSB）は、mbedドライブに.binファイルを書き込むことで、プログラムの差し替えができます。

![20160206A.PNG](https://qiita-image-store.s3.amazonaws.com/0/109634/8489dc74-ef0d-2a2c-532e-b7c37205895f.png)

#プログラムの差し替えができない

稀に、.binファイルを書き込んでも、プログラムの差し替えができなくなってしまうことがあります。
> わたしの経験では、mbed関連のデバイスドライバが**セットアップ途中に書き込んだ**時、**不正な.binファイル**や**.binではないファイル**を書き込んだ時、に陥ります。

何度、書き込んでもfail。
![20160206B.PNG](https://qiita-image-store.s3.amazonaws.com/0/109634/f821c909-3df2-25d0-ab30-7d4e11a3e687.png)

![20160206B.jpg](https://qiita-image-store.s3.amazonaws.com/0/109634/824c0de4-016b-66e7-4f3f-bb74b8b8a4be.jpeg)

#復旧方法

> 手順を確認したQSBは、rev PB1です。

ISP-EN(Pin23)とGND(Pin22)を短絡しておき、USBに接続します。
![20160206C.jpg](https://qiita-image-store.s3.amazonaws.com/0/109634/6e3a310a-3288-e971-b3d9-dd328d3fcfdd.jpeg)

.binファイルを書き込みます。
![20160206A.PNG](https://qiita-image-store.s3.amazonaws.com/0/109634/8489dc74-ef0d-2a2c-532e-b7c37205895f.png)
sed でファイルを更新しつつ変更内容を表示する

`sed` で変更した内容を `diff -u` に流して tee で標準エラーに出力しつつ `path` にパイプします。

```sh
sed -r '
    /^#*PermitRootLogin /cPermitRootLogin without-password
    /^#*UseDNS /cUseDNS no
  ' /etc/ssh/sshd_config |
  diff -u /etc/ssh/sshd_config - |
  tee /dev/stderr |
  patch /etc/ssh/sshd_config
```

次のように変更内容が Unified 形式の diff で出力されつつ `patch` で適用されます。

```diff
--- /etc/ssh/sshd_config    2015-10-06 14:19:17.090000000 +0000
+++ -   2016-02-06 08:11:40.487720319 +0000
@@ -46,7 +46,7 @@
 # Authentication:

 #LoginGraceTime 2m
-#PermitRootLogin yes
+PermitRootLogin without-password
 #StrictModes yes
 #MaxAuthTries 6
 #MaxSessions 10
@@ -126,7 +126,7 @@
 #ClientAliveInterval 0
 #ClientAliveCountMax 3
 #ShowPatchLevel no
-#UseDNS yes
+UseDNS no
 #PidFile /var/run/sshd.pid
 #MaxStartups 10:30:100
 #PermitTunnel no
patching file /etc/ssh/sshd_config
```
Intel NUC(NUC5CPYH)にVMware ESXiを入れる

# はじめに
自宅サーバ用にNUC5CPYHを買ってVMware ESXiを入れようとしたところ、意外と苦労したので手順を書いておきます。（Coreプロセッサの載った上位機種はもう少しすんなり入るようです。[ここ](http://qiita.com/ToraLin/items/bacae3f6b48467838832)とか[ここ](http://qiita.com/ktyubeshi/items/6692ecf1bfe84c297d37)とかを参考にどうぞ）

この機種以外でも`Relocating Modules and starting up the kernel`が出てインストールできない方は参考になるかもしれません。


# 参考
[ESXi 6.0 Image for Intel NUC](http://www.virten.net/2015/03/esxi-6-0-image-for-intel-nuc/#more-15886)

# 手順

## 1. 使うファイルの準備
以下のファイルを準備します。ESXiのイメージはVMwareのサイトからダウンロードしてください。今回は6.0.0 u1bを使いましたが、多少バージョンが違ってもいけると思います。
NICとSATAドライバはリンク先のサイトの一番下、"Direct Download links"のOffline Bundleです。

- ESXiのISOイメージ（VMware-VMvisor-Installer-201601001-3380124.x86_64.iso）
- [ESXi-Customizer](http://www.v-front.de/p/esxi-customizer.html)
- [NICドライバ（net55-r8168-8.039.01-napi-offline_bundle.zip）](https://vibsdepot.v-front.de/wiki/index.php/Net55-r8168)
- [SATAドライバ（sata-xahci-1.34-1-offline_bundle.zip）](https://vibsdepot.v-front.de/wiki/index.php/Sata-xahci)
- `ks.cfg`ファイル（以下）

```ks.cfg
vmaccepteula
rootpw mypassword
install --firstdisk=local --overwritevmfs
network --bootproto=dhcp --device=vmnic0
reboot
%post --interpreter=python --ignorefailure=true
import time
stampFile = open('/finished.stamp', mode='w')
stampFile.write( time.asctime() )
```

この`ks.cfg`は自動インストール用のスクリプトです。ネットワークにDHCPを使わない場合は`network`の行を適宜変更してください。

## 2. ISO作成
カスタムISOイメージの作成はvSphere PowerCLIを使うのが正式っぽいですが、今回はESXi-Customizerを使いました。ESXi-Customizerを展開したディレクトリにある`ESXi-Customizer.cmd`が実行ファイルですが、Windows10で実行するとWindowsのバージョンチェックで引っかかります。以下の一行を削除して回避。

```ESXi-Customizer.cmd
   if "!WinVer!" LSS "5.1" call :earlyFatal Unsupported Windows Version: !WinVer!. At least Windows XP is required & exit /b 1
```

あとは、ISOとBundleを選択してRunボタンを押すだけです。ただし、1回につき1個のBundleしか付けられないので、NICとSATAで2回やる必要があります。（最初に元のISO+NICドライバで作成。次に先ほど作ったISO+SATAドライバで作成、という感じ）

## 3. 起動用USBメモリ作成
先ほど作ったISOを適当なツールでUSBメモリに焼きます。今回は[Rufus](https://rufus.akeo.ie/)を使いました。さらに、最初に準備した`ks.cfg`ファイルをそのUSBメモリのルートディレクトリに置きます。

## 4. NUC起動
USBメモリを刺してNUCを起動します。VMwareのインストーラが走った直後にShift+Oを押します。（右下に表示が出ている間に押してください）画面の一番下に

```
runweasel
```

と表示されるので

```
runweasel ks=usb:/ks.cfg
```

としてエンターを押します。（入力するのは`ks=usb:/ks.cfg`の部分のみです）

## 5. しばらく待つ
このあと表示が進んで`Relocating Modules and starting up the kernel`という表示が出て止まると思います。このメッセージでググると先ほど`ks`を指定した箇所で`ignoreHeadless=TRUE`を追加すればよい、と出てきますがうまくいきませんでした。

表示はこのまま更新されないので通常の対話モードでのインストールは出来ませんが、先ほど`ks=usb:/ks.cfg`で自動インストールスクリプトを指定したので、待っていれば勝手にインストールは進んでいきます。最終的にインストールが完了すれば自動で再起動がかかるはずです。

インストールが進んでいるかどうかはHDDのアクセスランプで判別可能です。10分ほど待っても全く光らない場合は何か間違っているかもしれません。

## 6. 起動確認
再起動後も`Relocating Modules and starting up the kernel`が出たまま画面上は止まってしまいますが、この状態でもちゃんと動いているのでvSphere Clientからは接続可能です。DHCPで割り当てられたアドレスに対して、以下のアカウントで接続します

- user: root
- pass: mypassword

このパスワードは`ks.cfg`の`rootpw`で指定したものです。
Dropboxに自分のプライベートGitを構築するツールを作ったよ

## 背景
Githubにプライベートレポジトリを作ろうとすると、お金がかかるし、しかも７つまでしか作れない。無料のGitlabやBitbucketを使うには、醜悪なUIに慣れなくてはならない。そのどちらも嫌だったので、Dropboxにgitレポを作るツール "**[drit](https://www.npmjs.com/package/drit)**" を作りました。

## 使い方
現状、OSXオンリーです。たぶんUnix系なら使えると思いますが、動作確認はしていません。
公式サイトから、[Dropboxのクライアント](https://www.dropbox.com/en/downloading?os=mac)をインストールしてください。

```
npm i -g drit
```

## Dropboxにdrit用のディレクトリを定義
```
drit init
# mkdir $HOME/Dropbox/Git
```

## レポジトリを作成
In git project dir

```
drit create
# git init --bare  $HOME/Dropbox/Git/MyProject.git
# git remote add drit $HOME/Dropbox/Git/MyProject.git
git push drit master
```

## レポジトリの一覧
```
drit ls
>> MyProject
>> MyProject2
```

## レジトリからクローンしてくる
```
drit clone MyProject Project
# git clone $HOME/Dropbox/Git/MyProject.git Project
```

詳細はgithubをどうぞ
https://github.com/endotakashi1992/drit
xampp php メモリ使用量限界について

xamppで、phpを使用しております

php.iniにて、memory_limit = -1 
とメモリ使用量、無制限の設定をしましたが・・・
php処理が、止まってしまいます

以下エラーメッセージ
↓
Fatal error: Out of memory (allocated 1835532288) (tried to allocate 1966080 bytes) in C:\xampp\htdocs\wp\wp-includes\wp-db.php on line 1321

1835532288バイト = 1.71GBの使用量で止まってしまいます・・・

PC自体の実装メモリは、16GBあります・・・

仮想メモリの設定は、46GBに設定しております

1.71GB以上で止まらないようになる方法はないのでしょうか？

どうかご教授ください、よろしくお願い致します

PC環境は以下です
↓
windows7 64bit
実装メモリ：16GB
オフラインリアルタイムどう書くE01 の問題


オフラインでリアルタイムに「どう書く」をやるイベント( https://yhpg.doorkeeper.jp/events/36463 )を行っています。

問題は「まわせ! Bouwkamp!!」という名前で、詳細は
http://nabetani.sakura.ne.jp/hena/orde01rotbk/
です。

出題者の気分としては、問題を読み始めてから解けるまで1時間はちょっときついかも、と思ってますが、ひとそれぞれで。

実装ができた方はこちらのコメント欄からリンクを張っていただくと見つけやすくて助かります。

似たような問題をもっと解きたいという方は、
https://nabetani.hatenadiary.com/entry/yhpg_list
に過去問リンク集がありますので、そちらをご覧になると良いと思います。
電子工作 > キャラクタディスプレイ > SD1602X > VDD - Vo: 4.4V > Voに負電圧をかける?

関連　http://qiita.com/7of9/items/81172d318139960ef22e

SD1602Xについて調べていると以下の記載を見つけた。

http://jsdiy.web.fc2.com/lcd3v/
> SD1602Hのデータシートを見ると、どうやらVDD（電源）とVo（コントラスト）の差が4.5Vあれば動作するようです。Voに-7Vを加えている回路の例も掲載されていました。

[データシート](http://blog.digit-parts.com/pdf/sd1602xbwb.pdf)を見ると、ELECTRICAL CHARACTERISTICSに
`VDD - Vo = 4.4(Typ)`
のような記載が確かにある。

3番ピンに負電圧を加えないといけないということか。


同じページに以下の記載もある。

>それによると、VDD-VSSが2.7V以上でコントローラ（ロジック部）が動作し、VDD-Voが4.5Vで液晶部が動作します（下記LCD図の左側）。
[メモ]BLENano(nRF51822)のSoftDevice使用時のフラッシュメモリマップ(nRF51-SDK10)


SEGGER J-LINKが使えたので、nRFGo Studioを使って、フラッシュの配置を確認。
Region0はNordic謹製のBLEプロトコルスタックのSoftDevice。Region1はApplicationを書き込む。
のちほどRegion1-Addressを使用する。
ところで、BLE Nanoは、V1.5とV1.0があり、nRF51822のARM Cortex-M0コア、Flash 256kBは同じで、RAMが32kB(v1.5)/16KB(V1.0)と。ちがう。

## 表

| SoftDevice > | S110 |S120| S130|
|:----------:|:-----------:|:------------:|:------------:|
| Region0-Firmware|S110_nRF51_8.0.0<br>(Id:0x0064)|120_nRF51_2.1.0<br>(Id:0x006b)| 130_nRF51_1.0.0<br>(Id:0x0067) |
| Region0-Size|  96KB | 116KB | 112KB |
| Region1-Size| 160KB | 140KB | 144KB |
| Region1-Address | `0x18000`| `0x1d000`| `0x1c000`|

### 使用ファイル
nRF51-SDK10の`nRF51_SDK_10.0.0_dc26b5e\components\softdevice`フォルダ内、

- s110/hex/`s110_nrf51_8.0.0_softdevice.hex`
- s120/hex/`s120_nrf51_2.1.0_softdevice.hex`
- s130/hex/`s130_nrf51_1.0.0_softdevice.hex`


## スクリーンショット
- Erase時
![nRF-Erased_.png](https://qiita-image-store.s3.amazonaws.com/0/75594/6ae5fa05-d673-1641-eac4-e4c66c33ec61.png)

- S110
![nRF-S110_.png](https://qiita-image-store.s3.amazonaws.com/0/75594/c1e0a876-284b-6c61-3721-dc9b5c6aaf08.png)


- S120
![nRF-S120_.png](https://qiita-image-store.s3.amazonaws.com/0/75594/10c4e810-b65f-2ef8-fe13-766aaa48957f.png)

- S130
![nRF-S130_.png](https://qiita-image-store.s3.amazonaws.com/0/75594/e09a3d67-7ee4-b0e1-03a5-477c982fcfb9.png)
Scala 再帰処理プログラミング

# Scala 再帰処理プログラミング

再帰処理は、自分自身を呼び出し処理する再帰関数によるプログラミング技法である。
再帰処理によって複雑な処理がシンプルに記述できるケースがある。

# 階上
再帰処理を記述する際に、階上

n! = n(n-1)!
n! = n(n-1)(n-2) …1
10! = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1

階上を次のような数学関数としても定義できる。
![スクリーンショット 2016-02-06 16.01.36.png](https://qiita-image-store.s3.amazonaws.com/0/105887/570f0421-fe8e-3c3d-d0ef-3b1a4f5d082f.png)


例）再帰処理によって階上を求めるサンプル
``` fact.scala
object Fact {
  　　def main(args: Array[String]) :Unit = {
      　　　　println(fact(10))
  　　}
  　　def fact(n: Int): Int = {
      　　　　if (n == 1) 1
      　　　　else n * fact(n -1)
  　　}
}
```

$ scalac fact.scala
$ scala Fact
3628800

参考
http://bach.istc.kobe-u.ac.jp/lect/ProLang/org/scala-recursive.html
Alpine Linux でタイムゾーンを変更する


スリムな Docker イメージを作るため、[`gliderlabs/alpine`](https://hub.docker.com/r/gliderlabs/alpine/) イメージをベースにバイナリを一個だけポンと置いて運用するみたいなことをしています。
`gliderlabs/alpine` イメージは（というかほとんどの OS イメージは）タイムゾーンが GMT (UTC+0) のままなので、時刻依存の作業をさせるときには気をつけないといけません。日本時間 (UTC+9) の感覚で書いたら、9時間遅れて実行されたとかログの時刻がずれるとか起こりえます。

まっさらの状態で `date` を打つと…

```bash
$ docker run --rm gliderlabs/alpine:3.3 date
Sat Feb  6 06:47:37 UTC 2016
```

## タイムゾーンの設定
メジャーな Linux ディストリビューションと同じく、`/etc/localtime` を変更すればよいです。zoneinfo とかはそのままだと用意されていないので、apk で `tzdata` パッケージをインストールする必要があります。

`Dockerfile` で日本標準時 `Asia/Tokyo` に設定する場合は以下のようになります。ここで欲しいのは `/usr/share/zoneinfo/Asia/Tokyo` だけなので、`tzdata` はそれだけ抜き取ったら消しちゃいます。

```dockerfile
FROM gliderlabs/alpine:3.3

RUN apk --update add tzdata && \
    cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
    apk del tzdata && \
    rm -rf /var/cache/apk/*
```

この `Dockerfile` からビルドしたイメージで `date` を叩くと…

```bash
$ docker run --rm alpine-jst date
Sat Feb  6 15:48:56 JST 2016
```

JST になりました :tada: 

## おわりに
タイムゾーンとか文字コードとか全角文字とか辛いので、イギリスに住みたいですね。

## REF
- [Setting the timezone - Alpine Linux](http://wiki.alpinelinux.org/wiki/Setting_the_timezone)
Eigenを用いるときの注意(メンバ変数，STLコンテナ，値渡し)

[行列/ベクトル演算ライブラリEigen](http://eigen.tuxfamily.org/)のクラスの内，```Eigen::Matrix4f```や```Eigen::Affine3f```などの[特定のクラス](http://eigen.tuxfamily.org/dox/group__TopicFixedSizeVectorizable.html)を使用するとき，メモリの配置から生じる問題([公式ドキュメント](http://eigen.tuxfamily.org/dox/group__TopicUnalignedArrayAssert.html))に関して，ほぼ公式サイトの要約です．

この問題はEigenのクラスでも[特定のクラス](http://eigen.tuxfamily.org/dox/group__TopicFixedSizeVectorizable.html)にのみ生じる問題なので，該当しないクラスでは気にする必要はないですが，```Eigen::Matrix4f```や```Eigen::Affine3f```は座標変換などでEigenを使う場合にはよく利用するクラスかと思うで，注意が必要です．

具体的に，この問題が生じるのは，以下の場合です．
1. メンバ変数に用いる場合
2. STLコンテナに用いる場合
3. 関数に値渡しする場合

# メンバ変数に用いる場合([公式ドキュメント](http://eigen.tuxfamily.org/dox/group__TopicStructHavingEigenMembers.html))
メンバ関数で用いる場合には，```public```でマクロを定義する．


```cpp
class Foo
{
  ...
  Eigen::Vector2d v;
  ...
public:
  EIGEN_MAKE_ALIGNED_OPERATOR_NEW // このマクロを追加．
  ...
};
```

# STLコンテナに用いる場合([公式ドキュメント](http://eigen.tuxfamily.org/dox/group__TopicStlContainers.html))

STLコンテナを用いる場合には，用意されたallocatorを使う．
例えば```std::vector```の場合には，次のようにする．

```cpp
#include<Eigen/StdVector>
std::vector<Eigen::Vector4f> v; // こうではなく． 
std::vector<Eigen::Vector4f,Eigen::aligned_allocator<Eigen::Vector4f> > v; //こうする．
```

# 値渡しする場合([公式ドキュメント](http://eigen.tuxfamily.org/dox/group__TopicPassingByValue.html))

関数には，値渡しではなく参照を使う．そもそもC++なら参照を使っているはず...

```cpp
void my_function(Eigen::Vector2d v); // 値渡しではなく，
void my_function(const Eigen::Vector2d& v); // 参照渡しで．
```
ビルドなんてもういやだ！思い立ったら即実行! SwiftもVWInstantRunでコードを気軽に実行しよう！

by @mixiappwchr

みなさんビルドしてますか？

そろそろSwiftへの完全移行にむけて進んでいるかと思いますが、切っても切れないビルドの繰り返しに飽き飽きしてませんか？

コード書いてて、ちょっとした処理を追加して確認したいのだけど、またビルド。。。
Playgroundでやるのもなあ。。
そう思った時こいつをつかってみてはいかがでしょう？

# VWInstantRun

https://github.com/wangshengjia/VWInstantRun

これはプロジェクト全体をビルドして実行するのではなく、選択した部分だけを実行してくれるXcode Plugin です。 Swiftは当然、PlaygroundがないObjective-Cでも使えます。

使い方は以下を見て貰えば一目瞭然

## Objc

![Objective-C](https://github.com/wangshengjia/VWInstantRun/raw/master/run_objc_code_1.gif)



## Swift

![Swift](https://github.com/wangshengjia/VWInstantRun/raw/master/run_swift_code_1.gif)


# Install

XCode の PluginなのでXcodeプラグインマネージャー Alcatrazをつかってinstallしましょう

Alcatraz

https://github.com/alcatraz/Alcatraz


細かい場面でちょっと便利に使えるので、少しでもビルド時間から解放されるのであれば、幸いです。


##### appwchr post
----


[あんなすごいエンジニアともであえるかも？？Qiitaユーザーが集まるSlack Teamを作ってみたよ！](http://qiita.com/appwatcher/items/00faadbf02f691186a54)

[goからiOSまで一人でアプリ開発をしてたらいつの間にかマインクラフトエンジニアになった話](http://qiita.com/appwatcher/items/6c0280cda9c4c8b3c65f)

[API開発の効率化の架け橋！APIのStubサーバーを導入して,API開発に効率化、スピード化、柔軟性を手に入れよう！](http://qiita.com/appwatcher/items/49807e72d9600db7196d)

[アプリエンジニアから見てAPI設計において気をつけてもらえるとうれしいこと](http://qiita.com/appwatcher/items/4a0dd09c393cc70d961a)

[Goodbye... Jenkins... Jenkinsを卒業してお手軽CI! iOSもAndroidもCircle CIでアプリのCIを回そう](http://qiita.com/appwatcher/items/4cdf39804d6e46ab7af5)

[まだTestFlight使ってたの？急げ！終了目前のTestFlightから,今すぐにiOSもDeployGateに移行しよう！移行パターンも紹介するよ。](http://qiita.com/appwatcher/items/632460e15fbdb81b7a71)

[Swiftを使ってみて直面した闇。現時点で現場でSwiftを採用すべきかどうかの判断材料](http://qiita.com/appwatcher/items/50295e82ab0095902aaa)

[iOSの開発をする上で絶対に使うべき！外せない！webサービス、開発ツール集【完全版】](http://qiita.com/appwatcher/items/07a3babcb9b6cefb307e)

[注目のiBeacomなどの波に乗り遅れないために！iOSのBluetooth開発を容易にするライブラリを書きました。]
(http://qiita.com/appwatcher/items/7491beffd7260b713542)

[まだまだあった！iOSの開発を劇的に改善する最新のwebサービス、開発ツール集１]
(http://qiita.com/appwatcher/items/f0024fe2ac34da345f04)

[さらに快適なアプリ開発を！iOSの開発をもっと劇的に改善する最新のwebサービス、開発ツール集2]
(http://qiita.com/appwatcher/items/c15d7311e71b4c2b77f1)

[スパゲッティから脱出！iOS開発における遷移の問題をすっきり解決する便利ルーティングライブラリをご紹介]
(http://qiita.com/appwatcher/items/259e8d13fff0547e90af)
うるう年判定：ビット演算＆LUT利用

http://qiita.com/le_panda_noir/items/70eaab385c2b33c8fb63 より

# うるう年判定器
```c
uint64_t leapyear_lut[] =
  {0x1111111111111111, 0x1111110111111111,
   0x1111111111111111, 0x1111111111111011,
   0x1111011111111111, 0x1111111111111111,
   0x1111111111111111, 0x1111111111111111};

int is_leapyear(int year) {
  year %= 400;
  return !!(leapyear_lut[year >> 6] & (1ULL << (year & 0x3f)));
}
```
http://melpon.org/wandbox/permlink/drIiEfxDBFony5MF

## ルックアップテーブル(LUT)生成
```c
#include <inttypes.h>
#include <stdio.h>

int main()
{
  uint64_t lut[8];
  int exclude[] = {100, 200, 300};
  int i;

  for (i = 0; i < 8; i++)
    lut[i] = 0x1111111111111111ULL;
  for (i = 0; i < 3; i++) {
    int year = exclude[i];
    lut[year >> 6] &= ~(1ULL << (year & 0x3f));
  }

  printf("uint64_t leapyear_lut[] = {");
  for (i = 0; i < 8; i++)
    printf("%s0x%016" PRIx64, (i ? "," : ""), lut[i]);
  printf("};\n");
}
```

# うるう年判定器（圧縮版）
```c
uint64_t leapyear_lut[] = {0xfffbfffffdffffff,0xfffffffffffff7ff};

int is_leapyear(int year) {
  if (year & 3) return 0;
  int x = (year >> 2) % 100;
  return !!(leapyear_lut[x >> 6] & (1ULL << (x & 0x3f)));
}
```
http://melpon.org/wandbox/permlink/EjcoBPZc0FQz8rDD

## ルックアップテーブル(LUT)生成
```c
#include <inttypes.h>
#include <stdio.h>

int main() {
  uint64_t lut[2] = { ~0UL, ~0UL };
  int exclude[] = {100, 200, 300};

  for (int i = 0; i < 3; i++) {
    int x = exclude[i] >> 2;
    lut[x >> 6] &= ~(1ULL << (x & 0x3f));
  }
  printf("uint64_t leapyear_lut[] = "
   "{0x%016"PRIx64",0x%016"PRIx64"};", lut[0], lut[1]);
}
```
画像（imageView）を右から左までうごかす、ロード中のようなアニメショーンをつくる



```lang:SampleActivity.kt
class SampleActivity : AppCompatActivity() {
   val imageView: ImageView by bindView(R.id.view_image)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_top)

        //  new TranslateAnimation(xFrom,xTo, yFrom,yTo)
        var animation: TranslateAnimation =
                TranslateAnimation(500.0f, -1000.0f, 0.0f, 0.0f);
        // animation duration 速度
        animation.duration = 2000
        // animation repeat count　回数　サンプルは無限
        animation.repeatCount = Animation.INFINITE
        // repeat animation (left to right, right to left )
        animation.repeatMode = Animation.RESTART;
        // start animation   描写スタート
        imageView.startAnimation(animation);
    }
```
```lang:activity_top
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".activity.SampleActivity">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/view_hiyoko"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:src="@drawable/sample_image"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />
</RelativeLayout>
```
* * *

画像が右から左までロード中のようなアニメショーンになります。
すごいE本をElixirで演習する(第5章 再帰さん、こんにちは!)

#この記事は
「すごいErlang楽しく学ぼう」(以下、すごいE本)をElixirで翻訳する異を通して、並行アクター指向を何となく理解しようという試みです。
[すごいE本をElixirでやる(2章)](http://qiita.com/niku/items/cfb2e49fb72ce43215aa)に刺激されて自分もやってみようと思いました。

ソースコードは[こちら](https://github.com/iitaka1142/LYSE4GG_by_Elixir/tree/master/Section2/recursive)です。

#環境
以下の環境で作成しました。
* Erlang : R16B01
* Elixir : 0.12.4

#準備

mixを使います。

super visorが登場するまでは、--bareオプションを使用します。

```bash: 
$ mix new elixir_application --bare
```
これで、コンパイル

```bash
$ mix compile elixir_application
```

あるいは、テスト

```bash:
$ mix test
```
#以下、書きながら気づいたこと

## 5.1 再帰の動き

1行で書く場合は、do:の前にカンマが必要。

```ex:lib/recursive.ex
  def fac(0), do: 1
  def fac(n) when n > 0, do: n * fac(n-1) # arguments should not start Upper Char
  def fac(_), do: "error"
```

公開する関数はdef。非公開の関数はdefpで宣言、def privateで覚える。でも、def publicとも解釈できて紛らわしい。

```ex:lib/recursive.ex
  def tail_fac(n), do: tail_fac(n, 1)
  defp tail_fac(0, ans), do: ans
  defp tail_fac(n, ans), do: tail_fac(n-1, ans*n)
```

##5.2 さらに末尾関数

Elixirについて新しい内容はないので省略。

##5.3 リストを超えて

1ファイル内に複数のモジュールを宣言可能。

```ex:lib/recursive.ex
defmodule Recursive do
# (...中略...)
end

defmodule Tree do
# (...中略...)
end
```

これはテストファイルも同様です。複数のモジュールを定義しても、自動的に全て実行してくれます。

```ex:test/recursive_test.exs
defmodule RecursiveTest do
  use ExUnit.Case
# (...中略...)
end

defmodule TreeTest do
  use ExUnit.Case
# (...中略...)
end
```

変数の前に:を追加することでアトムになる。

```ex:lib/recursive.ex
  def empty(), do: {:node, :nil}
```

Erlangのモジュールを使用する
Erlangのモジュール名をアトムとしてインポートすれば、モジュール名は省略できます。

```ex:test/recursive_test.exs
import :gb_trees

defmodule TreeTest do
  use ExUnit.Case

# (...中略...)

  test "use gb_trees that is one of erlang std library" do
    empty = empty() # use erlang std module
    # :gb_trees.empty() # "import :gb_trees"を書かない場合はこの様に記載する。

    assert(empty == {0, :nil})
  end

# (...以下略...)

```

# 感想
Erlangで煩わしいと感じていた、モジュール先頭での定義がないのがうれしいです。
サクサク書いて、後から公開/非公開を変更することも簡単です。

次回は、第7章をやっていこうと思います。第6章は省略します。
Mozcでかなキーと英数キーが気に入らない動きをする場合のメモ

Chromebook向けディストリビューションであるGalliumOSを導入しました。

+ [Gallium OS: Chromebook に最適な Linux ディストリビューション](https://jp.linux.com/Linux%20Jp/tutorial/436783-tutorial2015121401)
+ [ChromebookにGalliumOSをインストールする方法 | Chrome速報](http://chromesoku.com/galliumos-on-chromebook-c720/)
+ [Dell Chromebook11にGalliumOSを入れる - Qiita](http://qiita.com/komatatsu/items/6ec503ef62c7b0a2e012)

前評判に違わぬ軽快なOSです。Chromebookを持っている人はUSBメモリに導入して遊んでみると楽しいと思います。C720でSSDを増設している場合はデュアルブートしても良いかも。

しかし、英数キーとかなキーが気に入らない動作をしたので、それを修正したときのメモです。  

## 前提環境

+ マシン：Acer Chromebook C720(日本語キーボート)
+ OS：GaliiumOS≒Ubuntu 15.04

```bash
$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=15.04
DISTRIB_CODENAME=vivid
DISTRIB_DESCRIPTION="Ubuntu 15.04"
```

日本語入力はFcitx+Mozcで構築しています。

## 何が気に入らなかったのか

+ 「英数」キーを押したら、「全角カナ→半角カナ→全角かな」と切り替わり、ちっとも英数として振る舞ってくれない。
+ 「かな」を押しても何もしてくれない

## キーコードを確認してみた 

xevコマンドで調べます。

+ 「英数」キー：102(Muhenkan)
+ 「かな」キー：100(Henkan_Mode)

「英数」キーだと思って一生懸命押していたのは「無変換」キーで、「かな」キーだと思って一生懸命押していたのは「変換」キーだった模様。

## 変えた設定

Mozcの設定画面を開きます。開き方はいろいろあると思いますが、わかりやすいのは、スタートメニュー（らしきもの）からSettings-Mozc Setup。

KeyMapの設定でCustomizeボタンを押します。Mozc Keymap Editorが開くので、Keyのヘッダ部をクリックしてソートして、MuhenkanキーとHenkanキーの動作を修正します。

+ Preconposition-Muhenkan⇒Deactive IME
+ DirectInput-Henkan⇒Activate IME
+ Preconposition-Henkan⇒Activate IME

## 設定変更後の動き

「英数」キーを押せば、英数の入力になり、「かな」キーを押せば、日本語（全角かな）で入力することができました。望み通り。

これに限らず、Mozcが関わる範囲（入力、変換）で、キーマップを見直したい場合は、ここを修正すれば良さそうです。OSレベルでキーマップを変えるのはちょっと面倒くさそうだし。

ただし、ファンクションキーをいろんな機能に割り当てるのは、言うまでもなく、Mozcの設定をどうこうしたところでなんともならないので、そこはご注意を。
MacOSのターミナルでSHA254　チェックサムを確認する方法

MacOSでVM構築する為にISOイメージをダウンロード後に正しくダウンロードされたか確認する為、
チェックサムを利用する際に利用するコマンド　shasum

ISOイメージダウンロード後次のコマンドを実行し、SHA-256チェックサムでダウンロードが正常に終了しているかを確認する。

$ shasum -a 256 rhel-server-6.7-x86_64-dvd.iso
0e0acb2a544f4d58f10292144161f40439734c6e98b13ba8c595372b20354bc5  rhel-server-6.7-x86_64-dvd.iso


<img width="1163" alt="スクリーンショット 2016-02-06 14.30.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/112455/2262984a-793f-ad77-eb92-2012ef0dbeee.png">


shasum の　ヘルプは以下のコマンドで確認可能

$ shasum --help
Usage: shasum [OPTION]... [FILE]...
Print or check SHA checksums.
With no FILE, or when FILE is -, read standard input.

  -a, --algorithm   1 (default), 224, 256, 384, 512, 512224, 512256
  -b, --binary      read in binary mode
  -c, --check       read SHA sums from the FILEs and check them
  -t, --text        read in text mode (default)
  -p, --portable    read in portable mode
                        produces same digest on Windows/Unix/Mac
  -0, --01          read in BITS mode
                        ASCII '0' interpreted as 0-bit,
                        ASCII '1' interpreted as 1-bit,
                        all other characters ignored

The following two options are useful only when verifying checksums:
  -s, --status      don't output anything, status code shows success
  -w, --warn        warn about improperly formatted checksum lines

  -h, --help        display this help and exit
  -v, --version     output version information and exit

When verifying SHA-512/224 or SHA-512/256 checksums, indicate the
algorithm explicitly using the -a option, e.g.

  shasum -a 512224 -c checksumfile

The sums are computed as described in FIPS-180-4.  When checking, the
input should be a former output of this program.  The default mode is to
print a line with checksum, a character indicating type (`*' for binary,
` ' for text, `?' for portable, `^' for BITS), and name for each FILE.

Report shasum bugs to mshelor@cpan.org
Unityのここがすごい！

#自己紹介
ゲームを作る専門学校でひたすらゲーム制作と勉強をしています。
開発ツールは基本的にUnity C#を使用しています。
また、Life is Tech!にてUnityでのゲームの作り方を教えるメンターをやっています。

#Unityのここがすごい！
　その①　シーンビューがすごい！

![スクリーンショット 2016-02-04 17.02.18-1.jpg](https://qiita-image-store.s3.amazonaws.com/0/111890/a6a98753-a201-7044-ff2f-4bdf55dff4bb.jpeg)

　オブジェクトをシーンビューだけで動かすことができます。超視覚的！
　![スクリーンショット 2016-02-04 17.16.17.png](https://qiita-image-store.s3.amazonaws.com/0/111890/6fc7f768-4b3c-a2e6-091f-0c6845139335.png)

その②　rigidbodyがすごい！
　Unityでは1クリックで重力を物体に付け加えることができます。
　しかもあたり判定まで1クリックで追加できます！
　![スクリーンショット 2016-02-06 13.13.31.png](https://qiita-image-store.s3.amazonaws.com/0/111890/b793407c-8fa0-2985-b2fa-23345fced1b1.png)

その③　プラットフォームの幅がすごい！
　Unityで開発したゲームはパソコン、Android、iOSだけでなくPS3、PS4、WiiU、3DS…他にもたくさんのプラットフォームがあります！
自分で作ったゲームをゲーム機で遊ぶことができます！

　![スクリーンショット 2016-02-06 13.46.51.png](https://qiita-image-store.s3.amazonaws.com/0/111890/b98f2cd7-a000-6fb8-681c-0742e1074e96.png)

その④　テストが簡単ですごい！
　ゲームを作っていると、本当にこのゲームは面白いのか…って悩むときがあります。
そんなときUnityでは簡単な動きならすぐに実装できるので面白いか面白くないかをテストすることができます。やっぱり頭の中で考えるより実際にプレイしたほうが何倍も分かりやすいですよ！

#最後に
　Unityは分かりやすい上に面白いので本当にオススメです！
プログラミングがわかってくると様々なゲームを作ることができます。
おもしろいかも…って思うアイディアがあれば自分の中だけで留めずに動く物として作りましょう！
「Verify that the value of NSExtensionPointIdentifier in your WatchKit Extension's Info.plist is set to com.apple.watchkit.」っていうエラー

タイトルのエラーで困っている方がいたらご参考までに。

## 現象

* シュミレーターではビルドできて、動作もする。
* アーカイブできて、iTunes Connectにもアップできる。
* アーカイブしてvalidateしてもエラーにはならない。

**ただ、端末転送しようとすると、上記エラーが表示されてエラーになってしまう。**


## 解決

エラーメッセージを参考に、いろいろググってみましたが、plistにはきっちりと書けという感じに見えるんですが、
「NSExtensionPointIdentifier」はしっかりと書いてある状態。

一回削除してから追加すれば解決するよ、的な情報もあったので、プロジェクトからplistの削除＆追加をやったが効果なし。

そういえば、iOS Dev Centerでプロビジョニングプロファイルが「！」マークになっていたのを解消したことを思い出して、xcodeのプロビジョニングプロファイルを削除＆再ダウンロード実施。
でも解決せず。

もしかして思い、端末のプロビジョニングプロファイルを確認すると、大量のプロビジョニングプロファイルがあったので、該当アプリのプロビジョニングプロファイルを一旦全部削除。

アプリも削除して、端末を一度macから取り外し、再接続。

そしてビルド。。。。。

で、

無事解決しました。
もし同じような現象で困っている方がいらっしゃったら、一度、端末側のプロビジョニングプロファイルの整理をお勧めします。
vvvvとPureDataの連携[OSC]

//この記事についてはvvvvサイドの筆者が記載していますので、PureDataや音声処理についてはあまり詳しくありません。その点をご留意して見ていただければと思います。


# vvvvと音の処理
vvvvは音を作る事が苦手です。
mp3ファイルなどの音声データならパッチ上で再生する方法があります。
しかし、いわゆるジェネレイティングサウンドのように、リアルタイムに書き出す音を作ることが得意ではないのです。

それについては公式にもこんなコメントがあります。

> Frankly speaking, vvvv is not focused on audio processing. For maximum flexibility in handling sound you'd probably want to get dirty with Pure Data.

　　https://vvvv.org/documentation/audio
　
つまるとこ、vvvvでは音の処理について焦点を当ててないから、柔軟に音を扱うならPureDataを使ってね。ということみたいです。

とは言え、vvvvフォルダのgirlpowerの中にはAudioの項目があり、
「12_Generating_Sound_Basics.v4p」などを見てもらえると、さしあたっての音は鳴らせることがわかると思います。

が！
Beepを鳴らすとRendererの処理が止まり、つまり映像が止まったりします。

すべてのノードが1フレームに1回処理されるという、フレームベースドというパラダイムが、音の処理に向いていないという事が原因として挙げられます。

# サウンドプログラミング　PureData
PureDataはサウンドプログラミングに特化したビジュアルプログラミングで、音を作る、音声処理をすることに特化したソフトです。

基本的には無料で使用することができます。
https://puredata.info/

ちなみに、『vvvvook』と同じくBNNから『Pd Recipe Book-PureDataで始めるサウンドプログラミング』という本が出ています。

#vvvv PureData のOSCを使った連携
ではVJとDJが別々に存在するように、映像はvvvv、音はPureDataで分担して作れば、それぞれの長所を生かし作品を作ることができます。

PureDataの導入や音を鳴らすところについては、他のHPや書籍にお任せし、OSCを使ってPureDataと通信をするところを見てみたいと思います。

# vvvv →　PureData
![vvvvPd.gif](https://qiita-image-store.s3.amazonaws.com/0/100231/5d555bd9-b23b-d2ae-50ad-bf06813f6bcf.gif)

vvvvからOSCで値をPureDataへ送ります。
上のgif画像では2秒ごとにランダムな5つの要素を持つSpreadを送っています。2秒ごとに値を更新しています。
値にはそれぞれアドレスというラベルのようなものがつけられ送信されます。vvvv側の「/test1,/test2,/test1/1,/test1/2,/test1/3」といというラベルが右のそれぞれの値に対応します。

そして、今回はポート9000を介してデーターを送っています。

PureData側ではそれぞれのラベルから対応するデーターを呼び出しています。
この時「/test1/1,/test1/2,/test1/3」についてはまず「/test3」という括りから、さらに「/1,/2,/3」のそれぞれをさらに分割することで呼び出しています。

# PureData →　vvvv
今度は逆にPureData側からvvvvへ値を送ります。


![PDvvvv.gif](https://qiita-image-store.s3.amazonaws.com/0/100231/68e295fd-f004-cfa5-ad34-f7b3ad6b9604.gif)
 「connect localhost 9000」を「sendOSC」へ繋いであげることで送信先を決定します。大文字小文字注意です。

そして、「Send～」から始まる文章に、それぞれ値を送る記述をしてゆきます。
「send /ex1 100」
sendが命令で、/ex1がアドレス(ラベル)、100が送る値になります。

上から３つめの「send　/ex3 $1」はその上のノードのRandomから発生される値を送るようになっています。

さて、PureDataは繋ぐだけでは送信処理を行ってくれません。ここがvvvvの概念と大きく違うところです。
vvvvは繋ぐだけで処理が常に実行されます。しかしPureDataは繋いてからその情報を流すにはBangデータを流さないといけません。

なので、metroから2秒ごとにBangデーターを流す事で、2秒ごとにそれぞれの値を送信しています。
それをTriggerで順番にBangデータを流して、それぞれの値をOSCで送信します。
(※追記：この場合Triggerは必須ではありませんでした。)

受信側では、Spreadとしてデータを受け取って、それをアドレス（ラベル）ごとに分けて表示しています。

余談ですが、PureDataをやっていると、オシレーター[oscillator]としてのOSCというノードが出てきますが、これは通信プロトコルのOSCとは意味が違うので、vvvv側からPureDataを始める人は注意です。


#おわりに
vvvvをやってから、初めてPureDataを触ると、同じビジュアルプログラミングなのに勝手がまったく違うことに驚きました。
まず、vvvvでは1つのインレットに複数のデータが流されることがありませんので、戸惑います。
そして、今回も出てきましたが、繋ぐだけではデータは流れずBangデータを流すことで初めてデーターが流れてゆきます。
vvvvだとBangは0 or 1の値ですが、PureDataだとその概念とが違っています。

私もPureDataの本をめくるときは驚きの連続でしたが、同じビジュアルプログラミングでもこれだけ違うのかと、とても勉強になりました。

PureDataの方がvvvvを、そしてvvvvの方がPureDataをやる一助となれればいいなと思っています。

参考：
Pure Data Lesson
http://puredatalesson.blogspot.jp/2014/06/11open-sound-control.html
標準入力も受け取れるシェルスクリプト（catコマンド使用）

こんにちは。
```cat``` コマンドを使えば、パイプラインからの標準入力でも、引数による指定ファイルの内容も受け取って処理できるシェルスクリプト作りが容易です（下記例）。

### 総行数を求める例 ###

```bash
#!/bin/sh
# If no file arguments are specified, the standard input is used.

# error handling: 入力が何もない場合にはエラー処理しています。
[ $# == 0 ] && [ ! -p /dev/stdin ] && exit 1

# execution: 総行数を求める例です
cat "$@" | wc -l
exit 0
```

### 行毎にループを回す例 ###
ただし最終行まで一度に受け取るので大きいサイズの場合は要注意です。

```bash
#!/bin/sh
for line in `cat "$@"`
do
  echo $line
done
exit 0
```
AWS Lambdaでファイル入出力をしてみる

# はじめに
Qiitaで以下の投稿を見て、Lambdaの実行環境にファイル出力が出来ることをしりました。

AWS lambdaでファイル出力する方法 (Java)
http://qiita.com/ABCompany1/items/e34fad93d7966087b4bb

となると、もちろんファイル入力も出来るのかっていうのが気になります。

# ファイル作成

まずはファイルを作ります。fsライブラリはAWS Lambdaに標準で対応しています。
Node.jsにはwriteFileというファイルに直接出力する関数が用意されていて、
ファイルへの文字列の出力がとっても簡単です。

```js:index.js
var fs = require('fs');

exports.handler = function(event, context){
    fs.writeFile('/tmp/sample.txt', 'Hello File', function(err){
        console.log(err);
        context.done(null, err);
    });
}
```

Lambdaのコンソール上で「Test」ボタンをクリックして実行して見ます。

```
START RequestId: 9582746c-cc76-11e5-929d-0dcb72880f7c Version: $LATEST
2016-02-06T02:08:59.383Z	9582746c-cc76-11e5-929d-0dcb72880f7c	null
END RequestId: 9582746c-cc76-11e5-929d-0dcb72880f7c
REPORT RequestId: 9582746c-cc76-11e5-929d-0dcb72880f7c	Duration: 80.31 ms	Billed Duration: 100 ms 	Memory Size: 128 MB	Max Memory Used: 9 MB	
```

ログ出力をみると、errがnullとなっていますので、無事にファイル出力されたようです。

# ファイルの確認

念のためにファイルを確認してみます。

```
var fs = require('fs');

exports.handler = function(event, context){
    fs.readdir('/tmp/', function(err, files){
        console.log(files);
        context.done(null, files);
    });
};
```

このコードを実行してみた結果は以下の通りでした。

```
2016-02-06T02:13:11.863Z	2c02e645-cc77-11e5-ab41-a9b8cc6efe0d	[]
```

あれ？ファイルがありません。
Lambda関数がデプロイされるサーバーは固定ではないので
今度は違うサーバーにデプロイされてしまったのかもしれません。

# ファイル出力と確認を同じプログラムで実行する
そこで、今度はファイル出力と確認を同じコードで見てみます。

```
var fs = require('fs');

exports.handler = function(event, context){
    fs.writeFile('/tmp/sample.txt', 'Hello File', function(err){
        fs.readdir('/tmp/', function(err, files){
            console.log(files);
            context.done(null, files);
        });
    });
};
```

さて、結果は・・・

```
2016-02-06T02:21:05.363Z	463e7c80-cc78-11e5-a64f-994ec5d55787	[ 'sample.txt' ]
```

ファイルの存在を確認できました。
ただ、毎回デプロイされる先が変更されてしまうのでは、実用には出来ませんね。

# 再実行可能なファイル入出力

そこで、再デプロイせずに済むようにファイル出力と読み込みとを同じコードで実行します。
見やすいように同期メソッドを使って呼び出して見ます。

```
var fs = require('fs');

exports.handler = function(event, context){
    var dir = fs.readdirSync('/tmp');

    //If the file is not exist, create a file
    if(dir.length == 0){
        console.log('The file is not exist.');
        fs.writeFileSync('/tmp/sample.txt', 'Hello File');
        var files = fs.readdirSync('/tmp/');
            console.log(files);
            context.done(null, files);
    }else{
        var data = fs.readFileSync('/tmp/sample.txt', 'utf-8');
        console.log(data);
        context.done(null, data);
    }
};
```

1回目の実行結果は

```
2016-02-06T02:32:07.204Z	d0b4151b-cc79-11e5-8cb4-a10c8e66e56a	The file is not exist.
2016-02-06T02:32:07.205Z	d0b4151b-cc79-11e5-8cb4-a10c8e66e56a	[ 'sample.txt' ]
```

ファイルが存在しませんでしたので、作成されました。
さて、ここでプログラムの修正を行わず、再実行します。

```
2016-02-06T02:36:10.743Z	61dd7d35-cc7a-11e5-8cb4-a10c8e66e56a	The file is not exist.
2016-02-06T02:36:10.744Z	61dd7d35-cc7a-11e5-8cb4-a10c8e66e56a	[ 'sample.txt' ]
```

2回目もファイルが新規作成されてしまいました。何故でしょう？
念のためにもう1回。

```
2016-02-06T02:37:33.257Z	933182b6-cc7a-11e5-837b-fdb3c6285259	Hello File
```

3回目にしてやっとファイルの読み込みに成功しました！
ただ、実行するたびに読み込めたり、新規作成されたりでした・・・。
残念ながらLambda上にファイルを保存するのは難しいですね。
CSVで入力した情報をRBに変換し、定型文を追加する。

データ入力の際、必要最低限の情報のみをCSVに入力し、RUBYファイルに変換しようと思う。
後にはRailsの中に組み込んだり等考えているが、今の所はRubyを手動で実行しCSV→RUBYに変換する方法をメモする。


例えば、ツイッターの情報をまとめたいとする。
CSVにて「アカウント名,account,アカウントのコメント」の情報を入力した時に、Rubyでは「Twitter.create(:name => 'アカウント名', :url => 'https://twitter.com/account', :comment => 'アカウントのコメント')」のという形式で受け取りたいとする。

こちらは、Seeds.rbでrailsのdbに情報を入力することを前提としているため、ご自身の受け取りたい形式、情報個数によって変更する必要がある。



```lang:change.rb
require 'csv'

csvdatas = CSV.read("before.csv")
file = File.open('after.rb', 'w')

csvdatas.each do |csv|
	csv[0] = 'Twitter.create(:name => ' + "'" + csv[0] + "'"
	csv[1] = ', :url => \'https://twitter.com/' + csv[1] + "'"
	csv[2] = ', :comment =>' + csv[2] + "\')" + "\n"  #要改行
    file.write csv.join #csvをつなげてfileに書き込む。
end
```

あとは入力データをCSVで作成し、実行するだけ。

`$ ruby change.rb`

これでafter.rbというファイルが作成されます。
GsonでJavaScriptが64bit整数を扱えない問題を回避する方法

##発生した問題
JavaScriptでは64bitの整数を扱うことができない。
32bitの範囲を超えた数値は64bitの浮動小数点型に変換されるが、整数として精度を保てるのは53bitまでとなる。
このため整数として53bitを超える精度が必要な場合には何らかの対処が必要となる。

kotlinでGsonを使ってWeb-APIを作成していた際に、この問題に突き当たった。
DBレコードのIDを64bit整数として設計していたためだ。

##解決方法
```
val gson = GsonBuilder().setLongSerializationPolicy(LongSerializationPolicy.SRING)
```

以下古い情報(コメントで指摘をいただき、実は簡単に設定できました。)

Gsonには型ごとにどのようにJSONとして書くか、または読み取るかを設定する機能がある。
この機能を使い、Long型は無条件で文字列に変換して返すことでこの問題を回避した。
クライアント側で64bit整数に対する計算が発生する場合はこれだけでは済まないが今回は計算は不要であった。

##Long型を文字列型に変換できるように設定する例
```kotlin
private val gson = with(GsonBuilder()) {
    registerTypeAdapter(Long::class.javaObjectType, object: TypeAdapter<Long>() {
        override fun write(out: JsonWriter?, value: Long?) {
            out ?: throw IllegalStateException()
            out.value(value?.toString() ?: "")
        }

        override fun read(r: JsonReader?): Long? {
            r ?: throw IllegalStateException()
            return r.nextLong()
        }
    })
    create()
}
```

write()関数を改造すれば、53bitの精度に収まる範囲であれば整数型のまま返すことや、逆に53bitを超える場合はエラーにするいったことも可能だ。
VPSを借りてMinecraftのマルチサーバーを構築する

# 概要
VPS上にMinecraftのマルチサーバーをたてる方法です。
少人数でも最低メモリ2Gあったほうが良いみたいなので、値段で[Serversman@VPS](http://dream.jp/vps/)を借りて構築してみました。

Standardプランで月額934円！


# Serversman@VPSの構成
![simple.png](https://qiita-image-store.s3.amazonaws.com/0/57610/791ab5ef-8158-9aca-a84a-9bed345cf65f.png)

# sshでサーバーに入ってからやったこと
すべてrootで作業しています。

## パッケージ更新

```
yum update
```

## 不要そうなサービスを落とす

```
service httpd stop
chkconfig httpd off
service xinetd stop
chkconfig xinetd off
service saslauthd stop
chkconfig saslauthd off
```

## Minecraftで必要なパッケージインストール

```
yum install java-1.7.0-openjdk
yum install screen
```

## Minecraft実行ユーザ作成

```
useradd minecraft
```

## iptablesでMinecraft使用ポートを開ける

ssh使用ポート番号、Minecraft使用ポート番号をデフォルトから変えている場合は、それに合わせて変更する。

```
vi /etc/sysconfig/iptables
```

iptablesの設定ファイルを以下に上書き。

```text:/etc/sysconfig/iptables
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3843 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 25565 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
```

```bash
service iptables restart
```

## Minecraft Serverダウンロード

### Minecraft用ディレクトリ作成/移動

```
mkdir /var/minecraft
cd /var/minecraft
```

### Minecraft Serverダウンロード
現状最新版は1.8.9みたいなので、それを指定
作成したディレクトリに落としてくる。

```
wget https://s3.amazonaws.com/Minecraft.Download/versions/1.8.9/minecraft_server.1.8.9.jar
```

### minecraftユーザで実行できるように権限変更
```
chown -R minecraft: /var/minecraft
```

## 起動スクリプト
Minecraft Serverをサービスとして動かすための、起動スクリプトです。

### 起動スクリプトダウンロード

```
wget -O minecraft "http://minecraft.gamepedia.com/Tutorials/Server_startup_script/Script?action=raw"
```

### 起動スクリプトの設定変更

ディレクトリやファイル名、メモリ使用設定をします。

```
vi minecraft
```

```diff:minecraft
+ SERVICE='minecraft_server.1.8.9.jar'
 OPTIONS='nogui'
+ USERNAME='minecraft'
 WORLD='world'
+ MCPATH='/var/minecraft'
 BACKUPPATH='/media/remote.share/minecraft.backup'
+ MAXHEAP=2048
+ MINHEAP=1024
 HISTORY=1024
 CPU_COUNT=2
```

### 起動スクリプト設置 / 実行権限追加

```
mv minecraft /etc/init.d/
chmod +x /etc/init.d/minecraft
```

## Minecraft Server起動 

```
service minecraft start
```

起動まで少し時間がかかりますが、これで無事完了。

素敵なMinecraftライフを！

![スクリーンショット 2016-02-06 10.16.37.png](https://qiita-image-store.s3.amazonaws.com/0/57610/0e9760cb-9d6b-548a-d80a-b51b0356550e.png)
PostCSSで簡単なプラグインを作ってみよう

PostCSSでプラグインを作ってみます。今回は簡単な置換を行います。

#npm
gulpを使用することにします。

```
$npm install gulp postcss gulp-postcss  --save-dev
```

#プラグイン作成
##フォルダ構成
```
|-node_modules
|-build
   |---css
      |---style.css
|-src
   |---css
      |---style.css
|-gulpfile.js
```

##ファイル準備
```
|-node_modules
   |---postcss-myplugin
      |---index.js
```
node_modules配下にオリジナルプラグインフォルダを作成します。ここでは「postcss-myplugin」というフォルダを作りました。

#index.js
```index.js
var postcss = require('postcss')

module.exports = postcss.plugin('myplugin', function() {
	return function(css) {
			css.walkDecls(function transformDecl(decl) {
			decl.value = decl.value.replace('💩', '#7F4A1E');
		});
	};
});
```
「💩」という絵文字を「#7F4A1E」に置換します。

#gulpfile設定
```gulpfile.js
var gulp = require('gulp'),
gulpPostcss = require('gulp-postcss'),
myPlugin = require("postcss-myplugin");

gulp.task('styles', function() {
  var processors = [
    myPlugin
  ];
  return gulp.src([
    'src/css/style.css',
  ])
  .pipe(gulpPostcss(processors))
  .pipe(gulp.dest('build/css'))
});
```

#実行結果
```
$gulp styles
```

##置換前
```css:src/css/style.css
.test {
	background: 💩;
}
```

##置換後
```css:build/css/style.css
.test {
	background: #7F4A1E;
}
```
置換できました :v: 

・参考
[PostCSS Deep Dive: Create Your Own Plugin - Envato Tuts+ Web Design Tutorial](http://webdesign.tutsplus.com/tutorials/postcss-deep-dive-create-your-own-plugin--cms-24605)
https://github.com/postcss/postcss/blob/master/docs/writing-a-plugin.md
https://github.com/postcss/postcss
ミニサムとかミニマックスって何ですか？

# <i class ='fa fa-plane' /> 最適化にまつわる話

- ミニサム問題とは、合計(サム:sum)を最小化(ミニ:min)する問題。
- ミニマックス問題とは、最大値(マックス:max)を最小化(ミニ:min)する問題。

避難計画問題に当てはめると、次のようになります。

- ミニサム問題: 全員の避難時間の合計の最小化。
- ミニマックス問題: 最も逃げ遅れる人の避難時間の最小化。

一般に数理最適化ソルバーでは、次のことが言えます。

- ミニマックス問題よりミニサム問題の方が解きやすい。

確かめてみましょう。

```py3:python
import numpy as np, pandas as pd, matplotlib.pyplot as plt
from pulp import *
商品数 = 1000
ユーザ数 = 100
np.random.seed(1)
a = pd.DataFrame(np.random.rand(商品数, ユーザ数),
                 index=['商品%d'%i for i in range(商品数)],
                 columns=['ユーザ%d'%j for j in range(ユーザ数)])
a['Var'] = [LpVariable('v%d'%i, lowBound=0) for i in range(商品数)]
```

<table>
    <tr><th></th><th>ユーザ0</th><th>ユーザ1</th><th>ユーザ2</th><th>ユーザ3</th><th>ユーザ4</th><th>...</th><th>ユーザ99</th></tr>
    <tr><th>商品0</th><td>0.417022</td><td>0.720324</td><td>0.000114</td><td>0.302333</td><td>0.146756</td><td>...</td><td>0.186260</td></tr>
    <tr><th>...</th><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td></tr>
    <tr><th>商品999</th><td>0.950176</td><td>0.556653</td><td>0.915606</td><td>0.641566</td><td>0.390008</td><td>0.485991</td><td>0.604310</td></tr>
</table>

1000個の商品に対して。100人のユーザがバラバラの費用感を持っているとします。
下記の問題に対して、1000個の商品の中から、半分を選ぶとします。

- ミニサム問題: 全ユーザの費用感の合計の最小化
- ミニマックス問題: 各ユーザの費用感の最大値の最小化

商品の数を変えながら、計算時間を見てみましょう。

```py3:python
it = [100, 200, 500, 1000] # 商品数リスト
tm = []
for n in it:
    b = a[:n]
    # ミニサム問題
    m1 = LpProblem() # 最小化問題(ミニ)
    m1 += lpDot(b.T[:-1].sum(), b.Var) # 合計(サム)
    m1 += lpSum(b.Var) <= int(n * 0.5)
    m1.solve()
    # ミニマックス問題
    m2 = LpProblem() # 最小化問題(ミニ)
    y = LpVariable('y', lowBound=0)
    # y >= max(ユーザj の価値)
    for j in range(ユーザ数): m2 += y >= lpDot(b.ix[:, j], b.Var)
    m2 += y # 合計(マックス)
    m2 += lpSum(b.Var) <= int(n * 0.5)
    m2.solve()
    tm.append((m1.solutionTime, m2.solutionTime))

plt.plot(it, tm)
plt.legend(['ミニサム問題','ミニマックス問題'], loc='upper left')
plt.show()
```
![image](https://qiita-image-store.s3.amazonaws.com/0/13955/7c30a2c4-3e5f-ba65-b28e-3a2aed597652.png)

ミニサム問題に比べて、ミニマックス問題の方が、かなり時間がかかります。

# <i class ='fa fa-plane' /> ミニマックス問題が時間がかかるのは、何故？

- ミニサム問題に比べて、ミニマックス問題は、最適解がたくさんあります。
- ソルバーでは、全ての可能性を探索しています。
- 最適解がたくさんあると、ソルバーが効率よく計算できません。

# <i class ='fa fa-plane' /> ミニマックス問題を効率よく解けないの？

場合によっては、[ビンパッキング問題の解き方](http://qiita.com/Tsutomu-KKE@github/items/3a970e071768bbe96005)のように、2段階に解いた方が早く解けることもあります。


以上
upverter > パーツ作成した > SD1602X > 人のパーツを上書きしてしまったようだ。大失敗。> global databaseには影響なかったようだ

回路図作成ツール upverter
https://upverter.com/


自分が使おうとしたいパーツがないので作ってみた。
<font color=red>7ピンのパーツを元にした。</font>(7pinで検索)

~~SD1602X で検索できる（少なくとも自分の環境では)。~~ (追記: Revert要請を出した)

一方で、元の7pinのパーツが検索されなくなっている。
もしかして元パーツの情報を上書きしてしまったのだろうか。
そうだとしたら、迷惑なことをしてしまった。

自分が使うSD1602Xは別途 Create New から作りなおした。
最初からこうしておけばよかった。


<hr>
(追記 2016/02/09)
[forum](https://forum.upverter.com/t/it-seems-that-i-overwrote-a-part-by-mistake-which-was-made-by-others-can-i-revert-it/22892/3)に回答がついた。

僕の変更は個人のdatabaseだけ変更され、global databaseには影響がないとのことだった。

良かった。

global databaseは parts concierge が承認したものだけ反映されるとのこと。
電子工作 > link > キャラクタディスプレイ > SD1602X 

I2C接続する SD1602X というキャラクタディスプレイ

購入した時についてきたデータシートの数値が霞んでいて残念。

PDFを見つけた。
http://blog.digit-parts.com/pdf/sd1602xbwb.pdf

PDFも霞んでいる。残念。

でもなんとなくは読めそうだ。多分。。。


以下で別のPDFを見つけた。この会社が作っているということだろうか。
http://www.toshinkk.co.jp/product/lcd-chr.html
RPi > link > I2Cを使う

Raspberry Pi2でI2Cを使うとしたら、このあたりだろうか。

[make.bcdeさん](
http://make.bcde.jp/raspberry-pi/i2c%E3%82%92%E4%BD%BF%E3%81%86%EF%BC%88%E8%A8%AD%E5%AE%9A%E7%B7%A8%EF%BC%89/)
Pi Zero > Adafruit Pi Zero Contest 参加手順 / 参加してみた

http://qiita.com/7of9/items/27c2a6f8d538392e6ab1
で書いたAdafruit Pi Zero Contestの参加方法がわかりにくかったので以下に記載する。


1. hackaday.ioにユーザ登録する
2. プロジェクトを作る　
3. プロジェクトのページに移動する
4. 画面左の Submit project to ... を開く
  - Adafruit Pi Zero Contest を選択する
  - 確認ダイアログで Yes を選択する

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/537b6ee0-01a5-b02e-0d42-97b4622cfc19.png)

以下で参加しておいた。
https://hackaday.io/project/9526-bring-your-own-pizero-byop

他の参加者含めてのリストはこちら
https://hackaday.io/submissions/adafruitPiZeroContest/list
Qiita > 数式の後ろに縦棒がつく仕様になってしまった?? > Chromeのバグのようでした / 要 MathJax2.6 対応?? > 対応済みとなりました


http://qiita.com/bukurocci/items/756ca4708aa321205e33
を見ていて違和感があったのは、変数 N や数式の最後に縦棒がついている状態。

~~以下のように書くと、下の式のように縦棒がつくようだ。~~ (2016/02/08追記: 対応されました)。
```math
 \frac{dN}{dt} = -λN 
```


```math
 \frac{dN}{dt} = -λN 
```

ぱっとみた時にラプラシアンオペレータのような「演算子」を意味するのかと思ったが、そういうことではなさそう。


http://qiita.com/7of9/items/aed959045cea32e536dc
を書いた時はそういう仕様ではなかったと思うが、今見たら上記の自分の記事にも縦棒がついている。

システム更新でエンバグしたのだろうか。


```txt:動作環境
Mac OS X 10.8.5
Chrome  48.0.2564.103 (64-bit)
```
技術英語 > I wouldn't stand a chance. / stand the test of time / I will take the chance.

@ Star Trek Voyager > PARTURITION

状況としては、

- ケスとNeelixは恋人同士
- ケスがトムを好きになっていると疑うNeelix

それに対してのトムの回答

> I wouldn't stand a chance.

「そんなことはない」ということ。

<hr>
関連して思い出したのは

stand the test of time

http://qiita.com/7of9/items/aa9d1f6580db8ea138dd

<hr>
関連して思い出したのは

Voyagerのエピソード（おそらく後の方)で「Threshold: 限界速度ワープ10」というのがある。

確か、このエピソードで「xxxに賭けてみます」というのを以下のように言っていたと思う（間違いかもしれない）

> I will take the chance.

何か難しいことがあり、「できるのか？」と聞かれた時の回答の１つとして使えるだろうか。
AWS lambdaでファイル出力する方法 (Java)

# JavaのFileオブジェクトを使ってファイル出力を行う

JavaでHTMLファイルを作成し、S3にアップロードするjarファイルをlambdaで実行しようとすると、ファイル作成時に「permission denied」エラーが出た。

いろいろ試した結果、「/tmp」配下にならファイルを出力できるようだ。

```java

package main;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;

public class LambdaFunctionHandler implements RequestHandler<Object, Object> {

	@Override
	public Object handleRequest(Object input, Context context) {

		try {
			File file = new File("/tmp/index.html");
			PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));
			pw.println("<html><body>TEST</body></test>");
			pw.close();
			lambdaLogger.log("Suucess to make file.");
		} catch (IOException e) {
			lambdaLogger.log("Failed to create temp file.");
		}
		return null;
	}
}

```

↑だったらうまく動いた。
網羅的に調べたわけではないので他にディレクトリに出力できるかはわかりません。(誰かしっていたら教えてください)

lambdaはスケジュール機能も追加されたようなのでもう少し遊んでみようと思う。
REGZA用smb.conf

REGZAからのguest accessができなくてハマったのでまとめておく。

ubuntu 12.04で
samba  2:3.6.3-2ubuntu2.13 
をinstallした

/etc/samba/smb.conf
を以下のように編集。

これでREGZAからpassなしで接続できる。

[global]
	dos charset = CP932
	display charset = UTF-8
	server string = %h server (Samba, Ubuntu)
	map to guest = Bad User
	syslog = 0
	log file = /var/log/samba/log.%m
	max log size = 1000
	unix extensions = No
	dns proxy = No
	idmap config * : backend = tdb

[htpc]
	comment = HTPC
	path = /media/TS1/Videos
	read only = No
	guest ok = Yes