OmniAICreator/Qiita-1.07M huggingface dataset:
Ubuntu 16.04 LTS でフロントパネルの音声出力端子から音が出ない

Ubuntu 16.04 で自作 PC を組んだところフロントパネルの音声出力端子に接続したデバイスから音が出ない問題が発生した。本事象が発生した環境は下記の通り。


OS: Ubuntu 16.04.2 LTS
M/B: ASUS ROG STRIX Z270F GAMING
CPU: Intel Core i7-7700K CPU @ 4.20GHz
GPU: ASUS ROG STRIX-GTX1060-O6G-GAMING
CASSIS: IN WIN 805

## 解決方法

`alsamixer` コマンドを実行し `Auto-Mute Mode` を無効化（Disabled）する。

## 発生した問題

**自作 PC のケース（IN WIN 805）前面にある音声出力端子に接続したヘッドホンから音が聞こえない。**
背面のマザーボード基板上にある音声出力端子に接続したスピーカーからは音が聞こえている。前面の音声出力端子にプラグを差し込むと、背面に接続したスピーカーからは音が出なくなり、デスクトップ画面にも新しいサウンドデバイスを認識したような表示が現れるものの、実際には前面から音は聞こえていない。

## 解決に至るまでの経緯

最初にマザーボードの AAFP (Analog Audio Front Panel Connector) 端子がケースの HD AUDIO ケーブルと正常に接続されていることを確認した。ホコリによる接触不良などにも十分注意したが結局改善しなかった。

続いてフロントパネルの音声出力端子にヘッドホンを何度か接続してみると、差し込んだときに一瞬だけ音が聞こえることに気がついた。そのため、PC ケースの端子側の接触不良を疑ったが、さらに何度か接続してみると、プラグを素早く差し込んだりゆっくり慎重に差し込んだりしても、一瞬だけ聞こえる音の長さが変わらないことに気がついた。すなわち、物理的な接触不良による問題ではなく、OS がサウンドデバイスを認識した直後に何らかのソフトウェアの機構によりミュートされている可能性が高い。

そこで調べてみたところ、同様の事象に関する Stack Overflow の記事を見つけた。
> Type `alsamixer` to the terminal and using left and right arrow keys in to the `Headphones` selection if is muted (shows MM on above) press `M` to unmute and press the up arrow to volume up
https://askubuntu.com/questions/868467/ubuntu-16-04-front-panel-audio-does-not-work

端末を開きおもむろに `alsamixer` コマンドを実行すると下図のようなグラフィカルな画面が出現した。当方の環境では、上記の記事のように `Headphone` （左から2番目）がミュートされてはいなかった。ここで諦めそうになったが、適当に設定をいじっていたところ、 `Auto-Mute Mode` （右から5番目）を無効化（Disabled）することで、フロントパネルの音声出力端子に接続したヘッドホンから音が出るようになった。

