OmniAICreator/Qiita-1.07M huggingface dataset:
Linux(Ubuntu)でUSB over SSHする(iproxy)

USB接続のiPhone（OpenSSHインストール済み）にSSH接続するためには「tcprelay.py」などがありますが、
何故か当方の環境だと2つ以上のSSHコネクションを張れなかったので「iproxy」を使ってみることに。

##インストール方法

Ubuntuなら標準リポに入っているので`apt`叩けばインストールできます。

`sudo apt install libusbmuxd-tools`

でインストールできるはず。

##使い方

まあ、`man iproxy`すればわかりますが

`iproxy [local port] [device port]`で動きます。

複数のポートをトンネルしたいときは複数起動すればできます。
気圧計 (v0.9) > 信号強度を得る: RSSI() /  udpLogger: 自作ケース / 歩行時の影響調査 / 屋外測定の実施


v0.1: [電子工作 > 気圧計到着 > MPL115A2(I2C接続) / ユニバーサル基板実装](https://qiita.com/7of9/items/09272fcfb56bd479c679)

## 気圧計 (v0.9) 

気圧計とudpLoggerの組合せで気圧計がudpLoggerのAccessPointを認識できない事象がみられる。

原因としては、電池電圧が2.8Vに下がっていて通信強度が得られていなかったこと。電池を新品に交換して解決はした。

通信強度は[umi_kappaさんの投稿](http://qiita.com/umi_kappa/items/366e1ab937ae98b14eba)にあったのを思い出した。

RSSI()を使う。
https://www.arduino.cc/en/Reference/WiFiRSSI

> long : the current RSSI /Received Signal Strength in dBm

[v0.9 @ github](https://github.com/yasokada/esp8266_160528_MPL115A2/releases/tag/v0.9)
にてRSSI読取りを実装した。


実際に実行してみたところ

```
Connected at 2th try with RSSI:-28
```

long値だが、値はマイナスが出るようだ。

## udpLogger: 自作ケース

気圧計のデータを保存するudpLoggerはリュックサックに入れて使う予定だ。
なんらかのケースがいる。

自作ケースはカロリーメート2本入りの箱を使用することにした。ちょうどいい大きさだ。
未開封のカロリーメートの箱を以下により工作し、上の蓋を作ると電池部分のクリアランスが取れる。

- 背面にコの字型に切込みを入れる
- 上面に垂直に切込みを入れる
- できた蓋を反対方向に折り曲げる
- 蓋の端に切込みを2個所入れてゴムをひっかけれるようにしておく

![DSC_0180.JPG](https://qiita-image-store.s3.amazonaws.com/0/32870/29f3b1dd-5090-c4a5-9b27-2e540a0ab7d6.jpeg)

輪ゴムにより抑え込まれた蓋が電池ケースの端をおさえて、基板の固定をしてくれる。

このケースをリュックサックの小さいポケットに入れてudpLoggerとして使う。
直にポケットに入れるよりいいと思う。


## 信号強度

以下となった。

- 素の基板 @ 気圧計のすぐ近く: RSSI -28dBm
- 自作ケース @ 気圧計のすぐ近く: RSSI -29dBm
- 自作ケース in リュックサック: RSSI -56dBm

## 測定値への影響調査

上記の自作ケースを気圧計にも用意した。それをシャツの胸ポケットに入れて測定すると歩行によって気圧計の測定値に影響がでるのかどうか。

以下の状態で測定をした。

1. 卓上に設置
2. 気圧計 in 自作ケースを胸ポケットにいれて歩行してみる　

以下の矢印で上記の２つの状態を区分している。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/96a98284-0874-a020-a44b-2025223b7da2.png)

グラフの縦軸は高度(m)。±４m程度の誤差が見られた。

## 屋外測定

実際に屋外の測定をしてきた。

udpLoggerはリュックの小ポケットに電源をいれたまま待機しておく。スマホからunity udpSenderで時計わせをしておく。
気圧計は測定場所に到着してから電源を入れて測定開始。自作ケースに入れたものを胸ポケットに入れて測定場所を移動した。

今回の測定場所は(1)谷町9の交差点から(2)下味原の交差点まで。
以下のように測定ができた。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/8cd07533-8c16-5828-e718-7221696c6924.png)

思っていたよりも高度差はなかった。15m程度だった。
時々急激に値が代わっているのは天候によるものだろうか。
地点(2)に近づく下り坂は定性的に測定ができている。

[Google Maps 標高表示](http://wisteriahill.sakura.ne.jp/GMAP/GMAP_ALTITUDE_II/)
によると地点(1)は18.46m, 地点(2)は3.32m程度。高度差は15m程度。
オンラインでコンパイル結果のアセンブリを確認

http://gcc.godbolt.org/ で gcc, llvm, icc のコンパイル結果のアセンブリを確認できる

![Untitled.png](https://qiita-image-store.s3.amazonaws.com/0/131106/9169d21d-2d65-a805-984c-59a1d5edd92c.png)
ffmpegで連番画像から動画生成 / 動画から連番画像を生成 ~コマ落ちを防ぐには~

#■ 動画や音声を扱うための非常に強力なツール ffmpeg
ffmpegは動画や音声を扱うための非常に強力なツールです。
LinuxやMac、Windowsでも使えます。扱えるフォーマットも多数あり、使いこなせばかなりのことができます。

#① 連番画像から動画変換
連番画像から動画を生成できます。

**png連番画像から動画生成**
>例えば次のような連番のpng画像から.mp4の動画を生成する場合。
>　　image_001.png 
>　　image_002.png 
>　　image_003.png ......
>
>```
>$ ffmpeg -r 30 -i image_%03d.png -vcodec libx264 -pix_fmt yuv420p -r 60 out.mp4
>```
>この場合は、連番画像からフレームレート60fpsの.mp4形式の動画を生成します。
>-r が2回書いてありますが、最初の -r オプションで30fpsの連番画像ということを明示して、それを2回目の -r オプションで60fpsで動画化するように指定しています。つまり、この場合に出力される動画は、1秒間に違う画像が30枚あり、同じ画像を2度表示することで結果的に60枚表示していることなります。連番画像が image_001.png ～ image_120.png で120枚だった場合、4秒の動画が作られます。

**png連番画像から動画生成　~ スタートフレームとフレーム数を指定する ~**
>```
>$ ffmpeg -r 30 -start_number 101 -i image_%03d.png -vframes 600 -vcodec libx264 -pix_fmt yuv420p -r 60 out.mp4
>```
>-start_number オプションで動画化の開始フレームを指定できます。また -vframes オプションでフレーム数を指定します。上の場合は image_101.png からimage_400.png までの連番画像を動画化することになります。-vframes オプションは出力されるフレームレートで換算されるようなので、少し注意が必要です。

**png連番画像から動画生成　~ コマ落ち回避 ~**

>webで調べると、上の -r オプションを2回にする書き方が良く見られるのですが、実はこの書き方だと場合によっては、意図しないコマ落ちが発生することがあります。**コマ落ち(drop)を防ぐには、最初の -r オプションは -framerate とした方が良いようです。**[参考サイト : https://github.com/yihui/animation/issues/74](https://github.com/yihui/animation/issues/74)

>```
>$ ffmpeg -framerate 30 -i image_%03d.png -vcodec libx264 -pix_fmt yuv420p -r 60 out.mp4
>```

>私の場合、αチャネルを持つpngの連番画像を使った場合、-r オプションを2回使う書き方だとコマ落ちしてしまって想定している動画の秒数になりませんでした。ですが、-framerate オプションを使う書き方に変更したらコマ落ちが発生しなくなりました。

**png連番画像からリバース動画生成　~ コマ落ち回避 ~**

>```
>$ ffmpeg -framerate 30 -i image_%03d.png -vcodec libx264 -pix_fmt yuv420p -vf reverse -r 60 out.mp4
>```

>通常は連番画像を数値の小さいから読み込んで動画にしますが、数値の大きい方から読み込んで動画にすることもできます。それには -vf reverse オプションを追加します。逆転再生の動画を作成するときに便利です。

#② 動画から連番画像を作成
動画を連番画像にすることもできます。

**pngの連番画像を出力**
>```
>$ ffmpeg -i input.mp4 -vcodec png image_%03d.png
>```
>この場合は、入力動画のfpsが保たれる形でpng画像が出力されます。例えば、30秒で10fpsの動画ならば300枚のpng画像が出力されます。

>```
>$ ffmpeg -i input.mp4 -vcodec png -r 30 image_%03d.png
>```
>-r オプションででフレームレートを指定することもできます。この場合( -r 30 の場合)、input.mp4が60fpsの動画だったら、1コマ置きの画像が出力されます。


**jpgの連番画像を出力**

>```
>$ ffmpeg -i input.mp4 -vcodec mjpeg image_%03d.jpg
>```
>jpgの連番画像を出力させたいときは "-vcodec mjpeg" にします。

"-f image2" を書く例も良くみられるのですが、無くても問題なく連番画像の出力はできました。また、-vcodec オプションを書かなくても大丈夫でした。推測ですが、拡張子から自動で画像フォーマットを判断しているようなので、これらのオプションは無くても問題ないのかもしれません。

#③ 詳細オプション
詳細なオプションは以下のコマンドから。

```
$ ffmpeg -h full
```
libgdx の iOS バックエンド

# 概要
[libgdx](https://libgdx.badlogicgames.com/) の iOS バックエンドは 2 種類になった:
1. `ios`: MobiDevelop の [RoboVM fork](http://robovm.mobidevelop.com/)
2. `ios-moe`: Intel [Multi-OS Engine](https://software.intel.com/en-us/multi-os-engine/)
将来的にどちらが主流になるか不透明なので、開発者に選択肢を与えている。

# 背景
1. libgdx は iOS/Android/Windows/Mac/Linux のアプリを Java で開発できるフレームワーク
    1. iOS で RoboVM を使ってた
1. [RoboVM が事業を終了](https://robovm.com/robovm-winding-down/)
    1. RoboVM は Java アプリを iPhone/iPad/Apple TV で動作させる仕組み
    2. [RoboVM の歴史](http://www.gamefromscratch.com/post/2016/04/15/RoboVM-is-Dead.aspx): RoboVM が Xamarin に買収され、その後 Microsoft が Xamarin を買収して .NET 側に注力、Java 側を切り捨てた
    3. [libgdx 側での選択肢の検討](http://www.badlogicgames.com/wordpress/?p=3925) (Mobile OpenJDK 9, J2ObjC, Avian, Xamarin + IKVM, Intel Multi-OS Engine)
    4. [BugVM](https://bugvm.com/) も RoboVM の fork だが、[あまり良くない模様](http://www.badlogicgames.com/wordpress/?p=3934)
フロントエンドエンジニア(mizchi)が暇な時にやること


## 暇というか日常的にやってること

https://news.ycombinator.com/ と http://www.echojs.com/ と http://b.hatena.ne.jp/efcl/ をフィードリーダーに突っ込んでいて、面白そうなのをメモっておく

## 暇なとき

- 日頃メモってたライブラリの試し切りをする
    - 面白かったら紹介記事を書く
- 多少やる気リソースが多めだと新しい言語(最近はRustかElixir)の勉強を進める
- http://codepen.io/ で面白い動きするやつのコードを探してコード読む

とくにCodePenがオススメで、割とゲラゲラ笑いながら読めるやつが多いので楽しい。CodePenのテクニックはそのまま自分の業務に持ち込むと悪目立ちするので控えているが、Webでもこういう演出ができる、と頭の片隅にいれておくことで、いずれ何かに役立ったりする。たとえば昨日読んだ奴は CSS の:before の box-shadow でドット絵書いてた。



中の人っぽい意見なんだけど、Qiitaのサービス内でもっと能動的にクリエイティブな暇つぶしをできるような、たとえば暇つぶしでフィードリーダーを開くような、そんな仕組みを提供したいと思いつつも、今のところそういう仕組みやアフォーダンスがないので、どういうのがいいかなーと考えてはいる。


あと、これは単に愚痴なんですが、僕が去年1年スプラトゥーンしてる間に自分がキューに詰んでたやつ、誰かが多少調べてくれると期待していたんだけど、一切そんなことはなく自分で調べるしかねえ！となっている。
dockerのコマンド補完

Dockerで試行錯誤しているとき、コンテナを作ったり潰したりします。  
コンテナを潰すには``docker kill``コマンドにコンテナIDかコンテナ名を渡すわけですが、ここの補完が効いてくれたらいいのにと思って探してみました。

## Docker公式リポジトリから頂いてくる

[docker/contrib/completion/](https://github.com/docker/docker/tree/master/contrib/completion)

GitHubのDocker公式リポジトリの上記パスに、各種シェル用の補完設定ファイルが入っています。 
私の環境(zsh+Prezto)の場合は、zsh用の``_docker``ファイルを``~/.zprezto/modules/completion/external/src``に置きました。

補完が効いている状態で``docker kill``を叩いて``TAB``を押すと

![image](https://qiita-image-store.s3.amazonaws.com/0/2492/51de1502-6fe3-8ee7-5432-2adcc97f5de1.png)

こんな感じに補完候補が出てきます。 便利。
GitHubを中心とした開発プロセス 公開


[GitHubを中心とした開発プロセス](http://qiita.com/suzuki-hoge/items/a6e3bdc2cc1cf4e98ea1)の公開編です

## [gist] 簡易コード片やMarkdownを公開する
gistを使うとお手軽にコードの公開が出来る

### どう役に立つ？
+ デモに使うちょっとした資料とか、ちょっとしたまとめ記事とかを置いたりできる
 + Markdownで書くことが出来る
+ ちょっとしたコードレビューをしてもらう
 + コメント等の機能はGitHubに準ずる
+ 言語やFWのサンプルを検索したりもできる

### 使い方
1. GitHubのアカウントがあるなら今すぐ使える
![gist-enter.png](https://qiita-image-store.s3.amazonaws.com/0/113398/646deb2b-355d-86e0-6be8-cb2925bf1ae5.png "gist-enter.png")

投稿してみた例 コード片やMarkdownの試し書き
![gist-post-sample.png](https://qiita-image-store.s3.amazonaws.com/0/113398/d38fca81-3bba-aeaa-6ee6-c264a7cc1178.png "gist-post-sample.png")

検索してみた例 どれも1ファイル程度の小規模なサンプルだ
![gist-search-sample.png](https://qiita-image-store.s3.amazonaws.com/0/113398/25fc0377-00ec-15f8-271b-47c497bc3194.png "gist-search-sample.png")

## [gh-pages] 静的なファイルを公開する
ブランチを作るだけでGit管理しているものを公開する

### どう役に立つ？
+ PullRequestマージ前の開発中の画面をスマホやIEで評価出来る
+ 画像やHTMLモック等の評価もできる
+ 評価サーバへのデプロイや再起動が不要！
+ gistと違うのは、Git管理しているものをそのまま公開出来る点

### 使い方
1. `gh-pages`というブランチ名でpushする
+ `https://ユーザー名.github.io/リポジトリ名/ファイルパス`にアクセスする

ドロップダウンリストを書いてみた時のgh-pagesの例
![gh-pages-sample-pc.png](https://qiita-image-store.s3.amazonaws.com/0/113398/42b018fd-273b-4978-c354-790ee61386fd.png "gh-pages-sample-pc.png")

スマホで確認！<br>
<img src="https://qiita-image-store.s3.amazonaws.com/0/113398/cc7efc38-c77d-4cf1-bbdb-d683745a451e.png" width="40%">

### 注意
+ PHPとかは当然動かないのでその場合は別の方法を考える必要がある
 + 開発環境にVagrantを使っていれば、Vagrant Shareが一番手っ取り早いと思う
 + [Vagrant CloudのVagrant Shareを試してみたら凄すぎて鼻血出た](http://nekopunch.hatenablog.com/entry/2014/03/11/223250)
+ privateリポジトリでもgh-pagesはアクセス制限がかからないらしい

## よろしければ他記事もどうぞ
+ [もくじ](http://qiita.com/suzuki-hoge/items/a6e3bdc2cc1cf4e98ea1)
+ [ドキュメント管理](http://qiita.com/suzuki-hoge/items/1d6022cca177e2d96bb5)
+ [自動化](http://qiita.com/suzuki-hoge/items/159bfbcb883a9ce74157)
+ [課題管理](http://qiita.com/suzuki-hoge/items/3a568dff36fd981082ba)
+ [ZenHub](http://qiita.com/suzuki-hoge/items/f02b6752d8876ba6e114)
+ [満足していないこと](http://qiita.com/suzuki-hoge/items/1c0fa6a285aec080cd81)
GitHubを中心とした開発プロセス ドキュメント管理


[GitHubを中心とした開発プロセス](http://qiita.com/suzuki-hoge/items/a6e3bdc2cc1cf4e98ea1)のドキュメント管理編です

## [readme.md] ドキュメントを管理する
そのリポジトリに関するドキュメントはGitHubで管理してGitHubで閲覧したい

### どうして？
+ 共有ファイルサーバにExcelってスタイルはOSの制約があったりするからイヤだ
+ ソースとドキュメントは一元管理されるべきだと思うから
+ ドキュメントもPullRequest等でレビューするべきだよ
+ ドキュメントもバージョン管理したいよ

### 使い方
1. ルートのディレクトリに`README.md`を設置する
+ Markdownを書いてpushする

この例は`doc/`の様なディレクトリにある`.md`ファイルへのリンク集としてみた
![readme-sample.png](https://qiita-image-store.s3.amazonaws.com/0/113398/a03a9178-694e-7103-22d1-71734a6aadb4.png "readme-sample.png")

## [github wiki] Wikiを管理する
管理ドキュメントが増えてきたらドキュメントをWikiにしよう

### 特徴
+ GitHub上でお手軽に作成出来る
+ ブラウザで作ったWikiは`git clone`してローカルで加筆修正することも出来る
+ ページの一覧が勝手に表示される
+ サイドバーとフッターも書くことが出来る

### 使い方
1. Wikiのタブを選択し、`Create the first page`ボタンを押す
+ Markdownを書いてsubmitする

サイドバーとフッターはそれぞれ`_Sidebar.md`, `_Footer.md`と言うMarkdownを書けば勝手に表示してくれる

ぽちぽちしているだけでこんな感じのWikiができちゃう
![github-wiki-sample.png](https://qiita-image-store.s3.amazonaws.com/0/113398/f0d75f7e-99c0-16dc-9b28-14552bb6ef42.png "github-wiki-sample.png")

この例もreadmeの例と同じようにリンク集としてみた サイドバーがインデックスになっている
![wiki-sample.png](https://qiita-image-store.s3.amazonaws.com/0/113398/d6d83222-5ffd-c43d-028e-e498508a7a4b.png "wiki-sample.png")

## readmeとwikiの違い
一番違うのはREADME.mdは同一リポジトリだけど、Wikiは別リポジトリという点だと思う
両方管理するとしたら、例えばこんな観点で分けると良いんじゃあないかな

              | README.md | Wiki                  
:--           | :--       | :--                   
更新頻度      | 頻繁      | ほとんど無い          
PullRequestに | 含めたい  | 含めなくて良い        
管理者        | 開発者    | 例えばPOやディレクター
内容          | 開発者用  | システム利用者用      

## よろしければ他記事もどうぞ
+ [もくじ](http://qiita.com/suzuki-hoge/items/a6e3bdc2cc1cf4e98ea1)
+ [公開](http://qiita.com/suzuki-hoge/items/cd5170e7090407eb3e66)
+ [自動化](http://qiita.com/suzuki-hoge/items/159bfbcb883a9ce74157)
+ [課題管理](http://qiita.com/suzuki-hoge/items/3a568dff36fd981082ba)
+ [ZenHub](http://qiita.com/suzuki-hoge/items/f02b6752d8876ba6e114)
+ [満足していないこと](http://qiita.com/suzuki-hoge/items/1c0fa6a285aec080cd81)
yumのリポジトリをローカルに作成する


# 概要

## やりたいこと
インターネット接続ができない環境で、yumを使ってパッケージのダウンロードやインストールを行えるようにしたい。要は、ローカルにyumのリポジトリを作成したい。

ちなみに今回は、CentOS6系がインストールされただけの環境に、WordPress用に、PHP、Apache、MySQLなどをセットアップする必要があった。各ソースをあらかじめダウンロードして持ち込むことは許可されていたが、現場でダウンロードすることは不可能な状況だった。

## 行ったこと
OSのインストールディスクのイメージファイル（iso）をマウントし、yumコマンドで、Packageディレクトリを参照するように設定した。

## 環境
* CentOS 6.7

## 前提条件
* インターネット接続環境なし
* OSインストールディスクのイメージファイルは、`/media/iso/`に配置してある

# 実装
1. rootになる

	```
	su -
	```

1. OSのisoファイルをマウント

	```
	cd /media/
	mkdir centos
	mount -o loop -t iso9660 /media/iso/CentOS-6.7-x86_64-bin-DVD1.iso /media/centos
	```

1. repoファイルを作成

	```
	cd /etc/yum.repos.d/
	vi centos-media.repo
	```	

	以下の内容を記述
	
	```
	[centos-media]
	name=centos-media
	baseurl=file:///media/centos
	gpgcheck=0
	enabled=1
	```

1. 確認
	以下を実行して、パッケージ一覧が表示されれば、成功。

	```
	yum --disablerepo=\* --enablerepo=centos-media list
	```
	
	実際にパッケージをインストールする場合は、以下のような感じ。
	
	```
	yum --disablerepo=\* --enablerepo=centos-media install gcc make pcre pcre-devel wget
	```
GitHubを中心とした開発プロセス もくじ


# GitHubで全部済ませたい
新卒入社以降4年ほどアジャイル開発ってのをやってます。
今までチーム活動にはRedmineやJira,手書きの付箋&ホワイトボード等々を使ってきましたが、
最近GitHubを中心に考えたらいろんな悩みが解決したのでまとめてみようと思いました。

# ネタリスト
大分類それぞれが各記事へのリンクになっています

## [ドキュメント管理](http://qiita.com/suzuki-hoge/items/1d6022cca177e2d96bb5)
+ [readme.md] ドキュメントを管理する
+ [github wiki] Wikiを管理する

## [公開](http://qiita.com/suzuki-hoge/items/cd5170e7090407eb3e66)
+ [gist] 簡易コード片やMarkdownを公開する
+ [gh-pages] 静的なファイルを公開する

## [自動化](http://qiita.com/suzuki-hoge/items/159bfbcb883a9ce74157)
+ [github webhooks] GitHub上で特定のイベントがあった時にAPIを呼び出す
+ [githooks] Gitの特定のコマンド発行の前後でスクリプトを実行する
+ [jenkins github pull request builder] PullRequestがマージされる際にJenkinsでビルドする

## [課題管理](http://qiita.com/suzuki-hoge/items/3a568dff36fd981082ba)
+ [milestone] Issueの対応期限を明示する
+ [issue link, pull request link] IssueやPullRequestを紐付ける
+ [fixes commit] PullRequestのマージ時にIssueを自動的にクローズする
+ [git template for issue] Issue作成時の説明欄にテンプレートを設定する
+ [git template for pull request] PullRequest作成時の説明欄にテンプレートを設定する
+ [saved replies] レビューコメントのテンプレートを設定する
+ [search box] リポジトリ内の何かを検索する

## [ZenHub](http://qiita.com/suzuki-hoge/items/f02b6752d8876ba6e114)
+ [story] ストーリを作ろう
+ [estimate] 見積もろう
+ [board] かんばんを使おう
+ [chart] バーンダウンチャートを見よう
+ [epic] ストーリをまとめよう
+ [pipeline] ストーリの対応時期を管理しよう

## [満足していないこと](http://qiita.com/suzuki-hoge/items/1c0fa6a285aec080cd81)
+ 予定管理

# 極力GitHubでやるようにして良かったこと
ネタ数の多さからわかる様に、課題管理は他のツールより劇的に優れていると思いました。
Issueの相互リンクや自動クローズは他ツールに比べて（当然ながら）簡単にできますし、テンプレート機能はとても良いです。

他の良い点として、議論や情報が散らないというのが大きいです。

            | 従来                                                               | GitHub中心に変えた結果
:--         | :--                                                                | :--
議論        | メールやメッセンジャで行う                                         | スレッドを作る感覚でIssueを作成する
課題管理    | 課題管理表に追記する                                               | テンプレートを用いた明瞭なIssueにLabelやMilestoneを設定する
かんばん    | Jiraにチケットを作成する<br>メールや課題管理表の内容を転記する     | ZenHubのおかげで、先に作ったIssueがそのままストーリになる
レビュー    | PullRequestだが情報が少ない<br>またGitHubにはこの部分しか表れない  | 同じくテンプレートを用いたPullRequestに関連Issueを明記する<br>相互リンクなので関連Issue側からもPullRequestが参照出来る
仕様書      | ファイルサーバのエクセルを修正する<br>改版履歴の様な資料を更新する | Markdownで記述する<br>PullRequestに含めてレビューを受け版管理もする
課題管理    | 課題管理表を更新する                                               | fixes commitで自動的にIssueをCloseする
かんばん    | Jiraのチケットを更新する                                           | Issueなので、fixes commitで自動的に完了する
通知        | 各所に完了通知を出す                                               | 自動で完了通知を飛ばす

あとはMarkdown良いですね。
圧倒的に書きやすいし、`header-tag`,`a-tag`,`list`,`checkbox`,`syntax-highlight`くらいを知っていれば十分です。
[テーブルも簡単に書けちゃうしね](http://qiita.com/suzuki-hoge/items/0991dcc5e27c18346834) ﾍ(･_|

GitHubでの課題管理やZenHubを使い始めてまだ1月弱くらいしか経っていないので、さらに思うことがあれば追記したいと思います。
Windows7＆Eclipse 開発環境設定

【注】この記事はオープンα版です。

# 開発環境設定
Windows7 ＆ Eclipse(Pleiades) で新しい開発環境を構築するための手順


## OS 設定

1. フォント設定
    * [メイリオKe 導入](http://okrchicagob.blog4.fc2.com/blog-entry-169.html)


## Eclipse 設定

1. フォント
    * MeiryoKe_Console に設定 (2箇所)
        * 基本 > テキスト・フォント<br>
          フォントサイズは 9
        * 基本 > テキスト・エディター・ブロック選択フォント<br>
          フォントサイズは 10

----
思いついた順に更新する予定
Lambdaの挙動メモ　S3編

S3でどんな操作をしたらLambda関数が起動するのか試してみた。
主にブラウザベースで。
※不明なやつはわかったら更新するかも

#S3のイベントタイプ

Event Type

- Put
- Post
- Copy
- Complete Multipert Upload
- Object Created(All)
- Delete
- Delete marker created
- Object Removed(All)


##Put

S3にファイルアップロード

##Post

不明
AWS CLIからの操作かな？

##Copy


- 適当なファイル名から起動パターンのファイル名に変更
- 別のフォルダやバケットからファイルをコピー→貼り付け
- 別のフォルダやバケットからファイルの切り取り→貼り付け

コピーと切り取りはファイルの数だけLambda関数が起動する。


##Complete Multipert Upload

不明
AWS CLIからの操作かな？

##Object Created(All)

creat系の全ての操作

##Delete

- ファイルの削除
- 起動パターンのファイル名から適当なファイル名に変更
- ファイルの切り取り→別のフォルダやバケットに貼り付け

削除と切り取りはファイルの数だけLambda関数が起動する。


##Delete marker created

不明
AWS CLIからの操作かな？

##Object Removed(All)

Remove系の全ての操作
homebrewのupdateでエラー

`$brew update`
で以下のエラーが発生.
gitのバージョンが古いとのこと.
Permission denied
error: unable to unlink old 'bin/brew' (Permission denied)
Error: Failure while executing: git pull --quiet origin refs/heads/master:refs/remotes/origin/master

`$brew doctor`を実行してみる.
許可がないらしいがsudoで実行しても同じ結果に.
/usr/local/bin/brew: line 28: /usr/local/Library/brew.rb: Permission denied
/usr/local/bin/brew: line 28: exec: /usr/local/Library/brew.rb: cannot execute: Undefined error: 0

`$ git status`で確認すると失敗した.
fatal: Not a git repository (or any of the parent directories): .git

homebrewはここにあるらしい.
`$cd usr/local`
改めてgitの最新をおとしてくる.
`$sudo reset --hard origin/master`

これでOK!
`$git status`
On branch master
nothing to commit, working directory clean
CentOS 7のオフライン自動インストール用isoファイルを作る

# 概要
- タイトル通りの手順です。
- できあがったisoファイルを使うと操作ゼロ(＝ディスクブートしたあと、「完了しました！」の画面まで無操作)でOSをインストールできました。

# 資材
- CentOS-7-x86_64-Minimal-1511.iso

# 手順
## キックスタートファイルを用意する
1. 手動でCentOSをインストールする
1. `/root/anaconda_ks.cfg`というファイルを回収しておく

- RHEL7ではキックスタートファイルをGUIで編集するツール(Kickstart Configurator)の使用は推奨されなくなったとのことなので、CentOS 7でも調整するなら上記のファイルを直接書き換えると良いと思います。

##  CentOSのisoファイルを展開する

```
mount -r /root/CentOS-7-x86_64-Minimal-1511.iso /mnt
mkdir -p /tmp/centos7/ks
cp -rp /mnt/* /tmp/centos7
```

## キックスタートファイルを置く

```
ls -l /tmp/centos7/ks/anaconda-ks.cfg
```

## 自動インストールのメニューを追加する
1. ファイルを開く

    ```
vi /tmp/centos7/isolinux/isolinux.cfg
    ```

1. 既存のメニューの定義から`menu default`を削除する

1. 以下の内容を追記する

    ```
label centos7auto
  menu label ^Auto Install CentOS 7
  menu default
  kernel vmlinuz
  append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 inst.ks=cdrom:/ks/anaconda-ks.cfg
    ```

 * 同じファイル内の`label linux`の定義をベースにしました。
 *  `menu default`でこのメニュー項目を初期選択します。
 *  `inst.ks`でキックスタートファイルを読み込みます。
 * `inst.stage2`で"CentOS 7 x86_64"というラベルのデバイスを指定しているため、isoファイルを作成する時は同じラベル名を設定する必要があります。なお、代わりに`inst.stage2=cdrom`に書き換えても動きました。

## 自動インストール用のisoファイルを作成する

1. mkisofsを使えるようにする

    ```
yum -y install mkisofs
    ```

1. isoファイルを作成する

    ```
cd /tmp/centos7/
mkisofs -o ../CentOS-7-x86_64-Minimal-1511_Auto.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T -V "CentOS 7 x86_64" ./
    ```

# 参考
- Red Hat Enterprise Linux 7 インストールガイド
第23章 キックスタートを使ったインストール
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Installation_Guide/chap-kickstart-installations.html


- Red Hat Enterprise Linux 5 インストールガイド
2.4.2. インストールブート CD-ROM の作成
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/5/html/Installation_Guide/s2-steps-make-cd.html
iOSアプリに実行バイナリを同梱して実行できるのか試した

# やりたかったこと

Unix環境を想定したライブラリをiOSプログラミングで利用したい場合は静的ライブラリとして取り込むのが普通です。しかし、ライブラリ形式になっていないツールを輸入するのにわざわざライブラリ化するのは手間ですよね。

そこで、`*.ipa`ファイルの中にARM用の実行バイナリを入れて、iOSアプリ内から`posix_spawn(2)`で起動できるのかを確認してみました。アプリと同梱であればAppleのレギュレーション（アプリ外にある実行可能コードの実行禁止）に違反しないのでは？という期待もありました。

# 結論

jailbreakしていないiOS実機に実行バイナリを持ち込んで起動することはできない。`fork(2)`や`posix_spawn(2)`など別プロセスを起動するようなシステムコールはiOSサンドボックス内で利用できないと考えられる。

# テスト環境

Xcode 7.3.1 + iOS 9.3.2 （iPhone6s）

# 試したこと

輸入対象としてbannerコマンド（配布元：[Cedar Solutions - Utilities](http://software.cedar-solutions.com/utilities.html)）を使いました。標準出力にバナーを出すコマンドです。

```
$ banner foo

#######  #######  #######
#        #     #  #     #
#        #     #  #     #
#####    #     #  #     #
#        #     #  #     #
#        #     #  #     #
#        #######  #######
```

まずMach-Oの実行バイナリを作ります。「[Autotools管理のライブラリをiOS向けにスマートにビルドする方法](http://qiita.com/hnw/items/3ffdae9dcbdc6b18b6ba)」で紹介したように、`./configure; make`すればiOS/ARM用の実行バイナリを作ることができます。

今回はARM用だけでなくiOSシミュレータ用にx86用も作って`lipo`で合体させました。

```
$ file banner
banner: Mach-O universal binary with 5 architectures
banner (for architecture i386):	Mach-O executable i386
banner (for architecture x86_64):	Mach-O 64-bit executable x86_64
banner (for architecture armv7):	Mach-O executable arm
banner (for architecture armv7s):	Mach-O executable arm
banner (for architecture arm64):	Mach-O 64-bit executable
```

これをXcodeから「Add Files to "プロジェクト名"...」でプロジェクトに取り込みます。取り込んだファイルへのパスは次のように取得できます。

```swift
    let path = NSBundle.mainBundle().pathForResource("banner",ofType:"")
```

これを`posix_spawn(2)`で起動してみましょう。下記コード中の`CStringArray`は記事「[SwiftでCのchar **をうまく扱う](http://qiita.com/hnw/items/7bd333a7cd446c4d2a98)」で紹介したものです。

```swift
    let argv = CStringArray([path, "foo", nil])
    let status = posix_spawnp(nil, argv.pointers[0], nil, nil, argv.pointers, nil)
    if (status != 0) {
        print("posix_spawn: " + String.fromCString(strerror(status))! + " (status=\(Int(status)))")
    }
```

試してみると、iOSシミュレータ上とiOS実機とで異なるエラーが帰ってきました。

iOSシミュレータでは次のエラーが帰ってきます。

```
posix_spawn: Permission denied (status=13)
```

これは対象のパスに実行可能ビットが立っていないことによるエラーです。実行バイナリをキャッシュディレクトリ以下にコピーすれば`chmod(2)`で実行可能ビットが立てられるので、無事バイナリを起動できるようになります。

一方、iOS実機では下記エラーが帰ってきます。

```
posix_spawn: Operation not permitted (status=1)
```

このエラーは手元の`posix_spawn(2)`のマニュアルに載っていませんので、別のレイヤでのエラーだと予想できます。おそらくiOSのサンドボックス環境でかかっている制約でしょうから、ちょっとやそっとの工夫じゃ動きそうにないですね。

# おわりに

というわけで、UnixツールをiOSに移植したい場合は静的ライブラリ化するしかない、という当たり前の結論になりました。実験後に検索してみたところ、`fork(2)`がiOSでは`Operation not permitted`を返すという話題が見つかりました。自分の検索力が低かったということで残念です。


# 参考URL

- [Running unsigned code in an iOS app to test jailbreak - Stack Overflow](http://stackoverflow.com/questions/12213239/running-unsigned-code-in-an-ios-app-to-test-jailbreak)
- [app store - Will fork() in iOS app likely be rejected by Apple's vetting process? - Stack Overflow](http://stackoverflow.com/questions/15893849/will-fork-in-ios-app-likely-be-rejected-by-apples-vetting-process)
作図ツールについて

# はじめに

私はメインで Macbook pro 13inch retina を使っていますが，その他個人ではLinux Mint，会社ではWindows7デスクトップ機を使っています．

作図ツールに関しては，会社の人たちは，ほとんど全員がExcelを使っていますが，私は個人的にはExcelは好きではないため，Python3 matplotlib もしくはGMT(Generic Mapping Tools)を使っています．またごくたまにgnuplotを使います．
 
この記事では，これらのツールで作成した図の事例と，自分なりの感想を紹介してみたいと思います．

# matplotlib
Pythonの作図ツール．私はPython3と組み合わせて使っています．
使い方は，gnuplotに似ているような気がします．

２次元グラフを作成する上では特に困ることもなく，各種計算から作図まで１ファイルで完結できるところが気に入っています．テキストはTeX形式の入力も受け付けてくれます．最近はこれを使うことも増えてきました．
また日本語表示を含むグラフ作成を行うには，これです．

通常はpng出力で使っています．
下の図はFortranでの計算結果をmatplotlibで図化し，png出力したものです．

<img src="https://qiita-image-store.s3.amazonaws.com/0/129300/d9ca0a85-533a-618e-650e-1550c8dca56b.png" width=70%>

# GMT
最もよく使うツール．Mac，LinuxではShellScriptにコマンドを書いて使います．Windowsではコマンドプロンプトでbatchファイルにコマンドを書いて使います．

最初はとっつきにくい感じがしましたが，慣れてくれば自由度が高く，とても便利に使えます．２次元グラフ，３次元グラフ，説明図など色々に使えます．地図情報を持っているので，地図にデータを表示したい場合は最高です．

通常の使い方は，FortranやPythonで計算した結果をファイルに落とし，これをGMTで読み込んで使っています．データ受け渡しの補助にawkを用いることにより，複雑な構成のファイルからも自由にデータを読み込めます．

出力フォーマットは，psあるいはepsのみですが，ImageMagickによりフォーマット変換しており，特に不便は感じません．

下の図は，報告書などに使う説明図の事例です．こういう絵を描くのはGMTが一番いいと思います．eps出力をImagemagickでpngに変換しています．

<img src="https://qiita-image-store.s3.amazonaws.com/0/129300/7dc17a79-dfce-9b5d-f94a-15a2307bb579.png" width=50%>

下の２つの画像はMandelbrot集合の作図事例です．Fortranでの計算結果をGMTで描画しました．GMTからのeps画像をImageMagickでjpegに変換しています．

<table><tr><td>
<img src="https://qiita-image-store.s3.amazonaws.com/0/129300/250df567-4fb7-f72d-1266-3c78b732e135.jpeg" width=100%>
</td><td>
<img src="https://qiita-image-store.s3.amazonaws.com/0/129300/5a4dd42c-87d9-c4c9-26c9-a76a79a24250.jpeg" width=80%>
</td></tr></table>

# gnuplot
最近はGMTとmatplotlib主体で，gnuplotを使う機会は減ってきました．でも，数式の３次元プロットはこれに限るという感じです．
出力フォーマットは各種に対応していますが，個人的にはeps出力し，ImageMagickでpngに変換する方法が綺麗なので気に入っています．

<img src="https://qiita-image-store.s3.amazonaws.com/0/129300/4c81108b-2b8e-92d0-270b-b8d5e9f70679.png" width=50%>

## リンク

+ matplotlib [http://matplotlib.org/](http://matplotlib.org/)
+ GMT(Generic Mapping Tools) [http://gmt.soest.hawaii.edu/](http://gmt.soest.hawaii.edu/)
+ gnuplot [http://www.gnuplot.info/](http://www.gnuplot.info/)
+ ImageMagick [http://www.imagemagick.org/script/index.php](http://www.imagemagick.org/script/index.php)

以上
Low Memory Available

Arduinoで遊んでいたら以下のようなメッセージが

```
Low memory available, stability problems may occur.
```

ちょっと前のコンソールを見てみると

```
スケッチが プログラムストレージ領域の --バイト (--%) を使用しています。最大は --バイト です。
グローバル変数が --バイト (82%) の 動的メモリを使用しており、ローカル変数に -- バイトが残っています。最高は 2,048バイトです。
```

なんかものすごいグローバル変数を使っていたみたいです。

グローバル変数の一部をconstにしたらメッセージがなくなりました。
ES2016(ES7)で実装されたべき乗演算子(Exponentiation Operator)の挙動について

ES2016で実装された `**` だが、
単項マイナス演算子が左辺にある場合、SyntaxErrorとなる。

```
2 ** 2 // 4
2 ** -2 // 0.25
-2 ** 2 // Uncaught SyntaxError: Unexpected token **
```

ESにおける演算子の優先順位が単項マイナス→べき乗で、
他の多くの言語(べき乗→単項マイナス)で得られる結果を期待すると混乱が起こるため、
この実装は理にかなっているように思う。

```
(-2) ** 2 // 4 単項マイナス→べき乗の順だとこうなるが…
-(2 ** 2) // -4 多くの言語ではこちらの実装になっている
```

[演算子の優先順位 - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)
[Exponentiation operator precedence](https://esdiscuss.org/topic/exponentiation-operator-precedence)
github の markdown

1. [github は Jekyll を使ってる](https://github.com/blog/2100-github-pages-now-faster-and-simpler-with-jekyll-3-0)
    1. [Jekyll](https://jekyllrb.com/) はファイルベースの CMS
        1. markdown エンジンは [kramdown](http://kramdown.gettalong.org/)
    2. Ruby で開発されている
    3. 2016-05-01 から redmine で使われている Textile は使えなくなった
        1. と書いてあるが 2016-07-06 時点で github wiki 編集ページで Textile が選択肢にあるね...

            ![Untitled.png](https://qiita-image-store.s3.amazonaws.com/0/131106/56695a82-ebf7-e22a-54fc-0b125ac09816.png)
Cloud9でEC-CUBE3をサクッと動かす

#はじめに
## この記事のゴール
Cloud9にEC-CUBE 3.0をインストールして、動作確認ができるようになること。
※Cloud9は無料から利用できるクラウド開発環境です

## ご注意
この記事では、サクッと動かすことを目的にしているため、DBとしてSQLiteを使用。
（SQLiteはあくまで開発者向け）

# Cloud9へのEC-CUBE 3.0導入手順
## Cloud9にワークスペースを作成する
Cloud9のダッシュボードから新しいワークスペースを作成。
`template`は、PHPを選択。
`Clone from Git or Mercurial URL`にはEC-CUBEのgitアドレスを入力。
（https://github.com/EC-CUBE/ec-cube.git）
![image](https://qiita-image-store.s3.amazonaws.com/0/113212/242b6b1a-48c6-f56a-c52d-f7eb8853b489.png)

## 依存ライブラリのインストール
Composerを利用して、必要なライブラリをインストールする。
Cloud9のターミナルで下記のコマンドを実行。(完了するまで少々時間がかかる)

```sh
~/workspace (master) $ composer install
```

#ルートディレクトリの変更
URLに`/html/`を付加しなくてもアクセスできるように、ルートディレクトリを変更。
（URLにhtmlが含まれていても気にしないなら、この手順を無視してもらってOK）

```sh
$ sudo vi /etc/apache2/sites-enabled/001-cloud9.conf
```

```xml
<VirtualHost *:8080>
    DocumentRoot /home/ubuntu/workspace
      ↓
    DocumentRoot /home/ubuntu/workspace/html
```

# EC-CUBEインストール
Cloud9画面上部の「Run Project」ボタンを押下。
実行するとURLが表示されるのでアクセス。
![image](https://qiita-image-store.s3.amazonaws.com/0/113212/6bd0779b-eec0-eeab-066a-953b702017ca.png)

EC-CUBEのインストール画面が表示されるので、手順にしたがってインストールを進める。
![image](https://qiita-image-store.s3.amazonaws.com/0/113212/c69f7ee7-0cd8-db30-442f-f71dd5f3a06c.png)

データベースの設定では「SQLite(開発者用)」を選択。
![image](https://qiita-image-store.s3.amazonaws.com/0/113212/f7f7e086-45d1-7e26-2168-4d11c5a64195.png)

これだけでEC-CUBEのインストール完了。
![image](https://qiita-image-store.s3.amazonaws.com/0/113212/fceee987-2844-2e98-d044-e75336baba6c.png)

※Cloud9でちゃんと動くか、細かい動作検証は行っていないのであしからずです。

# おわりに
Cloud9は、EC-CUBE 3.0をインストールするのに必要なライブラリやツールが最初から入っているので、とてもスムーズに導入できました。みなさんも試していただけたらと思います。
User.has_perm(user, perm, obj=None)



## モデルクラスに パーミッションチェッカーを実装

~~~py
class Event(models.Model):

    def has_perm(self, user, perm):
        # たとえば...
        if self.org.has_perm(user, perm):
            return True

        if perm == "events.browse_event":
            if self.is_private:
                return user.has_perm(perm)
            else:
                return True
~~~

## backends でオブジェクトパーミッションチェッカーを起動

- app/backends.py

~~~py
class PermissionBackend(object):
    def has_perm(self, user_obj, perm, obj=None):
        '''
        :param user_obj: User instance
        :param perm: permission code string (`auth.change_auth_user`)
        :param obj: Model instance (optional)
        '''
        res = obj and hasattr(obj, 'has_perm') and obj.has_perm(user_obj, perm)
        return res or False

    def authenticate(self, username=None, password=None):
        # required for Permission Backends
        pass
~~~

- app/settings.py

~~~py
from django.conf import global_settings                                          

AUTHENTICATION_BACKENDS = global_settings.AUTHENTICATION_BACKENDS + [            
'app.backends.PermissionBackend',                                           
]  
~~~


## views.py

~~~py
from django.http import HttpResponseForbidden

def event_edit(request, id):
    event = models.Event.objects.get(id=id)
    if not request.user.has_perm('events.change_event', event):
          return HttpResponseForbidden()
    ...
~~~    

## テンプレートフィルタ: `has_perm`

~~~py
@register.filter
def tup(src, arg):
    if isinstance(src, tuple):
        return src + (arg, )
    return (src, arg, )


@register.filter
def has_perm((obj, user), perm):
    return user.has_perm(perm, obj)
~~~

- detail.html  

~~~py
{% if event|tup:user|has_perm:'events.change_event' %}
  <a href="{% url 'events_event_edit' id=event.id %}">{% trans 'Edit' %}</a>
{% %}
~~~

## action 名からモデルへのパーミッションコードを返す

~~~py
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth import get_permission_codename

class BaseModel(object):

    @classmethod
    def perm_name(cls, action, model=None):
        '''指定されたアクションに対するパーミッション名'''
        model = model or cls
        return "{}.{}".format(
            model._meta.app_label,
            get_permission_codename(action, model._meta))

~~~

## default_permissions

~~~py
class Event(models.Model):
    ....
    class Meta:
        default_permissions = ('add', 'change', 'delete', 'browse')
~~~

## テンプレートフィルタ: `can`

~~~py
@register.filter                                                                 
def can((obj, user), action):                                                    
    perm = models.BaseModel.perm_name(action, model=obj)                         
    return user.has_perm(perm, obj)    
~~~

~~~py
{% if event|tup:user|can:'change' %}
  <a href="{% url 'events_event_edit' id=event.id %}">{% trans 'Edit' %}</a>
{% %}
~~~
ブラウザで markdown

ブラウザで markdown 記述＆プレビューができるサイトを試してみた。

1. [dillinger](http://dillinger.io/)
    1. 最低限の機能
    2. github と連携してる（未確認）
    3. スクロール同期がデフォルトで OFF
        1. Profile の Scroll Sync で ON にできる
1. [stackedit](https://stackedit.io/)
    1. ツールバーがある
        1. Code sample ボタンは ``` で囲まれるのではなく、行頭タブが挿入される方式
1. qiita
    1. dillinger より github に似てる
    2. markdown を変更したのにプレビューに反映されないことがあった（頻発はしてない）

github wiki でリアルタイムプレビューできれば良いのに・・・

# 番号付きリスト内の改行2個
以下の markdown をそれぞれで試してみた

```
1. a
1. b
1. c


1. d
```
1. 改行2個

## github
1 個のリストになり c, d の前に行間が追加される:

ブラウザ表示:
![github.png](https://qiita-image-store.s3.amazonaws.com/0/131106/630084a1-78f6-85e3-92b4-1824e9d28764.png)

HTML:

```
<ol>
<li>a</li>
<li>b</li>
<li><p>c</p></li>
<li><p>d</p></li>
</ol>
```

なんでこんな風になるの・・・

## dillinger
別のリストになる:
![dillinger.png](https://qiita-image-store.s3.amazonaws.com/0/131106/8cd29f81-30cf-b98c-272f-1ee658c8d600.png)

この方式が好き。

## stackedit
![stackedit.png](https://qiita-image-store.s3.amazonaws.com/0/131106/5cd0d1f3-0c95-48a5-869f-60ffb682b86e.png)

1. HTML は github と一緒だが行間がアイテムの前ではなく後ろ？

## qiita
![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/131106/67d4fcff-609f-f6fd-2709-21e1544ee67a.png)

1. HTML は github と一緒だが行間が目立たない

# 文章の次行にコードブロック
markdown:

<pre>
文章
```
print("Hello")
println(" 世界")
```
</pre>

# github

![guthub.png](https://qiita-image-store.s3.amazonaws.com/0/131106/4f38c0c9-e686-6fc4-dc77-cd504a60b06f.png)

# dillinger

![Untitled.png](https://qiita-image-store.s3.amazonaws.com/0/131106/dab0fe7d-3e33-b7f2-0b35-8a1b98a97de0.png)

# stackedit

![Untitled.png](https://qiita-image-store.s3.amazonaws.com/0/131106/df0ad71b-f4f6-dab0-95b2-1e80891ba8a5.png)

# qiita

![Untitled.png](https://qiita-image-store.s3.amazonaws.com/0/131106/aac05f28-41f6-0dcb-7629-ba7005025693.png)

文章とコードブロックの間に改行を入れると github みたいになる:

![Untitled.png](https://qiita-image-store.s3.amazonaws.com/0/131106/580761d7-d474-69c5-8b59-fabe9e91cd20.png)
pod setupで失敗しました。

pod setupが終わらなくて困りました＼(^o^)／

# pod setupで失敗

```
pod setup
Setting up CocoaPods master repo
[!] /usr/local/git/bin/git clone https://github.com/CocoaPods/Specs.git master

Cloning into 'master'...
error: RPC failed; result=56, HTTP code = 200
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
```


# デバッグ情報を表示する
`--verbose` でデバッグ情報を表示します。

```
pod setup --verbose

Setting up CocoaPods master repo

Cloning spec repo `master` from `https://github.com/CocoaPods/Specs.git` (branch `master`)
  $ /usr/local/git/bin/git clone https://github.com/CocoaPods/Specs.git master
  Cloning into 'master'...
  Checking out files: 100% (93473/93473), done.
  $ /usr/local/git/bin/git checkout master
  Already on 'master'
  Your branch is up-to-date with 'origin/master'.
Setup completed
```
こんどはうまくいってしまいました＼(^o^)／

# 参考
なんかネットワークが遅いらしい
https://github.com/CocoaPods/CocoaPods/issues/4460
以下によるとgitの問題みたいなので次回失敗したらこのやり方を試したい
http://every-studio.com/wordpress/2014/12/10/git%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%9F%E3%82%89rpc-failed-result18-http-code-200%E3%81%A3%E3%81%A6%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E5%87%BA%E3%81%9F%E6%99%82%E3%81%AE%E5%AF%BE%E5%BF%9C/
溜まったアーカイブログを削除するタイミング

PostgreSQLには、PITRするためにWALファイルをアーカイブする機能があります。
しかし、アーカイブされたWALファイルはユーザが削除しない限り、溜まり続けるため、不要になったアーカイブWALは適宜削除する必要があります。

今回はその削除の判断の仕方と削除手順について書きます。

# 前提条件

- PostgreSQL 9.5.2
- CentOS 7.2

# 削除対象となるアーカイブWALとは

アーカイブされたWALファイルは、取得していたベースバックと組み合わせたPITRに使用します。
つまり、最も古いベースバックアップよりも古いアーカイブWALは使うことはないため、それらのファイルが削除対象となります。

# 削除対象となるアーカイブWALの確認方法

とても簡単です。
ベースバックアップ取得時に作成されるbackup_labelのSTART WAL LOCATIONで確認することができます。

以下の例の場合、対象のベースバックアップファイルが必要なWALファイルは「file 000000010000000000000036」とそれ以降のWALファイルということがわかります。つまり、000000010000000000000035、000000010000000000000034～でアーカイブWALは削除対象となります。

```
$ cat ＜取得したベースバックアップファイル＞/backup_label
START WAL LOCATION: 0/36000028 (file 000000010000000000000036)
CHECKPOINT LOCATION: 0/36000060
BACKUP METHOD: streamed
BACKUP FROM: master
START TIME: 2016-06-26 09:15:44 JST
LABEL: pg_basebackup base backup
```

※pg_basebackupで取得したベースバックアップの場合、上記のようなbackup_labelが作成されます。

# 補足1：アーカイブ機能を有効にする設定

そもそもの話として、WALファイルをアーカイブするには以下の設定が必要になります。

```postgresql.comf
wal_level = archive
archive_mode = on
archive_command = '/bin/cp %p /home/kazu/local/pg952/arch/%f'
```

※PITRするには、wal_levelをarchive、hot_standbyにする必要があります。

※注意
2016年9月にリリースされたPostgreSQL9.6を使用する場合、archiveとhot_standbyが新しい設定値「replica」に統合されました。

# 補足2：pg_archivecleanupによるアーカイブWALの削除

アーカイブWALを削除するためのコマンドがPostgreSQLでは提供されています。
http://www.postgresql.jp/document/9.5/html/pgarchivecleanup.html

~~とは言っても、結局は対象のアーカイブWALを指定する必要があるので、手で消すのとそんなに変わらないような気もします。~~


追記（2020/03/31）
すみません。内容に不備があったので、訂正します。

pg_archivecleanupは引数にバックアップ履歴ファイルを使用することで、対象のバックアップに不要なアーカイブWALを自動で抽出して処理をすることができます。

ですので、手動でやるよりは、このユーティリティツールを使用するほうが安全と言えます。

以下、実行例です。

```
$ pg_archivecleanup -n ~/local/11/arc 000000010000000000000005.000000D0.backup 
/var/lib/pgsql/local/11/arc/000000010000000000000001
/var/lib/pgsql/local/11/arc/000000010000000000000002
/var/lib/pgsql/local/11/arc/000000010000000000000003
/var/lib/pgsql/local/11/arc/000000010000000000000004
```

`-n`はドライランオプションで、削除対象となるアーカイブWALを表示することができます。

第2引数にはアーカイブディレクトリを指定し、第2引数はバックアップ履歴ファイルの名前を指定しています。（このとき、バックアップ履歴ファイルは第1引数のディレクトリ内のものが選択されることに注意してください。）
SQLAlchemy で Update するには？

今回は **SQLAlchemy** で **Update** のやり方を書きます。

## 動作環境
- Mac OS X 10.11.5
- Python 3.5.1
- MySQL Ver 14.14 Distrib 5.7.11, for osx10.11 (x86_64) using  EditLine wrapper
- SQLAlchemy 1.1.0
- PyMySQL 0.7.4

## サンプルコード
id==2(name="杉野 誠一", kana='すぎの せいいち') のレコードを更新します。

```py3:sqlalchemy_update.py
# -*- coding:utf-8 -*-
import sqlalchemy
import sqlalchemy.orm
import sqlalchemy.ext.declarative

Base = sqlalchemy.ext.declarative.declarative_base()

class Student(Base):
    __tablename__ = 'students'
    id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)
    name = sqlalchemy.Column(sqlalchemy.String(20))
    kana = sqlalchemy.Column(sqlalchemy.String(40))

def main():
    url = 'mysql+pymysql://root:@localhost/test_db?charset=utf8'

    engine = sqlalchemy.create_engine(url, echo=True)

    # セッションを作成
    Session = sqlalchemy.orm.sessionmaker(bind=engine)
    session = Session()

    # 全データ削除
    session.query(Student).delete()

    # 複数データを一括登録
    session.add_all([
        Student(id=1, name='石坂 優', kana='いしざか ゆう'),
        Student(id=2, name='杉野 誠一', kana='すぎの せいいち'),
        Student(id=3, name='桑田 結子', kana='くわた ゆうこ'),
        Student(id=4, name='栗原 愛', kana='くりはら あい'),
        ])

    # id==2 のデータを更新
    student = session.query(Student).filter(Student.id==2).first()
    student.name = '佐久間 仁'
    student.kana = 'さくま じん'

    # テーブルの全データを出力
    print_all_students(session)

    # データを確定
    session.commit()

# テーブルの全データを出力する関数
def print_all_students(session):
    students = session.query(Student).all()
    for student in students:
        print('%d, %s %s' % (student.id, student.name, student.kana))

if __name__ == '__main__':
    main()
```

## まとめ
Update に関しては特筆すべきことはありません。
あえて言うなら update メソッドはなくて、Session から取得したオブジェクトを直接操作するということぐらいでしょうか。

わざわざ記事にすることもなかったかもしれませんが、Delete と Alter について書いたので、おまけとして残しておきます。

[SQLAlchemy で Delete するには？](http://qiita.com/nskydiving/items/eedd5cea88b5afdbfc49)
[SQLAlchemy で Alter するには？](http://qiita.com/nskydiving/items/a9ebfb3a7566aa535e52)
眼鏡っ娘分類システムの分類精度向上を試みた


# Background
 - 前回、[ググッて見つけたサイトを参考にSVMをやってみた](http://qiita.com/nrhk/items/264b31e27d7c4ea0fa96)
 - そのサイトは眼鏡をかけた人（眼鏡っ娘）分類システムだった
 - 前回やったときは精度74%くらいだった
 - もっと精度を上げてみようと思った

# Summary

精度に影響しそうな条件を変えて、精度を比較してみた。

 - 使った画像　（Webで集めた写りがバラバラの画像 or 手に入れた履歴書みたいに写り方が揃っている画像）
 - 素性データの作り方　（元々の方法 or  ちょっと変えてみた）
 - カーネルの選び方　（Radius,  Linear or Sigmoid)

結論

影響度の順番は、　「　画像の選び方  >>  カーネルの選び方  >  素性データの作り方　」

 - 元々の画像がある程度そろってないと、うまくいかないよね。
 - カーネルは、よくいわれているようにはじめはRadius一択でOK。
 - 今回素性データの作り方はあまり影響がなかった。でも、もっと影響があるはず。今回変えてみた方法がしょぼかったと思いたい。

つまり、「履歴書写真で眼鏡っ娘分類システム」は、精度90%
普通の画像でやるいい方法ないかなぁ、、、

# Details

### 方法

これ
1. [Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築](http://www.slideshare.net/tojimat/tokyor-41?next_slideshow=1)
1. [ググったサイトを見ながら、RでSVMをやってみた。眼鏡の人とそれ以外の分類] (http://qiita.com/nrhk/items/264b31e27d7c4ea0fa96)

### 結果
|No.| 画像| 素性 |カーネル| 精度(%) |
|---|-----|-----|--------|-----|
|1|Webで集めた画像 約350枚|オリジナル素性|Radius Basis|76.2|
|2|Webで集めた画像 約350枚|オリジナル素性|Linear      |71.8|
|3|Webで集めた画像 約350枚|オリジナル素性|Sigmoid     |73.6|
|4|Webで集めた画像 約350枚|ちょっと変えてみた素性|Radius Basis|75.7|
|5|Webで集めた画像 約350枚|ちょっと変えてみた素性|Linear      |72.3|
|6|Webで集めた画像 約350枚|ちょっと変えてみた素性|Sigmoid     |74.2|
|7|履歴書みたいな画像 約600枚|オリジナル素性|Radius Basis|89.8|
|8|履歴書みたいな画像 約600枚|オリジナル素性|Linear      |88.2|
|9|履歴書みたいな画像 約600枚|オリジナル素性|Sigmoid     |88.2|
|10|履歴書みたいな画像 約600枚|ちょっと変えてみた素性|Radius Basis|87.9|
|11|履歴書みたいな画像 約600枚|ちょっと変えてみた素性|Linear      |86.4|
|12|履歴書みたいな画像 約600枚|ちょっと変えてみた素性|Sigmoid     |87.3|

### 分散分析

|条件                      |            1            |                2                 |    3   |
|:-----------------------:|:-----------------------: |:--------------------------------:|:------:|
| A (使った画像）          |Webで拾ってきた画像 約350枚 | 手に入れた履歴書みたいな画像 約600枚| -      |
| B（素性ベクトルの作り方） |元々の方法                 |ちょっと変えてみた方法               | -     |
| C（カーネルの種類）      |Radius basis              | Linear                            |Sigmoid|

![factorial effects.png](https://qiita-image-store.s3.amazonaws.com/0/128397/59706336-4d46-4f75-41a5-742d20391d77.png)

 - 条件A 画像の選び方は大きく精度を左右する 
 - 条件B 素性の作り方はあまり変わらない
 - 条件C カーネルの選び方はあまり変わらない

# References
1. http://qiita.com/nrhk/items/264b31e27d7c4ea0fa96
1. http://monge.tec.fukuoka-u.ac.jp/r_analysis/test_anova32.html
Pandasのメモ


Pnadasの初歩的なメモ。Pandasにはいろいろな機能があるので随時メモ。

##データ構造

###Series

普通のリストの発展版。indexが付いたリスト。

```python
#coding:utf-8

import pandas as pd

#定義
s = pd.Series([1,2,3],index=['a','b','c'])

#要素へのアクセス
print s.a

#各種操作
print s.index;
print s.mean()
print s.sum()
print s.cumsum()
print s.tolist()
print s.to_dict()
```

###DataFrame

メモリ中のExcelみたいなもの。行、列で各種処理ができる。

```python
#coding:utf-8

import pandas as pd

#定義
df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],index=['r1','r2','r3'],columns=['c1','c2','c3'])

#とりあえず内容表示
print df

#要素へのアクセス
print df.ix['r1','c1']

#各種操作（列の合計）
print df.ix[:,'c1'].sum()
```

##その他

随時書き足します。

###datetime処理

###plot
Xcode 8 Bata1 で Swift + Objective-C が動かないぞ！？？

覚書！

Xcode8 Bata1 で Swift3.0 の対応を始めて、何不十なくサクサクおわり

さー実機テストだ！！！
...
...
...

うごかない...

`dyld: Library not loaded: @rpath/libswiftCore.dylib`
こんな感じの変なエラーでてる...

という方は Xcode Build Settings の
`Always Embed Swift Standard Libraries`
が`NO`になっているかもしれないです。

もし`NO`になっているのなら`YES`にすると実機でも動くかも！？
Xcode8 ではデフォルト `NO` ぽい。

むしろ、シュミレーターでもエラーになってほしい（苦笑
気圧計 (v0.8) > WiFi接続変更 / loop()が毎秒となるように変更 / csv処理用の変更

```txt:動作環境
ESP-WROOM-02 + ユニバーサル基板実装
気圧計: MPL115A2
```

気圧計　http://qiita.com/7of9/items/09272fcfb56bd479c679
udpLogger http://qiita.com/7of9/items/6dc086b17fc43715b48b


## 気圧計 (v0.8)

[v0.8 @ github](https://github.com/yasokada/esp8266_160528_MPL115A2/releases/tag/v0.8)

以下の変更をした

- WiFi接続時に無限ループをやめて10回のリトライとした
- WiFi接続失敗時にWiFi.disconnect()処理をするようにした
- loop()処理が1秒より長くなっていたため「ほぼ」1秒になるようにdelay()を変更した
- SD保存したファイルをcsvとして扱いやすくするようにセパレータ","を追加

http://qiita.com/7of9/items/fe7dcdc846cd3b178632#_reference-be18656e296e2ce1f05f
において測定した時のデータ飛びは上記のloop()処理が毎秒となっていなかったためだった。

気圧計としてはとりあえず完成かと思う。高度計としては誤差が問題となる。
Scala の Try が便利だったので Java で実装してみようとする

# 概要
Scala に Try という便利なものがあると知りました。Java で似たようなものができないかを試してみました。

## scala.util.Try
例外が発生しうる処理をラップして Pattern match できる仕組みです。2.10.0 以降で使えるそうです。

```scala:Try
Try {
  String.format("http://%s/robots.txt", new URL(urlStr).getHost)
} match {
  case Success(url) => Some(url)
  case _            => None
}
```

この例では new URL(urlStr) のところで不正なURL(例：プロトコルが違う)が渡されると MalformedURLException が発生します。例外が発生した場合は case _ に入って None が返されます。例外が発生しなかった場合は Success の case で処理されます。

----
# Scala の Try を Java で実装してみようとする

## Java のソースコード
例外が発生しうる処理を action で、例外発生時に実施する処理を onFail で、それぞれ渡すことができるようにしてあります。

```java:Try.java
import java.util.concurrent.Callable;

public class Try {

    private Runnable onFail;
    private boolean  suppressError;

    public Try suppressError(final boolean suppressError) {
        this.suppressError = suppressError;
        return this;
    }

    public Try onFailure(final Runnable onFail) {
        this.onFail = onFail != null ? onFail : () -> {};
        return this;
    }

    public <T> T action(final Callable<T> action) {
        try {
            return action.call();
        } catch(final Exception e) {
            if (!suppressError) {
                e.printStackTrace();
            }
            onFail.run();
        }
        return null;
    }
}
```

## 使い方

```java:client_side
public static void main(final String[] args) {
    System.out.println(extractedHost("http://www.yahoo.co.jp/index.html"));// 成功
    System.out.println(extractedHost("htto://www.yahoo.co.jp/index.html"));// 例外発生
}

private static String extractedHost(final String url) {
    return new Try()
                .onFailure(() -> System.out.println("fail"))
                .action(   () -> new URL(url).getHost());
}
```

### やっていること
1. Try オブジェクトを初期化
2. onFailure で例外発生時に実施する処理("fail" と println する)を渡す
3. action で試行する処理(String オブジェクト url を URL オブジェクトに変換して、host 部を抜き出す)を渡す

### 実行結果

```:実行結果
www.yahoo.co.jp
java.net.MalformedURLException: unknown protocol: htto
	at java.net.URL.<init>(URL.java:600)
	at java.net.URL.<init>(URL.java:490)
	at java.net.URL.<init>(URL.java:439)
	at jp.toastkid.libs.Try.lambda$2(Try.java:37)
	at jp.toastkid.libs.Try.action(Try.java:18)
	at jp.toastkid.libs.Try.extractedHost(Try.java:37)
	at jp.toastkid.libs.Try.main(Try.java:30)
fail
null
```

## 感想
正直、あまり便利な感じがしませんでした……Optional と組み合わせて使わないと意味もなさそうな気がします。

----
# 参考
1. [scala.util.Tryを使いこなそう](http://qiita.com/yharada/items/15f88e5bbf44833b5ed7)
2. [Scalaで例外処理](https://monolog.linkode.co.jp/articles/kotoh/Scala%E3%81%A7%E4%BE%8B%E5%A4%96%E5%87%A6%E7%90%86)
Sketch上でAPIを叩いてデザインに内容を表示する方法

[テクニカルクリエイター.com](http://technical-creator.com/sketch-craft-api-json-2/)で掲載している内容ですが、Qiitaぽいなーと思ってこちらにも書いてみました。

SketchとPhotoshopのプラグイン「Craft」のDATAという機能がバージョンアップし、APIを叩いてJSONをパースしてデザイン上に表示するということができるようになったようなので試してみました。

## 利用するAPI

今回試したのはグルメサイト「ぐるなび」のレストラン検索APIです。店舗名や店舗の画像をはじめ、ぐるなびに掲載されている情報をAPIで呼び出して自分のWebサービスやアプリ上で使うことができます。アカウント発行が必要なので、詳しくは開発者向けページを見ながら試してみてください。
[ぐるなび Web Service for Developers](http://api.gnavi.co.jp/api/manual/restsearch/)

## Craftのインストール

InVisionが提供するSketchプラグイン「Craft」をインストールしてください。ランディングページからメールアドレスを打ち込むとインストール用のURLが送られてきます。
[Craft by InVision LABS](https://www.invisionapp.com/craft)

## Sketch・Craft・ぐるなびAPIを使ってレストラン紹介アプリを作る

まずはこんな感じでレストランの一覧と詳細のスクリーンを作りました。
<img src="http://technical-creator.com/wp-content/uploads/2016/06/5b759a709786da7c37870b6e1dedad77.png" alt="レストラン一覧と詳細" width="2032" height="1089" class="alignnone size-full wp-image-960 img-responsive" />

レストラン一覧の画像をまとめて選択します。
<img src="http://technical-creator.com/wp-content/uploads/2016/06/8f20b866a03dc5773f5cd1da2d80cbdd.png" alt="画像をまとめて選択" width="2032" height="1089" class="alignnone size-full wp-image-961 img-responsive" />

Sketch内に表示されているCraftのボタンから一番上のDATAを選択し、タブをJSONに切り替えます。URL入力欄があるのでここのぐるなびAPIのURLを入力します。
<img src="http://technical-creator.com/wp-content/uploads/2016/06/e6705e45b47791eebbddbc40d1fb2171.png" alt="ぐるなびAPIを入力する" width="2032" height="1089" class="alignnone size-full wp-image-962 img-responsive" />

Importボタンを押すとAPIを叩いた結果のJSONが読み込まれます。情報量が多い場合は折りたたまれて表示されます。
<img src="http://technical-creator.com/wp-content/uploads/2016/06/8dc60ec9271fadd8d70a34ebd1bc6621.png" alt="APIの結果が返ってきた" width="2032" height="1089" class="alignnone size-full wp-image-963 img-responsive" />

折りたたまれた情報を展開していくとshop_image1という項目が出てきます。
<img src="http://technical-creator.com/wp-content/uploads/2016/06/728ea4b2a6da947cf947ccd449e24426.png" alt="shop_image1" width="2032" height="1089" class="alignnone size-full wp-image-964 img-responsive" />

shop_image1を選択すると、さきほど選択した箇所に画像が挿入されます。
<img src="http://technical-creator.com/wp-content/uploads/2016/06/657805e5c93b15e6922742b5a34c2fe4.png" alt="画像が挿入された様子" width="2032" height="1089" class="alignnone size-full wp-image-965 img-responsive" />

店舗名も同様の流れで挿入できます。
<img src="http://technical-creator.com/wp-content/uploads/2016/06/5e385eca2d431f9361d64f232d8a1278.png" alt="店舗名を表示する" width="2032" height="1089" class="alignnone size-full wp-image-966 img-responsive" />

店舗詳細もこんな感じに。
<img src="http://technical-creator.com/wp-content/uploads/2016/06/db8386d2619ae028e4b8981ee7c8532f.png" alt="店舗詳細" width="2032" height="1089" class="alignnone size-full wp-image-967 img-responsive" />

## 開発者とのコミュニケーションがよりスムーズに

画面のデザインを組んでいて、実装が進んで実際のデータを入れてみたら、あれ？思っていた感じと違う…なんてことはないでしょうか？Sketch上で実際のデータをAPIで取得して見ることができれば、そういった手戻りを防ぐことができるでしょう。
Craftは現在プロトタイピング機能を開発中なので、これができればサーバー上にある実際のデータを参照しながらスクリーンの遷移を再現し、それをInVision上で共有することができるようになります。Sketch・Craft・InVisionを使ったら制作フローがどんなふうになるのか、一度検討してみてもいいかもしれません。

[**テクニカルクリエイター.com**](http://technical-creator.com/)
ESP8266 > Link > watchdog reset対策 > WiFi.softAP("MyESPAP", "MyPassword"); WiFi.mode(WIFI_AP); / WiFi.disconnect();

## Link

http://qiita.com/7of9/items/527b87a63aeb2ce51828
で調べていたwatchdog resetがかかる症状。
近い症状の例が以下に見つかった。
http://www.esp8266.com/viewtopic.php?f=8&t=4089
> and tried to write a simple blink code as follow:

Lチカだけのプログラムでwatchdog resetがかかるという。

それに対しての回答が

> Probably it is coming from the Wifi thread not able to start due to corrupted configs store in flash.
Maybe you should upload blank.bin to both 7C000h and 7E000h addresses or initialize Wifi using API. 

対策としてblank.binで7C000hと7E000hを上書きしてしまう、とあるが他の方法として以下をするのでもいいとのこと。

> Instead, if you look at examples of ESP8266WiFi, you can initialize it in AP mode, and then do nothing with it, until your decide to get it further. 

```
WiFi.softAP("MyESPAP", "MyPassword");
WiFi.mode(WIFI_AP);
```

## 試してみた 

上記を試してみた。

1. [v0.2 @ github](https://github.com/yasokada/esp8266_160625_watchdogReset/releases/tag/v0.2)から問題を生じるプログラムを取得
2. WiFi_setup()内の`#if 1`の定義を`#if 0`に変更
3. プログラム書込み
4. 上記の対策をしたプログラム(下記)を書込み

```c
#include <ESP8266WiFi.h>

void setup() {
  WiFi.softAP("MyESPAP", "MyPassword");
  WiFi.mode(WIFI_AP);
  Serial.begin(115200);
}

void loop() {
  char szbuf[] = "hello";

  Serial.println(szbuf);
  delay(3000);
}
```

確かにwatchdog resetがかからなくなった。

## WiFi.disconnect()

個人的にはWiFi.disconnect()でもいいのではと思う。

試してみた。

```c
#include <ESP8266WiFi.h>

void setup() {
  WiFi.disconnect();
  Serial.begin(115200);
}

void loop() {
  char szbuf[] = "hello";

  Serial.println(szbuf);
  delay(3000);
}
```

こちらもでwatchdog resetがかからないことを確認した。