OmniAICreator/Qiita-1.07M huggingface dataset:
Google Analytics SDK for iOS V3（バージョン3）のマクロを作ってみた

* スクリーンビューをGA_TRACK_VIEWで
* 細かい機能ごとのデータをとりたいときはEVENTで
* どのページを見ているかなどのデータは、CUSTOM DIMENSIONを使って保存している

```objc
#import "GAI.h"
#import "GAIFields.h"
#import "GAIDictionaryBuilder.h"
 
#define GA_TRACK_VIEW(PAGE) [[[GAI sharedInstance] defaultTracker] send:[[[GAIDictionaryBuilder createAppView] set:PAGE forKey:kGAIScreenName] build]];
#define GA_TRACK_VIEW_WITH_CUSTOM1(PAGE, CUSTOM) [[[GAI sharedInstance] defaultTracker] send:[[[[GAIDictionaryBuilder createAppView] set:PAGE forKey:kGAIScreenName] set:CUSTOM forKey:[GAIFields customDimensionForIndex:1]] build]];
#define GA_TRACK_EVENT(EVENT,ACTION,LABEL,VALUE) [[[GAI sharedInstance] defaultTracker] send:[[GAIDictionaryBuilder createEventWithCategory:EVENT action:ACTION label:LABEL value:VALUE] build]];
#define GA_TRACK_TIMING(CATEGORY,TIME,NAME,LABEL) [[GAI sharedInstance] defaultTracker] send:[GAIDictionaryBuilder createTimingWithCategory:CATEGORY interval:TIME name:NAME label:LABEL] build];
#define GA_TRACK_SOCIAL(NETWORK,ACTION,TARGET) [[[GAI sharedInstance] defaultTracker] send:[GAIDictionaryBuilder createSocialWithNetwork:NETWORK action:ACTION target:TARGET] build];
 
#define GA_TRACK_CLASS GA_TRACK_VIEW(NSStringFromClass([self class]));
```

参考
http://d.hatena.ne.jp/diveintounlimit/20120922/1348316659
2013-10-03以前のGNU libstdc++ではC++11の正規表現は使えません

