OmniAICreator/Qiita-1.07M huggingface dataset:
golang と Github と CircleCI で実行ファイル生成を自動化して楽に配布できるようにする

どこでも動いてほしいツールは golang で書いて Github の release page からバイナリー落とせれば最強じゃんと思ったのでその設定を書き留める。

前提は次。

- Github に golang で書いたツールの public repo がある

目指すところは次。

- 特定形式の git tag を push したときだけバイナリー生成してダウンロードできるようにする

参考にしたのは次。

- http://qiita.com/toruuetani/items/b41805ef8568b4ae0519
    - このときから Github の UI や CircleCI の機能が変わっている

実際に動いてるプロジェクトは次。

- https://github.com/januswel/dotor
- https://github.com/januswel/yangpao

Github 設定
-----------

CircleCI が Github に書き込めるようにするためのトークンを生成しておく。

1. Github 右上の自分のアイコンから "Settings" を選ぶ
2. 右側の "Personal access tokens" を選ぶ
3. "Generate new token" を選ぶ
4. "Toke description" は適当に
    - ただし各プロジェクトごとに作ったほうが取り回しやすい気がするので "project - CircleCI" とかにしとくといい
5. "repo" の下にある "public_repo" だけチェック
6. その他の権限は今回はいらないのでチェックしない
7. "Generate token" を押す

