OmniAICreator/Qiita-1.07M huggingface dataset:
Install Ansible from source on CentOS 6.6 x86_64

CentOS 6 は OpenStack クラウドイメージ「CentOS-6-x86_64-GenericCloud」に Ansible v2.0.0（GA前）を入れる手順を記載

# 準備
```shell-session
# yum install epel-release
# yum update
# yum groupinstall 'Development tools'
# yum install python-pip
# yum install python-devel
# yum install python-crypto2.6
```
# ダウンロードしRPMでインストール
```shell-session
# git clone https://github.com/ansible/ansible.git --recursive
# yum install asciidoc
# yum install python-httplib2 python-jinja2 python-keyczar python-paramiko sshpass
# cd ansible
# make rpm
# rpm -ivh rpm-build/ansible-2.0.0-0.git201508252151.601a1cc.devel.el6.noarch.rpm
```

# Windows Target のための準備
```shell-session
# pip install https://github.com/diyan/pywinrm/archive/master.zip#egg=pywinrm
# yum install krb5-devel
# pip install kerberos
```
Swift初心者メモ Webページを表示する

```swift:sample
   
class ViewController: UIViewController, UIWebViewDelegate {
    // UIWebViewを配置
    @IBOutlet weak var myWebView: UIWebView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // urlオブジェクト作る
        var myUrl = NSURL(string: "http://www.geocities.co.jp/SweetHome/1863/")
        
        // URLリクセストをつくる
        var myUrlReq = NSURLRequest(URL:myUrl!)
        
        // UIWebViewに表示
        myWebView.loadRequest(myUrlReq)
    }

}

```
Yosemiteの日本語入力で常に半角スペースにする

#設定するファイル
/System/Library/Input\ Methods/JapaneseIM.app/Contents/Resources/KeySetting_Default.plist

:flags: Windows風のキー操作にしている人は
KeySetting_Windows.plist

私はWindows風にしているのでこちらのファイルを設定します

#設定方法

一応バックアップをとってから開きます

```
sudo cp /System/Library/Input\ Methods/JapaneseIM.app/Contents/Resources/KeySetting_Windows.plist /System/Library/Input\ Methods/JapaneseIM.app/Contents/Resources/KeySetting_Windows.plist.org

sudo vi /System/Library/Input\ Methods/JapaneseIM.app/Contents/Resources/KeySetting_Windows.plist
```

###スペースの設定部分
```KeySetting_Windows.plist
<key>&apos; &apos;</key>
<dict>
        <key>command</key>
        <string>direct_input</string>
        <key>character</key>
        <string>　</string>
</dict>
<key>shift+&apos; &apos;</key>
<dict>
        <key>command</key>
        <string>direct_input</string>
        <key>character</key>
        <string> </string>
</dict>
```
\&apos; \&apos;がスペースキーという意味です（' '）
何も設定しないと、spaceで全角のスペース、shift+spaceで半角のスペースが入るという設定になっています
ここを書き換えます

```
<key>&apos; &apos;</key>
<dict>
        <key>command</key>
        <string>direct_input</string>
        <key>character</key>
        <string> </string>
</dict>
<key>shift+&apos; &apos;</key>
<dict>
        <key>command</key>
        <string>direct_input</string>
        <key>character</key>
        <string>　</string>
</dict>
```
spaceで半角スペース、shift+spaceで全角スペースを入れられるようにしました。

#できました!

 ←space
　←shift+space
Swift初心者メモ  web上の画像を表示したい