![無題 1.png](https://qiita-image-store.s3.amazonaws.com/0/25288/c5172d93-e80d-ccbd-d9ca-c1d90a37df0b.png)

regexヘッダファイルから利用できるstd::regex周辺のお話。

年に1回くらい「いや、もうそろそろ実装されてるだろ」という前提でstd::regexを使い始めてエラーでハマって1時間くらい調べて「このバージョンでも駄目なのかよ！」ということをやらかしています。

現象としては正しいと思われる正規表現を記述しているのに実行時に例外が投げられるということが発生します。この時点で「自分の使い方が間違っているのかな？」と疑うと無駄な調査を行うことになります。

使えないのにコンパイルできちゃうからたちが悪い・・・。

Ubuntuだと 13.04 のリポジトリにあるg++ 4.7では使えません。確認していませんがおそらく 13.10 でも駄目でしょう。

実装されたのは最近です
========================================
http://gcc.gnu.org/ から引用

> C++11 <regex> support [2013-10-03]
> Regular expression support in libstdc++-v3 is now available.

対処法
========================================
以下で対処してください。

- gccの最新版を自分でインストールする。
- ディストリビューションが配布しているものを使いたい場合は最新のものがくるまで待つ。
- boostやPocoなどの実装を使用する。

コンパイル時でも実行時でも「not implemented」って表示してくれりゃいいのに・・・。
cancanをいじってみた

cancanというgemを入れようかと思っていじってみた。（結果入れなかったけど）

https://github.com/ryanb/cancan

RailsCastのライアンさんが作ったgemで、例によって、RailsCastがわかりやすい。
http://railscasts.com/episodes/192-authorization-with-cancan

日本語の資料はこちら。
https://sites.google.com/site/railssiryou/gem/192-authorization-with-cancanwo-yi-denamono

cancan使ってみた例。
http://blog.udzura.jp/2012/01/12/lovely-authorization-with-cancan/

このあたりを見て、ちょっと中のソースを見れば、どんな感じかがわかると思います。

initialize(user)して、Userモデル使って、
roleを設定して、そのrole毎にできることとか設定していく感じみたい。

閲覧者や書き手、編集者、などroleがたくさんある場合に使うと捗るgemだと思った。

今回は、roleそんなになかったので、controllerに書いて、gemは使いませんでした。
また機会があれば！


追記
Rails4で使う場合は、

`$ gem "cancan", :git => "git://github.com/ryanb/cancan.git", :branch => "2.0"`
で使う。
こちらを見るに対応がやや怪しいぽい。
http://blog.n-z.jp/blog/2013-10-08-rails4-authorization.html
【爆速テンプレートエンジン】Express3 以降で layout.ejs が使えなくなった代わりに ECT

# layout.ejs がレンダリングされない!!

Express2 まではレイアウトを階層化する仕組みが提供されていましたが、Express3 では廃止され、EJS テンプレートエンジンの役割 (ejs-locals) として独立しました。

> [ejs-locals](https://github.com/RandomEtc/ejs-locals)
※現在はメンテナンスが停止してしまっているようです。

Express2 までは views ディレクトリに layout.ejs という親テンプレートファイルを置き、以下のように記述することでレイアウトテンプレートとして使うことができました。

```html:layout.ejs
<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
  <%- body %>
  </body>
</html>
```

しかし Express3 になり、テンプレートエンジン寄りの機能が廃止されました。

> the concept of a "layout" (template engine specific now)
partial() (template engine specific)
[Migrating from 2.x to 3.x](https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x)

# Hello ECT!

[jade](https://github.com/visionmedia/jade) を使うという手もありますが、今回は [ECT](http://ectjs.com/) という EJS ライクかつ Smarty に近い機能性を持った高速なテンプレートエンジンを使ってみましょう。
**どうやら [JS テンプレートエンジン最速](http://ectjs.com/#benchmark) を謳っているようです。**

※ express コマンドで生成できるプロジェクト雛形をベースに説明します。 `express <フォルダ名>` で作成して下さい。

```shell-session:インストール
[user@host project]$ npm install ect
```

コード：
- ECT の読み込みと設定を行います。

```js:app.js
/**
 * Module 読み込み
 */

var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');
var ECT = require('ect'); // ECT 読み込み

var app = module.exports = express();
app.set('port', process.env.PORT || 3000);

// ECT 環境設定
app.engine('ect', ECT({ watch: true, root: __dirname + '/views', ext: '.ect' }).render);
app.set('view engine', 'ect');

// その他 環境設定
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(express.cookieParser('your secret here'));
app.use(express.session());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

app.get('/', routes.index);

http.createServer(app).listen(app.get('port'), function() {
    console.log('Express server listening on port ' + app.get('port'));
});
```

ハンドラ：
- EJS の時と一緒です。パラメタを渡してあげましょう。

```js:routes/index.js
/*
 * GET home page.
 */
exports.index = function (req, res) {
    res.render('index', { title: 'Hello, ECT!' });
};
```

レイアウトテンプレート：
- content は値じゃなくて関数ですので、`=` や `-` を付けないように注意です。

```html:views/layout.ect
<!DOCTYPE html>
<html>
  <head>
    <title>Express3 + ECT</title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
  <% content %>
  </body>
</html>
```

Viewテンプレート：
- `extend` でレイアウトを継承しましょう。
- パラメタには必ず「@」を付けます。CoffeeScript ライクな記法ですね。
- パラメタは継承元テンプレート (layout.ect) でももちろん使えます。

```html:views/index.ect
<% extend 'layout' %>
<h1><%= @title %><h1>
```

以下のように表示されれば成功です！！

![hello_ect.png](https://qiita-image-store.s3.amazonaws.com/0/25145/d43ed31e-8112-0d65-7293-430058dc663b.png)

`extend` による継承以外にも `include` や `block` `if` による制御も可能です。
Smarty に慣れている人にはお馴染みですね！
MongoDBでMapReduce


MongoDBに保存されている位置情報をMapReduceで集約してみる。「どこにどれくらい居たか」を導き出すのが目的。

ドキュメントにはユーザIDと位置情報（[GeoHash](http://en.wikipedia.org/wiki/Geohash)）が格納されている想定。

```javascript
document = {
  user_id: 1,
  geohash: "xn75gknsuf"
}
```

マッパーの定義。GeoHash1つに対して1とする。

```javascript
// mapper定義
var mapper = function() {
  emit(this.geohash, 1)
}
```

レデューサの定義。`values`にはマッパーで処理された配列が渡ってくる。同じGeoHashの値が3つあれば、`[1, 1, 1]`という配列になる。これを`Array.sum()`で合計する。

```javascript
// reducer定義
var reducer = function (key, values) {
  return Array.sum(values);
}
```

`geohashed_location`コレクションに対してMapReduceを実行する。引数にマッパー、レデューサを渡し、オプションで出力用コレクションを渡す。

```javascript
// MapReduce実行
db.geohashed_location.mapReduce(
  mapper,
  reducer,
  {
    query: {},
    out: "geohashed_location_result"
  }
)
```


結果。

```javascript
> db. geohashed_location_result.find()
{ "_id" : "wvuw6nyxnm", "value" : 41 }
{ "_id" : "wvuw6nyxnp", "value" : 40 }
{ "_id" : "wvuw6nyxnq", "value" : 15 }
{ "_id" : "wvuw6nyxnr", "value" : 41 }
{ "_id" : "wvuw6nyxp1", "value" : 12 }
{ "_id" : "wvuw6nyxp4", "value" : 21 }
{ "_id" : "wvuw6nyxpm", "value" : 1 }
```
オブジェクト

## いろんな種類のデータを扱う時
例えば、「美浜さん」と言う人のデータを定義するときに、、、
①変数でやってみると

```js
var personName = '美浜ちよ';
var personAge = 10;
var personGender = 'female';
document.write(personName); //=> 美浜ちよ
```

と書き出しが多くなってしまう。

②配列を使ってみると

```js
var person = ['美浜ちよ', 10, 'female'];
var person = person[0];
document.write(person); //=> 美浜ちよ
```

と１つにまとまったが、今度は内訳が何を意味してるのか分かりづらい。

③オブジェクトを使うと以下の様に出力できる。

```js
var person = {
    name: '美浜ちよ',
    age: 10,
    gender: 'female'
};
var name = person.name;
document.write(name); //=> 美浜ちよ
```

•名前をはきだした場合
![名前.png](https://qiita-image-store.s3.amazonaws.com/0/35975/6d24398b-5e8b-7b04-11c4-c07e3d52d72e.png "名前.png")
•年齢の場合
![年齢.png](https://qiita-image-store.s3.amazonaws.com/0/35975/14ca917c-6341-8d1a-d247-eb7329049cf9.png "年齢.png")


③−①入れ子になってるオブジェクトの吐き出し

```js
var person = {
    name: '美浜ちよ',
    age: 10,
    gender: 'female',
    address: {
        pstcode: '100-0001',
        pref: '東京都',
        city: '千代田区'
    }    
};
var city = person.address.city;
document.write(city); //=> 千代田区
```

![入れ子.png](https://qiita-image-store.s3.amazonaws.com/0/35975/ad832743-abc2-a9c1-904c-4a7edb3370d2.png "入れ子.png")



## オブジェクトの書き方
名前と値のペアを「プロパティ」、値につける名前を「プロパティ名」と言います。
オブジェクトは{}で括って定義し、プロパティ名と値を(;)で区切り、それぞれのペアをカンマ(,)で区切ります。

下の様なひな形がよく使われる。↓

```js
var obj = {
	key1: val1,
	key2: val2,
	key3: val3
};
```

オブジェクト②
## []を使ってプロパティ名を指定して値を取得
オブジェクトの値の取得方法にはもう１つあります。
配列と同じ様に[]を使ってプロパティ名を指定する方法です。

```js
var person = {
    name: '美浜ちよ',
    age: 10,
    gender: 'female'
};
var key = 'name';
var name = person[key];
document.write(name); //=> 美浜ちよ
```
この様に変数を使って値を取得するには[]を使う必要がある。
よって[]を使わないと取得出来ないとき以外は、前回やった「ピリオド」を使うのが一般的である。

## プロパティの追加
存在しないプロパティ名に値を代入すると、新しくプロパティを作ることが出来る。

```
var person = {
    name: '美浜ちよ',
    age: 10,
    gender: 'female'
};
person.kana = 'みはまちよ';
document.write(person.kana); //=> みはまちよ
```

![追加.png](https://qiita-image-store.s3.amazonaws.com/0/35975/48777ece-5af8-294b-9a0b-4cbcbe89e898.png "追加.png")
Capistrano 3でcomposer installする

Capistrano 3でPHPのアプリケーションをデプロイするとき、`composer.lock`を見て`composer install`をさせたい場合のタスクの書き方、簡単に。parallelで動かしてもいいかも。

```rb
namespace :deploy do
  after :updated, :composer_install do
    on roles(:app), in: :sequence, wait: 5 do
      execute "curl -sS http://getcomposer.org/installer | php -- --install-dir=#{release_path}"
      execute "cd #{release_path} && #{release_path}/composer.phar install --no-dev"
    end
  end
end
```

`release_path`に`composer.phar`を一度ダウンロードしているのでそれが気になる人はComposerを一度コマンドとしてインストールしておくなりするといいかも。`composer self-update`するのが面倒なので都度ダウンロードするようにしています。
DockerでElasticserach


[前の記事](http://qiita.com/reoring/items/c91cca84854ceaca3589)では、Mac上で環境を起動していたが実際はデプロイすることになるのでDockerイメージを作成する。

## Dockerfileでビルドする。

```bash:Dockerfile
# Elasticsearch server

FROM ubuntu:12.04

RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
RUN apt-get update -qq
RUN apt-get upgrade -y

RUN apt-get install -y python-software-properties
RUN add-apt-repository ppa:webupd8team/java -y
RUN apt-get update

RUN echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections

RUN apt-get install -y git curl oracle-java7-installer wget

RUN wget -O /tmp/elasticsearch.tar.gz https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.10.tar.gz
RUN cd /tmp && tar xzf /tmp/elasticsearch.tar.gz
RUN rm -rf /tmp/elasticsearch.tar.gz
RUN mv /tmp/elasticsearch-0.90.10 /elasticsearch

WORKDIR /elasticsearch

VOLUME /elasticsearch

EXPOSE 9200

CMD ./bin/elasticsearch -f
```

このようなDockerfileを書いて、```docker build -t="elasticsearch" ``` とするとDocker Imageが作成される。

## 起動

### Dockerホストの9200番ポートにアタッチして起動

```
docker run -p 9200:9200 elasticsearch
```

### 動的にポートを決定させる

```
docker run elasticsearch
```

アタッチされたポートを確認するには、```docker ps```とするか、```docker inspect $CONTAINER_ID``` とする。

### Trusted Build

このイメージは、index.docker.ioに登録済みなので、```docker run reoring/docker-elasticsearch``` とすると立ちあげることができる。

[GitHub Repository](http://github.com/reoring/docker-elasticsearch)
文字列を日付として検索する

忘れそうなので備忘。

```sql
SELECT * FROM  `wp_postmeta` WHERE  '2014-01-01' < CAST( meta_value AS DATE ) 
```

CAST関数でもって、文字列を日付に変換している。
ただし気をつけた方がいい点として、「2014/02/14」とかだけではなく「2014/02/14　ほげほげふがふが」みたいな文字列もキャスト可能として取り扱われる模様。JSかお前は。
RHEL5.5サーバに対して、Chef Solo環境を作る時のSSLサーバ証明書エラーを回避するための対処法


RHEL5.5に、`knife solo prepare`したらSSLサーバ証明書のエラーが出ました。
対処法： 「RHELのサーバ証明書（CRTファイル）を上書きする」です。


# 今回の環境
* WORKSTATION: MacOSX 10.8.4
* NODES: RedHat Enterprise Linux 5.5（以下、RHELと書きます）
* Ruby: 1.9.3p448
* chef: 11.6.0
* knife-solo: 0.3.0
* IaaS: AWS EC2


# 事象まとめ
MacからRHEL5.5 に`knife solo prepare` を実行すると、`curl`コマンドでエラーが発生した。
SSL サーバ証明書を以下の通り上書きした後に、再度`knife solo prepare`を実行すると上手くいった。
ちなみに、Amazon Linux の場合は、こんなことをしなくてもすんなり上手くいった。

## knife solo prepare コマンドって何でしたっけ？
`knife solo prepare`コマンドは、NODES（料理されるサーバ）にChef をインストール＆レシピ走らせるを一度にするコマンドです。要は、Chef Solo使うための準備用のコマンドなので、一度だけ実行すればそれでOKです。


# やり方
1. Mac（Chefで言うWORKSTATION）からRHEL側（Chefで言うNODES）にログインします。
1. RHELのSSLサーバ証明書を上書きします。
1. RHELを抜けます。
1. Macで`knife solo prepare`打つと正常に処理が走って、RHELにChefがインスコされます。

```
$ vagrant ssh
[root@ip-xxx-xxx-xxx-xxx ~]# sudo curl http://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt
[root@ip-xxx-xxx-xxx-xxx ~]# exit 
$ knife solo prepare root@ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com -i ~/aws-key.pam 
```

※ 上記は、`vagrant ssh`コマンドでRHELにログインしてますが、この記事はRHEL5.5の証明書の話なのでvagrantは関係ないです。ログイン出来れば何でもOKです。

ちなみに、VagrantでEC2上にRHEL5.5を作る話はコチラです→ [Vagrantで AWS EC2インスタンス（RHEL5.5）を作成する](http://qiita.com/Humangas/items/2997cc6701aa90687c04)
この記事通り環境を作って、今度はChef Solo動かそうとなった時にこの記事が関係してきます。


# 【参考】エラー内容
証明書上書き前に`knife solo prepare`を打つとこんなん出ます。

```
$ knife solo prepare root@ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com -i ~/aws-key.pem 
Bootstrapping Chef...

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). The default
 bundle is named curl-ca-bundle.crt; you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.
bash: install.sh: No such file or directory
Generating node config 'nodes/ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com.json'...
```
iOS+openFrameworks: Examples

```
If you want to work with the openFrameworks GitHub repository, you should use the project generator to create project files for all the code in examples/.
```
GitHubリポジトリのexamplesはプロジェクトの形になってない‥らしい。
下記の手順でプロジェクト化する。

1. [projectGenerator](http://qiita.com/fuzzball/items/69f136cce83302042734)を起動。
1. `generate examples`ウィンドウの `ios projects` にチェックを入れ `<--Generate` を押す。
1. すると examples/ios/ 以下の Example が全てプロジェクト化されている！

![8cffc138-18ff-c827-21aa-e3278dd4cf13.png](https://qiita-image-store.s3.amazonaws.com/0/18828/ca3b2b24-0b95-bbf8-01c4-64bd92379333.png)

#examples/
##ios/
 * 3DPrimitivesExample
 * advancedEventsExample
 * advancedGraphics
 * assimpExample
 * audioInputExample
 * audioOutputExample
 * CoreLocationExample
 * dirListExample
 * emptyExample
 * eventsExample
 * fontsExample
 * fontShapesExample
 * graphicsExample
 * imageLoaderExample
 * ImagePickerExample
 * iosCustomSizeExample
 * iosES2ShaderExample
 * iosExternalDisplayExample
 * iosNativeExample
 * iosOrientationExample
 * iPhoneGuiExample
 * KeyboardExample
 * MapKitExample
 * moviePlayerExample
 * ofxGuiExample
 * opencvExample
 * opencvFaceExample
 * oscReceiverExample
 * oscSenderExample
 * polygonExample
 * soundPlayerExample
 * textureExample
 * TouchAndAccelExample
 * vboExample
 * videoGrabberExample
 * xmlSettingsExample
jQuery2.X系の安心・安全な読み込み方法


jQueryは2.X系からIE8以前のレガシーブラウザのサポートを廃止して高速化・軽量化を実現しました。
でもIEの旧バージョンを見捨てれなくて2.X系の利用に踏み切れれない事がよくありますね。
そんな時のために、安心・安全にjQuery2.X系を使用するたぶんベストな方法です。

※最近(2014/1/31現在)jQuery2.1と1.11のリリースがあったので、最新版を使っています。


```html
<!--[if lt IE 9]>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="/js/jquery-1.11.0.min.js"><\/script>')</script>
<![endif]-->
<!--[if gte IE 9]><!-->
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="/js/jquery-2.1.0.min.js"><\/script>')</script>
<!--<![endif]-->
```

### 条件付きコメントでIEのバージョン切り分け

条件付きコメントを使用して `[if lt IE 9]` でIE9未満のブラウザだけ読み込ませるといった切り分けをしています。

条件付きコメント - Wikipedia
http://ja.wikipedia.org/wiki/%E6%9D%A1%E4%BB%B6%E4%BB%98%E3%81%8D%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88

### プロトコル省略でhttp、httpsどちらにも対応

スクリプトの読み込みは `src="//ajax.googleapis.com/〜"` のように、http、httpsのプロトコル表記を省略する事で、SSLでアクセス時のセキュリティ警告メッセージを回避します。

HTMLやCSSでのプロトコル表記（http:、https:）の省略について: 小粋空間
http://www.koikikukan.com/archives/2012/05/11-012345.php

### フォールバックでGoogleのCDNがダウンした場合に備える

[Google Hosted Libraries](https://developers.google.com/speed/libraries/)のjQueryを利用する場合、万が一にGoogleのCDNが落ちた場合はローカルのjQueryを使うようにします。
`window.jQuery || document.write('<script src="/js/jquery-2.1.0.min.js"><\/script>')`

jQuery等CDNのダウンに備えたリスクヘッジ - Qiita [キータ]
http://qiita.com/kidachi_/items/5456589a799e5d787923
UCさんに教えてもらったgitのコミット間差分を一覧表示するコマンド


UCさんに教えてもらいました。

## 現在滞在しているコミットと特定のコミットの差分を表示する

現在 => HEAD
特定のコミット => 9f539749b88466544ce9df5f3eb0e23fc493a33b

### コマンド

`# git log --oneline 9f539749b88466544ce9df5f3eb0e23fc493a33b..HEAD`

### 実行結果

```
a881959 pmxReader header for pmx_morph
7d3c336 pmxReader::parseBone() and fixed potential ARM memory alignment error
535076b pmxReader::parseMaterials()
383990f pmxReader::parseTextures()
7bc4400 pmxReader::paresIndices() and fixed bugs
64d5a68 pmxReader::parseVertices()
c259073 writing pmxReader
934977b changes for debug
87c2742 some shaders change
ac59cd6 add refresh button
25f4e8a fixed texture loading filename bugs
e27a220 now, you can Party!
2eda474 removed compiler warnings for ZipArchive

```

## 特定のコミットAと特定のコミットBの差分を表示する

特定のコミットA => 6936fe0a2a31344e59445f82392ecc324c5d9935
特定のコミットB => 9f539749b88466544ce9df5f3eb0e23fc493a33b

### コマンド

`# git log --oneline 6936fe0a2a31344e59445f82392ecc324c5d9935..9f539749b88466544ce9df5f3eb0e23fc493a33b`

### 実行結果

```
9f53974 Download zip file and unzip
ff13d2f MikuMikuConnection created
```

## 行に番号をつけたいとき

コマンドのうしろに下記をつける。

` | awk '{print NR " " $0}'`

## 結論

UCさん神
[Ruby]RubyでExcelをつかう[Rails]


##Gemのインストール

spreadsheetというGemをつかうよ
[GitHubはこちら](https://github.com/zdavatz/spreadsheet)

`gem install spreadsheet`

Railsの場合は

```Gemfile
gem 'spreadsheet'
```

##エンコーディングの設定をする

```excel.rb
Spreadsheet.client_encoding = "UTF-8"
```

##エクセルファイルを新規作成して保存

```excel.rb
Spreadsheet.client_encoding = "UTF-8"

book = Spreadsheet::Workbook.new
sheet1 = book.create_worksheet
sheet1.name = "test"

# 処理書く

book.write "/path/excel.xls"
```

##エクセルファイルを開いて別名で保存
テンプレート作っておいてそれを編集するときはこれ

```excel.rb
Spreadsheet.client_encoding = "UTF-8"

book = Spreadsheet.open "/path/original.xls"
sheet1 = book.worksheet 0

# 処理書く

# 別名で保存（同じ名前にすると開けなくなるので注意）
book.write "/path/update.xls"
```

##エクセルに書き込む
```excel.rb
Spreadsheet.client_encoding = "UTF-8"

book = Spreadsheet::Workbook.new
sheet1 = book.create_worksheet
sheet1.name = "test"

# 0行0列目にhogeと書き込む
sheet1[0,0] = "hoge"

# 3行8列目にfugaと書き込む
sheet1[3,8] = "fuga"


book.write "/path/excel.xls"
```

他にもやりかたあるみたいなので、[GitHubのガイド](https://github.com/zdavatz/spreadsheet/blob/master/GUIDE.md)で確認してみてください
Windows AzureのSQL データベースをPowerShellでバックアップ

PowerShellを使ったSQL データベースのバックアップ

## PowerShellの起動
Windows Azure PowerShellを開きます。

## 準備

ストレージ名を指定して、初期設定を行います。

```ps1
Get-AzureSubscription -Current | Set-AzureSubscription -CurrentStorageAccountName storage1
```

## 各種設定

初期設定を行います。
SQLのサーバー名、ストレージのキー、ストレージ名、DB名、コンテナ名、Blob名(ファイル名)を変数に設定しておきます。

```ps1
$dateStr = Get-Date -Format "yyyy-MM-dd-HH-mm"
$ServerName = "serverxxx"
$StorageKey = "xxxxxxxxx...."
$StorageName = "storage1"
$DatabaseName = "sampledb"
$ContainerName = "db-bak"
$BlobName = "db-"+$dateStr+".bacpac"
```

資格情報の入力ダイアログが表示されるのでSQL データベースのユーザー名、パスワードを入力します。

```ps1
$credential = Get-Credential
```

## エクスポートの準備

```ps1
$SqlCtx = New-AzureSqlDatabaseServerContext -ServerName $ServerName -Credential $credential
$StorageCtx = New-AzureStorageContext -StorageAccountName $StorageName -StorageAccountKey $StorageKey
$Container = Get-AzureStorageContainer -Name $ContainerName -Context $StorageCtx
```

## エクスポート実行

```ps1
$exportRequest = Start-AzureSqlDatabaseExport -SqlConnectionContext $SqlCtx -StorageContainer $Container -DatabaseName $DatabaseName -BlobName $BlobName
```

5～10分くらいかかるので経過確認の確認

```ps1
Get-AzureSqlDatabaseImportExportStatus -Request $exportRequest
```

完了すると
  Status           : Completed
になります。
iOS+openFrameworks: Getting Started

#ダウンロード
2014/1/31現在

##安定版
http://openframeworks.cc/download/

 * v0.8.0
 * [openframeworks.jp](http://openframeworks.jp/download/)に置いてあるのは古い（v0.7.4）

##最新版
https://github.com/openframeworks/openFrameworks/tree/master

 * v0.8.1

#インストール
ダウンロードした.zipファイルを適当なフォルダに解凍する。
Custom Post Type UI で追加したカスタム投稿がプレビューできなくなった

Wordpress で特定のカテゴリの投稿を作成しようと思い、
Custom Post Type UI を使用してカスタム投稿をしました。

しかし、その投稿を公開した後に再度編集して
変更をプレビューしようとすると、404 になってプレビューが見られなくなりました。

ステータスを下書きにするとプレビューできますが、
ステータスを公開にすると見つからなくなります。

いろいろ検索して探した結果、
Custom Post Type UI をあきらめて、
functions.php で直接追加して、
最後に flush_rewrite_rules(); を記述して
リライトルールを更新すればプレビューできるようになりました。。。

できれば、Custom Post Type UI を使用しても
解決できる方法を知りたかったですが、探せませんでした。。。
(要調査) Django のクエリキャッシュによって起きる奇妙なバグ

qs に何かのクエリセットが入っているとき、

```py
for item in qs:
  ...

for item in qs.filter(...):
  item.status = 1
  item.save()

for item in qs:
  ...
  item.save()
```

というようなコードで、 item.status が元の値で上書きされた。

(追記)

テストコードで検証した。

https://gist.github.com/knzm/8732403
CentOSにvsftpdをインストールしてrootでFTP接続できるようにしちゃう


※あくまでもテスト環境とかのみで。

## 1. vsftpdをインストール

```
# yum -y install vsftpd
```

## 2. vsftpdの設定を修正

`/etc/vsftpd/vsftpd.conf`を編集。

パッシブモードでの接続を行う。以下はパッシブモードで使うポートを1050〜1055とした場合の設定。

```vsftpd.conf

- anonymous_enable=YES
+ anonymous_enable=NO

- #ascii_upload_enable=YES
- #ascii_download_enable=YES
+ ascii_upload_enable=YES
+ ascii_download_enable=YES

+ pasv_min_port=1050
+ pasv_max_port=1055

```


## 3. iptablesを修正

`/etc/sysconfig/iptables`を編集して、FTP接続に必要なポートを開ける。


```/etc/sysconfig/iptables

# HTTPのポートとか開けてるところの下にでも追記する
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1050:1055 -j ACCEPT

```

反映。

```
# /etc/init.d/iptables restart
```

## 4. rootでFTP接続できるようにしちゃう

決して本番環境ではやらないように！

まずは`/etc/vsftpd/ftpusers`からrootを除外（コメントアウト）する。

```ftpusers
- root
+ #root
```

もうひとつ。`/etc/vsftpd/user_list`からrootを除外する。

```user_list
- root
+ #root
```

## 5. vsftpdを起動
起動して完了。

```
# /etc/init.d/vsftpd start
```
Gradleを使った Android projectを circle CIで buildする

単に以下の様な circle.yml を書くだけです:

https://github.com/dagezi/GoClock/blob/master/circle.yml

[android update sdk](https://github.com/dagezi/GoClock/blob/master/circle.yml#L7)のところは、自分の必要な SDK, build-toolsに合わせて書きなおす必要があるでしょう。

まだ、buildだけなんで、emulatorをつかった instrumentation testとかもできたら書きます。
ターミナルで使える和英英和辞書を作る

いつも英単語を調べるときに [Alc](http://www.alc.co.jp/‎) とかで検索するのですが、面倒なのでターミナル上でささっと検索できるようにしてみました。

方針としては何らかの辞書テキストファイルを用意して、 ag コマンドで検索します。

## 辞書ファイルの用意

[edict](http://www.edrdg.org/jmdict/edict.html) という和英辞書がテキストファイルで取得できたのでこれを使うことにしました。
Debian の場合 apt パッケージもあるようです。

```bash
sudo aptitude install edict
```

## ag コマンドの準備

edict は和英辞書ですが、僕としては和英、英和を区別せずに使いたいため、 ag で検索することで両方向の辞書として使うことにしました。

ag コマンド ( [The Silver Searcher](https://github.com/ggreer/the_silver_searcher) ) はリンク先の README に従ってインストールしました。

## 辞書スクリプト

次のスクリプトを `dic` という名前で実行できるようにしました。
ag にオプションを丸投げしているので、 ag のオプションがそのまま使えます。

```bash
#!/bin/bash
#
# [USAGE]
#
#     dic [PATTERN]
#
# [EXAMPLE]
#   -i をつけると大文字小文字を区別しない。ただし日本語検索が使えなくなる...
#
#     dic -i Completion
#

DICTIONARY_PATH="/path/to/edict/"

ag --no-numbers --pager 'less -X' "$@" "${DICTIONARY_PATH}"
```
CentOSにてnginxでPHPを動かす


`http://www.example.com/`にアクセスして、ドキュメントルートにある`index.php`を実行できるようにするまでの手順。

ドキュメントルートは、`/var/www`とする。

index.phpは例のやつ。

```php:/var/www/index.php
<?php
	phpinfo();
?>
```


## 1. php-fpmをインストール

なんかremiリポジトリがどうとか色々あったけど、

```
# yum list | grep php-fpm
php-fpm.x86_64     5.3.3-27.el6_5     updates
```

あれ？あるぞ？ということで、そのままyumでインストールできた。

```
# yum -y install php-fpm
```

## 2. php-fpmの設定を変更

apacheってなってるところをnginxに変更。

```diff:/etc/php-fpm.d/www.conf

- user = apache
+ user = nginx

- group = apache
+ group = nginx

```


## 3. nginxの設定を変更

ドキュメントルートの設定と、PHPを実行できるように修正。

```diff:/etc/nginx/conf.d/default.conf
  location / {
-     root   /usr/share/nginx/html;
+     root   /var/www;
-     index  index.html index.htm;
+     index  index.php;
  }

- #location ~ \.php$ {
- #    root           html;
- #    fastcgi_pass   127.0.0.1:9000;
- #    fastcgi_index  index.php;
- #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
- #    include        fastcgi_params;
- #}
+ location ~ \.php$ {
+     root           /var/www;
+     fastcgi_pass   127.0.0.1:9000;
+     fastcgi_index  index.php;
+     fastcgi_param  SCRIPT_FILENAME  /var/www$fastcgi_script_name;
+     include        fastcgi_params;
+ }
```


## 4. php-fpmの起動
php-fpmの起動。ついでに自動起動の設定をしておく。

```
# /etc/init.d/php-fpm start
# chkconfig php-fpm on
```

## 5. nginxの再起動

default.confを変更したので再起動。

```
# /etc/init.d/nginx restart
```

## 6. index.phpの実行
ブラウザから`http://www.example.com`にアクセス。

phpinfo()の結果が表示されればOK。

- - -
> Blog URL : http://www.utano.jp/ (Syntax Error.)
スクレイピングツールの作成_5

今週は出向作業が忙しく、本番環境へアプリケーションをアップロードしてテストする、というのがまだ出来ていません。今日の夜にテストをしてみる予定ではありますが。。

今回の取り組みではデータ収集の高速化のみ対象としているので、本来のテストツールとしての使い方にそぐわないかと思っています。ですが、内部構造を知らないでチューニングも何もあったもんじゃありません。なので勉強を兼ねて書いてみようと思います。

考えている仕組みは、Selenium::Remote::Driver（以下S::R::D）でPhantomJSを操作してブラウジングを行い、遷移先のレンダリングされたHTMLソースからWeb::Scraper でデータを収集することです。

PhantomJS はヘッドレスドライバ（GUIを持たないブラウザみたいなもの）なので、外部プログラムからうまいこと操作してやればGUIを起動させずに自動ブラウジングが可能になります。そして今回外部プログラムに選んだのがS::R::D なわけです。

理由としては、単純にPerlでやりたかっただけです。以前ホームページにお問い合わせフォームを設置する関係でPerlを触ったとき、コードの芸術性や思想哲学に非常に共感できましたし何より書いていて気持ちよかったです。

少し話が外れますけど、自分は最初に入った会社でJavaの研修を受けてプログラミングに挫折した人間なので、書いていて楽しいPerlでやりたいというのが本音です。


さて、PhantomJSは確かにGUIも無いので描画の分だけ高速化できます。でも、データを取りたいサイトがAjaxを多用していたりするとページの読み込みが完了するまで待つ必要が出てきます。これが意外と痛かったりする。

欲しいデータが100あったとして10取るのにページ遷移あたり5秒かかるなら、50秒。

こんなサービス使いたいわけないですよね？(笑)


それじゃあどうしよう、というのが今の課題です。

ともあれ、下記のブログを見ながら色々勉強中です。
http://www.ivaturi.org/
CocoaPodsのpod installがうまく動かなくなった時に試してみること

##はじめに
[ブログにも記載](http://iphonework.biz/?p=723)しましたが、こちらにもアップ
CocoaPods超便利なのに下手したら使えなくなるかと思ってちょっと焦りましたｗ

##pod installがうまく動かなくなった時に試してみること
ある日 pod install がうまく動作しなくなりました。
その時のエラーログはこんな感じです。

```bash
[!] Pod::Executable pull
U	CardIO/3.2.0/CardIO.podspec
U	CardIO/3.2.2/CardIO.podspec
U	CardIO/3.2.3/CardIO.podspec
U	CardIO/3.3.0/CardIO.podspec
U	CardIO/3.4.1/CardIO.podspec
U	CardIO/3.4.3/CardIO.podspec
U	CardIO/3.4.4/CardIO.podspec
A	FXBlurView/1.5.2/FXBlurView.podspec
A	FXKeychain/1.5/FXKeychain.podspec
A	YandexMobileMetrica/1.2.0/YandexMobileMetrica.podspec
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.
```


[公式ページでもアナウンスがありました](http://blog.cocoapods.org/Repairing-Our-Broken-Specs-Repository/)
@k_katsumi さん、情報ありがとうございます！

```bash
$ pod repo remove master
$ pod setup
```


<del>
え？！なんかunmerged filesとか言ってる・・・
しかもPodfileに記載した記憶のない名前とか出てるし
何はともあれGoogle先生に確認し、それっぽい記事を発見
</del>
http://stackoverflow.com/questions/16049335/cocoapods-pod-install-permission-denied/17542841#17542841

<del>
曰く、~/.cocoapods と ~/Library/Caches/CocoaPods のパーミッションを確認してみよう、ということだけど問題ありませんでした
しょうがないので、一旦これらのファイルを消してpod setupで再セットアップしてみた
</del>

```bash
# ファイルのバックアップ
$ mv ~/.cocoapods ~/cocoapods
$ mv ~/Library/Caches/CocoaPods ~/CocoaPodsCaches

# pod 再セットアップ
$ pod setup
```

<del>
再セットアップが済んだらpod installを実行
</del>

```bash
$ pod install
Analyzing dependencies

CocoaPods 0.29.0 is available.

Downloading dependencies

... ライブラリのインストール ...

Generating Pods project
Integrating client project
```

<del>
無事復活しました。
これでまた平和なCocoaPods生活をおくることができそうです！

復活後はバックアップにとっておいたファイルを消しましょう
</del>

```bash
# 新しいファイルが生成されていることを確認
$ ls ~/.cocoapods
$ ls ~/Library/Caches/CocoaPods

# バックアップを削除
$ rm -rf ~/cocoapods
$ $ rm -rf ~/CocoaPodsCaches
```

##おわりに
CocoaPodsに頼りきりな生活を始めてしまったので、こういうことがあるとヒヤッとしますね（汗
同じ現象でお困りの方の助けになれば幸いです。
Github上にyumリポジトリを立てる

Github上にyumリポジトリを立てる
===

はじめに
---
Redhat/CentOS/Fedoraなどで使われているRPMを管理するコマンドyumはとても便利です。
yumリポジトリは自分で立てることができて、自作のRPMを公開したり、公式リポジトリに含まれないRPMを利用したり出来ます。
今回はGithub上にyumリポジトリを立ててみます。

yumリポジトリの仕組み
---
yumリポジトリはftpかhttpでアクセスできる環境であれば、特に他に必要な条件はありません。
単純にはApacheを立ててRPM類を公開するだけでyumリポジトリになります。
ただし、単純にRPMを置くだけではなく、どのようなRPMがあるかなどのメタ情報を含むXMLファイルなどを所定の場所に置いておく必要があります。

Github Pagesとは
---
Github PagesはGithubの提供する静的なHTMLコンテンツの公開サービスです。(無料)
Github上にgitリポジトリを作り、gh-pagesという名前のブランチを作成すると、それだけでコンテンツが公開されます。
このコンテンツは単純にHTTPでアクセス可能ですので、RPMファイルとメタファイルを配置することでyumリポジトリとして利用可能になるのです。

RPMの準備
---
公開したいRPMをローカルのディレクトリに適当に配置します。
（サブディレクトリ等があってもOKです）
今回は/tmp/rpmsの下に配置した想定とします。

yumリポジトリのメタファイルを作成
---
yumリポジトリのメタファイルをcreaterepoというツールで自動生成します。
ツールはyumで普通に導入可能です。

```
$ yum install -y createrepo
$ createrepo /tmp/rpms
```

上記の実行により/tmp/rpmsの下にrepodataというディレクトリができていて、中にメタファイルが色々入っています。

gitリポジトリ作成
---
ブラウザでGithubにログインして、新たなgitリポジトリを画面から作成してください。
今回はyumrepoという名前のgitリポジトリを作成した想定とします。

Github Pagesへ公開
---
先ほど生成されたメタファイルとrpmファイルをgitリポジトリにpushします。

```
$ git clone https://github.com/user/yumrepo.git
$ cd yumrepo
$ git checkout --orphan gh-pages
$ cp -R /tmp/rpms/* .
$ git commit -a -m "Add RPMs"
$ git push origin gh-pages
```

ポイントとしては、gh-pagesというブランチを切る位で、あとは本当に普通にpushしているだけです。

公開の確認
---
上記の特殊なブランチにpushしたファイルは下記から普通にhttpアクセスできるようになります。

```
http://[ユーザ名].github.io/リポジトリ名/
```

下記の感じでhttpでrpmが取得可能な状態になっているか確認します。

```
$ wget http://user.github.io/yumrepo/xxx.rpm
```

yumリポジトリ利用の設定
---
ここまでで、すでにgithub上にpushしたrpmがyumリポジトリとして使える状態になっています。
実際にyumコマンドで利用できるように設定をします。

```bash:/etc/yum.repos.d/myyum.repo
[repos.myrepo]
name=CentOS-$releasever - myyumrepo
baseurl=http://user.github.io/yumrepo/
enabled=1
gpgcheck=0
```

自前のyumリポジトリを利用してみる
---
yumコマンドを実行してみます。

```
$ yum -y install xxx --disablerepo=\* --enablerepo="repos.myrepo"
```

これであなたのオリジナルyumリポジトリからrpmのインストールをすることができるようになりました。

終わりに
---
これで気軽にオレオレyumリポジトリが手に入りますね！
suを使わずにrunuserを使おう

参考
---------

* [suとrunuser » gmt-24.net](http://gmt-24.net/archives/982)
* [/etc/init.d/xxx 内での su - KaiGaiの俺メモ](http://kaigai.hatenablog.com/entry/20060529/1148907797)


/etc/rc.local にスタートアッププログラムを記述して、OS起動時プロンプトが止まった経験がある人向け。

```bash:/etc/rc.local
runuser -l vbox -c "/usr/bin/VBoxManage startvm xampp-vm --type headless"
```

sudo -uとどう違うのか理解してないけど、runuser使う。

最近は@reboot使っています。 [cronの実行時間微調整, @reboot - Qiita](http://qiita.com/tukiyo3/items/4b3a6ed5b5bc1208bf66)
Ruby 2.1.0 install for Mac OSX

# はじめに
- brewを使って、rbenvをインストール
- rbenvでversion管理
- rbenvでrubyインストール

#### 環境
- MacOSX 10.7.5
- Homebrew 0.9.5
- Ruby 2.1.0
- Command Line Tools for Xcode（ruby install時に必要）

# 手順
## 1. Homebrewがなければインストールしておく
- brewでインストールされるソフトの保存先作成

```bash:ディレクトリ作成
$ sudo mkdir /usr/local/bin/
```

- インストール
 - このタイミングではdefaultで入っているrubyを使う

```bash:Homebrewインストール
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

- パスを通す

```bash:bash_profile
$vim ~/.bash_profile
export PATH=/usr/local/bin:$PATH

$source ~/.bash_profile
```

- Homebrewをupdateする

```bash:update
$ brew update
```

## 2. ruby-buildのインストール

```bash:rbenv
$ brew install rbenv
$ brew install ruby-build
$ brew install rbenv-gemset
$ brew install rbenv-gem-rehash
```

## 3. ruby2.1.0 インストール
- インストール可能リスト確認

```bash:rbenv
$ rbenv install -l | grep 2.1.0
```

- ruby 2.1.0インストール

```bash:install
$ rbenv install 2.1.0
```

- 2.1.0をデフォルトで使うようにする

```bash:global
$ rbenv global 2.1.0
$ ruby -v
```

- rubyのパスを通す

```bash:rehash
$ rbenv rehash
```
Bootstrapの古いバージョンのドキュメントをローカルで参照する(mac)

メモメモ

Bootstrap3.1が出たので変更点まとめようと思ったら、
ローカルで古いドキュメントを見たかったのでメモ

ちなみに全部[ここ](https://github.com/twbs/bootstrap#documentation)に書いてあります。

# Jekyllをインストール

```bash
$ sudo gem install jekyll
```

# Bootstrapをクローン

```bash
$ git clone https://github.com/twbs/bootstrap.git
$ cd bootstrap
```

# 任意のバージョンをcheckout

```bash
$ git checkout v3.0.3
```

# Jekyllを起動

```bash
$ jekyll serve
```

これで http://localhost:9001 にアクセスすると見れます。
Ruby 文字列を任意の文字数に分割する

1文字ずつ分割するなら簡単だけど、2文字以上で分割するにはどうするんだっけ？と思い調べてみた。

**1文字ずつ分割する場合**

```rb
s = "1234567890"
s.split(//)
=> ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
```

**n文字ずつに分割する場合**

```rb
s = "1234567890"
n = 3
s.scan(/.{1,#{n}}/)
=> ["123", "456", "789", "0"]
```
文字列から配列に変換(explode)と配列から文字列に変換(implode)

###文字列から配列に変換(explode)

```php:explode
//explode('区切り文字','対象文字列')
$a = explode('|','aa|bb|cc');
var_dump($a);
```

```php:表示結果
array(5) {
  [0]=>
  string(2) "aa"
  [1]=>
  string(2) "bb"
  [2]=>
  string(2) "cc"
}

```

※splitは非推奨のため、文字列で文字列を分割する場合は、explodeを使用する。

###配列から文字列に変換(implode)
```php:implode
//implode('区切り文字','対象配列')
$s = implode('|',array('aa','bb','cc'));
var_dump($s);
```

```php:表示結果
string(8) "aa|bb|cc"
```
【Redis】AWS ElastiCache(Redis)の情報収集【ElastiCache】


[Memcachedのこと](http://www.slideshare.net/shimy_net/amazon-elasticache-23314762)

↑を見ると、拡張APIがあり、複数ノードを一つであるかのように扱うためのエンドポイント（Configuration EndPoint）がある。

しかしRedisのクラスタを試しに立ち上げても、……そんなエンドポイントはない！

今のところ各ノードを意識して使い分けるしかないのか…
冗長化はどうすればいいんだろう？Replication Groupsってやつですか？

[ElastiCache Redis のベンチマーク](http://d.conma.me/entry/2013/09/05/143016)

またわかったことがあれば随時更新します。
Excelの関数だけで、やや汎用的に別のシートから項目を取得する方法

別のシートから項目を表示したい気持ちは大きくよく利用するわけですが、何度もやってるとそのうち面倒になってきましたので、汎用的なやり方を模索しつつあります。

# 取得したい、元の表

![WS000000.JPG](https://qiita-image-store.s3.amazonaws.com/0/36476/d87ce4a7-adb4-1302-c19b-62e214d617bb.jpeg)

たとえばこんな表があったとします。


# 取得先での関数

![WS000003.JPG](https://qiita-image-store.s3.amazonaws.com/0/36476/06e31ff0-e48a-f05c-9236-cd52e01d1c3b.jpeg)

こんな感じで取得できます。値のみと、合計を出す方式の２種程できます。
これだとまだ以下の項目が関数依存になっていますがまあとりあえず備忘録として記載しておきます。

- シート名
- 取得したい元の表での行ヘッダの行数
- 取得したい元の表での行ヘッダの列数
MacでRuby開発環境設定：デフォの1.8.7→1.9.3にする＆rbenvも


Macで、Chef Solo環境作るために、まずRuby環境整えようとした時の環境設定メモっす。

MacOSX：10.8.4のデフォルトでもRubyは入ってますが、バージョンが1.8.7 と古いです。
なので、その時（2013/11頃）の安定版だった1.9.3を入れようとした時に知ったRubyのバージョン切替ツールであるrbenvと、それをインスコするためにOSXのパッケージマネージャ（Macでツールをコマンドから入れられるツール）である[Homebrew](http://brew.sh/index_ja.html)のことも含めて同時に環境設定した時のメモ。


# ゴール
* Ruby 1.9.3 を使えるようにする（OSX 10.8.4のデフォだと、Ruby1.8.7）
* Rubyのバージョン切替ツールである rbenvを入れる
  * rbenvインストールのためにHomebrewもついでに入れる（入れといたらコレ以外も何かと便利）


# 環境
* MacOSX：10.8.4

## この手順以後
* Homebrew：0.9.4
* rbenv：0.4.0
* ruby 1.9.3-p448


# やり方
## Xcode Command Line Tool インストール
AppleのDeveloper.apple.comサイトからdmgパッケージをDownloadしてそのままインストールする。
ダウンロードは[コチラ](https://daw.apple.com/cgi-bin/WebObjects/DSAuthWeb.woa/wa/login?&appIdKey=891bd3417a7776362562d2197f89480a8547b108fd934911bcbea0110d07f757&path=%2F%2Fdownloads%2Findex.action)


## Homebrew インストール
```
$ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
$ brew doctor
$ brew -v
Homebrew 0.9.4
```

## rbenv インストール
```
$ brew update
$ brew install rbenv
$ brew install ruby-build
```

### その他必須パッケージインストール
`$ brew install readline openssl libyaml`

* 【参考記事】[Macにrbenvでruby1.9.3を入れてみた。](http://boiled-octopus.blog.so-net.ne.jp/2013-03-23-2)


## 環境変数設定
```
$ echo 'export PATH="$HOME/.rbenv/shims:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ cat ~/.bash_profile`
export PATH="$HOME/.rbenv/shims:$PATH"
eval "$(rbenv init -)"
$ source ~/.bash_profile
$ rbenv -v
rbenv 0.4.0
```

## ruby 1.9.3 インストール

まずは、`rbenv install -l`で、インストール可能なパッケージを確認

```
$ rbenv install -l
$ rbenv install 1.9.3-p448
```

## rbenv でruby バージョンの切替

`rbenv global <rubyバージョン>`で、ruby バージョンを指定のバージョンに切替る。

```
$ rbenv versions
system (set by /Users/hoge/.rbenv/version)
1.9.3-p448
$ rbenv global 1.9.3-p448
$ ruby -v
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.1]
```

## system install されているruby へバージョンを切替
`$ rbenv global system`でおｋ。


# 参考記事
色々説明も細かく書いてくれてる。手順の意味を知る場合コチラが参考になりました。

* [OS X で rbenv を使って ruby 1.9.3 or 2.0.0 の環境を作る](http://qiita.com/sora_h/items/9dd797f42e7bea674705)
StoryBoardでUIViewクラスと自作クラスを結びつけてもinitWithFrameが呼ばれない


UIViewクラスを継承したクラス（具体的にはUIButtonを継承していました）をStoryBoard上のViewと結びつけたところ、Xcodeによって自動作成されるイニシャライザが呼ばれませんでした。
Xcodeの設定とは「Identity and Type → Name」のことです。

自動作成されたのは以下の様な``initWithFrame``イニシャライザです。

```ObjC:自作のUIView継承クラス.mの一部
- (id) initWithFrame:(CGRect)frame {
    //呼ばれない！！
}
```

調べてみたところStoryBoardで設定するとこのイニシャライザは呼ばれないみたいですね。
呼ばれるのは`initWithCoder`イニシャライザのようです。

そこで以下の様なイニシャライザを追加したところ無事呼ばれていることが確認できました！

```ObjC:自作のUIView継承クラス.mの一部
- (id) initWithCoder:(NSCoder*)coder {
    self = [super initWithCoder:coder];
    if(self) {
        NSLog(@"こっちが呼ばれる？？");
    }
    return self;
}
```
pipで既にインストールされているパッケージをuser環境(非su)でアップデートする


既にインストールされているパッケージをアップデートしたいが、sudo権限がなく、
-Iや--userだけではpermissionエラーやez_setup.pyがない等で出来なかった。

##手順

手元にダウンロードして解凍し、解凍後のディレクトリからpipでuser環境にインストールする

```zsh
# ./tmpにtar.gzをダウンロードする
pip install [package] -I --user -d ./tmp
tar zxvf ./tmp/[package].tar.gz
pip install -e ./tmp/package --user

```

~/.localにインストールされるので、PATHを通しましょう。
iOS Developer Program　社名変更（商号変更）

※2013/9/9現在です。

##準備

・ __社名変更（商号変更）を証明する書類全ページ__ （例：履歴事項全部証明書もしくは、全部事項証明書など）
・ __1の公証された英訳版全ページ__ （原版の全ページが英訳されている必要があります）
＊書類には、社名変更、およびその変更の本質（吸収合併、分割など）が記録されている必要があります。
＊英訳版書類は、公証済みである必要があります。公証印のない書類ではプロセスを進めることが出来ません。


##1.問い合わせ
まずは、Apple Developer Program サポートに
社名変更を行いたい旨、伝えます。
https://developer.apple.com/contact/submit.php
Regionは「 __Japan__ 」
Subjectは「 __Account Updates and Renewals__ 」

##2.メール返信、アップロード
Appleからメールが届くので、
質問内容への返信と上記で準備したファイルをアップロードします。

###アップロード
こちらからアップします。
https://developer.apple.com/membercenter/uploadDocs.action

ブラウザは必ずSafariとの記述がありました。（他のブラウザで試していません）


###メール返信
下記の確認事項を質問をされますので、
英語で回答。

 __1) The previous name of your company__ 
以前の社名

 __2)The new name of your company__ 
新しい社名

 __3) Does your current membership have any apps on the App Store or in the
review process?__ 
リリース済みのアプリ、申請中のアプリがあるか？

 __4) Has the new company bought or acquired only the apps from the original
company?__ 
新しい会社は、元の会社からアプリのみを買収もしくは取得しただけですか？

 __5) Has the original company been dissolved, or is the original company
still in business?__ 
以前の会社は解散していますか、まだ活動していますか？

 __6) Has the new company bought or acquired the original company as a whole
business?__ 
新しい会社は、元の会社を買収もしくは獲得しましたか？

 __7) Has the original company only undergone a name change, or has the legal
entity also changed?__ 
元の会社は名前が変更されただけですか？法人も変わりましたか？


・DUNSナンバーの変更は特に求められませんでした。
RailsとFacebook API / 地元出身の友達を探してみる

- - - - - - - - - - - 
ブログを更新しました。<a href="http://workabroad.jp/posts/2052">元の記事はコチラ</a>
- - - - - - - - - - - 
この間から外部APIとの連携をやってみてるけど、いろいろ楽しいね。巨人の肩に乗ると、いきなりサイトがパワーアップした感じがでるので嬉しいこともある。
今回はFacebookのAPIをRails4で使ってみた。便利なGemがあるのでFacebook Developerのドキュメントあまり読まずにいけてしまった。

<!-- extract -->

Gemはこの2つ。
omniauth-facebookは前から入っていたので、そのまま使う事にした。
[omniauth-facebook](https://github.com/mkdynamic/omniauth-facebook)
[koala](https://github.com/arsduo/koala)

Gemfile
``` 
# Auth
gem 'omniauth-facebook'
# Facebook API
gem 'koala'
```

とりあえずインストール。

```
bundle install
```

###omniauth-facebook

omniauth-facebook使うと /auth/facebook にアクセスすればfacebookの認証画面を出してくれて、許可した後はcallback用のURLに飛ばしてくれる。

そこで受け取るアクションでは env['omniauth.auth'] が使えるので、

```
token = env['omniauth.auth']["credentials"]["token"]
```

とかでアクセストークンが取得できる。
このトークンを使って koala でいろいろすると。

omniauthの説明はRailscastが分かりやすい。
[Facebook Authentication](http://railscasts.com/episodes/360-facebook-authentication)

omniauthを使う際に、config/initializer/omniauth.rbを作ると思うけど、その中でscopeのオプションを設定してあげないと、koalaでやり取りする時にデータがうまく取れない。権限のエラーを出してくれれば分かりやすいけど、たまにからの配列が返ってきたりするからとまどった。

たとえばこんな感じ。

```
Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'], scope: 'basic_info, email, friends_hometown, public_profile, user_friends, user_hometown'
end
```

scopeをどこで確認するかは、facebook developerの[Graph API Explorer](https://developers.facebook.com/tools/explorer/)がもの凄い便利。すごいねフェイスブック。

Get Access Token を押すといろいろティックボタンが出てくるので実験できる。トークン取得した後にトークンの横にある「Debug」ボタンを押すと画面の一番したにscopeが表示されるので、それをコピペするだけ。

###koala

koalaもRailscastで説明されてた。Railscastすげーな。
[Facebook Graph API](http://railscasts.com/episodes/361-facebook-graph-api)

さっき取得したtokenを使ってkoalaがFacebookとやり取りしてくれる。

```
facebook = Koala::Facebook::API.new(token)
facebook.get_object('me')
=> {"id"=>"100000134621172", "name"=>"Shunsuke Sawada", "first_name"=>"Shunsuke", "last_name"=>"Sawada", "link"=>"https://www.facebook.com/shunwitter", ......
```

###FQL

いろいろ試してみたいけど、時間がかかるので、一番柔軟そうなFQLを試した。FQLはSQLみたいな文法でFacebookのデータベースからデータを取り出す言語です。

FQLを使って、「Facebookの自分の友達の中で「出身地が自分と同じ人たちだけを20件取り出す」ということをやってみた。

```
facebook = Koala::Facebook::API.new(token)

my_id = facebook['id']
hometown = facebook['hometown']['name']

q = "SELECT uid, first_name, last_name FROM user WHERE hometown_location.name = \'#{hometown}\' AND uid IN ( SELECT uid2 FROM friend WHERE uid1 = #{my_id} ) LIMIT 20"

facebook.fql_query(q)
```

これで該当する友達がずらーーーーっと取得できる。
楽しいなこれ。




 → <a href="http://workabroad.jp/posts/2052">http://workabroad.jp/posts/2052</a>
【初心者による初心者のためのGitHub】リポジトリへのプッシュまで。(Rails Ver)

初めてGitHub使って、わくわくしている千葉です。
今日は初心者なる自分が、初心者へ向けての記事です。

# GitHubとは
ファイルのバージョンを管理してくれるもの。
ファイル壊して戻したり、複数人でファイル修正してマージできます。

# まずは、ローカルでgitコミット
git環境については、私はmacなので初めからインストールされておりました。（rails入れる過程で自分で入れたのかも？残念ながら忘れました。。。）
なので、インストールについてはググってください（冷徹）
インストール終わってる状態から始めます。

## gitの初期設定

まずは、ユーザ設定をします。これは１回行えばおkです。

    $ git config --global user.name "ユーザ名"
    $ git config --global user.email メールアドレス

※メアドはもちろん、公開用の物をご指定してください。コミットログに記載されます。

## エディタの設定

コミットログを書く時に起動する、デフォルトのエディタを設定します。
私は、vim使いになるべくvimを指定します。

    $ git config --global core.editor "vim -f"

## gitの初期化
私の場合は、railsアプリをコミットします。
railsアプリのホームディレクトリで実行します。
rails以外の環境でやってないので、エラーになった方はググってください（すみません）

    $ git init


## git管理から除外するファイルの設定
不要ファイルを指定します。
例えば、ログ等更新されるもの（コミットされてもいらんですよね）
railsの場合は、以下を指定します。

```ruby:.gitignore
# Ignore bundler config.
/.bundle

# Ignore the default SQLite database.
/db/*.sqlite3
/db/*.sqlite3-journal

# Ignore all logfiles and tempfiles.
/log/*.log
/tmp

# Ignore other unneeded files.
doc/
*.swp
*~
.project
.DS_Store
.idea
.secret
````

[抜粋：: Michael Hartl（マイケル・ハートル）. “Ruby on Rails チュートリアル"](http://railstutorial.jp/)

## ローカルリポジトリにコミット

ステージングエリアへ登録（コミット待ち状態へ）

    $ git add .


ローカルレポジトリコミット

    $ git commit -m "Initialize repository"


コミットログの確認

    $ git log


# GitHubにプッシュ

1. まずは、[GitHubアカウント作成](https://github.com/)
1. 通信は暗号化しましょう。[SSHkeyの設定](https://help.github.com/articles/generating-ssh-keys)
1. [レポジトリの作成](https://help.github.com/articles/create-a-repo)
1. GitHubへのpush

実行コマンド

    $ git remote add origin https://github.com/<username>/first_app.git
    $ git push -u origin master

これでリGitHubのポジトリに登録されている。
GitHubにログインして、ファイルが登録されてるのを確認してみてください。


# その他参考コマンド

コミット待ちファイルの表示

    $ git status

チェックアウト

    $ git checkout

リモートレポジトリコミット

    $ git push
OSXでIRC Client Textualを導入する

最近LimechatからTextualに乗り換えをしました。

## Textualの概要

![textual.png](https://qiita-image-store.s3.amazonaws.com/0/24324/f8a1a5db-166d-a8fe-e091-5fc613277bc8.png)

[Textual](www.codeux.com/textual/)はCodeux Softwareが開発をしているOSX用のIRCクライアントでLimechatからforkしたIRCクライアントとなります。$4.99と有料ですが、海外では多く使われているIRCクライアントですし、IRC上でのサポート体制もあるので安心です。（勿論英語ですが・・・）

ダウンロードはこちらから (https://itunes.apple.com/us/app/textual-irc-client/id403012667)

## Textualの良い点

* LimechatであったZNCのPlaybackのPerformance問題が解決済み (https://github.com/psychs/limechat/issues/110)
* スクリプトやプラグインでの機能拡張、OSSなのでPRも勿論出せます
* ZNC BufferのPlayback時にアラートを出さない設定ができる

## ちょっと残念な点

* Limechatで追加されていたTwitter Iconなどの機能がない
* Limechatであった全体のログがない
* チャンネル移動時にスクロールが最先端にいってしまう（^⌘LのScrollback Markerで元いた位置に戻れます）

## Known Bugs

* Mavericsでinline imageを大量に表示しているとどこかのタイミングで画像が表示できなくなる（OSX再起動で治る。近いうちにworkaround対応版がリリース予定)

## まとめ

TerminalのIRCクライアントは苦手、Limechatを使っているけどPlayback bufferの問題が辛いというときはTextualがおすすめです
泥沼の記憶(CSV)をワンライナーで処理する


ここ一ヶ月あることをやった際の記録を取っていたのだが、それを集計した際のメモ。
以下のように、データがCSV形式で記録されており、これらを列毎に集計する。(なお、数字を見て心当りがあったとしても、華麗にスルーして頂きたい。)

```numa
4000,2000,5000,7000,20
4000,2000,5000,7000,20
4000,2000,5000,7000,20
4000,3500,6010,6000,20
4000,3500,6010,6000,20
4000,3500,6010,6000,20
4000,3500,6010,6000,20
4000,3500,6010,6000,20
4000,3500,6010,6000,20
4000,3500,6010,6000,20
4000,3500,6010,6000,20
4000,2000,5210,5200,20
4000,2000,5210,5200,20
4000,2000,5210,5200,20
4000,2000,5210,5200,20
4000,2000,5210,5200,20
6000,5000,7000,2000,20
4000,6000,6000,2000,20
1500,1500,2000,1000,20
1500,1500,2000,1000,1
1500,1500,2000,1000,1
1500,1500,2000,1000,1
1500,1500,2000,1000,1
1500,1500,2000,1000,1
1500,1500,2000,1000,1
1500,1500,2000,1000,1
```

処理するワンライナーは以下の通り。


```bash:ワンライナー
python -c "import csv;print([sum([int(m) for m in materials]) for materials in zip(*csv.reader(open('big.txt')))])"
```

# よく分かる(かも知れない)解説

まずはCSVの読み込み。csvモジュールのreaderオプジェクトにopenしたfileオブジェクトを与える。readerオプジェクトはiterableなのでforで回せる。

```py3
>>> import csv
>>> for r in  csv.reader(open('big.txt')):
...     print(r)
...
['4000', '2000', '5000', '7000', '20']
['4000', '2000', '5000', '7000', '20']
['4000', '2000', '5000', '7000', '20']
['4000', '3500', '6010', '6000', '20']
…
```

次にzip関数で列毎に値を集約してやる。zip関数が返すzipオブジェクトもiterableなので、同様にforで回せる。
各列毎の値がtupleに集約されていることが分かる。

```py3
>>> z = zip(*csv.reader(open('big.txt')))
>>> for entry in z:
...     print(entry)
...
('4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '6000', '4000', '1500', '1500', '1500', '1500', '1500', '1500', '1500', '1500')
('2000', '2000', '2000', '3500', '3500', '3500', '3500', '3500', '3500', '3500', '3500', '2000', '2000', '2000', '2000', '2000', '5000', '6000', '1500', '1500', '1500', '1500', '1500', '1500', '1500', '1500')
('5000', '5000', '5000', '6010', '6010', '6010', '6010', '6010', '6010', '6010', '6010', '5210', '5210', '5210', '5210', '5210', '7000', '6000', '2000', '2000', '2000', '2000', '2000', '2000', '2000', '2000')
('7000', '7000', '7000', '6000', '6000', '6000', '6000', '6000', '6000', '6000', '6000', '5200', '5200', '5200', '5200', '5200', '2000', '2000', '1000', '1000', '1000', '1000', '1000', '1000', '1000', '1000')
('20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '1', '1', '1', '1', '1', '1', '1')
```

最後にsum関数でtuple内の値の和を取る。
ただし、csv.readerで読み込んだ値は文字列のため、intに変換してやってから、sum関数に与える必要がある。

```py3
>>> z = zip(*csv.reader(open('big.txt')))
>>> for entry in z:
...     print(sum([int(e) for e in entry]))
...
86000
67000
118130
107000
387
```