OmniAICreator/Qiita-1.07M huggingface dataset:
普通の人のためのデータ分析（4） 最新の貿易統計を取得して、CSVにする

[貿易統計は、もっともアクセスが多い政府統計です。](http://www.e-stat.go.jp/SG1/estat/html/GL02100101.html)

[kaggle ダウンロード数 １０００超えました](https://www.kaggle.com/zanjibar/japan-trade-statistics)

貿易統計は、一か月ごとに、集計されます。集計は速報から、[HSコード](http://www.customs.go.jp/yusyutu/2016/index.htm)という分類コードがきちんとついたデータまで何段階かあります。HSコードつきは、約一か月後に公開されます。そのデータを使い勝手のよくなるように、ひとつにまとめて、CSVにしました。

ぜひ、ダウンロードして、分析してみてください。結構面白いです。月別は、展開するとかなりの大きいです。1988-2015 だと４Ｇ 2012-2015 でも５６０Ｍです。
まとめたデータ(CSV形式、zipで圧縮、拡張子は、.csv)は、
[!New 1988年から2015年まで、展開すると４Ｇあります](https://www.dropbox.com/s/xvfarjfhnzb095q/ym_1988_2015.csv.zip?dl=0)
[!New 2016年 1-6月+2015年一年分 kaggle で公開](https://www.kaggle.com/zanjibar/japan-trade-statistics)
[2012年から2015年まで、月別（約80M）](https://www.dropbox.com/s/cmrvgkkyks4fqwe/ym_2012_15.dat.zip?dl=0)
[2012年から2015年まで、年別(約9.6M)](https://www.dropbox.com/s/eilvj25681j6sak/year_2012_15.dat.zip?dl=0)
※拡張子は、.csv がいいですね。

下記は、コードと名称の対応表です。抜けているコードが結構あります。かなりいい加減な出来だと思ってつかってください。
ちゃんとしたコード対応表は、公開してもらえる可能性があるので、あまり根性いれてつくっていません。
[EUのHSコード表](http://ec.europa.eu/eurostat/ramon/nomenclatures/index.cfm?TargetUrl=LST_CLS_DLD_NOHDR&StrNom=HS_2012&StrLanguageCode=EN) あるんですが、少しDB化するのは面倒です。

[国コード](https://www.dropbox.com/s/3i0is8lio84suw0/country.csv?dl=0)
[HSコード 2桁](https://www.dropbox.com/s/mwwf3oaymmfikpc/hs2.csv?dl=0)
[HSコード 4桁](https://www.dropbox.com/s/6bdfega4w9r5koe/hs4.csv?dl=0)
[HSコード 9桁](https://www.dropbox.com/s/yzfp2hamlzcwsij/hs9.csv?dl=0)

## **データをまとめる**

元のデータを見てみましょう。かなり分析しずらいです。
[統計一覧](http://www.customs.go.jp/toukei/info/tsdl.htm)　から、[輸出](http://www.e-stat.go.jp/SG1/estat/OtherList.do?bid=000001008800&cycode=1),[輸入](http://www.e-stat.go.jp/SG1/estat/OtherList.do?bid=000001008801&cycode=1)　のページに、最新のデータへのリンクがあります。

例えば、[2016年4月](http://www.e-stat.go.jp/SG1/estat/List.do?lid=000001153320)がそのデータの一覧です。バラバラの２２個のCSVデータになっています。このページには、固有のIDがふられています。上記のデータでは、000001153320 です。まずは、この ページから２２個のCSVへのリンクを取得して、データを取得します。そして、２２個のCSVをひとつにまとめます。

#### もとCSV のレイアウト

数量は、２種類あるのですが、違いはよくわかりません。
さて、４月分のデータですが、１２月まで項目があります。４月の時点では、５月以降は、空白ですが、５月のデータが公開されると、４月のデータにも５月がはいります、。１年たつと、同じ年は、月は違っていても、データの内容は全部同じになります。表示としてはやや冗長な気がします。

|項目|説明|
|---|---|
|Exp or Imp|輸出:1、輸入:2、|
|Year|年 ex. 2016 |
|HS|9桁のHSコード|
|Country|国コード|
|Unit1|数量単位その１|
|Unit2|数量単位その２|
|Quantity1-Year|年間数量その１|
|Quantity2-Year|年間数量その２|
|Value-Year|年間　金額|
|Quantity1-Jan|１月数量その１|
|Quantity2-Jan|１月数量その２|
|Value-Jan|１月金額|

以下同じ

#### まとめたCSVのレイアウト

年と、年月　でまとめた２種類つくります、

* 年　

|項目|説明|
|---|---|
|exp_imp|輸出:1、輸入:2、|
|Year|年 ex. 2016 |
|Country|国コード|
|Unit1|数量単位その１|
|Unit2|数量単位その２|
|QY1|年間数量その１|
|QY2|年間数量２その|
|VY|年間　金額|
|hs2|HSコード　２桁|
|hs4|HSコード　４桁|
|hs6|HSコード　６桁|
|hs9|HSコード　９桁|

* 年月

|項目|説明|
|---|---|
|exp_imp|輸出:1、輸入:2、|
|Year|年 ex. 2016 |
|Country|国コード|
|Unit1|数量単位その１|
|Unit2|数量単位その２|
|Q1|数量その１|
|Q2|数量２その|
|Value|金額|
|month|月|
|hs2|HSコード　２桁|
|hs4|HSコード　４桁|
|hs6|HSコード　６桁|
|hs9|HSコード　９桁|
ATOMでplatexを使う（latexmkを用いてpdfを吐き出させる）

※ 最新版の`latex`パッケージでdvi経由のpdf作成ができるようになっているようです．

**概要**  
Atomとplatexを用いてtex→dvi→pdfを行う。
今回はBuildからlatexmkを立ち上げる。

## なぜplatexを使いたいか
- 日本語の論文はまだplatex用のクラス指定が多いこと
- platexはxelatex、lualatexと比べて軽いこと（体感なので未検証）
- bibtexを使いたいこと（SIAM等bibtex用のスタイルファイルしか出していないところがある）

## 環境
- Ubuntu 15.10
- TeXLive 2015
- Atom 1.7.4

## 実装
#### 1. 準備

今回は論文を書くとして次の`Paper`をプロジェクトフォルダにしたとする

```
Paper
├── Python
├── Tex
│   ├── 00_Command.sty
│   ├── 00_Reference.bib
│   ├── 00_Style.sty
│   ├── Index.tex
│   └── .latexmkrc
└── .atom-build.json
```

また、`latexmk`（texliveに標準で付いているlatex自動コンパイルソフト）にパスが通っているとする

#### 2. ATOMに必要なパッケージをインストールする。
今回必要なのはbuildのみ。次のどちらかの方法でインストールする
- コンピュータの端末（コマンドプロンプトで）`apm intstall build`と打つ
- Atomで`Ctrl-,`→パッケージ→`build`で検索→インストール

#### 3. Buildのための設定ファイルを書く

```json:Paper/.atom-build.json
{
    "cmd": "latexmk -bibtex {FILE_ACTIVE}",
    "cwd": "{FILE_ACTIVE_PATH}"
}
```

```perl:Paper/Tex/.latexmkrc
$latex = 'platex -synctex=1 -interaction=nonstopmode %O %S';
$bibtex = 'pbibtex %O %B';
$dvipdf = 'dvipdfmx %O -o %D %S';
$max_repeat = 3;
$pdf_mode = 3;
$pvc_view_file_via_temporary = 0;
```

#### 4. ctrl-alt-bでビルドできるようにする(※その他1参照)

Atomの設定から`keymap.cson`を開いて一番最後に

```coffeescript:keymap.cson
"body:not([class~='platform-darwin']) atom-text-editor[data-grammar~='latex']":
    'ctrl-alt-b': 'build:trigger'
```

を付け加える

#### 5. テストする
今回は次の内容を用いてテストした。

`ctrl-alt-b`でpdfが出てくれば成功。

```tex:Paper/TeX/Index.tex
\documentclass[10pt,a4paper]{article}
\usepackage{00_Command}
\usepackage{00_Style}
\usepackage{empheq,amsfonts}
\usepackage{physics}
\begin{document}
    \section{問題}
        昔々、あるところにおじいさんとおばあさんがいました。
        おばあさんが川で洗濯していたところ、
        上流から速度$v(t)$で桃が流れてきました。
        ここで$v(t)$は、
        \begin{align}
            \dv[3]{v}{t} + \cos\qty(\frac{2\pi t}{T})v
            + \sin\qty(\frac{2\pi t}{T}) = 0
        \end{align}
        を満たすものとします\cite{ronbun1}。ここで$T$は定数です。
        $v(t)$を求めなさい。
    \bibliographystyle{siam}
    \bibliography{00_Reference}
\end{document}
```

```tex:Paper/TeX/00_Reference.bib
@article{ronbun1,
  title={桃の挙動に関する論文},
  author={太郎, 桃},
  journal={昔話研究ジャーナル},
  volume={100},
  number={2},
  pages={123--456},
  year={2018},
  publisher={竹取り出版社}
}

```

## その他
1. latexやlatex-toolsなどのパッケージが入っていると思うので
そこら辺を何とかするための設定。
ビルドが一番強い時はこの設定は多分いらないと思います。
2. Buildの設定ファイルはプロジェクトフォルダ直下に置かないといけない。
3. 自作コマンドのファイル名に`00_`をつけているのは、ファイル名順に並べた時に上に来て欲しいだけのことで特に意味はない
CSSで!importantを使わないために意識していること

## 各タグで必ず指定することは最初にタグに指定する
* 例外なパターンがあったら、機能用のクラスで指定する

```css
/*リセットCSS(一部利用)*/
html, body, div, span, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, address, big, img, dl, dt, dd, ol, ul, li,
form, label,table, tbody, tfoot, thead, tr,
th, td {
	margin: 0;
	padding: 0;
	border: 0;
	outline: 0;
	font-size: 100%;
	vertical-align: baseline;
	background: transparent;
}

ol, ul {
  list-style: none;
}

a { 
  text-decoration:none;
}

...etc
```

## コンポーネント単位で共通のふるまいを先に書いておく
* タグの話と同様。CSSは基本、範囲が広い方を先に書き、詳細を後に書いていく。

```css
input[type="text"] {
  border: 1px solid #e1e5e7;
  outline: none;
}

.btn {
  padding: 8px;
  border-radius: 4px;
}

.btn-primary {
  background: #41c9b4;
  color: #fff;
}
```

## 詳細度は出来る限り、少なくする
* 上の方だとaタグをボタンにしたいとかなった時に詳細度が高すぎて上書きできない
* リンクを一つのクラスで表せば対応できる

```css
//ダメな例
.extraNavi > li > a {
  font-size: 11px;
  text-decoration: none;
  color: #999;
}

//いい例
.extraNavi_link {
  font-size: 11px;
  color: #999;
}
```

## BEM風にクラスを指定する
* `セクション_コンポーネント-ふるまい`のような感じ
* BEMなどの記法を使えば、重要度を低く保ったままユニークなクラス名を指定しやすくなる
* 最小のクラスを組み合わせて、期待する結果を得るのが良い

```css
extraNavi_link
btn-primary
```

## さいごに
* もっと意識した方がいいなーと思ったことはどんどん追記していきます。
WordPressの勉強をする為、ドットインストールで学習しようとするも、いきなりMySQLが立ちはだかった話

#WordPressのポートフォリオ作成する為に、ドットインストールから始めたら、MySQLにはまってしまいました。

##対象
・これからドットインストールでWordPressを学ぼうとしている人
・MySQLをこれからインストールして使おうとしている人

##該当箇所
WordPress入門(ドットインストール)
　#02 WordPressをインストールしよう
MySQL入門
　#03 データベースを操作してみよう

##前提
当方エンジニア経験のない素人、もちろんMySQLを触ったことはございません
開発環境
Cloud9

##流れ
「#02 WordPressをインストールしよう」がはじまるなり、当然のごとくMySQLに入った状態から始まり本気でテンパる。焦ってMySQL入門を見始めるもエラーでインストールできず。調べながらインストールするも、データベースが作成できたのか分からない状態になる。最終的にデータベースがうまく作成できて一安心。

##MySQLインストール
・MySQL入門 #03の通り、下記コマンドを打ってみる

```
$ mysql -u root
```

・下記のエラーが返ってくる

```
ERROR 2002 (HY000): Can't connect to local MySQL server through socket 
'/var/run/mysqld/mysqld.sock'
```

・インストールしてない時に返ってくるエラーらしいので、下記コマンドでインストールする

```
$ mysql-ctl start`
```

・インストールできたので改めて、下記コマンドでMySQLを起動してみる

```
$ mysql -u root
```

・うまく起動しました

##データベースの作成
・ドットインストールと同じように下記コマンドを入力する

```
mysql> create detabase dotinstall_wordpress;
```

・下記のエラーが返ってくる


```
ERROR 1064 (42000): You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version 
for the right syntax to use near 'detabase dotinstall_wordpress' at line 1
```

・どうも;を外せば良さそうと思い、;を外して再度入力すると下記の状態に

```
mysql> create detabase dotinstall_wordpress
    ->
```





・反応がないので、正解かどうかも不明、果敢にデータベースの一覧を表示しようと下記のコマンドを入力するもcreate detabaseと同じ状態に

```
-> show detabases;
ERROR 1064 (42000): You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near 'detabase dotinstall_wordpress
show detabases' at line 1`
`mysql> show detabases
     ->
```

・ググると大文字でコマンド入力しているQiitaの記事を見つけたので、コピペしてみる

```
mysql> CREATE DATABASE dotinstall_wordpress;
Query OK, 1 row affected (0.00 sec)
```

・できた！！キーポイントは大文字だったのかと思いきや、よくよく見比べると、detabaseとDATABASE。完全なスペルミス(笑)。試しに小文字でtestデータベースを作成すると、もちろんうまくいきましたwww

```
mysql> create database test;
Query OK, 1 row affected (0.00 sec)
```

##おわりに
今回の一連のエラー解決に費やした時間は、1時間。せっかくなのでQiitaに初投稿してやれと思い、作成しました。全く大した内容ではございませんが、素人なりに日々頑張っています。
SDカードにイメージを書き込む方法

# 背景
OSイメージの書き込みをやるたびに忘れて検索しているため、忘備録として以下を記載。
例）[Raspbian](https://www.raspberrypi.org/downloads/raspbian/)、[Ubuntu Mate](https://ubuntu-mate.org/download/)

# 目的
Mac側でOSイメージをSDカードに書き込む。

# 方法
>対象のディスク`/dev/disk1`
>対象のイメージ`hogehoge.img`

現在接続されているディスクのパーティション一覧を表示する。
`diskutil list`

対象のSDカードをアンマウントする。
`diskutil unmountDisk /dev/disk1`

イメージをSDカードに書き込む。
`sudo dd if=hogehoge.img  of=/dev/rdisk1 bs=1m`

以上
MySQL | TABキーでの補完機能は USE database した後じゃないと使えない

# mysql を立ち上げる

```bash
$ mysql --auto-rehash
```

```
mysql> 
```

この状態じゃ、まだ補完は使えない。

# データベースを選択する

```sql
USE your_database;
```

ここで初めて補完機能が有効になる。

# 例

S と入力してから TAB を押した場合。

```
mysql> S

SAVEPOINT           SERIAL              Shape3              SkillID             SPACE               SQL_THREAD          SQLSTATE            STARTPOINT          STR_TO_DATE         SUBSTR             
SCHEMA              SERIALIZABLE        Shape4              SkillIDStr          SPATIAL             SQL_TSI_DAY         SQLWARNING          State               STRAIGHT_JOIN       SUBSTRING          
SCHEMAS             SESSION             SHARE               SLAVE               SPECIFIC            SQL_TSI_HOUR        SQRT                STATUS              STRCMP              SUBSTRING_INDEX    
SEC_TO_TIME         SESSION_USER        SHOW                SLEEP               SQL                 SQL_TSI_MINUTE      SRID                Status              STRING              SUBTIME            
SECOND              SET                 SHUTDOWN            SMALLINT            SQL_BIG_RESULT      SQL_TSI_MONTH       SSL                 STD                 STRIPED             SUM                
SECOND_MICROSECOND  SHA                 SIGN                SNAPSHOT            SQL_BUFFER_RESULT   SQL_TSI_QUARTER     StackCount          STDDEV              SubAffectExp        SUPER              
SECURITY            SHA1                SIGNED              SOME                SQL_CACHE           SQL_TSI_SECOND      StackMax            STDDEV_POP          SUBDATE             SUSPEND            
SELECT              Shape0              SIMPLE              SONAME              SQL_CALC_FOUND_ROWS SQL_TSI_WEEK        StackNum            STDDEV_SAMP         SubExplan           SYSDATE            
SENSITIVE           Shape1              SIN                 SOUNDEX             SQL_NO_CACHE        SQL_TSI_YEAR        START               STOP                SUBJECT             SYSTEM_USER        
SEPARATOR           Shape2              SixthSenseID        SOUNDS              SQL_SMALL_RESULT    SQLEXCEPTION        STARTING            STORAGE             SubName       
```


# 環境

- mysql  Ver 14.14 Distrib 5.5.44, for osx10.10 (x86_64) using  EditLine wrapper

# 参考

- [PostgreSQL、MySQLの補完機能の違い](http://takafumi-s.hatenablog.com/entry/2015/03/03/001118)











<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Opinion Spamの判定に使えそうな特徴量

Opinion Spam（レビューサイトにおける業者のステマ行為のこと）の対策方法を調べているのだけれど、手動だと膨大な手間がかかるので機械学習を使ってなんとか自動でOpinion Spamを検出したい。
ググっていたら[この発表資料](https://www.cs.uic.edu/~liub/FBS/sentiment-analysis-tutorial-2012.pdf)に書いてある特徴量一覧がよさ気だったのでメモ。


* レビューの言語的内容
* レビュアーのメタデータ
    * スターレーティング
    * ユーザーID
    * レビュー投稿時間
    * レビューを書いて投稿するのに要した時間
    * IPアドレスとMACアドレス
    * レビュアーの地理位置情報
* 製品情報
    * プロダクトの説明文
    * 販売量
    * 売上ランキング
* サイト内にある内部的情報は有用、しかし部外者が手に入れることは困難
Railsの名前空間について自分用メモ

## controllerのネームスペース
`resource`見る側のcontextを表すようにする感じ。
管理者からしか見ないものを作るなら、`admin`などをつける。
`api`から見られるものを管理したいから`api`、
バージョン管理したい`api/v1`。

## modelのネームスペース
controllerに`namespace`がついているからといって、つける必要はない。

```rb
#bad
Admin::ArticleController
Admin::Article

#good?
Admin::ArticleController
Article
```

articleは管理者から見ても、ユーザーからみてもarticle。
名前がどうしても被ってしまう時に、コンテキストとして使う。
`group/message`
`article/message`
など。

必要ないネームスペースを付与すると
いろいろなところで記述が冗長になる。
active_recordのリレーションに`class_name`optionの指定や、
URLヘルパーに配列で、ネームスペースを渡さなければならない等。
生産性を上げるため、出来るだけ避けるべきだと思う。

## moduleのネームスペース
共通で利用されるものは`concerns`にまとめる。

機能をコンテキストで分けて管理したい場合。
userの管理画面側でしかつかわない機能
`user/admin`
userの状態に関する機能をまとめたい
`user/status`
それらをuserでincludeする。

## 参考
http://qiita.com/srockstyle/items/5b0bf6fe2a78e1aa7363
http://qiita.com/blueplanet/items/522cc8364f6cf189ecad
http://techracho.bpsinc.jp/hachi8833/2014_03_03/15619
http://postd.cc/how-dhh-organizes-his-rails-controllers/
Airtableのapi（json型）をajaxで取得する。（備忘録）

今回自身の制作で手をつけていたAirtableのAPI取得についての備忘録

今回はAirtableのAPI取得して、コンソール上に表示まで

```index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>  
    <script src="js/info.js"></script>
</head>
<body>
<script>


jQuery.ajax({
    url: "jsonデータのURL",
    type: "GET", //値をGET
    data: {
        //各項目の中身
        "view": "Main View", 
        "limit": "10",
        "offset": "",
        "sortField": "Name",
        "sortDirection": "asc",
    },
    headers: {
        //APIkeyを入力する
        "Authorization": "APIkeyを入力",
    },
})
.done(function(data, textStatus, jqXHR) {
    //dataの中身を表示する
    console.log(data);
})


</script>
</body>
</html>

```

上記のコードでlocalhostから見てみるとコンソールに下のようなものが出力されます。

<img width="1214" alt="スクリーンショット 2016-06-11 16.49.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/85552/a12e240e-a15e-253c-cdfd-20a9d56fbdee.png">


fieldsの中身がAirtableで書いた行のところになります。
上の画像では、 Name mizugasira Notes masaya　となっているのがわかると思います。

いやー初めてAirtable触ったが楽しかった気がする。
Riotjsで任意の回数だけループさせる

何かのリストがあって最初は上から３件だけを表示させ、「一覧を見る」みたいなボタンをクリックするとリストの全部を表示させる。みたいなSPAのサイトを作るときのメモ。

#　eachの後にifをいれる。
`each`でループ処理する際に、ループする回数が取得できる。
ループ回数が`i`に入ってくるので、それを`if`で判定してあげる。

```
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

<app></app>

<script type="riot/tag">
<app>
    <ul>
        <li each={ t, i in this.arr } if={ i < 3 }>{ t.text }</li>
    </ul>
    this.arr = [
        {text:"１つめ"},
        {text:"２つめ"},
        {text:"３つめ"},
        {text:"４つめ"},
        {text:"５つめ"},
    ]
</app>
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/riot/2.3.11/riot+compiler.min.js"></script>
<script>riot.mount('*')</script>
</body>
</html>
```
Arch linuxでeclipseがうまく起動できなかったのでメモ

**インストール**
`yaourt -S JDK`
`sudo pacman -S eclipse-java`
~~これでOpenJDKとかもインストールされる。便利！~~
※SDKをインストールすると「OpenJDKは不具合とかあるからOracleの方がいいよ」的なことを言われたので、AURからJDKをインストールしました。

簡単にインストールできるものの、新規プロジェクトが作成できなかったり，CPU使用率が異常に高かったり、なんだか起動できなくなったりとウンザリなことに。

調べてみると，GTK3が悪さをしているらしい。
eclipse.iniを編集して、GTK2で起動するようにする。

/usr/lib/eclipse/eclipse.ini
をテキストエディタで開いて、
--launcher.appendVmargs
の前に
--launcher.GTK_version
2
の２行を追記。
これで無事できるようになった。

**日本語化**
最初躓いたけどpleiadesで日本語化できた。

①[MergeDocProject](http://mergedoc.osdn.jp/)から「Pleiades プラグイン・ダウンロード」の最新版を適当なフォルダにダウンロード。
`sudo mv ダウンロードしたフォルダ/pleiades.zip /usr/lib/eclipse/pleiades.zip`
`sudo unzip pleiades.zip`
②/usr/lib/eclipse/eclipse.ini
をテキストエディタで開いて、一番最後の行に、
-javaagent:/usr/share/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
※パスが間違っているとご指摘があり修正しました。naniwaKunさんありがとうございます。
の１行を追記。
この時点でeclipseを起動すると、自動的にクリーンアップされた後で起動され、日本語化されているはず。
③ポップアップやJavadocに表示されるAPIドキュメントの日本語化は、eclipseで、
ウィンドウ＞設定＞Java＞インストール済みのJREと開いて、デフォルトに設定されているJDKを選択し、「編集」。
末尾がrt.jarとなっているものを選択して「Javadocロケーション」と進む。
（僕の環境だと、「/usr/lib/jvm/java-8-jdk/jre/lib/rt.jar」）
「Javadoc URL」にチェックし、Javadocロケーション・パスに、
https://docs.oracle.com/javase/jp/8/docs/api/
と入力して、OK＞完了＞適用。
※③は先にやっちゃってたので不要かも。
めざせpythonライブラリマスター （52）marktime

#【ライブラリ説明】
　コードの実行時間が分かる

#【プログラム】
```py:marktime.py
# -*- coding: utf-8 -*-


import marktime
import json

marktime.start('some task')

x = []

for i in xrange(10000000):
    x.append(i)

print marktime.stop('some task').seconds
# 1.73500013351

marktime.start('some another task')

y = 0
for i in xrange(10000000):
    y += i

print marktime.stop('some another task').seconds
# 1.67599987984


marktime.start('some task # 3')

with marktime.stopwatch('some task # 4'):
    marktime.time.sleep(1)

print json.dumps(marktime.labels, indent=4)
'''
{
    "some another task": {
        "duration": 1.6759998798370361, 
        "start_time": 1465628428.266, 
        "end_time": 1465628429.942
    }, 
    "some task # 3": {
        "start_time": 1465628429.942, 
        "end_time": null
    }, 
    "some task # 4": {
        "duration": 1.00600004196167, 
        "start_time": 1465628429.942, 
        "end_time": 1465628430.948
    }, 
    "some task": {
        "duration": 1.7350001335144043, 
        "start_time": 1465628426.531, 
        "end_time": 1465628428.266
    }
}
'''
```

#【参考サイト】
　[pypi](https://pypi.python.org/pypi/marktime/0.2.0)
　[github](https://github.com/ekalinin/marktime.py)
これからvimコマンドを使おうとしている方々へ

# はじめに
Vimが本当に便利だ！と言われて触り始めたのですが、覚えることがとても多く何度も挫折しそうになりました。今でこそかなり使いこなせるようになりましたが、現在に至るまでにはとても長い道のりが、、、

**Vimコマンドに慣れるコツ**
1. とにかく使ってみる
2. 1つ1つ使えるコマンドを増やしていく

この2つがコツだと思いますが、特に2番がキツイです。どのサイトを見てもコマンドが大量に並んでいて「こんなに覚えるのかあああ」となってしまいます。このページでは、**レベル別にコマンドを小出しにすることで、ちょっとずつ慣れていき、気がついたらかなり使いこなせるようになった**という状況を作り出したいと思います。

##レベル0（大前提）
vimには4つのモードがある（カッコ内はそのモードへ行くためのコマンド）
- ノーマルモード（esc）
- 入力モード（i）
- 選択モード（v）
- コマンドモード（：）

##レベル1（これを知らないとそもそも何もできない）
`h` 左へ移動
`j` 下へ移動
`k` 上へ移動
`l` 右へ移動
`x` （カーソル下の文字を）削除
`i` （カーソル左に）挿入
`:w` 保存
`:q` 終了
`:wq` 保存して終了
`:q!` 保存せずに終了

##レベル2（ここまで知ってやっと普通に作業ができる）
`v` 選択（選択モード）
`y` （カーソル上の文字を）コピー (選択モード時)
`p` （右or下に）ペースト
`u` 直前の作業の取り消し

##レベル3（移動スピードを上げる　その1）
`w` 1単語左へ移動
`b` 1単語右へ移動
`gg` 先頭行へ移動
`G` 最終行へ移動
`^` 行頭へ移動
`$` 行末へ移動

##レベル4（挿入スピードを上げる）
`i` （カーソル左に）挿入　←レベル1でやった基本
`a` （カーソル右に）挿入
`o` （下の行に）挿入 ←小文字の「オー」
`O` （上の行に）挿入 ←大文字の「オー」
`I` （行頭に）挿入
`A` （行末に）挿入

##レベル5（選択モード）
`v` （カーソル上の文字を）選択→その後上下左右で選択範囲を広げられる
`V` （1行）選択
`ctrl + v` （縦に）選択

##レベル6（移動スピードを上げる　その2）
`e` 単語末へ移動
`E` 直前の単語末へ移動
`%` 対応する括弧へ移動

##レベル7（削除スピードを上げる）
`x` （カーソル下の文字を）削除 ←レベル1でやった基本
`X` （カーソル左の文字を）削除
`dd` （1行）削除
`ndd` （n行）削除
`dw` （カーソル位置から単語末尾までを）削除
`d$` （カーソル位置から行末までを）削除
`d%` （カッコを中身ごと）削除

##レベル8（コピー&ペースト）
`yl` 1文字コピー
`nyl` n文字コピー
`yw` 1単語コピー
`nyw` n単語コピー
`yy` 1行コピー
`nyy` n行コピー
`y$` 行末までコピー
`y%` 対応する括弧までコピー
`P` （左or上に）ペースト

**ペーストに関して**
1. コピーが文字単位だったら右or左にペーストされて、行単位だったら上or下にペーストされる
2. xまたはdで削除した後にpコマンドを打つと削除した分がペーストされる（つまり削除＝カット）

##レベル9（変更＝削除＋挿入）
`r` （カーソル下の）文字の置き換え（「r+置換したい文字」で使用する）
`s` （カーソル下の文字を）削除＋挿入モードに
`ns` （n文字）削除＋挿入モードに
`ciw`（選択中の文字を）削除＋挿入モードに
`cw`（カーソルから単語末まで）削除＋挿入モードに 
`c$`（カーソルから行末まで）削除＋挿入モードに 
`c%`（カッコを中身ごと）削除＋挿入モードに 

##レベル10（移動スピードを上げる　その2）
`w` 次の単語の先頭へ移動（行中を早く進みたい時に使用）
`b` 前の単語の先頭へ移動
`e` 次の単語末へ移動
`ctrl + f` 次のページへ移動（ファイル内を早く進みたい時に使用）
`ctrl + b` 前のページへ移動
`nG` n行目へ移動
`%` 対になる()or{}or[]へ移動


とりあえずこれくらいにします。僕自身もまだまだ勉強途中なので、新しいコマンドを覚えたら追加します。「ここ間違ってるよ！」とか「こんなコマンドあるよ！」とかあったらコメントください！
ちなみに、普段はrubyMineのキーバインドをvimにして開発をしているので変な部分もあると思います。ご了承ください。
MySQL | ワンライナーをコンソールに委ねて楽をしよう

# 問題

たとえばテーブル定義を確認する場合。

毎回 mysql モードに入って、 use でデータベース名を指定して、テーブル名を手打ちしたり。
コンソールで別窓を立ち上げたりしていないだろうか。

これはとても面倒だ。

# 解決

よく使うコマンド等は  linux コマンドに任せてしまおう。
`-e` オプションでワンライナーが書ける。
 
```sql
$ mysql -e "USE your_database; DESC your_table;"

+--------------+---------------------+------+-----+---------+-------+
| Field        | Type                | Null | Key | Default | Extra |
+--------------+---------------------+------+-----+---------+-------+
| ID           | bigint(20) unsigned | NO   | PRI | 0       |       |
| Name         | varchara(255)       | NO   |     |         |       |
+--------------+---------------------+------+-----+---------+-------+
```

# 良いところ

- コンソールのコマンド履歴がそのまま使える。
  - 上下キーで履歴をたどるのは勿論のこと。
  - `$ history` や `C-r` も使えるし。 コンソールで出来ることはなんでも出来る。 
- コンソールを mysql モードを切り替える必要がない。

# 環境

- mysql  Ver 14.14 Distrib 5.5.44, for osx10.10 (x86_64) using  EditLine wrapper








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
OFFICEで英語で検索するときに困る単語

-Office
'  -改ページ PageBreak
'  -重複,複写,コピー duplicate
    *メソッドで使用される
'  -データなどの重複 conflict
'  -列挙体(定数) Enumurations
'  -縦書きのプロパティ FarEastAsia


-Outlook
'  -クイック操作 Quick Step
'  -メモ NoteItem
'  -スケジュールの被り conflict
'  -定期的（な予定） recurrence
　　　もとは再び起きる、循環するの意味
　　予定というアイテム（オブジェクト）にリカレントなオブジェクトがつくことで定期的な予定となる
　

-Access
'  -四角形 Rectangle
'  -クエリ QueryDef
'  -クエリのコレクション QueryDefs
'  -テーブル Table,Tabledef デフがつく
'  -テーブルコレクション Tabledefs
'  -データベースの構造の解析 Database Documenter
'  -パフォーマンスの最適化 Performance Analyzer
'  -テーブルの正規化 Table Analyzer

https://support.office.com/en-us/article/learn-the-structure-of-an-access-database-6a95097a-f95c-45bf-be9b-a3f8d7d61c1d

'  -オブジェクトの依存関係 Object Dependencies
'  -データベースの修復と最適化 Compact And Repair Database
###Access>テーブルを開く >テーブルツール>テーブル
####マクロの総称は Data Macro
'  -名前付きマクロ Named Data Macro
'  -イベント前　イベント後の総称
'  -Event-Driven Data Macro
'  -変更前 Before Update
'  -削除前Before Delete

-Excel
'  -ドキュメント検査 Document Inspector 
'  -選択範囲 Areas
'  -グラフの軸 Axis
'  -セルの罫線 Border
'  -ブック内のグラフ Chart 埋めこみ、独立したシートも同じ
'  -データの入力規則 Data validation 
'  -定義済み名前、セル範囲の名前 name 
'  -ユーザー定義関数　User defined function, UD,F User-Defined Function

- Publisher
'  -印刷範囲 PrintableRect
'  -テキストボックス TextFrame Shapeオブジェクトで文字が書けるもの
'  -テキストボックスの中 TextRange
'  -図形の中での文字の折り返し WrapFormat
- Word
'  -Wordに組み込まれている組込みマクロ(コマンドマクロ) Commands
'  -箇条書きの書式 List
'  -差し込み印刷 MailMerge
'  -アクセシビリティチェック Accesibillity Check
'  -互換モード Compatibility mode


- OneNote
-一般編
'  -値を取得する Get Value
'  -...する方法 How to 動詞
'  -どうやったら How ... How to get valueみたいに

- VBA
'  -条件付きコンパイル(命令) Conditional compilation directive
'  -条件付きコンパイル(命令)は環境対応編纂命令と訳すべきかそもそもコンパイルじゃないし
'  -VBAではDIrectiveとは環境対応編纂命令の#Const,#IF Then #Else #Elseif #Endの2つだけがDirectiveとなっている。
'  -[Understanding conditional compilation](https://docs.microsoft.com/en-us/office/vba/language/concepts/getting-started/understanding-conditional-compilation) 条件付きコンパイル定数を理解する。いかにも英語的な表現で直訳してもだめ。「環境対応編纂命令の説明」でしょうね。





- Windows
'  -管理者として実行 Runas, Run as administrator なぜかadministratorがない
'  -ファイル名を指定して実行(WindowsKey + r) Run , Run Command
'  -ファイル名を指定して実行(WindowsKey + r) Run , Run Command
Vagrant1.8.3でプラグインのインストールが出来ない


## 問題

バージョン`1.8.1`から`1.8.3`へバージョンアップした際に以下のようなエラーが出てしまいプラグインのインストールに失敗しました。

```Bash
$ vagrant plugin install vagrant-vbguest

Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
/opt/vagrant/embedded/gems/gems/bundler-1.12.0/lib/bundler/resolver.rb:303:in `block in sort_dependencies': undefined method `payload' for nil:NilClass (NoMethodError)
        from /opt/vagrant/embedded/gems/gems/bundler-1.12.0/lib/bundler/resolver.rb:300:in `each'
        from /opt/vagrant/embedded/gems/gems/bundler-1.12.0/lib/bundler/resolver.rb:300:in `sort_by'
        from /opt/vagrant/embedded/gems/gems/bundler-1.12.0/lib/bundler/resolver.rb:300:in `sort_dependencies'
        from /opt/vagrant/embedded/gems/gems/bundler-1.12.0/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb:131:in `block (2 levels) in <class:Resolution>'
        from /opt/vagrant/embedded/gems/gems/bundler-1.12.0/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb:431:in `push_state_for_requirements'
        from /opt/vagrant/embedded/gems/gems/bundler-1.12.0/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb:423:in `require_nested_dependencies_for'
        from /opt/vagrant/embedded/gems/gems/bundler-1.12.0/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb:411:in `activate_spec'
        from /opt/vagrant/embedded/gems/gems/bundler-1.12.0/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb:353:in `attempt_to_swap_possibility'
        from /opt/vagrant/embedded/gems/gems/bundler-1.12.0/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb:333:in `attempt_to_activate_existing_spec'
        from /opt/vagrant/embedded/gems/gems/bundler-1.12.0/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb:318:in `attempt_to_activate'
        from /opt/vagrant/embedded/gems/gems/bundler-1.12.0/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb:147:in `process_topmost_state'
        from /opt/vagrant/embedded/gems/gems/bundler-1.12.0/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb:72:in `resolve'
        from /opt/vagrant/embedded/gems/gems/bundler-1.12.0/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb:42:in `resolve'
```

Webで検索してみるもなかなか見つかりませんでしたがリポジトリの[CHANGELOG.md](https://github.com/mitchellh/vagrant/blob/master/CHANGELOG.md)に答えがありました。


> Next Version (unreleased)
>
> Fix bundler plugin issue and version constraint [GH-7418, GH-7415]

現状`1.8.3`を使用している`Mac`, `Linux`ユーザはプラグインのインストール・アップデートに失敗するみたいです。

インストール済みのプラグインは正常に使用できます。


## 解決

私はインストールしたいプラグインがあったので仕方なく`1.8.1`へとんぼ返り。

https://releases.hashicorp.com/vagrant/1.8.1/

過去のバージョンのインストーラーはArchiveされているので簡単に戻せます。

https://releases.hashicorp.com/vagrant/

リポジトリ上はすでに`Close`されているIssueなのではやく次のリリースがされることを祈りましょう。。

## 参考

* https://github.com/mitchellh/vagrant/blob/master/CHANGELOG.md
* https://github.com/mitchellh/vagrant/issues/7415
* https://github.com/mitchellh/vagrant/issues/7418
* https://releases.hashicorp.com/vagrant/
Xamarin for VIsual Studioを使ってみた

Xamarinが無料化され、WindowsではVisualStudioと統合されたとのことで軽く使用してみました。

自分の環境ではVisual Studio Commynity 2015を使用しています。

File->New->Projectから、
Templates->Visual C#->Cross Platform->Blank App(Xamarin.Forms Portable)を選択し、
空ののプロジェクトを作る

![3d1b0acc262718ab1c2743fadfe4258c.png](https://qiita-image-store.s3.amazonaws.com/0/16583/fb92c5ed-4ebd-b03b-a5e8-701f5ff346c4.png)

まずは、このままビルドして実機で動かしてみようとしたら、
以下のエラー。。。

![b1eaca4e48fdaadbde31d8674d0b2cde (1).png](https://qiita-image-store.s3.amazonaws.com/0/16583/ee1dcbcb-ec7b-017a-6dfe-dfd1521e68e0.png)

何もしていないのになぜエラーとなるのか。
なんというか、こういうのがMicrosoftは雑な気がする。

調べたところ、C:\Users\ユーザー名\AppData\Local\Xamarin\配下のファイルを全削除すると良いらしい。
削除後にビルドすると上記フォルダのファイルが再ダウンロードされ無事にビルドが通って、
動作確認できました。
コマンドの使い方(Linux)



### touchコマンド

ファイルのタイムスタンプを変更するコマンド。存在しないファイルに対して実行すると大きさ0のファイルを作成してくれる。ディレクトリが存在すればそのディレクトリの他のインプスタンプを変更してくれる。

引用：<a href="https://hydrocul.github.io/wiki/commands/touch.html" target="_blank">touch コマンド | コマンドの使い方(Linux) | hydroculのメモ</a>
Access VBA Get CurrentTableDef 現在開いているテーブルを取得

できそうでなかなかないのですがようやくここまで行きました。
なんですって？フォームを使えと？
そんな面倒くさいものは使いません。ばかばかしい。
ただし条件が２つあります

 - DAOを参照設定していること
 - 現在開いているテーブルは一つだけとします。

現在開いているテーブルの名前を取得するマクロです

```VB:GetAccessCurrentTabledef
Sub GetacCurrentTableDef()
'QIIQ from QIITA
'For Access VBA
Dim Db As DAO.Database: Set Db = CurrentDb
Dim tdf As TableDef, tdTgt() As TableDef
Dim cnt As Long
cnt = 0
For Each tdf In Db.TableDefs
If tdf.Attributes = 0 Then
If SysCmd(acSysCmdGetObjectState, acTable, tdf.Name) > 0 Then
cnt = cnt + 1
ReDim Preserve tdTgt(1 To cnt)
Set tdTgt(cnt) = tdf
End If
End If
Next
If cnt >= 1 Then Set tdf = tdTgt(1): Debug.Print tdf.Name
End Sub
```

For Eachで回すとシステムのテーブルを拾って面倒なので、アトリビュートで0を選択します。
配列に入れ込み、最初の一つだけを取得するようにしています。
カウンタ（CNT）を回すことで複数のものを開いていても一応取得します。
カレントは一つだけなので一つです。
複数開いていても最初にFor Eachで拾ったテーブルがカレントになりますが、最初から1個だけと言ってますよね。
C++ の TMP がチューリング完全であるという StackOverflow の投稿に対するメモ

C++ の TMP (template meta programming) がチューリング完全である、という表現はしばしば見受けられるが、それが具体的にどういう意味でチューリング完全であるのかが、いまいちピンときていなかった自分への備忘録。

http://stackoverflow.com/a/275295/3090068 に、具体例が載っている。

何をやっているかというと、テンプレートによるコンパイル時計算において、テンプレートによってチューリングマシンを構築し、かつそのチューリングマシンはテンプレートの実体化計算によって実行されるようになっている。

* 遷移関数(の定義): テンプレートでタプル的に表現される && それが typelist に
* テープ: typeList
* 実行: コンパイル時 type の解決計算
Dockerにホームディレクトリをマウントしちゃおう

.NET Core RC2が、Ubuntu 14.04には対応しているが、Ubuntu 16.04にはまだ対応しておらず、自分のノートPCはもう16.04にあげてしまったため、なんとかDockerの力を借りて動かせないかと試行錯誤したところ、動かすことに成功した。
このノウハウは他にも使えると思いました。

PATHの通ったところに、```dotnet```というファイル名で以下のファイルをおいた。

```bash:dotnet
#!/bin/bash
docker run -it --rm \
    -u $UID:`id -g` \
    -v $HOME:$HOME \
    -e "HOME=$HOME" \
    --workdir=`pwd` \
    --entrypoint=dotnet \
    microsoft/dotnet:1.0.0-preview1 \
    $*
```

ポイントは以下の通り。

* このコンテナの中に動かしたいプログラムが入っている（今回は```dotnet```）
* ```docker run -it --rm```により、実行後すぐにコンテナを削除し、コンテナを残さないようにする
* ```-u $UID:`id -g` ```により、コンテナ内でもホストのユーザID、グループIDで実行できる（しないとroot権限になる）
* ```-v $HOME:$HOME```により、コンテナ内にホストのホームディレクトリがそのままマウントされ、使える
* ```-e "HOME=$HOME"```により、ホームディレクトリを認識させる（コンテナ内で```export HOME=/home/74th/```した効果）
* ```--workdir=`pwd` ```により、カレントディレクトリで実行させる。ホームディレクトリをまるごとマウントしているため、そのディレクトリが存在している状態になる。
* ```--entrypoint=dotnet```により、コンテナ実行時に動かしたいプログラムを指定する
* 最後の```$*```により、このシェルスクリプトの引数をそのままdocker内のコマンドに渡す

これにより、.NET Coreのプロジェクトを以下のようにビルド、実行できる。

```
$ dotnet restore
$ dotnet build
```

[前にも同じこと](http://qiita.com/74th/items/84056de800c41b9724b7)をしていたが、以下の問題があった。

* dockerコンテナ内はroot権限で実行されるため、docker内で作成したファイルなどの権限がrootになってしまう
* ホームディレクトリ上の設定ファイルを参照するプログラム（dotnetでは```$HOME/.nuget/```を使う）では、そのユーザのホームディレクトリがないため、うまく動かない

こうやって小さく使っても、やっぱりdockerは便利っすね！

(追記)タイトルを、コマンドラインツールとしてのDockerから、今のタイトルに変えました。
awsのpemとfinger printが、あっているかを調べる方法


hogehoge.pemのfinger printを出して、チェックする。
EC2のkey pairのところが同じかをチェックする。

たまに、異なるファイル名のpemを使う輩がいるとこんなチェックをしなくてはならなくなる。


```check方法
$openssl pkcs8 -in hogehoge.pem -nocrypt -topk8 -outform DER | openssl sha1 -c
```
【Hello,module!】15分くらいでできるAnsibleモジュール作成体験（Bash編）

# 1.はじめに
Ansibleにはあらかじめ多くのモジュールが含まれていて、
最近ではWindowsや、ネットワーク機器に対応したモジュールもあります。
それらを組み合わせてもやりたいことができない場合、カスタムモジュールを自作するという手段もあります。
モジュールはPythonのほかにもRubyやシェルスクリプト等でも作成できます。
とはいえPythonが作りやすいと思いますが。2.2にでは Go言語などのバイナリにも対応するそうです。

今回は、なるべく簡単にカスタムモジュールの作成を体験するために
シェルスクリプト（実質1行）でやってみます。検証環境は Ansible2.1 / Ubuntu 16.04 です。

# 2.モジュールの作成
まず、Playbookのおくディレクトリに`library`ディレクトリを作成します。
ディレクトリの名前は決められています。
`library`ディレクトリは配下に`hello`という名前の以下の内容のシェルスクリプトを作成します。

```bash:hello
#!/bin/bash
echo -e "{\"hello\":\"hello, module@`hostname`"\""}"
```
内容はとても簡単で`{"hello":"Hello,module! @ホスト名"}`というJSONを出力するだけです。
モジュールはValidなJSONを出力する必要があります。
ホスト名は実行先のホスト名になります。
これをあとでAnsibleのPlaybookから呼び出す形になります。

ファイル構成例：

```text
/etc/ansible
    hello.yml    # Playbook
    library
         hello   #カスタムモジュール（シェルスクリプト）
```

# 3. Playbookの作成
モジュールを置いた`library`ディレクトリから一つ上にもどり、
以下の内容のPlaybookを作成します。

```yaml:hello.yml
---
- hosts: localhost
  tasks:
    - name: hello        # 便宜上のタスクの名前      
      action: hello      # 作成したカスタムモジュールを呼び出す
      register: result   # 出力結果を変数resultに登録する
    - debug: var=result  # 変数resultをデバッグ表示する
```

なるべく簡単にするためここではlocalhostを対象にしています。


# 4.Playbookの実行
先ほど作成したPlaybookを実行します。

```
user@ubuntu-vm:/etc/ansible$ ansible-playbook  hello.ymml

PLAY [localhost] ***************************************************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [hello] *******************************************************************
ok: [localhost]

TASK [debug] *******************************************************************
ok: [localhost] => {
    "result": {
        "changed": false,
        "hello": "Hello, module! @ubuntu-vm"     # ★モジュールが出力してる部分
    }
}

PLAY RECAP *********************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0

```

`hello": "Hello, module! @ubuntu-vm" ` の部分がモジュールが出力している部分です。
ホスト名の部分は実行先の`hostname`の結果が拾えてます。

以上、とても簡単な例でのカスタムモジュールの作成でした。


# 5.参考資料
- 書籍「[Extending Ansible](https://www.amazon.co.jp/Extending-Ansible-Rishabh-Das-ebook/dp/B01BSTEDL8/)」
 - 「Chapter2. Getting to Know Ansible Modules」にモジュールの作成方法が書かれています。メインはやはりPythonです。

- 書籍「[初めてのAnsible](https://www.amazon.co.jp/初めてのAnsible-Lorin-Hochstein/dp/4873117658)」
 - こちらの「10章 カスタムモジュール」にPythonやBashでカスタムモジュールの作成方法が書かれています。

- 動画「[WRITING MODULES FOR ANSIBLE](https://www.ansible.com/webinar-on-demand-writing-modules-for-ansible)」
  - 公式の動画です。
Qiitaタグごとのストック数ランキング with python

#【概要】
　あるタグの中でストック数Top10の記事を抽出します。

#【環境】
　windows8.1
　python3.5

#【プログラム】
　Pythonタグのランク付けを行いました。
　実行方法　→　`python stock_rank.py > output.html`

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

import urllib.request
from bs4 import BeautifulSoup

# Contribution数の初期化
cont = []
for i in range(10):
    cont.append(0)
    
# タイトルの初期化
title = []
for i in range(10):
    title.append("")

page_num = 1

while True:
    try:
        html = urllib.request.urlopen("https://qiita.com/tags/Python/items?page=" + str(page_num)).read()
        
        soup = BeautifulSoup(html, "html.parser")
        
        # クラスを指定してhtml抽出
        title_all = soup.find_all(class_="publicItem_body")
        
        # publicItem_bodyクラスがないページはとばす
        if len(title_all) == 0:
            continue
        
        for i in range(20):
            try:          
                # クラスを指定してhtml抽出
                cont_all = soup.find_all(class_="publicItem_stockCount")
                # 邪魔なタグを削除
                cont_sakujo = str(cont_all[i]).replace('<i class="fa fa-stock "></i>','')
                # cont_all_afterはstr型のためstringプロパティは使えない
                # そのためBeautifulSoup型へ変換
                cont_kazu = int(BeautifulSoup(cont_sakujo, "html.parser").string)
                
                for j in range(10):
                    if cont_kazu >= cont[j]:
                        # Contribution数代入            
                        cont.insert(j, cont_kazu)
                        cont.pop()
                        # タイトル代入
                        title.insert(j, title_all[i])
                        title.pop()
                        break
                
            # 誰にもストックされていない記事はとばす
            except:
                continue
        
        page_num += 1
        
    # HTTP Error 404
    except:
        break

for i in range(len(title)):
    print (str(cont[i]) + "　" + str(title[i].a).replace('href="', 'href="http://qiita.com') + "<br>")
```

#【結果】
　エンコードをutf-8で表示すると文字化けが発生したので、shift-jisにしました。
<img width="589" alt="rank.png" src="https://qiita-image-store.s3.amazonaws.com/0/121997/fefa4b07-2952-2807-1d5d-98ad80e1745d.png">


#【問題点】
　プログラム実行時間が長い(>_<)

#【参考サイト】
　[Python3 + urllib + BeautifulSoupでネット上の情報を取得する](http://qiita.com/piruty_joy/items/d360f436d1b57cc9c980)
　[PythonとBeautiful Soupでスクレイピング](http://qiita.com/itkr/items/513318a9b5b92bd56185)
　[Beautiful Soupを使ってスクレイピング](http://qiita.com/rusarusa/items/d7f014ba80d6fe7a3e07)
Qiita | マイページでプロフィール画像がぼやける理由

# 結論

 **Github** のプロフィール画像を使うのが良い。 ( 2016年6月現在 )

# 設定

Qiita ではいくつかのプロフィール画像から選べる。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/a0693a28-1e42-487d-87a8-4d85147f412c.png)

# Twitter を選んだ場合

ぼやける。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/7b71d804-519f-3f24-15a5-615ae9f6a8d3.png)

# Gravater を選んだ場合

ぼやける。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/0d19a8fc-6d2c-0cc0-7f41-3af987b4f862.png)

# 写真アップロードを選んだ場合

ぼやける。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/7d9ea21b-798d-431e-c1e8-87ca00d21f40.png)

jpg / png の二種類を試したが、結果は同じだった。


# Github を選んだ場合

鮮明だ。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/9cd0a5cd-cb06-4cce-90ee-c9f7d617ac56.png)









<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Bashで「標準出力」「エラー出力」「実行時間」を全て変数に代入する方法

Bashのプロセス置換を使っています．

なお，**Zshでは何故か動きません**．
(`time`のフォーマットの違いの問題では無く`2>`で流れない)

```sh
#!/bin/bash

action() {
    sleep 1
    echo 'stdout'
    >&2 echo 'stderr'
}

unset stdout stderr realtime
eval "$(
    { time action >&3 2>&4; } \
    2> >(realtime=$(awk '$1=="real" {print $2}'); typeset -p realtime) \
    3> >(stdout=$(cat); typeset -p stdout) \
    4> >(stderr=$(cat); typeset -p stderr)
)"

echo "stdout: $stdout"
echo "stderr: $stderr"
echo "realtime: $realtime"
```
ZYBO > PL:Slide switchからPL:LEDを操作 (polling)

```txt:動作環境
Vivado 2015.4 on Windows 8.1 pro
```

## 内容

GPIO http://qiita.com/7of9/items/9f35a6b14f4898690237

PL側にあるSlide Switchを使ってPL側にあるLEDをON/OFFしてみる。

## Vivado側

- AXI_GPIOを追加、sws_4bitsに使う
- AXI_GPIOを追加、leds_4bitsに使う

Block Designは以下のようになる。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/a4431a06-8834-368d-fa3e-a4a1bf11c866.png)


## XSDK側

以下のコードを実装した。

SLIDE_DEVICE_ID と LEDS_DEVICE_IDの定義はBlock Design側で確認した番号(axi_gpio_0かaxi_gpio_1か)に基づく。

```helloWorld.c

#include <stdio.h>
#include "xparameters.h"
#include "xgpio.h"
#include "platform.h"

#define SLIDE_DEVICE_ID XPAR_AXI_GPIO_0_DEVICE_ID
#define LEDS_DEVICE_ID	XPAR_AXI_GPIO_1_DEVICE_ID

XGpio SlidSWInst;
static int sw_data;

XGpio LEDInst;
static int led_data;

int main()
{
    init_platform();

    print("Hello World\n\r");

    int status;

    // 1. Slide Switch
    status = XGpio_Initialize(&SlidSWInst, SLIDE_DEVICE_ID);
    if (status != XST_SUCCESS) {
    	print("Slide Switch initialize failure\r\n");
    	return;
    }
    XGpio_SetDataDirection(&SlidSWInst, 1, 0x01);

    // 2. LED
    status = XGpio_Initialize(&LEDInst, LEDS_DEVICE_ID);
    if (status != XST_SUCCESS) {
    	print("LED initialize failure\r\n");
    	return;
    }
    XGpio_SetDataDirection(&LEDInst, 1, 0x00);

    XGpio_DiscreteWrite(&LEDInst, 1, 0x00);

    sw_data = 0x00;
    int preSW = sw_data;

    while(1) {
    	sw_data = XGpio_DiscreteRead(&SlidSWInst, 1);
    	if (sw_data != preSW) {
    		preSW = sw_data;
    	    XGpio_DiscreteWrite(&LEDInst, 1, sw_data);
    	}
    }

    cleanup_platform();
    return 0;
}
```

上記のコードによりSlide Switch(SW0..SW3)をON/OFFすることで、対応するLED(LD0..LD3)がON/OFFするようになった。

while(1)でwaitをまったくかけてないのは改善事項。
NSTextFieldを選択中に矢印キー（▲▼）押して数値変更したい。

ツールとか使っていると、数値入力時に矢印キー押したら数値がインクリメント/デクリメントしたりできて便利だったりします。

それを実装しようとしてInterfaceBuilderの設定とにらめっこしてたんですが、特にそんな項目はなくコードで書いたら以外と楽にできました。

# 流れ
矢印キー押下時に、NSControlTextEditingDelegateの ```control(control: NSControl, textView: NSTextView, doCommandBySelector commandSelector: Selector) -> Bool```が呼び出されるので、このメソッドの中でキーバインドの値を判断して処理を行います。

今回は以下のキーバインドを見て数値をインクリメント/デクリメントします。

* ▲キー → ```NSResponder.moveUp(_:)```
* ▼キー → ```NSResponder.moveDown(_:)```

# サンプルコード
```swift:SampleViewController.swift
    func control(control: NSControl, textView: NSTextView, doCommandBySelector commandSelector: Selector) -> Bool {
        
        if let textField = control as? NSTextField {
            if let currentNum = Int(textField.stringValue) {
                if commandSelector == #selector(NSResponder.moveUp(_:)) {
                    textField.stringValue = "\(currentNum + 1)"
                    // 戻り値がtrueの場合、何もしない
                    return true
                } else if commandSelector == #selector(NSResponder.moveDown(_:)) {
                    textField.stringValue = "\(currentNum - 1)"
                    // 戻り値がtrueの場合、何もしない
                    return true
                }
            }
        }
        // 戻り値がfalseの場合、commandSelectorが呼び出される
        return false
    }
```

# 参考
* [NSTextView のキーバインド](http://d-alchemy.xyz/tips/textview.html)
* [ファイル名変更（その４）NSTextFieldでESCキーをハンドリングする](http://xcatsan.blogspot.jp/2009/02/nstextfieldesc.html)
Githubのアカウント作成方法

#GitHubアカウントの作成方法
2016年5月にGitHub.comの新しい料金プランを発表され、個人利用では月額7ドルでプライベートリポジトリを無制限に作成可能になりました。しかし、パブリックなリポジトリであれば無料で利用が可能です。

ここでは、無料でGitHubを利用するためのアカウントを開設するまでを説明します。

## GitHubのサイトにアクセスする
https://github.com/

## 必要事項の入力
ユーザー名、メールアドレス、パスワードを入力し、「Sign up for GitHub」をクリック
![スクリーンショット 2016-06-11 10.25.25.png](https://qiita-image-store.s3.amazonaws.com/0/129243/219229ee-7df9-efb9-116b-23ab8aa7541b.png)

## プランの選択
![スクリーンショット 2016-06-11 10.37.28.png](https://qiita-image-store.s3.amazonaws.com/0/129243/a0351b8b-03f5-0443-626b-963e64730aaf.png)

**Unlimited public repositories for free.** が選択されていることを確認し、「Finish sign up」をクリック

## Sign up完了
![スクリーンショット 2016-06-11 11.16.32.png](https://qiita-image-store.s3.amazonaws.com/0/129243/74bbe094-e006-f555-d7d2-65b06fbe104d.png)
この画面に遷移した後、登録したメールアドレスに確認メールが届きます。

## Verify email address
『[GitHub] Please verify your email address.』という題名のメールが届きます。
![スクリーンショット 2016-06-11 10.50.01.png](https://qiita-image-store.s3.amazonaws.com/0/129243/daf5a58e-23da-a7d1-8dc8-ee72e233f5f0.png)
届いたメールの「Verify email address」をクリック

## 登録完了
『Welcome to GitHub!』という題名のメールが届きます。
これで登録完了です。
![スクリーンショット 2016-06-11 11.27.54.png](https://qiita-image-store.s3.amazonaws.com/0/129243/aa0780f4-217e-dd97-433d-766229a4d163.png)
Bluemixでデータ分析「dashDB」× 統計言語「R」 Part2:ブラウザから軽く実践編

Part1（↓のURL）のお遊び編に続いて、Part2です。軽く触ってみました。
http://qiita.com/azzeten/items/ba37da865deb120a296c

Part2では、人間の年齢、婚姻、収入等等のデータを使って決定木分析をしてみました。
![adult.png](https://qiita-image-store.s3.amazonaws.com/0/119378/292804cf-f80b-6c8d-8e4a-9f1964d3c703.png)

## かんたんな流れ
1. dashDBにログインして、ブラウザから使えるR Studioに入る
2. Rのスクリプトを書く（スクリプトの内容としては「専用ライブラリ読み込む→dashDBに接続→処理をつらつらコーディング」。以上！）
3. スクリプトを走らせる！

それでは、やってみましょー

## ブラウザからRの環境にログイン
左ペインの「Analytics」から「R Scripts」をクリックします。で、R Studioをクリックします。
![スクリーンショット 2016-06-08 11.26.04.png](https://qiita-image-store.s3.amazonaws.com/0/119378/acc8ff4b-35f6-9813-559e-2129d6cff78f.png)

ログイン画面が出てきますので、dashDBにログインするのに必要なIDとPWを入力します。
![スクリーンショット 2016-06-08 11.27.04.png](https://qiita-image-store.s3.amazonaws.com/0/119378/ed884eba-3429-1180-b9e2-c524f8c4d899.png)

そうすると、それっぽいかっこよい画面が出てきます。これがR Studioの環境です。

## Rのスクリプトを書く

**(1)専用ライブラリ読み込む→dashDBに接続**

dashDBのこのR機能（正式にはIn-DB Analytics）を利用すると、
DBのデータをクライアント側に持ってくることなく、DBの中でRを使用した分析ができるというが嬉しいポイントです。なので、それを行うためのライブラリ「ibmdbR」を読み込む必要があります。

そして次にDBに接続します。本来はDSNを自分で設定する必要があるのですが、WEBブラウザからやるとそれが必要ないみたい。

```r:dashDB用のライブラリを読みこみ、DBに接続する
#ライブラリを読み込む
library(ibmdbR)

#DBに接続する
con <- idaConnect('BLUDB')
idaInit(con)
```

**(2)処理をつらつらコーディング**
①ADULTテーブルの内容をデータフレームという箱に入れます。

```R:データフレームに表の内容を入れる
#テーブルをデータフレームに入れる
adult_df <- ida.data.frame('adult')

#データフレームの中身を確認する
adult_df
```

で、内容を確認するとこんな出力なのです。
SELECT "ID","AGE","WORKCLASS","FNLWGT","EDUCATION","EDUCATION_NUM","MARITAL_STATUS","OCCUPATION","RELATIONSHIP","RACE","SEX","CAPITAL_GAIN","CAPITAL_LOSS","HOURS_PER_WEEK","INCOME" FROM adult 

なるほど。**データそのものが入っているのではなく、SQLが定義されているようです。**
これだと、データをクライアント側に持ってくるのではなくてSQLを投げる、ということになるので、**確かに不要データをいちいち持ってくる必要はなさそうです。**

②モデルを適用してみます。
先ほどのSQLが格納されたデータフレーム「adult_df」をdashDBの中に実装されているRの決定木モデル「idaTree」に適用します。これで、dashDBの中でごりごりと処理を進めてくれるようです。

```R:決定木モデルにデータを入れてプロットする
#決定木モデルにデータを入れる
tr <- idaTree(INCOME~WORKCLASS+EDUCATION+EDUCATION_NUM+RACE+CAPITAL_GAIN+AGE,data=adult_df,minsplit=50,maxdepth=10,id='ID')

#プロット（絵を描いてみる＆コンソールに文字で結果を出力する）
plot(tr)
print(tr)

#DBとの接続を閉じる
idaClose(con)
```

## 結果はこちら

じゃーん
![スクリーンショット 2016-06-09 21.48.26.png](https://qiita-image-store.s3.amazonaws.com/0/119378/67ebef9d-cb94-08b9-fb0f-319f3805bb5a.png)


## 参考文献
http://www.slideshare.net/ibm_analytics_japan/dashdb-r-in-database-analytics
Python colorama 色メモ（Cmder環境）


## はじめに
Windows7 Cmder上でPythonの文字色指定ライブラリcoloramaを使った時の色についてメモします。

## 使い方

### 初期化
```py
import colorama
from colorama import Fore, Back, Style

colorama.init(autoreset=True)
```

### 文字色指定
文字出力時に指定して、以降の文字に色をつけます。

```py
print("foo," + Fore.BLUE + "bar," + Back.RED + "baz")
```
↓

![image](https://qiita-image-store.s3.amazonaws.com/0/68277/caea6013-8efa-c280-4e54-283ed4567bb2.png)

色ついた！

## 指定できる属性群
以下が使えます。`RESET`を除けば16色。

```py
Fore.BLACK           Fore.LIGHTBLACK_EX   Fore.LIGHTMAGENTA_EX Fore.MAGENTA         Fore.YELLOW
Fore.BLUE            Fore.LIGHTBLUE_EX    Fore.LIGHTRED_EX     Fore.RED
Fore.CYAN            Fore.LIGHTCYAN_EX    Fore.LIGHTWHITE_EX   Fore.RESET
Fore.GREEN           Fore.LIGHTGREEN_EX   Fore.LIGHTYELLOW_EX  Fore.WHITE

Back.BLACK           Back.LIGHTBLACK_EX   Back.LIGHTMAGENTA_EX Back.MAGENTA         Back.YELLOW
Back.BLUE            Back.LIGHTBLUE_EX    Back.LIGHTRED_EX     Back.RED
Back.CYAN            Back.LIGHTCYAN_EX    Back.LIGHTWHITE_EX   Back.RESET
Back.GREEN           Back.LIGHTGREEN_EX   Back.LIGHTYELLOW_EX  Back.WHITE

Style.BRIGHT    Style.DIM       Style.NORMAL    Style.RESET_ALL
```

## サンプル
カラフル！
![image](https://qiita-image-store.s3.amazonaws.com/0/68277/64ed58c7-eb46-a89a-2072-f50d6e4cc88b.png)

スタイルは地味。DIMとNORMALは違いなかった。
![image](https://qiita-image-store.s3.amazonaws.com/0/68277/f6d76a30-c70b-b341-f0f0-eaf99fa65483.png)


## おまけ
上記の色サンプル並べるスニペット。

```py
# 色
for attr in dir(Fore):
    if attr[0] != '_':
        print(getattr(Fore, attr) + "### Fore.{:<15}".format(attr) + Back.WHITE + "### Fore.{:<15}".format(attr))
        print(getattr(Back, attr) + "### Back.{:<15}".format(attr) + Fore.BLACK + "### Back.{:<15}".format(attr))

# スタイル
for attr in dir(Style):
    if attr[0] != '_':
        print(getattr(Style, attr) + "### Style.{:<10} ###".format(attr))
```
BundlerとComposerのinstallとupdateの違い


- Rubyの依存管理ツール **Bundler**  
- PHPの依存管理ツール **Composer**

２つはコマンドも使い方も似ているのですが、installの挙動が微妙に違いました。

## Bundlerとは
### Bundlerで使用する各ファイルの説明
#### Gemfileとは
必要となるgemを記述します
#### Gemfile.lockとは
現在使用しているgemのバージョンおよび特定のgemを使うためにインストールする必要のあるgemの一覧が管理されます。

### Bundlerで使用するコマンドの説明
#### bundle installとは
**Gemfile** に更新があれば、未インストールのgemがインストールされ、 **Gemfile.lock** が更新されます。更新がなければ **Gemfile.lock** に従ってgemの更新を行います。 **Gemfile.lock** が存在しない場合は **bundle update** と同じく **Gemfile** に従ってgemの更新を行い、 **Gemfile.lock** を作成します。
#### bundle updateとは
**Gemfile** に従ってgemの更新を行い、 **Gemfile.lock** が生成されます。
カレントディレクトリに **Gemfile.lock** があっても、そこに記載されているバージョン関係なしに最新にします。

## Composerとは
### Composerで使用する各ファイルの説明
#### composer.json
必要となるライブラリを記載します。
#### composer.lock
**composer.json** を元にインストールした各ライブラリのバージョンが記載されています。

### Composerで使用するコマンドの説明
#### composer installとは
**composer.lock** を元にライブラリをインストールします。
**composer.lock** が存在しない場合、 **composer update** と同じくライブラリを最新版にします。
#### composer updateとは
**composer.json** に従ってライブラリの更新を行い、 **composer.lock** が生成されます。
カレントディレクトリに **composer.lock** があっても、そこに記載されているバージョン関係なしに最新版にします。

## ComposerとBundlerの違い
updateの挙動は **Composer** と **Bundler** は同じようですが、
installの挙動が違います。

- **Composer** はinstall時、lockファイルがあればlockファイルしか見ない
- **Bundler** はinstall時、lockファイルがあっても **Gemfile** を見る

運用方法としては **Composer** と **Bundler**　ともに同じで

- 開発スタート: **install**
- 開発中に新しいライブラリを追加: **update**
- デプロイ: **install**

で良いと思いますが、install時の違いを理解していないと痛い目にあいそう。
バックスラッシュはどんな場合にエスケープ文字として解釈されるか

シェルスクリプトを書いてると、いつの間にか`\`が一本無くなってたり、エスケープが上手くいかなかったりして混乱するので、バックスラッシュがどのような場合にエスケープ文字として解釈されるかまとめてみました。

### 注意
完全な内容ではないです。
ユーザーコマンドはGNU版です。

# bash自身
行末にある場合は行の継続として解釈する。それ以外はそれに続く文字として解釈する。（ちなみにこのバックスラッシュは後述のシングルクォート、ダブルクォートと並ぶクォートの一種）

```bash
$ \echo delta
delta
$ \\echo delta
コマンド '\echo' は見つかりませんでした。もしかして:
 コマンド 'aecho' - パッケージ 'netatalk' (universe)
 コマンド 'echo' - パッケージ 'coreutils' (main)
\echo: コマンドが見つかりません
$ echo \
> delta
delta
```
`echo`自身後で説明するので、循環参照っぽい例になってますが勘弁してください。

# シングルクォート
エスケープ文字として解釈しない。（∴シングルクォートの中にシングルクォートを置くことはできない？）

```bash
$ echo '\\'
\\
```
# ダブルクォート
エスケープ文字として解釈する。ただし後続の文字が`$`, `` ` ``, `"`, `\`, 及び改行の場合に限る。

```bash
$ echo "\\\$\tEOT"
\$\tEOT # \tはタブではない
```

# ヒアドキュメント
テキスト終端記号がクォートされているかどうかで挙動が変わる。クォートされていない場合はエスケープ文字として解釈する。ただし後続の文字は`$`, `` ` ``, `\`であり、改行が続く場合は無視される。

```bash
$ cat <<EOF
> \\
> \$
> \t
> \
> EOF
\
$
\t
$ cat <<"EOF"
> \\
> \
> EOF
\\
\
```
# コマンド
## 凡例

| 項目 | 値 | 意味 |
|:--|:--|:--|
| デフォルト | Yes/No | デフォルトでバックスラッシュをエスケープ文字として解釈するか |
| 反転オプション | *オプション文字列* | 動作を反転させるオプション |
| 後続文字 | *文字のリスト* | バックスラッシュの後に置いた時に特別に解釈される文字 |

後続文字の意味などはマニュアルを参照のこと。マニュアルなどで確認できない場合は項目自体なし。

## read
デフォルト:Yes
反転オプション:`-r`

```bash
$ read line; echo $line
\\ # 入力
\
$ read -r line; echo $line
\\ # 入力
\\
```
## echo（組み込み / 外部）
デフォルト:No
反転オプション:`-e`
後続文字:\,a,b,c,e,f,n,r,t,v,0NNN,xHH,E(組み込み),uHHHH(組み込み),UHHHHHHHH(組み込み)

```bash
$ echo \ttest
ttest
$ echo -e \ttest
ttest # bash自身のエスケープ解釈
$ echo -e '\ttest'
	test
$ echo '\j'
\j
```
ちなみに`-E`でエスケープシーケンスを解釈しないよう指示できる。zshの`echo`はデフォルトでエスケープシーケンスを解釈し、`-E`で抑制できる（らしい）。

## printf （組み込み / 外部）
エスケープ文字として解釈する。エスケープシーケンスはフォーマット文字列中に埋め込むこともできるし、`%b`によって引数文字列中のエスケープシーケンスを解釈するようにもできる。

```bash
$ printf '%s\t%b\n' 'abc\tdef' 'ghi\tjkl'
abc\tdef	ghi	jkl
```