OmniAICreator/Qiita-1.07M huggingface dataset:
自然数1〜100のカードから1枚抜いたときに3の倍数であって5の倍数でない確率をRubyとPythonで求めてみる

高校数学の復習をしているのでRubyやPythonを使って解いてみました。

# ベン図

![ベン図.png](https://qiita-image-store.s3.amazonaws.com/0/101824/64ee0416-4d71-8c51-e36a-bd5511dbafda.png)

# 解く

標本空間S={1, 2, 3, ..., 98, 99, 100}として、3の倍数であることを事象A、5の倍数であることを事象Bとすると、3の倍数または5の倍数のカードは

```math
E1 = A \cup B
```

- n(A) = 3の倍数の数 = 100/3 = 33 枚
- n(B) = 5の倍数の数 = 100/5 = 20 枚
- n(A \cap B) 3の倍数かつ5の倍数の数 = 15の倍数の数 = 100/15 = 6 枚


なので

```math
n(E1) = n(A \cup B)
= n(A) + n(B) - n(A \cap B)
= 33 + 20 - 6
= 47
```

なので3の倍数であって5の倍数でないカードは

```math
n(E) = n(E1) - n(B)
= 47 - 20
= 27
```

3の倍数であって5の倍数でないカードを引く確率は

```math
n(E) / n(S)
= 27/100
```

# Rubyで書く
和集合は | で計算可能。積集合は &。

```ruby
> s = (1..100).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
> a = []
=> []
> s.to_a.each{|i|
* a << i if i %3 == 0
> }
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
> b = []
=> []
> s.to_a.each{|i|
* b << i if i % 5 == 0
> }
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
> e1 = a | b
=> [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99, 5, 10, 20, 25, 35, 40, 50, 55, 65, 70, 80, 85, 95, 100]
> e = e1.length - b.length
=> 27
> e.to_f / 100
=> 0.27
```

# Pythonで書く
和集合はunion()関数で計算可能。積集合はintersect()関数。

```python
>>> a = set(range(3,101,3))
>>> b = set(range(5,101,5))
>>> e1 = a.union(b)
>>> e = len(e1) - len(b)
>>> float(e)/100
0.27
```

追記）和集合は|でも計算可能。

```python
>>> a = set(range(3,101,3))
>>> b = set(range(5,101,5))
>>> e1 = a | b
>>> e = len(e1) - len(b)
>>> float(e)/100
0.27
```

Sympyも使ってみた。

```python
>>> from sympy import FiniteSet
>>> ma = range(3,101,3)
>>> mb = range(5,101,5)
>>> a = FiniteSet(*ma)
>>> b = FiniteSet(*mb)
>>> e1 = a.union(b)
>>> e = len(e1) - len(b)
>>> float(e)/100
0.27
```

range()関数楽でいい。

# 参考
- [Qiitaの数式チートシート](http://qiita.com/PlanetMeron/items/63ac58898541cbe81ada)
- [Pythonの集合型](http://kaworu.jpn.org/python/Pythonの集合型)
- [Pythonからはじめる数学入門](https://www.amazon.co.jp/dp/4873117682)（書籍）
エクセルVBAのようにエクセルを操るライブラリ

#エクセルVBAのような操作感

Windowsフォームアプリからエクセルを起動しセルに入力する操作をやってみました。

Visual　Studioを使いますが、まずプロジェクトソリューションの参照にCOMの「Microsoft　Exel　11.0　Object　Library」を追加します。これだけでエクセルを動作させる準備が整います。

```c++:エクセルのインスタンス化
Excel::Application^ xls = gcnew Excel::ApplicationClass();
xls->Visible = true;//エクセルの表示/非表示指定。
```

これで新規にエクセルファイルが作成されました。次に実際データーを入力するスペースとなるワークブックを追加します。

```c++:ワークブックを作成
Workbook^ wbook = xls->Workbooks->Add(Type::Missing);
```

アクティブなワークシートを作成し、その名前を変えてみます。

```c++:ワークシート名変更
Worksheet^ wSheet = static_cast<Worksheet^>(xls->ActiveSheet);
wSheet->Name = "Active Sheet 1";
```

実際に、リストボックスの要素がエクセルに追加されるか試します。
セルに入力するコードは簡単です。

```C++:セルに文字を入力する
wSheet->Cells[int row, int col] = "文字";
```

以上のコードだけでエクセルVBA感覚でエクセルが操作がきました。

これを応用して、フォームのリスボックスからエクセルにデーターをコピーするアプリをつくってみました。エクセルをバックグランド化すればかなり高速に動作するので実用性は高いと感じます。

![image](https://qiita-image-store.s3.amazonaws.com/0/139807/a7c31059-bf98-7b89-a27f-30dbecdc7ce6.png)


![image](https://qiita-image-store.s3.amazonaws.com/0/139807/124dba53-c572-45e1-9edf-8a4702818f5b.png)
Azure でマシンを作り、スクリプトを実行するARM

# 概要

* [Azure/azure-quickstart-templates: Azure Quickstart Templates](https://github.com/Azure/azure-quickstart-templates)

ここにある、`101-vm-sshkey`をもとに、新しい設定を作って
`azure-group-deploy.sh` を用いないで、マシンが作れる方法を探る

# 結論

できた

# やったこと

## 作ったレポジトリ

* [manabuishii/azure-files: Azure files](https://github.com/manabuishii/azure-files)

## 必要があればグループを作る

```
azure group create TESTGROUP -l japaneast
```

## デプロイする

```
azure group deployment create \
-g TESTGROUP \
-n AzureRMSamples \
--template-uri https://raw.githubusercontent.com/manabuishii/azure-files/master/vm-sshkey-script/azuredeploy.json \
-e /work2/vm-sshkey-script/local.parameters.json \
-v
```

### help の状況

```
root@be90faa8be38:/work2# azure group deployment create -h
help:    Creates a deployment
help:    
help:    Usage: group deployment create [options] [resource-group] [name]
help:    
help:    Options:
help:      -h, --help                             output usage information
help:      -v, --verbose                          use verbose output
help:      -vv                                    more verbose with debug output
help:      --json                                 use json output
help:      -g --resource-group <resource-group>   the name of the resource group
help:      -n --name <name>                       the name of the deployment
help:      -f --template-file <template-file>     the path to the template file in the file system
help:      --template-uri <template-uri>          the uri to the remote template file
help:      --template-version <template-version>  the content version of the template
help:      -p --parameters <parameters>           a JSON-formatted string containing parameters
help:      -e --parameters-file <parametersFile>  a file containing parameters
help:      -m --mode <mode>                       the deployment mode: specify one of Incremental or Complete. If no mode is specified, Incremental is used as default. When Complete mode is used, all the resources in the specified resource group, which are not included in the template, will be deleted.
help:      -d --debug-setting <debugSetting>      the debug setting for deployment logs. Valid values include RequestContent, ResponseContent, All or None. None is the default value. When All is specified, both request content and response content will be logged, which will be visible in deployment operations.
help:      -q --quiet                             quiet mode (when complete mode is specified, do not ask for deployment confirmation)
help:      --nowait                               does not wait for the deployment to complete. Returns as soon as the deployment is created
help:      --subscription <subscription>          the subscription identifier
help:    
help:    Current Mode: arm (Azure Resource Management)
```
[メモ] [iOS Safari] linear-gradientでtransparentを指定したい

CSSグラデーションで透明にしたいときは `transparent` ではなく `rgba(x,x,x,0)` を用いる。
'transparent'を指定するをiOS Safariグラデーションが機能しない。


```css
/* NG */
background-image: linear-gradient(to right, #b2b2b2, transparent);

/* OK */
background-image: linear-gradient(to right, rgba(178,178,178,1),rgba(178,178,178,0));
```

透明度0のときの色はグラデーションに使用しているものを使う。
serverless frameworkでDynamoDBとLambdaのイベントを関連付ける

## 背景

serverlessを使い始めてますが、API Gatewayとの連携は簡単に書けます…が、DynamoDB Streamをトリガーにしたい場合はどのように書けばよいか…悩んだ末に、やっと解決しました。

## 問題

何が問題かといいますと…

- DynamoDB StreamのARNは最後に日付のタイムスタンプがついている
- マッピング定義は日付のタイムスタンプが付いたARNをフルで指定しなければならない

です。ネットで調べてみての解決策は、

- enentsではFn::GetAttが使えない
- 後でAWS Consoleで修正する
- sererless.ymlに後でDynamoDB StreamのARNの追加してdeployする

でした。しかし、何度もdeployしたりステージを変更した場合は、「デグレードするな…」と考えました。

## 解決策

結局は、functionにてevent定義することを止めました…
リソース定義の中で、AWS::Lambda::EventSourceMappingリソースを以下の様に書きます。
※serverlssのバージョンは1.6.0です。

```:serverless.yml
StreamEventMapping:
  Type: AWS::Lambda::EventSourceMapping
  Properties:
    BatchSize: 20
    EventSourceArn:
      Fn::GetAtt: [TableResourceName, StreamArn]
    FunctionName:
      Fn::GetAtt: [SensorDashagreeLambdaFunction, Arn]
    StartingPosition: TRIM_HORIZON
    Enabled: false
```

とこんな感じになります。ポイントとしては、

- DynamoDB StreamのARNは、Fn::GetAtt: [リソース名(テーブル名では無い), StreamArn]でARNを得る
- FunctionNameはserverlessが生成した該当のfunctionのリソース名を入れる

FunctionNameはトリッキーなことをしてますが、serverlessを一回流して、「.serverless」ディレクトリにかかれているCloudFormationのテンプレートを見て入れてます。命名規則があるみたいで、何度流しても名前が固定でしたので、良しとしています。

しかし、標準のロールには入れれるかどうか分かりません。別途ロールリソースを以下の様に作って、該当Functionにロールを割り当ててます。

```:serverless.yml
RoleResource:
  Type: AWS::IAM::Policy
  Properties:
  -
    Effect: Allow
    Action:
      - dynamodb:DescribeStream
      - dynamodb:ListStream
      - dynamodb:GetRecords
      - dynamodb:GetShardIterator
     Resource:
      - Fn::GetAtt: [TableResourceName, StreamArn]
```


serverlessが出力されるテンプレートとAWSのCloudFormationのマニュアルを見ながら何とかここまでできました…

DynamoDB Streamとlambdaの連携は、まだ始まったばかりでserverlessが追いついて無いのかな？の印象です。
[iOS] UITabBarController でタブ切り替え検知する方法

##問題
TabBarの特定ボタンが押された時に Google Analytics のイベントが投げたい。
どうすればタブの切り替えを検知できるのか？

##解決
UITabBarControllerDelegateの、
tabBarController:didSelectViewControllerメソッドを使う。
このメソッド内で ViewController のインスタンスを比較して切り替えを検知する。

```objc
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
    if (viewController == viewController1) {
        [viewController1 popToRootViewControllerAnimated:NO];
    } else if (viewController == viewController2) {
        [viewController2 popToRootViewControllerAnimated:NO];
    } else if (viewController == viewController3) {
        [viewController3 popToRootViewControllerAnimated:NO];
    }
}
```

###参考にした記事
- [tabBarController:didSelectViewController:](https://developer.apple.com/reference/uikit/uitabbarcontrollerdelegate/1621173-tabbarcontroller?language=objc)
Xamarin.Forms ネットワークに接続可能か調べる

# やりたい事
Xamarin.Formsでネットワークに接続可能か判定する（もちろんクロスプラットフォームで）
※2017/01/31 現在Androidは動作しませんでした（情報提供お願いします...)

# ライブラリを導入する
NuGetを利用して `Connectivity Plugin for Xamarin and Windows`を追加する．

![スクリーンショット 2017-01-31 19.26.19.png](https://qiita-image-store.s3.amazonaws.com/0/32950/bdf6841b-676a-c849-51ac-33a1046b8196.png)

# コード

```csharp:CheckNetworkConnectionPage.cs
using System;
using System.Collections.Generic;
using Plugin.Connectivity;
using Xamarin.Forms;

namespace XamarinSamples
{
    public partial class CheckNetworkConnectionPage : ContentPage
    {
        public CheckNetworkConnectionPage()
        {
            InitializeComponent();
            CrossConnectivity.Current.ConnectivityTypeChanged += Current_ConnectivityTypeChanged;
        }

        private async void Current_ConnectivityTypeChanged(object sender, Plugin.Connectivity.Abstractions.ConnectivityTypeChangedEventArgs e)
        {
            if (!e.IsConnected)
            {
                await DisplayAlert("Error", "Check for your connection.", "OK");
            }
            else {
                await DisplayAlert("Success", "Network is Available.", "OK");
            }
        }

        protected async override void OnAppearing()
        {
            base.OnAppearing();

            if (!CrossConnectivity.Current.IsConnected)
            {
                System.Diagnostics.Debug.WriteLine("connected");
                await DisplayAlert("Error", "Check for your connection", "OK");
            }
            else {
                await DisplayAlert("Success", "Network is Available.", "OK");
            }
        }
    }
}
```

# 動作確認
### iOS
![スクリーンショット 2017-01-31 19.30.04.png](https://qiita-image-store.s3.amazonaws.com/0/32950/ba32d7f3-17e8-24b8-cf81-ca7f134616cf.png)

### Android
![スクリーンショット 2017-01-31 19.44.17.png](https://qiita-image-store.s3.amazonaws.com/0/32950/1bb3665f-572e-0cd4-084c-8dbf38e60f22.png)

しょぼん
Semantic UIでボタンを中央寄せにしました

SemanticUIでUIを中央寄せをどうやるのかわかりませんでた。

ボタン2つを中央寄せにしたいケース。

```html:
<div class="ui grid">
  <div class="eight wide column">
    <a class="ui button" href="#">東京都</a>
  </div>
  <div class="eight wide column">
    <a class="ui button" href="#">神奈川県</a>
  </div>
</div>
```

# 中央寄せのクラスを足す

中央寄せのクラスは、`center aligned`のようです。

```html:
<div class="ui center aligned grid">
  <div class="eight wide column">
    <a class="ui button" href="#">東京都</a>
  </div>
  <div class="eight wide column">
    <a class="ui button" href="#">神奈川県</a>
  </div>
</div>
```

`center aligned`じゃなくて`centered`でもいいみたいです。まだ試していませんが。

## つまり右寄せなら
おまけですが、 `right aligned` で右寄せということになりますね。

# 確認
ちゃんと中央寄せされていました😂

[デモ](https://rawgit.com/pugiemonn/067153539d5f1e6f954a8a2449002a5a/raw/c785cd8280bb3c3dbca0041fcc21438d897cf894/SemanticUI-center-aligned.html)はこちらです。

# 参考
- http://stackoverflow.com/questions/27343992/semantic-ui-centre-aligned-login-box
- http://semantic-ui.com/collections/grid.html
OkHttp3はシングルトンにすべし

##はじめに
OkHttp2とOkHttp3とでコネクションプールの部分が大きく変わっている。
[Change Log](https://github.com/square/okhttp/blob/master/CHANGELOG.md#version-300-rc1)からの引用。

> There is no longer a global singleton connection pool. In OkHttp 2.x, all OkHttpClient instances shared a common connection pool by default. In OkHttp 3.x, each new OkHttpClient gets its own private connection pool. Applications should avoid creating many connection pools as doing so prevents connection reuse. Each connection pool holds its own set of connections alive so applications that have many pools also risk exhausting memory!

上記からわかるように、OkHttp2まではコネクションプールを共有していたのが、OkHttp3からはコネクションプールを各インスタンスごとに別々で持つようになった。
それを知らずにOkHttpを新しくインスタンス生成し続けると、OutOfMemoryErrorになりかねない。
なので、OkHttp3はシングルトンで書くとよい。

##サンプルコード
とりあえず、シングルトンで書いてみました。
もっとこうしたほうがいいとかあったらコメントください。

```java:OkHttpSingleton.java

import java.io.IOException;
import java.util.concurrent.TimeUnit;

import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class OkHttpSingleton {

    private OkHttpClient mOkHttpClient;

    private static OkHttpSingleton ourInstance = new OkHttpSingleton();

    public static OkHttpSingleton getInstance() {
        return ourInstance;
    }

    private OkHttpSingleton() {

        OkHttpClient.Builder okHttpBuilder = new OkHttpClient.Builder();
        okHttpBuilder.connectTimeout(20, TimeUnit.SECONDS);
        okHttpBuilder.readTimeout(15, TimeUnit.SECONDS);
        okHttpBuilder.writeTimeout(15, TimeUnit.SECONDS);
        okHttpBuilder.addInterceptor(getInterceptor());

        mOkHttpClient = okHttpBuilder.build();
    }

    private Interceptor getInterceptor() {

        return new Interceptor() {
            @Override
            public Response intercept(Chain chain) throws IOException {

                Request newRequest = chain.request().newBuilder()
                        .addHeader("Accept", "application/json")
                        .build();

                return chain.proceed(newRequest);
            }
        };
    }

    public OkHttpClient getOkHttpClient() {
        return mOkHttpClient;
    }
}
```

リクエストヘッダーを共通にする場合は、OkHttpClientのInterceptorを使うとよい。

OkHttpClientの設定（タイムアウト時間など）を個別に変更したい場合は、OkHttpClient.newBuilder()を使って書き換える。

```java

OkHttpClient copy = client.newBuilder()
          .readTimeout(500, TimeUnit.MILLISECONDS)
          .build();

```


##参考
* [OkHttp Recipes](https://github.com/square/okhttp/wiki/Recipes#per-call-configuration)
* [Retrofit2 &OkHttp  でAndroidのHTTP通信が快適だにゃん](http://www.slideshare.net/sakura_bird1/retrofit2-okhttpandroidhttp-20160122?ref=http://exception-think.hatenablog.com/entry/20161206/1480977415)
Ubuntu16.04.1LTSアップグレード

## はじめに

```
$ssh host

Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-68-generic x86_64)
New release '16.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
```

言う通りに、Ubuntu 16.04.1 LTSへアップグレードします。


## 手順

- パッケージを最新にしておく

```
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade
```

- 再起動する

`$ sudo reboot`

- アップグレードする

`$ sudo do-release-upgrade`


- アップグレード中に出現するダイアログメモ

各自環境に応じて選択してください
 

```
If you continue, an additional ssh daemon will be started at port 
'1022'. 
Do you want to continue? 
```

-> Continue [yN] y

```
Installing the upgrade can take several hours. Once the download has 
finished, the process cannot be canceled. 
```

-> Continue [yN]  Details [d]y


![image](https://qiita-image-store.s3.amazonaws.com/0/73202/65f7436e-962a-0f54-2b67-e0afc992556a.png)

-> YES

```
Configuration file '/etc/nginx/sites-available/default'
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation
 The default action is to keep your current version.
```

-> *** default (Y/I/N/O/D/Z) [default=N] ? N

```
90 packages are going to be removed. 
```

-> Continue [yN]  Details [d]


```
To finish the upgrade, a restart is required. 
If you select 'y' the system will be restarted. 
```

-> Continue [yN] y


- 再起動後ログイン確認

```
$ ssh host

Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 3.13.0-107-generic x86_64)
```

以上、めでたしめでたし！！


- 追記
 
rails環境が動いているサーバだったのですが、assets precompileにて以下のエラーが発生

``
libmysqlclient.so.18: cannot open shared object file: No such file or directory
``

railsのappフォルダにて、vendor/bundleを削除して、bundle installすることで解消
IBM Cloud (BlueMix) の 主要CFコマンド一覧

###IBM Cloud (BlueMix) の 主要CFコマンド一覧
Bluemix は IBM Cloud として統合されました. 2017/11/02
***
#####2017/12　地域 ( 米国東部追加 12/15 )
|地域|コンソールURL|APIエンドポイント|
|:---|:---------|:----------|
|シドニー|https://console.au-syd.bluemix.net|https://api.au-syd.bluemix.net|
|英国|https://console.eu-gb.bluemix.net|https://api.eu-gb.bluemix.net|
|米国南部　ダラス|https://console.ng.bluemix.net|https://api.ng.bluemix.net|
|米国東部 |https://console.us-east.bluemix.net|https://api.us-east.bluemix.net|
|ドイツ フランクフルト|https://console.eu-de.bluemix.net|https://api.eu-de.bluemix.net|

***

ログイン
`$ cf login -a https://api.ng.bluemix.net -u (IBM ID) -p (パスワード)`

ログイン（欧州リージョンの場合）
`$ cf login -a https://api.eu-gb.bluemix.net -u (IBM ID) -p (パスワード)`

ログアウト
`$ cf logout`

カレントディレクトリ以下 をアプリケーション **APP1** にプッシュ
`$ cf push APP1 ( -p ***.war )`

アプリケーション **APP1**  のスケーリングを変更
`$ cf scale APP1 (-i 2) (-m 1024M)*（インスタンス２個、メモリ1GBに）`

デプロイ済みアプリケーションの一覧
`$ cf apps`

アプリケーション **APP1**  の状態を確認
`$ cf app APP1`

アプリケーション **APP1** を削除
`$ cf delete APP1`

アプリケーション **APP1**  を **APP2**  にリネーム
`$ cf rename APP1 APP2`

アプリケーション **APP1**  を起動
`$ cf start APP1`

アプリケーション **APP1**  を停止
`$ cf stop APP1`

アプリケーション **APP1**  を再起動
`$ cf restart APP1`

アプリケーション **APP1**  の直近のイベントを表示
`$ cf events APP1`

アプリケーション **APP1**  の構成ファイル一覧を表示
`$ cf files APP1`

アプリケーション **APP1**  のログを表示
`$ cf logs APP1`

アプリケーション **APP1** の環境変数を表示
`$ cf env APP1`

アプリケーション **APP1** の環境変数を設定
`$ cf set-env APP1 envname envvalue`

アプリケーション **APP1**  の環境変数を初期化
`$ cf unset-env APP1 envname`

アプリケーション **APP1** のスタックを表示
`$ cf stack APP1`

現在利用可能なサービス一覧の確認
`$ cf marketplace`

サービス作成
`$ cf create-service (サービス種別名) (プラン名) (利用サービス名)`

サービス **SVC1** を削除
`$ cf delete-service SVC1`

サービス **SVC1** を **SVC2** にリネーム
`$ cf rename-service SVC1 SVC2`

生成済みサービス一覧
`$ cf services`

アプリケーション **APP1** とサービス **SVC1** をバインド（紐付け）
`$ cf bind-service APP1 SVC1`

アプリケーション **APP1** とサービス **SVC1** とのバインドを解消
`$ cf unbind-service APP1 SVC1`
Git で特定のコミットをマージする方法メモ


とある案件で複数ブランチが存在してて特定のコミットだけをマージしたい時があったので、その際に使用した `Git` のコマンドをメモしておく。

## 特定のコミットをマージするコマンド

結論から書くと `git cherry-pick` コマンドで特定のコミットをマージすることが出来る。

```Git
git cherry-pick 特定のコミット番号
```

## 特定のコミットをマージする手順

```
$ git branch
  develop
* master

$ git log --pretty=format:%h master
abcdefg
hijklmn
opqrstu
vwxyz12

$ git log --pretty=format:%h develop
3456789
0abcdef
vwxyz12
```

上記のようなコミットログがあり、 `master` ブランチの `hijklmn` のみ `develop` ブランチにマージしたい場合は下記の手順でマージする。

```
# 1. ブランチを develop ブランチに切り替える
$ git checkout develop

# 2. git cherry-pick コマンドで特定のコミットをマージする
$ git cherry-pick hijklmn
```

以上で特定のコミットのみをマージすることが出来る。
結構使い所ありそうなので忘れずに覚えておきたいな。。
出力条件

こんにちは

pythonを習い始めたばかりのものです。
以下のプログラムで長さsで0,1,2,3を含む乱数を出力するコードを作成中です。

```
import numpy as np

n_one =int(input('Insert the amount of 1: '))
n_two =int(input('Insert the amount of 2: '))
n_three = int(input('Insert the amount of 3: '))
l = n_one+n_two+n_three
n_zero = l+1
s = (2*(n_zero))-1


data = [0]*n_zero + [1]*n_one + [2]*n_two + [3]*n_three
print ("Data string length is %d"  % len(data))

while data[0] == 0 and data[s-1]!=0:
         np.random.shuffle(data)
datastring = ''.join(map(str, data))
datastring = str(int(datastring))
files = open('decode.txt', 'w')
files.write(datastring)
files.write('\n')
files.close()
print("Data string is : %s " % datastring)
```

問題は出力の方です。
出力は０でない数字から始まって、０に終わる形にしたいです。
今のところは `while`分を使って、あまりうまく行かないときもあります。
なんか提案などがある人はよろしくお願いします。
Swift 3でUINavigationControllerで遷移したときに戻るボタンのテキスト「Back」を消して矢印だけにする

# 例

<img width="969" alt="螢幕快照 2017-01-31 19.08.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/15144/d0023d8b-59e3-c621-69d1-82a1dbf5c480.png">

* XcodeのSingle Page Applicationで新規作成
* Storyboardの最初にあるViewController上で[Editor]→[Embed in]→[Navigation Controller]
* もうひとつViewControllerを追加し、showのセグエで結ぶ
    * `SecondViewController`クラスを作り登録しておく

## やりたいこと

| Before | After |
| :---: | :---: |
| <img width="244" alt="螢幕快照 2017-01-31 19.11.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/15144/67b14853-8e49-6951-e3eb-7f5a81cad470.png"> | <img width="244" alt="螢幕快照 2017-01-31 19.12.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/15144/e785282c-c717-822b-d9cc-5996a27b3301.png"> |

# Storyboardで作ってるぜな場合

* 最初のViewControllerのNavigation Barをクリック
* 右側のインスペクタ群からAttributes Inspectorを選択
* Navigation ItemのBack Buttonの値を `_` （空値とか半角スペース）にする

<img width="1937" alt="螢幕快照_2017-01-31_19_31_38.png" src="https://qiita-image-store.s3.amazonaws.com/0/15144/393f59a8-ddec-ff5d-427e-b7685d7b23b6.png">

# コードでやってるぜな場合

* __NavigationControllerが最初に表示するViewControllerのクラス__の `viewDidLoad()` 内に次の記述を追加します。

```swift:ViewController.swift
navigationController!.navigationBar.topItem!.title = " "
```

# 参考

[How do I change the title of the “back” button on a Navigation Bar - StackOverFlow](http://stackoverflow.com/questions/1449339/how-do-i-change-the-title-of-the-back-button-on-a-navigation-bar)
Struts2.5.xで表形式の入力をする（JSPとThymeleaf対応）

# Struts2と表形式入力

Webアプリケーションでシステム作るときに結構悩ましい画面要望の1つ、**表形式の入力** と呼ばれるものがあります。

これ、結構簡単にみえて **そもそも実装するのが面倒だった** のですが、実はStruts2公開当時から実装ができました。

しかしそこからセキュリティフィックスや潜在バグなどさまざまな要因から二転三転し、バージョンによっては動かなくなる実装もありましたので、こちらで紹介します。

## 表形式の入力（リクエスト）方法

Struts2は、リクエストパラメータをActionクラスのメンバ変数に格納します。メンバ変数へ格納する際には、自動的にActionクラスのメンバ変数の型(クラス)に変換しようと試みます。自動的に変換する型(クラス)には以下のものがあります。

* プリミティブ型すべて
* プリミティブ型のラッパークラス
* java.util.Collection / List / Map
* 配列
* 何らかの実装クラス(POJOは必須ではない)

…つまり大抵のものは自動的に変換してくれます。
また、クラスのフィールドを自動的に探索して値を格納しますので、例えばActionクラスで次のフィールドを用意します。

```java
private List<SampleProduct> products;

public void setProducts(List<SampleProduct> products) {
  this.products = products ;
}

public List<String> getProducts () {
  return products;
}
```

こうすることで、画面へのレスポンス時も、画面からのリクエストにも配列で扱えますし、かつその中身が独自に用意したクラスでも扱えます。

## Thymeleafを使った入力フォームの例

```html
<table class="table table-bordered">
	<thead>
		<th>id</th>
		<th>製品名</th>
	</thead>
	<tbody>
		<tr th:each="product,status : ${products}">
			<td>
				<input type="text" value="X-45" name="id" class="form-control" th:name="'products[' + ${status.getIndex()} + '].id'" th:value="${product.getId()}" />
			</td>
			<td>
				<input type="text" value="X-45" name="name" class="form-control" th:name="'products[' + ${status.getIndex()} + '].name'" th:value="${product.getName()}" />
			</td>
		</tr>
	</tbody>
</table>
```

`<tr th:each>` を使うことでListなどの繰り返し出力ができます。
JSTLなどと異なるのは、繰り返しの件数や現在の行番号を管理するオブジェクトは、カンマ区切りの右側で宣言した名前で参照できることです。カンタンですね。

上記の例で、実際に出力されるHTMLは、次のようになります。

```html
<table class="table table-bordered">
	<thead>
		<th>id</th>
		<th>製品名</th>
	</thead>
	<tbody>
		<tr>
			<td>
				<input type="text" class="form-control" name="products[0].id" value="0番目のid値" />
			</td>
			<td>
				<input type="text" class="form-control" name="products[0].name"  value="0番目のname値" />
			</td>
		</tr>
		<tr>
			<td>
				<input type="text" class="form-control" name="products[1].id" value="1番目のid値" />
			</td>
			<td>
				<input type="text" class="form-control" name="products[1].name"  value="1番目のname値" />
			</td>
		</tr>
........以降、繰り返し.......
	</tbody>
</table>
```

## JSPの入力フォーム例

```jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<body>
<s:form action="update" theme="simple">
<s:iterator value="products" var="product" status="status">
	<s:textfield name="products[%{#status.index}].id"></s:textfield>
	<s:textfield name="prodocts[%{#status.index}].name"></s:textfield>
</s:iterator>
<s:submit />
</s:form>
</body>
</html>
```
Elasticsearchの導入方法

# Elasticsearchの導入方法

## 実行環境
* OS ：Ubuntu16.04 LTS

## 手順
1. Elasticsearchのダウンロード
2. Elasticsearchのインストール
3. 設定ファイルの準備
4. Elasticsearchの起動
5. Elasticsearchの停止

### 1. Elasticsearchのダウンロード
下記のサイトよりElasticsearchをダウンロードします

ダウンロードサイト：https://www.elastic.co/jp/downloads/elasticsearch

本手順ではcURLを使ってダウンロードを行っています

ダウンロードコマンド例：```curl -k -L -O "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.1.1.deb"```

### 2. Elasticsearchのインストール
ダウンロードしたファイルをインストールします

インストールコマンド例：```sudo dpkg -i elasticsearch-5.1.1.deb```

### 3. 設定ファイルの準備
インストールしたElasticsearchを起動する際の実行ポートやIPアドレスなどの指定を行います
本環境では下記の設定ファイルを書き換えていきます
設定ファイル：```/etc/elasticsearch/elasticsearch.yml```

今回はポートの設定のみ行います

```yaml:elasticsearch.yml
#                              ～ 中略 51行目より ～

# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
#network.host: 192.168.0.1
#
# Set a custom port for HTTP:
#
http.port: 9200 #http.port: 9200 ←ここを書き換え。利用するポート番号に書き換えます
#
# For more information, consult the network module documentation.
#
# --------------------------------- Discovery ----------------------------------
```

### 4. Elasticsearchの起動
下記のコマンドでElasticsearchを起動します

起動コマンド：```sudo service elasticsearch start```

Elasticsearchが起動しているかは下記のコマンドで確認できます

確認コマンド：```sudo service elasticsearch status```

正常に起動している場合、「active」や「running」といった応答が返ります


### 5. Elasticsearchの停止
下記のコマンドでElasticsearchの停止を行います

停止コマンド：```sudo service elasticsearch stop```
光遅い問題に対応して Composer を100倍速くする

## とりあえずコピペ
### Composer 本体のインストール
```
curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer
```

### リポジトリ変更と高速化プラグインのインストール
```
composer config -g repos.packagist composer https://packagist.jp && composer global require hirak/prestissimo
```

## Composer は遅い
https://speakerdeck.com/hirak/composer-keynote

* packagist.org および github.com がネットワーク的に遠い
* file_get_contents + https ストリームラッパー
* 毎回コネクションを作り直す
* 通信回数が無駄に多い
    * packagist.org の json ダウンロード
        * HTTPS 4往復
        * HTTP 2往復×(8往復×パッケージ数)
    * github.com の zip ダウンロード
        * HTTPS リダイレクト 8往復×パッケージ数

## Composer のインストール
```bash
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
```

## リポジトリの変更
```
composer config -g repos.packagist composer https://packagist.jp
```
* packagist.org のデータを2分ごとに同期 [^packagist.jp]
* さくら VPS + CloudFlare

[^packagist.jp]: http://packagist.jp/

## 高速化 Composer プラグイン
```
composer global require hirak/prestissimo
```
* Keep-Alive の有効化
* リダイレクト削減
* 並列ダウンロード
使いづらいシステムのお手本のような

うちのタイムシートシステムがあまりに気が利かない、
使いにくい、イライラさせることに関して天才的な
システムのアンチパターンコレクションだったので
反面教師として記録。


#デフォルト値がエラー
　例えば9時出社の場合、[09][00]と入力が必要なのだが、
　デフォルト値が[_9][_0]になっている。
　触らなければ問題ないが、
　触るといちいちダイアログボックスがでて怒られる。

　普通の人は、デフォルト値の書式にあわせようと入力するため
　必ず引っかかる。


#入力フォームの融通の効かなさがハンパない。
　[_9]はダメ[9]もだめ[09]はOKだが、後から[10]に直そうとすると
　[91]になってエラーになったりする


#↑にイチイチダイアログボックスが出て操作が奪われる。
　時刻が不正なら警告でるのはいいんだけど、
　赤字でも出しておいて、Submit時にRejectしてくれればいいのに。


#「昨日と同じ」みたいなボタンが無い
　２０営業日同じ勤務時間だった場合、２０回同じ数字を入力する。アホか。


#TABを押したときのフォームの移動順がナゾすぎる
　当然２０回入力するならキーボードでカタカタ入力したい。
　けど、TABった時に素直に左上～右下へ遷移しない。


#そもそもタイムシートにアクセスできない
　障害多すぎ。


#そもそも入力が必要なタイムシートが５つある
　これはうちのプロジェクトの都合ですが。


#起動に３０秒かかる
　なぜに。
主成分分析のあれこれ

# 主成分分析のあれこれ
主成分分析の拡張である確率的主成分分析，ベイズ的主成分分析，カーネル主成分分析の比較

## 主成分分析（PCA）

高次元のデータを低次元に次元削減する方法
色々求め方はあるが，特異値分解と解釈するのが早い

$$ X = UDV^T $$

* $X$: サンプル数×次元数の元データ
* $U$: ×次元数のユニタリー行列
* $D$: 次元数×次元数の対角行列（対角成分は固有値）
* $V^T$: 次元数×次元数の固有ベクトル行列（行が１つの固有ベクトル）

さらに次元削減のベクトルは

$$ X_{pca} = XV_{pca} $$
で求めることができる．
ただし$V_{pca}$は行列Vから削減した次元数から作成する．（2次元に次元削減したのなら，$V_{pca} = V[:,[0,1]]$）

##確率的主成分分析（Probabilistic PCA）

ガウス分布を用いて確率的に次元削減を行う
求め方は複数あるが，EMアルゴリズムで求める場合，
E-stepでは

```math
M = W^TW+\sigma^2I \\
E[z_n] = M^{-1}W^T(x_n-\bar{x}) \\
E[z_{n}z_{n}^T]=\sigma^2M^{-1}+E[z_n]E[z_n]^T
```
ただし，

* $M$: 削減後の次元数×削減後の次元数の行列
* $W$: 元の次元数×削減後の次元数の行列（ランダムに初期化）
* $\sigma^2$: スカラー
* $I$: 単位行列
* $E[z_n]$: n番目のデータの次元削減後のベクトル
* $x_n$: n番目のデータの次元削減前のベクトル
* $\bar{x}$: 次元削減前のデータの平均ベクトル
* $E[z_nz_n^T]$: 削減後の次元数×削減後の次元数の行列

M-stepでは

```math
W = \bigl[\sum_{n=1}^{N}(x_n-\bar{x})E[z_n]^T\bigr]\bigl[\sum_{n=1}^{N}E[z_nz_n^T]\bigr]^{-1}\\
\sigma^{2} = \frac{1}{ND}\sum_{n=1}^{N}\bigl\{||x_n-\bar{x}||^2 - 2E[z_n]^TW^T(x_n-\bar{x}) + Tr(E[z_nz_n^T]W^TW)\bigr\}

```
ただし，

* N: データ数
* D: 元の次元数

で求めることができる．

## ベイズ的主成分分析（Bayes PCA）

ガウス分布にハイパーパラメータを導入してベイズ推定を行う．

Probabilistic PCAの場合と比較して，M-stepが異なり，

```math
\alpha_i = \frac{D}{w_i^Tw_i} \\
W = \bigl[\sum_{n=1}^{N}(x_n-\bar{x})E[z_n]^T\bigr]\bigl[\sum_{n=1}^{N}E[z_nz_n^T] + \sigma^2A \bigr]^{-1}\\
\sigma^{2} = \frac{1}{ND}\sum_{n=1}^{N}\bigl\{||x_n-\bar{x}||^2 - 2E[z_n]^TW^T(x_n-\bar{x}) + Tr(E[z_nz_n^T]W^TW)\bigr\}

```

ただし，

* $w_i$: 行列Wのi行目のベクトル
* $A$: $diag(\alpha_i)$

である．

## カーネル主成分分析
カーネルによって，データ数×次元数の行列をデータ数×データ数の行列に変換したのちに主成分分析を行う

$$\tilde{K} = K - 1_{N}K - K1_N+1_NK1_N$$

ただし，

* $K$: i, j成分がkernel($x_i$, $x_j$)の行列
* 1_{N}: 全成分が$1/N$のデータ数×データ数の行列

このようにして求めた$\tilde{K}$に対して，主成分分析の時と同様に，固有値と固有ベクトルを求めることによって次元削減を行う

## 実験

主成分分析（PCA），確率的主成分分析（PPCA），ベイズ的主成分分析（BPCA），カーネル主成分分析（KPCA）を用いて次元削減を行う．

用いたデータはirisのデータ（3種類の植物のデータが4次元のベクトルで表現されている，各種類ごとに50データ存在する）．

コードはここに
https://github.com/kenchin110100/machine_learning

2次元に次元削減後，プロットしたものが以下の図

* PCA
<img width="543" alt="PCA_iris.png" src="https://qiita-image-store.s3.amazonaws.com/0/155619/3fd57f09-ba99-0c12-5d93-4037efaab91f.png">

* PPCA
<img width="539" alt="PPCA_iris.png" src="https://qiita-image-store.s3.amazonaws.com/0/155619/bff0e5ef-0f15-aaad-7247-a31083bf6f21.png">

* BPCA
<img width="549" alt="BPCA_iris.png" src="https://qiita-image-store.s3.amazonaws.com/0/155619/04c34024-c731-7787-71a4-d6e917164d72.png">

* KPCA
<img width="558" alt="KPCA_iris.png" src="https://qiita-image-store.s3.amazonaws.com/0/155619/a020c8ba-82b7-c2cb-1bd1-9c9a091b4c49.png">


PCAよりも,PPCA，BPCAの方が種類間の境界線がはっきりとわかる．
KPCAはまた違う感じだが，確かに種類ごとにプロットができている．

## 終わりに
4種類の主成分分析を行なった，BPCAあたりは使い勝手が良さそう
PCAの拡張方法として確率的に求めるか，kernelを使うかという2軸があるが，
それらを組み合わせた最強の主成分分析なるものがあるらしい・・・
JSF2.3 新機能まとめ


JSF2.3のmasterブランチが1/27に凍結され、リリース準備に入ったとのことなので、2.2からの変更点を一覧にまとめてみました。

# 一覧
+ CDI(依存性の注入)
 + JSF成果物の注入とEL解決
 + より多くのJSF成果物への注入
 + ネイティブな@ManagedBeanの非推奨
 + CDIの@ManagedProperty対応
+ ライフサイクル
 + PostRenderViewEventの追加
+ ネットワークとAjax
 + WebSocket対応
 + Ajaxによるサーバー処理の呼び出し
 + Ajax Response完了後のjavascriptをサーバーに記述する
 + Ajaxによる複数formの更新
+ ConversionとValidation
 + クラスレベルのバリデーション追加
 + ```<f:convertDateTime>```のJava8版Time対応
+ Java API
 + UIDataコンポーネント、URRepeatのIterableインターフェース対応
 + UIDataコンポーネント、URRepeatのMapインターフェース対応
 + UIDataコンポーネント、URRepeatの自作型対応
 + FacesWrapperインターフェースにdefaultメソッドT getWrapped()を追加
+ コンポーネント
 + 自由に配置できるラジオボタンコンポーネント
 + ```<h:column>```タグにstyleClass属性を追加
 + ```<h:dataTable>```タグにrowClass属性を追加
 + モデルなしUIRepeatのイテレーション
 + UISelectManyでの自動変換
 + EL名前空間への定数インポート
 + 動的コンポーネントツリー操作を公式に仕様として認識
+ ViewとResources
 + 拡張子なしURLへのマッピングの基本対応
 + 全てのViewリソースリストの取得
 + リソース描画状態の取得/更新を標準化
 + ajaxで追加した動的コンポーネントのリソース読み込み
+ 型安全性
 + ExternalContext#getInitParamterMapに型引数を追加
 + Converter/Validatorインターフェースに型引数を追加
 + jsf.js、javax.faces、ポストバックパラメータの定数
+ 設定
 + production環境でFaceletsをホットリロードしないのがデフォルト化
 + デフォルトマッピングに.xhtml拡張子を追加

## 参考
[What's new in JSF 2.3? - Arjan Tijms' Weblog](http://arjan-tijms.omnifaces.org/p/jsf-23.html)
パソコンの命令、データ信号の流れと仕組み、またレジスタについて

こんにちは

今回はパソコンの命令、データ信号の流れと仕組みに関して整理してみました。

まず図で整理してみると下のようになります。
![computer3.png](https://qiita-image-store.s3.amazonaws.com/0/115472/12b37b59-cecf-1de5-943f-f33a26ba4916.png)



プログラムの実行はまずCPUが主記憶装置からプログラムコードを読んで実行します。

その結果をデータとして主記憶装置に保存して、補助記憶装置まで保存したり

入力、出力装置を通して表示したり、データをもらったりすることを表現しています。

CPUには演算装置、制御装置以外にレジスタという記憶装置が入っていますが、

そのレジスタは主記憶装置（RAM）より早い記憶装置でCPU内の仮の記憶装置の役割をしています。

レジスタはひとつではなくいくつかあるので今から個別に説明します。

①プログラムカウンタ（PC）

プログラムカウンタは実行する命令の住所を保存するレジスタです。

あの命令の集合をプログラムと言いますが、プログラムが動くということは

命令が順番に実行されるということです。命令の順番を表す役割をしています。

②命令　レジスタ（IR）

命令レジスタはメモリから呼んできた命令を実行するために一時的に保存するレジスタです。

③記憶装置住所レジスタ（MAR）

次に読む動作や、書く動作をする記憶場所の住所を保存する住所保存向けのレジスタです。

④記憶装置バッファーレジスタ（MBR）

記憶装置バッファーレジスタは記憶装置に保存するデータや記憶装置から読んだデータを仮に保存するバッファーです。なので全てのデータが通るレジスタです。

⑤入出力住所レジスタ（IO AR）

入出力装置の住所を保存するレジスタです。

⑥入出力バッファーレジスタ（IO BR）

入出力モジュールとCPUの間に区間されるデータを日時的に保存するレジスタです。




<a href="https://www.yunzeroin.com">![yunzerinLOGO.png](https://qiita-image-store.s3.amazonaws.com/0/115472/3bafbfb3-0e91-67b8-c364-826cd1842779.png)
</a>
ゼロから作るDeep Learning

ゼロから作るDeep Learningを読みながらコードを実行する．
詰まったところなどを書いていく．

#環境
-Windows10
-Ubuntu on Windows
-python3

#Python環境の構築
numpyはすでに入っていたが，matplotlibは入っていなかったのでコマンドでインストールした．
`$ sudo apt-get install python3-matplotlib`

#1.6.1 単純なグラフの描画
show()が使用できない
Xmingを導入する必要があるぽい
http://qiita.com/makky0620/items/e31edc90f22340d791ff

以下のサイトからXmingをダウンロード
https://ja.osdn.net/projects/sfnet_xming/

Xming-6-9-0-31-setup.exe
Xming-fonts-7-7-0-10-setup.exe
2ファイルを実行してインストールした．

右下のバーでアイコンにマウスを当てると`Xming server:0.0`と表示される（参考サイト通り）
環境変数に入力する．
`$ export DISPLAY=localhost:0.0`

`$ xclock`
時計の表示に成功した．

show()で表示されるようになった．

#1.6.2
legend()は凡例をつける関数のようだ

#？
Xmingを入れたせいか，キーボードがUSになっていた．

#1.6.3
画像を読み込んで表示するときにエラーが発生した
```エラー
Traceback (most recent call last):
  File "img.py", line 5, in <module>
    plt.imshow(img)
  File "/usr/lib/python3/dist-packages/matplotlib/pyplot.py", line 2881, in imshow
    ax = gca()
  File "/usr/lib/python3/dist-packages/matplotlib/pyplot.py", line 803, in gca
    ax =  gcf().gca(**kwargs)
  File "/usr/lib/python3/dist-packages/matplotlib/pyplot.py", line 450, in gcf
    return figure()
  File "/usr/lib/python3/dist-packages/matplotlib/pyplot.py", line 423, in figure
    **kwargs)
  File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_tkagg.py", line 79, in new_figure_manager
    return new_figure_manager_given_figure(num, figure)
  File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_tkagg.py", line 87, in new_figure_manager_given_figure
    window = Tk.Tk()
  File "/usr/lib/python3.4/tkinter/__init__.py", line 1854, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
```
と思ったが，`export DISPLAY=localhost:0.0`を忘れていた．
ターミナルを再起動したら，その度に環境設定をしなおさないといけない．
.bashrcに書く．

#3.6.1
mnist.pyはdatasetディレクトリにある，と書いてあるがdatasetディレクトリとはなんのことだろう．
Anacondaディストリビューションを入れろと書いてあったが，入れなかったことと関係があるのだろうか．
オライリーのサイトの本紹介ページからGitHubにリンクがあった．
https://github.com/oreilly-japan/deep-learning-from-scratch
ダウンロードする．
`$ git clone https://github.com/oreilly-japan/deep-learning-from-scratch.git`

PILを使用した画像の表示ができない．
`pil_img.save("output.png")`でファイル保存はできる．
Imagemagickなるものを入れると表示できるらしい．
http://d.hatena.ne.jp/kimihito/20120508/1336461904
`$ sudo apt-get install imagemagick`

写経しているためpickleが未定義とエラーが出た．
`import pickle`する．

#4.4.1
ハイパーパラメータはニューラルネットワークのパラメータと異なり，人の手で調節するらしい．このパラメータも自動で獲得できないかな．

#4.4.2
本文の（どうでもよい）ミスを発見した．1刷と6刷で同様であることを確認した．
```P. 111
\>>> net = simpleNet()
\>>> print(net.W) # 重みパラメータ
[[ 0.47355232, 0.9977393 , 0.84668094],
 [ 0.85557411, 0.03563661, 0.69422093]])
\>>>
\>>> x = np.array([0.6, 0.9])
\>>> p = net.predict(x)
\>>> print(p)
[ 1.13282549 0.66052348 1.20919114]```
上記の対話式コードが載っているが，最後のprintの結果は数値的には`[ 1.05414809  0.63071653  1.1328074 ]`になる．
net.Wは乱数で生成するため，一度実行してnet.predict(x)を本の原稿に書き写した後，net.Wを再生成してnet.Wを本の原稿に書き写したのかな．


lambdaは無名関数を作る構文である．
`f = lambda w: net.loss(x, t)`
と
```def f(x):
  return net.loss(x, t)```
はおそらく等価である．
丸数値①を(1)に変換する例

ドキュメント等で①などの丸数字があると migemo の力が活かせないので、さくっと変換してしまおうとして考えたコードです。

```rb
list = [
  {:type => "○", :size => "中", :base => 0,  :range => 0x24ea..0x24ea   },
  {:type => "○", :size => "中", :base => 1,  :range => 0x2460..0x2473   },
  {:type => "○", :size => "中", :base => 21, :range => 0x3251..0x325f   },
  {:type => "○", :size => "中", :base => 36, :range => 0x32b1..0x32bf   },
  {:type => "○", :size => "小", :base => 0,  :range => 0x1f10b..0x1f10b },
  {:type => "○", :size => "小", :base => 1,  :range => 0x2780..0x2789   },
  {:type => "●", :size => "中", :base => 0,  :range => 0x24ff..0x24ff   },
  {:type => "●", :size => "中", :base => 1,  :range => 0x2776..0x277f   },
  {:type => "●", :size => "中", :base => 11, :range => 0x24eb..0x24f4   },
  {:type => "●", :size => "中", :base => 0,  :range => 0x1f10c..0x1f10c },
  {:type => "●", :size => "小", :base => 1,  :range => 0x278a..0x2793   },
  {:type => "◎", :size => "中", :base => 1,  :range => 0x24f5..0x24fe   },
]

# テーブルが正しいか確認する用
if false
  list.each do |e|
    range = e[:base] .. e[:base] + e[:range].size.pred
    s = e[:range].to_a.pack("U*")
    p [e[:type], e[:size], range, s]
  end
end

# 置換用ハッシュを準備
replace_hash = list.inject({}) { |a, e|
  a.merge(e[:range].each.with_index(e[:base]).inject({}) { |a, (v, i)|
      a.merge([v].pack("U") => "(#{i})")
    })
}

replace = -> s { s.gsub(/[#{replace_hash.keys.join}]/o, replace_hash) }

# マッチしたところだけ変換できる
replace["項目①です"]           # => "項目(1)です"

# 全部変換してみる
list.each do |e|
  s = e[:range].to_a.pack("U*")
  p [s, replace[s]]
end
# >> ["⓪", "(0)"]
# >> ["①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳", "(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)(12)(13)(14)(15)(16)(17)(18)(19)(20)"]
# >> ["㉑㉒㉓㉔㉕㉖㉗㉘㉙㉚㉛㉜㉝㉞㉟", "(21)(22)(23)(24)(25)(26)(27)(28)(29)(30)(31)(32)(33)(34)(35)"]
# >> ["㊱㊲㊳㊴㊵㊶㊷㊸㊹㊺㊻㊼㊽㊾㊿", "(36)(37)(38)(39)(40)(41)(42)(43)(44)(45)(46)(47)(48)(49)(50)"]
# >> ["🄋", "(0)"]
# >> ["➀➁➂➃➄➅➆➇➈➉", "(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)"]
# >> ["⓿", "(0)"]
# >> ["❶❷❸❹❺❻❼❽❾❿", "(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)"]
# >> ["⓫⓬⓭⓮⓯⓰⓱⓲⓳⓴", "(11)(12)(13)(14)(15)(16)(17)(18)(19)(20)"]
# >> ["🄌", "(0)"]
# >> ["➊➋➌➍➎➏➐➑➒➓", "(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)"]
# >> ["⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾", "(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)"]
```

# 参照

- 丸数字 - Wikipedia https://ja.wikipedia.org/wiki/%E4%B8%B8%E6%95%B0%E5%AD%97
DCGANを使ってみる

##はじめに
今更だけど、DCGANを使ってみる。

A. RadfordらのDCGAN論文はこちら
https://arxiv.org/abs/1511.06434

今回試すコードはmattya氏のchainerを使ったこれ。
https://github.com/mattya/chainer-DCGAN
##パソコン環境
OS:Ubuntu 14.04
GPU:GTX 1070
CUDA 8.0 RC
cuDNN 5.1
python 2.7.6
chainer 1.14.0
など
##インストールする
git cloneする。

```
git clone https://github.com/mattya/chainer-DCGAN.git
```

##学習済みモデルで生成してみる
まずはどんな画像が生成されるか試してみる。

```
cd chainer-DCGAN
python visualizer.py
```

こんな画像が生成された。
![output.png](https://qiita-image-store.s3.amazonaws.com/0/116706/592b1c01-148f-1a09-1ad2-8c4fd799b5c5.png)
digdagでWindowsPowerShellを扱う

Windowsでdigdagを使用する場合の自分用のメモ。

シェルスクリプトの実行ファイルとしてpowershell.exeを定義すると、digdagでPowershellを扱うことができる。

```yaml:test.dig
_export:
    sh:
      shell: ["powershell.exe", "-"]

+task1:
  sh>: test.ps1
```

powershellなのでexeも実行可能。

```yaml:test.dig
_export:
    sh:
      shell: ["powershell.exe", "-"]

+task1:
  sh>: test.exe
```
laravel form param vs query string vs route param

laravelにはparameter取得用のmethodが豊富ですが、役割のバラバラなんで、注意が必要。
`http://xx.com/66?id=88`、`http://xx.com/66`で確認すれば直ぐわかるはず。
特に`request()->id`は強過ぎ！　怖い:smiling_imp:

```
Route::get('/{id}', function ($id) {
    echo request("id"). "<br>";
    echo request()->id . "<br>";
    echo \Request::input("id"). "<br>";
    echo \Request::query("id"). "<br>";
    echo \Request::route()->parameter("id"). "<br>";
    echo \Request::route("id"). "<br>";
    echo $id . "<br>";
});
```
macOS Sierraでpip install -U pipのPermissionError[Error 1]の対処

#概要
Mac book Air (late2013)
python3の環境をanacondaでインストール
初学者なので2.7環境は必要ない
あるパッケージをpipでインストールしようとしたら久しぶりだったので
pipそのものをアップデートしろと言われた。

##コマンド
普通に
`# pip install -U pip`
としたらうまく行くかな～？と思わせておいて、エラーを吐いて終わる。
ターミナルには
`PermissonError: [Error 1] Operation not permitted: '/bin/pip'`
と表示されてうまく行かない。

###3時間ほど調べた結果
El Capitanの時にHomebrew界隈でドはまり続出だった
SIP絡みだとアタリをつけてみた。

homebrewでは `/usr/local` のパーミッションをリカバリモード（起動時に⌘＋R）に入ってSIPをオフ

`#csrutil disable`

再起動して

`chown -R $(whoami):admin /usr/local` パーミッション変更

再度リカバリモードに入って

`#csrutil enable`

で終わりだったけど今回はPythonのpipなので/binの下だから同様にSIPを切ってから

`chown -R $(whoami):admin /bin`

として実行してみた。

`# pip install -U pip`

これでもまだ同じエラーが出たので、以下のコマンドでやってみた。

`#pip install --user -U pip`

エラーがなくなってアップデートできた。

#####もしかしたら
pip のオプションで--userを指定するだけで/binのパーミッション変更は要らなかったかも？
Markdown/LaTeX記法比較表

[変換すればいいじゃん！](http://betrue12.hateblo.jp/entry/2015/04/10/003830)という話もあるんですが、Markdownに住んでいた人間がLaTeXをそのまま書くこともあるかと思うのでここに記載しておきます。

## LaTeXテンプレート

LaTeXの場合、文章の書き始めにまず宣言等が必要です。以下は、基本的な日本語文書のためのテンプレートになります。これが下地となり、中に文章を書いていくことになります。

```latex
\documentclass{jsarticle}
\usepackage[dvipdfmx]{graphicx}
\usepackage[dvipdfmx]{hyperref}
\usepackage{amsmath}
\title{文章のタイトル}
\date{}

\begin{document}
\maketitle

\section{セクションA}

コンテンツ

\section{セクションB}

コンテンツ

\end{document}

```

## Headers - 見出し

**Markdown**

```
# 見出し
## サブ見出し
## サブサブ見出し
```

**LaTex**

```latex
\section{見出し}
\subsection{サブ見出し}
\subsubsection{サブサブ見出し}
```

## Emphasis - 強調

**Markdown**

```
*イタリック*
**ボールド**
```

**LaTeX**

```
\textit{イタリック}
\textbf{ボールド}
```

## リスト (Disc型)

**Markdown**

```
* 項目1
* 項目2
  * 項目2-1
```

**LaTeX**

```
\begin{itemize}
 \item 項目1
 \item 項目2
   \begin{itemize}
     \item 項目2-1
   \end{itemize}
\end{itemize}
```

## リスト (Decimal型)

**Markdown**

```
1. 項目1
2. 項目2
3. 項目3
```

※入れ子は出来ない

**LaTeX**

```
\begin{enumerate}
 \item 項目1
 \item 項目2
   \begin{enumerate}
     \item 項目2-1
   \end{enumerate}
\end{enumerate}
```

## 引用

**Markdown**

```
> 文頭に>を置くことで引用
```

**LaTeX**

```
\begin{quote}
  引用文
\end{quote}
```

長文の場合は`\begin{quotation}`がいいらしい

## リンク

**Markdown**

```
[リンク](http://xxx.com)
```

**LaTeX**

```
\href{http://xxx.com}{リンク}
```

[※hyperrefパッケージを使用](http://d.hatena.ne.jp/hyuki/20121117/tex)


## 画像

**Markdown**

```
![代替テキスト](http://image.jpg)
```

**LaTeX**

```
以下の図(\ref{fig:sample})を参照してください。

\begin{figure}[htbp]
  \begin{center}
    \includegraphics{http://image.jpg}
    \caption{サンプルの図}
    \label{fig:sample}
  \end{center}
\end{figure}
```

`graphicx`パッケージを利用する。`includegraphics`のオプションで、サイズなどを指定できる。

[LaTeXコマンド集 図の基本](http://www.latex-cmd.com/fig_tab/figure01.html)


## テーブル

**Markdown**

```
| Left align | Right align | Center align |
|:-----------|------------:|:------------:|
| Left       |        Right|    Center    |
| column     |      column |    column    |
```


**LaTeX**

```
\begin{table}[h]
  \centering
  \begin{tabular}{|l|r|c|} \hline
    Left align & Right align & Center align \\ \hline
    Left & Right & Center \\ \hline
    column & column & column  \\ \hline
  \end{tabular}
\end{table}
```

* `\begin{table}`の後のオプションで、ここに出す(h)以外にページ上部(t)、下部(b)などを指定可能
* `\begin{tabular}`の後で列を定義する。アラインをl(eft), c(enter), r(ight)の何れかから選択、間に`|`を入れることで縦の罫線が引かれる
* 横の罫線は`\hline`で入れる


## 数式

**Markdown**

`math`を使用

```math
a = b
```

**LaTeX**

```
\begin{align}
a = b
\end{align}
```

`amsmath`パッケージを使用する。`align`もしくは`equation`。普通に使うと数式番号が入るので、入れたくない場合は`align*`や`equation*`を使う。

## 改行

**Markdown**

文末に空白2つ

**LaTeX**

`\\`か`\newline`

## 参考

* [LaTeXコマンド集](http://www.latex-cmd.com/)
* [使ってはいけない LaTeX のコマンド・パッケージ・作法](http://ichiro-maruta.blogspot.jp/2013/03/latex.html)
Chromeのdevtoolsをextensionで監視する

#基本的な事
httpのアクセスログを取るためにはmitmproxyやFiddlerなどのhttp proxyを使うのが一般的ですが、中にはproxyを検知してアクセスを拒否するものがあります．
そのようなサイトのアクセスログを取るためにはブラウザのデバッグツールを使うのが一番ラクですが、その情報は他に転用出来ません．
Chromeでは拡張機能（extension)でデバッグツールの拡張が可能です.デバッグツールでの拡張はプロクシを通さないので、サイトで弾かれる事は無いです．


#メリット
・プロクシを検知して弾かれる事がない

#デメリット
・デバッグツールを開く必要がある
・サイトごとの処理が出来ない
・chrome.devtools.*とchrome.runtime.*しかAPIを使えないので、background.jsにpostMessageをして処理をbackground.js内で処理する必要がある．



#ツリー構成
├── devtools.html
├── devtools.js
└── manifest.json

```manifest.json
{ "name": "DevtoolTest",
  "manifest_version": 2,
  "version": "1",
  "devtools_page": "devtools.html"
}
```
```devtools.html
<html>
    <head>
        <script src="devtools.js"></script>
    </head>
    <body></body>
</html>
```
```devtools.js
chrome.devtools.network.onRequestFinished.addListener(
  function(request) {
	  chrome.devtools.inspectedWindow.eval( 'console.log("' +  request.request.url + '")');
	
});
```


#ハマる事
・devtools.htmlが必要
・consoleに出力するためにはchrome.devtools.inspectedWindow.evalする必要がある．
・jsを更新した時は拡張機能をリロードし、デバッグウィンドウを閉じ、再び起動しないといけない



http://feiz.hateblo.jp/entry/2013/11/27/203704
http://qiita.com/torini/items/321d1744d77f023e80b5
(画像処理) Petit Thinning - ゆるい細線化処理を行うフィルタ

白地に黒線が描かれている線画画像に対し、ゆる～く細線化を施すフィルタを書きました。細線化といっても1ピクセルの線を抽出するような解析方面のものでなく、どちらかというとレタッチソフト方面の実務的な用途で使うためのものです。細線化とともに、いくつかの異なる太さの線をなるべく均質な太さにするという狙いも含んでます。

![image](https://qiita-image-store.s3.amazonaws.com/0/152179/90baa5df-fb8b-e715-75bb-aef261b94923.jpeg)




## ソース

Pythonで動作します。

https://github.com/a-nakanosora/blender-scripts/blob/master/Image/Petit%20Thinning%20CLI/petit_thinning.py

使用にあたって`Pillow`が必要です。
(標準のPythonより、このライブラリが同梱されてる[Anaconda](http://qiita.com/t2y/items/2a3eb58103e85d8064b6)を使うのがオススメ)

<font color="Gray">追記：最初のバージョンでは外部ライブラリにNumpyとPillowが必要だったところを、@pashango2 氏による改善でPillowに一本化＆高速化が行われました。多謝！</font>

## 使い方

```
$ python petit_thinning.py 6 0.95 5 input.png output.png
```

コマンドライン引数は

```
petit_thinning.py <emptyrange> <emptythres> <dilation_max_depth> <path_in> [<path_out>] [-p]
```

のようになっています。
`emptyrange`, `emptythres`, `dilation_max_depth` がフィルタの効果の出方を変化させるパラメータとなります。

* `emptyrange` ： 1以上の整数。細線化の各レベルをどの程度スムースに混ぜ合わせるかの目安
* `emptythres` ： 0.0～1.0の範囲の実数。1.0に近づけるほど細線化の効果が強くなりますが、線は途切れがちになります
* `dilation_max_depth` ： 1以上の整数。大きい数値を指定することでより太い線の細線化に対応できますが、太すぎる線の場合ノイズが発生しがちになります
* `path_in` ：入力ファイルパス
* `path_out` ：出力ファイルパス。省略すると入力パス名末尾に`_out`がついたものが使われます
* `-p`フラグ ： 各種パラメータや計算時間をプリント

基本的に`emptyrange`は`dilation_max_depth`より大きい値にするとノイズが低減しますが、細線化の度合いも低下します。`dilation_max_depth`は`5`程度にしておいた方が無難です。

## 基本的な原理

モルフォロジーフィルタのDilation(膨張)を何段階か行って、それらを合成しているだけです。

<img src="https://qiita-image-store.s3.amazonaws.com/0/152179/0cc560d0-7fdc-f880-2868-11aa4dcdaca9.jpeg" height="400px">

* 入力画像に対しDilationを何段階か行い、それぞれの結果をストックしておく
* Dilationの深度が最も高い画像を選び、その中で線が無い箇所である空白部分を深度が一つ浅い画像で上書きし、次の画像とする
* 同様の処理を深度を一つずつ上げつつ行ってゆく