OmniAICreator/Qiita-1.07M huggingface dataset:
バッチファイル(*.bat) を管理者として実行するための バッチファイル

http://qiita.com/jTakasuRyuji/items/12a0582e085ed91698ab より

バッチファイル単体で管理者昇格からコマンド実行までやりたかったのでカイゼンした。

#再帰対応版
```bat:runas.cmd
@echo off

REM HINT=http://qiita.com/usagi/items/2623145f22faf54b99e0

cd %~dp0

:checkMandatoryLevel
REM ▼管理者として実行されているか確認 START
for /f "tokens=1 delims=," %%i in ('whoami /groups /FO CSV /NH') do (
    if "%%~i"=="BUILTIN\Administrators" set ADMIN=yes
    if "%%~i"=="Mandatory Label\High Mandatory Level" set ELEVATED=yes
)

if "%ADMIN%" neq "yes" (
    echo このファイルは管理者権限での実行が必要です{Administratorsグループでない}
   if "%1" neq "/R" goto runas
   goto exit1
)
if "%ELEVATED%" neq "yes" (
    echo このファイルは管理者権限での実行が必要です{プロセスが昇格されていない}
   if "%1" neq "/R" goto runas
   goto exit1
)
REM ▲管理者として実行されているか確認 END


:admins
    REM ▼管理者として実行したいコマンド START

    whoami /groups /FO CSV /NH
    pause

    REM ▲管理者として実行したいコマンド END
    goto exit1

:runas
    REM ★管理者として再実行
    powershell -Command Start-Process -Verb runas "%0" -ArgumentList "/R" 

:exit1
```


#無限ループ版(UAC=Noでさらにループ)
```bat:runasLoopInfinity.cmd
@echo off

REM HINT=http://qiita.com/usagi/items/2623145f22faf54b99e0

cd %~dp0

:checkMandatoryLevel
REM ▼管理者として実行されているか確認 START
for /f "tokens=1 delims=," %%i in ('whoami /groups /FO CSV /NH') do (
	if "%%~i"=="BUILTIN\Administrators" set ADMIN=yes
	if "%%~i"=="Mandatory Label\High Mandatory Level" set ELEVATED=yes
)

if "%ADMIN%" neq "yes" (
	echo このファイルは管理者権限での実行が必要です{Administratorsグループでない}
	goto runas
)
if "%ELEVATED%" neq "yes" (
	echo このファイルは管理者権限での実行が必要です{プロセスが昇格されていない}
	goto runas
)
REM ▲管理者として実行されているか確認 END

:admins
	REM ▼管理者として実行したいコマンド START
	
	whoami /groups /FO CSV /NH
	pause

	REM ▲管理者として実行したいコマンド END
	goto exit1

:runas
	REM ★管理者として再実行
	powershell -Command Start-Process -Verb runas "%0" 

:exit1
```

Powershellのくだりは 
http://qiita.com/usagi/items/2623145f22faf54b99e0

を参考にしました。
MarkdownからInDesignへのデータ変換方法覚え書き

#Installと変換
基本的には、Pandocと呼ばれるスクリプトを使用して.mdからicml形式に変換する。
Pandocは色々な形式を変換できるので、今回のMarkDownからicml形式だけ覚えてるだけでなく、色々調べておくのもいいだろう。

