OmniAICreator/Qiita-1.07M huggingface dataset:
Zybo > 信号およびインターフェイスの外部I/Oポートへの接続 > Make External / Create Port / Create Interface Port

```txt:動作環境
Vivado 2015.4 on Windows 8.1 pro (64bit)
```

http://www.xilinx.com/support/documentation/sw_manuals_j/xilinx2014_4/ug994-vivado-ip-subsystems.pdf
p19

> 信号およびインターフェイスを外部I/Oポートに接続するには、次の3つの方法があります。
- [Make External]
- [Create Port]
- [Create Interface Port]

...

> [Create Port] ダイアログ ボックスでポート名、方向 (入力、出力、双方向など)、タイプ (クロック、リセット、データ、ク
ロック イネーブルまたはカスタム タイプなど) を指定します。[Create Vector] フィールドをオンにして適切なビット幅
を選択すると、ビット ベクターも作成できます。タイプをクロックに選択する場合は、クロックの周波数も指定できます。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/16deda66-4f03-f3f9-845e-0926c1faf619.png)

FCLK_CLK0に対してCreate Portして、生成されたFCLK_CLK0をダブルクリックすると以下の設定ウィンドウが表示された。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/e7504e2c-c91a-9f9f-a254-aaed3f64be11.png)

FCLK_CLK0の周波数は100MHzになっているようだ。

上記のFrequencyを10MHzなどに変更可能だった。

これをPmodなりに出力して波形を取りたいものだ。
技術英語 > Interoperability

@ Code Complete (No. 2421 / 36077)

Interoperability
http://ejje.weblio.jp/content/interoperability
> 共通運用性; 共同利用性; インタオペラビリティ; 相互運用性; インターオペラビリティ

<hr>
Inter関連で思い出すのは

Intergovernmental Panel on Climate Change: 気候変動に関する政府間パネル
intercontinental ballistic missile (ICBM): 大陸間弾道ミサイル
など

「間」という意味がつくように思う。

Inter + operabilityで「相互」+「運用性」
<code>の説明表示を他のMarkdownフレーバーでも使いたい

Qiitaの`:説明`が大好きです。