![github-token.png](https://qiita-image-store.s3.amazonaws.com/0/27516/5c909bbd-c662-d398-6de8-b5a2f4edaea0.png)

出てきた token をメモしておく。
忘れちゃったら "Edit" -> "Regenerate token" すれば出てくる。


CircleCI 設定
-------------

1. 左ペインの "ADD PROJECTS" から対象のプロジェクトを追加する。
2. なんか走りだすんだけどそれは無視して右上の "Project Settings" から設定を変更する
3. "Environment Variables" から環境変数を設定する
    - "GITHUB_TOKEN" に上で Github で生成したトークンを指定する
    - "USERNAME" に Github アカウント名を指定する


プロジェクト設定
----------------

プロジェクトのルートディレクトリーに circleci.yml を追加する。

```yml:circleci.yml
---
machine:
  timezone: Asia/Tokyo
deployment:
  release:
    tag: /v(0|[1-9][0-9]*)(\.(0|[1-9][0-9]*)){2}/
    commands:
      - go get github.com/mitchellh/gox
      - go get github.com/tcnksm/ghr
      - gox -osarch "linux/amd64 linux/arm darwin/amd64 windows/amd64" -output "dist/{{.Dir}}_{{.OS}}_{{.Arch}}"
      - ghr -t ${GITHUB_TOKEN} -u ${USERNAME} -r ${CIRCLE_PROJECT_REPONAME} --replace $(cat release_tag) dist/
```

tag に正規表現を指定できるので特定形式に縛りたい場合は縛る。上の例だと semver 形式で最初に v がついている tag を push すると deployment セクションが走るようになる。

静的なファイルも一緒に配布したい場合は commands の ghr の前くらいに cp で dist の下にコピーしてやるとかする。

```yml
      - cp dotor.yml dist/dotor.yml
```

詳しくは https://circleci.com/docs/configuration/ を参照。ただしサンプル通りに owner を指定すると deployment セクションが走らなくなるので指定しないこと。

生成したい OS と arch の指定は https://github.com/mitchellh/gox を参照。 commands の gox の行の osarch のところを変更してやればいける。

release page
------------

設定が終わった状態で次のように git tag を push してやる。

```sh
git tag v1.2.3
git push origin master --tags
```

そうすると次のように各 OS / arch のバイナリーがダウンロードできるようになる。

![release-page.png](https://qiita-image-store.s3.amazonaws.com/0/27516/2e7d2513-1252-d4d1-bdca-4fc187e180d3.png)
研究で利用するツールまとめ

--


### [Linked Open Vocablaries(LOV)](http://lov.okfn.org/dataset/lov/)
- メタデータ語彙定義を収集・公開している,よく利用される語彙をTOPに記載
- 語彙,公開組織に対する検索環境及び語彙定義のSPARQL EndpointとData Dumpを提供
- 主にタームの定義の確認，RDF形式の語彙定義を入手するために使用


### [メタデータ情報共有のためのガイドライン](http://www.mi3.or.jp/item/A03.pdf)
- 日本語でメタデータについての総合的な情報が載っている



### [dataHub](https://datahub.io/ja/)
- データセットを取ってくるときは大体ここ


### [データフォージャパン](http://dataforjapan.org/)
- 使ったことないけど日本語のデータセットを集めているらしい
RaspberryPi でGUIが起動しない。(容量がない編)

# 見られる症状
1. まだGUIが起動していた頃、設定を変更(この時はclonetabの編集)しようとした時に"No space left on device"(空き容量がないよ) が表示されていた。 
2. Raspberry pi を改めて起動した時に、読み込みまで終わるがGUIの表示はされず画面真っ暗。

# 今回解決した方法
- 16GBのSDカードのはずが容量の制限がされていた。
- その制限をはずして再起動。
- 容量不足が原因？

# 手順  
参考にさせて頂きました。ありがとうございます。
[Raspberry Piの設定【SDカード使用容量の変更（リサイズ）】](http://yamaryu0508.hatenablog.com/entry/2015/02/03/070000)
1. 起動、読み込み後、画面真っ暗の時に **Ctrl + Alt + F1** (CUIを起動させる)
2. 容量が不足しているかを確認。'df -h'でディスクの状況を確認  
   100%の箇所があったり、容量の数値が合わないなら疑い有り。
3. 'sudo raspi-conig' でコンフィグ画面を開く。
4. "Expand Filesystem"という項目があるのでenter。その後「has been resized」が出ているなら恐らく成功。もう一度enterで後はコンフィグを終了させる。
5. 終了時にrebootされるのでその後GUIが起動されれば終了。

xorg.configがないから作ろうとしましたが、その前に確認しておいて良かったです…
はじめてのラズパイ＋公式ディスプレイ

#目的
・Raspberry Pi 3 Model Bを動かしてみる
・公式タッチパネルディスプレイを接続する

#購入・用意したもの
・Raspberry Pi 3 Model B 
・Raspberry Pi 7" Touchscreen DisplayのRaspberry Pi
・USBキーボード
・USBマウス
・MicroSDカード

#作業手順
- 1. ディスプレイの設置
- 2. Rasberry PiのOS、RASBIAN JESSIEの準備

#1.ディスプレイの設置
##参考サイト
**「Raspberry Pi 7インチ タッチ・スクリーン ディスプレイ 接続・取り付け方法」**
https://raspberry-pi.ksyic.com/page/page/pgp.id/4

上記サイトを見れば、大体出来ます。
注意点が、STEP5〜６のDSIリボンケーブル。
取り付け部分の黒い部分を引っ張ることができ、この時にケーブルを差し込みます。
ケーブルを差し込んだあと、黒い部分を再度抑えこむことで設置が出来ます。

STEP5からSTEP6にかけて上にRasberryPi本体をが乗っています。
なので、DSIリボンケーブルは、ディスプレイに設置されている部分から、
RasberryPi本体に接続している事がわかります。
また、普通の方なら分かるかもしれませんが、、、やってる時混同したので^^;

#2. Rasberry PiのOS、RASPBIAN JESSIEの準備
##RASPBIAN JESSIEのダウンロード
https://www.raspberrypi.org/downloads/raspbian/

LITEバージョンはGUIが無いもの？ 今回DLてみてみたところ、LITEの場合300MB, LITEではない場合は1.3GB程。
μTorrentを利用してダウンロードすると速い。


##SDカードへのインストール
とりあえず、自分自身の場合はMACにSDカードを差し込みます。
そして、以下のコマンドからどのディスクかをチェック。
```diskutil list
```
今回、自分自身は/dev/disk5にマウントされていたので、以下のコマンドでアンマウントする。

```sudo diskutil unmountDisk /dev/disk5
```

そして、以下のコマンドでSDカードにRasbianをインストール出来る。

```
user$ sudo dd bs=1m if=/User/filename/2016-05-10-raspbian-jessie.img of=/dev/disk5

Password:
3830+0 records in
3830+0 records out
4016046080 bytes transferred in 1158.475187 secs (3466666 bytes/sec)
```

##Rasberry Pi の起動
MicroSDカードをRasberry PIの裏にある差し込み口に差し込んで電源を入れるとRasbianが起動する。
全体を通して、そこまでの手順はないので簡単でした。


#参考サイト
・Raspberry Pi 7インチ タッチ・スクリーン ディスプレイ 接続・取り付け方法
https://raspberry-pi.ksyic.com/page/page/pgp.id/4
・SD カードに Raspbian をインストールする方法 for Mac
https://gotohayato.com/content/16
RxSwiftをiOS 7で使う

RxSwiftに付属のサンプルプロジェクト「[RxExample](https://github.com/ReactiveX/RxSwift/tree/master/RxExample)」にはiOS版とOS X版があって、その中の一つにDynamic Framework（その用途からEmbedded Frameworkとも呼ばれる）ではなく、RxSwiftのソースコードを直接プロジェクトに追加する形で構成されている「RxExample-iOS-no-module」というターゲットがあります。

そこで用いられているやり方を使って、RxSwiftをDynamic Framework非対応のiOS 7で使ってみます。

# RxExample-iOSとRxExample-iOS-no-moduleの違い

1. RxSwiftとRxCocoaのソースコードがプロジェクトに追加されている
2. `import RxSwift`や`import RxCocoa`を無効にするフラグをつけてビルドされている
3. 一部のObjective-CのコードをBridging Headerで読み込んでいる

これらをDeployment TargetがiOS 7向けのターゲットに適用していきます。

# 1. RxSwiftとRxCocoaのソースコードをプロジェクトに追加する

[RxSwift](https://github.com/ReactiveX/RxSwift)からソースコードをチェックアウトして、[RxSwiftフォルダ](https://github.com/ReactiveX/RxSwift/tree/master/RxSwift)以下と[RxCocoaフォルダ](https://github.com/ReactiveX/RxSwift/tree/master/RxCocoa)以下を丸ごとプロジェクトに追加します。そのときiOS 7向けのターゲットに含まれるようにします。

そのうち、[RxCocoa/OSXフォルダ](https://github.com/ReactiveX/RxSwift/tree/master/RxCocoa/OSX)以下は必要ない（というか、あるとビルドできない）のでプロジェクトから削除するか、ターゲットから外します。

# 2. 「Other Swift Flags」に「-D RX_NO_MODULE」を追加する

ターゲットの「Other Swift Flags」に「-D RX_NO_MODULE」を追加します。

<img width="558" alt="Screen Shot 2016-05-25 at 00.09.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/31516/08085e99-9f2d-da97-0c6a-19be730308dc.png">

これにより、ソースコード中の`import RxSwift`や`import RxCocoa`が無視されるようになり、名前空間に依存している箇所も解消されます。

# 3. RxCocoa.hをBridging Headerで読み込む

RxCocoaの一部はObjective-Cで実装されているため、それらをSwiftのプロジェクトでも使えるようにする必要があります。

[RxCocoa/RxCocoa.h](https://github.com/ReactiveX/RxSwift/blob/master/RxCocoa/RxCocoa.h)へのパスを直接「Objective-C Bridging Header」に指定するか、既存または新規のBridging Headerに`#import "RxCocoa.h"`を追加します。

<img width="688" alt="Screen Shot 2016-05-25 at 00.13.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/31516/c934e621-ccc0-4522-d349-1c615db11db2.png">

```objc:RxSwift-iOS7-Bridging-Header.h
#import "RxCocoa.h"
```

# 4. RxSwiftやRxCocoaを使ったコードを書いてiOS 7で実行してみる

ここまでやるとRxSwiftやRxCocoaが使えるようになっているはずです。直接ソースコードを取り込んでいるので`import RxSwift`などはする必要がありません。

ビルドが無事通り、iOS 7の端末でも動くか確認しましょう。当然ですが、`UISearchController+Rx.swift`など、iOS 8から使えるようになったクラスや機能のRx拡張は使えないので、そこだけ注意してください。

# Dynamic Frameworkを使わないことによるデメリット

Dynamic Frameworkが提供していた名前空間がなくなるので、RxSwiftで定義されているクラスや構造体と同じ名前は使えなくなります。

# サンプルプロジェクト

https://github.com/bricklife/RxSwift-iOS7
ようやくOSXでvimの基本設定をした

OSXで、Xcodeを使うまでもない、ちょっとしたコーディングをしたいことがある。そんな時はvimだ。

とはいえ、OSXのvimの標準設定は、僕の趣味に合わない。

今まで、まあ、たまにしか使わないから、と放置していたのだが、思い立って、普段のLinux(RHEL6/7)でのvimの設定に近づけることにした。と言っても、気になる部分だけ。

まずは、Linux環境の`.vimrc`をコピー。

```
set tabstop=4
set noautoindent
autocmd FileType * set formatoptions-=ro
```

しかし、まだ根本的なところが違う気がする。

まず、最後にカーソルがあった行を保持してくれないのが困るな。というわけでRHELの`/etc/vimrc`から該当行をコピーさせていただく。

```
if has("autocmd")
  augroup redhat
  autocmd!
  " In text files, always limit the width of text to 78 characters
  " autocmd BufRead *.txt set tw=78
  " When editing a file, always jump to the last cursor position
  autocmd BufReadPost *
  \ if line("'\"") > 0 && line ("'\"") <= line("$") |
  \   exe "normal! g'\"" |
  \ endif
  " don't write swapfile on most commonly used directories for NFS mounts or USB sticks
  autocmd BufNewFile,BufReadPre /media/*,/run/media/*,/mnt/* set directory=~/tmp,/var/tmp,/tmp
  " start with spec file template
  autocmd BufNewFile *.spec 0r /usr/share/vim/vimfiles/template.spec
  augroup END
endif
```

えーと、それから、色をつけるのは、

```
syntax on
```

OK。これでバッチリ。

```
$ cat -n ~/.vimrc 
     1	set tabstop=4
     2	set noautoindent
     3	autocmd FileType * set formatoptions-=ro
     4	
     5	" Only do this part when compiled with support for autocommands
     6	if has("autocmd")
     7	  augroup redhat
     8	  autocmd!
     9	  " In text files, always limit the width of text to 78 characters
    10	  " autocmd BufRead *.txt set tw=78
    11	  " When editing a file, always jump to the last cursor position
    12	  autocmd BufReadPost *
    13	  \ if line("'\"") > 0 && line ("'\"") <= line("$") |
    14	  \   exe "normal! g'\"" |
    15	  \ endif
    16	  " don't write swapfile on most commonly used directories for NFS mounts or USB sticks
    17	  autocmd BufNewFile,BufReadPre /media/*,/run/media/*,/mnt/* set directory=~/tmp,/var/tmp,/tmp
    18	  " start with spec file template
    19	  autocmd BufNewFile *.spec 0r /usr/share/vim/vimfiles/template.spec
    20	  augroup END
    21	endif
    22	
    23	syntax on
```
Watson IoT Platform - Node-REDをローカル環境で稼働させる

初めてWatson IoT Platformを使ってみよう、というかたのためのガイドです。
[Watson IoT Platformを使ってみる](http://qiita.com/egplnt/items/af867711a7191923b2ff)でIoTアプリを準備しました。
Node-REDが便利なので、ローカル環境で使えるようにします。

#Node-REDをローカルに導入する
1. [Node-REDのインストールページ](http://nodered.org/docs/getting-started/installation)を開きます。
![スクリーンショット 2016-05-25 0.08.54.png](https://qiita-image-store.s3.amazonaws.com/0/125842/6c442200-457c-06c2-1f87-134336e8e3d7.png)

2. node.jsを未インストール環境であれば、ページの指示に従ってまずnode.jsのパッケージ（MacOSX環境であれば`node-v4.4.4.pkg`など）をダウンロードして導入します。
3. node.jsが導入できたら、続いてスクロールダウンして、下記のコマンドでNode-REDを導入します。
`sudo npm install -g --unsafe-perm node-red`
![スクリーンショット 2016-05-25 0.11.09.png](https://qiita-image-store.s3.amazonaws.com/0/125842/86c4e7ae-dabb-55d3-5fe2-676f59215199.png)

4. インストールが進行すると画面に`Server now running at http://127.0.0.1:1880/`などと表示されるのでブラウザでこのURLをアクセスします。
5. Node-REDがローカル環境で使用可能になりました。
![スクリーンショット 2016-05-25 0.14.20.png](https://qiita-image-store.s3.amazonaws.com/0/125842/18786d54-7012-1c68-ecaf-67defc515ff7.png)
リーン開発をはじめよう

## はじめに
この度リーン開発の研修を受ける機会があったので、主に自分用の備忘録として
文書化しておこうと思う。
詳細な部分まで突っ込んでは書かないが、これからリーン開発を始める上で大事な心構え的なことを書けたらいいかなと思う。

## 開発あるある話

ソフトウェア開発の現場で仕事をしていると下記のようなやりとりがよく聞こえてくる。

(例)
Producer(以降P)「この機能いれたいんだよね〜　どれくらい工数かかりそう？」
Engineer(以降E)「テスト含め１人月ですねえ」
P「結構かかるね〜　でもきっとユーザにとっては嬉しい機能だから入れたいな。おねがいできる？」
E「りょーかいです。では実装します。」

~~ 無事リリース。しかしKPIに変化なし ~~

P「なにがだめだったんだろねえ・・・」
E「うーん」
P「よっしゃ、この機能追加したら今度は間違いないよ。この機能はどれくらいかかる？」
E「同じく1人月くらいっすねえ」
P「結構かかるんだなあ。まあ仕方ないな。おねがいできる？」
E「はーい。」

~~ 無事リリース。しかしKPIに変化なし ~~

P「うまくいくと思ったんだけどなあ・・」
E「・・・」
P「じゃこんどは」

~~ 上に戻る ~~

上記の例では開発コストのみ膨れ上がって事業リスクを増大させている。
これを繰り返していけば、最悪の場合にはサービスクローズにもなりかねないし、なによりエンジニアはどんどん疲弊していく。

でもこれはなにもプロデューサーだけの責任ではない。
エンジニアの責任でもあるのだ。

## リーン開発 is 何
リーン開発は、トヨタ生産方式をソフトウェアの開発工程に応用させた、
プロセスから無駄を取り除くことを目的とした開発手法である。
特にスクラムのようなプロジェクトマネジメントフレームワークではなく、
実践手段を提供するための手助けの役割を担う。

具体的には、ビジネスアイデア（多くの場合それは思い込み）をまずは仮説と捉えるという事。
そして最小限のコストで実装しスピーディーにリリースしてユーザーの反応を見る（計測する）。
得られたデータを精査し、反響があればさらに一歩進めて実装をしていく。
これを繰り返す事で開発コストを抑えながら仮説を実証していく方法。

##### リーン開発のサイクル
`Build(構築し) -> Measure(計測し) -> Learn(データから学ぶ)`

上記のP/Eのやりとりでいうと、まずはPの入れたがっている機能を疑うところから始まる。

## MVP（Minimum Viable Product）

では最小限のコストで実装するというのはどういう事か。

MVPという用語がある。これはMinimum Viable Productの略で、「検証するための最低限の機能を持った製品」というもの。
例えば運用中のサービスに購入機能をいれたいとする。
まともに開発すれば決算機能もあったりするので結構な工数がかかるが、まずはサービスに購入ボタンのみ設置してみる。そしてユーザーが「購入」ボタンを押下すると、「絶賛開発中！」のようなモーダルが表示されるといった機能をテスト的に入れてみる。
これをMVPといい、そこから得られたデータからユーザのニーズを知る。

この方法だと、実際に購入機能をフルで開発するよりもずっと低コストで仮説の実証ができる。
なにより大事なのは、MVP導入を**エンジニアから提案**することだ。

## 3原則
まとめに入るとリーン開発で大事なことは以下の3点。
#### 1.疑う
入れようとしている機能が本当にユーザーに求められているのかをまずは疑う。
#### 2.測る
MVPをリリースし、ユーザーの反応を計測する。
#### 3.学ぶ
得られたデータから学びを得て修正する

## おわりに
つらつらと知ったように書いたが、自分もリーン開発をこれから実践していこうという身なので
実際に携わっているサービスで始めていけたらと思う。
やってみてうまくいった点、反省点などが出てきたら次の機会にまたpostする予定。
Chromebookをアップデートしたらcroutonが動かなくなった時の対処

#すべきこと
- chrootをアップデートする

#どうするか
1. chrootの名前を調べる
2. croutonでchrootをアップデートする

#やってみる
##chrootの名前を調べる

```
$ sudo edit-chroot -a
```
Tips: chrootの名前はインストール時に指定しなかった場合、リリース名になっています。
例: Ubuntu 14.04をインストールしたとき、chrootの名前は"trusty"
##croutonでchrootをアップデートする

```
$ sudo sh ~/Downloads/crouton -u -n [chrootの名前]
```
asadminでよく使うコマンド（構築編）

よく考えたらasadmin使うのは構築時くらいしかないんじゃないかというのはさておき。

#サマリ

- asadmin change-admin-password
- asadmin enable-secure-admin
- asadmin create-service domain1
- asadmin (stop-domain|start-domain)

#説明
<dl>
<dt>asadmin change-admin-password</dt>
<dd>読んで字の如く、管理者パスワードを設定する。</dd>
</dl>
<dl>
<dt>asadmin enable-secure-admin</dt>
<dd>DASへの管理接続（HTTP）を暗号化（HTTPS）する。</dd>
</dl>
<dl>
<dt>asadmin create-service domain1</dt>
<dd>domain1をサービス登録する。（Windowsでしか試してない）</dd>
</dl>
<dl>
<dt>asadmin (stop-domain|start-domain)</dt>
<dd>すべてのdomainを（停止|起動）する。</dd>
</dl>

#おまけ
asadminはGlassfishのドメインとは独立した管理クライアントとして動作可能で、管理操作対象のdomainを指定するのにport、hostで指定できる。その場合は以下のようなオプションを利用する。

```
# asadmin <サブコマンド> --port 4848 --host localhost
```
Google Chrome で CSS3 アニメーションを使ってフェードインさせると重なり順が意図しない状態になる件

そもそも "`opacity` が `1` 以外の要素" が [スタック文脈](https://developer.mozilla.org/ja/docs/Web/Guide/CSS/Understanding_z_index/The_stacking_context) を作るということを初めて知った情弱なのですが、Google Chrome で `opacity` の値をアニメーションさせた場合に意図しない挙動をしたのでメモ。

[JSFiddleによるデモ](https://jsfiddle.net/bum1zayd/)

```html
<div class="red">
    <div class="yellow">

    </div>
</div>
<div class="blue">

</div>
```

こんな HTML があったとして、`yellow` は `red` や `blue` より手前に持っていきたいとする。

![StackContextThumb.png](https://qiita-image-store.s3.amazonaws.com/0/11978/194a50de-c8ff-6d71-0936-6b11257276c1.png)

ここで次のような CSS を指定すると Google Chrome だけはアニメーション完了後も `yellow` が `blue` の裏に回ったままになってしまう。

```css
div {
    width: 150px;
    height: 150px;
    position: relative; /* ← 再現条件 */
}

.red {
    background: red;
    animation: fadeIn 2s linear 1 forwards; /* ← forwards で 100% の値を保持するのが再現条件 */
}

@keyframes fadeIn {
    0% { opacity: 0; }
    100% { opacity: 1; }
}

@-webkit-keyframes fadeIn {
    0% { opacity: 0; }
    100% { opacity: 1; }
}

.blue {
    background: blue;
}

.yellow {
    background: yellow;
    position: absolute;
    bottom: -20px;
    right: -20px;
    z-index: 1; /* 手前に持っていきたい */
}
```

![StackContext.png](https://qiita-image-store.s3.amazonaws.com/0/11978/a279efb1-48bf-4bb6-e7c4-1e5a48bb2a79.png)


どうも `animation-fill-mode` を `forwards` に指定して `100%` のフレームで `opacity: 1` としても `opacity` が `1` 扱いされずにスタック文脈が出来たままになる様子。

今回はアニメーションでフェードインさせた部分で [Bootstrap の tooltip](http://getbootstrap.com/javascript/#tooltips) を表示させようとして重なり順がおかしくなったので `{ container: 'selector' }` を指定してやってツールチップ用の `div` をスタック文脈を作ってしまった要素より外側に逃がして回避しましたが、DOM 構造を変えられない場合は困りそう……
<ol>と<ul>の違い

 <ul>
    <li>Jack Smith - Vocals</li>
    <li>Sarah Quan - Guitar</li>
    <li>Laverne Butlet - Bass</li>
    <li>Simon St. Hollister - Drums</li>
 </ul>  


<ol>
    <li>Visible/Invisible</li>
    <li>Car Trip</li>
    <li>AFK</li>
    <li>Up and Up</li>
</ol>

<ul>タグ / unorderd list 順不同のリスト

<ol>タグ / oredrd list 順序のあるリスト
httping が入っていない環境での代替bash function

だいたい似たようなことが bash と curl コマンドでも出来ます。

```bash
function althttping() {
  local target=$1
  local i=0
  while true
  do
    curl -sI $target -o /dev/null -w "connected to %{remote_ip}:%{remote_port} (%{size_header} bytes), seq=${i} time=%{time_total}s\n";i=$((i+1))
    sleep 1
  done
}
```

実行結果

```bash
$ althttping www.google.com
connected to 183.79.75.234:80 (669 bytes), seq=0 time=0.068s
connected to 118.151.235.191:80 (669 bytes), seq=1 time=0.035s
connected to 183.79.139.228:80 (669 bytes), seq=2 time=0.064s
connected to 183.79.43.200:80 (669 bytes), seq=3 time=0.083s
connected to 183.79.75.234:80 (669 bytes), seq=4 time=0.062s
```

ほんものの httping の実行結果

```bash
$ httping www.yahoo.co.jp
PING www.yahoo.co.jp:80 (/):
connected to 118.151.235.191:80 (673 bytes), seq=0 time= 24.80 ms 
connected to 183.79.43.200:80 (673 bytes), seq=1 time= 59.37 ms 
connected to 118.151.235.191:80 (673 bytes), seq=2 time= 25.62 ms 
connected to 183.79.43.200:80 (673 bytes), seq=3 time= 51.99 ms 
connected to 118.151.235.191:80 (673 bytes), seq=4 time= 27.82 ms 
^CGot signal 2
--- http://www.yahoo.co.jp/ ping statistics ---
5 connects, 5 ok, 0.00% failed, time 4705ms
round-trip min/avg/max = 24.8/37.9/59.4 ms
```
[修正] Python  文字列の英数字判定でハマった


***追記***
記事に不備がありましたので、本文の下の追記部分もお読みください。

## ハマった点

ある日のこと
Google App Engine (Python) でWebアプリを書いていました。

Webサービスで、パスワードに使える文字を判定したい時ってありますよね？

調べたら `文字列.isalnum()` で英数字かどうか確かめられるそうなので、それを使ったんです。

しかしおかしい。

```py 
password = 'abc123'
password.isalnum()  #--> True

password = u'あいう'
password.isalnum()  #--> True  えっ？
```

どうやら全角文字は isalnum メソッドでは True と判断されるみたいです。
ひどい...

## 解決策

仕方ないので正規表現を使います。
ついでに色々用意しました。

```py
import re


#半角小文字
lowerReg = re.compile(r'^[a-z]+$')
def islower(s):
    return lowerReg.match(s) is not None

#半角大文字
upperReg = re.compile(r'^[A-Z]+$')
def isupper(s):
    return upperReg.match(s) is not None

#半角英字
alphaReg = re.compile(r'^[a-zA-Z]+$')
def isalpha(s):
    return alphaReg.match(s) is not None

#半角数字
digitReg = re.compile(r'^[0-9]+$')
def isdigit(s):
    return digitReg.match(s) is not None

#半角英数字
alnumReg = re.compile(r'^[a-zA-Z0-9]+$')
def isalnum(s):
    return alnumReg.match(s) is not None

#半角英数字orアンダースコア
alnum_Reg = re.compile(r'^[a-zA-Z0-9_]+$')
def isalnum_(s):
    return alnum_Reg.match(s) is not None

#半角記号
symbolReg = re.compile(r'^[!-/:-@[-`{-~]+$')
def issymbol(s):
    return symbolReg.match(s) is not None

#ASCII文字
asciiReg = re.compile(r'^[!-~]+$')
def isascii(s):
    return asciiReg.match(s) is not None



isalnum('abc123')  #--> True
isalnum(u'あいう')  #--> False
```
※空白文字は False
※空文字列のときにも True を返したい場合は、正規表現の `r'^[ ... ]+$'` を `r'^[ ... ]*$'` に変えてください

情報が少ない気がしたのでメモしておきます。
  
## 参考サイト

+ <http://docs.python.jp/2/library/re.html#module-re> Python Documentation 正規表現


## ...

今回の件とは関係ないみたいですが、Google App Engine では Python3 は今の所使えません (Python 2.7まで) 。
なので、文字列が Unicode と str の2種類(正確にはバイト文字列も)あり不便です...。



# 追記

コメントにて指摘していただきました。

isalnum メソッドがうまく働かないのはunicode 文字列の場合のようです。
UTF8 にエンコードすると期待通りの動作をします。

isalnum メソッドの他に、isalpha (英字)、isdigit (数字)、islower (小文字)、isupper (大文字) を利用できます。

その他の判定(ASCII判定など)についてはメソッドがないので、本文の正規表現を使ってください。

## Python 2.x の場合
str 文字列の場合は isalnum メソッドは正しく動作します。

ただ str 文字列で日本語などの全角文字を扱うと、文字数の取得などが思い通りにならないので unicode 文字列を使う方が便利です。
その時は str に変換して確かめます。

```
u'あいう'.encode('utf-8').isalnum()  #--> False
```

## Python 3.x の場合
Python 3.x 系では str と unicode は統合され、str という名前ですが実態は unicode になっています。
その為、普通の文字列リテラルでも utf-8 にエンコードする必要があります。

```
'あいう'.encode('utf-8').isalnum()  #--> False
```

***以上 追記***
Microsoft Translate APIで和英辞書を作ってみた

#前書き

Microsoft社の翻訳APIを使いたかったので、和英辞書を作りました！

翻訳APIの使い方については[Microsoft Translator APIを使ってみる](http://qiita.com/kemayako/items/21fe36005e6e729aff77)を参考にしました。

コードもほぼ拝借しましたm(_ _)m

##自己紹介

Twitter [@konojunya](http://twitter.com/konojunya)

じゅんじゅんというニックネームで、関西を拠点に活動しているフロントエンドエンジニアです。

HAL大阪の2回生です👍 (2016.5.24現在)

よくstart up系イベントに行くので、大阪らへんの方は会いましょう！

では、早速。

#準備

まずtranslateAPIを使うために、`client key`と`secret key`を取得しておきます。

取得の方法については[こちら](http://qiita.com/kemayako/items/21fe36005e6e729aff77)をご覧ください！

次に、milkcocoaにアプリの登録をします。

[milkcocoa](https://mlkcca.com/)で登録して、`app ID`をメモしておいてください！

#開発

まずapp.jsにtranslate APIのkeyを登録しておきます。

必要に応じて、環境変数にしてください。

```app.js
function getAccessToken(callback) {
  var body = '';
  var req = https.request({
    host: 'datamarket.accesscontrol.windows.net',
    path: '/v2/OAuth2-13',
    method: 'POST'
    }, function (res) {
      res.setEncoding('utf8');
      res.on('data', function (chunk) {
        body += chunk;
      }).on('end', function () {
        var resData = JSON.parse(body);
        callback(resData.access_token);
      });
    }).on('error', function (err) {
      console.log(err);
    });
  var data = {
    'client_id': 'クライアントキー',
    'client_secret': 'シークレットキー',
    'scope': 'http://api.microsofttranslator.com',
    'grant_type': 'client_credentials'
  };
  req.write(qs.stringify(data));
  req.end();
}
```

次に`public/js/main.js`にmilkcocoaのapp idを書いておきます。

```main.js
var milkcocoa = new MilkCocoa('milkcocoaのappID');
```

これで準備は整いました。

すでに動く状態になっています。

#使い方

![screen.jpg](https://qiita-image-store.s3.amazonaws.com/0/90347/73287240-eca2-3d41-ae36-a804275accc6.jpeg)

![screen2.jpg](https://qiita-image-store.s3.amazonaws.com/0/90347/469512de-e48c-d54b-60c0-f6007783f509.jpeg)

上のテキストエリアに日本語を入れて、翻訳ボタンを押すとajaxで`/translate`へ日本語を送信。その後、`/translate`から返ってきた値を、milkcocoaのデータストアに保存。

翻訳履歴にもレンダリングされる仕様になっています！

基本的に画面遷移するのが今までwebサービスを作ってきた中で多かったので

初めて、Ajaxで通信している間の待ち時間を待ってる感出しました笑

アイコンも手作りですd(￣ ￣)


#機能

昨日は大きく分けて3つにしました。

1.翻訳
2.ggれカス
3.履歴の削除

1は、まぁ翻訳アプリなのだから当たり前ですね。説明不要。

2、***ggれカス***とは何なのか。

ggれカスは、日本語→英単語の翻訳はしたものの、その英単語でちょっと調べたいことが！

英単語の他の意味も知りたいからググるか。。

みたいな時に役に立ちます！

履歴の左側にある、虫眼鏡のようなボタンを押すと、その英単語を英単語をもとにgoogleへ飛びます。

と言ってもこれは、少しでも便利にしようとつけただけなので、ただgoogleの検索するときのURLに、英単語をパラメータで持して、`window.open`で飛んでいるだけです。

ここで一つ、新しいことに気がつきました。

HTMLのmeta要素のapple仕様にするやつありますよね？

`<meta name="apple-mobile-web-app-capable" content="yes">`

これです。

これでwebアプリ化している時の注意点として、`<a>`などでリンクを踏むとブラウザが起動してしまうということです。

しかし、`window.open`で開いた場合は、そのwebアプリ内で完結してくれます！

これは少し便利だなと思いました！！

3の削除機能ですが、これも履歴にいつまでもあっても仕方ないものは消す。ただそれだけです。。

コードは、僕の[github](https://github.com/konojunya/translate)にありますので、よければ使ってみてください！
リソースを確保して読み込んで開放する Source を作る

リソースを確保(例えばファイルをオープン)して、読み込んで開放するというライフサイクルを持つ Source を定義したかった。
Akka stream (2.4.6) でやってみた。

GraphStage を定義してやるとこんな感じ？

```scala
package com.example

import akka.NotUsed
import akka.stream.scaladsl.Source
import akka.stream.stage.{GraphStage, GraphStageLogic, OutHandler}
import akka.stream.{Attributes, Outlet, SourceShape}

import scala.collection.immutable

class ResourceStage[R](acquire: () => R, release: R => Unit) extends GraphStage[SourceShape[R]] {

  val out = Outlet[R]("ResourceStage.out")

  override def shape: SourceShape[R] = SourceShape(out)

  override def createLogic(inheritedAttributes: Attributes): GraphStageLogic =
    new GraphStageLogic(shape) {
      var resource: Option[R] = None
      var pulled: Boolean = false

      override def preStart() = {
        // リソース確保
        resource = Some(acquire())
        pulled = false
      }

      override def postStop() = {
        // リソース解放
        resource.foreach(release)
      }

      setHandler(out, new OutHandler {
        override def onPull(): Unit = {
          // 最初に pull されたときにリソースを push
          // 二度目にリソースを要求されたらストリームを終わる
          if (pulled) {
            complete(out)
          } else {
            pulled = true
            resource.foreach(push(out, _))
          }
        }
      })
    }
}

object ResourceStage {
  def bracket[A, B](acquire: () => A)(release: A => Unit)(f: A => immutable.Iterable[B]): Source[B, NotUsed] = {
    Source.fromGraph(new ResourceStage(acquire, release))
      .mapConcat(f)
  }

  def iteratorBracket[A, B](acquire: () => A)(release: A => Unit)(f: A => Iterator[B]): Source[B, NotUsed] = {
    bracket(acquire)(release) { resource =>
      new immutable.Iterable[B] {
        override def iterator: Iterator[B] = f(resource)
      }
    }
  }
}
```

使うときはこんな感じ。

```scala
// ファイルを開いて、行を読み込み、ファイルを閉じる
ResourceStage.iteratorBracket(
    () => new BufferedReader(new FileReader(new File("LICENSE")))
  )(_.close()) { buf =>
    Iterator.continually(buf.readLine()).takeWhile(_ != null)
  }
  .runForeach(println)
```
Claunchで相対パスのフォルダのプロパティ

![SnapCrab_NoName_2016-5-24_22-25-3_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/43608/a31b4af4-4096-befa-0eec-77cfc14eab23.png)

>
./

だけにすると
claunch.exe
があるフォルダを開くようになります。
USBに入れてる時に結構便利だと思います。
PowerShell のバージョンを指定して実行する

ブログからの転載

* [PowerShell のバージョンを指定して実行する](http://1bed.allright.life/?p=2125)


PowerShell はバージョンを指定して実行することができる


## バージョンを指定して実行

PowerShell Ver.3 で hoge.sp1 を実行する

```ps1
PS> powershell -v 3 .\hoge.ps1
```


## Windows 10 で Powershell Ver.2 で実行する

PowerShell Ver.2 で実行するとエラーがでた

```ps1
PS > powershell -v 2 .\hoge.ps1
.NET Framework のバージョン v2.0.50727 がインストールされていません。Windows PowerShell のバージョン 2 を実行するには、このバージョンが必要です。
```


* プログラムと機能を開く
  メニューを右クリックして [ファイル名を指定して実行] を選択、appwiz.cpl と入力して [OK] をクリックする
  [![](http://1bed.saloon.jp/wp-content/uploads/2016/05/1-300x177.png)](http://1bed.saloon.jp/wp-content/uploads/2016/05/1.png)

* [Windows の機能の有効化または無効化] をクリックする
  [![](http://1bed.saloon.jp/wp-content/uploads/2016/05/2-300x165.png)](http://1bed.saloon.jp/wp-content/uploads/2016/05/2.png)

* [.NET Framework 3.5 (.NET 2.0 および 3.0 を含む)] を選択して [OK] をクリックする
  [![](http://1bed.saloon.jp/wp-content/uploads/2016/05/3-300x266.png)](http://1bed.saloon.jp/wp-content/uploads/2016/05/3.png)

* [Windows Update からファイルをダウンロードする] をクリックする
  [![](http://1bed.saloon.jp/wp-content/uploads/2016/05/4-300x256.png)](http://1bed.saloon.jp/wp-content/uploads/2016/05/4.png)

* しばらく待つと完了します
  [![](http://1bed.saloon.jp/wp-content/uploads/2016/05/5-300x256.png)](http://1bed.saloon.jp/wp-content/uploads/2016/05/5.png)


これで PowerShell Ver.2 で実行することが可能になる。


## Windows 10 で実際にバージョン指定して試してみる

$PSVersionTable とだけ記述した hoge.ps1 を準備して試した。

```ps1
PS> powershell -v 2 .\hoge.ps1

Name                           Value
----                           -----
CLRVersion                     2.0.50727.8670
BuildVersion                   6.1.7600.16385
PSVersion                      2.0
WSManStackVersion              2.0
PSCompatibleVersions           {1.0, 2.0}
SerializationVersion           1.1.0.1
PSRemotingProtocolVersion      2.1


PS> powershell -v 3 .\hoge.ps1

Name                           Value
----                           -----
PSVersion                      5.0.10586.122
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.10586.122
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

PS> powershell -v 4 .\hoge.ps1

Name                           Value
----                           -----
PSVersion                      5.0.10586.122
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.10586.122
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

PS> powershell -v 5 .\hoge.ps1

Name                           Value
----                           -----
PSVersion                      5.0.10586.122
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.10586.122
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
```
VBAのシェイプ形状、MSOAutoShapeTypeの画像一覧

忙しいので、最近Qiita書けていないです。本当に雑事の合間に、雑事の生産性向上のための書き捨てコードをVBAで書いたりするの。秀丸でgrepしたりする日が来るとは。でも、スーツになるということはそういうことです。

で、書き捨てコード自体はMS Excelのシートから、MS Powerpointのファイルを半自動でじゃじゃっと整形する感じの乱暴なものだったんですが、SlideのAddShapeメソッドの第一引数、MsoAutoShapeType列挙型をぐぐってびっくり。屑SEOしか考えていないテキトーVBA講座のサイト群はともかくとして、公式にもないのね。絵付きの説明。シェイプの形状を言葉で説明されて、誰が分かるのさ。「ひとつの角が欠けていて、ひとつの角が丸くなっている四角形」なんて、図形が一意に決まらなすぎて、「ぶふっ」と変な声が出ました。なんか、画像検索すると、「オートシェイプ図形番号VBAマクロ」というニアピンなのはありましたけどね。でも、書き捨てコードって命名矛盾な感じだけど、「ほとんどそのまんま流用」という再利用が割と行われるもんだし、列挙型の値で書いておきたいもんね。

画像付きの一覧が全っ然見当たらないので、怒りと共に自分で作りましたよ。で、皆さんに共有すると共に、公式（MSDN）に猛省を促したいのです。ついでに言うと、忙しいけど、くまみこは見てます。

![MSOAutoShapeType列挙型 対応形状の画像一覧](https://qiita-image-store.s3.amazonaws.com/0/79187/7480f065-2fe5-b153-1d73-9b0fda2e83e7.png)
imagemagickでパス切画像を拡張する。

imagemagickに詳しい方に質問です。

いわゆるパス切した画像について、画像自体は拡張せず、パス切した部分のみ拡張したいと考えています。
例：犬の画像が400ピクセル×400ピクセルであるとすると、犬の部分のみ拡張

どなたか上記のような拡張を実施された方がいらっしゃれば、具体的コマンドとともに
拡張手順をご教示いただけないでしょうか？
エラーメモ (golang)


# Failed to load xxx.dll: %1 is not a valid Win32 application.

```
dll, err := syscall.LoadDLL("xxx.dll")
```

残念。32bitコンパイルなのに64bitのdllを読み込んでいますよ。

対処

```
GOOS=windows;GOARCH=amd64
```

もしくは

32bit dllに差し替え
競プロのデバッグで着目する２０個のこと


# はじめに

プログラミングにおけるデバッグ…それはなるべく避けたいもの。
たとえ、注意していても、ミスはする。
競技プログラミングでは、高速コーディングが重要。
なので、バグを生みやすい。だから、デバッグ作業は付き物である。

# まずは、よくある実行時の異常

## 配列外アクセス
Array Index Out Of Bounds Exception

例: a[0] ~ a[9] しかアクセスできない。

```c
int array[10];
array[10] = 123;  // Error
```

## スタックオーバーフロー
Stack Overflow Exception

再帰しすぎ。`return;` が実行されない。

例: 階乗を求めたくても、これでは return されない

```java
int factorial(int n){
  return n * factorial(n - 1);
}
```


# **デバックで着目する２０個のこと**
 「コーディングできてるはずなのに！なんで？」
という場合の、デバッグポイントを並べてみる。
競技プログラミングでジャッジフィードバッグが不正解の時に確認すると良い。

## 1. **出力形式が合っているか**
改行、大文字、小文字、要素数、桁数、有効数字
`"YES"` , `"Yes"` や `"NG"` , `"NA"` の出力ミス

## 2. **入力制限下で 最小値・最大値 での実行ができるか**
最大値で初期化すると、演算でオーバーフローしている場合がある
 
## 3. **稀にある特別な入力が実行できるか**
2次元マップ、`2 x 2` 以上の制約がなければ、 `1 × □` , `□ × 1` を試す
場合によっては乱数による実験も視野に
 
## 4. **浮動小数点の計算における誤差が発生していないか**
宣言型と演算の確認
キャストによる自動型変換、型解釈に注意
`d1==d2` は 危険

 
## 5. **値の初期化が間違っていないか**
初期化が本当に、必要か、不要か
boolean型での true, false の定義確認
intで 0, 1 など初期化ミス
 
## 6. **テストケース２つ目に対して実行できるか**
正常な場所での初期化確認
テストケース1,2の順番を変えて入力してみる
大域変数は再利用されている可能性があるので注意
 
## 7. **配列要素のインデックス指定ミスしていないか**
単純に i と j
2次元マップで x , y のどちらが縦か横か
混乱するぐらいなら1文字は避けて意味のある変数に
 
## 8. **if や for の条件式はあっているか**
i<N , i>=0 など配列外アクセス絞りでミスの可能性
代入 `=` 、同値 `==` は適切か

例: if 文の条件で代入している

```c
int i = 0;

if(i = 0){
  printf("iは0です¥n");  // 出力されない
}
else{
  printf("iは0ではありません¥n"); // 出力される
}
```
 
## 9. **ループ初回と最終回で想定外の挙動はしていないか**
値の代入また出力より先に `break;` , `return;` をしてしまう
 
## 10. **似た文字混用で指定ミスしていないか**
i , 1 , l (小文字エル) , I (大文字アイ) や 0 , O , o
 
## 11. **入力値は正常に受け取れているか**
C言語での `scanf("%c",&var)` と `scanf("%s",&var)`
Javaでの `next()` と `nextLine()` 
改行文字は含まれるのかどうか
 
## 12. **終端文字 '\0' や ポインタ終端 NULL の記述ミスはないか**
C言語、%sでの出力が適切でなければ、終端文字が怪しい
 
## 13. **問題の意図にあっているか**
問題文をしっかり読めていなく、違う処理をしている
出力内容や順序をよく確認
 
## 14. **問題だけでなくテストケースを確認する**
ヒントがあるかもなので、手でトレースをしてみる
 
## 15. **問題解決のアルゴリズムのミスはないか**
考えが甘いかも
計算の例外がある可能性を考える
 
## 16. **提出フォーマットが不適切ではないか**
クラス名がMain限定、package宣言NGなどありえる
提出時には「Wrong Answer」ではなく「Presentation Error」だったりする
言語選択ミスもありえる

## 17. **文字リテラルに対しての処理が適切か**
文字として数を扱うと、文字から'0'を引いて整数値にし忘れる

例: 文字を整数値で出力

```c
char num = '5';

printf("%d¥n",num); // 53
```

例: 1+1=2 ではない (そもそも型が悪い)

```java
String a = "1";

System.out.println(a+a); // 11
```

## 18. **インクリメントの混用**
`++i` と `i++` と `i=i+1` と `i+1` は違う
ループまた再帰内でのインクリメント注意
 
## 19. **条件式の実行階層や条件**
else if (前ifで真なら評価しない) と if (前ifで真偽いずれも評価する) での挙動違いミス
 
## 20. **データ構造の欠陥**
確保すべき配列要素数の欠落など


# 紹介した20個をキーワードでまとめ！
1. 出力形式
2. 最小最大値
3. 特別な入力
4. 浮動小数点誤差
5. 初期化
6. 2つ目テストケース
7. インデックス指定
8. if,for条件
9. ループ初回、最終回
10. 似た文字
11. 入力受取
12. 終端
13. 問題意図
14. テストケース確認
15. アルゴリズム
16. 提出フォーマット
17. 文字リテラル
18. インクリメント
19. 条件式階層
20. データ構造
Watson IoT Platform - MQTT - MessageSightで使用状況を確認する

初めてWatson IoT Platformを使ってみよう、というかたのためのガイドです。
[Watson IoT Platformを使ってみる](http://qiita.com/egplnt/items/af867711a7191923b2ff)でIoTアプリを準備しました。
[MessageSightを動かす](http://qiita.com/egplnt/items/246205f6574cde268712)でMQTTブローカーとしてMessageSightを準備しました。

#Publish/Subscribeした状況をMessageSightで確認します
1.「 アプライアンス・ダッシュボード」で接続数、メッセージ量、稼働時間などの概要を確認します。![スクリーンショット 2016-05-24 15.28.39.png](https://qiita-image-store.s3.amazonaws.com/0/125842/d070e3f1-f273-691f-de03-8fd98f9378d1.png)
2. メモリが何によって消費されているかを確認します。
![スクリーンショット 2016-05-24 15.29.09.png](https://qiita-image-store.s3.amazonaws.com/0/125842/5e975693-aa65-5ea6-218f-3a7771817341.png)
3. 「エンドポイント・モニターおよび「エンドポイント・データ」でエンドポイントの状況を確認します![スクリーンショット 2016-05-24 15.29.34.png](https://qiita-image-store.s3.amazonaws.com/0/125842/265f46e9-ba82-c25e-30db-6455b4ac3bf5.png)
4. 「モニター」→「サブスクリプション・モニター」画面で、サブスクリプションの状況を確認します![スクリーンショット 2016-05-24 15.30.22.png](https://qiita-image-store.s3.amazonaws.com/0/125842/49c8002c-94f7-e4ef-c2fb-00055753c22e.png)
5. 「モニター」→「アプライアンス・モニター」画面で、MessageSightの資源の使用状況を確認します
![スクリーンショット 2016-05-24 15.30.37.png](https://qiita-image-store.s3.amazonaws.com/0/125842/e1a8b174-8f7b-6673-dea0-cd4312107d12.png)
go-unusedの使い方メモ

よく忘れるので[go-unused](https://github.com/dominikh/go-unused)の使い方メモっておきます.

## インストール

```shell-session
$ go get -u honnef.co/go/unused/cmd/unused
```

## 使う

[gorst](https://github.com/hhatto/gorst)を例にしてみます。

### オーソドックスな例

```shell-session
$ unused github.com/hhatto/gorst/...
/YOUR_GOPATH/src/github.com/hhatto/gorst/cmd/gorst/main.go:13:5: var format is unused
/YOUR_GOPATH/src/github.com/hhatto/gorst/parser.leg.go:30:2: const parserIfaceVersion_18 is unused
/YOUR_GOPATH/src/github.com/hhatto/gorst/parser.leg.go:108:2: const numVAL is unused
/YOUR_GOPATH/src/github.com/hhatto/gorst/parser.leg.go:131:2: const ruleBlockQuoteRaw is unused
/YOUR_GOPATH/src/github.com/hhatto/gorst/parser.leg.go:294:2: const ruleLinkSource is unused
/YOUR_GOPATH/src/github.com/hhatto/gorst/parser.leg.go:307:2: const ruleUrlReference is unused
/YOUR_GOPATH/src/github.com/hhatto/gorst/parser.leg.go:314:2: const ruleEmptyTitle is unused
/YOUR_GOPATH/src/github.com/hhatto/gorst/parser.leg.go:324:2: const ruleEof is unused
/YOUR_GOPATH/src/github.com/hhatto/gorst/parser.leg.go:333:2: const ruleAlphanumericAscii is unused
/YOUR_GOPATH/src/github.com/hhatto/gorst/parser.leg.go:334:2: const ruleDigit is unused
/YOUR_GOPATH/src/github.com/hhatto/gorst/parser.leg.go:357:2: const ruleDoubleQuoteStart is unused
/YOUR_GOPATH/src/github.com/hhatto/gorst/parser.leg.go:358:2: const ruleDoubleQuoteEnd is unused
/YOUR_GOPATH/src/github.com/hhatto/gorst/parser.leg.go:12722:6: func print_tree is unused
/YOUR_GOPATH/src/github.com/hhatto/gorst/parser.leg.go:12745:5: var keynames is unused
/YOUR_GOPATH/src/github.com/hhatto/gorst/rst.go:34:2: const needParserIfaceVersion is unused
```

### パブリックなメソッド等もチェックに含める.
`-exported`オプションを指定します.

```shell-session
$ unused -exported github.com/hhatto/gorst/...
```
gorstでは特に`-exported`をつけてもつけなくても結果に変化はありませんでした.


### 特定のパスだけチェック対象(外)にする.

```shell-session
$ unused $(go list github.com/hhatto/gorst/... | grep cmd)
/YOUR_GOPATH/src/github.com/hhatto/gorst/cmd/gorst/main.go:13:5: var format is unused
```

以上
Javaの学習【新人エンジニア：未経験者向け】

#基礎的な内容はインターネットで沢山出てくると思います

・まあ、基礎的な内容はググれば沢山出てきますので、それを見ながらで
結構です。実際にバババっとコードを書いてみましょう。

・あくまでも学習プログラムを書く程度なので、実際の細かいEclipseの設定などは
後に回して。まずはコードを書いてみましょう。
その手順を記載します。

・荒い内容ですが・・・ご容赦を

#Eclipseを起動して、プロジェクトを作成しましょう
※当方の環境：
Windows7 Pro + Eclipse Mars(4.5)

・プロジェクトエクスプローラー右クリック→新規→プロジェクト
→ウィザード画面が表示されるので、「Javaプロジェクト」を選択
→プロジェクト名を付けてください。

ほかの設定は基本的にそのままで、次へ→
Java設定のビルド設定を定義する画面が表示されますが、
これもこのままで完了を選択する

プロジェクトが作成されます。

#パッケージを作成しましょう

・プロジェクトのフォルダの中に「src」というフォルダがあります。
このフォルダにカーソルを当てた状態で右クリック→新規→パッケージを選択

・任意のパッケージ名を付けてください。
なんか、白っぽい四角のフォルダができると思います。

・そのフォルダにカーソルを当て、右クリック→新規→クラスを選択→
Javaクラス作成画面にて、クラスの名前を付けてください。
Eclipseが丁寧に警告を出してくれますが、クラス名は大文字から始まります。
また、その画面で「どのメソッド・スタブを作成しますか？」という欄がありますので、
その中にある「public static void main(Strings[] args)」のチェックをオンに
してください。

・完了ボタンを押下し、Javaファイルが作成されたことを確認してください。

・mainメソッドがありますので、その中に処理を書き、実行して、
動作することを確認しましょう。

#処理を書いてみる

では、とりあえずで書いてみましょう。

```lang:Practice001.java
package practice;
public class Practice001 {
	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
                // 変数を作ってみる
                int number = 0;
                // コンソールに出力してみる
                System.out.println(number);
	}
}
```

#書いたプログラムを実行してみましょう

・Javaファイルにカーソルを当て、右クリック→実行→Javaアプリケーションを選択
→Eclipseの「コンソール」タブ上に、実行結果が表示されます。
上のプログラムの場合、「0」って表示されたら正常です。

【随時更新中(2016/05/24作成)】
line monitor > UI部分(v0.7) > ignoreファイルの見直し > ProjectSettingsフォルダをチェックイン

line monitor
http://qiita.com/7of9/items/028556c5a819a6a8de96

```txt:動作
ビルド1 Unity 5.1.3-f1 on MacOS X 10.8.5
ビルド2 Unity 5.1.3-f1 on Windows 7pro (32bit)
```

[v0.7 @ github](https://github.com/yasokada/unity-151117-linemonitor-UI/releases)

http://qiita.com/7of9/items/4e90277b1305f7171188
にてWindows上でビルドしたアプリが正常に動作しない件の対応。
gitignoreファイルをgithubで公開されているものに変更した。

上記の２つのビルド環境でビルドしたものが正常動作することを確認した。
メモ: Prologさわりだけ

## 参考

* [お気楽 Prolog プログラミング入門](http://www.geocities.jp/m_hiroi/prolog/prolog01.html)

## インストール

```bash:
sudo apt install -y swi-prolog
```

## 起動

```bash:
swipl --quiet
```

## 命令

|命令|意味|
|:--|:--| 
| 命令,命令. | 命令を,で続ける。他の言語の ; のようなもの |
| read(Term) | 標準入力 を Term に格納 |
| write('hello'). | echo 'hello' |
| char_code(生, X). | 生 の文字コードを出力 |
| `halt.` | 終了 |
| . | コマンドの終了を表す様子 |
| ctrl-D | 抜ける |
| :- | 関数定義 |
| ; | 次の結果を表示 |

## ファイルの読み込み

* [Prolog のプログラムとは？](http://www.geocities.jp/m_hiroi/prolog/prolog01.html)

```prolog:fly.swi
fly(X) :- airplane(X).
airplane(jet_plane).
airplane(helicopter).
```

```bash:
$ swipl -f fly.swi
?- fly(jet_plane).
true.

?- fly(taro).
false.
```

```bash:;を入力すると次の結果を表示する
?- fly(Y).
Y = jet_plane ;
Y = helicopter.
```

## 関数の定義

```bash:未定義の場合
$ swipl
?- square(2, Y).
ERROR: toplevel: Undefined procedure: square/2 (DWIM could not correct goal)
```

```bash:a.swi
square(X, Y) :- Y is X * X.
```

```bash:呼び出せる
$ swipl -f a.swi
?- square(2, Y).
Y = 4.
```

```ruby:(参考までに)rubyで書く場合は以下
def square(x)
    return x * x
end

y = square(2)
p y
```

数値の比較の注意

![比較.png](https://qiita-image-store.s3.amazonaws.com/0/25728/277d7ccd-0656-2e7a-adee-c370d8329d7a.png)

随分馴染みがない書き方ですね。。

## リスト

* [リストのパターンマッチング](http://www.geocities.jp/m_hiroi/prolog/prolog02.html)

```
?- [spring, summer, autumn, winter] = [A, B, C, D].
A = spring,
B = summer,
C = autumn,
D = winter.
```
Android 小ネタ集

メモ書き程度に小ネタを記入します。

##Activity遷移でアニメーションを消す方法
いらないアニメーションを消すコードです。

```java:java
Intent intent = new Intent(Sample.this, Sample2.class);
startActivity(intent);
overridePendingTransition(0, 0); // このコードでアニメーションを消す
```

Activity#finish()でアニメーションを消す場合

```java:java
@Override
public void finish() { // finish()メソッドをオーバライドして編集
    super.finish();
    overridePendingTransition(0, 0); // このコードでアニメーションを消す
}
```

##全てのActivityを消去し、アプリを最初から始める方法
ホームボタンや、終了ボタンに使用するかも

```java:java
Intent intent = new Intent(Page2Activity.this, TsubakiMapActivity.class);
// Intentの設定でFLAG_ACTIVITY_CLEAR_TOPとFLAG_ACTIVITY_NEW_TASKを設定する。
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
```

##画像サイズをディスプレイサイズにする方法
Androidにて、縦横比を固定にしたまま画像をディスプレイサイズにリサイズするスクリプト

```java:java
public static Bitmap resizeBitmapToDisplaySize(Activity activity, Bitmap src){
        int srcWidth = src.getWidth(); // Bitmap width
        int srcHeight = src.getHeight(); // Bitmap height
 
        // Get the screen size
        Matrix matrix = new Matrix();
        DisplayMetrics metrics = new DisplayMetrics();
        activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
        float screenWidth = (float) metrics.widthPixels;
        float screenHeight = (float) metrics.heightPixels;
 
        float widthScale = screenWidth / srcWidth;
        float heightScale = screenHeight / srcHeight;
        
        if (widthScale > heightScale) {
            matrix.postScale(heightScale, heightScale);
        } else {
            matrix.postScale(widthScale, widthScale);
        }
        
        // reSize
        Bitmap dst = Bitmap.createBitmap(src, 0, 0, srcWidth, srcHeight, matrix, true);
        src = null;
        return dst;
    }
```

##libsフォルダにあるjarファイルを一括でインポートする方法
Android Studioでjarファイルを使用するとき、build.gradleのdependenciesに以下の記述を加えると一括でインポートされます。

```java:build.gradle
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}
```

##明示的にパーミッション許可をリクエストする方法
OSバージョン「6.0(Marshmallow)」からActivity#requestPermissionsが使用できます。
※同バージョンよりパーミッションの許可がデフォルトでOFFになっている場合があります。

```java:activity
if(Build.VERSION.SDK_INT >= 23){
    // 6.0以降はコメントアウトした処理をしないと初回はパーミッションがOFFになっています。
    requestPermissions(new String[]{
        Manifest.permission.CAMERA,
        Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.READ_EXTERNAL_STORAGE}, 0);
    }
}
```
multipathdを調べながらコーヒーブレイク

#まえおき
SANの共有ドライブをHBA間（サーバとFCスイッチとストレージ間をFCケーブル1本の1経路でつないだら、サーバでは1個のデバイス（LUN）が見えますわな。それをマウントしたりアンマウントして、サーバ側で共有ドライブとして利用します。

でも、1パスだから共有ドライブが意図せず見えなくなったらシステム落ちちゃうね。データ消えちゃうしどうしようか。。とするならばケーブルとかHBAとか接続経路を偏らないよう分散して冗長構成にするわけですね。

するとパスが増えI/O処理も増えた結果、サーバ側では、ひとつの共有ドライブ（LUN)が複数あるように見えるんですね。

じゃあ束ねよう！[DM-Multipath] ってのは、この複数のパスを一つにして、かつパスに障害が発生した場合にまともな経路を選択切替してくれる冗長技術のことなんです。


引越し中です。続きは以下ページを参照してください。
http://amachan007.techblog.jp/archives/11517505.html
Unity-フリック操作について

#前書き
スマホゲームを作るにあたり必要不可欠なスマホ操作「フリック」
アセットでも存在するのですが、わかりにくかったりしたのでゴリゴリ書いたやつをまとめます。**かなり初心者向けです。**

#スクリプト解説
今回は単純化のため上下左右の４方向ですが、記事読めば８方向への拡張も難しくないです。

```

private Vector3 touchStartPos;
private Vector3 touchEndPos;

void Flick(){
 if (Input.GetKeyDown(KeyCode.Mouse0)){
      touchStartPos = new Vector3(Input.mousePosition.x,
                                  Input.mousePosition.y,
                                  Input.mousePosition.z);
    }

 if (Input.GetKeyUp(KeyCode.Mouse0)){
     touchEndPos = new Vector3(Input.mousePosition.x,
                               Input.mousePosition.y,
                               Input.mousePosition.z);
     GetDirection();
    }
}

```

 まずはここまで。
ここでは画面にタッチした位置と指を話した位置を取得しています。
前半のif文で"touchStartPos"にタッチした位置、"touchEndPos"に指を話した位置を入れています。


続いて、フリックされた方向を取得する"GetDirection()"についてです。

```

 void GetDirection(){
     float directionX = touchEndPos.x - touchStartPos.x;
     float directionY = touchEndPos.y - touchStartPos.y;
     string Direction;

     if (Mathf.Abs(directionY) < Mathf.Abs(directionX)){
       if (30 < directionX){
                //右向きにフリック
                Direction = "right";
           }else if (-30 > directionX){
                //左向きにフリック
                Direction = "left";
            }
        }
    }else if (Mathf.Abs(directionX)<Mathf.Abs(directionY){
            if (30 < directionY){
                //上向きにフリック
                Direction = "up";
            }else if (-30 > directionY){
                //下向きのフリック
                Direction = "down";
            }
    }else{
                //タッチを検出
                Direction = "touch";
          }
    }

```

最初の２行でx軸方向の移動量とy軸方向の移動量を検出します。
その次からのif文がフリックの方向を判定しています。
1.x,yのどちらの移動量が多いか
　→上下のフリックor左右のフリックの判定
2.移動量の正負を判定
　→上or下,右or左を判定
※どれにも当てはまらない場合はタッチと判定の順で判定しています。
それぞれの判定後にはString型の変数"Direction"にそれぞれの方向が入るようになっています。


最後にそれぞれの場合の処理を書いていきます。

```

switch (Direction){
     case "up":
           //上フリックされた時の処理
      　　 break;

     case "down":
           //下フリックされた時の処理
    　　　 break;

     case "right":
　　　　　　//右フリックされた時の処理
     　　　break;

     case "left":
　　　　　　//左フリックされた時の処理
     　　　break;

     case "touch":
　　　　　 //タッチされた時の処理
          break;
    }

```

最後は"Direction"を用いたswitch文で処理します。


#最後に
今回はフリックについて扱いました。
応用も利くように書いたつもりなので、よろしければ使ってやってください。
Realm iOSで関係ない値がRLMPropertyとみなされるのをねじ伏せた

##怪現象

Realm iOSを使っているプロジェクトなのですが、怪現象が起きたのをねじ伏せたのでご報告です。

業務系のアプリで、Http越しにJSONを取得してくるAPIが用意されていて、その結果をDictionaryにまず変換する処理があります。

```swift
// 通信結果がdataに入っている
let result = try! NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)
let resultDic = result as! Dictionary
```

なんのことはない、ふつうです。try!でもみ消しているのはひとまず見なかったことにしてください。

続きまして、その結果がネストした構造になっているので、

```swift
let value = resultDic["key1"]!["key2"]["key3"]
```
のように値を取得することを目論みました。nilに厳しいSwiftでして、密かにアンラップなどしております。ちなみにvalueはJSON文字列なので、String型の想定でその後の処理を書いていました。

そしていざビルドしてみると、謎のエラーが出ました……

![スクリーンショット 2016-05-24 18.45.26.png](https://qiita-image-store.s3.amazonaws.com/0/30011/d31e08be-62bc-b137-32a7-5020bac77e52.png)

確かにプロジェクト内でRealmを使ってはいるのですが、この時点で処理しているのはパースしただけのJSONオブジェクトであり、RLMObjectとは何の関係もありません。また、実際にdynamicTypeで中身の型を確かめてみると、きっちりと文字列になっております。むりやりに`as? String?`などしてビルドを通しても、結局該当箇所でクラッシュしてしまいます。

##解決策

不可解ですが、ひとまず２つの方法で回避できることがわかりました。
１つ目は、以下のように、毎回キャストすることです。

```swift
let key1Dic = resultDic["key1"]! as! Dictionary?
let key2Dic = key1Dic["key2"]! as! Dictionary?
let value = key2Dic["key3"] as! String?
```

……見るも無残です。
あまりにも醜いその姿を、どうにかして助けてはやれぬものか……

その時私がハッと思い出したのは、イニシエノマホウ、Objective-Cで培ったKey-Value Codingでした。いつもNSDictionaryをパースするのにはあの呪文を唱えていたではないですか……

```swift
let loginToken = dic.valueForKeyPath("key1.key2.key3") as! String?
```

Bravo!!

かくして私は無事にJSONオブジェクト内の文字列を取り出すことに成功したわけであります。

ただし、１点注意があります。上記にも書いていますように、`valueForKeyPath`はあくまで`NSDictionary`のメソッドであって、`Dictionary`のそれではございません。イニシエノマホウですからね。以下のように、最初にJSONをパースする際には、NSDictionaryにキャストしてくださいね。

```swift
let result = try! NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)
let resultDic = result as! NSDictionary // NSDictionaryにする
```

##回想録

というかRealm、ときどきこういう挙動があって驚かされます。基本的には好きなんですけど。同じ現象で困っている人のお役に立てれば。もちろん、根本的な原因など、お心当たりの方はご教授いただけると幸いです。読んでいただきありがとうございました。
sqlalchemy.orm で commit 前にデフォルト値を設定する

＜＜少し特殊なユースケースです＞＞

sqlalchemy.orm で declarative_base からクラス宣言形式で ORM を作る。

次のように `User` class を作って、num の初期値を 0 にしたい。

```py3
from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, text
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine("sqlite:///:memory:", echo=True)
Base = declarative_base()

class User(Base):
	__tablename__="users"
	id = Column(Integer, primary_key=True)
	num = Column(Integer)

Base.metadata.create_all(engine)

u = User()
print(u.id, u.num+1)
```

None と 1 は足せないので、このままだとエラーになる。そこで調べてみると `default`, `server_default` keyword parameter が見つかる。

`default` は table に commit するときに使われる値、`server_default` は `CREATE TABLE` の中に入る初期値。

commit 前に使いたいときは…？というのを探すのに必要以上に時間がかかってしまった。結論は簡単で普通に `__init__` を使うべし。

```py3
from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, text
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine("sqlite:///:memory:", echo=True)
Base = declarative_base()

class User(Base):
	def __init__(self, *args, **kwargs):
		super(Base, self).__init__(*args, **kwargs)
		self.num = 0
	
	__tablename__="users"
	id = Column(Integer, primary_key=True)
	num = Column(Integer, server_default=text("0"))

Base.metadata.create_all(engine)

u = User()
print(u.id, u.num+1)
```

リファレンスにも `__init__` 使えと書いてある。http://docs.sqlalchemy.org/en/latest/orm/constructors.html#mapping-constructors
ruby 2.3.1をCentOS7に導入する。

#__開発環境__
|OS|CentOS Linux release 7.2.1511|
|:--|--:|
|vagrant|ver 1.81|
|Oracle VM VirtualBox|バージョン 5.0.12|
|git|ver 2.8.|


※既にvagrantでCentOS7が導入されている前提で話を進めます。


#__rbenv+ ruby-buildでRubyの導入環境を揃える。__

##step1 既にrubyがインストールされているのなら現在のrubyを消去する。
```
sudo yum remove ruby
```

`ruby -v`を実行して` ruby: command not found`が帰ってくれば、無事
消去が完了しました。

##step2 rbenvをインストールする。

rbenvとはRubyのversionを簡単に切り替える事が出来る__コマンドラインツール__です。Mac以外ですと、`git clone`してファイルをインストールする必要がありますので、まずgitを導入しておいて下さい。

```
sudo yum install git
```

gitをインストールできたら次にrbenvをインストールします。

```
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
```

##step3  ruby-buildをインストールする。

ruby-buildはrubyをインストールする為の__rbenvのプラグインです。__`rdenv install`というコマンドはruby-buildが導入されて初めて利用できます。


```
git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
cd ~/.rbenv/plugins/ruby-build
sudo ./install.sh
```


##step4 rbenvが導入されているか確認する。
`rbenv -v`で導入したrbenvのversionを確認する事ができます。

```
rbenv -v
rbenv 1.0.0-21-g9fdce5d

```

以上でRubyの導入環境を整える事ができました。


##__Ruby 2.3 1をインストールする__

以下のコマンドを実行してインストールできるrubyを確認しましょう。

```
rbenv install -l
```

実行結果

```
 2.2.1
  2.2.2
  2.2.3
  2.2.4
  2.2.5
  2.3.0-dev
  2.3.0-preview1
  2.3.0-preview2
  2.3.0
  2.3.1
  2.4.0-dev
```

`-dev`は開発版という意味

今回`2.3.1`をinstallしましたが、このようにrbenvを使う事で個人の開発環境に合わせてrubyを導入出来る事が可能です。


以下のコマンドでrubyをインストールする。

```
rbenv install 2.3.1

```

gemでインストールした実行ファイルを実行するためにもrbenv rehashを実行して下さい。

```
rbenv rehash
```

globalでrubyのversionを指定する。

```
rbenv global 2.3.1
```

>
globalはシステム全体で使用するバージョンを指定するコマンドである。基本的に使いたいバージョンをglobalで指定し、プロジェクトによってバージョンを変更したい場合はlocalで指定するのがよい。


以上でRubyのインストール出来たと思います。

最後に確認としてインストールしたRubyのversionとPATHを確認しましょう。

```
ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) 

which ruby
~/.rbenv/shims/ruby

which gem
~/.rbenv/shims/gem

```


お疲れ様でした。

___
参考文献

- [rbenv + ruby-build はどうやって動いているのか](http://takatoshiono.hatenablog.com/entry/2015/01/09/012040)
- [[CentOS]ruby-build,rbenvのインストール方法](http://qiita.com/IK12_info/items/641fbdc4082e9f56f1c5)
- [rbenv で ruby の環境を整える](http://qiita.com/ringo/items/4351c6aee70ed6f346c8)