OmniAICreator/Qiita-1.07M huggingface dataset:
Webアプリ開発実践：Djangoでシフト作成ページを作ろう！（ベースとなるテンプレートを書く）


#### 各ページを作る前に、テンプレートの基礎部分を作っていこうと思います。
Djangoには **extends** という便利なテンプレートタグがあり、これを使えばHTMLを書く手間をかなり省けそうなので活用しましょう。

templates以下にbasesというディレクトリ（名前は何でもいいですが）を作り、全ページの骨組みとなるbase.htmlを書きました。

###### templates/bases/base.html

```django
<!DOCTYPE html>
<html lang="ja">
	<head>
		<title>{% block title %}Shift-Maker{% endblock %}</title>
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<link rel="stylesheet" href="{{ STATIC_URL }}css/bootstrap.min.css">
		<link rel="stylesheet" href="{{ STATIC_URL }}css/bootstrap-theme.min.css">
		<script src="{{ STATIC_URL }}js/jquery-1.11.0.js"></script>
		<script src="{{ STATIC_URL }}js/bootstrap.min.js"></script>
	</head>

	<body><div class="container">
	{% block main %}
	{% endblock %}
	</div></body>
</html>

```

BootstrapとjQueryはどのページでも使いたいのでここであらかじめ指定してしまっています。 **STATIC_URL** は **settings.py** で設定してあり、自分の場合

```py
STATIC_URL = '/static'

STATICFILES_DIRS = (
        os.path.join(BASE_DIR,'static'),
)
```

です。 **STATICFILES_DIRS** でファイルを置くディレクトリを指定できるので適当にディレクトリを作成して適用しましょう。

あとは各ページごとに内容を入れていくだけです。流れとしては、 **extends** で親のテンプレートを宣言して **block** で指定した箇所に中身を入れる感じです。
例えば以下のように書きます。

```django
{% extends 'bases/base.html' %}

{% block title %}Hello,world!{% endblock %}

{% block main %}
<h1>This is test!!</h1>
<button class="btn btn-lg">Click me</button>
<script type="text/javascript">
var count = 0;
$('.btn').click(function(){
        alert(count + "click!");
});
</script>
{% endblock main %}
```

BootstrapやjQueryを親からちゃんと受け継いでいますので、いちいち同じことを書かずに済むようになりました。

