OmniAICreator/Qiita-1.07M huggingface dataset:
一行野郎：１秒おきにportを確認（コマンド繰り返し）

###効果
１秒おきにportを確認。
コマンド繰り返しなので、別にportでなくてもよいけれど。

###一行野郎
`while true; do netstat -a | grep "ssh"; sleep 1s; done;`
netstat の所と grep の所を変えれば、いくらでも応用できて便利。
sleep 1 はお好みで。
`while true; do netstat -a | grep "ssh" |tee -a hoge.log; sleep 1s; done;`
保存するなら tee をはさんでもいい。


###必要な物
* bash
* netstat
* grep
Vagrant + VirtualBox でネットワークアダプタのハードウェアを変更する


`VBoxManage modifyvm`コマンドでは下記のように変更できる。

```bash
$ VBoxManage modifyvm VM_NAME --nictype1 Am79C970A
$ VBoxManage modifyvm VM_NAME --nictype2 82540EM
```

これを Vagrantfile に書く。

下記では、Adapter1（NAT）に`Am79C970A`（AMD PCNet PCI II）を、Adapter2（Host-only Adapter）に`82540EM`（Intel PRO/1000 MT Desktop）を指定している。

```ruby
# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "opscode-centos65"
  config.vm.network :private_network, ip: "192.168.33.99"

  config.vm.provider "virtualbox" do |v|
    v.customize ["modifyvm", :id, "--nictype1",  "Am79C970A"]
    v.customize ["modifyvm", :id, "--nictype2",  "82540EM"]
  end
end
```

`modifvvm`では、様々なパラメータが指定できるので、VirtualBox のドキュメントを参考にすると良い。

