OmniAICreator/Qiita-1.07M huggingface dataset:
クリスマス・イヴに読みたい機械学習系記事

#我と共に生きるは冷厳なる勇者、いでよ！

##アニメ
ご注文はDeep Learningですか？
        http://kivantium.hateblo.jp/entry/2015/02/20/214909
        Deep Learningでラブライブ！キャラを識別する
        http://christina.hatenablog.com/entry/2015/01/23/212541
        TensorFlowでアニメゆるゆりの制作会社を識別する
        http://kivantium.hateblo.jp/entry/2015/11/18/233834
        続・深層学習でアニメ顔を分類する with Keras
        http://qiita.com/hogefugabar/items/afb4f6c9a93a4bbda51a

##大人向け
■ディープラーニングでAV女優の類似画像検索サイトをつくった
        http://anond.hatelabo.jp/20160807141633
        chainerによるディープラーニングでAV女優の類似画像検索サービスをつくったノウハウを公開する
        http://qiita.com/xolmon/items/0b82f4861cf93fd28e33
        ディープラーニングで顔写真から巨乳かどうかを判別してみる (うまくいったか微妙)
        http://qiita.com/summer4an/items/db0124eee8103c1d3b85
        ディープラーニングで「顔が似ているAV女優を教えてくれるbot」を構築
        http://qiita.com/tmnck/items/af82deb04d432f1f4f6e

##株価予想
ディープラーニング（TensorFlow）を使用した株価予想
        http://qiita.com/yai/items/5ec5bbfbcc53c9770c40
        ディープラーニング（TensorFlow）を使用した株価予想 ～その2～ディープラーニング（TensorFlow）を使用した株価予想 ～その2～
        http://qiita.com/yai/items/8c0ad280cc2f53e40256

##馬券予想
http://ch.nicovideo.jp/dennoushou


##深層強化学習
分散深層強化学習でロボット制御
        https://research.preferred.jp/2015/06/distributed-deep-reinforcement-learning
        強化学習で参考になったサイトまとめ
        http://qiita.com/eve_yk/items/2ace6d4c1dad7e912df1
        Chainer✕OpenAI GymでDQN(もどき)に挑戦！
        http://qiita.com/trtd56/items/3a09d37788d8d13ff131

##自動生成
Chainerで顔イラストの自動生成
http://qiita.com/mattya/items/e5bfe5e04b9d2f0bbd47
        TensorFlowによるDCGANでアイドルの顔画像生成 その後の実験など
        http://memo.sugyan.com/entry/2016/10/12/084751
        Chainerを使ってコンピュータにイラストを描かせる
        http://qiita.com/rezoolab/items/5cc96b6d31153e0c86bc

##ライフハック
DeepLearningで上司を認識して画面を隠す
            http://qiita.com/Hironsan/items/8ad9b11bcc0c618ec5e2
Redis四方山話

本日は、Redisで運用している上で起こった事や気をつけている事を、取り留めなく列挙したいと思います。[^1]

Redisについて詳しい説明はしませんが、ごく簡単に説明すると、オンメモリのKVSです。類似のものにmemcachedがありますが、memcachedと比べた優位点としては、自動で並べ替えられるリスト（ランキングで大活躍中）や、永続化機構（サーバーが死んでもバックアップから復帰できる）が挙げられるかと思います。

