OmniAICreator/Qiita-1.07M huggingface dataset:
c++ builder XE4, 10.2 Tokyo | TThread > スレッド名をコードでつける > SetThreadName(L"ThreadTest_tpNormal", threadID);

```txt:動作環境
C++ Builder XE4 on Windows 7 pro
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)
```

http://qiita.com/7of9/items/bfe8f229862c5b868699
の続き。

TThread のExecute() において以下の処理をすればスレッドの名前が付くことを発見した。

(追記 2016/03/06)
> <font color=red>`SetThreadName()`はIndy10で用意されている関数のようだ。`IdGlobal.pas`に含まれる。
この関数を使う場合、Indy10関連のヘッダインクルードが必要になる。Indy10関連をincludeすると将来の移植時に問題が出る気がする。</font>
それでも使用する場合は、Code Completeの「Identify Areas Likely to Change」に基づき、将来変更する部分を識別しやすくしておくのが望ましい。


```
#include <IdGlobal.hpp>
...
DWORD tid = GetCurrentThreadId();
SetThreadName(L"ThreadMain", tid);
```

スレッドの状態は以下のようになる。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/6aa7bdc6-32dc-727e-cf5e-a5527b7aaa3e.png)


IDEの「名前付きスレッド」機能を素直に使うのが楽かもしれないが、以前、「名前無し」スレッドから「名前付き」スレッドに変換しようとして「はまった」経験があるので上記のような方法としている。

## v0.2

スレッドの優先度も記載すると他のスレッドとの関係性が明確になりデバッグしやすくなる。

```
#include <IdGlobal.hpp>
...
DWORD tid = GetCurrentThreadId();
SetThreadName(L"ThreadMain_tpNormal", tid);
```


## v0.3

this->Priorityからスレッドの優先度を自動付加するコードを追加。

```
static String getThreadPriorityString(TThreadPriority priority)
{
	switch(priority) {
	case tpHigher:
		return L"_Higher";
	case tpNormal:
		return L"_tpNormal";
	case tpLower:
		return L"_tpLower";
	case tpLowest:
		return L"_tpLowest";
	case tpIdle:
		return L"_tpIdle";
	default:
		return L"_tpOther";
	}
}
```

以下のように使う。


```
#include <IdGlobal.hpp>
...
void __fastcall TThreadMain::Execute()
{
	// スレッド名の表示
	DWORD tid = GetCurrentThreadId();
	String thrnam = L"ThreadMain" + getThreadPriorityString(this->Priority);
	SetThreadName(thrnam, tid);

```

## v0.4

UtilDebugThreadInfo.cpp, .hというファイルにスレッド名付加処理を移した。
クラスのstatic関数として実装。

それぞれのTThreadでは以下のように使う。

```
#include <UtilDebugThreadInfo.h>
...
void __fastcall TThreadMain::Execute()
{
	CUtilDebugThreadInfo::SetDebugInfoThreadName(this->Priority, L"ThreadMain");
        ...
```

~~TFormの場合は、Priorityというプロパティはなかったので、FormShowにて以下のようにする。
tpNormalは任意の値。~~
フォームで行うと、色々なフォームをShowするたびに、１つのスレッドの名前がころころ変わるようだ。

```
	CUtilDebugThreadInfo::SetDebugInfoThreadName(tpNormal, L"TMainForm");
```

UtilDebugThreadInfo.cppにまとめておくことで、将来の移植時にIndy10の関数シグネチャが変化したり、Indy10を使わなくなったりした場合にもこのファイルの修正で済む。
「Identify Areas Likely to Change.」というように変更（すべき）箇所のidentifyもしやすいはず。
Radial Menu V4 でショートカットを使う時のちょっとしたテク

