OmniAICreator/Qiita-1.07M huggingface dataset:
Android Wear 2.0 Previewの実機への導入手順

# はじめに

先日開催されたばかりの、Google I/O 2016で、**Android Wear 2.0**が発表されました。特に力を入れてフォローしている分野だけに、バージョンアップが行われてとてもうれしいです。

現在は、開発者向けプレビュー版が公開されているという状況です。そこで、**実機やエミュレータを用いて、Android Wear 2.0の世界を体験すべくAndroid Wear実機(以降、Wear実機と表記)に最新OSを導入する手順**を紹介したいと思います。

[公式サイト](https://developer.android.com/wear/preview/downloads.html)の内容をベースとして、具体的な手順を解説します。


# 必要なもの

実機の場合は、**LGE Watch Urbane 2nd Edition もしくは Huawei Watch**が必要です。現時点では、これら2機種向けのシステムイメージのみが公開されているためです。他の機種をお持ちの方は、しばらく待つ必要があります。対象実機をお持ちでない方は、エミュレータで動作を確認することもできます。


# 実機への導入手順

簡潔に書くと、以下のステップで導入できます。スマホ(Nexus)に、システムイメージを焼く手順と同様の手順です。**プレビューイメージを導入するには、ブートローダーの解除が必要で、端末の保証が無効となります。また、端末内の全データが削除されます。これらのリスクを理解した上で、自己責任の元に実行してください。**

 1. 該当実機向けのシステムイメージをダウンロードする。
 2. Wear実機のadbデバッグを可能にする。
 3. Wear実機のブートローダーを解除する。
 4. Wear実機にシステムイメージを焼く。

## 1.該当実機向けのシステムイメージをダウンロードする。

**Preview image for testing**が開発者向けプレビューのシステムイメージです。PCの任意の場所にダウンロードしましょう。ちなみに、Non-preview imageは、Android Wear 2.0 プレビューのテストを終了し、元の安定バージョン(1.x)に戻すためのシステムイメージです。

![WearOSImage.png](https://qiita-image-store.s3.amazonaws.com/0/34766/43bc50f6-7dda-5b4d-1a16-05108e83b8ad.png)

## 2.Wear実機のadbデバッグを可能にする。

Wear実機の「設定」メニューの**「開発者向けオプション」**を有効にしているか否かによって、手順が異なります。

* 有効にしていない場合
    * 「端末情報」をタップ後、メニューから「ビルド番号」を7回タップすると、「開発者向けオプション」が表示されるはずです。次の手順に沿って設定しましょう。
* 有効にしている場合
    * 同メニューをタップし、ADBデバッグを有効にしましょう。

## 3. Wear実機のブートローダーを解除する。

PCとWear実機をUSBケーブル(もしくはコネクタ経由)で接続しましょう。 adbコマンドを用いて、adb接続ができているかを確認しましょう。

```sh
$adb devices
```

次に、fastmodeへ移行するため、以下コマンドを実行しましょう。

```sh
$adb reboot bootloader
```

Wear実機が再起動したら、ブートローダーのロックを解除するため、以下コマンドを実行しましょう。

```sh
$fastboot flashing unlock
```

幾つかの機種では、上記では解除できません。その場合は、以下コマンドを実行しましょう。

```sh
$fastboot oem unlock
```

## 4. Wear実機にシステムイメージを焼く。

最後に、1.のステップでダウンロードしたzipをPC上で解凍し、以下コマンドを実行しましょう。

* Mac/Linuxの場合

```sh
$flash-all.sh
```

* Windowsの場合

```sh
$flash-all.bat
```

しばらく待つと、焼き込みが完了するはずです。

![device-2016-05-29-213545.png](https://qiita-image-store.s3.amazonaws.com/0/34766/bc32913e-bdbe-3e9b-69d1-70cf2e1090e3.png)

![device-2016-05-29-213651.png](https://qiita-image-store.s3.amazonaws.com/0/34766/7410550f-efd3-6b9f-3c7c-2db3dd57b1e2.png)


# おまけ
Android Wear 2.0の内容については、勉強会やセミナー等を通じて、情報発信していく予定です。こちらも楽しみにしていただけると幸いです:-)
PHPUnitのData Providersを使ってパラメタライズドテストを行う

## <i class="fa fa-question-circle" style="font-size:1em;"></i> パラメタライズドテストとは？
ほとんど同じテスト内容でデータだけを変えたテストを多く実施したい時に
テストに配列等を渡して実施できるテスト機能のことです。

このようなケースでパラメタライズドテストを使わずにテストを書くと、
ほぼ同じ内容のテストケースを大量に書くことになります。

テストをDRYにするかどうかは議論が分かれるところだと思いますので
その辺りについては特に触れません。

## <i class="fa fa-history" style="font-size:1em;"></i> 経緯
普段ほとんどいじらないPHPを書くことになったのですが、
PHPUnitでパラメタライズドテスト(Parameterized Test)を書く時ってどうするんだろう？
ということで調べてみました。

CodeIQ MAGAZINEの以下の記事でData Providerを利用したパラメタライズドテストが紹介されていました。

[和田卓人さん出題のテスト駆動開発問題『現在時刻とロケールに依存するテスト』をPHPを使ってオブジェクト指向で解答してみました - CodeIQ MAGAZINE](https://codeiq.jp/magazine/2013/11/593/)

なるほど、ということでData Providerを利用してみることにしました。

## <i class="fa fa-flask" style="font-size:1em;"></i> サンプル
お題はFizzBuzzです

### <i class="fa fa-code-fork" style="font-size:1em;"></i> コード
#### <i class="fa fa-cube" style="font-size:1em;"></i> プロダクトコード

```php
<?php

namespace App;

class FizzBuzz
{
    public function __construct($limit)
    {
        $this->limit = $limit;
    }

    public function fizzbuzz()
    {
        return array_map(function($i)
        {
            switch (true) {
                case $i % 15 == 0:
                    return "FizzBuzz";
                case $i % 5 == 0:
                    return "Buzz";
                case $i % 3 == 0:
                    return "Fizz";
                default:
                    return $i;
            }
        }, range(1, $this->limit));
    }
}
```

#### <i class="fa fa-cube" style="font-size:1em;"></i> テストコード

```php
<?php

use App\FizzBuzz;

class FizzBuzzTest extends TestCase
{
    /**
     * @dataProvider providerFizzbuzz
     */
    public function testFizzbuzz($limit, $expected)
    {
        $fb = new FizzBuzz($limit);
        $actual = $fb->fizzbuzz();
        $this->assertEquals($expected, $actual);
    }

    public function providerFizzbuzz()
    {
        return [
            'case limit 3' => [3, [ "1", "2", "Fizz" ]],
            'case limit 5' => [5, [ "1", "2", "Fizz", "4", "Buzz" ]],
            'case limit 15' => [15, 
                [ "1", "2", "Fizz", "4", "Buzz",
                    "Fizz", "7", "8", "Fizz", "Buzz",
                    "11", "Fizz", "13", "14", "FizzBuzz"
                ]
            ]
        ];
    }
}
```

#### <i class="fa fa-cube" style="font-size:1em;"></i> テスト実行

```bash
$ phpunit tests/FizzBuzzTest.php
...

Time: 3.63 seconds, Memory: 10.00MB

OK (3 tests, 3 assertions)
```

## <i class="fa fa-book" style="font-size:1em;"></i> 外部資料
* <a href="https://phpunit.de/manual/3.7/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.data-providers" target="_blank">data-providers - PHPUnit Manual</a>
* <a href="http://qiita.com/iakio/items/b5f3af335861ca47e3d7" target="_blank">dataProviderを使ったテストをちょっと見やすくする - iakio - Qiita</a>
SQLAlchemy + MySQL を使ってみる（その２）

[前回](http://qiita.com/nskydiving/items/88377d57040db17281fe)の続きです。

チュートリアルに沿って進めていますが、最初にちょっとつまづいた以外はスムーズに進められたかなと思います。

それでも少し気になったところをメモしておきます。

## カラムの文字数指定

MySQL の場合、必ずカラムの文字数を指定する必要があります。「sqlalchemy.Column()」のように省略することはできません。

```py3:sqlalchemy_test2.py
import sqlalchemy
import sqlalchemy.ext.declarative

Base = sqlalchemy.ext.declarative.declarative_base()

class Student(Base):
    __tablename__ = 'students'
    id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)
    name = sqlalchemy.Column(sqlalchemy.String(20))
    kana = sqlalchemy.Column(sqlalchemy.String(40))

url = 'mysql+pymysql://root:@localhost/test_db?charset=utf8'

engine = sqlalchemy.create_engine(url, echo=True)

Base.metadata.create_all(engine)
```

[エラーメッセージ]
`sqlalchemy.exc.CompileError: (in table 'students', column 'name'): Can't generate DDL for NullType(); did you forget to specify a type on this Column?`

## filter 関数の引数に渡す SQL 文

filter 関数の引数に渡す SQL 文は明示的に text 関数を使います。text 関数を使っていない場合、警告が発生します。

```py3:sqlalchemy_test3.py
import sqlalchemy
import sqlalchemy.orm
import sqlalchemy.ext.declarative
from sqlalchemy import text

Base = sqlalchemy.ext.declarative.declarative_base()

class Student(Base):
    __tablename__ = 'students'
    id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)
    name = sqlalchemy.Column(sqlalchemy.String(20))
    kana = sqlalchemy.Column(sqlalchemy.String(40))
    
url = 'mysql+pymysql://root:@localhost/test_db?charset=utf8'

engine = sqlalchemy.create_engine(url, echo=False)

Session = sqlalchemy.orm.sessionmaker(bind=engine)
session = Session()

students = session.query(Student).filter("id=20") # SAWarning: Textual SQL expression
students = session.query(Student).filter(text("id=20"))
```

[警告メッセージ]
`SAWarning: Textual SQL expression 'id=20' should be explicitly declared as text('id=20') (this warning may be suppressed after 10 occurrences)
  {"expr": util.ellipses_string(element)})`
Photos frameworkでExifつき写真を保存する

ImageIOのCGImageDestinationAddImageやCGImageDestinationSetPropertiesを使ってExifつきのデータをつくって、PHAssetChangeRequest.creationRequestForAssetFromImageAtFileURLで書き込むとうまくいく。(Xcode7.3.1)

以下、経緯とか詳細。

ALAssetsLibraryのwriteImageToSavedPhotosAlbumを使ってExifつきの写真を保存していたんだけれど、ALAssetsLibraryがiOS9でdeprecatedの警告がでる

> 'ALAssetsLibrary' was deprecated in iOS 9.0: Use PHPhotoLibrary from the Photos framework instead

> 'writeImageToSavedPhotosAlbum(_:metadata:completionBlock:)' was deprecated in iOS 9.0: Use creationRequestForAssetFromImage: on PHAssetChangeRequest from the Photos framework to create a new asset instead


この警告によると、Photos FrameworkのPHAssetChangeRequestを使えとのこと。さっそくそっちのAPIを見てみると、なんとmetadataを渡すような部分ない。locationやcreationDateくらいはあるんだけど、それだけあっても…。

ということで、もう少ししらべてみると、ImageIOのCGImageDestinationAddImageやCGImageDestinationSetProperties、でperopetyを引数にとってExif埋め込んだデータ(NSData)がつくれそう。そこからUIImageつくって、creationRequestForAssetFromImageかなと思ったら、それではダメ。

UIImage作るんじゃなくて、いったんファイルに書き込んでおいて、PHAssetChangeRequest.creationRequestForAssetFromImageAtFileURLを使うことでExifつきの写真が保存できた。


CGImageのcgと、ExifデータはいってるDictionaryのmetaがあるとして、ALAssetLibraryでやっていたのを、こういう風に書き換えた。

```
ALAssetsLibrary().writeImageToSavedPhotosAlbum(cg, metadata: meta, completionBlock: {
    (assetURL, err) in print(assetURL, err)
})
```

↓

```
let tmpName = NSProcessInfo.processInfo().globallyUniqueString
let tmpUrl = NSURL.fileURLWithPath(NSTemporaryDirectory() + tmpName + ".jpg")
if let dest = CGImageDestinationCreateWithURL(tmpUrl, kUTTypeJPEG, 1, nil) {
    CGImageDestinationAddImage(dest, cg, meta)
    CGImageDestinationFinalize(dest)
    PHPhotoLibrary.sharedPhotoLibrary()
        .performChanges({ PHAssetChangeRequest.creationRequestForAssetFromImageAtFileURL(tmpUrl) },
                        completionHandler: { (ok, err) in
                            print(ok, err)
                            let _ = try? NSFileManager.defaultManager().removeItemAtURL(tmpUrl)
        })
}
```

新しいAPIに移行していくのはいんだけど、前より手間が増えてるのはなんともつらいですね


## 参考
* ALAssetsLibrary Class Reference https://developer.apple.com/library/ios/documentation/AssetsLibrary/Reference/ALAssetsLibrary_Class/
* PHAssetChangeRequest Class Reference https://developer.apple.com/library/ios/documentation/Photos/Reference/PHAssetChangeRequest_Class/
* CGImageDestination Reference https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGImageDestination/
* [PhotoKit] 이미지 저장하기. http://baccusf.tistory.com/57


## おまけ
この記事は↓のアプリの手直しをしてるときに困ったことをまとめたものです。

http://swdyh.tumblr.com/post/136317130125/buttonlesscam-長押しで撮影するiosのカメラアプリをつくった
objective-cでズンドコゲッター

#概要
objective-cでズンドコゲッター、やってみた。
#実際
https://paiza.io/projects/y_FlKOwFqOHo67V0QK4e9A
#サンプルコード
```
#import <Foundation/Foundation.h>
#include <stdlib.h>

NSString * zundoko(void) 
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    NSURL * url = [NSURL URLWithString:@"http://ohijs0.paas.jp-e1.cloudn-service.com/zundoko"];
    NSURLRequest * request = [[NSURLRequest alloc] initWithURL:url];
    NSError * error;
    NSURLResponse * response;
    NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    NSString * r = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    return r;
}
int main(void)
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    NSString * str1 = @"ドコ";
    NSString * str2 = @"ズン";
    NSString * s = @"";
    int i = 0;
    while (true)
    {
        NSString * a = zundoko();
        if ([a isEqualToString:str1])
        {
            s = [NSString stringWithFormat: @"%@%@ ", s, str1];
            if (i == 4) break;
            i = 0;
        }
        else
        {
            s = [NSString stringWithFormat: @"%@%@ ", s, str2];
            i++;
        }
    }
    s = [NSString stringWithFormat: @"%@%@", s, @"キ・ヨ・シ！"];
    [[NSFileHandle fileHandleWithStandardOutput] writeData: [s dataUsingEncoding: NSUTF8StringEncoding]];
    [pool release];
    return 0;
}

```
【備忘録】Eclipseの自分用メモ(version: 4.5.0)


# 自分用の設定
Eclipseの自分用設定をまとめます。


## Java

### ホバーの非表示
マウスカーソルをメソッドに当てたときに表示される、「ホバー」を非表示にしています。
非力なマイパソコンでは、コピペするためにマウスカーソルで範囲選択するだけでも、時間がかかってしまうからです。

Windows -> Preferences -> Java -> Editer -> Hovers
[Combined Hover]のチェックをはずす。　

ホバーを出したい場合は、メソッド名にカーソルを置き「F2」キーを押します。

### コンテンツアシストの無効化
デフォルト設定では、`System.`のようにピリオドまで入力すると、利用できるフィールドやメソッドの一覧が表示されます。
表示内容が多いと表示に時間がかかってしまうので、私は無効化しています。

設定ダイアログ→[Java]→[エディター]→[コンテンツ・アシスト]
「自動有効化を使用可能にする」チェックをはずす

コンテンツアシストを出したい場合は、[Ctrl+Space]を入力します。


### ファイル内での出現個所検索
「例外のスロー検索」が便利。むやみやたらにtry-catch, throwsしているコードを確認するのに最適

### ステップフィルタ
デバッグで、ステップインしたくないクラス（java.*)などを指定すると、ステップインがはかどる。

### コンソール出力の制限をなくす
コンソール出力が多いと途中で消えてしまうので、制限をなくす。
設定→実行/デバッグ→コンソール→「コンソール出力の制限」チェックをOFFにする。


# 全般

### ネットワークのプロキシ接続
会社内でプロキシを通してネットワークに接続するときのお話。

[ウィンドウ] -> [設定] -> [一般] -> [ネットワーク接続]

* 「アクティブプロバイダ」：「マニュアル」
* SOCKSを選択して、クリアボタンを押す

https://qiita.com/gogonosmarty/items/d406892f7bc2bf3f2d28 参考
https://ja.wikipedia.org/wiki/SOCKS 参考

# 使い方

### ブックマークの追加

エラー調査などに便利です。
行番号が書かれている左側を右クリックして、[Add Bookmark...]を追加します。

http://javaworld.helpfulness.jp/post-37/
AndroidStudioでtypoのwarningに例外を設定する


## AndroidStudioのspellチェック機能

![スクリーンショット 2016-05-29 20.15.38.png](https://qiita-image-store.s3.amazonaws.com/0/43938/33630fbc-66ad-8f20-ee56-a26cb9f15d6f.png "スクリーンショット 2016-05-29 20.15.38.png")

AndroidStudioでは、lint機構の1つとしてコード上に存在するtypoをチェックしてくれます。

非常にありがたい機能なのですが、例えば変数名として日本語をそのままローマ字表記したい場合や、英語として存在しない和製英語等を用いたい場合、それが使われるたびに波線を引いて注意してくるのは少し煩わしく感じました。

なので、特定の表記に関してはspellチェックさせないようには出来ないかと思い調べてみました。

## spellチェックのOFF

最初に見つけたのはspellチェックをON/OFF出来ることです。

![スクリーンショット 2016-05-29 20.26.24.png](https://qiita-image-store.s3.amazonaws.com/0/43938/3e282981-fb6a-8143-ca84-a0cfcb613205.png "スクリーンショット 2016-05-29 20.26.24.png")


画像の通り、 `Preferences > Editor > Inspections` からいくつかの範囲に絞る形でspellチェックのON/OFFが可能でした。

ただ、これだと普通にtypoしてしまった箇所を見つけることが出来ないので出来れば避けたい所です。

## spellチェックの例外設定

次に見つけたのがspellチェックに対して例外を設定出来ることです。

![スクリーンショット 2016-05-29 20.37.20.png](https://qiita-image-store.s3.amazonaws.com/0/43938/b4b9b529-fbb2-8259-7162-1a3d2485ca86.png "スクリーンショット 2016-05-29 20.37.20.png")

`Preferences > Editor > Spelling` で設定できます。

例外として設定したい文字が少なく、ササッと設定したい場合は `Accepted Words` に文字を追加すればOK。

たくさんの文字を設定したい場合は、 `Dictionaries` にて辞書ファイル（.dic）を設定すればOKのようです（こちらは試していません）。

## 結果

![スクリーンショット 2016-05-29 20.42.04.png](https://qiita-image-store.s3.amazonaws.com/0/43938/8594a78f-4081-9a7a-9fbd-33c0c322557d.png "スクリーンショット 2016-05-29 20.42.04.png")

怒られなくなりました。

このspellはtypo扱いしてほしくないなと感じたりした人は試してみると良いのでないかと思います。
Cisco ASA ASDMで設定するための初期設定

# 初めに
- "Cisco ASA 5505"を対象としてます。
- ASDMを用いて、設定変更や設定内容の確認を行いたい時に必要な初期設定の手順

# IPアドレスの設定
- ASA5505では、実インターフェースにIPアドレスを振れないので、SVIを作成してそれにアドレスを割り当てる必要がある

```:IPアドレスの設定
> enable
# conf t
(conf)# interface vlan [num]
(conf-if)# nameif [name]
(conf-if)# ip address [IPaddress] [netmask]
(conf-if)# exit
(conf)# interface Ethernet 0/0
(conf-if)# switchport access vlan [num]
(conf-if)# no shutdown
(conf-if)# exit
```

- インターフェースに設定するセキュリティレベルは"0"にするように
    - 上記の場合だとデフォルトで"0"になったので、設定コマンドの入力はしていない
    - (conf-if)# securitylevel 0     みないな感じだった気が。。。

# ASAにASDMをインストール

```:ASDMをdisk0にコピー
# copy tftp: disk0:
```

# ユーザの作成

```:ユーザの作成
(conf)# username [user] password [password]
```

# HTTPでのアクセスの有効化

```:HTTPの有効化
(conf)# http server enable
(conf)# http [NetworkAddress] [NetMask] [Nameif]
WPFのある生活（３日目）


開発職ではないため、現場にはVisualStudioなんていうセレブなツールなんて存在しない。無論、インストールもできない。しかし、MSBuild自体はインストールされているので、アプリを作ろうと思えば出来なくはない。

調べたところ、必要なファイルはおおよそこんな感じ。だが、すべて手書きで用意する必要がある。また、インターネットも出来ない環境なので、受験勉強以来の暗記をすることにした。


# 階層とファイル群
```
C:.
│  WpfApplication1.sln
│
└──WpfApplication1
    │ *WpfApplication1.csproj
    │ *App.config
    │  App.xaml
    │  App.xaml.cs
    │  MainWindow.xaml
    │  MainWindow.xaml.cs
    │
    └──Properties
        │  AssemblyInfo.cs
        │ *Resources.resx
        │  Resources.Designer.cs
        │ *Settings.settings
        │  Settings.Designer.cs
```

#参考サイト

## プロジェクトファイル（xxx.csproj）

MSBuidが読み込むファイルと理解している。コンパイルの対象は何かとかを指定する。

- [MSBuild Reference](https://msdn.microsoft.com/ja-jp/library/0k6kkbsd.aspx)
- [チュートリアル: MSBuild プロジェクト ファイルのゼロからの作成](https://msdn.microsoft.com/ja-jp/library/dd576348.aspx)



## リソース系（Resources.resx）


- [アプリケーション リソースの管理 (.NET)](https://msdn.microsoft.com/ja-jp/library/9za7fxc7.aspx)
 - [デスクトップ アプリケーションのリソース](https://msdn.microsoft.com/ja-jp/library/f45fce5x.aspx)
 - [デスクトップ アプリケーションに対するリソース ファイルの作成](https://msdn.microsoft.com/ja-jp/library/xbx3z216.aspx)
  - [Resgen.exe (リソース ファイル ジェネレーター)](https://msdn.microsoft.com/ja-jp/library/ccec7sz1.aspx)



**リソース追加はVisualStudio様の助けがないと無理っぽい**

> **Resgen.exe**
>> このツールは、Visual Studio と共に自動的にインストールされます。 このツールを実行するには、開発者コマンド プロンプト (または、Windows 7 の Visual Studio コマンド プロンプト) を使用します。 詳細については、「Visual Studio 用開発者コマンド プロンプト」を参照してください。



## 設定ファイル系（App.config , Settings.settings）
- [アプリケーションの設定の管理 (.NET)](https://msdn.microsoft.com/ja-jp/library/a65txexh.aspx)
- [.NET TIPS アプリケーション設定を活用するには？［2.0のみ、C#、VB］](http://www.atmarkit.co.jp/fdotnet/dotnettips/558appsettings/appsettings.html)


## Exeを右クリック系（AssemblyInfo.cs）
よくわからなかった。
組合せ最適化でN Queen問題を解く

# N Queen問題とは

> N × Nの盤上に、N個のクイーンを配置する。このとき、
どの駒も他の駒に取られるような位置においてはいけない。

この問題も[組合せ最適化](http://qiita.com/Tsutomu-KKE@github/items/bfbf4c185ed7004b5721)で解けます。

## 定式化
<table>
<tr><td>目的関数</td><td>なし</td><td></td></tr>
<tr><td >変数</td><td>$x_j \in \{0,  1\} ~ ~ \forall j \in 各マス$</td><td>そのマスに置くかどうか</td></tr>
<tr><td rowspan="4">制約条件</td><td>$\sum_{j \in 各マス~~~~~}{\{x_j|縦がi列\}} = 1 ~ ~ \forall i \in \{0, \cdots, N-1\}$</td><td>1列に1つ</td></tr>
<tr><td>$\sum_{j \in 各マス~~~~~}{\{x_j|横がi行\}} = 1 ~ ~ \forall i \in \{0, \cdots, N-1\}$</td><td>1行に1つ</td></tr>
<tr><td>$\sum_{j \in 各マス~~~~~}{\{x_j|縦+横がi\}} \le 1 ~ ~ \forall i \in \{0, \cdots, 2 N-2\}$</td><td>斜めは1つ以下</td></tr>
<tr><td>$\sum_{j \in 各マス~~~~~}{\{x_j|縦-横がi-N+1\}} \le 1 ~ ~ \forall i \in \{0, \cdots, 2 N-2\}$</td><td>斜めは1つ以下</td></tr>
</table>


## Pythonで解いてみる
定式化して解いてみましょう。

```py3:python3
%matplotlib inline
import pandas as pd, matplotlib.pyplot as plt
from itertools import product
from ortoolpy import addvar
from pulp import *
def NQueen(N):
    r = range(N)
    m = LpProblem()
    a = pd.DataFrame([(i, j, addvar(cat=LpBinary))
        for i, j in product(r, r)], columns=['縦', '横', 'x'])
    for i in r:
        m += lpSum(a[a.縦 == i].x) == 1
        m += lpSum(a[a.横 == i].x) == 1
    for i in range(2*N-1):
        m += lpSum(a[a.縦 + a.横 == i].x) <= 1
        m += lpSum(a[a.縦 - a.横 == i-N+1].x) <= 1
    %time m.solve()
    return a.x.apply(value).reshape(N, -1)
for N in [8, 16, 32, 64, 128]:
    plt.imshow(NQueen(N), cmap='gray', interpolation='none')
    plt.show()
>>>
CPU times: user 4 ms, sys: 4 ms, total: 8 ms
Wall time: 27.5 ms

CPU times: user 16 ms, sys: 4 ms, total: 20 ms
Wall time: 84.4 ms

CPU times: user 48 ms, sys: 4 ms, total: 52 ms
Wall time: 272 ms

CPU times: user 236 ms, sys: 0 ns, total: 236 ms
Wall time: 1.88 s

CPU times: user 956 ms, sys: 20 ms, total: 976 ms
Wall time: 11.3 s
```
![image](https://qiita-image-store.s3.amazonaws.com/0/13955/374f936c-4bcb-6f4f-e229-2d9ea16523e9.png)

以上
ROS_21:Roomba Driver Install

ルンバを622をROSで使用する。
`roomba_500_ROS_drivers`はルンバ500用みたいなので、create_autonomyを使ってみます。

#参考
https://github.com/AutonomyLab/create_autonomy

#Install
##関連パッケージのインストール
```
$ sudo apt-get install python-rosdep python-catkin-tools
```

##コンパイル
###catkin workspaceを作る
```
$ mkdir -p create_ws/src
$ cd create_ws
$ catkin init  
```
###Clone this repo 
```
$ cd ~/create_ws/src
$ git clone https://github.com/AutonomyLab/create_autonomy.git  
```

※Githubのsrcに移る指示がないけど、srcの下に展開しないとパッケージが作成されない。

###Install dependencies
```
$ cd ~/create_ws
$ rosdep update  
$ rosdep install --from-paths src -i  
```
``$ sudo -H apt-get install-ros-jade-joy-teleop``を実行するのでパスワードを入れろってメッセージが表示された。

###Build
``` 
$ catkin build
```

###USB Permissions
ユーザをdialoutグループに入れるらしい。

```
$ sudo usermod -a -G dialout $USER
```

実行したら、有効にするためにログアウトして再ログイン

#設定・実行
##環境設定
```
$ source ~/create_ws/devel/setup.bash
```

##接続
ハードはこれを見て
http://qiita.com/NextWorld/items/e5f5173ff45365c1e1a5

##ノードの実行
```
$ roslaunch ca_driver create_2.launch
```

#試し
topicの/set_asciiを実行してみる。
まずは、topicが登録されているか、`rostopic list`を実行
次、型を見る`rostopic info /set_ascii`を実行　`std_msg/Uint8MultiArray`との事
次　型の詳細を見る`rosmesg show std_msg/Uint8MultiArray`を実行
`rostopic pub -1 /set_ascii std_msgs/Uint8MultiArray '{data:[34,35]}'`を実行したけど、やっぱりこれは動かない。（LEDは基板上にあったけど、紙で遮ってあった）

同様に`/power_led`を実行してみた。
`rostopic pub -1 /set_ascii std_msgs/Uint8MultiArray '{data:[0]}'`で電源が緑
`rostopic pub -1 /set_ascii std_msgs/Uint8MultiArray '{data:[255]}'`で電源が赤
途中の数値で赤と緑のLEDの強さ配分が変わるみたい。
Selenium関係のメモ

Slenium関係の自分用メモです。

# インストール関係

## 「Exception in thread "main" java.lang.NoClassDefFoundError」


```java
public static void main(String[] args) {
    WebDriver driver = new FirefoxDriver();
    driver.get("https://www.google.co.jp/");
}
```

上記ソースを実行すると、下記のエラーが発生しました。


```
Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver
	at java.lang.Class.getDeclaredMethods0(Native Method)
	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
	at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
	at java.lang.Class.getMethod0(Class.java:3018)
	at java.lang.Class.getMethod(Class.java:1784)
	at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
	at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.WebDriver
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 7 more
```

原因: mavenのscopeが「test]のため、実行時にSeleniumのクラスが使えなかった。

修正前pom.xml

```xml:pom.xml
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>2.53.0</version>
            <scope>test</scope>
        </dependency>
```

修正後pom.xml

```xml:pom.xml
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>2.53.0</version>
        </dependency>
```

反省: mavenの勉強もしておきましょう。

-----------------
## `org.openqa.selenium.remote.unreachablebrowserexception`の発生
以下のコードで、`unreachablebrowserexception`が発生しました。

```java
FirefoxDriver driver = new FirefoxDriver();
```

原因: Firefoxのバージョンが新しすぎた

* selenium version: 2.53.0
* Firefox version: 47

Firefox versionを46にしたら、動いた。


反省: Seleniumで使うブラウザは、「自動更新」しないようにしましょう。


## `driver.quit`でエラーが発生

`driver.quit`で、次のエラーが発生しました。

```
Selenium WebDriver RuntimeException:Process refused to die after 10 seconds, and couldn't taskkill it: Unable to find executable for: taskkill
```

taskkillが見つからないとのこと。
環境変数`PATH`に`C:\Windows\system32`を追加したら、解決しました。

[http://stackoverflow.com/questions/30776502/selenium-webdriver-runtimeexceptionprocess-refused-to-die-after-10-seconds-and]()

# IE関係

## IE8でcssセレクタの`nth-of-type`が使えない

下記のHTMLに対して、「2番目のボタンをクリックする」という操作をCSSセレクタの`nth-of-type`を使って実装しました。

```html:test-target.html
<div id="button-area">
  <button>ボタン1</button>
  <button>ボタン2</button>
  <button>ボタン3</button>
</button>
```

```java:selenium-sample.java
//2番目のボタンをクリックする
driver.findElement(By.cssSelector("#button-area button:nth-of-type(2)")).click();
```

IE8では動きませんでした。IE8では`nth-of-type`というCSSがサポートされていないので、使えないようです。
ローカル環境でWordPressのテーマ(SASS)をBracketsでライブプレビューしながら編集する

自分のサイトのテーマをカスタマイズするためのコーディング環境を作るためのメモ書きです。

##やりたいこと
WordPressのカスタマイズしたテーマを作りたい（まずは自分のサイト用に）のでその環境作り
要件：

* 環境(OS)はMac(OSX El Capitan)
* エディタはBrackets(Ver.1.6.0)を使用
* ローカル環境で修正結果を確認しながら編集したい
* CSSはSCSSで編集してコンパイル
* ライブプレビューしながら編集したいので、コンパイルはソース編集時に自動的に実施
 
##方針
BracketsでHTMLのライブプレビューできるのは知ってるのですが、WordPressと組み合わせる方法がよくわかなかったので、以下の方針で環境構築してみることにしました。

1. WordPressの動くローカル環境作る
2. ベースとなるテーマをインストール
3. インストールしたテーマのファイルをBracketsでSCSS編集
4. SCSSを自動コンパイル
5. ブラウザでライブプレビュー

##1.ローカル環境構築
最もポピュラーそうなMAMPを使用することにしました。
ここにWordPressをインストールします。

インストール方法はこちら↓を参照させてもらいました。
[Macでローカル環境にWordPressをインストールする](http://qiita.com/MasatoKawakami/items/7038267359a792c08ff6)

##2.ベースのテーマ選定とインストール
テーマをまっさらから作るのは大変なのでベースのテーマを選びます。
デフォルトのtwentysixteenの子テーマを作ろうかとも考えたんですが、いろいろなブランクテーマがある中からベースのテーマは **Bones** にすることにしました。
 **Bones** にはすでにSCSSファイルが用意されてるというのが決め手でこちらを使用することに決定。
[Bones - The HTML5 Wordpress Starter Theme](http://themble.com/bones/) からダウンロードしてインストールします。

`eddiemachado-bones-79c7610`がダウンロードされました（2016/05/27現在）のでWordPressのthemesフォルダにコピーします。

＊確かにlibraryフォルダにSCSSファイル用意してあるので、こやつらをいじっていけばよいらしい。
＊config.rbを見るとcompass用に記述されてるようなので、compassのインストールが必要そう。

##3.SASS(SCSS)とCompassのインストール
＊OSX El Capitanでは/usr/binに制限あるらしいので下記で **sass** と **compass** をインストール

```
sudo gem install -n /usr/local/bin sass
sudo gem install -n /usr/local/bin compass
```

##4.ファイル監視と自動コンパイルの設定
**Bones** にはすでに `config.rb` が記述されてるのであとは **Compass** に任せれば良い。
scssファルダに移動して `compass watch` 実行する。

```
cd /Applications/MAMP/htdocs/wordpress/wp-content/themes/eddiemachado-bones-79c7610/library/scss
compass watch
```

##5. Bracketsでライブプレビュー
* Bracketsで (index.phpのある) ` /Applications/MAMP/htdocs/wordpress ` フォルダを開く。
* ライブプレビューボタンを押す。
* ライブプレビューのURLを ` http://localhost:8888/wordpress/ ` に指定
* Chromeが立ち上がってWordPressのサイト画面が表示される！

##6.あとはSCSS編集
編集するのは ` /Applications/MAMP/htdocs/wordpress/wp-content/themes/eddiemachado-bones-79c7610/library/scss ` 内の*.scssファイル

 **編集したファイルを保存するとコンパイル実行されライブプレビューの画面内容が更新された！** 
 
##6.その他

編集するソースはMAMPのアプリケーションフォルダ内には置きたくなかったので、テーマファイルを別フォルダにしてエイリアスを作り、themesに置いてみたがwordpressが認識してくれなかった。
仕方ないのでそのままにしてある。（どなたかいい方法知りませんか？）
SQLAlchemy + MySQL を使ってみる（その１）

Python で MySQL を使いたいと思います。

Python の O/R マッパーを探してみたところ、**SQLAlchemy** が有名なようなので、今回はこれを使います。

公式のチュートリアルは英語ですが、丁寧に日本語で解説してくださっているブログがありましたので、こちらも参考にしながら進めていきます。

公式チュートリアル
http://docs.sqlalchemy.org/en/latest/orm/tutorial.html

Symfowareについての考察blog＞SQLAlchemyの使い方１　単一テーブルのマッピングとデータの追加
http://symfoware.blog68.fc2.com/blog-entry-1373.html

## 動作環境
- Mac OS X 10.11.5
- Python 3.5.1
- MySQL Ver 14.14 Distrib 5.7.11, for osx10.11 (x86_64) using  EditLine wrapper
- SQLAlchemy 1.1.0
- PyMySQL 0.7.4

## 事前準備
#### SQLAlchemy をインストール
`$ pip install sqlalchemy`

#### PyMySQL（MySQL ドライバ）をインストール（まだ Python 3.x 系に対応していない DB ドライバもあるようなので、選定する際は要注意！）
`$ pip install PyMySQL`

## コードを書いてみる
最初に「入門 Python 3（オライリー）」のサンプルをベースにコードを書いてみたところ、いろいろとハマったので注意点を書いておきます。

```py3:sqlalchemy_test.py
import sqlalchemy as sa

url = 'mysql+pymysql://root:@localhost/test_db?charset=utf8'
engine = sa.create_engine(url, echo=True)

engine.execute('DROP TABLE zoo')
engine.execute('CREATE TABLE zoo (critter VARCHAR(20) PRIMARY KEY, count INT, damages FLOAT)')

# SQL文に「?」が使用できないので、代わりに「%s」を使用
ins = "INSERT INTO zoo (critter, count, damages) VALUES (%s, %s, %s)"
engine.execute(ins, "あひる", 10, 0.0)
engine.execute(ins, "くま", 2, 1000.0)
engine.execute(ins, "いたち", 1, 2000.0)

rows = engine.execute('SELECT * FROM zoo')

for row in rows:
    print(row)
```


## 日本語を使いたい
create_engine 関数の引数 url に「?charset=utf8」を付加すると日本語も使えるようになります。

[エラーメッセージ]
```UnicodeEncodeError: 'latin-1' codec can't encode characters in position 51-53: ordinal not in range(256)
```

## SQL 文に「?」が使えない
SQL 文に「VALUES (?, ?, ?)」のように「?」が使えません。代わりに「%s」を使います。（SQLAlchemy のバグのようです。）

[エラーメッセージ]
```TypeError: not all arguments converted during string formatting
```

## スクリプトファイル名を「sqlalchemy.py」にしてはいけない
スクリプトファイル名を「sqlalchemy.py」にしてはいけません。またスクリプトファイルが置いてあるディクレクトリ内に「sqlalchemy.py」という名前のファイルがあってもいけません。

[エラーメッセージ]
```AttributeError: module 'sqlalchemy' has no attribute 'create_engine'
```

[SQLAlchemy + MySQL を使ってみる（その２）](http://qiita.com/nskydiving/items/907bd3fca09b75f8291b)
Slack APIを使いたい


通知に便利なSlackのAPIを使ってみたい。
[ここをみる](https://api.slack.com/methods/chat.postMessage "ここをみる")。

#通知用のurl
https://slack.com/api/chat.postMessage

ポイントとなるのは **urlにデータをパラメータとしてつける** こと。
headerやbodyで送るのではだめ、HTTPメソッドはGETでもPOSTでもOK。
"chat.postMessage"のpostは「投稿する」の意味なのでメソッドには無関係。

#各パラメータ

##requiredとoptional

通知に絶対必要なやつとそうじゃないやつ。

|種類|required|optional|
|:--|:----:|:----:|
|token|○||
|channel|○||
|text|○||
|parse||○|
|link_names||○|
|attachments||○|
|unfurl_links||○|
|unfurl_media||○|
|username||○|
|as_user||○|
|icon_url||○|
|icon_emoji||○|

##成功したとき

`ok:true` 各パラメータがBodyに返ってくる。

```
{
  "ok": true,
  "channel": "AF80OT8l9D",
  "ts": "1461132218.000011",
  "message": {
    "text": "てすと",
    "username": "bot",
    "type": "message",
    "subtype": "bot_message",
    "ts": "1461132218.000011"
  }
}
```

##失敗した時

`ok:false`  `error:"理由"` として返ってくる。

```
{
  "ok": false,
  "error": "no_text"
}
```

`"not_authed"` (token)や `"channel_not_found"` (channel)など。
Intel Compute StickでUbuntu 16.04 を使う

[Intel® Compute Stick STCK1A32WFC](http://ark.intel.com/products/86612/Intel-Compute-Stick-STCK1A32WFC) へUbuntu 16.04をインストールした時Wifi周りではまった。
基本的には [第388回　Intel Compute StickでUbuntuを使う](http://gihyo.jp/admin/serial/01/ubuntu-recipe/0388) という記事の通りで問題はないのだが、Wifiが繋がらない。
rtl8723bsnのドライバーをインストールする必要がある。

```bash:bash
$ sudo apt-get install build-essential linux-headers-generic git
$ git clone https://github.com/hadess/rtl8723as.git
$ cd rtl8723as
$ make
$ sudo make install
$ sudo depmod -a
$ sudo modprobe r8723bs
```

## ディスプレイなしで起動させる
```vi:/etc/default/grub
GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
GRUB_TERMINAL=console
```
CentOS7にMariaDB10.1をインストールする方法

MariaDBの公式からリポジトリが用意されています。
https://downloads.mariadb.org/mariadb/repositories/


##リポジトリ追加
リポジトリファイルに記載する内容が表示されるので、コピペして「/etc/yum.repos.d/」配下にファイルを作成します。

```lang:/etc/yum.repos.d/mariadb.repo
# MariaDB 10.1 CentOS repository list - created 2016-05-29 08:48 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
```

##インストール
```
yum install MariaDB-server MariaDB-client
```

###server.cnfの場所
vi /etc/my.cnf.d/server.cnf

###文字コードをutf8に変更
```lang:/etc/my.cnf.d/server.cnf
[mysqld]
character-set-server=utf8
```
[mysqld]の下に追加してください。

```
# systemctl start mariadb.service
# systemctl enable mariadb.service
```

スタートとOS再起動時にも備えて登録しておきます。



##mysql_secure_installationで基本設定する
mysql_secure_installation を起動して、アレコレ設定しておきます。

|設定項目|設定内容|
|---|---|
|Enter current password for root (enter for none)|MariaDBのrootユーザパスワード入力。インストール直後は何も設定されていないので「Enter」キーを押下する|
|Set root password? [Y/n]|rootユーザのパスワードを設定するかどうかの確認。「y」を入力するかそのまま「Enter」キーを押下しパスワードを設定する|
|Remove anonymous users? [Y/n]|初期設定で作成されている「anonymous」ユーザを削除するかの確認。「y」を入力するかそのまま「Enter」キーを押下し削除する|
|Disallow root login remotely? [Y/n]|MariaDBの「root」ユーザのリモートログインを禁止するかの確認。「y」を入力するかそのまま「Enter」キーを押下し禁止する|
|Remove test database and access to it? [Y/n]|初期設定で作成されている「test」データベースを削除するかの確認。「y」を入力するかそのまま「Enter」キーを押下し削除する|
|Reload privilege tables now? [Y/n]|今設定したユーザ設定をすぐに反映させるかの確認。「y」を入力するかそのまま「Enter」キーを押下し反映させる|
rails route code walkthrough

http://railscasts.com/episodes/231-routing-walkthrough
http://railscasts.com/episodes/232-routing-walkthrough-part-2


```rb
class Lala
  def call(env)
    [200, {}, ["Hello World!"]]
  end
end


Dirty::Application.routes.draw do

  resources :posts

  match '/gagaga', :to => Lala.new

  match '/lalala', :to => proc {|env| [200, {}, ["fuck the world"]]}

  match '/ftw', :to => PostsController.action("index")

end
```

```rb
require 'pry'

class Test
	module Lala
		def gaga(a)
			puts "original method"
		end
	end

	module Gaga
		def gaga(a)
			puts a
			super
		end
	end

  include Lala
  include Gaga
end

Test.new.gaga(12)
```
TypeScriptでindex.tsを作りたい時

##予防線
どの実装が ES6 Modules の実装としてまともなのかわからんのでなんとも言えんが、とりあえず TypeScript 1.8 にある ES6 Modules のようなものの実装では以下の技が使える。ES6 Modules の一般的なテクかもしれないけど、仕様を読む手間をケチったのでタイトルは具体化した。

## TL;DR
```ts:some_namespace/index.ts
import Foo from './foo';
import Bar from './bar';

export {
  Foo,
  Bar,
};
```

```ts:index.ts
import * from SomeNamespace from './some_namespace';

SomeNamespace.Foo;
SomeNamespace.Bar;

// 更に export したい場合はこう
// (package の main とかでこうすると便利)
export {
  SomeNamespace,
};
```

## モチベーション

```
validators
├── base_validator.ts
└── hoge_validator.ts
foo.ts
```

こういうディレクトリ構造のとき、 `foo.ts` で

```ts
const validator = new Validators.HogeValidator();
```

みたいに書きたいじゃん、というのが今日のお題です。

そもそも `index.ts` (`index.js`) っていいパターンなんですかね。もうここ5年くらい使ってるパターンなのでこれ以外の方法を知らないんですけれども。

## 1. Namespace (旧 Internal Module)　案 (ボツ)

```ts:validators/hoge_validator.ts
/// <reference path="./validators/base_validator.ts" />

namespace Validators {
  class HogeValidator extends BaseValidator { }
}
```
※`base_validator.ts` とか `index.ts` とかは自明なので脳内で補完してください。　

一見いい感じに見えるが、 `hoge_validator.ts` とかで `import` を使った瞬間に namespace が動かなくなるのでダメ。(External) Module と Namespace は排他っぽい。これだと Node.js の標準モジュールすら満足に使えず、つらい気持ちとなる。

namespace を export すりゃいいじゃん、とも思ったが、import した namespace はマージできないのでファイル分割が死ぬ。ダメ。

## 2. 全部入りの Object を export default 案 (ボツ)

```ts:validators/hoge_validator.ts
import BaseValidator from './base_validator';

export default class HogeValidator extends BaseValidator { }
```

```ts:validators/index.ts
import BaseValidator from './base_validator';
import HogeValidator from './hoge_validator';

export default {
  BaseValidator,
  HogeValidator,
};
```

```ts:foo.ts
import Validators from './validators'

const validator = new Validators.HogeValidator();
```

やったぜ!!　でも、本当?

```ts
const validators: Validators.BaseValidator[] = [];
```

tsc says:

```
Cannot find namespace 'Validators'
```

**fsck!!!!!!!**

Object は Namespace ではない、とのことです。はい。

## 3. export { ... } を使う案 (せいかい)

See: [TL;DR](#tldr)

## まとめ
本当に ES6 Modules は反省して欲しい。
windows10でインターネット共有(ICS)

## 参考

* [ICS を有効にする](https://msdn.microsoft.com/ja-jp/library/cc778588(v=ws.10).aspx)

## 構成

* 2NICであること
* NIC1 : インターネット側
* NIC2 : イントラ側

![nic.png](https://qiita-image-store.s3.amazonaws.com/0/25728/8344ea69-8f0f-371e-29f9-c5f1a855e0ed.png)


## 設定

* NIC1にて右クリック－＞プロパティ－＞共有

![ics.png](https://qiita-image-store.s3.amazonaws.com/0/25728/6094674a-fa2a-7a32-cd34-37cfb19bded6.png)

完了。
Gstreamerを使ったビデオストリーミング

# 概要
Gstreamerを使ってビデオストリーミングをしてみた

# 動作環境
ボード　　　　　：Raspberry Pi 3
カメラモジュール：Raspberry Pi Camera V2
イメージ　　　　：emlid-raspbian-20160408

#使用方法

- Raspberry Pi側

1. カメラモジュールを有効にする。
Raspberry Piを起動したらコンフィグを起動する。
```sudo raspi-config```
『6 Enable Camera』を選択し、Enableを選択する。
※起動前にカメラモジュールをRaspberry Piに接続しておく必要がある。
選択したらリブートする。

2. Gstreamerをインストールする。
```sudo apt-get update
sudo apt-get install gstreamer1.0-tools gstreamer1.0-plugins-good gstreamer1.0-plugins-bad```

3. Gstreamerを起動する。
```raspivid -n -w 1280 -h 720 -b 1000000 -fps 15 -t 0 -o - | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=10 pt=96 ! udpsink host=ストリーミング先のIP port=9000```



- クライアント側

GstreamerはMac,Linux,WindowsなどのOSで動作するが、
今回はWindowsでストリーミング再生を行う。

1. Gstreamerからアプリケーションをダウンロード
https://gstreamer.freedesktop.org/
インストールは方法省略

2. Gstreamerを起動
コマンドプロンプトを起動し、以下のコマンドを実行
```cd gstremaerインストール先のディレクトリ```
```gst-launch-1.0 -v udpsrc port=9000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264" ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=f```

上記コマンドを実行するとストリーミング映像が再生される。
![gst.jpg](https://qiita-image-store.s3.amazonaws.com/0/72035/5ccc9306-6fb5-3379-26fc-57d84b371028.jpeg)

# トラブルシューティング

- WARNING: erroneous pipeline: no element "avdec_h264"
Gstreamerが古い可能性がある。
公式から最新のGstreamerをダウンロードし、再インストールする。
自分の場合は最新のGstreamerをダウンロードし、インストール時に"Complete"を選択してインストールを行ったことで、
上記のWARNINGが表示されなくなった。


- ERROR: from element /GstPipeline:pipeline0/GstH264Parse:h264parse0: No valid frames found before end of stream
カメラモジュールが正しく接続されていない可能性がある。
接続を確認し、再度実行することで改善される。
Cento7にphp-fpmをインストールし、nginxと連携する

今回やろうとしていることが、
CentOS7 + PHP7 + nginx + MariaDB + Drupal8
の環境構築です。

CentOS7はいつものVirtualBox + Vagrantでスムーズに成功。
PHP7もネットからの情報はどの情報でもほぼ一緒だったのでスムーズに成功。
ところが、nginxのインストールとPHPとの連携でパパッとは行かなかったのでここでおまとめします。

※yumのリポジトリはepelとremiを追加してある状態です。
http://qiita.com/inakadegaebal/items/b57cf10339978d638305


##nginxのインストール
ネットの他の情報ではepelリポジトリを明示的に指定するのが多数でしたが、普通に以下でも行けました。

```
# yum install nginx
```
###nginx.confの場所
vi /etc/nginx/nginx.conf


##PHPとnginxとの連携
いよいよPHPとnginxとの連携になります。
Apacheとそんな変わらないだろうと思い、いざやろうとしたら、php-fpmのインストールが必要でした。
PHPとWebServerの連携を
Apacheの場合、モジュール版かCGI版どちらかの連携方法ができ
nginxの場合、CGI版でしか方法がなかった(あるいはメジャー)のです。
違いについては以下の記事がわかりやすいと思います。
http://qiita.com/kotarella1110/items/634f6fafeb33ae0f51dc


##php-fpmのインストール
```
# yum install --enablerepo=remi,remi-php70 php-fpm
```
###www\.confの場所
vi /etc/php-fpm.d/www\.conf


##PHPとnginxとの連携。その2
正確にはnginxとphp-fpmとの通信になります。その通信方法でメジャーな方法TCPかUNIXドメインソケットのどちらかですが、
ここではもっと早いと言われているUNIXドメインソケットのやり方で進めます。

###php-fpmの設定
```lang:/etc/php-fpm.d/www.conf
user = nginx
group = nginx

listen = /var/run/php-fpm/php-fpm.sock

listen.owner = nginx
listen.group = nginx
```
nginxからphp-fpmを実行する際は「nginx」ユーザーになるので、実行ユーザーをnginxにします。
listenに指定したファイルはphp-fpmの起動時に生成されます。

```
# systemctl start php-fpm
# systemctl enable php-fpm
```
スタートとOS再起動時にも備えて登録しておきます。


###nginxの設定
```lang:/etc/nginx/nginx.conf
    server {
        location ~ .php$ {
            fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
            include fastcgi_params;
        }
    }
```
serverという部分の中に上記を追加してくだだい。


```
# systemctl start nginx
# systemctl enable nginx
```
スタートとOS再起動時にも備えて登録しておきます。


##phpファイル作成
nginxのDefaultDocumentRootは「/usr/share/nginx/html」になっています。
修正する場合は「/etc/nginx/nginx.conf」を中身を適宜修正しましょう。

```lang:/usr/share/nginx/html/test.php
<?php phpinfo(); ?>
```
SwiftでYコンビネータを使ってみる

[JavaScript で Y コンビネーターを理解する - Qiita](http://qiita.com/takuya0301/items/9901cfb954f6b713a79d)
を見たので、Swiftでも試してみる。

> Y コンビネーターを使うと無名関数での再帰的な関数呼び出しが実現できてしまう。

### 定義
[不動点コンビネータ - Wikipedia](https://ja.wikipedia.org/wiki/%E4%B8%8D%E5%8B%95%E7%82%B9%E3%82%B3%E3%83%B3%E3%83%93%E3%83%8D%E3%83%BC%E3%82%BF#Y.E3.82.B3.E3.83.B3.E3.83.93.E3.83.8D.E3.83.BC.E3.82.BF) より

```math
Y = (\lambda f . (\lambda x . f (x x)) (\lambda x . f (x x)))
```

型パラメータを使いたいので、広域関数として落とす

```swift
func Y<T, U>(f: (T -> U) -> (T -> U)) -> (T -> U) {
    return { (x: T) -> U in
        f(Y(f))(x)
    }
}
```

### サンプル
階乗計算

```swift
Y({ (f: Int -> Int) -> (Int -> Int) in
    { (n: Int) -> Int in n == 0 ? 1 : n * f(n - 1) }
})(5) // 120
```

フィボナッチ数列

```swift
// 型推論が効くので型を明示しなくてもコンパイルは通る
Y({ f in
    { n in n <= 2 ? 1 : f(n - 1) + f(n - 2) }
})(10) // 55
```

### See also
- [RubyでYコンビネーターとZコンビネーター - Qiita](http://qiita.com/gogotanaka/items/3a0b285f893428fc69c8)
- [おとうさん、ぼくにもYコンビネータがわかりましたよ！ - きしだのはてな](http://d.hatena.ne.jp/nowokay/20090409#1239268405)
three.js > 3次元矢印 > ゆっくり回転 / グラデーション

関連 http://qiita.com/7of9/items/3531d3acd78da87eb303#comment-8765eaa66e32dd1753da


## code v0.1

描画した矢印を色々な方向から見ようとしている。

http://jsfiddle.net/houLs2he/27/

とりあえず、ゆっくり動くようにはなった。
あとは幾何学の勉強が必要。オイラー回転かQuaternionなど使うのだろうか。

http://qiita.com/mo49/items/1a9b28b9cda03135e6ea
を参考に以下を実装したら矢印が描画されなくなった。理由は未消化。

```
var theta = clock.getElapsedTime();
```

## code v0.2 > 座標付き

直交座標を白色のベクトルで追加。

http://jsfiddle.net/Lv37w1fn/5/

２本のベクトルの位置情報が見やすくなってきた。

## code v0.3 > それらしい回転

http://jsfiddle.net/7vgqpd2o/7/

https://en.wikipedia.org/wiki/Spherical_coordinate_system
の天頂角と方位角を考慮。

x = r * sin(theta) * cos(phi)
z = r * sin(theta) * sin(phi)
y = r * cos(theta)

自分が望んでいた回転が得られた。

## code v0.4 > ベクトル終端を配列でセット

http://jsfiddle.net/w63hp68a/13/

以下のように終端情報を渡すと描画してくれる。

```js
var arrows = [
  [ 1, 1, 1 ],
  [ -1, 1, 1 ],
  [ 1, -1, 1 ],
  [ 1, 1, -1 ],
  [ -1, 1, -1 ],
];
var num_arrows = 5;
```

15本のベクトルを引いてみた。
http://jsfiddle.net/m0zq6du7/2/

データ生成(python)はこちら
http://qiita.com/7of9/items/533825503fb884e1ec15
http://ideone.com/PZPfxe

## code v0.5 > グラデーションを追加

12本などの矢印を描画した時、どれが始点か、次の矢印はどれか、などわかりにくい。
グラデーションをつけた。
色が0xFF0000が始点、そこからblue成分が増していく矢印が後続のもの。

http://jsfiddle.net/dmcnzkL6/7/

変更部分のsnippet

```js
for(var idx=0; idx<num_arrows; idx++) {
drawvector(0,0,0, arrows[idx][0], arrows[idx][1], arrows[idx][2], 0xff0000 + idx * (0xff/num_arrows));
}
```


作成中のgeometry計算ルーチンのチェックに使っている。
機械学習や画像認識などにおけるデータセット作成支援ツール

#概要
機械学習などで用いるためのデータセットの作成をしたい。
少し探したのだけれども，用途に合ったツールが見つからなかったので作りました。
ソースは[Git](https://github.com/yizumi1012xxx/DatasetCreater)にあります。

#できること
1.画像の読み込みと表示（png, bmp, gif, jpg, tiff）
2.画像の中にある物体の矩形座標をマウス操作により取得
3.細かいパラメータの設定
4.xml,yml,jsonの形式で出力する
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/106291/7ad06afb-7219-d8fc-dd5b-3f4326af82b6.png)

#使い方
1.GitからDownloadして解凍
2.DatasetCreater/index.htmlを開く
3.画像を読み込み
4.画像上でマウス押下，そのまま移動，マウス離すを繰り返し座標を追加
5.必要なパラメータは入力
6.指定した形式でDownload
7.作業を続ける場合は3にもどって繰り返し

#さいごに
急いで作ったので，バグがあるかもしれません。
大きな画像は読み込みに時間がかかります。
メモリ開放が適切にできていないかもしれません。
既存のものでいいものがあったら教えていただければ幸いです。
（すでにこれだけのデータセットが世の中にあるのだからこういったツールはあるんじゃないかなぁ。。。）
map, select, collect, each の違いところ

#Map
mapメソッドは要素の数だけ繰り返しブロックを実行し、ブロックの戻り値を集めた配列を作成して返します。もしブロックの戻り値がない場合は、配列にnilを入れます。

```ruby
[1,1,1,2,3,4].map{|n| n*3 if n==1}    
 => [3, 3, 3, nil, nil, nil] 
```

map!メソッドはmapメソッドの戻り値と同じですが、各要素をブロックの戻り値と入れ替えます。

#Collect
mapメソッドと同じです。

#Select
selectメソッドは、条件に合う要素を探して集めます。ブロック引数itemに要素を入れながらブロックを繰り返し、ブロックの戻り値が真になったときの要素を集め、新しい配列にして返します

```ruby
[1, 2, 3, 4, 5, 6, 7, 8].select {|item| item % 2 == 0 }
 => [2, 4, 6, 8]
```
#Each
eachメソッドは、配列の要素の数だけブロックを繰り返し実行します。繰り返しごとにブロック引数には各要素が順に入ります。戻り値はレシーバ自身です。

```ruby
[1,2,3].each{ |n| n*2 }
 => [1,2,3]
```

#どうやってmapとcollectの結果を組立つメソッドになりましょうか
mapメソッドを利用して、compactメソッドをnilがある値を消しましょう。

```ruby
result = [1,1,1,2,3,4].map{|n| n*3 if n==1}
 => [3, 3, 3, nil, nil, nil]
result.compact
 => [3, 3, 3] 
```

#参考
http://ref.xaio.jp/ruby/classes/array
Apache on Centos 7

# セットアップ
```
yum install httpd php php-mbstring
hostname "マシン名"
vi /etc/sysconfig/network ```
HOSTNAME="マシン名"
vi /etc/hosts
127.0.0.1   ドメイン名 localhost localhost4

vi /etc/httpd/conf/httpd.conf
>ServerName ドメイン名
>
<Directory />
   Options FollowSymlinks
>
<Directory "/var/www/html">
   Options ExecCGI
   AllowOverride All
>Directoryindex index.html index.php
```

次に，管理者ユーザを作成，コンテンツフォルダの所有者を作ったユーザにする．
```
useradd -u 1001 -M -d /home/www/ www
chown -R www:www /var/www/html
```

# テスト
ブラウザで
127.0.0.1:80

# MariaDBとの接続
```yum install php-mysqlnd```
phpが参照するMariaDBのデフォルトソケットを対称のソケットに変更．
```
vi /etc/php.ini
>mysql.default_socket = <対称のディレクトリ>
```
何もしないと恐らく，mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication.みたいなエラーが出るので，パスワードを新しいフォーマットに変える．
```
mysql -u root -p
>SET @@session.old_passwords = 0;
>SET PASSWORD FOR root@localhost = PASSWORD('ここにパスワード');
```
three.js > 矢印を描く

http://qiita.com/7of9/items/3531d3acd78da87eb303#comment-8765eaa66e32dd1753da
で教えていただいた情報を元に、矢印を描く実装をしてみた。

## code

jsfiddleで見つけたコードをforkして自分が使いそうな部分以外を削除した。

http://jsfiddle.net/058s5guz/5/

```js
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);

var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

camera.position.z = 5;

var from = new THREE.Vector3( 2, 2, 2 );
var to = new THREE.Vector3( 0, 0, 0 );
var direction = to.clone().sub(from);
var length = direction.length();
var arrowHelper = new THREE.ArrowHelper(direction.normalize(), from, length, 0xff0000 );
scene.add( arrowHelper );

var render = function () {
    requestAnimationFrame(render);

    renderer.render(scene, camera);
};

render();
```


![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/5863c3f6-728b-1b5b-4f67-f34a8c762107.png)


# v0.2 > 2本の矢印

http://jsfiddle.net/nngrzz7c/5/
Excel列名を変換するシェルスクリプト（A→1、AA→27、XFD→16384…）

#コード


```シェルスクリプト:excc(excel_column_converter)
#!/bin/sh
echo $1 | grep -o '.' | tail -r | awk '{print "(26^"NR-1")*"$1}' |
sed -e 's/A/1/g' \
-e 's/B/2/g' \
-e 's/C/3/g' \
-e 's/D/4/g' \
-e 's/E/5/g' \
-e 's/F/6/g' \
-e 's/G/7/g' \
-e 's/H/8/g' \
-e 's/I/9/g' \
-e 's/J/10/g' \
-e 's/K/11/g' \
-e 's/L/12/g' \
-e 's/M/13/g' \
-e 's/N/14/g' \
-e 's/O/15/g' \
-e 's/P/16/g' \
-e 's/Q/17/g' \
-e 's/R/18/g' \
-e 's/S/19/g' \
-e 's/T/20/g' \
-e 's/U/21/g' \
-e 's/V/22/g' \
-e 's/W/23/g' \
-e 's/X/24/g' \
-e 's/Y/25/g' \
-e 's/Z/26/g' |
tr '\n' '+' | sed 's/+$//g' | bc
```

#結果
```
$ ./excc A
1

$ ./excc AA
27

$ ./excc CDP
2148

$ ./excc XFD
16384

$ ./excc GGGG
127953
```

#tail -r が使えない場合
`tail -r`を`tac`に変えてください。
[メモ]  らずぱい: USBシリアル(ttyUSB0)にログイン

## 追記
### USBキーボードでハマッた。
jessie-liteでコンソールログインであれば、USBキーボードを挿せば、画面見ずにいけるかと、やってみたら、デフォルトが英国マッピングのため、@がうまく打てなかった。
\# 101USキーボードでは、`Shift+'`で(`"`を入力すると) `@`がでてくる

```txt:電源入れて、2～3分後くらいにタイプする
pi
raspberry
sudo systemctl enable serial-getty@ttyUSB0.service
sudo reboot
```


## 動機
1. Raspberry Pi 1,2 と、PCからUSB-Serialケーブルで、らずぱい側にUART接続して使用してきた。
2. が、Raspberry Pi 3では、Bluetoothで使用されているため、UART端子はデフォで使えない。
3. RPiのUSBに接続されてるUSBシリアルから、ログインすればいいんじゃね？

- RPi3で、`ttyUSB0 - 921600bps`で接続のスクショ<br>
![RPi-ttyUSB0_921600_RPi3.png](https://qiita-image-store.s3.amazonaws.com/0/75594/21b99e77-aa86-b2a4-29bd-5e5de756cc0e.png)

- らずぱい2で変更したmicroSDで、<font color='blue'>らずぱいZERO</font>(ピンヘッダをつけていない)でも、動作しました。

## 手順
### ケーブルの準備
- USB-シリアル 同士をいわゆるクロス接続で、一方をPC、もう一方をラズパイ。

| USB-シリアル-その１| USB-シリアル-その2 |
|---:|:----|
| TX | RX  |
| RX | TX  |
| GND| GND |

### PC側
1. USBシリアルを接続(うまく設定する) 
2. ターミナルソフト準備(TeraTerm使用)
3. <font color='red'>9600bps</font>に設定<br>![RPi-ttyUSB0_0.png](https://qiita-image-store.s3.amazonaws.com/0/75594/29119569-745d-4381-d542-32a2dd009272.png)


### Raspberry Pi側
1. USBシリアルを接続
2. ログイン・設定できる環境で、Jessieのイメージで起動する (2016-05-10-raspbian-jessie-lite.img使用)
3. どうにかログインする。(私はRPi2でUARTログイン・設定をして、RPi3で使用)
4. サービスをenableにする。

    ```shell-session
pi@raspberrypi:~$ sudo systemctl enable serial-getty@ttyUSB0.service
Created symlink from /etc/systemd/system/getty.target.wants/serial-getty@ttyUSB0.service to /lib/systemd/system/serial-getty@.service.
```
4. シャットダウン or リブート
5. 次回起動時、しばらく待っていると、PC側のターミナルで、`login:`プロンプトが表示され、ログイン可能<br>
![RPi-ttyUSB0.png](https://qiita-image-store.s3.amazonaws.com/0/75594/f06b7ad4-0359-9f97-adcb-345b62403209.png)

## おまけ
- 9600bpsは遅いので、ログイン後、ボーレート設定を変えるおまじないをして、<font color='blue'>TeraTermの設定を変更</font>する。

    ```shell-session
pi@raspberrypi:~$ stty -F /dev/ttyUSB0 115200
```

- PL2303HX(互換?ぱちもん?)で、 921600bpsで使用

    ```shell-session
pi@raspberrypi:~$ stty -F /dev/ttyUSB0 921600
```
![RPi-ttyUSB0_921600.png](https://qiita-image-store.s3.amazonaws.com/0/75594/ab4adeb0-4434-7801-81bc-ebaf00e27306.png)
Check! docker run で 53 ポートにアクセスできないときの対処 (DNSエラー) 

こんにちは、オークファンの @dz_ こと大平かづみです。

Prologue - はじめに
====
最近、Docker に興味を持ち、Dockerfile, Docker Compose と勉強を進め、 やっと Docker Swarm の勉強を始めました。

そこで、いつも使っている Docker用のコンテナ `default` 以外のVMを立てて作業をしていると、 `docker run` ができない（Dockerイメージがダウンロードできない）状態に陥り、ちょっと迷いましたので備忘録を記しておきます。

エラー内容
====
今回は、 `agent1` というVMに Swarm のイメージをダウンロード・起動しようとして、以下のエラーが発生しました。

```bash:VM(agent1)でイメージがダウンロードできないエラー
$ docker run -d swarm join --addr=<node_ip>:2376 token:<token>

Unable to find image 'swarm:latest' locally
Pulling repository docker.io/library/swarm
docker: Error while pulling image: Get https://index.docker.io/v1/repositories/library/swarm/images: dial tcp: lookup index.docker.io on [::1]:53: read udp [::1]:56512->[::1]:53: read: connection refused.
See 'docker run --help'.
```

対処
====
このエラーは、どうやら VM の中から、DNS が引けずにエラーとなっているようです。下記に、DNSによる接続エラーについての解消方法が記載されていました。

- [Cannot Download Image/Connect | Common Issues and Fixes · docker/kitematic Wiki](https://github.com/docker/kitematic/wiki/Common-Issues-and-Fixes#cannot-download-imageconnect "Common Issues and Fixes · docker/kitematic Wiki")

対処手順
----
まず、対象の VM にログインします。

```bash:VM(agent1)にログインする
$ docker-machine ssh agent1
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.11.1, build HEAD : 7954f54 - Wed Apr 27 16:36:45 UTC 2016
Docker version 1.11.1, build 5604cbe
```

そして、 `/etc/resolv.conf` に `nameserver 8.8.8.8` を追加します。

```bash:nameserverを追加する
docker@agent1:~$ echo "nameserver 8.8.8.8" >> /etc/resolv.conf
```

正常に `/etc/resolv.conf` を更新できたら、VMからログアウトします。

```bash:VMからログアウトする
docker@agent1:~$ exit
```

ここまでできたら、再度 `docker run` を実行すると、問題なく実行できるようになってると思います。
、
Epilogue - おわりに
====
まだ見よう見まねで小さなところにつまづいてしまいますが、Dockerコンテナを使いこなしたいので勉強に励みます。
MariaDB on CentOS 7

# セットアップ
```yum install mariadb mariadb-server```
必要かわからないが，/var/lib/mysql/にmysql.sockなるソケットが無いので，空のファイルを作成．
```
touch /var/lib/mysql/mysql.sock
systemctl start mariadb
mysql_secure_installation
```
mysqldumpでとっているバックアップがあれば，以下のコマンドで反映させる．
```mysql -u root -p < alldata.sql```

# バックアップの取り方&復元
まず，バックアップの方法．
```mysqldump --all-databases --user=root --password --master-data > alldata.sql'''
次に，取り込み方．
```mysql -u root -p < alldata.sql```

# よく使うコマンド集
以下，mysqlの中
```
show databases; # データベース閲覧
>select user from mysql.user; # ユーザ一覧
>use “database”; # "データベース名"に入る
>show tables; # テーブル一覧
>show variables like ‘hostname’; # hostnameを表示
```