OmniAICreator/Qiita-1.07M huggingface dataset:
OSM日本の今後の大規模編集の可能性2016


いいだです。

来年のことをいうと鬼が笑うといいますが、そろそろ年の瀬の足音が聞こえる時節となりました。
ここでは、来年以降に実施できるかもしれないインポートや、大規模編集の元データとして使えるかもしれないものを挙げてみます。

### e-Statの行政区境
"また行政区境かよ！"といわれそうですが、国土数値情報が商用利用禁止になり、OSMへの投入ができなくなったいま、[e-Statのデータ](https://www.e-stat.go.jp/SG1/estat/toukeiChiri.do?method=init)は今後の市町村合併に際して利用可能な有力なリソースとなりました。

ライセンスは、[GIS機能利用規約の第6条に示されている通り](https://jstatmap.e-stat.go.jp/gis/nstac/manual/riyou_kiyaku_2015.html)、[e-Statの利用規約](https://www.e-stat.go.jp/estat/html/spec.html)と同様、つまり、現状は政府標準利用規約1.0版です。
今後、政府標準利用規約が2.0版に改定されるに伴って、OSMへの投入がしやすいものとなる可能性があります。（今後、適切なタイミングで問合せが必要かもしれません）

なお、e-Statの行政区境のデータは国土数値情報よりも詳しく、町丁目の境まで対応しています。
これでようやく、admin_level=10までをすべて埋めることが可能となります。

ここまでくると、[選挙区や郵便配達区域など](http://wiki.openstreetmap.org/wiki/JA:Key:boundary)も対応できそうな気がしてきますね。

### 法人番号
2015年の10月より、すべての法人に対して法人番号が割り当てられました。

この番号は個人のマイナンバーと異なり、完全に一般に対して公開されており、なおかつ、Public DomainやCC0と同様の自由な利用条件である旨が、国税庁に対する問合せの結果から判明しています。

[こちらのサイト](http://www.houjin-bangou.nta.go.jp/download/zenken/)から、CSVでのDumpと、APIによる差分配布が行われています。

そして、この法人番号の中には、`法人番号`と`法人名称`と`住所`というカラムが存在しています。つまり、ジオコーディングが可能です。

実際に利用するには、ジオコーディングの精度やライセンスに左右されますし、この法人番号で示されているのが"本社の住所のみ"という制約があることから、なかなか利用のハードルは高いかもしれません。（branchのデータが含まれないため、例えばコンビニや店舗の開店把握には使えません）
まずは法人の正しい表記の参考にしたり、実際の編集の下絵として利用するあたりからスタートかなー、とは思っています。

### 位置参照情報
[位置参照情報](http://nlftp.mlit.go.jp/isj/)のデータセットは、国土数値情報と異なり、ライセンスの変更が行われていません。

placeのデータについてはこちらのデータセットを利用するのがよいと考えていて、今後どこかのタイミングで[状況の整理](http://wiki.openstreetmap.org/wiki/JA:MLIT_ISJ_CHOME)と作業の実施を行いたいなぁ、という状況です。

### 基本測量成果・公共測量成果
`おいおい測量法に守られてるだろ`というのが現在の状況です。
そのため、OSMへのインポートを行っている都市計画図は、公開する際に公共測量成果ではない旨が明記されているもののみが現在の対象と成っています。

ただし、基本測量や公共測量のデータについては、[内閣官房の電子行政オープンデータ実務者会議](https://www.kantei.go.jp/jp/singi/it2/densi/dai11/gijisidai.html)にて、今後オープンにしてゆくことが検討されています。（[P.18に記載があります](https://www.kantei.go.jp/jp/singi/it2/densi/dai11/siryou3.pdf)）

今後「オープンにしてゆく」にあたって、もしライセンスをつけるとすれば、CC BYや政府標準利用規約になるのかな、と考えています。

もちろんその場合、OSMへの投入はライセンス互換性の問題から問合せが必要ではあります。その場合でも、もし基本的に利用が可能である前提で話ができるというのは、交渉を行う上で、双方たいへん気が楽です。

### Level0エディタ
データではありませんが。

[level0エディタ](http://level0.osmz.ru/)という[ツール](http://wiki.openstreetmap.org/wiki/Level0)があります。

[OverPass turbo](http://overpass-turbo.eu/)のクエリ結果を開く際のメニューにも配置されており、大規模編集においては非常に優秀な性能を発揮します。
僕はたまに、nameタグのカッコ書きを編集したりするのに使っています。

[OSM2VectorTiles](http://osm2vectortiles.org/)が公開されたこともあり、今後、オリンピック・パラリンピックに向けて、name:en等の言語系タグを追加する際にはこういうツールを使うのが便利だと思っています。

## インポートガイドラインを守ろうね
毎度のお願いです :)

インポートや大規模編集を行うにあたっては、[インポートガイドライン](http://wiki.openstreetmap.org/wiki/JA:%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88/%E3%82%AC%E3%82%A4%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3)を順守して、talk-ja MLなどで事前に相談をして作業を行いましょう。

手順については、現在 osm.jpのサイトでも[まとめています](https://openstreetmap.jp/node/765)ので、参考にしてください。

来年も、みんなで一緒に、よりよい地図を目指しましょう！ (/･ω･)/
Zynq > SD書込み (FatFS) > D. FatFSの構成


~~http://elm-chan.org/fsw/ff/ja/appnote.html#port~~
にある図がわかりやすい。

(追記 2018/02/19)
日本語ドキュメントは廃止され、下記を参照することになりそう。
http://elm-chan.org/fsw/ff/doc/appnote.html
Zynq > SD書込み (FatFS) > C. LongFileNameを使う / license

自分メモ (2015/04/09)

C. LongFileNameを使う

以下のリンクに従って実装し動作検証した。 LongFileNameは使うがUnicodeには非対応の方法。 FatFSのoptions/unicode.cを追加する方法よりはシンプルにできる。


[参考： How to enable "Long File Name" support in FAT file system included with LPCOpen?](http://www.lpcware.com/content/faq/how-enable-long-file-name-support-fat-file-system-included-lpcopen)

ZynqFSBL_bsp > ps7_cortexa9_0 > libsrc > xilffs_v2_2 > src > ff.c に以下を追加する (もしくは別ファイルとして用意してincludeする)

```test.c
WCHAR ff_convert (WCHAR wch, UINT dir)
{
    if (wch < 0x80) {
        /* ASCII Char */
        return wch;
    }
 
    /* I don't support unicode it is too big! */
    return 0;
}
 
WCHAR ff_wtoupper (WCHAR wch)
{
    if (wch < 0x80) {
        /* ASCII Char */
        if (wch >= 'a' && wch <= 'z') {
            wch &= ~0x20;
        }
        return wch;
    }
 
    /* I don't support unicode it is too big! */
    return 0;
}
```

ZynqFSBL_bsp > ps7_cortexa9_0 > libsrc > xilffs_v2_2 > src > include > ffconf.h の以下を変更する

```
#define _USE_LFN  1
```

あとは「A. ファイル追記処理」で記載している処理においてf_open()のファイル名を8文字以上で使えばいい。
 
ライセンスに関しては「マイクロソフト社はFATファイル システムについていくつかの特許を保有しています。いずれもLFN機能の実装に関するもので、その利用に対して$0.25/unitのライセンス料を要求しています。」　( [FatFS > 長いファイル名](http://elm-chan.org/fsw/ff/ja/appnote.html#lfn) )とのこと。
Zynq > SD書込み (FatFS) > B. microSDの残りサイズを知る

自分のメモ整理 (2015/4/9)

microSDの残りサイズを知る

f_getfree()を使う。

f_getfree()を使うには、ffconf.hの設定を変更する必要がある。 f_getfree > 「_FS_READONLY == 0で、且つ_FS_MINIMIZE == 0のとき使用可能です。」。 ZynqFSBL_bsp > ps7_cortexa9_0 > libsrc > xilffs_v2_2 > src > include > ffconf.h の以下を変更する

  - #define _FS_READONLY    0   (デフォルト0のため変更なし)
  - #define _FS_MINIMIZE    0   (デフォルト1となっているので、0にする)

SDのトータルサイズと空きサイズを知るには以下のコードをベアメタルアプリに追加してfile_getDiskSizeInfo()を使う


```test.c
#include "ff.h" // for FatFS
 
 
#define RET_NG (-1)
#define RET_OK (0)
 
 
static signed int file_getDiskSizeInfo()
{
    FRESULT rc;
    FATFS *fatfs;
    DWORD free_clust, free_sect, total_sect;
 
 
    // results
    DWORD total_KB, free_KB, total_MB, free_MB;
 
 
    rc = f_mount(0, fatfs);
    if (rc != FR_OK) {
        return RET_NG;
    }
 
 
    rc = f_getfree("0:", &free_clust, &fatfs); // 0th drive
    if (rc != FR_OK) {
        f_mount(0,0);
        return RET_NG;
    }
 
 
    total_sect = (fatfs->n_fatent - 2) * fatfs->csize;
    free_sect = free_clust * fatfs->csize;
 
 
    // assuming 512bytes/sector
    total_KB = total_sect / 2;
    free_KB = free_sect / 2;
    total_MB = total_KB / 1024;
    free_MB = free_KB / 1024;
 
 
    f_mount(0, 0); // unmount
    return RET_OK;
}
```
Zynq > SD書込み (FatFS) > A. ファイル追記処理

自分のメモ(2015/4/9)より

MicroZedで動作確認した。

ファイルへの追記処理

1. #include "ff.h"を追加 (FatFS利用のため)
2. FIL fil; /* file object */
3. FATFS fatfs;
4. f_mount(0, &fatfs); にてFAT形式をマウントする
5. f_open(&fil, filename, FA_OPEN_ALWAYS | FA_WRITE);
  - FA_OPEN_ALWAYS >「既存のファイルを開きます。ファイルが無いときはファイルを作成します。追記の場合は、この方法でオープンした後、f_lseek関数でファイルの最後尾に移動してください。」
7. f_lseek(&fil, f_size(&fil)); // ファイル終端へ移動
8. f_write(&fil, szbuf, strlen(szbuf), &numWritten); // 書込み. numWrittenに書込み文字数が戻る
  - f_write()以外にf_printf()も使える
10. f_close(&fil); または継続して書込みするなら f_sync()を使う
11. f_mount(0, 0); // アンマウント

以下のコードをベアメタルアプリに追加してfileAppendTest()を実行すると0407.txtへファイル追加が行われる。


```fileAppendTest.c
#include <string.h> // for strlen
#include "ff.h" // for FatFS
#define RET_NG (-1)
#define RET_OK (0)
static signed int fileAppendTest(void)
{
    FRESULT rc;
    FIL fil;
    FATFS fatfs;
    char szbuf[] = "hello World\r\n";
    UINT numWritten;
    //---
    int dbg; // for debug
 
    rc = f_mount(0, &fatfs);
    if (rc != FR_OK) {
        return RET_NG;
    }
 
    // create file if not found
    rc = f_open(&fil, "0407.txt", FA_OPEN_ALWAYS | FA_WRITE);
    if (rc != FR_OK) {
        return RET_NG;
    }
 
    // move to the last
    rc = f_lseek(&fil, f_size(&fil));
 
    rc = f_write(&fil, szbuf, strlen(szbuf), &numWritten);
    if (numWritten == 0) {
        dbg=1;
    }
 
  
    f_close(&fil);
 
    // unmount
    f_mount(0, 0);
    return RET_OK;
}
```
laravelのEloquentでfirstOrNewしたら論理削除されてるデータが取得されて死んだ

larvalで初めてEloquentを使ったんですが、SoftDeletes便利ですよね。
便利なんで何も考えず使っていました。

```HogeModel.php
use Illuminate\Database\Eloquent\SoftDeletes;

class HogeModel extends Eloquent {

    use SoftDeletes;

    protected $dates = ['deleted_at'];

}
```

こんな感じですよね。

割とクエリビルダー使ってSQL書くプロジェクトだったんですが、稀に
firstOrNewしてるところがあって、ある時、

「情報が登録されない！」

って騒ぎが起きまして、、、

どハマりしたんですが、原因が

``` Moge.php
$conditions = [
   'mail_address' => 'test@test.com'
];

// 条件にdeleted_at => nullを入れてないと論理削除されたデータでも持ってくるらしい
$data = $this->hogeModel->firstOrNew($conditions);
```

ということでした。
便利なものもちゃんと調べて使わないと怖いですね(´･ω･`)
Fluentdのebuildつくった

## 2019/07 追記

2018年末あたりからGentooオフィシャルでfluentdパッケージが提供されているようです。
https://packages.gentoo.org/packages/app-admin/fluentd

(追記ここまで)

----

この記事はFluentdのebuildがようやく出来上がりハイになったタイミングで[Fluentd Advent Calendar 2015](http://qiita.com/advent-calendar/2015/fluentd)がまだ空いているのを見つけついうっかりエントリーしたことにより書かれています。

----

## はじめに

Fluentdを使おうと思ったとき、RHELやUbuntuあるいはMac OSXのユーザーであれば[td-agentとしてrpm, deb, dmg各形式でFluentdのパッケージが提供](http://www.fluentd.org/download)されていますので導入はとても簡単です。

一方、Gentoo Linux向けにはFluentdのパッケージは提供されていません。
ですので、これまではGentoo LinuxでFluentdを使う際にはrbenvとbundlerを使ってインストールしていました。
しかしながら導入対象ホストの数が増えると手間なことや[自社サービスのパッケージ管理を進めている](http://blog.mazgi.net/entry/deploy_scala_app_by_ebuild
)ことからGentoo Linuxのパッケージであるebuildを作りたいと(ここ2年くらい)思っていました。

この度重い腰を上げ無事[ebuildができました](https://github.com/mazgi/portage-overlay/tree/master/app-admin/fluentd
)ので記念に記事を書くことにします。

## 使い方

今回作成したebuildの使い方をご紹介します。

### リポジトリの登録

パッケージリポジトリ(Portageリポジトリ)を `mazgi-experimental` という名前で登録することとします。
(ややこしいですが、Portageはパッケージ管理システム自体、ebuildは個々のパッケージ自体またはフォーマット、後ほど出てくるemergeはパッケージ管理のコマンドです。)

まずリポジトリの設定ファイル `/etc/portage/repos.conf/mazgi-experimental.conf` を作成します。
内容は下記の通りです。

```
[mazgi-experimental]
location = /var/lib/portage/repo.data/mazgi-experimental
sync-type = git
sync-uri = git://github.com/mazgi/portage-overlay.git
auto-sync = yes
```

### インストール

基本的には `emaint sync -a` して `emerge fluentd` するだけです。
環境に応じて `dispatch-conf` したり `eselect ruby` でアクティブにするRubyのバージョンを指定する必要があります。
関連パッケージが入っていない状態でインストールすると概ねこのような依存パッケージがインストールされるはずです。
![Screen Shot 2015-12-23 at 7.50.44 AM.png](https://qiita-image-store.s3.amazonaws.com/0/9676/9dac679a-f733-de96-d7e6-d4019aa0e6a3.png)

### 動作確認

インストールが完了すると `fluentd --setup /etc/fluentd` を実行するように言われますので実行します。
ついでにログレベルを `-vv` にしておきます。他のGentoo Linuxのパッケージと同じく `/etc/conf.d/fluentd` で設定変更ができます。

```shell-session
# fluentd --setup /etc/fluentd
Installed /etc/fluentd/fluent.conf.
# grep -vE '^\s*(#|$)' /etc/conf.d/fluentd
FLUENTD_OPTS="-vv"
```

![Screen Shot 2015-12-23 at 8.02.15 AM.png](https://qiita-image-store.s3.amazonaws.com/0/9676/6a825aa8-1005-b68f-ae0d-097d7d2cdb8e.png)
[公式ドキュメント](http://docs.fluentd.org/articles/install-by-gem#step3-run)にならってテストしましょう。
Fluentdサービスを起動して `fluent-cat` でメッセージを送ります。

```shell-session
# /etc/init.d/fluentd start
# echo '{"json":"message"}' | fluent-cat debug.test
```

![Screen Shot 2015-12-23 at 7.58.02 AM.png](https://qiita-image-store.s3.amazonaws.com/0/9676/b06be10b-f985-11a0-d323-b4db2646d365.png)
送ったメッセージが出力されました。
インストール完了です。

これでGentoo LinuxでもFluentdがより導入しやすくなりますね(?)
Have a fluent day!

----

## おわりに

ここまで書いて[esm-overlayにパッケージがある](https://github.com/esminc/esm-overlay/tree/master/app-admin/fluentd)ことを知りました。
var_exportで浮動小数点数を人の目に優しい出力にする

例によって小ネタです。

# 小数点以下n桁で四捨五入した小数をvar_exportでダンプしようとしてみた

```php:ソースコード
$a = 3.1419526535;
var_dump(round($a,2));
echo var_export(round($a,2),true) . PHP_EOL;
```

```cmd:結果
float(3.14)
3.1400000000000001     <------- Σ(ﾟДﾟ)
```

# 何がいけなかったの？

困った時は[PHPマニュアル](http://php.net/manual/ja/function.var-export.php)を参照参照...特に何も書いてないな。
じゃあStackOverflowさんに聞いてみるか…

[php, var_export fails with float](
http://stackoverflow.com/questions/32149340/php-var-export-fails-with-float)

wtf?（What the fuck, 何だコレ？）だって

確かに何だコレ。です。

ここに書かれてある「serialize_precision」がクサイ。

そこでもう一度マニュアルのコメント欄まで見てみると、PHP5.4.22からiniファイルの「serialize_precision」を見るようになった。デフォルトは17だよと書いてた。

なんで17？と思いつつ、じゃあ精度下げてみるかってことに。

# とりあえずの解決方法

```php:ソースコード
ini_set('serialize_precision', 16);
$a = 3.1419526535;
var_dump(round($a,2));
echo var_export(round($a,2),true) . PHP_EOL;
```

```cmd:結果
float(3.14)
3.14     <------- (ｰ｡ｰ)ﾌｩ
```

serialize_precisionを16以下にするといいみたいです。

# serialize_precisionについて

[こちら](http://php.net/manual/ja/ini.core.php#ini.serialize-precision)に「**すごくシンプルな**」説明がありました。

>浮動小数点数をシリアライズするときに格納する桁数を指定します。

シリアライズ？ってことは、ひょっとするとserializeにも影響するの？json_encodeも怖いから確認してみましょう。

```php:ソースコード
ini_set('serialize_precision', 17);
echo serialize(round($a,2)) . PHP_EOL;
echo json_encode(round($a,2)) . PHP_EOL;

ini_set('serialize_precision', 16);
echo serialize(round($a,2)) . PHP_EOL;
echo json_encode(round($a,2)) . PHP_EOL;
```
```cmd:結果
d:3.1400000000000001;
3.14
d:3.14;
3.14
```

serializeには影響しましたが、json_encodeには影響しませんでした。どういう理屈なんだろう？

# serialize_precisionのデフォルト値の意味

よくわからないのですが、[マニュアル](http://php.net/manual/ja/language.types.float.php)の浮動小数点の説明に

>PHP は通常 IEEE 754 倍精度フォーマットを使います。 この形式は、1.11e-16 のオーダーでの丸め処理で誤差が発生します。

とあるのですが、これと関係ありそうな気もします。
（詳しい方のコメントお待ちしています！）

# 結論： floatな値をvar_exportしたとき人の目に優しく出力するには「serialize_precision」を設定するべし

でもserialize_precisionはグローバルなので、他の箇所に影響しないよう注意してくださいね！

# ちなみに

この記事はPHP Disではありません！(笑)
WordPressのテーマ開発用Grunt Seed


https://github.com/soohei/wp-grunt-seed に置きました。

・[WordPressをSubModule管理](http://qiita.com/soheikitada/items/f5821a01e49e81761130)
・Bower
・SCSS
・Compass
・CoffeeScript
・Retinaディスプレイ用Spriteイメージ
・[SVG](http://qiita.com/soheikitada/items/01c6c77bd29eff27adde#_reference-f6f3dfe01e649e8f02d2)
・Bootstrap

あたりをサポートしてみました。
PreferenceLoaderでカスタムセル(タイトル)を作る

この記事は [iOS Jailbreaking Advent Calendar 2015](http://qiita.com/advent-calendar/2015/ios-jailbreaking) の19日目の記事です。
~~2日分も書くことになるとは~~
18日目に続いて記事を書かせてもらう@ChikuwaJBです。
自己紹介等は18日目の記事に書いてあるので是非！
>http://qiita.com/ChikuwaJB/items/f623e1b6c1d98dd21639

# 本題

![http://i.imgur.com/cqZbjia.jpg](http://i.imgur.com/cqZbjia.jpg)

写真の赤丸の部分の作り方について書きたいと思います。

## Binary側(mm,m)の編集

以下のコードを**追加**

```Preference.mm


@protocol PreferencesTableCustomView
- (id)initWithSpecifier:(PSSpecifier *)specifier;
- (CGFloat)preferredHeightForWidth:(CGFloat)width;
@end
 
@interface FirstCustomCell : PSTableCell <PreferencesTableCustomView> {
	UILabel *label;
}
@end
 
@implementation FirstCustomCell
- (id)initWithSpecifier:(PSSpecifier *)specifier {
	self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell" specifier:specifier];
	if (self) {
		label = [[UILabel alloc] initWithFrame:[self frame]];
		[label setLineBreakMode:UILineBreakModeWordWrap];
		[label setNumberOfLines:0];
		[label setText:@"HelloWorld!"];
		[label setBackgroundColor:[UIColor clearColor]];
		[label setShadowColor:[UIColor whiteColor]];
		[label setShadowOffset:CGSizeMake(0,1)];
		[label setTextAlignment:UITextAlignmentCenter];
 		[self addSubview:label];
		[label release];
	}
	return self;
}
 
- (CGFloat)preferredHeightForWidth:(CGFloat)width {
	return 60.f;
}
@end


```

## plist側の編集

一番はじめのPSGroupCellに

キー:`headerCellClass`←`headerCellClass`にすればそのアイテムの下に指定したセルが挿入される。
値:`FirstCustomCell`←セルの名前

```foo.plist

......

<dict>
 <key>cell</key>
 <string>PSGroupCell</string>
 <key>headerCellClass</key>
 <string>FirstCustomCell</string>
</dict>

.....

```

**これだけです！　簡単！**

# 動かしてみると。。。

![http://i.imgur.com/pBaJIVg.png](http://i.imgur.com/pBaJIVg.png)

こんな感じでちゃんと表示されていますね( ･ㅂ･)و ̑̑
ソースコードはGithub上で公開しています。
> https://github.com/ChikuwaJB/AdventSample

# 〆

今日もまた**知ってるわそんなの！ヽ(`Д´)ﾉ**
って言われそうな記事ですが参考になったら嬉しいです。。

初めての[iOS Jailbreaking Advent Calendar 2015](http://qiita.com/advent-calendar/2015/ios-jailbreaking)でしたが、僕の担当は一応これが最後の記事のはず(？)です。

@r_plus氏から始まり、@wa_kinchan氏、@ichitaso氏、僕、@Adolfoi氏と有名な方々に囲まれてレベルの低い記事を書かせてもらえた[iOS Jailbreaking Advent Calendar 2015](http://qiita.com/advent-calendar/2015/ios-jailbreaking)のメンバーに感謝です！

来年も生きていたら(？)また書かせてもらえると嬉しいです( ･ㅂ･)و ̑̑

では良いJailbreak Lifeを！
ESP-WROOM-02 > Pin > MTDO > JTAG?

ESP-WROOM-02のデータシートに以下の記載がある。

> GPIO15;MTDO;HSPICS;UART0_RTS

MTDOってなんだろう。

http://tech.scargill.net/esp-12-in-practice/
> The default function of pin number 13 is the MTDO (JTAG). 

JTAG関連なのだろうか。

http://www.esp8266.com/wiki/doku.php?id=esp8266_gpio_pin_allocations
> PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, FUNC_U0CTS);//CONFIG MTCK PIN FUNC TO U0CTS
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_U0RTS);//CONFIG MTDO PIN FUNC TO U0RTS

MTCKとMTDOがセットになっているようだが、ESP-WROOM-02のデータシート p7 Table2にはMTCKらしきものは見られない。

http://akizukidenshi.com/download/ds/espressifsystems/0C-ESP8266__WROOM_WiFi_Module_Datasheet__EN_v0.4.pdf

何かのData Outのようだが、MTの正式名称は見つかっていない。
初めてのWEB制作で懐中電灯つくりました

こんにちは、来年の4月からやっと大学生になれる**ちゃちゃまる**（@chachmaru）です。LIGアドベントカレンダー23日目書いていきます！

## 展示作品のアーカイブ用WEBサイト
東大x藝大クリエイティブサークル「UT-HACKs」というものがございまして、縁あって僕もメンバーとして活動しています。そのサークルで11月21-23日に開催された駒場祭にインスタレーション作品を展示してきたので、アーカイブ用のWEBサイトを制作することになりました。ちゃちゃまる人生初のWEB制作です。

作品は**光**を中心としたものになっているので、WEBサイトでも光を何らかの形で表現したいなぁ、と考えていました。そこで、**コンテンツを懐中電灯で照らしながら見ていくサイトなんでどうだろう！**と思い、ものすごいググりながら実装しました。

## 懐中電灯
いろいろ試行錯誤した結果、以下のようになりました。

### HTML

```html:index.html
<svg id="lighting" x="0" y="0" width="10000" height="10000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<defs>
	<radialGradient id="grad" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">
	  <stop offset="0%" stop-color="#000"/>
	  <stop offset="20%"  stop-color="#333"/>
	  <stop offset="100%" stop-color="#fff"/>
	</radialGradient>
	<mask id="mask">
	  <rect x="0" y="0" width="10000" height="10000" fill="#fff" />
	  <ellipse id="light" cx="0" cy="0" rx="0" ry="0" fill="url(#grad)" />
	</mask>
</defs>
<rect x="0" y="0" width="10000" height="10000" fill="#000" mask="url(#mask")></rect>
</svg>
```
SVGで黒い巨大な四角形をつくり、黒から白の円形グラデーションを適用した円でマスクします。マスクのcxとcyはjQueryで指定するため、値を0にしておきます。

### CSS
```css:style.css
svg#lighting {
	position:fixed;
	z-index: 2;
	left: 0; top: 0;
	pointer-events: none;
}
```
コンテンツよりSVGが前に表示されるよう、z-indexでコンテンツより上にもってきます。

### jQuery
```js:script.js
$(document).ready(function(){
  var light = document.getElementById('light');
	var back  = document.getElementById('back');
	var moveLight = function(e) {
		light.setAttribute('cx', e.clientX);
		light.setAttribute('cy', e.clientY);
	};
	document.body.addEventListener('mousemove', moveLight);
}
```
マウスの座標を取得し、SVGのcxとcyに値をいれます。これでマウスを追尾する円、つまり**懐中電灯**ができました。

## 〆
これだとWEBサイトとしてかなり読みにくいので、どこかに電気スイッチを配置して、押すと反転するようにします。タイトルや重要なコンテンツなどにネオンエフェクトをかけて懐中電灯で照らさなくても見えている状態にする、といったギミックも面白いかもしれません。

冒頭でも言いましたが、初WEB制作なので、コードに至らない部分などございましたらぜひご指摘お願いいたします！
不等長リストの入れ替え



```scala
/*
List(
	List(1,2,3,4),
	List(5,6,7,8),
	List(9,0)
)
↓
List(
	List(1,5,9),
	List(2,6,0),
	List(3,7),
	List(4,8)
)*/

case class Player(id: Int, name: String, score: Int)

val t: List[(Int, String, Int)] = 
	(1 to 17) zip ('a' to 'z') map (x => (x._1, x._2.toString, scala.util.Random.nextInt(100))) toList

val players = t.map(x => Player(x._1, x._2, x._3))

val sortedPlayers = players.sortBy(x => (- x.score, x.id))

def transpose[A](xs: List[List[A]]): List[List[A]] = xs.filter(_.nonEmpty) match {
	case Nil => Nil
	case ys: List[List[A]] => ys.map{ _.head }::transpose(ys.map{ _.tail })
}

transpose(sortedPlayers.grouped(4).toList)

```
Zynq / FPGA > 開発用PCの選定 > CPUコア? メモリ? GPU?

前々から考えていたZynqの開発の勉強を本格的に開始することにした。

Zyboを購入する予定。
http://akizukidenshi.com/catalog/g/gM-07740/

## マルチプロセッサ

Vivadoを使うのだが、開発用PCはどういう構成がいいのだろうか。

AlteraのQuartusの場合、マルチプロセッサは20%程度は速くなるらしい。
http://www.elsena.co.jp/elspear/altera/software/quartus2/multi-processor.html

Vivadoでは以下を見つけた
http://fpga.kice.tokyo/fpga/vivado-mt

スレッド２と４で　27分42秒　と 24分34秒　の違いがあるようだ。

マルチスレッドとマルチコアでも違う気がするが分からない。

Fortranの数値計算を動かしていた時は、マルチスレッドを使うより、２つのスレッドを独立して違うパラメータで処理させて、結果を足し合わせた方が３倍くらい速かった。 FPGA開発でもそういうのができればいいのに。

## メモリ

16GBにするか、32GBにするか。

メモリは後から足せるから16GBで開始するのでもいいような気がする。

## GPU

関係あるのかさっぱり。

## 結局のところ

結局のところ、GPUは気にせず購入した。

Core i7-6700K + 16GBメモリ (DDR4 SDRAM) + Windows 8.1pro

2年間はこれで頑張ろう。
Alpine Linux使ってみた

* alpine:latest(3.2)だとパッケージが古い(openssh6系)
* alpine:edgeだとopenssh7.1でした。
* dateコマンドは`coreutils`パッケージに含まれている。
* findコマンドは`findutils`パッケージに含まれている。

## dockerで動作確認

```bash:
sudo docker run -it alpine:edge /bin/sh
```

# パッケージマネージャ

## インストール済みパッケージ一覧

* [Alpine packages](https://pkgs.alpinelinux.org/packages)

```bash:
apk info
```

## リポジトリ追加

```diff:/etc/apk/repositories
  http://dl-4.alpinelinux.org/alpine/v3.5/main
+ http://dl-4.alpinelinux.org/alpine/v3.5/community
+ http://dl-4.alpinelinux.org/alpine/edge/testing
```

## インストール可能なパッケージ一覧更新

```bash:
apk update
```


## インストール可能なパッケージ一覧

```bash:
apk search パッケージ名
```

* [Full Package List:   Alpine Linux 3.5.0](http://distrowatch.com/table.php?distribution=alpine&pkglist=true&version=3.5.0#pkglist)
* ruby ,php, python, py-pip, go, wget ,vim ,docker ,lxc,
nagios, wine, mysql などがありました。
* testingには`lxd-0.18-r0`や`emacs24`もあった。
* 日本語IMEがないのとthunderbirdがなかった。

## インストール

```bash:
apk --update add パッケージ名
```

# キャッシュの削除

```bash:キャッシュの削除
rm -rf /var/cache/apk/*
```

# CloudatCostで動かす

* [alpine1gb.dump.gz](https://www.dropbox.com/s/gz05ntqhu9w0to9/alpine1gb.dump.gz?dl=0)をCloudatCostホストに転送しておく

```bash:圧縮イメージからリストア
gzip -dc < alpine1gb.dump.gz | dd of=/dev/sda
```

このイメージはalpine 3.3を1GB DISKに`setup-alpine`でインストール
したものをイメージ化しました。

```bash:(参考)イメージ化
# dd if=/dev/sda | gzip -c  > sda_dd.gz
```

* root : alpine でログインできます。
* ネットワーク設定していないので、IPコマンドで設定してください。

```bash:
ip addr add 104.XXX.XXX.XXX/24 dev eth0
ip route add default via 104.XXX.XXX.1
```

* [Configure Networking - Alpine Linux](http://wiki.alpinelinux.org/wiki/Configure_Networking#IPv4_DHCP_Configuration)

## /dev/sda3の拡張

```bash:
fdisk /dev/sda
d 3 n p 3 Enter Enter Enter w
reboot
resize2fs /dev/sda3
```

## 最終的なDISK容量

* `apk update`済みで以下

```bash:DISK
# df -h 
Filesystem                Size      Used Available Use% Mounted on
devtmpfs                 10.0M         0     10.0M   0% /dev
shm                     247.6M         0    247.6M   0% /dev/shm
/dev/sda3                 9.5G    259.3M      8.8G   3% /
tmpfs                    49.5M    116.0K     49.4M   0% /run
cgroup_root              10.0M         0     10.0M   0% /sys/fs/cgroup
/dev/sda1                92.8M     17.3M     68.5M  20% /boot
```

```bash:メモリ
# free -m
             total       used       free     shared    buffers     cached
Mem:           495         53        441          0          2         12
-/+ buffers/cache:         38        456
Swap:          255          0        255
```


## devパッケージ

* Scrt1.o などは musl-dev に含まれる。

```
apk add musl-dev gcc make g++ file
```

* [公式wikiのDeveloper Documentation](http://wiki.alpinelinux.org/wiki/Developer_Documentation)

```bash:build-essentialのようなもの
apk add alpine-sdk
```

## alpine-glibc

* [frolvlad/alpine-glibc](https://hub.docker.com/r/frolvlad/alpine-glibc/)を使う
* [Running glibc programs - Alpine Linux](https://wiki.alpinelinux.org/wiki/Running_glibc_programs)
技術英語 > an [open] research question / This is not a question easy to answer.


August 31, 2012
http://loe.org/shows/shows.html?programID=12-P13-00035
> Just how much we need to take is <font color=red>an open research question</font>.

http://ejje.weblio.jp/content/open+question
> 未決問題; 公開質問

<hr>

question関連で思い出したのは

> This is not a question <font color=red>easy to answer</font>.

使用例は以下。
https://www.quora.com/What-is-your-experience-about-outsourcing-mobile-apps-development-to-countries-with-low-rates
MongoDBでRECOVERINGから復旧させるある１つの方法

MongoDBのreplicasetで運用している際に何かしたらのトラブルでSECONDARYのstateが
RECOVERINGの状態になってしまうことがあります。
ただ、そこからSECONDARYに復旧されず、RECOVERINGの状態が続いてしまうことがあります。

その場合、復旧方法として下記にて、方法で復旧させることができました。

1. Secondaryのmongodを停止します([db.shutdownServer()](https://docs.mongodb.org/v3.0/reference/method/db.shutdownServer/#db.shutdownServer))
2. dbpathで指定しているディレクトリを空にします（削除してしまうと怖いので、mvコマンドなどで移動させておきます）
3. mongodを再開します
4. データが同期されるまで、SETUP2というstateになります
5. 同期が完了すると、SECONDARYのstateに復旧します

# 参考

- https://docs.mongodb.org/v3.0/reference/replica-states/
- https://docs.mongodb.org/v3.0/tutorial/recover-data-following-unexpected-shutdown/

*```--repair```を利用して復旧する方法もあるようですが、私の環境下では正常に復旧することはできませんでした。

他の復旧方法などあれば、ご教示ください。
【FileMaker】検索条件を複製

FileMaker Advent Calendar 2015、23日目です。

今回は、検索をする際のor条件などで便利な「検索条件の複製」です。

or検索などで、「複数ある検索条件のうち、１個だけ違う」とかないですか？
いちいちまた検索フィールドに設定するのは面倒ですよね。
そういうときに、先に入力した検索レコードをコピーできます。

最初の検索条件を指定し、
![スクリーンショット 2015-12-22 9.09.09.png](https://qiita-image-store.s3.amazonaws.com/0/60538/d5a18c67-a22c-87f8-4452-d8e051a7df11.png)

検索条件を複製する
![スクリーンショット 2015-12-22 9.12.03.png](https://qiita-image-store.s3.amazonaws.com/0/60538/e725dd4f-8cfa-d01e-3295-7f234d2a417c.png)

１行目に設定した検索条件がコピーされましたね。
そして、ちょっとだけ違う検索条件を指定する。
![スクリーンショット 2015-12-22 9.09.37.png](https://qiita-image-store.s3.amazonaws.com/0/60538/6ed754a7-10e0-ffb4-8a59-4cb9578e3a27.png)

という感じです。
スクリプトにも「レコード」の中にあります。
![スクリーンショット 2015-12-22 9.14.25.png](https://qiita-image-store.s3.amazonaws.com/0/60538/b4e8a718-48cf-a884-445d-989db3dc6fed.png)

やってみてくださいねー。
ソーシャル・ネットワーク


おはこんばんにちは

今日はアドベントカレンダーの23日目です よろしくお願いします。



えー僕が選んだ映画はこれソーシャル・ネットワーク

https://www.youtube.com/watch?v=exQjAXAQk1A

ほとんどの方がご存知だとは思いますが、facebook マーク・ザッカーバーグの伝記的な映画です。
ええ 紛れも無く主人公プログラマなお話ですよね

##なぜこの映画が好きなのか?
いきなり、私見ですいません。
自分のお気に入りのSNSがfacebookです。
UI/UXはもうダントツで素晴らしいなと考えています。

後、セリフ回しがいいですよね。
めちゃくちゃセリフが多くて、もう登場人物たちがずっと喋っている。
でも、スピード感があってあっという間にストーリーが展開されていきますよね

自分が大学生なのもあって、主人公やエドワルドの気持ち少しわかります。

##あらすじ

Facebookの立ち上げから発展を描く回想シーンと、証言録取のために宣誓供述を行う訴訟手続を描く現在進行シーンが、交互に展開されてゆく。
2003年秋。ハーバード大学2年生のマーク・ザッカーバーグは、ボストン大学に通う恋人のエリカとファイナル・クラブ（英語版）（ハーバード大学の学生秘密結社）や部活動などについて語り合っているうち口論になり、「アンタがモテないのは、おたく（ナード）だからじゃなくて、性格がサイテーだからよ」と言われてフラれる。怒ったマークはブログに彼女の悪口を書き並べ、さらに腹いせにハーバード大学のコンピュータをハッキングして女子学生の写真を集め、女の子の顔の格付けサイトを作ったり

from wikipedia https://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%BC%E3%82%B7%E3%83%A3%E3%83%AB%E3%83%BB%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF_(%E6%98%A0%E7%94%BB)


##感想
どうもみても周りの人間とうまく人間関係が築けていないマークが世界最大のソーシャル・ネットワークを作るのはとても皮肉です。

5億人の友達を作るために、親しい友達を失っていく様が物悲しく思えます。

お気に入りのシーンはウインクルボス兄弟に対して言った
そんなに言うならfacebookを作ってみろ invite facebookってセリフです。

millionere ?? bilinoareっていうショーン・パーカーもクールですね。

後冒頭のシーンでは、主人公が明らかにコミュニケーションがうまくできてない
異常です。このシーンで主人公の人間性をとても強く印象づけているなと思います。

現実世界でも複数人で会社はじめて意見や方向性があわなかったり、
会社のステージが上がるごとにどうしてもメンバーと距離ができて、メンバーの破局を生むという事は時々聞きます。まあ仕方のない事ですね、、、


##エンジニアリング

最初に女子の顔写真比較サイトを作る時に、データをクラッキングするシーンでは
apacheのディレクトリのパーミッションの設定し忘れをついたり、スクレイピングしたりと、技術的な監修がかなり丁寧にされているなと感じました。
他にも主人公のPCがリナックスだったり、最後のシーンでターミナルにphp5って出てたり、いいですね すごく
後、ショーンパーカがエンジニアに話しかけた時に断られるシーンが最高にクールです。


##映画評論家たち
https://www.youtube.com/watch?v=JsBIVFjYmqk

##実際と違うのか?
マーク・ザッカーバーグってここまで嫌なやつなのか??
ここまでだと、流石に成り立たないでしょ 会社が、、
皆、魅力のない経営者とはなかなか働けないと思う。


映画はマーク・ザッカーバーグが 女性にモテるためにfacebookを作った。みたいな終わり方になっているけど、実際大学時代からプリシラ・チャンっていう中国系の女性と付き合っていたそうです。(最近、出産のニュースが流れていましたね。めでたい話です)
まあ、結構フィクションだと思ってみてます。


facebookの創業話みたいな本を読んだ時にとても強く感じたのは、お金のためにfacebookを作ったのではないのだなと個人的には思っています。
何度も買収を打診されながらも、それを断り自分の手で経営を続けたマーク・ザッカーバーグはとても偉大な経営者だと思います。
エラー監視時(set -e)の汎用トラップコード(trap)

## 今回実現すること
シェルスクリプトの途中でエラーが発生した（コマンドの終了ステータスが 0 以外だった）とき、スクリプトを中断し、エラー発生時の環境情報を出力する。実行例は以下。

```text
$ ./sample1.sh aa "bb" "cc dd"
hello
mondai hassei ← ここで問題発生

------------------------------------------------------------
Error occured on ./sample1.sh [Line 8]: Status 1

PID: 3888
User: kobake
Current directory: /test/shell
Command line: ./sample1.sh "aa" "bb" "cc dd" 
------------------------------------------------------------
```

## 手段概要
シェルスクリプトの実行において ```set -e``` しておくと、それ以降のコマンド実行結果が正常でなかった（終了ステータスが 0 以外だった）場合にスクリプトが中断するわけだが、ただ何もせずに終了してしまうと問題解析がめんどくさい。

そんなわけで ```set -e``` する際には ```trap``` を利用して何かしらのメッセージを表示するのが一般的かと思う。

ただ、シェルスクリプト毎に trap 処理を書くのは非生産的なので、共通の trap 処理があるとなかなか捗る。

## 汎用トラップコード
エラーを検出したときに onerror が呼ばれるようにしているのだが、この中で問題解析時によく参照するであろう諸々の情報を出力しておく、というもの。

```bash:error_trap.sh
#!/bin/bash

onerror()
{
    status=$?
    script=$0
    line=$1
    shift

    args=
    for i in "$@"; do 
        args+="\"$i\" "
    done

    echo ""
    echo "------------------------------------------------------------"
    echo "Error occured on $script [Line $line]: Status $status"
    echo ""
    echo "PID: $$"
    echo "User: $USER"
    echo "Current directory: $PWD"
    echo "Command line: $script $args"
    echo "------------------------------------------------------------"
    echo ""
}

begintrap()
{
    set -e
    trap 'onerror $LINENO "$@"' ERR
}

begintrap
```

## トラップコードの利用
./error_trap.sh を「.」により実行することで、エラー監視が始まる。

```bash:sample1.sh
#!/bin/bash

# エラートラップ開始
. ./error_trap.sh

# 処理
echo hello
./e.sh
echo world
```

```bash:e.sh
#!/bin/bash

>&2 echo "mondai hassei"
exit 1
```

e.sh はエラーを返すだけのダミースクリプト。

```
echo hello
./e.sh ← ここでエラーが発生
echo world
```

## 実行結果
こんな感じ。
hello 出力の後の e.sh でエラーが発生し、そこで処理は中断される。それ以降の world 出力は実行されない。

```text
$ ./sample1.sh aa "bb" "cc dd"
hello
mondai hassei

------------------------------------------------------------
Error occured on ./sample1.sh [Line 8]: Status 1

PID: 3888
User: kobake
Current directory: /test/shell
Command line: ./sample1.sh "aa" "bb" "cc dd" 
------------------------------------------------------------
```

必要に応じて onerror には ```$PATH``` 出力等を加えたり等、諸々情報を増やしていくと良い（邪魔にならない範囲で）。

スクリプトの出力内容が多いとパっと見でエラー情報が埋もれがちなので、こうやって罫線で囲って目立つようにしてあげるのもけっこう大事だと思っている。

## 今回のサンプル
以下に設置。
https://github.com/kobake/bash-error-trap-sample
ADV7511のZedBoard用リファレンスデザインを動かす（ubuntu14.04, vivado 2015.2）

ZedBoardでHDMIを使うために、ADV7511のリファレンスデザインで勉強してみます。
こちら：https://wiki.analog.com/resources/fpga/xilinx/kc705/adv7511
元々はZedboard.orgのHDMI Bare Metal Reference Design Using ADV7511 and ADI IP ( http://zedboard.org/reference-designs-categories/hdmi-bare-metal-reference-design-using-adv7511-and-adi-ip ) をやってみようとしたところ古いバージョンのvivadoでしか動かなくて断念したというのもあります。

環境はxubuntu14.04, Vivadoのバージョンは2015.2です。

# Evaluation scriptを動かしてみる

## ダウンロード
ページ最下部にダウンロードリンク一覧があります。
まずはこの中のEvaluation scriptを動かしてみます。
`Zed Evaluation Script`のリンク先のファイルを`evaluate.bat`以外すべてダウンロードしてきます（今回はlinuxで動かしているので.batファイルはいらない）。
githubで配布されているので`git clone`でリポジトリごと落としてくるのが良いのかもしれませんが、
サイズが大きいので今回はファイルを個別にDLしました。（各ファイルのページに行って、`Raw`ボタンの上で右クリック、「リンク先を保存」）

元々のディレクトリ構成を真似て
`$(BASEDIR)/adv7511/evaluate`以下に置きました。（`$(BASEDIR)`は適当なディレクトリ）
このディレクトリの中に

- evaluate.tcl
- ps7_init.tcl
- sw.elf
- system.bit

がある状態です。

## 実行
```bash
$ xsdk
```
でXilinxSDKを起動します。（パスは通しておきます）
今回はXMDコンソールを使うだけなのでWorkSpaceはどこでもいいです。
起動したら、メニューのXilinx Tools -> XMD console でXMDコンソールを起動します。
XMDコンソール内で、上記ディレクトリに移動してtclスクリプトを実行します。
ZedBoardはHDMIケーブルをつなぎ、JTAGブートモードで電源を入れておきます。
また、シリアルコンソールを起動しておくと出力が見れたり、解像度を切り替えるためのコマンドを入力できたりします。

```
cd path/to/dir/adv7511/evaluate
source ./evaluate.tcl
```

あとは勝手にビットストリームのダウンロードからベアメタルアプリケーションの実行までやってくれます。
画面に画像が表示されたら成功です。

# HDL Reference Design

## ハードウェアのビルド
今度はファイルが多いのでgitで落としました。
`hdl_2015_r2`ブランチがvivado 2015.2対応です。現在はベータ版らしいので使うときは自己責任で。

```bash
$ cd $(BASEDIR)
$ git clone git@github.com:analogdevicesinc/hdl.git
$ cd hdl
$ git checkout hdl_2015_r2
```

以下の2ファイルを一部書き換えます。

```bash
$ vi projects/scripts/adi_project.tcl
$ vi library/scripts/adi_ip.tcl
```
書き換える箇所は、

```diff
+ set REQUIRED_VIVADO_VERSION "2015.2"
- set REQUIRED_VIVADO_VERSION "2015.2.1"
```
です。対応バージョンは厳密には`2015.2.1`みたいですが、ちょろっと書き換えて`2015.2`で動かします。

以上が終わったら、いざビルド。

```bash
$ cd projects/adv7511/zed/
$ make
```
ここは論理合成からビットストリーム作成までやるので時間がかかります。
終わったら`projects/adv7511/zed/`以下にプロジェクトができています。

## ソフトウェア作成
これもソースをgitで落としてきてブランチを切り替えます。
（こちらはmasterブランチで試していません。もしかしたらmasterでも動くかも）

```bash
git clone git@github.com:analogdevicesinc/no-OS.git
git checkout 2015_R2
```

あとは基本的に https://wiki.analog.com/resources/fpga/xilinx/kc705/adv7511 を見ればできます。
xubuntu14.04でgoogle chromeを使うとクラッシュしまくる

ubuntuとchromeの相性なのか、xfceとchromeの相性なのか、さらに別の原因なのかわかりませんが、よく落ちます。
システム全部を巻き添えに死ぬので困ってました。

シェルから

```bash
~$ google-chrome-stable --disable-gpu
```

で動かすと安定した（かな？）
まだ様子見。
StackでHaskellプロジェクトを作ってみる

### StackでHaskellプロジェクトを作ってみる

最初 `cabal` で何かやってみようと思ったのですがしょっぱなから動かなかったので `stack` を入れてみた。
環境はDebian GNU/Linux sid です。

* とりあえず `haskell-stack` を入れる
    `# apt-get install haskell-stack`

* stack new [PACKAGE_NAME] でプロジェクトを作ってみる
    `$ stack new haskell-start`

* 何かいろいろ出て無事終了、プロジェクトに移動
    `$ cd haskell-start`

### Build & Run

* とりあえず `stack build` を打つと、勝手にビルドできた！
    `$ stack build`

* とりあえず `stack exec [PACKAGE_NAME]-exe` を打ってみる
    `$ stack exec haskell-start-exe`
	`someFunc`

何か出力出来ました！ビルドシステムは `sbt` と `maven`、`autotools` を知っていますが。
stackはどうやらそれらと同じような感じで操作できるようです。
しかも `--help` を叩くと、 `msys` の文字が見えたり。多機能な感じがします。

### Hello, World

* どこを書き換えたらよいかはもうなんとなくわかります `src/Lib.hs` をいじって

```:haskell
module Lib
    ( someFunc
    ) where

someFunc :: IO ()
-someFunc = putStrLn "someFunc"
+someFunc = putStrLn "Hello, World !!"
```

* Build & Run  
    `$ stack build && stack exec haskell-start-exe`  
    `Hello, World !!`

### 足し算とかする

* `src/Lib.hs` をいじって

```:haskell
module Lib
    ( someFunc,
      addFunc,  -- ここに書けば関数が外部公開できるようだ
      minusFunc
    ) where

import Text.Printf -- Printf できるらしい -> http://stackoverflow.com/a/15566360/2565527

someFunc :: IO ()
someFunc = putStrLn "Hello, World !!"

add :: Int -> Int -> Int -- アロー演算子の左が引数、右が返り値で、ネストしてる。型を書く。
add a b = a + b          -- カンマはいらないらしい

addFunc :: IO ()
addFunc = putStrLn . printf "%d" $ add 1 3 -- Haskell慣れてなくてもなんとなくわかる？

minus :: Int -> Int -> Int
minus a b = a - b

minusFunc :: IO ()
minusFunc = putStrLn . printf "%d" $ minus 1 3
```

* `app/Main.hs` をいじって

```:haskell
module Main where

import Lib

main :: IO ()
main = addFunc
```

* Build & Run  
    `$ stack build && stack exec haskell-start-exe`  
    `4`

### まとめ

# `stack` は `cabal` より簡単　✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌

なんせHaskell歴3時間の私が使えたのですから…
node-twitterのstreamを止める方法

止め方についての情報が少なかったのでメモ
対象は[node-twitter](https://github.com/desmondmorris/node-twitter)
forkがたくさんあるけど、現在はこれが主流みたい？


オリジナルの[node-twitterのリポジトリ](https://github.com/jdub/node-twitter)見たら書いてました。

```js
twit.stream('user', {track:'nodejs'}, function(stream) {
    stream.on('data', function(data) {
        console.log(util.inspect(data));
    });
    // Disconnect stream after five seconds
    setTimeout(stream.destroy, 5000);
});
```

どうやら、コールバックに渡される`stream`に停止するためのメソッド(`destroy`)が用意されているみたいです。

コールバック内の変数はアクセスしにくいので、下のように外の変数に入れてあげると良さそうです。(あまり綺麗には見えませんが)

```js
var currentTwitStream = null;
twit.stream('user', {track:'nodejs'}, function(stream) {
    stream.on('data', function(data) {
        console.log(util.inspect(data));
    });
    currentTwitStream = stream;
});

function stopStream() {
    if(currentTwitStream) {
        currentTwitStream.destroy();
        currentTwitStream = null;
    }
}
```

`stopStream`のように停止用の関数を作ると扱いやすいかもしれません。
親ビューいっぱいに子ビューを表示する

関数名は直したいところ

```
    /** 親ビューいっぱいに子ビューを表示する
     * @param view:NSView 子ビュー
     */
    func fillSuperView(view:NSView) {
        let parent:NSView = view.superview!
        
        view.translatesAutoresizingMaskIntoConstraints = false

        let horizontalConstraint = NSLayoutConstraint(item: view, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: parent, attribute: NSLayoutAttribute.Leading, multiplier: 1, constant: 0)
        parent.addConstraint(horizontalConstraint)
        
        let verticalConstraint = NSLayoutConstraint(item: view, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: parent, attribute: NSLayoutAttribute.Trailing, multiplier: 1, constant: 0)
        parent.addConstraint(verticalConstraint)
        
        let widthConstraint = NSLayoutConstraint(item: view, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: parent, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 0)
        parent.addConstraint(widthConstraint)
        
        let heightConstraint = NSLayoutConstraint(item: view, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: parent, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 0)
        parent.addConstraint(heightConstraint)
    }
```
pydoc 覚書

Python ドキュメンテーションツール。

```
pydoc <name> ...
```

指定した name に対応する文書を表示します。
name は Python のキーワード、トピック、関数、 モジュール、パッケージを指定します。
モジュール内やパッケージ内のモジュールに含まれるクラスや関数をドットで参照することもできます。

name に / が含まれる場合、 Python ソースファイルのパスとして使用されます。
name がキーワード、トピック、またはモジュールである場合、指定した name に対応する文書が表示されます。

# Options

## -k keyword
参照可能な全モジュールの概要説明から指定した keyword を検索します。

## -p port
ローカルマシン上の指定したポートで HTTP サーバを起動します。

## -g
文書を検索 / 提供するグラフィカルインターフェイスを表示します。

*Note:*
[Lubuntu](http://lubuntu.net/) では [python-tk](http://docs.python.jp/3.4/library/tk.html) パッケージのインストールが必要。
(本家 [Ubuntu](http://www.ubuntu.com/desktop) では未検証)

## -w name ...
指定したモジュールの HTML 文書を現在のディレクトリへ書き出します。
name に / が含まれている場合、 name はファイル名として扱われます。
name がディレクトリ名である場合、ディレクトリ内に含まれる全モジュールの文書が出力されます。
Webhook as a ServiceでIoTのserverlessなバックエンド考える - Part 1: リソース

　今年たくさんのIoT系のハッカソンに参加して気づいたことは、エンジニアでない方やフロントエンドの方にはターミナルのいわゆる「黒い画面」に抵抗があるということです。自分は1日の半分は「黒い画面」で過ごしているので麻痺しています。[IFTTT](https://ifttt.com/)や[Zapier](https://zapier.com/)、[Octoblu](https://www.octoblu.com/)や[myThings](http://mythings.yahoo.co.jp/)を使っているとサーバーを意識せずに簡単にWebサービスやクラウドを連携できるglueが重要になってきていると思うようになりました。

　少なくともサーバーのプロビジョニングやアプリのデプロイをせずに、自分で書いたコードのスニペットだけをホストできてイベント駆動のWebhookが実装できればIoTがもっと使いやすくなると思います。これはServerless ArchitectureとMicroServicesのためのプラットフォームにも該当すると思います。

## このシリーズ

* [Webhook as a ServiceでIoTのserverlessなバックエンド考える - Part 1: リソース](http://qiita.com/masato/items/ecc786a9703c314844e3)
* [Webhook as a ServiceでIoTのserverlessなバックエンド考える - Part 2: Webtask.ioのHello world](http://qiita.com/masato/items/5689238a4d90cfd8a307)

## Webscript.io

　[Webscript.io](https://www.webscript.io/)はWebブラウザでLuaのコードを書いて簡単にWebhookを実装できます。データストアも利用できるのでちょっとした永続的なデータが必要なロジックを書くことも可能です。

## Webtask.io

　[If This Then Node.js](https://auth0.com/blog/2015/07/28/if-this-then-node-dot-js-extending-ifttt-with-webtask-dot-io/)という言葉が表すように、[Webtask.io](https://webtask.io/)はIf..Then型でNode.jsのコードをホストしてWebhookで実行できます。サーバーのプロビジョンングやアプリケーションのデプロイが不要です。クラウドの認証サービスとして有名な[Auth0](https://auth0.com/)の内部で使われている仕組みのようです。

## IronWorker

　[IronWorker](http://www.iron.io/worker/)はコードをホストしてDockerのワーカーとして実行できるサービスです。Node.js、Python、Java、Goなど様々な言語のライブラリが提供されています。[IronMQ](http://www.iron.io/mq/)のMessage Queueサービスと連携した非同期の実装ができるのが魅力です。

## AWS Lambda

　言わずと知れた[AWS Lamda](https://aws.amazon.com/jp/lambda/)です。AWSで発生するイベントからLambdaをコールして別のAWSと連携するのが本来の用途だと思います。[AWS API Gateway](https://aws.amazon.com/jp/api-gateway/)からLamdaファンクションとして外部のWebサービスをコールすると汎用的なイベント駆動のWebhookを実装することもできます。

## その他

　まだ試したことはありませんがalternativesがあります。

* [CloudI](http://cloudi.org/)
* [hook.io](http://hook.io/)

## フローのビジュアル実装

　MicroServicesのフローをビジュアルで管理できる便利な仕組みを探しているところです。今の所[Node-RED](http://nodered.org/)や、残念ながらサービス終了となったYahoo! Inc.の[Yahoo! Pipes](https://ja.wikipedia.org/wiki/Yahoo!_Pipes)が近い感じです。
「もしイノ」を読んで　－サブカルチャーから学ぶイノベーションー

# はじめに
結論から言えばサブカルチャー、特にゲームやアニメの分野はイノベーションの産物の宝庫と言える。
今回は岩崎夏海先生が執筆された、「もし高校野球の女子マネージャーがドラッカーの『イノベーションと企業家精神』を読んだら」(もしイノ)を題材にしつつ、サブカルチャーに焦点を当ててイノベーションについて触れていきたい。

# そもそもイノベーションとは何か
もしイノによれば、「イノベーションは企業家に特有の道具である」、「イノベーションを起こせば競争をしなくて済む」とある。つまり、イノベーションとはツールであり、それを使うことで競争せず勝つことが出来る、というまるで魔法の杖のような存在である(最も、多少はリスクがあるが)。この魔法の杖で出来たものは身近にたくさんある。見分け方は簡単で、大ヒットしたモノで、新しい概念のモノ、と言える。
以下では、身近なところにあるゲームのイノベーションの産物を見ていきたい。

# ゲーム業界のイノベーション
ここ2,3年でのイノベーションの産物だと思われるものを列挙してみると、
パズドラ、艦これ、Splatoon、などがあるだろう。

## パズドラの新しさ
パズドラは数あるスマホゲームの中で堂々のDLランキング1位を獲得し続けている。
パズドラが行ったイノベーションの産物は主に2つあると考えられる。
1つ目はパズル要素である。パズドラが登場する前、グリーなどはいくつもの課金型スマホゲームを出していた。しかしそれらの多くは戦闘が始まればただ結果を待つものが多く、ユーザーはその時間は退屈なものだった。
その問題に対してパズドラがとった行動は、パズルゲームをユーザにやってもらうことだった。これにより、退屈な待ち時間は無くなり、さらにパズルの結果によってゲームの結果に関与出来るシステムを構築した。ユーザはゲームの結果に関与できるためパズルを練習する。さらによりパズルゲームを有利に進めるためキャラの吟味も行う。こうして、ドンドンゲームにはまっていく構造が作られた。
2つ目は詫び石システムである。今では当たり前に行われているが、当時は画期的だった。
というのは、サーバメンテナンスが長引いたり、緊急メンテナンスが発生したとき、これまで会社側からのアクションはユーザが見るかどうかすら怪しい謝罪文だけだった。
そこに、課金アイテムである魔法石を配るという大胆な行動がとられた。
これはユーザに対して各メンテナンス＝悪いイベント、という印象から、魔法石がもらえるイベント、という新たな価値観を創造している。
この2つのイノベーションの産物によって、今日のパズドラの地位がある(と思う)

## 艦これの新しさ
艦これはブラウザゲームにもかかわらず、かなりの人気を誇っている。
ひとえに、戦艦 x 女の子 という組み合わせが新しいジャンルだったとも言える。
しかしもう一つ上げるならば、ケッコンカッコカリシステムだろう。
ゲームシステム上はただのLv上限解放である。これだけ聞けば、プレイしたことが無い人から見れば課金前提のゲームに見えるが、艦これは極端な話、未課金でもエンドコンテンツに行けるし、クリアできる。
ではなぜ人々はケッコンカッコカリをするのか。
お察しの通り、愛である。我が子のように育てた艦むすと結ばれるためである。たとえ2回目以降は数百円かかるとしても。
馬鹿なの？と思うかもしれないが、自分が愛着を持ったものを特別にしたい、という欲求はごくごく自然なものである。
これまでLv上限解放はクリアのための一手段でしかなかった。しかしそのシステムに全く別の価値を与えたのである。
これが艦これが人気を博した理由の一つではないだろうか

## Splatoon
Splatoonはいくつもの新しいことが詰まっている。
1つ目はTPSゲームでありながら、万人受けするゲームとなっていることである。
FPSやTPS系のゲームは銃で撃ちあう性質上、どうしても舞台が泥臭く、また血なまぐさいものになっていた。
しかしSplatoonの武器は色のついた水鉄砲である。泥臭いどころか、洗い流してくれる。これはこれまでのFPS,TPSゲームに対する印象をぶち壊し、全く新たな価値観を創造したと言える。
2つ目はフェスの存在である。
フェスとはゲーム内のイベントの1つであり、2チームに分かれ、勝敗を競い合い、チームとして勝利するとアイテムがもらえる、というシステムである。これだけなら良くあるイベント系だが、大きく違うのは企業とコラボする点である。
赤いきつねｖｓ緑のたぬき、KIRINの午後ティー 紅茶ｖｓミルクティー など。
これは任天堂側にとっては広告塔の役割を果たすので収益につながる(はず)。
となると、従来なら課金によって運営費を賄っていたところが、一部でも補填できる。
これにより、ユーザは様々なサービスを、それこそ今までなら課金しなければ受けられなかった新ステージや新武器を無料で体験できる。新たなビジネス形態の創造である。

# まとめ
イノベーションは難しい、偶然起きるもの、と思われがちだが、注意深く見れば様々なものがイノベーションの産物である。
問題の本質はイノベーションの方法があまりにも知られていないことだと考える。その意味で、もしイノはこの問題を解く一つの鍵になるのではないだろうか。

余談だが、題材のもしイノやもしドラも一種のイノベーションの産物ととらえることが出来るだろう。
経営学という、いかにもお堅い話題をライトノベル風に、かつ分かりやすく書いた人がいただろうか。
例外処理と末尾再帰（Re: OCamlの末尾再帰について）

この記事は[MLアドベントカレンダー](http://www.adventar.org/calendars/848)23日目の記事です。22日目の記事は autotaker さんの[OCamlの末尾再帰について](http://autotaker.hatenablog.com/entry/2015/12/22/170901)でした。この記事は autotaker さんの記事の `read_ints` 関数に対する別解です。前半は、既に autotaker さんの記事を読んでいる人は読み飛ばしても大丈夫です。

----

例外を投げる関数を呼び出しつつ末尾再帰的な関数を書こうとすると意外なほど落とし穴にはまる。

上記の記事と同じく、 `End_of_file` 例外が発生するまで `read_int` で標準入力から `int` の値を読み込み、読み込んだ値をリストにして返す関数を書こうとすると、最初は次のようなコードを書きがちだ（好みにより、 `read_ints` の引数に累積値を取るのではなくローカル関数を使うようにしている）。

```ocaml
let read_ints () =
  let rec loop acc =
    try
      let v = read_int () in
      loop @@ v::acc
    with End_of_file -> List.rev acc
  in loop []
```

だが、これは `loop` の再帰呼び出しから返ったあとに例外ハンドラをもとに戻すという処理があるため末尾再帰にはならない。

なので、元記事では、例外を `option` に変換した上で、 `try` 〜 `with` の外側で再帰呼び出しをするようにしている。

```ocaml
let read_ints () =
  let rec loop acc =
    let v = try Some (read_int ()) with End_of_file -> None in
    match v with
    | Some v -> loop @@ v::acc
    | None -> List.rev acc
  in loop []
```

で、これで末尾再帰にはなるのだが、末尾再帰にするためだけに一瞬だけ `Some` で包んですぐに剥がすのは何だか無駄な気がしてしまう。

----

実は OCaml 4.02.0 から `match` 式に [`exception` パターン](http://caml.inria.fr/pub/docs/manual-ocaml/extn.html#sec245)を書けるようになったので、もう少しスマートに書ける。

```ocaml
let read_ints () =
  let rec loop acc =
    match read_int () with
    | v -> loop @@ v::acc
    | exception End_of_file -> List.rev acc
  in loop []
```

マッチ対象の式（ここでは `read_int ()`）の評価中のみ例外ハンドラを設定し、例外が発生したら `exception` パターンと例外を照合し、例外が発生しなければ式の値を `exception` パターン以外のパターンと照合する。各場合の矢印の右側の式には例外ハンドラは設定されないので、この `loop` の呼び出しは末尾呼び出しになる。

下のような適当なエントリポイントをつけて、 `yes 1 | head -n 10000000 | ./a.out` などとしてコンパイルしたプログラムを実行するとスタックがあふれないことが確認できる。

```ocaml
let () =
  read_ints () |> List.length |> string_of_int |> print_endline
```
MinGW + OpenGL + freeglutでOpenGLの環境を作ろうとしてハマった

以下の記事を参考にOpenGLの環境を構築していた．

* mingwで絶対にopenGLを動かす．- 考えるということ
 * http://d.hatena.ne.jp/Inuneco/20110713/p1


上記の記事の中で`freeglut/lib`の中の`.a`ファイルを`C:\MinGW\lib`にコピーする際，`freeglut/lib`の代わりに`freeglut/lib/x64`の`.a`ファイルを使用すると正しくコンパイルできなくなるっぽい．(`undefined reference to`のエラーがたくさん出てくる)
v1.0への移行とグリッドの作成方法について




#"v0.12.14"から"v1.0" へ移行してみた
私は元々vue.jsの"v0.12.14"を使用しておりました。
ですが、vue.jsを使い始めてすぐにvue.js独自の書き方が理解できないことに苦しみ、"v1.0"に移行しました。

-v0.12.14
```v-on="click:sortBy(key)"```
(なぜclickがそこにあるのかな？)

"v0.12.14"では、clickがまるでcssのstyle属性のようですが、"v1.0"ではJavascriptのonclickのように扱われています。

-v1.0
```v-on:click="send"```　←new Vue()のsendメソッドを呼び出す。
```v-on:submit.prevent="report"```　←new Vue()のreportメソッドを呼び出す。

また、"v0.12.14"では```v-repeat=""```を用いて繰り返しの処理を行いますが、"v1.0"では```v-for=""```に変更されています。

このように、"v0.12.14"ではvue.js独自の書き方や名称が散見されますが、"v1.0"ではその点が変更されています。

安定したバージョンを扱いたい場合は"v0.12.14"を使用する方が多そうですね。
私的には学習のコストやコードの読みやすさという観点から"v1.0"の方が使い易いように感じました。

Q.vue.jsを使われている方は、"v0.12.14"もしくは"v1.0"のどちらを使用していらっしゃるのでしょうか？

#vue.jsを使ってテーブルを作成してみた
テーブルの作成方法は、１列目に表示する列名と、その列名をkeyに持つ情報を順番に表示するという方法をとりました。(サーバー側から取得するデータはJSON形式)

例えば、以下のような表を作成したいとします。

| お名前 | 身長(cm)  | 体重(kg) |  握力(kg) |
|:----:|:--------:|:--------:|:--------:|
| Aさん |   120    |   30     |   20     |
| Bさん |   130    |   35     |   22     |

この時、以下のように書くと、表示するデータを変更したい場合、毎回htmlを直接直す必要があります。

```html:table.html
<table>
    <thead>
        <tr>
            <th>お名前</th>
            <th>身長(cm)</th>
            <th>体重(kg)</th>
            <th>握力(kg)</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Aさん</td>
            <td>120</td>
            <td>30</td>
            <td>20</td>
        </tr>
        <tr>
            <td>Bさん</td>
            <td>135</td>
            <td>35</td>
            <td>22</td>
        </tr>
    </tbody>
</table>
```

そこで以下のようにvue.jsのv-forを用いて書き換えてみると、表示したいデータが変わっても柔軟に対応できます。
(ちなみに"v0.12.14"ではv-repeatを用いて実現することができるはず、です。)

```html:vue-table.html
<script type="text/x-template" id="grid-template">
<table>
    <thead>
        <tr>
            <th v-for="key in columns">{{ key | capitalize }}</th>
        </tr>
    </thead>
    <tbody>
        <tr v-for="entry in datas">
            <td v-for="c in columns">{{ entry[c] }}</td>
        </tr>
    </tbody>
</table>
</script>
<grid :datas="gridDatas" :columns="gridColumns">
```
```javascript:table-datas.js
//表示したいデータの取得
$($.ajax({
    type: 'GET',
    url:   , //情報取得先のURL
    success: function(res){
    form.$set('gridDatas',res.datas);
    form.$set('gridColumns',res.columns);
    }
});

Component = Vue.extend({
    template: '#grid-template',
    replace: 'true',
    props: ['datas','columns'],
});

Vue.component('grid',Component);

form = new Vue({
    el: '#grid',
    data: {
            gridDatas: [],
            gridColumns: [],
          },
    method: {
            //何かしらの処理
            },
});
```
```json:data.json
//ajaxで取得する情報
{
    "columns": [
        "お名前"
        "身長(cm)"
        "体重(kg)"
        "握力(kg)"
    ],
    "datas": [
        {
            "お名前": "Aさん",
            "身長(cm)": "120",
            "体重(kg)": "30",
            "握力(kg)": "20",
        },
        {
            "お名前": "Bさん",
            "身長(cm)": "130",
            "体重(kg)": "35",
            "握力(kg)": "22",
        },
    ],
}
```

先輩にお話をうかがったところ、サーバー側で取得した情報は上のjsonファイルのように加工せず、columnsとdatasを紐付けるkeyを持たせる方が良いそうです。
(勉強不足です。すみません…)

###終わりに
vue.jsを使用すると他にも嬉しいことが幾つもありましたので、後日記述いたします。
間違いがありましたら、ご指摘いただきたくお願いします。
Xamarin.iOSでSpriteKitを利用してゲームを作るチュートリアル的なの

###投稿が遅れてすいません
この記事での開発環境
Mac Book Air 10.11
Xamarin Studio 5.10.1
XCode 7.2


http://qiita.com/advent-calendar/2015/xamarin
第２１日はタイトル通りゲームを作る記事を書いていきたいと思います

##概要
Xamarinはみなさん知っていると思いますが、
Sprite Kit なにそれ喰えるの？美味しいの？とお思いの方も多いと思います

- Sprite kitはiOS7から追加されたゲームフレームワークです
- 某Cocos２Dを~~パクった~~参考にした感じ
- 物理エンジン付きの使える子

とにかく簡単にゲームを作れるものという印象でいいです

早速作っていきましょ！
##手順
####Xamarin Studio を起動します
左ペインにある New Solutionというところをクリックして、出てきたウィンドウの
iOS>APP>Games>Sprite Kit Gameを選択して NEXTをクリックして進めてください
![スクリーンショット 2015-12-23 0.38.29.png](https://qiita-image-store.s3.amazonaws.com/0/61806/4d214376-37bd-e4a6-8b32-e9f06a935d70.png)

App Nameを入れるところがあるので、適当に入れてください
![スクリーンショット 2015-12-23 0.39.04.png](https://qiita-image-store.s3.amazonaws.com/0/61806/72229f74-0740-ec40-b124-e3992d0d2738.png)
ここではiPadのみを選択しましたが、iPhoneを使っている場合はiPhoneのみを選択してください
プロジェクト名も適当に入れてください
![スクリーンショット 2015-12-23 0.40.15.png](https://qiita-image-store.s3.amazonaws.com/0/61806/e90a2788-2e93-89b4-8c6a-e70015348cbd.png)
お疲れ様です。プロジェクトが完成しました。
![スクリーンショット 2015-12-23 0.42.32.png](https://qiita-image-store.s3.amazonaws.com/0/61806/e6c578a8-6b9d-ad46-55da-841a267484f9.png)
あとは右上のボタンを押すだけでシミュレーターで動かすことができます

Swift でSpriteKitを開発されていた方はXamarin とでは少しAPIの使い方が異なっていますので注意が必要です
PodfileでObjective-cライブラリとSwiftライブラリ共存した時の問題(use_frameworks!)

Swiftのアプリ作ってる時に[iOS-Slide-Menu](https://github.com/aryaxt/iOS-Slide-Menu)が使いたかったんだが、[ココ](http://kazuy.net/?p=316)のやりかただと
〜〜〜〜-Bridging-Header.hに
`#import "SlideNavigationController.h"`
って書けばいいなろうなーって思ってら見えないと言われてずっとハマった。
試してるみるとPodfileに「**use_frameworks!**」を記載しているとPods内の作りがわかってしまう模様
**SDWebImage**は
`#import <SDWebImage/UIImageView+WebCache.h>`
と書くのを別の所でわかってたのでそれベースで「SDWebImage」はどこの情報なのかなーってのをちゃんと調べてみたら見つかった。

###### use_frameworks!あり
<img width="269" alt="スクリーンショット_2015-12-23_0_55_10.png" src="https://qiita-image-store.s3.amazonaws.com/0/9256/79e9ab6a-dc8c-1885-77c7-1298636f0645.png">

###### use_frameworks!なし
<img width="257" alt="スクリーンショット 2015-12-23 0.55.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/9256/22c9a607-25ed-52a3-26f5-26636d9111d5.png">

って感じで「ライブラリ名.modulemap」といかにもそれっぽいファイルを発見
中身を見てみると
###### SDWebImage
<img width="377" alt="スクリーンショット 2015-12-23 1.05.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/9256/c0202708-e089-61a8-cab2-4ebc37469f4f.png">
###### iOS_Slide_Menu
<img width="397" alt="スクリーンショット 2015-12-23 1.05.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/9256/8385ef75-e941-348b-1f8c-02d1b4782103.png">

SDWebImageとしてみるとなるほど！って答えは
`#import <iOS_Slide_Menu/SlideNavigationController.h>`

#追記！
使う.swiftで
`import iOS_Slide_Menu`
だけでいいじゃん！そもそも「〜-Bridging-Header.h」ってもういらないの？