OmniAICreator/Qiita-1.07M huggingface dataset:
ESP8266の`error magic!`からの復旧


ESP8266のフラッシュデータを破壊してしまい、以下のようなエラーログが出てユーザーアプリが起動しなくなった時の復旧方法。

```
$ miniterm.py /dev/cu.SLAB_USBtoUART 74880
--- Miniterm on /dev/cu.SLAB_USBtoUART  74880,8,N,1 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---

 ets Jan  8 2013,rst cause:2, boot mode:(3,7)

load 0x40100000, len 1856, room 16
tail 0
chksum 0x63
load 0x3ffe8000, len 776, room 8
tail 0
chksum 0x02
load 0x3ffe8310, len 552, room 8
tail 0
chksum 0x79
csum 0x79

2nd boot version : 1.5
  SPI Speed      : 40MHz
  SPI Mode       : QIO
  SPI Flash Size & Map: 32Mbit(512KB+512KB)
jump to run user2 @ 81000

error magic!
backup boot failed.

user code done
```

boot.binやuser1.bin、user2.binをflashに書き込んでも復旧できない場合、blank.bin領域が破壊されている可能性がある。

[ESP8266のGetting Started Guide](http://bbs.espressif.com/viewtopic.php?f=51&t=1024)を見ると以下のメモリマップになっている。(4096 KB Flash: Support Cloud Update時のメモリマップ)

| bin | address |
|:---:|:---:|
| esp_init_data_default.bin | 0x3FC000 |
| blank.bin | 0x3FE000 |
| boot.bin | 0x00000 |
| user1.bin | 0x01000 |
| user2.bin | 0x81000 |

これに従い、blank.binの書き込みを行う。

```
esptool.py --port /dev/tty.SLAB_USBtoUART --baud 74880 write_flash --flash_mode=qio --flash_size=32m 0x3fe000 "bin/blank.bin"
```

これで復旧できた。

```
 ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x40100000, len 1856, room 16
tail 0
chksum 0x63
load 0x3ffe8000, len 776, room 8
tail 0
chksum 0x02
load 0x3ffe8310, len 552, room 8
tail 0
chksum 0x79
csum 0x79

2nd boot version : 1.5
  SPI Speed      : 40MHz
  SPI Mode       : QIO
  SPI Flash Size & Map: 32Mbit(512KB+512KB)
jump to run user1 @ 1000

SBooted!!
```

これでも復旧できないときにはesp_init_data_default.bin領域を再度書き直してやるといいのかもしれない。（未確認）

```
esptool.py --port /dev/tty.SLAB_USBtoUART --baud 74880 write_flash --flash_mode=qio --flash_size=32m 0x3fc000 "bin/esp_init_data_default.bin"
```
ターミナルでさくらのサーバへssh接続

ターミナルで以下を入力
$ ssh FTPアカウント＠FTPサーバ

次に、Are you sure you want to continue connecting (yes/no)? 
と聞かれるので　yesで応答

で、次にパスワードを入力して完了。
（カーソルは移動しないけど入力されている）
（コピペも可）

※FTPサーバ名とFTPアカウント名は…
さくらインターネット＞サーバコントロールパネル＞サーバ情報の表示
で確認できる。
CentOS7にanyenvを使って環境構築してみた

# まとめ
- [anyenv](https://github.com/riywo/anyenv)
- .bash_profileスクリプトを1回触るだけで各種言語をインストールできるのは便利
- goenvはGOPATH設定してくれないので[gvm](https://github.com/moovweb/gvm)使ったほうが便利な気がする
- pyenv/rbenv/ndenv に対しては現状不満なし

# anyenvの利点
- ~/直下に作るディレクトリの数が減る
- ~/.bash_profile スクリプトを1回だけ弄れば後はコマンドだけで各種言語をインストールできる

# anyenvの欠点
- uninstall コマンドがない
    - .anyenv/envs/xxenv フォルダを直接削除して対応?
- update コマンドが(デフォルトで)ない
    - プラグインがあるらしい
- 未確認だがfork等をみるとphpenvが微妙らしい？
- goenvが(私個人としては)微妙

# anyenvのインストール
[readme](https://github.com/riywo/anyenv/blob/master/README.md)見たほうがいいけど
bash使用の場合

```bash:anyenv-install.sh
git clone https://github.com/riywo/anyenv ~/.anyenv
echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(anyenv init -)"' >> ~/.bash_profile
exec $SHELL -l
```

これで

```bash:envs.sh
anyenv install rbenv
anyenv install pyenv
anyenv install ndenv
exec $SHELL -l
rbenv install 2.2.4
rbenv global 2.2.4
pyenv install 3.5.1
pyenv global system 3.5.1
ndenv install 5.9.0
ndenv global 5.9.0
```

こうやって環境構築してgem/npm/pip が問題なく使えて便利


# 個人的に問題なこと
一方goenvについては微妙だ

```bash
anyenv install goenv
exec $SHELL -l
goenv install 1.6
goenv global 1.6
```

一応動く……がGOPATHが設定されないので
go get はこのままでは動かない

# goenvを消してgvmを使う
xxenvの消し方わからなかったのでとりあえず ~/.anyenv/envs/goenv以下を全部削除
gvmをインストールするため

```bash
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
source /home/vagrant/.gvm/scripts/gvm
```

をコンソールに入力する。

## go1.6をインストール
gvmが使えるようになったら次を入力
gvmは直接1.5以上をインストールできず、一旦1.4をインストールしないといけない

```bash
gvm install go1.4
gvm use 1.4
gvm install go1.6
gvm use 1.6 --default
```

これでようやくgo getが使える


### そもそも
goenv/gvm
どっちも2,3個づつ存在してるようで検索がめんどくさい……
【質問】Nginxヴァーチャルドメイン設定。追加ドメインB「www」有りに、元サイトAが表示される


#【困ってます】追加ドメインの「www」有りに、元ドメインの内容が表示されてしまいます。
初心者です。どなたかご教授願います。

AWS AMIMOTO NginxにてWordpressサイト（a.com）を運営しています。

新たにマルチドメインにて追加のWordpressサイトのドメイン（b.com）を設定しました

##設定した手順##

###1.DNSの設定　「www」有り、無しとも###
###2.マルチドメインの設定を行い###

a.com --- default.conf

```server_name a.com;```
```root        /var/www/vhosts/i-xxxx;```

b.com --- b.com.conf

```server_name b.com;
```root        /var/www/vhosts/b.com;```


※下記のサイトを参考にさせて頂きました
>サブディレクトリへの WordPress のインストール | 超高速 WordPress AMI AMIMOTO
https://ja.amimoto-ami.com/2014/10/15/to-install-wordpress-in-a-subdirectory/

>.log : nginxのserver_nameで複数ドメイン運用 
http://sysy.livedoor.biz/archives/14131227.html

###設定完了後###

**なしの「b.com」は、問題なく新しいサイトが表示されるのですが**

*なぜか*

**有りの「www.b.com」は、元サイトが表示されます**

「a.com」にリダイレクトされているわけではなく
URLは「www.b.com」のままです

.confの記載などがおかしいのかと

##その後の改善##

###3/18　「www」有りのリダイレクト設定を行う###
※下記のサイトを参考にさせて頂きました
>Nginxで「www」有り、無しのURLを統一する方法 | 経験知
https://keikenchi.com/nginx-www-url

NG

###3/19　server_nameを変更###

```server_name b.com www.b.com ;```

```server_name b.com *.b.com; ```

```# service nginx restart```

NG

まだ未解決なので
引き続きアドバイス宜しくお願い致します！
サポート終了したDebian Squeeze(6.0)でapt-getが動くようにする

## Debian Squeezeのサポート終了

[2016年2月29日](https://ja.wikipedia.org/wiki/Debian#.E3.83.AA.E3.83.AA.E3.83.BC.E3.82.B9.2F.E3.83.90.E3.83.BC.E3.82.B8.E3.83.A7.E3.83.B3.E5.B1.A5.E6.AD.B4)に、Debian Squeezeのサポートが終了しました。

サポート終了にともなって、Squeeze向けのaptリポジトリもアクセスできなくなっています（`apt-get update`すると404 Not Foundが返ってきます）。

何らかの事情で、Squeezeのまま残しておく必要のあるサーバもあるでしょう。また、そのようなサーバに、新しいソフトウェアをインストールしたくなることもあるでしょう。そこで、aptの参照先をarchivesに変えることで、従来通り`apt-get`できるようにする手順を紹介します。

なお、本記事で紹介した手順は、公式で推奨されているものではありません。できるだけ早くアップグレードすることをおすすめします。

## apt参照先の変更

`/etc/apt/sources.list`を編集します。現在の`sources.list`には以下のような設定がされていると思います。

```
deb http://ftp.jp.debian.org/debian/ squeeze main
deb-src http://ftp.jp.debian.org/debian/ squeeze main
```

debがバイナリ、deb-srcがソースの参照先です。いずれのURLも現在は使えないので、`#`を行頭に追加して、全てコメントアウトします。

次に、以下のような設定を`/etc/apt/sources.list`に追加します。

```
deb http://archive.debian.org/debian/ squeeze main
deb-src http://archive.debian.org/debian/ squeeze main
```

使用するパッケージがmainのみか、contribを含むか、non-freeまで含むか、といった設定は、コメントアウトした行を参考に、既存の設定を踏襲してください。

上で指定した http://archive.debian.org/ には、過去のDebianのパッケージが保管されています。ここを参照するように変えることで、従来通り`apt-get`が動くようになります。

最後に、この設定で正常に動作することを確認しておきましょう。

```
$ sudo apt-get update
```

## アップグレードについて

最後に、簡単にDebianのアップグレードについて記述します。

推奨はJessie(8.0)へのアップグレードです。手順としては、

1. [Squeeze => Wheezy](https://www.debian.org/releases/wheezy/i386/release-notes/ch-upgrading.ja.html)
2. [Wheezy => Jessie](https://www.debian.org/releases/jessie/i386/release-notes/ch-upgrading.ja.html)

の2段階を踏む必要があります。Wheezy(7.0)は2016年4月25日にサポート終了して、LTS（セキュリティアップデートのみ提供される状態）に移行する点に注意してください。

Wheezy LTSを使用する場合は、`/etc/apt/sources.list`を確認して、

```
deb http://security.debian.org/ wheezy/updates main
deb-src http://security.debian.org/ wheezy/updates main
```

という記述があれば、無変更でWheezy LTSに移行可能です（[Wheezy LTSのセキュリティアップデートはsecurity.debian.orgのwheezy/updatesから提供されます](https://wiki.debian.org/LTS/Using)）。上記設定がない場合は、上記設定を追加することで、Wheezy LTSに移行できます。

また、`/etc/apt/apt.conf`に以下のような設定がされている場合は、

```
APT::Default-Release "squeeze-lts";
```

この行をコメントアウトするか、以下のように書き換えることが推奨されています。

```
APT::Default-Release "wheezy";
```
【Shader Forge】Remapについて

Shader ForgeのRemapについて簡単に説明します。

公式によると、

```
Remaps a value from one range to another. 
Same as Remap (Simple), but with inputs instead of numerical constants
```

とのことです。
要は、入力された値を指示した範囲内で加工してあげるよってことかな。

##どんな加工がされるのか
まずはこれを見てみて
![3月 18, 2016 01:50.gif](https://qiita-image-store.s3.amazonaws.com/0/67575/71852797-b744-0860-ea9b-4015a2f2774c.gif)

Timeから得られた時間をSinに入れた後に、Remapにつなげています。
Sinは-1 ~ 1を返すのでTimeから取得された値を強制的に-1 ~ 1にしてRemapに渡していることになります。
次に、Remapが何をしているかというと、
指定された範囲の入力があったときに、指定された割合に変換して出力をしています。

今回、指定された範囲はFromを使うので-1 ~ 1になります。
今回、指定された割合はToを使うので-1 ~ 1になります。
なのでRemapがやっていることは(Sinは-1 ~ 1しか返さないので)値をそのまま返しています。

***
次にこれを見てみましょう
<img width="502" alt="スクリーンショット 2016-03-18 2.00.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/67575/64336c19-9843-123d-63ac-2cd84dce2b42.png">

指定された割合のToが0.1 ~ 0.2 に変わっています。
そのため、
-1 が来たときは0.1を返し、
 0 が来たときは0.15を返し、
 1 が来たときは0.2を返す
ようになっています。


***
最後にFromの範囲外のときの挙動を見てみましょう
<img width="333" alt="スクリーンショット 2016-03-18 2.02.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/67575/bcff21e1-23bd-519d-24e7-0b7a29a8c84d.png">
こんな感じでFromの範囲外の-2が入力されたときは、どうなるのでしょうか？
答えは-2がそのまま出力されます。なんの加工もしません。
RemapはFromの範囲外の数字が来たときは、何もせず、素通りさせてしまうのです。
10が来たときも範囲外なので10がそのまま出力されます。

そんな感じです:)
Scliptingでズンドコキヨシ

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから<br>「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ！」って出力した後終了って関数作ったら満点で単位貰ってた</p>&mdash; てくも (@kumiromilk) <a href="https://twitter.com/kumiromilk/status/707437861881180160">2016年3月9日</a></blockquote>

[ズンドコキヨシまとめ](http://qiita.com/shunsugai@github/items/971a15461de29563bf90)

完全に乗り遅れた感がありますが、遅れたぶん絶対に誰も書いてないであろう[Sclipting](https://esolangs.org/wiki/Sclipting)で挑戦します。

どんな言語かというと、だいたいこんな言語です。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">これが本当の書道コーディングだ(?) <a href="https://twitter.com/hashtag/code_festival?src=hash">#code_festival</a> <a href="https://twitter.com/hashtag/codefes?src=hash">#codefes</a> <a href="https://t.co/aPrZPyJlhj">pic.twitter.com/aPrZPyJlhj</a></p>&mdash; Il faut vous fuir, (@hakatashi) <a href="https://twitter.com/hakatashi/status/665458923252617216">2015年11月14日</a></blockquote>

# Scliptingでズンドコキヨシ

```
丟標갠迄❶귰雙균侔況重갠紛加終要❶감雙머꺺머꾳⓵머꾉머꺳嗎⓶隔終丟棄并反머꺭머꾻머꾨머꾻머꺷뫻뢁
```

![2016-03-18 01_59_45-C__Users_hakatashi_OneDrive_Documents_Snippets_kiyoshi.sclipt — Esoteric IDE.png](https://qiita-image-store.s3.amazonaws.com/0/39266/a1843037-b13d-68da-9463-2a6ad0b8839a.png)

けっこう頑張りましたが48文字です。以下コメント付きバージョン。
(Scliptingでは全てのASCII文字がコメントとして使えますが日本語は使えません。残念。)

```
丟: Discard input

標: Mark

갠: 0b10

迄: until
    ❶: Duplicate the top of the stack
    귰: 0b11111
    雙: Bitwise AND
    균: 0b11110
    侔: Number equality
況: do
    重: Double
    갠: 2
    紛: Random integer
    加: Addition
終: end

要: while
    ❶: Duplicate the top of the stack
    감: 1
    雙: Bitwise AND
    머꺺머꾳: zun
    ⓵: no-op
    머꾉머꺳: doko
    嗎: Conditional
    ⓶: Moves the second-top item to the top
    隔: Half and round
終: end

丟: Pop an item
棄: Pop two items

并: Combine stack to the list

反: Reverse the list

머꺭머꾻머꾨머꾻머꺷뫻뢁: kiyoshi!
```

もっと短く書いてくれる人を募集中。

# 更新 (2016-03-18)

「標」は必要なかった。47文字。

```
丟갠迄❶귰雙균侔況重갠紛加終要❶감雙머꺺머꾳⓵머꾉머꺳嗎⓶隔終丟棄并反머꺭머꾻머꾨머꾻머꺷뫻뢁
```
【Shader Forge】Outline widthを使う

MainノードにあるOutline widthプロパティを使ってみました。
Outline widthプロパティに値を流すことで輪郭線を表示することができます。
単にvalueをOutline widthに流すだけだと面白くないので、経過時間によってoutlineの太さを変化するようにしています。
これを使えばオーラ？的な表現ができるようになるのかな?

このshaderを作成する上でポイントなのは、*Remap*になります。
Remapについては別記事で書く予定なのでそちらを参照してください。

最終的にできたもの
![3月 18, 2016 01:23.gif](https://qiita-image-store.s3.amazonaws.com/0/67575/dd0c9fec-e868-aae7-109d-52294ca1a66f.gif)

Shader Forge上
![3月 18, 2016 01:21.gif](https://qiita-image-store.s3.amazonaws.com/0/67575/05163603-7ce7-dc34-af63-93ab94524412.gif)
<img width="813" alt="スクリーンショット 2016-03-18 1.20.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/67575/e60faab2-4157-9cb9-3018-924aa179bb38.png">

今回からShader Forgeで作成されたコードも載せるようにします
https://gist.github.com/ShirakawaYoshimaru/bfc10e2e4c7ebf6a0aba
ファイル監視で変更があったファイルだけeslintをかける

## 問題意識

- eslint-babel とか使ってると コマンドラインで渡すと, 都度 babel の初期化に引っ張られて遅い
- 監視するファイルが多くなるとパースだけでも重くなりそう
- --cache オプションあるけどbabel の問題は解決しなさそう
- これが実現出来そうな gulp-eslint は1件ずつlintする方法がなかった

## 解決策

gulp eslint を生で使って自分でタスクを書いた。プロセスが温まったままなので、babel の初期化は最初の一回だけ。

```js:gulpfile.js
var gulp = require('gulp');
var CLIEngine = require('eslint').CLIEngine;
var fs = require("fs");

var linter = new CLIEngine();
var formatter = linter.getFormatter();

var lastPassedPath = null;
gulp.task('watch:lint', () => {
  gulp
  .watch("src/**/*.js")
  .on('change', ev => {
    var str = fs.readFileSync(ev.path).toString()
    var ret = linter.executeOnText(str, ev.path);
    if (ret.errorCount > 0) {
      console.log(formatter(ret.results));
      lastPassedPath = null;
    } else if (ev.path !== lastPassedPath) {
      console.log("👍: " + ev.path);
      lastPassedPath = ev.path;
    }
  });
});
```

gulp なしではだるそう。

## 風景

![](https://i.gyazo.com/f8f8b8820e6eb06efcfcff415b1ea0db.png)

誰かプラグイン化してほしい…
Vagrant synced_folder で nfs を使用する


Host OS: osx 10.11.3
Guest OS: CentOS5.9
VirtualBox 5.0.14

## HostOS 側 /etc/exports に sudo NOPASS で編集できるようにする

下記を追記する

```/etc/sudoers
Cmnd_Alias VAGRANT_EXPORTS_ADD = /usr/bin/tee -a /etc/exports
Cmnd_Alias VAGRANT_NFSD = /sbin/nfsd restart
Cmnd_Alias VAGRANT_EXPORTS_REMOVE = /usr/bin/sed -E -e /*/ d -ibak /etc/exports
%admin ALL=(root) NOPASSWD: VAGRANT_EXPORTS_ADD, VAGRANT_NFSD, VAGRANT_EXPORTS_REMOVE
```

## GuestOS側で nfs client をインストールする

```
sudo yum -y install nfs-utils nfs-utils-lib
```

下記の様にエラーログがでるので、ゲスト側に `nfs-utils nfs-utils-lib` をインストールする

```
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

yum -y install nfs-utils nfs-utils-lib

Stdout from the command:

Loaded plugins: fastestmirror, priorities
Determining fastest mirrors
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=5&arch=x86_64&repo=os error was
[Errno 4] IOError: <urlopen error (101, 'Network is unreachable')>


Stderr from the command:

Error: Cannot find a valid baseurl for repo: base
```

## ホストとゲスト側の通信を StaticIPにする

```Vagrantfile
config.vm.network "private_network", ip: "192.168.33.10"
```

下記の様なエラーログが出るので、private_network を有効にする

```
NFS requires a host-only network to be created.
Please add a host-only network to the machine (with either DHCP or a
static IP) for NFS to work
```
Railsでfancyboxをあつかう

<h2>
クリックしたら拡大表示してくれるプラグイン、fancyboxをrailsであつかう
</h2>
っていってもgemを持ってくるだけなんですけど、本当にすぐ使えるようになるんでかなり便利だと思いました。

```ruby:Gemfile
gem 'jquery-rails' #まずはrailsでjQueryを使えるようにします
gem 'jquery-ui-rails'#ここも一応
gem 'fancybox2-rails', '~> 0.2.8' #この記事を書いた時のバージョンです
```
で、`bundle install`しまして基本的にjs関連は`rails-asset`でプリコンパイルしてもらうか`application.js`で`require`しているのでそれに則ります。もちろんダイレクトに書いてもうまくいくのですが、、

```javascript:app/assets/javascripts/init_fancy
$(document).ready(function() {
  $("a.fancybox").fancybox();
});

/*init_fancyboxというファイルを新しく追加します。もちろん名前はなんでも良いです*/
```
```javascript:application.js
...
//= require init_fancybox
...
```

これだけです！
あとはfancyboxは普通に使えることができるようになるんで、
[こちらから](http://fancybox.net/)fancybox本家のページでダウンロードとかしなくても大丈夫です♪( ´θ｀)ノ
新人エンジニアに言いたいこと

# ・毎日少しでもいいから、学習する習慣を身に付ける
エンジニアでなくても、どんな仕事でもそうだと思いますが、スキルアップをしないのは停滞ではなく、衰退です。プラマイゼロではなく、マイナスです。
一日15分でもいいので、毎日学習する習慣を身に付けてほしいと思います。

# ・基礎的な力がないと、応用もできない
いきなり機械学習とか、いきなりデザインパターンの理解とか、最新技術とか言われても最初のころはきっと混乱しかありません。
パソコンの仕組み、インターネットの仕組み、webアプリケーションが動く仕組みなど、
まずは身の回りにある自分達が仕事で使いそうな「仕組み」を知ることからはじめてはいかがでしょうか。

# ・一人で抱え込まず、周りに相談する力をつける。しかし、最初は自分で調べる
調べずに知っている人に聞くのは確かに最短距離ですが、新人のころはまだ時間をつかって
調べることがたくさんできます。調べる力を身に付けましょう。
最初は自分で調べ、それでも分からない場合は周りに聞きましょう。
自分で調べる時間は調べる内容にもよりますが、自分で時間を決めて調べ、それ以上時間がかかると
思った場合は周りに聞きましょう。

# ・活かすも殺すも自分次第
「こんなことやって将来の自分に役に立つのかな」を感じることが仕事をやっていく上で出てくる場面はあると思います。
そんな時でも、手を抜かず、どうやって早く終わらせることができるか、とか、
いつもと違う視点で見てみると、また新しい発見があるかもしれません。
資格も同じだと思っています。資格を取って役に立つの？という質問を受けたことがありますが、
役に立つかどうかは自分次第だと思います。役に立つように自分の行動を変えていきましょう。

# ・仕事を好きになりましょう
たぶんこれが一番最強です。無敵。

# ・自分より「できる人」の仕事の仕方を真似しよう
まずはその人のコピーから始めて、いい所をもらう。
そのコピーを何十人もやって、いい所を沢山自分のモノにできたら、
きっとあなたはコピーされる側になるでしょう。


思いつくままに書いてみました。
say のサンプルを全部喋らせる



```sh
say -v '?' | while read i; do say -i -v `echo ${i} | awk '{print $1}'`  ${i} ; done
```

※ 音量注意

### 参考

- [Macのsayコマンドの使い方](http://qiita.com/zakuroishikuro/items/0c17acb21f119647c205)
- [Xcodeの声](http://qiita.com/nkmrtkhd/items/434a6c98656afd274ceb)
EC2 のルートデバイスに EBS をアタッチする方法

# EC2 のルートデバイスに EBS をアタッチするには？

ルートデバイスをデタッチした際に、以下のようにルートデバイスが無しの状態になります。

![EC2_Management_Console 2.png](https://qiita-image-store.s3.amazonaws.com/0/68136/659db956-93be-f427-2351-52eaa5cac174.png)

ここに対してルートデバイスをアタッチしようとします。
EBS一覧から、ボリュームを選択、インスタンス選択すると[デバイス]欄に下敷きが入力されます。[デバイス]をそのまま変更せずにアタッチをすると、ブロックデバイスとしてアタッチされてしまいます。

## 対応方法

ルートデバイスとしてアタッチさせるには、仮想化タイプ毎のルートデバイス名を入力する必要があります。

![EC2_Management_Console.png](https://qiita-image-store.s3.amazonaws.com/0/68136/e43a9fc7-0a7b-ef0d-417b-b578abcc3a3a.png)

## 何に書き換えればいいか？ 

仮想化タイプによって異なります。例えば、以下のようなルートデバイス名をセットします。

* Amazon Linux (t2.micro) : /dev/xvda
* Ubuntu (t2.micro) : /dev/sda1

仮想タイプ毎のデバイス名のルールは下記に書いていますが、インスタンスタイプによっても異なるので細かいところまでは不明な状態です。
[AWS Documentation » Amazon EC2 » User Guide for Linux Instances » ストレージ » Linux インスタンスでのデバイスの名前付け](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/device_naming.html#available-ec2-device-names)

AWS の Linux 系だと `/dev/sda1` か `/dev/xvda` のどちらかになります。

## おわりに

簡単なのは何も考えずに、元々アタッチされているルートデバイス名を設定すればOKです。

`/dev/sda` とか `/dev/hda` ってなんぞや？というのは下記に詳しく記載されていました。
https://users.miraclelinux.com/technet/document/linux/training/1_3_1.html
Gradleをもっと使いたい（インストール）

今まで、リアルな蜂の巣写真が大写しになった徹底入門本を適宜読みながら、その場しのぎで利用していました。少し余裕ができたので、きちんと勉強したいと思います。
まずはインストール手順を再度確認したい。
##環境
CentOS7（さくらのクラウド）

```sh:version
$ cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
```

##インストール手順
・Javaのインストール
　（環境変数の設定含む）
・SDKMAN!（旧Groovy enVironment Manager）のインストール
・Gradleのインストール

##Javaのインストール
OracleからJDKをダウンロードします
(2016年３月時点の最新は、8u73でした）

```sh
$ curl -OL --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u73-b02/jdk-8u73-linux-x64.rpm

$ ls -lh
-rw-rw-r-- 1 con con 153M  3月 17 23:50 jdk-8u73-linux-x64.rpm
```

パッケージのインストールと、環境変数設定

```sh
$ sudo rpm -ivh jdk-8u73-linux-x64.rpm
$ java -version
java version "1.8.0_73"
Java(TM) SE Runtime Environment (build 1.8.0_73-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.73-b02, mixed mode)

$ export JAVA_HOME=/usr/java/jdk1.8.0_73/
```

##SDKMANのインストール
curlで取得します

```sh
$ curl -s get.sdkman.io | bash
$ sdk version
SDKMAN 3.3.2
```

インストールしたユーザのホームディレクトリに初期化シェルができます。
なので、環境変数に読み込みます。

```sh
ls -l ~/.sdkman/bin/sdkman-init.sh
source ~/.sdkman/bin/sdkman-init.sh
```

##Gradleのインストール
SDKMANから、インストールします

```sh
$ sdk install gradle
Installing: gradle 2.12
Done installing!

$ gradle -v
Gradle 2.12
```

これで、Gradleのインストールが終わりました。
ではGradleから、Javaプロジェクトを生成してみましょう。

```sh
$ gradle init --type java-library
BUILD SUCCESSFUL
```

同階層に、Javaプロジェクトができます
今回、動かしてみるのは、以下３ファイルです
名前でおおよそ予想できますが、ビルドスクリプト、サンプルコード、テストコードです。
・build.gradle
・src/main/java/Library.java
・src/test/java/LibraryTest.java

ビルドします

```sh
# ビルド前に、利用可能なGradleの機能（タスク）を確認します
$ gradle tasks

# ビルド実行
$ gradle build

:compileJava
Download https://jcenter.bintray.com/org/slf4j/slf4j-api/1.7.18/slf4j-api-1.7.18.pom
Download https://jcenter.bintray.com/org/slf4j/slf4j-parent/1.7.18/slf4j-parent-1.7.18.pom
Download https://jcenter.bintray.com/org/slf4j/slf4j-api/1.7.18/slf4j-api-1.7.18.jar
:processResources UP-TO-DATE
:classes
:jar
:assemble
:compileTestJava
Download https://jcenter.bintray.com/junit/junit/4.12/junit-4.12.pom
Download https://jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.pom
Download https://jcenter.bintray.com/org/hamcrest/hamcrest-parent/1.3/hamcrest-parent-1.3.pom
Download https://jcenter.bintray.com/junit/junit/4.12/junit-4.12.jar
Download https://jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar
:processTestResources UP-TO-DATE
:testClasses
:test
:check
:build

BUILD SUCCESSFUL
Total time: 17.527 secs
```

標準出力に、上のように出ます。
おおよそ何をしているのかわかりますよね。
・利用するライブラリをインターネットからダウンロード
・サンプルコードのコンパイル
・圧縮してJARファイルにまとめる
・テストコードのコンパイルと、テスト実行

ビルド後まとめられたファイルは、プロジェクト直下のbuildディレクトリに格納されます。
build/classes/main/Library.class
build/classes/test/LibraryTest.class

テスト結果は、htmlファイルとして自動生成されます。
![testreport.png](https://qiita-image-store.s3.amazonaws.com/0/110457/f40d7736-940f-4c51-56b8-8f64c3ff325b.png)

今回は、Gradleをインストールして、コマンドからビルド実施しました。今後、MAVENでビルドしていたWebアプリを置き換えた例や、Groovyによるビルドスクリプト記述など紹介したいと思います。以上！
541円の128x64 I2C有機EL液晶


ebay で安く売っていたので買ってみた。

- http://www.ebay.com/itm/0-96-IIC-Serial-128X64-OLED-Display-Module-For-Arduino-Low-Power-Consumption-DF-/231772461741?hash=item35f6b71aad:g:lEAAAMXQeW5TavCe

このショップ、香港からの発送だからなのか、一週間で届いてびっくりした。

![20160318-DSC04901.jpg](https://qiita-image-store.s3.amazonaws.com/0/5330/015b5305-06da-66b6-3ae9-9416f7d4225c.jpeg "20160318-DSC04901.jpg")

写真だと液晶発光が白っぽいけど、リアルで見ると思いっきり青。有機ELだけあって、すごくはっきりと発光してる。

adafruitの[Monochrome 1.3" 128x64 OLED graphic display](https://www.adafruit.com/products/938)に似せて作ってあって、コントローラも同じ SSD1306 なので adafruit 用のライブラリもそのまま使える。

今回は mbed で動かしてみたけど、以下のライブラリですんなり動いた。

- https://developer.mbed.org/users/nkhorman/code/Adafruit_GFX/

インターフェイスは i2c のみで、アドレスは後ろのジャンパで 0x78 (adafruit とおんなじ、標準) か 0x7A に変えることが出来る。

またフォントは組み込みの 7x5 サイズの小型フォントが標準で使えるけど、bitmap font を組み込んでる人なんかも居る。

- http://guy.carpenter.id.au/gaugette/2012/11/11/font-support-for-ssd1306/


なお adafruit 用のライブラリにはリセット用のピン指定もあるんだけど、この商品はリセットピンが実装されてない。パワーオンリセットがかからない場合は

- http://bird.dip.jp/mt/archives/2015/06/12/2319.html

こんな感じでリセットを引き出して使ってる人も居るみたい。

また類似商品が沢山あるんだけど、ピンの並びが GND/VCC/SCL/SDA という順序と VCC/GND/SLA/SDA という順序の物があるようで紛らわしい。商品写真にはどっちも載っていた…。ピン配置が気になる人は seller に尋ねた方が確実だと思う。

それと今回買ったのは青色発光だったけど、[液晶の一部の色が異なる物](http://bird.dip.jp/mt/archives/2015/06/12/before.JPG) もあるみたいなので注意。

今のところ買ってだいぶ良かった感がある。
gitignore.ioのススメ


# gitignore.ioのススメ

だいぶ古い内容ですが、同僚に質問されたので投稿。

## 結論

* [gitignore.io](https://www.gitignore.io/)は便利だよ
* `curl`には`-L`オプションが必要だよ
* gitignore.ioをプロジェクトに適用しよう

## gitignore.ioとは

[gitignore.io](https://www.gitignore.io/)は、[github/gitignore](https://github.com/github/gitignore)リポジトリにコミットされた無視リストのテンプレートをWebからアクセスしやすいようにしたサービスです。
「java」や「osx」といったカテゴリ？に対して最適化された無視リストを提供してくれます。
`.gitignore`の内容を検討する手間を軽減してくれると考えてください。

## gitignore.ioをWebブラウザからの利用する

Webブラウザから[gitignore.io](https://www.gitignore.io/)にアクセスしてください。
表示されたテキストボックスに、「java」や「osx」など無視リストに含めたいカテゴリを入力してGenerateボタンを押せば、`.gitignore`に記述すべき内容が表示されます。

## gitignore.ioをコマンドラインからの利用する

`curl`や`wget`といったコマンドからも利用できます。
サイトからのリダイレクト要求に応答する必要があるため、例えば`curl`であれば`-L`オプションを指定してください。
⇒　`gitignore.io`のI/Fが変わったのでしょうか。。。　リダイレクト部分を説明したサイトは見つかりません

### パラメータなしで実行すると、、、

簡単なヘルプが表示されます。
指定できるカテゴリを把握するため、まずは後述する`list`にアクセスしましょう。

```shell
curl -L http://www.gitignore.io/api
```

```ini:output
gitignore.io help:
list - lists the operating systems, programming languages and IDE input types
:types: - creates .gitignore files for types of operating systems, programming languages or IDEs
```

### 指定できるカテゴリを一覧表示したい

`/list`をリクエストしてください。
指定できるカテゴリ一覧が出力されます。

```shell
curl -L http://www.gitignore.io/api/list
```

```ini:output
actionscript,ada,agda,alteraquartusii,android
anjuta,appbuilder,appceleratortitanium,appcode,appengine
　　＜中略＞
xojo,yeoman,yii,yii2,zendframework
zephir
```

### JavaとWindowsとMacにカテゴライズされたを無視リストを取得したい

`/java,windows,osx`をリクエストしてください。
指定したカテゴリにカテゴライズされた無視リストが出力されます。

```shell
curl -L http://www.gitignore.io/api/java,windows,osx
```

```ini:output
# Created by https://www.gitignore.io/api/java,windows,osx

### Java ###
*.class

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.ear

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*


### Windows ###
# Windows image file caches
Thumbs.db
ehthumbs.db

# Folder config file
Desktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Windows Installer files
*.cab
*.msi
*.msm
*.msp

# Windows shortcuts
*.lnk


### OSX ###
.DS_Store
.AppleDouble
.LSOverride

# Icon must end with two \r
Icon

# Thumbnails
._*

# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns

# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
```

## gitignore.ioをプロジェクトに適用する

2016-03-17時点で、`.gitignore`に`import`や`include`のような機能はありません。
gitignore.ioによる自動生成無視リストと、手動生成無視リストは共存させることはできませんでした。
運用でカバーしましょう。

```shell:.gitignore-make.sh
#!/bin/sh
cd $(cd $(dirname $0) && pwd)
(
    curl -L http://www.gitignore.io/api/java,windows,osx
    cat .gitignore-custom
) > .gitignore
```

```shell:.gitignore-custom
# 以下、手動で定義した無視リスト
log/
hoge/fuga.txt
```
El capitanにrEFIndを導入するとき

外部HDDにLinuxを導入して,Mac起動時にLinuxを起動できるようブートローダ(rEFlnd)を入れたときに引っかかったお話

### 問題
- - -  
[rEFInd](http://www.rodsbooks.com/refind/getting.html) からA binary zip fileを落としてきて,
```
./refind-install
```
すると

```
Copied rEFInd binary files

Copying sample configuration file as refind.conf; edit this file to configure
rEFInd.

Could not set boot device property: 0xe00002bc

ALERT:
Installation has completed, but problems were detected. Review the output for
error messages and take corrective measures as necessary. You may need to
re-run this script or install manually before rEFInd will work.

Unmounting install dir
Volume EFI on disk0s1 unmounted
```
と怒られてしまった。
  
これはMacOSX El capitanの変更点であるSystem Integrity Protection(SIP)が原因である。
SIPはrootの権限を狭めることによりセキュリティを向上させる機能
詳しくは,[El Capitanの「SIP」をもっと知る](http://news.mynavi.jp/column/osxhack/152/)  
  
このSIPを無効にすることによって”Could not set boot device property: 0xe00002bc”を回避することができる。

### 回避方法
- - -  
- Mac起動時に Command+Rでリカバリーモードに入る
- ユーティリティよりターミナルを起動  

```
csrutil disable
```

- Macを通常起動して
```
./refind-install
```
を行う。
これで無事rEFIndをインストールすることができた。  
  
SIPを有効にしておくためにはもう一度Command+Rでリカバリーモードには入り
```
csrutil enable
```
しておくことが望ましい。

### この記事を読んで解決
- - -  
- [OS X 10.11 El Capitanにアップグレードするとblessに失敗する](http://qiita.com/colajam93/items/4811659f8e6ae1981bb5)
MacにHomebrewをインストールする手順とWarningの解決方法

MacにJenkins入れるのに「Homebrew」使うのが良いらしいってことでインストールした。
インストール手順とWarningの解決方法のメモ。

2016/10/03 追記：Homebrewのアップデート時に別のWarningが出たのでメモしておきました。
[Homebrewのアップデート時に出た5つのWarningと解決方法 - Qiita](http://qiita.com/unsoluble_sugar/items/acaffa6d0e28c3c24934)
#環境
MacBook Pro (Retina, 13-inch、Early 2015)
OS X Yosemite バージョン10.10.5
Xcode Version 7.2.1 (7C1002)
※Command Line Toolsはインストール済み
#Homebrewをインストールする
##ターミナルでコマンド実行
ターミナルを開いて[Homebrew公式サイト](http://brew.sh/index_ja.html)に書かれているコマンドを実行する

``` 
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"  
```

画面の指示に従ってキーやパスワード入力して、しばらく待つとインストールが終わる。
<img width="1172" alt="スクリーンショット 2016-03-17 19.46.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/6380/94929395-972b-ef3a-6d21-9a97625f8052.png">
##インストールできたか確認
以下コマンドでHomebrewがインストールできたか確認する。

``` 
$ brew doctor
```
ターミナルに
> Your system is ready to brew.

と表示されれば完了。

<img width="579" alt="スクリーンショット 2016-03-17 19.47.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/6380/1ab82a5b-605d-8b0e-8044-ae4a81d90243.png">

環境によってWarningはありまぁす！

##Warningの解決

###コマンドラインツールのアップデート
ひとつめのWarningメッセージ。

```
Warning: A newer Command Line Tools release is available
Update them from Software Update in the App Store.
```


App Storeからコマンドラインツールをアップデートして解決。
###XQuartzのアップデート
ふたつめのWarningメッセージ。

```
Warning: Your XQuartz (2.7.4) is outdated
Please install XQuartz 2.7.8:
  https://xquartz.macosforge.org
```

XQuartzが古い。[公式サイト](https://xquartz.macosforge.org)から最新版をインストールしよう。

<img width="1547" alt="スクリーンショット 2016-03-17 20.01.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/6380/c5c28ad7-5149-e298-01c0-022fd5b17972.png">
<img width="532" alt="スクリーンショット 2016-03-17 20.10.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/6380/996b88a0-5bdf-2d26-ab44-cea91a955f2b.png">
ヨッシャ

```
$ brew doctor
```
するで〜

<img width="565" alt="スクリーンショット 2016-03-17 20.00.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/6380/9ea4790d-ffc8-e4ba-bb1c-f5032e6f876c.png">

ターミナルで新しいタブ開かないと認識してくれなかった(´･_･`)

<img width="1172" alt="スクリーンショット 2016-03-17 20.11.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/6380/f4dee7df-a4d9-d0aa-e8e2-4f1f41ce98bd.png">
これでWarningは解決。無事にHomebrewが使えるようになりました。

インストール環境によっては別のErrorやWarningが出るかもだけど、基本的には表示されるメッセージどおりに対応すれば大丈夫かと。
##バージョンの確認

```
$ brew -v
```

でバージョン確認できる。

<img width="427" alt="スクリーンショット 2016-03-17 20.12.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/6380/5a4821ca-b432-2437-d7a3-539c9ef89909.png">

おわり。
職業としてプログラムを書くことになった人にいちばん伝えたいこと

よく寝ろよ。

寝不足を気合いやカフェインでカバーしようとすんなよ。

睡眠不足だったら昼休みに Twitter や Qiita なんか見てないで机につっぷして寝ろ。10 分か 20 分でいいんだ。耳栓して寝るといいぞ。

新しく学んだことやいま抱えている難しい問題が睡眠中に脳の中で整理されたりすることもあるみたいだぜ。

とにかく夜更かしするんじゃないぞ。

ん？　こんな真夜中に書いてる自分はなんなんだ？
NSCalendarクラス



swift2, Xcode7.2.1

Class Reference : [NSCalendar](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/#//apple_ref/occ/clm/NSCalendar/currentCalendar)


```swift:ObjectEx.swift
import UIKit

//オブジェクト
//UIViewクラスを継承
//プロジェクト名と同じクラス名
class ObjectEx: UIView {

    //描画時に呼ばれる
    override func drawRect(rect: CGRect) {
        //オブジェクト型の変数の定義
        //イニシャライザはすべての引数でラベル必要(1)
        let calendar: NSCalendar =
            NSCalendar(calendarIdentifier:
            NSCalendarIdentifierGregorian)! //和暦の場合はNSCalendarIdentifierJapanese
            // ! オプショナルな変数->通常変数(2)

        //取得情報フラグの準備(3)
        //構造体.プロパティ名(4)(5)
        let flags: NSCalendarUnit = [
            NSCalendarUnit.Year,   //年
            NSCalendarUnit.Month,  //月
            NSCalendarUnit.Day,    //日
            NSCalendarUnit.Hour,   //時
            NSCalendarUnit.Minute] //分

        //日付コンポーネントの取得
        //オブジェクト名.メソッド名(引数1, ラベル:引数2)
        //メソッドは第二引数以降でラベル指定
        //ここではflagと現在時刻を渡す
        let comps = calendar.components(flags, fromDate: NSDate())

        //年月日の取得
        let year = comps.year     //年
        let month = comps.month   //月
        let day = comps.day       //日
        let hour = comps.hour     //時
        let minute = comps.minute //分

        //文字列の描画
        let str = "\(year)年\(month)月\(day)日\(hour)時\(minute)分"
        drawString(str, x: 0, y: 20)
    }

    //文字列の描画
    func drawString(str: String, x: Int, y: Int) {
        let attrs = [NSFontAttributeName: UIFont.systemFontOfSize(24)]
        str.drawAtPoint(CGPointMake(CGFloat(x), CGFloat(y)),
            withAttributes: attrs)
    }
}
```

### 注釈

1.[イニシャライザ](http://tea-leaves.jp/swift/content/%E3%82%A4%E3%83%8B%E3%82%B7%E3%83%A3%E3%83%A9%E3%82%A4%E3%82%B6)
構造体とクラスで初期化のために使用

2.[オプショナル変数](http://tea-leaves.jp/swift/content/%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E5%9E%8B)
オプショナル変数を利用するにはアンラップする必要がある

3.NSCalendarUnit
[NSCalendarUnitはなにをしているのか](http://qiita.com/takashi/items/8a1f548e355ba88c3434)

4.構造体とは
クラスは参照渡し、構造体は値渡し
[Swiftのクラスと構造体の使い分けについてのメモ](http://qiita.com/mini_house/items/22b7b88794b9f8a32381)

5.flagの書き方は省略できる
[Swift カレンダー，日付系備忘録](http://qiita.com/MilanistaDev/items/0422e72f9bfabc773848)

6.フォーマットを使う
-> NSDateFormatter
[知っておくと便利なローカライズ関連Tips](http://qiita.com/aqubi/items/36e24c2896321cd6df0f)
[NSDateFormatterの使い方まとめ](http://qiita.com/gonsee/items/d3fb641914d2ca45e858)

<br>

 > 参考
 [iPhone/iPadプログラミングバイブル iOS9/Xcode7/Swift 対応](http://www.amazon.co.jp/iPhone-iPad%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%90%E3%82%A4%E3%83%96%E3%83%AB-Xcode7-Swift-programming/dp/4802610165/ref=sr_1_1?ie=UTF8&qid=1458098195&sr=8-1&keywords=iPhone%2FiPad%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%90%E3%82%A4%E3%83%96%E3%83%AB)
circleciのCLIツールを作りました

# [circleci-cli](https://github.com/unhappychoice/circleci-cli)

https://github.com/unhappychoice/circleci-cli


以下READMEより転載して日本語化

# circleci-cli
[![All Contributors](https://img.shields.io/badge/all_contributors-3-orange.svg?style=flat-square)](#contributors-) [![Gem Version](https://badge.fury.io/rb/circleci-cli.svg)](https://badge.fury.io/rb/circleci-cli) [![Circle CI](https://circleci.com/gh/unhappychoice/circleci-cli.svg?style=shield)](https://circleci.com/gh/unhappychoice/circleci-cli) [![Code Climate](https://codeclimate.com/github/unhappychoice/circleci-cli/badges/gpa.svg)](https://codeclimate.com/github/unhappychoice/circleci-cli) [![codecov](https://codecov.io/gh/unhappychoice/circleci-cli/branch/master/graph/badge.svg)](https://codecov.io/gh/unhappychoice/circleci-cli) [![Libraries.io dependency status for GitHub repo](https://img.shields.io/librariesio/github/unhappychoice/circleci-cli.svg)](https://libraries.io/github/unhappychoice/circleci-cli) ![](http://ruby-gem-downloads-badge.herokuapp.com/circleci-cli?type=total) ![GitHub](https://img.shields.io/github/license/unhappychoice/circleci-cli.svg)

![sample.gif](https://github.com/unhappychoice/circler/raw/master/movie/rec.gif)

## インストール

```sh
$ gem install circleci-cli
```

`CIRCLE_CI_TOKEN` 環境変数を設定

```sh
export CIRCLE_CI_TOKEN=your-circle-ci-token
```

## 使い方
```
Commands:
  circleci-cli browse          # open circle ci website
  circleci-cli build           # show build description
  circleci-cli builds          # list builds
  circleci-cli help [COMMAND]  # describe available commands or one specific command
  circleci-cli projects        # list projects
  circleci-cli retry           # retry a build
  circleci-cli version         # show gem version
  circleci-cli watch           # watch a build in real time

Options:
  -p user_name/project   # specify repository
  -b branch              # specify branch name
  -n build_number        # specify build number
  -l last                # get or retry last failed build
  -v verbose             # show all the logs if applied to watch command
```

### プロジェクト引数
プロジェクトの情報はカレントディレクトリの git repository の情報により、自動的に設定されます。

### 例

#### カレントディレクトリのプロジェクトのログを監視
```
$ circleci-cli watch
```

#### カレントディレクトリのプロジェクトのすべてのログを監視
```
$ circleci-cli watch -v
```

#### 最後に失敗したビルドを表示
```
$ circleci-cli build --last
```

#### 最後に失敗したビルドをリトライ
```
$ circleci-cli retry --last
```

#### カレントディレクトリに対応する CircleCI ウェブサイトを表示
```
$ circleci-cli browse
```

## Special Thanks
[ci2go](https://github.com/ngs/ci2go) オープンソースの circleci iOSクライアントです。諸々参考にさせていただきました。
[@ngs](https://github.com/ngs)
ズンドコキヨシ with jq

# 概要
jqコマンドでズンドコキヨシです。

参考: http://qiita.com/y__sama/items/7c451dfd706f9b36729d

# コード
```jq:zndk.jq
def zndkkyc:
  ["ズン", "ドコ"] as $zndk |
  def _zndkkyc(seed):
    def nextseed(x): (x * 9301 + 49297) % 233280;
    def rand(seed): seed / (233280 + 1);
    def sample(seed):
      . as $in | . | nth(rand(seed) * 10 | floor % ($in | length));

    if .[-5:] != ["ズン", "ズン", "ズン", "ズン", "ドコ"] then
      nextseed(seed) as $seed | . + ([$zndk | sample($seed)]) | _zndkkyc($seed)
    else
      . + ["キ・ヨ・シ！"]
    end;

  [] | _zndkkyc(100);
zndkkyc | join("")
```
randが無いので線形合同法でやりました。

# 実行と結果
```bash
$ jq -r -n -f zndk.jq
ドコドコズンズンズンドコズンズンズンドコドコズンズンドコドコドコズンズンドコドコドコズンドコドコズンドコズンドコドコズンドコズンズンズンズンドコキ・ヨ・シ！
```
ズンドコキヨシ with F#

まだズンドコキヨシタグに投稿されていない言語を探したら F# が残ってたので、全くやったことなかったけど書いてみました

## 実装

```fsharp
open System

let z, d = "ずん", "どこ"
let r = new Random()
let allEqual = Array.forall2 (fun (x: string) (y: string) -> x.Equals(y))
let terminator = [|z; z; z; z; d|]

let zd ()= [|z; d|].[r.Next(0, 2)]

let rec zundoko (prev : string array) : unit =
    let msg = zd()
    
    printf "%s" msg
    
    let current = Array.append prev [|msg|]

    match current with
    | [|_|]
    | [|_; _|]
    | [|_; _; _|]
    | [|_; _; _; _|] ->
        zundoko current
    | [|_; _; _; _; _|] ->
        if (Array.forall2 (fun a b -> a.Equals(b)) current terminator) then
            printfn "キ・ヨ・シ！"
        else
            zundoko current.[1..4]
    | _ -> ()
    
zundoko [||]

0
```

## 実行と結果

```
fsharpi hoge.fsx
どこずんずんずんずんずんどこキ・ヨ・シ！
```
日本語プログラミング言語「プロデル」でズンドコキヨシ

# 概要
[プロデル](http://rdr.utopiat.net/)でズンドコキヨシを書いてみました。
可変長配列へ「ズン」または「ドコ」を乱数で選んで追加していき、それらを繋げた文字列の末尾が「ズンズンズンズンドコ」となれば、「キ・ヨ・シ！」と表示して終了します。

# ソースコード
プロデル 1.5.813

```プロデル:ズンドコキヨシ.rdr
結果は、空の配列
『	ズンドコは、{「ズン」,「ドコ」}の(1から2までの乱数)番目
	結果へズンドコを加える
	もし結果を繋げてそれが「ズンズンズンズンドコ」で終わるなら、結果へ「キ・ヨ・シ！」を加える。繰り返しから抜ける
』を繰り返す
結果を繋げて報告する
```

# 実行結果
![zundoco.png](https://qiita-image-store.s3.amazonaws.com/0/101225/a9fa829f-0fcb-ebd2-4013-68bc13e7c2aa.png)

## Web版プロデルでの実行結果
MacOSでは、[Web版プロデル](http://rdr.utopiat.net/play/)で動かせます。

![qiita2.png](https://qiita-image-store.s3.amazonaws.com/0/101225/2c7fb418-c180-107a-7136-1d5249e68ab8.png)
![qiita3.png](https://qiita-image-store.s3.amazonaws.com/0/101225/6bec79fe-1d7b-e6e3-6dea-d3621f4e9d76.png)

# 命令の説明
- [繰り返す](https://produ.irelang.jp/docs/syntax/forloop.html#forloop_never) 
- [配列](https://produ.irelang.jp/docs/primitive/array.htm)
- [繋げる](https://produ.irelang.jp/docs/primitive/array.htm#%E7%B9%8B%E3%81%92%E3%82%8B)
faye-websocketのバージョンによっては、websocket-railsが動かない

# 概要
websocket-railsのサンプルアプリを動かそうとしてハマったのでメモ

ruby 2.2.2
rails 4.2.6
websocket-rails 0.7.0 712fd4e

# (先に)結論
gem 'faye-websocket', '0.10.0'
として
bundle update
(初めにbundle installしたときにfaye-websocketが'0.10.3'でロックされてしまっていたため、bundle updateする必要があった）

# 現象、経緯
websocket-railsの簡単なサンプルをいくつか試した際、dispatcherの.triggerに反応しないものがあった。
websocket_rails.logを見ると、Connection openedはしているが、その後
js側でのtrigger()呼び出しには反応しておらず、openedから20秒後または30秒後にConnection closedしていた。

"websocket-rails connection closed"などとググって、下記「参考」に記載のissueを見つけた。
（ついでに、Gemfile.lockの意味が分かっていなかったので余計にはまった）

# 参考
[websocket-rails 0.7.0 thin 1.6.4 / Handshake times out #379](https://github.com/websocket-rails/websocket-rails/issues/379)
[実装しようとしたサンプル： 第14回　WebSocketでサーバプッシュ その3](http://www.school.ctc-g.co.jp/columns/masuidrive/masuidrive14.html, "第14回　WebSocketでサーバプッシュ その3 ～Websocket-Rails～ (松永紘)")
[Gemfile.lockの意味：bundle installとupdateの使い方について](http://saj-kz.hatenablog.com/entry/2014/04/21/005845)

感謝。
ズンドコキヨシ in D言語Lisp

なんか先ほどQiitaの新着記事一覧をみていると興味深い文字列
 **「ズンドコキヨシ」**
を発見。

何やら話題っぽいので少し記事を漁ってみると以下の記事にたどり着いた: 

[例のキヨシチェックを java で](http://qiita.com/or_die/items/eb971fbd92e7610c01c3)

上の記事で元ネタへのリンクがはってあった(元ネタは以下のツイート)
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから<br>「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ！」って出力した後終了って関数作ったら満点で単位貰ってた</p>&mdash; てくも (@kumiromilk) <a href="https://twitter.com/kumiromilk/status/707437861881180160">March 9, 2016</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>


なるほどね？
ズンドコしてキ・ヨ・シ！すればいいわけか

ということで、D言語Lispで書いてみました(D言語Lispとは、D言語でラムダ式のネストを駆使してワンライナーを書いた時に、括弧が大量に含まれ一瞬Lispに見えることから勝手にD言語Lispと言っているだけであり、Lispとは関係ありません)

```d:zundoko.d
import std.random,
       std.stdio;

void zundoko(int chain = 0) {
  (zun =>
    (doko =>
      (kiyoshi =>
        (GetRandom =>
          (output =>
            (write(output),
              (chain == 4 && output == doko)
                ? writeln(kiyoshi)
                : zundoko((output == zun ? chain + 1 : 0))
            )
          )(GetRandom(2) ? zun : doko)
        )((ulong n) => 
          ((Mt19937 gen) => 
            (gen.seed(unpredictableSeed), gen.front % n)
          )(Mt19937.init)
        )
      )("キ・ヨ・シ！")
    )("ドコ")
  )("ズン");
}

void main() {
  zundoko;
}
```

実行してみると

```zsh
alphakai@MacBook-Pro ~/tmp % rdmd zundoko
ドコドコドコズンズンズンズンドコキ・ヨ・シ！
```

Let's ズンドコキヨシ！！
ズンドコキヨシJava

んー、Stream の中だけで完結できないものかしら。

```language:java
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;

public class Zundoko {

    public static void main(String... args) {
        final String zun = "ズン";
        final String doko = "ドコ";
        List<String> input = Arrays.asList(zun, doko);
        LinkedList<String> queue = new LinkedList<>();
        LinkedList<String> rightCondition =
            new LinkedList<>(Arrays.asList(zun, zun, zun, zun, doko));
        boolean isKiyoshi =
            new Random()
                .ints(0, 2)
                .mapToObj(i -> input.get(i))
                .peek(System.out::println)
                .anyMatch(s -> {
                    queue.addLast(s);
                    if (queue.size() == 5) {
                        if (queue.equals(rightCondition)) {
                            return true;
                        }
                        queue.poll();
                    }
                    return false;
                });
        if (isKiyoshi) {
            System.out.println("キ・ヨ・シ！");
        }
    }
}
```
ReactのComponentをClassで書く

どこかにあるとは思いますが自分へのメモも兼ねて。

## React.createClass => class Hoge extends React.Component
React.createClassの返り値であるConstructorはReact.Componentをprototypeとして持っています。
加えて、引数のobjectのプロパティをマッピングするなどの種々の処理を行っています。
一方、classはprototypeの継承しか行っていないので、種々の処理と同等のことを書かなければなりません。

## 思いつく書き方

直感で思いつく書き方は以下かと思います。

```js:Todo.js
import React, { Component } from 'react'

class Todo extends Component {
  constructor(props, context, updater) {
    super(props, context, updater)
  }

  getInitialState() {
    return { list: [] }
  }

  addToList(todo) {
    this.state.list.push(todo)
    this.setState({ list: this.state.list })
  }

  render() {
    return (
      <div>
        <h1>Todo</h1>
        <TodoForm addToList={this.addToList} />
        <TodoList list={this.state.list} />
      </div>
    )
  }
}
```

はい、これだとエラーが出てしまいます。
https://facebook.github.io/react/docs/reusable-components.html#es6-classes
公式にもありますが、getInitialStateは呼ばれないので、constructorでstateの初期化を行う必要があります。
また、他のJavaなどとは違いthisは常にclassをcontextとしないようです。
そのため、this.addToListが呼ばれた時のthisのcontextはTodoではないです。
結果、this.addToListの実行時にstateがnullやらsetStateなんてプロパティは持っていないやら怒られます・・

## 修正

```js:Todo.js
import React, { Component } from 'react'

class Todo extends Component {
  constructor(props, context, updater) {
    super(props, context, updater)
    // 以下修正点
    this.state = { list: [] }
    this.addToList = this.addToList.bind(this)
  }

  ...,

}
```

this.stateをconstructor内で初期化してあげて、this.addToListのthisのcontextをclassにbindしてあげます。
以上でエラーはなくなります。
cent7 に caffe 導入ではまった点

今は chainer や tensorflow があってそっちの方が簡単に使えるけど、一応メモ。

cpu only でとりあえず、make して mnist が走るところまで。


make 時 Makefile.config を cpu only と blas 関連を修正

```makefile:Makefile.config
CPU_ONLY := 1
BLAS := atlas
BLAS_INCLUDE:= /usr/include
BLAS_LIB:= /usr/lib64/atlas
```

blas が atlas 使っているのに、Makefile 内で cblas となっているので書き換え。

```diff:Makefile
-   LIBRARIES += cblas atlas
+   LIBRARIES += satlas atlas
```

example の mnist 実行時に CPU mode に

```diff:examples/mnist/lenet_solver.prototxt
-solver_mode: GPU
+solver_mode: CPU
```
Python初心者のズンドコキヨシ

最近Pythonを味見していたところ、ズンドコキヨシなる丁度いい課題があったので作ってみました。
Pythonらしいのはジェネレーターを使ったところくらいでしょうか。

```python:zundoko.py

import random

def zundoko_gen():
    while True:
        yield random.choice(('ズン', 'ドコ', 'ハッ'))

class ZunDokoChecker:
    def __init__(self):
        self.zun_count = 0
        
    def check(self, word):
        if word == 'ドコ':
            result = self.zun_count >= 4
            self.zun_count = 0
        else:
            self.zun_count = self.zun_count + 1 if word == 'ズン' else 0
            result = False
        return result

checker = ZunDokoChecker()

for word in zundoko_gen():
    print(word)
    if checker.check(word):
        print('キ・ヨ・シ！')
        break
```

shiracamusさんからお題をいただいたので早速作ってみました。

```python:zundoko2.py
import random

def zundoko_gen():
    zun_count = 0
    word_list = ('ズン', 'ドコ', 'ハッ')
    
    while True:
        word = random.choice(word_list)
        yield word
        
        if word == 'ズン':
            zun_count += 1
        else:
            if word == 'ドコ' and  zun_count >= 4:
                return
            zun_count = 0

            

for word in zundoko_gen():
    print(word);
    
print('キ・ヨ・シ！')
```

工夫してみたのは、ズンドコの完成を検出した際に次の値返却でジェネレートの終了を通知しなければならないのですが最初はフラグでやりました。

yieldを使うので取り合えず値を返却して、それから終了判定とすることでフラグもなくスッキリできました。

word_listを最内ループから外に出したのは趣味です。
組込み屋なのでBUILD_LIST命令で毎回リストインスタンスを生成するのが気になりました。
Windows と Linux で ファイルから特定文字列を抜き出す方法

**Windows**
type <対象ファイル名> | findstr "正規表現" > 出力ファイル名


```
type ‪sample.txt | findstr "*sample" > type.log
```

**Linux**
cat <対象ファイル名> | grep "正規表現" > 出力ファイル名

```
cat sample | grep "*sample" > cat.log
```

是非お試しを～！
ActiveAdminでhas_manyなアイテムのフォームが追加されたイベントをひろう

ActiveAdminでhas_manyなフォームを↓にあるようにつくると
子要素追加用のボタンが出てくる。

> ```rb
    f.inputs do
      f.has_many :comment, new_record: 'Leave Comment' do |b|
        b.input :body
      end
    end
```
http://activeadmin.info/docs/5-forms.html#nested-resources

そのボタンを押したイベントでなんかしたいときには以下のissueにある
https://github.com/activeadmin/activeadmin/issues/1767

以下のリンクにアクセスするとイベント名が載ってるというか実装があって
https://github.com/activeadmin/activeadmin/blob/1c85c5654a2ce1d43d4c64d98b928ff133d46406/app/assets/javascripts/active_admin/lib/has_many.js.coffee

具体的には、例えばtagsというhas_manyな要素があったとして

```js
$('.has_many_container.tags').on('has_many_add:before', function(){
});
$('.has_many_container.tags').on('has_many_add:after', function(){
});
```

というようにするとイベントが拾える。
Mean備忘録


* [mean.io](http://mean.io/#!/)
* [meanドキュメント](http://learn.mean.io/)
　チュートリアルに沿って環境を構築

## Node.js

Node.js　-> 
https://nodejs.org/en/
よりダウンロードし、インストール完了
同じくnpmもインストールされる

http://nodeschool.io/ja/#workshoppers
を見ながらやる
**コマンド**
> 
>username$ npm install -g learnyounode
>

**結果**
>npm ERR! tar.unpack untar error /Users/numami/.npm/learnyounode/3.2.0/package.tgz
npm ERR! Darwin 15.2.0
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "-g" "learnyounode"
npm ERR! node v4.2.4
npm ERR! npm  v2.14.12
npm ERR! path /usr/local/lib/node_modules/learnyounode
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall mkdir
npm ERR! Error: EACCES: permission denied, mkdir '/
...

コマンドを実行すると上記のエラー
エラーコード「EACCES」は、ログインしたIDでアクセス権限や使用権限がない場合に出るので [sudo] をつけて実行。
**コマンド**
> 
>username$ sudo npm install -g learnyounode
>

**結果**
無事インストールされた

>/usr/local/bin/learnyounode -> /usr/local/lib/node_modules/learnyounode/bin/learnyounode
learnyounode@3.2.0 /usr/local/lib/node_modules/learnyounode
├── duplexer@0.1.1
├── after@0.8.1
├── boganipsum@0.1.0
├── rimraf@2.2.8
├── through@2.3.8
├── combined-stream@0.0.7 (delayed-stream@0.0.5)
├── colors-tmpl@1.0.0 (colors@1.0.3)
├── through2@0.6.5 (xtend@4.0.1, readable-stream@1.0.33)
├── concat-stream@1.4.10 (inherits@2.0.1, typedarray@0.0.6, readable-stream@1.1.13)
├── bl@0.9.4 (readable-stream@1.0.33)
├── workshopper-wrappedexec@0.1.2 (xtend@2.1.2)
├── through2-map@1.4.0 (xtend@3.0.0, terminus@1.0.12, through2@0.5.1)
├── hyperquest@1.0.1 (duplexer2@0.0.2)
├── workshopper-exercise@2.5.3 (tuple-stream@0.0.2, split@0.3.3, visualwidth@0.0.1, chalk@0.4.0, xtend@2.1.2, through2@0.4.2, i18n-core@1.3.3)
└── workshopper-adventure@4.4.3 (xtend@4.0.1, visualwidth@0.1.0, split@1.0.0, string-to-stream@1.0.1, combined-stream@1.0.5, chalk@1.1.1, mkdirp@0.5.1, i18n-core@2.1.1, concat-stream@1.5.1, through2@2.0.0, rimraf@2.5.0, simple-terminal-menu@1.1.1, latest-version@2.0.0, msee-preview@0.4.1, commandico@2.0.0)

**コマンド**
> 
>username$ javascripting
>


**結果**
javascript のワークショッパーを起動できた
                                                                              
>   JAVASCRIPTING                                                              
   Select an exercise and hit Enter to begin                                  
   ─────────────────────────────────────────────────────────────────────────  
   » INTRODUCTION                                                             
   » VARIABLES                                                                
   » STRINGS                                                                  
...

***javascriptとnode.jsの演習***
jsの演習（javascripting）は簡単だったけど、node.jsの演習（learnyounode）の方は少し難しかった
javascript備忘録


**関数**

関数名をつけておく（下記の場合hoge）と後から何度も呼び出すことができる。
>function hoge(){
　　//処理
}


**無名関数**
無名関数では、関数名なしに定義できる。
変数に関数の定義そのものを代入できる。
>function {
　　//処理
}

>var multiply = function (x, y){
　　return x * y;
}
var hoge = multiply(3, 2);
console.log(hoge);

結果：6


**即時関数**
IIFE（イッフィー）：Immediately-invoked function expression　とも呼ばれる

即時関数は、無名関数のひとつで、変数に代入することなく出力できる。
下記のように、functionから括弧でくくり変数”Multiply”に代入することで
無名関数で必要だった変数”hoge”を定義せずに実行できる。
>var multiply = (function (x, y){
　　return x * y;
})(3, 2);
console.log(multiply);

結果：6

**スコープ**
jsにはグローバルとローカルの二つのスコープがある。
functionの外で宣言する場合がグローバル、内で宣言する場合ローカルとなる。
CentOS 7 @さくらのVPS 環境設定備忘録

# インストールOS
- CentOS 7
- `yum update`

# ひとまずのツール
- vim (入ってないんだね!)
- screen

# セキュリティまわり1

[VPS 借りたら、せめてこれくらいはやっとけというセキュリティ設定](https://dogmap.jp/2011/05/12/vps-security/)
を参考に

- rootログインの禁止
- 作業用ユーザの作成
- sudoersの設定
- 鍵の配置
- パスワードログインの禁止

# そのほか
これは CentOS 6 だけど、 [はじめてでも爆速でCentOS6.6(さくらのVPS)をセキュアにセットアップする方法まとめ](http://nekopunch.hatenablog.com/entry/2015/01/16/112402)
も参考に

- ~~etckeeper~~ 無い!!
- `yum install epel-release`
- etckeeperのインストール

# ネットワークまわり
iptables がなくなったので、 firewalld を確認。

```shell-session

[root@**** ~]# firewall-cmd --list-all
public (default, active)
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

```

この、ポートに名前つける習慣やめてほしいんだけど、それはそれとしてこれでいいや。

# 保守系統

- yum-cron のインストール、勝手にオンになる
- mailx のインストール
- logwatch
- `yum remove cronie-anacron`
- `yum install cronie-noanacron`
AD2 > Link > Power Supply Noise Reduction


http://qiita.com/7of9/items/19a7540b4ea0f43c8215
に関してハムノイズ除去の話をしたら「LCフィルタを使えばいい」というアドバイスをもらった。

hum noise LC filterなどで検索して以下を見つけた。
http://www.designers-guide.org/design/bypassing.pdf

中身の理解がいまいち。

Figure 8の色々な方法のいずれかを試すのだろうか。
その場合、LCだけでなくRも考慮することになりそうだ。

週末の買い出しまでに理解できるかどうか。