OmniAICreator/Qiita-1.07M huggingface dataset:
コンパイルオプションの条件次第でエラーもしくは警告を出力する

# TL;DR
コンパイルオプションの条件次第でエラーを出すようにしたい

`#error` または `#warning` を使用する。

# サンプルコード
```c
#ifdef ERROR_DEFINED
#error "error macro defined"
#endif

#ifdef WARNING_DEFINED
#warning "warning macro defined"
#endif

int main(int argc, char const* argv[])
{
	return 0;
}
```

# 実行例
```shell-session
# エラーを出力する（コンパイルを失敗として中断させる）
$ gcc a.cpp -DERROR_DEFINED
a.cpp:2:2: error: #error "error macro defined"
$ echo $?
1

# 警告を出力する（コンパイルは継続する）
$ gcc a.cpp -DWARNING_DEFINED
a.cpp:6:2: warning: #warning "warning macro defined" [-Wcpp]
$ echo $?
0
```

# 参考
[Diagnostics - The C Preprocessor](https://gcc.gnu.org/onlinedocs/cpp/Diagnostics.html)
Adobeのレジストリ関係まとめ

#Adobe Acrobat Reader DC
ヘルプに「アップデートの有無をチェック」非表示
![aaaa.png](https://qiita-image-store.s3.amazonaws.com/0/45468/258864d1-e944-44b6-0187-ae65ba2b842f.png)

```
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Adobe\Acrobat Reader\DC\FeatureLockDown
```

|bUpdater|DWORD(32ビット)|0|
|:---|:---|:---|

#環境設定
AWS　インスタンスのコピー



- EC2ダッシュボードから「インスタンス」を選択。
- バックアップをとりたいインスタンスを選択。
- 右クリック「イメージ」->「イメージの作成」


![スクリーンショット_2016-03-04_12_44_40.png](https://qiita-image-store.s3.amazonaws.com/0/43281/3c5846a1-7099-ffbf-d893-14768631ea62.png "スクリーンショット_2016-03-04_12_44_40.png")

- 「イメージ名」、「イメージの説明」を入力、「再起動しない」にチェック。
- 「イメージの作成」をクリック。
- 左メニュー「AMI」を選択。
- イメージが作成された事を確認。（状態が「available」になればAMIの作成に成功）
- コピーしたいイメージを選択し、「作成」をクリック。


![スクリーンショット_2016-03-04_12_44_54.png](https://qiita-image-store.s3.amazonaws.com/0/43281/36730a6a-ff79-082e-14c0-e56dfb3bdb26.png "スクリーンショット_2016-03-04_12_44_54.png")


- インスタンス作成時同様サイズ等を設定すればOK
path_support.rb : undefined method `split` でCircleCIのテストがこける


急にこんなエラーが出てテストが通らなくなった。

```
/home/ubuntu/.rvm/rubies/ruby-2.2.2/lib/ruby/site_ruby/2.2.0/rubygems/path_support.rb:50:in `split_gem_path': undefined method `split' for #<Array:0x00000002045b30> (NoMethodError)
```


spring のバージョンをあげてみるとよいらしい。（バージョンをあげるまえは 1.3.6 でした）

https://randvblog.wordpress.com/2016/03/02/split_gem_path-undefined-method-split-for-nomethoderror/


ためしに記事にあるように Gemfile 内の Spring のバージョンを以下のように変えてみる。

```Gemfile
gem 'spring', '1.6.4'
```

以下を実行。（3/8追記しました。 @yuuigara さん、ご指摘ありがとうございました。）

```
$ bundle exec spring binstub –-all
```

動いた。
Node.js で絵文字を使う時の注意点


Node.js で絵文字を使った時に少し躓いたので
# 環境
```
$ node -v
v5.7.1
```

# ダメな例
文字列に対して一文字ごとに操作したい場合、 `charAt` や `str[i]` で文字を取得したり、`split("")` で分離させたりすると思います。
しかし、絵文字が含まれていると結果がおかしくなります。

```js:kuso.js
"use strict";

const emojiStr = "unko💩 うんこ";

// 一文字ごとに色を付けたい
const rainbow = [31, 32, 33, 34, 35, 36];
let rainbowPos = 0;

// 一文字ごとに切って色をつける
const colored = emojiStr.split("").map((c) => {
  let n = rainbow[
    (rainbow.length <= ++rainbowPos) ? (rainbowPos = 0) : rainbowPos
  ];
  return `\x1b[${n}m${c}\x1b[39m`;
}).join("");

console.log(colored);

```

実行結果がこちら
![2016-03-04-184756_106x19_scrot.png](https://qiita-image-store.s3.amazonaws.com/0/31573/bcc7c58c-760f-f46f-6d88-4a52730de3e4.png)
最悪ですね。


# punycode.ucs2.decode / encode を用いる
そこで、標準モジュールである punycode の `punycode.ucs2.decode`, `punycode.ucs2.encode` 関数を使用すると、絵文字を含む文字列をいい感じに操作することが可能になります。

```js:iikannji.js
"use strict";

const punycode = require("punycode");


const emojiStr = "star🌠 星";

// 一文字ごとに色を付けたい
const rainbow = [31, 32, 33, 34, 35, 36];
let rainbowPos = 0;

// decode で文字列をコード化
const colored = punycode.ucs2.decode(emojiStr).map((code) => {

  // コードから文字へ戻す
  let c = punycode.ucs2.encode([code]);

  let n = rainbow[
    (rainbow.length <= ++rainbowPos) ? (rainbowPos = 0) : rainbowPos
  ];

  return `\x1b[${n}m${c}\x1b[39m`;
}).join("");

console.log(colored);
```

実行結果がこちら
![2016-03-04-184813_68x17_scrot.png](https://qiita-image-store.s3.amazonaws.com/0/31573/98a1463a-cb0f-70a3-1e11-9b5ef697e77e.png)
最高です。



# まとめ

絵文字が含まれる文字列を操作する場合は punycode.ucs2.encode/decode を使用しましょう。

`Array.from` 使おう！(コメントより)
zope page templateで動的にDTMLDocumentの追加　

- page templateで動的ページを作成
- contextのfolder以下にid付でフォルダが作成されている
- そのフォルダ以下にtemporary.txtがあればそのlinkを表示、なければ、manage_addDocumentで作成

```

<table tal:define="objects python: context.objectValues(['Folder']);
                   sort_on python:(('title','cmp'),);
                   sorted_objects python:sequence.sort(objects, sort_on)">
   <tr>
    <th>name</th>
    <th>カテゴリ KWs</th>
    <th>案件 KWs</th>
    <th>history</th>
  </tr>
  <tr tal:repeat="item sorted_objects">
<!--    <td tal:content="item/getId">Id</td> -->
    <td tal:content="item/title">Title</td>

    
<td>
<a 
target="_brank"
href="./0/keywords.txt/manage_main"
tal:attributes="href python: item.getId() + '/keywords.txt/manage_main'"
>
閲覧、編集
</a>
</td>

<td>

<!-- ここで temporary.txtが存在すれば、リンクを表示、なければ、作成している。 -->
<p tal:condition="not:exists:item/temporary.txt">
 <a tal:content="nocall:python: item.manage_addDocument('temporary.txt', 'temporary.txt')"
 href="">
 作成
 </a>
</p>



<a 
target="_brank"
href="./0/keywords.txt/manage_main"
tal:attributes="href python: item.getId() + '/temporary.txt/manage_main'"
tal:condition="exists:item/temporary.txt"
>
案件KW
</a>
</td>

<td>
<a 
target="_brank"
href="./0/keywords.txt/manage_main"
tal:attributes="href python: item.getId() + '/keywords.txt/manage_change_history_page'"
>
更新履歴
</a>
</td>

  </tr>
</table>
```
require.jsで複数の設定ファイルをロードする

## 問題

[require.js](http://requirejs.org/)のロードは以下のようにシンプルに書けます。

```html:SnippetLoadRequireJsSimple.html
<script src="js/require.js" data-main="js/foo"></script>
```

`js/require.js`に対して`js/foo.js`を設定ファイルとして指定しているわけですが、
この書き方をすると、複数の設定ファイルを読み込むことができません。

例えばhtml内に別のhtmlをロードする必要があったとして、それぞれのHTMLに上記のようなロード処理があると、後に読まれたほうの記述が無視されます(require.jsが重複ロードされることになるため)。

## 対策

require.jsと設定ファイルを別の`<script>`タグでロードするようにすることで、複数の設定ファイルをロードできます。

```html:SnippetLoadRequireJsIndividual.html
<!-- ロードする側のhtml -->
<script src="js/require.js"></script>
<script src="js/foo.js"></script>

<!-- ロードされる側のhtml -->
<script src="js/require.js"></script>
<script src="js/bar.js"></script>
```
関連のある文章を見つける

実践 機械学習
の3章まで来たのでメモ代わりに書いておこうかと思います。
3章では関連のある文章を見つけます。
ちなみにこの本、章が進むに連れて訓練用データが取得しにくくなります。
初版なので仕方ないですが、Twitterの投稿取得とかもう鬼畜レベルに難しいです。(データ集めが)Twitterは規制が厳しいので大変です。

具体例を示すと、Yahoo知恵袋,プログラミング専門のQ&Aサイトteratail
などに投稿された文章データを取得し、それらをグループ分けします。
文章から抽出された特徴ベクトルをグループ分けする手法は多く存在しそれらは下記の2つの手法どちらかに該当します。
/ フラットクラスタリング
/ 階層的クラスタリング
この本の3章で扱っているクラスタリング手法は前者のフラットクラスタリングであります。
両者ともwikipediaでは該当する情報はありませんでした。マニアックな手法なのでしょうか。

今回利用したデータですが、下記リンクからダウンロードできます。(登録必須)
http://mlcomp.org/datasets/379
日本語でもやってみたかったのですが、MeCabの関係で諦めました(インストール出来なかった)

下のコードで求めているのは下記文章に類似しているものです。
Disk drive problems. Hi, I have a problem with my hard disk.
After 1 year it is working only sporadically now.
I tried to format it, but now it doesn't boot any more.
Any ideas? Thanks.
結果ですが私の環境だときちんと動作しました。
下記写真が近いようです。

![スクリーンショット 2016-03-05 11.54.35.png](https://qiita-image-store.s3.amazonaws.com/0/116054/de8f5c17-5323-3b9e-a75a-bcc61c8f8ef8.png)


```py:ch02.py
import sklearn.datasets
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
import scipy as sp
import sys
import nltk.stem

MLCOMP_DIR = "" #ダウンロードしたデータのパス

groups = ['comp.graphics',
		'comp.os.ms-windows.misc',
		'comp.sys.ibm.pc.hardware',
		'comp.sys.mac.hardware',
		'comp.windows.x',
		'sci.space']

test_data = sklearn.datasets.load_mlcomp("20news-18828", "test", mlcomp_root=MLCOMP_DIR)
train_data = sklearn.datasets.load_mlcomp("20news-18828", "train", mlcomp_root=MLCOMP_DIR, categories=groups)

english_stemmer = nltk.stem.SnowballStemmer('english')

class StemmedTfidfVectorizer(TfidfVectorizer):

    def build_analyzer(self):
        analyzer = super(TfidfVectorizer, self).build_analyzer()
        return lambda doc: (
        	english_stemmer.stem(w) for w in analyzer(doc))

vectorizer = StemmedTfidfVectorizer(min_df=10, max_df=0.5,
									stop_words='english', decode_error='ignore')
vectorized = vectorizer.fit_transform(train_data.data)
num_samples, num_features = vectorized.shape
print("#samples: %d, #features: %d" % (num_samples, num_features))

num_clusters = 50
km = KMeans(n_clusters=num_clusters, init="random", n_init=1, verbose=1)
km.fit(vectorized)
print(km.labels_)
print(km.labels_.shape)

new_post = """Disk drive problems. Hi, I have a problem with my hard disk.
After 1 year it is working only sporadically now.
I tried to format it, but now it doesn't boot any more.
Any ideas? Thanks."""
new_post_vec = vectorizer.transform([new_post])
new_post_label = km.predict(new_post_vec)[0]

similar_indices = (km.labels_==new_post_label).nonzero()[0]
similar = []
for i in similar_indices:
	dist = sp.linalg.norm((new_post_vec - vectorized[i]).toarray())
	similar.append((dist, train_data.data[i]))

similar = sorted(similar)
print(len(similar))

show_at_1 = similar[0]
show_at_2 = similar[len(similar)/2]
show_at_3 = similar[-1]
print(show_at_1)
print(show_at_2)
print(show_at_3)
```
Slackでボイスコール（新機能）

![slack-voice-call-in-session.jpg](https://qiita-image-store.s3.amazonaws.com/0/115179/6e1814e2-8755-139e-f4bf-da04ede01ddd.jpeg)
#slackの設定
slackから
> Team Settings > Settings > Calls

を開き、 

- [x] Enable Calls for this team

にチェックをつけて保存します。
#slackbotからのメッセージ
すると、「slackbot」から下記のメッセージが届きます。

![msg-from-slackbot-on-voicechat.jpg](https://qiita-image-store.s3.amazonaws.com/0/115179/67846e4d-47c2-6c54-d00b-d9279eb7d8e9.jpeg)

#ボイスコール・アイコンの追加
同時に、slackデスクトップ・アプリの右上に新しいアイコンが追加されます。
![new-voicechat-icon.png](https://qiita-image-store.s3.amazonaws.com/0/115179/6cfe3093-b881-5267-b095-73a9ff6ec851.png)

#注意点
slackのボイスコールはスマートフォン・アプリにはまだ対応してません。
**Currently on Mac and Windows desktop apps and in Chrome; coming soon to mobile!**
ダンプファイルをMySQLにインポートする

MacのローカルのMySQLにインポートしたい。

インポートしたいファイルのディレクトリに移動して

```
$ mysqldump -u (ユーザー) -p (DB名) < (ファイル名)
```

するとパスワードを聞かれるので入力するだけ。

はじめにディレクトリ移動しなくても

```
$ mysqldump -u (ユーザー) -p (DB名) < (ディレクトリ)
```

でもいい
iOS Simulatorで"The operation couldn’t be completed. (OSStatus error -600)"

### 現象
XcodeでビルドターゲットをシミュレータにしてRunすると突然

``` bash
The operation couldn’t be completed.
(OSStatus error -600)
```
のアラート
### 原因
``` bash
$ macerror -600
Mac OS error -600 (procNotFound): no eligible process with specified descriptor
```
前回プロセスが正常に終了しなかったのが原因。
そう言えば昨日ChromeがクラッシュしてMacが強制ログアウトした。
### 解決策
シミュレータ再起動やMac再ログインでも改善せず。
結局Mac再起動で解決。
Chrome の DeveloperTool のテーマを黒に変えよう！

デベロッパーツールの標準機能でテーマを変更できるようになってました :flushed: 
標準機能なので、特にエクステンションなどは不要です！

現状は `Default`　と `Dark` のみとなります。

それ以外のテーマを適用したい場合は、以下のやり方で変更することができます。
[ChromeデベロッパーツールでMonokaiテーマ（暗色系テーマ）を利用する方法](http://nelog.jp/monokai-chrome-developer-tools)

※ バージョン 49.0.2623.75 (64-bit) で動作確認しています。

## 見た目

![]
(https://qiita-image-store.s3.amazonaws.com/0/9760/9adb564f-09ad-a153-d1cf-d9c1a8f1920a.png)

## やり方

1. DevTool を開く
2. Settings (F1) を開く
3. General > Appearance > Theme を `Default` から `Dark` に変更する

![](https://qiita-image-store.s3.amazonaws.com/0/9760/210b9e09-65b5-ea62-1998-537f8137bbb8.png)

めちゃくちゃ簡単ですね。
ぜひ試してみてください！ :laughing:
ES6とCoffeeScript

Coffeeで`const`とか`let`が使えるか調べてみた。

## 結論

使えない。

正確に言うと「`var`に変換される`const`なんか無意味だ」と言って作者が実装しない。

- https://github.com/jashkenas/coffeescript/issues/2393 （短い議論）
- https://github.com/jashkenas/coffeescript/issues/3162 （長い議論）

> That's precisely the sort of useless writing (especially when discarded by the runtime) that we're trying to avoid with CoffeeScript.

## 感想

Windows 8.1のサポートが切れるまでは、`const`はBabelのアノテーションになりそう。（PCがターゲットのプロジェクトは）
ESP8266 > ファイルスコープstatic変数 > noinit 効果なし

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

kMaxnum_MessageCount 300 でも watchdog が発動している。

watchdog はマイコン(以下 uC)がきちんと動いているか確認する機能である。
マイコンの処理がスタックしている場合は watchdog が発動して uCがリブートする。

s_messageList[]を宣言する場合、そのサイズが多いと「初期化時に watchdog の待ち時間を超えてしまう」現象が発生する。

そういう場合の対処法として、「初期化処理をしない」という`__no_init`なりの修飾子がある。

Arduinoでは以下で記載があった。
http://forum.arduino.cc/index.php?topic=41088.0


実際の書き方は以下。

```
static message_t s_messageList[kMaxnum_MessageCount] __attribute__ ((section(".noinit")));; 
```

上記で実行してみたところ、やはり watchdog が発動しているようだ。

何か他の部分で問題があるようだ。


kMaxnum_MessageCount 200 では問題ない。

穴にはまっているので掘るのをやめるが、メモリ構造を調べないといけない。
python3x: local variable 'some_var' referenced before assignment inside of a class

学校の授業で<a href="http://composingprograms.com/pages/25-object-oriented-programming.html#objects-and-classes" target="_blank">Objected-Oriented-Programming</a>について勉強したので試しに簡易クラスを作ってみたのだが、どうも思うように動かない。

```
class Student:
	def __init__(self, name, brain_size=10, energy=10):
		self.name = name
		brain_size = 10
		self.energy = 10

	def study(self):
		brain_size += 1
		energy -= 1
		print("your brain has gotten bigger by 1")

	def flunk(self):
		brain_size -= 1
		energy -= 1
		print("you brain has gotten smaller by 1")

		if brain_size == 0:
			print("your college life is over")
		else:
			print("Ah! I did it again")

	def eat(self):
		energy += 1
		print("can't eat anymore")

		if energy == 0:
			print("your life is over")
>>> tim = Student('tim')
>>> tim.name
'tim'
>>> tim.energy
10
>>> tim.study()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "ex.py", line 8, in study
    brain_size += 1
UnboundLocalError: local variable 'brain_size' referenced before assignment
```

`study()`を呼ぶこと自体に関しては何も問題はないと思われる。ただ`func study`が`energy`を正しく認識してくれない。クラスでもちゃんと`parameter`に入れたし昨日GSIに言われたとおりに`__init__`の中にも入れた。mmmmmh

そこで見つけたのが[この記事](http://stackoverflow.com/questions/19338983/local-variable-referenced-before-assignment-inside-of-a-class)。aha!クラス内の関数は`self`しか受け取ると命じられてないのに`energy`変数が渡されてきて「へっ？」ってなってることをこのエラーは伝えたかったのか。。。。

と思って試したが、

```
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: study() missing 2 required positional arguments: 'brain_size' and 'energy'
```

当たり前だよな。しかもこのやり方を使うと`study()`を呼ぶたびに毎回その時のvalueが入っている`parameter`を`study`に渡さないといけないというとんでもない不都合が生じてしまう。。

そこで気づいたのが上記リンクの以下のコメント:

>_It should be either self.NumRid += 1 if it is an instance variable, or Person.NumRid += 1 if it is a class variable._

これだ！と思い以下のようにコードを編集。

```
class Student:
	def __init__(self, name, brain_size=10, energy=10):
		self.name = name
		self.brain_size = 10
		self.energy = 10

	def study(self):
		self.brain_size += 1
		self.energy -= 1
		print("your brain has gotten bigger by 1")

	def flunk(self):
		self.brain_size -= 1
		self.energy -= 1
		print("you brain has gotten smaller by 1")

		if brain_size == 0:
			print("your college life is over")
		else:
			print("Ah! I did it again")

	def eat(self):
		self.energy += 1
		print("can't eat anymore")

		if energy == 0:
			print("your life is over")
>>> tim = Student('Tim')
>>> tim.study()
your brain has gotten bigger by 1
```

これで問題なく動く！
Qiitaでの記事の投稿はMarkdownで簡単にレイアウトできる


#■Qiitaでの記事の投稿

Qiitaに記事を投稿する際は、Markdownによって簡単に見やすい形にレイアウトを調整できます。
しかし、投稿画面の本文に文字を記入する前は、プレビュー画面でMarkdown記法のヒントが見えるのですが、本文に文字を記載した後はヒントは消えてしまいます。

⬇️　プレビュー画面で見れるMarkdownのヒントを載せておきました。
![10.21.11.png](https://qiita-image-store.s3.amazonaws.com/0/116157/5d8bfb60-1f89-8662-31ff-1f48ff406498.png)

実は本文記載欄の右上にある？マークからいつでも確認することができます。

![図1.png](https://qiita-image-store.s3.amazonaws.com/0/116157/5775dddb-9c04-e393-9ed7-cc6fa4985354.png)

？マークを押すと以下↓のようなウィンドウが開きます。その中に**[もっと詳しく知りたい方はこちら](http://qiita.com/Qiita/items/c686397e4a0f4f11683d)** というリンクがあり、Qiita公式のMarkdown記法 チートシートを見ることができます。ここにはより詳細な使い方が載っているので、少しずつ試してみようと思います。

![図2.png](https://qiita-image-store.s3.amazonaws.com/0/116157/5e80c65a-90c5-b6e2-61ce-1204a8021cb0.png)



#■ちなみに Markdown とは
Markdownは軽量のマークアップ言語のひとつです。
詳しいことは以下を参照してみてください。

[Markdown ( from wikipedia )](https://ja.wikipedia.org/wiki/Markdown)
Markdown（マークダウン）は、文書を記述するための軽量マークアップ言語のひとつである。本来はプレーンテキスト形式で手軽に書いた文書からHTMLを生成するために開発されたものである。しかし、現在ではHTMLのほかパワーポイント形式やLATEX形式のファイルへ変換するソフトウェア（コンバータ）も開発されている。各コンバータの開発者によって多様な拡張が施されるため、各種の方言が存在する。
Elasticsearchのメモリ（HEAP）周りのメモ

自分へのメモ書きです。

## 親父の小言

* `ES_HEAP_SIZE` は メモリ搭載量の半分を割り当てろ
    * [Heap: Sizing and Swapping#_give_half_your_memory_to_lucene](https://www.elastic.co/guide/en/elasticsearch/guide/current/heap-sizing.html#_give_half_your_memory_to_lucene)
* `heap_used_percent` が常に75%越えてたら、そのうちやられるぞ
    * [Monitoring Individual Nodes#_jvm_section](https://www.elastic.co/guide/en/elasticsearch/guide/current/_monitoring_individual_nodes.html#_jvm_section)
* メモリを気にするなら`doc_values`は`true`にしておけ。でも2.xからはデフォルトで有効だからあまり気にするな
    * [Mapping changes#_fielddata_formats](https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking_20_mapping_changes.html#_fielddata_formats)
    * [doc_values](https://www.elastic.co/guide/en/elasticsearch/reference/current/doc-values.html)
    * [Doc Values](https://www.elastic.co/guide/en/elasticsearch/guide/current/doc-values.html)
ESP8266 > ファイルスコープstatic変数のメモリ制限に遭遇 > .bss / Flash Sizeと関連

```txt:動作確認
ESP-WROOM-02
```

関連 [esp8266_160220_BYOP @ github](https://github.com/yasokada/esp8266_160220_BYOP)

以下の構造体を作成

```
// Message structure
typedef struct tag_message_t {
  String senderSerial; // serial number of the sender
  String senderName; // name of the sender
  String receiverName; // name of the receiver
  String message;
  bool isSecret; // sercret message or normal message
} message_t;
```

それをファイルスコープstatic変数に定義しようとした。

```esp8266_160221_msgStorageLib.ino
...
static const int kMaxnum_MessageCount = 1000; 

static message_t s_messageList[kMaxnum_MessageCount];
...
```

以下のエラーが出る。
kMaxnum_MessageCount を500にすると問題ない。
ファイルスコープstaticのメモリ制限があるのだろうか。
Flashの4Mのうち、どれくらいを使えるのだろうか。

```
Arduino：1.6.6 (Windows 8.1), マイコンボード："Generic ESP8266 Module, Serial, 80 MHz, 40MHz, DIO, 115200, 512K (64K SPIFFS), ck, Disabled, None"

c:/users/xxx/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: address 0x3fffcc18 of C:\Users\xxx\AppData\Local\Temp\builda1ccef97ce44419182068709a04c30dc.tmp/esp8266_160220_BYOP.ino.elf section `.bss' is not within region `dram0_0_seg'

c:/users/xxx/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: address 0x3fffcc18 of C:\Users\xxx\AppData\Local\Temp\builda1ccef97ce44419182068709a04c30dc.tmp/esp8266_160220_BYOP.ino.elf section `.bss' is not within region `dram0_0_seg'

collect2.exe: error: ld returned 1 exit status

exit status 1
コンパイル時にエラーが発生しました。

  This report would have more information with
  "コンパイル中の詳細な出力を表示する"
  enabled in File > Preferences.
```

> section `.bss' is not within region `dram0_0_seg'

.bssセクション関連っぽい。

https://en.wikipedia.org/wiki/.bss
https://en.wikipedia.org/wiki/Code_segment

Arduino IDE で Flash Size を増やせば回避できる。でも、(将来の自分も含めた）ソース利用者に「設定をXXしてください」といちいち説明しないといけなくなるので、512Kで動くようにしておく（メッセージ上限数を500未満にしておく）。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/47d8dd7b-a1cf-d0fb-b456-5af5fbbbbc16.png)

そのうち 512K ではどうしてもできないことが出てくるかもしれない。その時は仕方ない。

<hr>
kMaxnum_MessageCount 500 だと watchdog が発動してしまうという別の問題が出てきた。
Pythonでシェフの気まぐれサラダ

#はじめに
シェフの気まぐれサラダを食べたくなったので作ってみた。
といっても凄いことは出来ないので、楽天レシピのAPIを叩いて上位ランキングに上がっているサラダのレシピを入手するだけです。
サラダを作ってくれる訳ではありません。
#やること
APIを叩くためにrequestsライブラリをインストールします。

```
$pip install requests
```
楽天APIに登録して、諸々を入手します。
後は[楽天レシピAPI](http://webservice.rakuten.co.jp/api/recipecategoryranking/)に入出力の形式が書かれているのでそれに従ってAPIを叩きます。
#ソースコード
以下にソースコードを載せます。

```shef.py
#-*- coding:utf-8 -*-

import requests
import csv
import sys,codecs
import re,pprint
import random

sys.stdout = codecs.getwriter("utf-8")(sys.stdout)

def pp(obj):
    pp = pprint.PrettyPrinter(indent=4,width=160)
    str = pp.pformat(obj)
    return re.sub(r"\\u([0-9a-f]{4})", lambda x: unichr(int("0x"+x.group(1), 16)), str) 

category_list={"ポテト":"18-415","春雨":"18-416","大根":"18-417","コールスロー":"18-418","かぼちゃ":"18-419","ごぼう":"18-420","マカロニ":"18-421","シーザー":"18-187","コブ":"18-423","タラモ":"18-424","スパゲティ":"18-189","ホットサラダ":"18-190","トマト":"18-184-943"}


gen_input = raw_input("Input Key Words >> ")

if category_list.has_key(gen_input):
    print(pp(u"かしこまりました。"))
    categoryid = category_list[gen_input]
elif gen_input == "お任せ" or gen_input == "おまかせ":
    print(pp(u"おまかせですね、かしこまりました。"))
    categoryid = random.choice(category_list.values())
else:
    print(pp(u"取り扱っておりません。"))
    exit(1)

url = "https://app.rakuten.co.jp/services/api/Recipe/CategoryRanking/20121121?"

st_load= {
        "categoryId":categoryid,
        "applicationId":"アプリケーションID",
       }
r = requests.get(url,params = st_load)

res = r.json()

recipe = res["result"][random.randint(0,len(res["result"])-1)]

print(recipe["recipeTitle"])
print(recipe["recipeUrl"])

```

実行するとレシピのタイトルとURLを表示してくれます。
後はサラダを自分で作るだけです。
AndroidStudioでのJavaDocsの生成

# JavaDocsの生成

![javadocs.png](https://qiita-image-store.s3.amazonaws.com/0/63450/d2ca5340-002b-b14f-5e71-81c2da8edf12.png)

![javadocs002.png](https://qiita-image-store.s3.amazonaws.com/0/63450/0281bbbf-790c-8f5b-0967-45b8b4550a25.png)

> -encoding UTF-8 -charset UTF-8 -bootclasspath /Users/ユーザ名/Library/Android/sdk/platforms/android-バージョン番号/android.jar
Symfony2, Doctrine, MySQL での大量データ処理時にメモリ量を一定に保つTips

## 目的

* バッチ処理などで大量のデータを処理する場合、データが増えてもメモリ使用量が一定になるようにしておきたい
    * データの増加に伴ってメモリ使用量が増えると、そのうち処理できなくなるので

## Tips

### 1. Doctrine2の`Iterating results`を使用する

* [Batch Processing - Doctrine Object Relational Mapper (ORM)](https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/batch-processing.html#iterating-results)
* これによって、ハイドレーション(DBの結果をオブジェクトなどにマッピングする処理)時のメモリ使用量を抑えることができる
    * 取得してきたすべての結果セット分のオブジェクト生成を行わず、1つずつの生成になる
* 定期的に`clear`（もしくは`detach`）メソッドを呼ぶのも忘れずに
    * こちらはDoctrineが管理しているオブジェクトの情報を解放する

### 2. DBからは一度に全件を取得せずに、ある程度の塊として小分けで取得する

* `1.` の対応だけでは、DBの結果セットはすべて呼び出し側のメモリ（※1）にのってしまう
* よってデータを小分けに取得する

* ※1 [PHP: バッファクエリと非バッファクエリ - Manual](http://php.net/manual/ja/mysqlinfo.concepts.buffering.php) こちらの設定にもよる
    * `libmysqlclient` を使用している場合は、変数に入れるまで、phpから見たメモリ使用量に加算されない（`memory_get_usage()`にも加算されないし、`memory_limit`にも引っかからない）が、実際そのプロセスのメモリ使用量は増えるので注意すること

#### 2-1. `setMaxResults`, `setFirstResult` を使う

* いわゆる `LIMIT`, `OFFSET` を使う
* しかし、大量のデータだと後半のデータに行けば行くほど取得するのに時間がかかる問題もある

#### 2-2. `id BETWEEN` を使う

* `WHERE id BETWEEN :start AND :end` で取得するようにすれば、インデックスをうまく使えるので、後半の取得になろうと一定のスピードで取得できる
* しかし、idに歯抜けがあると、実際にはデータがない無駄なループが回ってしまう可能性がある
* どちらを使うかはケースバイケース？

### 3. `Logger` に気をつける

* DoctrineBundle のデフォルトでは `kernel.debug = true` だと、SQL呼び出しの度にそのクエリを記録するのでメモリ使用量が線形に増加してしまう、 よってコマンドの場合 `--no-debug` で実行すること
* ログの記録を常にやめたいのであれば http://stackoverflow.com/a/10913115 にある方法で
`SQLLogger` に `null` を入れておく
* その他、HTTP通信するライブラリなどで、通信の詳細をLoggerに記録する場合もあるので、そういうところも必要に応じて設定を変更する

## [2018/10/29追記] ライブラリにしました

下記の2点を自動で行うジェネレータのライブラリを作りました。 
https://packagist.org/packages/kalibora/chunk-generator

* Doctrine2の`Iterating results`を使用する
* `id BETWEEN` を使って、DBからは一度に全件を取得せずに、ある程度の塊として小分けで取得する

```php
use Kalibora\ChunkGenerator\ChunkGeneratorBuilder;

$fooRepository = $manager->getRepository(Foo::class);
$qb = $fooRepository->createQueryBuilder('f');
$gen = ChunkGeneratorBuilder::fromDoctrineQueryBuilder($qb)->setChunkSize(200)->build();

// Iterate all foo entity. Fetch 200 records at a time and clear it.
foreach ($gen() as $foo) {
    echo $foo->getVar(), PHP_EOL;
}
```

こういう感じで使えます。
linux よく使うコマンド1（備忘録）

### ユーザ作成
```
[root@HOGE~]# useradd devel
[root@HOGE ~]# passwd devel
ユーザー devel のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: 全ての認証トークンが正しく更新できました。
```

### ユーザ確認
```
[root@HOGE ~]# cut -d: -f1 /etc/passwd
root
bin
```
### 権限付与
```
 chmod o+x /home/devel
[devel@HOGE ~]$ vi .bashrc
 alias sudo='sudo -E env PATH=$PATH '

```

### 検索
```
find /探したいディレクトリ -name 検索キーワード
find . -name "*.v" -ls
find . -type f | xargs grep hoge | less
find . -type f | grep -v .svn | xargs grep hoge | less
```

### yumが古くてインストールできない時
```
[root@HOGE ~]# yum -y install zsh
Downloading Packages:
http://centos.mirror.secureax.com/6.5/os/x86_64/Packages/zsh-4.3.10-7.el6.x86_64.rpm: [Errno 12] Timeout on http://centos.mirror.secureax.com/6.5/os/x86_64/Packages/zsh-4.3.10-7.el6.x86_64.rpm: (28, 'Operation too slow. Less than 1 bytes/sec transfered the last 30 seconds')
Trying other mirror.
http://ftp.iij.ad.jp/pub/linux/centos/6.5/os/x86_64/Packages/zsh-4.3.10-7.el6.x86_64.rpm: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404"
Trying other mirror.
http://ftp.jaist.ac.jp/pub/Linux/CentOS/6.5/os/x86_64/Packages/zsh-4.3.10-7.el6.x86_64.rpm: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 503"
[root@HOGE ~]# yum clean all
Loaded plugins: fastestmirror, priorities, refresh-packagekit, security
Cleaning repos: base extras updates
Cleaning up Everything
Cleaning up list of fastest mirrors
[root@HOGE ~]# yum -y install ftp

```

### zshに変更
```
[root@HOGE ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh
/bin/zsh
[root@HOGE ~]# usermod -s /bin/zsh devel
[root@HOGE ~]# su devel
[devel@HOGE ~]$ echo $SHELL
/bin/zsh
```
EmbulkのTimestampが遅すぎて死にそうなのでFilterを作ったよ


サーバで収集したログファイルをローカルで解析したくて、[Embulk](http://www.embulk.org/docs/)を使ってみたんですよ。
テストファイルを食わせてみたら中々良い感じに動いてくれて、出力を変更するだけでCSVとかElasticsearchに出力できて、これは（・∀・）ｲｲ!!と、そう思ってたんですね。
で、650MBくらいの本番のファイルを食わせたら、終わらないんですよ。ちょっと休憩して戻ってきても、まだ終わってない。
入力ファイルを正規表現でパースしていたので遅いのかと思ったのですが、調べて見ると違うようで。どうも日時文字列をTimestampに変換するのが遅いみたいなんですね。[issue](https://github.com/embulk/embulk/issues/145)も切られているので、有名な問題なんですかね？
なんか改善される気配が無い (JRubyの改善待ち？) ので、[SimpleDateFormat](http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html)で変換するFilterを作ってみました。

[embulk-filter-timestamp_hs](https://github.com/arenahito/embulk-filter-timestamp_hs)

# インストール
```Sh
$ embulk gem install embulk-filter-timestamp_hs
```

# 設定
通常はParserでtypeをtimestampにしますが、timestamp_hsを使用する場合はstringとします。
stringで取り込んだ日時文字列を、Filterでtimestampに変換します。このとき、日時文字列のformatはRuby形式では無く、[SimpleDateFormat](http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html)形式としてください。

```yaml:config.yml
in:
  type: file
  path_prefix: applog
  parser:
    type: csv
    delimiter: ","
    columns:
    - {name: standardTimestamp, type: timestamp, format: '%Y-%m-%d %H:%M:%S.%L'}
    - {name: highSpeedTimestamp, type: string}

filters:
  - type: timestamp_hs
    default_timezone: 'UTC'
    column_options:
      highSpeedTimestamp: {format: 'yyyy-MM-dd hh:mm:ss.SSS'}
```

# 実行
入力ファイルを作成して、embulk previewで確認してみます。

```text:applog.csv
2016-01-01 10:02:30.100,2016-01-01 10:02:30.111
2016-01-02 10:02:30.200,2016-01-02 10:02:30.211
2016-01-03 10:02:30.300,2016-01-03 10:02:30.311
2016-01-04 10:02:30.400,2016-01-04 10:02:30.411
2016-01-05 10:02:30.500,2016-01-05 10:02:30.511
```

```sh
$ embulk preview config.yml
```

```sh:output
+-----------------------------+------------------------------+
| standardTimestamp:timestamp | highSpeedTimestamp:timestamp |
+-----------------------------+------------------------------+
| 2016-01-01 10:02:30.100 UTC |  2016-01-01 10:02:30.111 UTC |
| 2016-01-02 10:02:30.200 UTC |  2016-01-02 10:02:30.211 UTC |
| 2016-01-03 10:02:30.300 UTC |  2016-01-03 10:02:30.311 UTC |
| 2016-01-04 10:02:30.400 UTC |  2016-01-04 10:02:30.411 UTC |
| 2016-01-05 10:02:30.500 UTC |  2016-01-05 10:02:30.511 UTC |
+-----------------------------+------------------------------+
```

# 性能
日時文字列だけで100万行のファイルを処理して、処理時間を比較してみました。

- OS: Windows 10
- CPU: Core i5 2.67GHz
- Embulk: 0.8.6

Embulk標準: 240.910秒
timestamp_sh: 1.902秒

ちゃんと早くなってます。
[Embulk](http://www.embulk.org/docs/)が改善されたら不要となりますが、それまでは、これでなんとかなりそうです。
EntityFrameworkのInclude拡張ライブラリ

EntityFrameworkで関連エンティティをロードするInclude()を拡張するライブラリを作りました。
[EntityFramework.Include](https://github.com/deyunote/EntityFramework.Include)

NuGetからインストールできます。
https://www.nuget.org/packages/EntityFramework.Include

```
PM> Install-Package EntityFramework.Include
```

READMEを見れば使い方はわかると思いますが、Includeで関連エンティティのコレクションを読み込むとき、フィルターで条件を指定して読み込む機能を実装しています。

##内部で何をしているか

以下のようなエンティティがあったとき

```csharp
public class Parent
{
    public int Id { get; set; }

    public int Age { get; set; }

    [NotMapped]
    public int ChildrenCount { get; set; }

    public List<Child> Children { get; set; } = new List<Child>();
}

public class Child
{
    public int Id { get; set; }

    public int Age { get; set; }
}
```

このような操作では

```csharp
context.ParentSet.Include(p => p.Children, p => p.Children.Take(10).ToList())
                 .Include(p => P.ChildrenCount, p => p.Children.Count)
                 .ToListWithInclude();
```

[TypeBuilder](https://msdn.microsoft.com/ja-jp/library/system.reflection.emit.typebuilder(v=vs.110).aspx)で`Parent`を継承したclassを作り
式木をこねて

```csharp
Select(p => new Parent_継承()
                {
                    Id = p.Id,
                    Age = p.Age,
                    Children = p.Children.Take(10).ToList(),
                    ChildrenCount = p.Children.Count
                })
```

相当のExpressionを組み立てて`ToList()`し
最後にParentにキャストしてList<Parent>を返しています。
**返ってきたエンティティたちはDetached状態なので注意が必要です。**

バグレポートだったりほしい機能を[作者Twitter](https://twitter.com/deyu_note)に投げてくれるとうれしいのでよろしくお願いします。
Circle CIを使用するためのコード解説

Circle CIのサイトでsign upし、githubの自分のrepositoryとsyncした後（別に後でなくても良いけど）、以下2つのファイルを(自分で)作成する。

```
1. アプリケーションディレクトリ/circle.yml
2. アプリケーションディレクトリ/circle/deploy_production.rb
```

## 1. アプリケーションディレクトリ/circle.yml
[Original Document (circle.yml)](https://circleci.com/docs/configuration)
#### 用途
- 普通はCircle CIのアカウントをセットアップするだけでCircle CIがアプリケーションの設定を理解してくれて、自動でテストなどを動かしてくれる
- がしかし、設定をすることで、明示的にCircle CIが何をすべきか指示することもできる

#### スクリプト例

```lang:circle.yml
dependencies: #「アプリケーションで使われている言語特有のセッティングのための」
  pre: #「'dependencies'と書かれていることでCircle CIが勝手にコードから推測してくれて実行する作業の前に」
    - sudo pip install awscli #「このコマンドを実行しろ(bundle installとか書かれていること多そう。)」

(buildが成功した後のみに起こる)
deployment: #「指定したウェブサーバーにディプロイしろ」
  production: # (セクション名)
    branch: 'deploy/production' #「buildに成功したものの中で、この名前とマッチする(最初の)branchをサーバーでrunしろ」
    commands: #「このコマンドを実行しろ」
      - ./scripts/circle/deploy_production.rb:　#「このファイルを実行しろ」
          timeout: 300 #「もし上記コマンドでこの秒数の間何も出力がなかった場合、このジョブを殺せ」
```

#### その他気をつける
- 上から順番に読まれて実行される

## 2. アプリケーションディレクトリ/circle/deploy_production.rb

####用途
Circle CIがAWSサーバ（このコード＆アプリケーションのコードを置くところ）にsshでアクセスできるようにするための認証コード

####上記意味解説
- Circle CIはgithubから所望コードをbuildし、テストする役割を持つと同時に、そのテストして確かめたコードを、本番サーバー(eg. AWS)にbuildして、置く、という役割を持つ
- 本番サーバーにCircle CIをアクセスさせることになるのだが、本当に「Circle CIがアクセスしていますよ」ということを認証させないといけない
- しかしながら、Circle CIはある１つのIPアドレスにおいて動いているわけではなく、複数のIPアドレスに点在しており、しかもその数は多い。
- もしCircle CIのIPアドレスが１つなど小さい数の固定数であれば、最初からそのIPアドレスをサーバーに登録しておいて、認証すればいいが、IPアドレスが複数多数あり、そんな訳にはいかないので、以下の認証するためのスクリプトが必要
- 以下の認証するためのスクリプトは、端的に言えば、サーバーにアクセスしようとしているCircle CIのIPアドレスを取得し、(サーバー側でマニュアルに認証し？)、アクセスを許可した後、コードをbuildするなどの処理が終わった後に、そのアクセスを再び閉じる、というコード

####前提
- 以下は普通にrubyのsyntax
- `で囲むとcommand lineの意味となる
 
```lang:circle/deploy_production.rb
ENV['AWS_DEFAULT_REGION'] = 'ap-northeast-1'

ip_addr = `curl -s icanhazip.com` #icanhazip.comはIPアドレスを取得するためのweb site
if ! ip_addr
  ip_addr = `curl -s ifconfig.me`
end
ip_addr = ip_addr.chomp
security_group = 'セキュリティグループの番号'

code = <<EOS #ブロックで記述できるヒアドキュメントというrubyの書き方。以下を変数codeに代入
set -ex

trap "aws ec2 revoke-security-group-ingress --group-id #{security_group} --protocol tcp --port 22 --cidr #{ip_addr}/32" 0 1 2 3 15 #アクセスを閉じる。trapと書いてあると下記のコードの後に実行という意味だそうな
aws ec2 authorize-security-group-ingress --group-id #{security_group} --protocol tcp --port 22 --cidr #{ip_addr}/32
bundle exec cap production deploy
EOS
`#{code}`

if $? != 0 #成功であれば$?に0が入る。つまり失敗であったらraiseしてねと言っている
  raise :some_exception
end
```
jQuery 3

**jQuery の使い方**
- DOMを扱って　インタラクティブな機能をつくる
- Ajax リクエスト
- アニメーションをつくる

**I 基本的な変更**
**jQuery　の新しい機能**
for...of loop
jQuery コレクション　DOM　エレメントの扱いかた

for...of loop (ECMAScript 2015)(a.k.a ECMAScript 6)
Array, Map, Set 



1.【　for(var .... of $.....s )　】
従来

```
var $input = $('input');

for (var i = 0; i < $inputs.length; i++) {
  $inputs[i].id = 'input-' + i;
}
```

jQuery 3 の書き方

```
var $inputs = $('input'); 
var i  = 0;
for (var input of $inputs) {
  input.id = 'input-' + i++;
}
```

-----
2.【　$.GET() and $.POST()　】

```
$.get([settings])
$.post([settings])
```

$.ajax()は違う書き方をする
-> 
http://api.jquery.com/jquery.ajax/#jQuery-ajax-settings

-------
下のコードの場合　POSTリクエストは送られずGET リクエストが送られる
$.get({
  url: 'https://www.audero.it',
  method: 'POST' // this property is ignored
});

-------


3.【IE 10 アニメーションフレームのサポート】

requestAnimationFrame　　API
http://caniuse.com/#feat=requestanimationframe
-------

4.【unwrap() メソッド】

コード例

```
unwrap([selector])
```

親エレメントにマッチする　セレクタ文字列をパスすることができる

-------

**II ビヘイビア機能の変更**

1.【:visible & :hidden】
zero 幅　and/or 高さ


```index.html
<div></div>
<br />
```

```main.js
console.log($('body :visible').length);

jQuery 1.x , 2.x => 0
jQuery 3 => 2
```
-------

2.【DATA()】
data()メソッド　
Dataset API specification
https://www.w3.org/TR/html5/dom.html#dom-dataset


```index.html
<div id="container"></div>
```

```main.js
var $elem = $('#container'); 

$elem.data({
  'my-property': 'hello'
});

console.log($elem.data());
```

-------
**Deferred Object （jQuery 3の新しい機能）**

Promise オブジェクト
 => Promise/A+ proposal
 https://promisesaplus.com/
 
 公式jQuery 
 https://api.jquery.com/category/deferred-object/


jQuery 1.x & 2.x では　"Deferred Object" にパスする　callback functionは　動かなかった

    => window.onerror がでる
jQuery 3 ではネイティブ Promise オブジェクトによって　使用できる

```
var deferred = $.Deferred();

deferred
    .then(function() {
        throw new Error('An error');
    })
    
    .then(
        function() {
          console.log('Success 1');
        },
        function() {
          console.log('Failure 1');
        }
    )
    .then(
        function(){
          console.log('Success 2');
        },
        function() {
          console.log('Failure 2');
        }
    ); 
deferred.resolve(); 
```
----------------------------------

**SVG DOCUMENTS**

jQuery 3 では SVG ドキュメント　をサポート
しかし、
addClass() と hasClass() で動く

- on() メソッドを使う　　<=　bind(), delegate(), live() 
- off() メソッド   <=  unbind()

bind()  メソッド   <=   undelegated(), die() を使う

load(), unload(), error() メソッドを削除


----------------------------------
**III セレクタ**

* width() と height()　の rounding
jQuery 3 では width(), height()  のバグを修正


```
<div class="container">
  <div>My name</div>
  <div>is</div>
  <div>Aurelio De Rosa</div>
</div>
```

```main.js
$('.container div').width() // 33 の値が返る
```

----------------------------------

**WRAPALL()**

-------

What’s New in jQuery 3
http://developer.telerik.com/featured/whats-new-in-jquery-3/
Raspberry Pi をMacでセットアップ忘備録 7 - GPIO液晶の取付

Raspberry PiのiMacを利用したセットアップ忘備録です。

1.  [初期設定](http://qiita.com/PonDad/items/bfb1cc6ddc18ccf08208) 
2. [無線LANと接続](http://qiita.com/PonDad/items/c0f559962d4108774424) 
3. [SFTPと接続](http://qiita.com/PonDad/items/516e0ef5295f47228a5c) 
4. [USBスピーカーと接続](http://qiita.com/PonDad/items/80fb3abebb5adaa7888d)
5. [USBマイクと接続](http://qiita.com/PonDad/items/565f816dc1ebcbe2467e) 
6. [VNCでリモートデスクトップ](http://qiita.com/PonDad/items/232f1aacbef2c4fcb746) 
7. [GPIO接続の小型モニタ取付](http://qiita.com/PonDad/items/6d58b8a58e7ff11ae9cd)　<<

## 環境

- Raspberry Pi2 ModelB （raspbian-wheezy）
- PLANEX 無線LAN子機 (USBアダプター型) GW-USNANO2A (FFP)
- cocopar Raspberry Pi　ラズベリーパイ　に適応する 2.4インチ ディスプレイ　タッチパネル+タッチペン

## 本体への取付

<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00X2JS3I2/pondadamazoz-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41IszPZ57bL.jpg" alt="cocopar Raspberry Pi　ラズベリーパイ　に適応する 2.4インチ ディスプレイ　タッチパネル+タッチペンRaspberry Pi ModelA+/B/B+ も適応 Designed for Raspberry Pi A+,Compatible with Raspberry Pi 2 module B/B+//B Support touch and camera" style="border: none;" /></a>

GPIO端子に差し込む。特にはんだ付けなどは必要ない。

## ドライバのインストール

[Drive the LCD](http://www.spotpear.com/learn/EN/raspberry-pi/Raspberry-Pi-LCD/Drive-the-LCD.html)

上記サイトの`"LCD-show-151102.tar.gz"`よりドライバをダウンロードする。

SFTPを利用してRaspberry Piにアップロードする。（`$ cd /home/pi/` 直下においた）

サイトの説明に沿って解凍実施。

```bash:ssh
$ tar xvf LCD-show-151102.tar.gz
```
ディレクトリに移動。

```bash:ssh
$ cd LCD-show/
```

今回は2.4インチのものなので以下コマンド実施。

```bash:ssh
$ sudo ./LCD32-show
```

あとは自動的に再起動される。

![IMG_8186.jpg](https://qiita-image-store.s3.amazonaws.com/0/47128/19025a8b-f734-525e-c6a1-d5f86a740213.jpeg)

## 参考にさせていただきました

[Raspberry Pi B+用のGPIO液晶買ってみた - えとかみブログ](http://etokami.sblo.jp/article/137823973.html)
Ruby Programmer　認定試験 Gold/Silverの取り方おすすめコース

Rubyに興味のある方へ

Ruby Association Certified Ruby Programmer Silver/Gold version 2.1
取得した際に参考にした資料と勉強方法を公開します。


#Silver 対策
###ⅰ勉強した本
[Ruby技術者認定試験合格教本 Silver/Gold対応　Ruby公式資格教科書] 
(http://www.amazon.co.jp/Ruby%E6%8A%80%E8%A1%93%E8%80%85%E8%AA%8D%E5%AE%9A%E8%A9%A6%E9%A8%93%E5%90%88%E6%A0%BC%E6%95%99%E6%9C%AC-Silver-Gold%E5%AF%BE%E5%BF%9C-Ruby%E5%85%AC%E5%BC%8F%E8%B3%87%E6%A0%BC%E6%95%99%E7%A7%91%E6%9B%B8-%E5%A2%97%E4%BA%95-%E9%9B%84%E4%B8%80%E9%83%8E/dp/4774175676)
-Silverの範囲(ver2.1対応のもの)

[RUBY技術者認定試験 公式ガイド]
(http://www.amazon.co.jp/RUBY%E6%8A%80%E8%A1%93%E8%80%85%E8%AA%8D%E5%AE%9A%E8%A9%A6%E9%A8%93-%E5%85%AC%E5%BC%8F%E3%82%AC%E3%82%A4%E3%83%89-ITpro-BOOKs-%E4%BC%8A%E8%97%A4%E5%BF%A0%E3%83%86%E3%82%AF%E3%83%8E%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%BA/dp/4822234304)

###ⅱWeb問題集
[ミニツク　Ruby技術者認定試験（Silver）対策コース]
(http://www.minituku.net/courses/1049510743/lessons/57884527/drills/775230600?locale=ja)

*ミニツクは2016/06/03現在サービスを停止中です

Silverについては上記ⅰ,ⅱを３周し
書籍に付属している模擬試験で9割以上取れれば
受かると思います。
2.1対応のRuby公式資格教科書はGold取得時も使います。
プログラミングに接する機会の多い人はこれ一冊で十分です。
RUBY技術者認定試験 公式ガイドの方は情報が古いのですが
プログラミング自体にあまり馴染みのない人はこの本からが良いでしょう。

#Gold　対策
###ⅰ参考書籍
[Ruby技術者認定試験合格教本 Silver/Gold対応　Ruby公式資格教科書 ](http://www.amazon.co.jp/Ruby%E6%8A%80%E8%A1%93%E8%80%85%E8%AA%8D%E5%AE%9A%E8%A9%A6%E9%A8%93%E5%90%88%E6%A0%BC%E6%95%99%E6%9C%AC-Silver-Gold%E5%AF%BE%E5%BF%9C-Ruby%E5%85%AC%E5%BC%8F%E8%B3%87%E6%A0%BC%E6%95%99%E7%A7%91%E6%9B%B8-%E5%A2%97%E4%BA%95-%E9%9B%84%E4%B8%80%E9%83%8E/dp/4774175676 "")
-本書籍内のGoldの範囲

[メタプログラミングRuby 第2版](http://www.amazon.co.jp/exec/obidos/asin/4873117437/payforward777-22/)
-試験範囲と思われる５章まで

###ⅱWeb問題集
[Ruby技術者認定試験【Gold】模擬問題](http://www.school.ctc-g.co.jp/ruby/training_ruby_gold_01_10.html)
[ITトレメ]
(http://jibun.atmarkit.co.jp/scenter/ittrain/121_exam_1_q.html)

###ⅲ試験体験者の情報(受かった人よりも不合格になった人の記録が参考になります)
[武田哲也さんのRuby技術者認定試験受験記]
(http://togetter.com/li/769555)
[ruby gold 落ちました・・・]
(http://qiita.com/sak_hrr/items/95be0f9b80502218ad8c)

###ⅳ他
[Ruby技術者認定試験改訂]
(http://www.ruby.or.jp/ja/certification/examination/index.data/rubycert.pdf)
-ver1.8から2.1になり改定された分野は頻出するので目は通しておいて本を読むときに重点的にコードの検証/改良しておく

[Ruby Gold 試験範囲を一気に見直す]
(http://tamata78.hatenablog.com/entry/2015/11/03/101002)
-短時間で見直せるので試験前の復習に便利

[Ruby 2.1.0 リファレンスマニュアル]
(http://docs.ruby-lang.org/ja/2.1.0/doc/)


※ちなみに著者の場合はRuby Goldは2015年11月から2016年1月まで月一回受けて3回目に合格しました。

1回目:64
2回目:74
3回目:89くらいのスコアです。

大体上記のⅰ,ⅱ,ⅲの内容を１月毎に１周していた感じです。
1,2周目は書籍やWeb問題集サンプルコードをひたすら書いて
頭の中の予測と実際の動作が一致するように努めました。
同じ内容や問題ばかりやってると答え自体を覚えたり
飽きて覚えが悪くなるので
３周目は本やweb問題集に載っている
サンプルコードの改良や
理解した内容をパワポに再構成する事をメインに読み進めました。

よく分からないと感じた分野は自宅のRuby2.1環境で出来るだけ検証し
Rubyのリファレンスマニュアルは読んでるサイトにリンクがあったら時折目を通すくらいです。

お勧めするコースとしては
ⅳの改定情報を読んでもらってからⅰ-ⅲの内容を３周して頂くと良いです。

１周目：本の読み込み
　　　　単純なサンプルコードの理解/検証
　　　　模擬試験
２週目：１周目の模擬試験を踏まえ
　　　　理解不足分野の読み込み
　　　　複合的なサンプルコード理解/検証
３周目：人に説明出来るよう理解内容を
　　　　出力/再構成
　　　　複合的なコードの再構成/改良/細部検証　


著者：学生の頃Rubyで人工無能とか組んでた
　　　その他脳細胞の神経モデルを組んだり
　　　趣味でDeepLearningを組み込んだ
　　　システム構築を目論む休日プログラマ
　　　現在本業は運用/監視
　　　英語サポート込みのヘルプデスク等
シリアル通信テスト > TeraTerm > 1秒おきにコマンドを送信

```txt:動作確認
Windows 8.1 pro (64bit)
Tera Term Version 4.88
```

1秒おきにコマンド(check)を送信したい。

関連 http://qiita.com/7of9/items/16618a5ae3cb42a7ab63

## 手順

### 送信ファイルの準備

cmd.txtをデスクトップに作成

```cmd.txt
check
```

### マクロファイルの準備

マクロファイルを作成。
先ほどのcmd.txtファイルへのリンクを貼る。[関連](http://qiita.com/7of9/items/4fda31837f882977868f)

```send_1secInterval.ttl
while 1
sendfile 'C:\Users\XXX\Desktop\cmd.txt' 0
pause 1
endwhile
```

### 実行

- Tera Termを起動しCOM6など接続先に接続する
- シリアル通信の速度の設定をする [設定]-[シリアルポート]
- 上記のttlファイルを読み込む [コントロール]-[マクロ]、ttlファイル選択

以上で１秒おきに通信が行われる。

問題は停止するためのウィンドウも１秒おきに消えるので、そのウィンドウから停止できない。

TeraTerm自身を終了させている。MACRO: Errorウィンドウが表示されるので、「マクロ停止」を選択する。
Windows > ファイルパスを取得する > Shift+RightClick → 「パスとしてコピー(A)」

```txt:動作確認
Windows 8.1 pro (64bit)
```

コーディングにおいてサンプルファイルへのパスを取得したい時がある。

以下の手順が早そうだ。<font color=blue>と思っている時がありました。</font>

1. ファイル上で右クリック、プロパティを選択
2. 「セキュリティ」タブをクリック
3. 上部にある「オブジェクト名」を右側から選択（左側からは選択しにくい）
4.  Ctrl+c　でコピーしてエディタで使う


別途、ショートカットを作成して、プロパティを開いて「ショートカットカット」タブにある「リンク先」をコピーしても可能。ショートカットを削除するなどの手順が余計に必要になる。

<hr>
@jTakasuRyujiさんのコメントのこちらの方が遥かに早い。

> Shift+RightClick → 「パスとしてコピー(A)」
複数ファイルでもできるので是非。

情報、感謝です。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/3648b7b4-5dbb-1fd6-f602-00bfb2731d11.png)
[R]決定木分析

決定木分析を行うサンプルプログラムを書いたので投稿します。

```r:03_Decision_tree.R
library(rpart)
library(partykit)
library(epitools)

#Read data
data_titanic<-expand.table(Titanic)

#Making decision tree
result<-rpart(Survived~., data = data_titanic)

#Plot result
plot(as.party(result)
```
結果
![03_Output.jpg](https://qiita-image-store.s3.amazonaws.com/0/111514/87fe13a9-6196-754a-a495-eafc10c5703a.jpeg)
技術英語 > They’[re broken up] into little patches of grassland / disrepair

2012年終わり (2016/02/29)
2003年開始 (2016/03/01)

@ LOE > January 3, 2003
http://loe.org/shows/shows.html?programID=03-P13-00001
> They’<font color=red>re broken up</font> into little patches of grassland 

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

@ XD-N8600 > オックスフォード現代英英辞典

> <font color=red>disrepair</font>
> ... is broken or in bad condition

http://ejje.weblio.jp/content/disrepair
> (修理・手入れの不足による)破損(状態)、荒廃
R言語でキーボード入力に応じて行う処理を選択するサンプルプログラム

R言語でキーボード入力に応じて行う処理を選択するサンプルプログラムを書いたので投稿します。

```r:02_Input_and_Output.R
data <- NULL

while(TRUE){ 
  #menuでキーボード入力待ちになる
  input <- menu(c("OK", "NG","EXIT"))
  
  #inputに応じて処理を分ける
　if(input==1){
    s<-sprintf("Input is %d: %s",input,"OK")
    data <- c(data,input)
    print(s)
  }else if(input==2){
    s<-sprintf("Input is %d: %s",input,"NG")
    data <- c(data,input)
    print(s)
  }else{
    s<-sprintf("Input is %d: %s",input,"EXIT")
    print(s)
    break #whileループを抜ける
  }
  #dataをプロットする
  plot(data)
}

#InputしたデータをCSVファイルへ出力する。
save_data = data.frame(data)
names(save_data) <- c("Input")
write.csv(save_data, "02_Output.csv", quote=FALSE, row.names=FALSE)
```
python のインタラクティブシェルからdjangoをimportしてDBにモノを保存したかった人の話

#背景

Djangoでappを作っているんだけど、

- Pythonスクリプトを実行してクローリングして取ってきたデータを
- pythonのスクリプトの中で整形して
- django のDBに保存して利用したい

これが目標なんだけど、ここではPythonからDjangoにアクセスしてDBなり好きなことをするところまでまとめる。


#バージョン等

- Django 1.9.2
- python 2.7.10
- Mac OS X


#本編へGO

やりたいことは冒頭でも述べたように、pythonのインタラクティブシェルからdjangoのアプリをimportしてそこからいじいじする。

```lang:python_django.py
import os,sys,django

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "you_apps_name.settings") # *1

sys.path.append(r'/Users/kanuchi34/Projects/python/dj/quotes') # *2
　
django.setup() # *3

```

順に注釈をつけていく

## 注釈 *1

これが詳しく何をやってるかはまだ調べてないんだけど、要するにDJANGOを使うための基本的な情報を提供しているみたい。

なんか実はpythonコードを実行する方法って何個かあるらしくて、そのうちの１つに

```
manage.py をコードの実行と一緒に呼び出す
```

みたいな方法がありまして、「きっとこいつが色々な設定を肩代わりしてるんだろうなぁ」と思い覗いてみたら、この *1 のコードがあった

つまりdjangoはdjangoで、pythonの中にあるであろう、DJANGO_SETTING_MODULEを呼び出して、そんでpythonとdjangoを利用できるようにしているんだと思う

## 注釈 *2

このコードは、着けておいて悪いことはないんだけど、省略することも可能。 pythonパスをappディレクトリ以下の環境に通すために必要らしい。

つあmり、appディレクトリにpythonスクリプトおいて実行すればなくても問題はない

## 注釈 *3

```
django.setup()
```

これをずーっと呼び出すの忘れてて1時間くらいぐぐってた。なんかdjangoの環境のsetuupしてkるえるんだと思う

これをコールしないと、AppDirectryIsntReady みたいなエラー文が出てきて先に進めません


#ハマってたところ

この記事で書いた注釈 *1のところの**your_apps_name**のところをみんな好き勝手書いてて、これが何を意味してるのか全然わからなかった（初心者あるあるなんだろうな）

```
1. config.local
2. myproj.settings
3. myapp.settings
4. local
5. config
```

最終的にmanage.py見てわかったけど、なんかこうこの辺統一できないのかなぁ。。
boolean のカラム一覧を抽出する

Railsでbooleanを使う時は デフォルト値の設定と `null: false`でDBにNullが入ることを禁止してたほうが何かといいんですが、それを知らずに散々 `null: false`してしまっていた人のための `boolean`なカラムの抽出方法。

```.bash
grep boolean db/schema.rb
```

で全部出てきます。Unix系列の基本コマンドはやっぱり便利ですね。
テーブル名がわかりませんが、まあそれぐらいは自分が書いてるプロジェクトならわかるでしょう多分。
AngularJSの色々をawesome的にまとめ

AngularJSの色々をawesome的にまとめてみました。（そもそもAwesome自体入っていてアレですが）

# AngularJS2に向けて
## Awesome
* [Awesome Angular 2 (英語)](https://github.com/AngularClass/awesome-angular2)

## チュートリアル
* [5 MIN QUICKSTART (英語)](https://angular.io/docs/ts/latest/quickstart.html)
* [angularjs2のtutorialをやってみた
](http://xengineer.hatenablog.com/entry/2015/11/02/angularjs2%E3%81%AEtutorial%E3%82%92%E3%82%84%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F)

## 参考になりそうなもの
* [Angular2勉強会で発表してきた
](http://qiita.com/laco0416/items/ff08a496ecd53403bffc)
* [AngularJSモダンプラクティス](http://qiita.com/armorik83/items/5542daed0c408cb9f605)
* [その使い方はもう古いかも？AngularJS老化チェック（ディレクティブ篇）
](http://qiita.com/laco0416/items/edfa917583af4593ad6c)

# AngularJS1.x

## Awesome  
* [Awesome AngularJS (英語)](https://github.com/gianarb/awesome-angularjs)  
* [Awesome Angular (英語)](https://github.com/aruzmeister/awesome-angular)

## チュートリアル  
* [すぐできる AngularJS
](http://8th713.github.io/LearnAngularJS/#/)
* [ドットインストール AngularJS入門 (全12回)
](http://dotinstall.com/lessons/basic_angularjs)
* [RailsでAngularJSを使ってTodoアプリを作成 - 1. AngularJSのインストール方法]
(http://ruby-rails.hatenadiary.com/entry/20150114/1421235346)
# AngularとSEO

* [AngularJS SEO – Single Page App Crawling and Indexing (英語)](https://allotment.digital/learn/technical-seo/advanced-concepts/angularjs-seo/)
* [SEO検証！ GoogleはAngularJSを正しくクロールするのか？（2015年2月版）
](http://codezine.jp/article/detail/8543)

# 高速化
* [11 Tips to Improve AngularJS Performance (英語)](http://www.alexkras.com/11-tips-to-improve-angularjs-performance/)
* [AngularJSのOne-time Bindingを使ってパフォーマンス改善をしよう](http://liginc.co.jp/web/js/other-js/153751)

# UI
* [AngularUI](https://angular-ui.github.io/)
* [Chart.jsとAngular JSを組み合わせて動的なグラフを生成してみる
](http://matorel.com/archives/309)

# 事例系 
* [5カ月でAngularJSとTypeScriptでSPAを開発。その技術の選択理由と開発過程は？（前編） Developers Summit 2016
](http://www.publickey1.jp/blog/16/5angularjstypescriptspa_developers_summit_2016.html)

# バックエンドとの連携  
* [RailsでAPIサーバを開発する(AngularJS, Ruby on Rails, SPA)](http://dev.classmethod.jp/server-side/spa_ruby-on-rails_api_angularjs/)
[私が実施する Heroku x Rails の高速化をまとめてみた](http://www.bokukoko.info/entry/2015/08/31/%E7%A7%81%E3%81%8C%E5%AE%9F%E6%96%BD%E3%81%99%E3%82%8B_Heroku_x_Rails_%E3%81%AE%E9%AB%98%E9%80%9F%E5%8C%96%E3%82%92%E3%81%BE%E3%81%A8%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F)
* [Rails5でAngular2を動かすまでの設定](http://dev.classmethod.jp/server-side/hello-angular2-on-rails/)

# その他、気になったもの  
* [npm とか bower とか一体何なんだよ！Javascript 界隈の文脈を理解しよう](http://qiita.com/megane42/items/2ab6ffd866c3f2fda066#npm-%E3%81%A7-browserify-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
* [AngularJSをTypeScriptで書くときのあれこれ](http://qiita.com/zoetro/items/1aefa189cb54169f2cee)
* [ブラウザ上でHTML5/Javascriptを実行するサービスの使い分け](http://senta.me/blog/others/html5-code-playground/)
* [ブラウザの仕組み: 最新ウェブブラウザの内部構造](http://www.html5rocks.com/ja/tutorials/internals/howbrowserswork/#Scripts)
Linux + FTDIのUSB-UART変換で、non-standardなbaud rateを設定する

# きっかけ
ラジコン制御のSBusを扱いたい…のだが、彼は100Kbpsという、16450非互換なbaud rateなのだ…。

# 使用機材
## Raspberry Pi
[こちら](https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=77275)によると、`/boot/config.txt`でクロックを変更できるらしい。
…いろいろやってみたのだが、Raspbianのkernelがバンバン新しくなっているのか、ちょっとうまくいかず、保留->[実現](http://qiita.com/air-gh/items/fb29b754013c27e62c9b)。

## USB-UART変換
### kernelを読む
FTDIのチップ用ドライバである、[ftdi_sio.c](https://github.com/torvalds/linux/blob/master/drivers/usb/serial/ftdi_sio.c)を読むと、なんかいいことが書いてある。

```c:ftdi_sio.c
	 * 3. You can also set baud rate by setting custom divisor as follows
	 *    - set tty->termios->c_cflag speed to B38400
	 *    - call TIOCSSERIAL ioctl with (struct serial_struct) set as
	 *	follows:
	 *      o flags & ASYNC_SPD_MASK == ASYNC_SPD_CUST
	 *      o custom_divisor set to baud_base / your_new_baudrate
```

もはや`stty`コマンドだけではできない技だな…。

### ググる
"non-standard baud rate linux" などでググると、`ioctl()`などで頑張る技が出てくる。
もうちょっと頑張って、[setserial](http://manpages.ubuntu.com/manpages/trusty/en/man8/setserial.8.html)コマンドを発見。`ASYNC_SPD_CUST`なんかも設定できそうな予感。

### 実験
[秋月電子通商](http://akizukidenshi.com/catalog/g/gM-08942/)で買っておいた、[Adafruit FT232H Breakout](https://www.adafruit.com/products/2264)を使ってみる。
baud_baseのデフォルトはチップによって違ったりするようだが、FT232Hは12Mbps?
kernelを追うのが面倒なので、オシロ([LabTool](http://www.embeddedartists.com/products/app/labtool.php))で見ながら成功した手順がこちら。

```shell-session
# stty -F /dev/ttyUSB0 38400
# setserial /dev/ttyUSB0 spd_cust divisor 240
# echo -n U > /dev/ttyUSB0
```

'U'は、0b01010101なので、波形を見るにはちょうどいい。

### 記念撮影
<img width="1090" alt="100KHz-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/104225/b0eb7fa1-ef9f-18f7-7c78-683aa11f91bb.png">

はい、チーズ。
ぴったり!

# 追記
- FT231Xを用いた[こちらのモジュール](http://akizukidenshi.com/catalog/g/gK-06894/)と、FT232RQを用いた[こちらのモジュール](http://akizukidenshi.com/catalog/g/gK-09951/)でも、同じくdivisor 240でいけた。
- Raspberry Pi編、[実現](http://qiita.com/air-gh/items/fb29b754013c27e62c9b)。