webのサーバー上の画像をURL指定して表示させたいとき
(http://hoge.com/images/hogehoge.png)　みたいな


```swift:hoge

// UIImageViewを配置
@IBOutlet weak var myImageView: UIImageView!

override func viewDidLoad() {

        super.viewDidLoad()

        // URLオブジェクトを作る
        var imgUrl = NSURL(string: "http://free-illustrations-ls01.gatag.net/images/lgi01b201405240000.jpg");

        // ファイルデータを作る
        var file = NSData(contentsOfURL: imgUrl!);
        
        // イメージデータを作る
        var img = UIImage(data:file!)
        
        // イメージビューに表示する
        myImageView.image = img
}
```

パンダだ！できた

![スクリーンショット 2015-08-26 16.51.24.png](https://qiita-image-store.s3.amazonaws.com/0/76843/8ae78c18-6d98-ed02-bbad-fd99570cfb8f.png)
[Swift][iOS]64bit対応におけるarc4random()について

現在(2015.08)、メインストリームのiOS端末には、32bitCPUを搭載したものと、64bitCPUを搭載したものの2種類あります。
私自身はアーキテクチャについて全くわかりませんが、これら2つのうち、一方では正常に動作するものの、もう一方ではエラーを発生させるプログラムがあります。

そのひとつがarc4random()です。
乱数を発生させる関数としてよく使われますが、これを使うとエラーが起きます。
64bit端末では正常に動作しますが、32bit端末ではエラーを吐いてクラッシュします。
私の勘では64bit対応が義務となった弊害かと思われます。

・解決法
arc4random_uniform(UInt32)を使う

内部の事は私には詳しくわかりません、が、arc4random()の代わりにarc4random_uniform(UInt32)を使うと、32bit端末でも64bit端末でも、いずれでも正常に動作します。
引数のUInt32には、乱数の数を与えてやります。
たとえばarc4random_uniform(10)は、0〜9の範囲でランダムに値を返します。
ちなみにarc4random()よりも"ランダムな"乱数となるようです。乱数発生にはarc4random_unidorm(UInt32)を使って下さい。

arc4random_uniform(UInt32)は返り値がUInt32型になるのだろうか...？
linux > どのDHCPサーバーからIPを与えられたかを見る > grep -R "DHCPOFFER" /var/log/* | less -X

```txt:動作確認
CentOS 6.5
```

以下のコマンドでどのDHCPサーバーからIPを与えられたかを見ることができる。

http://xmodulo.com/how-to-find-ip-address-of-dhcp-server.html
のMethod Two

```
$grep -R "DHCPOFFER" /var/log/* | less -X
```

結果として以下のような表示が得られる

```
/var/log/messages:Aug 26 08:13:48 myPC dhclient[1800]: DHCPOFFER from 172.20.XX.18
/var/log/messages:Aug 26 15:39:01 myPC dhclient[1802]: DHCPOFFER from 172.20.XX.67
/var/log/messages:Aug 26 16:07:22 myPC dhclient[3034]: DHCPOFFER from 172.20.XX.18
/var/log/messages:Aug 26 16:08:26 myPC dhclient[3126]: No DHCPOFFERS received.
/var/log/messages:Aug 26 16:15:43 myPC dhclient[3126]: No DHCPOFFERS received.
/var/log/messages:Aug 26 16:17:21 myPC dhclient[1803]: DHCPOFFER from 172.20.XX.18
/var/log/messages:Aug 26 16:32:29 myPC dhclient[3164]: No DHCPOFFERS received.
/var/log/messages:Aug 26 16:33:06 myPC dhclient[3240]: DHCPOFFER from 172.20.XX.67
/var/log/messages:Aug 26 16:34:05 myPC dhclient[3335]: No DHCPOFFERS received.
/var/log/messages-20150806:May 18 12:38:15 myPC dhclient[1801]: DHCPOFFER from 172.20.XX.18
/var/log/messages-20150806:May 22 08:45:19 myPC dhclient[1802]: DHCPOFFER from 172.20.XX.18
...
/var/log/messages-20150806:Aug  6 10:32:35 myPC dhclient[1800]: DHCPOFFER from 172.20.XX.18
/var/log/messages-20150806:Aug  6 11:18:25 myPC dhclient[1800]: DHCPOFFER from 172.20.XX.18
```

上記の例では`172.20.XX.18`や`172.20.XX.67`がDHCPサーバー。
時々`NO DHCPOFFERS received.`という表示があるのはトラブル発生時。
linux > dhcpサーバーの情報を見る > less /var/lib/dhcp3/dhclient.leases

```txt:動作確認
CentOS 6.5
```

参考
http://www.cyberciti.biz/faq/linux-find-out-dhcp-server-ip-address/

DHCPサーバーが複数立ち上がったなどによりネットワーク不調の時、DHCPのサーバーを調べたい。

```
less /var/lib/dhclient/dhclient.leases
```

表示される結果のうち `dhcp-server-identifier`という項目がDHCPサーバのIPアドレスになる。
API Reference《後編》書きかけ


#前書き
前編では、C++のAPI Referenceについては割愛したので後編としてこちらで書いていきます。

#本題
C++のAPI Referenceをまとめます。

##C++ qi base API
###qi::Actor and qi::Strand

###qi::Application
	アプリケーションの初期化や停止
###qi::Atomic
	boost::Atomicと同じようなものではあるが、より簡単なものである。
###qi clocks
	詳しくは、boost::chronoのドキュメントを見るか、好きなC++11の本を読んでください
	>boost::chrono
	>http://www.boost.org/doc/libs/1_55_0/doc/html/chrono.html
###qi::EventLoop
	boost::asioを元にした、EventLoopです。
###qi::Promise, qi::Future
	
###qi::Future groups
	qi::Futureオブジェクトの生存期間を管理します。
###qi::IOColor
	色？
###qi::log
	ログ出力をするための機能を提供します。
###qi helper macros
	
###qi::os
	基本的なOSに関する抽象的な関数
###qi::path namespace

###qi::PeriodicTask

###qi preprocessor macros

###qi::stats namespace

###qi::Trackable

###qi::Translator

###Types

###qi::Version


##C++ qi type API

###qi::AnyValue

###qi::AnyFunction

###qi::Object

###qi::AnyModule

###qi::Buffer, qi::BufferReader

###qi::DynamicObjectBuilder

###qi::MetaObject, qi::MetaMethod, qi::MetaSignal, qi::MetaProperty

###qi::ObjectTypeBuilder

###qi::Property

###qi::Signal

###qi::Signature


##C++ qi messaging API

###qi::ApplicationSession

###Binary Codec

###JSON Codec

###qi::Session

###qi::Url

##qi::File

###Summary

###Glossary

###Detailed Usage Description

###Complete example : Alice’s Image Store Service

###Reference


##C++ Class Index

##C++ Function Index


#感想


#関連URL

>API References C++
>http://doc.aldebaran.com/libqi/api/cpp/index.html
: command not founde

とあるシェルスクリプトを実行したら、
`: command not founde`
というエラーが出現。
ググっても日本語ページがヒットしなかったので、誰かの参考になればと思い、ここに自分の場合の原因と教訓を記しておく。

原因：改行コード

教訓：ソースコードのコピペには気をつけよう
Swift初心者メモ ランダムな整数が欲しい

追記しました！


```swift:hoge

var randNum = arc4random_uniform(最大値)

// 例えば0〜5の6種類のランダムな整数値だったら
var randNum = arc4random_uniform(6)


/*
var randNum = Int(arc4random()) % ランダム最大値
// 例えば0〜5の6種類のランダムな整数値だったら
var randNum = Int(arc4random()) % 6
*/

```
Unknown type name 'ClassName' エラーの対処法

```objc
Unknown type name ClassName
```

クラスが正しく定義されているにも関わらずこのエラーが出る場合は、
importで互いのクラスのヘッダファイルを参照しあっていることが原因かもしれません。

すなわち、2つのクラスClass1, Class2のヘッダファイルの冒頭が

```objc:Class1.h
#import "Class2.h"
```
```objc:Class2.h
#import "Class1.h"
```
のようになっている場合です。
これは循環参照(Class2.hを参照→Class1.hを参照→Class2.hを参照→…[以下無限])となるため、認められません。

回避するためには @class コンパイラディレクティブを使用します。上の例の場合は、

```objc:Class1.h
@class Class2;
```
```objc:Class1.m
#import "Class1.h"
#import "Class2.h"
```
```objc:Class2.h
@class Class1;
```
```objc:Class2.m
#import "Class1.h"
#import "Class2.h"
```
とします。
ここでは、@class コンパイラディレクティブによりClass1に対してClass2がクラスであることを知らせた上で、Class2のヘッダファイルはClass1の実装ファイルに対して直接インポートすることによって循環参照を回避しています。(Class2とClass1を逆にして考えた場合ももちろん同様です。)
Class1.hまたはClass2.hの片方でのみ @class コンパイラディレクティブを使用しても循環参照は回避できるため、同様の効果が得られます。

## 参照
http://iphone-dev.doorblog.jp/archives/5550337.html
まんまパクリです。
[Android]データ接続設定を確認する

# モバイルデータ接続

ネットワーク状況を確認する時に、ネットワークタイプや機内モードかどうかは確認できますが、モバイル通信の時に、データ接続の設定が有効かどうかはAndroidのAPIでは取得できません。

しかし、@hideな隠しAPIで用意されているので必要な場合はリフレクションで取得することができます。
ユーザがオフにしてしまっている時にエラーメッセージを出し分けたい場合は、取得することができるでしょう。

## ConnectivityManager.getMobileDataEnabled

ConnectivityManagerにはgetMobileDataEnabledという隠しメソッドがあるので、実行して取得できます。

[How to tell if 'Mobile Network Data' is enabled or disabled (even when connected by WiFi)?](http://stackoverflow.com/a/12864897)

```java:
boolean mobileDataEnabled = false; // Assume disabled
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    try {
        Class cmClass = Class.forName(cm.getClass().getName());
        Method method = cmClass.getDeclaredMethod("getMobileDataEnabled");
        method.setAccessible(true); // Make the method callable
        // get the setting for "mobile data"
        mobileDataEnabled = (Boolean)method.invoke(cm);
    } catch (Exception e) {
        // Some problem accessible private API
        // TODO do whatever error handling you want here
    }
```

android.Manifest.permission.ACCESS_NETWORK_STATEのpermissionが必要です。

## TelephonyManager

Android5.0からはConnectionManager.getMobileDataEnabled関数はDeprecatedになりました。

> Deprecated:
>    Talk to TelephonyManager directly

まだ使えるようですが、TelephonyManagerに記述が移動したようです。
5.0からはそちらを呼ぶことも可能です。

```java:
        TelephonyManager tm = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);
        try {
            Class cmClass = Class.forName(tm.getClass().getName());
            Method method = cmClass.getDeclaredMethod("getDataEnabled");
            method.setAccessible(true);
            // Make the method callable get the setting for "mobile data"
            return (Boolean) method.invoke(tm);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return false;
```

ちょっと権限は調べられていませんが、同じかと思います。
【elasticsearch】idを指定せずに、bulk-insert


# id指定なし"bulk-insert"がわからなかったら...

調べた

``` bash:bulkinsert
curl -XPOST 'localhost:9200/test_index/test_type/_bulk?pretty' -d '
	{ "index" : {}       }
	{ "name"  : "java"   }
	{ "index" : {}       }
	{ "name"  : "golang" }
'
```

折角なので bulk apiを軽く記述

# bulk API

複数の処理をまとめて一つのリクエストで要求できるAPI
このAPIを利用することで一つずつリクエストする場合に比べ
処理速度を大幅に稼ぐことができる

## 適当に計測
100ドキュメントのデータをinsertしてみると
全然処理にかかる時間が違うのがわかる
いろんなデータストアはbulkを利用するほうがだいたい
性能を稼げるのでチェックするほうがいい

| each row post | use bulk api | 
|:--------------|-------------:|
| 0m1.618s      |     0m0.077s | 


``` bash:sample-data
$ cat sample.json
{"name":{"last":"Lynch","first":"Marisol"}}
{"name":{"last":"Webster","first":"Abby"}}
{"name":{"last":"Malone","first":"Poole"}}
.
.
.
{"name":{"last":"Harrell","first":"Suzette"}}
{"name":{"last":"Myers","first":"Lakeisha"}}

```

### 一行ごとにポスト (each row post)

```bash:each-row-post.sh
#!/bin/bash
lineNum=1

cat $1 | while read JSON_DATA
do
    curl -XPUT "localhost:9200/bulk_table/users/${lineNum}" -d "${JSON_DATA}" 
    lineNum=$((lineNum + 1))
done
```

### bulkAPIを利用してpost (use bulk api)

``` bash:bulk-post.sh
curl -XPOST "localhost:9200/bulk_table/users_bulk/_bulk" --data-binary @test-bulk.json; echo
```


## 利用方法

``` bash:entrypoint
# index, type指定
curl -XPOST 'localhost:9200/{index}/{type}/_bulk'

# type省略
curl -XPOST 'localhost:9200/{index}/_bulk'

# index, type省略
curl -XPOST 'localhost:9200/_bulk'

```

indexやtypeを指定すると続くアクションの
デフォルトとして利用される

## アクション
+ index ：ドキュメントがなければ新規登録、あればリプレース
+ create：ドキュメントがない場合だけ動作
+ delete：ドキュメントを削除
+ update：存在するドキュメントにマージする

## 記述方法
deleteは一行のみだけど残りは2行で一つのアクションを記述することになる

``` bash:_bulk
{ "delete": { "_index": "test_index", "_type": "lang", "_id": "123" }} 
{ "create": { "_index": "test_index", "_type": "lang", "_id": "123" }}
{ "name":    "php5.3" }
{ "index":  { "_index": "test_index", "_type": "lang" }}
{ "title":    "php5.6" }
{ "update": { "_index": "test_index", "_type": "lang", "_id": "123", "_retry_on_conflict" : 3} }
{ "doc" : {"title" : "php7"} } 
```


## 参考
+ https://www.elastic.co/guide/en/elasticsearch/guide/current/bulk.html
API Reference《前編》


#前書き
前の記事ではqiSDKについて簡単な解説をしました。
今回は続編として、APIリファレンスについて簡単に解説します。

#本題
##API Referenceについて
この項は主に3項目あります。

* 型の定義(Type equivalences between languages)
* PythonのAPI Reference
* C++のAPI Reference

この３つです。

##型の定義
qiの型,C++,Python,Javaのそれぞれの方の比較をしています。

| qi type | C++ | Python | Java |
|:----------:|:-----------:|:------------:|:------------:|
|Void|void|NoneType|Void|
|Bool|bool|bool|Boolean|
|Int#|int#_t|int|Integer|
|UInt#|uint#_t|int|Integer|
|Float|float|float|Float|
|Double	|double	|float|Double|
|String	|std::string|str|String|
|List<T>|std::vector<T>|list|ArrayList<T>|
|Map<T, U>|std::map<T, U>|dict|Map<T, U>|
|Object	|qi::AnyObject|class instance|qimessaging.Object|
|Value|qi::AnyValue|underlying type|Object|


##PythonのAPI Reference
PythonはAPIの数がそれほどでもないので全部のせます。
詳しくはドキュメントを読んでください。

###qi.Application API
	アプリケーションを起動したり停止したり、そんな感じ

###qi clock API
	いろんなタイムスタンプを取得します。

###qi.logging API
	loggerです。infoやerror,warningなど系5種でlogを出します。

###qi.path API
	パスを見つけて関数にsetします。

###qi.Session API
	セッションを取得/登録出来ます。

###qi.Future API
	マルチスレッドでの、データの同期をします。

###qi.Signal API
	スレッド間のやり取りを行います。

###qi.Property API
	Introductionがありませんでした。
	(コールバック関数に関してのAPIっぽい？)

###qi.Types* API
	それぞれの型に対するAPIです。インスタンスがあるか？値はいくつ？とかそんな感じ。

###Bind API
	関数を縛るためのAPI
	メソッドの引数や戻り値を指定したものにしたり、bar1,bar2のような2つの関数をbarという関数として利用したり。そんな感じ。

###qi.async, qi.PeriodicTask API
	スレッドの管理

###qi.Translator API
	いくつかの言語を登録することで、簡単なローカライズが可能になるとかそんな感じ？

###qi.Module API
	自作モジュールの読み込みを可能にする
	以下引用により、たぶんまだ使えません。
	>*Creating modules in Python is not yet supported.
	>*Pythonで作ったモジュールはまだサポートしていません

##C++のAPI Reference
くっそ数が多いので、別記事へ。

#感想
ちゃんと使えれば、Choreographeで開発するより早そう。
	

#関連URL
>API References
>http://doc.aldebaran.com/libqi/api/python/index.html
[MySQL] auto_incrementのオフセットを変える

## テーブルtesttableのidの開始番号を1001にする

```mysql
CREATE TABLE testtable (
  id int AUTO_INCREMENT PRIMARY KEY
) AUTO_INCREMENT=1001
```

## alter tableする場合

```mysql
ALTER TABLE testtable AUTO_INCREMENT = 1001;
```

## 動作確認

```mysql
insert into testtable() values ();
insert into testtable() values ();
insert into testtable() values ();
```

![スクリーンショット 2015-08-26 午後3.08.28.png](https://qiita-image-store.s3.amazonaws.com/0/84451/a62a5922-36bb-df27-4717-8cf0ce21739d.png)



## 参考
https://dev.mysql.com/doc/refman/5.0/en/replication-options-master.html#sysvar_auto_increment_offset
[Android][Lollipop]UsageStatsManagerでgetRunningAppぽく取得する

# UsageStatsManager

最近Lollipopで追加されたUsageStatsManagerを使ってみています。



* [【Android】getRunningTasksが使えなくなったLollipopでアプリ使用状況を取得する](http://qiita.com/kgmyshin/items/35b002e42df2027fb56e)
* [[Android][Lollipop]UsageStatsManagerを使ってみた](http://qiita.com/wasnot/items/6074dbcdd49141f8e7d8)


ActivityManager.getRunningTaskの代替として使うため、他の部分を書き換えないように同じような内容を取得してみました。
UsageStatsManager.queryEventsが一番内容が良さそうですが、順番が古い順なのと、数が指定できないのと、eventがフィルタできないのでそれを実装しているだけです。

ちょっと色々カッコ悪いです。。

```java:
// 前面のアプリのComponentNameだけ取得しています。
// Taskと違ってあまり情報がありませんが。。
public static List<ComponentName> getForegroundAppList(Context context, int size) {
    List<ComponentName> nameList = new ArrayList<ComponentName>();
    // どこかでpermissionを確認します。
    if (!checkPermission(context))
        return nameList;

    long time = System.currentTimeMillis();
    UsageStatsManager usm = (UsageStatsManager) context.getSystemService("usagestats");
    long interval = 10 * 1000;
    do {
        UsageEvents events = usm.queryEvents(time - interval, time);
        while (events.hasNextEvent()) {
            UsageEvents.Event event = new UsageEvents.Event();
            if (events.getNextEvent(event)) {
                // eventTypeがMOVE_TO_FOREGROUNDのものだけ取ったらgetRunningTasksっぽかったのでフィルタしています。
                // 古い順に取得されるので先頭から追加して新しい順に直しています。
                if (event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) {
                    // 使いやすいようにcomponentNameに変えています。
                    String packageName = event.getPackageName();
                    ComponentName name = new ComponentName(packageName, event.getClassName());
                    // リストにの先頭に追加する
                    nameList.add(0, name);
                }
            }
        }
        interval *= 10;
    }
    // 指定した数以上、foregroundのイベントが取得できるまで続けてます。
    // 無限ループになりそうなので10万秒くらいを上限にしています。これでも大きすぎる気がします。
    while (nameList.size() < size || interval > 100000 * 1000);
    return nameList;
}
```

checkPermissionは以前記事にしました。
[[Android][Lollipop]UsageStatsManagerの権限状態の確認方法](http://qiita.com/wasnot/items/7ce28d3884ab710207c9)

書いてみて思ったのは、特に必要がなければEventのListをそのまま使っていい気がします。。
もっといい方法があったら教えていただければ直します。
MacのChromeでキャプチャと撮るときにスクロールバーを消す

Chromeにプラグインを入れてWebページのキャプチャを撮るとき、ページが長いとスクロールバーもキャプチャに入ってしまうことがあります。

そんな時はChromeのインスペクタでbodyに下記のスタイルを付けて上げるとスクロールバーが表示されず、ページのみ綺麗にキャプチャできます。

```
body::-webkit-scrollbar{
    width: 0;
}
```
例外フィルター


Visual Studio 2015 より、C# のバージョンが 6 になり、例外フィルターが追加されました。
例外フィルターは VB.net では以前より実装されていましたが、あまり使ったことが無かったので調べてみました。

# VBの例外処理

文法は次のようになっています。

```vbnet
Try
    [ tryStatements ]
    [ Exit Try ]
[ Catch [ exception [ As type ] ] [ When expression ]
    [ catchStatements ]
    [ Exit Try ] ]
[ Catch ... ]
[ Finally
    [ finallyStatements ] ]
End Try
```

例外フィルターとは Catch の後の When のことで Catch 節を処理するかどうかの条件を指定できます。
Catch の中で If 文により処理を分岐させるのと何が違うのか理解できていなかったので今まで使用してきませんでした。
C# で新しく例外フィルターが追加され、例外フィルターの一般的な使用方法にログの記録があると説明されています。Catch の中で例外を再スローするとスタックに影響を及ぼすそうです。

例えばログを記録して再スローする簡単な例を一つ。

```vbnet
Sub Main()
    Try
        AAA() '(1)
    Catch ex As Exception
        Console.WriteLine(ex)
    End Try
End Sub

Sub AAA()
    Try
        BBB() '(2)
    Catch ex As Exception
        Console.WriteLine(ex.ToString())
        Throw '(3)
    End Try
End Sub

Sub BBB()
    Try
        Throw New Exception("TEST") '(4)
    Catch ex As Exception
        Console.WriteLine(ex.ToString())
        Throw '(5)
    End Try
End Sub

```
Main 関数でキャッチされる例外のスタックトレースには (5), (3), (1) の順に記録されています。
Catch 内でそのまま Throw していますが Throw ex のようにすると Main 関数でキャッチされる例外のスタックトレースは (3), (1) になり、BBB で発生した情報が無くなります。例外をそのまま再スローする場合は Throw の後には例外を書かないようにします。
でも、望ましいのは (4), (2), (1) が記録されているスタックトレースだと思います。例外フィルターを利用して例外処理を通らないようにすれば再スローも必要が無いので望みのスタックトレースになります、そこでログを出力して False を返す関数を When の条件に指定します。

```vbnet
Sub BBB()
    Try
        Throw New Exception("TEST")
    Catch ex As Exception When ErrorLog(ex)
    End Try
End Sub

Function ErrorLog(ex As Exception)
    Console.WriteLine(ex.ToString())
    Return False
End Function
```
conoha apiを使ってvpsを立てる

    gem i openstack

```rb:conoha_create.rb
require 'openstack'

module OpenStack
  class Authentication
    def self.init(conn)
      if conn.auth_path =~ /.*v2.0\//
        AuthV20.new(conn)
      else
        AuthV10.new(conn)
      end
    end
  end
end

flavor_name = 'g-1gb'
image_name = 'vmi-ubuntu-14.04-amd64'

# https://www.conoha.jp/docs/compute-create_vm.html
os = OpenStack::Connection.create(
  username: ENV['CONOHA_USER'],
  api_key: ENV['CONOHA_PASS'],
  authtenant_id: ENV['CONOHA_TENANT_ID'],
  auth_url: 'https://identity.tyo1.conoha.io/v2.0/tokens',
)

#pp os.servers
os_flavor = os.flavors.select{|flavor|flavor[:name]==flavor_name}.first
os_image = os.images.select{|image|image[:name]==image_name&&image[:status]=='ACTIVE'}.first

newserver = os.create_server(
  name: 'New Server',
  metadata: {
    instance_name_tag: ENV['CONOHA_NAME_TAG'],
  },
  imageRef: os_image[:id],
  flavorRef: os_flavor[:id],
  adminPass: ENV['CONOHA_ADMINPASS'],
  key_name: ENV['CONOHA_KEY_NAME'],
  security_groups: ['gncs-ipv4-all'],
)
while newserver.accessipv4.nil?
  sleep 15 # ip振り分けられるのを少し待つ
  newserver.refresh
end
puts newserver.accessipv4
```

各種環境変数の設定をして実行しましょう。ipアドレスが出力されるのでしばらく待ってvps立ち上がるの待ってから(1分ぐらい?)

    ssh root@123.456.789.012

とかで行けると思います。

## カスタマイズ

自分好みに設定諸々を変更したくなると思います。その際に必要になるであろう情報をば。

リファレンスが以下
<https://www.conoha.jp/docs/>

リファレンスで出てくる`X-Auth-Token`の取得方法

```
curl -s -X POST \
-H "Accept: application/json" \
-d '{"auth":{"passwordCredentials":{"username":"xxxxxxxxxxx","password":"yyyyyyyyyy"},"tenantId":"zzzzzzzzzzzzzzzz"}}' \
https://identity.tyo1.conoha.io/v2.0/tokens | jq '.access.token.id'
```

```
"aaaaaaaaaaaaaaaaaaaaaa"
```

1日だけ有効のトークンが取得されます。そのトークンを使ってこんな風に

```
curl -s -X GET \
-H "Accept: application/json" \
-H "X-Auth-Token: aaaaaaaaaaaaaaaaaaaaaa" \
https://networking.tyo1.conoha.io/v2.0/security-groups | jq '.security_groups[].name'
```

```
"gncs-ipv4-ssh"
"gncs-ipv4-all"
"default"
"gncs-ipv6-ssh"
"gncs-ipv4-web"
"gncs-ipv6-all"
```

セキュリティグループの一覧取得したりとかして設定値とか取得して設定変えたりとかしていきましょう。
Androidのemulatorで悪通信環境を再現する方法のメモ

# 環境
- OS X Yosemite でやってる
- いつもはAndroid StudioからAVD Manager → emulator起動 という具合にやっていた

# 1. emulatorコマンドを使えるようにする
SDKのtoolsディレクトリにPATHを通す

```.zshrc
export PATH=$HOME/Library/Android/sdk/tools:$PATH
```

これで```$ emulator -help``` でヘルプ確認できるようになった。

# 2. 指定のADVをオプション付きで動かす

AVD Manager で作ったものの一覧が出てくる

```
$ emulator -list-avds                                                                       
Android4_0_3_Nexus_4_API_15
Android4_1_2_Nexus_5_API_16
Android4_2_2_Nexus_4
Android4_4_2_Galaxy_Nexus_API_19
```

名前を指定して、netspeedのオプションをつけてやると、通信速度を制限した状態でエミュレータが起動する。

```
$ emulator -avd Android4_4_2_Galaxy_Nexus_API_19 -netspeed umts
```

指定する値は developer.android.com を参照。
http://developer.android.com/tools/devices/emulator.html#netspeed


# 参考
- http://www.javadrive.jp/android/emulator/index3.html
- http://stackoverflow.com/questions/7026251/android-simulate-low-network-connectivity
qi SDK Documentation 2.5.0.30 documentationを読んで。


#前書き
AldebaranのGitHubを見つけたました。その中のlibqi内にドキュメントがあり、それを見てわかったことをつらつらと書き連ねていきたいと思います。

>qi SDK Documentation 2.5.0.30 documentation
>http://doc.aldebaran.com/libqi/index.html

#本題
現在、NAOやPepperはNAOqiが動いていろいろと動作をしています。ただ、このドキュメントを読むと、おそらく今後はqiFrameworkと言うものに切り替わると予想されます。

##qiFrameworkとは
###libqiについて
"qiFrameworkとは"と題しておきながらうまい具合に説明されているところを見つけられなかったので、このドキュメントのあった、libqiについて説明を引用しようと思います。

libqiについて
>libqi is a middle-ware framework that provides RPC, type-erasure, cross-language interoperability, OS abstractions, logging facilities, asynchronous task management, dynamic module loading.

Google日本語訳
>libqiは、RPC、型消去、言語間の相互運用性、OSの抽象化、ロギング機能、非同期タスク管理、動的なモジュールのロードを提供ミドルウェアフレームワークです。

よくわかんないですが、要はAPIですね。たぶん。

##ドキュメントについて
このドキュメントは主に以下の項目で作成されています。

* API Reference
	C++/PythonのAPIのReferenceです。
	
* Hands-on guide
	C++/Pythonの書き方や使い方などの他に、sshでPepperやNAOにつないだ際に利用できる、qicli(キークリと呼んでいます。)の使い方も載っています。

* Design documents
	ネットワークの仕様や、使い方、コーディング規約などが載っているようです。

* Changelogs
	名の通りチェンジログです。


#感想
暇があれば、APIリファレンスに関してと、Hands-on guideについては記事にしたいと思います。

やっぱり英語難しいです。

#関連URL

>qi SDK Documentation 2.5.0.30 documentation
>http://doc.aldebaran.com/libqi/index.html

>Aldebaran GitHub
>https://github.com/aldebaran/
Javaばかり書いている僕がGo言語の勉強で参考になったサイトまとめ

普段Java（特にAndroid, Servlet）をメインに、Javascript, Pythonなどで開発の仕事をしている僕がGo言語を勉強していて参考になったサイトのまとめです。


#言語仕様
http://golang.org/

まあ、大枠は公式見ろって話ですね。
チュートリアルが懇切丁寧なのと、モバイルからでも見やすいので一つずつステップを進めていくだけでもだいぶ覚えられます。


#インポート

[Go言語でローカルパッケージをインポート](http://system.hateblo.jp/entry/2013/06/22/020918)

とりあえず基本のキ。ソースコード書いててファイル分割しようかなー、と思ったときに見るとちょうど良い感じ。

とはいえ、ビルドしたファイルのインポートとか、githubリポジトリからのインポートとか、いろいろパターンがあるのでその辺はまだ勉強不足。。。


#クラス
[お気楽 Go 言語プログラミング入門](http://www.geocities.jp/m_hiroi/golang/abcgo07.html)

Go言語ではクラスのようなものを作ろうと思ったら構造体を使う。
構造体だけだとフィールド（メンバ変数のようなもの）の定義だけなので、メソッドを定義したければレシーバ付きの関数を定義する。

なんと言うか、ソースコードが「クラス」ありきでないところがJavaとは勝手が違うところ。


#継承、インターフェース
[インタフェースの実装パターン #golang - Qiita](http://qiita.com/tenntenn/items/eac962a49c56b2b15ee8)

この辺りがJavaの継承の考え方とは大きく違うところな印象。
Javaはクラスに対して、implementsやextendsで親クラスを宣言するが、Go言語ではインターフェースで宣言されているメソッドを実装したクラスが勝手にそのインターフェースの実装クラスになる。
implementsつけたくなる。っていうかついてないとなんとなく落ち着かない。。。

あと、Go言語では「継承」という概念はない。けど「埋め込み」を使って同じような実装をすることができる。らしい。



#関数への参照渡し
[お気楽 Go 言語プログラミング入門](http://www.geocities.jp/m_hiroi/golang/abcgo06.html)
これの「ポインタを関数に渡す」あたり。

Go言語ではポインタがある。「ポインタがある」っていうとC言語を研修や授業でちょろっとやったような人に嫌な顔されそうだけど、C言語よりは理解しやすくなっている（というかコーディングするときに理解しなければならない範囲が狭まっている）と思う。

逆にJavaはポインタが文法的に無いばっかりに参照渡しでハマる人が続出しているように思う。
Go言語のように、引数がコピーを渡すのか参照を渡すのかくらい自分で指定できる方が勉強のためにもちょうど良い気がする。


#並列処理
// TODO: これから勉強する。並列処理の扱いやすさはGo言語の特徴の一つらしい。


あとはファイル入出力とかDB接続とかWebサーバ立てたりとかもやってみたけど、まだ「あーなるほどこうやって書けば動くのね」程度の感想しかないため、割愛。

しかし、Go言語はシンプルだから数日で書けるようになるよ！って書いている人がたくさんいる中、1ヶ月たってまだこれくらいしか書くことがないってどうなんだろうか。。。


#（おまけ）僕の中の言語に対する勝手なイメージ
- Java：機械の部品を作って組み立ててるイメージ
- Javascript：何か好きなものを好きなように作るイメージ
- Go：石職人
jQuery Easing Pluginをbowerで使う


#概要

jQuery Easing Pluginをbower経由で使ったときのメモ。公式では提供されていないので、誰かが登録してくれたものを使う。自分で登録してメンテするのもめんどくさいですし。。

#選択肢

以下の2つがあり、1は`bower install jquery-easing --save`、2は`bower install jquery.easing --save`でinstallできる。

1. <a href="https://github.com/danro/jquery-easing" target="_blank">danro/jquery-easing</a>
2. <a href="https://github.com/jozefizso/bower-jquery-easing" target="_blank">jozefizso/bower-jquery-easing</a>

1は、`bower.json`のmainに`.js`と`.min.js`の両方が指定してあり、使用しているgrunt taskの都合上よくなかったため、2を採用した。star少ないけど、まあ大丈夫でしょう。
Ubuntu14.04で.bash_profileが読み込まれない（見つからない）

[14.04 - I can not find .bash_profile in ubuntu - Ask Ubuntu](http://askubuntu.com/questions/510709/i-can-not-find-bash-profile-in-ubuntu)

`.bash_profile`じゃなくて`.profile`を使えとのこと。ちなみに`.profile`は、ログイン時に一度だけ実行されます（シェル起動時に毎回実行されるのは.bashrc）なので、環境変数の設定は`.profile`に記述します。

[本当に正しい .bashrc と .bash_profile の使ひ分け - Qiita](http://qiita.com/magicant/items/d3bb7ea1192e63fba850)
Vue.jsで親ViewModelにcomponentをぶら下げてデータを共有

あるページに一つの親ViewModelがあって、そいつが持っているDataModelを親ViewModel配下のcomponentがいじるような設計を試してみた。

構成は以下のような感じ

![Vue_component.png](https://qiita-image-store.s3.amazonaws.com/0/11510/723af5e3-b2b3-2cfb-c241-a690568672c5.png "Vue_component.png")

ViewModelのdataにDataModelを入れてその値をcomponentが読み出す感じ。

ソースは以下

```html
<h1>Component Test</h1>
<div class="main">
    {{title}}
    <my-component-one data="{{$data}}"></my-component-one>
    <my-component-two data="{{$data}}"></my-component-two>
    <button v-on="click:output">
        check
    </button>
</div>
<div class="output">
</div>
<my-component></my-component>
```

```javascript
var dataModel = {
	title: "Title",
    one: "component1",
    two: "component2"
};

var MyComponent_one = Vue.extend({
    template: '<p v-on="click:rewrite">{{data.one}}</p>',
    props: ['data'],
    methods:{
    	rewrite: function(){
        	this.data.one = "rewrite";
        }
    }
});

var MyComponent_two = Vue.extend({
    template: '<p v-on="click:rewrite">{{data.two}}</p>',
    props: ['data'],
    methods:{
    	rewrite: function(){
        	this.data.two = "rewrite";
        }
    }
});

var mainViewModel = new Vue({
    el: ".main",
    data: dataModel,
    methods: {
        output: function(){
            $('.output').html(this.$data.one + " " + this.$data.two);
        }
    },
    components: {
        "my-component-one": MyComponent_one,
        "my-component-two": MyComponent_two
    }
});
```

文字列をクリックしたらデータが書き換わる。checkボタンでDataModelの中身を確認すると書き換わっているのがわかる。

![vue_component.gif](https://qiita-image-store.s3.amazonaws.com/0/11510/abbd5138-cc46-2cb8-12b0-062577a4f168.gif "vue_component.gif")

この設計がいいかはわからないけど、とりあえずやりたいことはできた。

## jsfiddle
http://jsfiddle.net/tomato360/1s5jdc3b/5/
github > license > プロジェクトのトップページ、ファイルリストのちょい上にある+マークから新規ファイル追加画面に遷移できて、そこでファイル名をLICENCEとするとテンプレートを選ぶドロップダウンが出現します。

http://qiita.com/bpyamasinn/items/ac9ceda558e03378a658
で以下のコメントを見つけた。

@heavywatal さん
> リポジトリ作成時じゃなくてもGitHubにテンプレートを作ってもらえますよ。プロジェクトのトップページ、ファイルリストのちょい上にある+マークから新規ファイル追加画面に遷移できて、そこでファイル名をLICENCEとするとテンプレートを選ぶドロップダウンが出現します。

[githubでライセンスを設定する @ qiita] (http://qiita.com/shibukk/items/67ad0a5eda5a94e5c032#%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B) に画像が表示されている。

> ここから、設定したいライセンスを選んでリポジトリを作成するだけで、LICENSEというファイルが出来ちゃいます。かんたん。

しかし、上記の画面への行き方が今のところわからない。
IT女子のゼロから始めるIoTーステップ1: Raspberry pi2とNodejsでLチカ


IT歴約1年の私でも、IoTなものを自分の手で作れたらいいなと思い、挑戦しました！
こでまでは、IoTどころかRaspberry piの存在も知らず、Linux、 nodejs、 電子工作、全てが初挑戦でした。
 
初めてRasberry piを触ってから、操作できるようになるまでの過程を記録していきたいと思います。

まずは「ステップ1: Raspberry pi2とNodejsでLチカ」です。

# 習得できた知識
* Linuxの知識
    * この本で勉強をしました：[たのしいUNIX](http://www.amazon.co.jp/%E3%81%9F%E3%81%AE%E3%81%97%E3%81%84UNIX%E2%80%95UNIX%E3%81%B8%E3%81%AE%E6%8B%9B%E5%BE%85-Ascii-books-%E5%9D%82%E6%9C%AC-%E6%96%87/dp/4756107850?SubscriptionId=175BC0N2BCT0X4DAZG82&tag=amebablog-a538625-22&linkCode=xm2&camp=2025&creative=165953&creativeASIN=4756107850)
    * vi, ディレクトリ操作はたくさん使います
* JavaScript, Node.js
    * Node.jsはJavaScriptを実行してくれるもの
    * node [JavaScriptで書いたプログラム.js] で実行してくれる！

* 電子工作
    * 下の「Raspberry piとLEDライトをつなぐ」で説明しています


# 用意したもの
* Raspberry pi2
* LEDライト その他 → [Raspberry Pi 電子工作入門キット](http://www.amazon.co.jp/%E3%83%8F%E3%83%83%E3%82%AF-%E3%83%A9%E3%82%BA%E3%83%99%E3%83%AA%E3%83%BC%E3%83%91%E3%82%A4-Raspberry-Pi-%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C%E5%85%A5%E9%96%80%E3%82%AD%E3%83%83%E3%83%88%E3%80%82/dp/B00G86DOP8#productDetails)を購入しました

# 準備
* Raspberry pi2セットアップ
* nodejs インストール 
* → ここでとても苦戦！新しいバージョンをインストールできていないと後ほど困ってしまいます

# Raspberry piとLEDライトをつなぐ
* この白いボードは、矢印のように縦・横の列に電流が流れる
* 今回は8番ポートを使用した
* LEDの向きも決まっているので注意！
    * 電気はLEDの足の長い方から短い方へ流れます
    * なので、長い方を8番ポート側に(画像の向かって左)、短い方(画像の向かって右)をGND側につなげます 

![led.jpg](https://qiita-image-store.s3.amazonaws.com/0/76550/ec0d13d3-dc16-cc20-add4-e9dbe9055957.jpeg)


# まずはGPIOをつかって光らせる

まずは8番ポートを使うと宣言(export)

> $ echo 8 > /sys/class/gpio/export
> →これで「gpio8」フォルダが出来上がる

今回は8番ポートから電気を出力する宣言をする
 (directionに「out」と書き込む)
> $ echo out > /sys/class/gpio/gpio8/direction

準備が完了したので、LEDをONにする
 (valueに「1」と書き込む)
> $ echo 1 > /sys/class/gpio/gpio8/value

LEDをOFFにする。「1」でON「0」でOFFです！
 (valueに「0」と書き込む)
> $ echo 0 > /sys/class/gpio/gpio8/value

最後に終了を宣言する(unexport)
> $ echo 8 > /sys/class/gpio/unexport


# JavaScriptでLEDを光らせる
先ほどのGPIOの操作をJavaScriptで操作してみる

以下のコードは、LEDを光らせて3秒後に消しています

```lang:led.js
var fs = require('fs');
fs.writeFileSync('/sys/class/gpio/export', '8');
fs.writeFileSync('/sys/class/gpio/gpio8/direction', 'out');
fs.writeFileSync('/sys/class/gpio/gpio8/value', '1');

function offLed(){
    fs.writeFileSync('/sys/class/gpio/gpio8/value', '0');
    fs.writeFileSync('/sys/class/gpio/unexport', '8');
};
setTimeout(offLed, 30000);
```

# 光った
![led_on.jpeg](https://qiita-image-store.s3.amazonaws.com/0/76550/a584556d-b7a0-acf6-bd6a-afe7bab902b4.jpeg)
Dynamic fields with rails

This is an example of implementing dynamic fields of has_many associations.
We have two models Price and Product with has_many association as defined below.

```price.rb
class Price < ActiveRecord::Base
  belongs_to :product
end
```

```product.rb
class Product < ActiveRecord::Base
  has_many :prices
  accepts_nested_attributes_for :prices, allow_destroy: true

  def initialize(attrs=nil)
    super
    self.prices << Price.new if self.prices.empty?
  end
end
```

We define route for adding dynamic price fields.

```routes.rb
    resources :products do
      get :new_price, on: :collection
    end
```

In controller, we make sure  to include prices_attributes in permitted attributes.
We don't need any controller action for new_price since it will be processed directly by new_price.js.erb

```products_controller.rb
  private
  def product_params
    params.require(:product).permit(:name, :other_product_fields...
                                     prices_attributes: [
                                       :id, :value, ...,
                                     ])
  end
```

This is the javascript for rendering new dynamic fields based on the next_index received.
We render the dynamic fields with child_index set as next_index. Also, next_index of new button is incremented.

```new_price.js.erb
<% field = "" %>
<% form = "" %>

<%# build a single price field %>
<% form_for Product.new do |f| %>
  <% form = f %>
  <% f.fields_for :prices, Price.new, child_index: params[:next_index] do |fa,idx| %>
    <% field = fa %>
  <% end %>
<% end %>
$("#new-price").append("<%= escape_javascript(render(partial: "price", locals: {f: form, fa: field}))%>");
$("#new-price-btn").attr({href: "<%= escape_javascript(new_price_products_path(next_index: params[:next_index].to_i+1)) %>"})
```

In price partial file, _destroy checkbox is included so that we can remove dynamic fields on save.

```_price.html.haml
/ Price fields ...

/ Actions
= fa.check_box :_destroy
```

Finally, we add new price button in product form.

```_form.html.haml
=form_for @product do |f|
  / Product fields...
  =f.fields_for :prices do |fa,idx|
    / Price 
    = render partial: "price", locals: {f: f, fa: fa}
  / Add new price button
  = link_to new_price_products_path(next_index: f.object.prices.length), id: "new-price-btn", class: "btn btn-info btn-sm", remote: true do
    =t("helpers.links.new")
```
JavaScriptでPHPの変数の値を使う方法メモ



```html:filename
<?php $hoge = 'はろー'; ?>

<script type="text/javascript">
    var hoge = <?php echo json_encode($hoge); ?>;
    console.log(hoge); // はろー
</script>
```


これで行けた。
XSSの可能性があるため、json形式にして渡す
onInputが実装されていないIEで、autocomplete入力を検知する

通常のフォーム要素（```input[type="text"]```とか系）で、「値が入力されましたよ」をリアルタイムで検知できる```onInput```は非常に便利ですね。
autocompleteで入力された場合にも```onInput```は検知してくれる優れものです。

モダンブラウザであれば当然のように実装されているのですが、モダンブラウザでない場合の対応が...。
実装されてない子の場合、「autocompleteされましたよ」を検知するのはとても厄介。

...だと思っていたのですが。
某IE系の子たちは、やっぱり独自実装のeventを持っていました。
```onPropertychange```でいけそうです。

```js
$(targetObject).on('input propertychange', function(){
// eventを捕捉したときの動作
})
```

というわけで、なんとかかんとか動かすことができたのでした。めでたしめでたし。
ln の引数のおぼえ方

A から B への symbolic link を張りたいとき、

```
ln -s B A
```

という command を打つ。この引数の順番がおぼえにくい。「A から B」なのに引数は `B A` である。直観的でないように思える。

しかし、

```
ln -s B A
```

を

```
mv B A
```

や

```
cp B A
```

と並べてやると、いつも、「B は既にあるもの、A は新しく作るもの」という関係がある。この関係を手がかりにすれば、 `ln` の引数の順番も飲み込みやすい。
Ruby on Rails とReact.js で作るWEBアプリケーションのクロスドメイン対応



## 課題

RailsのサーバーをAPIサーバー化して、フロントをReact.jsで構築した際にhttpリクエストを投げるとクロスドメインで弾かれる。

## 対応

```
Railsのサーバー側に変更を加える事で問題は解決できる。
```

① gemの導入

・rack-corsを追加

```
 gem 'rack-cors', :require => 'rack/cors'
```

② config/application を編集
・編集

```
config.middleware.use Rack::Cors do
 allow do
  origins '*'
  resource '*', :headers => :any, :methods => [:get, :post, :options]
 end
end

```

を追記。

上記を行うことでクロスドメインを受け付けることが可能となる。
SQLite3で同一グループ内で最小のレコードを取得する

例えば、以下のようなテーブル(table)があったとして、
ic1とic2の組み合わせの中でkyoriが最小となるレコードを抽出したい。

|ic1|ic2|kyori|comment|
|---|---|-----|-----|
|001|002| 10.5|TypeA|
|001|002| 21.3|TypeB|
|001|002| 28.4|TypeC|
|001|003| 15.5|TypeA|
|001|003| 26.3|TypeB|
|001|003| 33.4|TypeC|

グループ化して最小値を求めればいいんでしょ？
ということで教科書どおりのSQLを書いてみた。

```sqlite3
SELECT ic1, ic2, min(kyori), comment
FROM table
GROUP BY ic1, ic2
```

だが、このSQLを実行すると予想外の結果が返ってきた。

|ic1|ic2|kyori|comment|
|---|---|-----|-----|
|001|002| 10.5|TypeC|
|001|003| 15.5|TypeB|

あれ？kyoriは最小値が取得できているのに、commentは別のレコードの値を引っ張って来ている？
調べてみると、SQLite3ではグループ化した時に集計カラム以外は不定になるらしい。
（ちなみに他のDBでは、上記のSQLはエラーになってしまい実行すらできない模様）

似たような事例はないだろうかとググってみると、先人の記録が見つかった。

[同一グループの中で最大のレコードを取得する SQL を書く](http://labs.timedia.co.jp/2014/10/selecting-max-record-in-group-by.html)

リンク先を参考にして、以下のようなSQLに書き換えたところ、正しい結果が得られた。

```sqlite3
SELECT *
FROM table AS m
WHERE kyori = (
    SELECT min(kyori)
    FROM table AS s
    WHERE m.ic1 = s.ic1
    AND m.ic2 = s.ic2)
```

|ic1|ic2|kyori|comment|
|---|---|-----|-----|
|001|002| 10.5|TypeA|
|001|003| 15.5|TypeA|


先人の方々、いつもありがとうございます :bow:
cssファイルをjavascriptにまとめる。

[Webpack](https://github.com/webpack/webpack)はcssや画像などをjsにまとめるような仕組みがあるのですが、ちょっとモリモリな感じがして導入がしずらいかなと思いました。

そこで少し簡単な方法でまとめる方法がないか検討してみました。

[こちら](http://qiita.com/coa00@github/items/29c6d2b65f1ec19529da#comment-d975a1539e2a5b997847)の記事を書いた時にやりたいことがいちまいわからないと言われたので、
パッケージングにフォーカスして再投稿です。

```
css/
 hoge.css
js/
 fuga.js
 test.js
```

とつくっていたものを以下のように1ファイルにします。

```
all.js
```

webpackでやっているようなことを手軽にやるようなイメージです。

## handlebarsを使ってcssをjsに変換

[handlebars](http://handlebarsjs.com/)はテンプレートエンジンなのです。
プリコンパイルするとhtmlやcssを変数展開してくれるので
こちらを使います。

precompileをするとcssやhtmlをjs変数に保持してくれます。

cssをprecomplieしてjsの変数に持たせます。

```html:style.hbs
<style type="text/css">
    .hoge {
        background-color: #fff;
    }

    .hoge:hover {
        border: 1px solid #0097cf;
    }
</style>
```
cssをstyleタグで囲みます。

### gulpやgruntでプリコンパイル

ここではgulpを使ってさきほど書いたsytleファイルをprecomplieし、
テンプレートがはいったjsを生成します。

[gulp-handlebars](https://www.npmjs.com/package/gulp-handlebars)


```js
//cssをテンプレートに変換
gulp.task('templates', function(){
    var src = "./src/css/";
    var dest = src+'/build';//出力場所
    gulp.src(src+'/*.css')
        .pipe(handlebars())
        .pipe(wrap('Handlebars.template(<%= contents %>)'))
        .pipe(declare({
            namespace: 'App.css',
            noRedeclare: true // Avoid duplicate declarations
        }))
        .pipe(concat('style.js'))
        .pipe(gulp.dest(dest));
});

```

## 1ファイルにまとめる。

上記で生成したstyle.jsとその他のjsを結合します。
ここでは圧縮化もこのタイミングでかけてしまいます。

```
gulp.task('concat', function() {
    var dest = './dest';//結合したファイルの展開先
    var files = ['./src/css/build/style.js','./src/*.js'];//cssとjsを1ファイルに結合
    gulp.src(files)
        .pipe(sourcemaps.init())
        .pipe(concat('all.js'))
        .pipe(uglify()) //ついでに圧縮
        .pipe(gulp.dest(dest));
});

```

requireするモジュールたち

```
var gulp = require('gulp');
var uglify = require('gulp-uglify');
var handlebars = require('gulp-handlebars');
var wrap = require('gulp-wrap');
var declare = require('gulp-declare');
````


## htmlに設置

htmlの頭ほうに以下ような記述を書いてstyleを生成します。


```html
<body>
<script type="application/javascript">
        $("body").append(App.css.style);
</script>

jsは以下にロードする。
```

今回はやっていませんが、htmlもなども同じ方法でまとめることができます。
もうちょっと工夫すれば色々できそうです。
Gnome3でウィンドウの位置をカーソルキーで動かす

# 結論

***Alt+F7*** でウィンドウ移動モードへ移行する。

# 使い方

設定が変わっていなければ ***Alt+F7*** でウィンドウ移動モードになるので、カーソルキーで動かして位置がきまったら適当なキー(ESCキー以外)を押すと確定する。
ESCキーだと、キャンセルされて元の位置に戻る

ウィンドウ移動モードのとき、カーソルキーではなくマウスでも動かすことができる。
マウスクリックでも位置が確定した。

Gnomeのマニュアルをみたわけではないので、正しい説明ではないかもしれない。

# 環境

この記事は以下のような環境で作業している人が書きました。

* Debian Unstable(Sid)
* Gnome3

# 動機

* マウス（実際はトラックボール）で動かすのが面倒だったので、カーソルキーで動かしたかった。特にちょっとだけ動かしたいときがあった
* [gnome ウィンドウ カーソル 移動 - Google 検索](https://www.google.co.jp/search?hl=ja&source=hp&q=gnome%20%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%20%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%20%E7%A7%BB%E5%8B%95) で検索してもうまく見つからず、[便利なキーボードショートカット](https://help.gnome.org/users/gnome-help/stable/shell-keyboard-shortcuts.html.ja) これがヒットした。これはこれでよかったのだけど、やりたいことがなかなか見つからずにこまった。
* 最終的には、何かショートカットが効いていない気がしてそれを調べるときに偶然見つけた。

# 設定の変更方法
以下の順番でたどっていって、最終的には***Move Window***に割り当てられているキーボード・ショートカットを好みのものにする。

```
Setting -> Keyboard -> Shortcuts -> Windows -> Move Window
```
c++ builder > 複数の実行ファイル > 1種類の.cpp, .dfm, .h で異なる動作をさせる

```txt:動作確認
C++ Builder XE4
```

やりたいこと

- 1種類の.cpp, .dfm, .hをもとに2つの.exeを生成する
- ユーザはいずれかの.exeを実行することで、異なる動作をするソフトを使用できるように
- 「ショートカット+実行時引数」での動作切替とはしない
- VCSでのファイル共有機能は使わない (gitのサブモジュールなど)
- 1つのリポジトリで管理できるようにする

考えたのが以下の方法

- 1つのプロジェクトグループ(ProjectGroup1)に2つのプロジェクト(Project1, Project2)を用意する
- Project1で作成した.cpp, .dfm, .hをProject2に追加する
- .cppの内でいずれのプロジェクトかを判別して処理を切り分ける


手順
1. Project1.exeのプロジェクトを用意。Unit1.cppがあるとする。
2. プロジェクトマネージャにてProjectGroup1上で右クリック > 「新規プロジェクトを追加」
3. 「VCLフォームアプリケーション」を選択 (VCLアプリの場合)。Project2が追加されUnit2.cppがプロジェクトに含まれている。
4. Project2のUnit2.cppはプロジェクトから削除する。(起動時のフォームも共通化)
5. Project2にUnit1.cppを追加する。

以上で両方のプロジェクトがUnit1.cpp, .dfm, .hを共有している。

以下のようなコードを実装すると、

```cpp
void __fastcall TForm1::Button1Click(TObject *Sender)
{

	String exeName = ExtractFileName(Application->ExeName);
	ShowMessage(exeName);

}
```

それぞれのプロジェクトでビルドして Project1.exe 実行時と Project2.exe 実行時に異なるメッセージが表示される。

ほとんどの処理が共通処理で、でも共通処理が今後もどんどん変更されるような状況において、如何にソース管理するか考えているなか、こういう方法をやってみた。
デメリットについては未検討。
スマホ向けサイトで横向きNGにする


iOSではorientationがあるがAndroidは使えない
http://caniuse.com/#search=orientation


ってことでresizeとloadイベントに横幅と縦幅をチェックするのをいれる。

```JS
$(window).on("load resize",function({
    if(window.innerHeight < window.innerWidth)
      alert("本サイトは横向きでは正常に動作しません");
})
```

とすると一見よさ気だが、なんとAndroidではキーボードを出力された時に画面サイズがその分小さくなってしまう。
画面内inputやtextareaに関して、入力中は上記アラートを出させないようにチェックを走らせるのもいいが、URLをタップした際にも同じように画面サイズが小さくなり、しかもbody内でないのでチェック出来ない。。。


ということで苦肉の策だが、画面のWidthが一定数以上ある場合のみチェックする事でAndroidのキーボード出力時をカバーした。

```JS
$(window).on("load resize",function({
	if(($(window).height()<$(window).width())&&($(window).width()>450))
	alert("本サイトは横向きでは正常に動作しません");
})
```

めでたしめでたし・・・？
Arduino Nano データシートまとめ

オリジナルのArduino Nanoは[Gravitech社](http://www.gravitech.us/)が設計・販売しているものです。小さい基板でmini-Bインターフェースを持っており、狭い机でも取り回しが楽なのが良い点だと感じます。

また、eBayなど海外通販でArduino Nanoの互換ボードが手に入ります。利用している部品がオリジナルとは異なっているものの、基本的には同じように使えて安価なので、2台目以降で買うにはオススメのボードです。

以下に、これらのボードに関連するデータシートをまとめました。

# 各ボードの利用IC一覧

|                 | オリジナル   | 互換ボード   |
|-----------------|-------------|-------------|
| マイコン         | ATmega328P  | ATmega328P  |
| USB-シリアル変換 | FT232RL     | CH340G      |
| 5Vレギュレータ   | µA78M05     | AMS1117-5.0 |
| 3.3V出力   　   | FT232RL利用  | CH340G利用   |

上記は僕の買った互換ボードで使われていた部品です。他の互換ボードでは別の電圧レギュレータが使われているかもしれません。CH340Gは互換ボードでは定番のICですね。

# データシート

- [Arduino Nano v3.0 Schematic](http://site.gravitech.us/Arduino/NANO30/ArduinoNano3_0schematic.pdf)
- [FT232RL](http://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT232R.pdf)
- [CH340G](http://wch.cn/download/CH340DS1_PDF.html) (簡体字PDF)
- [µA78M05](http://www.tij.co.jp/jp/lit/ds/symlink/ua78m05.pdf)
- [AMS1117](http://www.advanced-monolithic.com/pdf/ds1117.pdf)
rspecでDEPRECATION WARNING: Modifying already cached Relation. The cache will be reset. Use a cloned Relation to prevent this warningって出てきた

featureとsptesファイル作って実行したらうまくいくんだけど↓こんな警告がでた

```
DEPRECATION WARNING: Modifying already cached Relation. The cache will be reset. Use a cloned Relation to prevent this warning. (called from execute_grouped_calculation at /home/xxxxxxxx/.bundler/ruby/2.2.0/squeel-5542266d502d/lib/squeel/adapters/active_record/relation_extensions.rb:440)
```

stepsとfeatureの中身を消して実行しても警告が消えてくれないし全然意味わからん。

よくわからないままにこちらを参考に修正。
* [ Deprecation warning with Rails 4.2.1 #374 ](
https://github.com/activerecord-hackery/squeel/issues/374)

新しくconfig/initializers/fix_that_crap.rbを作成し、中身に以下を記述。

```
module Squeel
  module Adapters
    module ActiveRecord
      module RelationExtensions

        def execute_grouped_calculation(operation, column_name, distinct)
          # FIXME: hotfix for https://github.com/activerecord-hackery/squeel/issues/374
          super
        end

      end
    end
  end
end
```

そしてrspecを流したら消えました！

で、意味わからないからあげるのが怖いのでfix_that_crap.rbを削除して再度実行してみると・・・


見事に警告が出ずに実行できました！
これにて無事コミットできますわー

テスト実行でいっぱい失敗してたからなんか変なキャッシュが出来ちゃったのかな。。。
真相は謎のままｗ
csharp > ?. > Null条件演算子 / メンバーアクセス(?.) > int? length = customers?.Length; // null if customers is null 

http://qiita.com/7of9/items/ac80c56be6e82ad592da
で @yuba　さんからコメントいただいた(?.)が今後よく使いそうなので、後々の検索のためにここに記す。

https://msdn.microsoft.com/ja-jp/library/dn986595.aspx

```csharp
int? length = customers?.Length; // null if customers is null 
Customer first = customers?[0];  // null if customers is null
int? count = customers?[0]?.Orders?.Count();  // null if customers, the first customer, or Orders is null
```

?.を使う例。

```csharp
var handler = this.PropertyChanged;
if (handler != null)
    handler(…)
```

上記のような実装は以下の1行で処理できるとのこと。

```
PropertyChanged?.Invoke(e);
```
X,Y座標で指定した位置にあるDOM要素を取得する

`document.elementFromPoint`メソッドで取得できる。

+ x:100, y:100の座標にあるエレメントを取得するサンプル

```js
var X = 100;
var Y = 100;
var elm = document.elementFromPoint(X, Y);

console.log(elm); 
```

要素が重なっている場合は、z-indexで一番上にある要素が取得される。

+ マウス座標上の要素を取得するサンプル。

```js
document.onmousemove = function (e){
	var elm = document.elementFromPoint(e.clientX, e.clientY);
	console.log(elm);
};

```

テストに使えるかも。
c++ builder XE4, 10.2 Tokyo > 実行ファイル名(project1.exe)を取得する > String myname = ExtractFileName(Application->ExeName);

```txt:動作確認
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/26)
```

```cpp
String myname = ExtractFileName(Application->ExeName);
```

http://www.delphipages.com/forum/showthread.php?t=11834

上記により「Project1.exe」などが取得できる。
winAppDev > Windows7からWindows8へのアプリケーション移行のポイント


以下のような資料を偶然見つけた。2012年の資料なので古いかもしれないが。

[docファイル(Windows 7からWindows 8へのアプリケーション移行のポイント)](https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CB0QFjAAahUKEwjV2JDlwsXHAhVnHqYKHS4pDvk&url=http%3A%2F%2Fdownload.microsoft.com%2Fdownload%2F6%2F0%2FE%2F60EA2469-B95B-4F4D-9B06-07AFF5D5115E%2FWin8_application_migration.docx&ei=RwzdVZWZN-e8mAWu0rjIDw&usg=AFQjCNFD8SaHVYGvOA5aPYCeb40ooxCBpQ&sig2=rsz5ryT4TbaADdlEgsjF-A)

> 本書では、Windows 7 で実行されているアプリを Windows 8 に移行の際の互換性検証のプロセスや注意点について、以下の章で説明します。
Mithril.js 試してみた(2) サーバーからデータを取得する m.request()

今度は、Mithril.js でサーバーからデータを取得するだけのサンプルです。

まぁ、`jQuery` の `$.ajax()` とか `$.get()` や `$.post()` 相当ですね。

>前回までの記事：
[Mithril.js 試してみた(1) todo アプリを作り始める所まで - Qiita]
(http://qiita.com/LightSpeedC/items/a2c967928f9cc13e0ebc)
Mithril.js 試してみた(2) サーバーからデータを取得する m.request() - Qiita ⇒ この記事
[Mithril.js 試してみた(3) console.logの様に画面に表示してみる - Qiita]
(http://qiita.com/LightSpeedC/items/23dcecfa22b89dc7c165)
[Mithril.js 試してみた(4) todo アプリのフロント側まで - Qiita]
(http://qiita.com/LightSpeedC/items/c3026847dc5809d2a7a9)
[Mithril.js 試してみた(5) Excelの様な表計算アプリを3時間で作る m.component() - Qiita]
(http://qiita.com/LightSpeedC/items/c19677822f896adc43d9)

サーバーからデータを取得するには `m.request()` を使うと良い。

`m.request()` の結果は、`m.prop()` 相当で、なおかつ、`Promise` だ。

なので、そのまま、`view` の中で関数呼び値を取得して、表示できる。

画面の更新タイミングは、結果が取得できたら `m.redraw()` が呼ばれる感じだ。

`Promise` なので、`then()` もできる。

以下の様な画面になるサンプル・コードを示す。

![qiita-mithril-links.png](https://qiita-image-store.s3.amazonaws.com/0/16128/67c226ec-3e57-7d4c-9048-311ac14dd2f6.png)


サンプル・コード

```html:links.html
<!DOCTYPE html>
<meta charset="UTF-8">
<title>links - Mithril.js</title>

<script src="mithril.min.js"></script>
<!--[if IE]><script src="es5-shim.min.js"></script><![endif]-->

<body>
<div id="$linksElement"></div>
</body>

<script>

// コンポーネント定義
var linksComponent = {
	// コントローラ
	controller: function () {
		// データをサーバーから取得する
		this.list = m.request({method: 'GET', url: 'links.json', initialValue: []});
	},
	// ビュー
	view: function (ctrl) {
		return m('ul',
			ctrl.list().map(function (item) {
				return m('li', [m('a', {href: item.url}, item.title)]);
			})
		);
	}
};

m.mount($linksElement, linksComponent);

</script>
```

サンプル・データ

```json:links.json
[
  {"title": "qiita.com", "url": "http://qiita.com"},
  {"title": "google",    "url": "http://www.google.co.jp"},
  {"title": "facebook",  "url": "http://www.facebook.com"}
]
```

まだデータ取得が完了していない時に、もし再描画される場合などには、値が無くてエラーになる事があるので、`initialValue` を使うと、そういうエラーも回避できるよ。

もちろん、データをサーバーにあげるときも、`m.request()` を呼べばできるよ。
`m.request()` は、JSONPもサポートしている。