##Install
Pandoraのページは、[Pandoc - Installing](http://pandoc.org/installing.html)になる。
Installに関しては、Windows版、Mac版、どちらもあるので[Release pandoc 1.17.0.2 · jgm/pandoc](https://github.com/jgm/pandoc/releases/tag/1.17.0.2)からダウンロードする。
Macの場合はpkg形式のファイルなので、ダウンロードしたら、該当のファイルをダブルクリックしていけば、Installできる。

##変換
Pandocの使用に関しては、基本的にコマンドラインの入力になる。
基本的なコマンドは次の通り：

```
pandoc input.md -s -o  output.icml
```

InDesignへの読み込みは、配置（command+d）で行える。

#変換時の段落スタイルに関して
icmlで段落スタイルが指定されるので、xmlを編集できるeditorでInDesignの段落指定名称とicmlで指定された段落スタイル名を合わせる必要がある。
予め、icmlの段階で変換しておく方法もあるが、結構深いところまで変換してあげないといけないので、現実的ではない。icmlから読み込んだ段階で原稿はFinalという意識を持っておく必要がある。
InDesignに読み込んで著者校正を出す場合などはInDesgin＞PDF書き出し＞著者校正という流れが現状ではいいだろうと思われる。

#画像の大きさについて
通常、Markdownの画像挿入方法は、`[画像のキャプション](imgソース)`という方法で挿入するが、これで変換すると画像の大きさは100％で挿入されるため、InDesign上ではエラーになりやすい（ぶっちゃけて言えば、枠外に表示されていじれない）。
なので、Markdownで画像が挿入された場合、HTMLのimgタグを使い、画像の大きさを指定する必要がある。
簡単に言えば、次のように指定する。

```
<img src="画像のソース" width=25%>
```

という感じで、画像の大きさをパーセント表示で設定し、変換すれば、問題ないだろう。
ちなみに画像の大きさはソース元で確認をし、適切なパーセント設定をすることを忘れずに。
通常、画面のスナップショット程度であれば、25%程度の設定で問題ないと思う。

##Markdown文法の画像指定からHTMLの画像指定の変換に関して
先ほども解説したが、Markdownの画像挿入方法は、`[画像のキャプション](imgソース)`という方法で挿入されているが、これをHTML形式に変換しなければならない。
その場合、Search&Replaceの作業を行わないといけないが、それをどうやって行うかが問題になってくる。
正規表現を使える人間であれば対して難しくはないが、ここではその方法を簡単に解説する。
まずは前文となる`[画像のキャプション]`を正規表現を使って次のように検索する。この際、キャプションが抜けてしまうが、どのみちInDesignに変換した時点でキャプションは全て抜け落ちてしまうので、気にしてもしようがない。
どうしてもキャプションが必要な場合は、別途ファイルを保存しておくようにすればいい。

```
!\[.+?\]\(
```

すると!からのキャプションとimgの前括弧までが検索される。
次にこの部分の置き換えを次のように記載する。

```
<img src="
```

これで前半分まではSearch&Replaceが行われた。
次に、後ろ半分の検索を行う。
たとえば画像がjpgの場合は、次のように検索する。

```
.jpg)
```

そして置き換え文字列は次のようにする。

```
.jpg" width=25%>
```

画像がpngやtiffなどがある場合も上記の設定を変えてあげれば問題ないだろう。
プログラムやスクリプトを使うともう少しエレガントな方法で検索できるので、スクリプトが組める方は挑戦してみてほしい。
Xamarin.Forms（Prism.Forms）でApp.xamlを作成して共通のStyleを定義する

Xamarin.Formsのプロジェクトテンプレートでプロジェクトを作成した場合、AppクラスのApp.cs（プロジェクト名.cs）は作成されますがApp.xamlは作成されません。共通のスタイルなどのリソースをXamlで定義したい場合は改めて作成する必要があります。ここではXamarinStudioで作成する方法を紹介します。
prism.formsを使用している場合の方法も後半に書いておきます。

**追記**
Xamarin Studio 6.0以降はソリューション作成の時に
Use XAML for user interface files
にチェックを入れるとApp.Xamlを作成してくれるようになりました。

## 手順

PCLプロジェクト右クリック→追加→新しいファイル→Forms→Forms ContentPage Xaml
でファイルを追加。「App」などAppクラスに使いたい名前を付ける。

App.xaml.csを以下のように書き換える。
元々のApp.cs相当に既にコードを書いている場合はそれも適宜移植する。

```csharp:App.xaml.cs
using Xamarin.Forms;

namespace Sample
{
	public partial class App : Application
	{
		public App ()
		{
			InitializeComponent ();
			MainPage = new Sample.MainPage();
		}

		protected override void OnStart ()
		{
			// Handle when your app starts
		}

		protected override void OnSleep ()
		{
			// Handle when your app sleeps
		}

		protected override void OnResume ()
		{
			// Handle when your app resumes
		}
	}
}
```

App.xamlを以下のように変更

```xml:App.xaml
<?xml version="1.0" encoding="UTF-8"?>
<Application xmlns="http://xamarin.com/schemas/2014/forms"
			 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
			 x:Class="Sample.App">
	<Application.Resources>
		<ResourceDictionary>
  			<Style TargetType="Label"></Style>
  		</ResourceDictionary>
	</Application.Resources>
</Application>
```

元々のAppクラスのファイルはとりあえずコメントアウトしておいて動作確認とれたら削除する。
ここで定義したStyleはアプリケーション全体に適用される。

## prism.formsの場合の手順

通常と手順は同じですがApplicationクラスじゃなくてPrismApplicationクラスを継承するコードを使用します。

```csharp:App.xaml.cs

	public partial class App : PrismApplication
	{

		protected override void OnStart ()
		{
			// Handle when your app starts
		}

		protected override void OnSleep ()
		{
			// Handle when your app sleeps
		}

		protected override void OnResume ()
		{
			// Handle when your app resumes
		}


		protected override async void OnInitialized()
		{

			InitializeComponent ();
			await this.NavigationService.NavigateAsync("MainPage");
		}

		protected override void RegisterTypes()
		{
			this.Container.RegisterTypeForNavigation<MainPage> ();
		}
	}
```


```xml:App.xaml
<?xml version="1.0" encoding="UTF-8"?>
<prism:PrismApplication xmlns="http://xamarin.com/schemas/2014/forms"
			 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
			 xmlns:prism="clr-namespace:Prism.Unity;assembly=Prism.Unity.Forms"
			 x:Class="Sample.App">
	<Application.Resources>
		<ResourceDictionary>
  			<Style TargetType="Label">
  				<Setter Property="TextColor" Value="Red" />
  			</Style>
  		</ResourceDictionary>
	</Application.Resources>
</prism:PrismApplication>
```

独自クラスを継承した場合のルート要素の書き方が分からず少しはまりました。
Macのターミナルから Docker Toolbox を起動する

`.bashrc` 辺りに下記の alias を登録しておくと、 `dockertoolbox` と打つと入れるようになる。

```
# dockertoolbox
alias dockertoolbox=". '/Applications/Docker/Docker Quickstart Terminal.app/Contents/Resources/Scripts/start.sh'"
```

※でも、最新版の Docker Toolbox だとこんなの無くても直接使えたでござる。
nginx エラーページでjsonを返す方法

https://gist.github.com/simlegate/75b18359316cc33d8e20

```
  error_page 400 404 405 =200 @40*_json;

  location @40*_json {
    default_type application/json;
    return 200 '{"code":"1", "message": "Not Found"}';
  }

  error_page 500 502 503 504 =200 @50*_json;

  location @50*_json {
    default_type application/json;
    return 200 '{"code":"1", "message": "Unknown Error"}';
  }
```
任意のjarファイルから条件に合ったクラスをロードする

Javaで作るシステムで、プラグインを作れるようなAPIを提供したくなることあるじゃないですか。
そういうときに使える、「jarファイルを指定すると、その中から指定interfaceの実装クラスを探してロードし、Classオブジェクトを返してくれる」メソッド`loadClassesInJar`を作りました。

指定interfaceを実装しているだけでなく、引数なしコンストラクタを持っていることもチェックしています。
ここは拡張して、指定シグネチャのコンストラクタを持っていること、というチェックにしても良いでしょう。

実際にソフトウェアに組み込む際は、起動時にプラグインディレクトリ内をなめて.jarファイルを探して`loadClassesInJar`でもいいですし、ファイルシステム監視を入れてプラグインディレクトリ内に新規ファイルが登場するたび`loadClassesInJar`という使い方もできます。

JDK5以降対応。

```java
/**
 * 指定したjarファイルから指定interfaceの実装クラス（引数なしコンストラクタを持つもの）をすべてロードして返します。
 * @param jarPath jarファイル
 * @param i 実装しているべきinterfaceまたは親クラス
 * @param <Interface> 実装しているべきinterfaceまたは親クラス
 * @return jarファイル内に含まれる、条件に合うクラスすべてを含むリスト
 * @throws IOException jarファイルの読み込みができませんでした。
 */
public static <Interface> List<Class<Interface>> loadClassesInJar(String jarPath, Class<Interface> i) throws IOException
{
    final URL jarUrl = new File(jarPath).toURI().toURL();

    final URLClassLoader urlClassLoader = URLClassLoader.newInstance(new URL[]{jarUrl});

    final List<Class<Interface>> result = new ArrayList<Class<Interface>>();

    final JarFile jarFile = new JarFile(jarPath);
    for (final Enumeration<JarEntry> entries = jarFile.entries(); entries.hasMoreElements(); )
    {
        // ファイル要素に限って（＝ディレクトリをはじいて）スキャン
        final JarEntry jarEntry = entries.nextElement();
        if (jarEntry.isDirectory()) continue;

        // classファイルに限定
        final String fileName = jarEntry.getName();
        if (!fileName.endsWith(".class")) continue;

        // classファイルをクラスとしてロード。
        final Class<?> clazz;
        try {
            clazz = urlClassLoader.loadClass(fileName.substring(0, fileName.length() - 6).replace('/', '.'));
        } catch (ClassNotFoundException e) {
            continue;
        }

        // iの派生型であることを確認
        if (!i.isAssignableFrom(clazz)) continue;

        // 引数なしコンストラクタを持つことを確認
        try {
            clazz.getConstructor();
        } catch (NoSuchMethodException e) {
            continue;
        }

        result.add((Class<Interface>) clazz);
    }

    return result;
}
```
AdminLTEで使えるチャート表示ライブラリ

[AdminLTE](https://almsaeedstudio.com/)で使えるチャート表示ライブラリのメモです。

|Name|Hatena Bookmark|License|GitHub|URL|
|-----|------|-----|-----|-----|
|ChartJS|663|MIT|[chartjs/Chart.js](https://github.com/chartjs/Chart.js)|http://www.chartjs.org/|
|Morris|88|BSD|[morrisjs/morris.js](https://github.com/morrisjs/morris.js)|http://morrisjs.github.io/morris.js/|
|Flot|85|MIT|[flot/flot](https://github.com/flot/flot)|http://www.flotcharts.org/|
|jQuery Knob|112|BSD 3-Clause|[terrien/jQuery-Knob](https://github.com/aterrien/jQuery-Knob)|http://anthonyterrien.com/knob/|
|jQuery Sparklines|30|MIT|[gwatts/jquery.sparkline](https://github.com/gwatts/jquery.sparkline)|http://omnipotent.net/jquery.sparkline/|

# メモ

* AdminLTEのプラグインは少しバージョンが低いので、必要なら個別に最新版のライブラリを入れる。
  * 例: AdminLTE 2.3.3にプラグインとして付属しているChart.jsのバージョンは1.0.2だけど、その時点でのChart.jsの最新版は2.1.3とか。
Docker Toolbox で /dev/sda1 が一杯になって yum とかが失敗しちゃうのの対処


## 問題

* `yum` とかが失敗しちゃう
* `/dev/sda1` が一杯

## 対応

`/dev/sda1` のサイズを増やしてあげます。
初期状態では 20G 程みたいですが、今回は 50G 程に変更しました。

まず、ディスクサイズを増やさないといけないのですが、
Docker Toolbox が使っているvmのディスクは disk.vmdk でサイズ固定のようでしたので、
VDI のサイズ可変としてディスクのコピーを作成します。
コマンドを使って作成したコピーのサイズを変更します。
サイズを変更したvdiファイルをvmにマウントして、今まで使っていたものを取り外します。

その後、 `/dev/sda1` のパーティションサイズを増やします。
私は **GParted** というツールを使用しました。
vmに **gparted-live-0.26.0-2-i686.iso** をマウントさせて、vmでこのisoから起動します。
GParted を使って、 `/dev/sda1` のパーティションサイズを増やします。
完了したら、vmを終了して **gparted-live-0.26.0-2-i686.iso** を取り外します。

ここまで出来たら、 `/dev/sda1` は増えているはずです。

## メモ

### VirtualBoxのディスクをコピー

参考: http://virtual-soft1.nnn2.com/?p=384

### gpartedのisoを起動できない

VirtualBoxのストレージ設定のSATAポートを一番小さい番号に変更したら起動できた。

VirtualBoxのロゴの画面で何かキーを押せば選択出来るというのも見かけたが、見失ってしまいました。。。


### GPartedの起動に失敗した

**gparted-live-0.26.0-2-i686.iso** は普通に起動すると途中でフリーズしたので、
「Other modes of GParted Live」→「GParted Live（Default Settings,KMS）」を選択して起動しました。
参考: http://www.fuukemn.biz/page17info.html

## エラーメモ

```
At least 52MB more space needed on the / filesystem.
```
UnityでのJsonのデシリアライズパフォーマンス

# 前置き

Unityでjsonをパースするときにどのパース方法が早いのか知りたかったので試してみた。

## 利用したライブラリ

Json.NET 8.0.3 (.NET 2.0 dll)
- https://www.nuget.org/packages/newtonsoft.json/

Unity JsonUtility
- http://docs.unity3d.com/ScriptReference/JsonUtility.html

## 実験環境

- mac os x 
- Unity 5.3.4

# 結果

テストに利用したコード

- https://gist.github.com/mattak/a906581192937ed32bb71bc1e81f30ce

下記のような簡単な構造体をパースするのを複数回繰り返すだけのテスト

```
class SampleEntity
{
    public int id;
    public string name;
}
```

3つの手法で比較

1. UnityのJsonUtility
2. Json.NETのparse
3. Json.NETで手動パース

参考
- http://www.newtonsoft.com/json/help/html/Performance.htm

# 結果

![result.png](https://qiita-image-store.s3.amazonaws.com/0/15000/693bfbdb-8681-ae3c-f5e9-01c8fb0423e2.png)

UnityのJsonUtilityがJsonConvertに対して倍以上早い結果に。
正直意外だった。。
パースするプログラムが悪いだけかもだけど、Json.NETで手動でバース場合のパフォーマンスでも負けてる。
UnityのJsonUtilityは相当チューニングしていそうだ。

# 結論

~~JsonUtilityをつかいましょう。~~

追記:
パフォーマンスはよいのですが、いろいろ機能的に不足していそうでした。
特に例外処理がきちんとできておらず、間違った型の代入が会った際にエラーを吐いてくれないのがつらそうです。。。
Mongooseでインクリメントを実装する

mongooseでインクリメントてきなやつを実装したいと思った。
ググッて海外のドキュメントやらみながら実装した。

## モデルでインクリメントを実装する

例えば以下のような、モデルを定義するとする。

```javascript
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var hogeSchema = new Schema({
  id: {
    type: Number,
    required: true,
    unique: true
  },
  count: {
    type: Number,
    required: true
  }
});

var Hoge = mongoose.model('Hoge', hogeSchema);

module.exports = Hoge;
```

`count`をインクリメントしたい。
スキーマを定義しているすぐ下に、以下のようなメソッドを実装する。

```javascript
hogeSchema.statics.increment = function(id, done) {
  return this.collection.findOneAndUpdate({
    id: id,
  }, {
    $inc: { count: 1 }
  }, {
    new: true,
    upsert: false
  }, function(err, data) {
    done(null, data);
  });
}
```

`$inc`ってのがMongoDBの標準の機能であるっぽく、それで1ずつ増やすみたいなことをしてるっぽい。


## コントローラーから呼び出す

コントローラーとかから`hoge`モデルのincrementを呼び出すと`count`を+1することができる。

```javascript
var db = require('イイ感じにモデルを読み込む');

db.hoges
  .increment('+1したいドキュメントのidを渡す', function(err, result) {
    console.log(result);
  });
```

## めでたい

mongooseはモンゴーズじゃなくて、マングースです。はい。
Unity Audio Spatializer SDKを使ってみる

# Unity Audio Spatializer SDKを使ってみる


Audio Spatializer SDK（オーディオ立体化 SDK）で調べると、Oculas Spatializer SDKの記事が多いので、あえてUnity Audio Spatializer SDKを使ってみました。

### ダウンロード

ここからDemoをダウンロードします。
https://bitbucket.org/Unity-Technologies/nativeaudioplugins/downloads

展開してプロジェクトとして開くと作ったUnityのバージョンが古いとか言われるけど続行！

### 必要なものをパッケージ化

デモとかいらないので、

```
Editor\AudioPluginDemoGUI.dll
Plugins\x86\AudioPluginDemo.dll
Plugins\x86_64\AudioPluginDemo.dll
```
この３つほどをパッケージ化して他のプロジェクトに流用できるようにしとく

### 実際使ってみる

先ほどパッケージ化したものをインポートして
![AudioSpatializerProjectSettings.png](https://qiita-image-store.s3.amazonaws.com/0/79067/af16fccc-90b1-ae68-f464-02669bda7c9e.png)

Audio Project の設定でSpatializer PluginをDemo Spatializerに変更

オーディオ立体化したいAudio Sourceに
![AudioSpatializerEnable.png](https://qiita-image-store.s3.amazonaws.com/0/79067/40064192-dfe7-e132-301e-c77a52c0468f.png)
Spatialzerのチェックをつける。

これで完了です。

### PlayClipAtPoint関数を使ってるのですけど。。。

PlayClipAtPointでAudioClipを鳴らすと"One shot audio"のAudioSourceが自動生成されて自動で消えます。
自動生成されたAudioSourceのプロパティを変更できればいいのですができなさそうなので似たような関数を作りました。

```csharp
    AudioSource PlayClipAt(AudioClip clip, Vector3 pos)
    {
        if (clip == null) return null;
        GameObject tempGO = new GameObject("TempAudio"); // create the temp object
        tempGO.transform.position = pos; // set its position
        AudioSource aSource = tempGO.AddComponent<AudioSource>(); // add an audio source
        aSource.clip = clip; // define the clip
                             // set other aSource properties here, if desired
        aSource.spatialize = true;
        aSource.spatialBlend = 1.0f;
        aSource.Play(); // start the sound
        Destroy(tempGO, clip.length); // destroy object after clip duration
        return aSource; // return the AudioSource reference
    }

```

合ってるかどうか不明ですが、これに置き換え。。。
Selenium について


日本時間の５月２６日ＡＭ２時からセレニウム開発リーダによるｗｅｂセミナーが開催され、Seleniumの今後についての話がされました。

[Webinar: Selenium 3.0, the Spec, and Onwards - with Simon Stewart, Selenium Project Lead](http://lp.applitools.com/selenium3/)

内容の主旨

- Selenium3では　SeleniumCoreが切り離されます
- Selenium4では　W3C で策定が進んでいるWebDriverも組み込まれます
- Selenium5では　W3CWebDriverのみ使うようになります

ということのようです。

![CjUegVLWsAIBoBp.jpg](https://qiita-image-store.s3.amazonaws.com/0/51335/87d26e33-d630-3df3-0fad-21f286f0a047.jpeg)


:blush: ツイッターでリアルタイム実況していただいたパインさんありがとうございました。

# (個人的な）整理

自分の理解整理のために記述してみます


## テストスクリプトが動くまで

1.各言語で記述されたテストスクリプトは実行時に、JSON Wire Protocol　のメッセージに変換され　SeleniumServerに操作を指示

2.テスト用の環境を作成
テスト用のブラウザを起動するため、一時ディレクトリ配下に　起動用のファイルセットを用意

- ログイン名に　漢字が混じっていると　一時ディレクトリはユーザーディレクトリ配下となるため下記の位置となるのですが、この漢字混じりのパスだと、ブラウザ起動をうまくさせることができなくなる事象が発生しているので、ご注意を。

「C:\Users\漢字\AppData\Local\Temp」

- 作成されるファイルセットは、通常起動で作成されている下記ディレクトリのものと同様です

```
C:\Users\ユーザー名\AppData\Roaming\Mozilla\Firefox\Profiles\プロファイル名
```

FireFoxの場合、拡張機能として　webDriverエクステンションが　インストールされた状態を作ります


3.プロファイルの作成
　上述の 一時ディレクトリに　テスト用のprofileが作成されます。
このプロファイルはテストスクリプトで条件を記述できるので動作環境を設定することも可能です

4.ブラウザの起動

5.テストスクリプトに従い拡張機能webdriverエクステンションに組み込まれたSeleniumCore等で　ブラウザを操作

6.終了時は一時ファイルを削除

## 考察（迷走）

あれ？このやり方だと結局SeleniumRCとwebDriver方式との違いは？


# つまり

これからでやろうとしているのは、拡張機能で組み込んでいる webdriverエクステンションで操作するのではなく、mozilla側であらかじめ（？）ブラウザにAPIなりの形で実装してもらいこれで操作をする（これがMarionette(Gecko) Driver かな）ということかと。


# さいごに
ここまで書いてなんだかSeleniumServerの役割等の理解に自信がなくなってきたので祖語・誤りなどどんどんご指摘ください。


# おまけ

２０１３年のリリース発言について
> 3年前に「クリスマスに #Selenium 3をリリースすると約束した」ただ、運よくどのクリスマスかは明言してなかったんだ。

うは　:joy:
EC2にec2-userがいるが、Postgresqlのroleにはec2-userがいなくてエラーが発生した件　※自分用メモ

**EC2にec2-userがいるが、Postgresqlのroleにはデフォルトのユーザだけで、
ec2-userがいなくてエラーが発生した件**

[エラー文]
cat /etc/system-release
 編集リクエストを送る

[ec2-user@ip-184-15-25-98 hogehoge_service]$ cat /etc/system-release
Amazon Linux AMI release 2016.03
Running via Spring preloader in process 19671
FATAL:  role "ec2-user" does not exist

参考サイト
http://qiita.com/ibara1454/items/40ce2d82926f48cf02bc
Python 那些事儿 (一)


mod_wsgi

我去我又忘记了. 之前在用 Python 的时候其实对于它已经了解了很多了. 现在再来复习下.

[文档中说](http://modwsgi.readthedocs.io/en/develop/getting-started.html) 如果想先玩` mod_wsgi` 那就先从简单的` hello world` 来玩, 别一上来就整 python 的 web 应用基于框架如` Django`, `Flask` 等. 先从最基本的入手让` hello world` 跑起来. 通过这个最简单的demo 练习可以用来验证你是否把` mod_wsgi` 装起来了还有 apache 的基本配置你会了.

另外现在有了[第二种方法](https://pypi.python.org/pypi/mod_wsgi), 刚才我们说的方法它是把`mod_wsgi` 作为 apache 的一个独立模块进行安装, 它更多的是从属于 apahce 这边, 第二种方法就是先把`mod_wsgi`先作为一个 package 安装到 Python 的环境中, 同时还有一些其他的包安装进来作为系统管理用它可以从命令行来启动 apache 等.

这个新的机制是用了` mod_wsgi` 的` express` 版本,它能够提供一种更加简单的方式来学习如何处理打包安装一个 python web 应用. 而且它还能够很容易配置让` apahce/mod_wsgi` 进入开发环境不需要多余的 apahce 配置.

下面我们来进入第一种安装方式,就是把`mod_wsgi`作为 module 安装到 apache 中.

这里我们先说说`WSGI` 吧,这个东东看上去好神秘或者好烦的样子, 到底是什么呢, 这个就要读 [PEP3333](http://www.python.org/dev/peps/pep-3333/)了. 它是 python 圈子定义的一个通用的接口来玩实现 web server( 如 apache,nginx)和 python web 应用之间的合作通信的. 这样它的存在就是明确了只要你们双方按照我们的接口玩就不会出问题,而且大家还会相互兼容. 你好, 我好大家好.

下面演示一个简单的` WSGI` 应用.

```python
def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!'

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]
```
这个代码要在它即将被当做` WSGI application script file` 的地方. 就那这个例子, 这个` WSGI 应用`会被 apache 来执行, apache 必须有访问的权限对它本身还有它的上一级文件夹及其所有文件.

这里要注意的是,对于` mod_wsgi` 来说, `WSGI 应用`的入口是被称作为` application` 的,如果你想要给其他名字,你需要显式告诉`mod_wsgi` 你将要用其他的名字. 或者说别随便改这个名字, 如果改了将会牵扯很多其他的修改.

### 挂载这个 WSGI 应用

有很多方法可以把用` mod_wsgi`的 WSGI 应用挂载到特定的 URL 上, 其实这些方法和一般的 CGI 应用配置方法类似. 

主要的策略就是显式的声明 URL 挂载在 Apache 的配置文件中,还有引用到这个` WSGI application script file` 一般这个映射关系敲定, 就是只需要修改 apahce 的配置重启了.

和` mod_cgi` 类似 只需要将 `mod_wsgi` 和 wsgi scriptfile 配置一起就 ok. 使用到的指令是` WSGIScriptAlias`

```
WSGIScriptAlias /myapp /usr/local/www/wsgi-scripts/myapp.wsgi

```

这个配置需要放到 apahce 的配置文件中, 不过通常它是放在` vhsot` 的配置文件里;

```
<VirtualHost *:80>

    ServerName www.example.com
    ServerAlias example.com
    ServerAdmin webmaster@example.com

    DocumentRoot /usr/local/www/documents

    <Directory /usr/local/www/documents>
    Order allow,deny
    Allow from all
    </Directory>

    WSGIScriptAlias /myapp /usr/local/www/wsgi-scripts/myapp.wsgi

    <Directory /usr/local/www/wsgi-scripts>
    Order allow,deny
    Allow from all
    </Directory>

</VirtualHost>
```

这样我们就是把他挂载到了` www.example.com/myapp`. 同样也可以把它挂载到根目录.

```
WSGIScriptAlias / /usr/local/www/wsgi-scripts/myapp.wsgi

```

###委托给常驻进程

默认` WSGI 应用`它是按照一个被称作`嵌入式`模式来跑的,也就是说, 它是用 apahce 的` worker` 进程来处理这些请求的. 这样一来,对于` WSGI`应用的任何修改都需要重启 apahce 才能够生效.不方便,特别是一个 apahce 上挂了好多网站的时候. 更糟的就是你还没有权限来重启. 从 apahce 2.x 开始在 Unix 系统上, 有一种方法可以避免这个问题那就是` daemon` 模式.

待续--
Macを使ってlatexの中国語の「概要」のヘッダーを楷体にする

#はじめに

今回のテーマを必要とする人は、もうめちゃくちゃ少ないと思われる。が、まあ自分でこの問題がなかなか解決できなかったので、記しておく。

#基本

```latex
\usepackage[boldfont]{xeCJK}
\setCJKmainfont{STSong} %宋体という色んな所で使われる字体
```

これを入れておけばいい


#字体

中国語を使うときに、自体がよくわからないものがある。

黑体:Black?bald?、楷体:楷書？など

とりあえず、宋体というのがよくある字体なので、それを入れるが、Macの場合は、Font Bookというのがあるので、そこにどんなものがあるか見ておけばいい。

```latex
\setCJKmainfont{STSong}
\setCJKmainfont[BoldFont=STSongti-SC-Bold, ItalicFont=STKaiti]{STSong}
```


これで、

```latex
\usepackage{fancyhdr}
\fancyhead[C]{\fontsize{10.5}{12} \selectfont \nouppercase{\rightmark}}

\markright{\textit{摘\quad{}要}}
```

としてヘッダーができた。

fancyhdrはヘッダーを調整するもの


#参考ページ

http://www.duanzhihu.com/answer/8513289
Atomで全角スペースを目立たせる方法

UbuntuにAtomいれてMozcつかっていろいろ書くわけですが、全角スペースがコード部分に混入すると、どうでもいいエラーがばんばん出て面倒なわけです。

で、全角スペースを目立たせると生産性が少し上がったりします。

Atomに"Show Ideographic Space Package"をいれて、スタイルシートに以下追加します。contentはなんでもいいけれど、私はよそでは滅多に使われない合同マークを使ってます。

    atom-text-editor, atom-text-editor::shadow {
      .highlight.ideographic-space {
        .region:after {
          color: #800000;
          content: '≡';
          background-color: #CCCCCC;
        }
      }
    }
これで少しどうでもいいバグが減りました。
Set-Cookie 時にドメインを指定する/しないで、保存される ドメイン が異なる

Set-Cookie 時にドメインを指定する/しないで、保存される ドメイン が異なるようです。

####**ドメインを指定しない場合**
レスポンスヘッダの Set-Cookie で、ドメインを省略した場合は、保存された Cookie のドメインは、そのサイトのドメイン (FQDN) となる。

####**ドメインを指定した場合**
レスポンスヘッダの Set-Cookie で、ドメインを指定した場合は、保存された Cookie のドメインは、指定したドメインの先頭に “.” (ドット) が付く。

####**重要**
ドットが付いている Cookie と付いていない Cookie ではアクセスレベルの意味が変わるので注意。ドットが付いている Cookie はサブドメインにアクセスした際にも送信される。
chromeだと別々に認識するみたいです。
新しいフレームにフォント設定が反映されない現象を回避する

# この記事でやること
新しいフレームを作成する際のフックに、フォントを再設定する関数を登録する。

# きっかけ
Ubuntu GNOME上でEmacsを使っている際に、`C-x 5 2 (make-frame-command)`で新たなフレームを生成すると、新しいフレームではフォントの設定が反映されないという現象が起きた。この原因は謎（フォントの設定方法がマズイのかもしれない。ご存じの方はコメントで教えてほしい）だが、とりあえずは本記事の手法でごまかすことができたので、メモを残しておく。

# フォントの設定

`init.el`から呼ばれるスクリプトの中に設定をベタ書きしていたのを、とりあえず関数にまとめる。例として私の場合を示すと、以下のようになった。

```el:conf-font.el
(defun reload-font ()
  (interactive)
    ;;OSX
    (when (eq system-type 'darwin)
      (set-face-attribute 'default nil :family "Monaco" :height 140)
      (set-fontset-font (frame-parameter nil 'font)
			'japanese-jisx0208
			(font-spec :family "Hiragino Kaku Gothic ProN"))
      (add-to-list 'face-font-rescale-alist
		   '(".*Hiragino Kaku Gothic ProN.*" . 1.2))
      )

    ;;Windows
    (when (eq system-type 'windows-nt)
      (set-face-attribute 'default nil :family "Monaco" :height 120)
      (set-fontset-font (frame-parameter nil 'font)
			'japanese-jisx0208
			(font-spec :family "Meiryo"))
      (add-to-list 'face-font-rescale-alist
		   '("Meiryo" . 1.2))
      )

    ;;GNU/Linux
    (when (and (eq system-type 'gnu/linux) window-system)
      (set-face-attribute 'default nil :family "Monaco" :height 120)
      (set-fontset-font (frame-parameter nil 'font)
			'japanese-jisx0208
			(font-spec :family "Noto Sans Mono CJK JP"))
      (add-to-list 'face-font-rescale-alist
		   '("Noto Sans Mono CJK JP" . 1.0))  
      )
    )

(reload-font)

(provide 'conf-font)
```

# フックに登録
新しいフレームを作成したあとのフックは`after-make-frame-functions`だが、このフックは引数として新しいフレームが渡される（[28.1 Creating Frames](https://www.gnu.org/software/emacs/manual/html_node/elisp/Creating-Frames.html)）。今回はフレームを渡されたところで使わないので、引数の数合わせのために新しい関数でラップすることにした。

```el:conf-hook.el
(defun reload-frame-font (frame)
  (reload-font)
  )

(add-hook 'after-make-frame-functions 'reload-frame-font)

(provide 'conf-hook)
```

# まとめ
* 新しいフレームを作成した時のフックは `after-make-frame-functions`
    * 引数には作成したフレームがひとつ渡される
SSHキーを作成し、AWSのEC2にGitHubからリポジトリをcloneする [ 自分用メモ ]

参考サイト　※SSHキーの作成は自分は違うコマンドで作った(オプション)。
GitHubでリポジトリを作ってSSHでgit cloneするまで
https://blog.cloudpack.jp/2013/01/24/server-news-github-ssh-git-clone/

SSHキーの作成
http://webkaru.net/linux/ssh-keygen-command/
http://hibitomo.hatenablog.com/entry/2015/01/29/211503
TensorFlowの"Recurrent Neural Networks"章に関連する日本語記事

[Recurrent Neural Networks(r0.8)](https://www.tensorflow.org/versions/r0.8/tutorials/recurrent/index.html#recurrent-neural-networks)を読む上で、RNNやLSTMへの理解を深めるために参考にした日本語資料へのリンクです。

- LSTMネットワークの概要: http://qiita.com/KojiOhki/items/89cd7b69a8a6239d67ca  
  チュートリアル冒頭で紹介されているLSTMの紹介ブログの翻訳。とても分かりやすいです。
- わかるLSTM ～ 最近の動向と共に: http://qiita.com/t_Signull/items/21b82be280b46f467d1b  
  LSTMの派生がよく分かります。
- Recurrent Neural Networks: http://www.slideshare.net/beam2d/pfi-seminar-20141030rnn  
  LSTMも含めた関連の手法も紹介されています。
WebサイトでPOSTした際のGoogleスプレッドシートデータの取得時間

GoogleスプレッドシートのデータををWebサイトでPOSTで取得した時の速度を測ってみたのでメモ。
計測がとても雑な(計測と言って良いのかも厳しい)ので参考程度に。



## 検証端末: iPhone6S

- 計測方法: スマホのタイマーで手動
- 通信速度: 下り平均70Mbps
- ブラウザ: Safari

| 行数 | 列数 | 取得にかかる時間(sec) |
|:--:|:--:|:--|
|23|5|1.7, 1.3|
|111|5|2.6, 1.8, 2.4|
|1007|5|2.7, 3.2, 3.1|
|2014|5|2.4, 3.6, 3.6|
|10070|5|3.7, 5.8, 7.0, 5.7|



## 検証端末: GALAXY (Android4.2.2)

- 計測方法: スマホのタイマーで手動
- 通信速度: 下り平均100Mbps
- ブラウザ: Androidブラウザ

| 行数 | 列数 | 取得にかかる時間(sec) |
|:--:|:--:|:--|
|23|5|1.7, 1.3|
|111|5|3.1, 1.92|
|1101|5|2.4, 2.11, 2.19|
|2202|5|3.61, 3.03, 3.66|
|9016|5|10, 7, 7.89|



## 所感

- ローディング画面を挟むのであれば10000行までならギリギリ待てそうな値
- ローディング無しなら1000行以内でも微妙かも
手軽に使えるReactNative用IDE　Deco

xcodeベースのReactNative用IDEのDECOのご紹介です。
今の所Mac専用っぽいです。

# 公式

https://www.decosoftware.com/download

# どんな感じか

上記の公式サイトからpkgファイルをダウンロードしてインストールしたDECOアプリを起動します。

起動するとこんな感じでプロジェクトを選ぶviewが表示されます。

## 初期表示画面

![スクリーンショット 2016-05-26 10.25.55.png](https://qiita-image-store.s3.amazonaws.com/0/105934/4c6eac47-f9e8-bc8b-8703-0927f71bc805.png)

とりあえず何もプロジェクトないので、NewProjectをポチ

## プロジェクトビュー

![スクリーンショット 2016-05-26 10.26.05.png](https://qiita-image-store.s3.amazonaws.com/0/105934/33bbf9d6-bdfc-efe9-51db-629026443a4d.png)

xcodeにちょっと手が入ってるぐらいの感じでしょうか。

## 実行する

シミュレーターボタンからシミュレーターを起動するだけで良いみたいです。

![スクリーンショット 2016-05-26 10.31.21.png](https://qiita-image-store.s3.amazonaws.com/0/105934/aa87a095-ebe7-766c-9c7d-e75a11eaed5e.png)


---

裏でreactnative起動のためにnpm startしながら云々みたいなことせずにxcodeだけで完結できるので結構便利かもです！
MemoryCacheクラスはバグがありカルチャが英語以外だと内部で無限ループに入りハングアップするのでその回避方法をメモ

MemoryCacheクラスはバグがあり、カルチャが英語以外だと内部で無限ループに入りハングアップする。
参考URL)https://github.com/SignalR/SignalR/issues/3414

MapSignalRメソッド内部のPerformanceCounterクラスの中あたりでもMemoryCacheが使われているのでSignalRもうまく動かなくなるときがあるかも。
最新の.NETでは直っているのかな？回避方法をメモ。

```csharp
public static MemoryCache CreateMemoryCache()
{
        CultureInfo ci = Thread.CurrentThread.CurrentCulture;
        var lcid = CultureInfo.CurrentCulture.Parent.LCID;
        if (lcid != 9)
        {
            Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(1033);
        }
        var myCache = new MemoryCache(MyCachePrefix, MyCacheConfig);
        if (lcid != 9)
        {
            Thread.CurrentThread.CurrentCulture = ci;
        }
        return myCache;
}
```
[WordPress]カテゴリの「スラッグ」から識別して該当カテゴリ一覧を表示する方法


WordPress、「あるカテゴリの記事」だけを表示したい場合に、カテゴリの「スラッグ」から識別して一覧を表示する方法を紹介します。

例えば、WordPressのトップページでお知らせ記事一覧を表示したり、カテゴリ毎に一覧を表示する場合に使えます。

cat_IDでもいいのですが、cat_IDは指定することができないため、指定できる「スラッグ」の方が何かと便利です。


ではソースです。

## ソース

```php
<?php
// スラッグからカテゴリ情報を取得
$hoge = get_category_by_slug('hoge');
// 該当するカテゴリIDのもの５件表示
query_posts('cat='.$hoge_cat->cat_ID.'&posts_per_page=5');
?>
```
▲まずは、スラッグからカテゴリ情報を取得する部分から。

```html
<ul>
<?php
if (have_posts()) :
    while (have_posts()) : 
        the_post();
?>
    <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
    <?php endwhile; ?>
<?php endif; ?>
</ul>
```
▲ほんでHTML部分。

### 結果
```html
<ul>
<li><a href="カテゴリ「hoge」のURL１">カテゴリ「hoge」のタイトル１</a></li>
<li><a href="カテゴリ「hoge」のURL２">カテゴリ「hoge」のタイトル２</a></li>
<li><a href="カテゴリ「hoge」のURL３">カテゴリ「hoge」のタイトル３</a></li>
<li><a href="カテゴリ「hoge」のURL４">カテゴリ「hoge」のタイトル４</a></li>
<li><a href="カテゴリ「hoge」のURL５">カテゴリ「hoge」のタイトル５</a></li>
</ul>
```


## WordPress関数
get_category_by_slug()
https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_category_by_slug

query posts()
https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/query_posts

the permalink()
https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/the_permalink

the_title()
https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/the_title


## まとめ
WordPressの制作が多い割には、関数名を記憶していないので、一応メモとして残しておくことにしました。
Node.js導入->MySQLへ接続

Arduinoで温度センサーからとってきたデータをMySQLに登録したいので前準備としてNode.jsを導入します。
Node.jsはサーバーサイドで動作するjavascriptとの事ですがRaspberry piを使ったIoTデバイス制御の記事でよく使われているのでこの機会に習熟しておきたい所です。

#導入手順
私の環境はMacOSX 10.8ですが
Linux環境も基本は同じです。

git が未インストールであればインストール

```
$ brew install git
```
Linux環境であればyum等使用してインストール
```
$ yum -y install git
```

nvmをインストール

```
$ git clone https://github.com/creationix/nvm.git ~/.nvm
$ source ~/.nvm/nvm.sh
```

バージョン確認

```
$ nvm --version
0.31.1
```

インストール可能なNode.jsバージョンの確認

```
$ nvm ls-remote
        v0.1.14
        v0.1.15
        v0.1.16
         ...
        v6.0.0
        v6.1.0
        v6.2.0
```

表示されたインストール可能なバージョンを選択し
インストール

```
$ nvm install v6.2.0
Downloading https://nodejs.org/dist/v6.2.0/node-v6.2.0-darwin-x64.tar.xz...
######################################################################## 100.0%
Now using node v6.2.0 (npm v3.8.9)
```

バージョン確認
表示されればちゃんと入ってます

```
$ node -v
v6.2.0
```
version 6.2.0をデフォルトで使用するよう設定

```
$  nvm alias default v6.2.0
default -> v6.2.0
```
.bash_profileにコードを追加

```shell-session
if [[-s ~./nvm/nvm.sh]];
then source ~/.nvm/nvm.sh
fi
```


#MySQL接続

node-mysqlをインストールします。

```
$ npm install mysql
```

mysql.jsで下記のコードを保存します。
今回はtestという名前のDBに接続し
test_tableというテーブルから全ての行をSELECTして表示します。

```js

'use strict';

let mysql = require('mysql');
let connection = mysql.createConnection({
  host : 'Mysqlホスト名(ip adderss)',
  user : 'ユーザー名',
  password : 'ユーザーパスワード',
  port : 3306,
  database: 'test'
});

connection.connect();

connection.query('SELECT * from test_table LIMIT 10;', (err, rows, fields) => {
  if (err) throw err;

  console.log('The solution is: ', rows);
});

connection.end();
```

対象のSQLサーバーで上記のユーザーにアクセス権限付与しておきます。

```
mysql> GRANT ALL ON *.* TO 'Mysqlユーザー名'@'アクセス元マシンのホスト名(IP address)' IDENTIFIED BY '********';
Query OK, 0 rows affected (0.00 sec)
```

```
$ node mysql.js
The solution is:  [ RowDataPacket { id: 1, memo: '1st' },
  RowDataPacket { id: 2, memo: '2nd+' } ]
```

ちゃんとDBのレコードを表示出来ました。
DBにINSERTすれば気温や光量、土壌データの自動保存が出来そうですね。

参考記事
[Node.jsからMySQL接続のメモ(とnode-mysql2)](http://qiita.com/n0bisuke/items/4e59d02f90bb66451011 "タイトル") 


[いまアツいJavaScript！ゼロから始めるNode.js入門〜5分で環境構築編〜](http://liginc.co.jp/web/programming/node-js/85318 "タイトル")
C > strtok() > runtime error > string literalを使えない

http://qiita.com/7of9/items/e28895f22afda103092e#comment-98a5487d3db42a0ecd16
にいたいだたコメントを元に自分なりの関数を作ろうとしてはまった。

整理すると、strtok()に渡す文字列としてはstring literalは使えないということ。

参考 http://stackoverflow.com/questions/32844304/splitting-char-array-using-strtok-giving-runtime-error
> You can't call strtok() on a string literal, because string literals are constant. 

以下のコードでruntime errorが出る。

http://ideone.com/jcTotE

```c
#include <stdio.h>
#include <string.h>

static const char *s_rcvd = "pval,3.141,2.718,6.022"; // dummy data

int main(void) {
	char *tp;
	
	tp = strtok(s_rcvd, ",");

	return 0;
}
```

上記のs_rcvdをchar szbuf[120];のように宣言したszbufにstrcpy(szbuf,s_rcvd);でコピーしてからstrtok(szbuf, ",");ではruntime errorはでなくなった。

string literalを使うのは関数のテスト時。通常の処理ではstring literalでなくchar []宣言した文字列ではある。
数学的基礎から学ぶDeep Learning（受講中）

MPS横浜で受講中

プログラミングも数学の基礎もド初学者なので苦戦中。(Markdown記法とTeX記法調べて後で書き直す予定)

##受講の動機：
最終的には適切なDeepLearningのライブラリ(tensorflow)などをカスタマイズして、仕事(広告の運用ツール)や遊び（センシングからの家電操作？？）とかに活かしてみたいから。

##教科書（学習元）

[MPSの講義スライド](http://www.slideshare.net/mpsamurai/presentations)
[講義の動画](https://www.youtube.com/channel/UCRO1D4yeQ-Yw8BMsMFxq84Q)

@hi_saito  さんの[すごいまとめノート](https://t.co/eU2KUltFc6)
(誤植（？）もしくは私の理解不足だったらすいません）

+ 10Pの数式のv10はv01?
+ 18P mumpy→numpy
+ 21P 上の方のx00 x01 x02はx0 x1 x2かも。
+ 23P 手計算のところのｘの2行目は-0.5かも。
+ 26Pのケース3の不等号記号の向きが逆かも。

2016/5/25現在の”わからないことリスト

1.1.1 第2回　[スライド](http://www.slideshare.net/mpsamurai/deep-learning-with-python-vol-2)p36 すごいノートp14

重みのWが、行列Wという書き方とベクトルW（太文字）の転地（？）Tという2つの書き方していて、どちらも結果の数字としては同じだと思うのだけど何かこだわりはあるのかしら？
→[第2回講義video](https://www.youtube.com/watch?v=iIp8WE0Uqfo)1h23min～1h42min位がその解説
z0を導くために必要な重みv00,v01はy0,y1が2つだから、ベクトルだよね？は理解があやしい。2行1列の行列だったらそれを特別にベクトルだよねで今は理解。numpy.dot(w,x)で処理できる形にするための工夫かしら。

1.1.1 モジュールのmpl_toolkits.mplot3d の中の Axes3D
ここの描画の仕方

```  W,B = np.meshgrid(w,b)
    Z = se(0, sigmoid(W,1,B))
    fig = plt.figure()

    ax = Axes3D(fig)
    ax.plot_wireframe(W,B,Z)```

2.numpy meshgridで何を実現しようとしているのか。

3.```if __name__ == '__main__':```

わかってなくて恥ずかしい。。。呼び出した関数？クラス？がmainだったら実行する？？どういう意味だろ。

4.numpy.vectorize()　なぜvectorizeをつかって配列をつくるのか？

5.self.w[0][0] これ行列wの要素の何をとってるんだろう。

→たぶん理解。
```w = [[3.0,],]
b = [[1.0,],]
alpha = 0.1
w=np.concatenate((w,b),axis=1)
w[0][0] += alpha```
numpyの配列[行][列]だからw[0][0]は配列wの1行1列目
wがどんな配列かというとbを列方向に組み入れてるから[3.0 1.0]という1行2列の行列。
で、この3.0というのが何かというとbitflip問題は入力は1か0の1次元で出力も1か0の1次元なので、
入力に対する重みwは１つ。その重みが3.0
今回はこのwを結果によってalpha分増やしたり減らしたいから、w[0][0]で1行1列目にある3.0をとりだして
alpha分足したり引いたりしている。


7.シグモイド関数について
1を1+”正の数（もしくは0）”でわっているから、最大で1、最少は限りなく0に近い数字になるだろうくらいは理解。
この”正の数（もしくは0）”というのがeの-αu乗　(a>0)ってどんな数字になるのだろうか。1/eのαu乗
だと思うんだけどどんな数なのかしら、、、(uはWx+bだからマイナスの可能性もあるのか。だと1/eのau乗はeのau乗になってaが大きいほど急激にシグモイド関数の結果は0に近づくのかな？)

8.f(u)のpythonでの使い方

9.微分を手で計算する方法

10.
凍った唐揚げ弁当なるオブジェクト


[関数型プログラミングはまず考え方から理解しよう](http://qiita.com/stkdev/items/5c021d4e5d54d56b927c)
[ともぐい、ともぐいをする。 (つまり、からあげのつまみ方とは。)](http://qiita.com/Real_analysis/items/22f75cae79eb08b00850#_reference-a93817e37e0be48610e1)
[唐揚げつまんでみた](http://qiita.com/ttatsf/items/66680350eeb64956c207)
[唐揚げもうひとつだけ](http://qiita.com/ttatsf/items/912e454457b8b53b050a)

をみていて、なんでオブジェクト指向捨てちゃうの？と_何かが間違っている_思考に捕らわれました。

ということで、**凍った唐揚げ弁当なるオブジェクト**を考えることにしました。ECMAScript5以前のJavaScriptだと~~クラスを書くのが面倒~~現代風[^1]っぽくないので、ECMAScript2015で書きます。

[^1]: もだーんってやつ。

```karaage.es6
"use strict";
class Bento {
  constructor(karaageNumber) {
    this._karaageNumber = karaageNumber
  }
  get karaageNumber() { return this._karaageNumber; }
  karaagePick(number = 1) {
    return Object.freeze(new Bento(this.karaageNumber - 1));
  }
  toString() {
    return `唐揚げ: ${this.karaageNumber}`
  }
}

class BentoSet {
  constructor(list) {
    this._list = Object.freeze(list.slice(0));
  }
  get list() { return this._list; }
  indexOfMaxKaraageBento() {
    return this.list.reduce((accs, bento, idx) =>
      accs[1] < bento.karaageNumber ? [idx, bento.karaageNumber] : accs
    , [0, 0])[0];
  }
  karaagePick(number = 1) {
    if (number <= 0) {
      return this;
    } else {
      const max_index = this.indexOfMaxKaraageBento();
      return Object.freeze(new BentoSet(this.list.map(
        (bento, idx) => idx === max_index ? bento.karaagePick() : bento
      ))).karaagePick(number - 1);
    }
  }
  toString() {
    return this.list.join(", ");
  }
}

const bentoSet = Object.freeze(new BentoSet(
  [
    Object.freeze(new Bento(10)),
    Object.freeze(new Bento(8)),
    Object.freeze(new Bento(6))
  ]
));
console.log(bentoSet.toString());
console.log(bentoSet.karaagePick(1).toString());
console.log(bentoSet.karaagePick(2).toString());
console.log(bentoSet.karaagePick(3).toString());
console.log(bentoSet.karaagePick(4).toString());
console.log(bentoSet.karaagePick(5).toString());
console.log(bentoSet.karaagePick(6).toString());
console.log(bentoSet.karaagePick(7).toString());
```

```出力
λ node karaage.es6
唐揚げ: 10, 唐揚げ: 8, 唐揚げ: 6
唐揚げ: 9, 唐揚げ: 8, 唐揚げ: 6
唐揚げ: 8, 唐揚げ: 8, 唐揚げ: 6
唐揚げ: 7, 唐揚げ: 8, 唐揚げ: 6
唐揚げ: 7, 唐揚げ: 7, 唐揚げ: 6
唐揚げ: 6, 唐揚げ: 7, 唐揚げ: 6
唐揚げ: 6, 唐揚げ: 6, 唐揚げ: 6
唐揚げ: 5, 唐揚げ: 6, 唐揚げ: 6
```

お弁当とお弁当セットの二つのクラスを用意しました。唐揚げクラスも用意しようかと思いましたが、taste(味)ぐらいしかプロパティがなさそうなので断念しました。

さて、この弁当(とそのセット)ですが、`Object.freeze()`で凍らせています。凍った弁当から一つの弁当だけ取り出して、そこから唐揚げを摘まもうとしても**不可能**です。だって、凍り付いているのですから、箸で唐揚げ摘まもうとしても、弁当から離れません。

では、どうするかというと、ちょっとだけ違うクローンを作ることにしました。つまり、唐揚げ取り出しちゃった後の弁当を新たな弁当(とそのセット)として作ることにしたのです。それが、`karaagePick()`メソッドがやっていることです。

各クラスのメソッドは、副作用も無く、参照透明です[^2]。レシーバも引数の一つとみなせば、純粋関数と解釈することができます。つまり、オブジェクト指向を捨てる必要なんて全くないんです。immutableのオブジェクトにすれば、関数型プログラミングと同じような発想とメリットで作ることができます。

[^2]: たぶん。

あ、再帰部分って唐揚げが多いとスタックオーバーフローするような。食べ過ぎは良くないですし、あとで考えよう。
Zybo > Chronicles blog 24 > registerからの読込み

MicroZed Chronicles リスト http://adiuvoengineering.com/?page_id=285
@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/The-Zynq-PS-PL-Part-Four-Adam-Taylor-s-MicroZed-Chronicles-Part/ba-p/428548

> The first test is to add together the two contents stored within register 2 and 3 using command 1 in register 0:

> reg0 = 1
reg1 = 67
reg2 = 35
reg3 = 102

ソースにおいて可算処理をしている部分がまだよく分かっていない。

とりあえず、上記のレジスタを表示用に読込みしていそうなのは

```Adams_Perihperal_v1_0_S00_AXI.vhd
	process (slv_reg0, slv_reg1, slv_reg2, slv_reg3, axi_araddr, S_AXI_ARESETN, slv_reg_rden)
	variable loc_addr :std_logic_vector(OPT_MEM_ADDR_BITS downto 0);
	begin
	  if S_AXI_ARESETN = '0' then
	    reg_data_out  <= (others => '1');
	  else
	    -- Address decoding for reading registers
	    loc_addr := axi_araddr(ADDR_LSB + OPT_MEM_ADDR_BITS downto ADDR_LSB);
	    case loc_addr is
	      when b"00" =>
	        reg_data_out <= slv_reg0;
	      when b"01" =>
	        reg_data_out <= slv_reg1;
	      when b"10" =>
	        reg_data_out <= slv_reg2;
	      when b"11" =>
	        reg_data_out <= slv_reg3;
	      when others =>
	        reg_data_out  <= (others => '0');
	    end case;
	  end if;
	end process; 

	-- Output register or memory read data
	process( S_AXI_ACLK ) is
	begin
	  if (rising_edge (S_AXI_ACLK)) then
	    if ( S_AXI_ARESETN = '0' ) then
	      axi_rdata  <= (others => '0');
	    else
	      if (slv_reg_rden = '1') then
	        -- When there is a valid read address (S_AXI_ARVALID) with 
	        -- acceptance of read address by the slave (axi_arready), 
	        -- output the read dada 
	        -- Read address mux
	          axi_rdata <= reg_data_out;     -- register read data
	      end if;   
	    end if;
	  end if;
	end process;
```

ソースの詳細は今はわからなくていいが、流れは把握したい。

<hr>
(追記 2016/05/27)
VHDLの入門書を読み終えて、文法をある程度分かるようになってソースを読んだが、上記の処理が見つからない。

加算、積算、減算処理はvhdファイルでなくブロックデザインなどで
Zybo > Chronicles blog 24 > 作成したIPのバージョン番号 > tools->Reports->Report IP status

MicroZed Chronicles リスト http://adiuvoengineering.com/?page_id=285
@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/The-Zynq-PS-PL-Part-Four-Adam-Taylor-s-MicroZed-Chronicles-Part/ba-p/428548

作成したIPのバージョン番号について。

> However, before I packaged the IP on the packager page, I incremented the version number to reflect the code changes. Clicking on re-package will run the packager and close the project, returning you to the original Vivado project.

> we can run the IP status report (under tools -> Reports -> Report IP status) to show the updated version being used within the design.
Zybo > Chronicles blog 24 > PROCESS(s00_axi_aclk)

MicroZed Chronicles リスト http://adiuvoengineering.com/?page_id=285
@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/The-Zynq-PS-PL-Part-Four-Adam-Taylor-s-MicroZed-Chronicles-Part/ba-p/428548

> For this example, I am going to introduce use the first register as a control register. Specific bits in this register define whether the contents of registers 2 and 3 are to be added, subtracted, or multiplied together. The result of the operation will be stored in the fourth register. We make the fourth register read-only with respect to the microprocessor to ensure that the microprocessor cannot corrupt the results. In addition, the peripheral will be able to generate an interrupt if enabled by the control register.

上記の書いていることを実際にどこで実行しているかVHDLが理解していないのでソースを読んでも今は分からない。

また、blogに書いているs00_axi_aclkのPROCESSというのもblogの記載(画像)と、そこに掲載しているソースの記載（下記）も乖離している。

```vhdl
PROCESS(s00_axi_aclk)
BEGIN
    IF rising_edge(s00_axi_aclk) THEN
      squared <= signed( '0'& reg1(15 DOWNTO 0)) * signed('0'& reg1(15 DOWNTO 0)); 
      cx2 <= (squared * c);
      bx <= (signed('0'& reg1(15 DOWNTO 0))* b);
      res_int <= a + cx2(48 DOWNTO 32) + ("000"& bx(32 DOWNTO 19));
      result(15 downto 0) <= std_logic_vector(res_int(res_int'high -1 DOWNTO 0));
    END IF;
END PROCESS;
```

blogの画像ではresult(31 downto 16)にも値をセットしているようだが、上記でセットしているのはresult(15 downto 0)のみ。
あとでソースだけ変更したのかもしれない。
技術英語 > Well, if you [do the math], ...  / In a trial caluclation, / after some of algebra

@ LOE > May 16, 2003

http://loe.org/shows/shows.html?programID=03-P13-00020
> Well, <font color=red>if you do the math</font>, that adds up to making the Conservancy hold $2.1 million in total. 


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

<font color=red>In a trial caluclation</font>,

http://ejje.weblio.jp/sentence/content/trial+calculation

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

and, <font color=red>after some of algebra</font>, obtain the following expressions.
[PDF](https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwj-7YLMrezMAhVDHZQKHUgFBBsQFggbMAA&url=http%3A%2F%2Farxiv.org%2Fpdf%2F1006.4838&usg=AFQjCNGx3u4ivtQBbQ1A5i9J57s-hMDdSA&sig2=BPzwGXFL9pdx2Z1-FjugCQ&bvm=bv.122448493,d.dGo)

数式の変形の詳細を省く時に使われる。

そして、積分や微分などのそのような変形を自分で導出できた時に「勝った」と思ったりする。導出できない時は、もやもやする。
default_scopeでorderを使うとき、効かないケースがある

`default_scope`なので、いつでも効くと勝手に思いましたが、効かないケースもあります。

## 環境
- Ruby 2.3.0
- Rails 4.2.6

## 前提

```
class User < ActiveRecord::Base
  has_many :posts
end

class Post < ActiveRecord::Base
  belongs_to :user

  default_scope { where('display_no > 0').order(:display_no) }
end
```

## 効かないケースを再現する

```
u1 = User.create name: 'u1'
u1.posts.create title: 't1', display_no: 3
u1.posts.create title: 't2', display_no: 2
u1.posts.create title: 't3', display_no: 1
```

`includes + references`で`LEFT JOIN`になる場合は、`default_scope`で定義した`where`条件は残されていますが、**order条件がなくなった！！**

```
irb(main):003:0> u1 = User.includes(:posts).references(:posts).first
  SQL (0.1ms)  SELECT  DISTINCT "users"."id" FROM "users" LEFT OUTER JOIN "posts" ON "posts"."user_id" = "users"."id" AND (display_no > 0)  ORDER BY "users"."id" ASC LIMIT 1
  SQL (0.1ms)  SELECT "users"."id" AS t0_r0, "users"."name" AS t0_r1, "users"."created_at" AS t0_r2, "users"."updated_at" AS t0_r3, "posts"."id" AS t1_r0, "posts"."title" AS t1_r1, "posts"."user_id" AS t1_r2, "posts"."display_no" AS t1_r3, "posts"."created_at" AS t1_r4, "posts"."updated_at" AS t1_r5 FROM "users" LEFT OUTER JOIN "posts" ON "posts"."user_id" = "users"."id" AND (display_no > 0) WHERE "users"."id" IN (1)  ORDER BY "users"."id" ASC
=> #<User id: 1, name: "u1", created_at: "2016-05-24 00:56:41", updated_at: "2016-05-24 00:56:41">
irb(main):004:0> u1.posts
=> #<ActiveRecord::Associations::CollectionProxy [#<Post id: 1, title: "t1", user_id: 1, display_no: 3, created_at: "2016-05-24 00:57:50", updated_at: "2016-05-24 00:57:50">, #<Post id: 2, title: "t2", user_id: 1, display_no: 2, created_at: "2016-05-24 00:57:54", updated_at: "2016-05-24 00:57:54">, #<Post id: 3, title: "t3", user_id: 1, display_no: 1, created_at: "2016-05-24 00:57:58", updated_at: "2016-05-24 00:57:58">]>
irb(main):005:0>
```

## おわりに
- 後で`default_scope`のソースを読んでみる
lsで色付け（fedora）

もう既に有りそうだが、備忘録として記述
fedoraはデフォルトでlsに色が付くが、lsをaliasで変更すると色が付かなくなる

以下の様にcolorオプションを付けると色が付く
ls --color=auto

どうもどっかの誰かが、デフォルトのオプションを潰しているらしい
なので、.bashrcのaliasに--color=autoを付け加える必要がある

こんな感じ
ex)
alias ls='ls --color=auto'

なお、元ネタはこちら
http://vertex.air-nifty.com/blog/2009/04/ls-bfc1.html
CSSやjsの覚え書き

# CSS

- BootstrapでレスポンシブなWebサイト制作 第2回　グリッドシステムとブレイクポイントを理解する http://gihyo.jp/design/serial/01/bootstrap3/0002
- CSS3 Flexbox の各プロパティの使い方をヴィジュアルで詳しく解説 http://coliss.com/articles/build-websites/operation/css/css3-flexbox-properties-by-scotch.html
- flexboxの旧仕様、改定仕様、現行仕様の一覧 http://developers.linecorp.com/blog/?p=2479
- CSS ARROW PLEASE! http://www.cssarrowplease.com/
- 意外と知らない!?CSSセレクタ20個のおさらい http://weboook.blog22.fc2.com/blog-entry-268.html


# 高速化のtips

## css/js

- 外部CSSはHTML中の上の方でよんでかまわない.レンダリング上、後から読むと表示崩れが起きる可能性があるので。
- 外部jsは、必要がない限り、極力HTMLの下のほうでよみこむ
HTMLの評価は、読み込んだソースの上から順に行われるため、htmlの解釈等より先にjsを読み込みに行くと、その分体感時間が遅くなる
- css,jsはできるだけ圧縮する。

### ツール例

- mac
SublineText + YUI Compressor http://thesaibase.com/html/st3-yui
- web
css compressor http://www.cssdrive.com/index.php/main/csscompressor/

## 画像

- jpg/png等の埋め込み画像は極力必要なサイズに収める＋ひどく劣化しない程度に圧縮してから使用する
- 可能なら、base64化してHTML中に埋め込む（リクエスト数の低減）

### ツール例

- tiny png https://tinypng.com/
- tiny jpeg https://tinyjpg.com/ 
- 画像をdataURLに変換する http://hi0a.com/demo/img-base64-datauri/
PlayFramework2.3 for Java の覚え書き

個人的な覚え書き、というかリンク集てきなメモをぺたり


# Play/Java/scala

- PlayFramework 2.3 ことはじめ　http://mpon.hatenablog.com/entry/2014/07/22/220207
- Play(Java)でGuiceをつかう　http://d.hatena.ne.jp/kamekoopa/20131202/1385997096
- Google Guice 使い方メモ　http://qiita.com/opengl-8080/items/6fb69cd2493e149cac3a
- Playフレームワーク2.1でgoogle-guiceを使う http://qiita.com/yu_wasama/items/857e2cfdf8e3c76df65a
- Route static file to play 2.0 http://stackoverflow.com/questions/9792875/route-to-static-file-in-play-2-0
- はじめてのPlayFrameworkでつまったことメモ　http://qiita.com/digdagdag/items/b1be18f1c0db3b8fa3af
- 【Scala】PlayFrameworkのcheckbox.scala.htmlが読み解けなくてワロタ http://aipacommander.hatenablog.jp/entry/2015/08/09/183306
- JavaエンジニアがやってしまいがちなScalaプログラミング http://qiita.com/mtoyoshi/items/acd4278fad203e707d39
- Lv.12 テンプレートエンジンの文法早見表！ http://soylatte.jp/2012/03/template-engine/
- Scalaの文字列 | Scalaの標準ライブラリを使ってみる | mwSoft http://www.mwsoft.jp/programming/scala/scala_string.html
- PlayFrameworkのScala Template内で変数を定義する http://qiita.com/kunst1080/items/cfc3b523cf7974efb156
- Scalaでリスト処理 http://bach.istc.kobe-u.ac.jp/lect/ProLang/org/scala-list.html
- hepler source https://github.com/playframework/playframework/tree/master/framework/src/play/src/main/scala/views/helper
- ステートレスなPlay2でログイン状態を管理する http://cs.hatenablog.jp/entry/2013/12/20/125254
- Bean Validationで独自のアノーテションを作成し、検証を行う　http://tech-blog.tsukaby.com/archives/605
- Java と Scala 間のコレクションの変換 http://docs.scala-lang.org/ja/overviews/collections/conversions-between-java-and-scala-collections.html
- 一目でDBFlute（DBFlute公式のチュートリアル） http://dbflute.seasar.org/ja/tutorial/hitomeflute.html


# その他
- Eclipseを黒くする　http://qiita.com/mdstoy/items/e3a3489758b5341b8e62
- 月夜に輝く滴の如き美しさ！黒背景とカラフルなEclipseプラグイン Moonrise UI Themeに一目惚れ http://futurismo.biz/archives/2152
decode2016 ~day 2~ 印象に残ったことを箇条書きでまとめてみた

※完全に自分メモです。

# 楽天でのDevOps実践事例とAzureベストプラクティス

* アジャイル手法を取り入れることで、変化に対応できるようにする
* 流れを止めている１つとして、プロジェクトの解散の課題が存在する
    * チームに蓄積されたノウハウや暗黙知がなくなってしまう
    * →常にチームを維持するような改善
* 流れを止めている１つとして、チーム内のスキルが不足している課題が存在する
    * 成果物が出ない
    * →事例共有会や技術勉強会、チームメンバーのスキル分析の取り組み
* スモールチームとは、開発者だけを集めるのではなく、セールスやインフラなどサービスに必要な人の各代表を集める。

# Integrate Github Into Your organization

* Github APIのデモ。認証用のTokenを、Githubのサイト上ですぐに発行できる。
* Webhookの紹介。Brendan(スピーカー)が一番好きな技術らしい。
* プラン変更もAPIでできるの？w
* デモを見てみると、issueのコメントをトリガーにいろいろできるらしい。想像が膨らむ。

# DevのOpsの未来を米国３社が大胆予言！日本を狙う３社の密談を皆さんに公開！！

* DevとOpsが協力しあえる文化を作りたい。協力しあえる環境を手助けするのがツール。
* 日本はUSの8年遅れ。USと同じスピードで導入できるようになりたい。
* DevOpsは、アジャイルよりも上司を説得しやすい。リードタイムとか数値が出るから。
* DevOps! DevOps!

# オープンソース エディタ Visual Studio Code の極意

* 池田さんのデモで、マウスにフォーカスを当てていたけど何かの拡張機能？　見てる方も、どこに注目したらよいのか分かりやすかったので使いたい。

# そのログ、ただ集めてるだけではありませんか？〜IT運用の世界にもビッグデータの活用を！〜

* 主に、log analyticsの紹介
* ログ収集の目的とは
    * 障害発生時の原因究明
    * システムの傾向分析
    * セキュリティ監査
* log analyticsとは
    * 各システムから集めたデータを分かりやすく可視化
    * ルールベースの監視ツールだけでは見えづらい障害予兆の把握
    * 収集したデータに加えて外部提供されている知見を活用
* 利用手順
    * ワークスペースの開設
    * エージェントのセットアップ
    * ソリューションパックの登録
* 収集結果から、アラート通知や外部アプリケーションの実行も行える
* APIは、search APIを用意。インポートはなし（って言ってた気がする）
* 監視センターとの関係だが、監視ツールとログ収集ツールはスコープが異なる
* Power BIと連携できて、15分間隔でデータ転送できる（うろ覚え）
* 無償版がすごい！！７日間のログローテートで、一日500MBまでログを入れることができる。それ以外の機能は基本的に有償版と同じ。これは使うしかない！
* linuxでは、mysql,apacheログはエージェントを仕込むだけでlog analyticsに転送できるらしい

# Powering High Velocity Development for your Infrastructure

* DevOpsはビジネスにとって、コスト削減やサービスの成長が行える。開発者にとっては、より多くのことをコントロールできる。
* サーバー構築の自動化は監査、コンプライアンスも関係してくるので、彼らも巻き込んで解決する。
* コンプライアンスは、テストで保証しよう。

# All about DevOps - DevOps第一人者のガチトークバトル！

* ソニックガーデンの倉貫さんが、牛尾さんの隣に座ってるw
* トークバトルお題１：日本でDevOpsや新しいテクノロジーの導入が遅いのはなぜか？どうすれば日本は変われるのか
    * 自社開発とSIerで異なり、自社開発の場合は現場が決定権を持っている場合が多いので導入は早いだろう。問題はSIerで、リスクをとりたがらないとか、見積もりができないからとか、そういった理由だと思う。
    * どうすれば日本は変わるのか？会社の文化を変える必要がある。文化は誰が決めているかというと、トップの人間である。決定権のある人間、つまり経営者が変わらなければいけない。
* トークバトルお題２：Opsは今後どうしていくべきか？
    * コード化できるスキルが必須。コード化できないOpsはダメ。
    * 権限が譲与されないからDevOpsが進まないのでは。実際、上司よりも詳しいのは現場の人間なので、現場の人間が自ら考えてもらった方が生産性が高くなる。また、自分たちに決定権があるほうがイキイキするよね。
* トークバトルお題３：DevOpsに関して、どの様なテクノロジーを学ぶとよいか？
    * docker,packerの前に、テストを先に自動化するべき。ソフトウェアをユーザに継続的に届けるということは、品質担保が課題となってくる。いつでもリリース可能な状態にするのは、テストの自動化があってこそ。
    * クラウドはコモディティ化するだろう。そうなると、またテクノロジーに話の中心が変わっていくのではないか。
    * （話題がそれているけど）日本人は完璧主義者が多いのでは？100点を求めすぎると時間がかかってしまう。１００点て、そこまで重要なことなのか？ビジネスは、妥協点を持ってどんどん楽をするべき。
* DevOps! DevOps!

# 二日目まとめ

* 二日間おつかれさまでした。
* 私の中で、de:code2016のキーワードは、「DevOps」「OSS」
* 触ってみたくなったツール：
    * Power BI
    * Xamarin (Twitter見てる限り、Xamarin系のセッションが一番人気あった？)
    * log analytics
* 業務で改善できる点をいくつか考えてみたので、早速実施してみたい。
* 2日間あったなかで、個人的に一番面白かったセッションは「All about DevOps - DevOps第一人者のガチトークバトル！」
    * 勉強になることが沢山あった中で、最も印象的だったのが、「100点を目指すのではなく妥協点を持つ」ことだ。ふと気がつくと100点を目指していることが多いのでは・・と気づかされた。
* DevOps! DevOps!