## シングルスレッド
[Redisはシングルスレッド](https://redis.io/topics/faq#redis-is-single-threaded-how-can-i-exploit-multiple-cpu--cores)なので、強い1CPUが有効です。

## 数値はdouble
数値周りはintでやり取りするので、何となくint型と思ってしまいますが、double型です。[^2] ですので、大きな値を代入するとブレます（17桁くらい）。

## RDBへの保存中は他のコマンドや新規接続を受け付けない
Redisの永続化の方法はいくつかありますが、そのうちRDBについて、[RDBファイルへの保存中、Redisは無応答になります](http://redis-documentasion-japanese.readthedocs.io/ja/latest/topics/persistence.html#rdb-disadvantages)。

マシンのスペック次第ではありますが、弊社が利用しているサーバーでは、数GBクラスのデータをRDBへ保存すると、数十秒かかります。その期間中にRedisのデータ操作や参照を行おうとすると、その作業が終わるまでは無応答になります。新規の接続を確立しようとしても、設定次第でタイムアウトし得ます。

saveを無効にして、アクセスが少ない深夜にバッチでRDBに保存する事も考えられます。

## ランキングで同順位を処理できない
Redisにはランキング利用に向いている[Sorted sets](https://redis.io/topics/data-types#sorted-sets)というデータ型がありますが、その特徴として、同じポイントのユーザーが同順位になりません。対象のコマンドは以下のとおりです。

- ZRANK
- ZREVRANK
- ZRANGE
- ZREVRANGE

具体的には以下のようになります（ Ruby からの実行例）

```rb
# 7500位のユーザーを取得
> user_ids = Redis.current.zrevrange('hogehoge', 7500, 7500)
=> ["aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"]
> user_ids.each do |user_id|
*   pp Redis.current.zscore('hogehoge', user_id)
* end
9256

# 7501位のユーザーを取得
> user_ids = Redis.current.zrevrange('hogehoge', 7501, 7501)
=> ["aaaaaaaa-bbbb-cccc-dddd-ffffffffffff"]
> user_ids.each do |user_id|
*   pp Redis.current.zscore('hogehoge', user_id)
* end
9256# 7500位のユーザーと同じスコア・・・
```

それに対応するためには、上記4コマンド以外を活用します。例えば、特定のユーザーの現在のランクを取得したい場合、以下のようになります。

```rb
# 対象ユーザーのスコアを取得
> score = Redis.current.zscore('hogehoge', "aaaaaaaa-bbbb-cccc-dddd-ffffffffffff").to_i
=> 9
# そのスコアより大きいユーザーの数をカウントし、それに1を足すと対象ユーザーのランクになる
> Redis.current.zcount('hogehoge', "(#{score}", "+inf") + 1
=> 182
```

それに対応しようとしたパッチもあるようです。

## データが溢れると新規データ保存できなくなる
maxmemoryで設定されている容量をオーバーすると、新規データが作れなくなります。[^3] Railsの場合はエラー扱いとなります。これへの対策として、可能な限りデータの有効期限を設定する事、可能な限り小さなデータにする事を心がけています。

## 設定値の倍以上のメモリーが必要
RedisはRDBで保存する際に、自身の丸ごとコピーを作ります。そのため、メモリーはmaxmemoryの設定値の倍以上を確保しておく必要があります。

## 色々あるけどやっぱり便利
色々ありますが、やはり速度が出ますし、自動で並べ替えができるのはありがたいです。今後ともうまく付き合っていきたいものです。

[^1]: バージョンは2.8.19です。
[^2]: [IEEE 754 floating point number](https://redis.io/commands/zadd#range-of-integer-scores-that-can-be-expressed-precisely)
[^3]: ちなみにmemcachedでは、溢れるとアクセスされた時間が古いデータから消されていきます(LRU)
アニメの放送が遅れたら自分にリプライを飛ばす

自宅のレコーダーは番組延長に対応しておらず、延長した場合は自分で再度設定をする必要がありました。
以前卒業研究で研究室に篭っていた頃、遅れていることに気が付かなかったため「ご注文はうさぎですか？」の一部エピソードを逃してしまうという大変痛い事件があったため、放送が遅れたら遅れていることを知らせるプログラムを書きました。

内部でしょぼいカレンダーと[TwistOAuth](https://github.com/mpyw/TwistOAuth)を使用しています。

```php:program.php
<?php
//ファイルを用意してトークンを準備する
require __DIR__ . '/vendor/autoload.php';
$to = new TwistOAuth('CK', 'CS', 'AT', 'TS');
//チャンネルID
$ChID = "128";
//番組ID
$TID = "3893";
//あなたのTwitterID
$screen_name = "@MATTENN";
//通常の放送時間を設定。（月日は自動的に設定されます。25:30であれば01:30のように記述）
$onair_time = "01:00";
$station_array = json_decode(file_get_contents('https://gist.githubusercontent.com/MATTENN/c3bc9947d06e7b64a1eb827d182af04f/raw/e1d391ddf113d4614b9966deb4ca5df90ed6dd2c/tv'),true);
$count_once = false;
$xml = simplexml_load_file('http://cal.syoboi.jp/db.php?Command=ProgLookup&TID='.$TID.'&ChID='.$ChID);
$sta_xml = simplexml_load_file('http://cal.syoboi.jp/db.php?Command=TitleLookup&TID='.$TID.'&ChID='.$ChID);
foreach($xml->ProgItems->ProgItem as $anime_prog){
	$anime_date = new DateTime($anime_prog->StTime);
	if(strtotime($anime_date->format('Y/m/d H:i:s')) > time()){
		//放送されていないエピソード
		if($anime_date->format('H:i') != $onair_time){
			$to->post('statuses/update', 'status='.$screen_name.' '.$station_array[$ChID]."で放送予定の「".$sta_xml->TitleItems->TitleItem->Title."」".$anime_prog->Count."話は放送時間が通常と異なっています。");
		}else{
			$to->post('statuses/update', 'status='.$screen_name.' '.$station_array[$ChID]."で放送予定の「".$sta_xml->TitleItems->TitleItem->Title."」".$anime_prog->Count."話は通常通り放送されます。");
		}
		if ($count_once == true) {
			break;
		}
	}
	$count_once = true;
}
?>
```

あとはcronなどで放送時間前に叩いておけば、その都度チェックが走り自分にリプライが飛びます。
書いた後に気づいたのですが、追従対応のレコーダに買い換えれば不要な気がします。
UTR50 / UTR51

本日はUnicodeの縦書きやカラー絵文字に関する仕様についてのお話をします。

# [UTR #50](http://unicode.org/reports/tr50/)
UNICODE VERTICAL TEXT LAYOUT
Unicodeの縦書きテキストに関する情報が書かれています。

日本語の縦書きを見るとわかると思うのですが、縦書きの際にはアルファベットのように文字が90度回転したり、句読点や小文字の仮名のように描画位置が変わったりします。
こうした縦書き時の文字の回転などに関する情報が全てのグリフに対して付与されます。

- `U`
    - 日本語の漢字のように縦書きでも回転しない文字
- `R`
    - アルファベットのように縦書き時に時計回りに90度回転される文字
- `Tu`
    - 通常は縦書き用のグリフが必要だが、それがなければ回転せずに表示する文字
    - 句読点や小書き仮名
- `Tr`
    - 通常は縦書き用のグリフが必要だが、それがなければ時計回りに90度回転して表示する文字
    - 全角の括弧や「ー」など
        - 長音記号は、筆の入りが横書きの時と異なるので回転するだけでは不十分

文字列描画エンジンは、このプロパティを参照して適切に文字を描画する必要があります。
（ちなみにモンゴル語も縦書きを有する言語体系ですが、横書きが縦書きを左に倒した字形になっているので上記のプロパティは`R`となります）

縦書き字形を用意して、その変換テーブルを提供するのはフォントのお仕事です。
変換テーブルを読み込んで適切に文字を配置するのがテキスト描画エンジンのお仕事です。

# [UTR #51](http://unicode.org/reports/tr51/)
UNICODE EMOJI
Unicodeのカラー絵文字に関する情報が書かれています。
具体的には

- 絵文字
    - テキスト表示の絵文字も含む
    - http://www.unicode.org/Public/emoji/4.0//emoji-data.txt
- デフォルトがカラー絵文字の絵文字
    - 絵文字にはデフォルトが`emoji`=カラー絵文字のものと`text`=白黒絵文字のものがある
    - http://www.unicode.org/Public/emoji/4.0/emoji-data.txt
- 絵文字の表示を`emoji`, `text`を指定して表示する方法
    - http://unicode.org/Public/9.0.0/ucd/StandardizedVariants.txt
- カラー絵文字の見た目を変えるコードポイント
    - 現時点では肌の色を変更するものだけ
    - http://www.unicode.org/Public/emoji/4.0/emoji-data.txt
- カラー絵文字の見た目を変えるコードポイントに対応した絵文字
    - つまり肌の色が変えられる絵文字
    - http://www.unicode.org/Public/emoji/4.0/emoji-data.txt
    - http://www.unicode.org/Public/emoji/4.0/emoji-sequences.txt
- 複数の文字を合成してひとつのカラー絵文字になる文字列
    - 6️⃣などのこと
    - http://www.unicode.org/Public/emoji/4.0/emoji-sequences.txt
- Zero Width Joinerで結合すると絵文字になる文字列
    - 👪などのこと
    - http://www.unicode.org/Public/emoji/4.0/emoji-zwj-sequences.txt

# おわりに
明日はTATEditorの設定の話をする予定です。
D言語erでもパターンマッチしたい

正規表現の方ではなく、データ構造の分解などが出来る方のパターンマッチです。
C# 7で入るだとか、ScalaやElixerの流行などで最近パターンマッチが人気です(多分)。

というわけで作りました。
# dmatch

[githubレポジトリ](https://github.com/namachan10777/dmatch)
**現在開発中で正常に動作しないです**
# 使い方
pmatchテンプレートの第一テンプレートパラメータに分解する変数、第二引数にコードを書きます。
コードは

```
パターン1 => 実行されるコード1
パターン2 => 実行されるコード2
...
```
のように記述します。
構文はラムダ式の構文に似ていますが、実行されるコードは式ではなく一つ以上の文を受け取ります。つまり、セミコロンが必要です。
## パターン
RecordパターンとForward Rangeパターンは思いつかなかったのでML系のものを持ってきました。良い構文などあればissueお願いします。
## Arrayパターン
```d
[]
[a,b,c]
[a,b,c] ~ d
a ~ [b,c,d]
[a,b] ~ c ~ [d,e]
```
## Forward Rangeパターン
```d
a::b::c
a::b::[]
```
## Variantパターン
```d
a : int
```
## Recordパターン
```d
{a=alpha,b=beta}
```
## パターンを組み合わせる構文
```d
(a::b)
```
### 
```d
a @ b
```
## その他
`0x12` `"str"`などの値を入れることも出来ます

```d
[1,a,b]
```
# 使用例

```d
int sum(int[] ary) {
    mixin(pmatch!(ary,q{
        [] => return 0;
        x::xs => x + sum (xs);
    }
    return 0;
}

unittest {
    assert (sum([1,2,3] == 6);
}
```
# 実装
構文解析、意味解析、コード生成の3段階に分けています。
構文解析器はPEGを使っています。
@outlandkarasu@githubさんの以下の記事を参考にさせていただきました。
[D言語で構文解析器をつくる(1) パーサー・コンビネーター編](http://qiita.com/outlandkarasu@github/items/b8d85bc5bc0aeafb89bb)
[D言語で構文解析器をつくる(2) セマンティック・アクション編](http://qiita.com/outlandkarasu@github/items/bd5e55bf34088f63ac11)
[D言語で構文解析器をつくる(3) アブストラクト・シンタックス・クリスマスツリー編](http://qiita.com/outlandkarasu@github/items/58a93755c970d76e797b)
パーサーコンビネータはほぼ記事のままですが、ASTを構築する部分はオリジナル実装になっています。
データを永続的なものにしてバックトラックを解析結果を捨てるだけで出来るようにしています。

意味解析部では主にArrayパターンを解析し、コード生成の際に必要などの添字やスライスの情報などをASTに付け足していきます。

コード生成部では

```d
[1,2,x]
```
を

```d
[__tmp__1,__tmp__2,x] if (__tmp__1==1&&__tmp__2==2)
```
のようなコードに変換した後、実際にコードを生成します。
例えば、

```
[a:int,b:int]~c => exec();
```

は

```d

if (arg[0].type == typeid(int))
{
    auto a = arg[0].get!(int);
    if (arg[1].type == typeid(int))
    {
        auto b = arg[1].get!(int);
        auto c = arg[2 .. $ - 0];
        if (true)
        {
            exec();
        }
    }
}

```
のように、

```d
a::b::c => exec();
```
は

```d
auto __arg_saved__ = arg.save;
if (!__arg_saved__.empty)
{
    auto a = __arg_saved__.front;
    __arg_saved__.popFront;
    if (!__arg_saved__.empty)
    {
        auto b = __arg_saved__.front;
        __arg_saved__.popFront;
        auto c = __arg_saved__;
        if (true)
        {
            exec();
        }
    }
}
```
のようなコードに変換されます。(実際はインデントと改行はされません)
# 現在の状況
条件分岐が正常に動作しません。デバッグ中です。
年が明けるまでには使い物になるようにするつもりです。
生成されたコードの通り、代入しても参照型以外元のデータに変更が加えられません。変更可能なようにする予定です。

```d
[a,#(a+1),#(a+2)] //[1,2,3],[12,13,14]などにマッチする
```
このような動作を実装するつもりですが、良い構文が思いつきません。issueください。
# まとめ
なんとか間に合ったと思ったのですが実際動かすとバグバグで全然間に合っていませんでした...。
明日から冬期休業で時間が取れる(はず)なので進捗していきたいです。
v1.0.0をリリース出来たら細かい実装についても記事にしたいと思います。

明日は@youxkeiさんの「今年もD言語の構文を拡張する」とのことでとても楽しみです。
CSSの優先度を覆す最後の手段!importantについて


#!importantとは
`!important`をつけるとclass、IDなどのCSSの優先度を無視して最優先で適用することができる。


##実例
```index.html
<div class="example">
	<h2>ここに適用したい</h2>
</div>
```

```style.css
.example h2{
	color: blue;
}

h2{
	color: red !important;
}
```
値の後ろに`!important`をつけて使う。


###CSSのポイント換算

少しおさらい、

|セレクタ|詳細度|
:---|:----
|style=""|1000|
|ID(#)|100|
|class(.)|10|
|タグ|1|

このようにCSSは加算式で優先順位が決めれている。

**`!important`はこれら一切を無視して適用される**


##実際どこで使うのか考える
実際、制作時に使うと破綻を持ち込みそうな予感しかしないし、最後の手段として覚えておく程度だと思ったが、少し考えて見た。

###CMSやwebサイト作成ソフトで使う
WordPressなどのCMSや、Jimdoなどの最初からマークアップされているものに少しCSSを足したいとき、もうclassやIDが入り乱れていてよくわからない時など有効(かもしれない)
formで複数のリンクをsubmitボタンにする

formのsubmitをリンクにするのと、
複数送信ボタンを作成するのを同時にしたときのメモです。

```
<html>
 <script type="text/javascript">
  function actionA(){
    document.getElementById('form').action = 'aho.cgi';
  }
  function actionB(){
    document.getElementById('form').action = 'aho2.cgi';
  }
</script>

<body>
  <form id='form' name='form' action="../../KAUMONOLIST/CGI/aho.cgi" method="post">
    <a href="javascript:document.form.submit()"  onclick="actionA();">送信１</a>
    <a href="javascript:document.form.submit()"  onclick="actionB();">送信２</a>

  <input type="hidden" name="userid" value="12345">
  <input type="text" name="namae">

</form>
</body>
</html>
```
Maxに設定した(30)文字以内で、「。\t」などの区切り文字にマッチする文字でテキストを分割するMethod

####いま作っているToDoViewerがだいぶかたちになってきた。
Todo.lyのToDoを表示できるようになった。

その最中に、取得したToDoの特定文字数以下で、区切りのよい文字数で文章を区切り、前半をタイトル、後半を本文として使うメソッドがほしくなった。これがないと、最近Web系でよくあるけど、文章の途中で…となっていて、なんだか消化不良になりそうだと感じたのだ。まだ動作確認していないが、まあ動くと思う。たぶん。

```
using System.Collections.Generic;

namespace StringEdit {
	class StringEdit {
		/// <summary>
		/// Maxに設定した(30)文字以内で、「。\t」などの区切り文字にマッチする文字でテキストを分割するMethod
		/// </summary>
		/// <param name="inputtext">入力文字列</param>
		/// <param name="maxlength">Maxに設定する文字</param>
		/// <returns>分割した文字列</returns>
		public List<string> splittext(string inputtext, int maxlength) {
			List<string> returntexts = new List<string>();
			List<string> Splitter = new List<string> { "\r\n", "\r", "\n", "、",  "。", ",", ".",  " ", "\t" , "　" };

			if (inputtext.Length < maxlength) {
				returntexts.Add(inputtext);
				return returntexts;
			}

			for (int i = maxlength; 10 <= i; i--) {
				string text = inputtext.Substring(i);
				if (Splitter.Contains(text)) {
					string before = inputtext.Substring(0, i);
					string after = inputtext.Substring(i);
					returntexts.Add(before);
					returntexts.Add(after);
				}
			}

			return returntexts;
		}
	}
}
```
炎の型工房 火の型 22日目 : DartのIf文!! Scratchと比較してみよう --2--

[<ruby>炎<rt>ほのお</rt></ruby>の<ruby>型<rt>かた</rt></ruby><ruby>工房 <rt>こうぼう</rt></ruby>ScratchとDartでゲームプログラム<ruby>入門<rt>にゅうもん</rt></ruby> Advent Calendar 2016](http://qiita.com/advent-calendar/2016/firefirestyle-studio)
の<ruby>記事<rt>きじ</rt></ruby>です


# <ruby>演算子<rt>えんざんし</rt></ruby>をもう<ruby>少<rt>すこ</rt></ruby>し<ruby>見<rt>み</rt></ruby>ていきましょう
または、とか、　かつ　という<ruby>演算子<rt>えんざんし</rt></ruby>もありましたね。

```
main(List<String> args) {
  var physicsScore = 100;
  var mathScore = 100;

  if(physicsScore == 100 && mathScore == 100) {
    print('Greate');
  } else if(physicsScore > 70 || mathScore > 70) {
    print('Good');
  } else {
    print('Bad');
  }
}

```

とScratchのコードを<ruby>比較<rt>ひかく</rt></ruby>してみましょう。

<img width="373" alt="v001.png" src="https://qiita-image-store.s3.amazonaws.com/0/54192/5d73f42f-2d4d-ab14-2087-b94177da718f.png">


- かつ は && と<ruby>書<rt>か</rt></ruby>ける
- または は || と<ruby>書<rt>か</rt></ruby>ける

はい、Scratchのノウハウが<ruby>使<rt>つか</rt></ruby>えそうですね。

## Thanks

ここまで、<ruby>読<rt>よ</rt></ruby>んでくれてありがとう!!

では、<ruby>次回<rt>じかい</rt><ruby><ruby>会<rt>あ</rt></ruby>えることを、<ruby>楽<rt>たの</rt></ruby>しみにしています。

ではでは
Flash の便利なとこをどうにかして使いたい人の独り言

はじめての Qiita 投稿。はじめての アドベントカレンダー ということで、緊張してタイプする手が震えておりますが、よろしくお願いします。

ノリでやると決めたものの、何書いたらいいか迷ってしまったのですが、皆さん Flash への思い出を語られているので、私もそのあたりを軸にだらだらと語ろうかと思います。

# 最近の開発環境の雑感

2000年代、ウェブブラウザの種類が増えはじめ、通信速度も上がり、インターネットが通信インフラからメディアになった時代。ちょっとリッチなコンテンツを作るときは Flash という時代がありました。

その後、Flash はオワコンという事になり、加えて Unity や oF の登場もあり、フロントエンドの開発環境は群雄割拠の時代へと突入するわけですが、自分の得意な言語を使いやすい反面、技術共有のコストや開発のリスクは特に改善されていない印象があります。

# Flash はバランス良かったよね

個人的に感じていた Flash 最大の利点は GUI での制作とプログラミングでの制作の絶妙なバランス。かつ、それらが相互参照可能という非常に高度な柔軟性をもつツールであったという点です。

タイムラインで作成したアニメーションと、ActionScript で実装したアニメーションが、素材として相互に参照できる。そして、その特性をきちんと理解したデザイナ・プログラマ（この分け方は嫌いですが便宜上）同士であれば、少ないコミュニケーションで素晴らしいアウトプットを生みだせる開発環境でした。

現在 Flash は Animate へと名前を変え、その名の通りアニメーションに重きを置くようになりました。この舵取りは、Flash が元来もつ強みを活かしたものですが、元々画像や動画等のグラフィック以外を全てプログラムで構築していた自分にとっては、アニメーション機能以外の実装のバランスも良いと感じていたので、これは少々勿体なく感じています。

特に使い勝手が良いと思っているのは通信関係の実装です。元々ブラウザ上で実行されるコンテンツであったこともあり、Unity や oF に比べ、HTTP通信をはじめとした通信処理全般が良く出来ていました。

[![PC6台連動](http://img.youtube.com/vi/hJx84LJhYPc/0.jpg)](https://www.youtube.com/watch?v=hJx84LJhYPc)
【TEAMLAB HANGER@VANQUISH SHIBUYA 109MEN'S】

これはチームラボ時代に作ったものですが、Flash で１台のPCから Full HD モニタ6枚分のアニメーションを出力するのが難しかったため、Mac mini 6台を DatagramSocket を用いて UDP 通信で SWF の出力内容を同期させました。そのすべてを ActionScript3 のみで完結させています。

空間演出系は今でこそ Unity や oF が多用されていますが、よほど強力なフレームレートを必要としない限りは、こういった工夫をすることで Flash にもまだ十分に可能性があると思います。(今では UNet 使ったほうが楽とかありますが)

# 開発環境との付き合い方

私達開発者というものは、より良いアウトプットのためにツールの盛衰と心中する訳にもいかないのも事実です。しかし、開発環境の変遷期にはどうしても古い環境のほうが楽な状況というのが出てきます。

究極的には、開発環境をしっかりと取捨選択して、そのなかで最強を目指すというのが一番かもしれません。しかし、現在は群雄割拠の戦国時代であり、技術を学ぶことと同じくらい、時勢を読む力が必要になってきてしまっています。

また、この表現は oF や Cinder、この表現は Unity、この表現は HTML、WebGL、Flash といったように、アウトプットの種類によって開発環境ごとの得手不得手があります。

そんなときは、複数のアプリケーション同士を通信させて相互に操作可能にしちゃうというのは如何でしょうか？結局のところ、プロトコルというのは開発環境とは別の問題ですから。

# OSC のススメ

自分は、プロセス間通信やマシン感の通信に OSC (OpenSoundControl) を主に使っています。

https://ja.wikipedia.org/wiki/OpenSound_Control

OSC の良いところは、人間にわかりやすく、大体のプログラムでライブラリが見つかり、古くからあるので資料やサンプルが豊富なところです。

ちなみに、前述の Flash での PC 6台連動では OSC 通信部分を自作しました(TUIOライブラリとかにOSC実装部分があったのですが興味本位で)。そのコードは以下に公開しています。

【OSCSocket】
https://github.com/sgmnt/OSCSocket

その後、OSC の使い勝手にはまって nodejs 版も実装しました。
（これまた、既存の npm ライブラリがあるのに）

【node-oscsoket】
https://github.com/hrfm/node-oscsocket

さて、これらを使って Flash / WebGL / oF / Cinder / Processing / Unity 等々を相互に操作する無駄にごついデモを作ろうとしたのですが、この文章を執筆している時点で既に23時になってしまったので、年末暇ができたら追記なりで公開することにします。。。（ここが一番重要なのに）

# まとめ

曰く、通信というのは「通いあって信頼を深める。」という意味なのだそうです。

異なる技術・スキルを組み合わせる事は更に重要となってきていますが、通信を上手く使ってアプリケーションを仲良くさせてみるのも、たまには面白いのではないでしょうか。そうすることで、 Flash の良さを再発見できるかもしれません。

おしまい。
Koalaを使ったSassコンパイル時にアウトプット先を設定する方法


Koalaを使ってSassをコンパイルする際、デフォルトだとcssのアウトプット先がSassファイルと同じディレクトリになっています。
起動する度にアウトプット先を変更するのは手間なので、予めKoala設定ファイルを作成しておくと便利です。

## 設定ファイルの作成方法

Koalaを起動し、Sassファイルが入っているディレクトリを、ディレクトリごとKoala上にドラッグします。
![スクリーンショット 2016-12-22 22.26.30.png](https://qiita-image-store.s3.amazonaws.com/0/62022/b99a00e2-c149-2fb5-f85e-76f4c2f49d64.png "スクリーンショット 2016-12-22 22.26.30.png")

ドラッグすると、ディレクトリに含まれているSassファイル（正確にはScssファイル）が一覧表示されます。
![スクリーンショット 2016-12-22 22.28.15.png](https://qiita-image-store.s3.amazonaws.com/0/62022/a1809754-efe3-ec87-aea5-49359cbb6c1c.png "スクリーンショット 2016-12-22 22.28.15.png")


この時点でコンパイルされ、ディレクトリ内にcssファイルがアウトプットされます。

この画面から、左欄のディレクトリ名を右クリック→「プロジェクト設定」→「設定ファイルを作成」→「For Sass」を選択します。
![スクリーンショット 2016-12-22 22.18.51.png](https://qiita-image-store.s3.amazonaws.com/0/62022/5b1e215d-35d2-fbd2-8b23-eeeee36fdc99.png "スクリーンショット 2016-12-22 22.18.51.png")


「Koala-config.jsonをプロジェクトフォルダに作成しました。今すぐ編集しますか？」のメッセージが表示されるので、「OK」を選択。

### アウトプット先設定
ディレクトリ内に「koala-config.json」というファイルが作成されるので、それを開き
~~「mappings」の上あたりに以下のように記述します。~~
```css_dir```に相対パスで指定するやり方が効かなくなったので、「mappings」を使う正規の方法に修正しました。

```json
	{"mappings": [
		 {
		 	"src": ".",
		 	"dest": "../css"
		 }
	]}
```

```"src": "."``` の部分にコンパイル元のディレクトリ名を、```"dest": "css"``` の部分にアウトプット先のディレクトリ名を相対パスで書き換えてください。

ディレクトリ別にアウトプットする場合は

```json
	{"mappings": [
		 {
		 	"src": "hoge",
		 	"dest": "../css/hoge"
		 },
		 		 {
		 	"src": "foo",
		 	"dest": "../css/foo"
		 }
	]}
```

と指定することでそれぞれ指定出来ます。

これで次回からKoala起動と同時に指定したアウトプット先にアウトプットされます。

ちなみに予め「koala-config.json」をSassディレクトリに仕込んでおくと、（当然ですが）「設定ファイルを作成」の手順も必要ありません。

参考になりましたら幸いです。

---

下記のページを参考にさせていただきました。ありがとうございます。

▼Using project settings
https://github.com/oklai/koala/wiki/Using-project-settings
「Internal error: initial hax sync failed」でAndroidのエミュレータが起動しなかった時の対応

# 「Internal error: initial hax sync failed」でAndroidのエミュレータが起動しない

古いOSや最新のOSでの動作確認をシミュレータで行いたい時に、Internal error: initial hax sync failedという表示が出て動きませんでした。

# Dockerを止めると動いた！

再インストールなど、いろいろ試したのですが、他の仮想環境が動作している状態だと動かないようでDockerを止めると動きました。
初めてのプログラミングで社内の経費精算管理ツールをつくってみる（まで）#3

##前回からの続き

プログラム未経験者のディレクターがきちんと動くプログラムをつくるまでのお話し、第3回目です。


業務フローを書き出したら課題に抜け漏れを見つけた。
↓
業務フローを見直した。
↓
課題と対策を再設定した。
↓
必要な画面を洗い出そう！（今ココ）




##必要な画面

###ログインページ（メンバー&管理者用）
###経費入力ページ（メンバー&管理者用）
###経費確認ページ（管理者用）
<br>
<br>
<br>
以上！
<br>
<br>
<br>
だと、さすがに進展が無さ過ぎですので、各ページでどんな機能を実装しないといけないのか洗い出してみます。


##各画面における必要な機能
###ログインページ（メンバー&管理者用）

* ログインができる
 - 事前に会員登録が必要
 - メンバーと管理者の権限を分ける
 - 会員の権限に合わせて表示させるページを分ける


###経費入力ページ（メンバー&管理者用）

* 各項目の入力、登録ができる
	* 登録した項目の修正ができる
	* 修正した項目の更新ができる
* 登録した内容を管理者側に提出できる


###経費確認ページ（管理者用）

* 提出された内容を確認できる
* 提出された内容を修正できる
* 提出された内容を差し戻しできる

必要であろう機能を洗い出しました。
箇条書きにするとさっぱりしたもんですが、ここまで来るだけでもけっこう大変でした。（が、何か沢山の抜け漏れがありそうです。）
しかもこの状態からでは何をどう作れば良いのかが想像できません。。（さて、どうしたもんかな。）

各画面の構成を考えよう。
あと画面遷移図を作ってみて抜け漏れが無いか確認しよう。


##その他
実装する機能に関連して、覚えないといけなさそうな事をメモ。

* 開発環境の構築
* サーバーの設定
* DBの設定

バックエンド以外にもデザインやらフロント開発やらどうしようかしら。

##終わりに
###次回に向けて
という訳で、各画面の構成と画面遷移図を作ります。

###雑感
第1回目の終わりにも書いたのですがリアルタイムで進んでいる個人プロジェクト（勉強）です。
坊主も走り回る師走。なかなか思うような進展がありませんが、次回の12/25までには、なんとか。

引き続きどうぞ宜しくお願いいたします。
炎の型工房 火の型 21日目 : DartのIf文!! Scratchと比較してみよう

[<ruby>炎<rt>ほのお</rt></ruby>の<ruby>型<rt>かた</rt></ruby><ruby>工房 <rt>こうぼう</rt></ruby>ScratchとDartでゲームプログラム<ruby>入門<rt>にゅうもん</rt></ruby> Advent Calendar 2016](http://qiita.com/advent-calendar/2016/firefirestyle-studio)
の<ruby>記事<rt>きじ</rt></ruby>です


# If<ruby>文<rt>ぶん</rt></ruby>を<ruby>試<rt>ため</rt></ruby>してみよう

DartのIf<ruby>文<rt>ぶん</rt></ruby>を<ruby>見<rt>み</rt></ruby>ていきましょう。Dartには、Scratchと<ruby>同<rt>おな</rt></ruby>じようにIf<ruby>文<rt>ぶん</rt></ruby>があります。

```
main(List<String> args) {
  var score = 100;
  if(score == 100) {
    print('Greate');
  } else if(score > 70) {
    print('Good');
  } else {
    print('Bad');
  }
}
```

とScratchのコードを<ruby>比較<rt>ひかく</rt></ruby>してみよう

<img width="372" alt="v001.png" src="https://qiita-image-store.s3.amazonaws.com/0/54192/01307241-f3cd-9a8c-1202-64a2c07d5c65.png">



- <ruby>変数<rt>へんすう</rt></ruby>の<ruby>作成<rt>さくせい</rt></ruby>は、var score = 100 で<ruby>作<rt>つく</rt></ruby>れる
- if文は、if(){} で<ruby>書<rt>か</rt></ruby>ける
- <ruby>比較演算<rt>ひかくえんざん</rt></ruby>は、 "==" とか ">" とかを<ruby>利用<rt>りよう</rt></ruby>する


## Dartの<ruby>比較演算子<rt>ひかくえんざんし</rt></ruby>
<table>
<tr>
<td><ruby>演算子<rt>えんざんし</rt></ruby></td><td><ruby>説明<rt>せつめい</rt></ruby></td>
</tr>
<tr>
<td>==</td><td>おなじかどうか</td>
</tr>
<tr>
<td>></td> <td>より<ruby>大<rt>おお</rt></ruby>きいか</td>
</tr>
<tr>
<td><</td><td> より<ruby>小<rt>ちい</rt></ruby>さいか</td>
</tr>
<tr>
<td>>=</td><td> より<ruby>大<rt>おお</rt></ruby>きいか、または、おなじか</td>
</tr>
<tr>
<td><=</td><td> より<ruby>小<rt>ちい</rt></ruby>さいか、または、おなじか</td>
</tr>
<tr>
<td>!=</td><td> ことなるかどうか</td>
</tr>
</table>
があります。

<ruby>色々<rt>いろいろ</rt></ruby><ruby>試<rt>ため</rt></ruby>してみよう!!

## Thanks

ここまで、<ruby>読<rt>よ</rt></ruby>んでくれてありがとう!!

では、<ruby>次回<rt>じかい</rt><ruby><ruby>会<rt>あ</rt></ruby>えることを、<ruby>楽<rt>たの</rt></ruby>しみにしています。

ではでは
wordpress 4.7でREST-APIの仕様が変更になったので合わせる

## 問題
wordpress 4.7でRest APIの仕様が変わっていてそれまでfilterを使っていた記事の選択取得が出来ない。

> After updating to WordPress 4.7 WP REST api v2 endpoints stopped filtering. Any one else experiencing this? Any solutions?
> http://stackoverflow.com/questions/41124246/wp-v4-7-rest-api-v2-endpoints-stopped-filtering

彼も困っている

## 対処

対処前
`http://wocker.dev/wp/v2/posts?filter[category_name]=foo&_embed`
静的ページもカテゴリも何もかもfilterだった

対処後
`http://wocker.dev/posts?category=数字`
のように引数にカテゴリIDを与える

1.
`http://wocker.dev/wp-json/wp/v2/categories?slug=slug_name`
からカテゴリIDを取得し

2.
`http://wocker.dev/wp-json/wp/v2/posts?categories=4`
指定したIDのpostsを取得

slug指定方法が見つかっていないので現状こうしている。
パーマリンクを数字ベースにしても良いのであれば1省略出来そう



詳しくは
https://developer.wordpress.org/rest-api/reference/posts/


---

ということで数少ないWP+MVCフレームワーク実例であるwcus-demoテーマも修正しないと動かない
（underscore.jsのtemplate仕様変更による動かない問題もあったと記憶）
https://github.com/rachelbaker/wcus-demo
基本的な演算子と演算

##四則演算の演算子

>加算（たしざん）
減算（ひきざん）
乗算（かけざん）
除算（わりざん）

このほかに、割った余りを求める剰除算（モジュロ演算）があります。
四則演算は、数学（さんすう）の式と全く同じ使い方です。
唯一の違いは、乗算の(x)が(*)を使い、除算は(÷)ではなく(/)を使用します。

```java
result1 = x + y;    //たしざん
result2 = x - y;    //ひきざん
result3 = x * y;    //かけざん
result4 = x / y;    //わりざん
result5 = x % y;    //モジュロ演算
```
![スクリーンショット (34).png](https://qiita-image-store.s3.amazonaws.com/0/146678/d8e3a7d1-0d6b-6135-8ec8-bf1f5f082ce8.png)


intなどの整数型や浮動小数点型でも上のような計算も可能です。

##文字列の連結
"+"記号は加算だけでなく、文字列の連結をする事ができます。
"abc" + "de"とすると出力結果は"abcde"となります。

```java
String str = "こんにちわ" + "Qiita" + "さん";
System.out.println(str);
```

変数を連結する事ができます。
文字列のリテラルと変数を"+"を使って連結する事ができます。

```java
String name = "Qiita";
System.out.println("こんばんわ" + name + "さん");
```
また文字列連結演算子の"+"の最も重要な機能は文字列とあらゆる型のデータを連結できます。
この機能で連結した場合、どんな型のデータでも"String型"に変換して連結します。

##今までの動作を確認するプロジェクトを作成します。
eclipseは今回使用しません

```text
Operator/
    ├──Operator.java
```

```java:Operator.java
public class Operator{

	public static void main(String[] args){
		
		int x = 6;
		int y = 3;

		int result1 = 0;
		int result2 = 0;
		int result3 = 0;
		int result4 = 0;

		//四則演算の演算子
		result1 = x + y;	//たしざん
		result2 = x - y;	//ひきざん
		result3 = x * y;	//かけざん
		result4 = x / y;	//わりざん

		System.out.println( result1 + "=" + x + "+"+ y);
		System.out.println( result2 + "=" + x + "-"+ y);
		System.out.println( result3 + "=" + x + "*"+ y);
		System.out.println( result4 + "=" + x + "/"+ y);

		//文字列の連結
		String str = "こんにちわ" + "Qiita" + "さん";
		System.out.println(str);

		//文字列のリテラルと変数を"+"を使って連結
		String name = "Qiita";
		System.out.println("こんばんわ" + name + "さん");
	}
}
```

![スクリーンショット (36).png](https://qiita-image-store.s3.amazonaws.com/0/146678/cbf4b353-9b4d-d4c7-d3df-8c171c220eea.png)
AWS CodeBuildでElectronをビルドしてGitHubにReleaseを作る

tagをGitHubにpushしたらAWS CodeBuildでElectronのビルドが走ってGitHubのReleaseにzipをアップロードするところまでを自動化してみた。GitHubとCodeBuildをどうインテグレーションするのがいいかよくわからなかったのでAPI GatewayとLambdaでつないだ。

![Kobito.tS0K7K.png](https://qiita-image-store.s3.amazonaws.com/0/12262/76b4e024-748e-b25e-887f-5c3571a94080.png "Kobito.tS0K7K.png")


コードはここに。

https://github.com/hokaccha/electron-build-test

## Electronのビルド

まずはElectronをビルドするビルドスクリプトを書く。

```sh:build.sh
#!/bin/sh

set -e

OUT_DIR=./dist

rm -rf $OUT_DIR

./node_modules/.bin/electron-packager . Test \
--platform=darwin \
--arch=x64 \
--overwrite \
--app-version=$BUILD_VERSION \
--build-version=$BUILD_VERSION \
--out=$OUT_DIR

cd dist
zip -qry Test-$BUILD_VERSION-darwin-x64.zip Test-darwin-x64
```

これで次のようなコマンドを実行してzipファイルを作れるようにしとく。

```
$ BUILD_VERSION=v1.0.0 ./build.sh
```

次にAWS CodeBuildでprojectを作って、`buildspec.yml`をこんな感じで書いてAWSコンソールとかからビルド実行すればビルドできるようになる。環境変数は実行時に指定できる。

```yaml:buildspec.yml
version: 0.1
phases:
  install:
    commands:
      - npm install
  build:
    commands:
      - /bin/sh ./build.sh
```

## GitHubのWebhookでCodeBuildをキックする

次にLambdaにfunctionを作る。

```javascript
exports.handler = (event, context, callback) => {
  var AWS = require('aws-sdk');
  var codebuild = new AWS.CodeBuild();
  var body = JSON.parse(event.body);
  if (body.ref_type !== 'tag') {
    callback(null, { statusCode: 200 });
    return;
  }
  codebuild.startBuild({
    projectName: 'electron-build-test',
    sourceVersion: body.ref,
    environmentVariablesOverride: [
      { name: 'BUILD_VERSION', value: body.ref },
      { name: 'GITHUB_ACCESS_TOKEN', value: process.env.GITHUB_ACCESS_TOKEN },
    ],
  }, function(err) {
      callback(err, { statusCode: err ? 500 : 200 });
  });
};
```

やってるのはGitHubのWebhookを受けて、CodeBuildのstartBuildを呼んでるだけ。ここでGitHubのアクセストークンをLambdaの環境変数に指定しとく。最初CodeBuild側に指定してて、トークンが反映されなくてはまったけど、呼び出し側で`environmentVariablesOverride`を指定した場合マージされずに上書きされるからだった。

次にAPI Gatewayで適当なパスのPOSTメソッドのエンドポイントを作ってこのLambda関数につなぐ。API Gatewayはそれだけ。作ったエンドポイントをGitHubのWebhookに設定すれば終わり。

## Releaseを作る

最後にGitHubのAPIを使ってpushされたtagでReleaseを作って、zipを添付する。

リリースのスクリプトはこんな感じ。

```sh:release.sh
#!/bin/sh

set -ex

FILE_NAME=Test-$BUILD_VERSION-darwin-x64.zip
FILE_PATH=./dist/$FILE_NAME

UPLOAD_URL=`curl -s -X POST \
-H "Authorization: token $GITHUB_ACCESS_TOKEN" \
-d "{\"tag_name\":\"$BUILD_VERSION\",\"name\":\"$BUILD_VERSION\"}" \
https://api.github.com/repos/hokaccha/electron-build-test/releases | \
jq -r '.upload_url' |
sed -e 's/{?name,label}$//g'
`
curl --data-binary @$FILE_PATH -H "Content-Type: application/zip" -H "Authorization: token $GITHUB_ACCESS_TOKEN" $UPLOAD_URL?name=$FILE_NAME
```

buildspec.ymlでjqをインストールしたりrelease.shを実行する設定を入れる。

```yaml:buildspec.yml
version: 0.1
phases:
  install:
    commands:
      - apt-get update -y
      - apt-get install -y jq
      - npm install
  build:
    commands:
      - /bin/sh ./build.sh
  post_build:
    commands:
      - /bin/sh ./release.sh
```

これでtagを打ってpushすれば自動でビルドされてリリースが作られる。こんな感じ。

https://github.com/hokaccha/electron-build-test/releases/tag/v1.0.0

## 感想

けっこうめんどいので小さいプロジェクトだったらCircleCIでいいんじゃないかな。
「Spark MLlibでリコメンドエンジンを作った話」を話してきました


表題のとおりです。

[市ヶ谷Geek★Night#11【Spark勉強会】ChristmaSpark 〜マサカリでツリーを飾ろう〜](https://ichigayageek.connpass.com/event/45925/)というイベントで登壇してきました。

お話しした内容はこちらです。

<div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/uryyyyyyy/spark-mllib-70290015" title="Spark MLlibでリコメンドエンジンを作った話" target="_blank">Spark MLlibでリコメンドエンジンを作った話</a> </strong> from <strong><a target="_blank" href="//www.slideshare.net/uryyyyyyy">Koki Shibata</a></strong> </div>

## 技術的な話

用いた技術は、

- Spark(1.6 -> 2.0)
- MLlib
- EMR
- RedShift
- Finagle
- netlib-java
- ElastiCache (Memcached)

あたりが挙げられます。

手順としては、

1. 生ログをRedShiftで前処理してS3に保存
2. SparkがS3からデータを読みモデル生成
3. モデルをS3にバイナリ出力
4. 推薦サーバがモデルを読み込み、リアルタイム推薦 or Cacheから読む
5. 結果が多少バラけるように独自ロジックを加えて推薦サーバの出力とする。

という形になります。

Spark周りの動かし方やトラブルシューティングについてはここにメモしてあります。（この記事から他の記事へたくさんリンクが出ています。）
http://qiita.com/uryyyyyyy/items/f8bb1c4a4137e896de7f

## 登壇してみての話

この手の技術は前提知識の共有が難しいですね。。。
参加者アンケートの結果を見せていただいたのですが、「難しい」「そもそもリコメンドエンジンがわからない」などの声がありました。
イベント告知直後にはおおまかに話す内容と前提知識をお伝えしていればよかったのかもと思いました。


また、アンケートの中に「スライドの字が小さくて見にくい」という声もありました。
ネット上に公開しておいても理解しやすいように文字を多めに書きましたが、
プロジェクタに映すにしては文字のサイズが小さかったようです。
また、フォント字体も細身のものを選んでしまっていて、それも読みにくさの一因だったようです。
ついでに考察すると、黒ベースに白字よりも、白ベースに黒字の方がプロジェクタ映えするように思いました。
オススメの文字サイズ・フォント・色・背景色があれば教えていただきたいです。

## 終わりに

Sparkはそのとっつきにくさから、「専門性のもとめられる難しいもの」と思われがちですが、何度か動かしてみると意外と簡単なことに気づくはずです。
（とりあえずJVMのメモリ管理と並列処理とYARNの概要とSparkのアーキテクチャを理解すれば作るのに困らないです。）

EMRを使うと小規模からでも手軽に始められるので、ぜひこの機会に試してみてください。
（もしわからないことがコメント頂ければ答えられると思います。）
炎の型工房 火の型 20日目 : Dartを始めよう!! Scratchと比較してみよう

[<ruby>炎<rt>ほのお</rt></ruby>の<ruby>型<rt>かた</rt></ruby><ruby>工房 <rt>こうぼう</rt></ruby>ScratchとDartでゲームプログラム<ruby>入門<rt>にゅうもん</rt></ruby> Advent Calendar 2016](http://qiita.com/advent-calendar/2016/firefirestyle-studio)
の<ruby>記事<rt>きじ</rt></ruby>です


# Scratchと<ruby>比較<rt>ひかく</rt></ruby>してみよう

```
main(List<String> args) {
  print('Dart Love');
}
```

を、Scratchと<ruby>比較<rt>ひかく</rt></ruby>してみましょう。

<img width="373" alt="v001.png" src="https://qiita-image-store.s3.amazonaws.com/0/54192/3a670f37-4e4a-725d-cae6-5ca9698a7072.png">


- 「<ruby>旗<rt>はた</rt></ruby>がクリックされたとき」と main(List<String> args) {} は<ruby>同<rt>おな</rt></ruby>じよなもの  
  アプリの<ruby>起動時<rt>きどうじ</rt></ruby>に<ruby>呼<rt>よ</rt></ruby>ばれます。
- 「xxxと<ruby>言<rt>い</rt></ruby>う」とprint('xxx'); は<ruby>似<rt>に</rt></ruby>たようなもの  
  <ruby>文字<rt>もじ</rt></ruby>を<ruby>表示<rt>ひょうじ</rt></ruby>します。

# argsとは<ruby>何<rt>なに</rt></ruby>でしょうか?
Dartでは、アプリ<ruby>起動時<rt>きどうじ</rt></ruby>に<ruby>文字列<rt>もじれつ</rt></ruby>を<ruby>渡<rt>わた</rt></ruby>す<ruby>事<rt>こと</rt></ruby>ができます。
コードを<ruby>書<rt>か</rt></ruby>いて、<ruby>試<rt>ため</rt></ruby>してみましょう。

#### 1. <ruby>以下<rt>いじょう</rt></ruby>のようなコードを<ruby>書<rt>か</rt></ruby>く

```
main(List<String> args) {
  print('Dart Love ${args}');
}
```

#### 2. コマンドラインから<ruby>実行<rt>じっこう</rt></ruby>してみよう!!
```
c:\tools\dart-sdk-1.21\bin\dart.exe .\bin\main.dart test01 test02
```  

Dart Love [test01,test02]
と<ruby>表示<rt>ひょうじ</rt></ruby>されましたね!!


## Thanks

ここまで、<ruby>読<rt>よ</rt></ruby>んでくれてありがとう!!

では、<ruby>次回<rt>じかい</rt><ruby><ruby>会<rt>あ</rt></ruby>えることを、<ruby>楽<rt>たの</rt></ruby>しみにしています。

ではでは
Arduinoで割り込みとI2Cを併用する

普段はスリープして，ボタンによる割り込みで起動するLCDディスプレイをArduinoで作ろうとした際に困ったことと対処法をログしておきます．

## 使用機材

- Arduino Uno
- [I2C液晶(秋月電子)](http://akizukidenshi.com/catalog/g/gP-05693/)
- [I2Cレベル変換](http://akizukidenshi.com/catalog/g/gM-05452/)
 - Unoの出力が5Vで，I2C液晶が3.3VのI2C利用のため．
- I2C液晶用ライブラリ "I2CLiquidCrystal"
 - 参考: [ストロベリー・リナックス/秋月電子のI2C液晶/OLEDほかをArduinoで使う](http://n.mtng.org/ele/arduino/i2c.html) 

## 配線
![I2C_interrut.png](https://qiita-image-store.s3.amazonaws.com/0/96281/8490bd2f-ec71-25af-e810-0330295d1612.png)
(雑ですみません…)

## 使用機能について

#### attachInterrupt( digitalPinToInterrupt(_pinNo_) , _func_ , _mode_ )
digitalピン入力より割り込み処理し，関数を実行します．

- __pinNo__: digitalの使用ピン番号．Arduino Unoでは2か3しか使えない．
- __func__: 割り込みで実行する関数
- __mode__: 割り込み処理するデジタル入力の種類．
 - RISING
 - FALLING
 - CHANGE




## 問題点
ボタンを押したらLCDの表示を変えようと思うと，一見以下のコードを書いたらよさそうに思います[^1]

```cpp:誤例.ino
#include <I2CLiquidCrystal.h>
#include <mglcd.h>
I2CLiquidCrystal lcd;

void func() {
  lcd.print("intterupted");
}

void setup() {
  lcd.begin(16,2);
  pinMode(2,INPUT);
  attachInterrupt(digitalPinToInterrupt(2),func,FALLING);
  interrupts();
}

void loop() {
}
```

しかしボタンを押してもLCDには何も表示されません．

##対処
I2Cのライブラリ(wire.h)は割り込みを用いており，割り込み内で割り込み発動，みたいなことになり，ハングしているのでは，と考えています．
対処としては，状態変数を用いてfunc()外でlcdインスタンスをいじるようにすれば問題ないようです．

```cpp:正.ino
#include <I2CLiquidCrystal.h>
#include <mglcd.h>
I2CLiquidCrystal lcd;

volatile bool state=false;

void func() {
  state = true;
}

void setup() {
  lcd.begin(16,2);
  pinMode(2,INPUT);
  attachInterrupt(digitalPinToInterrupt(2),func,FALLING);
}

void loop() {
  if(state){
    lcd.print("interrupted");
  }
  delay(100);
}
```

I2Cが割り込みを用いているため，どこかで`nointerrupts()`関数で割り込み禁止しても同様に誤動作します．


[^1]: 他のコードではよく見る`interrupt.h`をインクルードしていませんが，`Arduino.h`ですでに記述されているので実際不要です(Arduino 1.6現在)．
GNU Emacs 25.1 for Windows の IPv6対応パッチ

# mingw32/MSYS2ビルドはデフォルトではIPv6未対応

Windows版のEmacsには様々なパッチと、パッチの数だけの多種のバイナリが配布されているが、[本家のリファレンスである MSYS2 (64ビット)で構築したバイナリ](https://www.gnu.org/software/emacs/download.html)はIPv6が無効になっていて、`(open-network-stream ...)` 関数などでIPv4ソケットしか作れない。IPv6 only + NAT64環境で、elispアプリが使えないため気づいた。

本家のリファレンスのほか、mingw32/MSYS2環境でビルドされているほとんど大多数のWindows版EmacsバイナリではIPv6が使えない。

# IPv6を有効化するパッチ

パッチのダウンロード: [emacs-25.1-mingw32-ipv6.diff](https://gist.github.com/ip6k/f331817c37d47f47c969d0160c2d1e1e)

変更点

- ./configure が ws2_32.{lib,dll} にある getaddrinfo(), gai_strerror() を検出できないのでチェックルールを書き足す
- Emacs for Windowsでソケット(WinSock2)関係の関数は ws2_32.dll から直接エントリポイントを読み取ってコールする作りになっているので該当処理を書き足す

# その他の有用なパッチとビルド手順

実用的に使うためには、それぞれ欲しい機能を取り込んでビルドする必要があるが、よく知られたパッチとビルド手順はここで一通りまとめられている。

- [https://gist.github.com/rzl24ozi/README.txt](https://gist.github.com/rzl24ozi/b4f4b4d729035d3c439b)
vimを1年使って、思った使いやすい設定や多分有名じゃないPluginなど

#vimを1年使って、思った使いやすい設定や多分有名じゃないPluginなど

この記事は [Vim Advent Calendar 2016](http://qiita.com/advent-calendar/2016/vim2) の23日目の記事です

##まえがき
ちょっとした自己紹介からしていこうと思います。
__別にどうでもいいよって人は飛ばしてください。マジでどうでもいいので__

以前[0から始めるVim講座](http://qiita.com/JpnLavender/items/fabcc79b4ab0d52e1f6d)と言う記事を書いて、何故かバズった人です
>ちなみにどうでもいいですが。(初めてQiita&MarkDown)で書いた記事でした

##1年間vimを使い続けた感想
まず。率直に意見をいうと、vimをカスタマイズしすぎて他のAtomやら
何やらに手を出せなくなりました。
正直使い始めて1週間なんて、こんなの糞Editerやんけってずっと言ってましたし
思ってたんですが。最近はもう。Vimなしじゃ生きられなくなってもうやばいですね

##おすすめPlugin&設定など

###おすすめPlugin

####clever-f.vim
これは、vimの標準搭載されてる、機能なのですが。
行に対して検索をかけて、その行に飛ぶと言う機能なのですが。
例: `fg` とすると、例えば `asdfghjklg`という文字列が有ったときに
最初の`g`には飛ぶのですが、次の`g`に飛ぶにはもう一度`fg`と入力しないといけないので
正直使う機会がないと言うか、利便性が悪くて知ってても使うのがめんどくさい
のでコレを解決するclever-f.vimってPluginが有りまして、コレはその`fg fg fg fg fg`とかやらなきゃいけない
のを、`fgfffffffff`みたいな感じで連続的に`f`連打ができるようになるって言うPluginです
ちなみに`Fg`とやるとカーソル以前(左)の検索をかけることができます

![fffff.gif](https://qiita-image-store.s3.amazonaws.com/0/105255/0f3e3fec-66f3-a3d2-d681-cf95622cc1c0.gif)

>  
追記: `fg`とやったあとに `;`で次を探しに行けるとのことをコメントで教えていただきました 
`fg;;;;;`とか`fg,,,,,,`やれば移動できるみたいですね。><
ただ、コレは標準の機能で、でもに有るように、検索をかけた文字を赤くするとかの機能は備わっていないので
ハイライトがなくても良いって方はわざわざ入れる必要もないですね

####vim-gothrough-jk
これは、vimで`10j`とかやって、10行下にカーソルを移動するって割りとめんどくさいじゃないですか。なので、5回連続
`j`or`k`を連打(移動)させると6行目から5行間隔(`j5`と同じ)動きを、`j`だけでやってくれるというPluginです

![jk.gif](https://qiita-image-store.s3.amazonaws.com/0/105255/2670724c-50fa-1c64-6635-6071f63ec8a7.gif)

####vim-bracketed-paste
このPluginは、vim上のプロジェクトなどに、コピペするときにvimのAutoIndentが働いて
ふぁああああああああああああああああああああああああああああ
ってなるのを自動で防いでくれるというものです
`:set paste`とかやると、AutoIndentが働かなくなるので、それでも良いのですが
なんか、いちいち設定するのもめんどくさいですし、どうせ有るなら入れておいてもいいでしょってことで
紹介しました

![paste.gif](https://qiita-image-store.s3.amazonaws.com/0/105255/5b4a82c4-67bd-555d-4fbc-70fdcad391a6.gif)

####vim-quickrun
割りと有名なPluginだと思うんですが、vim上でrubyやgoなどの標準入力などがない場合
(出力だけしてくれる場合)ならその出力結果を`\r`で実行してvim上に画面分割して表示してくれる
というPluginです。

![quick_run.gif](https://qiita-image-store.s3.amazonaws.com/0/105255/8261f597-963e-3fde-3e8d-d26977a18a3b.gif)

###個人的おすすめ設定など
vimはキーバインド1つ1つ好きなように個人で変更できるとこをが魅力的なのですが、
個人的に使いやすいなあっと思って、設定しているキーバインドなどを紹介します

####tabでインデント
vimで全選択して、インデントを修正する場合僕の場合`ggVG=`といちいち入力していたので
あまり使っていなかったTabKeyに`ggVG=`を指定することで、tab一発でインデントを修正する事ができます

`noremap <Tab> ggVG=`

#####jx2回押しで、INSERTMODEを出る
いちいち、ESCまで、指を運ぶのは効率的にもVimを使ってる上でももったいないので
`jj`と入力して、INSERTMODEを出るようにしておくことによってTouchBarをお使いの方も
ESC(jだけど)を押した感覚が味わえるわけです
>(C-c)でも良いですが

`nnoremap <silent> jj <ESC>`

#####ESCx2で保存or保存して閉じる
上の設定にして、ESCを使わなくなったら、ESCに`:w`を割り当てることで、保存を実行してくれるので
いちいち':w'とかやる手間が省けるわけですね。本当に`j`しか使わなくなったら、`:wq`や`:xa`とかに
しておくことで、開いているファイルごと閉じれるので、最後ぐらいESCでかっこよく終わろうぜ！って言う
感じですね！

## 最後に
Vim Advent Calendarに投稿したのですが、なんか記事書いてるだけで緊張しちゃいますね(えへへ
あまりいい記事に仕上げられなかった気もしますが最後まで読んでいただきありがとうございました
僕のvimrcなどは[こちらgithub](https://github.com/JpnLavender/dotfiles/tree/master/.vim)にあげてあります
Raspberry Pi 3のセットアップメモ

Raspberry Pi 3 を外付けディスプレイ、キーボード、マウスなしでセットアップした際のメモ

## microSDカードにrasbianを焼く

ググるとたくさん出てくるのでそれを参考にmicroSDカードにrasbianを焼く

### sshdをOS起動時に有効にするには
Raspbian 2016-11-25からデフォルトでsshdが起動しないためmicroSDカードの直下に ssh という空ファイルを置く必要がある

```bash

$ cd /Volumes/boot
$ touch ssh
```

## Raspberry Pi 3 起動
microSDカードをRaspberry Pi 3に刺して、LANケーブルと電源を刺すとsshdが起動した状態でRasbianが立ち上がる

## 起動後
まずはアップデート

```bash
$ sudo apt-get update -y
$ sudo apt-get dist-upgrade -y
```

## vimのインストール
vimmerなので

```bash
$ sudo apt-get install -y vim
```

## 初期設定

```bash
$ sudo raspi-config
```
 
  - Expand Filesystem を実行して、SD カードの余り領域をシステムが使えるように割り当ててもらう
  - Change User Password で、初期ユーザー pi のパスワードを適宜変える
  - Localisation Optionsで、日本語文字コード ja_JP.UTF-8 UTF8 を追加。デフォルトのロケールも同じに
  - Localisation Optionsで、Time zone を Tokyo/Asia に

## ローカルIPの固定
```bash
$ vim /etc/dhcpcd.conf
```
下記を追記

```bash
interface eth0
static ip_address=<<固定したいIPアドレス>>
static routers=<<ルーターのIPアドレス>>
static domain_name_servers=<<ルーターのIPアドレス>>
```

### 再起動でローカルIPが有効になる
```bash
$ sudo reboot
```


あとは煮るなり焼くなり好きにどぞ
Surfaceシリーズ背面ロゴの歴史と一覧

Microsoft Surfaceシリーズは本体背面（キックスタンド）に大きくロゴがあしらわれていますが、Surface 3 / Pro 4以降の正方形のMicrosoftロゴ（HoloLensやLumiaと共通）について「Windowsロゴ」と紹介する記事が非常に多いので、勝手ながらチートシートを作りました。

|   | Windowsロゴ | Surfaceロゴ | Microsoftロゴ |
|:--|:-:|:-:|:-:|
| 画像 | ![logo01.png](https://qiita-image-store.s3.amazonaws.com/0/39289/7b5cb53c-e7b5-6273-b906-e3e8157f63e2.png) | ![logo02.png](https://qiita-image-store.s3.amazonaws.com/0/39289/3256d597-1660-f3da-2cb8-0b2e9b108d99.png) | ![logo03.png](https://qiita-image-store.s3.amazonaws.com/0/39289/9549f6ff-f7ca-5ef3-bf5d-6e03708c5085.png) |
| 特徴 | パースの効いた長方形<br>（横向き台形） | “Surface”の文字 | 正方形 |
| オリジナルの配色 | 青 | 水色 | 4色+グレー |
| 加工 | 単色グレー | 単色グレー | 鏡面加工 |
| RT | [PC Watch](http://pc.watch.impress.co.jp/img/pcw/docs/591/960/html/860.jpg.html) |   |   |
| Pro | [PC Watch](http://pc.watch.impress.co.jp/img/pcw/docs/601/332/html/703.jpg.html) |   |   |
| 2 |   | [PC Watch](http://pc.watch.impress.co.jp/img/pcw/docs/622/092/html/h03.jpg.html) |  |
| Pro 2 |   | [PC Watch](http://pc.watch.impress.co.jp/img/pcw/docs/621/158/html/h02.jpg.html) |   |
| Pro 3 |   | [PC Watch](http://pc.watch.impress.co.jp/img/pcw/docs/658/480/html/11.jpg.html) |   |
| 3 |   |   | [PC Watch](http://pc.watch.impress.co.jp/img/pcw/docs/706/405/html/ph15.jpg.html) |
| Pro 4 |   |   | [PC Watch](http://pc.watch.impress.co.jp/img/pcw/docs/740/844/html/ph04.jpg.html) |
| Book |   |   | [PC Watch](http://pc.watch.impress.co.jp/img/pcw/docs/724/460/html/05.jpg.html) |
| Studio |   |   | [PC Watch](http://pc.watch.impress.co.jp/img/pcw/docs/1026/983/html/09.jpg.html) |
SwiftとObjective-Cの間に相互互換性を保ったまま書くとコンパイル時間が異常に遅い

# 前書き

最近Objective-CのプロダクトにSwiftを導入するようになりました。Swiftの移行の方針として、**SwiftとObjective-Cの間に相互互換性**を保ったまま移行しようという話でチームはまとまりましたが、落とし穴があったので共有しておきます。

というのも**コンパイル時間が遅い**のです。どうも差分ビルドがちゃんと働いていないようで、何が原因か調べてみました。

# 原因

## `ProductModuleName-Swift.h` が Precompiled Header でインクルードされている

通常Objective-CからSwiftのクラスを利用しようとする場合、自動生成されるヘッダー(`ProductModuleName-Swift.h`)をインクルードして使用する。ちなみにこのヘッダーはSwiftで書いたクラスへのインターフェースである。

以下のような`TestClass`を定義すると

```swift 
class TestClass: NSObject {
    var name: String = ""
    var children = [String]()
}
```

自動生成されるヘッダーは以下のようになっている。

ProductModuleName-Swift.h

```objc
SWIFT_CLASS("_TtC11ProductModuleName19TestClass")
@interface TestClass : NSObject
@property (nonatomic, copy) NSString * _Nonnull name;
@property (nonatomic, copy) NSArray<NSString *> * _Nonnull children;
@end
```

ここからが本題だが、私が開発しているプロダクトでは便利だからという理由で、**`ProductModuleName-Swift.h`をPrecompiled Header`ProductModuleName.pch`でインクルードしてしまっていた**。

その結果Swiftのコードを書き換えると、Precompiled Headerに依存するファイル（つまりは全Objective-Cのファイル）を再コンパイルしだすという恐ろしい現象に陥ってしまっていた。

# 考察

今回の問題、例えば個別のbjective-Cの実装ファイルにインクルードするような話で済むような影響範囲だったら、あまり問題ではないのだが

Service.swift
Objective-CとSwiftを含めた多くの他クラスで使用する

```Swift
class Service: NSObject {
}
```

SampleView.swift
一部のViewControllerのクラスで使用する

```Swift
class SampleView: UIView {
}
```

例えば上のようなSwiftのクラスがあったとすると、このようにヘッダーファイルに書き出される。

ProductModuleName-Swift.h

```objc
SWIFT_CLASS("_TtC11ProductModuleName1Service")
@interface Service : NSObject
@end

SWIFT_CLASS("_TtC11ProductModuleName9SampleView")
@interface SampleView : UIView
@end

```

普通Swiftオンリーで書いていれば`SampleView`クラスを修正した際に、`Service`クラスには全く影響などない。しかし、**同じ`ProductModuleName-Swift.h`に吐き出される**ので、`Service`クラスに依存するファイルまで全て再コンパイルしてしまう。

[Using Swift with Cocoa and Objective-C (Swift 3.0.1)](https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html)を見ても以下のような記述が書いてあって、個別のクラスごとヘッダーをExportするような方法は書いてないし、これって解決できない問題なんですかね？

> When you import Swift code into Objective-C, you rely on an Xcode-generated header file to expose those files to Objective-C. This automatically generated file is an Objective-C header that declares the Swift interfaces in your target. It can be thought of as an umbrella header for your Swift code. The name of this header is your product module name followed by adding "-Swift.h". (You’ll learn more about the product module name later, in Naming Your Product Module.)

これが今のところ解決できない問題ならば、**Swiftでモデルやサービスクラスのような上位階層のクラスをSwiftで書き直してそれをObjective-Cで利用するということが難しくなってしまう**。

SwiftとObjective-Cに相互の互換性を保ったまま、開発することは難しいのだろうか？
炎の型工房 火の型 19日目 : Dartを始めよう!! コマンドラインから実行してみよう

[<ruby>炎<rt>ほのお</rt></ruby>の<ruby>型<rt>かた</rt></ruby><ruby>工房 <rt>こうぼう</rt></ruby>ScratchとDartでゲームプログラム<ruby>入門<rt>にゅうもん</rt></ruby> Advent Calendar 2016](http://qiita.com/advent-calendar/2016/firefirestyle-studio)
の<ruby>記事<rt>きじ</rt></ruby>です


# コマンドラインから<ruby>実行<rt>じっこう</rt></ruby>してみよう

<ruby>今<rt>いま</rt></ruby>、<ruby>作成<rt>さくせい</rt></ruby>しているのはコマンドラインアプリです。

コマンドプロンプトから<ruby>実行<rt>じっこう</rt></ruby>できます。

<ruby>試<rt>ため</rt></ruby>してみよう



　　
### プロジェクトフォルダーの<ruby>場所<rt>ばしょ</rt></ruby>を<ruby>調<rt>しら</rt></ruby>べる

1. プロジェクトにカーソルを<ruby>合<rt>あ</rt></ruby>わせて、<ruby>右<rt>みぎ</rt></ruby>クリックする。  
<img width="336" alt="v001.png" src="https://qiita-image-store.s3.amazonaws.com/0/54192/9689f6ec-7baf-030d-139a-8c0386827a76.png">
 
2. Open Module Settings をクリック  
<img width="336" alt="v002.png" src="https://qiita-image-store.s3.amazonaws.com/0/54192/2b684da4-59d6-76f2-9a04-06b4fa71eb51.png">

3. プロジェクトフォルダーのパスが<ruby>表示<rt>ひょうじ</rt></ruby>されます
<img width="336" alt="v003.png" src="https://qiita-image-store.s3.amazonaws.com/0/54192/bccbfcdf-b9fc-5b28-e92e-c46bb56b84fc.png">


### コマンドプロンプトを<ruby>開<rt>ひら</rt></ruby>く(Windows10の場合)
1. コマンドで検索する  
<img width="336" alt="v004.png" src="https://qiita-image-store.s3.amazonaws.com/0/54192/f058e919-128d-07ca-8ca4-2105c8faada8.png">

2. コマンドプロンプトをクリック  
<img width="336" alt="v005.png" src="https://qiita-image-store.s3.amazonaws.com/0/54192/1d066884-2886-09db-de73-16bb6144db4b.png">


### プログラムを<ruby>実行<rt>じっこう</rt></ruby>する
1. プロジェクトフォルダー<ruby>配下<rt>はいか</rt></ruby>に<ruby>移動<rt>いどう</rt></ruby>する  
```
cd C:\Users\USER\IdeaProjects\helloworld
```
2. <ruby>実行<rt>じっこう</rt></ruby>してみる  
```
c:\tools\dart-sdk-1.21\bin\dart.exe .\bin\main.dart
```

Dart Love と<ruby>表示<rt>ひょうじ</rt></ruby>されました。



## Thanks

ここまで、<ruby>読<rt>よ</rt></ruby>んでくれてありがとう!!

では、<ruby>次回<rt>じかい</rt><ruby><ruby>会<rt>あ</rt></ruby>えることを、<ruby>楽<rt>たの</rt></ruby>しみにしています。

ではでは
Swiper2.7.6 で stopAutoplay が効かないバグを解消

Swiper はよくあるスライダープラグインのひとつで、よく利用しています。
ただし、現時点で最新の Swiper3.x 系は IE11 以降対応なので、
仕事ではひとつ前の世代で IE8 以降対応の Swiper2.x 系を使う事があります。

Swiper公式サイト
http://idangero.us/swiper/
Swiper2.x系(GitHub)
https://github.com/nolimits4web/Swiper

ところが、2.x 系の最終版 Swiper2.7.6 には自動スライド機能まわりにバグがあり、
自動スライド停止メソッドの`stopAutoplay()`が効かなくなる事があります。

# 解決方法
ダウンロードしてきた idangerous.swiper.js を修正します。
1332行目で`setTimeout`してますが、その直前で`clearTimeout`してあげるだけ。

```JavaScript:idangerous.swiper.js
function autoplay() {
    clearTimeout(autoplayTimeoutId); // Bugfix
        autoplayTimeoutId = setTimeout(function () {
            if (params.loop) {
```

# 発生条件
パラメータ```autoplay: true```を入れて Swiper を実装したあと、
自動、手動に関わらずスライド2周目以降（左にスライドしての2周目判定も含む）で
1周目では効いてたはずの`stopAutoplay()`が効かなくなる。

自動スライドをコントロールする必要があるシーン。
例えば、スライドにYouTube動画を含めて、そのスライドになったら自動スライド停止＆動画再生し、
再生終了後、もしくは再生停止すると自動スライド再開して...とかやってると、キレイにハマります。

# 原因(推測)
自動スライドは連続的な`setTimeout`のコンボで実装しているようです。
ループ処理か`startAutoplay()`あたりで、`autoplayTimeoutId`のクリア処理不足があり、
一人歩きを始めた幽霊`setTimeout`からのコンボが別軸で走ってしまい止められない的な...。

`setInterval`や`setTimeout`は幽霊化しやすい。
変数に代入しないだけで、止められない子の出来上がり。
100人に聞いたみんなの.flake8

PythonのLintで使われる、flake8の設定ファイル.flake8を調べてみました。
例外にするルールなどが書かれていて、みんなLintのどこに不満を持つかがわかります。
やってみてわかったことですが、**みなさん結構無法者ですね**。

## 集計条件
GitHubで公開された.flake8を100こ抽出しました。
サンプル数が少ない点は認めていて、今後頑張ろうかと思います。

## ignore
ルールの例外です。
例外ルールは一人で同じものを記述しているかもしれませんが、
そういうのは考慮しないで集計しています。

#### 1位 18票
E501 line too long
でましたね。

#### 2位 13票
E402 module level import not at top of file
なるほど。

#### 3位 7票
E128 continuation line under-indented for visual indent
これはたぶん、自動インデントの赴くままに書きたいというやつですね。

以下、得票数のみ記載です。

```
5票 E111,E226
4票 E114,E121,F401
3票 D203,E133,E241,E251,E302,F403
2票 E123,E125,E126,E221,E228,E261,E731,I100,N802,N803,W191,W391,W503
1票 C901,D100,D101,D102,D103,D104,D105,D200,D204,E113,E12,E122,E129,E201,E202,E203,E211,E222,E231,E242,E266,E303,E305,E4,E41,E5,E702,E711,E712,E721,F811,H306,I201,Q000,W292
```

## max-line-length

一行あたりの文字数です。

```
11票 100
8票 160
8票 120
6票 80
6票 99
5票 119
3票 200
2票 110
1票 130
1票 92
1票 82
```

1位が11票ですが、E501が18票入っているので、やはり治安がない感じがしますね。

## 苦労話

GitHubのAPIでカッコよくささっと集計しようと思ったんですが、ダメでした。まず、ファイル名だけでいい感じにサーチすることができなかった。`code?q=filename:.flake8`でいけると思いきや、`+repo:user_name/repo_name`を指定しないとだめ。
仕方がないので、repo名を持ってくる必要があり、`dotfiles`で検索をかけてみました。`repositories?q=dotfiles`をうまくやれば、`code?`で`repo`が指定できます。しかし問題が。dotfilesだけでも、7万件くらいあったんですが、どう頑張っても1000個以上のデータはAPIではとってこれないんですね。TOKENとかゲットして、リクエスト制限はクリアしたんですが、それでもダメ。
じゃあ1000個だけ取ればいいやって思ったんですけど、最初の1000人は誰も.flake8を持っていなかった。
**filenameとrepoの組み合わせではサーチできない**、というのが痛すぎる。。
しかたがないので、おなじみのWEBのGitHubで、検索ボックスに`filename:.flake8`を入れて、でてくるrepoを心を込めて100件コピペし、それをキーにAPIで`code?q=`で検索してなんとかしました。
なお、ファイルの`url`をゲットして取得したAPIのレスポンスから、さらに`download_url`を取得してリクエストを投げると、レスポンスが.flake8の中身になっているので楽チンでした。
また、TOKENとかをゲットしても高速にサーチを繰り返すと403が結構でるので、その辺のハンドリングも必要です。
この辺のコードはいつか[どこか](my repository on GitHub, maybe.)で公開します。

## 結論

とにかく、文字数制限はみんなに嫌われているような気がする結果です。
`ignore = E501`と`max-line-length`を同時に設定する人はいないので、
合計すると70%の人が文字数制限をよくないと思っています。
100までは自制心がある設定だとしても、約半数の人はそれを超えた設定をしている。

個人的な見解ですが、この結果を見て、エンジニアの良し悪しをどうこう言うのはダメな考え方だと思っていて、むしろみんなこういう設定を積極的にしているんだ、ちゃんと設定すればいいじゃないか、みんなで決めたルールならいいんだ！という感じで勇気をもらうのが良いと思います。


<font color='f0f0f0'>いつか、もっとたくさんサンプルをささっととるコードを書きたいです。</font>
cron ファイルと各ユーザーの crontab

## cron ディレクトリー
パッケージインストールなどで配置される cron ファイルは以下のディレクトリーにあることが多い。

```bash
find /etc/cron* -type d
```
```text:出力例
/etc/cron.d
/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly
```

## cron ファイル
既に配置されているファイルは以下のように確認できる。

```bash
find /etc/cron* -type f | xargs ls -l
```
```text:出力例
-rw-r--r--. 1 root root 128  4月  1  2016 /etc/cron.d/0hourly
-rwx------. 1 root root 219 11月  6 07:55 /etc/cron.daily/logrotate
-rwxr-xr-x. 1 root root 618  3月 18  2014 /etc/cron.daily/man-db.cron
-rw-------. 1 root root   0  4月  1  2016 /etc/cron.deny
-rwxr-xr-x. 1 root root 392  4月  1  2016 /etc/cron.hourly/0anacron
-rw-r--r--. 1 root root 451  6月 10  2014 /etc/crontab
```

## 各ユーザーの crontab の配置場所
各ユーザーの crontab ファイルは以下のディレクトリーに配置される。

```bash
ls -l /var/spool/cron
```
```text:出力例
-rw-------. 1 root root 27 12月 22 19:14 root
```

## 全ユーザーの crontab 一括出力

```bash
for user in $(cut -f1 -d: /etc/passwd); do echo [$user]; crontab -u $user -l 2>/dev/null; done
```
```text:出力例
[root]
1 * * * * echo "cron test"
[bin]
[daemon]
[adm]
[lp]
[sync]
[shutdown]
[halt]
[mail]
[operator]
[games]
[ftp]
[nobody]
[systemd-bus-proxy]
[systemd-network]
[dbus]
[polkitd]
[tss]
[sshd]
[postfix]
[chrony]
[takahara]
[apache]
[mysql]
```