OmniAICreator/Qiita-1.07M huggingface dataset:
OpenFOAMのソルバーアプリケーション実行時に与えることのできるオプション

# 参考リンク

[OpenFOAM® C++ Documentation: icoFoam (incompressible flow solvers)](http://www.openfoam.com/documentation/cpp-guide/html/a03356.html)
[OpenFOAM® C++ Documentation: icoFoam.C](http://www.openfoam.com/documentation/cpp-guide/html/a03356_source.html)

# 説明

一番簡単なチュートリアルにも使用されているicoFoamを使って説明します。上のicoFoam.Cのリンクを見てください。main関数の一行目で`setRootCase.H`というヘッダーファイルが読み込まれています。

```cpp:icoFoam.C
62 ...
63 #include "fvCFD.H"
64 #include "pisoControl.H"
65 
66 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
67 
68 int main(int argc, char *argv[])
69 {
70     #include "setRootCase.H"    // 引数の読み込み
71     #include "createTime.H"
72     #include "createMesh.H"
73 ...
```

そこで
[OpenFOAM® C++ Documentation: setRootCase.H](http://www.openfoam.com/documentation/cpp-guide/html/a08439_source.html)
を見てみると下のようになっています。

```cpp:setRootCase.H
1 //
2 // setRootCase.H
3 // ~~~~~~~~~~~~~
4 
5 Foam::argList args(argc, argv);
6 if (!args.checkRootCase())
7 {
8     Foam::FatalError.exit();
9 }
```

`Foam::argList`クラスのオブジェクト`args`が作られているのがわかります。この`Foam::argList`クラスの定義
[OpenFOAM® C++ Documentation: argList](http://www.openfoam.com/documentation/cpp-guide/html/a00070.html)
を見てみると、上から4分の1くらいのところにデフォルトで設定されているコマンドラインオプションが説明されています。

|オプション  |説明|
|:----------|:------------------------------|
|-case \<dir>|現在のディレクトリではなく指定されたケースディレクトリを選択する。|
|-parallel   |ケースを並列ジョブとして与える。|
|\-doc        |文書をブラウザに表示する。|
|\-srcDoc     |ソースの文書をブラウザに表示する。|
|\-help       |使用方法を表示する。|

よって例えば

```console
$ icoFoam -case test1
```

と入力するとカレントディレクトリ内にある`test1`というサブディレクトリに作られているケースを読み取ってicoFoamを実行するということになります。

-parallelは並列計算時に使用するオプションです。例えば４つのプロセッサーを使って並列計算する場合は

```console
$ mpirun -np 4 icoFoam -parallel
```

デバッグモードの場合は

```console
$ mpirunDebug -np 4 icoFoam -parallel
```

とします。

[OpenFOAM® v3.0+: New Parallel Functionality](http://www.openfoam.com/version-v3.0+/parallel.php)
[OpenFOAM® wiki: How to debugging](https://openfoamwiki.net/index.php/HowTo_debugging)
crond 設定


##環境
CentOS release 6.7 (Final)

##インストール
```
# yum install crontabs
```
確認

```
# service crond status
```
起動

```
# service crond start
```

##自動起動設定

設定を確認

```
# chkconfig --list | grep crond
crond 0:off 1:off 2:off 3:off 4:off 5:off 6:off
```

すべてoffは自動起動off
crond を自動起動に設定します。

```
# chkconfig --level crond on
```


再度設定を確認します。

```
# chkconfig --list | grep crond
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
```

##crontab 設定

```
# crontab -e
```

 分　時　日　月　曜日　コマンド

 
### 設定可能な数値

|設定項目	|数値|
|:-----------|------------:|
|分	|0-59|
|時	|0-23|
|日	|1-31|
|月	|1-12|
|曜日	|0-7 0=日、1=月、2=火、3=水、4=木、5=金、6=土、7=日|

###実行時間指定方法

|指定方法	|設定例|	説明|
|:-----------|------------:|:------------:|
|リスト| 0,10,20,30| 分フィールド指定した場合は0,10,20,30分に実行します。|
|範囲| 1-5| 月フィールドで指定した場合、1,2,3,4,5月に処理を実行します。|
|共存| 1,6,9-11| 時間フィールドで指定した場合、1時、6時、9時、10時、11時に処理を実行します。|
|間隔| */10| 分フィールドで指定した場合、10分間隔で処理を実行します。「/」の後ろに指定した値の間隔で処理を実行します。|
[PostgreSQL] 分析関数を使ったサブクエリでできるだけローコストにCOUNT(DISTINCT field) OVER()をする

PostgreSQL9.5.3 以前（確認時点）ではCOUNT(DISTINCT field) OVER(...)は実装されていません。
ですが代替方法は存在するので今回はその共有です。

[サンプルとして利用したテーブル定義・デモデータ・SQLのダウンロード](https://github.com/Synashida/PGCountDistinctInWindowFunction)

今回使用するテーブルのイメージ

| 都道府県名        | 公園名              | 訪問者IP            |
|:-----------------|:------------------|:------------------|
| 東京都             | 水元公園            | 1.1.1.1             |
| 東京都             | 水元公園            | 1.1.1.1             |
| 東京都             | 水元公園            | 2.2.2.2             |
| 東京都             | 水元公園            | 3.3.3.3             |
| 東京都             | 日比谷公園         | 4.4.4.4             |
| 東京都             | 日比谷公園         | 4.3.2.1             |
| 神奈川             | 山下公園            | 10.11.1.1         |
| 神奈川             | 山下公園            | 12.11.123.1     |
| 神奈川             | 山下公園            | 10.11.1.1         |
| 神奈川             | 七沢森公園         | 1.1.1.1             |
| 神奈川             | 七沢森公園         | 11.23.45.67     |
| 神奈川             | 七沢森公園         | 11.23.45.67     |
| 神奈川             | 七沢森公園         | 12.1.1.1           |

集計結果として取得したいこと
都道府県・公園名・訪問者IPをすべて表示し、右列に集計結果を表示してほしい。
集計条件は

1. 県別訪問者数
2. 都道府県別公園別訪問者数
3. 都道府県別ユニーク訪問者数
4. 公園別ユニーク訪問者数
5. ユニーク訪問者数

です。
1と2だけならWindow関数のSUM() OVER()で取得可能です。
3からが普通に考えるとCOUNT DISTINCTが必要になります。
が、残念なことにPostgreSQLではWindow関数でのDISTINCTが実装されていません。

その解決策としてLAG関数を使います。
実際のSQLは下記になります。

```PostgreSQLCountDistinctInWindowFunction.sql
-- Window関数でCOUNT(DISTINCT field) OVER()を擬似的に実現する
SELECT
  都道府県名
  , 公園名
  , "訪問者IP"
  , 県別訪問者数
  , 都道府県別公園別訪問者数
  , SUM(都道府県別ユニーク訪問者フラグ) OVER(PARTITION BY 都道府県名 ORDER BY 都道府県名) AS 都道府県別ユニーク訪問者数
  , SUM(公園別ユニーク訪問者フラグ) OVER(PARTITION BY 公園名 ORDER BY 公園名) AS 公園別ユニーク訪問者数
  , SUM(ユニーク訪問者フラグ) OVER() AS ユニーク訪問者数
FROM
(
SELECT 
  都道府県名
  , 公園名
  , "訪問者IP"
  , COUNT(*) OVER(PARTITION BY 都道府県名 ORDER BY 都道府県名) AS 県別訪問者数
  , COUNT(*) OVER(PARTITION BY 都道府県名, 公園名 ORDER BY 都道府県名, 公園名) AS 都道府県別公園別訪問者数
  , CASE WHEN "訪問者IP" = LAG("訪問者IP", 1) OVER(PARTITION BY 都道府県名 ORDER BY 都道府県名, "訪問者IP") THEN 0 ELSE 1 END AS 都道府県別ユニーク訪問者フラグ
  , CASE WHEN "訪問者IP" = LAG("訪問者IP", 1) OVER(PARTITION BY 公園名 ORDER BY 公園名, "訪問者IP") THEN 0 ELSE 1 END AS 公園別ユニーク訪問者フラグ
  , CASE WHEN "訪問者IP" = LAG("訪問者IP", 1) OVER(ORDER BY "訪問者IP") THEN 0 ELSE 1 END ユニーク訪問者フラグ
FROM
  test
ORDER BY
  都道府県名
  , 公園名
) AS 集計基本結果セット
ORDER BY
  都道府県名
  , 公園名
```

着想ポイントは
*直前の行が同じ値だったら0違えば1を立てて、そのあとでSUMったらOKじゃね？*
です。
LAG関数利用行の思考を分解します。

1. CASE の要件は "訪問者IP"が直前行と同じであれば 0 そうでなければ 1を返してほしい
2. データが指定のソート順でない場合、直前の行が正しく判断できないので、OVER()関数内で グループ化すべき列をPARTITION BY で、LAGが誤集計を行わないようにORDER BYを指定しています。
3. この二つをうまく組み合わせてWindow関数を使った状態でDISTINCTの内部処理風なことをFromサブクエリに実現させます
4. サブクエリで取得した1と0を親クエリでSUMって合計を算出
という流れです。

直感的でないのであんまり美しいとは言い難いですが、私はSQLが好きなので・・・。
Macでvagrantを動かすための環境構築方法

# 概要

Macでbrew, brew caskを使用してvagrant(viratualbox)のインストール方法を説明します。

# brew のインストール方法

```bash
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew -v # brewがちゃんと動くかを確認。
$ brew update
```

### 注意点
1. スクリプトの実行でエラーが出る場合は、以下の参考サイトからインストール用のスクリプトをコピーし直して実行してみてください。  
（PCによっては"がエスケーブされたり、余分なスペースが入ったりする場合もあります。）
2. インストールでエラーはでなかったけど、` brew -v ` で何も表示されない場合は、**端末の再起動**など試してみてください。


## 参考サイト
http://brew.sh/index_ja.html

# brew cask のインストール方法

```bash
$ brew tap caskroom/cask
```

### 注意点
1. エラーが出る場合はbrewがうまくインストールされてないかもしれません。`brew -v`がきちんと表示されることを確認してください。

## 参考サイト
https://caskroom.github.io/

# virtualbox のインストール

```bash
# virtualboxが検索できることを確認。
$ brew cask search virtualbox
==> Exact match
virtualbox
==> Partial matches
virtualbox-beta		    virtualbox-extension-pack

# virtualboxをインストール
$ brew cask install virtualbox
```


# vagrant のインストール
```bash
# vagrantが検索できることを確認。
$ brew cask search vagrant
==> Exact match
vagrant
==> Partial matches
vagrant-bar	  vagrant-manager

# vagrantをインストール
$ brew cask install vagrant
```


# vagrantの使い方

以下のページを参考にしてください。

[Vagrantの初期設定、コマンド、スナップショットの設定](http://qiita.com/yoshiokaCB/items/b0f6a2784670482c6c7e)


# 関連情報

* CentosでRuby環境構築（ansible使用） 
[Vagrant + Ansible でCentOSにRubyの環境構築してみる。](http://qiita.com/yoshiokaCB/items/772bfadf6b7505cb8ba9)

* DebianでRubyの環境構築
[Debianでrbenvを使ってRailsの環境を作る。（島根県CMSの環境構築）](http://qiita.com/yoshiokaCB/items/29f04afd2f945fb1f035)

* Drupal（CMS）を構築
[Drupal をVagrantで動かしてみる。](http://qiita.com/yoshiokaCB/items/94085870aa461d7de40d)
【イベントレポート】オープンイノベーションセミナー

[オープンイノベーションセミナー(2016/06/28開催)](http://prtimes.jp/main/html/rd/p/000000040.000016550.html)に参加してきました。

今回は日本国内でコーポレートアクセラレーターとして事業展開する01Booster社による２時間のセッション。非常に濃い内容で質疑応答も活発で得るものが多かったです。

##株式会社ゼロワンブースター
・コーポレートアクセラレーターの商標を持つアクセラレーター企業
・コンサルティングだけでなくベンチャー投資機能も保持(10社程度実績あり）

##コーポレートアクセラレーターとは？
大企業にとっては「リスク分散」    ：自分達でリスクをとる事をしなくていい
スタートアップにとっては「支援」  ：圧倒的な大企業リソースで活用

01Boosterが定義したコーポレートアクセラレーター：
・本体から切り離した出島環境で
・ベンチャー企業の新規性、実行力、覚悟を活用
・失敗コストを制限し
・リスクを外部化し
・スピード感を持って
・数多くトライする

・北米を中心にシードアクセラレーター市場が拡大した。YCombinator、500startupsなど、日本ではSamurai Incuvate、Digital Garageが代表格。ただしシード投資とアクセラレーション機能でビジネス化が難しいのが実情。現にYConはシードからは撤退してレイトへ移行

・TechStarに代表されるように大企業によりそった形でのアクセラレーターが増加
・大企業の雇用流動性の支援。例えば地方の中小企業に優秀な大企業人材を投入させるなど

・日本流のアクセラレーターモデルを提供
　例）期間を長めにとる(10か月～1年)。投資判断は遅めにする（海外では期初に投資が多い)
・日本の場合だとスタートアップ企業を探すことよりも、大企業内部の構造改革、組織改革に時間がかかる
・アクセラレーターは実は組織改革が目的のひとつでもある（必然的な副産物、事業化がゴールだが副産物を十分に評価すべき）

##大企業への処方箋
01ブリッジプログラム
・01Boosterのクライアントニーズが発端
・大企業の人材をスタートアップに派遣。人材育成、イントレプレナー支援、社内組織改革などが目的

##その他
・大企業にスタートアップの提供するサービスや事業を「使ってください」というモデルではない
・アクセラレーターの投資はマイナー投資とグローバルで常識（12～16%)
 メジャーホルダーになるとスタートアップ側のやる気がなくなる可能性あり
・欧米だと1000万円～1500万円程度
・インキュベーターとアクセラレーターの違い
 　インキュベーターは施設を提供
 　アクセラレーターはプログラムを提供

以上がセミナーの内容です。
ここ最近は連日のように各社からアクセラレーションプログラムが発表されているように感じます。

三菱東京UFJ銀行 http://www.bk.mufg.jp/innovation/accelerator/
KIRIN http://kirin.01booster.com/2016/
森永製菓　http://morinaga.01booster.com/2016/
LIXIL http://lixil.01booster.com
第一勧業信用組合　http://tokyoaccelerator.01booster.com
東急電鉄　http://www.tokyu-ap.com

これまでクローズドイノベーションが得意だった日本企業だからこそ、ここに来て社外にイノベーションを求める潮流が目立っているのかもしれません。
Windows7のWindowsUpdateが進まない問題の対処（2016/6）

# Windows7のWindowsUpdateが進まない問題の対処（2016/6）
2016/6に、Windows7 professional 32bit SP1 日本語を仮想環境にインストールして、
WindowsUpdateを実行したら、「更新プログラムを確認しています」のまま、半日たっても進まなくなりました。
最終的に、クリーンインストール後に、先にいくつかのパッチを適用後にWindowsUpdateをすることで、
１５分くらいで先に進めるようになりました。
結局、どのような手順が正しいのか情報がなかったのと、今後新しいパッチが出たら手順が変わるかもしれないので、誰が、何時、どの環境でやっても同じ結果になるとは限らないので、参考情報程度の内容になりますが、同じような事象で困った人の参考になればと思い記載させていただきます。

## 動作環境
まっさらな環境に、Windows7 professional 32bit SP1 日本語をインストール

## 手順
+ Chromeのインストール  
クリーンインストール状態のIEで、Microsoftのページが一部表示できず、必要なパッチのダウンロードサイトまでたどり着けなかったので・・・  
+ WindowsUpdate前のパッチ適用
  + [Windows Update エージェントを最新バージョンに更新する方法(KB949104)](https://support.microsoft.com/ja-jp/kb/949104)  
    ここから"サポートされているすべての x 86 ベース バージョンの Windows 7 SP1"のパッケージをダウンロードして、インストール  
  + [Windows 7 用セキュリティ更新プログラム (KB3145739)](https://www.microsoft.com/ja-jp/download/details.aspx?id=51857)  
    ここからダウンロードして、インストール  
  + [Windows 7 および Windows Server 2008 R2 用 Windows Update クライアント: 2016 年 3 月(KB3138612)](https://support.microsoft.com/ja-jp/kb/3138612)  
    ここから"サポートされているすべての x 86 ベース バージョンの Windows 7 SP1"のパッケージをダウンロードして、インストール  
  + [Windows 7 用セキュリティ更新プログラム (KB3161664)
](https://www.microsoft.com/ja-jp/download/details.aspx?id=52823)  
    ここからダウンロードして、インストール  

## おわりに  
最初に書きましたが、正当な対処方法がわからないので、自己責任で実施をお願いします。
googleで検索すれば同じような情報が多数あるので、WindowsUpadteに根本的に何か問題があるのですかね。
Microsoftが公式に対処方法を出してくれるよいのですが。
以上
ActiveRecord で timestamp を更新せずに保存する

今回は小ネタです。

保存されたデータを更新したいが timestamp は更新したくないというケースがあると思います。
(何らかの外部の契機に応じてフラグを立てるとかデータを埋めるとか)

ActiveRecord の設定を変更してそもそも update 時に timestamp を更新しないようにすることもできるのですが、それはそれで通常の save のときに困ります。

そこで専用のメソッドをモデルに用意します。

```rb
class SomeModel
  def save_wo_timestamp
    class <<self
      def record_timestamps; false; end
    end

    begin
      self.save
    ensure
      class <<self
        remove_method :record_timestamps
      end
    end
  end
end
```

これで前述したような timestamp を更新したくない save ができるようになります。

```rb
s = SomeModel.find(100)
s.someone = "ほげ"
s.save_wo_timestamp # 時刻を更新せずに保存
```

よかったですね。


ちなみに[こちら](https://wwwtech.de/articles/2013/oct/rails-update-dataset-without-updating-magic-timestamp-columns
)の記事を参考にしました。

あとあまり関係ないですが[メタプログラミング Ruby](https://www.oreilly.co.jp/books/9784873117430/) は良書です。
実際にメタプログラミングをする機会はそれほど多くありませんが、 Ruby におけるメタプログラミングに触れるには大いに参考になると思います。


7/5 追記

Rails 5 では Model.save!(touch: false) とすることでタイムスタンプを更新せずに保存できます。簡単になりました。
特別なツール不要！  TypeScript 2時代の型定義ファイルの取り扱い方

TypeScriptを使う上で欠かせないのが型定義ファイルの取り扱いです。TypeScript 1系では、型定義ファイルを管理するツールとして、[tsd](https://github.com/DefinitelyTyped/tsd)や[Typings](https://github.com/typings/typings)がありました。**TypeScript 2以降は特別なツールはいらず、Node.jsインストール時に付属する[npm](https://www.npmjs.com/)のみで型定義ファイルが管理できる機能が開発中です**。

# TypeScript 2以降で型定義ファイルをインストールする
npmの初期設定後、型定義ファイルをインストールするには次のコマンドを実行します。

```bash:コマンド
npm install --save @types/(型定義ファイル名)
```

例えば、jQueryの型定義ファイルをインストールするには次のようにします。

```bash:コマンド
npm install --save @types/jquery
```

プロジェクトフォルダの`node_modules`フォルダに`@types`フォルダが作成され、jQueryの型定義ファイルがインストールされます。

<img width="260" alt="" src="https://qiita-image-store.s3.amazonaws.com/0/67884/5b63be50-ee4a-7f17-9816-8e2a1815177a.png">

# TypeScript 2で型定義ファイルを使う
先ほどインストールしたjQueryの型定義ファイルを用いて、TypeScript 2でjQueryを使ってみます。

次のサンプルコードを試します。ファイル名は`hoge.ts`です。

```js:TypeScript2でjQueryを使う
$(function () {
	alert("hoge");
});
```
jQueryの型定義ファイルを使いますが、**```reference path```で型定義ファイルを読み込んだり、`tsconfig.json`の`files`に型定義ファイルを指定したりといった作業は不要です**。

# コンパイルする
`hoge.ts`をコンパイルします。`Typings`等の特別なツールは使わず、npmでインストールした型定義ファイルのみでコンパイルが成功します。

```bash:TypeScript2のコンパイル
npx tsc hoge.ts 
```

※ npxコマンドについては記事「[npxでローカルパッケージを手軽に実行しよう](https://qiita.com/tonkotsuboy_com/items/8227f5993769c3df533d)」を参照ください


# どんな型定義ファイルが使えるのか
使用できる型定義ファイルは「[TypeScript Types Search](http://microsoft.github.io/TypeSearch/)」より検索できます。多くの型定義ファイルが使用可能であり、例えば筆者が使う機会のある以下のようなライブラリも対応していました。

- three.js
- pixi.js
- CreateJS
- node
- 他多数
 
# TypeScript 2で型定義ファイルが便利になる
TypeScript 2の型定義ファイル管理は、[tsd](https://github.com/DefinitelyTyped/tsd)や[Typings](https://github.com/typings/typings)に比べて楽になっています。**特別な知識は不要で、npmさえ使えればすぐに型定義ファイルを使える**のです。TypeScript導入の敷居も下がることでしょう。筆者はこれまで型定義ファイルで煩わしさを感じることが度々ありましたが、TypeScript 2の登場により悩みが解決されました。
[メモ] Visual Studio 2015 Update 3 インストール時に、Setup Failed!

## メモ

### 環境
- Windows 7 x64<br>(だいぶ使ってて、いろんなものをインストールしたり、アンインストールしたり..)
- Visual Studio 2015 Update 3 Professional の英語版 (日本語だとアンインストールするとき、面倒..)

### 症状
- ISOイメージを解凍したものから、↓のようなオプションでインストールしようとしたら、比較的早い段階で、Setup Failed!とでてインストールできない。
    - `[v] Visual C++にチェック。(XP Supportははずす)`
    - `[v] Microsoft Web Developer Tools (デフォルトでついてる)`
    - `Common Tools > [v] Visual Studio Extensibility Tools Update 3`

    (=>13GBくらい)

### インストールできた
1. [.NET Framework 4.6.1](https://support.microsoft.com/en-us/kb/3102436)をインストール

2. ↓でインストール
    - `[v] Visual C++にチェック。(XP Supportははずす)`
    - `[v] Microsoft Web Developer Tools (デフォルトでついてる)`
    - (インストールしない: `[　] Visual Studio Extensibility Tools Update 3`)

\# 1.と2.を同時にやってしまったので、どちらかなのか、両方やらないといけないのか、同じような目にあったら確認しよう
Jupyterでmatplotlibのインポートした時にImportErrorが出た時の対処法

Jupyterでnumpy触ってて```import matplotlib.pyplot as plt```とかやった時に、

```
ImportError: libXext.so.6: cannot open shared object file: No such file or directory
```
とか

```
ImportError: libSM.so.6: cannot open shared object file: No such file or directory
```
とか

```
libXrender.so.1: cannot open shared object file: No such file or directory
```
とか出た時に対処する方法

```
yum install libXext.x86_64
yum install libSM.x86_64
yum install libXrender.x86_64
```
インポートエラーが出たときは、Linux側で```yum search < ライブラリ名 >```でライブラリ一覧を出して、適切な物をインストールする。

例えば、

```
ImportError: libSM.so.6: cannot open shared object file: No such file or directory
```
の時は、

```
yum search libSM
```
として、一覧から環境によってインストールする物を選択して、```yum install```する。

エラーに表示が有る事をそのまま対処しただけですが…
CSS を使用する際に参考にするサイト

#CSS TRAINING

##仕様
[W3C](https://www.w3.org/Style/CSS/)
[日本語訳](https://triple-underscore.github.io/#spec-list-CSS)

##初心者向け
[CSSレイアウトを学ぶ](http://ja.learnlayout.com/)

##ビジュアルで理解する(英)←New!
[A free visual guide to CSS](http://cssreference.io/)

##+α

- Flex Box
- Grid Layout

###
[flex box](http://caniuse.com/#feat=flexbox)
[Grid Layout](http://caniuse.com/#feat=css-grid)


##Flex Box　(Flexible Box Module Layout)

* 仕様
[仕様(英語)](https://www.w3.org/TR/css-flexbox/)
[仕様(日本語)](https://triple-underscore.github.io/css-flexbox-ja.html)

* チュートリアル形式でflex boxが学べる
[FLEXBOX FROGGY](http://flexboxfroggy.com/#ja)
* flex box を使った用例・パターン集
[FLEXBOX Patterns](http://www.flexboxpatterns.com/)
* チートシート
[A Complete Guide to Flexbox](https://css-tricks.com/snippets/css/a-guide-to-flexbox/)

##Grid Layout

*仕様
[仕様(英語)](https://www.w3.org/TR/css-grid-1/)
[仕様(日本語)](https://triple-underscore.github.io/css-grid-ja.html)
snmp v1トラップとv2トラップの定義と、.0子オブジェクト

訳あって、自分でtrapmibを定義する必要がありますが、
v1トラップとv2トラップの記載がいまいち理解できないところです。

その中で、以下のサイトの内容を読みつつ、
ひとまずv2トラップの内容で、trapmibを作成していますが、
解釈した内容をまとめておきます。

http://www.ibm.com/support/knowledgecenter/ja/SSSHTQ_8.1.0/com.ibm.netcool_OMNIbus.doc_8.1.0/omnibus/wip/ua_mibmgr/reference/omn_ref_mib_mibobjects.html


* 0という子オブジェクトを使ったtrapmib定義は、v2のtrapmib定義の中に、v1のtrapmibを定義して扱えるようにするために定義する。 
* そもそも、v1のtrapmibの定義に、親となるオブジェクトを指定する方法がない。
* 親となるオブジェクトは、無条件にenterprise oidなる。
* たとえば、エンタープライズナンバーが99999なら、.1.3.6.1.4.1.99999.0.xxxx　というoidが、トラップoidとなる。
* （この.0をつけるのかどうかが、mibの仕様なのか、エージェントが勝手につけているのかが、いまいちよくわからない）
* v2のtrapmibの定義であれば、普通のsnmpmibと同じように、親を順番に定義できる
* なので、v2のトラップであれば、.1.3.6.1.4.1.99999.11.2.1 みたいなトラップoidも定義できる、はず。
* v2のtrapのみ対応するなら、.0、という子オブジェクトを作る必要はない。
* v2のtrapmibの中にv1を加えるときの、この.0の記述について、間違っているベンダーもある。
* RFC的には、oidとオブジェクトの名前、両方の定義が必要なのに、.0のオブジェクトに名前をつけてない定義があるそうな。


何が一番、物事を難しくしているのかというと。

RFCやドキュメントを定義した人が、
つまりこういう定義で、こういうトラップOIDになります！
みたいな例、exampleを書かないことが悪い。

文字だけの解釈じゃわからないよ・・・。みんなちゃんと例を書こうよorz
【Swift】Objective-CのプロパティをSwiftから扱うときの注意点

Objective-Cの`@property`で定義されたプロパティをSwiftから扱うときに知識不足で少し失敗したので、調べてみました。

間違い等があれば、ご指摘ください :raised_hands: 

# 失敗内容
- SwiftからObjective-Cのプロパティ(`nullability annotation`なし)を使用
- Swiftで`implicitly unwrapped optional`な型に変換されたプロパティをそのまま使用
- `implicitly unwrapped optional`に変換されたObjective-Cの値がnilってることが原因で実行時エラー

# 結論
- `nullability annotation`を適切に使用してSwiftから呼ぶときに`implicitly unwrapped optional`を使わないようにする。
- 上記が難しい場合は`nullability annotation`を指定していないプロパティをSwiftから使うときには、nilチェックをする。（ちょっと気持ち悪い）

# `nullability annotation`を指定していないプロパティをSwiftから使う

## `nullability annotation`とは？

`nullability annotation`とは、Objective-Cのプロパティにつけられる`nullable`や`nonnull`といった属性になります。（詳しくは[こちら](https://developer.apple.com/swift/blog/?id=25)）

## `nullability annotation`がついたプロパティをSwiftから見ると？

Objective-Cのコードにて適切に`nullability annotation`が使用されている場合にSwiftでそのプロパティを使用するとどのように扱われるのでしょうか？

なんとなく想像できるかと思いますが、

- `nullable`はOptionalでwrapされた型
- `nonnull`は非Optionalな型

としてSwiftで扱うことができます。

[Objective-C]

```objc
@property (nullable) id nullableProperty;
@property (nonnull) id nonNullProperty;
```

[Swift]

```swift
var nullableProperty: AnyObject?
var nonNullProperty: AnyObject
```

## `nullability annotation`がついていないプロパティをSwiftから見ると？

次に、`nullability annotation`が使用されていないプロパティをSwiftから扱うときにはどうなるか見てみます。

[Objective-C]

```objc
@property id unannotatedProperty;
```

[Swift]

```swift
var unannotatedProperty: AnyObject!
```

`nullability annotation`が使用されていないと、**`!`**が付いています。これは**`implicitly unwrapped optional`**と言うものです。
`implicitly unwrapped optional`の実体はOptionalですが、確実に値が入っているという前提で暗黙的にunwrapされて使用されます。

実体はOptionalなので、もしnilが入っていた場合は暗黙的なunwrapでエラーになります。

## 気をつけたい点

ここでObjective-Cから変換された`implicitly unwrapped optional`のプロパティの扱いに注意が必要です。
`implicitly unwrapped optional`なので値が入っているはずなのですが、場合によってはObjective-Cのコードにてnilが入っているということが起こりえます。

なので、通常の`implicitly unwrapped optional`よりも気をつけて扱わないと予期せぬ実行時エラーに遭遇する可能性があります。

# 結論（再掲）
もし、Objective-Cから呼んだプロパティが`implicitly unwrapped optional`になっていたら以下のように対応するのが良さそうです。

- `nullability annotation`を適切に使用してSwiftから呼ぶときに`implicitly unwrapped optional`を使わないようにする。
- 上記が難しい場合は`nullability annotation`を指定していないプロパティをSwiftから使うときには、nilチェックをする。（ちょっと気持ち悪い）

# 終わりに

結論にも書いた通り、Objective-C側で適切に`nullability annotation`を使うことでSwiftと連携したときに安全なコードが書けそうです。


# 参考

- https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithObjective-CAPIs.html#//apple_ref/doc/uid/TP40014216-CH4-ID45
- https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID334
- http://developer.wonderpla.net/entry/blog/engineer/ObjC_Swift_Nullable/
PostgreSQLでは副問い合わせ(subquery)に別名を付けないと怒られたメモ

### 怒られたSQL文

<pre>
SELECT
    年月,
    SUM(販売金額) AS 販売合計金額
FROM
    (
        SELECT
            TO_CHAR(s.sale_date, 'yyyy-mm') AS 年月,
            s.quantity * p.price AS 販売金額
        FROM
            sales AS s
                JOIN
            products AS p ON  s.product_id = p.product_id
    )
GROUP BY
    年月
ORDER BY
    年月
;

----------------------------------------------------
db_name=# 上記SQL文
ERROR:  subquery in FROM must have an alias
LINE 1: select 年月, sum(販売金額) as 販売合計金額 from (select TO_C...
                                                        ^
HINT:  For example, FROM (SELECT ...) [AS] foo.
</pre>

### 修正したSQL文

<pre>
SELECT
    年月,
    SUM(販売金額) AS 販売合計金額
FROM
    (
        SELECT
            TO_CHAR(s.sale_date, 'yyyy-mm') AS 年月,
            s.quantity * p.price AS 販売金額
        FROM
            sales AS s
                JOIN
            products AS p ON  s.product_id = p.product_id
    ) AS 販売実績別合計金額 !!!!ココ!!!!
GROUP BY
    年月
ORDER BY
    年月
;
</pre>

### 補足：そもそも副問い合わせを使わないSQL文

<pre>
SELECT
    TO_CHAR(s.sale_date, 'yyyy-mm') AS 年月,
    SUM(s.quantity * p.price) AS 合計販売金額
FROM
    sales AS s
        JOIN
    products AS p ON  s.product_id = p.product_id
GROUP BY
    TO_CHAR(s.sale_date, 'yyyy-mm')
ORDER BY
    TO_CHAR(s.sale_date, 'yyyy-mm')
;
</pre>
Docker Compose で Go の開発環境をサクッと作る

[Dockerを使ったGolang開発環境](http://unknownplace.org/archives/golang-development-enviroment-with-docker.html)

上記は1年ほど前の記事のようなのですが、今だと docker-compose でボリュームコンテナが作れるようになっているので、もっと楽できそうだと思い、やってみました。

やってみた結果はこちら→ https://github.com/macoshita/go-docker-dev

リポジトリを見てもらえば分かるのですが、実質下記の docker-compose.yml さえ書けば他は何もいりません。

```yaml
version: '2'

services:
  app:
    image: 'golang:1.6-onbuild'
    volumes:
      - 'data:/go'
      - '.:/go/src/app'
    ports:
      - '8080:8080'
    command: 'go run main.go'

volumes:
  data:
    driver: 'local'
```

依存ライブラリが変わった時は、下記コマンドで download を行います。

```
docker-compose run app go-wrapper download
```

下記コマンドで実行。上記リポジトリでは Gin で 8080 にサーバを立てていて、 `localhost:8080/ping` にアクセスすると pong と返されます。

```
docker-compose up
```

参考にした記事と比べて、

- ボリュームコンテナを事前に作る必要がなくなった
- 依存ライブラリのダウンロードコマンドが短くなった
- オフィシャルイメージをそのまま使ってるので docker-compose build 不要

などなど、かなり楽できるようになりました。
SwiftでKotlinのapplyっぽいものを使いたい


#apply使いたい
SwiftとKotlin、両方書いているとたしかに似ていていい感じなのですが、
KotlinのapplyがSwiftに無いのがちょっと不便。
ちなみにKotlinのapplyはスコープ関数と呼ばれるもので、下記の投稿が詳しいです。
[Kotlin スコープ関数 用途まとめ](http://qiita.com/ngsw_taro/items/d29e3080d9fc8a38691e)

まぁそこで、無いなら作ればいいじゃんってことで、イジイジしていたらそれっぽいのができたので晒してみます。
（当方Swift力が低いため、不適切なところがあるかもですがご了承ください）

# Before
例えばこんなコード

```swift
let label = UILabel()
label.frame = CGRectMake(0, 0, 100, 100)
label.text = "swift"
label.textColor = UIColor.cyanColor()
addSubview(label)
```
別に悪くはないと思いますが、もうちょっとスッキリしたい

# 定義

```swift
protocol ApplyProtocol {}

extension ApplyProtocol {
    func apply(closure: (this: Self) -> Void) -> Self {
        closure(this: self)
        return self
    }
}

extension NSObject: ApplyProtocol {}
```
コードを見て頂ければ雰囲気でわかると思いますが、自身をクロージャーで返す`apply`を定義し、
それを`NSObject`で拡張することで大概のクラスは`apply`を使うことが出来るようにしています。
`this`と書いているところは結構なキモさを醸し出していると思いますが。
※ちなみに`this`は`let this`なため、構造体（struct）では使うことが出来ないっぽいです。。

# After

```swift
addSubview(UILabel().apply { this in
    this.frame = CGRectMake(0, 0, 100, 100)
    this.text = "swift"
    this.textColor = UIColor.cyanColor()
})
```
スッキリした感。まぁ`self`で`UILabel`を参照できたら良いのですが出来なかったので、`this`としちゃってますが。当然`this in`を無くして`$0`でもOKです。
スコープも制限されているので、名前空間を汚さないので良いのではないだろうか。

# まとめ
extension便利だな。
apply使っていこうと思う。

[使うと手放せなくなるSwift Extension集](http://qiita.com/tattn/items/647e094936287a6bd2d3)
[iOSアプリの開発効率をあげるSwiftの便利Extension](http://himaratsu.hatenablog.com/entry/swift/extension)
Golang 構造体と仲良くなろう

# 目的 
golangの構造体に慣れるためのメモです。

## 複数の構造体が入っている配列を作成してjsonに変換してみる

``` sample.go
package main

import (
	"encoding/json"
	"fmt"
)

type Animal struct {
	Name string
	Age int
}

type Animals []Animal

func main() {
        // Animal構造体初期化
	var inu Animal = Animal {
		Name: "わんわん",
		Age: 3,
	}

        // こっちの書き方でも初期化できる
	neko := Animal {
		Name: "にゃんにゃん",
		Age: 8,
	}

        // 配列宣言
	var animals Animals

        // 配列にinuとnekoを追加する
	animals = append(animals, inu)
	animals = append(animals, neko)

	fmt.Println(animals)
	// ⇛ [{わんわん 3} {にゃんにゃん 8}]

	// 配列をjsonに変換する
	b, _ := json.Marshal(animals)
	fmt.Printf("%s\n", b)
	// ⇛ [{"Name":"わんわん","Age":3},{"Name":"にゃんにゃん","Age":8}]
}
```

## ポインタと値の挙動

```struct.go
package main

import "fmt"

type Animal struct {
	Name string
	Age int
}

type Animals []Animal

func main() {
	fmt.Println("patternA")
	patternA()

	fmt.Println("patternB")
	patternB()

	fmt.Println("patternC")
	patternC()

	fmt.Println("patternD")
	patternD()

	fmt.Println("patternE")
	patternE()
}

func patternA() {
	cat1 := &Animal{} // &ついているんで、ポインタ
	fmt.Println(cat1)
	fmt.Println(*cat1) // * つけてアクセスしたので値を示す

	// =>
	//&{ 0}
	//{ 0}
}

func patternB() {
	cat1 := &Animal{}

	fmt.Println(cat1)  // &ついてるんで、ポインタ
	fmt.Println(*cat1) // * つけてアクセスしたので値を表す

	cat2 := cat1
	fmt.Println(cat1) // &ついてるんで、ポインタ
	fmt.Println(cat2) // cat1を代入した変数なので、ポインタ

	cat2.Name = "catty" // ポインタを渡した別変数でフィールド書き換え
	fmt.Println(cat1)
	fmt.Println(cat2)

	// =>
	// &{ 0}
	// { 0}
	// &{ 0}
	// &{ 0}
	// &{catty 0}
	// &{catty 0}
}

func patternC() {
	cat1 := &Animal{}

	fmt.Println(cat1) // &ついてるんで、ポインタ
	fmt.Println(*cat1) // *つけてアクセスしているので、値を表す

	cat2 := *cat1 // 値をcat2に代入
	fmt.Println(cat1) // ポインタ
	fmt.Println(cat2) // 値

	cat2.Name = "catty" // フィールドを書き換える

	fmt.Println(cat1) // 値を渡した元の変数は変化しない
	fmt.Println(cat2)

	// =>
	// &{ 0}
	// { 0}
	// &{ 0}
	// { 0}
	// &{ 0}
	// {catty 0}
}

func patternD() {
	// アドレス演算子をつけて初期化したパターン(cat1 := &Animal{})と同じ挙動
	cat1 := new(Animal) // ゼロ初期化。

	fmt.Println(cat1) // ＆ついてるんで、ポインタ
	fmt.Println(*cat1) // *つけてアクセスしてるんで、値

	cat2 :=cat1 // ポインタを別変数に代入

	fmt.Println(cat1)
	fmt.Println(cat2)

	cat2.Name = "catty" // ポインタを渡した別変数でフィールド書き換え
	fmt.Println(cat1)
	fmt.Println(cat2)

	// =>
	// &{ 0}
	// { 0}
	// &{ 0}
	// &{ 0}
	// &{catty 0}
	// &{catty 0}

}

func patternE() {
	// アドレス演算子をつけて初期化したパターン(cat1 := &Animal{})と同じ挙動
	cat1 := new(Animal) // ゼロ初期化。

	fmt.Println(cat1) // &ついてるんで、ポインタ
	fmt.Println(*cat1) // *つけてアクセスしてるんで、値

	cat2 := *cat1 // 値を別変数に代入

	fmt.Println(cat1) // ポインタ
	fmt.Println(cat2) // 値

	cat2.Name = "catty" // フィールド書き換え
	fmt.Println(cat1) // ポインタは変わらない
	fmt.Println(cat2) // 値は変わる

	// =>
	// &{ 0}
	// { 0}
	// &{ 0}
	// { 0}
	// &{ 0}
	// {catty 0}

}

```
らずぱいで .NET (mono)


## 概要
- `.NET Core 1.0`がリリース記念?
- らずぱいで、いつつかえるようになるかわからんので、monoを使ってみる。
- [Installing Mono and ASP.NET on a Raspberry Pi](https://blog.luppes.com/2015/03/19/mono-on-raspberry-pi/) を参考に、Hello World表示を
- ポイント: そのまま `sudo apt-get mono-complete`やってしまうと、古いやつがインストールされてしまう

## 環境
- Raspberry Pi 3
- `2016-05-27-raspbian-jessie.img`


## 手順
1. `sudo apt-get update; sudo apt-get upgrade -y; sudo apt-get install -y htop byobu` <br>... いつもの
2. `Mono`インストール

    ```bash
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install mono-complete
mono --version
```

    ```shell-session:monoバージョンチェック
pi@raspberrypi:~ $ mono --version
Mono JIT compiler version 4.4.1 (Nightly 4.4.1.0/4747417 Wed Jun 22 11:38:12 UTC 2016)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
	TLS:           __thread
	SIGSEGV:       normal
	Notifications: epoll
	Architecture:  armel,vfp+hard
	Disabled:      none
	Misc:          softdebug 
	LLVM:          supported, not enabled.
	GC:            sgen
pi@raspberrypi:~ $ 
```

3. `Hello World`
    - `vi hello.cs`

        ```csharp:hello.cs
        using System;

        public class HelloWorld
        {
            static public void Main ()
            {
                Console.WriteLine ("Hello World!");
            }
        }
```

    - ビルド･実行

        ```bash
#コンパイル.
mcs hello.cs
#実行.
mono hello.exe
```
    - 実行例

        ```shell-session
pi@raspberrypi:~ $ mcs hello.cs
pi@raspberrypi:~ $ mono hello.exe
Hello World!
pi@raspberrypi:~ $ 
```


## その他
- らずぱいでつくった、hello.exeは、Windowsでも、実行できました。
uMapでの表示範囲の制限

[uMap](https://umap.openstreetmap.fr/) はOpenStreetMapを背景図に使ってレイヤー付きのマップを１分で作ってあなたのウェブサイトに埋め込むことができる便利なサービスです。
みんな大好きですよね！？

さて、地図を作るときにはそれぞれのテーマがあって、たいていはそれに沿ったエリアだけスクロールして閲覧できれば十分なはずですよね？
また、[行政サイトでウェブ地図を使う際の注意点](http://qiita.com/nyampire/items/5fd06107f25bc12a526f) などもあります。

uMapでは簡単に表示範囲の設定ができます。

1. 編集を有効化して、ここまで表示できればよいという位置とズームレベルに移動し、 右メニューの「マップ設定を編集」を選択します。
2. 折りたたまれている「表示範囲の制限」をドロップダウンして、「現在の表示範囲を利用」を選択し、保存して編集を終了します。

簡単ですね！ズームレベルも保存されます。一度設定したものを設定しなおしたい場合は「内容なし」で設定をリセットする必要がある場合もあります。

![uMapの表示範囲の制限.png](https://qiita-image-store.s3.amazonaws.com/0/24148/27059448-dbf7-4eb4-801d-4f75657aa130.png)

## この設定をした地図のサンプル
[ラブライブ！サンシャイン！聖地巡礼　お役立ちマップ by Code for Numazu](https://umap.openstreetmap.fr/ja/map/by-code-for-numazu_80662#13/35.0595/138.8419)
Microsoft Remote Desktopをターミナルから起動して接続する方法

OSXでMicrosoft Remote Desktopをターミナルから起動して接続する方法です。

## まずは一般的な方法で接続

1. [Microsoft Remote Desktop](https://itunes.apple.com/jp/app/microsoft-remote-desktop/id715768417)をインストールします。

2. Windowsマシンもリモートデスクトップ接続ができるように設定します。

3. ＋Newを押して接続設定を行います。

4. 設定を行ったら、My Desktop以下に設定した項目からダブルクリックして接続できるか確認してください。

## 設定をrdpファイルに保存

1. 対象項目でControl+クリックを押しメニューを出して、Exportを選択し、任意のファイル名で保存します。

2. 保存したファイル名をターミナルから起動する場合は、以下のようなコマンドを実行します。

実行コマンド

	open -a "Microsoft Remote Desktop" "保存したrdpファイル"

## 簡単なコマンドで接続

以下は「書類/Microsoft Remote Desktop」の下に windows.rdp というファイル名で保存した場合の例です。

以下の内容を **msrdc** というファイル名で保存し、実行権限をつけてパスの通った場所に置きます。

	#!/bin/sh
	exec open -a "Microsoft Remote Desktop" "$HOME/Documents/Microsoft Remote Desktop/$1.rdp"

こうすることで

	msrdc windows

で接続できます。
ZYBO > Link > Slow CMOS edge (benign setting)

@ ug585-Zynq-7000-TRM.pdf
p589

> d. Slow CMOS edge (benign setting).

benignとは何か？

http://eow.alc.co.jp/search?q=benign
> `2 〔影響や効果が〕無害な、安全な

他に影響を与えない設定ということなのだろう。
MATLAB Live Editor/Live Scriptの感想

自分には一番縁がないと思っていたのに、気が付くともう5年もMATLABを弄くっている。いまだに成果が出ていないのは恐ろしいが、さすがにこればっかりやっているので何か書いてみたくなった次第である。読者の参考になるかどうかはまったく保証できない。


MATLABの R2016a から導入された **Live Editor/Live Script** は、Jupyter Notebook (Python) の真似のようだが、コードと図が一画面上で直結して見えるのはかなり便利が良い。これまで、ある一部のコードで生成された図をディスプレイの上に折り重なったウインドウから「どれだったっけかな？」と探しだすのにかなりの労力を使っていたらしい、ということに気が付かされる。また画面上のボタンを押すと、図がコード・セクションの下から右横へサッと移動するのも、思いの外便利である。導入されたばかりだけあってGUI周りはまだ開発途上の感じだが、R2016bのプレスリリースではかなり力を入れて性能を向上されている様子。

従来は、大量の図を自動生成した場合にそれを閲覧するのに一番よい方法としてたどり着いたのが、**publish機能によるhtml書き出し**だった。ウェブブラウザ上であればスクロールも快適だし、ちょうどLive Editorに似てコード・セクションのすぐ下に図が表示されるのも良かった。publish機能の難点は、一遍全部できあがってから一発で書き出しをしなければならないので、インタプリタ型言語としてのMATLABの特長である、コマンドウィンドウでちょこちょこ直しながら開発する、というスタイルとはそのままでは相容れないものだったことだ。通常のスクリプトとしてコードを書いて、「できた」と思ってから publish でhtml自動生成して大量の図をブラウザで見る、という使い方だった。

Live Editorはちょうどこの部分の不自由さの隙間を埋めるような感じではなかろうか。コードの下、あるいは横に図を出しながら、セクション毎にちょこちょこ直しながら開発する。

コードの使用例を他人へ紹介する際には、Live Scriptはとても良いと思う。従来のpublishで作ったhtmlも良かったが、実際に実行できる、というのは大きい。ただし、せっかく人から貰った Live Scriptもうっかりすると図を全部消してしまうこともあり得る。この辺は取り扱い方に工夫が要りそう。

短所あるいは注意点として挙げられるのは、細かいGUIの仕様などを除けば、以下の点だろうか。


- scriptの編集にはよいが、**関数の中身のデバッグには向かない**。エラーが赤く表示されたら、その行をコマンドウィンドウで実行してエラーを吐かせて問題のある行へ移動して直す、という感じにならざるを得ない。 

- どのくらいのoverheadがあるのか分からないが、実効速度は遅くなっているものと思われる。試しに、下のコードを実行させると、Command Window での平均が 0.0135 秒に対して、Live Editorでは 0.0294 秒なので、何をさせるかによっても違うだろうが、単純予想としては**およそスピードが半分**になっている。時間のかかる計算を含むコードをLive Editorで書いていると反応が遅くてちょっと不愉快かもしれない。

```matlab
for i = 1:1000
    tic
    
    a = rand(1000);
    clear a
    
    t(i) = toc;
end

disp(mean(t))
```

- ヴァージョン管理を行うときに、ちょっと面倒である。**図を含んだ.mlxファイルは数メガバイトになることがしょっちゅう**あり、これを頻繁に編集してGitにコミットしていくと、ディスクスペースをかなり食ってしまうこと請け合い。開発は .mlxで行っても、**ヴァージョン管理は.mlxから書き出した .m の通常のスクリプトの形で差分をとって行う**ほうがよいように思われる。ただ、この作業が自動化されていないので、.mlxのほうを .gitignore で無視するようにしていて、.mに書き出すのを忘れると、せっかくの編集内容がレポジトリに残らない、という危険な事態を招く。ここはぜひ一工夫して、.mlxを保存する際に自動的に .mを更新保存する、というオプションを用意して欲しいところ。
ZYBO / Zynq > Link > AMBA > Advanced Microcontroller Bus Architecture > AMBA3.0でAXI仕様が追加された

@ ug585-Zynq-7000-TRM.pdf
p379

>AMBA AHB and APB interface

AMBAとは何か？


http://www.kumikomi.net/archives/2007/08/31amba.php
> 2003年6月に公開されたAMBA 3.0では，高性能なシステムのメイン・バスに使われるAXI（Advanced eXtensible Interface）仕様が追加された
...
> AMBA（Advanced Microcontroller Bus Architecture）は，筆者ら（英国ARM社）が策定しているシステムLSI向けのオンチップ・バス規格です．

AXI4というのはAMBAの１つの仕様ということのようだ。
技術英語 > Nathie Katzoff > Whatever he's doing at that time, he [throws his entire body and soul into it].

Master Craftsman, Nathie Katzoff | HUMAN
https://www.youtube.com/watch?v=m3yVCHj3jA8&list=PL_MJualihC5AxdlHgVUROYKbNAaPJ5PE4&index=61
木工技術者の動画。字幕がしっかり付いている。

(4:01-)
> Whatever he's doing at that time, he <font color=red>throws his entire body and soul into it</font>.

<hr>
関連して思い出したのは

http://qiita.com/7of9/items/a429cc104edc12bde164
> He is <font color=red>putting his heart and soul into its development</font>.
GoogleスプレッドシートでGopherを描く with Go

Goで作るので、もちろんこいつを描きます！
![gopher.png](https://qiita-image-store.s3.amazonaws.com/0/35595/c0c9384d-a8b1-8ef0-c8d9-5663dbce9f40.png)


## 経緯
以前[Googleスプレッドシートをプログラムから操作](http://qiita.com/howdy39/items/ca719537bba676dce1cf)という記事を書いたのですが、その延長でなにか作ろうと思ってたところ
[Excelで佐々木希を描く with python](http://qiita.com/Algebra_nobu/items/4e2b36bdb38434e183de)が面白かったのでそのスプレッドシート版を作ってみました。


## 結果
ブラウザで画面を開きながら裏でAPIを実行しています。
![gopher.gif](https://qiita-image-store.s3.amazonaws.com/0/35595/3a5fad91-1479-ebc3-6090-0bd311c7421f.gif)

スプレッドシートなのでリアルタイムに反映されていくのが面白いですね。
普通ブラウザで同時編集していると誰が編集しているかがわかりますが、APIだとそれがわかりません。
そのためポルターガイストてきな悪戯も可能です :grinning: （誰得

@このgifは実際の画面の描画速度ですがAPI自体はこんなに遅くないです。
ブラウザの描画が追いついていない感じです。


## 知見
### 1APIあたりの同時変更セル数
上記Gopherは横200✕縦20ピクセルずつで流しているのですがこれぐらいだと余裕で1APIで流せます。
つまり背景色変更だけなら4000セルの変更が1APIで可能。

また、横200✕縦100ピクセルで流すと
``503: The service is currently unavailable.``を返すことがちらほら。
適度に分割したほうが無難です。

### APIの連続実行
Goルーチンで並行でガンガン流すと``net/http: TLS handshake timeout``エラーがでてしまいました。
適度にスリープを入れたほうがよさげです。
上記Gopher描画は1APIごとに1秒ずつスリープ入れています。

### 行列幅の仕様
縦横共にサイズを2にしているのですが、これだと画像が横に伸びます(スプレッドシートの仕様)
すごくどうでもいい情報ですね。。


## あとがき
スプレッドシートのAPIに興味を持った方は[Googleスプレッドシートをプログラムから操作](http://qiita.com/howdy39/items/ca719537bba676dce1cf)を参考にしてみてください。
一応[Gopher描画のソース](https://github.com/howdy39/spreadsheets-api-on-golang)を貼っときます。初Goプログラムなので💩だと思います。
Vagrant プロビジョニングで環境変数を設定する


```ruby:Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  FOO = "foo"
  BAR = "bar"
  
  config.vm.provision :shell do |s|
    s.name = 'foobar'
    s.env = {:FOO => FOO, :BAR => BAR}
    s.path = "foobar.sh"
  end
  
end

```

```sh:foobar.sh
#!/bin/sh
set -eu

echo "FOO: $FOO"
echo "BAR: $BAR"

```
Fabricを使ったAutoScalingGroupにむけたdeployとbootstrap

# 何をしたかったか
fabricのデプロイコードを、AutoScalingGroupにむけたdeployとbootstrapパターンで共有したい

# 環境
* AWS
* Debian
* Python3.5

# 利用したもの
* fabric
* boto3
* systemd

# やったこと
## bootstrap
systemdによる起動スクリプトとして、fabricによるローカルデプロイ

## deploy to AutoScalingGroup
AutoScalingGroupに所属するインスタンス群のipを実行時に取得して、fabricによるリモートデプロイ

# 出来上がったもの

```systemd:bootstrap.service
[Unit]
Description=Initialize App

[Service]
Type=oneshot
ExecStart=/home/user/path/to/bootstrap.sh
RemainAfterExit=yes
User=user
Environment=HOME=/home/user

[Install]
WantedBy=multi-user.target
```

```shell:bootstrap.sh
#!/bin/bash
cd /home/user/path/to
fab deploy_local > /tmp/bootstrap.log
```

```python:fabfile.py
# -*- coding: utf-8 -*-
 
import fabric.api


WORK_DIR = "/home/user/path/to"
 
def local():
    # runをlocalに変換
    fabric.api.run = fabric.api.local
    fabric.api.env.roledefs = {
        "app": []
    }
  
def production():
    import boto3
    conn = boto3.client(
        "ec2",
        region_name="ap-northeast-1",
        aws_access_key_id=my_access_key_id,
        aws_secret_access_key=my_secret_access_key,
    )

    # TagNameにTargetとついているrunningのものを取得する
    describe_instances = conn.describe_instances(                   
        Filters=[
            { "Name":"tag-value", "Values":["Target"] },
            { "Name":"instance-state-name", "Values":["running"] }
        ]
    )
    instance_ips = [
      x["PrivateIpAddress"] for r in describe_instances["Reservations"] for x in r["Instances"]
    ]

    fabric.api.env.roledefs = {
        "app": instance_ips,
    }
 
 
@fabric.api.task
@fabric.api.roles("app")
def reload_app():
    fabric.api.run("sudo supervisorctl reload")
 
 
@fabric.api.task
@fabric.api.roles("app")
def update_source(branch_name):
    with fabric.api.cd(WORK_DIR):
        fabric.api.run("git fetch")
        fabric.api.run("git checkout {}".format(branch_name))
        fabric.api.run("git rebase origin/{}".format(branch_name))
        fabric.api.run("git submodule update --init")
        fabric.api.run("pip install -r requirements.txt")
        fabric.api.run("sudo cp app.conf /etc/supervisor/conf.d/app.conf")
 
 
@fabric.api.task
@fabric.api.runs_once
def deploy_production():
    production()
    fabric.api.execute(update_source, "master")
    fabric.api.execute(reload_app)

 
@fabric.api.task
@fabric.api.runs_once
def deploy_local():
    local()
    fabric.api.execute(update_source, "master")
    fabric.api.execute(reload_app)                 
```

# 試行錯誤したとこ
* fabricがpython3系に正式に対応してなかった
    * [こちら](http://qiita.com/acro5piano/items/19a5f4c0ae729aae756b)を参考にfabric3使うことにした
* fabric.api.localを実行するときにupdate_sourceを使いまわしたかった
  * [こちら](http://stackoverflow.com/questions/6725244/running-fabric-script-locally)を参考に`fabric.api.run = fabric.api.local`という変換で回避した
角丸ボタンにRipple Effectをつける

### 1. 角丸ボタン用のxmlを作る  
drawable配下に角丸ボタン用のxmlを作成する。  

```xml:drawable/button_bg_white.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid
        android:color="@color/colorWhite"/>
    <stroke
        android:width="@dimen/line_small"
        android:color="@color/colorGrey"/>
    <corners
        android:radius="@dimen/corner_radius_normal"/>
</shape>
```

### 2. Ripple Effect用の色を定義する

```xml:values/colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorWhite.focused">#CCCCCC</color>
</resources>
```

### 3. Ripple Effect用のxmlを作成する
drawable配下にRipple Effect用のxmlを作成する。   

```xml:drawable/button_frame_white.xml
<?xml version="1.0" encoding="utf-8"?>
<ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/colorWhite.focused">
    <item android:drawable="@drawable/button_bg_white"/>
</ripple>
```

### 4. ボタンを作成する
ボタンの背景に作成したRipple Effect用のxmlを設定する。  

```xml:
<Button
    android:background="@drawable/button_frame_white"
    />
```
pandas.Panelの軸を視覚で理解するメモ

pandas.Panelの軸の向きをちょくちょく忘れてしまうので、備忘録として。

DataReaderにtickerのリストを渡すと、Panelが返ってきます。

```py3:
import pandas_datareader.data as web
from datetime import datetime

tickers = ['AAPL', 'MSFT', 'ORCL']
sd = datetime(2016, 1, 1)
ed = datetime(2016, 1,10)

p = web.DataReader(tickers, "yahoo", sd, ed)    
print(p)
```

```
<class 'pandas.core.panel.Panel'>
Dimensions: 6 (items) x 5 (major_axis) x 3 (minor_axis)
Items axis: Open to Adj Close
Major_axis axis: 2016-01-04 00:00:00 to 2016-01-08 00:00:00
Minor_axis axis: AAPL to ORCL
```

Panelにこんな感じでアクセスすると、

```py3
d = p['Open']
print(d)
```

こういうデータが返ってきます。

```
                  AAPL       MSFT       ORCL
Date                                        
2016-01-04  102.610001  54.320000  36.009998
2016-01-05  105.750000  54.930000  35.860001
2016-01-06  100.559998  54.320000  35.500000
2016-01-07   98.680000  52.700001  35.250000
2016-01-08   98.550003  52.369999  35.130001

```

つまり図で表すと、こう。

![panel2.png](https://qiita-image-store.s3.amazonaws.com/0/89639/6bd03e69-0319-4bb3-4dba-49c2880025b9.png)

こうするとPanelから特定セルの値をSeriesで取り出してくることも可能。

```py3
s = p['Open'][:1]['AAPL']
print(s)
```

```
Date
2016-01-04    102.610001
Freq: D, Name: AAPL, dtype: float64
```
SwiftのCustomViewを使ってみた

Swiftを始めて触って一週間でできたものを公開しようと思います。

今回、主軸にあったのは**CustomView**です。UIを組み合わせて独自のものを作る機能ですね。
何を作ったのかというと…**映画とかでハッキングされると出そうな画面**…です！

なんじゃそらって人は、Youtubeに動画あげているのでご覧ください。

[Custom Progress Alert](https://www.youtube.com/watch?v=hVjTMpqmOBI)
[![](https://img.youtube.com/vi/hVjTMpqmOBI/0.jpg)](https://www.youtube.com/watch?v=hVjTMpqmOBI)

上記のもののプロジェクトファイルをGitHubにあげいます。
まだ手を加えている途中なので、無駄な処理もあると思いますが参考になれば…

[GitHub - ProgressAlert](https://github.com/MizoTake/ProgressAlert)

それと自分の実行環境は
 O S  : El Capitan
Xcode : 7.3.1
です。

Swiftだと簡単にUIが取得できるから色んなUIが作れていいですね。これからも使うかどうかは別として色んなUIを作ってみたいです。

また、参考にさせていただいたサイトを記載しておきます。

[Xcode6で「.xibファイル」+「自作UIViewクラス」で、汎用できるViewを作りたい](http://qiita.com/marusa/items/de3a2fb3094f22371d9d)

[SwiftにてCustomViewを使ってUIAlertっぽいやつを作る](http://smileapps.sakura.ne.jp/blg/?p=1141)
なんちゃら as a Service (XaaS)

 * APaaS (Application Platform as a Service)
 * BPaaS (Business Process as a Service)
 * BaaS (Backend as a Service)
 * CCaaS (Contact Center as a Service)
 * CaaS (Communication as a Service)
 * CaaS (Computing as a Service)
 * CaaS (Container as a Service)
 * CaaS (Content as a Service)  
 * CaaS (Crimeware as a Service)
 * DBaaS (DataBase as a Service)
 * DaaS (Desktop as a Service)
 * EaaS (Encryption as a Service)
 * FaaS (Function as a Service)
 * HaaS (Hardware as a Service)
 * IDaaS (IDentity as a Service)
 * IaaS (Infrastructure as a Service)
 * MBaaS (Mobile Backend as a Service)
 * NaaS (Network as a Service)
 * PaaS (Platform as a Service)
 * SPaaS (Stored Procedure as a Service)
 * SaaS (Security as a Service)
 * SaaS (Software as a Service)
 * XaaS (X as a Service)
 * YAaaS (Yet Another as a Service)
 * iPaaS (Integrated Platform as a Service)
Node.js+Express.js+ECT:routerからviewへobjectを渡す

# バージョン

```
$ node -v
v6.2.1
```

```
$ cat package.json
{
  ≈≈≈
  "dependencies": {
    "ect": "^0.5.9",
    "express": "~4.13.1",
    ≈≈≈
  },
  ≈≈≈
}
```

# cat routes/test.js

```
var express = require('express');
var router = express.Router();

/* GET calendar page */
router.get('/', function(req, res, next) {
  res.render('test', {
    str: "文字列",
    obj: { "title": "hello", "money": 999 }
  });
});

module.exports = router;
```

# cat views/test.ect

```
<!DOCTYPE html>
<html>
        <head>
                <meta charset="UTF-8">
                <title>テストしてみる</title>
                <script>
                        <!-- propertyがstringの場合、有無チェックは"if @str?.length :"で行う -->
                        <% if @str?.length : %>
                            console.log("str=<%= @str %>");
                        <% else : %>
                                console.log("no str");
                        <% end %>

                        <!-- propertyがobjectの場合、有無チェックは"if @obj :"で行う -->
                        <% if @obj : %>
                                var obj = <%- JSON.stringify(@obj) %>;
                                console.log("obj=" + JSON.stringify(obj));
                        <% else : %>
                                console.log("no obj");
                        <% end %>
                </script>
        </head>
        <body>
        </body>
</html>
dockerで社内用かんばん「Wekan」を導入してタスク管理した話

# [Wekan](https://wekan.io/)って？

オープンソースなかんばん
いれるだけでチームのモチベーションが上がる（かもしれない）魔法のツール
[公式サイト](https://wekan.io/)にサンプルがあるので触ってみるといいかも

# 背景

- [Trello](https://trello.com)使いたいけど会社が使わせてくれない
- それでもかんばん使いたい

# 今回の想定環境

- OSX
- Windows
- Linux

# 注意すること(OSX/Win)

OSXまたはWindowsでDocker Toolboxを使っている場合は、
mongoDBの永続化用フォルダはVMの中にすること。
そうしないとmongoDBのコンテナが上がってこないので注意

# いつものようにちゃちゃっと用意

```
$ mkdir -p ~/docker/wekan/
$ vi ~/docker/wekan/docker-compose.yml
```

```docker-compose.yml
wekan:
  image: mquandalle/wekan
  links: 
    - wekandb
  environment:
    - MONGO_URL=mongodb://wekandb/wekan
    - ROOT_URL=http://{ホストOSのIPかPC名}:8080 # ポートは好きなポートに
  ports:
    - 8080:80 # ポートは好きなポートに
  restart: always

wekandb:
  image: mongo
  volumes:
    - /mnt/sda1/docker/wecan/data:/data/db # tmpfsでない位置を指定
    - /mnt/sda1/docker/wecan/configdb:/data/configdb # tmpfsでない位置を指定 
  restart: always
```

```
$ cd ~/docker/wekan
$ docker-compose up -d # コンテナ起動
```

`docker-compose.yml` のROOT_URLで指定したアドレスにアクセスしてページが表示されれば完了
（起動に〜30秒ほどかかります）

# Wekanのイケてるところ

- ブラウザだから誰でも使える
- リアルタイム反映◎
- メンバーを招待できる
- 他人から見えない自分用も用意できる
- 設定すれば社内ネットワークに公開できる（[過去記事参照](http://qiita.com/mitsugogo/items/0169481c4ae192ce4f26#%E7%A4%BE%E5%86%85%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E5%90%91%E3%81%91%E3%81%AB%E5%85%AC%E9%96%8B%E3%81%99%E3%82%8B)）

![image](https://qiita-image-store.s3.amazonaws.com/0/109466/31032a9f-86b7-7bcf-0c2e-1781d888721e.png)


# まとめ

- 自分のチームメンバーが何をしているのか一目瞭然
- リアルタイム更新が見ていて楽しい
- Wekanを眺めながらコーヒーを飲む時間が増えた

# 結論：dockerってすばらしい

これまでは「あれほしいなぁ」って時はサーバーを用意してインストールする手間とお金がかかったけど、dockerは自分のPCだけで完結できて◎
RPGツクールMV勉強会まとめ（作ったものとか）

# 概要
[RPGツクールMV　初心者脱出大作戦！](http://rpgtkoolmv-01.peatix.com/)に参加して作成した物とか、そこで感じた事などを、まとめた記事です。

# 参加した理由とか
ツクールMVを、発売日に買ったけど… JavaScriptで、RPG作ってた身としては、いろいろ思うところがあって、手が出てなかった。（負けた感じがしてｗ）

そうは言っても、システムから全部作るのは大変だし、いろいろ状況も変わって来てたところに、ツクールMVの勉強会が開かれると言う話を聞いて、行ってきました。

（ツクールでも勉強会が開かれるんだなぁ～と、自分が知らなかっただけかもしれないけれど…）

で、せっかく、ゲームを作ったので、公開する場所として、人柱として…雑なつくりだけれど、思ったところを解説しつつ、ここに記事にしようと思います。

# 勉強会の内容
勉強会では、初心者と中級者に分かれると言う事で、ツクールMVを触った感じは、今までと変わらないし、事前に解説動画もみてMVらしい所も理解できてたので、中級へ。

中級者は、以下の条件でゲームを作成する。と言うものでした。

* マップは１つ１画面
* ツイート機能を入れる

以上を、前半９０分で形にして、お互いにテストプレイ。その後６０分程度で修正。

約３時間で１つゲームを作ることに…マジか。

事前になにも考えてなかったので、個人的には、かなり厳しかったです。

で、できたのがこれ…とりあえずアップ

[冒険の日常](http://plicy.net/GamePlay/26493)

# まずさきに言い訳とか
９０分の作業後、お互いにテストプレイするのだけど、このときは、言い訳はしない！ってルールがあったので、ここで…

この短時間で作成するために中級者へのアドバイスが、先にエンディングを作る。でした。

たしかに、プレイヤーを配置して、イベント１つ作れば、エンディングまではとりあえず完成できますね。１つもまともに完成させてない身としては、目から鱗です。

１画面ってことで、まずマップを先に作成して、解説動画とか初心者コースでは、脱出ゲーム作ってたので、画面の端にゴールのイベントを配置、脱出してエンドという形に。

で「どうやってそこまで行くかを考える」と…

会話とか書いてる時間ないな～って思って、パズルにしちゃえ、ってことで定番の岩を動かして、抜ける感じの１画面のパズルを選択することに。

一応完成したけれど、テストプレイでほかの人のを見ると…ちゃんとストーリー作ってる！
みんなすごい…

やっぱり福山は技術者よりだなぁ～と、改めて確認した、前半でした。

# 一応ゲーム解説

普通の倉庫番でもなんだし、ソレと見せかけて、岩の中の鍵を取るようにしました。
一応、音をヒントに鍵のある岩を判断できるようにしたり、それなりにがんばった感じ…
ただし、ギミックのみ、ストーリーとしては、ほぼなし。

スイッチとかイベントの作り方の解説は、たぶん必要ないと思うのでプロジェクトを見てもらうとして、今回の勉強会で思ったこと。（必要ならリクエストあれば書きますが…）

上で公開してるのは、９０分＋６０分の間に、ブラッシュアップされた物で
前半では、鍵１つで扉は開け放題、穴を埋めるとか言うギミックはありませんでした。

倉庫番と思わせて、実はその中の鍵を取る方法を探すと言うのがコンセプトとして伝わりやすくて、意表を突く感じで反応がよかった感。

６０分のブラッシュアップで、もっと画面全体を使いたくて…穴を追加して、穴を埋めるようにしたのだけど（イベントどうしのあたり判定方法とかも試したかった）
その結果、あらためて見てみると、最初のコンセプトは薄くなってる気がしてます。

何かにもあったけど、引き算が大事だなぁ～と（引き算コーデとかメイクとか？…か）

勉強会の最後、ランダムで選ばれたゲームが生放送で、実況プレイされたけど、福山のはあまり印象にのこらないものに。

へふ～。

# 最後に

勉強会に参加したことで、ツクール熱が再度アップ。
短くても良いので、また作ってみようと思えました。
今度こそストーリ重視に…（って、なんかすでにダメそうな予感もするけれど）

以上～簡単ですが、報告おわりです。

### 追記
Qiitaで、書いた１つ前の記事も倉庫番だった！
ターミナルでスライドを再生するコマンド『pera』を作った。

こんなの。

![pera](https://cloud.githubusercontent.com/assets/4569916/16450500/3ed1e1be-3e38-11e6-860a-084bf6d82b0f.gif)

---

`---`で区切ったテキストファイルを読み込ませると、スライドのように１枚1枚再生できる。

Qiitaの[スライドモード](http://help.qiita.com/ja/articles/qiita-slide)みたいな感じ。

---

## 使い方

`---`で区切ったテキストファイルをパラメータとして指定する。( [サンプル](https://raw.githubusercontent.com/kurehajime/pera/master/_demos/usage.md) )

```
$ pera usage.md
```

すると１ページ目から順に再生できる。

---

以下のようなオプションも用意してる。

```
  -e string
    	encoding (default "utf-8")
  -g	gravity(bottom align)
  -i int
    	interval <= 10 millisecond (enable auto mode)
  -l	loop (Exit:Press Esc Key)
```

`-i １００0　`というように時間をミリ秒で指定すると、１秒ごとに自動再生、みたいなこともできる。
あと`-l`を指定すると、最後までいった後に最初に戻ってループする。

---

これを組み合わせると・・・

![chaofan](https://cloud.githubusercontent.com/assets/4569916/16450501/3edc6b02-3e38-11e6-93c7-9cbd2a6c40f2.gif)

[チャーハン作るよ！](https://raw.githubusercontent.com/kurehajime/pera/master/_demos/chaofan.md)

---

## 技術解説

言語はGo言語。
画面制御にはエスケープシーケンスという仕組みを使ってる。

|制御文字|効果 |
|---|---|
|\x1b[2J| 画面を全部消す |
|\x1b[1;2H|カーソルを1行2列に移動|
|\x1b[2K|カーソルのある行を削除|

上の表にあるような特殊な文字を書き出すと、ターミナルの動きを制御できる。文字や背景の色の変更や太字など、[他にもいろいろある！](https://www.grapecity.com/tools/support/powernews/column/clang/047/page02.htm)。

ただしWindowsだとうまく動かなかったりするので、そこらへんを吸収するために[mattn/go-tty](https://github.com/mattn/go-tty)や[mattn/go-colorable](https://github.com/mattn/go-colorable)を利用。

---

## ダウンロードはこちら

ソース
https://github.com/kurehajime/pera
実行ファイル
https://github.com/kurehajime/pera/releases

PATHの通ってる場所に実行ファイルを放り込むだけでOK！