OmniAICreator/Qiita-1.07M huggingface dataset:
組合せ最適化で学区編成問題を解く

# これなに
12/2 に行われた[最適化](http://qiita.com/Tsutomu-KKE@github/items/bfbf4c185ed7004b5721)のセミナー [Gurobi Optimizerソリューションセミナー2016](https://www.octobersky.jp/event/20161021.html) で、学校の学区決めを多品種[最小費用流問題](http://qiita.com/Tsutomu-KKE@github/items/41d625df63f1946c7216)として解けることを聞いたので実際にやってみました。

- [県別データの可視化](http://qiita.com/Tsutomu-KKE@github/items/6d17889ba47357e44131)ライブラリjapanmapを使います。
- 本州の34都府県を対象にし、1県に1人学生がいるとします。
- 青森、山梨、山口に学校があり、定員はそれぞれ 7、21、6人とします。
- 隣接県への移動時間は、1とします。
- 各学生が3つの学校のいずれかに通うこととし、全学生の総移動時間を最小化する学区の割当を求めます。

# 考え方

- 34都府県の需要点を作成します。
- 青森、山梨、山口の需要をそれぞれ(自分を除いた)6、20、5、その他は-1とします。
- 青森、山梨、山口を代表とする3つの日本(緑日本、青日本、赤日本)を考え、この各日本の中で隣接させます。(多品種ネットワーク)
- 代表点以外の需要点から3つの日本の同じ県にリンクをはります。
- 代表点の需要点へ、その代表点を代表とする各日本の同じ県からリンクをはります。

![image](https://qiita-image-store.s3.amazonaws.com/0/13955/890ea35d-be5f-ad19-d32e-c82a410a894e.png)

このネットワーク上で最小費用流問題を解きます。

# Python でやってみる
```python
import networkx as nx
import numpy as np

from japanmap import adjacent, pref_code, pref_map

本州 = np.arange(2, 36)
代表点 = {pref_code("青森"): 7, pref_code("山梨"): 21, pref_code("山口"): 6}
# グラフ作成
g = nx.DiGraph()
g.add_nodes_from(本州, demand=-1)
for i, d in 代表点.items():
    nwl = i * 100
    g.nodes[i]["demand"] = d - 1
    g.add_nodes_from(nwl + 本州, demand=0)
    g.add_edge(nwl + i, i)
    g.add_edges_from((j, nwl + j) for j in 本州 if j not in 代表点)
    g.add_edges_from(((nwl + j, nwl + k) for j in 本州 for k in adjacent(j)), weight=1)
r = nx.min_cost_flow(g)
# 結果表示
dc = dict(zip(代表点, ["red", "green", "blue"], strict=False))
dc.update({i: dc[j // 100] for i, t in r.items() for j, v in t.items() if v and i < 100})
pref_map(本州, cols=[dc[i] for i in 本州], width=4)
```
![image](https://qiita-image-store.s3.amazonaws.com/0/13955/9ef2ea61-f323-dbba-9d15-c6b393dfb65a.png)

思った通りに解けました。

# 発展
現実には、いろいろな要素を考慮する必要があります。

- なるべく前と同じ学区が望ましい。
- 特定のところで必ずわけたい。
- ホップ数ではなく距離にする。
- グループ内の数はぴったりでない。

定式化を直せばできそうです。

以上
ubuntuにAWS CLIをインストール

ちょっとハマったのでメモを。

```
$ sudo apt-get install python-setuptools
$ sudo easy_install pip
$ sudo pip install awscli
```
サクサクっと上記のコマンドでインストールを試みたところ以下のエラーが。

```
〜省略〜

x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I/usr/include/python2.7 -c ext/_yaml.c -o build/temp.linux-x86_64-2.7/ext/_yaml.o
ext/_yaml.c:4:20: fatal error: Python.h: No such file or directory
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

----------------------------------------
Command "/usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-rcDnr_/PyYAML/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-QhFTSP-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-rcDnr_/PyYAML/
```

Python.hがないとか出てるのでdevelopment kitをインストールしてみる。

```
$ sudo apt-get install python2.7-dev
```

再度awscliをインストール。

```
$ sudo pip install awscli

〜省略〜

Installing collected packages: PyYAML, colorama, awscli
Running setup.py install for PyYAML ... done
Successfully installed PyYAML-3.12 awscli-1.11.23 colorama-0.3.7
```

正常にインストールできました。
あとはaws configureでIAMユーザなどを設定してあげれば初期設定は完了です。
TraceとFind Shortest Pathで迷路の答えを導こう

この記事はHoudini Advent Calendar 2016の三日目の記事です。

この記事では
・Trace SOP
・Group SOP
・Find Shortest Path SOP
を利用します。

![maze.gif](https://qiita-image-store.s3.amazonaws.com/0/151589/289bb605-844a-4b68-b191-6605d65dc0cb.gif)


#目的：迷路の答えを導こう
今回の記事の目的は迷路の画像を与えると迷路を脱出できるネットワークの作成です。
Find Shortest Pathを利用すると恐ろしく簡単に目的の機能を実現することができます。

##画像を取り込むtraceSOP
画像は「迷路　フリー」と検索して出てきた迷路画像を利用します。(http://から画像参照も可能)
![maze.jpg](https://qiita-image-store.s3.amazonaws.com/0/151589/6d05bc39-338d-f324-e151-55e7b18e0fdb.jpeg)

###そのまま取り込んだ結果
![001.png](https://qiita-image-store.s3.amazonaws.com/0/151589/bd6e96c0-2cd3-f4fd-4dd6-62c572aa416c.png)


##課題１
・ポリゴンが通路でなく壁として出力されている。
(違う画像であれば結果は逆になっているかもしれません)

##traceSOPの注意点
###注意点１
よく勘違いしてしまうのが、黒の部分が残り白い部分が消えるのならば、色を反転させればいいのではないか。
という考えです。しかし色を反転させてもtraceSOPでの出力結果は変わりません。
traceSOPでは、画像のピクセル中に存在する色の差分を探します。(差分の閾値はパラメータで制御できます)
例えば黒一色の画像や白一色の画像を読み込んでも、色の差分がないので何も出力されません。

###注意点２
traceSOPに入れる画像サイズが小さすぎる場合は、解像度が足りず、うまくトレースすることができません。逆に大きすぎる画像も計算時間が長くなってしまいます。これらの事象を避けるため、事前に読み込む画像を前処理しておくか、COPのfileで一度画像を読み込んだ後scaleを利用して画像のリサイズ→読み出しが良いでしょう。（といいつつもCOPで座標をちょっとずつ移動させるなら元画像を弄ったほうが早いかもしれません。）

###注意点３
traceSOPで抜き取る際、FiltersタブのHoleFacesのチェックを入れると穴が適切に塞がります。(しかし独立するprimitiveが多いほど計算処理は重くなります)
その他ポイント数が多すぎる場合はResample Shapesにチェックを入れてStetp Sizeを上げます。

##課題１の解決策
今回利用したのは通常の色を扱うcolorノード、２つのインプットから画像を重ねるoverノード、白を抜いて透明にするためのlumakeyノード、画像の大きさを調整するためのscaleノードです。

COPで必要な迷路のエリアのみを残して壁と同色の黒い枠を重ねます。
枠の大きさは画像によって異なると思われるため、HDAにする場合はOverのScaleパラメータを外に出しておくと調整がしやすいでしょう。
▼COP内
![2.png](https://qiita-image-store.s3.amazonaws.com/0/151589/87fbde8c-6bdd-2c3c-91f1-5cdc3df0aa28.png)

#Group SOPでスタートとゴールを設定
##課題2
Find Shortest Pathにはスタート地点とゴール地点のポイントgroupが必要です。ですので２つgroupを用意する必要があります。

###課題2の解決策
groupでindex値をそのまま入力してもいいのですが、今回はgroupSOPの2番目の入力を利用してスタート地点とゴール地点にオブジェクト(sphere)を置いて、そのオブジェクトのバウンディングオブジェクト内に含まれるポイントをgroupに設定します。

▼それぞれstartとgoalのgroupを指定します。
![6.5.png](https://qiita-image-store.s3.amazonaws.com/0/151589/2de9722e-726f-4c2e-b701-c7cfa832f29f.png)

▼groupの設定
![6.1.png](https://qiita-image-store.s3.amazonaws.com/0/151589/8b8b2155-fb6e-5846-02ad-66f6907b840f.png)

(point only)と書かれている通りポイントgroupでしか設定できません。ただし、EditタブのConvetからpoint→primitiveを行うことでprimitiveを間接的に選択することもできます。
ちなみに、これを何度か繰り返すとgroupのグローを行う事が出来ます。

#Find Shortest Path SOPを使おう
これで準備は整いました。これでスタートとゴールを示すgroupを指定を行うと
瞬時に迷路を脱出する事が出来ます。
Find Shortest Pathは必ずポリゴンがスタートとゴールで繋がっている必要があります。

この段階でpolylineなのでそのあとは何でもできそうです。NURBSに変換したり、carveを利用してアニメーションを行ったり。

▼全体のネットワーク
![10.png](https://qiita-image-store.s3.amazonaws.com/0/151589/98bc8bc1-9b1d-1fe9-f454-8c89fee2f019.png)

これであとはHDAとして作れば、OK
ただ、スタート地点とゴール地点は事前に防がないと、迷路の外周を回ってチートされるので気をつけましょう。
![maze3+.png](https://qiita-image-store.s3.amazonaws.com/0/151589/92e26dce-7ec6-cc69-c131-10ab65dce522.png)

▼本当は道の真ん中を通るようにしたかったのですが、1日ではできませんでした。
![chiwawa.png](https://qiita-image-store.s3.amazonaws.com/0/151589/6d633159-5256-3a61-7fe4-9914ea3dce09.png)

HoudiniではFind Shortest Path SOPのように便利なノードが多いのは嬉しいのですが、
あまりに多すぎて、何かのきっかけで知らないと一生知らないノードなどがあるのが恐ろしいところですね。

以上
定時に帰るエンジニアが実践しているたった１つのこと

# 結論：定時に帰れないのはエラーログが赤色だからである

毎日嫌でも目にするコンソールの$\color{red}{\rm ERROR}$の$\color{red}{\rm 赤}$が

エンジニアの**精神を蝕んで**

結果として**作業効率が低下**して

**残業時間が増加**してんじゃない？

という個人的な所感に基づいて書きます


# 定時に帰れないエンジニアの1日





プログラムを書く

↓

実行

↓

うまく動く

↓

**急なタスク**を言い渡される

↓

引き続きプログラムを書く

↓

焦りによる**イージーミス**

↓

実行

↓

コンソールが$\color{red}{\rm 真っ赤なエラー}$を吐く

↓

引き続きプログラムを書く

↓

焦りと苛立ちによる**イージーミス**

↓

実行

↓

コンソールが$\color{red}{\rm 真っ赤なエラー}$を吐く

↓

**追加で急なタスク**を言い渡される

↓

引き続きプログラムを書く

↓

焦りと苛立ちと強迫観念による**イージーでないミス**

↓

$\color{red}{\rm GAME OVER(定時に帰れない)}$



# 真っ赤なエラーをスカイブルーなエラーに

コンソールのFontColorを$\color{red}{\rm 赤}$から$\color{skyblue}{\rm スカイブルー}$に変更  
AndroidStudioだと以下のように変わります

$\color{red}{\rm BEFORE}$
![red.png](https://qiita-image-store.s3.amazonaws.com/0/106533/00632bf4-59a0-c1d2-a190-24e83edb4e52.png)  
  
  
$\color{skyblue}{\rm AFTER}$
![skyblue.png](https://qiita-image-store.s3.amazonaws.com/0/106533/57b3576a-ca86-fbf0-5cff-3addd8e86bf2.png)


# 設定変更後のエンジニアの1日

プログラムを書く

↓

実行

↓

うまく動く

↓

**急なタスク**を言い渡される

↓

引き続きプログラムを書く

↓

焦りによる**イージーミス**

↓

実行

↓

コンソールが$\color{skyblue}{\rm スカイブルーなエラー}$を吐く

↓

引き続きプログラムを書く

↓

実行

↓

イイ感じに動く

↓

**追加で急なタスク**を言い渡される

↓

引き続きプログラムを書く

↓

焦りによる**イージーミス**

↓

実行

↓

コンソールが$\color{skyblue}{\rm スカイブルーなエラー}$を吐く

↓

引き続きプログラムを書く

↓

実行

↓

イイ感じに動く

↓

$\color{skyblue}{\rm  GOAL(定時に帰る)}$



# 以上

色は人生を変える
精神論とカプセルホテルを卒業しましょう
今年IoTLTで発表したこと2016 #IoTLT

この記事は[IoTLT Advent Calendar 2016](http://qiita.com/advent-calendar/2016/iotlt) 3日目の記事です。
こんにちは、 @shanonim です。カンボジア人ではありません。

<img width="949" alt="スクリーンショット 2016-12-03 19.56.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/38442/321d0e5a-bf3d-3c61-044f-630466376f6c.png">

日本人です。

## 今年IoTLTで発表したこと

今年何度かIoTLTで発表させて頂く機会を頂きました。総集編ではありますが、発表したネタを振り返ってみたいと思います。

### IoTで台所をHackする

https://speakerdeck.com/shanonim/hacking-kitchen-by-iot

「台所IoT」をテーマに、調味料が少なくなったらSlackでお知らせしてくれるIoTを作りました。  
仕組みとしては単純で、

- 台所の調味料の下に圧力センサーを実装する
- 毎日夕刻に調味料の量をチェックして、少なくなっていたら購入を促すメッセージをSlackにPOSTする

というものです。
身の周りで地味に困るネタを解決したいという思いで開発してみましたが、

- 「あると便利！！」
- 「実装も簡単で良さそう！」

など、意外と共感を得られた印象的な事例でした。

### GR-SAKURAでIoTやってみた

https://speakerdeck.com/shanonim/trying-iot-on-gr-sakura

前述の「台所IoT」回で賞を頂き、[GR-SAKURA](http://sakuraboard.net/gr-sakura.html)という開発基板を授与頂きました。ので、それを使って開発してみた事例です。

JavaScriptでIoTをやる「Johnny-Five」というフレームワークをGR-SAKURAで使ってみようと思ったのですが、残念ながら失敗に終わりました。
その後、ルネサス公式の方に「Johnny-Five使えるよ！！」と情報を頂いたのですが、詳しいハウツーは謎のままです。

＠公式のみなさま 続報をお待ちしております。

### IoTで美味しい漬け物を作りたい
https://speakerdeck.com/shanonim/make-good-pickles-with-iot
<b>「美味しい漬け物を効率的に生産したい」</b>という思いで、開発に執念を燃やした事例です。  
端的に流れを説明しますと、

- 漬け物の食べ頃を判定するには塩分を測定する必要がある
- 塩分センサーが必要
- 塩分センサー、一般向けに販売していない(?!?! or 高価すぎる...
- 市販の塩分計をHackするしかない
- Hackしてみたら意外にできた

という流れになります。

意外な分野かつ突飛なアイディアということもあり、LTがウケて嬉しかったという思い出があります。
なお、このIoT漬け物 ver2.0 は、現在鋭意開発中でございまして、12/17のLT会で進捗を発表できる見込みです。

FESTA 2016 By MashupAwards
https://www.facebook.com/events/1605110613128550/

お楽しみに。

## まとめ
<b>「IoTLTで発表する」という目標ドリブン</b>で、この1年間モノづくりを続けてこられたと思います。  
やっぱり発表する場があるとないとでは、気合いの入れ方が違うと言うか、作るからには見た人に驚いてもらいたいし楽しんでもらいたい、だからいいモノを作りたいという気持ちが生まれると思うのです。
そういった意味で、とても良い機会を頂いて感謝しております。（この場をお借りして感謝の辞。

来年も引き続きモノづくり頑張っていきたいと思いますので、何卒よろしくお願いいたします。

### 明日は。
@zacky1972 さんです。12/1が誕生日だったとのこと...!! おめでとうございます!🎉🎂

>いま研究中の新技術の話をします

とても気になりますね。🤔
楽しみです。
Sunnychatでのwebsocket利用事例

この記事は[Supership株式会社 Advent Calendar 2016](http://qiita.com/advent-calendar/2016/supership)の3日目の記事になります。

弊社サービス、Sunychatのサーバーサイドを担当している [@astapi](https://twitter.com/astapi) です。

<img width="250" alt="スクリーンショット 2016-12-03 18.16.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/54939/99e73e75-33d4-bc99-ada7-eaaf15fa4586.png">

Sunnychatではアプリへの更新通知にwebsocketを使用しています。

この投稿では、下記2つについて書こうと思います。

- なぜ、websocketを使用しているのか
- どう実装しているのか


## なぜ、websocketを使用しているのか

前提として以下のような背景がありました。

- ポーリングで5秒ごとに更新を検知するリクエストをアプリから行っていた。
- ポーリングを脱却し、更新がある時だけ、サーバー側から通知を行う仕組みを作りたかった。

結論を一言でいうと、`要件を満たしていて、一番実装がしやすかった`からです。

他の候補としては、HTTP/2なのか、MQTTなのかぐらいしか調べてはいなかったのですが、調べたときの感覚は以下です。

- HTTP/2は調べてる段階では、サーバー側のライブラリが対応されていなかった。
  - ブラウザでのケースはあるが、アプリでのケースがわからなかった。
- MQTTのウリとしては、QoSだと思っていますが、サービス要件としてそこまでの到達保証が必要なかった。
  - 多少、失敗したとしても他の手段で更新可能
  - websocketに比べて、実装イメージがサーバー、アプリともに薄かった。

websocketに関しては、使える状況ではない。という意見も見たりしますが、
それは、特定状況を含めた話しであり、且つ対象がWebブラウザなので、
アプリを対象にした場合の選択肢としては、アリだと思っています。

websocketがいいと思う理由が以下です。

- サーバーサイドの実装が楽。
  - これについては後述します。
- アプリ側のhttpクライアントも対応している。
  - アプリでの利用ならversion差異によって使えないという事を気になくていい。
- 通信内容はjson（にしている）なので普段使用しているAPIと変わらない感覚。

サンプルだったり、やってみた系の情報はよく見られますが、
実際にproductionで利用しているというケースは、どの選択肢でもあまり聞かないので、実際に実装してみてうまく行くかどうかは、わかんないな。という感じでした。
今考えてみると、アプリ側もクライアントが対応してるしwebsocketいけるよね。って感じで大した検証もせずにサーバーサイドを実装してたので、うまくいってよかったです。

## どう実装しているか

言語: Elixir
フレームワーク: Phoenix
の構成で実装しています。

[こちら](https://speakerdeck.com/astapi/phoenix-channels)のスライドでも紹介していますが、
Phoenixには、ChannelというPub/Subの仕組みがあり、その内部はwebsocketが使用されています。
Channelを使用して、通知したいユーザーに対して、websocketを通じてpushを行っています。

実装する内容としては、簡単で、
PhoenixではRailsのコントローラーの実装をするように、websocketを扱うことができます。
フレームワーク内部ではwebsocketの通信（json)をデシリアライズし、Elixirで扱うMapに変換してくれます。
その通信内容を元に、コントローラーにディスパッチしてくれて、レスポンスとしてjsonを返せばいいです。

ChannelのバックエンドのPub/Subには、Redisを使用しています。
PhoenixのデフォルトはPG2というErlangのライブラリが利用されていますが、
こちらを利用する場合、ErlangVMのNodeでクラスタを構成しないといけません。
そこの構築の仕組みを作るより、Redisサーバーを挟んだほうが楽だった。
且つ、性能も悪くないためRedisを選択しました。

Phoenixは、単体のサーバーで[200万コネクション](http://www.phoenixframework.org/blog/the-road-to-2-million-websocket-connections)を実現しています。
ソケットの管理は内部で使用しているCowboyというErlangのサーバーです。
性能的にも、求めているものを充分に満たしています。

### なぜ、Elixirなのか

- すでにサービス内の別の部分でElixirを使っていた。
  - そのため、言語としての導入障壁は低かった。
- Elixirの軽量プロセスを用いたアクターモデルが、サービスに合っていた。
- Goは知らなかった。
- Phoenixでwebsocketを扱うのがすごく簡単だった。
- Erlangの大規模サービスの実績は多くある。
- 並列、並行処理が強い言語が来ると思っている。

## 最後に

Sunnychatでのwebsocketの利用事例を紹介しました。

今回のように技術選択を行うシーンで何を考えて、何故選択したか。を残しておくことは、次の選択で結構約に立つかも。って思いました。
振り返ってみると、「なぜ」が弱いと感じました。
色んな選択肢をしっかりと調べるのは結構大変で、割りと決め打ちでwebsocketを重点的に調べていたので、ひいき的な選択だったかもしれません。
結果的にはうまくいったのでよかったです。

ぜひ、アプリをインストールして、使ってみてください:whale:
[iOS](https://itunes.apple.com/jp/app/sunnychat-chaohappinachatto/id1134862745?mt=8)
[Android](https://play.google.com/store/apps/details?id=space.amigo&hl=ja)
DataBindingで属性リソースを利用する

DataBindingの属性記法(`android:text="@{name}"`みたいに書くやつ)で属性リソース(`?attr`)を使う方法です。

## 問題

普通に`android:text="@{?attr/name}"`とに書くと、以下のようなエラーが出ます。

![image](https://qiita-image-store.s3.amazonaws.com/0/13418/1cde9978-6512-8f2a-491b-3847492a381f.png)

要するに`?`を先頭に使ってはいけないということですね。

## 解決策

解決策は少し面倒ですが、とてもシンプルです。
`R.java`ファイルをimportして、それを解決した値を渡してやります。

```xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <import type="com.sakuna63.sandbox.R" />
        <import type="com.sakuna63.sandbox.Attrs" />
    </data>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{Attrs.resolveString(context, R.attr.name)}" />
</layout>

```

```java
public class Attrs {
    public static String resolveString(@NonNull Context context,
                                       @StringRes int attrRes) {
        TypedArray a = null;
        try {
            a = context.obtainStyledAttributes(new int[]{attrRes});
            return a.getString(0);
        } finally {
            if (a != null) {
                a.recycle();
            }
        }

    }
}
```
kotlinで本物のヌルポを出す方法

# kotlinで本物のヌルポを出す方法

kotlinではnull安全ですからヌルポとは出会えません。でも、kotlinのnull安全機構においてクラッシュするケースがあります。 `!!` 演算子で明示的にクラッシュケースを書いた場合です。このクラッシュはヌルポでは無いのでしょうか？実はドキュメントには、 [ヌルポが欲しければ `!!` 演算子で得られるよ](http://kotlinlang.org/docs/reference/null-safety.html#the--operator) と書かれています。確かめてみましょう。

```kotlin
fun f(): Int? {
    return null
}

fun example1() {
	val a = f()
    val x = a!! + 3 // ここで例外が飛ぶ
    println(x)
}

Exception in thread "main" kotlin.KotlinNullPointerException
```

一見ヌルポが生まれたように見えます。しかしよく見てください。`kotlin.KotlinNullPointerException` と書かれています。これはkotlin由来の偽物のヌルポです。やはり本物のヌルポといえば `java.lang.NullPointerException` でしょう。

もちろん、Java連携を使えば本物のヌルポを得ることができます。Javaといえばヌルポですから当然です。では、混じり気の無い純粋なKotlinによって、本物のヌルポを得ることはできるのでしょうか。実は最近その方法を知ったのでご紹介します。

```kotlin
class Alpha {
    init {
        f()
    }
    
    fun f() {
       	val x: Int = a.length // ここで例外が飛ぶ
    }
    
    val a: String = "nya"
}

fun example2() {
    Alpha()
}

Exception in thread "main" java.lang.NullPointerException
```

どうですか、これが純粋なKotlinから産まれた本物のヌルポです。ヌルポが飛ぶというのに、コンパイラエラーも出ないし、 `!!` 演算子を書くような明示的な記述もありません。非ヌル安全だ。最悪だ。

# 解説

kotlinのクラス定義において、プロパティの初期化と `init`　の実行は、上から順に実行されるようです。さっきのコードは、下記のように定義順をひっくり返すとクラッシュしなくなります。

```kotlin
class Alpha {
    val a: String = "nya"
    
    init {
        f()
    }
    
    fun f() {
       	val x: Int = a.length
    }
}
```

また、コンストラクタはプロパティ初期化の後に実行されるので、この問題は起こりません。

```kotlin
class Alpha {
    constructor() {
        f()
    }
    
    fun f() {
       	val x: Int = a.length
    }
       
    val a: String = "nya"
}
```

というわけで、 `init` の取扱には気をつけましょう。
rubymine ファイルオープン等


- shift二回
ファイルやコマンド等、いろいろサーチできます。

- cmd+e
前に開いたファイル一覧が出てきます。

- cmd+shift+a
コマンドを起動できます。

- ディスカウントクーポン
前のエントリで書いたやつは無効と出ました。
もう少し待てば安くなるかな。
AWS CodeBuildでGoのプロジェクトをビルドしてみる


今年のAWS RE:INVENTは盛り沢山でしたね。今回は、そのうちの１つ、CodeBuildを試してみようと思います。基本的には[Getting Started](http://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/getting-started.html)に従って進めていきます。

## 1. ビルドのOutputを格納するS3バケットを作る

ビルドのOutputを格納するため、``codebuild-demo-project-output``という名前でS3のバケットを作成する。

## 2. コードを書く

早速Goのコードを書く。今回は、``codebuild``というディレクトリを作成し、シンプルにSum関数を１つだけ持つコードを作った。

```codebuild.go
package codebuild

// Sum adds two numbers.
func Sum(a, b int) int {
	return a + b
}
```

## 3. ビルドスペックを書く

ビルドスペックは、ビルドコマンドと関連する設定が記述されたファイルになる。YAMLで記述され、AWS CodeBuildでのビルドに利用される。

以下のような``buildspec.yml``というファイルを作成し、プロジェクト直下に保存する。

```buildspec.yml
version: 0.1

environment_variables:
  plaintext:
    MY_ENV: "codebuild"

phases:
  install:
    commands:
      - echo Nothing to do in the install phase...
  pre_build:
    commands:
      - echo Nothing to do in the pre_build phase...
  build:
    commands:
      - echo Build started on `date`
      - go build codebuild.go
  post_build:
    commands:
      - echo Build completed on `date`
artifacts:
  type: zip
  files:
    - codebuild
```

それぞれの項目は以下の通りである。詳しくは[こちら](http://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/build-spec-ref.html#build-spec-ref-syntax)。

|項目|必須？|説明|
|:--|:--|:--|:--|
|version|必須|ビルドスペックのバージョン。現在最も新しいのが0.1
|environment_variables|任意|環境変数
|phases|必須|install, pre_build, build, post_buildの4つの段階それぞれで実行するコマンドを列挙する。それぞれの段階の記述は任意となるため、4段階すべてを記入する必要はない。
|artifacts|必須|CodeBuildがビルドのOutputを出力するための情報。typeは現在`zip`のみが対応。filesにはビルド環境でのビルドの生成物の場所を指定する。

ビルドスペックはプロジェクトのリポジトリに含める以外にも、ビルドプロジェクトを作成する際に宣言することができる。

## 4. プロジェクトをgithubにプッシュする

github上で**codebuild-demo-project**というリポジトリを作成し、以下のようにプロジェクトをプッシュする。リポジトリは自分のものを指定する。

```
git init
git add .
git commit -m "First commit"
git remote add origin git@github.com:Iwark/codebuild-demo-project.git
git push -u origin master
```

## 5. ビルドプロジェクトの作成

[コンソール](https://console.aws.amazon.com/codebuild/)またはAWS CLIを用いてビルドプロジェクトを作成する。今回はコンソールから作成する。

東京リージョンではまだ使えないので、オレゴンを選択する。

* Project名は**codebuild-demo-project**にする。
* RepositoryはGithubを選択し、先ほど作成したリポジトリを接続する。
* RuntimeはGolangを選択する。
* Versionは1.7.3を選択する。
* ArtifactsはAmazon S3を選択する。
* Bucketは**codebuild-demo-project-output**を選択。

あとはそのままの状態で**Continue**、**Save and Build**する。

## 6. ビルドの開始

**Start build**をすると、ビルドが開始される。

## あとがき

とりあえずビルドまでは簡単にできました。

Go1.7なのにvendoringが効いていないのか、vendor内にあるパッケージが``not found``になるので困ってます。またちゃんと調べてみようと思います。
オブジェクトの同一性

#メモ
すべてのオブジェクトは「ID」と「値」を持つ。

```test.rb
str1 = "foo"
str2 = str1
str3 = "foo"
#equal?はIDか同じかどうか判定する
p str1.equal?(str2)
# =>true
p str1.equal?(str3)
# =>false

p str1.object_id
# =>70338021665000
p str2.object_id
# =>70338021665000
p str3.object_id
# =>70338021664980
```
GCCの定義済みマクロの表示

コンパイラオプションを変更した時に、プリプロセッサが見る定義済みマクロを表示する方法について簡単にまとめてみた。

例えば、下記は`-mavx`と`-mavx512f`での違い。

```
$ gcc -mavx -dM -E - </dev/null |sort > /tmp/1
$ gcc -mavx512f -dM -E - </dev/null |sort > /tmp/2
$ diff -u /tmp/1 /tmp/2
--- /tmp/1      2016-12-03 02:51:15.202904893 -0800
+++ /tmp/2      2016-12-03 02:51:21.768152014 -0800
@@ -9,7 +9,9 @@
 #define __ATOMIC_RELEASE 3
 #define __ATOMIC_SEQ_CST 5
 #define __AVX__ 1
-#define __BIGGEST_ALIGNMENT__ 32
+#define __AVX2__ 1
+#define __AVX512F__ 1
+#define __BIGGEST_ALIGNMENT__ 64
 #define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
 #define __CHAR16_TYPE__ short unsigned int
 #define __CHAR32_TYPE__ unsigned int
@@ -72,6 +74,8 @@
 #define __FLT_MIN__ 1.17549435082228750797e-38F
 #define __FLT_MIN_EXP__ (-125)
 #define __FLT_RADIX__ 2
+#define __FP_FAST_FMA 1
+#define __FP_FAST_FMAF 1
 #define __FXSR__ 1
 #define __GCC_ATOMIC_BOOL_LOCK_FREE 2
 #define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2
```

こんなのもあった。
- https://sourceforge.net/p/predef/wiki/Home/
インストール場所を指定して最新版のtmuxをインストールする方法

インストール場所を指定してUbuntuに最新版のtmuxをインストールする方法をメモしておきます。

## 依存モジュール
`libevent-dev`,`libncurses5-dev`の2つが必要なのでインストールしておきます。

```
sudo apt install -y libevent-dev libncurses5-dev
```

## ビルドに必要なモジュール
`build-essential`,`automake`,`pkg-config`の3つが必要なのでインストールしておきます。

```
sudo apt install -y build-essential automake pkg-config
```

## ビルド

```
mkdir $HOME/tmp
mkdir -p $HOME/usr/local
cd $HOME/tmp
git clone https://github.com/tmux/tmux.git
cd tmux
./autogen.sh
./configure --prefix=$HOME/usr/local
make
make install
```

## 起動
`$HOME/usr/local/bin`にパスを通す必要があります。

```
export PATH=$HOME/usr/local/bin:$PATH
```

パスを通した後に`tmux -V`を実行すると最新版のtmuxがインストールできていることが確認できると思います。
RailsアプリをHerokuから他環境に移行した際、ログが出力されない時の対処法

# 始めに
私は現在、業務でRuby on Railsを用いてアプリケーションを開発しています。
先日、RailsのアプリケーションをHerokuからAWSのEC2に移行致しました。
その際、本番環境同等の検証環境でRailsアプリのlog直下のログファイルにログが出力されなくなる現象が起こりました。
検証環境のログが追えないのはテストなどの際に非常に影響が出るため、原因を調査したのでその過程についてまとめたいと思います。

# 環境情報
Ruby：2.2.5
Rails：4.2.6
実行環境：AWS EC2(Amazon Linux 2016.03)

# 原因調査
HerokuからEC2に移行した結果、開発環境では正常にlog直下のdevelopment.logにログが出力されるが、検証環境ではlog直下のintegration_test.logに出力されないのが今回の現象です。
そのため、サーバ環境用のGemないしは検証環境での設定ファイルであるintegration_test.rbがRails.loggerを標準出力となるように上書きしているのではないかと考えました。
(標準出力になるとコンソールのみに出力され、ログファイルに出力されなくなります。)

## ①設定ファイル
設定ファイルをくまなく確認しても、Rails.loggerを上書きしている箇所は見つからず、
ここが原因ではないと判明しました。

## ②Gem
サーバ環境用のGemを一つ一つ調べていくと、rails_12factorというGemがRails.loggerを標準出力するように上書きしていました。

### rails_12factorとは何か
[rails_12factor](https://github.com/heroku/rails_12factor)とはRailsアプリケーションをHerokuで動作をさせることを目的としているGemで、
Railsアプリケーションを本番環境などのサーバ上で動かすためのアセットがまとまったGemである「rails_serve_static_assets」とHerokuの本番環境ではログを標準出力にストリームする必要があるためのloggingのためのGemである「rails_stdout_logging」が内包されたGemです。

今回はHerokuで運用していた際に必要だったrails_12factorがそのまま残っていたため、EC2でもログが標準出力されてしまい、log直下のintegration_test.logに何も出力されてなかったようです。

# 解決策
## ①ActiveRecordのログのみ表示
設定ファイル内に新しくloggerを作成しても、rails_12factorで上書きされてしまいますが、
ActiveRecordのログならば上書きされません。
そのため、設定ファイルに以下のコードを追記すれば、検証環境でもActiveRecordのログは正常にログファイルに出力されました。

```ruby:integration_test.rb
  ActiveRecord::Base.logger = Logger.new("log/integration_test.log")
  ActiveRecord::Base.logger.level = 0 # 任意のログレベル
```
しかし、この方法ではActiveRecordのログだけが見られるようになり、Railsのログが見たいという根本的な解決策にはなっていないため、今回は②の対応策を取りました。

## ②使用するGemの変更
そもそも今回は検証環境でも本番環境でもHerokuを使用しないため、rails_12factorを使用する必要はありません。サーバ上で動作させるためのアセットのGemである「rails_serve_static_assets」さえあれば良いので、Gemfileを下記のように書き換えました。

```ruby:Gemfile
group :integration_test, :production do
  # gem 'rails_12factor', '0.0.3'
  gem 'rails_serve_static_assets', '0.0.5'
end
```
こちらで試してみたところ、無事Rialsのログがlog直下のintegration_test.logに出力されるようになりました。

# 総括
## まとめ
Herokuを使わないサーバ上の検証・本番環境ならば、上記の「rails_serve_static_assets」を用いることでアプリケーション自体も正常に動作し、ログをそれぞれlog直下のファイルに出力されます。
しかし、Herokuを使う際は、ログを標準出力にする必要があるため、上記のような方法は取れません。

## 今後
今までログがどのように出力されているのかを意識したことがなかったので、良い勉強になりました。
今後はRails.loggerそのものの知識をより深めていきたいです。

## 参考サイト
[Github-rails_12factor](https://github.com/heroku/rails_12factor)
[Github-rails_serve_static_assets](https://github.com/heroku/rails_serve_static_assets)
[Github-rails_stdout_logging](https://github.com/heroku/rails_stdout_logging)

# 余談
## 12factorとは何か
本記事中に何度も出てきた「rails_12factor」の12factorとは、Herokuの創始者であるアダム・ウィギンスが提唱したインフラの運用を考えた際にアプリケーションが満たしているべき12の要素です。
具体的には、下記の4つを目的とした考え方です。

+ OSへの依存関係を明確にして、移植性を最大にする。
+ クラウドへのデプロイを前提にしており、サーバ管理やシステム管理を不要なものとする。
+ 開発環境と本番環境の差異を少なくし、継続的なデプロイを可能にする。
+ アーキテクチャや開発ツールを大幅に変更することなく、スケーラブルを行う。

また、12の要素は[本家のサイト](https://12factor.net/ja/)を参考にしてください。
Heroku上のアプリケーションはこの12の要素に沿っていくべきだと考えられており、Herokuで運用されるアプリケーションにRuby on Railsのものが多いのは、この12の要素に非常にマッチしているためです。

## Rails5と12factor
2016年7月にリリースされたRails5では、この12の要素が初めから動作するように設計されているため、「rails_12factor」のGemを入れる必要がなく、サーバ上にデプロイすることが出来ます。
しかし、Heroku上にデプロイする際は、loggerを標準出力に変更するように設定ファイルの変更が必要なので、注意が必要です。
Swift/Xcode関連の小技とか豆知識をメモ(超初心者目線)

完全に個人的なメモです！
素人目線で、これ便利だな〜と思ったこととか、覚えといたほうがいいかな〜と思ったことを随時メモっていきます。

●optionキー押しながら新しいファイルを開くと、画面分割して開いてくれる

●commandキー押しながらクリックすると、
　そのクラス等が必要とるす引数の型などの情報が観れる

●optionキー押しながらクリックすると、それに感するドキュメントを観れる

●ブレイクポイントはドラッグ&ドロップで消える
　濃い青が、ブレイクポイント有効な状態
　薄い青がブレイクポイントは無効な状態

●command+shift+0でヘルプ立ち上げ。(最上部のバーからでもいいけど)
JavaScript初心者がGrimoire.jsをつかってみた話

ハンズオンに参加してきました！
そのときに「GrimoireのAdventCalendar参加してよ」と言われるがまま2日、書きます。

## 作ったもの
月が地球のまわりを回るだけです…

GIFは最初、月が地球の後ろなので出てくるまで時間がかかります。下のソースコードでも読んで気長に待っていただくか、Web版をご覧ください。
<a href="https://tomon9086.github.io/grimoire_handson/"><img src="https://i.gyazo.com/7d0f583514145b82515ec29a36adf875.gif" /></a>
[Web版(マウスコントロール付き)](https://tomon9086.github.io/grimoire_handson/)

<br>
タイトルにもある通り、JavaScript初心者でXMLも触ったことないし、サッパリなので、詳しくは公式ページの[Tutorial](http://grimoire.gl/tutorial/)とか[Example](http://grimoire.gl/example/)を参照していただけるとわかりやすいと思います？

Grimoire.jsではXMLベースのGOMLというマークアップ言語で3Dオブジェクトを描画します。


```xml
<goml height="fit">
<!--太陽光の表現(http://grimoire.gl/example/phong.htmlからコピペ[※1])-->
	<import-material typeName="phong" src="./index.sort"/>
	<material id="earth-material" texture="earth_day.jpg" type="phong" color="#fff" specular="#555" ambient="#000" sun="n(1,0,-1)" power="1"/>
	<material id="moon-material" texture="moon.jpg" type="phong" color="#fff" specular="#555" ambient="#000" sun="n(1,0,-1)" power="1"/>
<!--太陽光の表現ここまで-->
	<scene>
	<!--カメラの設定-->
        <camera class="camera" near="0.01" far="400.0" aspect="1.5" position="0,5.17638,19.32" rotation="-0.2618,0,0">
            <camera.components>
                <MouseCameraControl />
            </camera.components>
        </camera>
	<!--地球の生成-->
        <mesh id="earth" geometry="sphere" scale="4,4,4" position="0,0,0" rotation="0,0,0" material="#earth-material">
        <mesh.components>
		<!--自転コンポーネントの付与-->
        	<Rotation speed="5" />
    	</mesh.components>
		</mesh>
	<!--月の生成-->
        <mesh id="moon" geometry="sphere" scale="1,1,1" position="0,0,0" rotation="0,0,0" material="#moon-material">
    	<mesh.components>
    	<!--自転コンポーネントの付与-->
        	<Rotation speed="0.183" initialValue="-90" />
        <!--公転コンポーネントの付与-->
        	<Revolution radius="10" speed="0.183" />
    	</mesh.components>
		</mesh>
    </scene>
</goml>

<!--[※1]お解りの方も多いかと思いますが、これを動かすにはURL先のindex.sortも必要です。-->
```

## どうだったか
インターネットで公開するならそれなりのクオリティがほしいってだけで太陽光をつけたので、
これがなければ初心者でも多少のJavaScriptとXMLかHTMLの経験でこれくらいの描画はイチから*絶対に*書けます。

表示する位置の指定はHTMLの、

```html
<!DOCTYPE html>
<html>
<head>
	<title>Grimoire OSK Hands on</title>
	<script type="text/javascript" src="grimoire-preset-basic.min.js"></script>
	<script type="text/javascript" src="main.js"></script>
	<style type="text/css">
		html, body{
			background-color: #000;
			height: 100%;
		}
	</style>
</head>
<body>
	<div style="color: #FFF; font-weight: bold;">速さ調整</div>
	<input type="range" onchange="onSpeedChange(this);" value="10">

	<!--ここ↓のscriptタグ-->
	<script id="main" type="text/goml" src="index.goml"></script>

</body>
</html>
```
コメントで示したようにscriptタグを書いた位置にタグ内に書いたidに対応したGOMLによって生成されたキャンバスが埋め込まれるので、
簡単でしょ？

あなたのWebサイトを<a href="http://grimoire.gl/"><img height="18px" src="http://grimoire.gl/css/images/logo-font.svg" /></a>で華やかに彩りませんか？
C言語の勉強がてら、CASL II処理システムを実装した話

C言語で作成した拙作のCASL II処理システム[YACASL2](http://www.j8takagi.net/yacasl2/)を紹介します。

CASL IIは、[基本情報技術者試験](https://www.jitec.ipa.go.jp/1_08gaiyou/_index_gaiyou.html)で用いられるアセンブラ（アセンブリ言語）です。アセンブラは通常、特定のコンピューターやCPUに対応しています。しかしCASL IIアセンブラは、試験の公平性の観点から実在しない仮想コンピューター向けに作られたアセンブラです。

CASL IIの処理システムを作るきっかけになったのは、[『日経ソフトウェア』](https://info.nikkeibp.co.jp/media/NSW/)2009年2月号に掲載されていた[川俣晶](http://mag.autumn.org/default.modf?s=kwmt)さんの執筆記事「C言語で作るCPUエミュレータ」を読んだことでした。この記事を紹介した日経ソフトウェア記者・斉藤国博さんの[コンピュータの仕組みを知るのは，いつも楽しい](http://itpro.nikkeibp.co.jp/article/OPINION/20090528/330825/?rt=nocnt)という記事は現在でもオンライン上で読めるようです（2020年8月時点）。なお、この記事で紹介されていたソースコード（C言語）は、現在ではダウンロードできないようでした。

私はいちおう基本情報技術者試験を受験したこともありCASL IIの概略については知っているつもりでした。しかし、コンピューターの仕組みを知るためのツールとしてのCASL IIの魅力については川俣さんの記事ではじめて知りました。また、この当時話題になりはじめていた「仮想コンピューター」について知るきっかけとなりました。そしてなにより、仮想のコンピューターシステムであるCASL IIが自作できることに大きな衝撃を覚えたのでした。

## CASL IIの意義
CASL IIに学ぶ意義はあるのか？実務で使うことはほぼ絶対にないのに。
おそらく授業や試験などでCASL IIにやむなく触れることになった人は誰でも抱える疑問だと思います。

それに対しては、[eel3さん](http://d.hatena.ne.jp/eel3/20120109/1326110720)が「CASL IIは、考えるための道具」という鮮やかな答えを[FizzBuzz](https://ja.wikipedia.org/wiki/Fizz_Buzz)のコードとともに示しています。

また、シンプルなアセンブラであるCASL IIは、他のアセンブラを学ぶ基礎、あるいはウォーミングアップになりうると思っています。ただ、私自身は残念ながら今までほかのアセンブラに触れる機会がなく、本当にそうなのか実証できないでいますが…

## CASL II実装の意義
C言語を学ぶ人にとって、入門書をひととおりマスターした次の段階で悩む人も多いのではないでしょうか。
C言語の技術（周辺技術）の多くは、ある程度以上の規模のプログラムでないと価値を実感できないものとなっています。
[K&R](https://www.amazon.co.jp/dp/4320026926)を含めた入門書では小規模なプログラムしか取り上げていないので、こうした本を読んでも身につけられない技術が多いのです。

ある程度以上の規模のプログラムを作るときにはネタ、というか仕様を決める（探す）のがたいへんなことが多いと思います。
CASL IIの場合は、[人間の試験用に用意された高い完成度の仕様書](http://www.j8takagi.net/yacasl2/doc/casl2_spec/casl2_spec.html)があるわけで、仕様書に恵まれているともいえます。
そうした点も考えると、入門書の次の段階としてCASL II（および、比較的単純な仮想コンピューター）は狙い目だと思っています。

CASL II処理システムの実装では、私は次の技術やツールの使い方を学びました。

* 文字列の読み取り
* リストやハッシュの活用
* 関数ポインタ
* ソースファイル分割とヘッダーファイルの作成
* Makefileの使い方（参考:[C言語を使うならMakeを使おうよ](http://qiita.com/j8takagi/items/74232a00cc33623f7844)）
* レグレッションテストの実装
* コメントからドキュメントを自動生成するツール（[Doxygen](http://www.stack.nl/~dimitri/doxygen/)、[GNU Global](https://www.gnu.org/software/global/)）
* メモリデバッグツール（[Valgrind](http://valgrind.org/)）

YACASL2のレグレッションテストを考えている内に、自作の汎用テストツール[Autotest.mk](http://www.j8takagi.net/autotest_mk/)も作成しました。
C言語などで作成したプログラムを対象としたテストフレームワークツールです。

なお、CASL IIなどの仮想コンピューターのほかに入門書の次の段階として面白そうなのは自作テキストエディター。
それだけに、[自作エディタをつくる Advent Calendar 2016](http://qiita.com/advent-calendar/2016/make_editor)には期待しています！
Ubuntu Server 16.04 LTS でipv6を無効化したときの作業メモ

インストールしてみたらipv6で通信してしまいipv4ではうまく通信できないのかapt-getやssh接続ができなかったときの対応作業のメモ。

#対応策
1. 最初からクリーンインストール時にネットワーク自動設定中にキャンセルを押して、手動設定する。
2. ```sudo vi /etc/gai.conf```で設定ファイルを開き

```
# precedence ::ffff:0:0/96 100
```
のコメント解除


```sudo vi /etc/sysctl.conf```で設定ファイルを開き

```
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
```

を追記。

```
sudo sysctl -p
```

で反映。

```
ip a
```

でinet6がなくなっていればOK

だめなら

```
sudo reboot
```
してみる。
LGTM

 
# いつもTwitterで
お世話になっている @mironal 氏の招待とはいえ、コミュニケーションが苦手なタイプのプログラマである私が、なぜこんなお題を引き受けてしまったのかわかりません。
しかし「コミュニケーション Advent Calendar」3日目、時すでに遅し、気づけばもう当日でした。
なんとなーくこれのことを書けと言われている気がしてきたので、自分のアプリの話を書きます。

# LGTM
というわけでおなじみのこいつです。

[![lgtm.png](https://qiita-image-store.s3.amazonaws.com/0/35008/9fb92c3c-e65d-257d-f22d-795570fdcf17.png "lgtm.png")](https://toshi0383.github.io/LGTM)
https://toshi0383.github.io/LGTM

おかげさまで9月くらいに1歳を迎えました。
一番の売りは、画像切り替えの速さです。常にメモリ上に画像を一定数保持するので、スペースキーで軽快に切り変わります。
選択した画像のURLをマークダウン書式で取得できるので、コードレビュー時などに頼りになります。
GitHub Favoredなマークダウンだけでなく、なんとBacklogのあの特殊なマークダウンやHTMLの`<img>`スタイルでの出力にも対応しており、幅広く活躍が期待できます。
最近、iPhone版との同期機能も実装し、通勤中に見つけた面白画像でMac上でシームレスにLGTMできるようになりました。

# 反響
さて、使ってくださっている方は着々と増えていまして、今全世界で30~40人と言ったところです。笑
新しいバージョンを出すとみなさん一斉にアップデートしてくださるので、実はすごくモチベーションになっています。
有料アプリにする利点は、「せっかく買ったんだし」ではないですが、比較的大事に使ってもらえる点だなあと感じました。
最近一度クラッシュする不具合を出してしまったのですが、「業務に支障出るんだけど笑」と言われて、ちょっと嬉しかったです。いや、スンマセンでした。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr"><a href="https://twitter.com/toshi0383">@toshi0383</a> LGTM更新したら起動時に落ちるようになったよ。業務に差し支えるんだけど。わらい</p>&mdash; Hoshi Takanori (@hoshi_takanori) <a href="https://twitter.com/hoshi_takanori/status/798786584883511297">2016年11月16日</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

# チームの雰囲気を変えよう
1日に一度も笑いが起きない雰囲気のチームより、いつも楽しそうにしている雰囲気のチームの方が、精神的には随分楽だと思うのです。
チームの雰囲気作りなんて、コミュショーなプログラマにできることは普通何もないわけですが、ここで面白画像を活用することで、少なくとも自分の周りの雰囲気は変えてゆくことができます。
このアプリを使わなくても、Chrome拡張を作っている開発者の方もいたりしますし、やり方は色々あると思います。

## 面白画像を貼る空気ではないし使わないと思う？
そういうところにこそ、むしろぶっこんでいきましょう。空気を読んだら、負けです。まずは自分の迷いを捨てる、これが重要です。内心 (いいじゃん) と思ったら、すかさずグッジョブな画像を貼りましょう。相手は突然のことに戸惑うか、寛容な方であればクスッと笑ってくれるかもしれません。いずれにしても、チームの中であなたは自然と「意外と面白いやつ」という位置付けになってゆきます。多分。

## 自分以外面白画像を貼ってくれない
とはいえそのままでは自分一人だけ盛り上がっている状況になってしまいます。自分が楽しそうにしていれば周りがついてくるなどという甘えた考えは捨てましょう。「面白画像に詳しいだけの人」になる前に、手近な人から計画的に巻き込むようにしましょう。調子に乗って「面白い画像が貼られない限りMergeボタンを押してはいけない」というルールを設けることができればこっちのものです。その頃には、チームの面々はちょっとした不具合修正と同じくらいかそれ以上の時間を面白画像ハンティングに費やすようになっていることでしょう。

ま、私自身最近はお一人様プロジェクトが多いので、自分一人で面白画像を貼っている人になっているわけですが！

# まとめ
というわけでLGTMの近況を紹介してみました。
この機会にぜひ普段のギョームにも取り入れてみてください。

アドベントカレンダーということでなんとなくクリスマスムードなので、PromoCodeを配布しようと思います。つまり、タダになる。
この記事を、以下のコメント付きでツイートorシェアしてください。

```
サンタさん！このアプリをください！！！
```

先着5名くらいにしましょうかね。 ~~Twitter以外だと多分気づかないので、以下のメールアドレスにも念のためその旨ご連絡ください。~~
TwitterでDMできない場合があるので、以下にメールしていただければ担当のサンタから返信させていただきます。

> looks.good.or.not[あっと]gmail.com


以上です。ハッピーメリークリスマス。
![LGTM](https://media.giphy.com/media/P17Rl73a569fq/giphy.gif)
機械学習/DeepLearning/データ分析系のAdvent Calendarけっこうあるけど探しにくいから列挙する

QiitaさんのAdvent Calendar、参加者が自由に追加できるタグクラウド機能があればいいのにな。
なんて思ってたりします。

空いてたので [Advent Calendar 紹介 Advent Calendar 2016](http://qiita.com/advent-calendar/2016/advent-calendar) の3日目です。

QiitaとAdventarをざっと見ただけですが、ほかにもあったらぜひコメントで教えてください。横断的に眺めたいなら [gihyoさんの記事](http://gihyo.jp/news/info/2016/12/0102) がおすすめです。

## フレームワーク

* TensorFlow  
http://qiita.com/advent-calendar/2016/tensorflow
* Chainer  
http://qiita.com/advent-calendar/2016/chainer
* Jubatus  
http://qiita.com/advent-calendar/2016/jubatus
* Mathematica  
http://qiita.com/advent-calendar/2016/mathematica
* jupyter notebook  
http://qiita.com/advent-calendar/2016/jupyter
* Stan  
http://qiita.com/advent-calendar/2016/stan
* Hadoop関連(全部俺)  
http://www.adventar.org/calendars/1893
* 1人でHadoopの話をする  
http://qiita.com/advent-calendar/2016/hadoop-cm-ozawa
* Amazon QuickSight (全部俺)  
http://qiita.com/advent-calendar/2016/amazon-quicksight-by-shinyaa31
* R  
http://qiita.com/advent-calendar/2016/r-rstudio

## 全般

* DeepLearning  
http://qiita.com/advent-calendar/2016/deeplearning  
http://www.adventar.org/calendars/1687
* 機械学習  
http://qiita.com/advent-calendar/2016/machine-learning  
http://www.adventar.org/calendars/1997
* 機械学習に必要な高校数学やり直し  
http://qiita.com/advent-calendar/2016/math_for_ml
* Machine Learning for Artists  
http://qiita.com/advent-calendar/2016/ml4a
* Distributed computing(大規模データの分散処理)  
http://qiita.com/advent-calendar/2016/distributed-computing
JSON Schemaでプロパティ名にキーワード(typeとかidとか)が指定されている場合の記述方法

# 結論
結論だけ先に書くと「気にせず書いてしまえばOK」(実装にもよるのかもしれないけど)。

# 背景
JSON Schemaで検証しようと思った時にこんなJSONがあったとします。

```JSON
 {
   "foobar": {
      "type": "hogehoge"
   }
 }
```

その時にJSON Schemaで`foobar.type`を検証する時に

```JSON
{
  "id": "/foobar",
  "type": "object",
  "properties": {
    "foobar": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string"
        }
      },
      "additionalProperties": false
    }
  }
}
```

なんて書いてしまって大丈夫なのか?とか思ってしまったのですが、特に問題無いようです。

実装にもよるかもしれませんが、[npmのjsonschema](https://www.npmjs.com/package/jsonschema)では正常に動きました。
Ubuntuでユーザーの確認・追加・削除・sudoに追加

# ユーザーの確認
### homeディレクトリがあるかで確認
```
ls -l /home
``` 
### パスワードがあるかで確認
```
cat /etc/passwd
```

# ユーザーの追加
```
sudo adduser 新しいユーザー名
```
続いてパスワードの入力(再入力確認有り)
その後はフルネームなどのオプション入力


# ユーザーの削除
```
sudo userdel -r 削除したいユーザー名
```
-r はhomeのディレクトリも一緒に削除するオプション

### "user XXX is currently logged in と表示され削除できない場合

1. `who`でログイン中のユーザーを確認してみる
2. `ps aux | grep 対象ユーザー名`で対象ユーザーが所有者のプロセスを検索してみる。
見つかればそのプロセスをkillする。
3. それでもダメな場合は`sudo -u 対象ユーザー名 kill -9 -1`で対象ユーザーのプロセスを全てkillしてみる。
(対象ユーザーがApacheやMySQLなど大事なサービスをstartさせていた場合はそれらも停止してしまうため注意)

# sudoに追加
```
sudo gpasswd -a 新しいユーザー名 sudo 
```
`-a` は `--add`の略。
RailsでMySQLのbundle installエラー対処方

Railsでmysqlを使おうとした際に以下のようなエラーが出て困ったのでその対処法を記してみます。
あくまでも参考程度にみてください。

```
Gem files will remain installed in /Users/user_name/Programs/web/test-repo/vendor/bundle/ruby/2.3.0/gems/mysql2-0.4.4 for inspection.
Results logged to /Users/user_name/Programs/web/test-repo/vendor/bundle/ruby/2.3.0/extensions/x86_64-darwin-15/2.3.0-static/mysql2-0.4.4/gem_make.out

An error occurred while installing mysql2 (0.4.4), and Bundler cannot continue.
Make sure that 'gem install mysql2 -v '0.4.4'' succeeds before bundling.
```
翻訳してみると
Gemファイルは、`/Users/user_name/Programs/web/testrepo/vendor/bundle/ruby/2.3.0/gems/mysql2-0.4.4` にインストールされたままになります。結果は `/Users/user_name/Programs/web/test-repo/vendor/bundle/ruby/2.3.0/extensions/x86_64-darwin-15/2.3.0-static/mysql2-0.4.4/gem_make.out` に記録されます。

mysql2（0.4.4）のインストール中にエラーが発生し、Bundlerを続行できません。
バンドルする前に 'gem install mysql2 -v' 0.4.4 ''が成功していることを確認してください。

とりあえず`gem install mysql2 -v '0.4.4'`でインストールを試みる。しかし、再び同じエラーが表示され、**bundle install → error → gem install...** 以下ループ...

解決しないじゃねーか！！！！！
ということで僕が解決した手順を書き残しておきます。
**あくまでも解決した一例です**

##解決手順

### 1.bundlerの構成オプションを設定する

ローカル指定

```
bundle config --local build.mysql2 --with-opt-lib=/usr/local/opt/openssl/lib --with-opt-include=-I/usr/local/opt/openssl/include
```

グローバル指定

```
bundle config build.mysql2 --with-opt-lib=/usr/local/opt/openssl/lib --with-opt-include=-I/usr/local/opt/openssl/include
```

### 2.プロジェクト配下にbundle install
bundle installを行う際にinstall pathをプロジェクト配下のディレクトリーに指定する。

```
bundle install --path vendor/bundle
```
いろいろな位置に散在したファイルを集める方法

## きっかけ

<blockquote class="twitter-tweet" data-partner="tweetdeck"><p lang="ja" dir="ltr">100個ぐらいのフォルダの中にそれぞれファイルがあって、それを一気に取り出して一つのフォルダに押し込みたい。unixですでに誰かがやってそうだけどヒットしない。。。</p>&mdash; yamah@新アカウント (@_YamaYuki) <a href="https://twitter.com/_YamaYuki/status/804542697797074945">December 2, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-partner="tweetdeck"><p lang="ja" dir="ltr"><a href="https://twitter.com/kubor_">@kubor_</a> 先頭単語が1-9だったので、cp 1*/*.pdb foo/ を９回やってごまかしました。よい方法ありますか？</p>&mdash; yamah@新アカウント (@_YamaYuki) <a href="https://twitter.com/_YamaYuki/status/804957051411517440">December 3, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

結構あります。こういう時。

## 解決方法

いろいろありますけど `find` の `-exec` オプションを使うのが簡単です。
例えば下記のような状態で、 `*.pdb` を `foo/` に移したいとします。

```
$ tree
.
├── 1_hoge
│   └── a.pdb
├── 2_hoge
│   └── b.pdb
└── foo

3 directories, 2 files
```

`find` の結果を `-exec` で `mv` に渡します。
`{}` に `find` の結果が入ります。

コマンドの終了位置には `\;` を入れてください。

```console
$ find [1-9]*/* -exec mv {} foo \;
```

実行するとこうなります。

```
$ tree
.
├── 1_hoge
├── 2_hoge
└── foo
    ├── a.pdb
    └── b.pdb
```

## 他のやり方

思いついたら追記するかも

**ファイル名をグロブしてforループでmv**

```console
$ for i in [1-9]*/*; do mv ${i} foo; done
```
Orelang(俺言語) の LLVM IR コンパイラを作ってみた

9月末に「プログラミング言語を作る」という記事が投稿されました。俺の考えた最低の言語なので「俺言語」です。まずはそちらをお読みください。
http://qiita.com/shuetsu@github/items/ac21e597265d6bb906dc

JSON形式でプログラムを記述し、それを実行するインタプリタです。多くの人たちが様々な言語で、俺言語インタプリタを実装し、大いに盛り上がりました。

私もC++版を投稿しました。
http://qiita.com/soramimi_jp/items/aa99c00a65579c2e25a2

あれから2ヶ月経ちましたが、最近仕事でLLVMを扱うことになったので、その勉強も兼ねて、俺言語コンパイラを作ってみました。

実際には LLVM IR という中間コードを生成するものなので、厳密にはコンパイラではありません。正しくは、コンパイラのフロントエンド、またはトランスパイラと呼ばれるものです。最終的には、`clang`コマンドを用いて、ネイティブ実行形式を生成できます。ここでは、広義な意味でコンパイラということにします。

https://github.com/soramimi/orec

使い方は`Makefile`をお読みください。

LinuxやmacOSなどで動作します。私はDebian/jessieで開発しました。あらかじめllvm/clangをインストールしておく必要があります。llvm/clangコマンドやインクルードやライブラリのパスが違うかもしれませんので、makeするとき、ファイルが見つからないなどのエラーが出た場合は、環境に応じて`Makefile`を修正してください。

言語の機能としては、演算子は `+` と `<=` しか実装していません。制御構文は `while` のみです。関数は、数値を表示するための`print`だけです。
Mac：graphvizやsemPathでパス図を描く

共分散構造分析などでパス図を描くツールを探してみると以下２種類の方法が定番のようなので試してみました。お手軽なのはsemPlotですがgraphvizは自由度が高いです。

#semPlot

```
library(semPlot)
X <- rnorm(100)
Y <- rnorm(100)
Z <- rnorm(1) * X + rnorm(1) * Y + rnorm(1) * X * Y
DF <- data.frame(X, Y, Z)

# 回帰分析
res <- lm(Z ~ X * Y, data = DF)

# パスの描画
semPaths(res, whatLabels  = "stand", style = "lisrel")
```
下記のような要素間の関係を示すパス図が表示されます。
![image](https://qiita-image-store.s3.amazonaws.com/0/59574/8d0e12ee-ae99-6bd2-52fb-3753fe06b375.png)

# graphviz

1) brewでインストールします。
`$ brew install graphviz`

もしも下記のエラーになってしまった場合

```
==> Installing dependencies for graphviz: libpng
Error: Cannot link libpng
Another version is already linked: /usr/local/Cellar/libpng/1.6.25
```
`$ sudo chown -R $(whoami):admin /usr/local`
みたいにパーミッションを変更すれば回避できます

2) dotコマンドが以下のように存在していることを確認

```
$ dot -?
Usage: dot [-Vv?] [-(GNE)name=val] [-(KTlso)<val>] <dot files>
(additional options for neato)    [-x] [-n<v>]
：
```

3) test.dotというファイル名でパスの構成を示すdotファイルを作成します

```test.dot
digraph d {
 A [label="Hello"]
 B [label="World"]
 C [label="Everyone"]
 A -> { B C }
}
```

4) dotコマンドでパス図を作ります。うまくいくとコマンド実行時のディレクトリに test.png　というファイルが生成されます。
`$ dot -T png -O test.dot`
![my1st.dot.png](https://qiita-image-store.s3.amazonaws.com/0/59574/a600d472-1365-6da9-272c-e9142635465f.png)
Arch Linuxをインストールした際の備忘録

最近Arch Linuxをインストールしたのでメモとして残しておきます


sda1    FAT32
sda2    swap
sda3    ext4
sda4    ext4



# 無線のつなぎ方

```
ip link set <interface> up
wpa_supplicant -B -i <interface> -c <(wpa_passphrase <SSID> <passwd>)
dhcpcd
```

なんかできなかったら

```
killall wpa_supplicant dhcpcd
```

# bluetoothのつなぎ方

```
$ bluetoothctl
[NEW] Controller <MAC Address> <hostname> [default]
[bluetooth]# power on
Changing power on succeeded
[bluetooth]# devices
[bluetooth]# scan on
Discovery started
[CHG] Controller <MAC Address> Discovering: yes
[bluetooth]# devices
[NEW] Device <MAC Address> <Vender Name> <Product ID>
...
[bluetooth]# agent on
Agent registered
[bluetooth]# pair <MAC Address> 
Attempting to pair with <MAC Address>
[CHG] Device <MAC Address> Connected: yes
Request confirmation
[agent] Confirm passkey <passkey> (yes/no): yes
[CHG] Device <MAC Address> Modalias: usb:vXXXX...
[CHG] Device <MAC Address> UUIDs: XXXX....
[CHG] Device <MAC Address> UUIDs: XXXX....
[CHG] Device <MAC Address> ServicesResolved: yes
[CHG] Device <MAC Address> Paired: yes
Pairing successful
[CHG] Device <MAC Address> ServicesResolved: no
[CHG] Device <MAC Address> Connected: no
[CHG] Device <MAC Address> RSSI: XXX
[bluetooth]# connect <MAC Address> 
Attempting to connect to <MAC Address>
[CHG] Device <MAC Address> Connected: yes
Connection successful
[CHG] Device <MAC Address> ServicesResolved: yes
[<Vender Name> <Product ID>]# quit
Agent unregistered
```

ちょこちょこ書き足します
macOS Sierra(10.12.1)でNetBeans組み込みWebサーバーが起動できない

数日間ハマったので共有。

# 症状
macOS Sierra(10.12.1)とNetbeans8.2を使用してサーブレットなどを実行するとGlassFishServerやTomcatサーバーの起動で泊まってしまう、又はエラーが発生して終了してしまう。（ごめんなさい、スタックトレースとか保存しておくの忘れてました。）

# 解決策
こちらのページに解決策が書いていました。
[Macbook pro issues after Mac OS siera update |Official Apple Support Communities](https://discussions.apple.com/thread/7680039?start=0&tstart=0)

下記の手順で無事起動しました。

1. システム環境整備＞ネットワーク＞(使用しているネットワークを選択)＞詳細＞プロキシ
2. 「自動プロキシ検出」「自動プロキシ構成」「Webプロキシ（HTTP）」の3つにチェックをいれ、OK＞適用と進む
3. Netbeansを起動しPreferenceを開く
4. 一般のプロキシ設定のラジオボタンが「システムのプロキシ設定を使用」になっていることを確認し再ロードをクリック。OKで終了。

ここまでやれば起動するかと思います。初回は少し時間がかかるので気長に待ちましょう。
Cmdメモ　任意のサイズのファイルを作成

# <i class="fa fa-cubes" style="font-size:1em;"></i> 概要
コマンドプロンプトで任意のファイルサイズのファイルを作成する方法。
fsutilコマンドはXP以降なら使えるはず。

# <i class="fa fa-cubes" style="font-size:1em;"></i> 書式

```bat
fsutil file createnew 【ファイル名】 【サイズ（バイト）】
```

# <i class="fa fa-cubes" style="font-size:1em;"></i> 実行例

```bat:30バイトのファイルを作成
fsutil file createnew Size30B.dat 30
```

```bat:1KBのファイルを作成
fsutil file createnew Size1KB.dat 1024
```

```bat:1MBのファイルを作成
fsutil file createnew Size1MB.dat 1048576
```

```bat:5MBのファイルを作成
fsutil file createnew Size5MB.dat 5242880
```

```bat:1GBのファイルを作成
fsutil file createnew Size1GB.dat 1073741824
```

作成されたファイルの中身をPowerShell V5で16進ダンプ表示。

```Powershell
PS C:\work> Format-Hex .\Size30B.dat


           パス: C:\work\Size30B.dat

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000010   00 00 00 00 00 00 00 00 00 00 00 00 00 00        ..............


PS C:\work>
```

# <i class="fa fa-book" style="font-size:1em;"></i> 参考
Windows10のコマンドプロンプトでfsutilのヘルプを表示。

```Text
---- サポートされるコマンド ----
8dot3name       8dot3name 管理
behavior        ファイル システムの動作の制御
dirty           ボリュームの dirty ビットの管理
file            ファイルに固有のコマンド
fsinfo          ファイル システム情報
hardlink        ハードリンクの管理
objectid        オブジェクト ID の管理
quota           クォータの管理
repair          自己復旧の管理
reparsepoint    再解析ポイントの管理
resource        トランザクション リソース マネージャーの管理
sparse          スパース ファイルの制御
tiering         記憶域階層化プロパティの管理
transaction     トランザクションの管理
usn             USN の管理
volume          ボリュームの管理
wim             透過的な wim ホスティングの管理

---- サポートされる FILE コマンド ----
createnew               指定されたサイズの新しいファイルの作成
findbysid               セキュリティ識別子でファイルを検索
optimizemetadata        ファイルのメタデータの最適化
queryallocranges        ファイルに割り当てられた範囲の照会
queryextents            ファイルのエクステントの照会
queryfileid             指定したファイルをファイル ID で照会
queryfilenamebyid       ファイル ID のランダム リンク名を表示
queryoptimizemetadata   ファイルの最適化メタデータ状態を照会
queryvaliddata          ファイルの有効なデータ長の照会
setshortname            ファイルの短い名前の設定
setvaliddata            ファイルの有効なデータ長の設定
setzerodata             ファイルのゼロ データの設定
seteof                  既存ファイルのファイルの終わりを設定
```
文系大学生がプログラミングで「やっていく」ときに心がけていること

#文系大学生もやっていくぞ
初投稿です。
早稲田大学アドベントカレンダー2日目です。
すでに12/3になってるけど気にしちゃいけない。
早稲田大学アプリケーション開発サークルA+plusのくりむです。
大学生もやっていくぞ。

#A+plusもやっていきから生まれた
大学生こそ、持っていなければいけない気概なのかもしれません。
かくいう我々A+plusも、やっていきから生まれたと言っても過言ではありません。
A+plus自体はこんなことをやっています。
[A+plus:早稲田大学授業レビューサイト](https://ei-plus.com)

なんか面白いことできないかなとか、認めてもらえることできないかなみたいな、ムラムラした感じがあっても、それを行動に移すと「意識高い系」などと揶揄されるわけですが。

何も行動してないやつに何を言われたって知ったこっちゃないぞ。
行動こそが価値だ。

面倒くさいけど、大変だけど、やっていくことで自分のやりたいことができるなら。
大学生だって、やっていかないと、好きなことで生きていけないぞ！
大人に都合のいいように使われてたまるか！

#やっていきがやっていきを生む
大学生としてやっていきを高めるために心がけてること

##面白そうなコンテンツを作ってるor少なくとも知ってはいる人がいるコミュニティに入る
どうしても大学生だと自分の周りの小さな出来事が面白すぎて満足しちゃう。
でも、世の中見てムラムラしてる大学生だっています。そういう人たちに出会う。
面白いことは、コミュニケーションの中から生まれるから、コミュ障なら大学生の間に頑張ってね。あとギャグセンス。

##やることを宣言する・やらざるを得なくする
ぶっちゃけ僕はA+plusの活動始めるまでは「適当にそれっぽいことするだけで、本格的にプログラミングなんかしなくていいや」とか思ってたので、活動が辛かった時期もあります。
まあでも背伸びして無理矢理謎のカタカナ語が飛び交う環境であれやれこれやれ言われてれば、何となく分かるようになるものだと思います。
だいたい、エンジニアになるの諦めようと思えば何時でも諦められる訳だし。

##エラー・ログ・公式ドキュメントを読む
急に具体的な話になったけど、ブログとか記事読んでると「なんかこうしたらこうなった」みたいなザックリした解決方法を良く見る。
文系大学生はそれこそ「やりたい」が先で技術的なことは何も知らないので、先に基礎学ぶと言われる「エラー・ログ・公式ドキュメントを読め」ってことを知らない。
1番確実だし近道だから、1番最初に読め！
早く解決すればそれだけやる気も出るってもんでしょ。

##1行でも書け
書こう。エラーにぶち当たろう。怒ろう。解決しよう。楽しい✌️。

#終わりに
大学生、いろんな特典があります。
有効に使いたいですね（大学4年の冬）。
UWPで辞書ソフトを作りました。

UWPで辞書ソフトを作りました。英和翻訳ソフトというほうがベターか。
最初は、Googleに投げてブラウザで結果を表示したら終わりかと思っていましたが、それでは駄目で(表示できなかった)、htmlも取得してみたのですが翻訳語が入っておらず、しかたないのでalcのデータを取得して表示しました。
初めてのUWPプログラムで、いろいろ違いがあって苦戦しました。
10日もかかってしまった…。

コードの困難なところはほぼなく、苦戦したのは、
・アイコンを作るところ。30種類くらい必要。
・Gridでのデザイン。
・Titleを設定できないらしい。
などでした。

今回できなかったことは、
・複数ページの遷移
・ファイルの読み書き
です。

こんなものなので、ストアにあげる程でもないということで、とりあえずこちらで。
かんたんに翻訳を取得できて、いい感じです。

using System;
using System.Net.Http;
using Windows.Data.Html;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace DictionaryViewer {
	public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

		private async void Button_Click(object sender, RoutedEventArgs e) {
			//string uri = "https://www.google.co.jp/?gws_rd=ssl#q=" + keyword.Text + "+%E6%84%8F%E5%91%B3";
			//searchview.Navigate(new Uri( searchkeyword));

			string uri = "http://eow.alc.co.jp/search?q=" + keyword.Text;

			using (var client = new HttpClient()) {
				// ユーザーエージェント文字列をセット
				client.DefaultRequestHeaders.Add("User-Agent", "Shin-Mozilla/5.5 (Windows NeXT 5.5; Trident/7.0; rv:11.0) like Geckoh-Kamen");
				// 受け入れ言語をセット
				client.DefaultRequestHeaders.Add("Accept-Language", "ja-JP");

				HttpResponseMessage response;
				try {
					response = await client.GetAsync(uri);
					string result = await response.Content.ReadAsStringAsync();
					
					//表示
					Result.Text = result;
				}
				catch (Exception exception) {
					string error = exception.Message;

				}
			}
		}
大人が楽しく高校生活を送る方法

こんにちは！N高等学校一期生のえむけーと申します！！
今年で37歳になりますが、今年の4月にN高等学校に入学して高校生になりました！！！
高校生活を8ヶ月過ごしてみて、色々と悩んだり怒ったり楽しんだりしながら、気がついたこととか、気をつけていることなどを書いてみたいと思います。

##申し訳程度の技術ネタ要素
技術ネタを書かないとQiitaさんに怒られるとのことでしたので、それらしいことを書いておきます。

```java:HelloNHighSchool.java
public class HelloNHighSchool {
  public static void main(String[] args) {
    System.out.println("ネビュラチェーンのN");
  }
}
```

よし

##自分は他の生徒と違うという思い込みを捨てる
大人になってから子どもの中に放り込まれると、やっぱり不安な気持ちになります。大人だから気を使われるんじゃないかとか、話題が合わないんじゃないかとか、色々考えて不安になったりもしました。
しかし、実際にチャットで話してみると、そんなことはなく、普通に同級生として接してくれる生徒がほとんどでした。他の生徒にとって「大人である」ということは、そんなに重要ではなかったようです。「髪が長い」とか「歌がうまい」とか、そんな程度の違いでしかないみたいでした。
自分が子どもの頃を思い返してみると、確かに、親戚が集まったときなどは子ども同士でも遊びますが、一緒に遊んでくれる大人と子どもとをそんなに区別してなかった気がします。

##大人を差別しない
正直な所、「大人としての威厳を示したい」とか、たまーに思ったりすることもありましたけど、割と初期の段階で動物的直感から「これはやばい」と感じて、この欲求と戦うことにしました。この選択は正解だったと思います。そもそも「大人だから敬って欲しい」っていう気持ちを持つことがとても子供っぽいと思うようになりました。
大人は知識と経験と使えるお金という点で子どもに勝っているかもしれませんが、感受性や素直さ、行動力や使える時間など、子どもが大人より優れているものだってたくさんあるわけです。「大人は偉い」っていう差別心を自分の中から消すのはけっこう大変ですが、そのおかげでとても自由な考え方ができるようになったと思っています。
今では私がワガママなことを言ったり、行儀のよくないことをすると、他の生徒から叱られて、ちゃんと反省するようになりました。こういう関係が築けたのはとても嬉しいですし、自分のよくないところをちゃんと指摘してもらえるのでありがたいです。

##授業は真面目に受ける
通信制高校なので授業は動画を見て受けています。「大人だから大丈夫だろう」といい気になって、動画をミュートで垂れ流して課題だけやって「数学の教科書1回も開いてないけどレポートおわったぜウェーイｗｗｗ」みたいなことを言ってましたが、これもあんまり良くないです。
ちゃんとノートを取りながら勉強している生徒に対して罪悪感が生まれます。罪悪感が生まれると、やっぱり楽しくないです。うまく説明するのが難しいのですが、ちゃんと授業の動画を見てレポートを終わらせた月はなんというか充実感があります。

##まとめ
先生の言うことを聞いて、お友達と仲よくして、真面目に授業を受けましょう。という、とてもありきたりでつまらない結論になってしまいました。太古の昔から言われてることには、それなりの理由があるんだなあって思いました。
大人の人でこれからN高への入学を考えてる人の参考になったら嬉しいです。

##予告
明日は [kmry2045](http://qiita.com/kmry2045) さんです！よろしくお願いします！！