さて、実はここに来て **[以前](http://qiita.com/juniskw/items/8edf5fb52a997b486614)作ったデータベースモデルに問題があることに気付き、大幅に修正したので** 、次回はその辺を改めて投稿し直そうと思います（前のも記念に残しますが）。

ビューはその後に作っていくとしましょう。
指定した階層分だけディレクトリを遡れるようにするためのコマンド "up"

# cd で上の階層に戻るの面倒…。

いつもいつも cd ../../../ とか打ってしまってるそこのアナタ。面倒だと感じたことはありませんか？もっと指定した階層分だけズバッと戻れたらいいのに…と感じたことはありませんか？しょうがないなぁのび太君は。

# upコマンド作りました。

まぁ全然大したことやってませんが、作りました。ワンライナーです。

https://github.com/m-yamashita/up

使い方は、upファイル内のコマンドを.bashrcもしくは.zshrc等にコピーするだけです。

これを使うと、例えば3階層上のディレクトリに戻りたいときに

    up 3

等と打てば一発で戻れます。
もし階層を間違えても

    cd -

で元の場所に戻れますので安心です。

単に1階層だけ上に行きたいときは、引数なしで

    up

でOKです、これだけでもかなり楽ちんです。

元々結構前に自分用に作ったもので、zshでautojumpとか使えば要らなくなるかなと思いきや、それらを使い始めた後も何だかんだでずっと使ってるので皆さんにもお勧めしてみます。

#最後に

ライセンスはMITです。よろしくお願いしまーす。
UITableViewのサイズを内容に応じて縮める

全画面でUITableViewを表示しているが、表示するデータが少ない際は空のセルを表示せず、テーブル背後のビュー等を見せたい場合があった。

(変更前)
![iOSシミュレータのスクリーンショット 2014.03.18 8.46.35.png](https://qiita-image-store.s3.amazonaws.com/0/39133/fccdbab2-dd10-8528-9fd8-09b5f92cff4c.png)


表示する内容(=contentSize)に応じてテーブルを伸縮させればよい。

```objc

// テーブルロード後に以下を実行すればよい.
- (void)updateTableSize:(UITableView *)tableView
{
    tableView.frame =
    CGRectMake(tableView.frame.origin.x,
               tableView.frame.origin.y,
               tableView.contentSize.width,
               MIN(tableView.contentSize.height,
                   tableView.bounds.size.height));
}

// 例.
- (void)hoge
{
    [_tableView reloadData];
    [self updateTableSize:_tableView];
}

```

(変更後)
![iOSシミュレータのスクリーンショット 2014.03.18 8.51.12.png](https://qiita-image-store.s3.amazonaws.com/0/39133/8e60fc7f-abb2-0c99-76dc-d73b458992e1.png)
[XCode]デバッグ用の端末を追加する


新しくiPadを手に入れたのでXCodeでデバッグできるようにする。
久しぶりの作業で手間取ったのでメモ。

---

###Provisioningの設定画面(Xcode)

端末をつないで
Organizer > [左のリストから今繋いだ端末] > 右側の"Use for development"ボタン

この時点ではprovisioning が有効でない

###Provisioningの設定(デベロッパーサイト)

以下のページで...
https://developer.apple.com/account/ios/certificate/certificateList.action

Provisioning Profile > ALL > [XX_iphoneとか以前に登録したもの] > Edit > デバイス追加　> Generate > Download

![kobito.1395094476.077565.png](https://qiita-image-store.s3.amazonaws.com/0/29775/d11bec31-5435-470e-a10e-024f507144aa.png "kobito.1395094476.077565.png")

###macで
ダウンロードしたXXX.mobileprovisionをダブルクリックで実行。provisioningがvalidになる。
デバッグ実行しようとするとリストに今追加した端末が表示されているはず。
gdal2tilesで、pngの半透明情報を保持しつつタイル化する方法

随分前に @vec2rasさんに教えてもらったのに忘れていて情報探し出すのに苦労したので。

透過領域があるだけのpng地図なら、gdal2tilesでもタイル化できる。
が、半透明情報は見事に落ちる。
MapTilerだとできるんだけど、金がかかるしタイル化できるピクセルサイズにも制限あり。

なら、どうするか。
直接には無理なので、vrtというフォーマットを経由するとの事。

```shell-session
gdal_translate -of VRT -a_srs "+proj=tmerc +lat_0=36 +lon_0=136.0 +k=0.9999 +x_0=0 +y_0=0 +a=6378137 +b=6356752.313989717 +units=m +no_defs" chizu_touka.png chizu_touka.vrt
```

投影系情報等はダミーなので気にするな。
上記のような形で一旦vrt化してやってから、gdal2tilesかけると、半透明情報残したままタイル化できる。

過去試して確認はしてるが、その時残したメモを必死こいて探した結果をはっつけてるだけなので、直近では動作未確認。
もうすぐ確認する予定があるので、その時何かミスが判れば直すかも。
Google Maps Mobile SDKをApache Cordova(PhoneGap)で表示する:iOS編

HTML5を使ってモバイル・アプリを作れるPhoneGapのオープンソース版「Apache Cordova」を使って、Google Mapsを表示する[プラグイン](https://github.com/wf9a5m75/phonegap-googlemaps-plugin/)を紹介します。

**phonegap-googlemaps-plugin**
https://github.com/wf9a5m75/phonegap-googlemaps-plugin/

SDKを使用して表示するので、ネイティブアプリと同じようにサクサク地図が表示されます。

今回はiOSアプリを作成する方法を紹介します。

#1. Apache Cordovaのインストール
1. Node.jsをインストール
2. ``npm -g install cordova``でApache Cordovaをインストール
3. [Apache Ant](http://ant.apache.org/)もインストール
4. [XCode](https://itunes.apple.com/us/app/xcode/id497799835)もインストール

#2. Cordovaプロジェクトの作成
```bash
$> cordova create HelloMap com.example.myapp HelloMap
```
と実行すると、HelloMapディレクトリが作成されます。

#3. プラットフォームの追加
```bash
$> cd HelloMap/
$> cordova platform add ios
```
HelloMap/platforms/以下に、iosのプロジェクトが作成されます。

#4. APIキーを取得する
続いて、[Google APIs Console](https://code.google.com/apis/console/) をブラウザで開きます。

登録しているプロジェクトがない場合は、適当に登録します。

APIs & auth > APIsを開き、``Google Maps SDK for iOS``をOnにします。
![Screen Shot 2014-03-14 at 6.14.01 PM.png](https://qiita-image-store.s3.amazonaws.com/0/39529/f7abe781-1768-c60c-3649-65921b13a29e.png)


続いて``Credentials``を開き、アプリの名前空間を登録します。
APIキーが作成されるので、これをメモしておきます。
![ios_api_key.gif](https://qiita-image-store.s3.amazonaws.com/0/39529/d4f7e3d4-9b66-fac4-77c9-08c85e133794.gif)


#5. プラグインのインストール
Cordovaプロジェクトのディレクトリに戻ります。

```bash
$> cd HelloMap/
```

続いて、プラグインをインストールします。

```bash
$> cordova plugin add plugin.google.maps  --variable API_KEY_FOR_IOS=(取得したAPIキー)
```
インストールはこれでOKです。

#6. コードの作成
ここからは楽しいコーディングです。
HelloMap/www/index.htmlをテキストエディタで編集します。
まず試しに以下のHTMLをコピペしてください。

```html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <script type="text/javascript" src="cordova.js"></script>
    <script type="text/javascript">
    var map;
    document.addEventListener("deviceready", function() {
      var button = document.getElementById("button");
      button.addEventListener("click", onBtnClicked, false);

      var div = document.getElementById("map_canvas");
      map = plugin.google.maps.Map.getMap(div);
    }, false);
    function onBtnClicked() {
      map.showDialog();
    }
    </script>
  </head>
  <body>
    <h3>PhoneGap-GoogleMaps-Plugin</h3>
    <div style="width:100%;height:400px" id="map_canvas"></div>
    <button id="button">Full Screen</button>
  </body>
</html>
```

#7. 実行
シミュレータで実行するには、Node.jsのシミュレータ用モジュールをインストールしてください。

```bash
$> npm -g install ios-sim
```

実機で実行するには、`ios-deploy` もインストールします。

```bash
$> npm -g install ios-deploy
```

実行するのは次のコマンドです。

```bash
$> cordova emulate ios
```

あとは以下のコマンドを実行するだけで、勝手にインストールされるはずです。

```bash
$> cordova run ios
```

こんな感じになるはずです。

![preview](https://raw.githubusercontent.com/wf9a5m75/phonegap-googlemaps-plugin/Images/screencapture/embed_map_ios.gif)
iOSのSocial.framework からのTwitterToken取得 iOS7 / iOS7.1対応版

https://github.com/seancook/TWReverseAuthExample
こちらを拾って  
確かに便利なのですが、イマイチ「no-arc」なので少しだけ変更  
して、ARC対応ちょいちょいしたものが

https://github.com/shachi/reverseTwitterToken

こちらになります  
まぁ人様のソースの変更なだけですのでライセンスなども元ソース準拠でお願いします。  
使いかたとしては、 pch ファイルの  

#define TWITTERCONSUMERKEY      @"your consumerkey replace"
#define TWITTERCONSUMERSECRET   @"your consumersecret replace"

この辺を自分のKEYとSECRETに変更してもらえれば  
ViewControllerの57行目あたりに出ます。  
あとはTwitter連携系のアプリでtokenとsecretあたり、使うと良いかな。と。
cocos2dx いろいろ3月15日大会まとめ

cocos2dx 3月15日の大会まとめ

大会の順番ではなくて、みんな知りたい部分を判断して、自分の理解で、みんなと共有したいと思います。

まずは今度のcocos2dx3.0rcですね。リカルドさんは以下のように新しいものを紹介しました：
１、新しいレンダラを構築完了。
　　どんな仕組みでしょうかと、OpenGLの本来の仕組みと関係ありましたね。まずは、レンダラのarrayを作って、すべてのnodeを統一しましたから、レンダラ関するvisit関数とdraw関数は完全に分離できますから、ここで、みんな一気の処理を行う。あと、単一のGL関数をnodeに伝えたい場合、nodeのテクスチャーIDとshadeIDの判断によって、nodeのレンダリングする。
　　上記処理、早いですね、さすがアメリカのマスタですね、頭は本当にいいね、こういう処理を考えたんだ、勉強に成りました。
２、C＋＋に会わせるために、CCSpriteなどをSpriteにかわりました（知りました）。
３、性能の部分の改善、例としては、大きなゲーム画面だと、スマートフォンのスクリーンサイズ画面しか、nodeの表示処理しません。すべて、エンージが自動的に処理を行います、こうやって、大きなゲーム世界（angry bird 見たなスクールしなくちゃいけない画面の場合）だと、携帯の性能を３０パーセント上げることが出来ますと言う。

あと、日本のみんなさんは多分利用する人が少ないと思いますが、
quick-cocos2dxと言うcocos2dx+luaのサポートしているプロジェクト存在しています。今度の新しいバージョンで、三つの改善点がありました：
１、これが軽い、理解安い〜〜、だからこそ、開発早い。
２、いろなツールも同封しているから。僕が難読化のツールを公開しなくても済むかもしれない、こっちの方が便利みたい、コマンドだけでファイルの難読化、apkファイルの作成など出来ましたようです。
３、広告、他のサービスを利用したい場合、SDKを導入しなくちゃいけないですよね、このプロジェクトには、みんなよく使うSDKも入っています、ゲームプロジェクトにはSDKのAPIを簡単に使えるようになりました。

次はJSBですよね、最近よく聞きました、JSBはどうでしょうかと、答えはandroidで本当にクズみたいなものだ。
今度の新しいJSB機能については、どうやら、新しい開発ワークフローが出来ましたようです、すごく便利みたいですよ。
まず、ツールをダウンロードして、HTML5とJSBのバージョンとか関係せずに直接ワークフローをsetupして、プロジェクトをnewして、runすれば済む、これはwebapplicationと作成する時と同じじゃないか、いいね～～。
プロジェクトはweb serverとして走っていもいいし、iosに走ってもいいみたい（管理画面設定必要です）、androidは、もちろん、出来ましたと、直接apkを作成できると言いました。

よし、cocostudioの時間だ
みんなはwindows版をあんまに使えないから、新しいcocostudio2.0を紹介したいと思います。
なんで1.3から直接2.0、これはcocos2.2からcocos3.0に成ったと同じ。
新しくてきているんのだ。アメリカのマスタ様が来まして、Justin Graham（バスケットボールのあれじゃないよ）
と言う人が現在のcocostudioを再構築しています。
現在cocostudioのいろいろ不足な部分を判断して、ゲーム開発ツールとして、編集画面とプラグインシステムを搭載すべきだと言いました。
どうやら、cocostudioはもうcocosbuilderを超えたかもしれない、一つのゲームを完了するまで、８分間だけですと大会のcocostudioの人が言いました、もしかして、今後、会社昼ご飯の時、ゲームを作れるかもしれない（笑

ちなみに、新しいcocostudioがQT4（推測）で開発を行っている、今度はc++で、C#じゃないようです。
もうすぐalphaが出るから、ぜひダウンロードしましょう〜〜
あぁ、もちろん、Mac、Windowsサポートですよ、QTですから。

去年言ったあの３Dのやつですが
https://github.com/cocos2d/cocos3d-x/tree/develop/cocos3d
githubに公開していますね。
中国だと、今のバージョンはまだ突っ込みバージョンです（笑。
今度のcocos2d-3Dだと、２．５Dしか言えないですね。
実現原理だと２Dの基礎の上に、３Dのレンダラを追加しまして、２．５Dを実現しましたらしい。
突っ込みですが、なんでこんな大量の3D処理のファイルがあるのに、ちゃんとした　いくつのディレクトリを分けて欲しいです、探したいAPIとか探しにくいじゃないかなぁと。
下は、サンプルの一つです。![0A166D9B-AB1C-4F3F-9F9A-D967684A4EE9.png](https://qiita-image-store.s3.amazonaws.com/0/34501/045d13e1-ecb2-cba5-4a4d-29024afb290d.png)

　　あと、あの伝説のツール発表しましたね、cocos ide、こいつはluaとjsのdebugできるそうですよ、breakpointsなど（よし、行けるよ）、多分、jsとluaの開発者にとって、すごくいい話だと思います、使いたい＞＝＜
　　
　　最後は、cocos2dxの目標について、cocos2dxの目標が完全的なクロスプラットフォームツールチェーンになりたいと言いました。
　　何の意味と言うと、３つの大きな目標ありましたのようだ。
　　まず、cocos2dxはスマートフォンじゃなく、テレビゲームの市場（中国）にも展開したい、ソニーさんは手を組むなら、PSでも行けるかもしれない。
　　後は、完璧なツールチェーンを開発者たちに提供します。みんな知っていたcocos2dx/toolsの中の部分ですね。
　　最後は、ゲーム開発のワークフローを明確に作りたい、開発者だけじゃなく、ゲームプロデューサーも参加出来るように、もっと面白いゲームを作れると言う目標です。
Rubyでランダムにディレクトリの中身を書き換えるライブラリ


**RandomDirectoryManipulator** というのを作ってみました

```ruby
rdm = RandomDirectoryManipulator.new('dir', {verbose: true})
rdm.add_remove_update(10)
```

実行結果

```
$ ruby ./sample.rb
U dir/ext/tk/lib/tkextlib/iwidgets/dialog.rb
U dir/ext/stringio/stringio.c
A dir/test/json/fixtures/pass1.json-random_directory_manipulator
R dir/benchmark/other-lang/fib.pl
U dir/tool/change_maker.rb
U dir/test/ruby/test_complex.rb-random_directory_manipulator
U dir/ext/tk/sample/demos-jp/ctext.rb
U dir/test/open-uri/test_open-uri.rb-random_directory_manipulator
```

[[詳しく]](http://ongaeshi.hatenablog.com/entry/random-directory-manipulator)
2バイト文字列のURL変換


例えば「あいうえお」で検索した結果をwebViewで表示しようと以下を実行してみるとurl = nil; になってしまう件。 


```objective-c:sample_old.m
NSString *baseString = @"あいうえお";
NSString *urlString = [NSString 
	stringWithFormat:@"https://www.google.co.jp/#q=%@", 
	baseString];
NSURL   *url = [NSURL URLWithString: urlString];
NSURLRequest    *urlRequest = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:urlRequest];
```


本家のクラスリファレンスを見るに、NSURLはRFC 1738 と 1808に準拠してないといけないらしく、平たく言うとURLencodeされている必要がありますよ、と。 そんな訳で、修正してうまくいったコードがこちら。

```objective-c:sample_new.m
NSString *baseString = @"あいうえお";
NSString *escapedString = 
(NSString *)CFBridgingRelease(
	CFURLCreateStringByAddingPercentEscapes(
		kCFAllocatorDefault,
		(CFStringRef) baseString,
		NULL,
		(CFStringRef)@"!*'();:@&=+$,/?%#[]",
		kCFStringEncodingUTF8));
NSString *url = [NSString 
	stringWithFormat:@"https://www.google.co.jp/#q=%@", 
	escapedString];
NSURLRequest    *urlRequest = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:urlRequest];
```
Slim3でリレーションシップを使ったモデルをクエリで検索してみる


リレーションしたモデルのModelRefに対してフィルターかけたい場合の対応方法。流石にリレーション先のプロパティでの合致は無理そうだけど、Keyで一致できるだけでもかなり便利そう。

例:部署(1)対従業員(多)の場合

```java:model
// 部署
@Model(schemaVersion = 1)
public class Dept implements Serializable {
}

// 従業員
@Model(schemaVersion = 1)
public class Employee implements Serializable {
    private ModelRef<dept> deptRef = new ModelRef<dept>(Dept.class);
    
    public ModelRef<dept> getDeptRef() {
        return deptRef;
    }
}
```

```java:service
/**
 * ある部署の全従業員を取得する
 */
public List<employee> getEmployeeList(Key deptKey) {
	EmployeeMeta employeeMeta = new EmployeeMeta();
	ModelRefAttributeMeta<employee, ModelRef<Dept>, Dept> refMeta = 
		employeeMeta.deptRef;

	List<employee> list = 
		Datastore.query(Employee.class).filter(refMeta.equal(deptKey));

	return list;
}
```



参考
【備忘録】Slim3のModelRefでクエリ
http://blog.tyato.jp/2011/07/slim3modelref.html
ObjC でグローバルな定数を避けるべきかの議論ログ

**注1：以下 bikeshedding です**

**注2：<i>グローバル定数を避ける必要はない</i>と結論が出ています（[下記コメントを参照](http://qiita.com/uasi/items/a77573f76acb233f5bd9#comment-07af2989bc25b17b3b28)）**

Objective-C でよく使われる `XXMyClassHogeConstant` 式のグローバルな定数を避けるべきか否かについて、別の記事のコメント欄で @oden@github と筆者 @uasi とで議論がありました。記事の本題と外れたために削除したそれらのコメントを、記録のために再掲します。 @oden@github のコメントは通知メールから引用しました。ただし文中の第三者への @ は `@...` に置き換えました。また、 @uasi のコメントはログが残っていないため、元のコメントの大意を箇条書きにしました。

----

@oden@github 

> （引用注：元記事の、グローバル変数の定義方法を説明した箇所について）このバージョンでは、定数の説明でグローバル変数を利用しています。
> これは絶対に行ってはならないバッドノウハウのひとつです。

----

@uasi 

- グローバル変数を避けるべき理由は？

----

@oden@github 

> @uasi グローバル変数を避けるべき理由であれば「グローバル変数」で検索すると見つかります。
> https://www.google.com/#q=グローバル変数
> 
> グローバル変数を定数に用いることを避けるべき理由は、カプセル化のアンチパターンである点です。
> 
> @... 確かに、グローバル変数は、gotoと同様に有用であるケースも存在します。
> ご指摘通り「グローバル変数を用いるか否か」という問題は、
> 「オブジェクト指向を用いるか否か」という設計の問題です。
>
> JavaやObjective-Cとは無関係のリクエストを送信したことをお詫び申し上げます。
> リクエストは撤回させて頂きたいと思います。

----

@uasi 

- グローバル変数の読み書きはカプセル化を破るが、定数として使うなら問題ないのでは？

----

@oden@github

> @uasi えっと、よく勘違いされることなのですが、カプセル化とは情報や振る舞いを隠蔽することだけでなく、公開する情報や振る舞いをオブジェクトにまとめることも含まれます。
> ここでのアンチパターンという指摘は、定数としての情報が、どのクラスに紐付いているのかが明示的になっていない、という点にあります。
>
> こちらも設計の問題になるので、オブジェクト指向を用いない方にとっては意味のない指摘になりますが、
> static finalフィールドとグローバル定数は、全く異なる概念のオブジェクトです。
>
> 前者は継承や多態性によって同一のデータ構造で異なる値の表現等が実現できますが、
> これも設計の問題なので継承を用いないコードを書くなら気にする必要はありません。
>
> ただし、オブジェクト指向でコードを書くなら、こちらの表現の方が妥当ではないか、
> と考えて編集リクエストを送信致しました。
>
> 多く使われていることが正しいという指摘も理解できますが、個人的には多くの要望から実装されたgoto文を採用したPHPや、C言語ではグローバルスコープにおける_から始まる全ての名前が予約されているにも関わらず、プロパティと紐付くインスタンス変数の名前にデフォルトで_を付けるObjCの挙動には眉を顰めます。
>
> 言語的に許されていますし、問題もないかもしれませんが、みんなやってるからと言って、欠点を知りながらそれを勧めるのはどうかと思います。
> ただまあこれは設計どころか最早好き嫌いの問題なので、流石にリクエストは控えたいと思います。

----

@uasi 

- Objective-C では既存の C API との兼ね合いがあるため、厳密なカプセル化よりグローバル定数のほうが実用的ではないか
- 慣習的な命名方法に従えば、定数がどのクラスに属するか見た目上ははっきりする
- UI 関係のクラスなどは継承より移譲を多用しているので、その設計者は継承による振る舞いの変更を重視しなかったのではないか
- 個人的には、 Java 流のオブジェクト指向を遵守するより Objective-C の流儀に従ったほうが、既存フレームワークとの思想の食い違いがなくて楽
NeoBundleInstallで"cannot fork() for fetch-pack"というエラーが出るときの対処法

NeoBundleでcaw.vimというプラグインを追加してインストールしようとしたところ、以下のようなエラーが出ました。

    C:/Users/locatw/vimfiles/bundle/caw.vim
    Cloning into 'C:/Users/locatw/vimfiles/bundle/caw.vim'...^@      0 [main] git-remote-https 13136 child_info_fork::abort: C:\cygwin\bin\cygsasl2-3.dll: Loaded to different address: parent(0x2B0000) != child(0x320000)^@error: cannot fork() for fetch-pack: Resource temporarily unavailable

どうもCygwinのgitを使ってしまっていて出るようです。

今回はWindowsのGVimを使っているので新たにWindows用のgitを入れてそちらを使うように設定したら正常にインストールできるようになりました。

1. Git for Windowsをインストールする。
2. 環境変数PATHを編集してCygwinのbinディレクトリよりも前にGit for Windowsのbinディレクトリのパスを追加する。

---
環境：

* Windows7 64bit
IPAファイルが出来るまでを図にしてみた


毎回ググって適当なサイトに載ってる手順に沿って作ればいいんだろうけど、あれだけ色々やってると途中でどこの作業をやってるのかわからなくなる。
大まかな作業の流れを図にしたら自分が何を作る為に何の作業をしてるのかはっきりしそうなので試しに作ってみた。

![20140406_232407.jpg](https://qiita-image-store.s3.amazonaws.com/0/13615/175ce66f-ec2e-cd1d-6d68-b8ecc2cc0d57.jpeg "20140406_232407.jpg")

上記の図は以下のサイトにのっていたIPAファイル作成の手順を元に作成。

開発ツール->IPAファイル作成 
https://deploygate.com/dashboard

図にするのに力使って、まだIPAファイル作ってないのでなんか間違ってるかも。間違ってたら後で直しておきます。
display: table-cell; には colspan, rowspan 的な指定ができない


table-cell を指定した要素に display: table; の要素を入れ子にするしかないのか

```html
<div class="table">
    <div class="tr">
        <div class="td">なにかkey</div>
        <div class="td">なにかvalue</div>
    </div>
    <div class="tr">
        <div class="td">
            なにかkey2
        </div>
        <div class="td">
            <div class="table--nested">
                <div class="tr">
                    <div class="td">なにかvalue2-1</div>
                </div>
                <div class="tr">
                    <div class="td">なにかvalue2-2</div>
                </div>
            </div>
        </div>
    </div>
</div>
```

```css
.table {
    display: table;
    border-collapse: collapse;
}

.tr {
    display: table-row;
}

.td {
    display: table-cell;
    padding: 10px;
    border: 1px solid #666;
    vertical-align: middle;
}

.table--nested {
    display: table;    
}

.table--nested .td {
    padding: 0;
    border: none;
}
```

http://jsfiddle.net/TwN22/1/
MacOSXのログインフック設定

[127.0.0.1以外のループバックアドレスを設定](http://qiita.com/HanaeKae/items/79d783521b83e350fa42)する際、ログインするたびにエイリアスを張るのが面倒なので、ログインフックを使ってみました。
使い方は[Macのヘルプ](http://support.apple.com/kb/HT2420?viewlocale=ja_JP)に書いてました。

#ログインフックとは
Macへのログインを行うたびにシェルスクリプトファイル等を実行する処理

#設定方法
ただ設定を追記するのみです。
Macのターミナルにて下記のスクリプトを実行。
これにより、/var/root/Library/Preferences/com.apple.loginwindowのファイルに記述が追記されるみたいです。

```
# [/path/to/script]は、シェルスクリプトのフルパス
sudo defaults write com.apple.loginwindow LoginHook [/path/to/script]
```

※新規作成したシェルスクリプトファイルは、実行できるよう権限の設定(chmodコマンド)は忘れずに！



#おまけ
またログインだけでなく、ログアウト時にも実行させることができます。
その際は、LoginHookをLogoutHookにするとOKみたいです。
※自身は未検証ですが・・・
homebrew(-cask)でIntelliJ IDEAをインストールする

（個人用にライセンス買ったっきり、まだ入れてなかったので笑）

検索すると...

```bash
$ brew cask search intellij
==> Partial matches
intellij-idea	    intellij-idea-ce
```

あった！

- ```intellij-idea``` … Ultimate Edition (有償版/機能制限なし)　←こちらを入れる
- ```intellij-idea-ce``` … Community Edition (無償版/機能制限あり)

※参考：[IntelliJ IDEA Downloadページ](http://www.jetbrains.com/idea/download/)

# (事前準備) homebrew-cask のインストール

[homebrew-cask](https://github.com/phinze/homebrew-cask)

```bash
$ brew tap phinze/homebrew-cask
$ brew install brew-cask
```

# IntelliJ IDEA のインストール

## パッケージ情報を確認

```bash
$ brew cask info intellij-idea
intellij-idea: 13.1.1
https://www.jetbrains.com/idea/index.html
Not installed
https://github.com/phinze/homebrew-cask/commits/master/Casks/intellij-idea.rb
==> Contents
  IntelliJ IDEA 13.app (link)
```

2014/04現在での最新Versionである```13.1.1```が利用可能。

## インストール

```bash
$ brew cask install intellij-idea
==> Downloading http://download-cf.jetbrains.com/idea/ideaIU-13.1.1.dmg
######################################################################## 100.0%
==> Symlinking App 'IntelliJ IDEA 13.app' to '/Users/XXX/Applications/IntelliJ IDEA 13.app'
?  intellij-idea installed to '/opt/homebrew-cask/Caskroom/intellij-idea/13.1.1' (5925 files, 605M)
```

完了(๑╹ڡ╹๑)

```~/Applications/``` 下にショートカットが作られている。

起動もOK
![2014-04-06 23.11.35.png](https://qiita-image-store.s3.amazonaws.com/0/3899/a4afb4ad-a0f9-50e3-6a9b-ea4d33695f7e.png)

homebrew-cask便利すぎ！

## (補足) Brewfile なら…

```bash
$ cat Brewfile
# install brew-cask
tap phinze/homebrew-cask
install brew-cask
# install intellij
cask install intellij-idea

# 上記内容の Brewfile があるディレクトリで
$ brew bundle
```

でおｋ
cronを使ってLinuxデスクトップを目覚し時計にする

mplayerとcronを使って定刻に音楽が再生されるように設定します.

## 基本設定
### 1. crontabを起動する.
```sudo crontab -e```
### 2. アラームを鳴らす時間を設定する.
例 毎朝午前7時にアラームを鳴らす.

```shell-session
0 7 * * * mplayer 音楽ファイルのパス > /dev/null 2>&1
```

## 設定例
### 月-金の午前7時にアラームを鳴らす
```shell-session
0 7 * * 1-5 mplayer 音楽ファイルのパス > /dev/null 2>&1
```

### 平日は7時に週末は9時にアラームを鳴らす

```shell-session
0 7 * * 1-5 mplayer 音楽ファイルのパス > /dev/null 2>&1
0 9 * * 6-7 mplayer 音楽ファイルのパス > /dev/null 2>&1
```

### 7時は10分毎に音楽を鳴らす

```shell-session
*/10 7 * * * mplayer 音楽ファイルのパス > /dev/null 2>&1
```

簡単にスヌーズ機能を実装できる方法があったら教えてください.

## 参考リンク
- [cron の設定ガイド](https://www.express.nec.co.jp/linux/distributions/knowledge/system/crond.html)
- [crontabの書き方](http://www.server-memo.net/tips/crontab.html)
Vagrant環境で作ってるものをBitbucketにgit pushするまで

```
 git remote add origin git@bitbucket.org:[your-account]/[your-project].git
```

ここまではうまくいくが、

```
git push -u origin --all
```

ここで以下のような警告（？）が出る。

>The authenticity of host 'bitbucket.org (123.456.78.901)' can't be established.
RSA key fingerprint is ***********************************
Are you sure you want to continue connecting (yes/no)?

で、これにyesと答えても以下のような感じで結局失敗する。

>Warning: Permanently added 'bitbucket.org,123.456.78.901' (RSA) to the list of known hosts.
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

たぶんvagrant用のsshキーを作ってないからかもしれないと思い、確認。

```
ls -a ~/.ssh/
すると
authorized_keys  known_hosts
```

**id_rsa** と **id_rsa.pub** みたいなセットが鍵になるみたいなのだが案の定それが無かった。なので作る。

```
このコマンド
ssh-keygen
```

**passphrase** とか聞かれるけどここは空欄のままでも問題ないらしい。[enter]を何度か連打すれば出来る。
その後もう一度

```
ls -a ~/.ssh/
すると
authorized_keys  id_rsa  id_rsa.pub  known_hosts
```

あとはこの **.pub** のほう（公開用）をBitbucketのsshキーに追加（右上の「アカウントの管理」ー＞「sshキー」ー＞「鍵を追加」。Labelは適当な名前で、Keyの中に[ファイルの中身をごっそり貼付ける](http://qiita.com/juniskw/items/94855159a0e1ef98e9d6)感じ）。

**そして再びpushしてみた。**

どうやら上手くいったみたい。
Eclipse Marketplace での便利なプラグインインストール方法

![20140406_eclipsemarketplace_capture.png](https://qiita-image-store.s3.amazonaws.com/0/22893/3cf3c8b2-ca1f-07ad-66ab-6d4587666903.png)

#はじめに

Eclipseプラグインのインストールと言えば、[Eclipse Marketplace](http://marketplace.eclipse.org/)ですね。

Eclipse Marketplaceは、プラグインの検索やインストール／アンインストールなどを簡単に行えるものですが、プラグインをインストールするのに、便利な方法があるのを最近知りました。
調べてみると、ずいぶん前から可能だったようですが、周りに聞いてみたところ以外と知らない人も多かったので、簡単にやり方をまとめてみました。


#ドラック＆ドロップでのインストール

通常、Eclipseプラグインをインストールする場合、Eclipseを立ちあげて、[Help]メニューからEclipse Marketplaceを開き、検索などしてインストールしますが、Eclipse MarketplaceのWebページから、プラグインをインストールすることも可能です。

Eclipse Marketplaceからプラグインのページを開き、「Install」の画像リンクを、Eclipseのメニューバーのあたりへドラック＆ドロップすると、、、、
**そのプラグインのインストールが開始されます！**

Eclipse上から検索すると、ちょっと動作が重いので、この方が手軽ですね。

![20140406_eclipsemarketplace_01.png](https://qiita-image-store.s3.amazonaws.com/0/22893/604b4460-081e-4703-586a-35a13c17eb4f.png)

自分の場合は、上記のページのように、日頃使うプラグインをお気に入りに入れておき、そこからドラッグ＆ドロップでインストールするようにしています。
これで、環境が変わっても、いつも利用するプラグインを簡単にインストールできます。


#複数プラグインをまとめてインストール

Eclipse Marketplaceからインストールする際に、ひとつひとつインストールしていると、ウィザードやダウンロードなどにも時間がかかるので、結構面倒ですね。
そこで、以下のようにすると、複数のプラグインをまとめてインストールすることが可能です。

* Eclipseの[Help]メニューから、[Eclipse Marketplace]を開き、インストール対象のプラグインをひとつインストールする。

![20140406_eclipsemarketplace_03.png](https://qiita-image-store.s3.amazonaws.com/0/22893/1d715c44-5671-8b47-10d7-c75703c34199.png)

* 確認画面で、インストールせずに、[Install More]のボタンを押下する。

![20140406_eclipsemarketplace_04.png](https://qiita-image-store.s3.amazonaws.com/0/22893/872d2583-270e-b2b5-e8c1-191213a098e2.png)

* 再度、必要なプラグインを検索してインストールする。
 * すると、[Install]ボタンが[Install Pending]が変わり、プラグインの下の辺りに「2 solutions selected」と出てくるのを確認する。
 * その状態で[Install Now]ボタンを押下する。

![20140406_eclipsemarketplace_05.png](https://qiita-image-store.s3.amazonaws.com/0/22893/96026997-f5b1-f297-a284-0aa806113ed3.png)

* そうすると、選択した2つのプラグインが表示されていることが分かる。
  * 後は、そのままインストールすれば、選択したプラグインをまとめてインストールすることができる。

![20140406_eclipsemarketplace_06.png](https://qiita-image-store.s3.amazonaws.com/0/22893/ad79e1f1-e197-28a8-2241-3b3cfde0b9ca.png)


# 最後に
以前は、[Yoxos](https://yoxos.eclipsesource.com/)を使って、プラグインの管理をしていたのですが、Yoxosに登録されていないプラグインはインストールできない、などの不便もあったので、上記に書いたようなことを知ってると、ちょっと効率化されますね。
ansibleを使ってinventory内の任意のグループにコマンドを発行する

ansibleは、playbookを用いて、任意のサーバにプロビジョニングを行うことができます。
実は、それ以外にも、inventoryファイルで管理しているサーバに対して、任意のコマンドを発行することができます。
実際に運用していると、使う機会も出てくるので、覚えておくととても便利です。


### 例で使用するlocal/inventoryファイル

````
[app_servers]
192.168.50.11
192.168.50.12
````

# よく使われるping

疎通例として出てくるので、よくみるping送信

````
ansible -i local/inventory app_servers -m ping

# 実行結果
192.168.50.12 | success >> {
    "changed": false,
    "ping": "pong"
}

192.168.50.11 | success >> {
    "changed": false,
    "ping": "pong"
}
````

# 任意のコマンドを送る
````
ansible -i inventoryファイル inventory内の任意のグループ -u ユーザ名 -m shell -a "任意のコマンド"
````

### コマンドの実行

pwdでログインしたユーザのホームのPathを取得する例です。

````
ansible -i local/inventory app_servers -u vagrant -m shell -a "pwd"

# 実行結果
192.168.50.11 | success | rc=0 >>
/home/vagrant

192.168.50.12 | success | rc=0 >>
/home/vagrant
````

## 使い時

* 障害時の調査
* 設定の確認
など
GLRパーサの実装(背景編)

![glr_data_structure.png](https://qiita-image-store.s3.amazonaws.com/0/18886/3fb327d2-5a27-bc9a-1639-29b999f77fd1.png)
ここ数日caper( http://qiita.com/jonigata/items/2a4e3b642afd20970eb2 )に試作GLRアルゴリズムのJavaScriptジェネレータを実装しておりまして、なんとかなったようなので実装の解説をしてみたいと思います。

# GLRとは

私もあまりよく知らないので、こちらをどうぞ。

http://ja.wikipedia.org/wiki/GLR%E6%B3%95

英語版の方が詳しく書かれていますね。

http://en.wikipedia.org/wiki/GLR_parser

LR法の流れで文脈自由文法(CFG)を扱う方法として、単純にパーサを並列で動かす方法がある(後で説明します)のですが、これに名前が無いようなので、この文書ではLRパーサを並列に動かすアルゴリズム全般およびそれで受理できる文法クラスを「GLR」と呼び、並列パーサのデータ構造を改良した手法をTomita法と呼びます。この文書で「GLR」と言ったら多分それはTomita法を含んでいます。

# テーブル作成

LR法は、パースに先立ってテーブルを作っておいて、受け入れるトークンから表引きして遷移先状態を見つけていくアルゴリズムですが、GLRでもそれは変わりません。ですので、今回のお試し実装は、caperのLALRテーブル作成をほぼそのまま使い、GLR用のジェネレータだけ作る形で行いました。

通常のLALRパーサと違う点は、競合時のアクションを複数持てることです。通常、LALRパーサでは、shift/reduceコンフリクトやreduce/reduceコンフリクト時には優先度の高いものだけを実行します。一方GLRは、すべて（擬似）並列で処理します。ですので、すべてのアクションをテーブルに記録しておくことが必要です。

今回、その部分だけが異なるテーブル生成ルーチンを別に作成するのがいやだったので、逆に「常にすべてのアクションを優先度付きセットに記録しておき、GLRではすべてを、LALRでは先頭だけを使う」ことにしました。

# 単純なGLRパーサ

GLR文法を受理するためのもっとも簡単な方法は、コンフリクトが発生するような局面に到達したらパーサ(スタック)をクローンして、以降の入力は存在しているすべてのパーサに同時に入力するようにすることです。実際にそのような方法で実装しているパーサもいくつかあるようです。受理した文法がLALR文法に毛が生えた程度の機械言語文法であれば、ある局面では曖昧でもしばらくすれば本道以外はエラーになることが多いので、さほど問題ないようです。

ですが、曖昧な局面に遭遇するたびにパーサ（スタック）がクローンされるため、「大筋は一緒でも細かいところが曖昧な文法」に適用すると、ローカルな曖昧さのためにクローンされたパーサが最後まで生存してしまい、どんどん遅くなっていきます。おそらく、ねずみ算式で増加していくのでしょう。そういったわけで、この単純な方法でたとえばスキャナーレスパーサ（lexをシームレスに統合したパーサ）を実装するのは、現実的でないようです。

# Tomita法

Tomita法では、上記の問題を解決するため、以下の3つを特徴として備えています。

## 分岐

パーサが曖昧な局面に遭遇してクローンするとき、スタックをまるごとコピーしないで分岐するようにします。lispなど関数型言語の覚えがある方は、関数型言語での片方向リストの実装(consセルのようなもの)を想像してください。スタックをconsセルで形成すれば、途中から別の方向に進むこともできるというわけです。

## 統合

曖昧な局面でクローンされたパーサ（スタック）を放置すると指数関数的に速度が低下していくので、Tomita法ではReduce/Shiftするごとにいちいち各パーサの状態を調べて、同じ状態になっているパーサを統合します。

## パースフォレスト

GLR文法ではひとつの入力を複数に解釈できる可能性があるため、受理後の構文木も部分的に重複する可能性が十分にあります。爆発を防ぐために、共通部分木を持つ複数の木を所有する構造になっています。関数型言語のpersistent treeのようなものを想像してください。

# とりあえず

前提知識編はここまで。ストックしてくださる方がいらっしゃれば、続き(コーディング編)も書いてみようと思います。いなくても自分が忘れないために書くかもしれませんが。

今回勉強のために生成したGLRアニメータが http://jonigata.github.io/caper/glr/glrdemo.html にあります。次回はこれをつかって説明しようと思いますので、興味のある方は触ってみてください。左上の「Next」ボタンを押せばパースが進行します。メイン画面はドラッグでパン、ホイールでズームが可能です。赤いのがスタック的なもの、青いのがAST的なものです。
nginxリバースProxyにてRANGEリクエスト対応

■RANGEリクエストについて
ファイルレジュームに使われるコンテンツの一部をリクエストするhttp-header

ｉPｈｏｎｅで動画・音楽再生時にRANGEリクエストに対応しているか確かめるため、下記の工程を踏む
1．RANGEリクエストで対象ファイルを1バイト取得
2．httpステータス206（RANGEで取得成功）が返ってくると対応していると見なし再生を開始する。



■RANGEリクエストに関するnginxの仕様
nginxをリバースプロキシとして、キャッシュサーバの役割をさせているとき、
下記のような仕様であるため、上記のiPhoneからのリクエスト時に不具合がある。

1．（キャッシュを保持しない時）RANGEリクエストにも関わらず、プロキシ先から対象ファイル全体を取得し、ファイル全体を返答。httpステータスは200で返るため、iPhoneからは再生不可であると見なされ再生されない。
2．（キャッシュを保持している時）RANGEリクエストの通り、対象ファイルの一部分を返答。
ステータスコード206で返答するため、再生可能。



■対応策①rangeリクエストをキャッシュキーに含む
nginx.confにて指定する、proxy_cache_keyに"$http_range"を含む。

・メリット
キャッシュを保持している・いないに関わらずRANGEリクエストに対して正確に返答できる。

・デメリット
指定RANGEごとに別ファイルと扱われるため、キャッシュ量が増える。
たとえ一度ファイル全体キャッシュを持っていても同RANGEリクエストされたときのキャッシュを保持していなければproxy_passの先にファイルを取りに行くことになる。



■対応策②ソース書き換え
下記の質問サイトで、パッチが紹介されている。
この通り修正し、コンパイルしなおすと、206リクエストに対応で得きる。
https://www.ruby-forum.com/topic/4151967

引用
>HG changeset patch
>Parent >8a7ee0318b175b8d76275c5d34707eb52b276188
>Upstream: allow ranges for cacheable >replies.
>
>diff --git a/src/http/ngx_http_upstream.c >b/src/http/ngx_http_upstream.c
>--- a/src/http/ngx_http_upstream.c
>+++ b/src/http/ngx_http_upstream.c
>@@ -3680,10 +3680,9 @@ >ngx_http_upstream_copy_allow_ranges(ngx_
>
> if (NGX_HTTP_CACHE)
>
>     - if (r->cached) {
>     + if (r->cached || r->upstream->>cacheable) {
>         r->allow_ranges = 1;
>         return NGX_OK;
>-
>     }
>
>endif
>引用終わり

・メリット
キャッシュを保持していない場合には、proxy先からファイル全体を取得し、リクエストに対しては指定RANGEのみを返答することが可能。
ファイル全体のキャッシュを持っているときには、proxy先に聞きに行くことなく、RANGEリクエストに対応できる。

・デメリット
その他の動作に何かしら影響がでる可能性あり。
（RANGEリクエストで上記の通り動作すること、単純にGETでRANGEなしのリクエストをした場合に明らかな異常が出ないことは確認済み。）
skypeのdbを解析して選択したグループチャット内の人別発言数をグラフにする


　会社の方に色々教えてもらったりベースのコードいただきながら作りましたm(_ _)m
R言語でskypeのDB（SQLite）を操作し、グループチャットを選択するとそのチャット内の発言数を人ごとに集計して棒グラフにするスクリプトです。期間指定はしていません。

```R:one_room_skype_graph.r
db_path = "~/Library/Application Support/Skype/(skypeID)/main.db"

library(RSQLite)
driver <- dbDriver("SQLite")
con <- dbConnect(driver, db_path)

convo <- dbGetQuery(con, "SELECT id, displayname from Conversations where type = 2")
id = menu(c(convo$displayname), title="0:exit")

if (id == c(0)) { cat("Nothing done\n")
} else {
  convo_id = convo[id, 'id']

  tbl <- dbGetQuery(con, paste("SELECT m.author, m.id, c.displayname from Messages m inner join Conversations c on m.convo_id = c.id where c.type = 2 and c.id = ", convo_id, " order by m.author"))

  res <- tapply(tbl[,"id"], tbl[,"author"], length)

  par(mar=c(15,4,4,4))
  barplot(sort(res, decreasing=T), las=3, family="Osaka",cex.axis=0.7, cex=0.5)
}
```

なお、上記スクリプト内でDB操作系のパッケージを使うので、DBIとRSQLiteパッケージをインストールする必要があります。（インストール方法は後述）
パッケージインストール方法紹介ついでに、メモ代わりに自分の実行手順（あんまりちゃんと勉強していないのでオレオレ方法です）も書きます。
最初に次のスクリプトをどこかに保存しておきます。（コピペでもいいですが何回も実行するときに面倒なので）そしてRを起動します。
初回のみ、まず次のコードを実行してパッケージをインストールします。

```R
 options(repos="http://cran.md.tsukuba.ac.jp")
 install.packages("DBI")
 install.packages("RSQLite")
```

次に、↓のようにコードを実行してスクリプトを実行します。

```R 
source("/path/to/one_room_skype_graph.r")
```

すると、グループチャット名を選択するように指示されるので、表示したいチャットの該当する番号を入力してEnterすればグラフが表示されるはずです。（微妙に縦軸のメモリが足りないのがせつないですが。。）
ちなみにskypeが起動している状態でスクリプトを実行すると、DBがロックされていて途中でエラーになるので、skypeを切るかDBをコピーしてスクリプトを実行する必要があります。

参考：http://qiita.com/dai___chi/items/ea4ff70fca99edabae29
Python製静的ブログ生成ツール'Pelican'の各種設定

Python製のブログエンジン(mdかrSTファイルからhtmlを生成してくれるツール)のPelicanを使っていて, 私的に弄りたくなった設定について。

導入方法については[こちらの記事](http://qiita.com/_rdtr/items/1fa617700b2100973569)を参考にしてください.

###URLのPath部のカスタマイズ
デフォルトの設定だと, URLが(ドメイン).com/ファイル名 になってしまいます。ここをファイル名だけじゃなくてもうちょい命名規則を自分で定義したい！って時に。

pelicanconf.pyで下記の2つの値を設定すれば良いです。

    ::python
    ARTICLE_URL = 'posts/{date:%Y}/{date:%m}/{date:%d}/{slug}/'
    ARTICLE_SAVE_AS = 'posts/{date:%Y}/{date:%m}/{date:%d}/{slug}/index.html'

ARTICLE_URL : 外部に公開するURL

ARTICLE_SAVE_AS : make html時にoutput以下のフォルダに格納するPath

ですね。
前から順に年、月、日、Slug(記事URLの部分)を指定してやってます。詳しくはドキュメントを読んだ方が良いと思いますが, URLには以下のパラメータを自由に入れた文字列を設定してやれます。

- slug
- date
- lang
- author
- category

他にも

    :::python
    ARTICLE_LANG_URL = '{slug}-{lang}.html'
    ARTICLE_LANG_SAVE_AS = '{slug}-{lang}.html'

なんて設定もあったりして, 多言語のBlogもhtmlファイル名を分けて配置するだけで簡単に作れることがわかりますね。上記は明示的に設定しなくても, デフォルトでそのようになっています。

***
### 記事ファイルの整理

一つのフォルダにどんどん記事のファイルを溜めこんでいくと, 増えてくるとワケがわからなくなりそうです。キレイに整理しておくには以下の2つの方法が有効です。

- フォルダにカテゴリ名を設定しておいて, 記事はカテゴリごとに管理するようにする

フォルダ名 = カテゴリ名だと非常にわかりやすいですよね。Pelicanではそのための設定

    ::python
    USE_FOLDER_AS_CATEGORY = True

というのがあります。上記もquickstartでプロジェクトを作成した場合はデフォルトでそのようになっていますので, content配下にディレクトリを切ると勝手にカテゴリ名に生成されます。

ちなみにデフォルトのカテゴリを変えたい場合は

    ::python
    DEFAULT_CATEGORY = ''
    
で指定してやるといいです。デフォルト値は'misc'になってます。miscellaneous = 種種雑多な, の略でしょうね。

- ファイル名に日付を入れることで整列できるようにする

これも非常に便利な設定で, 

    :::python
    FILENAME_METADATA = r'(?P<date>\d{4}-\d{2}-\d{2}).*'
    
を設定してやれば終わりです。右の値はデフォルトですが, 正規表現になっていてこのように記載することでファイル名に記載したyyyy-mm-dd形式のデータを自動的に投稿の日付に紐付けて記事にしてくれます。
正規表現なのでPelicanで使えるパラメータと合わせて自由に設定可能で, 

    :::python
    FILENAME_METADATA = r'(?P<date>\d{4}-\d{2}-\d{2})_(?P<slug>.*)'

のようにするとyyyy-mm-dd_{タイトルのslug}というファイル名で管理できるのでAuthorフレンドリーになると思います。

以上になります。

他にも使えそうな設定はあるので下記のドキュメントを眺めていると面白いです。

[http://docs.getpelican.com/en/3.1.1/settings.html](http://docs.getpelican.com/en/3.1.1/settings.html)

他にも何かあれば誰か教えてください（笑）。

__追記__
テーマの導入について追記しました.
[Pelicanにテーマを導入してみる](http://qiita.com/_rdtr/items/6e579750898738c663dd)
おすすめ単語帳アプリ

使えそうな単語帳アプリを探していたところ、良さそうなアプリがあったのでブログにまとめてみました。
http://infotech776.blog.fc2.com/blog-entry-51.html

私も理系の端くれなので単語帳に数式を書きたい時があったのですが、この単語帳アプリはLatexでそれが出来るようなので、よかったら読んでみてください！
git commit等で保存時にエラーになる場合の解決法


調べたらあっさりと見つかったのでメモ。
参考にしたのは[このブログ](http://d.hatena.ne.jp/tentete/20100417/1271500653)

ようは、使用するエディタをちゃんとgitで明示的に指定しておかないとダメだったらしい。

```command
git config --global core.editor "/usr/bin/vim"
```

こんな感じでちゃんとvimでの編集・保存が出来るようになった。
メモ：Objective-Cのメッセージング（objc_msgSend）


```objectivec
// コンパイル前のコード
id returnValue = [someObject messageName:parameter];
- someObject 

// コンパイル後のコード
id returnValue = objc_msgSend(someObject,
								 @selector(messageName:),
								 parameter);
```

objc_msgSendの仲間
-----------------

+ objc_msgSend_stret：構造体を返すメッセージ用（objc_msgSendはCPUレジスタに収まる型の値を返すメッセージしか処理できない）
+ objc_msgSend_fpret：浮動小数点値を返すメッセージ用（一部のCPUアーキテクチャにおける前処理のため）
+ objc_msgSendSuper：`[super message:paramter]`などのスーパークラスにメッセージを送るよう

用語集
-----
someObject: レシーバ
messageName: セレクタ(メソッド)
messageName + paramter: メッセージ
rbenv のインストール (Linux Mint)

# 概要
Linux Mint (Ubuntu系) にrbenvを利用してRubyをインストールする。

# 環境
* Linux Mint 16 Petra
* rbenv 0.4.0-95-gf71e227
* Ruby 2.1.1p76

# 内容

* rbenvをダウンロード。

```bash
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
```
* .bashrcに追記。

```bash
# rbenv
PATH="$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
```

* .bashrcの再読み込み。

```bash
$ source .bashrc
```
* ruby-buildをダウンロード。

```bash
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
```

* ruby-buildのwikiに記載されている推奨に従い、依存パッケージをインストール。

```bash
(old)
$ sudo aptitude install autoconf bison build-essential libssl-dev libyaml-dev libreadline6 libreadline6-dev zlib1g zlib1g-dev
```
※ruby 2.2.0になって依存パッケージが追加になったようです。

```bash
$ sudo aptitude install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev
```



* インストールできるRubyのバージョン一覧を表示。

```bash
$ rbenv install --list
Available versions:
  1.8.6-p383
  1.8.6-p420
  1.8.7-p249
  1.8.7-p302
  1.8.7-p334
  ..
```

* Rubyをインストール

```bash
$ rbenv install 2.1.1
$ rbenv rehash
$ rbenv versions
* 2.1.1 (set by /home/akira/.rbenv/version)
```

* デフォルトで使用するRubyを設定

```bash
$ rbenv global 2.1.1
$ ruby -v
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-linux]
$ which ruby
/home/akira/.rbenv/shims/ruby
```

# 参考

* rbenv https://github.com/sstephenson/rbenv
* ruby-build https://github.com/sstephenson/ruby-build/wiki
ソースコードを一切書かなくてもアニメーション処理ができるCanvasがおもしろい


この内容は[個人ブログ](http://sakahara.hatenablog.jp/entry/2014/04/05/234150)に掲載したものですが、少しでもたくさんの方に見ていただきたいので、Qiitaにも掲載することにしました。

http://sakahara.hatenablog.jp/entry/2014/04/05/234150

![20140405233909.png](https://qiita-image-store.s3.amazonaws.com/0/30826/bf47c954-1f52-797a-a2d7-c01467dad3f7.png "20140405233909.png")


## 概要

ソースコードを一切書かなくてもアニメーションのエフェクトをUIViewに設定できるライブラリです。ちょっとしたアニメーションさせたい時などに使えそうです。

http://canvaspod.io/

種類はまだ多くないですが、アニメーション処理をUIViewControllerから完全に分離できるのでコンセプトはとてもよいと思います。
現在サポートしているアニメーションの種類については上記サイトで確認できます。


## 導入手順

CocoaPodsでインストールできるのでPodfileを作成します。

```
platform :ios, '7.0'
 
pod 'Canvas', '~> 0.1'
```

次にインストールです。

```
pod install
```

導入は以上でオッケーです。


## アニメーション設定手順

アニメーションに関する設定はInterface Builderで行うので、その設定方法を紹介します。
まず下記の項目を設定します。


|Key Path|Type|説明|
| --- | --- | --- |
|type|Number|アニメーションの種類|
|duration|Number|アニメーションを実行する時間|
|delay|Number|設定した時間経過後にアニメーションを実行|
|pauseAnimationOnAwake|Boolean|チェックすると初期表示時にアニメーションを実行しない|


アニメーションを実行したいUIViewのクラスを`CSAnimationView`に変更します。
設定内容は下記を参考にしてください。


![20140405233258.png](https://qiita-image-store.s3.amazonaws.com/0/30826/8bbd797b-8799-e4ef-cc8c-949676340ac3.png "20140405233258.png")



## アニメーション実行手順

CSAnimationViewを設定したUIView、またはその親となるUIViewの`startCanvasAnimation`メソッドを実行することでアニメーションさせることができます。

```objc
[self.animationView startCanvasAnimation];
```

このメソッドは指定した`UIView`のSubview中で`CSAnimationView`が設定されているものがあれば全て実行してくれます。
下記を参照してもらえば`startCanvasAnimation`メソッドが実行されているのが確認できるので興味がある方は見てみてください。

https://github.com/CanvasPod/Canvas/blob/master/CanvasLibrary/CSAnimationView.m

実際に使用するアニメーションタイプはこちらのソースコードを参照してください。

https://github.com/CanvasPod/Canvas/blob/master/CanvasLibrary/CSAnimation.h

またアニメーションの実装は`CSAnimation`に定義してあるので、どのような処理をしてるかはここを見れば確認できます。

https://github.com/CanvasPod/Canvas/blob/master/CanvasLibrary/CSAnimation.m


## まとめ

アニメーション処理とUIViewControllerを完全に分離できるのでメリットは大きいと思います。
課題としてはアニメーションの種類が少ない点と独自で作ったアニメーションをこのライブラリに手をいれずに追加する方法が公式に用意されていない点が上げられます。(この部分は`CAAnimation`クラスを継承するなどで対応できるかもしれません)
この辺は今後のアップデートに期待するか、独自で作ってみてもよいと思います。
Crash Report解析サービスのCrashlyticsを試してみた


この内容は[個人ブログ](http://sakahara.hatenablog.jp/entry/2014/04/02/003753)に掲載したものですが、少しでもたくさんの方に見ていただきたいので、Qiitaにも掲載することにしました。

http://sakahara.hatenablog.jp/entry/2014/04/02/003753

## 概要

アプリ開発では必須になりつつあるCrash Report解析サービスですがその一つであるCrashlyticsを導入した時のメモです。
Crashlyitcsは完全無料なので料金を気にせず気軽に使えます。
また無料ではありますが、Crash Reportを解析するために必要な機能はほとんど備わっている上、デザインも無駄(？)にかっこいいです。

## 導入手順

下記からまずユーザー登録をします。

http://try.crashlytics.com/

登録するとYou're on the listというタイトルでメールが来ます。
待機リストに追加されて順番待ちということになるのですが、
Twitterアカウントを使ってログインすると、すぐに使い始めることができます。

ログインしたらCrashlyticsを使うためのツールをダウンロードします。
iOSを前提にしていますので、Xcodeを選択してください。

![スクリーンショット 2014-04-01 23.56.11.png](https://qiita-image-store.s3.amazonaws.com/0/30826/4325c098-acc4-3b99-dc10-ab372cb2b941.png "スクリーンショット 2014-04-01 23.56.11.png")


ツールをインストールしたらCrashlyticsの導入を開始します。
細かい手順はツールの手順に沿って行えば簡単にできますので割愛しますが、一点手順としてCococaPodsを使用する方法を書いておきます。
ツールの手順に従って導入する場合、下記のようにFrameworkをXcodeプロジェクトにドラッグしてくださいと表示されます。

![スクリーンショット 2014-04-02 0.01.18.png](https://qiita-image-store.s3.amazonaws.com/0/30826/683d06d2-2dd9-2fac-ac21-4f2028d6eeef.png "スクリーンショット 2014-04-02 0.01.18.png")


ここではドラッグせずにCocoaPodsで提供されているCrashlyticsFrameworkを利用します。

```
platform :ios, '7.0'

pod 'CrashlyticsFramework'
```

下記コマンドを実行してインストールしてください。

```
pod install
```

この一つ前の手順で`Run Script Build Phase`する際に指定したコマンドのパスをPodsファイルのパスに併せて変更します

・変更前

```
./Crashlytics.framework/run xxxxxxxxxx
```

・変更後

```
./Pods/CrashlyticsFramework/Crashlytics.framework/run xxxxxxxxxxxxx
```

ツールが自動生成するプロジェクトフォルダ直下にできる`Crashlytics.framework`フォルダは不要なので削除しておきましょう。

それ以降の手順はツールの内容と同様で問題ありません。

```objc
Crashlytics.framework
```

```objc
- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [Crashlytics startWithAPIKey:@"<API-KEY>"];
    // ...
}
```

これで全ての準備オッケーです。

テストとしてわざとエラーが発生する処理を記述して実行させます。

```objc

- (IBAction)crashAction:(id)sender{
    NSArray *array = [NSArray array];
    id data = array[0];
}
```

上記処理を実行するとCrashlyticsにCrash Reportがリアルタイムで送信されます。
下記のように情報を見る事ができます。

![スクリーンショット 2014-04-02 0.19.14.png](https://qiita-image-store.s3.amazonaws.com/0/30826/0a0b2201-a6b3-49db-37b1-48558b89915d.png "スクリーンショット 2014-04-02 0.19.14.png")


`Bread Crumbs`にも対応しており、`CLS_LOG(format, ...)`でログを残すことでCrashlyticsのCrash Reportにも反映されます。


## 感想

無料でここまでできるのでまずCrash Report解析ツールを使ってみたいということであればお勧めです。
.dSYMファイルもビルド時に自動的で送信してくれるようなのでデバッグシンボルの復元も特に何もしなくてもできます。

Crashlyticsでバグのない品質のいいアプリ開発を心がけましょう！
VimにEmmet導入して爆速HTMLコーディング


タイトル盛りすぎました。すいません;-P

# emmetってなに？

HTMLやCSSの入力を効率化してくれるお便利ツール。

似たようなものだとhamlがあります。
hamlはシェルでコマンド叩いてHTMLを生成するのに対して
emmetはエディタ上でショートカット打てば自動でHTML展開する。

個人的にはemmetのほうが便利

Zen-Codingの改良版という位置づけらしいです。
詳細はこちら[Emmet](http://emmet.io/)

# 対応するエディタは？

[公式]

- Sublime Text
- Eclipse/Aptana
- TextMate
- Coda
- NetBeans

[サードパーティ]

- Vim
- WebStorm
- PhpStorm 

他いろいろと。

# 具体的に何ができるの？

例えばこんなことを書いてショートカットキーを押すと

```vim
table>tr.row*3>td.col$*3
```

こんなのが一発ででます。

```vim
<table>
	<tr class="row">
		<td class="col1"></td>
		<td class="col2"></td>
		<td class="col3"></td>
	</tr>
	<tr class="row">
		<td class="col1"></td>
		<td class="col2"></td>
		<td class="col3"></td>
	</tr>
	<tr class="row">
		<td class="col1"></td>
		<td class="col2"></td>
		<td class="col3"></td>
	</tr>
</table>
```

このようにHTMLタグ打ちが一気に楽になります。



# emmet-vimのインストール

今回はVimでの導入を解説します。
といってもそんなに難しくないです。

NeoBundleが必要なので入れてない人は[ここ参照](http://qiita.com/muran001/items/3080c4816b7c2e65e40b)


.vimrcに以下を追記

```.vimrc
NeoBundle 'mattn/emmet-vim'
```

そして:NeoBundleInstallでインストール


以上   ・・・・・・えっΣ(ﾟДﾟ)	


# ちょっとだけカスタマイズ

emmet-vimは`<C-y>`を使います。

キーバインドかぶっちゃったりする人は変更しましょう。

```.vimrc
let g:user_emmet_leader_key='<c-t>'
```


# 簡単な使い方

「Emmet式&lt;Leader&gt;,」でHTMLが自動展開されます。

&lt;Leader&gt;はデフォルトなら&lt;C-y&gt;です。

以下&lt;keymap&gt;って略して書きます。


## 例１：閉じタグ補完

タグ名だけ書けばタグを補完してくれます。

```vim
#展開前
div<keymap>
```

```vim
#展開後
<div></div>
```

## 例２：子タグ作成

＞ を使えば子タグを作成できます。

```vim
#展開前
ul>li<keymap>
```

```vim
#展開後
<ul>
	<li></li>
</ul>
```

## 例４：classやid属性作成

CSSと同じようにclassやidを指定できます。

```vim
#展開前#
div#id1.class1<keymap>
```

```vim
#展開後#
<div id="id1" class="class1"></div>
```



## 例５：繰り返しタグ生成

*を使って繰り返し回数を指定できます。

```vim
#展開前
div*3<keymap>
```

```vim
#展開後
 <div></div>
 <div></div>
 <div></div>
```

## 例６：繰り返しタグ＆連番生成

$が連番に展開してくれます。$$で２桁にもなります。

```vim
#展開前
ul>li.item$*3<keymap>
```

```vim
#展開後
<ul>
	<li class="item1"></li>
	<li class="item2"></li>
	<li class="item3"></li>
</ul>
```


# その他おすすめサイト

Emmet本家ドキュメント。他にもたくさんシンタックスがあります。
HTMLだけでなくCSSもあります。

- [Emmet Documentation](http://docs.emmet.io/)





手軽にお勉強してみたい方は以下も参考になります。

- [ドットインストール - Emmet/Zen-coding入門](http://dotinstall.com/lessons/basic_emmet)


- [WEB EGG - Emmetを始めるのに、とりあえずこれだけ覚えておけば大丈夫](http://leko.jp/archives/442)
職業Web系エンジニアに必要なこと



学生時代まで一人でしかコードを書いてこなかったひよっこエンジニアが、「企業で、チームで作るってこんな別種の大変さがあるのか！」とビクンビクンした話です。僕がある企業のAPIエンジニアとして1年間学び、そこで得たことを書こうと思います。

目次

* チームで作るということ
* 障害との向き合い方
* 新しい技術の導入に必要なこと

# チームで作るということ

## 優先度と見積もり

「俺が作りたいもの作るぜ！！俺様の気の向くままに気が向いたときに作るんだURYYYYY！！」みたいなノリは当然ダメです。つらいですね。
（社内の立ち位置によっては許されるかもですが）

* やるべきタスクは何か？
* 優先度は？
* それぞれの見積もりは？リリースはいつか？
* タスクの依存関係は？
* 今は進捗遅れてるの？遅れてるとしたらどうするの？

僕らの労働時間はリソースなので、これらをチーム内にもチーム外にも説明できるようにしておかないといけません。

## コードの共有
pull-reqでチーム内に修正内容を共有するのが基本かと思います。

* レビュー
  * 「これは何のためのpull-reqか
」「どこをレビューしてほしいか」「なんでここでこんな面倒くさいことをやっているか」を説明する 
  * 「空気を読ませない」のが良いpull-reqらしいですよ奥さん
* 機能ごとにpull-reqを分けて、レビューしやすいように、他人が振り返りやすいようにする

## spec

実装と仕様は別のものなので、後に残せるようにしておく。
未知のコードの理解には、specによるトップダウンの理解をした後に、コードによるボトムアップの両側面から攻めるのが早いなーと思っています。




# 障害との向き合い方

サービスによっては、ちょっとアクセスができなくなっただけで自分の年収くらいの金額が軽く吹き飛んだりします。
デプロイ時にいかに障害を減らすか、起きてしまった障害にどう対処するか。


## 障害を起こさない

検証とリスクの分散化。以下は一例です

* pull-req運用、チーム内でレビュー
* 開発中はunit test green前提
  * jenkinsでpull-req時点で担保したり
* 本番に模したサーバーでテストを流す
* 開発者とテストエンジニアを分ける
  * "仕様"と"実装"を明確に分ける効果
* テスト用言語を別にする
  * テストと実装で共通で使っているライブラリのバグを踏んで「たまたま通ってましたテヘペロ」状態を避ける
* 2つ以上のコンポーネントをデプロイする必要がある場合は、後方互換やデプロイ順に気をつける
* 物によっては一部のサーバーにだけデプロイして様子見する
* クライアントの場合は、ちゃんと実機検証しようね！！
  * 実機でしかわからない罠がたくさんあります

## 障害を検知する
* 必要なログを出しておく
* nagiosなどによるログ監視、自動アラートシステム
  * トレンド監視などなど
* 各種サーバー状態のグラフ化

## 障害に対処する
* 前提として、すぐに切り戻せるようにしておく
* ログやサーバー状態から起きていることを分析する
 * 推測で動かない
* 速やかに暫定対応し、恒久対応は別途考える


# 新しい技術の導入に必要なこと
これも、一人でノリで作ってた頃とは全く異なります。
以下のことをきちんと説明できないといけません。

* 移行コストとリスクをとってまでその技術を導入するメリットは何なの？
* 本当に大丈夫なの？
  * 枯れてるの？
  * なんか起きたときお前何とかできるの？ソースは読んだの？
  * パフォーマンスは計測したの？

また、現実的にチーム内にその技術を粘り強く説明して布教する必要が出てきます。

例えば、社内全員svnに慣れきっている状況で、本当にgitを広められるかを想像してみてください。僕はちょっと目眩がします。

# おまけ

企業の中にいると、何かしら面倒なこと、億劫なことが出てくると思います。
テストが遅い、デプロイが面倒、調整が面倒、などなど……
先輩に言われて印象に残っている言葉に「目の前の問題にソリューションが提供できずに何がエンジニアか」があります。
何かを一歩一歩変えていきたいですね。

# 終わりに
状況によっては、上記のお固いところが不要なところもあるでしょうし、あるいはもっとお固くならなければならないと思います。
あくまで一例として参考にいただけたらと思います。

プライベートでコードを書くのは楽しいですけど、それとは別種の難しさと楽しさがここにはあるなーと思います。
MOGOK上のRedmineでOpenID


## RedmineのサインアップにOpenIDを使いたい

MOGOKにRedmineをDeployしてみました。
ですが、MOGOKでは、そのままではメール送信やファイルアップロードができません。（無償版）

検証目的ならそれでも良いのですが、アカウント発行／パスワード再設定の場合、メールが飛ばせないと困ります。
なら、各自OpenIDでサインアップできるようにしたらいいかな？と思ったのですが、どうも、OpenIDでのログインが上手くいきません…。

## 原因はProxy

MOGOK内のアプリケーションは、専用proxyを通して外部リソースにアクセスするのですが、OpenIDのエンドポイントURLには、そのままではうまく到達できない模様。

いろいろ試したあげく、config/environment.rb を修正したら上手くいったようです。

```source:ruby

# config/environment.rb の末尾にProxyの設定を追加します

# Initialize the rails application
RedmineApp::Application.initialize!

# For MOGOK (ここ！)
OpenID::fetcher_use_env_http_proxy
```

## 変更の反映
config/environment.rb の修正後、コミットしてmogok側のリモートリポジトリにpushしたあと、build -> stop/start して、OpenIDでのログインが通るようになりました。

```
% git push mogok master
% mogok build
% mogok stop
% mogok start
```
iOS7のStoryboardでレイアウト設定するときの基本方針


なかなか思うようにレイアウトの設定ができなかったが、
とりあえずこれで行けそうな設定ができたのでメモしておきます。

方針
・なるべくStoryboardだけで設定したい
・画面に入りきらない場合はスクロールして表示する

設定
・「Use Auto Layout」のチェックを付ける
・「Adjust Scroll View Insets」のチェックを外す
・「Under Top Bars」のチェックを付ける
・「Under Bottom Bars」のチェックを付ける
・View Controller の view の子に Scroll View を追加する（Outlet名：scrollView）
・Scroll View の子に View を追加する（Outlet名：baseView）
・Scroll View の constraints を上下左右に 0 を設定する（pinのAdd New Constraintsで設定）

```objectivec:ソースコードでの対応
- (void) viewDidLayoutSubviews
{
	[super viewDidLayoutSubviews];
	CGSize size = CGSizeMake(self.baseView.frame.origin.x + self.baseView.frame.size.width, self.baseView.frame.origin.y + self.baseView.frame.size.height);
	self.scrollView.contentSize = size;
}
```
Ubuntu Server + PostgreSQL + その他もろもろな環境を構築する。



準備したもの
- 

+ VMWare Fusion 6
+ Ubuntu Server 12.04

仮想化環境にしたのは後片付けだとか色々と便利なので。
当然、VMWare FusionはVirtual Boxなどで代用可能。

設定
-
+ 通常通りUbuntu Serverに以下のものをインストール
 + LAMP server
 + PostgreSQL database 
 + Tomcat Java Server

+ Ubuntu Serverの設定 ~¥.bashrcに以下のコードを追記

``` ~¥.bashrc
case $TERM in
    linux) LANG=C ;;
    *) LANG=ja_JP.UTF-8
esac
```
+ postgresql.conf の設定

``` /usr/local/pqsql/data/postgresql.conf
# コメントアウトを解除して設定
listen_addresses = ‘*’
# ポートを変更する場合はここの値を変更する。
port=5432
```

+ pg_hba.confの設定

``` /usr/local/pgsql/data/pg_hba.conf
#　詳しい設定はコメント内参照。ネットマスクを利用した制限も可能
host all all 192.168.1.0/24 trust 
```

まとめ
-
環境をつくることに成功した。
実運用環境を作るとなるとまた違った設定をしなければいけないけど、(特にpg_hba.conf)
とりあえず開発環境を作ることができたので、これからFuelPHPやJSPあたりを触っていきたい。
開発していく上で不都合が起きるかもしれないけどその都度対応ということで。
MOGOKのCLIでHTTP-Error: 401になっちゃった場合


## パスワードを変えたあと…

MOGOKのパスワードを忘れてしまい、管理用Webからパスワードをリセットしました。
そうしたら、mogokのCLI側で操作しようとしたら、認証情報が通らずにエラー…。

アカウントやパスワードの再入力を求められることも無かったため、「うーん」と悩むこと数分。

```
% mogok list
Error: Authorization failed.
HTTP-Error: 401 
```
## やったこと
とりあえず、たいてい ~/.アプリ名 みたいな感じで、設定ファイルがあるはずなので、~/.mogok を探してみました。
有り難いことに、CLIからの認証用設定がここに…。


```
% ls -h ~/.mogok/
account
```

ひとまず、このファイルをサックリ消すと、認証ダイアログが出るようになりました！
よかったです(^^;

1度認証が通ると~/.mogok/account に、アカウントとパスワードがストアされるんですね。(lib/mogok/account.rb)
リトライさせてもらえるか、~/.mogok/accountを消してね、とかいうメッセージが出るといいのかな？
Vimで画面分割して指定行に移動する（ぱくり）

[Vimで画面分割して指定行に移動する - daisuzu's notes](http://daisuzu.hatenablog.com/entry/2012/08/19/235923) が便利そうだったので自分で使う用に少し手を加えた。
count がなかったら、そのまま split, vsplit を実行する。
`execute cnt . 'G'` だと曖昧だと怒られたので cursor() を使ってみた。

```vim
nnoremap _ :SplitAndGo split<CR>
nnoremap <bar> :SplitAndGo vsplit<CR>

command! -count=1 -nargs=1 -complete=customlist,SAG_Complete SplitAndGo call SplitAndGo(<q-args>)

function! SplitAndGo(cmd)
  execute a:cmd
  if !v:count
    return
  endif
  execute "normal! " . v:count . 'G'
endfunction

function! SAG_Complete(ArgLead, CmdLine, CursorPos)
  return ['split', 'vsplit']
endfunction
```
ViewPagerのFragmentの中でPage遷移する



###1, ViewpagerのActivityに以下のメソッドを追加

```java:
public ViewPager getViewPager() {
   if (null == mViewPager) {
       mViewPager = (ViewPager) findViewById(R.id.view_pager_id)
   }
   return mViewPager;
}
```

###2, Fragmentの中で以下を実行


```java:
((YourActivitName)getActivity()).getViewPager().setCurrentItem(index);
```
Genymotionが動かなくなった


メモ

genymotionを起動したときに

```
Unable to load VirtualBox engine.

Make sure that you have installed it correctly before starting Genymotion.

For more information refer to: https://cloud.genymotion.com/page/faq/#vbox
```
と出てきてしまって起動できなかった。

調べてみたらStackOverFlowに解決法が乗ってたのでメモ
ターミナルで以下のコマンドを打ったら解決

```
sudo /Library/StartupItems/VirtualBox/VirtualBox restart
```