* [8.8. VBoxManage modifyvm](https://www.virtualbox.org/manual/ch08.html#vboxmanage-modifyvm)
（ネットワーク周りは、8.8.2. Networking settings）

* [6.1. Virtual networking hardware](https://www.virtualbox.org/manual/ch06.html#nichardware)
（設定できるネットワークカード）
RESTClientを使ってREST APIをGroovyテストする

Webサービスをテストするのに、HTTP Builderを使ってみたら結構簡単にアクセスできた。

```groovy
@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7.1' )

import groovyx.net.http.RESTClient
import static groovyx.net.http.ContentType.*

// リクエストする先のURL
def http = new RESTClient('http://httpbin.org/')
// GETの場合
// パスとコンテンツタイプをMapで渡し、戻り値が結果
def res = http.get(path: 'get', contentType: JSON)
// 結果のJSONから一部表示
println res.data.origin

// POSTの場合
res = http.post(path: 'post', contentType: JSON)
println res.data.origin
```

## 参考URL
[HTTP Builder - REST](http://groovy.codehaus.org/modules/http-builder/doc/rest.html)
異なる文字コードのファイルが混在するリポジトリでのgit diff +diff-highlight + nkf

# gitconfig

リポジトリに **EUC-JP** とか **UTF-8** とかのファイルが混じっていると差分見たときに辛い。

そこで *$HOME/.gitconfig* に以下の設定をする

````gitconfig:~/.gitconfig
[color]
        ui = true
[pager]
        diff = diff-highlight | nkf -w | LESS=-R less
        log = diff-highlight | nkf -w | LESS=-R less
        show = diff-highlight | nkf -w | LESS=-R less
````

こうしておくと差分見たときに **そこそこ** 幸せになれる。

````diff:git-diff
% git diff
diff --git a/hello.EUCJP.pl b/hello.EUCJP.pl
index 831a5e5..dd0cc07 100644
--- a/hello.EUCJP.pl
+++ b/hello.EUCJP.pl
@@ -2,4 +2,4 @@
 use strict;
 use warnings;

-print "日本が平和でありますように\n";
+print "世界が平和でありますように\n";
diff --git a/hello.UTF8.pl b/hello.UTF8.pl
index f522ad3..b2d099f 100644
--- a/hello.UTF8.pl
+++ b/hello.UTF8.pl
@@ -4,4 +4,4 @@ use warnings;
 use utf8;
 use Encode qw( encode );

-print encode( 'utf-8', "日本が平和でありますように\n" );
+print encode( 'utf-8', "世界が平和でありますように\n" );
````

一つ目は **EUC-JP** で、二つ目が **UTF-8** のファイル。
なんで異なる文字コードのファイルが混ざっているかは歴史的経緯。

# diff-highlight

[ここから](https://raw.githubusercontent.com/git/git/master/contrib/diff-highlight/diff-highlight)取ってくる。
Google Play services out of date.  Requires 4452000 but found 4325036 的なエラーが出てアプリが落ちる

```lang:error
Google Play services out of date.  Requires 4452000 but found 4325036
```
Google Play servicesを利用するアプリでこのようなエラーが出て落ちる場合は、端末にインストールされている
「Google Play 開発者サービス」というアプリをバージョンアップすることで解決できる。
が、Google Playストアから探してもこのアプリは見つからない。。。


と言う訳でストアのリンクから直接行くのが良さげ。
![2014060515410530376.gif](https://qiita-image-store.s3.amazonaws.com/0/45722/027822de-a9ad-750b-7b2a-72b9b6d4ec9a.gif)
https://play.google.com/store/apps/details?id=com.google.android.gms&hl=ja
C++erがD言語の勉強のメモ書きをしていく。

どこかにメモしておきたかったのでここに書き溜める。

# クラス関係

## クラスオブジェクトは参照によってのみインスタンス化される

D言語は以下のようにオブジェクトを生成する。

```d
MyClass mine = new MyClass();
```

これはC++の以下のコードに相当するイメージ。

```cpp
MyClass* mine = new MyClass();
```

関数にオブジェクトを渡す、関数からオブジェクトを返すときはすべて参照でやりとりしていると考える。 struct などのクラス以外の型は実体が基本になる。構文上は区別がつかないので意識すること。

## オブジェクトの private メンバは同一モジュールの非メンバ関数からアクセスできる

C++で言うところの friend に近い。必然的にファイルの構成まで意識する必要がある。

```d
module my_package.my_module;

class MyClass
{
  /* ... */
  private int my_data;
  package int another_data;
}

void func(MyClass mine)
{
  writeln(mine.my_data);
}
```

## オブジェクトの package メンバは同一パッケージのモジュールからアクセスできる。

これも friend に相当。クラスに関係する関数が多くなった時に便利。

```d
module my_package.my_other_module;
import my_package.my_module;

void func(MyClass mine)
{
  writeln(mine.another_data);
}
```

# メモリ関係

- 基本的にメモリの解放はガベッジコレクタに任せる
- RAII や scoped_lockのようなことをしたい場合はローカル変数を scope で宣言する。
- C言語のライブラリを使うなどの場合 scope(exit) スコープガード文を使用する。
- GC.malloc で確保したメモリはガベッジコレクタで解放される。
- - クラスのデストラクタで free するとガベッジコレクタによりすでに解放されている場合があるため落ちることがある。必要ない。

# dub

プロジェクトの構築と依存関係の解決はdubを使って行うのが主流らしい。

## コンパイラの選択は --compiler オプションで行う

dub.json から設定できるようにして欲しい・・・。

# まだわかっていないこと

- コンパイル済みライブラリの template を使用した場合にどのようにコンパイルされるのか
- 同様にコンパイル済みのライブラリの関数はアプリケーションコードからインライン化されるのか、されるとしてどのようにコンパイルされるのか
- dub でOSごとに設定を変えることができるかどうか

# まだ書いていないこと

- メモリ関係
パスを変数に格納する

アクセスしてきたパスを変数に格納する。
特定のパスは、同じファイルで管理したい場合に使用する。

.htaccess

```
Options +FollowSymLinks
RewriteEngine on
RewriteRule    ^$  index.php   [L]
RewriteRule    (.*) index.php  [L]
```

index.php

```php
$cmds = array_slice(
	preg_split('/[\\\\\\/]/', $_SERVER["REQUEST_URI"]), 
	count(preg_split('/[\\\\\\/]/', $_SERVER["PHP_SELF"]))-1
);
```
BigQueryことはじめ。あとBigQueryについて料金とか運用とか調査

まだ入門もしてないので「ことはじめ」じゃないです。
大体触ってみたのを載せます。

# Wikipedia 集計

![スクリーンショット 2014-06-05 15.09.45.png](https://qiita-image-store.s3.amazonaws.com/0/19168/82108e1f-9bb3-005b-618b-a647516bdb3d.png)

サンプルデータのwikipediaを集計してみました。
データは3億行ほどあり、サイズは36GBほどあります。

今回は、`contributor_username`を集計し、wikipediaに貢献している人ランキングをつくりました。
上位陣はbotさん達ですね。

結果としては、3億行のデータを、 **何も考えずに書いて** 16.2秒で集計することが出来ました。

3億行を16秒。

`count`しなければ3秒くらいで終わります。

MapReduceみたいなのを一切書いてないのにこの速度。

ちなみにテーブルはインデックスしているわけではなく毎回フルスキャンしているらしい。

わお。

# 料金

データ保管: **\$0.026/GB/mo**
クエリ: **$5/TB** (スキャンしたデータのサイズで課金)

今回のwikipediaの集計の数字。

まず、データの保管に36GB * \$0.026 = \$0.936 = 95円/月くらい。
Wikipedia3億行の情報が **95円/月**で維持出来ます。わお。
（ちなみに2014/6/5現在、AWS S3より安い。DynamoDBは7倍くらい値段します）

クエリは、1回のクエリで2.5GBスキャンしていたので、
\$5/TB * 2.5GB = \$0.0125 = **1円**くらい
Wikipedia3億行の情報が1円+15秒で集計出来ます。

小学生のお小遣いの範囲内で、Wikipedia30億行分くらい扱えます。

このデータはフィールドがわりと多いので単純なものだともっと安いでしょう。
特にlogとか。
100億行を300円/月とかで維持し、一回10円くらいで集計出来るかも。
ちなみに集計はログローテーションすればいいので、全期間のlogをフルスキャンする必要はありません。JOINもサポートしてるのでどんどんテーブル分けましょう。

たった数百万コールで月xx万払わなきゃいけない某サービスがケチくさくみえますね。

# 感想

安い。速い。うまい。

いままで ⇒ 考えるべきこと : ログ収集、安全に保管、データベース格納、集計、そしてHadooooooopに挑戦 => HDFS、MapReduce、ZooKeeper…かゆ…うま…
BigQuery ⇒ 考えるべきこと : なにを解析するか

ログとかはとりあえず突っ込んでおけばいい。
もう容量は大分安くなった。
あとでクエリ考えて適当に解析すればいい。
考えうる限り全てのログを残してもおつりが来るほど安いです。

たとえば、a#clickイベントを全て片っ端からXPath付きで保存したりとか。むしろそのときのDOMを丸ごとログして、DB/Cookieの状態に依存せず後から再現可能にしたり（ユーザのプライバシーデータ取らないように気をつけないといけない）
まあ、BigQueryに限った話ではないですが。
他のログ系サービスだと簡単にリミット超えて出来ないようなことが簡単に出来ます。

解析の運用。
クエリ考えるのは面倒なので、BIツールをフロントに噛ませるのがいい。
**TableauはBigQuery対応**
適当にクエリ投げるインターフェースを自前で書いても良い。やりたい操作をSQLにマッピングするだけなのでそんなに手間はかからない。

しかも、BigQueryはクエリに任意のJSを仕込める機能があります。SQLだけに頼らない強力な集計が出来る。
=> 勘違いしてましたが近日リリースだって。

BigQueryを使えば計算ワーカーなんか立てなくてもリコメンデーション（CFとか）用のデータを計算出来ます。
数万件アイテムx数100万ユーザのCFも、BigQuery的にはしょぼい計算量です。一回10円くらいで出来る。
ちなみにBigQueryはPearson相関係数を標準でサポートしてます。（他数学的関数も）

当然ですがAPIがあるので、自社のワークフローの中に組み込めます。

色々夢広がるな〜〜。

# 全体的に

はっきりいって殆どのデータに大してBigQueryはオーバーキルです。
**が、量のないデータ（数万件とか）に大してもBigQueryは良い選択肢だと思います。**

なにせ、

- 1GBを2.6円/moで保管出来る(むしろS3より安い)
- いつでもエクスポート出来る（MapReduce job対応してるので大規模でもOK）
- クエリ投げるのは安く数円台（DBサーバと違い、ログ集計とかなのでクエリの数は少ない。）
- 月額なし。インスタンス課金なし。
- インフラ管理不要

なので、 RedShiftとか色々考えるよりよっぽど安くて楽でいいです。
fluentdでS3に投げてhogehoge…とか面倒なので、BigQueryに直接fluentdでぶち込みましょう。これで快適ログ生活です。

BigQuery++
Superviewはどこまでもチェーンできるのだろうか

あるビューを上にたどっていくときに

```objc
aView.superview.superview.superview.superview.superview  ...
```
みたいなひどいコードを書いて落ちたりしないのかしら、という疑問。aViewがscrollviewの中に入っていて、そのscrollviewまで何個たどればいいのかわからない、とか。

で、まあこんなコードを書いてみて実行する

```objc
    int i=0;
    NSView *v = _myView.superview;

    do {
        NSLog(@"%@", [v description]);
        v = [v superview];
    } while (i++<10);
```

> 2014-06-05 16:01:42.106 Superview[6135:303] <NSClipView: 0x100103f40>
> 2014-06-05 16:01:42.107 Superview[6135:303] <NSScrollView: 0x6080001c4830>
> 2014-06-05 16:01:42.107 Superview[6135:303] <NSView: 0x608000138920>
> 2014-06-05 16:01:42.107 Superview[6135:303] <NSThemeFrame: 0x100600f90>
> 2014-06-05 16:01:42.107 Superview[6135:303] (null)
> 2014-06-05 16:01:42.107 Superview[6135:303] (null)
> 2014-06-05 16:01:42.107 Superview[6135:303] (null)
> 2014-06-05 16:01:42.108 Superview[6135:303] (null)
> 2014-06-05 16:01:42.108 Superview[6135:303] (null)
> 2014-06-05 16:01:42.108 Superview[6135:303] (null)
> 2014-06-05 16:01:42.108 Superview[6135:303] (null)

nilに対する superviewメソッドの呼び出しでは特にエラーになることはないようだ。最初に書いたひどいコードもとくに問題はないみたい。

objective-cのこのへんがよく分からない。呼び出してもnilが返るばかりで特にエラーにならなかったり、割と厳密に「そんなセレクターねえよ」と怒られたり、その辺の基準が。
Slim3でDatastoreのKeyをStringに変換する（その逆も）

## HTMLとSlim3(Java)側で、Google App EngineのKeyをやり取り

更新や削除で、画面上に文字列として埋め込まれてるKeyを元に、登録されているエンティティをほげほげしたい場合。（普通によくある状態です）

### こんなエラーがでて困っていた・・

```
java.lang.IllegalArgumentException: Cannot parse: HogeModel(3301)==
	at com.google.appengine.api.datastore.KeyFactory.stringToKey(KeyFactory.java:197)
	at org.slim3.datastore.DatastoreDelegate.stringToKey(DatastoreDelegate.java:641)
```

## 状況説明

### フロント側

```
<html>
..
<form>
    <input type="hidden" name="key" value="aglub19hcHBfaWEkdhsgkSBEJsb2cYaAw">
    <span class="name">これから削除したい内容</span>
    <button type="submit">削除じゃ</button>
</form>
..
</html>
```

パラメータ名はkeyで渡すことにする。

### サーバー側(Slim3)

```
public class HogeController extends Controller {
    @Override
    public Navigation run() throws Exception {
        // DELETEの時だけ書いてみる
        if(isDelete()) {
            String keyString = request.getParameter("key");
            Key key = Datastore.stringToKey(keyString);
            Datastore.delete(key);
        }
        return null;
    }
}
```

ポイントはパラメータ文字列で受け取ったkeyを```Datastore.stringToKey```でKeyオブジェクトに変換すること。

## 逆は？（KeyからString）

これのテストコード書いてて、逆変換しようとして、勘違いしてハマりました・・

```
@Test
public void testDelete() throws Exception {
    HogeModel createdHoge = service.createHoge();
    String keyString = Datastore.keyToString(createdHoge.getKey());
    tester.request.setMethod("delete");
    tester.param("key", keyString);
    tester.start("/webapi/hoge");
    
    HogeModel removed = Datastore.query(HogeModel.class).asSingle();
    assertThat(removed, is(nullValue()));
}
```

やっぱり、というかネーミングそのままで素晴らしいんですが、```Datastore.keyToString```を使ってKeyからStringに変換します。

うっかりgetKey().toString()で渡してしばらくハマってました・・・（冒頭のエラーに遭う）　そりゃぁ、ダメだろうさ。。

- - -
参考URL： [【入門編】Slim3で始める！GAE/Jでクラウド・アプリケーション開発（第３回）　1/8ページ | キャスレーコンサルティング　技術ブログ](http://www.casleyconsulting.co.jp/blog-engineer/gae/%E3%80%90%E5%85%A5%E9%96%80%E7%B7%A8%E3%80%91slim3%E3%81%A7%E5%A7%8B%E3%82%81%E3%82%8B%EF%BC%81gaej%E3%81%A7%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%83%BB%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC-6/)
[Excel]図形（画像やグラフ）がなぜか印刷されない時

「図形の書式設定」の中（「プロパティ」あたり）にある「オブジェクトを印刷する」にチェックが入っているかどうか確認し、もしチェックが入っていなければ、チェックして再確認してみる。

確認したバージョン：Excel2010

多分、Word等でも同じのはず。
Swift関連勉強会まとめ

　大量に告知されているAppleの新言語Swiftの勉強会をまとめておきます。現在満席のものがほとんどですが、単発ではなく継続的な開催を考えているものが多いのでコミュニティに参加するなどして情報を追いかけてみるといいかと思います

##シリーズもの

[Tokyo Swift Developers](http://www.meetup.com/Tokyo-Swift-Developers/)
[第1回 Swift 勉強会@ネクスト](http://connpass.com/event/6780/)
[すいすいSwift勉強会](http://suisui-swift.doorkeeper.jp/events/12222)
[第2回 Swift 勉強会 - LT会@wantedly](http://wantedly.connpass.com/event/6755/)
[第０回　Swiftもくもく勉強会@Retty](http://connpass.com/event/6752)
[Swift LT会](http://connpass.com/event/6740/)
[Appleの新言語『Swift』をのんびり読む会 ](http://yomukai.com/events/191)
[Fukuoka.swift](http://fukuokamm.connpass.com/)
[【#techbuzz】Swift勉強会](http://atnd.org/events/51944)

##単発

[もくもくとSwift@仙台](http://connpass.com/event/6799/)
[Swiftもくもくの会](http://connpass.com/event/6761/)
[swift 緊急対策勉強会](http://connpass.com/event/6748/)
[Swift勉強会](http://atnd.org/events/52018)
[Swiftもくもく勉強会〜雰囲気つかもう編〜](http://connpass.com/event/6758/)
[Swiftもくもくの会](http://connpass.com/event/6761/)
[Swift勉強会β@Members](http://connpass.com/event/6792/)

##iOS系勉強会

[横浜へなちょこiOSとSwift勉強会](http://atnd.org/events/51782)
[iOS馬場 #ios_baba](http://iosbaba.connpass.com/)
[iPhone Dev Sap勉強会](http://www.zusaar.com/event/6377016)
[仙台iOS開発者勉強会](http://atnd.org/events/51700)

##補足

###Swiftの勉強会を公開していいの?

https://www.facebook.com/groups/ios.dev.jp/permalink/741904485830935/

###勉強会関係の情報源



[AZusaar!!](http://azusaar.appspot.com)(メタ検索)
[Study Mail](http://www.study-mail.info/)(拙作。定期チェック)
Swift のグローバル定数を Closure で初期化

Objective-C の Singleton パターン。クラスメソッドを呼んで、 static な変数を dispatch_once で初期化して返すやつ。それを Swift でやる場合、そのまま移植すると [Swift でシングルトン - Qiita](http://qiita.com/1024jp/items/3a7bc437af3e79f74505) のようになる。

もっと Swift ぽく書けないか試していたらこうできた。

```MyClass.swift
let sharedMyClass:MyClass! = {
    println("closure invoked")
    let singleton:MyClass! = MyClass(name:"hoge")
    singleton.name = singleton.name! + "eeeeee"
    return singleton
}()


class MyClass
{
    var name:String? = nil
    
    init(name:String?) {
        self.name=name
    }
}
```

他所から `sharedMyClass` を参照したときにはじめて Closure が実行され初期化される。この Closure は dispatch_once で1回だけ実行される。`let` なので上書きはされない。
簡単！ Google+ のプロフィールとサイトの著者情報のリンク確認ツール


Google+のプロフィールと、Google の検索結果をリンクさせ、自分のページの検索結果に、プロフィール写真を表示できるようになりました。


元記事
http://ja.katzueno.com/2014/06/3113/


Google+ のプロフィールと、自分のサイトと、検索結果をリンクさせる方法は、[Google 公式ヘルプ](https://support.google.com/webmasters/answer/2539557?hl=ja)などで調べることができますが、サイトとGoogle+プロフィールとの接続がうまく行ったかどうか、直ぐに確認するツールがあります。

それが、[構造化データテストツール](http://www.google.com/webmasters/tools/richsnippets)です。

#構造化データテストツール
[http://www.google.com/webmasters/tools/richsnippets](http://www.google.com/webmasters/tools/richsnippets)

この構造化データテストツールで、自分の記事ページURLを入れてみると・・・

![構造化データテストツール](http://ja.katzueno.com/files/2014/06/GoogleWebmasterStructuredDataTestingTool-590x467.jpg)

のように、著者情報がきちんとリンクされているかどうかのチェックをリアルタイムですることができます。

これは便利！
PHP Memcached拡張で持続的接続を行う


## Memcached クラスのコンストラクタで指定

Memcached クラスのコンストラクタでは、パーシステントIDを引数を渡すことができます。

パーシステントIDを指定すると、memcached への接続が持続的なものになり、次回リクエストでは同じ接続が再利用されます。

```php
<?php
$mecached = new Memcached('persistent_id'); // 持続的接続
```

[http://jp2.php.net/manual/ja/memcached.construct.php](http://jp2.php.net/manual/ja/memcached.construct.php)

## Memcached セッションハンドラで指定

Memcached のセッションハンドラで、持続的接続を行うには、`session.save_path`の先頭に`PERSISTENT=%ID%`を指定します。`%ID%`の部分がパーシステントIDとなります。

`PERSISTEN=%ID%`の後ろには、半角スペースが必要なので注意して下さい。

下記では、パーシステントID=1 で、持続的接続を行っています。

```
ini_set('session.save_path','PERSISTENT=1 localhost:11211');
```

このセッションハンドラでの指定は、ドキュメント類で記載が見当たらなかったので、Memcached 拡張のソースで確認しました。下記が該当箇所です。

https://github.com/php-memcached-dev/php-memcached/blob/2.2.0/php_memcached_session.c#L105-L135

## 参考

[http://d.hatena.ne.jp/ngmy/20130126/1359211241](http://d.hatena.ne.jp/ngmy/20130126/1359211241)
AWS EC2でLoad AverageをCloudWatchで監視するサンプルスクリプト

```py
#!/usr/bin/python
# coding: utf-8
import os
import commands
import boto.ec2.cloudwatch

AWS_ACCESS_KEY = '********'
AWS_SECRET_ACCESS_KEY = '********'
AWS_REGION_NAME = '********'


def main():
    instance_id = commands.getoutput("wget -q -O - http://169.254.169.254/latest/meta-data/instance-id")
    load_averages = os.getloadavg()

    cloud_watch = boto.ec2.cloudwatch.connect_to_region(
        aws_access_key_id=AWS_ACCESS_KEY ,
        aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
        region_name=AWS_REGION_NAME,
    )

    cloud_watch.put_metric_data(
        namespace='LoadAverage',
        name='LoadAverage',
        value=float(load_averages[0]),
        dimensions={
            'InstanceId': instance_id,
        }
    )

if __name__ == '__main__':
    main()
```
ゼロ始まり文字列をExcelでCSV読み込みすると数値に化ける問題には、タブ文字が効く

タイトル通りです。
CSVで出力したテーブルの電話番号や郵便番号が数値解釈されて頭のゼロがはずれてしまう問題、タイトルにはExcelと書きましたがOpenOffice Calcだって同じ問題があります。なんとかならないかと調べていたらとんでもない裏技があるのですね。

http://www.f3.dion.ne.jp/~element/msaccess/AcTipsCSV001.html

いくつか逃げ道が紹介されていて、「CSVではなくSYLKを使う（個人的には好きです）」、「むしろExcelブックを出力する」、「=を頭につけて式として出力する」とかある中にまさかの方法が。

```
データの先頭にタブ記号（Chr$(9)）を付加
```

元記事には「Windows XP 上でのみ有効」とあって、おそらくExcel 2003のことと思われますが、手元で試してみたところExcel 2013, OpenOffice Calc 4.1ともに有効でした。
どちらも挙動は同じで、タブ込みで読み込まれます。ただし、画面上ではタブ文字分の空白は入らず、テキスト出力してみないとわかりません。
BigQuery Connector for Excelを使ってExcelで超高速クエリ実行を行う

Google BigQueryは超高速でクエリを実行できて便利であるが、結局のところExcelデータでください、みたいなことを言われたりして面倒なことがある。こういったとき、Google BigQuery Connector for Excelを使用すれば、Microsoft Excelから直接Google BigQueryにクエリを発行し結果を取得することが出来る。

- [BigQuery Connector for Excel - Google BigQuery - Google Developers](https://developers.google.com/bigquery/bigquery-connector-for-excel)

## BigQuery Connector for Excelを準備する

BigQuery Connector for Excelを使用するには、ページにアクセスし専用の認証キーを発行する必要がある。

- [Google BigQuery Connector for Excel](https://bigquery-connector.appspot.com)

BigQuery Connector for Excelにアクセスし、BigQueryとの接続を許可する。

![許可のリクエスト](https://qiita-image-store.s3.amazonaws.com/0/5218/6505abb9-5445-03c7-a1f0-3fcec79722ac.png)

許可するとBigQuery Connector for Excelのunique keyが発行される。このキーには有効期限があり、期限が切れた場合は再発行する必要がある。有効期限は最大30日で、ページ下部の **Create Key** から有効期限を指定してキーを発行することが出来る。

![Google BigQuery Connector for Excel](https://qiita-image-store.s3.amazonaws.com/0/5218/187d2e46-3c9d-78fa-a058-e89fcc082f8c.png)

次に、クエリ発行に必要なIQYファイルをダウンロードする。このIQYファイルはExcelからクエリを発行する際に指定する必要がある。

## Microsoft Excelからクエリを発行する

準備ができたらいよいよExcelからクエリを発行してみよう。クエリの発行には次の情報が必要になる。

- project ID
- BigQuery Connectorのunique key
- 実行するクエリ

実行するクエリは後から変更できるように、適当なセルに記入すると便利だ。Excelの制限で、256文字以上のクエリは隣接するセルに分割して指定する必要がある。

クエリを実行するには、メニューの **データ** → **外部データの取り込み** → **既存のクエリの実行...** を選択する(English:  **Data** → **Get External Data** → **Run Saved Query**)。すると、ファイル選択ウインドウが表示されるので、先ほどダウンロードしたIQYファイルを指定する。選択対象がデフォルトだと`テキスト ファイル`になっているので`クエリ ファイル`に変更する。

![Microsoft Excel への外部データの取り出しダイアログ](https://qiita-image-store.s3.amazonaws.com/0/5218/a029e9ed-eb38-12c2-876e-3a69f0c8860d.png)

データの出力先は既存のワークシートの指定セル、新しいシートから選択できる。 **OK** をクリックすると、クエリの選択ダイアログが表示される。ここで、クエリを入力したセルを選択する(複数に分割して入力した場合は全て選択する)。 

実行すると、結果が指定したセルに出力される。

![ブック1](https://qiita-image-store.s3.amazonaws.com/0/5218/4d4791ab-2464-5bf0-f0ce-ef78bf95dbae.png)

出力先のセルを選択し、メニューの **データ** → **データの更新** を選択することで、クエリの再実行が出来る。このとき、 **この値/参照を今後の更新に使用する** (in English: **Use this value/refrence for future refreshes** )にチェックしていた場合にはクエリ等をもう一度選択する必要はない。変更する場合はメニューの **データ** → **外部データの取り込み** → **パラメーター...** で変更出来る。あとは、コピーするなりグラフを描画するなりして良い感じの資料に仕上げよう。

## まとめ

BigQuery Connector for Excelを使用することで、とても簡単にエクセルシートで結果を取得することができた。IQYファイルを用意したり、unique keyの有効期限が最大30日しかなかったりちょっと煩雑だが、うまくやればとても便利なツールになるはずだ。このようにエンジニアでなくても気軽にクエリを発行してデータを取得できる仕組みを用意することで、データ分析の速度を加速していきたい。
SwiftでWebAPIアプリを作った時の要点

全文はこちらで。要点だけQiitaに転写
http://himaratsu.hatenablog.com/entry/swift/tiqav


# SwiftでWebAPIアプリを作った時の要点

### 通信 (NSURLConnection)

**通信部分**

```swift
func reload() {
    // Thanks to tiqav api! ( http://dev.tiqav.com/ )
    let URL = NSURL(string: "http://api.tiqav.com/search/random.json")
    let req = NSURLRequest(URL: URL)
    let connection: NSURLConnection = NSURLConnection(request: req, delegate: self, startImmediately: false)
        
    // NSURLConnectionを使ってアクセス
    NSURLConnection.sendAsynchronousRequest(Req,
        queue: NSOperationQueue.mainQueue(),
        completionHandler: self.fetchResponse)
}

```

**responseの処理**

```swift
// responseを処理する
func fetchResponse(res: NSURLResponse?, data: NSData?, error: NSError?) {
    // responseをjsonに変換
    let json: NSArray = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error: nil) as NSArray

    tiqavs = []

    for img in json {
        let imgId = img["id"] as String
        let ext = img["ext"] as String
            
        let imageUrl = (baseUrl + imgId + "." + ext) as String
        tiqavs.append(imageUrl)
    }
    
    // tableviewの更新
    dispatch_async(dispatch_get_main_queue(), {
        self.tableView.reloadData()
    })
}
```

AnyObject! は as String などとして型を指定する必要がある。AnyObject は Obj-C での id 型のようなもの（多分）


### 非同期での画像の読み込み

**GCDをつかう**

```
var q_global: dispatch_queue_t = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
var q_main: dispatch_queue_t  = dispatch_get_main_queue();

// imageUrl に画像のURLが入っている
// 非同期でimageUrlの内容を取得
dispatch_async(q_global, {
    var imageURL: NSURL = NSURL.URLWithString(imageUrl)
    var imageData: NSData = NSData(contentsOfURL: imageURL)
    
    var image: UIImage = UIImage(data: imageData)
    
    // 更新はmain threadで
    dispatch_async(q_main, {
        cell.tiqavImageView.image = image;
        cell.layoutSubviews()
    })
})
```

そのまま使える。

### delegate実装宣言

```
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, NSURLConnectionDelegate {
    ...
}
```

こんな感じで書く。



# ソースコード

GitHubにあげてます。
https://github.com/himaratsu/SwiftTiqavViewer
Swiftでリソースにあるjsonファイルを読み込む


# はじめに

ビルドしたわけじゃないのでコンパイルできるかも分かりませんがSwiftでリソースにあるjsonファイルを読み込むためのメモを残しておきます

# 読み込む例

リソースとしてdummy.jsonというjsonのファイルがあるとする

```json:dummy.json
{
  "hoge":"piyo"
}
```

これをSwiftで読み込む例

```objectivec
let path : String = NSBundle.mainBundle().pathForResource("dummy", ofType: "json")
let fileHandle : NSFileHandle = NSFileHandle(forReadingAtPath: path)
let data : NSData = fileHandle.readDataToEndOfFile()

if data {
    var json: NSDictionary = NSJSONSerialization.JSONObjectWithData(data,
                                            options: NSJSONReadingOptions.AllowFragments,
                                            error: nil) as NSDictionary

    if !jsonError {
       //jsonからhogeというデータを取得する例
       if let hoge = json.objectForKey("hoge") as? String {
           //hogeがあるということが保証されている
           self.hoge = hoge
       } else {
           //hogeない
       }
    } else {
       //jsonのパースエラー
    }

} else {
    //dataがnilだとNSInvalidArgumentExceptionで例外になるよ
}

```

## 例外処理について

Swiftは例外のcatchができないみたい。NSJSONSerialization.JSONObjectWithDataメソッドでnilを渡した際には例外となるのでnilチェックを行う必要がある。
パズルゲームの画像を読み込んで各ブロックの並びを出力する

# 目的
例えば, 下の画像を読み込んで,各ブロックの並びを判別したい.
![Pazudora01.png](https://qiita-image-store.s3.amazonaws.com/0/3854/e293f651-da63-6e27-4e1a-7b1c8b181a6e.png)

# 問題点
OpenCVを利用してTemplate Matchingで値を取得しようとしたが,一つ一つの画像をマッチングするのに時間がかかり,なおかつしきい値内の相関度の高い画像は全て出力されてしまうため選別するプログラムを書かないといけないのでコストが高かった.

# 方針
PILのライブラリにあるRGBのデータを用いて,各ブロックごとに切り出した画像のRGBデータの相関をとって一番基準値に近い色だと認識させる.

# 実装
PILのImageオブジェクトを用いる.

```py
import numpy
from PIL import Image

def get_rgb(pic, box=""):
    if box == "":
        box = (0, 0, pic.width, pic.height)
    rgbimg = pic.crop(box).convert("RGB")
    rgb = np.array(rgbimg.getdata())
    return [__round(rgb[:,0]),
            __round(rgb[:,1]),
            __round(rgb[:,2])]

def color(array):
    col = {}
    col["red"] = [100, 20, 20] # 適当
    # この間に色をの基準値を埋め込んでいく
    col["heart"] = [100, 70, 70] # 適当
    
    max = 0
    result = ""
    for k, c in col.items:
       tmp = numpy.corrcoef(numpy.array(array), numpy.array(c))[0][1]
       if max < tmp:
           result = k
           max = tmp
    return result

def __round(array):
    return int(round(np.average(array)))

if __name__ == "__main__":
    '''
        xa : 始点, xs : Blockの幅, xb : 終点
　　　　 ya : 始点, ys : Blockの高さ, yb : 終点
    '''
    pic = Image.open("/path/to/Image.png", 'r')
    for i in xrange(6):
        for j in xrange(5):
           box = (xa + xs*i,
                  ya + ys*j,
                  xb + xs*i,
                  yb + ys*j)
           rgb = get_rgb(pic, box)
           print color(rgb)
```
これなら速度的には特に問題がなく,検出率もそれなり.たまにZero除算するらしく落ちる.

# 結論
パズドラって面白いんですかね.やったこと無いんですが.
SwiftでAFNetworking

適宜インクルードした後

```swift:AF.swift
let manager = AFHTTPRequestOperationManager()
manager.GET("http://google.com/", parameters: nil, success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) in
    println(responseObject)
}, failure: { (operation: AFHTTPRequestOperation!, error: NSError!) in
    println(error.localizedDescription)
})
```

あんまり変わりません
ブロックの書き方はカッコ良くなりました。
引数の間に`,`があるのがいいですね。なんとなくRubyっぽい。

#参考：Objective-Cでは

```objc:AF.m
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:@"http://example.com/resources.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];
```
Eclipseに割り当てるメモリの変更方法(Mac版)

*Eclipseに割り当てるメモリの変更方法(Mac版)*
******************************************************
色んなサイトに
`eclipseのフォルダを開ける→eclipse.iniを開ける`
と書いてありますが、「Mac版ではそんなファイルねーよ笑！」となります。
てことでMac版の方法を書きます。
<ol>
<li>eclipseのファルダを開けます。</li>
<li>eclipsea.apppを右クリック</li>
<li>パッケージの内容を表示</li>
<li>Contentsをクリック</li>
<li>MacOSをクリック</li>
<li>eclipse.iniを発見。適当なエディタで開く。</li>
</ol>

その中に
![スクリーンショット 2014-06-05 13.16.22.png](https://qiita-image-store.s3.amazonaws.com/0/44144/c493c665-3a1f-3513-385b-e038b497c69b.png)
この写真の項目があります。
Xmsはeclipseに割り当てる最低限のメモリ
Xmlはeclispeに割り当てる最大限のメモリ
なのでここの数字をいじるとOK!
SwiftでAFNetworkingを使う


```Swift
        let keywords = ["photo","design","icon","book","game"]
        let index = Int(rand()) % Int(keywords.endIndex)
        let url = "http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/wa/wsSearch"
        let param = ["term":keywords[index],"country":"jp","entity":"software"]
        
        let manager = AFHTTPRequestOperationManager()
        
        manager.GET(
            url,
            parameters: param,
            success: { (operation: AFHTTPRequestOperation!,
                responseObject: AnyObject!) in
                println("JSON: " + responseObject.description)
            },
            failure: { (operation: AFHTTPRequestOperation!,
                error: NSError!) in
                println("Error: " + error.localizedDescription)
            })
```
concrete5 日本語の Vagrant ファイルを作りました


宮内さんが作成した vagrantfile に修正を加えて concrete5 日本語パッケージをインストールできるように Fork しました。この対応バージョンは 5.7.x です。vagrantfile のコメント欄をいじるだけで、5.6.x 日本語版もインストールできるようになっています。

[https://github.com/katzueno/vagrant-concrete5-ja](https://github.com/katzueno/vagrant-concrete5-ja)

# **おことわり**

2016/8/31 現在、このやり方は5.7.4.2 までのバージョンしか対応しておりません。古くなっており、最新バージョンに対応していないかもしれません。

時間ができた時に、新しいバージョン用を作成・テストし、また共有いたします。

# **元記事**

元記事 (**こちらの方を頻繁に更新しています。**)
http://ja.katzueno.com/2014/06/3111/ 


## 使い方

1. VirtualBoxをインストール
 * [https://www.virtualbox.org/](https://www.virtualbox.org/)
2. Vagrantをインストール
 * [http://www.vagrantup.com/](http://www.vagrantup.com/)
3. Chef Development Kit をインストール
 * [http://www.getchef.com/downloads/chef-dk/mac/](http://www.getchef.com/downloads/chef-dk/mac/)
4. 下記コマンドをいれて vagrant pluginsをコマンドラインからインストール
 * `vagrant plugin install vagrant-omnibus`
5. このレポジトリをローカルにクローン
 * `git clone https://github.com/katzueno/vagrant-concrete5-ja.git`
6. ディレクトリーに移動
 * `cd vagrant-concrete5-ja`
7. cookbooks をインストール
 * `berks vendor cookbooks`
8. Vagrant 環境を起動.
 * `vagrant up`
9. アクセス先は [http://192.168.33.35/](http://192.168.33.35/)
10. ログイン後[管理画面 (Dashboard)]-[システムと設定(System & Setting)]-[言語(Language)]メニューより、日本語を設定すると日本語化されます。

## 設定

各属性の説明は下記を参照

[https://github.com/Launch-with-1-Click/concrete5](https://github.com/Launch-with-1-Click/concrete5)

デフォルトユーザーは

* ID:admin
* Pass: concrete5
* Email: admin@example.com

です。`Vagrantfile` をテキストエディタで開いて変更可能です。


## 作成者

* [@miya0001](https://github.com/miya0001/) * 作者
* [@katzueno](https://github.com/katzueno/) * 日本語版作成
* [@ixkaito](https://github.com/ixkaito/)
xcode6 betaに対応していないxcode pluginをフライングで入れる

xcode pluginはxcodeのバージョンが上がると、pluginの作者が対応してくれるまで使えなくなります。
便利なpluginがxcode6 betaでは使えなくなりますので、困りますね。

ところが、これは1行pluginのファイルを弄るだけで使えるようになったりします。
pluginが使えなくなるのは、単にxcodeのバージョンをチェックしているだけで、互換性が無くなったわけではないからです。
チェックしているバージョンだけ上げてやれば使えます。
なので、どんどんpluginをフラゲしましょう。
（保証はしません）

#方法

1. `~/Library/Application Support/Developer/Shared/Xcode/plug-ins`に行きます
2. 所望プラグインの、`Info.plist`をエディタで開きます
3. `<key>DVTPlugInCompatibilityUUIDs</key>`と書いてある部分を探します
4. その下に、`<string>HOGEHOGE</string>`が沢山並んでいるので、一番下に`<string>AD68E85B-441B-4301-B564-A45E4919A6AD</string>`を足します。（これがxcode6 beta）
5. xcode6 betaを再起動

![スクリーンショット 2014-06-05 13.11.12.png](https://qiita-image-store.s3.amazonaws.com/0/19168/7e852df3-ea29-82dd-d226-5f5e9e0f953a.png)
Gitlab(CE)のMergeRequestにPushしたコミットが反映されないときの対処法

## 現象

1. WIPなブランチでMergeRequestを出す
1. pushを重ねる
1. 稀に途中からpushしたコミットがMergeRequestに反映されない(5回コミットしたのに最後のコミットが表示されない)

## 確認

* 再現性不明
* 何度リロードしてもダメ．(キャッシュを破棄してリロード)
* その上からさらにpushすることはできるが，その後も引き続き反映されない
* Networkできちんと当該ブランチが伸びていることを確認
* 同じブランチで新規MergeRequest出そうとすると「すでにあるよ」って怒られることを確認
* そのとき，ブランチ間の比較ではきちんと5回目のコミットが反映されていることを確認

## 原因

よくわからない．
バグ？
pushする手順間違った？
push前に git commit --amend したから？

## 対処法

当該MergeRequestをClose -> ReOpenしたら反映された．
やっぱGitlabのバグ？
Swiftのプロジェクトでmain.mを使う

`main.m`を使うライブラリはいくつかあります。
例えば、injectionforxcodeなど。

特に、injectionforxcodeはまだObjective-CでしかPatchが出来ないので、どうにかして`main.m`を使うよう弄ってみました。

xcode6対応すれば無駄な苦労になりますので、適当に眺めてください。

#結論

```objc:main.m
#import <UIKit/UIKit.h>
#import <##APPNAME##-Swift.h>

int main(int argc, char *argv[]) {
    @autoreleasepool {
        int retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
        return retVal;
    }
}
```

`##APPNAME##`はご自分のAppNameと読み替えてください。

を普通に置いて、

```diff:AppDelegate.swift
- @UIApplicationMain
+ //@UIApplicationMain
```

とすれば動きます。

ちなみに
`##APPNAME##-Swift.h`
はObjective-C内でインクルードすればプロジェクト内のSwiftのクラスが全て見えるようになる魔法のヘッダです。なにも特別用意せずインクルードするだけで使えます。

ちなみにinjectionforxcodeはxcode5までしか対応しておらず、現状のままではxcode6にインストールすら出来ません。（.plistを少し弄るだけで出来ます。）
強引に使おうとトライしていますが、BundleInjection.hでビルドに失敗するので調査中です。
Coda 2 で Markdown を使う方法

Markdown エディタでは [Mou](http://mouapp.com/)、 [Kobito](http://kobito.qiita.com/)、[Sublime Text 2](http://www.sublimetext.com/)などがありますが、[Coda 2](http://panic.com/jp/coda/)でも　Markdown 使えるプラグインを見つけました。

元記事
http://ja.katzueno.com/2014/06/3109/

# Coda 2 Markdown プラグイン

[https://github.com/Ibmurai/Markdown.codaplugin](https://github.com/Ibmurai/Markdown.codaplugin)

# インストール方法

## Git を使ってインストールする方法

Git が入っているとアップグレードにも簡単に対応できるので、コマンドラインから

* `cd ~/Library/Application\ Support/Coda\ 2/Plug-ins`

* `git clone git://github.com/Ibmurai/Markdown.codaplugin.git`

* Coda 2 を起動（もしくは再起動）

とすると便利

## Git を介さずにインストールする方法

* プラグインのサイトを訪問
[https://github.com/Ibmurai/Markdown.codaplugin](https://github.com/Ibmurai/Markdown.codaplugin)

* 画面右側の「Download ZIP」アイコンをクリック

* ZIP ファイルを解凍

* `Markdown.codaplugin` フォルダごと、`~/Library/Application Support/Coda/Plug-ins/` フォルダにコピー
(隠れフォルダになっているので見つからない場合は、「Mac OS X 隠しファイル」と検索しよう)

* Coda 2 を起動（もしくは再起動）

# 使い方

* 普通に Markdown で記事を書く
* プレビューしたい時は `Ctrl + Alt + コマンド + P` を押す
* HTMLに変換 `Ctrl + Alt + コマンド + C` を押す
* もしくは`プラグイン`メニューからでも可能

ショートカット一発で、HTML に変換してくれるのは便利です。
Markdown で書いて、Qiita に投稿しながら、WordPress 向けにブログを投稿する時に、HTML に一発返還できます(￣ー￣)ﾆﾔﾘ

## 例

この記事も実際に、Coda プラグインを使ってクロス投稿を簡単に作りました。

* ブログ記事
[http://ja.katzueno.com/2014/06/3109/](http://ja.katzueno.com/2014/06/3109/)
* Qiita 投稿
[http://qiita.com/katzueno/items/a19b42a4fa0a3ba2bd4e](http://qiita.com/katzueno/items/a19b42a4fa0a3ba2bd4e)
Qiitaのタグ名と正式名称の大文字小文字が一致していないと思われるもの一覧

Qiitaでのタグ名として登録されているものと、その対象になっているものの正式名称の大文字小文字がが一致していないと思われるものの一覧です。

[タグ一覧](http://qiita.com/tags)にて確認できたものは以下のとおりです。

- git
- c#
- twitter
- facebook
- eclipse
- heroku

[タグ一覧](http://qiita.com/tags)に表示されないが登録されているタグも存在するので、まだまだ大文字小文字が一致していないものがありそうです。（タグ一覧で表示されないタグがあるのも気になりますが）

観測範囲内で見つけたものは以下のとおりです。

- cocoa
- groovy

他にもありましたら、教えてください。

そして、Qiitaさん、本当に表記が正式名称と異なっているものであれば、できれば直して頂けると嬉しいです。
SELECT権限のみ、かつ外部ホストからアクセスできるユーザを作成しよう。


オペレーションチームにもSQLが使えたほうが何かと便利ということで、SELECT権限のみで外部ホストから手軽にアクセスするためのユーザを作成しました。
いかなる外部ホストからもアクセスできるようにホスト指定にはワイルドカードを使用しました（本番の場合はホスト指定をしたほうがセキュリティ的によい）。

```sql
GRANT SELECT ON dbname.* TO username@"%" IDENTIFIED BY 'password';
```
GitHubのリリース機能を使う

# Release機能について
GitHub上で開発したソフトウェアをそのままGitHub上で配布したい場合や、リリースごとのChangelogの見せ方をこだわりたい場合には、GitHubのリリース機能を使用することが出来ます。

# Release機能の使い方
## 前提
* 自分のGitHubリポジトリを持っていること
* Gitリポジトリにtagが付けられていること

## Releasesページ
GitHubのリポジトリのページにあるReleasesページへのリンクには、今まで付けたタグの一覧が表示されています。

自分がリポジトリのOwnerであれば、このReleasesページの右上に、`Draft a new release`というボタンが表示されております。
(Collaboratorの場合にも同様に出るかは分かりません…)

![releases-page.png](https://qiita-image-store.s3.amazonaws.com/0/19943/7c9827c4-1854-1e69-60cd-d00f3af79f29.png "releases-page.png")

## Edit releaseページ

`Draft a new release`ボタンを押すと、下記のような画面が表示されます。画面からは、下記の設定を行うことができます。
* Releaseするtag/branch
* リリース名
* 説明文
* 配布するファイル
* pre-releaseにするかどうか

![Release-description-page.png](https://qiita-image-store.s3.amazonaws.com/0/19943/647208c6-ef5e-56a9-75bd-04fbd77f16df.png "Release-description-page.png")

## Release後のReleasesページ

必要な入力を行い、いざ`Publish release`ボタンを押すと、下記のように、リリース対象のtagがステキな画面になりました。

![released.png](https://qiita-image-store.s3.amazonaws.com/0/19943/89cc06fa-d74a-acae-11fd-b2214566b078.png "released.png")

個人的には、Goでツールを作ってクロスプラットフォーム用にバイナリを生成した場合に、バイナリをアップロードしてあげるような用途で使うと便利かなと思っています。
皆様も、是非GitHubのRelease機能を使ってみてください！


# 参考URL
* [Creating Releases - GitHub Help](https://help.github.com/articles/creating-releases)
* [GithubでRelease機能が追加になっていた - Enjoy*Study](http://onozaty.hatenablog.com/entry/2013/08/04/021441)
* [Releases | GitHub API](https://developer.github.com/v3/repos/releases/) (手動でリリースするのが面倒な方向け)
Brakemanで無視する警告の設定の仕方


Railsアプリのセキュリティチェックの自動化にはBrakemanというGemが便利です。

https://github.com/presidentbeef/brakeman

Werckerに

```
      - script:
          name: Run Brakeman
          code: bundle exec brakeman -qz
```

という感じのステップを追加して、脆弱性が発見された場合はビルドを落としてしまうという運用をすると、セキュリティチェックも自動化される訳ですが、中には意図的に無視して良い警告があったりします。

そんな警告を無理やり潰す、というのも運用上無理があるので、Brakemanには指定した警告は無視する、といったことができる機能があります。

下記のように`bundle exec brakeman -I`とコマンドを打ち込むと、インタラクティブに無視する警告を設定することができます。

[Enter]と書いている部分はエンターキーを打ち込んでください。

```text
$ bundle exec brakeman -I

Input file: |config/brakeman.ignore| [Enter]
No such file. Continue with empty config? [Enter]
Your answer isn't within the expected range (included in ["y", "n", "yes", "no"]).
?  y
1. Inspect all warnings
2. Hide previously ignored warnings
3. Skip - use current ignore configuration
?  1
--------------------
Confidence: High
Category: Session Setting
Message: Session secret should not be included in version control
File: config/initializers/secret_token.rb
Line: 12
Action: (i, n, k, u, a, s, q, ?) 
```

ここで`?`を選択すると以下のような説明が出てきます。

```text
i - Add warning to ignore list
n - Add warning to ignore list and add note
s - Skip this warning (will remain ignored or shown)
u - Remove this warning from ignore list
a - Ignore this warning and all remaining warnings
k - Skip this warning and all remaining warnings
q - Quit, do not update ignored warnings
? - Display this help
```

基本的には以下の選択肢だけ覚えておけば良いかと思います。

* `i`で無視リストに追加
* `s`でスキップ
* `u`で無視リストから除外

それでは良きBrakemanライフを！
About Swift - Swiftとは（ざっくり翻訳してみた）


[The Swift Programming Language > Welcome to Swift > About Swift](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/index.html#//apple_ref/doc/uid/TP40014097-CH3-XID_0)

SwiftはC言語の厄介な個所を取り除いきC言語とObjective-C言語の良いところを踏襲したiOSとOS Xアプリ開発の為の全く新しいプログラム言語です。Swift は新しいプログラムのパターンを採用して、新しいフィーチャーを取り入れて、プログラムをより早く柔軟に、そして、楽しくしてくれます。成熟して多く親しまれたCocoaとCocoa Touchフレームワークに支えられて新しく誕生した Swift は、ソフトウエアー開発がどんなものか再認識させてくれます。

Swiftは長い年月をかけて開発されました。AppleはSwift基礎に既存のコンパイラーやデバッガーやフレームワークのストラクチャーを進化させました。ARCでのメモリーの扱いを簡潔にしました。Cocoaを基礎に築かれたフレームワークの蓄積によって現代的かつ標準的なものとして広まるにことなりました。Objective-C自体も進化してきました。blocks, collection, leterals, and modlues などをフレームワークに何事もなく適応させてきました。それに貢献した方に感謝しつつ、今、新しい言語をApple software 開発者に紹介します。

SwiftはObjective-Cに親和性があります。Objective-Cの可読性が高くよりダイナミックなオブジェクトモデルを採用しています。既存のCocoa frameworksも完全サポートしObjective-Cのコードにも互換しています。共通の土台でビルドすることで、言語自体のオブジェクト指向性や既存の手法や手続をひとまとめにし、そして、多くの新しいい機能を紹介しています。

Swiftはプログラマーに優しくできています。スクリプト言語として楽しみや表現力豊かな最初の industrial-quality systems（訳が思いつかない） プログラム言語です。ビルドやアプリを起動しないで、その場でSwiftのコードを検証できる環境など革新的なプレイグラインドも用意されています。

Swiftはより幅広いアップルのエンジニアリング文化の知恵と現代的な言語的思考で最適に組み合わせています。どちらも欠く事無くコンパイラーはパフォーマンスため、そして、言語は開発用に最適化されています。"hello, world" からオペレーティングシステム全体に拡張できるような仕組みになっています。全てはSwift開発者とAppへ健全な将来への投資です。

SwiftはiOSとOX Xを開発する上で素晴らしい手段です。そして、Swiftは新しい機能や性能を進化させ続けます。Swiftのゴールは夢や希望にあふれてます。どんなすばらしいものをみなさんが開発してくるか楽しみです。
swiftでblocksのproperty宣言

**Objective-C**

```
@interface Hoge

@property (nonatomic, copy) void(^onClick)(NSString *);

@end 
```

```
Hoge *hoge = [[Hoge alloc] init];
hoge.onClick = ^(NSString *text) {
    NSLogt(@"%@", text);
};

```

**Swift**

```
class Hoge {
    var onClick: ((String) -> Void)?
}

```

```
func f(text: String) {
    println(text)
}

var hoge = Hoge()
hoge.onClick = f
```
【iOS】GoogleAnalyticsでwebView内のリンククリック数を計測する方法

#1. Webview内での遷移イベントの計測方法

アプリのWebView内でイベントを計測したい時ありますよね。
広告のクリック数取りたい時とか。

例えば

```html
<!DOCTYPE html>
<html lang="ja">
<head>
</head>

<body id="article-body">
<div>
<a href="http://hogehoge">fugafuga</a>
</div>
</body>
</html>
```
となってる時にリンクのクリック数をどうとるか。


Web版のGAであれば、analytics.jsを埋め込んで、

```html
<a href="http://hogehoge" onclick="ga('send', 'event', 'category', 'action', 'label', value);">fugafuga</a>
```

こうすればいいのだけど、iOS向けのSDKだと、
そのままではWebViewでのクリックがとれない。



#2. 解決策

```html
<!DOCTYPE html>
<html lang="ja">
<head>
</head>

<body>
<div>
<a href="http://hoeghoge?banner_click">fugafuga</a>
</div>
</body>
</html>
```
のように、リンクのURLの後ろにパラメータをつける。

そしてWebView.m側で

```objc
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSURL *url = [request URL];
    
    // 該当クリックを判定
    if ([url.query isEqualToString:@"banner_click"]) {
        [[GAI sharedInstance].defaultTracker send:[[GAIDictionaryBuilder createEventWithCategory:@"banner_click" action:@"click" label:url.path value:nil] build]];
    }
}   
```

こんな感じで設定してあげることで、webViewのロードが走るときにURLを見て、
パラメータがついていたらGAのイベント計測してくれるようになる。
任意のパラメータをつけてあげることで、とりたい部分のクリックだけとれるようになる。

この方法だとアプリ内部にhtml持ってる場合でも使えるはず。
Nibのロード

いつの間にか
loadNibNamed:owner:はdeprecatedになっている
10.8からインタフェースが変わったらしい.
ハマる人がいるだろうから書いておく。

`
NSArray *topLevel = [NSArray new];
       if([[NSBundle mainBundle] loadNibNamed:@"MEGamePartsEditWindow" owner:nil topLevelObjects:&topLevel]){
self.gamePartsWindow = [topLevel lastObject];
`

でロードうまくいくとおもったら、ダメなときがある。
以下のようにダンプをとってみたら、topLevelの中身がバラバラなことがある。

ダメなとき
`
2014-06-05 11:14:06.887 qMapEditor[27803:303] unko (
    "<MEGamePartsEditWindow: 0x6100001ff500>",
    "<NSApplication: 0x600000110b30>"
)
`

うまくいくとき
`
2014-06-05 11:14:42.487 qMapEditor[27832:303] unko (
    "<NSApplication: 0x610000106660>",
    "<MEGamePartsEditWindow: 0x6080001eef00>"
)
`

以下で解決した
`
        NSArray *topLevel = [NSArray new];
        if(![[NSBundle mainBundle] loadNibNamed:@"MEGamePartsEditWindow" owner:nil topLevelObjects:&topLevel]){
            return self;
        }
        for(id obj in topLevel){
            if(NSClassFromString(@"MEGamePartsEditWindow") != [obj class]){
                continue;
            }
            self.gamePartsEditWindow = (MEGamePartsEditWindow*)obj;
        }
`

これが正規のやり方かはわからないが、まぁ。
Windows7 でネットワーク接続を手動で構築する

手動で設定する画面がどこにあるのかわからなかったので、メモ。
「Lenovo のインターネット接続」ではうまくいきませんでした。

### 「Lenovo のインターネット接続」が開いている場合は、閉じる。

### ネットワークと共有センターの、ワイヤレスネットワークの管理をクリック
![Image_1.png](https://qiita-image-store.s3.amazonaws.com/0/35008/81a0c47b-7245-e0a4-5fe6-50bce3df67fd.png)

### 追加 -> 手動で作成します のやつを選択
![Image_009.png](https://qiita-image-store.s3.amazonaws.com/0/35008/2d9599d0-12bf-1713-3fe9-6d5841921fd7.png)

![Image_010.png](https://qiita-image-store.s3.amazonaws.com/0/35008/d7adc49f-b7b0-4b37-309f-6d00ed121d95.png)

### あとは、必要な情報を入れます

以上、変なところあればご指摘お願いします。
Google OAuth 2.0 loginが2014年9月に使えなくなる(Googleアカウントからのユーザ登録機能がある場合は注意)

### Googleアカウント経由のログインで使われているAPIが変更される
以前からGoogleは、Google OAuth 2.0 loginをGoogle+ Sign-Inに変更するようにアナウンスしていたようですが、
Google OAuth 2.0 loginが2014年9月1日に廃止されるようです。

これに伴い、Googleアカウントからのユーザ登録機能にも変更が必要になるので、ライブラリのアップデート等を行ってください。
また、Google+ APIを許可していない場合は[Google Development Console](https://console.developers.google.com/)からの設定も必要です。
設定手順: プロジェクトを選択->APIと認証->API->Google+ APIの無効ボタンをクリック
![Google+ API](http://i.gyazo.com/271c0ffb4ee95d23f9522cd3f9f9e259.png)


### なぜこの問題に当たったか
Railsアプリでomniauth-google-oauth2のGemのアップデートを行った後にGoogleアカウントからのユーザ登録ができなくなったので、この問題に気づいた。
以下はその時のログ

```lang:log
 INFO -- omniauth: (google_oauth2) Callback phase initiated.
ERROR -- omniauth: (google_oauth2) Authentication failure! invalid_credentials: OAuth2::Error, {"errors"=>[{"domain"=>"usageLimits", "reason"=>"accessNotConfigured", "message"=>"Access Not Configured. Please use Google Developers Console to activate the API for your project."}], "code"=>403, "message"=>"Access Not Configured. Please use Google Developers Console to activate the API for your project."}:
{
 "error": {
  "errors": [
   {
    "domain": "usageLimits",
    "reason": "accessNotConfigured",
    "message": "Access Not Configured. Please use Google Developers Console to activate the API for your project."
   }
  ],
  "code": 403,
  "message": "Access Not Configured. Please use Google Developers Console to activate the API for your project."
 }
}
```
Go で DoubleArray を実装して Common Prefix Search する


# 概要
キーワードマッチするのに必要になったので作ってみました．

# コード
凝ったことは特にしていません．素朴な実装です．
構築は静的におこないます．一旦ダブル配列を作ったらキーワードの追加は出来ません．
キーワードリストを与えると，それらをソートして 0 から順に id を振って，検索時にこの id を返します．

https://github.com/ikawaha/trie

```
go get github.com/ikawaha/trie
```

# 参考
takuya-aさんのjsによるDoubleArray: https://github.com/takuyaa/doublearray
Atsushi KOMIYA さんのブログ: [Trie が提供すべき操作について検討してみる](http://blog.k11i.biz/2011/02/trie.html)
Higashiyama Masahiko さんのスライド: [ダブル配列の実装方法](http://www.slideshare.net/higashiyama/ss-8738479)
書籍: [日本語入力を支える技術](http://www.amazon.co.jp/gp/product/4774149934/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4774149934&linkCode=as2&tag=foxii-22)

# 使い方

キーワードのリストを用意して構築する．キーワードのリストはソートしてなくてもokです．

```sample
package main

import (
        "github.com/ikawaha/trie"

        "fmt"
 )

 func main() {
      keywords :=[]string{
                 "hello",
                 "world",
                 "関西",
                 "国際",
                 "国際空港",
                 "関西国際空港",
      }
      t, err := trie.NewDoubleArrayTrie(keywords)
      if err != nil {
         panic(err)
      }
      fmt.Println(t.Search("hello"))
      fmt.Println(t.Search("world"))
      fmt.Println(t.Search("goodby"))
      fmt.Println(t.CommonPrefixSearch("関西国際空港"))
}
```

結果

```
0 true
1 true
0 false
[関西 関西国際空港] [4 5]
```


ファイルを用意して構築する．1行1キーワードのファイルを用意します．

```text:入力ファイル
逓信大
電気通信大学
東京電気大学
電通大
電気通信大学大学院
電気通信大学大学院大学
```

```sample
package main

import (
        "github.com/ikawaha/trie"

        "fmt"
        "os"
 )

 func main() {
      file, err := os.Open("keyword_list.txt")
      if err != nil {
         panic(err)
      }
      defer file.Close()
      t, err := trie.NewDoubleArrayTrie(file)
      if err != nil {
          panic(err)
      }
      fmt.Println(t.CommonPrefixSearch("電気通信大学大学院大学"))
}
```

結果

```
[電気通信大学 電気通信大学大学院] [3 4]
```
Ansibleでホストを限定して実行する。


Ansibleでホスト限定で実行する方法
----

ansible-playbookの--limitオプションを使う。パターンには、とりあえず、IPアドレスが渡せた。多分hostgroupとかワイルドカード的なものにも対応しているはず。

```
 -l <pattern> or --limit=<pattern>
```
Swiftでクラスメソッド

Swiftでのクラスメソッドの書き方

``` lang:Class.swift
class SomeClass {
    class func someTypeMethod() {
        // type method implementation goes here
    }
}

SomeClass.someTypeMethod()
```

Objective-Cの場合だと

``` lang:SomeClass.m
+ (void)someTypeMethod;
``` 

となります

## 追記
Swift1.2より、staticが使用できます。

```
class SomeClass {
    static func someTypeMethod() {
    }
}
```
Go でスライスの拡張をレシーバでおこなう（スライスのレシーバを作ろうとしてはまったこと ）


# 概要
* スライスを拡張するためには容量の大きいスライスを用意して交換しなければならない
* スライスは参照ポインタで扱われるので，レシーバ内で交換しても実際には交換できてないのでレシーバを抜けると元に戻る（ようにみえる）
* スライスのポインタを用意してレシーバを書く必要がある

# だめなやつ

```
package main

import "fmt"

// フルーツの価格表
type Table []struct {
     fruit string
     price int
}

func (this Table) add(a_fruit string, a_price int) {
     //新しいテーブルを長さ2倍で用意してコピー
     newTable := make(Table, len(this)*2)
     copy(newTable, this)

	  //新しい価格表と入れ替えて要素を追加
     this = newTable
     this[2].fruit, this[2].price  = a_fruit, a_price
     fmt.Printf("in add(): %v\n", this)
}

func main() {
    //長さ2でリストを用意
    listOfPrice := make(Table, 2)

    listOfPrice[0].fruit, listOfPrice[0].price = "apple", 100
    listOfPrice[1].fruit, listOfPrice[1].price = "banana", 200

    fmt.Printf("in main() [1]: %v\n", listOfPrice)
	
	//リストを拡張して追加したい
    listOfPrice.add("tomato", 300)

    fmt.Printf("in main() [2]: %v\n", listOfPrice)
}
```

結果

```
in main() [1]: [{apple 100} {banana 200}]
in add(): [{apple 100} {banana 200} {tomato 300} { 0}]
in main() [2]: [{apple 100} {banana 200}]                  ＃ぐぬぬ
```

メソッドから抜けると交換したつもりのリストが・・・orz．言われてみればそうだよね．

# 解決方法 (スライスのポインタのレシーバを用意する)

ややこしいですが，newを使ってスライスを確保します．

```
package main

import "fmt"

type Table []struct {
    fruit string
    price int
}

func (this *Table) add(a_fruit string, a_price int) {
    var dst *Table = new(Table)
    *dst = make(Table, len(*this)*2) //長さ2倍で用意
    copy(*dst, *this)

    *this = *dst
    (*this)[2].fruit, (*this)[2].price = a_fruit, a_price

    fmt.Printf("in add(): %v\n", *this)
}

func main() {
    // newを使ってスライスのポインタを確保します
    var listOfPrice *Table = new(Table)
    *listOfPrice = make(Table, 2)

    (*listOfPrice)[0].fruit, (*listOfPrice)[0].price = "apple", 100
    (*listOfPrice)[1].fruit, (*listOfPrice)[1].price = "banana", 200

    fmt.Printf("in main() [1]: %v\n", *listOfPrice)

    listOfPrice.add("tomato", 300)

    fmt.Printf("in main() [2]: %v\n", *listOfPrice)
}
```

結果

```
in main() [1]: [{apple 100} {banana 200}]
in add(): [{apple 100} {banana 200} {tomato 300} { 0}]
in main() [2]: [{apple 100} {banana 200} {tomato 300} { 0}]   ＃ちゃんと拡張された！
```

#まとめ

これでいいのでしょうか．もっといい解決がある気がします．
開発者向け公開情報から見る iOS 8 の細かい新機能8つ

WWDC2014のキーノートでは、Swift、HealthKit、HomeKit、Metal、Extensions と、iOS 8 の言語レベル、新規フレームワークレベルでの大きな新機能について発表されましたが、従来フレームワークにもいろいろと有用な機能が追加されています。


<img src="http://f.st-hatena.com/images/fotolife/s/shu223/20140605/20140605094333.png" width="183">


例年のWWDCではそれらはNDA下にあり正式リリースまで話題にすることはできなかったのですが、今年はAppleがいろいろと情報を公開してくれている（ログイン不要で見れるようになっている）ので、それらの情報リソースから、「これは嬉しい」と思った機能を８つほど挙げてみました。


##目次

- UIVisualEffectView
- CIKernel
- AVAudioEngine
- CLFloor
- CLVisit
- Manual Camera Controls
- Accelerate Framework
- IBでのカスタムフォントプレビュー


詳細（続き）は下記記事をご参照ください。

http://d.hatena.ne.jp/shu223/20140605
[Swift] Closureについてメモ



クロージャー。ラムダ式とかアローファンクションとか、そのへんと同じ仕組み。
iBooksを読んだメモです。

## closureの基本形

```closure1.swift
{ ([parameters]) -> [return type] in
	[statements]
}
```

`{}`で囲み、その中に引数と戻り値を定義。そして`in`キーワードを挟んで処理の内容が続く。
iBooksの教科書では`sort`関数の引数に渡すサンプルが出てきてるので紹介。

```sort-sample.swift
// namesはString型の配列
reversed = sort(names, { (s1: String, s2: String) -> Bool in
	return s1 > s2
}) 
```

ちなみに`in`キーワードがあるおかげで改行はなくても問題なし。

## closureの型推論

closureでもだいぶいい感じに型推論してくれるみたい。
実際に、上の`sort`関数の場合は取る引数と返す値は自明なので、以下のように書ける。

```closure2.swift
reversed = sort(names, { s1, s2 in return s1 > s2 })
```

引数の型と`()`、戻り値をばっさり省略した形。だいぶシンプル。

## `return`キーワードの省略

そしてさらに、式がひとつの場合（例だと`s1 > s2`のみ）はさらに`return`すらも省略可能。

```closure3.swift
reversed = sort(names, { s1, s2 in s1 > s2 })
```

徐々になにがなんだか分からなくなってきたｗ

## ショートハンド引数名

さらにさらにさらに、インラインのclosureは引数名すら省略可能。
その場合は`$0`、`$1`、`$2`・・・と先頭の引数から順にアクセスできる。

*（余談だけど、JSの`arguments[0]`とかで引数名なくてもアクセスできるのと同じと思う）*

もちろん型推論される。
そしてショートハンドを使う場合は`in`キーワードすら省略可能となる。
つまり、最初の`sort`関数のclosureは以下のようにとてもシンプルに書ける。

```closure3.swift
reversed = sort(names, { $0 > $1 })
```

もはや関数なのか値なのかすら怪しい感じにｗ


## オペレータ関数（Operator Functions）を使う

どうやらSwiftにはOperator Functionsという仕組みがあるみたい。
（これは別の機会に調査）

iBooksの教科書によれば、オペレータを定義して、その引数などを定義できるみたい。
要はオペレータのオーバーロードってことかな？
そして`String`型は`<`や`>`のオーバーロードをしていて、挙動がまさに`sort`関数のそれと同じ。

・・なんとなく推測できると思うけど、つまり、最終的には以下のように書ける。

```closure3.swift
reversed = sort(names, >)
```

これ、知らないと第二引数まじ意味不明な気がするｗ


## Trailing Closures

なんて訳していいか分からないのでそのままのタイトルｗ
*（Trailing自体は末尾、みたいな意味）*

「末尾」が表す通り、関数の引数の末尾（最後）がclosureを受け取る場合、処理部分を外に配置できる、というもの。
百聞は一見にしかずなので、実際のサンプルを見てもらうと分かると思う。

```trailing-closure.swift
// closureを受け取る関数の定義。
// 「(Int, Int) -> Int」という型の関数を受け取る
func add(a: Int, b: Int, closure: (Int, Int) -> Int) -> Int {
	return closure(a, b)
}

// addを普通に使う
add(1, 5, { (a: Int, b: Int) -> Int in
	return a + b
})

// Trailing版
// 実際の処理を引数の()の外に置いている
add(1, 5) {
	$0 + $1
}
```

本を読んでいて、たまに`sort`関数の外に処理が書かれていてなんでだろうって思っていたけど、どうやらこの仕組で書いているみたい。

こんな感じの↓

```soft-trailing.swift
sort(arr) {
	$0 > $1
}
```