OmniAICreator/Qiita-1.07M huggingface dataset:
jsdoでshadertoy sandbox その2

#概要
jsdoでshadertoyのコードを実行したい。
waveデータも使いたい。
#成果物
http://jsdo.it/ohisama1/Mxnc
#写真
![toy.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/7749ee06-c757-4d77-f0a7-8d99115d3e78.jpeg)

#サンプルコード
```
precision mediump float;
uniform vec2 iResolution;
uniform float iGlobalTime;
uniform sampler2D iChannel0;
uniform sampler2D iChannel1;

float smootherSample(vec2 uv, float e) 
{
	e *= 3.0; 
	return (texture2D(iChannel0, uv - vec2(e * -0.5, 0.0)).x + texture2D(iChannel0, uv - vec2(e * -0.4, 0.0)).x
		+ texture2D(iChannel0, uv - vec2(e * -0.3, 0.0)).x + texture2D(iChannel0, uv - vec2(e * -0.2, 0.0)).x
		+ texture2D(iChannel0, uv - vec2(e * -0.1, 0.0)).x + texture2D(iChannel0, uv - vec2(e * +0.0, 0.0)).x
		+ texture2D(iChannel0, uv - vec2(e * +0.1, 0.0)).x + texture2D(iChannel0, uv - vec2(e * +0.2, 0.0)).x
		+ texture2D(iChannel0, uv - vec2(e * +0.3, 0.0)).x + texture2D(iChannel0, uv - vec2(e * +0.4, 0.0)).x
		+ texture2D(iChannel0, uv - vec2(e * +0.5, 0.0)).x) / 11.0;
}
float getWaveformValue(float x, float mode, float e)
{
	return smootherSample(vec2(x, mode), e);
}
float getWaveformDeriv(float x, float mode, float e)
{
	return (smootherSample(vec2(x + e * 0.5, mode), e) - smootherSample(vec2(x - e * 0.5, mode), e)) / e;
}
vec4 osc(float mode, float offset, float amp, vec2 uv, vec2 dudv)
{
	float base_width = 2.0 * dudv.y;
	float height = amp * (getWaveformValue(uv.x, mode, dudv.x / iResolution.x) - 0.5);
	float heightderiv = amp * getWaveformDeriv(uv.x, mode, dudv.x / iResolution.x);
	float final_width = dot(vec2(base_width, abs(dudv.x * 0.6 * heightderiv)) / iResolution.xy, vec2(1.0, 1.0));
	float value = ((height - uv.y + offset) / final_width);
	float v = abs(value);
	v = clamp(0.0, v, 1.0);
    vec4 colorLCD;
	float color_split = 1.0;
	float color_power = 1.0 - color_split;
	if ((heightderiv < 0.0 ^^ value < 0.0))
    {
		colorLCD.r = (1.0 + 2.0 * color_split) * v;
		colorLCD.g = colorLCD.r * 0.5;
		colorLCD.b = colorLCD.r - color_split;
		colorLCD = clamp(vec4(0, 0, 0, 0), colorLCD, vec4(1, 1, 1, 1));
	}
	else
    {
		colorLCD.b = (1.0 + 2.0 * color_split) * v;
		colorLCD.g = colorLCD.b * 0.5;
		colorLCD.r = colorLCD.b - color_split;
		colorLCD = clamp(vec4(0.0), colorLCD, vec4(1.0));
	}	
	return colorLCD;
}
void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
	vec2 uv = fragCoord.xy / iResolution.xy;
	vec4 color = vec4(1, 1, 1, 1);
	color *= osc(1.0, 0.83, 0.33, uv, vec2(1.0));
	color *= osc(0.0, 0.50, 0.33, uv, vec2(1.0));
	color *= osc(0.0, 0.17, 0.33, vec2(pow(uv.x, 2.0), uv.y),vec2(2.0 * (uv.x), 1.0));
	fragColor = color;
}

void main() 
{
    vec4 color;
    mainImage(color, gl_FragCoord.xy);
    color.w = 1.0;
    gl_FragColor = color;
}   
```
#説明
iChannel0、iChannel1を実装した。
仕組みは、waveデータをテクスチャーに流し込む。
Smartyの@keyの機能

Smartyで```{$配列名|@key}```のような記述に出くわしたので、その機能を記しておきます。
# バージョン
php 5.6.15
Smarty 3.1.28
# Smartyの修飾子
ここでの```@key```は、```$配列名```(主に連想配列)内の、その時点で内部ポインタが指し示している要素のキー名を返します。

Smartyでは、変数と```|```(パイプ、縦線、縦棒)の右側に書かれている文言を修飾子と言い、Smartyで標準で用意されているライブラリ関数や、php関数を修飾子として適用できるのでした。