![Screenshot from 2017-07-16 14-58-16.png](https://qiita-image-store.s3.amazonaws.com/0/176935/81dabe04-246b-b46f-5942-efe34b1c7540.png)

## 補足事項

#### ALSA とは

> Advanced Linux Sound Architecture (ALSA) は、サウンドカードのデバイスドライバを提供する Open Sound System (OSS) を置き換えるために開発された Linux カーネルコンポーネントである。ALSA プロジェクトの初期の目標は、サウンドカードハードウェアの自動設定や、複数のサウンドデバイスのスマートな取扱いなどであったが、それらは概ね達成された。JACK などのいくつかのフレームワークは、低遅延でプロフェッショナル級の編集・ミキシングを実現するために ALSA を利用している。
https://ja.wikipedia.org/wiki/Advanced_Linux_Sound_Architecture

FFmpeg などでライン入力の音声をキャプチャするために入力オプションに `-f alsa` と指定したことが思い出される。

## 編集後記

この記事が Qiita 初投稿になる。なるべく継続できるように頑張らねばなるまい。
この記事を執筆する過程で Ubuntu のスクリーンショットが Windows と同様に `PrintScreen` キーで撮れることを知った。さらに `Shift` + `PrintScreen` で範囲指定、`Alt` + `PrintScreen` で現在アクティブなウィンドウのみ、さらに撮影後にクリップボードにコピーするかファイルに保存するか選択できるなんて、至れり尽せリだ。これから積極的に活用していきたいと思う。
Python3系の基礎文法（内包表記）

# 概要
O'Reilly Japan の「入門 Python 3」を参考に、Python3系の基礎文法を勉強します。
同じようにPythonを勉強したいと思ってる方の参考になれば幸いです。

# 内包表記
内包表記は、一つ以上のイテレータからPythonデータ構造をコンパクトに作れる形式。

#リスト内包表記
リスト内包表記の最も単純な形式は、下記の通り。

```
[ expression for item in iterable ]
```
##通常のコードとの比較
- 通常（内包表記でない）コード

```py3
>>> str_list = []
>>> for i in range(1, 6):
...     str_list.append(str(i) * i)
...
>>> str_list
['1', '22', '333', '4444', '55555']
```
- リスト内包表記にしたコード

```py3
>>> [str(i) * i for i in range(1, 6)]
['1', '22', '333', '4444', '55555']
```
##条件式を追加する場合
- 通常（内包表記でない）コード

```py3
>>> num_list = []
>>> for i in range(1, 6):
...     if i % 2 == 1:
...         num_list.append(str(i) * i)
...
>>> num_list
['1', '333', '55555']
```

- リスト内包表記にしたコード

```py3
>>> [str(i) * i for i in range(1, 6) if i % 2 == 1]
['1', '333', '55555']
```

##ループをネストさせる場合
- 通常（内包表記でない）コード

```py3
>>> keys = range(0, 3)
>>> vals = range(0, 3)
>>> for key in keys:
...     for val in vals:
...         print(key, val)
...
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2
```

- リスト内包表記にしたコード

```py3
>>> keys = range(0, 3)
>>> vals = range(0, 3)
>>> tuple = [(key, val) for key in keys for val in vals]
>>> for key, val in tuple:
...     print(key, val)
...
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2
```

#辞書内包表記
辞書内包表記の最も単純な形式は、下記の通り。

```
{ key_item : value_item for item in iterable }
```
##辞書内包表記サンプル
```py3
>>> iter_obj = [(1, 'AA'), (2, 'BB'), (3, 'CC')]
>>> dict_obj = {key : val for key, val in iter_obj}
>>> dict_obj
{1: 'AA', 2: 'BB', 3: 'CC'}
```

#集合内包表記
集合内包表記の最も単純な形式は、下記の通り。

```
{ item for item in iterable }
```
##集合内包表記サンプル
```py3
>>> {10**i for i in range(1, 6)}
{100000, 100, 1000, 10, 10000}
```

#ジェネレータ内包表記
ジェネレータは一度だけしか実行できない。

##ジェネレータ内包表記サンプル
```py3
>>> #かっこの間のものは、ジェネレータ内包表記であり、ジェネレータオブジェクトを返す
>>> gene_obj = (num**2 for num in range(1, 6))
>>> num_list = list(gene_obj)
>>> num_list
[1, 4, 9, 16, 25]

>>> # もう一度、同じジェネレータオブジェクトを使っても何も出てこない
>>> num_list = list(gene_obj)
>>> num_list
[]
```
ssh 複数アカウント設定

環境 MacOS   

## 鍵の生成
```bash
$ cd ~/.ssh/
$ ssh-keygen -t rsa -C '[メールアドレス]' -f ~/.ssh/id_rsa_[ファイル名]

# 例
# - 個人のGitHub
$ ssh-keygen -t rsa -C 'mail@gmail.com' -f ~/.ssh/id_rsa_github

# - 会社のGitHub
$ ssh-keygen -t rsa -C 'mail@gmail.com' -f ~/.ssh/id_rsa_github_company

# - 個人のGitLab
$ ssh-keygen -t rsa -C 'mail@gmail.com' -f ~/.ssh/id_rsa_gitlab_private

# - 会社のGitLab
$ ssh-keygen -t rsa -C 'mail@gmail.com' -f ~/.ssh/id_rsa_gitlab_company
```

## 公開鍵をコピーする

```bash
pbcopy < ~/.ssh/id_rsa_[ファイル名].pub

# 例
pbcopy < ~/.ssh/id_rsa_github.pub
pbcopy < ~/.ssh/id_rsa_github_company.pub
pbcopy < ~/.ssh/id_rsa_gitlab_private.pub
pbcopy < ~/.ssh/id_rsa_gitlab_company.pub
```

## 設定ファイルでHostを設定する

設定ファイルの場所👇。存在しない場合は新規作成する

```bash
~/.ssh/config
```

設定ファイルに追加する

```bash:~/.ssh/config
Host [ホスト名]
  HostName [サービスのドメイン or IPアドレス]
  User [ユーザー名: GitHubの場合は`git`、　Bitbucketの場合はアカウントのユーザ名（ユーザ名が`hello`の場合`hello`)]
  Port 22
  IdentityFile [秘密鍵の場所]
  IdentitiesOnly yes

# 例 個人GitHubの場合
Host github.com
  HostName github.com
  User git
  Port 22
  IdentityFile ~/.ssh/id_rsa_github
  IdentitiesOnly yes

# 例 会社GitHubの場合
Host github.com.company
  HostName github.com
  User git
  Port 22
  IdentityFile ~/.ssh/id_rsa_github_company
  IdentitiesOnly yes

# 例 個人GitLabの場合
Host gitlab.com
  HostName gitlab.com
  User git
  Port 22
  IdentityFile ~/.ssh/id_rsa_gitlab_private
  IdentitiesOnly yes

# 例 会社GitLabの場合
Host git.company.co.jp
  HostName git.company.co.jp
  User git
  Port 2233
  IdentityFile ~/.ssh/id_rsa_gitlab_company
  IdentitiesOnly yes
```

## 接続確認

アカウントにssh接続できるか確認する

```bash
$ ssh -T [ホスト名]

# 例
# - 個人のGitHub
$ ssh -T github.com
# Hi[username]! You've successfully authenticated, but GitHub does not provide shell access.

# - 会社のGitHub
$ ssh -T github.com.company
# Hi[username]! You've successfully authenticated, but GitHub does not provide shell access.

# - 個人のGitLab
$ ssh -T gitlab.com
# Welcome to GitLab,[username]!

# - 会社のGitLab
$ ssh -T git.company.co.jp
# Welcome to GitLab,[username]!
```

## リポジトリにアクセス

```bash
git@[ホスト名」:「サービスのユーザ名]/hello.git

# 例
# - 個人のGitHub
git@github.com:username/hello.git

# - 会社のGitHub
git@github.com.company:username/hello.git

# - 個人のGitLab
git@gitlab.com:username/hello.git

# - 会社のGitLab
git@git.company.co.jp:username/hello.git
```
発掘 ：Windows7 に VB6.0 をインストールするとエラーが出る ：

#発掘の要旨
本ブログ記事は
[VB6のIDEをWindows10で - 多摩川お笑いでじたる研究所](http://tamalabo.wiki.fc2.com/wiki/VB6%E3%81%AEIDE%E3%82%92Windows10%E3%81%A7)
他随所に引用されているにも関わらずリンク切れを起こしており、発掘したものである。
本編はWindows7を主体に記述されており、Windows8 / 10 の動作は不明であるが64bit Officeでは起動しないようだ。

#発掘した記事
ttp://from.hatenablog.jp/entry/2013/08/31/113432
リンク切れのためつながらず
2013-08-31
Windows7 に VB6.0 をインストールするとエラーが出る 
仕事でまだ VB6.0 を使うケースがあるが、PCの方は、いい加減XPからWindows7に乗り換えなければなりません。

幸いにして、VB6.0 ランタイムは、Windows7/8 になっても未だに提供されており、初期状態でプレインストールされています（ランタイム全てではないですが）。

しかし、Visual Basic 6.0 （ランタイムじゃなく開発ツールのほう；以降こちらをVB6.0と書く）となるとちょっと事情が異なります。

VB6.0 を素直に Windows7 にインストールし、ServicePack 6 をあて、さらに VB6 SP6 のセキュリティロールアップバッチを適用した場合、どうにも正常に動作しません。

具体的には、以下の２つのエラーがちょくちょく発生します。
***「システムレジストリへのアクセスでエラーが発生しました」***

 これは、どうも VB6.0 自身がレジストリを書き換えたいときに発生するようです。（OCXファイルのキャッシュであるOCAやEXDファイルを生成して、それらをレジストリに登録する、など）

要は、VB6.0 に管理者権限がないと。

大抵のアプリなら、ここで UAC に従って「変更させて良いか」を尋ねてくるのですが、VB6.0 の場合はなぜか UAC が機能せず、エラーが表示されるようです。

そしてなぜか2回目以降は表示されません。果たして、レジストリに登録されたのか、それとも VB6.0 が登録を諦めたのか？

最も簡単な解決方法は、
***VB6.EXE のプロパティ → [互換性] タブ → [すべてのユーザーの設定を変更] → [管理者としてこのプログラムを実行する] にチェックを入れる***
ことでしょうね。

VB6.0 の起動時に毎回 UAC のウィンドウで問い合わせが来ますが、少なくともレジストリエラーは発生しなくなります。

***初めて VB6.0 を起動するよりも前に設定することをお勧めします。
「オブジェクトライブラリが登録されていません」

とあるプロジェクトでとあるコンポーネントを追加しようとしたとき、ちゃんと OCX ファイルがレジストリに登録されているにも拘らず、登録されていないという旨のエラーがでて追加できないことがあります。

特に、MSCOMCTL.OCX での発生確率が高いようです。

解決法としては、regsvr32 で手動でOCXファイルを登録しなおしたり、自分でプロジェクトファイルをいじって OCX のバージョンを下げたりといった方法が散見されますが、うちの場合はそれでもアウトでした。

この場合は、regtlib.exe というコマンド（たぶん Visual Basic 6.0 に付いてくる）で、***タイプライブラリを再登録***すると良いようです。

例えば Windows7 HomeEdition (x86) での例を挙げますと、

1.コマンドプロンプト（Cmd.exe）を管理者権限で起動する。
2.下のコマンドを実行する。
    > C:\Windows\regtlib.exe C:\Windows\system32\msdatsrc.tlb
これで、登録できなかったコンポーネントも登録できるようになると思います。
(*編注：ただし当方のWindows10HOMEのPCではC:\Windows\regtlib.exeが見つからず成功しなかった。*)
 

以上、備忘録として。

#実際
##注意
※あくまでも個人の経験です。あなたのPCで成立するかは不明です。
※Windows10 Home 64 bitです
##ダウンロード
[Access2000>倉庫 TreeViewを使う-MAHOUTUKAINO.com](http://www.mahoutsukaino.com/ac/ac2002/db/treeviewhtm.htm)
からサンプルのMDBファイルを入手する
[■[program]Windows7+VB6で MSCOMCTL.OCX がうまくインストールできなかった問 - くらげのChangeLog](http://d.hatena.ne.jp/ku__ra__ge/20140917/p4)
・コモン コントロールの再インストール
http://www.microsoft.com/ja-jp/download/details.aspx?id=10019
Microsoftのサイトより、「Microsoft Visual Basic 6.0 コモン コントロール」をインストールする。
インストールすると再起動のメッセージが出るので再起動する
***CMD.Exeを管理者権限で起動する***
CD\
CD C:\Windows\SysWOW64
regsvr32 /u C:\Windows\SysWOW64\MSCOMCTL.OCX
regsvr32    C:\Windows\SysWOW64\MSCOMCTL.OCX
管理者権限より起動しないと上記のコマンドで
 DLLRegisterServerへの呼び出しは0X8008201cにより失敗
エラーコードで検索しろという実にふざけたメッセージが出る。

本当は再起動するが求められるが無視してAccessのファイルを起動する。
参照設定に上記のファイルとMSCMCTL2.OCXを登録する。
参照設定で検索するときActiveXに切り替えないと見つからない。
これでAccessを立ち上げるところまではいくが、エラーがフォームを開くとエラーが発生する。
Set nodX = TreeView1.Nodes.Add(, , "A0", "一覧") '先頭のノードを設定
の行。

#参考
[TreeView コントロール (Visual Basic 6.0 ユーザー向け)](https://msdn.microsoft.com/ja-jp/library/ms172635(v=vs.90).aspx)
更新 : 2007 年 11 月
Visual Basic 6.0 の TreeView コントロールは、Visual Basic 2008 の TreeView コントロールに置き換えられています。プロパティ、メソッド、イベント、および定数の中には、名称が異なるものや、動作の異なるものもあります。
iOSで音を鳴らす


## やりたいこと

* ボタンを押すと音を鳴らしたい。

## 参考

* http://appleharikyu.jp/iphone/?p=847

## 実装

2つのボタンを配置し、それぞれに異なった音をマッピング。

```swift
import UIKit
import AVFoundation

class ViewController: UIViewController {
    
    //共通で使うのでグローバルで宣言
    var audioPlayerInstance1 : AVAudioPlayer!
    var audioPlayerInstance2 : AVAudioPlayer!

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //音の初期化
        makeSound()
    }
    
    //音の初期化
    func makeSound(){
        
        //ファイル設定
        
        //sound1
        let soundFilePath1 = Bundle.main.path(forResource: "decision-4", ofType: "mp3")!
        let sound1:URL = URL(fileURLWithPath: soundFilePath1)
        
        //sound2
        let soundFilePath2 = Bundle.main.path(forResource: "decision-1", ofType: "mp3")!
        let sound2:URL = URL(fileURLWithPath: soundFilePath2)
        
        
        //AVAudioPlayerのインスタンス作成
        do {
            audioPlayerInstance1 = try AVAudioPlayer(contentsOf: sound1, fileTypeHint:nil)
            audioPlayerInstance2 = try AVAudioPlayer(contentsOf: sound2, fileTypeHint:nil)
            
        } catch {
            
            print("AVAudioPlayerインスタンス作成失敗")
            
        }
        
        //バッファに保持
        audioPlayerInstance1.prepareToPlay()
        audioPlayerInstance2.prepareToPlay()
        
        print("Sound準備完了")
    }


    @IBAction func playSound(_ sender: Any) {
        
        //再生
        audioPlayerInstance1.play()
        
    }
    @IBAction func playSound2(_ sender: Any) {
    
    	//再生
        audioPlayerInstance2.play()
    }
}
```
Python3系の基礎文法（Pythonの反復処理をいくつか）

# 概要
O'Reilly Japan の「入門 Python 3」を参考に、Python3系の基礎文法を勉強します。
同じようにPythonを勉強したいと思ってる方の参考になれば幸いです。

# 反復処理
反復処理により、リストの値の取り出すコードを比較してみる。
###普通に書いた反復処理
```py3
>>> target = ['AAA', 'BBB', 'CCC']
>>> current = 0
>>> while current < len(target):
...     print(target[current])
...     current += 1
...
AAA
BBB
CCC
```
###Pythonらしく書いた反復処理
```py3
>>> target = ['AAA', 'BBB', 'CCC']
>>> for out in target:
...     print(out)
...
AAA
BBB
CCC
```
２つ目のコードの方が、Pythonらしい良いコードになる。
リストはPythonのイテラブル（イテレータに対応している）オブジェクトであるため、for文で処理すると、リストの要素が一つずつ取り出される。

#for文
リストの他にも、文字列、タプル、辞書、集合、その他のようにPythonのイテレータオブジェクトが存在する。

##文字列
```py3
>>> target = 'python'
>>> for out in target:
...     print(out)
...
p
y
t
h
o
n
```
##辞書
###キーの取り出し（その１）
```py3
>>> num = {0:'zero', 1:'one', 2:'two'}
>>> for out in num:
...     print(out)
...
0
1
2
```
###キーの取り出し（その２）
```py3
>>> num = {0:'zero', 1:'one', 2:'two'}
>>> for out in num.keys():
...     print(out)
...
0
1
2
```
###値の取り出し
```py3
>>> num = {0:'zero', 1:'one', 2:'two'}
>>> for out in num.values():
...     print(out)
...
zero
one
two
```
###タプル形式での取り出し
```py3
>>> num = {0:'zero', 1:'one', 2:'two'}
>>> for out in num.items():
...     print(out)
...
(0, 'zero')
(1, 'one')
(2, 'two')
```
###タプル形式での取り出し（応用）
取り出しと代入をワンステップで処理する場合

```py3
>>> num = {0:'zero', 1:'one', 2:'two'}
>>> for key, value in num.items():
...     print('key:', key, 'value:', value)
...
key: 0 value: zero
key: 1 value: one
key: 2 value: two
```

##zip()を使った反復処理
zip()を使うと、複数のシーケンスを並列的に反復処理できる。

```py3
>>> list1 = ['1', '2', '3']
>>> list2 = ['A', 'B', 'C']
>>> list3 = ['one', 'two', 'three']
>>> for out1, out2, out3 in zip(list1, list2, list3):
...     print('list1:', out1, 'list2', out2, 'list3', out3)
...
list1: 1 list2 A list3 one
list1: 2 list2 B list3 two
list1: 3 list2 C list3 three
```
###zip()の返却値でリストを生成
```py3
>>> list1 = ['1', '2', '3']
>>> list2 = ['A', 'B', 'C']
>>> list( zip(list1, list2) )
[('1', 'A'), ('2', 'B'), ('3', 'C')]
```
###zip()の返却値で辞書を生成
```py3
>>> list1 = ['1', '2', '3']
>>> list2 = ['A', 'B', 'C']
>>> dict( zip(list1, list2) )
{'1': 'A', '2': 'B', '3': 'C'}
```
##range()による数値シーケンスの作成
###動作イメージ
```py3
>>> for x in range(0, 3):
...     print(x)
...
0
1
2
```
###数値シーケンスのリスト作成
```py3
>>> list( range(0, 3) )
[0, 1, 2]
```
クラウドサーバでTensorFlow　その12

#概要
クラウドサーバでTensorFlowやってみた。
ajaxで画像アップして、戻りに画像貰うやつ。

#環境
クラウド idcf
linux debian-8.11
tensorflow 1.2
gpu 無し

#写真
![](http://jsdo-static-contents.s3.amazonaws.com/images/capture/8/J/N/8JNU.jpg?t=1500178518)

#サンプルコード

```
var uploadFile;
document.getElementById('imageFile').addEventListener("change", function() {
    var image = new Image();
    var reader = new FileReader();
    reader.onload = function(e) {
        canvas = document.getElementById('canv_original');
        canvas.width = 224;
        canvas.height = 224;
        ctx = canvas.getContext("2d");
        image.onload = function() {
            ctx.drawImage(image, 0, 0, 224, 224);
        }
        image.src = reader.result;
    };
    uploadFile = this.files[0];
    reader.readAsDataURL(uploadFile);
}, true);
document.getElementById('upload').addEventListener("click", function() {    
	var img = canvas.toDataURL('image/jpeg');
    $.ajax({
		url: 'http:///cgi-bin/test6.py',
		type: 'POST',
		data: {
            img: img
        },
		dataType: 'text',
		success: function(data) {
            var koko = document.getElementById('koko');
            koko.src = 'data:image/jpeg;base64,' + data;
        },
        error: function(res) {
            alert('err');
        }
	});
}, true);
```

#成果物
http://jsdo.it/ohisama1/8JNU
Xamarin アプリケーションをWifi経由でAndroid実機デバックを有効にする方法

# 初めに
ここではUSB接続でのAndroid実機デバックをしている人が、wifi経由でデバックする手順を記載します。

下記のページを参考にしています。
https://developer.xamarin.com/guides/android/getting_started/installation/set_up_device_for_development/

# 手順
1. デバックするAndroid端末のIPアドレスを調べる。
2. Android端末をUSBで接続する。
3. ADB(Android Debug Bridge)をTCP/IPに変更する。

## 1. デバックするAndroid端末のIPアドレスを調べる。
Androidのバージョンによって、IPアドレスの調べ方は違いと思いますが、
今回はAndroid 6を基準に記載します。

「設定」→「Wi-Fi」→「右上の設定ボタン」→「設定」
IPアドレスに記載されているIPアドレスを控えてください。

## 2. Android端末をUSBで接続する。
USBでAndroid端末をPCに接続します。
すでにUSB接続でのデバックを行っている人は大丈夫だと思いますが、以下のことに気を付けてください。

+ Android 端末がデバックモード有効であること。
+ Android SDKマネージャーでGoogle USB Driverがインストールされていること。
+ USB接続時にUSBの使用が「充電」で接続されていること。（MTPやMIDIではないこと）

## 3. ADB(Android Debug Bridge)をTCP/IPに変更する。

### Visual Studioから、ADPコマンドプロンプトを起動します。
以下のボタンを押下して、コマンドプロンプトを起動してください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/130298/3fa6e805-302f-6e01-fbe9-0e31d3086ee5.png)


### ADPをUSBからTCP/IPに変更します。
コマンドプロンプトで下記を実行してください。
```
adb tcpip 5555
```
5555の部分はポートを指定しています。
自由に変更してよいですが、他のアプリケーションやシステムと重複しないポートを指定してください。

### 対象の端末のIPアドレスを指定して、接続します。
コマンドプロントで下記を実行してください。
```
adb connect 192.168.1.28:5555
```
IPアドレス部に端末のIPアドレスに変更してください。
また、ポートはadp tcpipコマンドで指定したポートを指定してください。

以上で完了です。

# TCP/IPデバックからUSBデバックに戻す方法
以下をADPコマンドプロンプトで実行してください。
```
adb usb
```

上記コマンドを実行することでUSBデバックモードに戻すことが可能です。
Macに入ってる初期状態のApacheでFuelPHPを動作させる為のhttpd.conf設定

先日 MacBook Pro が壊れてしまって新しいものに変えたが、以前まで動いていた FuelPHP のシステムが動かなくなってしまったので、FuelPHP を動くようになるまでのメモを残そうと思った。

# 環境

* MacOS Sierra バージョン 10.12.5
* Apache/2.4.25

# やること

`/etc/apache2/httpd.conf` を開き、下記の3箇所を修正。

## .htaccess の有効化

```httpd.conf
DocumentRoot "/Library/WebServer/Documents"
<Directory "/Library/WebServer/Documents">
  ...
  AllowOverride None
  ...
</Directory>
```

↓

```httpd.conf
DocumentRoot "/Library/WebServer/Documents"
<Directory "/Library/WebServer/Documents">
  ...
  AllowOverride All
  ...
</Directory>
```

## mod_rewrite の有効化

```
#LoadModule rewrite_module libexec/apache2/mod_rewrite.so
↓
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
```

## php の有効化

今回は面倒なので php5 でやっているが、php7 でやりたい人も似たようなイメージ。

```
#LoadModule php5_module libexec/apache2/libphp5.so
↓
LoadModule php5_module libexec/apache2/libphp5.so
```

## apache 再起動

```
sudo apachectl restart
```

# まとめ

何か上手くいかないことがあったら `LoadModule` がコメントアウトされてることが多いことに気がついた。
sympyで「2分法の理論と実装」を参考にした

(参考)「2分法の理論と実装」
http://qiita.com/Ren112358/items/f2c0bbc90810c040a2e5

```python
from sympy import *
pos = Symbol("pos", positive=True)
result=solve(sin(pos/4)-cos(pos/4),pos)
print(result)
#[pi]
```
【演習】PythonでWatsonアプリを作る！#2【翻訳機能】

ご縁あって[developer Works](https://www.ibm.com/developerworks/)の中の[courses](https://developer.ibm.com/courses/)の1つ、[Create Python apps with IBM Watson and IBM Bluemix](https://developer.ibm.com/courses/all/create-python-apps-ibm-watson-ibm-bluemix/)をやってみました。

前回はテキストのepisode-1に取り組み、入力した言語が何語か判別させました。
今度はepisode-2に入り、翻訳機能をアプリに加えていきます。

src/episode-2/django/src/projwatsonに移動します。
テキストエディターで#1で書き換えた諸々のファイルをもう一度書き換えます。
- requirements.txt
- manifest.yml
- runtime.txt
- wl.py
など

試しに```python manage.py runserver```でローカルホスト上でアプリを動かしてみます。
*私の場合、ローカルのWatson Developer Cloudが古くてWatson Translatorが動かなかったので、ここで```pip install --upgrade watson-developer-cloud```でバージョンを更新しました。

アプリを実行すると、翻訳機能が加わりました
![スクリーンショット 2017-07-16 11.52.39.png](https://qiita-image-store.s3.amazonaws.com/0/141025/fc95b17f-3532-7481-d4be-c5826e88612f.png)

精度はまぁまぁ
![スクリーンショット 2017-07-16 11.54.12.png](https://qiita-image-store.s3.amazonaws.com/0/141025/9d33c66c-d31e-c8b5-dafc-bc56d1ef162a.png)

![スクリーンショット 2017-07-16 11.53.37.png](https://qiita-image-store.s3.amazonaws.com/0/141025/000f01d2-145a-7e37-80ab-3b4308a09655.png)

以下、引用となりますが、wl.pyのこの辺で言語の判別を行なっています。
![スクリーンショット 2017-07-16 11.56.32.png](https://qiita-image-store.s3.amazonaws.com/0/141025/20dccb4d-c693-c90b-0593-bcabe5e53e90.png)

翻訳
![スクリーンショット 2017-07-16 12.01.26.png](https://qiita-image-store.s3.amazonaws.com/0/141025/1933a4d6-cdbc-743e-49f5-cb4662a2fc63.png)

Watsonから得られたデータの表示方法
![スクリーンショット 2017-07-16 12.03.21.png](https://qiita-image-store.s3.amazonaws.com/0/141025/2b8e62ef-7893-3ea4-0acb-8a7456cd8c91.png)
Cisco IOSの障害検知時によく使うshowコマンド

Cisco IOSで障害切り分け時によく使うshowコマンドを以下にまとめました。

## 機器状態の確認

* **sh ver** : OSバージョン、再起動からの経過時間、及び再起動の理由などを確認
* **sh log** : ログ情報を表示
* **sh inventory** : モジュール情報を確認。ただしLink DownしているポートのSFP情報などは表示されない
* **sh inventory raw** : 全てのモジュール情報が表示する
* **sh env all** : 温度やファンの状態などを表示する
* **sh proc cpu** : CPU使用率を表示する
* **sh proc cpu sort** : CPU使用率を表示する。プロセスごとのCPU使用率が降順ソートされる
* **sh proc cpu history** : 過去のCPU使用率を表示する

## インターフェース(I/F)の確認（物理I/Fの確認)

* **sh int status** : 全体の物理I/F状態を確認
* **sh int status | exc disa** : 全体の物理I/F状態を確認（ShutdownされているI/Fを除く）
* **sh int "物理I/F"** : 特定の物理I/Fについて詳細情報を確認
* **sh int count** : In/Out方向の通過パケット数、バイト数を確認
* **sh int count error** : In/Out方向のパケットエラー数を確認

## I/Fの確認（Vlan I/Fの確認）

* **sh vlan (ルータ系ではsh vlan-switch）** : 定義されているVlanを確認
* **sh int trunk** : Trunk Vlanと物理I/Fのマッピング情報を確認
※Access Vlanと物理I/Fのマッピングは**sh int status**か**sh vlan**で確認できる

* **sh int "物理I/F" switch**　：　特定の物理I/FについてVlanの割当状況を確認
* **sh int vlan "vlan num"** : 特定のVlanについて詳細情報を確認

## STPの確認

* **sh span summary** : 各Spanning-Treeの概要を表示
* **sh span vlan "vlan num"** : 特定VlanのSpanning-Treeの詳細を表示

## EtherChannelの確認

* **sh etherchannel summary** : 各EtherChannelの概要を表示
* **sh etherchannel port-channel** : 各EtherChannelの詳細を表示

## I/Fの確認（L3設定の確認）

* **sh ip int brief** : 各L3 I/F(Routed Port, SVI)のIPアドレス情報を確認
* **sh ip int brief | exc unass** : 各L3 I/FのIPアドレス情報を確認（IPアドレス未割当I/Fを除く）
* **sh ip int "I/F"** : 特定のL3 I/FについてIPアドレス情報の詳細を確認

## HSRPの確認

* **sh standby brief** : 各I/FのHSRPステータスを確認

## ルーティングの確認（OSPF, BGP）

* **sh ip ospf nei** : OSPF Neighborの確認
* **sh ip bgp summ** : BGP Peerの確認
* **sh ip bgp summ | inc Idle|Active** : BGP Peerを確立できないピア先を表示
* **sh ip bgp regexp ^$** : 自身のASからBGPで広報している経路情報を確認
* **sh ip route** : ルーティングテーブルの確認
* **sh ip route "NW address" long** : 指定したネットワークアドレスレンジに収まるすべての経路情報を出力
* **sh ip cef** : CEFの情報を確認。まれに**sh ip route**と**sh ip cef**の結果に違いが出ることがある

## access-listの確認

* **sh access-lists "num|name"** : 特定ACLの内容確認

## error disableの理由を確認

* **sh errdisable recovery** : Error Disableの理由、自動復旧までの残り時間を確認

## コンフィグ確認
* **sh run**
* **sh run | sec router** : ルータセクションのコンフィグを確認
* **sh run int giga xx** : 特定I/Fのコンフィグを確認

## show tech

* **sh tech** : どうしようもないときはshow techを採取し保守ベンダに丸投げ

## おまけ（ping, traceroute）

* **ping "destination address" repeat "repeat num" size "packet size"**
* **traceroute "destination address"**
Xcode8.3でPods-frameworks.sh: No such file or directory となる

# 実施環境
* MacOS Sierra ver 10.12.5
    * MacBookAir 11inch
* Xcode8.3.3
* Swift3
* CocoaPods ver 1.2.1

# そもそも今回やりたかったこと
単純にプロジェクトファイル名がいけてなかったのでそれのRenameをしたかったという要件。
Xcodeではプロジェクトファイル名を変えるのも一苦労であり、[Xcodeでプロジェクト名を変更する方法 (Xcode8.0)](https://tech.librastudio.co.jp/index.php/2016/10/05/post-1038/)を参照させていただきました。ありがとうございます。

その中で上記サイトになく、今回ぶちあたった問題はタイトルの通り。

# 前提条件
1. もともとpod installで作ったプロジェクトで開発
1. 何かしらの理由でプロジェクト名を変更したい
2. 作り直し後も引き続きCocoaPodsは利用する

# 解決方法
[Xcodeでプロジェクト名を変更する方法 (Xcode8.0)](https://tech.librastudio.co.jp/index.php/2016/10/05/post-1038/)の通り、Renameをかけていきますが、最後に下記のようなエラーがでました。

```
/Users/XXXX/Library/Developer/Xcode/DerivedData/XXXX-XXXX/Build/Intermediates/XXXX.build/Debug-iphonesimulator/XXXX.build/Script-XXXX.sh: line 2: /Users/XXXX/workspace/XXXX/XXXX/Pods/Target Support Files/Pods-XXXX/Pods-XXXX-frameworks.sh: 
No such file or directory
```

Pods-XXX-Frameworkを取り込んでいるあたりがダメっぽいです。
[TARGETS]->[XXX]->[Build Phases]->[Copy Pods Resources]に下記の表記があり、旧名のプロジェクトの名前を持ったシェルをコピーしようとしています。

![pod.png](https://qiita-image-store.s3.amazonaws.com/0/123578/5a4b8af0-2c9d-64fc-548a-8212c7e25b2b.png)


上記のEmbed Pods FrameworksとCopy Pods Resourcesに入っているパスで旧プロジェクト名となっている箇所を新プロジェクト名に変更して再ビルドするとビルド成功します。


プロジェクト名変えるのめんどくさいですね。。。他の人々にも参考になれば。
FragmentにRealmObjectを渡すための手順と、Parcelerの使い方

# はじめに
Realmを利用していて、Fragmentに渡したいなと思ったときに、Serializable実装してBundleにputSerializableしたらonPauseで強制終了してしまった。
そもそも渡せるのかということを含め調べて実装方法が分かったのでメモする。
解決だけしたい人は結論を見てくださいな。

# やりたいこと
```java
public static Fragment newInstance(SampleRealmObject realmObject) {
    Bundle args = new Bundle();
    args.putParcelable("key", realmObject);
    ...
}
```

# 道のり
まずはじめに、RealmObjectは特に複雑なことをやっているわけではないモデルクラスだったので、Serializable実装すればputSerializableできるのではと考え実装してみた。
すると、うまく渡せてアプリが動いたのだが・・・、
画面を消したり、ホーム画面に戻ったときに、

```java
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = io.realm.SampleRealmObjectRealmProxy)
Caused by: java.io.NotSerializableException: io.realm.SampleRealmObjectRealmProxy$SapmleRealmObjectColumnInfo
```

と言われてしまった。
Proxyが絡むからSerializeは無理なのか・・・と思い、Parcelableなら行けるかと思い調べてみると
この記事を発見https://realm.io/jp/docs/java/latest/#parceler
リンク先が載っているにも関わらず、それを読みもせず愚直にRealmに記載されていた記述を追加

```java
compile "org.parceler:parceler-api:1.0.3"
apt "org.parceler:parceler:1.0.3"
```
うまく動かないので調べていたらこちらの記事を発見http://qiita.com/kazhida/items/affe4488078a2e625d33#%E3%82%A2%E3%83%8E%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA
記述を追加してビルドすると、通ったので一件落着。
と思いきや、警告が表示された。

```java
Warning:Using incompatible plugins for the annotation processing: android-apt. This may result in an unexpected behavior.
```
android-aptは良くなくて、もしかしたら期待外の動作をするかもよ。と。
それでググってみると下記の記事が見つかる。
https://stackoverflow.com/questions/42632662/android-studio-warning-using-incompatible-plugins-for-the-annotation-processing
ベストアンサーを読むと、ButterKnifeの例が出ていて
『apply plugin: 'com.neenbedankt.android-apt'を消しましょう』と書いてある
試しに消して実行してみると、annotationProcessorがない的なエラーが。
見比べると、自分のコードにはannotationProcessorがなかったので、これはParcelerにもあるのでは？とライブラリのページに行ってみて検索で引っ掛けるとgradleのところに書いてあった。
それを記述すると警告無しで完了。
Realmの記載を鵜呑みにするべきではなかったというお話。
(もしかしたら何か良い方法があるのかもしれないが)


# 結論
1.アプリのbuild.gradleに記載を追加

```groovy
compile 'org.parceler:parceler-api:1.1.9'
annotationProcessor 'org.parceler:parceler:1.1.9'
```

詳しくはこちらhttps://github.com/johncarl81/parceler

2.RealmObjectに@Parcelを追加

```java
@Parcel(implementations = SampleRealmObjectRealmProxy.class,
        value = Parcel.Serialization.BEAN,
        analyze = SampleRealmObject.class)
public class SampleRealmObject extends RealmObject {
    ...
}
```

詳しくはこちらhttps://realm.io/jp/docs/java/latest/#parceler

3.putParcelableするときにParcels.wrapを加える

```java
public static Fragment newInstance(SampleRealmObject realmObject) {
    Bundle args = new Bundle();
    args.putParcelable("key", Parcels.wrap(realmObject));
    ...
}

// 復元するときはunwrap
SampleRealmObject realmObject = Parcels.upwrap(getArguments().getParcelable("key"));
```

以上！
Ansible入門 ② webとdbの環境に対して、Ansibleコマンドを実行してみる

前回まででvagrantを使って仮想環境を立てるのと、Ansibleのインストールが終わっていますので
今回はAnsibleのコマンドを使用してwebとdbに対してpingというコマンドが実行できるところまでを確認してみましょう。

ちなみに前回の記事は[コチラ](http://qiita.com/sgp/items/93689f1814a192b5077e)から

![image.png](https://qiita-image-store.s3.amazonaws.com/0/163591/33235c76-17ad-bf3c-303d-b3505d21cf82.png)

# ansible コマンドを叩いてみる

ansibleコマンドを実行するためには、Inventoryファイルというものが必要です。

Inventoryファイルとはansibleコマンドを実行した時にデフォルトで読みにいくファイルのことですが、
ここにはwebやdbサーバの情報なんかを書いておくことができます。
Ansibleが動作する対象のシステムを列挙するためのファイルってことですね。

それでは早速、Inventortyファイルを作っていきましょう。
ファイル名はなんでもいいですが、ここではinventoryというファイル名にしておきます。

```:inventory
[web]
192.168.43.52

[db]
192.168.43.53
```
動作対象となるwebとdbを指定してやればOKです。

それではansibleコマンドを実行してみます。

```
[vagrant@host ~]$ ansible all -i inventory -m ping
```
まずは簡単にコマンドの説明をしておきましょう。

```
all 　というのは「webとdbどちらにも実行しますよ」という意味。webと指定すればwebだけに対して実行されます。
-i  　でinventoryファイルを指定します。ここではinventoryというファイル名ですね
-m  　は実行するモジュール（コマンド）を指定してやります。pingというモジュールにしてみました。接続を確認するコマンドですね。
```

それでは実行結果

```
[vagrant@host ~]$ ansible all -i inventory -m ping
192.168.43.52 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
192.168.43.53 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
```

こんな風に帰ってくれば成功です。ansibleコマンドが実行できていますね。

## default inventoryファイルの設定

`-i inventory`と毎回打つのは面倒ですよね？
ansibleの設定ファイルに書いておきましょう

```
[vagrant@host ~]$ vi ./ansible.cfg
```

```:ansible.cfg
[defaults]
hostfile = ./inventory
```
としておけばデフォルトでinventoryを呼んでくれます。

先ほどのansibleコマンドも以下のように`-i inventory`を省略することができます。

```
[vagrant@host ~]$ ansible all -m ping
192.168.43.52 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
192.168.43.53 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
```

いい感じですね:thumbsup:
それでは次回はplaybookを書いてwebにnginxを入れていきます。
Ruby ブロック

## ブロックについて

```
オブジェクト.メソッド名 do |ブロック変数|
  ブロック定義本体
end
```

do〜endの代わりに　{〜}　でもOK

``` 
オブジェクト.メソッド名{|ブロック変数|
  ブロック定義本体
}
```

## ブロックを受け取るメソッドの作成
### yieldを使ってみる
ブロック定義本体を実行するには「yield」を利用する。

```ruby:
def block_test
  5.times {yield()}
end

block_test{
  puts "ブロック本体"
}
```

```:実行結果
ブロック本体
ブロック本体
ブロック本体
ブロック本体
ブロック本体
```

ブロックを宣言しない場合はエラーとなる。

```ruby:ブロック宣言しない
def block_test
  5.times {yield()}
end

block_test
```

```:実行結果
block_test.rb:2:in `block in block_test': no block given (yield) (LocalJumpError)
```

ブロックの有無は「block_given?」で判定が行える。

```ruby:ブロックの有無
def block_test
  if block_given?
    5.times {yield()}
  else
    puts "ブロックは宣言されていません"
  end
end

block_test
block_test{
  puts "ブロック本体"
}
```

```:実行結果
ブロックは宣言されていません
ブロック本体
ブロック本体
ブロック本体
ブロック本体
ブロック本体
```

### ブロック変数を使ってみる

`yield`に値を渡すことでブロック変数を使用できる。

```ruby:ブロック変数を使う
def block_test
  if block_given?
    5.times {|i| yield(i)}
  else
    puts "ブロックは宣言されていません"
  end
end

block_test
block_test{|j|
  puts "ブロック本体#{j}"
}
```

```:実行結果
ブロックは宣言されていません
ブロック本体0
ブロック本体1
ブロック本体2
ブロック本体3
ブロック本体4
```

### メソッドに引数を定義する
メソッドに引数を定義できる

```ruby:メソッドに引数を定義
def block_test(t)
  if block_given?
    t.times {|i| yield(i)}
  else
    puts "ブロックは宣言されていません#{t}"
  end
end

block_test(9)
block_test(3){|j|
  puts "ブロック本体#{j}"
}
```

```:実行結果
ブロックは宣言されていません9
ブロック本体0
ブロック本体1
ブロック本体2
```

### ブロックをProcとして受け取る

```ruby:ブロックをProcとして受け取る
def block_test(t, &block)
  if block
    t.times {|i| block.call(i)}
  else
    puts "ブロックは宣言されていません#{t}"
  end
end

block_test(9)
block_test(3) do |j|
  puts "ブロック本体#{j}"
end
```

```:実行結果
ブロックは宣言されていません9
ブロック本体0
ブロック本体1
ブロック本体2
```

### Procを渡す

`Proc.new`でProcを生成して`call`メソッドで実行する。

```ruby:Procを渡す
def block_test(t, f=nil)
  if f
    t.times {|i| f.call(i)}
  else
    puts "Procは渡されていません#{t}"
  end
end

procTest = Proc.new{|j|
  puts "Proc本体#{j}"
}
block_test(9)
block_test(3, procTest)
```

```:実行結果
Procは渡されていません9
Proc本体0
Proc本体1
Proc本体2
```

### Procオブジェクトを「&変数名」でブロックとして渡す

指摘を受けての追記

```ruby:Procオブジェクトをブロックとして渡す
def block_test(t)
  if block_given?
    t.times { |i| yield(i) }
  else
    puts "ブロックは宣言されていません#{t}"
  end
end

procTest = Proc.new{|j|
  puts "ブロック本体#{j}"
}
block_test(9)
block_test(3, &procTest)
```

```:実行結果
ブロックは宣言されていません9
ブロック本体0
ブロック本体1
ブロック本体2
```

`&`をつけて渡すとブロックとして認識してくれるので呼び出されるメソッド側はそのままでも大丈夫なんですね。 
最初のは色々と余計なことをしているようでこちらのがスッキリしてますね。
クラウドサーバでTensorFlow　その11

#概要
クラウドサーバでTensorFlowやってみた。
tensorflowのinceptionで1000分類してみた。
ローカルファイルに、対応してみた。

#環境
クラウド idcf
linux debian-8.11
tensorflow 1.2
gpu 無し

#写真

![](http://jsdo-static-contents.s3.amazonaws.com/images/capture/a/8/J/a8Jr.jpg?t=1500170164)

#サンプルコード

```
var uploadFile;
document.getElementById('imageFile').addEventListener("change", function() {
    var image = new Image();
    var reader = new FileReader();
    reader.onload = function(e) {
        canvas = document.getElementById('canv_original');
        canvas.width = 224;
        canvas.height = 224;
        ctx = canvas.getContext("2d");
        image.onload = function() {
            ctx.drawImage(image, 0, 0, 224, 224);
        }
        image.src = reader.result;
    };
    uploadFile = this.files[0];
    reader.readAsDataURL(uploadFile);
}, true);
document.getElementById('upload').addEventListener("click", function() {
	var img = canvas.toDataURL('image/jpeg');
    $.ajax({
		url: 'http:///cgi-bin/test5.py',
		type: 'POST',
		data: {
            img: img
        },
		dataType: 'json',
		success: function(data) {
			if (data.status)
            {
				$('#report').html('This is ' + data.num + '.');
			}
            else
            {
				$('#report').html('これは、分かりません');
			}
		},
        error: function(res) {
            alert('err');
        }
	});
}, true);


```


#成果物

http://jsdo.it/ohisama1/a8Jr
ldap_bind_dnは識別名ではエラーになり、userPrincipalNameでうまくいきました

海外を含む広い拠点で統一的に使われているActive Directoryドメインコントローラの認証機能（ユーザ・アカウント）を、社内のごく限られたメンバーだけに立てたローカルサーバで使いたくて、wadahiroさんの「[OpenLDAPでActive Directoryに対してPass-Through 認証する](http://http://qiita.com/wadahiro/items/574cdb77ceeec37b2509)」を参考にチャレンジしたところ、最初は認証がうまくいかなかったのですが、userPrincipalNameを使うことでエラーを回避しました。

### エラー内容 ###

```
# testsaslauthd -u ユーザ名 -p パスワード
0: NO "authentication failed"
```

```
ldap_servers: ldap://yourad.org
ldap_search_base: dc=yourad,dc=org
ldap_filter: (cn=%u)
ldap_bind_dn: cn=suser,ou=users,dc=yourad,dc=org
ldap_password: secret
```

### 解決策 ###

```
ldap_servers: ldap://yourad.org
ldap_search_base: dc=yourad,dc=org
ldap_filter: (sAMAccountName=%u)
ldap_bind_dn: suser@yourad.org
ldap_password: secret
```

suserは検索用にActive Directoryドメインコントローラにユーザとして登録してあります。secretはそのユーザのパスワードです。

変更点はldap_bind_dnです。カンマで区切る識別名ではなく、userPrincipalNameにするとうまくいきました。

正直理由はわかりません。同様の問題（Active DirectoryをOpenLDAPから使う際の問題）の解決方法でこの方法が採られていることが多いためやってみました。
cloudfrontでBASIC認証

備忘録の意味でも投稿して置きます。

# 前提
* カスタムオリジンにEC2（Webサーバにはnginxを利用）設定済
* nginxにて、BASIC認証の設定済

# 手順
cloudfront コンソール画面より
behaviorにて、
<img width="888" alt="スクリーンショット 2017-07-16 10.29.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/64537/06673e94-1dab-b32e-519b-a728dc6bbcbf.png">

## 下記の通り設定をする
forward Headers： Whitelist
Whitelist Headers: Authrization

以上。
Macのデスクトップ切り替え時のエフェクトを減らして、切り替えを多少すばやくする

# 背景
[macOSでディスプレイ1枚で作業する技術](http://qiita.com/saboyutaka/items/d6cfd2a2b60f1a374d60 "macOSでディスプレイ1枚で作業する技術")
こちらの記事を参考に、アプリケーションごとにデスクトップを割り当てて、キーボードショートカットでさくさく切り替える環境をつくろうとしてたんですが、「TopSpaces2でトランジションのアニメーションをオフにする」ってのを、できればOSの設定で対応できないかなーと探していたところ、こちらの設定でそこそこ満足いったので共有します。

# 概要
デスクトップ切り替え時やMission Controlなどの画面切り替え時のモーション効果を減らす（スライドからディゾルブに変更）することで、切り替え時の体感を多少良くします。

# 環境
```
macOS Sierra
10.12.5
```
※ 参考記事を読む限り、以前のバージョンでも設定できそうです。

# 設定
1. 「システム環境設定」→「アクセシビリティ」
2. 「ディスプレイ」を選択
3. 「視差効果を減らす」にチェック

<img width="780" alt="macOS アクセシビリティ設定 視差効果を減らすにチェック" src="https://qiita-image-store.s3.amazonaws.com/0/188919/672b4e6c-47b7-9c30-8245-a9b9652ef123.png">

これだけ！

# 結果
![reduce_motion.gif](https://qiita-image-store.s3.amazonaws.com/0/188919/84bba906-68be-83f4-2b7c-59b39d4a9e1b.gif)
※ 個別のデスクトップに配置してあるアプリケーションを、キーボードショートカットで切り替えています。

# 参考にした記事
[How can I disable animation when switching desktops in Lion?](https://apple.stackexchange.com/questions/17929/how-can-i-disable-animation-when-switching-desktops-in-lion#answer-255220)
[macOS Sierra: 画面の視差効果を減らす](https://support.apple.com/kb/PH25204?viewlocale=ja_JP&locale=ja_JP)
巨大なUTF8テキストファイルを一行ずつ読み込む

使用OS: macOS 10.12

JXA の app.read() では utf8テキストファイル を読み込むことができない。そこで read だけは AppleScript で実装することに。

```js:example.js
app_readline = Library('FileHandle').readline

app = Application.currentApplication()
app.includeStandardAdditions = true

p = '/Users/uchcode/Desktop/巨大テキスト.txt'

try {
    let f = app.openForAccess(p)
    while(1) {
        let t = app_readline(f)
        // ここで取得した1行のテキストを処理する
        console.log(t)
    }
} catch(e) {
    // console.log( Automation.getDisplayString(e) )
    // -39 eofを超えた
    if (e.errorNumber != -39) throw e
} finally {
    try { app.closeAccess(p) } catch(e) {
        // console.log( Automation.getDisplayString(e) )
        // -38 pは開かれていない
        if (e.errorNumber != -38) throw e
    }
}
```

```applescript:FileHandle.scpt
on readline(theFile)
	return read theFile before "\n" as «class utf8»
	--return read theFile before return as «class utf8»
end readline
```

FileHandle.scpt は ~/Library/Script Libraries/FileHandle.scpt へ配置。
シェルスクリプトの引数を外部ファイルに外出しする

#シェルスクリプトの引数を外部ファイルに定義する
test.txt

```
TEST=TEST!
```

test.sh

```
\#!/bin/sh

. ./test.txt

echo TEST=$TEST
```

実行結果

```
temp$ ./test.sh
TEST=TEST!
```

#引数ファイルを動的に指定する

使用する外部ファイルを動的に変えたい場合はファイル名を引数にします。

```
#!/bin/sh

. ./$1

echo TEST=$TEST
```
実行結果

```
temp$ ./test.sh test.txt
TEST=TEST!
```
Python IDLE起動時のWARNINGを解消する

Python 3.6をインストールして、「さて”Hello world”でも実行しようかな」と
IDLEを初回起動したときに下記の警告が発生したので、その解消の話。

【警告内容】
WARNING: The version of Tcl/Tk (8.5.9) in use may be unstable.
Visit http://www.python.org/download/mac/tcltk/ for current information.

![スクリーンショット 2017-07-16 8.20.53.png](https://qiita-image-store.s3.amazonaws.com/0/86172/21052e26-26f0-032e-3564-4edc672424ce.png)

警告文にあるURLにいくと、下記のようにOSのバージョンによってインストールする対象のモジュールについて記載があります

![FireShot Capture 11 - IDLE and tkinter with Tcl_Tk on macOS _ - https___www.python.org_download_ma.png](https://qiita-image-store.s3.amazonaws.com/0/86172/e130eed8-1f54-3e3e-7251-362a61b5c059.png)

OSのバージョンがMac OS Sierra（10.12）なので、「ActiveTcl 8.5.18.0」をインストールする

リンクをクリックするとActiveStateのページにいくので、「ActiveTcl 8.5.18.0」をインストールする

https://www.activestate.com/activetcl/downloads
![ダウンロード.png](https://qiita-image-store.s3.amazonaws.com/0/86172/37fdb682-3d66-3a33-3be0-1d9547f65be4.png)

![ダウンロード (1).png](https://qiita-image-store.s3.amazonaws.com/0/86172/b05090fc-5622-c24d-1b62-530983b76584.png)


インストーラーをダウンロードし、起動する
![スクリーンショット 2017-07-16 8.48.05.png](https://qiita-image-store.s3.amazonaws.com/0/86172/faa403cb-5767-0c42-0914-2414ee7df575.png)


特にオプションとかもないので、「続ける」を押していって、インストールを完了させる
![スクリーンショット 2017-07-16 8.46.16.png](https://qiita-image-store.s3.amazonaws.com/0/86172/0e572f2c-36dd-b4cd-770e-da4fba4fa4af.png)

PythonのIDLEを起動してみる
まだ警告が出る…

![スクリーンショット 2017-07-16 8.20.53.png](https://qiita-image-store.s3.amazonaws.com/0/86172/9f90cb9f-fa59-e43f-eaf0-1b682ffc9cc1.png)

調べてみるとPythonで使用されるTcl/Tkのバージョンは、
Pythonのインストール中に関連付けされていて、あとで変更はできないみたいです。

もう一度、Pythonをインストールし直して、PythonのIDLEを起動してみる
警告文がなくなりました！
![スクリーンショット 2017-07-16 8.46.54.png](https://qiita-image-store.s3.amazonaws.com/0/86172/e9c62500-48dc-5a41-ef05-e82cc82ccee7.png)

ネットの情報を調べてみると、この警告が出ても無視して普通にPythonが使えるようですが
初回起動していきなり警告が出ているのが気持ち悪かったので、解消させました。
同じ症状が出た方の一助となれば、幸いです。
DCGANで画像の自動生成

# 背景

いままで教師あり学習の分類問題ばかりやってきたので、少し気分を変えて、ディープラーニングで画像の生成とかやってみたい思った。

# DCGAN とは？

一言で言えば、与えられた画像データセットを元に、それによく似た感じの画像を出力してくれるシステム。詳しくは、
[TensorFlowによるDCGANでアイドルの顔画像生成](http://memo.sugyan.com/entry/20160516/1463359395)
あたりを参照のこと。

実際に自分でコードを書くのがおすすめ。コードを書くまでは何のことだかさっぱりわからなかったが、書いてみたら、なるほど、となった。
GANの動作原理は、「偽札を作る人と取り締まる警察」の関係に例えられる。偽札を作る人はより精巧な偽札を作ろうと努力し、警察は精巧な偽札も見破れるようにしようと努力する。そうすると偽札（ここでは生成される画像のこと）はどんどん精巧になって本物と区別がつかなくなるのだ。DCGAN では「偽札を作る人」「警察」をそれぞれ別のニューラルネットワークが担当する。

# 実装

[DCGANを実装してみた](https://github.com/elm200/image-generator-with-keras-dcgan)。

たぶん、[元論文](https://arxiv.org/abs/1511.06434)に近い実装は、[DCGAN implementation by TensorFlow](https://github.com/sugyan/tf-dcgan)。私は、これを Keras で実行してみたのだが、どうにもうまく行かなかった。

そこで、[keras-dcgan](https://github.com/jacobgil/keras-dcgan)に従ってみた。このサンプルコードでは、MNIST の数字をうまく学習している。ただ、問題点としては、この [issue](https://github.com/jacobgil/keras-dcgan/issues/5)にあるように、元論文とはかなり違うネットワーク構成を取っている。GAN(Generative Adversarial Network, 生成的敵対的ネットワーク？)であるのは確かだと思うが。

だから私の実装も GAN の雰囲気をつかむもの、という程度にとらえてもらえれば、と思う。

[Github](https://github.com/elm200/image-generator-with-keras-dcgan) から clone して、`python keras-dcgan.py` と実行すれば、とりあえず `gen_images` ディレクトリ以下に画像が生成され始める。`in_images` に学習したい任意の画像（のフォルダ）を入れてほしい。`in_images/images` に入っている初音ミクの画像は、[animeface-character-dataset](http://www.nurs.or.jp/~nagadomi/animeface-character-dataset/)からお借りしました。深く感謝します。

# 実行結果

[animeface-character-dataset](http://www.nurs.or.jp/~nagadomi/animeface-character-dataset/)の画像約15000枚に基づいて学習させた（これは Github のレポジトリには入っていない。各自追試したい場合は、animeface-character-dataset をダウンロードしてみてください）。

## 元の画像
![batch_images.png](https://qiita-image-store.s3.amazonaws.com/0/26146/f73cc2d3-65a5-b787-2b6f-bb9bca8c6f35.png)

## step 1000(のべ55000枚学習後)

![gen01000.png](https://qiita-image-store.s3.amazonaws.com/0/26146/31cfc8db-7eff-ded7-252c-a923b313f3ac.png)

## step 3000(のべ165000枚学習後)
![gen03000.png](https://qiita-image-store.s3.amazonaws.com/0/26146/fc9dd437-fd48-480b-b686-d974afe782c9.png)

## step 10000(のべ550000枚学習後)

![gen10000.png](https://qiita-image-store.s3.amazonaws.com/0/26146/6fe8cc1e-6331-16bd-563f-03dffd916a3e.png)

## step 29900(のべ1644500枚学習後)

![gen29900.png](https://qiita-image-store.s3.amazonaws.com/0/26146/56e5c16d-7686-0675-83c3-602adef34f76.png)

# 感想

今回の実装では、どうも過学習の影響が出やすいというか、元画像を完全にコピーした画像が生まれやすい傾向がある気がする。とはいえ、画像生成器(Generator)に乱数しか入力していないことを思えば、驚くべき学習能力ではある。GAN を安定的に使うのはなかなか難しいが、安定化の新しい手法もいろいろ提案されているようなので、余裕があるときに、また取り組んでみたい。
CakePHP3：postLinkのonclick時に独自の処理を走らせたい場合

CakePHPのpostLink、便利ですよね。ボタン1つで画像を削除するような機能を、次のような記述で簡単に実現できます

```postLink.php

$this->Form->create($post, ['type' => 'file', 'id' => 'create_post']);

    echo $this->Form->postLink(__('Delete'), [
         'controller' => 'MyImages',
         'action'     => 'delete',
         123
    ], [
         'block'   => true, // フォームの中にpostLinkを入れることはできないのでこの指定をし、後述のfetchをしてform外にpostLinkを設置する
         'class'   => 'delete_button',
         'id'      => 'delete_button_123'

    ]);
    // 2つ目のpostLink
    // 3つ目のpostLink

echo $this->Form->end();

echo $this->fetch('postLink');
```

postLinkが出力するHTMLは次のようになります：

```output.html
<form>
    <a href="#" class="delete_button" id="delete_button_123" onclick="document.post_ランダムなID.submit(); event.returnValue = false; return false;">Delete</a>
</form>

<form name="post_ランダムなID" style="display:none;" method="post" action="/my-images/delete/123">
  <input type="hidden" name="_method" value="POST"/>
  <input type="hidden" name="_csrfToken" autocomplete="off" value="（省略）"/>
  <div style="display:none;">
    <input type="hidden" name="_Token[fields]"   autocomplete="off" value="（省略）"/>
    <input type="hidden" name="_Token[unlocked]" autocomplete="off" value=""/>
    <input type="hidden" name="_Token[debug]"    autocomplete="off" value="（省略）"/>
  </div>
</form>
```

さて、postLinkはAタグにonclickを自動的に入れてくれるのでクリックするとフォームが投稿されますが、
ajaxを使ってsubmitしたい場合はこのonclickが邪魔になります。

そこで対策としてjQueryを使ってページの読み込み完了と同時にpostLinkが生成するonclickイベントを削ります。
次にaタグに対して独自のイベントハンドラを登録しその中に独自の処理を記述すると、submit前に独自処理を行うことが可能になります：

```submit.js
$(document).ready(function() {
    // 全てのリンクから、postLinkが自動生成するonclickを削除する
    $('.delete_button').removeAttr('onclick');

    // 全てのリンクのクリックイベントを拾うハンドラを登録する
    $('.delete_button').click(function(event){
        var selector_id   = event.target.id;
        var res           = selector_id.match(/^delete_button_([0-9]+)$/);
        var my_image_id   = res[1];

        // 投稿する対象のフォームをactionを元に特定する
        var form = $("form[action='/my-images/delete/" + my_image_id + "']");

        // フォームのurlを取得する
        var url  = $(form).attr("action");

        $.ajax({
            type:    'POST',
            cache:   false,
            url:     url,
            data:    $(form).serialize(), // securityコンポーネントを使っているのでフォームの全ての項目をsubmitする
            timeout: 5000,

        }).done(function(data, textStatus, jqXHR) {
            if (data.result == 'OK') {
                alert("画像の削除に成功しました");
            }else{
                alert("画像の削除に失敗しました");
            }
        }).fail(function(jqXHR, textStatus, errorThrown) {
            alert("画像の削除に失敗しました");
        });
        return false;
    });
});
```

参考URL：https://stackoverflow.com/questions/9750326/intercept-cake2-postlink-form-posts-with-jquery
クラウドサーバでTensorFlow　その10

#概要
クラウドサーバでTensorFlowやってみた。
どうして、俺のモデルは、学習しないんだろう。

#環境
クラウド idcf
linux debian-8.11
tensorflow 1.2
gpu 無し

#写真
784-625-10のsigmoid
コストは、softmax_cross_entropy_with_logits
オプチマイザーは、RMSPropOptimizer
ラーニングレイトは、0.05
100バッチを1000エピソード実行
タイトルは、accuracy



![mnist16.png](https://qiita-image-store.s3.amazonaws.com/0/18104/79db4c9c-2c39-ccde-9de3-9447a9d30001.png)
ubuntu16.04にMeCabを入れた話

日本語コーパスを作る必要があったので、MeCabを入れた話を書いておきます。

#1 MeCabとは
オープンソースの形態素解析エンジンです。
形態素解析って言いうのはざっくり書くと「単語の最小単位まで分解する」事です。英語だと"This is a pen."みたいに最小単位の単語がスペースで区切られているのですが、日本語だとくっついてるので解析して分解してやる必要があります。そうしないとゴニョゴニョできないので。
公式 URL: http://taku910.github.io/mecab/
ライセンス：

#2 MeCabのインストール
全面的にこのサイトを参照させていただきました。
https://gist.github.com/YoshihitoAso/9048005
ありがとうございました。m(__)m
一応手順を書いておくと、
$ sudo apt-get install mecab libmecab-dev mecab-ipadic
$ sudo aptitude install mecab-ipadic-utf8
$ sudo apt-get install python-mecab
最初がMeCabのコアのインストール、２番目はIPAの辞書のUTF8版、最後にpythonから呼び出すライブラリですね。

#3　Installできたかどうかの確認
今回はわかち書きをさせたかったので、以下のサンプルソースを作成。
<img width="232" alt="a.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/175066/0b5df06f-353b-67cd-b94d-02d256469431.jpeg">
動かした結果はこんな感じ。
<img width="239" alt="b.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/175066/2d1f8515-ff6d-2dc3-9beb-7ba4b7e6c779.jpeg">

#4 MeCabのオプションに関して
以下のサイトにMeCabのオプションに関してわかりやすく書かれています、感謝。
自分の場合はわかち書きだけしたかったので"-Owakati"だけで済みましたが、後で使うかもな。
http://www.mwsoft.jp/programming/munou/mecab_command.html
RIS Houdini for linux

distribution ubuntu 16.04 LTS


#Renderman Document#
https://rmanwiki.pixar.com/display/RfH/RenderMan+for+Houdini


##How to Set up

1: Install RenderMan Packege
https://renderman.pixar.com/view/renderman

2:Open Dir //(root)
```rpm -ivh 'download packege'```


3:Execution Installer
:$cd yourOpen dir"
```sudo 'RenderManInstaller'```


4:Download Renderman app
```
RenderMan ProServer21.0
RenderMan Example21.0
RenderMan Rix Library
```

5:Go to Houdini.env
Add Script
RMANTREE=/opt/pixar/RenderManProServer"-your version"

PATH=$PATH:$RMANTREE/bin

なくてもよかと...
HOUDINI_DEFAULT_RIB_RENDERER=prman21.0


6: Go to Houdini Preference
check on
 Pixer's RenderMan"-your version-"




All Clear!!!
---
##```Render On Fire```##

![Screenshot from 2017-07-16 02-07-06.jpg](https://qiita-image-store.s3.amazonaws.com/0/179218/3bb7fc75-102f-65a6-1e82-6e59e90969a1.jpeg)


---



Doc
```
RenderMan 21 operates purely on the modern RIS ray tracing system. The Reyes rendering techniques and the RenderMan Shading Language (RSL) are deprecated and unavailable in modern RenderMan.
```

Have a Enjoy(^o^)
minishiftのインストール(Windows10+VirtualBox)

OpenShiftのミニバージョン?のminishiftをWindows10 Home Edition(意識が低い)に入れてみました。

## ダウンロード
ここら辺から適当にダウンロード
https://github.com/minishift/minishift/releases
`#`virtualboxもなかったらインストール。
 
## インストール前に少し設定 

cmdを管理者権限で開いてこれをうつ。
`set path=<ダウンロードしてきたminishiftのexeファイルパス>;%PATH%`

メモリがデフォルトで2GBでさすがにきついので4GBにしてみる。
`minishift config set memory 4096`

## minishift起動

VirtualBoxの場合はオプションがいる。(HyperVがほしい)
`minishift start --vm-driver=virtualbox`

こんな感じではじまる。

```
Starting local OpenShift cluster using 'virtualbox' hypervisor...
-- Checking OpenShift client ... OK
-- Checking Docker client ... OK
-- Checking Docker version ... OK
-- Checking for existing OpenShift container ...
   Deleted existing OpenShift container
-- Checking for openshift/origin:v1.5.1 image ... OK
-- Checking Docker daemon configuration ... OK
-- Checking for available ports ... OK
-- Checking type of volume mount ...
   Using Docker shared volumes for OpenShift volumes
-- Creating host directories ... OK
-- Finding server IP ...
   Using 192.168.99.101 as the server IP
-- Starting OpenShift container ...
   Starting OpenShift using container 'origin'
   Waiting for API server to start listening
   OpenShift server started
-- Adding default OAuthClient redirect URIs ... OK
-- Installing registry ... OK
-- Installing router ... OK
-- Importing image streams ... OK
-- Importing templates ... OK
-- Login to server ... OK
-- Creating initial project "myproject" ... OK
-- Removing temporary directory ... OK
-- Checking container networking ... OK
-- Server Information ...
   OpenShift server started.
   The server is accessible via web console at:
       https://192.168.99.101:8443

   You are logged in as:
       User:     developer
       Password: developer

   To login as administrator:
       oc login -u system:admin
```

おわり。