![スクリーンショット_2016-07-09_05-15-47.png](https://qiita-image-store.s3.amazonaws.com/0/25728/18a7a31d-67bf-c4f6-9f01-7e1e503a2292.png)

`:説明`を他で実装されているのは[potmum](https://github.com/rutan/potmum) だけでした。

## 対応

独自タグでそれっぽくしてみました。[かんたんMarkdown](http://tatesuke.github.io/KanTanMarkdown/)で確認。
redmineもCSSに追記すればいけるでしょう。

![test](https://cloud.githubusercontent.com/assets/1517645/16673448/3f5aed12-44e9-11e6-8501-89ab063371d6.png)

```css:css
/* START_CODE_TITLE */
f {
	display:inline;
	background-color: rgba(0,0,0,0.07);	
	color: #555;
	font-size: 0.8em;
	font-weight: 400;
	padding: .25em .5em;
}
f + pre {
	margin-top: 0;
}
/* END_CODE_TITLE */
```

`f`は極力短い文字かつ左手を動かさずに入力できる文字として選びました。

## redmine3のwikiに適用 (自作テーマ)

* redmineで`<f></f>`を書くと`<p><code></code></p>`に変換されるため別のタグを用いた。

```
mkdir -p /usr/src/redmine/public/themes/custom/stylesheets/
touch /usr/src/redmine/public/themes/custom/stylesheets/application.css
```

```css:/usr/src/redmine/public/themes/custom/stylesheets/application.css
@import url(../../../stylesheets/application.css);

a[href=\#f] {
    background-color: rgba(0,0,0,0.07);
    color: #555;
    position: relative;
    top: 0.8em;
    margin-left: 1.6em;
    padding: 0.3em 1em 0.3em 0em;
    background-image: none !important;
}
```

![スクリーンショット_2016-07-27_11-12-35.png](https://qiita-image-store.s3.amazonaws.com/0/25728/fe95381d-5a08-dba9-f015-eaebfcfc06d3.png)
　　　　　　　　↓
![スクリーンショット_2016-07-27_11-11-39.png](https://qiita-image-store.s3.amazonaws.com/0/25728/3b144017-2d8d-560b-4844-b800915b3406.png)

## `:説明`の欠点

ちなみにQiitaの `:説明` は以下の欠点があります。

* Qiitaの独自拡張(?)のため Redmine や Github に互換性がない。(コピペしてもsyntax hilightされない)
* `スペース`や`:`を途中に入れられない。
    * `:git stauts の結果`みたいな説明を入れる場合、空白部分を`&nbsp;`で書く必要がある
Unity + iOS + スマホHMDでVR

VR SHINECONを手に入れました。
![13620147_578878518950298_7259745185210117557_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/67575/6b377a31-21f3-f8c4-0d45-bd49f2ef581a.jpeg)
![13615066_578878528950297_2949467978483903459_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/67575/f220b9c1-ecdd-2216-7bbc-a450f258031b.jpeg)

iphone6plusで適当なVRアプリをやってみたのですが、思ってたよりよかったです。
(当たり前だけどスマホの手帳型カバーをとらなきゃいけなかった)
(小さいコントローラー？的なのが付属してたけど、どう使えばいいのかわからなかったorz)

せっかくなのでUnityでDemoVRシーンをiOS向けにビルドしてみます！

##UnityでスマホVRをするのに必要な物
- Google Cardboard SDK
- スマホ
- Unity5.2以上
- Xcode7系?
Cardboard SDKを入れることで、端末の加速度センサーに合わせてカメラを回転してくれます。
めっちゃ便利

##Google Cardboard SDKをDL~インポート
https://developers.google.com/vr/unity/download
ここにあるようにSDKをgit cloneしていきます

```
$git clone https://github.com/googlevr/gvr-unity-sdk.git
```

思ったよりサイズが大きくてcloneに時間がかかった。。。

cloneしたファイルに `GoogleVRForUnity.unitypackage` があるのでこいつをインポートします。

<img width="257" alt="スクリーンショット 2016-07-09 3.36.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/67575/cfb19586-c899-07fc-5d79-31732ab40c33.png">

AndroidとiOS用のプラグインも入っているのでよかった。

##DEMOシーンを追加
GoogleVR/DemoScenes/HeadsetDemo/DemoScene
をやろうと思うのでシーン追加します。
<img width="557" alt="スクリーンショット 2016-07-09 3.38.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/67575/9ef10c48-568b-227f-8044-91b8b8767240.png">


##ビルド設定する
- Default Orientation をLandscapeに変更
<img width="277" alt="スクリーンショット 2016-07-09 3.39.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/67575/83fc8c1d-3b44-a467-7601-158eb161972d.png">

- Bundle identifierを適当に変更


##Buildする
特にxcodeをいじる必要もなく簡単にビルドできた
![IMG_0587.PNG](https://qiita-image-store.s3.amazonaws.com/0/67575/e6d100df-d903-9d43-fad5-187540e9808e.png)

![IMG_0586.PNG](https://qiita-image-store.s3.amazonaws.com/0/67575/0e1c8a54-6684-6685-fcb0-79d60e1dad51.png)

視点操作しかinputができないのがつらいな・・・
「だるまさんがころんだ」なら作れるのかな

引き続きvrアプリ/ゲームを作っていきたい
外部キーから参照されるインデックスを、できるだけオンラインでREINDEX

## 簡単な例
テーブルtestとtest_masterを用意し、testからtest_masterに外部キー制約を付与する。
このとき、外部キー制約が参照するユニークインデックスとしてtest_master_idを作成する。

```plpgsql
CREATE TABLE test_master AS
    SELECT id FROM generate_series(1, 1000) id;

CREATE TABLE test AS
    SELECT num % 1000 + 1 id FROM generate_series(1, 100000) num;

CREATE UNIQUE INDEX test_master_id ON test_master (id);

ALTER TABLE test ADD FOREIGN KEY (id) REFERENCES test_master (id);
```

外部キー制約から参照されるインデックスtest_master_idを、以下の手順でREINDEXする。

1. 同じ定義だが別名のインデックスをCONCURRENTLYオプション付きで作成する。
1. 古い外部キー制約の削除と新しい外部キー制約の作成を同一トランザクション内で実行する。
   1. 古いインデックスとそれを参照する外部キー制約を削除する。
   1. 新しいインデックスを参照する外部キー制約をNOT VALIDオプション付きで作成する。
1. インデックス名を正式な名前に変更する。
1. NOT VALIDの外部キー制約をオンラインで検証する。

実際のコマンド例は以下のとおり。

```plpgsql
CREATE UNIQUE INDEX CONCURRENTLY test_master_id_tmp ON test_master (id);

BEGIN;
DROP INDEX test_master_id CASCADE;
ALTER TABLE test ADD FOREIGN KEY (id) REFERENCES test_master (id) NOT VALID;
COMMIT;

ALTER INDEX test_master_id_tmp RENAME TO test_master_id;

ALTER TABLE test VALIDATE CONSTRAINT test_id_fkey;
```

## pgbenchの例
bidカラムについて、pgbench_accountsからpgbench_branchesに外部キー制約を作成する。
この外部キー制約は、pgbench_branchesの主キー制約のインデックスpgbench_branches_pkeyを参照することに注意。

```plpgsql
ALTER TABLE pgbench_accounts
  ADD FOREIGN KEY (bid) REFERENCES pgbench_branches (bid);
```

REINDEX対象のインデックスが、主キー制約と外部キー制約それぞれから参照される場合は、DROP INDEXの代わりにALTER TABLE DROP CONSTRAINTで古いインデックスを削除する。
実際のコマンド例は以下のとおり。

```plpgsql
CREATE UNIQUE INDEX CONCURRENTLY pgbench_branches_pkey_tmp ON pgbench_branches (bid);

BEGIN;
-- pgbenchの試験シナリオでは、pgbench_accounts → pgbench_branchesの順番で処理されることから、
-- その処理とdeadlockを引き起こさないように、ここでは最初にpgbench_accountsに対してロックを獲得する。
LOCK TABLE pgbench_accounts IN ACCESS EXCLUSIVE MODE;
ALTER TABLE pgbench_branches
  DROP CONSTRAINT pgbench_branches_pkey CASCADE,
  ADD PRIMARY KEY USING INDEX pgbench_branches_pkey_tmp;
ALTER TABLE pgbench_accounts
  ADD FOREIGN KEY (bid) REFERENCES pgbench_branches (bid) NOT VALID;
COMMIT;

ALTER INDEX pgbench_branches_pkey_tmp RENAME TO pgbench_branches_pkey;

ALTER TABLE pgbench_accounts VALIDATE CONSTRAINT pgbench_accounts_bid_fkey;
```
Tracking Hashtag and Create new list

# 自己紹介

大阪を拠点に活動しているフロントエンドエンジニアです。

HAL大阪2年生。

Twitterやってます。

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

# 作ったもの

今回作ったものは本当に簡単なもので、

***「twitterのハッシュタグを見つけ次第、リストにそのユーザーをぶち込むもの」***

です。

![スクリーンショット 2016-07-09 1.44.49.png](https://qiita-image-store.s3.amazonaws.com/0/90347/fd97c4c1-1600-dc74-3d91-35b54f4f26f8.png)

# 使ったもの

TwistOAuthが簡単に使えて、使い慣れているので今回も使わせていただきました。

PHPは5.5.31を使いました。

# 使い方

settings.phpに設定しておけば、動くようにしています。

twitterのidとパスワード、作るリストの名前、追っかけるハッシュタグを入力してください。

```php:settings.php
$screen_name = "hoge";
$password = "hogehoge";
$list_name = "マレフィセントリスト";
$target_hashtag = "#マレフィセント";
```

まぁハッシュタグだけはコマンドライン引数にしてもいいと思いますが、今回は割愛します。

設定をしたら、コマンドラインで

`$ php script.php`

これをイベントの間動かしっぱなしにしておけば、OKです。

# コード

すべてのコードは、僕のgithubに置いています。

[konojunya/tracking_hashtag](https://github.com/konojunya/tracking_hashtag)

```script.php
<?php
// この１行で、リストを作っています。作られたリストのIDを代入しておきます。（後で使うため）
$list_id_str = $to->post("lists/create",array("name"=>$list_name))->id_str;

// ストリーミング開始
$to->streaming('statuses/filter', function ($status) use ($to,$list_id_str) {
	if (isset($status)) {
		try {
　　　　　　　　　　　　　　　　　　　　　　　// ここでツイートしていた人をリストに入れていきます。
			$to->post("lists/members/create",array("list_id" => $list_id_str,"screen_name" => $status->user->screen_name));
			echo $status->user->name." - @".$status->user->screen_name." をlistに追加しました！\n";
		}catch (TwistException $e){
			$error = $e->getMessage();
			echo $error.PHP_EOL;
		}
		flush();
	}
},array('track' => $target_hashtag));
```

単純なコードですね。

サクッと作ったものなので、あまり気にしていない場所があります。

例えば、もうすでにリストにいるのに同じ人をリストに入れているかのような標準出力がでるとかあります。

twitterのapiには、GETでlist/members/showというのがあり、リスト内にそのメンバーがいるかどうかというものがありますが、データでエラーとして帰ってくるんではなくエラーが出るので、今回は使っていません。

いい感じにできる人いたらプルリクください（）

# あとがき

まぁ30〜40分程度で作れたので良かったです。笑

何かバグなどありましたら [@konojunya](http://twitter.com/konojunya)までお願いします。
Xamarin.Android で音楽の音量を下げてから効果音を再生する


カーナビでよくある、音楽流しながらナビしてると、ガイダンス中は音楽のボリュームを一時的に下げて、案内の音声を再生するってやつ。

* [スマホアプリ起動時(iOS/Android)に再生中の音楽を停止させる方法 - スタック・オーバーフロー](http://ja.stackoverflow.com/questions/27452/%e3%82%b9%e3%83%9e%e3%83%9b%e3%82%a2%e3%83%97%e3%83%aa%e8%b5%b7%e5%8b%95%e6%99%82ios-android%e3%81%ab%e5%86%8d%e7%94%9f%e4%b8%ad%e3%81%ae%e9%9f%b3%e6%a5%bd%e3%82%92%e5%81%9c%e6%ad%a2%e3%81%95%e3%81%9b%e3%82%8b%e6%96%b9%e6%b3%95/27459#27459)

に回答したので、その関連でやってみた。

```csharp:MainActivity.cs
[Activity(Label = "AudioFocusSample", MainLauncher = true, Icon = "@mipmap/icon")]
public class MainActivity : Activity, AudioManager.IOnAudioFocusChangeListener
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.Main);

        var audioManager = (AudioManager)GetSystemService(Context.AudioService);

        // 先に効果音を読み込んでおく
        var soundPool = new SoundPool(1, Stream.Music, 0);
        var soundId = soundPool.Load(ApplicationContext, Resource.Raw.cat, 0);
        // SoundPool は再生完了のコールバックがないので、事前に長さを得ておく
        var duration = GetSoundDuration(Resource.Raw.cat);

        FindViewById<Button>(Resource.Id.buttonRequestFocus).Click += async (sender, e) => 
        {
            // ダッキングを許可する AudioFocus を要求
            var result = audioManager.RequestAudioFocus(this, Stream.Music, AudioFocus.GainTransientMayDuck);
            if (result == AudioFocusRequest.Granted)
            {
                // 効果音を再生する
                soundPool.Play(soundId, 1.0f, 1.0f, 0, 0, 1.0f);
                // 再生完了まで待つ
                await Task.Delay((int)duration);
                // AudioFocus を開放
                audioManager.AbandonAudioFocus(this);
            }
        };
    }

    // 音声の再生長さを得る
    private long GetSoundDuration(int rawId)
    {
        using (var player = MediaPlayer.Create(ApplicationContext, rawId))
        {
            return player.Duration;
        }
    }

    // IOnAudioFocusChangeListener の実装（RequestAudioFocus のために必要）
    public void OnAudioFocusChange([GeneratedEnum] AudioFocus focusChange)
    {
       // 今回は使用しない
    }
}
```

効果音 ``Resource.Raw.cat`` は、 [On-Jin ～音人～](http://on-jin.com/sound/index.php) さんのを使わせてもらいました。

音量を小さくする＝絞る＝ダッキング、というのがなかなか連想しづらいので辿りつけない。
Android の音声再生は、他に ``MediaPlayer`` とか ``AudioTrack`` もあるし、リモコンなど外部からの操作のため？に BroadcastReceiver を使わないといけないし。

サンプルアプリはこちら。

* [amay077/AudioFocusSample](https://github.com/amay077/AudioFocusSample)

次は Xamarin.iOS でやってみる。

## 参考

* [Managing Audio Focus | Android Developers](https://developer.android.com/training/managing-audio/audio-focus.html)
* [Android Tips #48 BGM や効果音を再生する ｜ Developers.IO](http://dev.classmethod.jp/smartphone/android/android-tips-48-soundpool-mediaplayer/)
* [Managing Audio Playback part2｜Android開発記録雑記](http://ameblo.jp/negiiiimo/entry-11488832997.html)
* [音を制御する - AudioManager - Qiita](http://qiita.com/KeithYokoma/items/3896f5934478fa560a50)
* [Fire TV でのオーディオフォーカスの管理 - アマゾン アプリ 開発者ポータル](https://developer.amazon.com/public/ja/solutions/devices/fire-tv/docs/managing-audio-focus)
gccとclangの仕様の違い？

#ふとしたコンパイルエラーから始まった
いつもどおりC言語で簡単な計算をするプログラムを書いていました。
定数をよく使うんで関数外(つまりグローバルな定数変数として)にこんなふうに書いていたんです。

```c
const double e = 1.602e-19;
const double k_B = 1.38e-23 / e;
```

研究室ではMacを使っているのでAppleがカスタマイズしたclangでコンパイルしてました(gccコマンドでclangが走るようになってた)。
このプログラムがC言語の仕様を満たしているかは自分にはわかりません。
ただ自分の感覚ではコンパイルは通るだろうと思っていました。
まぁ1回目の代入ですし…
その通りclangではコンパイルが通りました。もちろん```-Wall```をつけてもwarningすらもでませんでした。
ただ自宅でコンパイルするとエラーが出たのです！！！

```
FileName.c:xx:yy: error: initializer element is not constant
 const double k_B = 1.38e-23 / e;
                    ^
```
エラーメッセージはこのように出ていました。
gccのバージョンは```gcc 5.3.1```でした。
そこで自宅でもclangを導入してみました。
するとやはりエラーは出ません。
gccとLLVMのclangどちらかがC言語の仕様を満たしていないのでしょうか？
それとも、C言語の仕様にはこのような記述についてそもそも定義されていないのでしょうか？

#結局どういうことなのか？
[StackOverflowにこんな記事がありました。](http://stackoverflow.com/questions/21592494/initializer-element-is-not-constant-error-for-no-reason-in-linux-gcc-compilin)
その記事によると

>C言語では定数表現には静的オブジェクトのための宣言が必要です(静的オブジェクトの宣言が```main```の前に行われるので、任意の実行時に評価する場所がありません)。
>```const```修飾子は明らかにconstantに関係があるように見えますが、C言語での```const```修飾子の意味は定数式を構成できるものであり、またコンパイル時に評価ができなければなりません。つまるところ```const```は、読み取り専用です。

となっています。
ほう、「任意の実行時に評価ができなければならない」と。
関数なんかのブロック外では記述してある順序によらずに評価できなければならないってことですかね？
確かに```e```は```const```をつけていても変数ですから、先に```e```の宣言が評価されてなければ、```k_B```は決定できませんね。

はて？
ではなぜclangではエラーにならなかったのか？
clnagが仕様を満たしてないってことなのかな？
続きを読んでいくとこんなことが書いてありました。

>This also means that clang (the compiler that, as I understand it, is the one invoked when you type gcc under MacOS) is very likely non-conforming, because it fails to diagnose this error. On my own Linux system, I find that, when invoked with -std=c11 -pedantic, gcc 4.7.2 correctly diagnoses the error, but clang 3.4 does not

やはり仕様を満たしていないような感じなことが書いてあるようなきがします(翻訳めんどくさくなってごめんなさい)。
うーん…
どうしたものか…
ここはgccに合わせたほうが良さそうな感じかな。
clangがこれをエラーにする可能性も十二分にあるし。
そんなわけで、あまりこんな書き方をする方はいらっしゃらないと思いますが、```const```は定数じゃなくて、read onlyを意味する修飾子だってことを理解しないとダメですね。
Ubuntu16.04でmysql5.7をChefでインストール

レシピで下のような感じでインストールすると、

```
%w(mysql-server mysql-client).each do |pkg|
  package pkg do
    action :install
  end
end
```

rootでログインできない・・・。

```
$ mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
```

### 結論
一回、データディレクトリを削除して、--initialize-insecureで再作成する。

```
$ sudo rm -fr /var/lib/mysql
$ sudo mkdir /var/lib/mysql
$ sudo chown mysql:mysql /var/lib/mysql
$ sudo /usr/sbin/mysqld --initialize-insecure --user=mysql --datadir=/var/lib/mysql
```

こうすると、パスワードなしでログインできる

```
$ mysql -uroot
```

### 色々調べてみた過程
> –skip-grant-table付で起動して、パスワードを変更する

起動できて、ログインも出来るけど、パスワード変更はできない。というか反映されない。

> /root/.mysql_secret

これはMySQL5.6ね。インストールしたいのは、5.7

> $ cat /var/log/mysqld.log | grep "temporary password"
> 2016-05-16T07:09:49.796912Z 1 [Note] A temporary password is generated for root@localhost: 8)13ftQG5OYl

これは、CentOSね。インストールしたいOSはubuntu

結局のところ、インストールした時に以下のログ出るので、それに従えばよいのですわ。

```
root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
```
Laravel 5.2 で Log を Slack へ送る

[Slack for Laravel](https://github.com/maknz/slack-laravel) という便利ライブラリーがあったのでこちらを利用して Laravel の Log を Slack へ流せるようにします。

# ライブラリのインストール
```bash
composer require maknz/slack-laravel
```

# サービスを登録
```php:config/app.php
'providers' => [
  ...
  Maknz\Slack\Laravel\ServiceProvider::class,
],

'aliases' => [
  ...
  'Slack' => Maknz\Slack\Laravel\Facade::class,
],
```

# 設定
## 設定ファイルを作成
```bash
php artisan vendor:publish
```

## Slack 管理画面で Webフックを作成
[フック新規作成画面](https://my.slack.com/services/new/incoming-webhook)でフックを作成して「Webhook URL」をコピー。

## 設定ファイルを編集
上記でコピーした URL を endpint にペーストし、その他の設定も調整する。

```php:config/slack.php
return [
    'endpoint' => 'https://hooks.slack.com/hogehoge',
    'channel'  => '#hogehoge',
    ...
];
```

# AppServiceProvider.php にログ送信処理を追記
```php:app/Providers/AppServiceProvider.php
<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        \Log::listen(function ($level, $message) {
            \Slack::attach([
                'text' => date('r'),
                'fields' => [
                    [
                        'title' => '[' . strtoupper($level) . ']',
                        'value' => $message,
                    ],
                ],
            ])->send();
        });
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}
```
※ Listener クラスを作って EventServiceProvider.php に登録してもよいかも。

# テスト送信
```php
\Log::debug('テストメッセージです');
\Log::debug(['テストメッセージ1です','テストメッセージ2です']);
```
![Screenshot from 2016-07-09 12-16-39.png](https://qiita-image-store.s3.amazonaws.com/0/77983/d003cf3d-8643-85fb-9457-55aca7f8bbe6.png)

# メッセージの体裁を調整する
以下を確認するとなんとなくわかるのでいろいろいじってみると幸せになれそう。

* [Slack for PHP](https://github.com/maknz/slack)
* [Basic message formatting](https://api.slack.com/docs/message-formatting)
* [Attaching content and links to messages](https://api.slack.com/docs/message-attachments)

※ 上記のままだとすべての Log が送られてしまうので、実際には APP_ENV などによって送信するログレベルを調整する必要があるかと思います。
[GAS]初めての開発手法②google apps scriptのWEB表示

GoogleAppsScript はgoogle アカウントがあればだれでも使えます。

ちょっとやってみたい人は、以下を注意してやってみてください。
（初歩なので、わかっている方は、飛ばしてください。）

まずは、GoogleAppsScript を開きます。
無題のプロジェクトが開きます。
![image](https://qiita-image-store.s3.amazonaws.com/0/133016/d3910896-568c-0945-8bb5-05968adebf82.png)

とりあえず、プロジェクト名を決めましょう。
無題のプロジェクトをクリックするとプロジェクト名の編集が表示されます。
今回は「test」としてOKを押します。
![image](https://qiita-image-store.s3.amazonaws.com/0/133016/2eff4d26-f6ea-d8cd-4ad0-ad872da54d87.png)

プロジェクト名が「test」になりました。
今度は「コード.gs」の名前を変えましょう。
「コード.gs」の右にある下矢印をクリック。
「名前を変更」を選択します。
![image](https://qiita-image-store.s3.amazonaws.com/0/133016/66f6aabf-672f-31fa-19b1-e35cf6130190.png)

ファイル名の変更が表示されます。
今回は「code」を入れます。（拡張子は不要です。）
![image](https://qiita-image-store.s3.amazonaws.com/0/133016/f6bca5d1-6b89-2b3e-220c-d00c74f0e44e.png)

[code.gs]を以下のコードに書き換えてください。
![image](https://qiita-image-store.s3.amazonaws.com/0/133016/ddeabcb9-ebfa-8a00-5e7d-f892832b1fa2.png)

```ruby:code.gs
function doGet() {
  var output = HtmlService.createHtmlOutputFromFile('index');
  return output;
}
```

次にHTMLファイルをGoogle Apps Script上で作成します。
[ファイル]-[新規作成]-[HTMLファイル]を選択します。
![image](https://qiita-image-store.s3.amazonaws.com/0/133016/04e343e7-518d-38c7-b883-c9d50ccf8cf4.png)

ファイルの作成で[index]を入力し、OKを押す。（拡張子はいりません。）
![image](https://qiita-image-store.s3.amazonaws.com/0/133016/0d2922c4-3652-e075-570b-c464b918af29.png)

index.htmlを以下のコードに書き換える。
![image](https://qiita-image-store.s3.amazonaws.com/0/133016/bd48ceea-0112-90c5-36c1-6de2db21450e.png)

```ruby:index.html
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type"
  content="text/html; charset=utf-8">
  <title>Sample jsp</title>
  <style>
    h1 {font-size:16pt; background:#AAFFAA;padding:5px;}
    p {margin:10px;}
  </style>
</head>
<body>
  <h1>Sample jsp page</h1>
  <p>これはサンプルで用意したページです。</p>
</body>
</html>
```

必要なファイルは作りました。
では、実行準備をします。
まずは、[ファイル]-[版を管理]を選択します。
![image](https://qiita-image-store.s3.amazonaws.com/0/133016/331593b9-2182-69ff-1115-6995fa5960c4.png)


バージョン管理が表示されます。
新しいバージョンの保存を押します。
（リリース後は、再度実施が必要な作業です。）
![image](https://qiita-image-store.s3.amazonaws.com/0/133016/1e5255fe-cc04-4838-6831-4a7bdb976be2.png)


バージョン1が表示されます。OKを押します。
![image](https://qiita-image-store.s3.amazonaws.com/0/133016/5afd6e48-1912-81b3-4607-e714a6ff8b23.png)

では公開します。
[公開]-[ウェブアプリケーションとして導入]を選択する。
![image](https://qiita-image-store.s3.amazonaws.com/0/133016/ce96530f-bf71-6f28-23f3-13193a12c686.png)

以下のように設定して、導入を押す。
![image](https://qiita-image-store.s3.amazonaws.com/0/133016/a36e44c8-9496-547e-b283-fcf970f867ed.png)

ウェブアプリケーションが作成されるので、
URLをコピーして、ブラウザに張り付ける。
![image](https://qiita-image-store.s3.amazonaws.com/0/133016/29b1e283-9fc2-6652-5925-d079c1c6804b.png)

以下表示されました。
![image](https://qiita-image-store.s3.amazonaws.com/0/133016/8f914e49-4c02-acde-3780-18e6cfd130e8.png)

#参考
[Webアプリケーション開発とHtml Service (1/7)](http://libro.tuyano.com/index3?id=926001)
MongoDBの基本的な使い方


# RDBとの違い

|RDB|MongoDB|
|:--|:--|
|テーブル構造|JSON形式|
|SQL文|Mongoクエリ|
|Database|Database|
|Table|Collection|
|Row|Document|
|Column|Field|
|Index|Index|
|Primary key|_id|

# MongoDBへ接続する前に

MongoDBがローカルPCにインストールされてMongoDBが起動している必要があります。
Mongoが起動していない場合は[MongoDBインストール](http://qiita.com/yanoojapan/items/237837eacdb62fdc3142 "MongoDBインストール")でMongoDBを起動します。

# MongoDBへ接続

ターミナルからローカルPCのMongo Shellへ接続します。

```Bash:ターミナル
$ mongo
```

データベースを一覧表示します。

```Bash:MongoShell
> show dbs
local  0.000GB
>
```

データベースを切り替えます。
存在しないデータベースのコレクションでドキュメントを挿入した時にデータベースとコレクションが自動作成されます。

```Bash:MongoShell
> use mydb
```

使っているデータベースを表示します。

```Bash:MongoShell
> db
mydb
```

ドキュメントを挿入します。

```Bash:MongoShell
db.mycollection.insert(
  {
    "name" : "Taro",
    "age" : 20,
    "address" : {
      "zipcode" : "1234567",
      "city" : "Tokyo"
    }
  }
)
```

使っているデータベース内のコレクションを一覧表示します。

```Bash:MongoShell
> show collections
mycollection
```

コレクション内のドキュメントを一覧表示します。

```Bash:MongoShell
> db.mycollection.find()
```

nameの値を"Taro"から"Jiro"へ変更します。

```Bash:MongoShell
> db.mycollection.update({"name": "Taro"}, {$set: {"name": "Jiro"}})
```

条件に一致したドキュメントを削除します。

```Bash:MongoShell
> db.mycollection.remove({"name": "Jiro"})
```

コレクションを削除します。
ドキュメントも削除されます。
コレクションがひとつもないとデータベースも自動削除されます。

```Bash:MongoShell
> db.mycollection.drop()
true
```

使っているデータベースを削除します。
コレクションとドキュメントも削除されます。

```Bash:MongoShell
> db.dropDatabase()
```

Mongo Shellを終了します。

```Bash:MongoShell
> exit
bye
```
Arukasアカウントの取得方法

# はじめに

この記事は、

**[Arukas](https://arukas.io/)へのサインアップ手順の説明です。**

目標：**Arukasアカウントの取得！**
難易度：**初級**
所要時間：**約5～10分！**

**この記事に書かれている内容を一通り実行することで、Arukasアカウントを取得することができます！**

## 用語説明

* **サインアップ：** 『アカウント登録作業』のこと。
* **コントロールパネル：** Webブラウザからアクセスできる操作画面。WebUI。コンパネとも呼ぶ。
* **Arukas：** [さくらインターネット](https://www.sakura.ad.jp/)のDockerコンテナホスティングサービス。(https://arukas.io/)
* **Dockerコンテナホスティング：** Dockerコンテナをホスティングするサービス。Docker版レンタルサーバ（雑
* **Docker, Inc.：** Dockerの開発元。Docker社。(https://www.docker.com/)
* **Docker Hub：** Docker社が運営する公式 Dockerイメージ保管サービス。(https://hub.docker.com/)

# What's Arukas?

![Arukas_intro_and_infra_JTF_private.001.png](https://qiita-image-store.s3.amazonaws.com/0/123644/30da00ec-723e-a9b1-7086-708b571c5cb0.png)

**Docker Hub (https://hub.docker.com/) に保管されているDockerイメージを、**
**Dockerに最適化されたArukasのインフラ環境上で稼働させることができるサービス**です。

# 作業の流れ

## １．Arukasにサインアップ

![arukas_signup_arukas.png](https://qiita-image-store.s3.amazonaws.com/0/123644/d64bbe4b-9ecc-d858-0029-16b51dd7f662.png)

**https://app.arukas.io/sign_up にアクセス**して、
**サインアップ（ステップ１～ステップ５）をいますぐやってみよう！**

ステップ１. **自分の名前を入力**しよう！
ステップ２. **自分のメールアドレスを入力**しよう！
ステップ３. **自分のパスワードを入力**しよう！
ステップ４. **基本約款、サービス約款等を確認して、チェックボックスにチェック**を入れよう！
ステップ５. **Sign up** をクリック！

**以下の画面が表示されたら仮サインアップ成功です！**

![arukas_signup_accept.png](https://qiita-image-store.s3.amazonaws.com/0/123644/d6a2b7e1-9400-5227-6128-716d2763f1fd.png)

## ２．メールをチェックしよう！

『**仮登録完了メール**』は届きましたか？

届いていたら、**今すぐメールに書かれている『登録URL』をクリック！**

> ![arukas_signup_mail.png](https://qiita-image-store.s3.amazonaws.com/0/123644/b8070111-01be-cafc-3d39-c5bae7be1413.png)

**以下の画面が表示されたら正式にサインアップ成功です！**

![arukas_signup_accept2.png](https://qiita-image-store.s3.amazonaws.com/0/123644/52ad6360-ded9-b96b-6e7c-ae0d406d83bd.png)

**この画面が表示されたらサインアップ成功です！**

## ３．ログイン確認

**今すぐ https://app.arukas.io/ にアクセスして、自分のArukasアカウントでログインできることをチェック！**

![arukas_login_arukas.png](https://qiita-image-store.s3.amazonaws.com/0/123644/d86ba265-f59b-1278-f0b2-dbb1c2355c4d.png)

**ログイン（ステップ１～ステップ３）をしてみよう！**

ステップ１. **自分のメールアドレスを入力**しよう！
ステップ２. **自分のパスワードを入力**しよう！
ステップ３. **Login** をクリック！

## ４．最終確認

**おめでとうございます！次のようなコントロールパネル画面が表示されたらログイン成功です！**

![arukas_ucp_init.png](https://qiita-image-store.s3.amazonaws.com/0/123644/d1d60b8b-f74d-02ba-9d5c-1e7f6411b45a.png)

# まとめ

* Arukas アカウントの取得は簡単！
C++ MinGWを使用した場合にstd::random_deviceが毎回同じ値を出力する問題について

表題の通りMinGWを使用した場合にstd::random_deviceが毎回同じ値を出力するという現象に遭遇したので自分へのメモとして書き残しておきます。

##環境
MinGW
コンパイラのバージョン
![8.PNG](https://qiita-image-store.s3.amazonaws.com/0/133017/979afe2d-7a0c-0a96-aa04-5adec2c438a6.png)

プログラム

```cpp:test.cpp
#include <iostream>
#include <random>
using namespace std;

int main(void){
	random_device rnd;
	for(int i = 0; i < 10; i++){
		cout << rnd() << endl;
	}
	return 0;
}
```

##実行結果
![2.PNG](https://qiita-image-store.s3.amazonaws.com/0/133017/ce3068d4-e9b6-9478-0cf8-1b22493bd97a.png)

3回実行してみましたがすべて同じ値になっています。

nanashiさんの
[gccをwindowsで使うならstd::random_deviceを使ってはいけない](http://qiita.com/nanashi/items/f94b78398a6c79d939e1)
に書いてあるようにたぶん同じ原因でシードの値が変わってないのかなぁと思います。

なおCygwinやVisualStudio2015を使用した場合は毎回違う値が生成されていました。
Riot.js にSVGをloaderで喰わせる方法

# 良い感じのloaderがなかった
Reactで組んでいたときは何も考えずに [react-svg-loader](https://www.npmjs.com/package/react-svg-loader) を使ってたんだけど、Riot.jsでも同じ事をしたくて、npmで探したんだけど良きものが無かった。小一時間悩んだけど、解決したのでメモ書き。loaderのお話なのでもちろんwebpackです。あとbabel。

# 結論 svg-inline-loader を使った
webpack.configにこの [svg-inline-loader](https://www.npmjs.com/package/svg-inline-loader)  追加して、こう指定してやればエスケープされていないSVGが入る。かんたんね。

```raw-svg-logo.tag
import svg from 'logo.svg'

<raw-svg-logo>
  this.root.innerHTML = svg
</raw-svg-logo>
```

# React でいう dangerouslySetInnerHTML
これに相当するディレクティブがRiot.jsにはないんだけれども、公式では以下の方法が解説されていて、要するにこれと同じ扱いがSVGでも出来たという訳です。
> Riotのテンプレート変数は、HTML形式を含まないテキストのみ表示可能です。しかし、そのためのカスタムタグを作成することはできます。例えば、このようなタグを定義しておけば、他のタグの中から利用することができます。

```raw.tag
<raw>
  <span></span>
  this.root.innerHTML = opts.content
</raw>
```
```my-tag.tag
<my-tag>
  <p>Here is some raw content: <raw content="{ html }"/> </p>
  this.html = 'Hello, <strong>world!</strong>'
</my-tag>
```

余談だけど、上の指定だとコンソールでソース見た時に、タグ要素に文字列がガッツリ入っていて、見た目が悪い。少量のテキストならあまり気にならないけど、ブログの記事とかをぶっこみたい場合はかなり辛い。そんな時は以下の様にObjectで優しく包み込んであげれば問題ない。

```raw.tag
<raw>
  <span></span>
  this.root.innerHTML = opts.content.html
</raw>
```
```my-tag.tag
<my-tag>
  <p>Here is some raw content: <raw content="{ content }"/> </p>
  this.content = { html: 'Hello, <strong>world!</strong>' }
</my-tag>
```
Androidのエミュレーターが起動しないだと？


## 環境
OSX El Capitan 10.11.4
IntelliJ IDEA 2016.1.3

## 事件

エミュレーターでアプリをデバッグしようとしたら見慣れないエラー発生。
先週はちゃんと動いてたじゃないか。

```
emulator: WARNING: VM heap size set below hardware specified minimum of 256MB
emulator: WARNING: Setting VM heap size to 512MB
Hax is enabled
Hax ram_size 0x80000000
HAX is working and emulator runs in fast virt mode.
console on port 5554, ADB on port 5555
Failed to sync vcpu reg
Failed to sync vcpu reg
emulator: ERROR: Unfortunately, there's an incompatibility between HAXM hypervisor and VirtualBox 5.0.20+ which doesn't allow multiple hypervisors to co-exist.  It is being actively worked on; you can find out more about the issue at http://b.android.com/197915 (Android) and https://www.virtualbox.org/ticket/14294 (VirtualBox)
Failed to sync vcpu reg
Internal error: initial hax sync failed
```

とっとと仕事終わらせて帰りたかったのでめずらしくちゃんとエラーメッセージ読んでみた。

うーん、この辺怪しい。

```
emulator: ERROR: Unfortunately, there's an incompatibility between HAXM hypervisor and VirtualBox 5.0.20+ which doesn't allow multiple hypervisors to co-exist
```

`残念ながらVirtualBoxと同時には起動できませんよ` というようなメッセージ性を英語力（Google翻訳）を駆使して感じ取った。

ん？でもVirtualBoxはひとつも起動していない状態。
もしやと思いプロセス探したらVagrantで起動していたイメージがゾンビ状態だった。

Killして再起動

### Successfull!!
と叫んだ。

<img src="https://qiita-image-store.s3.amazonaws.com/0/127115/a139cf14-6118-b3fa-6505-eeacdcc03d3f.png" width="200px"/>
matplotlibの散布図で値ごとに色付けするときのメモ

# この記事は何？
matplotlibで散布図を描くときはscatterを使いますが，各点毎に値が割り当てられているときにその値によって色付けしたい時があります．
いつも描き方を忘れるのでそのためのメモです．

# ソースコード

```py3
import numpy as np
import matplotlib.cm as cm
import matplotlib.pyplot as plt

if __name__ == '__main__':
    N = 100
    X = np.random.rand(N, 2)
    y = np.random.rand(N) * 2 - 1
    sc = plt.scatter(X[:, 0], X[:, 1], vmin=-1, vmax=1, c=y, cmap=cm.seismic)
    plt.colorbar(sc)
    plt.show()
```

Xは2次元上の点を表し，yは各点に割り当てられた値を表します．
今回は各点に-1から1の値を割り当てました．
plt.scatterに渡す引数でvminとvmaxを指定すると，colormapの最小値と最大値を指定することができます．
また，plt.scatterの返り値をplt.colorbarに渡すことでcolormapのcolorbarも描くことができます．

# 実行結果
![demo.png](https://qiita-image-store.s3.amazonaws.com/0/58543/3ed2d12b-b391-0f19-c337-99ddb1f07adc.png)
私家版CSSの書き方

#考えたきっかけ

iPhoneやiPadに対応したりちょっとした動きをつけることが増えたため、1〜数ページ構成のシンプルなウェブアプリでもCSSの記述量が増えてきた。体感的には数年前の倍以上になっている。

このため、無計画にCSSを書くのはちょっと辛くなってきた。

有名なCSSの記述手法やプリプロセッサを使う方法はあるが、1人でサクサクと書く小規模なウェブアプリでは楽になるより増える手間の方が多くなる。

そこで無計画に書くには辛いけど、本格的にするまでもない微妙な範囲で便利な方法を考えてみた。

#私家版CSSの書き方

HTMLとCSSをセットにしたページの構成要素をコンポーネントと呼ぶことにする。

コンポーネントの中にはコンポーネントを入れることができる。ただし、どこにでも入れられるわけではなく入れられるのは事前に準備したスロットと呼ぶ場所に限定する。

コンポーネントのクラス名はキャメルケース(helloWorld)で書く。スロットのクラス名はコンポーネントのクラス名の後にハイフン(-)に続いてキャメルケースで書く。

HTMLはこんな感じ。

```html:sample.html
<div class="user">
  <div class="user-id"></div>
  <div class="user-name"></div>
</div>
```

コンポーネントはいろいろなところで使えるようにするため、CSSでは場所や大きさを表す次のようなアトリビュートは指定しない。

- margin
- width
- height
- display:inline
- display:inline-block
- display:block
- flexアイテムのプロパティ(flex-growなど)

これらのアトリビュートはスロットで指定する。逆にスロットではこれ以外のアトリビュートは指定しない。

CSSはこんな感じ。

```css:sample.css
/* userコンポーネント */
.user {
  border: 1px solid #000;
  display: flex:
}
.user-id {
  flex-shrink: 0;
  width 100px;
}
.user-name {
}
```

userコンポーネントの中にnameコンポーネントを入れ子にするとこんな感じ。

```html:sample2.html
<div class="user">
  <div class="user-id"></div>
  <div class="user-name name">
    <div class="name-firstName"></div>
    <div class="name-lastName"></div>
  </div>
</div>
```

CSSはこんな感じ。

```css:sample2.css
/* userコンポーネント */
.user {
  border: 1px solid #000;
  display: flex:
}
.user-id {
  display: block;
  flex-shrink: 0;
  width 100px;
}
.user-name {
  display: block;
}

/* nameコンポーネント */
.name {
}
.name-firstName {
  display: inline-block;
}
.name-lastName {
  display: inline-block;
}
```

「display: block;」などはまとめて書いた方がいいが、説明のわかりやすさのために別にしている。

単純なルールだが、コンポーネントを他のスロットに移してもCSSを書き換えなくていいので、コンポーネントを入れ替えて試行錯誤してもCSSがぐちゃぐちゃになりにくい。

#補足

選択されたときのハイライト状態の変化とか、コンポーネントのスタイルのカスタマイズをしたいときなどは特にルールはない。そもそも複雑なページを想定していないので、そのようなときは適当にクラスを追加して対処する。
TimeWithZone とDateTimeのiso8601で少し形式が違う

TimeWithZoneとDateTimeのiso8601の形式が若干異なりはまったのでメモ

```
[1] pry(main)> Time.zone.now.utc.iso8601
=> "2016-07-08T14:18:51Z"
[2] pry(main)> DateTime.now.utc.iso8601
=> "2016-07-08T14:19:03+00:00"
```

TimeWithZoneのほうは語尾が"Z"で
DateTimeのほうは語尾が"+00:00"です
[GAS]初めての開発手法①google apps scriptの追加

GoogleAppsScript はgoogle アカウントがあればだれでも使えます。

せっかくなので使い方を説明します。

まずは、簡単にgoogle apps scriptを選択するための手順。
google Drive上で右クリックすると以下が表示されます。
そこで「その他」の「アプリの追加」を選択する。

![image](https://qiita-image-store.s3.amazonaws.com/0/133016/61a78f15-269d-ddbb-9a7f-9f1c66b8758c.png)

ドライブの追加の検索項目に「google apps script」を入力してENTER
![image](https://qiita-image-store.s3.amazonaws.com/0/133016/67d755f7-48d0-d5e3-11f8-559a90acd85f.png)

接続を押すと追加されます。
![image](https://qiita-image-store.s3.amazonaws.com/0/133016/6c0493a7-ac7b-5db6-6dcb-cbdfc3f8a511.png)

google Drive上で右クリックすると以下が表示されます。
そこで「その他」に「GoogleAppsScript」が選択可能になります。

![image](https://qiita-image-store.s3.amazonaws.com/0/133016/8a5b7f3b-b52e-8afb-5320-1018e8d5ef17.png)
Thor::CoreExt::HashWithIndifferentAccess

```rb
require 'pry'

class HashWithIndifferentAccess < Hash #:nodoc:
  def initialize(hash = {})
    super()
    hash.each do |key, value|
      self[convert_key(key)] = value
    end
  end

  def [](key)
    binding.pry
    super(convert_key(key))
  end

  def []=(key, value)
    super(convert_key(key), value)
  end

  def delete(key)
    super(convert_key(key))
  end

  def fetch(key, *args)
    super(convert_key(key), *args)
  end

  def key?(key)
    super(convert_key(key))
  end

  def values_at(*indices)
    indices.map { |key| self[convert_key(key)] }
  end

  def merge(other)
    dup.merge!(other)
  end

  def merge!(other)
    other.each do |key, value|
      self[convert_key(key)] = value
    end
    self
  end

  # Convert to a Hash with String keys.
  def to_hash
    Hash.new(default).merge!(self)
  end

protected

  def convert_key(key)
    key.is_a?(Symbol) ? key.to_s : key
  end

  # Magic predicates. For instance:
  #
  #   options.force?                  # => !!options['force']
  #   options.shebang                 # => "/usr/lib/local/ruby"
  #   options.test_framework?(:rspec) # => options[:test_framework] == :rspec
  #
  def method_missing(method, *args, &block)
    method = method.to_s
    if method =~ /^(\w+)\?$/
      if args.empty?
        !!self[$1]
      else
        self[$1] == args.first
      end
    else
      self[method]
    end
  end
end

a = HashWithIndifferentAccess.new :a => 1, :b => 2

a['a']

a['b']

a[:a]
```

```rb
class A
	def initialize
		@a = "A"
	end
end

class B < A
	def initialize
		@b = "B"
	end
end

class C < B
	def initialize
		super
		@a = "C"
	end

	def show
		puts @a
		puts @b
	end
end

obj = C.new
obj.show
```
thunderbirdとFirefoxをrubyでダウンロードする。

# 最新版のthunderbirdとFirefoxをブラウザを使わずにダウンロードする。

初めまして。Yoshi1729と申します。
仕事でパソコンのセットアップをする際に、thunderbirdとfirefoxをブラウザで
ダウンロードするのが面倒と思い、rubyでダウンロードできないかやってみました。使用する環境はWindows7を想定しています。




## 環境

```
$ ruby --version
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]
```

## 書いたコード

```rb:webDownload.rb

#! /usr/bin/env ruby
# coding:utf-8

require 'open-uri'
require 'net/http'
require 'uri'

product = ['thunderbird-latest', 'firefox-latest']
saveFilename = ['Thunderbird.exe', 'FireFox.exe']


product.each {|query|
  url = 'https://download.mozilla.org/?product=' + query + '&os=win&lang=ja'
  res = Net::HTTP.get_response(URI.parse(url))
  saveFilename.each {|name|
    open("#{name}", "wb") {|save_file|
      open("#{res['location']}", "rb") {|read_file|
        save_file.write(read_file)
      }
    }
  }
}

print "2 files was downloaded!\n"

```

余談ですが、wgetコマンドを使ってもダウンロードできます。
詳細は参考URLを参照してください。

```
wget -O FirefoxSetup.exe "https://download.mozilla.org/?product=firefox-latest&os=win&lang=ja"

wget -O Thunderbird.exe "https://download.mozilla.org/?product=thunderbird-latest&os=win&lang=ja"

```

参考URL
https://ftp.mozilla.org/pub/firefox/releases/latest/README.txt
https://ftp.mozilla.org/pub/thunderbird/releases/latest/README.txt

以上です。
ここまで読んでくださりありがとうございましたm(..)m
git for windows リポジトリを作ってみる

#リポジトリを作ってみる

```
$ mkdir git-tutorial
$ cd git-tutorial/
$ git init
Initialized empty Git repository in C:/Users/username/git-tutorial/.git/

$ git status
On branch master

Initial commit

nothing to commit (create/copy files and use "git add" to track)
```

**git init--リポジトリの初期化**
　バージョン管理を始めるには初期化が必要です。
　初期すると.gitディレクトリが作成されます。


**git status--リポジトリの状態確認**
　On branch master:masterという名前のブランチにいます。
　nothing to commit:コミットがありません。
ObjectMapperでの日付マッピング方法

ObjectMapperスゲー！となってる今日このごろですが、日付のマッピングはどうするんだろうと思って少し調べたら
以下の書き方で日付のマッピングができるとわかりました。

```swift
class dateItems: Object,Mappable {
    dynamic var day:NSDate?
    
    /// ObjectMapper
    required convenience init?(_ map: Map) {
        self.init()
        mapping(map)
    }
    
	func mapping(map: Map) {
	    day <- (map["day"],CustomDateFormatTransform(formatString: "yyyy-MM-dd"))
	}
}
```
今回マッピングしたい日付は以下のようなものです。


```
2016-07-01 00:00:00 +0000
```

マッピングするために日付のフォーマットの書き方どうすればいいんだっけ？となり、調べてたら以下の記事を見つけました。

* [How can I convert including timezone date in swift? - stackoverflow](http://stackoverflow.com/questions/32022906/how-can-i-convert-including-timezone-date-in-swift)


![dateformat](http://i.stack.imgur.com/lkYVY.png)


これを参考にすると以下の書き方になりました。

```swift
class dateItems: Object,Mappable {
    dynamic var day:NSDate?
    
    /// ObjectMapper
    required convenience init?(_ map: Map) {
        self.init()
        mapping(map)
    }
    
	func mapping(map: Map) {
	    day <- (map["day"],CustomDateFormatTransform(formatString: "yyyy-MM-dd'T'HH:mm:ssxxx"))
	}
}
```

無事マッピングされて一安心！
Unicornのoldプロセスを削除する。　※自分用メモ

Unicornのoldプロセスを削除する。

# unicornを停止する
vagrant@vagrant-ubuntu-trusty:~/hoge_app$ bundle exec cap production unicorn:stop

[ec2-user@ip-12345 current]$ ls
app                     Capfile    db                      Gemfile.lock  public       REVISION  vendor
assets_manifest_backup  config     ec2-user@12.345.67.890  lib           Rakefile     test
bin                     config.ru  Gemfile                 log           README.rdoc  tmp
[ec2-user@ip-12345 current]$ ps aux | grep unicorn #このディレクトリでコマンドを実行する！！
ec2-user 12760  0.6  7.8 350136 80352 ?        Sl   22:03   0:01 unicorn master -c /var/www/hoge_app/current/config/unicorn/production.rb -E deployment -D                                               
ec2-user 12764  0.0  7.0 350136 71520 ?        Sl   22:03   0:00 unicorn worker[0] -c /var/www/hoge_app/current/config/unicorn/production.rb -E deployment -D                                            
ec2-user 12767  0.0  6.9 350136 70664 ?        Sl   22:03   0:00 unicorn worker[1] -c /var/www/hoge_app/current/config/unicorn/production.rb -E deployment -D                                            
ec2-user 17045  0.0  0.1 110456  1996 pts/1    S+   22:07   0:00 grep --color=auto unicorn
[ec2-user@ip-12345 current]$ kill -s USR2 12760
[ec2-user@ip-12345 current]$ ps aux | grep unicorn
ec2-user 12760  0.6  7.8 350136 80352 ?        Sl   22:03   0:01 unicorn master (old) -c /var/www/hoge_app/current/config/unicorn/production.rb -E deployment -D                                         
ec2-user 12764  0.0  7.0 350136 71520 ?        Sl   22:03   0:00 unicorn worker[0] -c /var/www/hoge_app/current/config/unicorn/production.rb -E deployment -D                                            
ec2-user 12767  0.0  6.9 350136 70664 ?        Sl   22:03   0:00 unicorn worker[1] -c /var/www/hoge_app/current/config/unicorn/production.rb -E deployment -D                                            
ec2-user 17046 73.5  7.8 350252 80304 ?        Sl   22:07   0:01 unicorn master -c /var/www/hoge_app/current/config/unicorn/production.rb -E deployment -D                                               
ec2-user 17050  0.0  6.9 350252 70548 ?        Sl   22:07   0:00 unicorn worker[0] -c /var/www/hoge_app/current/config/unicorn/production.rb -E deployment -D                                            
ec2-user 17052  0.0  6.9 350252 70612 ?        Sl   22:07   0:00 unicorn worker[1] -c /var/www/hoge_app/current/config/unicorn/production.rb -E deployment -D                                            
ec2-user 17057  0.0  0.2 110456  2072 pts/1    S+   22:07   0:00 grep --color=auto unicorn
[ec2-user@ip-12345 current]$ kill -s QUIT 12760
(メモ) 現在の jenkins.el でできること


https://github.com/rmuslimov/jenkins.el

をざくっと眺めてみた結果、以下の機能が実行されているっぽい。

 * ジョブ一覧表示
 * ジョブ画面表示
 * ジョブの実行(パラメータなどは指定できない)
   * いざとなったら browse-url してもらう想定っぽい。

TODO: https://github.com/AshtonKem/Butler の機能を見てみる。
git for windows 初期設定

# git for windowsの初期設定
インストールされている「Git Bash」を使います。

**名前とメールアドレスの設定**

```
$ git config --global user.name "Firstname Lastname"
$ git config --global user.email "your_email@example.com" 
```


**コマンド出力を読みやすくする**

```
$ git config --global color.ui auto 
```



**設定が反映されたか確認**

```
$ cat ./gitconfig
[user]
        name = Firstname Lastname
        email = your_email@example.com
[color]
        ui = auto
[core]
        autocrlf = true
        excludesfile = C:\\Users\\username\\Documents\\gitignore_global.txt
        quotepath = false
[gui]
[gui]

```
Rails5からはもうdefault_value_forは必要ないのかもしれない


# Rails4 -> Rails5 のアップデートで`ActiveModel::MissingAttributeError`で引っかかる。

Rails5にアップデートしたところ、`FactoryGirl`が`ActiveModel::MissingAttributeError`を出してしまっていた。

最初はなんだかよくわかっていなかったが、どうにも`default_value_for`を利用しているmodelが死んでいるようだった。

[Pull Request](https://github.com/FooBarWidget/default_value_for/pull/57)は既に出ているが、今のところ取り込まれてない（2016/07/08現在）

# どうすれば？ -> Rails5で導入されたActiveRecord attributeを使う。

Modelのデフォルト値は[attribute](http://edgeapi.rubyonrails.org/classes/ActiveRecord/Attributes/ClassMethods.html)で対応出来る。

なので、こんな感じのコードを

```rb
class SomeModel < ActiveRecord::Base
  default_value_for :is_public, false
end
```

こうするだけで良くなった。

```rb
class SomeModel < ActiveRecord::Base
  attribute :some_flag, :boolean, default: -> { false }
end
```
IC > 3.3V入力５V出力の昇圧回路 > リプルの除去

```txt:動作環境
Analog Discovery 2 (以下AD2)
```

http://qiita.com/7of9/items/1f8625bd0f1fd543e2c5
にて物色していた距離計 x 2と5V昇圧回路が到着した。

昇圧回路は以下のものを購入した。
http://akizukidenshi.com/catalog/g/gM-03451/

ブレッドボードに実装した、

![DSC_0183.JPG](https://qiita-image-store.s3.amazonaws.com/0/32870/4a842e22-5da3-4842-9205-733db1ed4b8e.jpeg)

CR123A(3V)を電源として5V出力してみた。その波形が以下。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/5e6cb254-70b8-48eb-408b-35ed69cdf481.png)

波打っている。

付属のデータシートには以下の記載がある。
> C3 [100 uF]は、出力のリプルが大きい際、リプルを小さくする効果があります。

C3を出力側のOUTとGND間に入れた。
効果が見られた。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/c5e46c29-fea9-f98f-74f7-05481321fc27.png)
PHP 5.5 から 5.6 以上に上げると Shift_JIS や EUC-JP のサイトが文字化けする

概要
=====
PHP 5.5 以下から、PHP 5.6 以上に PHP をアップグレードした際、HTTP ヘッダーに `Content-Type: "text/html; charset=UTF-8"` が追加され、文字コードが Shift_JIS などのサイトは文字化けしてしまう場合があります。
これは、php.ini に `default_charset` の指定がないことが原因です。`default_charset = "Shift_JIS"` などを追加することで、ヘッダーの `Content-Type` で指定される文字コードを変更できます。

詳細
=====

Shift_JIS の Web サイトをホスティングしている、レンタルサーヴァーの PHP ヴァージョンを 5.5 から 5.6 に上げたところ、Web サイトに文字化けが発生してしまいました。

`<head>` の中には `<meta charset="Shift_JIS">` が入っているので、HTML 側の文字コード指定は問題ないようです。

一方、HTTP ヘッダーの方を確認してみると、`Content-Type` に `text/html; charset=UTF-8` が指定されていました。

![HTTP ヘッダー](https://qiita-image-store.s3.amazonaws.com/0/41297/731db687-d0d5-2cef-ecf4-ec89f68561ea.png)

調べてみたところ、`Content-Type` で指定される文字コードは、php.ini の `default_charset` というパラメーターで指定することになっているようです。[PHP 5.6 からデフォルト値が空から "UTF-8" に変更されています](http://php.net/manual/ja/ini.core.php#ini.default-charset)。
今までは空だったため、特に `Content-Type` で `charset` が指定されることもなく、このような問題が発生しなかったのだと思います。
MongoDBインストール


# 前提条件

* OS X El Capitan
* Homebrewがインストールされていること
* インターネット接続できること

# MongoDBのインストール

Homebrewをアップデートします。

```
$ brew update
```

MongoDBをインストールします。

```
$ brew install mongodb
```

データ保存ディレクトリを作成します。

```
$ sudo mkdir -p /data/db
```

作成したディレクトリの所有者を変更します。

```
$ sudo chown ${USER} /data/db
```

自動起動の設定をします。

```
$ brew services start mongodb
```


自動起動を止めたい場合

```
$ brew services stop mongodb
```

MongoDBを起動します。

```
$ mongod
```

MongoDBを停止する場合は「Ctrl+c」キーを押下します。

# 補足情報

設定ファイルの保存場所

```
/usr/local/etc/mongod.conf
```

設定ファイルを使った起動方法

```
$ mongod --config /usr/local/etc/mongod.conf
```
Pipelineプラグインで共通ライブラリを利用する　時の地雷

## この情報はすでに古いです。

設定ファイルを読み込みたいのであればreadPropertiseやreadYamlやその他のステップを使いましょう。

共通ライブラリは、jenkinsの管理画面からリポジトリ既に設定できるようになっています。

## ここから本題

Jenkins2でデフォルトで入っているこれの話

Pipeline Shared Groovy Libraries Plugin
https://github.com/jenkinsci/workflow-cps-global-lib-plugin

幾つかはまったのでその共有とか書き書きしておきます。
ある程度は公式読めばOKですが、設置の段階で1日潰しました…

# 設置 #
共有ライブラリの設置方法は以下のurlからgit cloneできることとかいうかなり制限のついた形になっています。

*ssh://USERNAME@server:PORT/workflowLibs.git（SSH Pluginでやれと)
*http://LOCATION/workflowLibs.git(LOCATIONはjenkinsのurl)

まずsshの方は設定方法わけわからんかったのでそっ閉じしました。

で httpの方なのですがこちらも
は？どうやってアクセスさせるの？設定書き書きするのhtaccessなにそれおいしいの？
とかウンウン調べていたら

こんな答えがありました。
https://github.com/cloudbees/jenkins-scripts/blob/master/pipeline-global-lib-init.groovy
これはjenkinsのスクリプトコンソールから入れれば動きます。

ようは、
JENKINS_HOME/workflow-libs
というディレクトリにgitリポジトリがあればokです。
これかなりはまったんですけれどworkflowLibsというディレクトリでもworkflowLibs.gitでもなく
workflow-libsでした…

実際に
$ git clone http://localhost:8080/workflowLibs.git
とするとクローンされてきます。
ただ、ログにもどこにも成功した失敗した出ないのでスクリプト動かして判断しましょうｂ

# その他地雷 #
いろいろはまったところ
## src以下に配置するスクリプト ##
ここではクラスを作成できるのですが
この内部でpipelineのstep(gitとかshとかnode)を利用しようとするとはまります。
これは公式で書いてあるんですけれど

この形のクラス宣言は**アウト**です。

```groovy
// src/org/foo/Point.groovy
package org.foo;

// point in 3D space
class Point {
  float x,y,z;
}
```

こっちが正解

```groovy
// src/org/foo/Zot.groovy
package org.foo;

def checkOutFrom(repo) {
  git url: "git@github.com:jenkinsci/${repo}"
}
```

groovyだとこの形でこんな感じで呼び出せるようです。

def z = new org.foo.Zot()
z.checkOutFrom(repo)

（ただこの形式でクラスフィールド宣言する方法がわからなかった）

## vars以下に配置するスクリプト ##

公式の説明文の通りですが、
現在(2016/7/8)のバージョンではバグでここに更新があった場合、Jenkins再起動しないと読み込んでくれないようです。


## nonserializableなオブジェクトがある場所でビルドすると動かない ##

このコードは失敗します。

```groovy
node{
    def config = new ConfigSlurper().parse(new File('config.groovy').toURL())
    //ビルドがキックされた後に落ちる
    build job:"test"

}
```

原因
*If you must use a nonserializable value temporarily: discard it before doing anything else. When you keep the matcher only as a local variable inside a function, it is automatically discarded as soon as the function returned.


ConfigSlurperは便利なのですが…
これなら動きます。


```groovy
node{
    try{ //スコープが別ならOK
        def config = new ConfigSlurper().parse(new File('config.groovy').toURL())
    }catch(e){}
    //ビルドがキックされた後に落ちる
    build job:"test"

}
```
RMagick (+ CarrierWave) でウォーターマーク（透かし）付きの画像を作る


ウォーターマーク（透かし）を敷き詰めた画像を RMagick で作る方法です。
また、CarrierWave と組み合わせるサンプルも一緒に紹介します。

# ウォーターマークとは
サンプル画像とかに良く被さっているアレです。
[fotowa](https://fotowa.com/)[^1] ロゴで作るとこんな感じになります。

[^1]: 2016年1月からアーキテクト / リードエンジニアとして担当している Web サービス。

![watermark.png](https://qiita-image-store.s3.amazonaws.com/0/64733/0db6491e-caf5-dd76-df0a-3656487614e0.png "watermark.png")

透け透けなのでほとんど見えませんが、例えば[この画像](https://pixabay.com/en/ortler-backcountry-skiiing-alpine-1449018/)と組み合わせるとこうなります。

![watermarked.jpg](https://qiita-image-store.s3.amazonaws.com/0/64733/4f79cc33-c02f-2427-88d3-d60b5cbe1deb.jpeg "watermarked.jpg")

これは今回の最終成果物でもあります。

# RMagick の mosaic で敷き詰めた画像を作る
ウォーターマークを敷き詰める際に、合成処理を繰り返し行ってしまうと非常に時間がかかります。一回試してみましたが実用不可な遅さでした。

そこで、mosaic を使って最初にウォーターマークを敷き詰めた画像を作成し、それを対象となる画像に合成することにします。
こうすることで、かなり処理を高速化することができます。

また mosaic はその名の通り、画像を大量に敷き詰めてモザイクにしてくれる機能です。

```ruby
image = Magick::Image.read("target.png").first

mark = Magick::Image.read("watermark.png").first
mark.background_color = "none" # 背景色が指定されていると合成後にアルファチャネル部分がその色になる

tile = Magick::ImageList.new
page = Magick::Rectangle.new(0, 0, 0, 0)

# 調度良いサイズになるようにウォーターマークを敷き詰める
(image.columns / mark.columns.to_f).ceil.times do |x|
  (image.rows / mark.rows.to_f).ceil.times do |y|
    tile << mark.dup
    page.x = x * tile.columns
    page.y = y * tile.rows
    tile.page = page
  end
end
```

注意すべきポイントはウォーターマークの背景色です。
例えば先程のウォーターマークには元々 "white" が指定されています。

もし背景色が設定されているまま mosaic を作りウォーターマークを敷き詰めると、

![watermarked_1.jpg](https://qiita-image-store.s3.amazonaws.com/0/64733/85b3cb8d-0d32-ca7c-ba61-5507ba4e5cec.jpeg "watermarked_1.jpg")

このように背景色で塗りつぶされてしまいます。

# CarrierWave で使う
CarrierWave では RMagick と組み合わせ、画像のリサイズなどが簡単に行なえます。
例えば、`process resize_to_fit: [2000, 1000]`などが利用可能です。

`process` ではオリジナルメソッドも使えるので、それを定義し`version` の中で使用することにします。


```ruby
class ImageUploader < CarrierWave::Uploader::Base
  include CarrierWave::RMagick

  version :watermarked do
    process :watermark
  end

  def watermark
    mark = Magick::Image.read(Rails.root.join("lib", "assets", "watermark.png")).first
    mark.background_color = "none"

    manipulate! do |image|
      tile = Magick::ImageList.new
      page = Magick::Rectangle.new(0, 0, 0, 0)

      (image.columns / mark.columns.to_f).ceil.times do |x|
        (image.rows / mark.rows.to_f).ceil.times do |y|
          tile << mark.dup
          page.x = x * tile.columns
          page.y = y * tile.rows
          tile.page = page
        end
      end

      image.composite(tile.mosaic, 0, 0, Magick::OverCompositeOp)
    end
  end
end
```

これで保存時にウォーターマークを敷き詰めたものも一緒に保存されるようになりました！

# 参考
* [Module: CarrierWave::RMagick — Documentation for carrierwave (0.11.2)](http://www.rubydoc.info/gems/carrierwave/CarrierWave/RMagick)
* [Ruby で複数枚の画像を一枚にタイル状にまとめた画像をつくるよ - RMagick の mosaic 使います - ヽ(ﾟｰﾟ*ヽ)(ﾉ*ﾟｰﾟ)ﾉわぁい](http://qiita.com/scleen_x_x/items/98676c482ab3d97c0344)