OmniAICreator/Qiita-1.07M huggingface dataset:
【パズル２】ほとんどのエンジニアには解けるが、下位20％のダメなエンジニアにだけ解けないパズル?

##パズル２を作った
[前回](http://tango-ruby.hatenablog.com/entry/2015/11/30/122814)のパズルが運良くバズったので、それに続くWebエンジニア向けのパズル２を作った。プログラム言語を問わず、フロントエンド、バックエンド、iOS、Android、どんな技術を担当しているエンジニアであっても誰でも解けるパズル。
サイトにアクセスするとHack Me If You Can（ハックできるもんならやってみろ）のタイトルとCall my APIsとあるのみ。分かる人なら数分以内に解けると思う。

<img width="388" alt="20151228205015.png" src="https://qiita-image-store.s3.amazonaws.com/0/108761/ff73af93-e4e7-f4b7-4a77-58a2cbbaef0e.png">
http://challenge-your-limits2.herokuapp.com/

##パズルの難易度について議論
パズルが解けたらコメントを入れられる仕組みにしている。パズルを解いた最初の人はDarth Vader氏。実はこのDarth Vaderは私の職場の同僚アメリカ人エンジニアのA。

Aとは前回のパズルを解いてもらった時は「あーそうか」程度で終わったのだが、今回のパズルに関しては長い議論になった。Aが異を唱えたのはパズルの難易度に関して。Aの言ったことを要約すると以下になる。

A「パズルの難易度をできるだけカンタンにする点は同意する。だが今回のはカンタンと言うよりも、ほとんど問題とその答えが同時に出ている状態だ。もはやパズルになっていない。エラーメッセージに説明やヒントを記載して返していると、技術が分かっていない人でもググればスグに解決する。技術が分かってない人と分かっている人の差が無い。そんなのパズルじゃねーよ！」
とモニター画面に出したエラーメッセージを叩いて何度も主張していた。

Aの言いたいことは分かる。が、私はAの趣旨を十分に理解した上でAの考えをパズルに取り入れずに公開することにした。なぜなら私が考えるこのパズルの目的は「技術を知らなかった人をふるい落とすこと」ではないからだ。

前回のパズルにしてもすごくカンタンな作りで、キーになる技術はcurlコマンドのみだった。もしcurlコマンドを知らなかったとしても、ブログにしっかりcurlを使えば解けますよ、と記載した。この時点でcurlコマンドを知らなくてもググれば、curlを知っていた人との差は無くなったはず。

実際、パズルを解いてコメントを入れていただいた方の中に「curlを調べたら解けた」「はじめてcurl使った」などが見られて、とても嬉しかった。
ググればなんでも検索にヒットする世界に住むエンジニアにとって「ナニかを知っているかどうか」の価値はその程度だ。

##パズルの目的
ではなんのためのこんなパズルを作ったのか。目的はただひとつ**「優秀なエンジニアに楽しんでいただくため」**。
モノを作ったことのある人なら誰でも持っているであろう「どう？オレの作ったの？オモロいやろ？」と言ってみんなに作ったモノを見せたくなってしまうアノ感覚である。

「勉強になった」とコメントをいただいて誰かの役に立てるのは非常に光栄なことだ。が、私は別に「エンジニアのスキル向上のために！」とかそんな高尚な理念をかかげてパズルを作ってはいない。ただただ「オモロイやろ？」と言いたくてしょうがないから作っただけ。

なので、どうすれば優秀なエンジニアに楽しんでいただけるか、だけを考えた。ある特定の技術をたまたま知らなかった人を除外したところで、楽しめる訳がない。エラーメッセージに内容を記載しているので、ググッて多少の機転を利かせれば解決できるようにした。エンジニアに降りかかる問題の解決策を発見した瞬間の「あっ！これだ！」とモニター画面を見つめながら思わずニンマリしてしまう感覚はエンジニア冥利に尽きると言っていいだろう。その瞬間をできるだけステキに創出するパズルを心がけた。

##エンジニアの特質
優秀なエンジニア向けのパズルと謳っているが優秀な人ほど忙しいし、パズルなんかに付き合っている時間はない。
でもそんなエンジニアには共通して「おもしろそうな問題があったら、それを無視して通り過ぎることができない」という性質があることを私は知っている。

そうなのだ。放っておけばいいのにオモロそうなエンジニア系の問題があると、ついついその頭脳とキーボードを叩く指が反応してしまうのだ。パズルを通してそんなエンジニアの方々に楽しんでいただければ幸いである。


【ほとんどのエンジニアには解けるパズル2】
（herokuの無料プランにデプロイしたのでだいたい眠ってます。最初の１発目だけは遅いのでしばしお待ちください）
http://challenge-your-limits2.herokuapp.com/

【パズルの公開とその後の顛末など詳細】
http://tango-ruby.hatenablog.com/entry/2015/12/28/212010
はてなブログからの転記。こちらのブログにはもう少し詳しいヒントやパズルの解答者へのお礼などを掲載している。

##ヒント
まずはcurl使って

```ruby:clue
$ curl http://challenge-your-limits2.herokuapp.com/something/something
```
とかやればいろいろ出ます。
Debian に Docker をインストールしたときのメモ

#はじめに
タイトルの通り，Debian に Docker をインストールしたので，その時のメモです．

# 環境
- Debian 8.xxx
- CD イメージをUSBメモリに焼いてインストール
- インストール時，SSH server と Standard system utilities だけ選択してインストール


#参考URL
基本的な手順は以下の Docker のサイトの通り．
Installation on Debian - https://docs.docker.com/engine/installation/debian/

いくつか追加で必要な手順があったので，それについては，この記事の下の方で説明を書いてみた．

#とりあえずこのコマンド打てばインストールできたっていうやつ

```
# cd /etc/apt/
# cp sources.list sources.list.backup
# vi sources.list
# diff -u sources.list.backup sources.list
```

``` diff
--- sources.list.backup 2016-01-09 21:32:27.012660129 +0900
+++ sources.list        2016-01-09 21:32:36.596706983 +0900
@@ -2,8 +2,6 @@

 # deb cdrom:[Debian GNU/Linux 8.2.0 _Jessie_ - Official amd64 CD Binary-1 20150906-11:13]/ jessie main

-deb cdrom:[Debian GNU/Linux 8.2.0 _Jessie_ - Official amd64 CD Binary-1 20150906-11:13]/ jessie main
-
 deb http://ftp.tsukuba.wide.ad.jp/debian/ jessie main
 deb-src http://ftp.tsukuba.wide.ad.jp/debian/ jessie main

```

```
# apt-get purge lxc-docker*
# apt-get purge docker.io*
# apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
# echo "deb https://apt.dockerproject.org/repo debian-wheezy main" >> /etc/apt/sources.list.d/docker.list
# apt-get install apt-transport-https
# apt-get update
# apt-get install docker-engine
# docker run hello-world
```

# `/etc/apt/sources.list` の変更は何?
CD イメージから Debian をインストールすると，パッケージを CD から探しに行く設定がデフォルトで書かれている．
当然，いつまでも CD やら DVD やら USB メモリやら挿したままとか嫌なので，ネットの向こうからパッケージと取ってきてほしい．
なので，上の変更では， CD からパッケージを探しに行く設定を消している．
ネットの向こうからパッケージを探す設定は既に書かれているので，自分で足す必要はなかった．

# `apt-transport-https` ?
`apt-transport-https` が何かはよく知らないが，これをインストールする前に `apt-get update` を叩くと以下のように怒られる．


```
# apt-get update
E: The method driver /usr/lib/apt/methods/https could not be found.
N: Is the package apt-transport-https installed?
```


=おわりに=
これで Docker のインストールできました．
めでたしめでたし．
CocosStudioで作成したSceneやLayerの画像はcc.LoaderScene.preloadで読まなくても良い

CocosStudioでNodeやLayerやSceneを作成するとJSON形式かcsb形式で書き出されるが、```cc.LoaderScene.preload```ではこの本体だけ読み込めば自動的に中身のリソースも読み込んでくれる。ずらずら書かなくても良い。べんり。
HashのキーがSymbolでもStringでも値を取得する


通常、RubyはHashのキーがSymbolかStringかを判別する

```ruby
hash = { :key => 'sym', 'key' => 'str' }

p hash[:key]
# => 'sym'

p hash['key']
# => 'str'
```

しかし、Railsの、例えばcontrollerなどで使われる`params`ではこうはならない。SymbolとStringのどちらを指定しても同じ値が取得できる。

```ruby
class SampleController < ApplicationController
  def index
    p params[:controller]  # => 'sample'
    p params['controller'] # => 'sample'
  end
end
```

これはparamsがただのHashではなく、active_supportの`HashWithIndifferentAccess`クラスを継承したクラスであるため（ActionController::Parameters）。

[HashWithIndifferentAccessクラス](https://github.com/rails/rails/blob/master/activesupport/lib/active_support/hash_with_indifferent_access.rb)

なのでこのクラスを使えばRailsのparamsみたいにキーがsymbolでもstringでも同じ値を取得することができるようになる。

Hashクラスに拡張された、`with_indifferent_access`メソッドを呼び出して使った例が次のコード。

[Hash#with_indifferent_access](https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/hash/indifferent_access.rb)

```ruby
require 'active_support'
require 'active_support/core_ext'

hash = { :key => 'value' }.with_indifferent_access
p hash[:key]
# => 'value'

p hash['key']
# => 'value'
```

`HashWithIndifferentAccess`クラスをnewして使うことも可能

```ruby
require 'active_support'
require 'active_support/core_ext'

hash = ActiveSupport::HashWithIndifferentAccess.new(key: 'value')
p hash[:key]
# => 'value'

p hash['key']
# => 'value'
```

実装的には、`HashWithIndifferentAccess#convert_key`を使って、keyがsymbolの場合に文字列化しているだけっぽかった。

```
def convert_key(key)
  key.kind_of?(Symbol) ? key.to_s : key
end
```
InspectorのDebugモード

Inspectorの右上のところをDebugにすると(下図参照)
<img width="371" alt="スクリーンショット 2016-01-09 21.23.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/17192/434f2546-a68a-e0d7-0849-b436e0f9fb29.png">

private変数など本来見えないものが見えて便利。
なお、編集はできない。
下図でいうと灰色のやつがprivateで宣言したものです。
<img width="361" alt="スクリーンショット 2016-01-09 21.24.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/17192/01e9f0b8-bb58-6c77-9ba0-df04e7c1933f.png">
[自分用メモ] RaspberryPi2 入門 セットアップ編


#ハードの準備
##カメラモジュールの接続
以下のサイトがよくまとまっています。挿入するときできないじゃんと思っていたら、上げたり下げたりするんですね。
http://okuzawats.com/camera-module-20140908
#ソフトの準備
//ターミナルでゴリゴリやる方
http://qiita.com/tomk79/items/cdc1b88358afba2c6337
//NOOBSを利用する方法
http://qiita.com/aryoa/items/86ddae2212c789ddece0

//図が多めの解説
https://tool-lab.com/make/raspberrypi-startup-7/


//gccのインストールなど
http://qiita.com/tsukaman/items/44abe042d2184c021b4b

//RaspberryPiの記事めっちゃ書いてるブログ
http://deviceplus.jp/hobby/raspberrypi_entry_003/

#以下でWI-FI等の設定
おかしくなったらWi-FiのUSB差し直したら直った

//SSH設定など
http://wknar.hatenablog.com/entry/raspberrypi-install-ssh-connect

//NOOBS+SSH+Wifi
http://qiita.com/aryoa/items/86ddae2212c789ddece0
Contributor Code of Conductのメモ

[Code of conduct](https://en.wikipedia.org/wiki/Code_of_conduct "Code of conduct")の一種として最近良く見る[Contributor Covenant](http://contributor-covenant.org/ "Contributor Covenant")についてのメモ。

[Contributor Covenant](http://contributor-covenant.org/ "Contributor Covenant")については以下などを参照。

- [OSS - Contributor Code of Conduct - Qiita](http://qiita.com/nstoym/items/ca711287117074a810aa "OSS - Contributor Code of Conduct - Qiita")

GitHubで検索してみるとRubyのプロジェクトで`CODE_OF_CONDUCT.md`を置いてるケースが多いことに気づいた。

- [Search · Covenant](https://github.com/search?q=Covenant&ref=searchresults&type=Issues&utf8=%E2%9C%93 "Search · Covenant")

理由としては`bundle gem --coc`というオプションがあることが要因に見える。

実際に入った経緯としては以下のIssueで話し合われて入ったらしい

> Right now, I feel like the best option is to let people know that adding a CoC means they need to know what it says, know what violates it, and be ready to enforce the CoC on any contributors including themselves.
> But I also want to let them know that it will lower barriers to entry, and encourage them to knowingly add it, as long as they are willing to commit to it.

- [add code of conduct when scaffolding a gem by doodzik · Pull Request #3305 · bundler/bundler](https://github.com/bundler/bundler/pull/3305)
- [Remove code of conduct from generated gems · Issue #3435 · bundler/bundler](https://github.com/bundler/bundler/issues/3435)

npmにも同じようなIssueが立ってた

- [Add Code of Conduct option to npm init · Issue #11048 · npm/npm](https://github.com/npm/npm/issues/11048 "Add Code of Conduct option to npm init · Issue #11048 · npm/npm")

CoCで思い浮かべるのはRustだったけど、ここ1-2年で[CODE_OF_CONDUCT.md](https://github.com/search?utf8=%E2%9C%93&q=CODE_OF_CONDUCT.md+in%3Apath&type=Code&ref=searchresults "Search · CODE_OF_CONDUCT.md in:path")があるリポジトリが増えた感じ。(16420件)

- [The Rust Code of Conduct · The Rust Programming Language](https://www.rust-lang.org/conduct.html "The Rust Code of Conduct · The Rust Programming Language")
最近リリースされたOkHttp3について

たまたま[ChangeLog](https://github.com/square/okhttp/blob/master/CHANGELOG.md)を読んだので、気になったポイントを紹介します。

##### Package名を変更した

 3系になって`com.squareup.okhttp`から`okhttp3`に変更されています。理由は[Jakeのブログ](http://jakewharton.com/java-interoperability-policy-for-major-version-updates/)に詳しく書かれていますが、要約すると、2系のコードと共存出来るようにすることで、部分的/段階的に3系のコードを取り入れることを可能にして、バージョンアップの負担を減らすことが目的のようです。

#### グローバルなconnection poolの仕組みがなくなった
 2系は全ての`OkHttpClient`のインスタンスがグローバルなコネクションプールを共有していたらしいのですが(知らなかった... :fearful:)、それがなくなりました。 そのため、3系では一つの`OkHttpClient`インスタンスをアプリケーション全体で使いまわすことが薦められています。

##### OkHttpClientが不変になった
 2系の`OkHttpClient`はgetter/setterがあったため、途中で設定の変更が可能でした。このため内部ではリクエストを行う度に`OkHttpClient`のスナップショット(クローン)を生成していましたが、3系ではビルダーによって設定を記述し、不変なインスタンスを生成する方針に変更されました。(厳密にはコネクションプールやキャッシュなど不変でないものも含まれます)

##### OkHttpClientが[Call.Factory interface](https://github.com/square/okhttp/blob/master/okhttp/src/main/java/okhttp3/Call.java#L72)を継承するようになった
 これによりテストが容易になるそうです。

##### java.net.CookieHandlerの利用をやめた
 [`CookieJar interface`](https://github.com/square/okhttp/blob/master/okhttp%2Fsrc%2Fmain%2Fjava%2Fokhttp3%2FCookieJar.java)と[`Cookie`](https://github.com/square/okhttp/blob/master/okhttp%2Fsrc%2Fmain%2Fjava%2Fokhttp3%2FCookie.java)モデルに置き換えられました。これにより最新のRFCの仕様で定義されている属性を利用出来るようになったらしいです。

##### FormやMultipartまわりが新しくなった
 `FormEncodingBuilder`が`FormBody`と`FormBody.Builder`に、`MultipartBuilder`が`MultipartBody`と`MultipartBody.Part`と`MultipartBody.Builder`に置き換わり更に機能が強力になったとのことです。

##### Tagでリクエストを一括キャンセルする仕組みがなくなった
 今までは、`Request`インスタンスに設定した`tag`によってリクエストを一括キャンセルする方法がありましたが廃止になりました。その代わりに[`Dispatcher`](https://github.com/square/okhttp/blob/master/okhttp/src/main/java/okhttp3/Dispatcher.java)に`queuedCalls`,`runningCalls`というメソッドが生えたので、直接`Call`インスタンスを受け取って、自分で`Call#cancel`をコールしてくださいとのことです。

##### getXXXとかsetXXXとか書くの辞めた
  たしかにコード見るとget-prefixやset-prefixがないです。(Jakeがkotlinハマってる影響ですかね..)

かなり適当な訳なので、詳細は[ChangeLog](https://github.com/square/okhttp/blob/master/CHANGELOG.md)をご確認下さい。:bow: 紹介しなかった変更点もいくつかあります。
Ubuntu 15.10 デスクトップ セットアップメモ

# 言語（locale）設定

Ubuntu の default locale 設定をしておかないと、Terminal が立ち上がらなくなるなどの問題が発生します。しかしながら、default locale をインストールしたままにしておくと、LANG の変更をしたときに、意図しない状態になる可能性があるため、最低限の設定にしておきます。

最低限の設定は、/etc/default/locale に LANG のみをセットすること。LC_COLLATE は、 sort コマンドなどが LANG によって順番が変わってしまう問題を防ぐためや、高速化するために、 ユーザが意図しなくてもいいように、デフォルトで C にしておくのが無難です。

```
LANG=en_US.UTF-8
LC_COLLATE=C
```

# 英語キーボードの設定

単純に、キーボード設定で英語にするだけで、英語キーボードの設定はできます。デフォルトキーボードの設定は、/etc/default/keyboard です。「ctrl:nocaps」は、 Caps Lock キーを Control キーに置き換えるオプションです。

```
# KEYBOARD CONFIGURATION FILE

# Consult the keyboard(5) manual page.

XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=""
XKBOPTIONS="ctrl:nocaps"

BACKSPACE="guess"
```

コンソールの設定は上記で問題ないのですが、グラフィカル（X）環境ではそうはいきません。また、日本語変換も有効にする必要があります。Ubuntu 15.10 では、Input Method System として fcitx が使われるようになりました。ここでは「英語キーボード」「fcitx」「Mozc」を使い、日本語入力を問題なく行うための設定を行います。

まず、fcitx、Mozc 関連のパッケージをインストールします。

```
aptitude install fcitx fcitx-mozc
```

System Settings → Language Support で、Keyboard input method system を fcitx にします。その後、下記コマンドを実行します。

```
gsettings set org.gnome.settings-daemon.plugins.keyboard active false
```

ここで一旦ログアウトし、再度ログインします。すると、fcitx で入力することになっています。メニューバーの fcitx のアイコンから Configure を選ぶと、設定ダイアログが出てくるので、「+」を押して、「Mozc」を選びます。言語設定が日本語以外の場合は、下の「Only Show Current Language」を外すと、Mozc が見えるようになります。ここで Mozc を追加しましょう。

このままだと、Mozc で入力する際は、日本語キーボード配列になってしまいます。そこで、Mozc を追加したあと、下の設定ボタンを押すと、キーボードレイアウトの変更ができます。ここで English (US) を選択すると、英語キーボード配列で入力ができます。

キーボードのオプションは xmodmap が使え、 ~/.Xmodmap ファイルをログイン時に自動読込するようになるので、レイアウトの変更等をする場合は ~/.Xmodmap を編集することで設定できます。xmodmap の解説はここではしませんので、別途マニュアル等を参照してください。

下記の設定をすることで、右altキーで入力モードの変更になります（右altを全角/半角として設定）。

```
remove mod1 = Alt_R
keycode 108 = Zenkaku_Hankaku
```

- https://forums.ubuntulinux.jp/viewtopic.php?id=15894
- http://gihyo.jp/admin/serial/01/ubuntu-recipe/0297
Flask-KVSessionとMemcachedを組み合わせる際はセッションの有効期限に注意

# 別にFlask-KVSessionに限った話ではありませんが…
[Flask-KVSession](http://pythonhosted.org/Flask-KVSession/)はセッションの有効期限としてFlaskの`PERMANENT_SESSION_LIFETIME`を用いますが、この値はデフォルトでは31日間となっています。
しかし、Memcachedで指定できる有効期限が最長30日間であるため、正しく保存することができません。
`PERMANENT_SESSION_LIFETIME`を30日間以下にするなりして対処しましょう。
Zybo > Vivado Design Editionインストール > XSDKインストール忘れ > Vivadoから追加した

参考
http://yuki-sato.com/wordpress/2014/12/30/zynq3/


以下にアクセス
http://www.xilinx.com/support/download.html

Xilinxのユーザ登録をしておかないといけない。

## try 1 (Full Installer)

Vivado Design Suite - HLx Editions - Single File Download
にて
Vivado HLx 2015.4: Full Installer For Windows Single File Download Image Including SDK
を選択。

8.9GBのダウンロード。残り8時間。。。

1時間たっても0.5GBしか取れてないので処理をキャンセルした。

## try 2 (Web installer)

参考ページの方はWeb installerだった。自分もWeb installerでインストールしたような気がする。

インストーラ自体は 43MBですぐに取得できた。

以下を選択した。

- Select Edition to install > Vivado HL Design Editionを選択
- Vivado HL Design Edition > デフォルトのまま Next
- Select Destination Directory > デフォルトのまま Next

ダウンロードに1時間、その後インストールに6分してから以下のメッセージが表示された。

> このデバイスソフトウェアをインストールしますか?
> 名前 Jungo
> 発行元 Jungo LTD

インストールを選択。

> このデバイスソフトウェアをインストールしますか?
> 名前 Xilinx, Inc
> 発行元 Xilinx

インストールを選択。

インストールが完了後、Vivado License Manager 2015.4が起動された。

Get My Full or Purchased Licenseを選択し、Connect Nowボタンを選択。

Xilinxのwebにつながり、Have a Voucher to Redeem? にライセンス番号を入力。Redeem Nowを実行後、「OEM Zynq-7000 SoC XC7z010 Vivado Design Edition Voucher」がCertified Based Licensesリストに追加された。

OEM Zynq-7000 SoC XC7z010 Vivado Design Edition Voucherにチェックをいれ、Generate Node-Locked Licenseボタンを実行。

Generate Node License画面にて 2 SYSTEM INFORMATION において、Select a hostからHost IDを選択する。購入したPCのリストが4つ出ているのは謎。3つがEthernetで1つがDisk、後ろに何かの識別番号がついている。

Diskを選択した。

Licenseファイル(Xilinx.lic）付きのメールを受信した。

Xilinx.licファイルは C:\Xilinx\licenses に置いた。
Vivado License Managerにおいて Get License > Load License > Copy Licenseボタンを押して上記ファイルを指定することでライセンス設定が完了。


XSDKのインストール忘れていた。失敗。

参考 http://keitetsu.blogspot.jp/2014/12/xilinx-vivado-webpack.html

> 私はここでミスをしました． デフォルト設定ではSoftware Development Kit (SDK)にチェックが入っていなかったのです． 後で追加インストールすることもできますが，ここでチェックを入れておきましょう．

私もです。

## XSDKの追加インストール 

XSDK入れ忘れに対しては、先ほどのインストーラから入れなおすのではないようだ。インストーラを再度実行しようとすると、VivadoのAdd Design Tools or Devicesを実行しろというメッセージが表示される。

インストーラの代わりに、Vivadoを起動してから、Help -> Add Design Tools or DevicesからXSDKの追加ができた。こちらの所要時間は10分程度だった。

Web installerからのインストールでトータル２時間弱の時間がかかった。
Zybo > JTAG-HS2のセットアップ > Win8.1 64bit (2016年1月)

```txt:動作環境
Windows 8.1 pro (64bit)
DIGILENT JTAG-HS2 Programming Cable
```

自分の過去メモ http://qiita.com/7of9/items/29b10c2743890696dde0 を参考に、JTAG-HS2をインストールしてみた。

1. http://www.ftdichip.com/Products/ICs/FT2232H.htm にて「D2XX Drivers」をクリック
2. Windowsの項目にある「setup executable」をクリック
3. 取得したファイル (CDM v2.12.00....exe)を実行する

2016年1月9日現在に取得したファイルは
CDM v2.12.10 WHQL Certified.exe

上記インストール後JTAG-HS2ケーブルを接続すると、「USB Serial Converter」という項目が表示されるようになった。
![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/3f52be6d-4e26-195e-a26d-39e7c9c65787.png)

プロパティの「詳細設定」を開いて、VCPをロードする、にしておいた。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/95e53e0d-4803-c544-bd02-7bdc6e2c0295.png)
Zybo > S. ZYBO > Adept USB deviceドライバのインストール (2014年の情報)

自分の過去メモより

Windows8.1の環境にZYBOをUSBケーブルで接続したが、AdeptのUSB deviceは認識しなかった。
以下の手順で認識するようになった。

1. http://www.ftdichip.com/Products/ICs/FT2232H.htm にて「D2XX Drivers」をクリック
2. Windowsの項目にある「setup executable」をクリック
3. 取得したファイル (CDM v2.12.00....exe)を実行する
 
上記によりが追加される。

- USB Serial Converter A
- USB Serial Converter B

このうち、Converter Bの方のプロパティ > 詳細設定 にて 「VCPをロードする」にチェックをつけることで、UART入出力をPCのterminalでできるようになる。
Zybo > Link > JTAGケーブル > JTAG HS2 Programming Cable > web / reference manual

ZyboでのFPGA開発に使おうと購入したJTAGケーブル

https://www.digilentinc.com/Products/Detail.cfm?Prod=JTAG-HS2

reference manual
https://www.digilentinc.com/Data/Products/JTAG-HS2/JTAG-HS2_rm.pdf
カーネルが無くなって起動できなくなったUbuntuに、カーネルをインストールする方法

Ubuntuで間違えてカーネルすべて消してしまうことがたまに起こります。
カーネルを消してしまえば、grubからも起動できません。
そこで、Ubuntuのインストールディスクの機能を使って、カーネルを再インストールします。

#環境
今回試す環境はVirtualBox上のUbuntu Server 14.04.3で、apt-getからlinux-imageと名前のつくパッケージすべてを削除した状態です。
また、今回はインストール先のパーティションはlvmになっているので、通常の物理パーテーションのみとは少しだけ違います。

この状態で起動すると、grub上からはMemory testしか、選択できない状態になっています。

![ubuntu-crash-2.png](https://qiita-image-store.s3.amazonaws.com/0/108558/7f4a1a61-2dba-51da-df6c-d812117d04a4.png)

#Rescue a broken system
OSが動かない状態では、カーネルを再インストールすることは出来ません。
そこで、Ubuntu Serverのインストールディスクを使用します。

Ubuntu Serverのインストールディスクをブートさせ、言語選択をEnglishにした時、下のような画面になります。

![ubuntu-cdboot.png](https://qiita-image-store.s3.amazonaws.com/0/108558/6f881d8b-41d4-7224-cc96-38445e7c321e.png)

この画面から、"Rescue a broken system"を選択します。

その後、言語や地域、キーボードのレイアウト、OSの名前などシステムの設定を要求されますので適当に設定します。
ある程度まで設定すると、下のような画面になります。

![ubuntu-rescue-deviceselect.png](https://qiita-image-store.s3.amazonaws.com/0/108558/7e94f3c3-e74e-494f-8a70-21dd9806eaa8.png)

この画面は、修復したいOSのパーテーションの選択です。今回の環境ではlvmでパーテーションを区切っているので、"/dev/ubuntu-vg/root"を選択します。
選択後に"Mount separate /boot partition?"と聞かれるのでYesを選択。

次に下のような画面が表示されます。

![ubuntu-rescue-operations.png](https://qiita-image-store.s3.amazonaws.com/0/108558/78dd5437-2787-b100-63e8-05dde8e92dd7.png)

ここで、"Excute a shell in /dev/ubuntu-vg/root"を選択します。
これでOSを動かせる状態になります。

#OSの操作
OSを動かせる状態ではありますが、まだカーネルはインストールされていません。
なので、カーネルのパッケージをインストールします。

まず、カーネルをインストールする前にしなければいけないことがあります。
この状態だと、DNSによる名前解決ができません。名前解決が出来ないと、パッケージのインストールは出来ません。
どうやら、/run以下のファイルが生成されていないため、/etc/resolv.confのシンボリックリンク先の/run/resolvconf/resolv.confが存在しない状態になっており、ネームサーバの設定が読み込まれない状態みたいです。

なので、以下のコマンドを打ちます。

```
$ mkdir /run/resolvconf/
$ echo nameserver 8.8.8.8 > /run/resolvconf/resolv.conf
```

こうしたことで、名前解決ができるようになりました。

次に、カーネルとlvmのパッケージのインストールをします。
以下のコマンドを打ちます。

```
$ apt-get update
$ apt-get install linux-image-generic lvm2
```

以上で、カーネルは見事に復活しました。あとは再起動するだけです。
tig のコミットグラフがズレちゃう人のための対処法


[tig](https://github.com/jonas/tig "jonas / tig") は CUI の git コマンド・ラッパーで、すでにたくさんの人たちからその高速性と使い勝手の良さを紹介されています。
かくいう私も、生きているブランチ数が100に迫るプロジェクトに仕事で関わるようになってから SourceTree の遅さに耐えられなくなり、機会あるごとに「tig いいよ tig」と布教につとめています。
リポジトリのコミットグラフを見ながらそれぞれの変更個所を同じターミナル画面の中で確認できる機能は特に便利です。

ですがしかし、UTF-8 モードではコミットグラフの表示が乱れてしまうのでしかたなく ASCII モードで表示しているという方々も多いようです。

ズレたグラフの例 (Myrica M 12pt の OS X ターミナル)
![ズレたグラフの例 (Myrica M 12pt の OS X ターミナルで表示)](http://cl.ly/eOAS/%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB_001.png)

安心してください、そのズレは直せます。

## グラフがズレる原因

専門外なので簡単にはしょって説明しますと、Unicode において文字幅が Ambiguous(曖昧) と定義されている文字によるものです。
[Wikipedia 東アジアの文字幅](https://ja.wikipedia.org/wiki/%E6%9D%B1%E3%82%A2%E3%82%B8%E3%82%A2%E3%81%AE%E6%96%87%E5%AD%97%E5%B9%85) にはギリシア文字やキリル文字がその例として挙げられていますが、ほかに幾何学記号や罫線なども曖昧幅の文字に含まれています。
これら曖昧幅の文字は、日本語など東アジア圏の言語では幅の広い文字(いわゆる全角文字)として扱い、それ以外の言語では幅の狭い文字(いわゆる半角文字)として扱われるという、なかなか困った性質を持っています。
tig は1バイト文字コードの文化圏で開発されたソフトウェアですから、当然のように罫線も記号も半角1文字分の幅しかないと思っているわけですね。

マルチバイト文字コードの端末で「きれい」なグラフを表示するには、以下のふたつの方法が考えられます。

1. 曖昧幅の文字を「幅の狭い文字」として作成された日本語フォントを使う
2. tig のソースコードにパッチをあてて Japanese only にしてしまう

それでは続いて、それぞれの方法を説明していきましょう。

## 曖昧幅の文字を「幅の狭い文字」として作成された日本語フォントを使う

ごめんなさい、日本では「罫線は全角文字」の時代が長く続いているため、実際にそういうフォントがあるかどうか知りません。

でも、OS X のターミナルで Menlo フォントを指定してやれば、グラフはきれいに表示されます。

グローバル・スタンダードに合わせた例 (Menlo 12pt の OS X ターミナル)
![Menlo 12pt の OS X ターミナル](http://cl.ly/eNrQ/%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB_002.png)

Menlo は Mac OS X 10.6 からシステム標準で搭載されている英語フォントですが、ターミナルでは問題なく日本語も表示されますので、Mac を買ってきてから何も設定をいじっていなければこんな感じになるはずです。
ターミナルの「設定」→「詳細」で曖昧な文字幅を広くする設定を **はずして** おくことをお忘れなく。

## tig にパッチをあてて Japanese only にする

Menlo だとなんかカワイイが足りないんだよね …… ということで、どうしてもフォントを変更していたい人は、tig に「ここは日本だ、お前も日本人になれ」と教え込むしかないでしょう。

日本人が求めるグラフの例 (Myrica M 12pt の OS X ターミナル)
![Mirica M 12pt の OS X ターミナル](http://cl.ly/eNz3/%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB_003.png)

幸いに tig のソースコードは GitHub で公開されていますから、誰でもカスタム tig を作ることができます。

### tig に日本帰化パッチをあてる手順

#### 1. リポジトリのクローンを作る

```sh
mkdir git_repo
cd git_repo
git clone https://github.com/jonas/tig.git
```

#### 2. パッチをあてる

休日の半日でとりあえず作ってみた [パッチ](http://cl.ly/eOAK/download/tig_japanize.patch) を置いておきますので、煮るなり焼くなり参考にするなり自由に使ってください。
バグがないように努力はしましたが、まだ何か残っているかもしれません。(要するに、自己責任でお願いします)

```sh
cp ~/Downloads/tig_japanize.patch tig/
cd tig
patch -p0 < tig_japanize.patch
```

#### 3. tig をビルドする

```sh
make configure
make
```

#### 4. tig をインストールする

```sh
make install
```

実行ファイル tig が `~/bin/` に、設定ファイル tigrc が `~/etc/` にインストールされます。
インストール先のパスが気に入らない人は、自分の手でコピーしましょう。

#### 5. まだズレてる!?

`~/etc/tigrc` を `set line-graphics = utf-8` に書き換えて、期待したとおりに表示されるかどうか試してみてください。
もしも罫線がそろわずにズレていたら、ターミナルの「設定」→「詳細」で曖昧な文字幅を広くする設定を **入れて** ください。

* * *

### GitHub に置いときました (2016-09-26: 追記)

たまに参考にしてくれる人がいるのと、御本家のバージョンが 2.2 に更新されていたので、GitHub に [リポジトリ](https://github.com/BalancedCracker/jtig) を公開しました。


* * *

歴史的経緯の産物とはいえ、曖昧幅の文字なんてものはなるべく早く消えてほしいものです。
Grape使ってみた。Rspecでのテストも書いてみたお


ちっすmajihuwaっす！

アプリを作る過程でweb api作るくさいので、railsで作ってみようと思います！
調べてみるとGrapeっていうライブラリが使いやすそうなので使ってみました！

## インストール
Gemfileにgrape追加

```Gemfile
gem 'grape'
```

```インストール
$ bundle install
```

## 設定
APIの実装ファイルを作成

```lib/api.rb
$ touch lib/api.rb
```

libディレクトリ配下を自動的に読み込むように設定

```config/application.rb
config.autoload_paths += %W(#{config.root}/lib)
```

ルーティングに、API実装ファイルのマウントを追記

```config/routes.rb
mount API => "/"
```

## 書く

```lib/api.rb

class API < Grape::API

prefix "api"

version 'v1', :using => :path

format :json

```

## サンプル

yahoo.co.jpからスクレイピングしてタイトルを取得するapiを作ってみた

```lib/api.rb
# -*- coding: utf-8 -*-
require 'open-uri'
require 'nokogiri'

class API < Grape::API

prefix "api"

version 'v1', :using => :path
format :json

resource "quiz" do
    desc "return quiz"
    get do
      # スクレイピング先のURL
      url = 'http://www.yahoo.co.jp/'

      charset = nil
      html = open(url) do |f|
        charset = f.charset # 文字種別を取得
        f.read # htmlを読み込んで変数htmlに渡す
      end

      # htmlをパース(解析)してオブジェクトを生成
      doc = Nokogiri::HTML.parse(html, nil, charset)

      # タイトルを表示
      p doc.title
      {h2:doc.title}
    end
  end
end

```
ローカルから取得してみる

```
$curl --get 'http://localhost/api/v1/quiz'
{:h2=>"Yahoo! JAPAN"}
```
## Rspecでテスト
Gemfileにjson_expressionsとrspecを追加

```Gemfile
gem 'json_expressions'
gem 'rspec-rails','~> 3.4.0'
```

インストール

```
$bundle install
```
RSpec初期化的な

```
$rails g rspec:install
```
これで,railsアプリdir/spec/のしたにspec_helper.rb rails_helper.rb
が作成される

先ほどのサンプルを書く

```spec/requests/api_spec.rb
require 'rails_helper'

describe "GET quiz" do
  it "quiz" do
    get '/api/v1/quiz'
    expect(response.status).to eq 200
  end
end
```

テストを実行する

```
$ bundle exec rspec
```

参考
http://qiita.com/milkcocoa/items/5a4656ee1fd51e86e57e
http://qiita.com/zaru/items/6f8204226008681737f1

##参考
### 公式ドキュメント
https://github.com/ruby-grape/grape#basic-usage

### qiita記事
- http://qiita.com/fakestarbaby/items/fa03cf333744b7c70e72
- http://qiita.com/milkcocoa/items/5a4656ee1fd51e86e57e

参考にさせて頂きました！あざす！
Qiita > IE11(version 11.0.9600.16384) > トップページにつなぐと「Internet Explorerは動作を停止しました」になる > IE11 version 11.0.9600.16438では問題なし

```txt:動作確認
Internet Explorer11 version 11.0.9600.16384
Windows 8.1 pro (64bit)
```

FPGA用に購入した新しいPCで
http://qiita.com
に接続に行くと「Internet Explorerは動作を停止しました」となる。

IE11は未対応なのか、64bit版OSが問題なのか。

Chrome(バージョン 47.0.2526.106 m)では問題なし。

<hr>
(追記 2016/01/10)

- 問題のあった組合せ
  - Internet Explorer11 version 11.0.9600.16384 + Windows 8.1 pro (64bit) 
- 問題のない組合せ
  - Internet Explorer 11 + Windows 7 Home Premium SP1
  - Internet Explorer11 version 11.0.9600.18125 + Windows 8.1 pro (64bit) 

IE11のバージョンアップで回避できるかもしれない。

## Windows Updateをしてみた
(追記 2016/01/10)

上記の問題のある組み合わせのPCに関して、Windows Updateをしてみた。

IE11のバージョンは以下となった。
11.0.9600.16438

別のWin8.1 64bit PCのIE11のバージョン(11.0.9600.18125)と違う理由は不明。

Windows Update後、Qiitaのトップページでエラーは出なくなった。

このあたりが関係あるのかははっきりしない。
https://github.com/nvaccess/nvda/issues/3618
[Swift] 簡単にエラーメッセージを表示する AlertBar

## 概要
ステータスバーの上にエラーや完了通知メッセージを表示する[AlertBar](https://github.com/jinSasaki/AlertBar)を作りました。
簡単なものですが、開発初期段階でデザインが決まってないときやモックなどで便利になるかと思います。

https://github.com/jinSasaki/AlertBar
気に入ったらStarお願いします。

![demo](https://github.com/jinSasaki/AlertBar/raw/master/etc/demo.gif)

## 環境
- Swift 2.0
- iOS 8.0
- ARC

## CocoaPodsでインストール
（CocoaPodsのインストール方法は省略）
`Podfile`に以下を追加

```ruby
pod "AlertBar"
```

## 使い方
### はじめに
`AlertBar`をimport

```swift
import UIKit
import AlertBar

class ViewController: UIViewController {
...
```

### メッセージを表示
`AlertBar`には

- Success
- Error
- Notice
- Warning
- Info

タイプが用意してあります。
それぞれ予め文字色と背景色が設定されています。

メッセージを表示するときは

```
AlertBar.show(.Success, message: "This is a Success message.")
```
と書きます。

また、背景色と文字色を個別に設定することもできます。
`Custom`タイプを設定し、背景色とと文字色を `.Custom(BackgroundColor, TextColor)`のように指定します。

```
AlertBar.show(.Custom(UIColor.lightGrayColor(), UIColor.blackColor()), message: "This is a Custom message.")
```

#### メッセージの表示時間
`AlertBar` はメッセージの表示時間も変更することができます。

```
AlertBar.show(.Success, message: "This is a Success message.", duration: 10)
```
Python初心者がScikit-imageの例題を自分用に使うためのヒント

[Python初心者のためのOpenCV](http://qiita.com/nonbiri15/items/e54b09f799375a3db49d)
では、OpenCVの（opencvのディレクトリ)\sources\samples\python2にあるPythonの例題の実行の仕方を書いた。


[OpenCV-Python & Scikit-image　-「必見『OpenCV-Python Tutorials』２」への追記](http://qiita.com/nonbiri15/items/5f0854ad368fd58fdaf8)
では、[Scikit-imageの配布元](http://scikit-image.org/)からの例題のダウンロードと実行の仕方を示した。

[「OpenCV-Python Tutorials」と「実践コンピュータビジョン」とscikit-learn](http://qiita.com/nonbiri15/items/d0383fcc01cadc6dc5ba)
では、[scikit-learnの配布元](http://scikit-learn.org/stable/index.html)からの例題のダウンロードと実行の仕方を示しました.

これらの例題では、スクリプトとその必要なデータとがセットで含まれているので、使い始めることができます。
OpenCV-Pythonや[Scikit-image](http://scikit-image.org/), [scikit-learn](http://scikit-learn.org/stable/)の魅力のため、Pythonに引き寄せられて来る人が増えてきています。

　この記事では、Scikit-imageの例題を、ほんの少しだけ改変して、遊んでみるために、Python初心者向けの内容を書いてみます。


####**ヒント：入力画像を差し替えてみよう。**
  参考記事 [【シリーズ】「pythonとOpenCVを用いたCVプログラミング 」第8回： OpenCV-python① 画像の入出力と可視化(highGUI))](http://derivecv.tumblr.com/post/68629592456)
　OpenCV-Python、scikit-image, scikit-learnは全て共通のデータ形式を使っている。そのため、
　scikit-imageの例題のスクリプトでの入力データをOpenCV-Pythonのcv2.imread("lena.jpg")などと置き換えることができる。
　入力データを差し替えてみると、いろんなことがわかってくる。

課題：
[Normalized Cut]
(http://scikit-image.org/docs/dev/auto_examples/segmentation/plot_ncut.html#example-segmentation-plot-ncut-py)

の例題で、入力画像を変えてみよう。

####**ヒント：縮小画像の入力**
　入力画像の大きさを変えてみよう。
　cv2.resize()を検索してください。
 [python+Opencvによる画像処理5（リサイズ）](http://tatabox.hatenablog.com/entry/2013/07/15/164015)
 cv2.resize()の戻り値が縮小後の画像なので、
　関数の入力と出力との区別がつきやすいのがPythonのライブラリの特徴です。
　
####**課題：**
[Normalized Cut]
(http://scikit-image.org/docs/dev/auto_examples/segmentation/plot_ncut.html#example-segmentation-plot-ncut-py)

の例題で、入力画像を半分に縮小して動作させてみよう。

　
####**ヒント：部分画像を切り出してみよう。**
OpenCV-Pythonや、scikit-image, scikit-learnではいずれも共通のデータ形式を利用している。カラー画像ではimg[y座標, x座標, BGR]の順に添え字を指定します。グレースケール画像ではgray[y座標,x座標]の添え字です。
画像の大きさを知るためには
[h, w] = img.shape[:2]
[h, w] = gray.shape
となります。
y座標の範囲は、最小の値は0で最大値がh-1となります。
x座標の範囲は、最小の値は0で最大値がw-1となります。

subImg = img[yu:yd, xl:xr, :]
としたとき、(yu, yd)の点は部分画像に含まれますが、
ydの位置とxrの位置は、部分画像に含まれないことに留意してください。


参考記事[PythonとOpenCVで画像を分割する](http://qiita.com/satoshicano/items/bba9594a1203e24e2a31)

###**課題：**
 上記の[Normalized Cut](http://scikit-image.org/docs/dev/_images/plot_ncut.png)で入力画像を部分画像にしてみてください。


###**付記：**
　OpenCV-C++の場合にはcv::Mat　のデータ形式を利用しています。
この場合も
cv::Mat img = cv2.imread("lena.jpg", 0);

cv::Matの要素にアクセスするには
最初の添え字がy、次の添え字がxになっています。
このことは、numpy.arrayを使っているOpenCV-Pythonでも、cv::Matを使っているOpenCV-C++でも共通です。
img.at<uchar>(y,x)


[ヒント2　複数のファイルを処理する](http://qiita.com/nonbiri15/items/f50857dc555064134db6)
2次元のデータを、pythonのmatplotlibを用いて一瞬で図に起こす

中身がどんなのかをすぐに確かめたい2次元データが手元にあるとき、pythonで予め以下のような関数を作成しておけば、そのデータを一瞬で図に起こすことができる。
図の細かい設定は気にしない、とにかく手軽さを求めたい人向け。

```quick.py
def draw(data,cb_min,cb_max):  #cb_min,cb_max:カラーバーの下端と上端の値
    import numpy as np
    import matplotlib.pyplot as plt
    X,Y=np.meshgrid(np.arange(data.shape[1]),np.arange(data.shape[0]))
    plt.figure(figsize=(10,4))  #図の縦横比を指定する
    div=20.0                    #図を描くのに何色用いるか
    delta=(cb_max-cb_min)/div
    interval=np.arange(cb_min,abs(cb_max)*2+delta,delta)[0:int(div)+1]
    plt.contourf(X,Y,data,interval)
    plt.show()
```
これで、
`In[10]: import quick`
`In[11]: quick.draw(data,-2,32)`
と実行すると、numpyで作成された2次元配列の中身を、カラーコンターの図で出力してくれる。
![t.png](https://qiita-image-store.s3.amazonaws.com/0/88804/82da030c-8a33-5d79-5c2a-c591037a2259.png)
<div align=center>(例：1月の全球の海面水温分布)</div>

# **図の向きを調整したいとき**
## **図を左右反転させたいとき**
`In[12]: quick.draw(data[:,::-1],-2,32)`
![lr.png](https://qiita-image-store.s3.amazonaws.com/0/88804/6002f3e4-b8ec-ac06-4a66-d69fb1eea897.png)

## **図を上下反転させたいとき**
`In[12]: quick.draw(data[::-1,:],-2,32)`
![ud.png](https://qiita-image-store.s3.amazonaws.com/0/88804/ac21764b-935f-eb4d-1bef-8435f7e81434.png)


## **図を90度回転させたいとき**
`In[12]: quick.draw(data[:,::-1].transpose(),-2,32)`
左右反転させてから転置する
![transpose.png](https://qiita-image-store.s3.amazonaws.com/0/88804/3b0a2d6b-867e-52e3-2f0a-fecd7bdb0295.png)

## **図を180度回転させたいとき**
`In[12]: quick.draw(data[::-1,:][:,::-1],-2,32)`
上下反転させてから左右反転させる
![180.png](https://qiita-image-store.s3.amazonaws.com/0/88804/83c47104-86c3-944d-8124-00867a1fb9a5.png)

---
参考URL : http://seesaawiki.jp/met-python/d/matplotlib
ThingSpeak / python > データアップロード実装例 / プロットしてみた

ThingSpeakへのデータアップロードのpython実装例。

http://www.australianrobotics.com.au/news/how-to-talk-to-thingspeak-with-python-a-memory-cpu-monitor

httplibとurllibを使用している。

2011年4月にはすでに存在しているサービスのようだ。

## やってみた

```txt:動作環境
Raspberry Pi2 + raspbian
```

pythonターミナルで上記の例をやってみた。
(API KEYは以下のものからすでに変更済み)

```py
pi@raspberrypi ~ $ python
Python 2.7.9 (default, Mar  8 2015, 00:52:26) 
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import httplib, urllib
>>> params = urllib.urlencode({'field1': 12, 'field2': 11, 'key':'BD6xM4sZEyT8'})
>>> print params
field2=11&field1=12&key=BX8D6M4U0GZE5KT8
>>> headers = {"Content-type": "application/x-www-form-urlencoded","Accept":  
...     "text/plain"}
>>> conn = httplib.HTTPConnection("api.thingspeak.com:80")
>>> conn.request("POST", "/update", params, headers)
>>> response = conn.getresponse()
>>> print response.status, response.reason
200 OK
>>> conn.close()
>>> params = urllib.urlencode({'field1': 3, 'field2': 2, 'key':'BD6xM4sZEyT8'})
>>> conn = httplib.HTTPConnection("api.thingspeak.com:80")
>>> conn.request("POST", "/update", params, headers)
>>> response = conn.getresponse()
>>> conn.close()
>>> 

```

下記のようにプロットされた。
https://thingspeak.com/channels/77614
ThingSpeak > Update a Channel / Update Chart

https://jp.mathworks.com/help/thingspeak/update-a-channel.html
にThingSpeakへのデータのアップロード例がある。

Valid parametersを見るとそこには「日時」の項目がない。

代わりに応答文字列として「created_at」というのがある。

PUTした時刻が日時となるのだろうか？

## Update Chart
よく見るとUpdate Chartの方でグラフを更新するようだ。

https://jp.mathworks.com/help/thingspeak/create-a-chart.html

こちらには`xaxis (string) Chart's x-axis label, default: "Date" (optional)`というのがある。
Introduction to R

最近、文系の友人が回帰曲線を描きたいと言い出したので、その手伝いをするために統計用のプログラミング言語Rをちょこっと勉強したので、そのメモ。

###Rのインストール
僕はLinuxMint（Ubuntuの亜種）を使っているので、http://sites.psu.edu/theubunturblog/installing-r-in-ubuntu/ を参考に簡単にインストールできた。

```bash
sudo apt-get install r-base r-base-dev
```

をターミナルで叩けばよい。

###インタラクティブモードでの実行
自分の場合は、常にこのモードを使っていた。非常に簡単で、ただコマンドラインで、Rと入力してReturn(Enter)を叩くだけである。すると、Rの説明みたいな文章が表示されて下にプロンプトが現れる。そこに、数式とか関数を入力していけばよい。スクリプトを書いて、それを実行したい場合は、

```r
source("スクリプトのパス")
```

とすればいいらしい。
基本的には計算、グラフィックス、データの入出力機能がかなり充実したプログラミング言語であり、とくにインタラクティブモードに至ってはほとんどPythonやRubyと同じように扱える。if文やfor文などの制御文もちゃんとあるし、自分で関数定義もできるので結構よい。（当初は、ここまで柔軟なのものだとは思っておらず、言語であるとも認識していなかったので若干驚いた）
Rには元からいろいろな関数が用意されており、目的ごとに分類されたパッケージに入っている。また、デフォルトではロードしていないパッケージもあり、それらは

```r
library("package-name")
```

で使えるようになる。例えば、友人が最初によこしたデータは、STATAという統計ソフトが使っているデータ形式である.dtaだった。これをRで読み込むためには、foreignパッケージのread.dta()を使う。このパッケージはデフォルトでロードされていないので、

```r
library("foreign")
```
とする必要がある。


###データの取り込み
データ解析するには、何よりもまずデータがなければならない。このデータは大抵はテキストやCSV、あるいはExcelなどで手に入る。それらをRで処理するためには、Rに取り込まなければならない。Rにはデータ形式に応じて適切にデータを取り込むための関数群が用意されている。テキスト、あるいはCSVなど形式を取り込む最も汎用的な方法は、read.table()関数を使うことである。

```r
data <- read.table("~/data.txt", skip=1, header=T, sep=",")
```

のようにすることによって、"~/data.txt"からデータを読込み、それをデータフレームという型のオブジェクトに変換し、それをdataという変数に代入してくれる。ちなみに、skip=1は、データの１行目にデータの説明などの余計なものがついているから、それを無視してねと指定する。header=Tは、データの各フィールドのラベルが読み込むデータにあるから、それも取り込んでねという意味。また、sep=","は、各フィールドがコンマで区切られているからねと関数に教えている。この他にもいくつかオプションがあるので、適宜確認すべし。
データフレームは、いわゆるデータベースのテーブルみたいなものである。データフレームは行列のようなもので、各行１つのレコードに、各列がフィールドに対応する。我々はいつでも、x番目のレコードのフィールドa、フィールドb、フィールドcを取り出すことができる。
read.table関数は割と汎用的な読み込み関数であるが、頻繁に使われるデータ形式に関してはそれ専用のラッパー関数がある。例えば、CSVファイルを読み込みたいのであれば、read.csvを使ったほうが便利である。これの使いかたは簡単で、引数にデータファイルのパスを指定するだけである。また、Microsoftのxlsx形式だったら、xlsxパッケージのread.xlsx関数を使う。ただし、このパッケージはデフォルトではインストールされていないので、

```rebol
install.packages("xlsx", dep=T)
library("xlsx")
data <- read.xlsx("~/excel_file.xlsx", "Sheet1")
```

という感じで使う。



###回帰分析
今回Rを勉強した目的なので、とりあえずのラスボス。凝ったことをしないのであればめっちゃ簡単で、

```r
result <- lm(formula=y~x1 + x2 + x3, data=my_data)
summary(result)
```

とすれば、分析結果が変数resultに代入され、それがsummary関数によって表示される。coefficientを見ればどの説明変数がどれだけ従属変数に影響を与えているかをみることができる。ここで、dataに指定しているmy_dataはデータフレームで、y, x1~x3はmy_dataのフィールドの名前である。また、formulaは回帰分析のモデルを指定するためのものである。詳しくはドキュメント等を参照していただきたいが、ここでは、y = a + b1*x1 + b2*x2 + b3*x3 + e というモデルに当てはまるように各係数b1~b3と切片aを求めるように指定している。


今回初めてRに触ってみて、とても便利だなと感じた。今後も勉強を続けていきたいと思う。とくに、参考にさせて頂いたサイトに、"グラフィックも充実"と書いてあったので、それも使いこなせるようになりたいと思う。これでgnuplotともさよならできる!かもしれない。











###参考文献
Rの基礎とプログラミング技法　U.Ligges 著 石田基広 訳　Springer Japan社

R-Tips http://cse.naro.affrc.go.jp/takezawa/r-tips/r.html
Unityでラスタースクロール

Unityでラスタースクロール実装したよ！
みたいなのが見つからなかったので、自分で作ってみましたという記事です。
どこかで既出でしたらごめんなさい・・・

## ラスタースクロールとは
<p align="center"> ラスタースクロール: [Wiki](https://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%B9%E3%82%BF%E3%83%BC%E3%82%B9%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%AB "ラスタースクロール")

「ラスタースクロール」と検索して動画見てもらうのが一番わかり易いとは思いますが

![noeffect.png](https://qiita-image-store.s3.amazonaws.com/0/108809/dd0586cf-6f6f-0f04-88a7-7bad88930e61.png)

これを

![effect.png](https://qiita-image-store.s3.amazonaws.com/0/108809/6040fc03-1a3f-b076-1193-1c8e1b331db7.png)

こんな感じにゆらゆら揺らします。


## 実装方法

PostEffect(ImageEffect)を使います。

まずはスクリプトから

```csharp:PostEffect.cs
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class PostEffect : MonoBehaviour
{
	public Material mat;

	public void OnRenderImage(RenderTexture source, RenderTexture destination)
	{
		Graphics.Blit(source, destination, mat);
	}
}
```

OnRenderImageを使い、描画する画像(テクスチャ)にマテリアルを適用しています。
今回の場合このマテリアルはインスペクター上から設定することになります。

インスペクター上から設定するマテリアルには、テクスチャをラスタースクロールするマテリアルを設定します。Unity上でマテリアルを作成し、以下のシェーダを適用させます。

```none:RasterScroll.shader
Shader "Custom/RasterScroll"{
	Properties{
		_MainTex("MainTex", 2D) = "white" {}
		_Level("Level", Range(0, 1)) = 0.2
		_Speed("Speed", Range(0, 3)) = 0.5
		_RoundTrip("RoundTrip", Range(1, 5)) = 1
	}
	SubShader{
		Pass{
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			#include "UnityCG.cginc"

			struct appdata_t
			{
				float4 vertex:POSITION;
				float3 normal:NORMAL;
				float4 texcoord:TEXCOORD0;
			};

			struct v2f
			{
				float4 pos:POSITION;
				float2 uv:TEXCOORD0;
			};

			sampler2D _MainTex;
			float4 _MainTex_ST;
			float _Level;
			float _Speed;
			float _RoundTrip;

			v2f vert(appdata_t v)
			{
				v2f o;
				o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
				o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
				return o;
			}

			float4 frag(v2f i) :COLOR{
				//1秒で _Speed ずつ加算されるタイムの作成
				float time = _Time.y * _Speed;
				//y座標(0 ~ 1)における波形のスタート位置のズレ
				float dy = time - floor(time);
				//x座標(0 ~ 1)のズレ
				float dx = sin(radians((i.uv.y - dy) * 360 * floor(_RoundTrip))) * _Level;
				//ピクセルの位置を計算
				float2 uv = float2(i.uv.x + dx, i.uv.y);
				//x座標が範囲外になってるものは黒で塗りつぶす
				if (uv.x < 0 || 1 < uv.x)
					return float4(0, 0, 0, 0);
				return tex2D(_MainTex, uv);
			}
			ENDCG
		}
	}
}
```

このマテリアルの

* Level : 揺れ具合
* Speed : 速度
* RoundTrip : 周波数

を調節することでラスタースクロールのアニメーションを変更できます。
JavaScript初心者がES2015をReactとかに適用する時に色々ハマったことのちょっとしたまとめ

# 前提
ES2015の仕様が固まってサンプルコードも増えてきたのをきっかけにJavaScript再入門し始めたので、慣れている人には「こんなの当たり前じゃん」ということばかりだと思います。

タイトルにもあるように、だいたいReactの例が大半です。

あと、babelとかbrowserifyとかの使い方は書きませんし、能力的に書けません。

量が少ないので何か他に落とし穴が見つかったりしたら追記するかもしれません。

# React.jsでES2015を使う時にハマったこと

## ES2015のクラス構文使った時のgetInitialStateの代わりの書き方がわからない

A. constructorの中に書きます。

```javascript:sample1.js
class MyComponent extends React.Component {
  constructor() {
    super();
    this.state = {newTodo: ""};
  }
}
```

以下のコードとほぼ等価(のはず)です。

```javascript:sample.js
var MyComponent = React.createClass({
  getInitialState() {
  	return {
  	  newTodo: ""
  	};
  }
});
```

## 「メソッドが見つからない」ってブラウザに怒られる

`React.createClass`使用時には出てこなかったエラーが出てきて何で？と思って調べたところ、「`React.createClass`は全てのメソッドをComponentに自動でbindしてくれる」ためで、ES2015のクラス構文を代わりに使用する時にはconstructorの中とか使用時にbindしてあげないといけないらしい。

```javascript:sample3.js
class TodoFooter extends Component {
  constructor {
    super();
    this.handleClearCompleted = this.handleClearCompleted.bind(this);
  }
}
```

[Function.prototype.bind()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Function/bind)のことをよく知らないのでなんでこういうことが起きるのか、後で勉強しておきたいですね。

# 参考資料
という名の情報ソース。上記以外のことも書いてある。

- [React v0.13.0 Beta 1](https://facebook.github.io/react/blog/2015/01/27/react-v0.13.0-beta-1.html)
- [Refactoring React Components to ES6 Classes](http://www.newmediacampaigns.com/blog/refactoring-react-components-to-es6-classes)
AtomにGitHubからパッケージを追加

GitHub製のエディタAtomにパッケージを追加する際、`Preference`→`Packages`で追加する方法もありますが、gitHub等に公開されているパッケージを手動で追加したいときの手順。
(筆者の環境はubuntu14.04です)
パッケージは`＄HOME`の`.atom/packages`にあるので、

```
cd .atom/packages
git clone https://github.com/address/to/package
```

とするだけで、自動的にatom起動時にパッケージが読み込まれます。
ThingSpeak > Link > arduino実装例

ThingSpeakというサービスを使ってグラフ描画している例をいくつか見つけた。

- [macsbugさん](https://macsbug.wordpress.com/2015/11/29/esp8266bme280ir-ledthigspeak/)
- [applepineさん](http://qiita.com/applepine1125/items/29a894b8dd7af088df6a)
- [masatoさん](http://qiita.com/masato/items/876ffd0607c4ca5c202d)

## Tutorial

[tutorials @ thingspeak](http://community.thingspeak.com/tutorials/arduino/using-an-arduino-ethernet-shield-to-update-a-thingspeak-channel/)

ページ真ん中の「ThingSpeakClient.pde」のリンクにAruduinoでのThingSpeakアップロードの実装例ファイルがある。

ポート80で接続して以下のようなPOSTをすればよさそう。

```c
    client.print("POST /update HTTP/1.1\n");
    client.print("Host: api.thingspeak.com\n");
    client.print("Connection: close\n");
    client.print("X-THINGSPEAKAPIKEY: "+writeAPIKey+"\n");
    client.print("Content-Type: application/x-www-form-urlencoded\n");
    client.print("Content-Length: ");
    client.print(tsData.length());
    client.print("\n\n");

    client.print(tsData);
```
【覚書】カスタム投稿タイプ：タームごとの記事一覧をひとつのページに

```archive-xxx.php
<div class="wrapper">


<?php
 $args = array(
   'parent' => 0,
   'hierarhical' => 0,
   'orderby' => 'id',
   'order' =>'ASC'
  );
  $taxonomy_name = 'makerscat';
  $taxonomys = get_terms($taxonomy_name,$args);
  if(!is_wp_error($taxonomys) && count($taxonomys)):
        foreach($taxonomys as $taxonomy):
        $url = get_term_link($taxonomy->slug, $taxonomy_name);
        $tax_posts = get_posts(array(
          'post_type' => get_post_type(),
          'posts_per_page' => 5,
          'tax_query' => array(
            array(
              'taxonomy' => 'makerscat',
              'terms' => array($taxonomy->slug),
              'field' =>'slug',
              'include_children' => true,
              'operator' => 'IN'
            ),
            'relation' =>'AND'
          )
        ));
        if($tax_posts):
?>

<h3 class="mincho"><?php echo($taxonomy->name); ?></h3>

<div class="fx-row fx-row-around-xs">

<?php foreach($tax_posts as $tax_post): setup_postdata($tax_post); ?>
  <div class="fx-col-30-s fx-col-90-xs makerDiv">
        <h4><?php if(has_post_thumbnail($tax_post->ID)) {
                echo get_the_post_thumbnail($tax_post->ID,'post-thumbnail');
             } ?></h4>
        <!-- /.fx-row fx-row-around-xs -->
        <h5><?php echo get_the_title($tax_post->ID); ?></h5>
<?php the_content(); ?>

    </div>
<?php endforeach; ?>


</div>

<?php endif;
 endforeach;
 endif; ?>



</div>
<!-- /.wrapper -->
```
**この一行超大事**
```
<?php foreach($tax_posts as $tax_post): setup_postdata($tax_post); ?>
```
>http://naoyu.net/wordpress/tax_query/583/
>http://wpcos.com/?p=7846
公式タッチディスプレイの表示が上下逆さまになる場合の解決方法

Raspberry Piの公式タッチディスプレイと[Pimoroni製ケース](https://shop.pimoroni.com/products/raspberry-pi-7-touchscreen-display-with-frame)を組み立てて、[NOOBS](https://www.raspberrypi.org/downloads/noobs/)を使ってRaspbianをインストールしたところ、電源ON直後からRaspbianのデスクトップ画面に至るすべての表示が上下逆さまで驚きました。

PimoroniのWEBサイトや、raspberrypi.orgのトラブルシューティングを読むと
正しい向きで表示させるため、次のように設定を追記するよう案内されていましたのでメモします。

# 追記する内容
```text:/boot/config.txt
lcd_rotate=2
```
追記後、`sudo reboot`などでリブートすれば反映されます。
## 注意
`display_rotate=2` ではダメでした。

画面表示は正しい向きになるので一見解決したように見えますが、
タッチディスプレイの入力XY座標の認識が上下逆さまのままになっています。
（例）画面の右下を指で触れると、ポインタが左上に移動する

# 参照URL
- [Official 7" Raspberry Pi Touchscreen FAQ](http://forums.pimoroni.com/t/official-7-raspberry-pi-touch-screen-faq/959)
- [Getting Started with the Pi LCD](http://learn.pimoroni.com/tutorial/pi-lcd/getting-started-with-raspberry-pi-7-touchscreen-lcd)
- [RASPBERRY PI DISPLAY TROUBLESHOOTING](https://www.raspberrypi.org/documentation/hardware/display/troubleshooting.md)
printfマクロで可変長引数を使わずに__FILE__や__LINE__を入れる方法

debug printf のように可変長引数の関数に対してマクロで `__FILE__` と `__LINE__` を勝手に埋め込みたいという要求があります。

こういうときは通常可変長引数マクロを使用しますが、世の中には可変長引数マクロが使えない環境というのがあるのです。

そういうときは次のようにします。

# 方法

```c:dprintf.c
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

static const char* err_file = NULL;
static int err_line = 0;

void
dprintf_locate(const char* file, int line)
{
    err_file = file;
    err_line = line;
}

void
dprintf_impl(const char* fmt, ...)
{
    va_list ap;

    fprintf(stderr, "[%s:%d] ", err_file, err_line);
    va_start(ap, fmt);
    vfprintf(stderr, fmt, ap);
    va_end(ap);
    fprintf(stderr, "\n");
}
```

ヘッダはこうなります。

```c:dprintf.h
void dprintf_locate(const char* file, int line);
void dprintf_impl(const char* fmt, ...);

#define dprintf (dprintf_locate(__FILE__, __LINE__), dprintf_impl)
```

これで可変長引数マクロで定義した時と同じように使えます。

```c:sample.c
#include "dprintf.h"

int
main(void)
{
    dprintf("error!! n=%d\n", 123);
    //=> "[sample.c:6] error!! n=123\n"
}
```

# 何故これで動くのか

呼び出しを展開すると

```c
(dprintf_locate(__FILE__, __LINE__), dprintf_impl)("error!! n=%d\n", 123);
```

になります。

この `(dprintf_locate(__FILE__, __LINE__), dprintf_impl)` の部分は C 言語のカンマ演算子で繋げられた式なので、左右の式を評価した後で最終的な値は右辺の値となります。つまりこの部分は `dprintf_locate(__FILE__, __LINE__)` を実行した後で関数ポインタである `dprintf_impl` を返します。

そうなると残りの部分は `(dprintf_impl)("error!! n=%d\n", 123)` となってこれは関数ポインタを介した関数呼び出しです。 `dprintf_impl` は内部でファイルと行数を参照しているので上記が実現できることになります。

# マルチスレッドでの注意点

お察しの通りこれはスレッドセーフではありません。用途に応じてロックが必要です。
Raspberry PiでJavaVMを切り替える手順

Raspberry Piに複数のJavaをインストールした場合に、JavaVMを切り替える手順を説明します。簡単に言うと、`update-alternatives`コマンドで切り替えることが出来ます。

以下のように`update-alternatives`コマンドを実行することで、対話的にJavaVMを切り替えることが出来ます。

```
$ sudo update-alternatives --config java
alternative java (/usr/bin/java を提供) には 2 個の選択肢があります。

  選択肢    パス                                               優先度  状態
------------------------------------------------------------
* 0            /usr/lib/jvm/java-7-openjdk-armhf/jre/bin/java        1043      自動モード
  1            /usr/lib/jvm/java-7-openjdk-armhf/jre/bin/java        1043      手動モード
  2            /usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt/jre/bin/java   318       手動モード

現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください: 2
update-alternatives: /usr/bin/java (java) を提供するために 手動モード で /usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt/jre/bin/java を使います
```

# 参考

* [Raspberry Pi - Change Default Java Virtual Machine (JVM)](http://www.savagehomeautomation.com/projects/raspberry-pi-change-default-java-virtual-machine-jvm.html)
Windows10をMacBook Pro Retina 2015にBootCampで入れようとしてハマったとこ。


全然簡単にできなかった。備忘録。

## フォーマットしてもインストールできない
BootCampでUSBにゴニョゴニョした後、Macをoption押しながら再起動して、Windowsの領域を選択すると、セットアップが開始される。
この時自分が確保した領域のフォーマットを求められるが、フォーマットをしても「次へ」ボタンが押せずシリアルコード入力画面に移動できない。
そういう時は素直に最初っからやり直しましょう・・・。
確保した領域、Windows10を削除して、もっかいやり直し。

## ドライバーのインストールがうまくいかない。
Win10のセットアップ終了後は、BootCamp側からダウンロードしたドライバーインストールのプログラムを起動させます。ちなみにダウンロードはBootCampを立ち上げて出てくる真ん中のボタンで。
![Screen Shot 2016-01-09 at 15.52.40.png](https://qiita-image-store.s3.amazonaws.com/0/54225/d0e21e97-4eb0-fb37-df2b-2cc22d87b10f.png "Screen Shot 2016-01-09 at 15.52.40.png")

適当なUSBを指して、そこに落としましょう。

ちなみにBootCampが最新じゃないともちろんうまくいかないので、MacのOSなんかもひっくるめて不安なら全部アプデしちゃいましょう。

## Realtekドライバーのインストールで止まる。
Windows10を立ち上げて、USBの中にあるBootCampフォルダにあるSetup.exeを起動します。順調にインストールできてるかと思いきや、最後の最後でRealtekというAudioドライバーのインストールが一向に終わりません。つけっぱで寝て起きて確認したら、やっぱり全然進んでない。
音は出ないわ、なんかトラックパッドの挙動がおかしいわで大変です。

この症状はよく見られるらしいのですが、対処法は以下の通り。

* USB(ドライバーをダウンロードした外付けデバイス)の中のBootCamp/Drivers/の場所にあるRealtekフォルダを一旦デスクトップかなんかに避難。
* Realtekドライバー無しの状態で再度Setup.exeを起動。
* 何事もなく終了、再起動。
* 最後に避難したRealtekフォルダにあるインストールプログラムを起動して、ドライバーを入れる。


これでなんとかなりました。
vimでArduino開発

## はじめに
Arduinoをvimで開発したくなりinoを使用することにしました。
導入方法の覚え書きです。

##　必要なもの

- [Arduino IDE](#ArduinoIDEをインストール)
- [syntax](#syntaxインストール)
- [ino](#inoインストール)

#### あった方がいいもの

- [シリアルモニタ](#シリアルモニタを使用する)


# 必要なものをインストールする

## ArduinoIDEをインストール
まずは公式のArduino IDEをインストールします。
Arduino IDEがないとinoは使えません。

以下から`v1.0.5`をダウンロードしてください。
最新のversionだとinoが使えません。
https://www.arduino.cc/en/Main/Software

## inoインストール
ターミナル開いて以下コマンドでインストールしてください。

```bash
$ sudo easy_install ino
```

## syntaxインストール
syntaxは以下からダウンロードできます。
https://github.com/sudar/vim-arduino-syntax
設定方法は割愛。


# シリアルモニタを使用する
シリアルモニタを使用することによってArduinoボードからデータを送信して内容を確認することができます。
homebrewでインストールしました。

```bash
$ brew install picocom
```


# inoの使い方
開発用ディレクトリを作ってボードを設定します。

##　開発用ディレクトリ作成

```bash
$ mkdir test
$ ino init
```
`test` ディレクトリに`src`と`lib`ができていれば成功です。
`src`以下に`sketch.ino`というファイルがあるのでそこで開発を行います。



## 主なコマンド
開発に必要な主なコマンドは以下です。

``` bash
# ビルド
$ ino build

# ボードに書き込み
$ ino upload

# ボードの一覧表示
$ ino list-models

# シリアルモニタの表示
$ ino serial
```