ラジアルメニューソフト　Ragial Menu V.4のちょっと楽をするテクニックです
radial menu v4はこちらから
https://autohotkey.com/boards/viewtopic.php?f=6&t=12078
![Screenshot - 2016_03_06 , 13_48_45.png](https://qiita-image-store.s3.amazonaws.com/0/84265/ffb9969b-9e30-5b39-d507-f807e65ff374.png)


### radial menuを使うメリット

+ 使用頻度が低いために、覚えられない（或いは覚えにくい）ショートカットを登録しておく
+ ボタンから各種操作・アプリの起動・スクリプトの実行 
+ ボタンの配置を自分でカスタマイズ

### radial menu から白フチアクションを実行させる
＊ctrl+alt+shift+F16に画像に白いフチを生成するアクションが割り振ってあるとする

Radial Menu のボタンの定義 (ex. Menu definitions/xxxprofile.txt)
[Item7]
Text= 		白フチ
Icon = 		Csp_PlainLarge.png
Action=		fun SendSc|"^+!{F16}"

Radial Menu の関数定義 (ex. My codes/My functions.ahk)

```SendSc(k) {
	Send, %k%
}```

### 実際の操作
![Screenshot - 2016_03_06 , 14_04_09.png](https://qiita-image-store.s3.amazonaws.com/0/84265/c557395b-d98a-5974-5102-9db7f8c74228.png)

![Screenshot - 2016_03_06 , 14_04_51.png](https://qiita-image-store.s3.amazonaws.com/0/84265/aeb1fdc9-4860-b8c2-e575-8b05f7e4d7d3.png)
（カーソル消えちゃってますが、白フチのボタンを押してます）
![Screenshot - 2016_03_06 , 14_05_08.png](https://qiita-image-store.s3.amazonaws.com/0/84265/d1d2c335-679e-b9de-6d21-452c20595a75.png)

### メモ
今回はclip studio paint での操作ですが、他のアプリケーションでも汎用的に使っていける
ネタだと思います
Arduino IDE開発環境(ESP-WROOM-02開発ボード編)

Switch ScienceのESP-WROOM-02開発ボード(SSCI-025003)を、Arduino IDEで開発するための環境設定について、メモしておきます。

基本的には、以下のサイトに従ってインストールすることで大丈夫です。
http://trac.switch-science.com/wiki/esp_dev_arduino_ide


2016.03.06時点でIDEのバージョンが1.6.7ですが、ESP開発環境が2.0.0から2.1.0になっているため、その差分について以下に記載します。  

【追記】2016.03.09時点で、IDEが1.6.8になっているため、それを反映。


## 変更点（1.Arduino IDEにESP8266ボードを追加）

Arduino IDEのダウンロードは以下のサイトよりダウンロードしてください。
https://www.arduino.cc/en/Main/Software　　

Additional Boards Manager URLsに、以下のURLを入力してください。
（「追加のボードマネージャのURL」に和訳）
（Switch ScienceサイトのURL先頭に、見えないコードが入っているようです。）

http://arduino.esp8266.com/stable/package_esp8266com_index.json 

ボードマネージャで、「esp8266 by ESP8266 Community」の項目において、ver 2.1.0を選択する。

## 変更点（2.ボード選択）

事前に、PCとESP-WROOM-02をUSBケーブルで接続しておいてください。
（ESP-WROOM-02のためのCOMポートが割り当てられます。）

「ツール」→「マイコンボード」のところで、「Arduino/Genuino Uno」から「Generic ESP8266 Module」に変更した後、以下の項目を設定して下さい。
ボードの選択で項目が追加されているので、上から順番に表にしておきます。


|項目|初期値|変更値|
|:---|---:|---:|
|Flash Mode|DIO|QIO|
|Flash Frequency|40MHz|同左|
|Upload Using|Serial|同左|
|CPU Frequency|80MHz|同左|
|Flash Size|512K(64K SPIFFS)|4M(3M SPIFFS)|
|Debug port|Disabled|同左|
|Debug Level|None|同左|
|Reset Method|ck|nodemcu|
|Upload Speed|9600|115200|
|port|---|開発ボードのCOM番号|　　

※Upload Speedは、512000でも大丈夫のようだ。


## 変更点(3.スケッチ書き込み)
上記設定とハードウェア設計のため、UART Download ModeとFLASH Boot Modeが自動的に切り替わります。

誤: 買い込みボタン
正: 書き込みボタン

【補足】
本スケッチは、IO14に接続されたLEDを点滅させるようなサンプルとなっています。未配線の場合には「検証・コンパイル」を実行してコンパイルがうまく動作するかを確認してみましょう。

それでは、ESP-WROOM-02の快適な旅をお楽しみください。
簡単に画像のレティナ対応

先に注意、
この方法は写真などは扱えません。SVGを使うためです。

今までレティナ対応と言えば

```html:sample.html
<img src="example.jpg"
     srcset="example.jpg 1x,
             example@2x.jpg 2x,
             example@4x.jpg 4x"
     width="66" height="66"
     alt="sample image">
```

みたいにやってました。

でもこれって画像の枚数が増えると大変ですよね。

かと言ってSVGだけだと古いブラウザで見れなくなる。（サポートしないなら別）


なのでこんな形はどうでしょう。

```html:sample.html
<img src="example.jpg"
     srcset="img/example.svg 2x"
     width="66" height="66"
     alt="sample image">
```

単純に２倍解像度のところにSVGを入れて、他の解像度は除きます。

これで２倍以上のレティナすべてに対応できます。

今時のスマホ、タブレットはほぼレティナ対応しないといけないので、
こういった方法で簡単かつ確実な対策をしてみてはいかがでしょうか。
sbtを配布するansible-playbook例

```sbt_copy.yaml
- hosts: worker
  su: yes
  tasks:
   - name: copy
     copy: src=/root/sbt dest=/root/

  tasks:
   - name: chmod
     file: path=/root/sbt/bin/ mode="u=rwx,g=rx,o=rx" state=directory recurse=true


```
Qiitaがわからない

#始めて使いました

こんにちは

これは**テスト**です！

そしてメモです。

【リンク】
[text](url)

【太字】
**字**

【現状使えるスタイル】
#=h1タグと、li(以下参照)
Lists - リスト
Disc型
文頭に「*」「+」「-」のいずれかを入れるとDisc型リストになります
要点をまとめる際に便利です
リストを挿入する際は、 リストの上下に空行がないと正しく表示されません。また「*」「+」「-」の後にはスペースが必要です

HTML▶︎MarkDown
http://kojika17.com/2013/01/starting-markdown.html
c++ builder XE4, 10.2 Tokyo | TThread > スレッド番号を取得 > DWORD tid = GetCurrentThreadId();

```txt:動作確認
C++ Builder XE4
  - Windows 7 pro 32bit
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)
  - Windows 10 pro 64bit
```

TThreadで動かしているスレッドは「スレッドの状態」タブにて動作中などの情報が見れる。
名前付きスレッドでない場合は、どのスレッドがどの番号で動いているか確認しないといけない。

以下で調べられる。

```
DWORD tid = GetCurrentThreadId();
```

https://msdn.microsoft.com/ja-jp/library/cc429114.aspx


Execute()などで上記tid をデバッグ出力しておけば、「スレッドの状態」タブでの対応がとれる。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/1cc84bd3-ab7b-bd43-cfaf-852068fcc1ba.png)


名前付けスレッドも使えばいいように思うが未調査。
SQLの基本


##データベースの作成

###作成

```sql:SQL
CREATE DATABASE データベース名
```

###確認

```psql:postgreSQLの場合
\l
```

###切断

```psql:postgreSQLの場合
\q
```

##データベースの利用

```sql:SQL
USE データベース名;
```

##テーブル

###作成

```sql:SQL
CREATE TABLE テーブル名
(
	列名 データ型 [NOT NULL] [AUTO_INCREMENT],
	列名 データ型 [NOT NULL],
	...,
	PRIMARY KEY ([主キーになる列])
);
```

###確認(テーブル一覧)

```psql:postgreSQLの場合
\d
```
###確認

```sql:SQL
DESC テーブル名;
```

```sql:SQL
\d テーブル名
```

###確認(CREATE TABLE文)

```sql:SQL
SHOW CREATE TABLE テーブル名;
```

###削除

```sql:SQL
DROP TABLE テーブル名;
```

###変更

```sql:SQL
ALTER TABLE テーブル名
ADD COLUMN 列名 データ型 [NOT NULL] [AUTO_INCREMENT] [FIRST],
[RENAME TO テーブル名]
[CHANGE COLUMN 元の列名 新しい列名 型 [NOT NULL] [AUTO_INCREMENT]]
[ADD PRIMARY KEY (主キーになる列)]
[AFTER 列名];
```

###変更(列のデータ型)

```sql:SQL
ALTER TABLE テーブル名
MODIFY COLUMN 列名 新しいデータ型;
```

###列の削除

```sql:SQL
ALTER TABLE テーブル名
DROP COLUMN 列名;
```


##レコード

###追加

```sql:SQL
INSERT INTO テーブル名 
(列名1,列名2,...)
VALUES 
(値1,値2,...);
```

###検索

```sql:SQL
SELECT 列名 [AS 列別名] FROM テーブル名 [AS テーブル別名]
WHERE [NOT] 条件;
```

(条件)
=,<>,<,>,<=,=> (比較演算子)
AND, OR (論理演算子)
IS NULL
LIKE(%,_)(パターン検索 大文字と小文字を区別しない)
ILIKE(%,_)(パターン検索 大文字と小文字を区別する)
BETWEEN 最小 AND 最大(最小から最大の範囲)
IN(複数の値)
NOT

###削除

```sql:SQL
DELETE 列名 FROM テーブル名
WHERE [NOT] 条件;
```

###更新

```sql:SQL
UPDATE テーブル名
SET
列名 = '新しい値1',
列名 = '新しい値2',
...
WHERE [NOT] 条件;
```

###更新(値のインクリメント)

```ssql:SQL
UPDATE テーブル名
SET
列名 = 列名 + 1,
...
WHERE [NOT] 条件;
```

##第１正規形(1NF)

正規化とは
新しい設計者でも理解できる標準的な規則に従うこと
(規則)
1. 原始的な値を含む
2. 主キー(一意の値を持つ列)を持つ

※原始的なデータ
これ以上分割できない、すべきでない最小のデータの断片
規則⑴
原始的なデータを持つ列は、その列に同種のデータの値を複数持てません。
規則⑵
原始的なデータを持つテーブルは、同種のデータを持つ列を複数持てません。
【Mac】vagrantでrosを使えるまで

ubuntu 14.04 LTS
virtualboxを使います

```file:Vagrantfile
Vagrant.configure(2) do |config|

  config.ssh.forward_agent = true

  config.vm.hostname = "ros"
  config.vm.box_url = "https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box"
  config.vm.box = "ubuntu14.04"
  config.vm.network "private_network", ip: "192.168.33.10"
  config.vm.network :"forwarded_port", guest: 3000, host: 3000
  config.vm.network :forwarded_port, guest: 80, host: 8080
  config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--memory", "4096", "--cpus", "4", "--ioapic", "on"] # cpuとメモリの割り当て量。お使いのPCのスペックに応じて変えてください
    vb.gui = true
    vb.customize ["modifyvm", :id, "--accelerate3d", "on"]
  end
end
```

vagrant立ち上げ&ログイン
`vagrant up
vagrant ssh
`

## GUI設定(rosでguiを見れるようにする)
`sudo apt-get install xfce4
sudo add-apt-repository ppa:gnome3-team/gnome3
sudo apt-get update
sudo apt-get install gnome-shell
sudo apt-get install ubuntu-desktop
sudo apt-get install gdm
sudo dpkg-reconfigure gdm
`

`exit
`

`vagrant reload
vagrant ssh
`

GUIのパスワードはvagrant

![virtualbox.png](https://qiita-image-store.s3.amazonaws.com/0/89860/fc4a7208-a416-3902-8b5c-87ca5224d516.png)

## ROSのインストール
時刻設定
`sudo apt-get install chrony
sudo ntpdate -q ntp.ubuntu.com
`

ROSリポジトリをros-latest.listに追加
`sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
`

公開鍵追加
`wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudo apt-key add -
`

パッケージリストとインストール済みのパッケージを最新化。
`sudo apt-get update && sudo apt-get upgrade`

ROS Indigo Iglooとrqt関連をインストール
`sudo apt-get install ros-indigo-desktop-full
sudo apt-get install ros-indigo-rqt*
`

rosdepを初期化
`sudo rosdep init
rosdep update
`

rosinstallをインストール
`sudo apt-get install python-rosinstall`

環境変数をロード
`source /opt/ros/indigo/setup.bash`

作業フォルダの作成と初期化
`mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ~/catkin_ws/
catkin_make
source ~/catkin_ws/devel/setup.bash
`

ROSの環境設定
vi ~/.bashrc

```file:.bashrc
source /opt/ros/indigo/setup.bash
source ~/catkin_ws/devel/setup.bash

export ROS_HOSTNAME=192.168.33.10
export ROS_MASTER_URI=http://${ROS_HOSTNAME}:11311
export DISPLAY=:0

alias cw='cd ~/catkin_ws'
alias cs='cd ~/catkin_ws/src'
alias cm='cd ~/catkin_ws && catkin_make'
```
ROS_HOSTNAMEはvagrantのnetwork設定による
guiを使う時にcannot connect to X serverでエラーになるのでexport DISPLAY=:0しておく

環境変数をロード
`source ~/.bashrc`

ROS&GUI確認(別ターミナルで全て立ち上げ)
マスタノード立ち上げ
`roscore
`

亀さん立ち上げ
`rosrun turtlesim turtlesim_node
`

亀さんを十字キーで移動操作
`rosrun turtlesim turtle_teleop_key
`
![kame.png](https://qiita-image-store.s3.amazonaws.com/0/89860/c66a5aea-a381-8310-9b1f-fc483b876fad.png)
考察 > Skitch の代わり > Screenpresso

Windows版ではダウンロードができなくなった Skitch。
Evernoteの機能としてあるが、どうも自分には合わない。

その代わりのものをそろそろ確定しないと。

## 自分が欲しい機能

1. Windows / MacOSX で同じUI
- 画面キャプチャ機能
- 矢印追加機能
- 文字追加機能
- 画面内の文字を隠す機能
  - 情報漏えい対策
- キャプチャタイマー機能
  - Mac版にはある


## monosnap

monosnapは Windows / MacOSX 両方対応のようだ。

https://www.monosnap.com/welcome

- 良い: 入力テキスト、矢印は作業ウィンドウが開いている限りは、後から再編集可能
- 悪い: [Save]->[キャンセル]で作業中のものが消える. 作業ウィンドウが開いた状態が望ましい
  - 多用したときにこのUIの問題により作業ロスが蓄積しそう
- <font color=red>悪い: コンテキストメニューに「Upload to monospace.com」というのが付加されてしまい、ソフトをアンインストールしてもそれが消えない。かなり行儀が悪いソフトだ。</font>



## 自作

Unityで作る場合、他のアプリ(OS含む)の画面をどうキャプチャするかが問題。

Unityの画面自体のキャプチャはこちらで経験済み。
http://qiita.com/7of9/items/03962e92a169f8b59f39

### Screenpresso
(追記 2017/03/22)

http://qiita.com/shuheilocale@github/items/a1800805c237fa07f2cd
にて紹介されているScreenPressoが上記の欲しい機能(5以外)を有していることが分かりました。

@shuheilocale@github さん
情報感謝です。

webページのスクロールキャプチャも可能。これはすごい。
パラメータ化テスト(@Theory)でテストケースとテストデータを紐づける(JUnit4.12〜)

# 前置き
* 初投稿です。よろしくお願いします。
* [「JUnit実践入門 ~体系的に学ぶユニットテストの技法」](http://www.amazon.co.jp/JUnit%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80-~%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6%E3%83%A6%E3%83%8B%E3%83%83%E3%83%88%E3%83%86%E3%82%B9%E3%83%88%E3%81%AE%E6%8A%80%E6%B3%95-WEB-PRESS-plus/dp/477415377X) を読んで要点をまとめました！っていう記事はすでにいっぱいあるんですが、  
これの出版以降のバージョンだと、(すくなくとも日本語での)情報がグッと減るので書いてみる事にしました。
* パラメータ化テストについては、「JUnit実践入門」では第8章で説明されています。

# 本題

## JUnit4.11まで
* テストメソッドの引数と`@DataPoints`が付与されたフィールドとの対応付けは、型でのみ判断されていました。
* 型が一致すればすべてのテストデータが適用されてしまうので、色々と不自由なところがありました。


## JUnit4.12
* `@DataPoints`にラベル(複数も可)をつけることができ、  
そのラベルを`@FromDataPoints`で参照することで、  
テストメソッドの引数とテストデータの対応付けが自由に指定できるようになりました。


ちなみに題材がスネークケースとかキャメルケースとかなのは、「JUnit実践入門」の演習問題の一番最初をやっていたからです。

```ParameterizedTest.java
// JUnit4.12の場合
@RunWith(Enclosed.class)
public class ParameterizedTest {

    @RunWith(Theories.class)
    public static class isSnakeCaseのテスト {
        @DataPoints({"snake", "notCamel"})
        public static String[] snakes = new String[] {
            "hello_world", "an_apple_and_a_banana"
        };

        @DataPoints({"camel", "notSnake"})
        public static String[] camels = new String[] {
            "helloWorld", "anAppleAndABanana"
        };

        @DataPoints({"notSnake", "notCamel"})
        public static String[] others = new String[] {
            null, "", "apple"
        };

        // snakesの要素だけが使用される
        @Theory
        public void isSnakeCaseのテスト_trueになる場合(
                @FromDataPoints("snake") String snake) {
            // Exercise & Verify
            assertThat(StringUtils.isSnakeCase(snake), is(true));
        }

        // camelsとothersの要素が使用される
        @Theory
        public void isSnakeCaseのテスト_falseになる場合(
                @FromDataPoints("notSnake") String notSnake) {
            // Exercise & Verify
            assertThat(StringUtils.isSnakeCase(notSnake), is(false));
        }
    }

}
```

Eclipseでやるとboxingのwarningが出るので、この場合は `assertThat()` よりも`assertTrue()`(あるいは`assertFalse()`)を使った方がいいかもしれません。

# あとがき
* 便利そうだけど、実務でどのくらい使えるかはわかんないです。
* そろそろJUnit4.13とかJUnit5とかも出るんですかね
* 誤字やおかしいところなどあればご指摘ください。

# 参考
* [JUnit4.12に追いつこう（周回遅れで） - 日々常々](http://irof.hateblo.jp/entry/2015/05/02/222056)  
日本語の情報だとこことかがひっかかりますが、この件に関しては具体的なコード例がなかったのでこの記事を書いてみました。
* [FromDataPoints (JUnit API)](http://junit.org/javadoc/latest/org/junit/experimental/theories/FromDataPoints.html)  
公式のJavdoc
yumでinstallする ansible playbook例

```yum.yaml
- hosts: worker
  su: yes
  tasks:
   - name: install rsync
     yum: name=rsync state=latest

   - name: install emacs
     yum: name=emacs state=latest

   - name: install git
     yum: name=git state=latest

```

```
ansible-playbook -i hosts yum.yaml -k
```
電子工作 > Link > HAKKO PRESTO > 標準付属のこて先より細い交換用こて先はなさそう

はんだ作業で使っている HAKKO PRESTO。

http://www.hakko.com/japan/products/hakko_presto_set.html#productNav

- 消費電力: 20/130W
- 標準こて先: BI型 (品番 980-T-BI) 

交換用こて先には標準品(R0.25)より細いものはなさそう。

http://www.hakko.com/japan/products/hakko_presto_tips.html#productNav


このあたりが良さそうか。まだ選定理由はわからない。
http://www.goot.jp/handakote/cxr-41/
AD2 > Link > ノイズ対策 > フェライトビーズ @ ねむいさんのぶろぐ

http://qiita.com/7of9/items/aaa5dcdf471f748f1206
で発生したリンギング。

ねむいさんのブログにて以下を見つけた。
ノイズ対策としてフェライトビーズを試している。
http://nemuisan.blog.bai.ne.jp/?eid=217386

>いろいろ試してねむいさんの手持ちのフェライトビーズの中ではBLM18BB121SN1Dがかなり効果があることが分かりました。この対策で認識できなかったUHS-1のカードも無事見ることができました(NS/HSモード共)。 

フェライトビーズは自分には未知の領域。

どういう製品が自分の環境に適しているかの調査必要。
AD2 > link > window comparator > ある範囲の電圧に入っているかを確認できるもの

```txt:道具
Analog Discovery 2 (以下AD2)
```

[reference manual](https://reference.digilentinc.com/analog_discovery_2:refmanual#power_supplies_and_control)

> ADCMP671 is a window comparator with the following features:

window comparatorとは何か？

[maxim integrated](https://www.maximintegrated.com/jp/glossary/definitions.mvp/term/Window%20Comparator/gpk/336)

> ウィンドウコンパレータ：通常、1対の電圧コンパレータからなるデバイスで、測定された信号が2つの異なるスレッショルド(｢上の｣スレッショルドと｢下の｣スレッショルド)によって限定される電圧範囲内にあるかどうかがその出力によって示される。

ようするに、ある範囲の電圧に入っているかを確認できるもののようだ。
underscoreコードリーディング（isElement）



underscoreに詳しくないので、勉強半分でソースコードを読む。



##利用するバージョン
[underscore.js(v1.8.3)](https://github.com/jashkenas/underscore/tree/1.8.3)


##isElementとは


###[underscorejs.orgのisElement](http://underscorejs.org/#isElement)

こんな説明。
>####_.isElement(object) 
Returns true if object is a DOM element.

```javascript

_.isElement(jQuery('body')[0]);
=> true

```

------------- 
objectがDOMの要素だった場合trueを返します。

###[underscore.isElement](https://github.com/jashkenas/underscore/blob/1.8.3/underscore.js#L1200)
コード的にはこのあたり。

```javascript
  // Is a given value a DOM element?
  _.isElement = function(obj) {
    return !!(obj && obj.nodeType === 1);
  };
```

objが存在し、かつobjのnodeTypeが1と合致した場合、2重否定した結果を返す。
Labeled Loopでfor文を簡潔に制御する

# Labeled Loop

Swiftではfor文にラベルを付ける事がことができる。
ラベル指定して`break`や`continue`できるため、簡潔に書く事が可能。

下の例ではネストしたfor文の中で、直接親元（`blackList `）を`break`している：


```swift:
var blacks = ["chocolate", "blackberry", "coffee", "blackphone"]
var whites = ["milk", "white-chocolate", "snow"]

blackList: for black in blacks {
    whiteList: for white in whites {
        if white.characters.count - black.characters.count >= 8 {
            break blackList
        }
        print("\(black) / \(white)")
    }
}
```


実行結果：

```
chocolate / milk
chocolate / white-chocolate
chocolate / snow
blackberry / milk
blackberry / white-chocolate
blackberry / snow
coffee / milk
```
Qiitaの編集を妨害する障害物をGreasemonkeyで消す

自分の環境(Windows 7 64ビット、Firefox 44.0.2)において、最大化したFirefoxで開いたQiitaの編集画面上をファイルをドラッグして通過させる(例えばファイルのコピーやランチャーへの登録のために別のウィンドウに持っていく)と、以下の画像のような障害物が出てきて、これをなんとかして消さなければ編集を継続できなくなってしまいました。
例えば、一旦下書き保存して編集画面を閉じ、開き直すことで消すことができますが、この手順では無視できない手間がかかってしまいます。

![qiita-gomi1-20160306.png](https://qiita-image-store.s3.amazonaws.com/0/99656/51588d22-a132-7077-8669-639fb467a2b5.png)

(最大化していないFirefoxおよびGoogle Chromeでは障害物が自動で消えてくれたので問題無いですが、なぜか最大化したFirefoxでは妨害されます)

そこで、Greasemonkeyのユーザスクリプトを用いてこの障害物を消し、ファイルをドラッグした後も普通に編集を継続できるようにしてみました。

## Greasemonkeyの導入

[Greasemonkey :: Add-ons for Firefox](https://addons.mozilla.org/ja/firefox/addon/greasemonkey/)
を開いて、「Firefoxへ追加」ボタンを押し、アドオンのインストールを許可すればインストールできるでしょう。

## 消すべき障害物の特定

表示された障害物を右クリックし、「要素を調査」を選択します。
するとHTMLと表示の対応がわかりやすくなり、消すべきものはクラス`editorImageDropTarget`を持つものであると予想できます。

![qiita-gomi2-20160306.png](https://qiita-image-store.s3.amazonaws.com/0/99656/a455d1ba-c4a8-ed3e-2cec-af55063d2304.png)

## 障害物を消す

コンソールで以下のコードを入力して実行すると、障害物が消え、編集できるようになりました。
さらに、編集画面を開いた時にこのコードを入力して実行しておくことで、ファイルをドラッグしても障害物が出て来なくなりました。
なおかつ、この状態で画像ファイルのアップロードをすることもできました。

```js
for (var a of document.getElementsByClassName("editorImageDropTarget"))a.style.display = "none";
```

## ユーザスクリプトを作る

障害物の消しかたがわかったので、これをユーザスクリプトにして登録しましょう。
まず、メニューの「ツール &gt; Greasemonkey &gt; ユーザスクリプト新規作成」を選択します。
次に、出てきたウィンドウに起こられない程度に適当に情報を入力して「OK」を押します。
そして、出てきたウィンドウに以下のコードを入力し、保存して閉じます。

```js:remove_obstacle.user.js
// ==UserScript==
// @name        Qiitaの障害物を消去
// @description Qiitaの編集を妨害する障害物を消去します。
// @include     http://qiita.com/drafts/*
// @version     1
// @grant       none
// ==/UserScript==

for (var a of document.getElementsByClassName("editorImageDropTarget")) {
  a.style.display = "none";
}
```

`@name`はユーザスクリプトの名前、`@description`はユーザスクリプトの説明、`@include`は処理を実行するページのURLです。

これで、Qiitaの編集画面を開いた時にユーザスクリプトが実行され、ファイルをドラッグしても障害物が出て来なくなりました。
めでたしめでたし。

## というか

公式で障害物をクリックすると消えるようにする、などの改善が入るといいですね。
Network Throttling Profile で様々なネットワークをエミュレートする

Web 開発ではよく使われているようですので、メモを残しておきます


Google Chrome のデベロッパーツールを使うと、
2G や 3G、WiFi 等の環境のネットワークの条件をエミュレートできます。


1. デベロッパーツールを開きます
2. Network を選択します
3. No throttling を選択して、エミュレートしたいネットワークの条件を選択します

<img width="914" alt="スクリーンショット 2016-03-06 11.07.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/36202/444f7d25-f8de-5dc1-9f1e-83368d15d951.png">

上記から選択する以外に、Custom の Add... からエミュレートしたいネットワークの条件を設定することも可能です。


## 試してみる

### No throttling

<img width="919" alt="スクリーンショット 2016-03-06 11.12.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/36202/de479ca8-d4bb-ea77-8a62-776b55c8e8dd.png">

### WiFi （Download: 30Mb/s, Upload: 15Mb/s, Latency: 2ms）

<img width="918" alt="スクリーンショット 2016-03-06 10.54.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/36202/992c3e86-8e7d-5e3e-1d0b-5ca5a0d3244d.png">

### Regular 4G （4Mb/s, 3Mb/s, 20ms）

<img width="914" alt="スクリーンショット 2016-03-06 10.55.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/36202/9728217a-c9e1-e8e6-458b-f98d0132fa76.png">

### Regular 3G （750kb/s, 250kb/s, 100ms）

<img width="918" alt="スクリーンショット 2016-03-06 10.53.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/36202/80790a10-8b70-67aa-f9ee-853deb83f1a8.png">

### Regular 2G （250kb/s, 50kb/s, 300ms）

<img width="917" alt="スクリーンショット 2016-03-06 10.53.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/36202/d28e25ee-57a3-00a7-e530-1e7d998884fb.png">

## 参考

- [Device Mode  Mobile Emulation - Google Chrome](https://developer.chrome.com/devtools/docs/device-mode#network-conditions)
CORDOVAをインストールする

##前提条件
Macを用意する
Homebrewをインストールしている

##操作方法

###1:nodeをインストール

```
brew install node
```

###2:カレントディレクトリに移動

```
cd xxxx
```

###3:npmをインストールをする

```
npm install -g grunt-cli
```

###4:npmがインストールされたか確認する

```
npm -v
```

###5:cordovaをインストールする

```
npm install -g cordova
```

###6:iosのシミュレーターをインストールする

```
brew install ios-sim
```

###7:Monacaを使っている人は一旦環境を削除する

```
cordova platform rm ios
cordova platform rm android
```

###8:Cordovaの環境を追加

```
cordova platform add ios
cordova platform add android
```

###9:ビルドする

```
cordova build ios
```

###10:エミュレータを起動

```
cordova emulate ios -d
```

###11:safariで確認する
safari -> 開発　-> Simulator
【ネタバレ注意】Project EulerをHaskellで思考過程から解いてみる【Problem 1】

## 問題
### Multiples of 3 and 5
```
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9.
The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.
```
環境は GHCi, version 7.10.2

## 解き方（ゴリ押し）
Haskellのリストの作り方から復習

```
Prelude> [3,6..10]
[3,6,9]
```
ふむふむ、これで3の倍数のリストが作れる。
楽！！

```
Prelude> sum[3,6..10]
18
```
これでリストの合計が作れる。
楽！

では、問題文の確かめ

```
Prelude> sum[3,6..9] + sum[5,10..10]
33
```
なんか、10多い

```
Prelude> [5,10..10]
[5,10]
```
原因はこいつ
10も含んでしまう

では実験。
最後の数字は10未満でも良いのかな？

```
Prelude> [5,10..9]
[5]
```
エラーが出るかも、と思ったら、無事通ってしまった。

```
Prelude> sum[3,6..9] + sum[5,10..9]
23
```
これで、無事、問題文の範囲では問題が解けた。

問題は範囲を大きくした時。
3と5の最小共倍数である15が、
このままでは被ってしまう。

だから15の倍数の合計値も引かなくてはいけない。

これをカイゼン

```
Prelude> sum[3,6..9] + sum[5,10..9] - sum[15,30..9]
23
```

このままでは範囲を毎回書き直さなくてはいけないので、
プログラミングっぽくする

```
Prelude> let hs n = sum[3,6..n] + sum[5,10..n] - sum[15,30..n]
```
ghciでやっているので、letを付けてます。

```
Prelude> hs 9
23
Prelude> hs 99
2318
Prelude> hs 999
233168
```
何となく上手く動いるっぽいですね。

## 解き方（数学的）
まだ確かめ中
いつものアプリケーションサーバに対して HTTPS でアクセス可能にする気軽な方法

## やりたかったこと
* 社外への AJAX 通信が必要だった
* 先方の開発サーバで CORS (*) が設定されており、https://example.com/ の URL でブラウザからアクセスすることが必要
  * ブラウザの仕様として、Access-Control-Allow-Origin などのヘッダにより、リクエスト元の URL が限定されている
* 開発しているアプリケーションサーバはいつも localhost:3000 で HTTP をリッスンしているが、外部に AJAX リクエストのテストもやりたい
* あまり特別な設定ファイルなどは面倒なのでやだ

## 予備知識
* HTTPS を終端した上で、HTTP として 3000番ポートに転送したい
* この処理を実現するソフトウェアは総称して、[TLS Termination Proxy](https://en.wikipedia.org/wiki/TLS_termination_proxy) という
* TLS Termination Proxy の代表例として `Apache HTTP Server`、`Nginx`、`Pound`、`hitch` などがある

## 今回での手法について
* 前提としていつもローカルの PC で開発している
* [Pound](http://www.apsis.ch/pound/) は設定ファイルが必要でちょっと面倒。
* [hitch](https://hitch-tls.org/) も良い候補だが、英語も含めてドキュメントが足りない
* 今回はソケットを扱うときの swiss army knife である [socat](http://www.dest-unreach.org/socat/) を利用

## サーバ証明書の準備

下記の手順でサーバ証明書を準備しておく。

```
$ openssl genrsa -out server.key 1024 # RSA 秘密鍵の生成
$ openssl req -new -key server.key -x509 -days 3653 -out server.crt # サーバ証明書の生成。いろいろ聞かれるので答える
$ cat server.key server.crt > server.pem # 秘密鍵とサーバ証明書を連結して1つのファイルにする
$ openssl dhparam -rand - 2048 >> server.pem # DH パラメータを追記（これをしないと後でうまくいかなかった）
```

## `socat` を TLS Termination Proxy として動作させる

### `socat` とは
* `netcat` を進化させたもの
* さまざまなチャネル間を双方向にリレーできる
* 標準入出力、フォークしたプロセスへのパイプ、UDP、TCP、SCTP、ユニックスドメインソケットなどを扱える
* 踏み台、プロキシとかに仕込むと結構いろいろ便利なことができる
* libev などは使っておらず、スケーラビリティは低い

### コマンド例

```
$ sudo socat -vv openssl-listen:443,reuseaddr,fork,verify=0,cert=server.pem TCP4:localhost:3000 
```

* 443 番ポートをリッスンするには `sudo` が必要
* `openssl-listen:443` と指定すると SSL ソケットを終端して次の処理を行える 
* `fork` があると繰り返し、プロキシ処理ができる。（逆につけないと１回のリクエストにだけ処理を行う）
* `verify=0` を指定すると、クライアント証明書を確認しない。
* 転送先はローカルホスト `127.0.0.1` の 3000番ポート。

## 動作確認

`wget` で動作確認する

```
$ wget -d https://localhost/ --no-check-certificate -O -
```

* 作ったばかりの適当な証明書なので、 `--no-check-certificate` をつけないと怒られる

## example.com でアクセスする
あとは、単純に `/etc/hosts` を編集すると完成

```txt:/etc/hosts
127.0.0.1   example.com
```


```
$ wget -d https://example.com/ --no-check-certificate -O -
```


## まとめ

* HTTPS を終端した上で、HTTP として転送するには TLS Termination Proxy が必要
* `Nginx` や `Pound` などでもできるが、設定ファイルが必要で、ちと面倒
* socat はさまざまなチャネルをリレーしたいときの swiss army knife
* `socat` で HTTPS を終端し、うしろのアプリケーションサーバに転送できる
* HAPPY HACKING!
Homebrew brew linkのリンク先を確認する。

以下の記事を参考。
[How do I find out where brew links end up?](http://superuser.com/questions/874617/how-do-i-find-out-where-brew-links-end-up)

下記のコマンドで表示されたパスのbinディレクトリ以下にシンボリックリンクがある。

```
$ brew --prefix
/usr/local
```
webブラウザ > 印刷の色調整の設定を変更する > システムダイアログを使用して印刷... (Ctrl+Shift+P)を選択 > 詳細設定を選択 > 「印刷品質」タブを選択 > 印刷目的: CADを選択

```txt:環境
Windows 7 pro 32bit
Chrome
```

chromeなどのwebブラウザから印刷するときの色の調整方法。


- システムダイアログを使用して印刷... (Ctrl+Shift+P)を選択
![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/c907a0f6-ef10-352d-9384-8be0bd8a04a1.png)

- 詳細設定を選択

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/55278642-1e5e-dd90-742e-0bc4fc135f22.png)

- 「印刷品質」タブを選択
- 印刷目的: CADを選択

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/88eda2a0-61dc-b9a1-6fed-f2fe02eee9a1.png)

印刷目的の「一般」と「CAD」では色の濃さが違うと教えてもらった。
確かに違う。

### MindMup2
(追記 2019-02-25)

MindMup2では背景色の選択によっては、文字色と背景色の色相が近く、***文字が読みにくい***場合がある。
それに対しては、上記の設定で回避できるか試したが、だめだった。
GoogleAppEngine/Goのインストールから使いやすくするとこまでをさくっと　前編

AppEngine/Goの記事って試してみた系のHelloWorldまではよく見るんだけど、
その後があまりまとまった情報がなくて戸惑ったのでそこまでをさくっとまとめる。
どの環境もほとんど流れは一緒だけど今回はWindows環境で。

HelloWorld以降は[後編](http://qiita.com/shichiria/items/85c22386d326fe6b4775)で。

最初は[Hello, World!](https://cloud.google.com/appengine/docs/go/)から
適当に流すので分かりづらかったら本家（上の行のリンク）を参照。

#SDKをダウンロード
[https://cloud.google.com/appengine/downloads#Google_App_Engine_SDK_for_Go](https://cloud.google.com/appengine/downloads#Google_App_Engine_SDK_for_Go)からSDKをダウンロード。
（SDKにgo自体が付いているのでgolang自体のインストールは不要）
![スクリーンショット 2016-03-06 08.52.42.png](https://qiita-image-store.s3.amazonaws.com/0/88547/089a62cb-0c81-3326-18ce-f9738f73ae3e.png)

解凍してCドライブの直下にでも。（場所はどこでもいい）
![スクリーンショット 2016-03-06 08.57.08.png](https://qiita-image-store.s3.amazonaws.com/0/88547/9679eee7-a7f4-90a8-4e29-23172b913a10.png)

#Python2をインストール
実行にPython2が必要なので[https://www.python.org/downloads/](https://www.python.org/downloads/)からインストール。（２の方）
![スクリーンショット 2016-03-06 09.02.23.png](https://qiita-image-store.s3.amazonaws.com/0/88547/9062bbdb-39af-e285-d173-7ae8c6f65a94.png)


#Gitをインストール
go get（Goのパッケージ管理）にGitが必要なので
[https://git-scm.com/downloads](https://git-scm.com/downloads)からインストール。
![スクリーンショット 2016-03-06 09.06.27.png](https://qiita-image-store.s3.amazonaws.com/0/88547/4a4c59bc-3fba-a543-d417-aa216a42a9a7.png)


#パスを通す
GoとPythonの２つにパスを通してインストール完了。
![スクリーンショット 2016-03-06 08.57.54.png](https://qiita-image-store.s3.amazonaws.com/0/88547/f06c73af-67e2-a04b-92a8-348488af477c.png)

（エディタはまた今度）

#プロジェクト作成
適当な場所にフォルダを作ってhello.goとapp.yamlを作成。
![スクリーンショット 2016-03-06 09.31.18.png](https://qiita-image-store.s3.amazonaws.com/0/88547/dd4099c3-9ee0-0431-42f0-3e551364b3d6.png)

```go:hello.go
package hello

import (
    "fmt"
    "net/http"
)

func init() {
    http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "Hello, world!")
}
```

```yaml:app.yaml
runtime: go
api_version: go1

handlers:
- url: /.*
  script: _go_app
```

#サーバ起動
そのフォルダから右クリックからBashを起動。
![スクリーンショット 2016-03-06 09.34.35.png](https://qiita-image-store.s3.amazonaws.com/0/88547/d7274fff-6149-ca55-c041-700835c63732.png)

#下記コマンドを実行。（MacやLinuxだと.batは不要）

```lang:bash
goapp.bat serve
```

#ブラウザからlocalhost:8080へアクセス

![スクリーンショット 2016-03-06 09.45.42.png](https://qiita-image-store.s3.amazonaws.com/0/88547/c23eea6c-c3f4-6969-16af-2c3e334dbf48.png)
Hello, world!と表示されたらインストール成功。
Homebrew コマンドでヘルプ表示。

どうやってヘルプを表示するかはgithubのreadmeに書いてある。
[Homebrew README](https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/External-Commands.md)

下記のコマンドでヘルプを表示。

```
$ brew help
```

```
$ man brew
```
man brewの方がより詳細なヘルプになっているみたい。
Pylearn2のインストール手順


# 概要

有名どころのPylearn2を使ってdeep learningを試そうと考え、以下のようにpipで簡単にインストールしたら http://qiita.com/dsanno/items/a1d805a89e192c44730d あたりをチュートリアルとしてやろうと思ったのですが、pipではインストールできませんでした。

```
pip install pylearn2
```

以下のページを参考にインストールできましたが、若干私の環境では異なるところがあったので、初心者向けに加筆したものをこちらに公開させていただきます。初心者向けですので、経験者は以下のページをご覧になったほうが早いと思います。

http://deeplearning.jp/macbookにpylearn2をインストールする/

# 前提環境
- MacBook 12 inch 2015年モデル
- OS X 10.11 El Capitan
- homebrewインストール済み
- brew install pythonでpython2.7インストール済み
- pipインストール済み

# Pylearn2のインストール手順

TheanoをインストールしてからPylearn2をインストールする流れになります。

## Theanoをインストール

Theanoの前提ソフトウェアをインストールします。

まずはgccから。

```
brew install homebrew/versions/gcc48
which gcc
ln -s /usr/local/bin/gcc-4.8 /usr/local/bin/gcc
which gcc
gcc --version
/usr/bin/gcc --version
```

次にPyYAMLなど。

```
pip install PyYAML
pip install IPython
pip install Cython
pip install NumPy
pip install SciPy
```

前提ソフトウェアの最後はPILです。

http://rakkyoo.net/?p=1266 を参考に
http://effbot.org/downloads/Imaging-1.1.7.tar.gz
をダウンロードして解凍したら、ディレクトリに移動してインストール。

```
cd Downloads/Imaging-1.1.7
python setup.py install
```

Theanoのインストールですが、以下のコマンドでは動かなかったので git clone からやりました。

```
pip install --upgrade --no-deps git+git://github.com/Theano/Theano.git
```

以下は、 git clone からの手順です。
http://deeplearning.net/software/theano/install.html#bleeding-edge-install-instructions
に書いてある手順ですけれども。

```
mkdir git
cd git/
git clone git://github.com/Theano/Theano.git
cd Theano/
python setup.py develop
```

最後にインポート出来ることを確認します。

```
python
import Theano
```

これでTheanoのインストールが完了しました。

## Pylearn2インストール

いよいよPylearn2のインストールです。

```
cd git/
git clone git://github.com/lisa-lab/pylearn2.git
cd pylearn2/
python setup.py develop
```

インポート出来ることを確認します。

```
python
import pylearn2
```

# 最後に

あとは、データセットの準備などが必要なようですが、まだpylearn2を実際に使っていないので、残りは参考先のページのデータセットの準備からをご覧になると良いと思います。
http://deeplearning.jp/macbookにpylearn2をインストールする/

## 参考

http://deeplearning.jp/macbookにpylearn2をインストールする/
http://rakkyoo.net/?p=1266
http://deeplearning.net/software/theano/install.html#bleeding-edge-install-instructions
家庭用にHubotスクリプトを書いてみた話

[HerokuにHubot立ててみた](http://qiita.com/k-ysd/items/422fbc21118ebe42df9f)の続きになります。

家族とのSlackチャット用にHubotスクリプトをいくつか書きました。

# スクレイピング

Webサイトの情報を取得するには、[cheerio-httpcli](https://www.npmjs.com/package/cheerio-httpcli)がラクチンです。jQuery風に取得できます。

```coffeescript
client = require 'cheerio-httpcli'

client.fetch 'http://xxxxxx.com/', {q:'node.js'}, (err, $, res) ->
    console.log $('title').text()
```

# スクリーンショット

スクリーンショットを取得できるパッケージはいくつかありますが、今回は[phantomjs-prebuilt](https://www.npmjs.com/package/phantomjs-prebuilt)を使います。

```coffeescript
childProcess = require 'child_process'
path = require 'path'
phantomjs = require 'phantomjs-prebuilt'

childArgs = [
    path.join(__dirname, './screenshot.js')
    [target-url]
    [picture-save-path]
 ]

#スクリーンショット取得
childProcess.execFile phantomjs.path, childArgs, (err, stdout, stderr) ->
```

```js:screenshot.js
var system = require('system');
var args = system.args;
var url = args[1];
var savePath = args[2]

var page = require('webpage').create();
page.open(url, function() {
    page.render(savePath);
    phantom.exit();
});
```

# gmail

こちらを参考に、gmailに届いたamazon発送メールをSlackに流すスクリプトを作りました。
[Node.jsで社内日報メールを取得してFacebookページに自動投稿する仕組みを実装したので解説します。](http://liginc.co.jp/web/service/facebook/153850)

iconvを使うためには、node-gypのRebuildが必要になります。WindowsだとC++コンパイルのためにVisual Studioが必要になるのですが、インストールが面倒だったので今回は使いませんでした。

# cron
定期実行は[node-cron](https://github.com/ncb000gt/node-cron)を使うとわりとかんたんです。

```coffeescript
botRoom = "#general"
cronJob = require('cron').CronJob

module.exports = (robot) ->
  new cronJob(
    cronTime: "0 0 16 * * 3"  # 水曜の16:00
    start: true
    onTick: ->
      robot.send {room: "#{botRoom}"}, "your-message"
    )
```
最小限のReactを試す環境を用意する


## ソースの用意

```
$ git clone https://github.com/mitswku/react-sample.git
```

```package.json
{
  "name": "react-sample",
  "scripts": {
    "start": "webpack-dev-server",
    "browser": "open http://localhost:8080/webpack-dev-server/"
  },
  "devDependencies": {
    "babel-core": "^6.6.5",
    "babel-loader": "^6.2.4",
    "babel-preset-es2015": "^6.6.0",
    "babel-preset-react": "^6.5.0",
    "webpack": "^1.12.14",
    "webpack-dev-server": "^1.14.1"
  },
  "dependencies": {
    "react": "^0.14.7",
    "react-dom": "^0.14.7"
  }
}
```

```src/index.js
import React from 'react';
import ReactDOM from 'react-dom';

var HelloMessage = React.createClass({
  render: function() {
    return <div>Hello {this.props.name}</div>;
  }
});

ReactDOM.render(
  <HelloMessage name="John" />,
  document.getElementById('container')
);
```

```public/index.html
<!DOCTYPE html>
<html>
    <head>
      <meta charset="UTF-8">
    </head>
    <body>
        <div id="container"></div>
    </body>
    <script src="bundle.js"></script>
</html>
```

```webpack.config.js
var path = require("path");

module.exports = {
    entry: {
      app: ['./src/index.js']
    },
    output: {
        path: path.resolve(__dirname, "public"),
        filename: 'bundle.js'
    },
    module: {
        loaders: [
            {
                test: /\.jsx*$/,
                exclude: [/node_modules/],
                loader: 'babel',
                query: {
                    presets: ['react', 'es2015']
                }
            }
        ]
    },
    devtool: "#source-map",
    devServer: {
        contentBase: "./public",
    }
};
```

## 試す

```
$ npm install
$ npm start
```

別consoleで

```
$ npm brower
```

## 結果

![cap2.png](https://qiita-image-store.s3.amazonaws.com/0/114742/dbd8e0ff-db64-6aa3-c7a6-38506dfb2cd4.png)
[R]線形回帰の信頼区間と予測区間を計算するスクリプト 

線形モデル(lm)を使った、線形回帰の信頼区間と予測区間を計算するスクリプト です。
# 説明変数１個の１次式で回帰
```r:05_Liner_regression_by_lm.R
#-------Making data------------------------------ 
#Making data to make regression model
x<-iris$Petal.Length
y<-iris$Petal.Width
data_for_model <- as.data.frame(cbind(x,y))

#Making data to Prediction
data_for_prediction<-NULL
data_for_prediction$x<-seq(0, 8, 0.1) 
data_for_prediction<- as.data.frame(data_for_prediction)

#-------Linear Regression by lm------------------ 
#Making regression model
result <- lm(y~x,data=data_for_model)

#Predction
#interval = "prediction"にするとuprとlwrが予測区間の上下限になる。
#interval = "confidence"にするとuprとlwrが信頼区間の上下限になる。
prediction<-predict(result, data_for_prediction, interval="prediction",level = 0.95)
prediction<- as.data.frame(prediction)

#-------Output Png file------------------
png("05_output.png") #Open device

#データのプロット
plot(x,y,pch=21,col="black")

#予測値(今回は回帰直線)の描画
lines(data_for_prediction$x,prediction$fit,col="black") #Plot predction

#予測区間の描画
lines(data_for_prediction$x,prediction$upr,col="black",lty="dotted")
lines(data_for_prediction$x,prediction$lwr,col="black",lty="dotted")

dev.off() #Close device
```
結果
![05_output.png](https://qiita-image-store.s3.amazonaws.com/0/111514/fece7ad0-e839-9549-868e-6965f32fe9e2.png)

#説明変数２個の３次式で回帰

```r:05_Liner_regression_by_lm2.R
#-------Making data------------------------------ 
#Making data to make regression model
x1<-iris$Petal.Length
x2<-iris$Sepal.Width
y<-iris$Petal.Width
data_for_model <- as.data.frame(cbind(x1,x2,y))

#Making data to Prediction
data_for_prediction<-NULL
data_for_prediction$x1<-seq(0, 8, length=50) 
data_for_prediction$x2<-seq(1, 5, length=50) 
data_for_prediction<- as.data.frame(data_for_prediction)

#-------Linear Regression by lm------------------ 
#Making regression model
result <- lm(y~poly(x1,x2,degree=3),data=data_for_model)

#Predction
prediction<-predict(result, data_for_prediction, interval="prediction",level = 0.95)
prediction<- as.data.frame(prediction)

#-------Output Png file------------------
png("05_output2.png") #Open device
#x1 vs y
plot(x1,y,pch=21,col="black") #Plot data
lines(data_for_prediction$x1,prediction$fit,col="black") #Plot predction
lines(data_for_prediction$x1,prediction$upr,col="black",lty="dotted")
lines(data_for_prediction$x1,prediction$lwr,col="black",lty="dotted")
dev.off() #Close device

png("05_output3.png") #Open device
#x2 vs y
plot(x2,y,pch=21,col="black") #Plot data
lines(data_for_prediction$x2,prediction$fit,col="black") #Plot predction
lines(data_for_prediction$x2,prediction$upr,col="black",lty="dotted")
lines(data_for_prediction$x2,prediction$lwr,col="black",lty="dotted")
dev.off() #Close device
```
結果
![05_output2.png](https://qiita-image-store.s3.amazonaws.com/0/111514/1c472aa1-0dca-24dd-41d1-ff482409287b.png)
![05_output3.png](https://qiita-image-store.s3.amazonaws.com/0/111514/1639c4a6-41e7-2986-c559-0a4c2ba8116c.png)
Kindle > 2014年より前に販売のKindle > アップデートが必須 > アップデート後の不具合 (Kindleストアでエラーが出る)

Code Completeなどを読んでいる端末のKindle.

以下の気になる情報を見つけた。
http://www.tokumitu.com/2016/03/kindle2014kindle2016322.html

Kindle のソフトはバージョンアップのたびに致命的な不具合(本が読めなくなる)が入っていたりするためバージョンアップをしないようにしていた（WiFi接続を切って、3G接続だけにしていた）。

僕の使っているKindle は2012年12月購入なので、上記の対象機種だ。

不具合がなければいいが。

ちなみにリンクに書いている連絡メールはこちらには届いていない。サービスがいい加減だ。

<hr>
アップデートしてみた。

2012年のPaper white.
ファームウェアバージョンは Kindle 5.6.1.1.

フォントが綺麗になった気がする。

Code Completeを開こうとすると「アプリケーションエラー」が１回でてシステム全体が固まったが、しばらくすると復旧した。２回めではきちんと開いた。

しばらく様子見。今読んでいるZynq関連のブログを小休止してCode Completeを再読して様子を見てみる。

<hr>
(追記 2016/03/16)
Code Completeを最後まで目を通したが、致命的なエラーはなかった。

- 10回程度のCode Completeを開く処理
- ページ送り多数
- 最初から最後までのページ送り

forumで出ていた`1. 本を開けない`状況は１回だけ発生。`2.本の途中から先が読めない`状況は0回だった。

<hr>
(追記 2016/05/14)
その後、使い続けているが、閲覧に関しての問題は発生していない。

一方で、Kindleストアで本を買おうとすると「本を購入することはできません。」と毎回なる。

Kindleの電源を切り直してからKindleストアに繋ぎ直すと回復するが、非常に使いづらい。
技術英語 > But [as far as fuel efficiency goes], / as is often the case with

@ LOE > January 10, 2003

http://loe.org/shows/shows.html?programID=03-P13-00002
> But <font color=red>as far as</font> fuel efficiency <font color=red>goes</font>, 

http://eow.alc.co.jp/search?q=as+far+as+goes&ref=sa

> ～に関する限り、～に関して言えば、～に限っていえば、～という意味では、～的には、～となれば

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

as is often the case with
http://ejje.weblio.jp/content/as+is+often+the+case+with

> （～には）よくあることだが

as しかかぶってない。

<hr>
[Survey]Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning

**ImageNet ｃlassification challenge**のTest Setの結果がMicrosoftの[**ResNet**](http://qiita.com/supersaiakujin/items/935bbc9610d0f87607e8)を超えたgoogleの[論文](http://arxiv.org/pdf/1602.07261v1.pdf)
Microsoftはtop-5 errorが**3.57%**だったが、こちらは**3.08%**

**論文のポイント**
・**Residual connection**を使った
・Residual connectionに**改良**を入れた(bottleneckを１ｘ７と７ｘ１にした)
・**不安定対策**で**scaling**を入れた
  
**Residual Connection**
MicrosoftのResNetはこんな感じ

![範囲を選択_108.png](https://qiita-image-store.s3.amazonaws.com/0/100523/c90ed57d-c3d6-de06-56f8-eeaf43eefea0.png)

# Architecture
3つのArchitectureで評価を行っている。
Architecture毎の違いは下記の通り

Inception-ResNet-v1: InceptionとResNetのhybridで計算コストが少ない方
Inception-ResNet-v2: InceptionとResNetのhybridで計算コストが多い方
Inception-v4: ResNetなしでInceptionを改良したもの

# Inception-v4
![範囲を選択_109.png](https://qiita-image-store.s3.amazonaws.com/0/100523/e32b7d94-1af6-de2f-5440-c49a9bc46e9d.png)

# Inception-ResNet-v1 and Inception-ResNet-v2
ResNetを使ったVersionの全体図は下記の通り
![範囲を選択_116.png](https://qiita-image-store.s3.amazonaws.com/0/100523/7a9ad70b-552a-8784-f208-1c619e8cb32e.png)

各ブロックの図は論文にあるが数が多いので割愛。
ちなみに**residual connection**を使ったブロックは下記のような感じになっている。
![範囲を選択_119.png](https://qiita-image-store.s3.amazonaws.com/0/100523/504be1c9-e8f1-e16e-4e0a-6a5dbbac9d83.png)

# scaling
filter数が**１０００**を超えると、学習が**不安定**になる（値が０になる）。
Microsoftの論文のように**warm-up**をしても改善しない。
この論文では、下の図のように残差を0.1から0.3の間で値を**scale down**したら安定したらしい。
このScale downは不必要なものだけど、trainingの安定には役立ったと書いてあった。

![範囲を選択_117.png](https://qiita-image-store.s3.amazonaws.com/0/100523/ff39b0d4-9542-33cf-166f-ad3339ac1c13.png)

# Training Methodology
momentum 0.9
RMSProp decay 0.9 epsion 1.0
learning rate 0.045で2 epochごとに0.94倍

# Experimental Results
・validationの時に、性能が悪くなる1700 blacklistデータを除いたもので行った。
・これらはbenchmarkを測定するときだけ使えばいい。
・最初の論文では含まれているので、差がtop-1で0.3%、top-5で0.15%でるけど、差が一定だからcurveの比較には問題ないと思う。


論文にはたくさん結果が掲載されているが、代表的なものだけ

**Inception-v4とInception-ResNet-v2の比較**
最終的な性能は同じぐらいだが、ちょっとだけresidual versionの方が性能がいい。あと、学習の収束が速い。
![範囲を選択_121.png](https://qiita-image-store.s3.amazonaws.com/0/100523/762ab78b-0152-acf9-195f-bbdf0c26e2bc.png)


**single modelの結果**
![範囲を選択_120.png](https://qiita-image-store.s3.amazonaws.com/0/100523/19b1ce74-c51a-e6cb-c512-ccc100b38996.png)

**ensembleの結果**
Top-5 Errorで3.08%で、１位だったMicrosoftを上回っている

![範囲を選択_118.png](https://qiita-image-store.s3.amazonaws.com/0/100523/c45b9004-0f4e-47ab-460b-cadbea9f6e7e.png)

# 最後に
ものすごい力技のような気がするのは気のせいか。
R言語でグラフの保存（pngとウィンドウズメタファイル）

いつもグラフをコピー＆ペーストで保存していたのですが、面倒なので直接ファイルとして保存する方法を調べました。

```r:04_Output_Graph.R
#Get sample data
x<-iris$Sepal.Length
y<-iris$Sepal.Width

#-------Output Png file------------------
png("04_output.png") #Open device
plot(x,y) 
dev.off() #Close device

#-------Output windows meta file (vector image) ------------------
win.metafile("04_output.wmf")
plot(x,y) 
dev.off() #Close device
```
結果(png) : ウィンドウズメタファイルはQiitaに投稿できないみたいです。
![04_output.png](https://qiita-image-store.s3.amazonaws.com/0/111514/d1d4d387-b681-74e2-ade8-d7beceaa2bd6.png)
gitでpushと同時にデプロイする場合の注意


はまったのでメモ。

gitでpushと同時にデプロイする場合、以下参照。
http://qiita.com/zaburo/items/8886be1a733aaf581045#%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AEpost-receive%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B

実行したいスクリプトをhoge.git/hooks/post-receiveに、実行権限付きで置けばよい。

ただ上記URLのpost-receiveスクリプトでは問題ないが、以下はうまくいかず。「fatal: Not a git repository」が出る。

```bash:post-receive
cd /var/www/html/test
git pull
```

これはgit pull時に$GIT_DIRが設定されており、pwdよりも優先するための模様。
http://stackoverflow.com/questions/4043609/getting-fatal-not-a-git-repository-when-using-post-update-hook-to-execut/4100577#comment24975396_4100577


そのため、以下のようにする必要あり。

```bash:post-receive(参照URL上のもの)
cd /var/www/html/test
git --git-dir=.git pull
```

```bash:post-receive
unset GIT_DIR
cd /var/www/html/test
git  pull
```
centOSにMySQLをインストール

## 環境
centOS:6.2
MySQL:5.1

## インストール

```bash
$ sudo yum -y install mysql-server
```
## 設定ファイル

```bash
$ sudo vi /etc/my.cnf
```

```bash:my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
character-set-server = utf8 #追加する

[client]
default-character-set=utf8 #追加する

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
```

## 起動
初期設定するより先に起動しないとmysql.sockが無いってエラーが出る

```bash
$ sudo /etc/rc.d/init.d/mysqld start
```
自動起動ONにする

```bash
$ sudo chkconfig mysqld on
```

## 初期設定

```bash
$ mysql_secure_installation
```
すると

```bash
Enter current password for root (enter for none): 
```
と聞かれるが何も入力せずにEnter

```bash
Set root password? [Y/n]
```
はもちろんY。そして新規パスワード&確認用パスワードを入力する。

これ以降に聞かれる

```bash
Remove anonymous users? [Y/n]
Disallow root login remotely? [Y/n]
Remove test database and access to it? [Y/n]
Reload privilege tables now? [Y/n]
```
はEnter入力しておけばよい。
![thanks_mysql.png](https://qiita-image-store.s3.amazonaws.com/0/95469/1fe361a5-3ced-00b8-a820-30c6034a709a.png)
これが出ればOK

## 参考サイト
<a href="http://chmod.tech/?p=667" target="_blank">centOSにMySQLをインストール</a>(自分のブログ)
<a href="http://centossrv.com/mysql.shtml" target="_blank">データベースサーバー構築(MySQL)</a>
Swift UIButton クリックしたボタンを判別する

UIButtonでクリックしたボタンを判別する方法を記載

UIButtonインスタンス生成時にtagを指定すると簡単に識別できます

ソースコード

```swift
func setButton(){
    btn1 = UIButton(frame: CGRect(x: 0, y: UIScreen.mainScreen().bounds.height - 100, width: 100, height: 100))
    btn1.backgroundColor = UIColor.redColor()
    btn1.addTarget(self, action: "onClick:", forControlEvents: .TouchUpInside)
    btn1.tag = 1
    self.addSubview(btn1)
        
    btn2 = UIButton(frame: CGRect(x: UIScreen.mainScreen().bounds.width - 100, y: UIScreen.mainScreen().bounds.height - 100, width: 100, height: 100))
    btn2.backgroundColor = UIColor.yellowColor()
    btn2.tag = 2
    btn2.addTarget(self, action: "onClick:", forControlEvents: .TouchUpInside)
    self.addSubview(btn2)
}
func onClick(sender:UIButton){
    print(sender.tag);
}
```


以上
WP REST API BetaをRailsアプリのコンテンツ管理に使った話

Railsアプリに限らずブログコンテンツ的なものを管理画面とあわせて実装するのはとにかく大変。ということでRailsにWP-REST-APIをつなげたらなんとかなったし便利だったので簡単に備忘録。粒度は大きい。

## WP-REST-APIって？
WordPress4.5にマージされる予定のAPI。WordPressが持ってるコンテンツをJSONで返す。
そもそもは2009年、MOMAのWEBサイト（Rails）にブログを実装しようとなったときに「めんどくせーしWPをつなげればいいんじゃね？」と誰かが思いついたのか知らないが結果として実装されたAPIをまとめたプラグインが元祖らしい。

## 何がうれしいの？
色々あるが「WPの管理画面とエコシステムが使える」点は工数が省エネ。私はRailsアプリに繋いだがSPAなフロントに対するコンテンツサーバーとして使う方向性もある。

↓がREST APIの全体像を把握するのに良い記事だが、MOMAの事例紹介で「Railsフロントに対してWPバックエンド」と説明されていたのが"なるほどな"という感じ。

[Introducing the WP REST API（1 Jan 2016,Tuts+）](http://code.tutsplus.com/tutorials/introducing-the-wp-rest-api--cms-24533)

## どうすれば使えるの？
ベータ版を使うならWP-REST-APIプラグインを入れる。
4月にリリース予定のWordPress4.5でコアにマージ予定で、これが実際の安定版リリースになるらしい。この記事を書いている現在はWP4.4.2が最新である。

[WP REST API](http://v2.wp-api.org/)

## JSON？
RESTfulな仕様と内部関数WPQueryのフォーマットに近い検索クエリを投げてJSONを取得する。デフォルトの投稿内容は普通に取得できるが、カスタムフィールドの値は標準では取得できない（beta10くらい）。

その辺りはカスタムフィールドで有名なACFとACFで作ったフィールドをREST-APIに表示させるプラグインが存在するのと（プラグイン達は若干メンテが追いついてないので今はあまり信じない方がよい）ドキュメントなど読んでfunctions.phpとかに色々書けばよい。

## Railsからどう繋ぐ？
ORMのHerを使えばActiveModelライクに使える。

## 認証？
ORMのHerで組める。

## その他
- 条件クエリが複雑になると動作が重いが、WP側のチューニングとORMのHer周りでキャッシュすればなんとかできる。
- 条件クエリの仕様が安定していない上にあまりドキュメントも詳しくないので実装読む・英語でググり倒す必要がある。ちなみに英語圏でもまだまだ情報は少ない（2016頭）。
- 今年から始まったTuts+の新しいシリーズに情報が良くまとまっている。

まだベータ版ですが楽できる未来がありそうです。以上。
インスパイヤされて掲示板を作りたくなった(番外篇)

しぇるしぇるしぇる…

*(この記事は4の直後に書かれたけれど全然時間がとれなくて話が進んでないので番外扱ひで…)*

## 過去ログ

| スレ | 内容 |
|----|----|
| [インスパイヤされて掲示板を作りたくなった(1)](http://qiita.com/tadsan/items/cdbbb5b08591af2b110d) | PHPとComposer、あとべんりなライブラリ |
| [インスパイヤされて掲示板を作りたくなった(2)](http://qiita.com/tadsan/items/adaade6b675ac344f373) | SQLite3のスキーマ設計とTwigテンプレート |
| [インスパイヤされて掲示板を作りたくなった(3)](http://qiita.com/tadsan/items/498710c5199349e6d7a8) | ルーティングとモデルの説明 |
| [インスパイヤされて掲示板を作りたくなった(4)](http://qiita.com/tadsan/items/c9798a6eddaea153f42e) | ドキュメント生成とモデル、SQL |
| インスパイヤされて掲示板を作りたくなった(番外篇) | ← イマココ |

## PHPとの対話を

Rubyには`irb`ってコマンドがあったり、Ruby on Railsには`rails console`ってコマンドがあったりして、ターミナルからコードを実行できたりする。

大丈夫、別にPHPだって負けてないし、Railsみたいな巨大なフレームワークがなくたって実現できるから。

例によってライブラリを入れてみる。詳しくは[PHPを「シェル化」する [psy/psysh] - 超PHPerになろう](http://cho-phper.hateblo.jp/entry/2015/11/10/031000)に書いたんだけど。

```
composer require --dev psy/psysh
```

で、実行ファイルを作ってみよう。トップレベルに`shell`ってファイル名にしておく。特に深い意味はないけど、拡張子は不要。

```php:shell
#!/usr/bin/env php
<?php
namespace InspireBBS;

// Composerのオートローダーを読み込む
require_once __DIR__ . '/vendor/autoload.php';
// ほかに初期化用のPHPファイルがあれば読み込んでおく
// require_once …
$dotenv = new \Dotenv\Dotenv(__DIR__);
$dotenv->overload();
$dotenv->required('DB_DSN')->notEmpty();

echo __NAMESPACE__ . " shell\n";

$config = new \Psy\Configuration();
$config->addCasters([
    'InspireBBS\Model\ModelInterface' => '\InspireBBS\Caster::castModel',
]);
$sh = new \Psy\Shell($config);
// シェル起動直後にプロジェクトのnamespaceを設定する
$sh->addCode(sprintf("namespace %s;", __NAMESPACE__));

$sh->run();

// 終了時に表示するメッセージ
echo "Bye.\n";
```

ファイルを保存したら`chmod +x ./shell`で実行権限をつけておく。で、`./shell`で実行する。

![スクリーンショット 2016-02-24 2.29.13.png](https://qiita-image-store.s3.amazonaws.com/0/4121/2e4f2378-082f-6834-357a-a331a520b502.png)

で、たぶんこれだけではモデルを綺麗に表示できないので、 [`tests/Caster.php`](https://github.com/zonuexe/inspire-bbs/blob/master/tests/Caster.php) をコピペして自分のプロジェクトに持ってくると良さそう。`ModelInterface`はこれから実装します。


## 今回のおまけ

Emacsを使ってたら、今回作ったシェルをEmacs内から簡単に呼び出して利用できるよ。まったく便利すぎて困っちゃうんだが、これを起動するには`M-x com` *(省略されました。全てを読むにはわっふるわっふると書き込んでください)*

![スクリーンショット 2016-02-24 2.28.01.png](https://qiita-image-store.s3.amazonaws.com/0/4121/10180c4e-3d7e-1b7c-6e3b-44d50e79403d.png)