また```@```(アットマーク)を用いることで、要素一つ一つではなく配列全体に修飾子を作用させることができます。
(参考：http://www.smarty.net/docsv2/ja/language.modifiers.tpl)

たとえば、phpファイル側で

```php:hello.php
<?php

$smarty->assign("$fruit", array("apple" => "リンゴ", "orange" => "ミカン", "grape" => "ブドウ");
$smarty->display('hello.tpl');

?>
```
のように連想配列がSmarty側に渡されたとき、

```Smarty:hello.tpl
{$fruit|@key}<br>
{while $fruit|@next}
  {$fruit|@key}<br>
{/while}
```
とすると、画面に以下のようにキー名が出力されます。

```
apple
orange
grape
```
phpのkey関数：http://php.net/manual/ja/function.key.php
phpのnext関数：http://php.net/manual/ja/function.next.php

ちなみに、foreach文内で修飾子```key```を適用しても、foreachの中で複製した新たな配列をループさせているので、

```Smarty:hello.tpl
{foreach from=$fruit item=item}
  {$fruit|@key}<br>
{/foreach}
```
上のように```$fruit```に```key```を作用させても同じ値が返ってきます。

```
apple
apple
apple
```
# おまけ
配列の修飾子の前に付ける```@```ですが、今のバージョンでは```@```を付けなくても配列全体に作用するようです。

```Smarty:hello.tpl
{$fruit|@count}<br>
{$fruit|count}<br>
```
いずれも要素数3が返ってきます。

```
3
3
```
ただ、あくまで配列に作用させたいということを明示するためにも、```@```は付けたほうが良さそうですね。

過去のバージョンでの表示結果については以下を参照。
http://www.phppro.jp/phptips/archives/vol26/1
Xcodeでのソース上のコメントについて

Xcode向けでのコメントについて
Xcode上で使うコメント記法がobjective-cとは異なるのでメモ

TODOは変わらずTODO

```
// TODO
```

FIXMEも変わらず

```
//FIXME
```

objcdでは pragma markは変更

```
#pragma mark hoge
```

```
// MARK　hoge
```

これらはメニューバーで確認＆ジャンプすることができます。
"CSSで画像の四隅に三角をつけてイイカンジの枠組みっぽくする" を見てやってみた

[CSSで画像の四隅に三角をつけてイイカンジの枠組みっぽくする](http://qiita.com/potato4d/items/b31aefb7114ed9b348ea) という Qiita の記事を読み、「border でも出来そうかな？あと、画像サイズに左右されないようにできないかな？」と思ったので試してみました。

[表示サンプル (CodePen)](http://codepen.io/kuck1u/full/pbyrJp)

## 実装コード

前提として、normalize.css v4.0.0 が読み込まれています。

HTML は至ってシンプルです。

```html
<div class="pictureFrame">
  <img src="https://placehold.jp/480x320.png" alt="Cat" />
</div>
```

次に CSS です。ポイントは、`box-sizing: border-box;` を指定しているところです。それ以外は、border で三角形を作るのと同じ要領です。

```scss
$frame_color: #fff;

* {
    box-sizing: border-box;
}

*:before,
*:after {
    box-sizing: border-box;
}

html,
body {
  width: 100%;
  height: 100%;
}

html {
  font-size: 62.5%;
}

body {
  background-color: darken(#fff, 15%);
}

img {
  height: auto;
  vertical-align: middle;
  width: 100%;
}

.pictureFrame {
  &:before {
    border-bottom: solid 32px transparent;
    border-left: solid 32px $frame_color;
    border-right: solid 32px $frame_color;
    content: " ";
    height: 0;
    left: 0;
    position: absolute;
    top: 0;
    width: 100%;
  }

  &:after {
    content: " ";
    width: 100%;
    height: 0;
    position: absolute;
    bottom: 0;
    left: 0;
    border-top: solid 32px transparent;
    border-left: solid 32px $frame_color;
    border-right: solid 32px $frame_color;
  }

  img {
    border: solid 4px $frame_color;
  }
}
```

当方 Mac 環境なため IE での表示確認をサボっていますので、IE で盛大に崩れている可能性は否定できません。すみません。

[表示サンプル (CodePen)](http://codepen.io/kuck1u/full/pbyrJp)
iOS 9.3からiOS 10.0へのAPI変更点（リンク集）

# 元情報
* [iOS 9.3 to iOS 10.0 API Differences](https://developer.apple.com/library/prerelease/content/releasenotes/General/iOS10APIDiffs/index.html)

# 詳しいReferenceについてはこちら
* [API Reference - Apple Developer Documentation](https://developer.apple.com/reference)

# Added (9)

* [CallKit Changes for Swift](https://developer.apple.com/library/prerelease/content/releasenotes/General/iOS10APIDiffs/Swift/CallKit.html)
* [iAd Changes for Swift](https://developer.apple.com/library/prerelease/content/releasenotes/General/iOS10APIDiffs/Swift/iAd.html)
* [Intents Changes for Swift](https://developer.apple.com/library/prerelease/content/releasenotes/General/iOS10APIDiffs/Swift/Intents.html)
* [IntentsUI Changes for Swift](https://developer.apple.com/library/prerelease/content/releasenotes/General/iOS10APIDiffs/Swift/IntentsUI.html)
* [Messages Changes for Swift](https://developer.apple.com/library/prerelease/content/releasenotes/General/iOS10APIDiffs/Swift/Messages.html)
* [Speech Changes for Swift](https://developer.apple.com/library/prerelease/content/releasenotes/General/iOS10APIDiffs/Swift/Speech.html)
* [UserNotifications Changes for Swift](https://developer.apple.com/library/prerelease/content/releasenotes/General/iOS10APIDiffs/Swift/UserNotifications.html)
* [UserNotificationsUI Changes for Swift](https://developer.apple.com/library/prerelease/content/releasenotes/General/iOS10APIDiffs/Swift/UserNotificationsUI.html)
* [VideoSubscriberAccount Changes for Swift](https://developer.apple.com/library/prerelease/content/releasenotes/General/iOS10APIDiffs/Swift/VideoSubscriberAccount.html)

# Removed (2)

* [iAdJS Changes for Swift](https://developer.apple.com/library/prerelease/content/releasenotes/General/iOS10APIDiffs/Swift/iAdJS.html)
* [Twitter Changes for Swift](https://developer.apple.com/library/prerelease/content/releasenotes/General/iOS10APIDiffs/Swift/Twitter.html)
非プログラマーのためのGoogle Photos入門

Google の写真管理システムとして、これまでPicasa Web Albamsがありましたが、Google Photosに統合されることになりました。
http://googlephotos.blogspot.jp/?hl=ja

というわけで使っていこうと思います。

# まず Google Photosって何よ？

Web上で写真を管理、整理、共有しようというGoogleのサービスです。

https://photos.google.com/


# Google Photosの思想

**Google Photosはフォルダー管理型ではありません**。Gmailでお馴染みのラベル管理型です。

Gmailでいうラベルは、Google Photosでは**アルバム**に相当します。

つまりどういうことかというと、**一つの写真が複数のアルバムに存在しえます。**

アルバムが一見フォルダーみたいに見えるので混乱しないように。

# 1つの写真をアップロードするには

![1.png](https://qiita-image-store.s3.amazonaws.com/0/94177/124e7fde-2f32-86a1-bc86-4a2d8019cf62.png)

![18.png](https://qiita-image-store.s3.amazonaws.com/0/94177/08795fe2-1b80-ec01-9ad8-5bfe6e0a18d3.png)

図のように写真をアップロードを押す

![19.png](https://qiita-image-store.s3.amazonaws.com/0/94177/8af395be-5c15-7982-e8e1-b98f5f921617.png)

写真を**一つ**選択し、「開く」を押す

![21.png](https://qiita-image-store.s3.amazonaws.com/0/94177/b868fb99-fc13-3b88-012f-6266dece676d.png)

アップロードが始まり

![22.png](https://qiita-image-store.s3.amazonaws.com/0/94177/4b45345a-de8b-fefb-4f47-7065325f66b0.png)

完了するので、「アルバムに追加」をクリックする
![16.png](https://qiita-image-store.s3.amazonaws.com/0/94177/e029719c-074c-5430-a84a-9e32e832f8fc.png)

アルバムを選択する

# 複数の写真をアップロードするには

先のやり方では複数の写真を一度に上げられません。
![20.png](https://qiita-image-store.s3.amazonaws.com/0/94177/04b7cc9c-9eeb-c5b2-c16a-bac2547d77fb.png)
D&Dできるみたいな表示が出ますが、私の環境(Windwows7 Firefox)ではできませんでした。そこで**google photo backup**を利用します。

まず事前に、アップロードする写真・動画だけのフォルダを作ります。
![8.png](https://qiita-image-store.s3.amazonaws.com/0/94177/2f1431c7-41a2-f44f-4320-36bcb896307e.png)

さて、google photo backupをインストールしていきましょう。

![3.png](https://qiita-image-store.s3.amazonaws.com/0/94177/217f17e7-520e-a410-b988-f04727a30c1a.png)
![4.png](https://qiita-image-store.s3.amazonaws.com/0/94177/7b98b184-7e18-04ea-ae1a-4dbd351944e7.png)
DLしたら実行します。
![9.png](https://qiita-image-store.s3.amazonaws.com/0/94177/90183407-2351-87ba-f4e3-6640716b2b4f.png)
![10.png](https://qiita-image-store.s3.amazonaws.com/0/94177/319f2a4f-9a5d-15a9-1279-fe91ef9dff36.png)
![5.png](https://qiita-image-store.s3.amazonaws.com/0/94177/e985ecbe-6bdc-f162-2903-2fa0e782a037.png)
![6.png](https://qiita-image-store.s3.amazonaws.com/0/94177/917af534-77ab-df62-bcaa-99001db090d1.png)
ログインして
![12.png](https://qiita-image-store.s3.amazonaws.com/0/94177/500b86cb-ab24-5e23-ebb6-a8f73b9c73d3.png)
写真サイズは元のサイズになっていることを確認してください。
フォルダを追加から先に作ったフォルダを選択します
![11.png](https://qiita-image-store.s3.amazonaws.com/0/94177/7519b680-1c23-8df4-d032-cf1792485506.png)
そうしたらバックアップの開始をクリックします。
![13.png](https://qiita-image-store.s3.amazonaws.com/0/94177/cc3dfd6a-2467-fbfd-c15e-99bc2b58c53b.png)
しばらくするとアップロードが終わるので、写真を選択し
![14.png](https://qiita-image-store.s3.amazonaws.com/0/94177/124fa7e7-1c66-e076-a2a8-c3a1e019448d.png)
![15.png](https://qiita-image-store.s3.amazonaws.com/0/94177/291e175b-322a-00cc-1f39-22b2c56bcd31.png)
アルバムに追加します。
![16.png](https://qiita-image-store.s3.amazonaws.com/0/94177/e029719c-074c-5430-a84a-9e32e832f8fc.png)
LaTeXでよく使うタグのテンプレート

#概要

個人的によく使うタグをまとめます．

##画像の表示

```latex
\usepackage[dvips]{graphicx}%パッケージのインポート

\begin{figure}[H]
 \begin{center}
 \fbox{%図を線で囲む
 \includegraphics[clip,width=8cm]{picture/sample.eps}%{図へのパス}
 }
 \end{center}
 \caption{sample.html}%{図のキャプション}
 \label{fig:sample}%{図のタグ}
\end{figure}

\ref{fig:sample}%文中で引用
```

画像の拡張子をepsにしないとエラーが出る．

##ソースコードの表示

```latex
\lstinputlisting[caption=sample.html,label=sample]{src/sample.html}%独自パッケージを使用

\pgref{sample}%文中で引用
```
OS Xはもう古い、これからは「macOS」が正式名称となります

本日(2016/06/14)開催されたAppleのデベロッパーカンファレンス「WWDC 2016」にて、MacのOSの名称についての、大きな変更がたった今発表されました（2016/6/14 AM2:41執筆）。

これまで長い間「OS X」の名前が使われてきましたが、次回のバージョンからは「macOS」となります。

「mac」は小文字です。正式な表記をする場合は気をつけましょう。
SICP 3 - 3.1


SICPを読み進める上での個人的なメモ。

# 気になった部分の引用

## 3.モジュール性、オブジェクト、状態

>この章では、システムの構造に対する二つのかなり異なった“世界観”から浮かび上がってくる、二つの顕著な組織化戦略について調べていきます。
一つ目の組織化戦略は **オブジェクト (object)** に集中するもので、はっきり分かれたオブジェクトの集合として大きなシステムを捉え、それらのオブジェクトの ふるまいは時間とともに変化するとします。
もうひとつの組織化戦略は、システムを流れる **情報のストリーム (stream)** に集中するというものです。これは、 電子技術者が信号処理システムを見るのと同じやり方です。

## 3.1 代入と局所状態

>オブジェクトのふるまいがその過去に影響されるとき、そのオブジェクトは“状態を持つ”と言います。

>オブジェクトの状態は、ひとつ以上の **状態変数(state variable)** によって特徴づけることができます。状態変数は、オブジェクトの現在のふるまいを決めるのに十分な履歴情報を保持します。単純な銀行システムでは、口座の取引履歴全体を記憶するのではなく、現在の残高によって特徴づけることができるでしょう。

>それぞれの計算オブジェクトは、実際のオブジェクトの状態を表す**局所状態変数 (local state variable)** を持たなければなりません。モデル化対象のシステムに存在するオブジェクトの状態は時間とともに変化するので、それらに対応する計算オブジェクトの状態変数も同じく変化しなければなりません。もしシステム内での時間の流れをコンピュータ内での経過時間としてモデル化することにするなら、プログラムの実行に伴ってふるまいの変わる計算オブジェクトを構築する方法が必要です。具体的には、もし状態変数をプログラミング言語の通常の記号名によってモデル化したいならば、プログラミング言語は **代入演算子 (assignment operator)** を提供し、名前に関連づけられた値を変化させるこ とができなければなりません。


# 参考
[SICP非公式日本語版 翻訳改訂版](http://vocrf.net/docs_ja/jsicp.pdf)
Cocos2d-xで作業PC内のフォルダにアクセス (デバッグ環境用)


デバッグ環境にて、リソース更新のたびにXCODEからビルドする。
そんな日常から解放される為に、
PC上のデータフォルダへ直接アクセスする方法を考えました。

これを実現するのに必要な実装は、以下になります。

1. **任意のPCへファイルサーバーを構築**
NodeWebkitによりマルチプラットフォームで動作するサーバーツールを定義。

2. **cocos2d-xアプリからそれへアクセスする** (FileUtils内へフックする)
cocos2d-x用のコードを定義


実際に作成したものを GitHub へ公開しました。
https://github.com/yassy0413/CCDevTool


# サーバーツール動作イメージ
![image.jpg](https://qiita-image-store.s3.amazonaws.com/0/29099/3523eaa3-ca45-f32a-5ade-a4592caa2fc7.jpeg)

# クライアントコード
- [CCDevClient.h](https://github.com/yassy0413/CCDevTool/blob/develop/CCDevClient.h)
- [CCDevClient.cpp](https://github.com/yassy0413/CCDevTool/blob/develop/CCDevClient.cpp)
- 残念ながら、FileUtils.cpp への加工が少し必要になります
- ホスト名かIpAddressの登録<br>
ex) cocos2d::extension::DevClient::getInstance()->setHostName("http://HostName:1337/");
動いていないdocker コンテナをすべて消去する方法


以下のコマンドを実行すればよい

```bash
for ct in `diff <(docker ps -a -q)  <(docker ps -q) --old-line-format='%L' --new-line-format='%L' --unchanged-line-format=''`; do
  docker rm $ct;
done
```

参考資料
-----

以下を参考にしました

* http://monmon.hateblo.jp/entry/2014/01/20/135109
Active Androidの謎のNullPointerException

自分のノートとして、忘れないようにするために投稿していきたいなと思います。

今回の内容は自分がかなり手こずったので、同じような人を１人でも助けるために書き記します。
active androidがandroid studio ver2.1に上がり、gradleのverも上がり、謎のエラーが出るようになっている。

ぬるぽだ・・・・・・・

エラー内容はjava.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.activeandroid.TableInfo.getIdName()' on a null object....と怒られる。

解決策：
AndroidManifestにnameにAA_MODELS,valueにはmodelを継承したクラスを指定してあげたらいけました!!

例:
<meta-data 
        android:name="AA_MODELS"
        android:value="com.android.dbtest.hogeModel" />

参考サイト:
https://github.com/pardom/ActiveAndroid/issues/461#issuecomment-207252708

いやはや、アップデートで今まで使えていたライブラリが使えなくなる現象は怖いですね・・・
Composerを利用してクラスのオートーロードを実現

PHPでは[PHP: クラスのオートローディング - Manual](http://php.net/manual/ja/language.oop5.autoload.php)という仕組みがあります。
オートローダーにクラスを登録することで、`require_once'などで明示的にクラスが定義されたphpファイルを読み込む宣言を書かなくとも、必要になった際に自動でクラスを読み込んでくれます。

今回はComposerでローカルの独自クラスをオートローダーに登録する方法を紹介します。

## ディレクトリ構造
今回の実験で利用するディレクトリ構造とソースコードの内容です。

```bash:ディレクトリ構造
.
├── MyClass
│   ├── Cat.php
│   └── Dog.php
├── composer.json
├── main.php
└── vendor
    ├── autoload.php
    └── composer
        ├── ClassLoader.php
        ├── LICENSE
        ├── autoload_classmap.php
        ├── autoload_namespaces.php
        ├── autoload_psr4.php
        └── autoload_real.php
```

```php:Dog.php
<?php 

class Dog {
  public function bow() {
    return "わんわん！";
  }
}
```

```php:Cat.php
<?php 

class Cat {
  public function mew() {
    return "みゃ〜〜〜";
  }
}
```

```php:main.php
<?php 

require_once 'vendor/autoload.php';

// Dog.php,Cat.phpがオートローダーに登録されるので自動で読み込まれる
$dog = new Dog();
$cat = new Cat();

echo $dog->bow().PHP_EOL;
echo $cat->mew().PHP_EOL;
```

## composer.jsonの設定
composer.jsonの`autoload`プロパティの`classmap`に登録したいクラスのパスを記述します。

```json:composer.json
{
  "autoload" : {
    "classmap" : [
      "MyClass/Dog.php",
      "MyClass/Cat.php"
    ]
  }
}
```

## composer.jsonの内容を反映
以下のコマンドを実行して記述した内容を反映させます。

```bash
$ composer dumpautoload
```

## 実行結果
Composerによりオートローダーにクラスが登録されたので、DogクラスとCatクラスが自動で読み込まれます。

```bash
$ php main.php
わんわん！
みゃ〜〜〜
```

## 参考文献
【CentOS】Composerを使ってオートロードする方法
http://mikaduki.info/os/centos/1391/

The composer.json Schema - Composer
https://getcomposer.org/doc/04-schema.md#classmap
iOS:AudioKitとやらに触れてみる　HelloWorld編

今日からちょっと長い期間このAudioKitについてお触りしていこうと思う。

AudioKitを使うと何やら音楽チックなアプリが作成できるらしい。

AudioKitはcocoapodを使うと入れることできるぞ！

```
pod 'AudioKit', '~> 3.1'
```

とりあえず今日は簡単に　AudioKitの HelloWorldにTouch！！

<img width="840" alt="スクリーンショット 2016-06-14 1.14.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/84002/bfa42b89-386b-8fa1-ad90-c8a6a3290dc6.png">

音源やら何やらはAudioKit.hogehogeに入ってるぽい（要：次回から調査を入れる）

音源系は.startで再生することができる。

書くときの注意：AudioKit.stop()忘れずに。

<img width="605" alt="スクリーンショット 2016-06-14 1.02.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/84002/b7da78a4-df2b-a2ee-4da0-980fb3c5064c.png">

適当にボタンを設置してプッシュしてやるとピーって音がで、　出ますよ。

MIDIやら何やら色々もりもりされていたので楽しみだ。
UIGestureRecognizer の種類

今日学んだことの共有です。

ある`View`の「タップの開始」と「タップの終了」を検知するということをしたかったのですが、`UITapGestureRecognizer`を使って実現しようとしたところ`UIGestureRecognizerState.Ended`の時しか設定したメソッドが呼ばれず、「タップの開始」時にやりたい処理ができませんでした。

少し調べたところ、`UIGestureRecognizer`には`Discrete Gesture`と`Continuous Gesture`の2種類あることがわかりました。
[(参考)Event Handling Guide for iOS](https://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/GestureRecognizer_basics/GestureRecognizer_basics.html#//apple_ref/doc/uid/TP40009541-CH2-SW2)

##Discrete Gesture
一度しか呼ばれないジェスチャです。以下の2種類があります。
試したところ、指を離したときに呼ばれました。(`state`は`.Ended`でした)

* UITapGestureRecognizer
* UISwipeGestureRecognizer

##Continuous Gesture
名前の通り連続して呼ばれるジェスチャです。以下の4種類があります。
正常に動作した場合、`state`が順に`.Began`、`.Changed`(複数回繰り返し)、`.Ended`と変わります。

* UIPinchGestureRecognizer
* UIPanGestureRecognizer
* UIRotationGestureRecognizer
* UILongPressGestureRecognizer

##今回やりたかったことの実現
今回やりたかったのは、`UIView`をタップ中は`view`の色を変え、指を離した際に色を戻すと同時に別の処理をするということでした。
`UITapGestureRecognizer`では実現できなかったので、`UILongPressGestureRecognizer`の`minimumPressDuration`を0にして実現しました。

```swift:swift
    func setup() {
        let gesture = UILongPressGestureRecognizer(target: self, action: #selector(tapped))
        gesture.minimumPressDuration = 0
        myView.addGestureRecognizer(gesture)
    }
    
    func tapped(recognizer: UILongPressGestureRecognizer) {
        switch recognizer.state {
        case .Began:
            myView.backgroundColor = UIColor.redColor()
            print("Began")
        case .Ended:
            myView.backgroundColor = UIColor.blueColor()
            print("Ended")
        default:
            myView.backgroundColor = UIColor.blueColor()
            print("default")
        }
    }
```

以上になります。
Windows で MongoDB を動かすメモ


## MongoDB をインストールする

### インストーラの取得
公式サイトから msi 形式のファイルをダウンロードして、インストールします。
[https://www.mongodb.com/download-center?jmp=nav#community](https://www.mongodb.com/download-center?jmp=nav#community)

### インストールしたら

MongoDBのインストールされているフォルダーの下にある bin フォルダにパスを通しておきます。  
例) C:\Program Files\MongoDB\Server\3.2\bin

binフォルダの中に mongodb.config を作成してデータベースの保存場所を指定します。
例) c:\mongodb\data

```xml:mongodb.config
dbpath=c:\mongodb\data
```

mongodb.config で指定したディレクトリを作成しておきます。

```bash
mkdir c:\mongodb\data
```

## サーバーを起動する
コマンドプロンプトから `mongod` を実行します。実行する際は、  `--config` パラメータに先ほど作成した mongodb.config のパスを指定します。 もし、パスにスペースが含まれている場合は " で囲ってあげてください。

```bash
mongod --config "C:\Program Files\MongoDB\Server\3.2\bin\mongodb.config"
```

サーバーを停止したい場合は、サーバーを実行しているコマンドプロンプトで `Ctrl + c` で停止することができます。

## 実行中のサーバーのシェルに接続する
サーバーを実行したコマンドプロンプトとは別のコマンドプロンプトを起動して

```bash
mongo
```

を実行します。

サーバーとの接続を切断する場合は `exit` コマンドを使います。

```bash
exit
```

また、サーバーに接続している場合は以下のコマンドでサーバーを停止することができます。

```bash
use admin
db.shutdownServer()
```

サーバーを停止する場合は admin データベースに接続している必要があります。データベースへの接続や切り替えは `use` コマンドに接続したいデータベース名を指定して実行します。

```bash
use  <データベース名>
```

また、サーバーと接続するときにデータベース名を指定すると、指定したデータベースに接続した状態でサーバーに接続できます。

```bash
mongo <データベース名>
```

## 認証の有効化
認証を有効化したい場合は以下の操作を行います。

### ユーザーの作成
ユーザーを作成したいデータベースに接続し、 'db.createUser()' メソッドを実行します。

例)  全てのデータベースに対してユーザーの追加が可能な管理者

```bash
use admin
db.createUser({
  user: "<ユーザー名>",
  pwd: "<パスワード>",
  roles: [
      { role: "userAdminAnyDatabase", db: "admin" },
  ]
})
```

例)  指定したデータベースに対して読書きが可能なユーザー

```bash
use <データベース名>
db.createUser({
  user: "<ユーザー名>",
  pwd: "<パスワード>",
  roles: [
      { role: "readWrite", db: "<データベース名>" },
  ]
})
```

例)  ルートユーザー

```bash
use admin
db.createUser({
  user: "<ユーザー名>",
  pwd: "<パスワード>",
  roles: [ "root" ]
})
```

### パスワードの変更
パスワードを変更したいユーザーが登録されているデータベースに接続し、`db.changeUserPassword()` メソッドを実行します。

```bash
use sample
db.changeUserPassword("<ユーザー名>", "<パスワード>")
```

### ユーザーの削除
削除したいユーザーが登録されているデータベースに接続し、`db.removeUser()` メソッドを実行します。

```bash
db.dropUser("<ユーザー名>")
```

### 登録されているユーザーの確認
admin データベースに接続して、 `db.system.users.find()` メソッドを実行します。

```bash
use admin
db.system.users.find()
```

### 認証ありでサーバーを起動する
mongodb.config に以下を記述して、サーバーを起動します。

```xml:mongodb.config
auth=true
```

### ユーザーを指定してデータベースに接続する
`mongo` コマンドでデータベースに接続する際に、パラメータを指定して実行します。

```bash
mongo -u <ユーザー名> -p <パスワード> --authenticationDatabase <データベース名>
```

また、対象のデータベースに接続してから `db.auth()` メソッドで認証を行うこともできます。

```bash
use <データベース名>
db.auth("<ユーザー名>","<パスワード>")
```
Botをより人間っぽくする


# 概要

せっかくBotを作ってもユーザーに無視されたら意味がありません。
そこでBotをより人間っぽくすれば、ユーザーが感情移入してくれてBotの発言を無視しづらくなるのでは？と考えました。

# やったこと

- アイコン画像を設定する
- 文章で発言する
- お礼を言う（返事をする）
- 絵文字を使う

4点ほどBotを人間っぽくするために工夫してみました。
具体的な設定方法などはSlack + Botkit (https://github.com/howdyai/botkit) が前提です。

## アイコン画像を設定する

風景や模様よりも人が「顔」と認識できるものが良いです。それもちょっと馬鹿っぽいのが良いと思います。
馬鹿っぽければ不具合で変な動きをしても何となく許せるからです。

SlackのBotのアイコン画像はアプリ上で
1. ユーザークリック
2. 「View Profile」クリック
3. 「Configure」クリック
4. 設定用のWebページのCustomize Iconで画像またはemojiを選択
で可能です。

仕事で運用しているBotのアイコンはemojiの「`:robot_face:`」を使ってます。

## 文章で発言する

例えば障害発生時の通知として

```text
障害発生
Server：A
LA:10
```
よりも

```text
Server Aで障害が発生しました！！LAは10です。
```
とかの方が何となく注目しちゃうと思います。（たぶん・・・）

## お礼を言う（返事をする）

ちょっとした会話が成り立つだけで人間っぽさがぐっと増します。
例えばBotに対して「対応しました」と言った時に、Botに「ありがとうございます」というようなお礼を言わせるためには次のようにします。

```js
controller.hears(['(.*)対応しました(.*)'],'direct_message,direct_mention,mention',function(bot, message) {
	bot.reply(message, 'ありがとうございます');
});
```

ただし上記の方法だと一瞬でお礼が返ってきてしまい、ちょっと人間っぽさが足りません。
そこで`replyWithTyping`を使うと、返事を少し遅延させ、さらにタイピング中を表す「xxx is typing」も表示させることができます。

```js
controller.hears(['(.*)対応しました(.*)'],'direct_message,direct_mention,mention',function(bot, message) {
	bot.replyWithTyping(message, 'ありがとうございます');
});
```

## 絵文字を使う

雰囲気を和ませるために絵文字を使います。
文章の最後に「`:smiley:`」等を挿入すればいいだけですが、毎回同じ絵文字だとつまらないので使う絵文字をランダムに変えてみます。

```js
controller.hears(['(.*)対応しました(.*)'],'direct_message,direct_mention,mention',function(bot, message) {
	bot.replyWithTyping(message, 'ありがとうございます' + getRandomSmileEmoji());
});

function getRandomSmileEmoji(){
	var emojiArray = [
		':grinning:',
		':grimacing:',
		':grin:',
		':smiley:',
		':smile:',
		':laughing:',
		':innocent:',
		':wink:'
	];
	var random = Math.floor(Math.random() * emojiArray.length);
	return emojiArray[random];
}
```
githubとgh:eを間違えないためのgitサブコマンドを作った

# <https://github.com/Hi-king/git-confedclone> を作りました。

普段会社ではgithub enterpriseを使っているのですが、OSSの仕事でgithubの方にコミットする事もしばしばあります。さらに業務以外のgithubレポジトリにコミットする事もしばしばあるので、ここで問題となるのが、プライベートなプロジェクトに会社のメールアドレスでコミットしてしまう事件です。

# configを明示的に書かないとリモートにpushできない設定

`git config --global user.useConfigOnly true` しておくと、環境変数からemail取ってきて勝手に使っちゃう事がなくなるので、各レポジトリ毎に明示的に `git config user.email xxxx@yyyy` する必要が出るので、事故らなくなります。( see http://qiita.com/uasi/items/a340bb487ec07caac799 )。

そうすると今度は問題になるのが、レポジトリクローンする毎に設定をしなきゃいけない面倒くささです。怠惰はエンジニアの美徳なので、無駄な作業は一つでも減らしましょう、ということで作ったのが今回のgitサブコマンドです。

# 使い方

1. `git@github.com:Hi-king/git-confedclone.git`
2. `setup.py install`
3. `~/.gitconfedclone` をyamlで書く(後述)
4. `git confedclone https://github.com/xxxx/yyyy` でcloneとconfig設定が一括でできるようになります。

# yaml例

会社とパブリックでメールアドレスを変えたい場合、以下のような設定yamlを書くことでclone元のホストに応じたconfigが自動で書かれます。".*"としている部分はorganizationにマッチさせる正規表現で、ここではホスト名だけで分岐させるという意味です。

```yaml
- "github.yourcompany.com":
    - ".*":
        "user.name": "John Smith"
        "user.email": "john_smith@yourcompany.com"
- "github.com":
    - ".*":
        "user.name": "J"
        "user.email": "john_smith@gmail.com"
- "bitbucket.org":
    - ".*":
        "user.name": "J"
        "user.email": "john_smith@gmail.com"
```

githubの中でもorganization毎にメールアドレスを変えたい場合、以下のような設定yamlを書くことで。organization/user毎に別のconfigがclone時に設定されるようになります。

```yaml
- "github.com":
    - "YOUR-OSS":
        "user.name": "John Smith"
        "user.email": "john_smith@yourcomapany.com"
    - "Other-OSS":
        "user.name": "J.S."
        "user.email": "john_smith@gmail.com"
    - "John":
        "user.name": "J"
        "user.email": "john_smith@gmail.com"
```

# 他のやり方

僕は結構困ってるので、他にも困ってる人がいるはずだし、各自いろんな解決をしてるんじゃないかと思います。もっといい方法もあるのかも。少なくとも、gitのpre-commitフックにスクリプトを書く方法はあるとは思います。
Unreal Engine 4 頑張るの巻

便利な tips
- ファイルロードする際の相対パスの場所
X:\Program Files (x86)\Epic Games\4.12\Engine\Binaries\Win64
- メッシュのランタイムリードhttps://wiki.unrealengine.com/Procedural_Mesh_Component_in_C%2B%2B:Getting_Started
https://github.com/Koderz/UE4RuntimeMeshComponent/wiki
https://wiki.unrealengine.com/Procedural_Mesh_Generation
- C++ でスクリーンショットを撮るの巻
https://answers.unrealengine.com/questions/33023/saving-a-high-res-screenshot-to-a-specific-locatio.html
スクリーンショットファイルは
Users\XXXX\Documents\Unreal Projects\YYYY\Saved\Screenshots\Windows に置かれる。常に png になる。
- UE4 でアクターにスタティックメッシュとマテリアルを適用する
http://qiita.com/maprog/items/4fa40ae23e987428d823
- ログを出してみる
http://qiita.com/maprog/items/4e1765567bbe0e23d894
横並びのリストを中央寄せにするメモ

## 定番の方法 
* display:inline-blockを使う
* display:inline-blockを使うとテキスト扱いになるので、親要素にtext-align:centerにすると、真ん中寄せになる
* このままだとリストの間に余計な余白が入るが、ulタグのフォントサイズを0にしてliタグにフォントサイズを指定すると、余計な余白が消える
* display:table-cellを使った方法もあるらしい

## 今後の方法
* 今後はdisplay:flexを使った方法が主流になっていくので、覚えておく

## 参考記事
http://www.acky.info/tips/css/00011.html
新規ユーザ登録フォームの同意チェックボックス（バリデーション）を実装する

![06377c78be37ce806f377cd52854eddd.png](https://qiita-image-store.s3.amazonaws.com/0/66682/9cd3a22b-af91-5c57-a61b-38a1727e1111.png)

Webサービスの新規ユーザ登録フォームで見かける、「同意チェックボックス」を実装します。
データベースにカラムを追加せず、`validates_acceptance_of`というバリデーションを利用します。

## 1.View

``` new.html.erb
<h1>新規ユーザ登録フォーム</h1>

<div class="row">
    <div class="col-md-6 col-md-offset-3">
        <%= form_for(@user) do |f| %>


            ...省略...


            <%= f.check_box :agreement, :as => :boolean, checked:false %>
            利用規約とプライバシーポリシーに同意する

            <%= f.submit "Create my account", class: "btn btn-large btn-primary" %>

        <% end %>
    </div>
</div>
```

まず、チェックボックスを `<%= f.check_box :agreement, :as => :boolean, checked:false %>` という風に追加。今回は同意なので、`:agreement`としました。

## 2. Model

``` user.rb
class User < ActiveRecord::Base

  validates_acceptance_of :agreement, allow_nil: false, on: :create

  ...省略...

end
```

バリデーションを `validates_acceptance_of`というかたちで追加します。

## 3. Controller
``` users_controller.rb

  def create
    @user = User.new(user_params)
    if @user.save
      flash[:success] = "登録が完了しました！"
      redirect_to @user
    else
      render 'new'
    end
  end

  def user_params
    params.require(:user).permit(:name, :email, :password, :password_confirmation, :agreement)
  end
end
```

取得するパラメータに `:agreement` を追加します。

## 実装完了！

[![https://gyazo.com/175df30e4c2c7a1e0edb01638cff4065](https://i.gyazo.com/175df30e4c2c7a1e0edb01638cff4065.gif)](https://gyazo.com/175df30e4c2c7a1e0edb01638cff4065)

以上のコードで、同意したかどうかをチェックボックスのバリデーションで判断することができるようになりました。

## 参考

[Deviseとsimple_formで会員登録するときの利用規約への同意確認 - 考えまとめノート](http://hirosasaki.hateblo.jp/entry/2013/03/01/Devise%E3%81%A8simple_form%E3%81%A7%E4%BC%9A%E5%93%A1%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8B%E3%81%A8%E3%81%8D%E3%81%AE%E5%88%A9%E7%94%A8%E8%A6%8F%E7%B4%84%E3%81%B8%E3%81%AE%E5%90%8C%E6%84%8F%E7%A2%BA)
Swift2.2でforループの挙動が違う


Swift2.2で、自動でdeprecatedのコードを変更した時、挙動が違います。

```
var array = [1,2,3,4,5,6,7,8,9,10]
for var i=0;i<array.count;i++ {
    print(array[i])
    
    if(i==5){
        array.removeAtIndex(5)
    }
}
```
このコードはdeprecatedと出ます。
なので、クリックして、リターンを押して自動で以下のように変更しました。

```
var array = [1,2,3,4,5,6,7,8,9,10]
for i in 0 ..< array.count {
    print(array[i])
    
    if(i==5){
        array.removeAtIndex(5)
    }
}
```
すると、例外が発生します。

なぜなら、前者のコードでは、array.removeAtIndex(5)によって、arrayの数が減っているので、forの行にあるarray.countの数が減ります。
しかし、後者のコードでは、forの行にあるarray.countの数が減りません。
なので、存在しないindexの配列の要素にアクセスしてしまいます。
なので、注意が必要です。バグの発生源になるので注意しましょう。
ruby has_key? vs key?

http://stackoverflow.com/questions/4528506/how-to-check-if-a-specific-key-is-present-in-a-hash-or-not

has_key?已经弃用 请使用key?

http://ref.xaio.jp/ruby/classes/hash/has_key

```rb
vagrant@precise64:~/data$ pry
[1] pry(main)> {a: 1}.key?(:a)
=> true
[2] pry(main)> {a: 1}.key?(:b)
=> false
[3] pry(main)> {a: 1,b: {c: 1}}.key?(:b)
=> true
[4] pry(main)> {a: 1,b: {c: 1}}.key?(:c)
=> false
[5] pry(main)> {a: 1,b: {c: 1}}.has_key?(:c)
=> false
```
rails consoleが起動できない時の対処法（「FATAL: Listen error」エラー編）

railsコンソールを起動しようとした時、エラーが出て起動ができない場合があります。
そんなエラーを解決する方法を紹介します。

# 開発環境
* OS: CentOS7.2

```sh:開発環境
$ cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
```

# railsコンソールの起動時に出たエラー
```sh:railsコンソールの起動
# 現在いるプロジェクト内のgemを使う場合
$ bundle exec rails c

# マシンにインストールされているgemを使う場合
$ bin/rails c
```

```sh:エラー内容
FATAL: Listen error: unable to monitor directories for changes.
Visit https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers for info on how to fix this.
```
エラー内容を適当に和訳すると・・・

* **ディレクトリの変更を監視することができません。**
* 以下のサイトにアクセスして、このエラーを修正してください。
   * https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers

エラー内容に書いてある通り、サイトにアクセスしてコマンドを実行すれば、コンソールを起動できます。

```sh:エラーを解消するコマンド
$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
```


# エラーが発生した原因
railsコンソールが起動できなかったのは、1つの実ユーザIDに対して生成できる**inotifyのインスタンスの数の上限**が決まっており、その上限に達してしまった為です。

ここで、inotifyとはLinuxファイルやディレクトリのイベントを監視する機能です。
では、1つの実ユーザIDに対して生成できる最大ユーザインスタンスを確認してみましょう。

```sh:最大ユーザインスタンスを確認
$ cat /proc/sys/fs/inotify/max_user_instances
128
```

# 実行コマンドの解説
原因も判明したので、簡単に実行コマンドの解説をします。
## inotifyのインスタンス上限を変更

* inotifyインスタンスの数の上限を`524288`に変更します。
* `/etc/sysctl.conf`にその設定を追記します。
  * `/etc/sysctl.conf`は**カーネルパラメータを記述する設定ファイル**です。

```sh:/etc/sysctl.confに設定を追記
$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
```

## パラメータの設定を反映
* `sysctl`コマンドで先ほど追記したパラメータを読み込みます。
  * sysctlは、ディレクトリ /proc/sys/配下のファイルに書かれた**カーネルパラメータを修正するのに利用**します。
  * `-p`オプションで特定のファイルを指定しない場合、`/etc/sysctl.conf`を読み込みます。

```sh:パラーメータの変更
$ sudo sysctl -p
```

# railsコンソールを起動してみよう

* 無事に、起動が出来ました！！！

```sh:railsコンソールの起動
$ bin/rails c # または bundle exec rails c
Loading development environment (Rails 4.1.15)
[1] pry(main)>
```

# まとめ
inotifyのインスタンスの数の上限に達してしまったことにより、railsコンソールが起動できない場合の解決方法を解説しました。
そして、inotifyのインスタンスの数の上限を変更して、無事にエラーを解決しました！
繰り返されるOpenssl 脆弱性対応


近年、HeartBleedしかりOpensslの脆弱性情報が目立つ。
今後も起こり得るであろうOpensslの脆弱性に備え、最新のVersionに変更する手順を記す。

# 脆弱性情報入手
https://www.jpcert.or.jp/
RSSリーダーなどでjpcertをチェックすると良い。
https://www.jpcert.or.jp/at/2016/at160010.html
にOpensslの脆弱性情報が記載されている。

opensslに特化したニュースの場合は
https://www.openssl.org/news/
にて最速で通知されるが、jpcertの場合はopensslに限らず他の脆弱性情報も日本語で周知してくれるので、
実際にはjpcertのみをウォッチしている会社も多いと思う。

jpcertにはこのように記載がある。

>  以下のバージョンが脆弱性の影響を受けます。
>
>  - OpenSSL 1.0.1r およびそれ以前の 1.0.1 系列
>  - OpenSSL 1.0.2f およびそれ以前の 1.0.2 系列
  
該当のopensslを使っていた場合、openssl-1.0.1r以降にVersion UPしなければならない。


# 前提
Openssl 1.0.1a から Openssl 1.0.1tへVersion UPするものとする。
複数のVersionが共存できるよう、ソースファイルからインストールする

# 手順
``` command
cd /usr/local/src
wget https://www.openssl.org/source/openssl-1.0.1t.tar.gz
tar zxvf openssl-1.0.1t.tar.gz
cd openssl-1.0.1t
./config
make
make install
```

インストールしただけではバージョンアップされない（バージョンが変わっていないことを確認）

``` command
[root@localhost]# openssl version
OpenSSL 1.0.1a
[root@localhost]#
```

現行のopensslのパスを確認

``` command
[root@localhost openssl-1.0.1t]# which openssl
/usr/bin/openssl
[root@localhost openssl-1.0.1t]#
```

呼び出し先を変更し、リンクの張り替え

``` command
cd /usr/bin/
cp /usr/bin/openssl /usr/bin/openssl.`date +%Y%m%d`
rm -f /usr/bin/openssl
ln -s /usr/local/ssl/bin/openssl
``` 

事後確認

``` command
[root@localhost]# openssl version
OpenSSL 1.0.1t 
[root@localhost]#

```
CapistranoでデプロイしたRailsアプリのproductionでActionView::MissingTemplateが出る時に見るTips

結構ハマったので誰かの助けになればと思い共有。
結論から先に言うとunicornのstop,startをすれば解消すると思います。

```bash

bundle exec cap production unicorn:stop
bundle exec cap production unicorn:start

```

原因なのですが、unicorn:restartのbeforeやafterタスクがコケて過去ディレクトリを参照してしまう事によるものです。

実例としてリリース先ディレクトリは/data/rentranking/releases/20160613070708なのに、なぜか/20160514140547を参照してしまうという事が起こります。

```

FATAL -- :
ActionView::MissingTemplate (Missing template shared/lists with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder, :haml], :mobile=>[]}. Searched in:
  * "/data/my_app/releases/20160514140547/app/views"
):
  app/controllers/products_controller.rb:19:in `show'

```

StackOverflowでも同種事例が挙げられていました。
http://stackoverflow.com/questions/22301048/capistrano-giving-error-from-old-release-actionviewmissingtemplate

wheneverでafter :restart, :update_cronタスクが動かない場合も、この事象である可能性があります。
ruby max_by method

http://www.rubycuts.com/developer-resources/ruby-enumerable-module/max_by-method/

4还是比2大

-1比-2大


```rb
[2] pry(main)> [1,1,1,1,2,2].max_by {|a| a}
=> 2
[4] pry(main)> [1,1,1,1,2,2].max_by {|a| a * 2}
=> 2
[5] pry(main)> [1,1,1,1,2,2].max_by {|a| 0 - a}
=> 1
```
Swiftでforループがdeprecatedになってる問題



以下のソースコードでワーニングが出た

```
    func shuffle<T>(inout array: [T]) {
        for var j = array.count - 1; j > 0; j -= 1 {//この行でワーニング
            let k = Int(arc4random_uniform(UInt32(j + 1))) // 0 <= k <= j
            if k == j{
                continue
            }
            swap(&array[k], &array[j])
        }
    }
```

これは、配列をシャッフルする関数で、型は指定できる。

C-stype for statement is deprecated and will be removed in future version of Swift
というワーニングが出る。

ここの場合、クリックしてリターンを押して自動的に直すということができないので、手動で直すことにする。

http://qiita.com/WorldDownTown/items/b9d5d0cdabd634290f5b

この記事が参考になる。

```
// 降順ループ
var array2: [Int] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for i in (0 ..< array2.count).reverse() {
    array2.removeAtIndex(i)
}
print(array2)   // []
```

これが例文として使えるようだ

ということで、修正

```
    func shuffle<T>(inout array: [T]) {
        for j in (0 ..< array.count).reverse(){
            let k = Int(arc4random_uniform(UInt32(j + 1))) // 0 <= k <= j
            if k == j{
                continue
            }
            swap(&array[k], &array[j])
        }
    }
```

うまく動いているので良しとしておこう。
ruby directory_watcher

https://github.com/TwP/directory_watcher

https://github.com/craus/ruby-scripts/blob/e15559dc72bf60372af5fdf46d32cfb3289ee437/Ruby%20scripts/%D1%83%D0%BD%D0%B8%D0%B2%D0%B5%D1%80/dir_watch/watch

```rb
require 'directory_watcher'

dw = DirectoryWatcher.new '.'
dw.add_observer {|*args| args.each {|event| puts event}}

dw.start
gets      # when the user hits "enter" the script will terminate
dw.stop
```

```rb
vagrant@precise64:~/data$ ruby 2.rb 
<DirectoryWatcher::Event type: added path: './1.exs'>
<DirectoryWatcher::Event type: added path: './1.js'>
<DirectoryWatcher::Event type: added path: './1.rb'>
<DirectoryWatcher::Event type: added path: './192-authorization-with-cancan.mp4'>
<DirectoryWatcher::Event type: added path: './2.rb'>
<DirectoryWatcher::Event type: added path: './Elixir.Parallel.beam'>
<DirectoryWatcher::Event type: added path: './auto.mp4'>
<DirectoryWatcher::Event type: added path: './common.h'>
<DirectoryWatcher::Event type: added path: './fuck.rb'>
<DirectoryWatcher::Event type: added path: './image.zip'>
<DirectoryWatcher::Event type: added path: './images.zip'>
<DirectoryWatcher::Event type: added path: './install.sh'>
<DirectoryWatcher::Event type: added path: './jquery.mp4'>
<DirectoryWatcher::Event type: added path: './js.mp4'>
<DirectoryWatcher::Event type: added path: './lala.zip'>
<DirectoryWatcher::Event type: added path: './traditional_and_simplified.rb'>
<DirectoryWatcher::Event type: added path: './upload.zip'>
<DirectoryWatcher::Event type: added path: './uploader.zip'>
<DirectoryWatcher::Event type: added path: './yaml.mp4'>
<DirectoryWatcher::Event type: removed path: './fuck.rb'>
^C2.rb:7:in `gets': Interrupt
	from 2.rb:7:in `gets'
	from 2.rb:7:in `<main>'
```
Vagrantメモ セグメントを分ける


Vagrantで複数ホストのセグメントを分けるには普通にサブネットを分けてIPを設定すればOKでした。

```sh:Vagrantfile
Vagrant.configure(2) do |config|

$script = <<EOF
    yum install wget
    yum -y install ibus-kkc vlgothic-*
    localectl set-locale LANG=ja_JP.UTF-8
    source /etc/locale.conf
EOF

    config.vm.define "chef-server" do |node|
        node.vm.box = "CentOS7.0"
        node.vm.hostname = "chef-server"
        node.vm.network :private_network, ip: "192.168.100.5"
        node.vm.network :private_network, ip: "192.168.101.10", :netmask => "255.255.255.0", virtualbox__intnet: "01"
        node.vm.provision :shell, :inline => $script
    end

    config.vm.define "chef-client01" do |node|
        node.vm.box = "CentOS7.0"
        node.vm.hostname = "chef-client01"
        node.vm.network :private_network, ip: "192.168.100.6"
        node.vm.network :private_network, ip: "192.168.101.11", :netmask => "255.255.255.0", virtualbox__intnet: "01"
        node.vm.network :private_network, ip: "192.168.102.20", :netmask => "255.255.255.0", virtualbox__intnet: "02"
        node.vm.provision :shell, :inline => $script
    end

    config.vm.define "chef-client02" do |node|
        node.vm.box = "CentOS7.0"
        node.vm.hostname = "chef-client02"
        node.vm.network :private_network, ip: "192.168.100.7"
        node.vm.network :private_network, ip: "192.168.102.21", :netmask => "255.255.255.0", virtualbox__intnet: "02"
        node.vm.provision :shell, :inline => $script
    end

end
```

```sh:メモ

#centos7取得
#box取得
vagrant box add CentOS7 https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box

#取得できたことを確認
vagrant box list

#作業ディレクトリで、初期化
vagrant init

#起動
vagrant up

#停止
vagrant halt

#一時停止、再開
vagrant suspend 
vagrant resume

#再起動
vagrant reload

#破棄
vagrant destroy

#boxを保存
vagrant package

#いいかんじのhost名をつける
vagrant ssh-config --host chefclient
vagrant ssh-config --host chefclient >> ~/.ssh/config
```
Reactのcontextの振る舞い

# 動くやつ
https://jsfiddle.net/hokuma/zdusumq5/

# 注意
実験的なAPIの話なので、今後以下に書いてあることが意味をなさなくなる可能性があります。

# Context
コンポーネントに何かしらのデータを渡したい時は、通常`props`を使います。しかし、特定のコンポーネントの子孫コンポーネントで共通して参照したいようなデータがある時は、子孫のコンポーネントに`props`を通じて延々とバケツリレーをしなければなりません。グローバルで参照できるストアのようなオブジェクトがある場合はそれを直接参照することもできますが、Viewのコンポーネントとしての独立性を高めようと思うと、`React`と関係ないグローバルなオブジェクトへの依存は極力持たせたくないところです。

そこで`context`です。
https://facebook.github.io/react/docs/context.html

`context`は、Componentのツリーにおいて自分の子孫となるコンポーネントに自動的に渡されるデータです。

データはオブジェクト形式なので、コンポーネントから`this.context.userId`のようにアクセスすることができます。

## childContextTypes
コンポーネントに渡したい値のタイプ`PropTypes`を使って定義します。文字列を渡したければ`PropTypes.string`、数値を渡したければ`PropTypes.number`となります。

## getChildContext()
渡したいデータをオブジェクト形式で`return`する関数です。関数内からは`this.props`を見れるので、自分自身に渡された`props`の値に依存した値を返すことも可能です。

## contextTypes
`context`を使いたいコンポーネントで、自分が使いたい値を定義します。ここに定義がないと、参照しても値は`undefined`となります。

## 値の上書き
ツリーの途中で、`childContextTypes`と`getChildContext`があるコンポーネントがあると、それより子孫の位置にあるコンポーネントの`context`は上書きマージされます。

コンポーネントAの`childContextTypes`が

```
{
  theme: PropTypes.string,
  userId: PropTypes.number
}
```

Aの子孫であるコンポーネントBの`childContextTypes`が

```
{
  theme: PropTypes.string
}
```

Bの子孫であるコンポーネントCの`contextTypes`が

```
{
  theme: PropTypes.string,
  userId: PropTypes.number
}
```

の場合、コンポーネントCの`context`は、`theme`はコンポーネントBで定義された値、`userId`はコンポーネントAで定義された値となリます。

# まとめ
> Context is an advanced and experimental feature. The API is likely to change in future releases.

将来変わりうる可能性があるので、ユーザへのインパクトが大きいところでは使わないほうが良いかもしれん。使いどころとしては、共通化されたUIコンポーネントに`どんな`や`どこで`といった情報を渡す、というのは一例でありそうです。
[CSS]良さ気なボタン

![gazo.png](https://qiita-image-store.s3.amazonaws.com/0/129169/118b7781-e9d0-0889-1fb3-40ee2e0a6165.png)

上：フォーカス時
下：非フォーカス時

```index.html
<div class="button" >
ボタン
</div>
```

```style.css
.button {
  display: inline-block;
  cursor: pointer;
  padding: 15px 80px;
  background-color: #87CEEB;
  box-shadow: 0px 10px #4682B4;
  border-radius: 5px;
  color: #FFFFFF;
  font-size: 15px;
  opacity: 0.8;
}

.button:hover {
    opacity: 1;    
}
```

**cursor: pointer;**
カーソルが指マークになります。

**box-shadow: 0px 10px #4682B4;**
影がつきます。

1つ目のプロパティ値を0pxで指定することによって、水平方向の影をなくします。

3つ目のプロパティ値は、ボタンと同系色の濃い色を指定すると、
デザイン性も良く、奥行きも表現できていいと個人的に思っています。

**opacity: 0.8;**
透明度を設定します。（0.0～1.0までの値を取り、値が小さいほど透明になります。）

ボタンにカーソルが乗っている時（hover）に、
透明度を下げる（値を大きく）ことで、カーソルが当たっていることがより強調されます。

**border-radius: 5px;**
角丸を表現します。

角丸をつけることで比較的柔らかい印象を与えることができると思います。
ruby scan vs match

http://stackoverflow.com/questions/7993662/whats-the-difference-between-scan-and-match-on-ruby-string

scan匹配所有 match匹配第一个 match会返回matchdata

```rb
vagrant@precise64:~/data$ pry
[1] pry(main)> "ababab".scan(/a/)
=> ["a", "a", "a"]
[2] pry(main)> "ababab".match(/a/)
=> #<MatchData "a">
[3] pry(main)> "ababab".match(/a/).to_a
=> ["a"]
```
ruby each_with_object

https://github.com/craus/ruby-scripts/blob/e15559dc72bf60372af5fdf46d32cfb3289ee437/Ruby%20scripts/%D1%83%D0%BD%D0%B8%D0%B2%D0%B5%D1%80/crypt/helloworld/test

```rb
puts [3,2,9,2,7,2].each_with_object('') {|i, a| a << (i*2).to_s }
```
MSYS2の更新に伴う起動用ショートカットの修正

# 概要

MSYS2 の `filesystem` パッケージが `2016.05-2` に更新されたことにより、それ以前のバージョンを使っていた人は MSYS2 の起動用ショートカットの修正が必要になりました。

# 詳細

`pacman -Suy` を実行して、`filesystem` パッケージを更新すると、以下のような警告が表示されます。

```
      WARNING: the shell starting scripts have been unified. Please update your
      shortcuts to the following targets, otherwise they will STOP WORKING:

          * MSYS2_ROOT\msys2_shell.cmd -mingw32
          * MSYS2_ROOT\msys2_shell.cmd -mingw64
          * MSYS2_ROOT\msys2_shell.cmd -msys
```

このメッセージに従い、スタートメニュー内のショートカットを修正します。
MSYS2 のショートカットは 3 つあり、それぞれ以下のようになっているはずです。(64bit 版の場合。)

```
MinGW-w64 Win32 Shell:
C:\Windows\System32\cmd.exe /A /Q /K C:\msys64\mingw32_shell.bat

MinGW-w64 Win64 Shell
C:\Windows\System32\cmd.exe /A /Q /K C:\msys64\mingw64_shell.bat

MSYS2 Shell:
C:\Windows\System32\cmd.exe /A /Q /K C:\msys64\msys2_shell.bat
```

それを以下のように変更します。

```
MinGW-w64 Win32 Shell:
C:\Windows\System32\cmd.exe /A /Q /C C:\msys64\msys2_shell.cmd -mingw32

MinGW-w64 Win64 Shell
C:\Windows\System32\cmd.exe /A /Q /C C:\msys64\msys2_shell.cmd -mingw64

MSYS2 Shell:
C:\Windows\System32\cmd.exe /A /Q /C C:\msys64\msys2_shell.cmd -msys
```

メッセージの通り、バッチファイル名を `msys2_shell.cmd` に変更し、シェルの種別をオプションで指定しています。

また、`cmd.exe` のオプションを `/K` から `/C` に変更している点も注意してください。これは、1 つ前の `filesystem-2016.05-1` から（もう少し前からかも）、バッチファイルの挙動が変更され、すでに開いているコマンドプロンプトからバッチファイルを実行しても、コマンドプロンプトを勝手に閉じなくなったことによります。この影響で `/K` のままだと、余計なコマンドプロンプトが残ったままになってしまいます。

なお、32bit 版の場合は以下のように `C:\msys64` を `C:\msys32` に読み替えてください。

```
MinGW-w64 Win32 Shell:
C:\Windows\System32\cmd.exe /A /Q /C C:\msys32\msys2_shell.cmd -mingw32

MinGW-w64 Win64 Shell
C:\Windows\System32\cmd.exe /A /Q /C C:\msys32\msys2_shell.cmd -mingw64

MSYS2 Shell:
C:\Windows\System32\cmd.exe /A /Q /C C:\msys32\msys2_shell.cmd -msys
```

## 別解

以下のようなバッチファイルを用意して、そこから `msys2_shell.cmd` を呼び出すようにしておけば、ショートカットの修正は不要です。

```bat:mingw32_shell.bat
@echo off
call "%~dp0msys2_shell.cmd" -mingw32 %*
exit
```

```bat:mingw64_shell.bat
@echo off
call "%~dp0msys2_shell.cmd" -mingw64 %*
exit
```

```bat:msys2_shell.bat
@echo off
call "%~dp0msys2_shell.cmd" -msys %*
exit
```


# おまけ

MSYS2 起動用ショートカットで、「実行時の大きさ」を「最小化」に設定しておくと、起動時に一瞬表示されるコマンドプロンプトが目立たなくなって良いです。

# おまけ2

`msys2-launcher`というパッケージをインストールすると、MSYS2 をインストールしたディレクトリの直下に、MSYS2 起動用のランチャーが 3 つインストールされます。(`mingw32.exe`, `mingw64.exe`, `msys2.exe`)
これを使うと、起動時にコマンドプロンプトが表示されることがなくなり、タスクバーにピン止めすることもでき、便利です。
以下のコマンドでインストールできます。

```sh
$ pacman -S msys2-launcher
```
サーバーが落ちたら自動的に再起動するシェルスクリプト

よくJavaのプロセスとかが死にやすい場合に、仕方がなく設定するスクリプト、死活監視をして問題あらば再起動する。

```sh:monitor_svr.sh
#!/bin/sh
monitorInterval=3
bootWait=10
partOfProgramName="minecraft_server"
while true
do
  isAlive=`ps -ef | grep $partOfProgramName | grep -v grep | wc -l`
  if [ $isAlive = 1 ]; then
    echo "[起動中]: $partOfProgramName `date`"
  else
    echo "[停止]: $partOfProgramName `date`"
    flag=true
    while $flag
    do
      echo "[再起動中]: $partOfProgramName"
      isRebooted=`ps -ef | grep $partOfProgramName | grep -v grep | wc -l`
      if [ $isRebooted = 1 ]; then
        flag=false
      fi
      sleep $bootWait
      /usr/bin/java -Xmx840M -Xms840M -jar minecraft_server.1.10.jar nogui & >/dev/null 
    done
  fi
  sleep $monitorInterval
done
```

プログラムと同じフォルダに入れていいて一緒に走らせておくと自動復旧する。

用途はAWSのt2.microみたいな貧弱なサーバーにminecraftのサーバー立てたりする時に使う。

それでもダメなときは、

```sh:restart_svr.sh
#!/bin/sh
bootWait=10
partOfProgramName="minecraft_server"
isAlive=`ps -ef | grep $partOfProgramName | grep -v grep | wc -l`
if [ $isAlive = 1 ]; then
  echo "[起動中]: $partOfProgramName `date`"
else
  echo "[停止]: $partOfProgramName `date`"
  flag=true
  while $flag
  do
    echo "[再起動中]: $partOfProgramName"
    isRebooted=`ps -ef | grep $partOfProgramName | grep -v grep | wc -l`
    if [ $isRebooted = 1 ]; then
      flag=false
    fi
    sleep $bootWait
    /usr/bin/java -Xmx840M -Xms840M -jar minecraft_server.1.10.jar nogui & >/dev/null
  done
fi
```

こいつをcrontabで登録して実行する。ここまでやっておくとなかなか死なない。なおrestart_svr.sh まで登録してしまうと逆にシャットダウンする時は、cronを止めとく必要があることを忘れないように。
CSSで画像の四隅に三角をつけてイイカンジの枠組みっぽくする

先日「こういうのってCSSで出来ないかな〜？」という話が知人といるときに出てきて、
その時に例で実装したものが割りと改変すると便利そうなコードだったのでご紹介。

# 目標とする形

今回作成したい形状は以下の様なものとなります。

画像を中心とし、四隅に三角を用意、それによってただの画像を額のようにする。といったものですね。

# CSSで作った完成品

先に今回の完成品を上げておきます。
後にビジュアル面は改変が効くので、形状だけのワイヤーのようなものとなります。

<img width="480" alt="111.png" src="https://qiita-image-store.s3.amazonaws.com/0/75633/455c89f0-b9ad-2ffc-2895-a4605b872c96.png">

http://codepen.io/potato4d/pen/YWwYzX

# 作り方や考え方など

今回は枠線のサイズなんかが固定のようだったので、以下の方法で実装。

<img width="645" alt="スクリーンショット 2016-06-13 3.32.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/75633/9d37d925-9379-c93a-8849-5e66d280611f.png">

まずは適当に画像を配置してやり、枠線をつけておきます。
(今回は楽だったのでbackground-imageで配置しました)

```scss:style.scss

.image{
	width: 250px;
	height: 250px;
	background-image:  url("http://urx.red/up2U");
	background-size: cover;
	position: relative;
	border: solid 10px #fff;
}  

```

<img width="672" alt="スクリーンショット 2016-06-13 3.33.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/75633/971ed351-47e2-43cc-8c15-bb23ef3b1d8a.png">

その次に、その要素の`:before`を以下のように指定。
45度に回転させた正方形を、中央に配置して、そこにボーダーを設定することで枠が完成しました。

```scss:style.scss

.image{
	// 前述のコード
	
	&:before{
		width: 130%;
		height: 130%;
		position: absolute;
		left: 50%;
		top: 50%;
		transform: translate(-50%, -50%) rotate(45deg);
		background: transparent;
		border: solid 40px #fff;
		content:"";
	}

```

<img width="480" alt="スクリーンショット 2016-06-13 3.33.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/75633/f5337027-c6c5-c0c5-2fe1-86aa6745c75d.png">

最後に`:before`がついている方の要素に`overflow:hidden`を設定し完了。
これではみ出した部分は見えなくなるため、バッチリ枠線が完成しました。

```scss:style.scss

.image{
	overflow:hidden;
	// 残りのコード
}

```

こんな感じで結構簡単に要件を満たしたコードを書くことができました。

# おまけ

普通に四角を配置しているところを、適当な要素をDOMに足してやって、
`before`と`after`を使って`width, height`で指定してやれば、borderが%指定できない欠点を克服してある程度フレキシブルに作成できるほか、
そもそも見栄えを重視する場合はsvgで書きだして`background-image`と`background-position`辺りを利用すると、ビジュアル面もいい感じにできますので、その時その時に合わせて改変していくと良さそうです。