OmniAICreator/Qiita-1.07M huggingface dataset:
値をぐるぐる回したいときや、描画をトーラスにしたいときなどに使う式

だいたいこんな感じにかけばいい

```java
x = (x+width)%width;
y = (y+height)%height;
```

普通にxをwidthで割ってもいいのだけれど、width足してあげるとxがマイナスの時もいい感じになる。
ただx < -widthだと意味が無い。でもそういう時あるかしら？あるかもしれませんね。
さらにオーバーフローとかには注意しないといけない時もあるかもしれない。結局心配な時はif文で丁寧にやるのが良いかもしれない
Android 4.4 (KitKat) のUI変更で気付いたこと

Android 4.4では、スクリーンショットのリーク時から知られていたことですが、青中心から白中心の色使いに変わっています。
ListViewやButtonなど選択したときの色も、デフォルトでは白～灰色に変更されています。その他にも変更されているところがいくつかあったので、自分が見つけた箇所だけでもここで紹介していきたいと思います。
初めに申し上げておきますが画像は適当にトリミングしたのでサイズが統一感ないのは許してください。

## ボタンとか
![Holo Lightでボタンを押した時](https://qiita-image-store.s3.amazonaws.com/0/15121/1141dd86-9a3a-fdab-3fad-d996ef01e3d9.png)![Holo Darkでボタンを押した時](https://qiita-image-store.s3.amazonaws.com/0/15121/d6d3345e-a21f-7544-86ca-916bca69325a.png)

きれいな灰色をしてるだろ…？ボタン押してるんだぜ…それ…
スクショではわかりづらいですが、使ってみればわかります。周りの影がなくなったのが印象的でした。ちなみに押していない時は以下。
![Holo Lightのボタン](https://qiita-image-store.s3.amazonaws.com/0/15121/92a7aa88-0d3e-0f39-7506-8b32698f0f25.png)![Holo Darkのボタン](https://qiita-image-store.s3.amazonaws.com/0/15121/57f545cf-af37-e622-d579-2d431bf45ba5.png)
今までと同じです。

また、アクションバーのボタンも同じように灰色です。
![ActionBarのボタン](https://qiita-image-store.s3.amazonaws.com/0/15121/923b9e14-876f-e6ab-279c-fc1978426bec.png)

ちなみに、アクションバーのメニューボタンは、Chromeで実装されたように、設定ボタンを押したまま下にスワイプすることでメニュー項目が選択され、離した時に選択されていたメニューが実行されます。詳しくはChromeで確かめてみて下さい。
![メニューボタンで下スワイプ](https://qiita-image-store.s3.amazonaws.com/0/15121/3ddec436-3eec-5051-ddf3-1849f33a782c.png)

## ScrollView系
![スクロール時の影](https://qiita-image-store.s3.amazonaws.com/0/15121/6917cf56-39a4-8af7-772f-e77c315d9d46.png)
ScrollViewで端に当たった時の影も灰色に変わっています。
完全にXperiaですね本当にあｒ(ry

## Toast
![Toast](https://qiita-image-store.s3.amazonaws.com/0/15121/c8642ee1-7e0e-4773-4652-9d8cdd66993c.png)
これは色の変更だけではなくかなり形も変わっています。個人的には前の方が良かったなぁ…

## その他
これはUI関係ないですが、4.3に追加されて一時期話題になっていたApp Ops(日本語名:アプリの操作状況、連絡先の読み取り権限やバイブレーション無効などを設定できる)が使えなくなっていました。正確には実はAndroid 4.3.1からなくなっていました。更に正確に言えばAndroidManifest.xmlでそのActivityのみコメントアウトされていて、通常は使えないようにされていました。残念ですがメーカーがこの機能を有効にしたまま出荷する可能性も低かったので、複雑な気持ちではあります。
iOSでシステムの音量を取得する

## 1.準備
- MediaPlayer.frameworkをいれる
- #import <MediaPlayer/MediaPlayer.h>する

## 2.コード書く
欲しいところで

```objc
MPMusicPlayerController *musicPlayer = [MPMusicPlayerController applicationMusicPlayer];
NSLog(@"%f", musicPlayer.volume);
```
としたらいい

```objc
musicPlayer.volume = 1;
```

とかすれば音量が最大になる

1メモリは0.0625になっている
.vimrcを機能分割する


## 長くなりがちな.vimrcを役割ごとに分割する

>[Vim初心者によるVim導入記録（vim基本設定編）](http://code-life.net/?p=2170#more-2170 "Code Life")

次第に肥大化していく.vimrcを、ファイル内で役割ごとに区切っていた自分にとってはまさに目から鱗な、すばらしい手法。

```bash
.vim
└── userautoload
    ├── basic.vim
    ├── color.vim
    ├── editor.vim
    ├── func.vim
    └── mapping.vim
```

各設定ファイルの名前は何でも良いと思われ。

```Bash:.vimrc
" 分割した設定ファイルをすべて読み込む
set runtimepath+=~/.vim/
runtime! userautoload/*.vim
```

何も考えずにコピペしてしまったので確認していませんが、もしかしたらこれを有効にするためには、プラグイン管理ツールであるNeoBundleが必要となるかもしれません。

ついでなので掲載しておきます。

## プラグイン管理ツールをインストール

>[NEOBUNDLE](http://mba-hack.blogspot.jp/2013/02/vim.html#neobundle "MBA-HACK")

私は基本的に、Vimに関しては、MBA-HACK様にお世話になっています。
異星の電光掲示板 (Golf)


|問題|http://nabetani.sakura.ne.jp/hena/ord15elebubo/|
|:--|:--|
|Ruby/C++/Python/C|http://qiita.com/cielavenir/items/3d147bdeebcadcb4e3d9|
|Ruby(Golf,鍋谷さんのアルゴリズム復習)|http://qiita.com/cielavenir/items/732a3140efe3db571480|
|Swift|http://qiita.com/cielavenir/items/600e264d39c402b244c1

STDOUT.sync=trueを省略するため、採点プログラムVer2を更新しました。Ver1では採点できません。
https://github.com/cielavenir/procon/commit/9f12d97099063b012cdb8fd65c296ffa81a9ee11

アルゴリズムは鍋谷さんのを使わせていただきました。
ヘッダ行除いて238バイトになりました。

[編集] ヘッダ行は不要でした。採点プログラムVer2はRuby製なので、

	ruby hena_validator.rb 'ruby hena15_golf.rb' 15

のようにすれば(IO.popen()がうまいこと解釈してくれて)採点できます。

```rb:hena15_golf.rb
puts$<.map{|e|a=e.split('/').map{|e|e.to_i(16)};31.downto(0).map{|e|a[0][e]|a[1][e]*2}.join.gsub('12','102').gsub('21','201').split('0').map{|e|{'32'=>'L','31'=>'R','23'=>'J','131'=>'T','323'=>'U','313'=>'N','231'=>'S','132'=>'Z'}[e]}*''}
```
Volleyで自己署名証明書を使ったHTTPS通信

1. 証明書をres/rawに置く (この例ではself.cerとします)
2. その証明書を利用して[TrustManager](http://developer.android.com/reference/javax/net/ssl/TrustManager.html)を生成し，[SSLSocketFactory](http://developer.android.com/reference/javax/net/ssl/SSLSocketFactory.html)のインスタンスを得る.   
参考: http://developer.android.com/training/articles/security-ssl.html#UnknownCa (英語)
3. SSLSocketFactoryのインスタンスから，VolleyのBasicNetworkインスタンスを生成し，RequestQueueに渡す．

最終的に以下のようなソースコードになる．



```java
public class MySSL {
    public static SSLSocketFactory getSocketFactory(Context context) {
        try {
            CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
            Certificate certificate = certificateFactory.generateCertificate(
                    context.getResources().openRawResource(R.raw.self));
            Log.d("ca=" + ((X509Certificate) certificate).getSubjectDN());

            String keyStoreType = KeyStore.getDefaultType();
            KeyStore keyStore = KeyStore.getInstance(keyStoreType);
            keyStore.load(null, null);
            keyStore.setCertificateEntry("ca", certificate);

            TrustManagerFactory managerFactory = TrustManagerFactory.getInstance(
                    TrustManagerFactory.getDefaultAlgorithm());
            managerFactory.init(keyStore);

            SSLContext sslContext = SSLContext.getInstance("TLS");
            sslContext.init(null, managerFactory.getTrustManagers(), null);
            return sslContext.getSocketFactory();
        } catch (Exception e) {
            // TODO: handle error
        }
        return null;
    }
}
```

```java
/*
 * 自己署名証明書のために，カスタム{@link SSLSocketFactory}を利用する{@link RequestQueue}.
 * Volley本家の実装を流用
**/
public class MyRequestQueue extends RequestQueue {
    private static final String DEFAULT_CACHE_DIR = "volley";
    private final Context context;

    public MyRequestQueue(final Context context) {
        super(
                new DiskBasedCache(new File(context.getCacheDir(), DEFAULT_CACHE_DIR)),
                createNetwork(context));
        this.context = context;
    }

    private static Network createNetwork(Context context) {
        String userAgent = "volley/0";
        try {
            String packageName = context.getPackageName();
            PackageInfo info = context.getPackageManager().getPackageInfo(packageName, 0);
            userAgent = packageName + "/" + info.versionCode;
        } catch (PackageManager.NameNotFoundException e) {
        }
        // Gingerbread以前のHttpUrlConnectionにはバグがあるので注意とのこと，今回は気にしない
        // See: http://android-developers.blogspot.com/2011/09/androids-http-clients.html
        return new BasicNetwork(new HurlStack(null, MySSL.getSocketFactory(context)));
    }
}
```
Node.js + Express + forever を構成して nginx から流す


「半年前の自分は他人」という自戒の元、丁寧に書くのを癖にしたい今日この頃。
####Node.js
[node.js とは何か](http://d.hatena.ne.jp/badatmath/20101020/1287587240)によると、「JavaScriptを用いたNon-blocking I/O環境」だそうです。
バックエンドで動作。
####Express
Sinatra ライクな Node.js 用Webアプリケーションフレームワーク、軽量アプリケーション向け。
Node.js + Express で最低限のWebページが作れます。
ちなみに Sinatra は Ruby です。
####forever
Node.js をデーモン化して、プロセスを監視してくれます。
最近は pm2 という更に高機能な監視ツールもあるのですが、移行は今後考えるとして日本語文献の多い forever を使う。

今回は、nginx から pm2 で動かした Node.js サービスに流すまでを目指します。

##環境
ゲスト: CentOS 6.2
ホスト: MacBookAir MacOS 10.8
VM: Parallels Desktop 9 for mac
ゲストを対象とし、IPアドレスは 10.211.55.2 とする。

##Node.js インストール
[CentOSでndenvをシステムワイドにインストールした時のメモ](http://qiita.com/ryurock/items/572169174e16bc669a7b)を参考に ndenv で Node.js のバージョン管理を行います。作者[riywo](http://blog.riywo.com/2013/06/21/152736)さんの元記事です。ありがとうございます。
必要であれば適時`sudo`してください。
記述通りのバージョン、構成にしました。
/usr/local/ndenv
/usr/local/ndenv/plugins/node-build

```bash: 
$ node -v
v0.10.20
```

別のバージョンを入れたい場合は、リストを見て検討しましょう。

```bash: 
$ ndenv install --list
```

##Express インストール
npm を使用して、Express をグローバルインストールします。

```bash: 
$ sudo npm install express -g
```

ここで`express --help`を実行してみたら express が見つからないよと言われたので`ndenv rehash`しようとしたのだが、

```bash: 
$ sudo ndenv rehash
```

ではダメだった。仕方なく、

```bash: 
$ sudo -s
$ ndenv rehash
$ exit
```

で一部をrootユーザーとして実行したら成功したのだが、まだ原因は解っていない。
とりあえず、以降はこれで`rehash`していく。
一応確認も。

```bash: 
$ which express
/usr/local/ndenv/shims/express
```

##forever インストール
同じく npm を使用して、forever をグローバルインストールします。

```bash: 
$ sudo npm install forever -g
$ sudo -s
$ ndenv rehash
$ exit
$ which forever
/usr/local/ndenv/shims/forever
```

##サンプルアプリを作って走らせる
HOME直下に作って、必要なライブラリをローカルインストールします。

```bash: 
$ cd
$ express -e SampleApp
$ cd SampleApp
$ npm install
```

そのまま forever で起動。
[node.jsスクリプトをforeverでデーモン化する](http://onlineconsultant.jp/pukiwiki/?node.js%20node.jsスクリプトをforeverでデーモン化する)の通りに実行しました。
ちゃんと理解してないのですが、app.js が根幹って事でしょうか。

```bash: 
$ forever start app.js
```

止めたい時と、再起動したい時は単純にこれ。

```bash: 
$ forever stop app.js
$ forever restart app.js
```

##nginx でリバースプロキシ
app.js の中身を見ると、このサンプルアプリはポート3000で動作しているので、ホストOSから
http://10.211.55.2:3000/
にアクセスすれば表示されるのですが、これでまたいちいち`iptables`編集するのもなってのと、実際はサブドメイン切ってリバースプロキシあてがうだろうなって事で、ローカル環境でもそれに似た状況を作った。
既にあった /etc/nginx/conf.d/default.conf と、[nginxでリバースプロキシ。](http://d.hatena.ne.jp/mkouhei/20100121/1264086004)を参考に、このようにしました。

```bash:/etc/nginx/conf.d/node-app.conf
upstream node-sampleapp {
	server localhost:3000;
}

server {
	listen       80;
	server_name  10.211.55.2;
	proxy_redirect                          off;
	proxy_set_header Host                   $host;
	proxy_set_header X-Real-IP              $remote_addr;
	proxy_set_header X-Forwarded-Host       $host;
	proxy_set_header X-Forwarded-Server     $host;
	proxy_set_header X-Forwarded-For        $proxy_add_x_forwarded_for;
	location / {
		proxy_pass http://node-sampleapp/;
	}
	error_page   500 502 503 504  /50x.html;
	location = /50x.html {	
	root   /usr/share/nginx/html;
	}
}
```

再読み込み。

```bash: 
$ sudo service nginx reload
```
ホストから
http://10.211.55.2/
にアクセス。

##Welcome to Express
コングラッチュレーション…！

##感謝
参考にさせていただいたサイト管理人の皆様、誠にありがとうございました。
今日ハマったアレコレ Objective-C編



##KVOの受信できなくてハマった
自作クラスのプロパティ(NSArray)を登録したのに呼ばれない

```objectivec
//[self.tweets insertObject:statuses AtIndex:0];
//↑コレじゃ更新したことにならないみたいで
//↓これならOKだった
[self setValue:@[statuses] forKey:@"tweets"];
```

##KVOでデータ更新したのを受信してLabelとか書き換えたのに画面更新しなくてハマった

```objectivec
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
//    [self reLoad:nil];←コレで更新しようと思っても再描画されない

// ↓別スレッドで更新メソッド呼んだら瞬時に終わった
    [NSThread detachNewThreadSelector:@selector(reLoad:)
                             toTarget:self
                           withObject:nil];

}
```

##ACAccountStore使いたいのに認証確認画面を呼んでくれなくてハマった
requestAccessToAccountsWithTypeを呼ぶ

```objectivec
//[self.accountStore accountsWithAccountType:_twitterAcType];
//↑これがnilになるのに認証確認してくれない
//↓ requestAccessToAccountsWithTypeを呼んだら認証してない時に確認画面を表示してくれる
        [self.accountStore
         requestAccessToAccountsWithType:_twitterAcType
         options:NULL
         completion:^(BOOL granted, NSError *error) {
             if (granted) {
                 NSLog(@"outhentication:OK");
             }else{
                 NSLog(@"%@", [error localizedDescription]);
             }
         }];
```

##UiViewがtouchesBeganとかtouchesEndedを取得できなくてハマった
結論から言うと、UIScrollViewはタッチイベントを取得できない仕様らしいです。

以下で解決
[Objective-C - UIScrollViewに追加したUIImageViewのタッチイベントを取得する - Qiita [キータ]](http://qiita.com/Potof_/items/1432c39dab083f770e59)
Mavericksにしたら、sqlite3はいらなくなったので、解決法

Mavericksにしました。
で、久々にRailsを弄ってみるかな　→　久々すぎるので、gem一回削除して全部入れ直ししました。

で、rails4.0.1も無事はいったので、rails new!

そしたら、

backup.c:101: error: ‘sqlite3BackupRuby’ has no member named ‘p’

みたいなエラーがでて、はいりません＞＜　（実際にはもっとやんややんやと長い感じ）

そういえば、sqlite3のパッケージはbrewで入れたよなあ、と思って、バージョン古くなったのかな、とおもい、
brew install `brew outdated`

やってみたけど駄目でした　／(^o^)＼

なんとなく、
brew doctor
やってみたら、

Warning: No developer tools installed.
You should install the Command Line Tools.
Run `xcode-select --install` to install them.

って、でてた！
そういえば、Mavericksにしたら、Commad Line Tools入れないと駄目って誰か言ってましたね（てへぺろ

かいてあるとおり、ターミナルで、

xcode-select --install

と入力したら、なんかインストールがはじまりました。

終わった後、 もう一回 bundle installしたら入った！　＼(^o^)／



おしまいです。
Phalconが生成するMySQLのUPDATEクエリーについて


**useDynamicUpdateについて追記(2013年12月3日)。**

Phalcon 1.2.3でどのようなクエリーが生成されるか確認しました。

# ModelのSave

findメソッドでSELECT、saveメソッドでUPDATE。

```model_save.php
$robots = TheRobots::find(array('id=1'))->getFirst();
$robots->year = $robots->year + 1;
$robots->save();
```

実行されるSQL。

```model_save.sql
SELECT `the_robots`.`id`, `the_robots`.`name`, `the_robots`.`type`, `the_robots`.`year` FROM `the_robots` WHERE `the_robots`.`id` = 1
UPDATE `the_robots` SET `name` = 'doraemon', `type` = 'cat', `year` = 2056 WHERE `id` = '1'
```

全カラムがUPDATEされました。
できれば変更のないカラム更新は避けたい。

# ModelのuseDynamicUpdate

useDynamicUpdateで変更のないカラムをUPDATEされないようにできます。

http://docs.phalconphp.com/en/latest/reference/models.html#dynamic-update

ModelのinitializeメソッドでuseDynamicUpdate(true)を実行します。

```TheRobots.php
class TheRobots extends \Phalcon\Mvc\Model
{
    public function initialize() {
        $this->useDynamicUpdate(true);
    }
```

```model_save.php
$robots = TheRobots::find(array('id=1'))->getFirst();
$robots->year = $robots->year + 1;
$robots->save();
```

実行されるSQL。

```model_save.sql
SELECT `the_robots`.`id`, `the_robots`.`name`, `the_robots`.`type`, `the_robots`.`year` FROM `the_robots` WHERE `the_robots`.`id` = 1
UPDATE `the_robots` SET `year` = 2076 WHERE `id` = '1'
```

# ModelManagerのexecuteQuery

ModelManagerでPHQLという独自のクエリー言語で任意のクエリーを実行できます。

```modelmanager.php
$this->modelsManager->executeQuery('UPDATE TheRobots SET year = year + 1 WHERE id = 1');
```

ほぼ普通のSQLですが、上の1行で次のSQLが実行されます。useDynamicUpdateは設定していません。

```modelmanager.sql
SELECT `the_robots`.`id`, `the_robots`.`name`, `the_robots`.`type`, `the_robots`.`year` FROM `the_robots` WHERE `the_robots`.`id` = 1
START TRANSACTION
UPDATE `the_robots` SET `name` = 'doraemon', `type` = 'cat', `year` = `the_robots`.`year` + 1 WHERE `id` = '1'
COMMIT
```

トランザクションが実行され、全カラム更新となりました。

TheRobotsにuseDynamicUpdate(true)を実行していた場合は次の様に値の変更があったカラムのみになります。

```
SELECT `the_robots`.`id`, `the_robots`.`name`, `the_robots`.`type`, `the_robots`.`year` FROM `the_robots` WHERE `the_robots`.`id` = 1
START TRANSACTION
UPDATE `the_robots` SET `year` = `the_robots`.`year` + 1 WHERE `id` = '1'
COMMIT
```

ちなみにPHQLではUPDATEの後ろは「テーブル名」ではなくて「モデル名」です。
モデルにモデル名とは異なるテーブル名をマッピングしていた場合に注意しましょう。
次のコードのようにマッピングしていた場合は```UPDATE TheRobots```になります。

```TheRobots.php
class TheRobots extends \Phalcon\Mvc\Model
{
    public function getSource() {
        return 'the_robots';
    }
```

# Phalcon\Db\Adapter\Pdo\Mysqlのexecute

データベースのアダプターを使うと任意のSQLを実行できます。
DIにsetしているアダプターを使用している例です。

```adapter.php
$adapter = $this->di->get('db');
$adapter->execute('UPDATE the_robots SET year = year + 1 WHERE id = 1');
```

```adapter.sql
UPDATE the_robots SET year = year + 1 WHERE id = 1
```

任意のSQLを実行したければアダプターを使いましょう。
[bootstrap] Bootstrap starter template


## Bootstrap starter template

ちょっとしたツールを作る度に Bootstrap 読み込むコードを書いてた.
毎回毎回書くのは面倒なのでテンプレート化して貼っておく.

よかったら使ってくださいな♪
自分用のテンプレなのでタイトルとかリンクとかは修正してね.

![screen shot](http://jsdo-it-static-contents.s3.amazonaws.com/images/capture/a/s/u/asua.jpg?t=1383469675)

## Template code

#### [DEMO](http://jsdo.it/phi/asua)

読み込んでる bootstrap や jquery は CDN のものを使っているので
何かダウンロードとかする必要はないです.

下記のコードをコピって `index.html` とかで保存すれば
サクッと Bootstrap を使ったページを作り始めることができます!!


```html
<!DOCTYPE html>

<html>
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, user-scalable=no" />
        <meta name="apple-mobile-web-app-capable" content="yes" />
        <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
        <title>tm tool</title>

        <!-- Latest compiled and minified CSS -->
        <link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.0.1/css/bootstrap.min.css">

        <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
        <script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>
        <!-- Latest compiled and minified JavaScript -->
        <script src="http://netdna.bootstrapcdn.com/bootstrap/3.0.1/js/bootstrap.min.js"></script>

        <style>
        body {
            padding-top: 50px;
        }
        </style>
    </head>
    <body>
        <div class="navbar navbar-inverse navbar-fixed-top">
            <div class="container">
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    <a class="navbar-brand" href="#">tm tool</a>
                </div>
                <div class="collapse navbar-collapse">
                    <ul class="nav navbar-nav">
                        <li class="active"><a href="#">Home</a></li>
                        <li><a href="#about">About</a></li>
                        <li><a href="#github">Github</a></li>
                        <li><a href="http://tmlife.net">Blog</a></li>
                        <li><a href="https://twitter.com/phi_jp">Contact</a></li>
                    </ul>
                </div>
            </div>
        </div>

        <div class="container">
            <div>
                <h1>
                    tm tool starter template
                </h1>
                <p>
                    tm tool starter template with bootstrap.
                </p>
            </div>
        </div>
    </body>
</html>

```
gitオブジェクトのSHA-1コード計算（方法2）

「gitオブジェクトのSHA-1コード計算」よりもっと簡単なやり方を見つけました。
1.オブジェクトのコンテンツを確認

```

$git cat-file blob ce01
hello

```

2.オブジェクトのコンテンツをblob-cat.txtに保存、ファイルサイズは6バイトと確認

```

$git cat-file blob ce01 > blob-cat.txt

```

3.ファイルの先頭に「blob 6\0」を追加して、blob-obj.txtに保存
4.SHA-1コードを確認

```

$cat blob-obj.txt | openssl sha1
ce013625030ba8dba906f756967f9e9ca394464a

```
他のタイプのオブジェクトも同じように確認できます。

参考資料：[Git objects v2](http://www.slideshare.net/chinkouu/git-objects-v2)
gitオブジェクトのSHA-1コード計算

gitオブジェクトのSHA-1コードの計算はなかなか合わなかったので調べてみてやっと解明できました。
#blobオブジェクト
1. blob idをblob-id.txtに保存
2. blobオブジェクトの内容を確認

```
$cat blob-id.txt | git cat-file --batch 
ce013625030ba8dba906f756967f9e9ca394464a blob 6
hello

```

3.blobオブジェクトの内容をblob-batch.txtに保存

```
cat blob-id.txt | git cat-file --batch > blob-batch.txt

```

4.blob-batch.txtをバイナリーエディタで修正して、blob-obj.txtに保存

*  先頭のSha-1コードを削除する

*  コンテンツサイズの後の「0A」を「00」に変更

*  最後の「0A」を削除

5.SHA-1コードを確認

```

$cat blob-obj.txt | openssl sha1
ce013625030ba8dba906f756967f9e9ca394464a

```
gitで生成したオブジェクトのSHA-1コードと一致しました。
他のオブジェクトタイプも似たような方法で生成しています。

#参考資料
[Git objects v2](http://www.slideshare.net/chinkouu/git-objects-v2)
Keynote でアニメーションをせずにスライドを切り替える

プレゼンの最後とかで前に戻ったりする際、普通に方向キーで切り替えるとアニメーションが有効になってちょっとウザいというあなたに福音です。

## アニメーションをおこなわずに各ビルドステップを進める。

`Shift` + `←` /  `→`

## アニメーションを行わず、各スライドの最初のページだけ表示していく。

`Shift` + `↑` /  `↓`

## 詳細

もっと細かいショートカットキーの一覧は、

- http://help.apple.com/keynote/mac/6.0/#/tan951def1c9

こちらにあります。

スライドショーの最中に `?` を押すことでショートカット一覧が参照できるんですね。
実践的なAngular.jsにおけるView実装

Angular.jsは優れたフレームワークだ。ただ、使ってみると問題と感じる点もある。
具体的には、Viewが片手落ちな点だ。

通常はHTML DOMがView・モデルとなるJavaScriptオブジェクトをcontrollerでバインディング、これで問題ない。しかし、jQuery Plugin(jQuery UI draggable等)で加工したい場合その処理を普通に書ける場所がない。
これらの処理はDOMレンダリング後に行う必要があるが、 **Angular.jsではafter renderのイベントがAPIにない(ng-rendered的なものがない)** のだ。
では、追加されるdivに`$("#id").draggable()`などをしたい時、どこで実行できるのか？

**結論としては、`directive`を使用する。** `directive`を使用するんだ（二回）。
実例としてjsFiddleのサンプルを用意したので、こちらを参照されたし。これは、明確にMVCを分割することを意識して書いている。

[サンプルコード](http://jsfiddle.net/icoxfog417/nj7Lw/)

これを書き終えてからカーリングというスポーツを根本的に勘違いしていたことに気づいたが、そんなことは問題ではない。Angular.jsにはdirectiveという仕組みが用意されており、これを利用することでレンダリング処理に介入できる。つまり「V」における片手落ち部分を補完できるのだ。

実際はもっと色々な使い方ができるので、公式ドキュメントなどをぜひ参照されたし（分かりにくいけど・・・ここはノウハウが溜まったらまとめたい）。

なお、controller内ではまだレンダリングが開始されていないため、jQuery Plugin等の処理は記述できない。強制的に`$scope.$apply()`でレンダリングを走らせられるが、デフォルトの処理とかぶっておかしくなるので注意が必要だ。

これが役に立つのが、モバイルデバイス対応だ。Angular.jsにはタッチ系イベントのための属性がないため、モバイル対応をする際は[Hammer.js](http://eightmedia.github.io/hammer.js/)などで自分で対応することになる。この実装をする際、directiveを使えばDOMのイベントハンドラを拡張することができる。
directiveに書かず外部でイベントを検知して`$scope`のメソッドを実行する方法もあるが、この際は`angular.element($("xxx")).scope();`で`$scope`オブジェクトを取得できるということを覚えておけば対応できるだろう。

最後に・・・これは愚痴だ。これを読んでも読まなくても差し支えない。
2013/11現在、Angular.jsはStableが1.0.8で開発中が1.2.0。マイナーバージョンにして2の開き。有権者の方に訴えたいのは、こんなに開いていてOKなのでありましょうか、ということだ。
→とブツブツ言っていたが、Angular.jsは1.1が開発中で1.2が次期安定版として使い分けられているので、この状態は全く普通なのだった([こちら参照](http://blog.angularjs.org/2012/07/angularjs-10-12-roadmap.html))。

ただ、現在のStable(1.0.x)にはまだ`ngIf`などのあったらすぐに使いたい便利属性がないのは事実。
[Angular.jsのAPIドキュメント](http://docs.angularjs.org/api/)を見る際は、バージョンを選択することを忘れないようにして新バージョンのリリースを待とう！
clang: error: linker command failed with exit code 1 が出たときの体験談


## 経緯

0. iOS向けアプリを作ろうと思い立つ
1. せっかくなのでiOS7向けアプリ開発にしようと考える
2. [RailsとiPhoneではじめるアプリケーション開発](http://www.amazon.co.jp/Rails%E3%81%A8iPhone%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA-%E6%A0%97%E7%94%B0-%E7%94%B1%E8%8F%9C/dp/4844334476)の初版第一刷187ページから写経を始める
3. ライブラリ管理にはCocoaPodsがよいと書いてあるので素直に使いだす
4. ライブラリをpod installする
5. 写経を続ける
6. 201ページまでコードを写したところでRunしたところビルド失敗。


```
clang: error: linker command failed with exit code 1
```

なるエラーが発生。

なお Xcode 5.0.1 を使用。

## 参考
clang: error: linker command failed with exit code 1 というエラーログで検索。クエリに "pods" を追加したりもした。結果、いくつか日本語記事がヒットした。

http://d.hatena.ne.jp/goodbyegirl1974/20120920/1348106337

http://teabreak.info/web-program/xcode-clang-error-linker-command-failed-with-exit-code-1-use-v-to-see-invocation/932/

http://d.hatena.ne.jp/samril/20130910/1378890218

clang: error: linker command failed with exit code 1 のエラーはさまざまな原因で発生する。上記の3記事、どれも自分のエラー発生原因とは異なっていた。

## 解決方法

```terminal
$ pod install
```

しなおして（不要だったかも）、

**projectname.xcworkspace**

からXcodeを開いたところ、ビルドしてもエラーが出なくなった。99個のWarningsと共にビルド成功。

## 原因

CocoaPodsを使うときは、projectname.xcodeprojではなく
**projectname.xcworkspace**
からXcodeを開かねばならない。projectname.xcodeprojから開いていたのが原因。

参考 http://www.shigekitakeguchi.com/archives/1016

CocoaPodsを使っている人にとっては常識だったのかも。
AWSで、unicorn + nginx + sinatra を動かしてみる

構築を試みたときに調べたことなどなど

#### なぜunicorn + nginx?
![unicorn](https://github.com/images/error/angry_unicorn.png)

unicornは汎用のRackアプリケーションサーバ。Railsからもsinatraからも使える。

unicornだけでも、任意のポートをlistenすればwebサーバーとして使えるが、
以下のようなメリットがあるため、本番ではnginxをリバースプロキシとして
前に立ててからリクエストをunicornに流すのが良い

+ 画像やcssなどの静的ファイルはnginxで高速に返せる

+ リクエストをバッファリングして受信完了してからunicornにリクエストを
投げるため、遅い回線(3Gなど)で接続が来た時にunicornの
ワーカプロセスの待ち時間を削減できる

動作原理はgithubの運用例が記載された以下のドキュメントが詳しい
https://github.com/blog/517-unicorn

#### まずは、unicornだけでサーバーを立てる

サンプルのsinatraアプリをunicornから呼んでみる

```rb:config.ru
require 'rubygems'
require 'sinatra/base'
class HelloApp < Sinatra::Base
  get '/hello' do
    'Good Sunday Morning!'
  end
end
run HelloApp
```

Gemfileにunicornを足して、bundle installする

```rb:Gemfile
gem "unicorn"
```

```bash:shell
$ bundle install
$ bundle exec unicorn -v
unicorn v4.6.3
```

unicornの設定ファイルを作る。rubyのコードで書けてgood。

```rb:unicorn.rb
@dir = "/path/to/app/"

worker_processes 2 # CPUのコア数に揃える
working_directory @dir

timeout 300
listen 80

pid "#{@dir}tmp/pids/unicorn.pid" #pidを保存するファイル

# unicornは標準出力には何も吐かないのでログ出力を忘れずに
stderr_path "#{@dir}log/unicorn.stderr.log"
stdout_path "#{@dir}log/unicorn.stdout.log"
```

AWSを使っているなら、セキュリティグループで指定したportを
空けておく（よく忘れてハマる...）

これで準備完了。以下のコマンドで起動できる。-Dはdaemonとしての起動。
本番環境で起動する時は-E production とする
（※ オプションは設定ファイルより優先される）

```bash:shell
$ bundle exec unicorn -c unicorn.rb  -D
$ ps auxf | grep unicorn | grep -v grep
unicorn master -c unicorn.rb  -D
 \_ unicorn worker[0] -c unicorn.rb -D
 \_ unicorn worker[1] -c unicorn.rb -D

```

psを見ると、workerプロセスとそれを管理するmasterプロセスが
動いていることが確認できる

また、unicorn_railsという実行ファイルもあるが、こちらは
過去verのRails向けで、基本的にはunicornを使うことが推奨されている


#### nginxをリバースプロキシとしてunicornの前に置く

次に、nginxをunicornの前に置く

[unixドメインソケット](http://ja.wikipedia.org/wiki/UNIX%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%BD%E3%82%B1%E3%83%83%E3%83%88)を経由してnginxとunicornがやりとりを行うよう設定
また、/path/to/app/static以下のリクエストはnginxが処理する（unicornまでいかない）

```bash:shell
$ sudo yum -y install nginx
$ nginx -v
nginx version: nginx/1.4.2
```


```nginx:/etc/nginx/nginx.conf
user  root;
worker_processes  2;

http {
    upstream unicorn_server {
       server unix:/path/to/app/tmp/unicorn.sock;
    }

    server {
        listen       80;
        server_name  ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com;
        root         /path/to/app/static;

        location / {
            # 静的ファイルが存在しなかった時はUnicornにproxy
            if (!-f $request_filename) {
                proxy_pass http://unicorn_server;
                break;
            }
        }
    }
}
```

```rb:unicorn.rb
# listen 80
listen "/path/to/app/tmp/unicorn.sock", backlog: 1024 # UNIXソケットを見るように変更
```

nginxを起動,unicornを再起動
ブラウザでhttp://xx.xx.xx.xx/hello を叩いて確認

```bash:shell
$ sudo /etc/init.d/nginx start
or
$ sudo nginx
```

#### ネクストステップ

以上でとりあえずは動くが、他にもunicornには調べておくべきトピックが
あるので、いくつか挙げておきます

+ linuxシグナル送信によるunicornの起動/停止

+ capistranoを用いてホットデプロイを実現する

+ preloadを有効化してリロード速度の応答低下を回避する

Have Fun!
MacOSX Mavericks(10.9)にhomebrewを使ってDjangoの開発環境を整える

## ImportErrorに悩まされた
homebrewでpythonをインストールして、pipでdjangoのインストール。でも、サーバ起動で失敗する。

```
$ python manage.py runserver
```
> ImportError: No module named django.core.management

##実はMacにはPythonが初めから入っている
Terminalアプリを起動しバージョンを確かめてみる

```
$ python --version
```
>Python 2.7.5

これに気がつかず、てっきりhomebrewでインストールされたPythonかと思ったら違った。

```
$ which python
```
>/usr/bin/python

Mavericksに入っているPythonが最新版で気がつかなかった...

##homebrewのインストール
Xcode 5.0から、Command Line Toolsのインストール方法がかわったようなので、以下のコマンドでインストールする

```
$ xcode-select --install
```

homebrewのインストール

```
$ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
```
最後に、以下のコマンドで正常に完了したかの確認

```
$ brew doctor
```
>Your system is ready to brew.

と出たら完了

## Pythonのインストール
Pythonはbrewコマンドで入れることで、pip (Pythonのパッケージ管理)も一緒に入れてくれる

```
$ brew install python
```

pipは最新化しておく

```
$ pip install --upgrade setuptools$ pip install --upgrade pip
```

homebrewとpythonの環境pathを設定する

```
echo 'export PATH=/usr/local/bin:/usr/local/share/python:$PATH' >> ~/.bash_profile
source ~/.bash_profile
```

確認する

```
$ python --version
```
>Python 2.7.5

```
$ which python
```
>/usr/local/bin/python

##Djangoのインストールとプロジェクトの作成
```
$ pip install django
```

プロジェクトの作成を行う

```
django-admin.py startproject sample_project
```
これで、カレントディレクトリに`sample_project`というディレクトリが作成されるので動かしてみる

```
cd sample_project
python manage.py runserver
```

`http://127.0.0.1:8000/`にアクセスし、以下の画面が表示されれば環境構築完了

![It worked!](https://qiita-image-store.s3.amazonaws.com/0/2624/90ceb33a-8669-fafe-9166-9511c51b32b7.png "It worked!")
バージョン管理の目的


# 本記事を書くに至った背景
Subversion や Git を **ファイルを共有するためのツール** と思っている人がいたので、そうではなく **ファイルのバージョン管理を行うためのツール** であること、またバージョン管理を行う目的をまとめることにした。

# バージョン管理を行う ( 主な ) 目的
バージョン管理システムを使う ( 主な ) 目的は下記の 4 つだと思う。

1. 以前の状態に戻る

2. 変更履歴を調査する

3. プロジェクトを管理する

4. 変更者と変更理由を知る

以下で順を追って説明する。

### 1. 以前の状態に戻る
ソースコードを編集していると、「変更を行う前の方が良かった」「誤って変更してしまったので元に戻したい」ということが多々ある。バージョン管理システムは以前の状態に戻る手段を提供しているため、本目的を容易に実現することができる。

### 古典的なバージョン管理
目的 1 を実現するだけなら、バージョン管理システムを使わなくても実現可能である。例えば、hoge.cpp を編集する前にファイルのコピー ( hoge_copy.cpp ) を作成しておき、「変更前の方が良かった」と思った時点で、 hoge_copy.cpp の内容を hoge.cpp にコピーして編集内容を取り消すといった具合に。しかし目的 2 〜 4 を古典的な方法で実現するのは至難の業である ( 場合が多い ) 。

### 2. 変更履歴を調査する
編集内容を全て破棄して編集前の状態に戻るのであれば、古典的な方法でも十分可能であるが、「〇〇の部分だけ編集前の状態に戻したい」といった場合は古典的な方法では難しい。
バージョン管理システムを使っていれば、変更履歴の調査 / 各変更で何が変わったのかを調査し、特定部分の変更のみを容易に取り消すことができる。

### 3. プロジェクトを管理する
ソフトウェア開発では単一ファイルではなく複数ファイルを扱うことが普通である。例えば「 hoge.h に新規メンバ関数の宣言を追加し hoge.cpp でその実装を追加した」といった、複数ファイルにまたがる論理的な 1 つの変更を 1 つの単位として扱いたい場合、古典的な方法では難しい。バージョン管理システムは「コミットはアトミックである」という特徴を有するため、本目的を容易に実現することができる。

#### 4. 変更者と変更理由を知る
自分が編集しているファイルに意図が不明な 1 文があったとする。自分にとってその 1 文は意図が不明でも、何らかの意図を持って入れられたはず。バージョン管理システムの変更履歴を辿ることで、変更者と ( 記されていれば ) 変更理由を知ることができる。変更履歴から意図が分からなかった場合は、直接変更者に確認することもで意図を知ることができる。

# まとめ
Subversion や Git は **ファイルのバージョン管理を行うためのツール** であり、バージョン管理を行う ( 主な ) 目的は

1. 以前の状態に戻る

2. 変更履歴を調査する

3. プロジェクトを管理する

4. 変更者と変更理由を知る

ためである。
フレームワークとは

フレームワークとは：
プログラミングの経験や知識を整理して、使いやすく一般化された枠組みの事。

アプリケーションフレームワークとは：
フレームワークの一種。プログラミングの設計思想をみんなが再利用しやすい形で提供している。PCでいうところの、マザーボードのようなもの。
（メモリ、CPU、ファンなどを決められたマザーボードの枠組みの中にはめ込みPCとして機能させる。。ように。）

ライブラリと違うの？：
フレームワークに似ているがちょっと違う。

ライブラリ＝ユーザーコードから、支持を受けて初めて処理を行う。
フレームワーク＝ライブラリを呼び出す。アプリのライフサイクル（初期化、実処理、終了）まで管理しているので、要所でユーザーコードに問い合わせるのみ。

Javascriptライブラリは？
毎回html body内で呼び出されるなぁ。。なのでただのライブラリ。。なのか？

フレームワーク（Bootstrapにも言える事かな？）のメリット：
１　開発生産の向上
２　メンテナンス性に優れる
３　先端の技術トレンドにも対応しやすい
４　一定以上の品質が期待できる
デメリット：ルールの制約

Rubyの主なフレームワーク
Merb
Sinatra
Ramaze
Wave
Rails
三角関数のその3


はい。
![http://www.nowshika.com/joso/img11030149.png](http://www.nowshika.com/joso/img11030149.png)
これは、xy平面上に(グラフ用紙と思って下さい)長さ１の線が引かれています。 このとき点Aの座標を(X,Y)とすると、sinα　はどうなるか？

はい、原点Oから出ている赤い線の先を点Aとお考えいただきます幸いです。
なので原点Oから青文字のXの位置までが底辺で青文字のYの位置が高さとなります。
底辺がX、高さがY、斜辺が1ですね。
sinαのときは高さ/斜辺で求まるためYとなります。
cosαも同様に底辺/斜辺でも泊まるためXとなります。

はい、ここまでは昨日などと変わらないお話かと思います。
で、この原点からの距離が1の地点を結んでいる半径=1　の円のことを「単位円」と言われます。  そしてsinα　cosα　tanα　それぞれを単位円で考えたとき sinα ＝ X　cosα ＝ Y　tanα ＝ X/Y　となります。


![http://www.nowshika.com/joso/img11030212.png](http://www.nowshika.com/joso/img11030212.png)
sinα ＝ -X　cosα ＝ Y　tanα ＝ -X/Y
ということになります。cosαとtanαが負の数になっておりますが、このままもうちょっと続きます。
![http://www.nowshika.com/joso/img11030253.png](http://www.nowshika.com/joso/img11030253.png)
上記画像の1まいめの図のときは、
sinα = -X　cosα = -Y　tanα = X/Y
※tanαは-X/-Yでともに値が負の数であったため正の数になっております。

そして2まいめの図のときは
sinα = X　cosα = -Y　tanα = X/(-Y)
(分数など綺麗に書ける記法あるはずなのですが省略しています)

そして上記のようなαが135°として90°より大きいものになっているとき
1 sin135 ° 2 cos135°
3 tan（-45°） 
4 cos210° 
それぞれの時はこの表から
![http://www.nowshika.com/joso/img11020042.png](http://www.nowshika.com/joso/img11020042.png)
X,Yがともに正の数の領域外の際には
sin(180°-α）＝sinα cos(180°-α）＝-cosα 
tan（180°-α）＝-tanα 
となる関係から求めるそうです。(考え方や関係が理解できれば表をずっとまる暗記する必要がなくなります)
1のsin135°はsin=高さ/斜辺であるので、sin45°から導いて1/√2となります。
2のcos135°はcos=底辺/斜辺であるので、同様のに表と上記の式を使えば-1/√2となりますが、何故負の数が出てきているかは底辺が-Xであるために-1/√2となります。
3のtan（-45°）はtan=高さ/底辺の式から高さが-Y、底辺がXであるので-1となります。
 4の cos210°は-3/√2となります。
sin,cos,tanの求め方が
sin=高さ/斜辺　cos=底辺/斜辺　tan=高さ/底辺
の式であり、
今回ここまで使っていた三角形は斜辺の長さは1であったので
X,Y両方共が正の領域である場合に
cosα=X　sinα=Y
となっていますね！
ピタゴラスの定理(三平方の定理)が
(斜辺)^2 = X^2 + Y^2
であることから
1^2 = (cosα)^2 + (sinα)^2
であると言い換えることが出来ます。斜辺の長さが都合のよかった1でない場合でも
![http://www.nowshika.com/joso/img11030332.png](http://www.nowshika.com/joso/img11030332.png)
斜辺が1でα=30°の時には
1^2 = (√3/2)^2 + (1/2)^2
1 = 3/4 + 1/4
で1^2 = (cosα)^2 + (sinα)^2 の関係が成り立っていますね。

では斜辺が2倍になった場合も
2^2 = (2X)^2 + (2Y)^2
4 = 4X^2 + 4Y^2 1 = X^2 + Y^2
となりますね。
かなりいい加減なgitエラー解決方法

```bash
error: src refspec master does not match any.
error: failed to push some refs to 'git@github.com:xxxx.git'
```
pushしたときにおこる。変更をコミットしてない可能性がある。
***
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin master
おそらく、まっさらなリポジトリにpushする場合起きる。表示されているコマンドをすればpushが成功する。
***
```bash
$ git clone git@bitbucket.org:o-kuhiiro/hogehoge.git
Cloning into 'hogehoge'...
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
```
クローンに失敗した。ローカルのフォルダにinitしてのプッシュもできない。鍵の設定は間違いない。
とりあえず、クローンするフォルダを別のところにしたらできた。フォルダの権限の問題？

***
エラーじゃないけど、Source TreeでなぜかPushできない。応答が帰ってこなくなる。コマンドでやると上記のエラーもでる。
Source Treeの[ツール] - [オプション] - [SSHクライアントの設定] - [SSHキー]で設定しているキーと、.ssh/configのIdentityFileが間違っていた。

***
```bash
$ git cherry-pick 123456789abcdefg
\# On branch master
nothing to commit (working directory clean)
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:
    git commit --allow-empty
Otherwise, please use 'git reset'
```
多分、もう既にチェリーピックされている。

***
```bash
error: Your local changes to the following files would be overwritten by merge:
        Atlas.asset
        Material.mat
        SkeletonData.asset
Please, commit your changes or stash them before you can merge.
Aborting
```
ローカルでgit管理下に置いたファイルがmerge元では管理していないので先にコミットしろみたいな感じか。
commitしたら、mergeできるようになった。

***
SourceTreeでpushしたら成功しているのに下記エラーがでた。

```bash
Updates were rejected because the tag already exists in the remote.
```

```bash
git pull --tags
```

したらでなくなった。
should.jsでdateのequalに失敗する問題


should.jsのequalはstrictだから、dateのvalueでequalityをtestするならeqlを使えばいい。

```javascript

var date1 = new Date(2013, 11, 2, 10, 7, 9);
var date2 = new Date(2013, 11, 2, 10, 7, 9); // same as date1
date1.should.equal(date2); // => false
date1.should.eql(date2); // => true
```
多項式フィッティング


数式が表示されるようになったと聞いて (http://qiita.com/iizukak/items/04d6e226982bc108bc16)

この前会社の人と多項式フィッティングを実装してみようってことで書いた数式を（紙はあげちゃったのでうろ覚えで）備忘録として再度。

正則化項つきエラー関数

```math
\tilde{E}(\mathbf{w}) = 
\frac{1}{2}\sum_{n}
  \left\{
    y(\mathbf{x_n};\mathbf{w}) - t_n 
  \right\}
+ \frac{\lambda}{2} \left| \mathbf{w} \right|^2
```

を最小化する $\mathbf{w}$ を求めたい。ただし、

```math
y(\mathbf{x};\mathbf{w}) = \sum_j w_j x^j
```

である。

まずエラー関数を $w_j$ で微分すると、

```math
\begin{aligned}
\frac{\partial\tilde{E}}{\partial w_j}
& = 
\sum_{n}
  \left(
    \left\{ y(\mathbf{x_n};\mathbf{w}) - t_n \right\}
    \frac{\partial y(\mathbf{x_n};\mathbf{w})}{\partial w_j}
  \right)
+ \lambda w_j
\\
&=
\sum_{n}
  \left(
    \left\{ y(\mathbf{x_n};\mathbf{w}) - t_n \right\}
    x_n^j
  \right)
+ \lambda w_j
\end{aligned}
```

となる。

これを元にGradient Descentのループ

```math
\begin{aligned}
w_j 
&:= 
w_j - \alpha \frac{\partial\tilde{E}}{\partial w_j}
\\
&=
w_j - \alpha \left[
\sum_{n}
  \left(
    \left\{ y(\mathbf{x_n};\mathbf{w}) - t_n \right\}
    x_n^j
  \right)
+ \lambda w_j
\right]
\\
&=
\left( 1 - \alpha \lambda \right) w_j - \alpha
\sum_{n}
  \left(
    \left\{ y(\mathbf{x_n};\mathbf{w}) - t_n \right\}
    x_n^j
  \right)
\end{aligned}
```

をまわす。

これをJavaScriptで実装したものが http://jsfiddle.net/s4rC2/10/ である。

会社でやっていた時にはきちんと動いていなかったのだが、帰ってきて試行錯誤していたら、アルゴリズム的には問題なくて、以下のポイントを抑えてあげればきちんと動いた。

まず先ほどの一番下の右辺を見ると、 $ ( 1 - \alpha \lambda ) w_j$ というのがあるが、これは $w_j$ をちょっとだけ小さくする働きをすることが期待される。$\lambda$ が正則化項由来であることを考えると、 $\mathbf{w}$ が大きくなり過ぎるのを抑制する働きということで納得がいく。

つまり、

```math
\alpha \lambda \ll 1
```

が成り立つように $\alpha$ と $\lambda$ を選ぶ必要がある。

次に、その次の項に着目すると、 $y(\mathbf{x_n};\mathbf{w}) - t_n$ は（この差を縮めるのが今回の目的であることを考えると）それほど大きくならないはずだが、$x_n^j$ が厄介である。

もし観測点の$x$座標が1よりも大きい値（例えば10とか）であれば、$j$ が大きいほど（多項式フィッティングに使う多項式の次数が大きいほど）$x_n^j$が巨大になってしまうため、$w_j$ が発散してしまう。

そのため、

```math
\alpha x_n^j \ll 1
```

となるように $\alpha$ を選ぶか、それだと収束が極端に遅くなってしまうので、現実的には観測点の $x$ 座標が1以下になるようにデータを正規化することが重要である。
CCScrollLayerをcocos2d-x v3.0で使ってみる

TouchDispatcherが使えなくなっているようで、代わりにEventListenerというものが実装されていました。
下記のようにコードを変更したら動きました。

```c++:CCScrollLayer.h
class CCScrollLayer : public Layer
{
protected:
    
    EventListenerTouch *m_listener;
```

```c++:CCScrollLayer.cpp
bool CCScrollLayer::initWithLayers(Array *layers, int widthOffset)
{	
	if (Layer::init())
	{		
		// Make sure the layer accepts touches
//		Director::getInstance()->getTouchDispatcher()->addTargetedDelegate(this,0,true);
        m_listener = EventListenerTouch::create(Touch::DispatchMode::ONE_BY_ONE);
        m_listener->onTouchBegan = CC_CALLBACK_2(CCScrollLayer::onTouchBegan, this);
        m_listener->onTouchMoved = CC_CALLBACK_2(CCScrollLayer::onTouchMoved, this);
        m_listener->onTouchEnded = CC_CALLBACK_2(CCScrollLayer::onTouchEnded, this);
        m_listener->onTouchCancelled = CC_CALLBACK_2(CCScrollLayer::onTouchCancelled, this);
        EventDispatcher::getInstance()->addEventListenerWithSceneGraphPriority(m_listener, this);

(略)
}

void CCScrollLayer::onExit()
{
//	Director::getInstance()->getTouchDispatcher()->removeDelegate(this);
    EventDispatcher::getInstance()->removeEventListener(m_listener);
	Layer::onExit();
}
```

または、こちらの方法でも動くようです。
Layerの場合だけだと思われますが、こちらのほうが簡単でいいですね。

```c++:CCScrollLayer.cpp
bool CCScrollLayer::initWithLayers(Array *layers, int widthOffset)
{	
	if (Layer::init())
	{		
		// Make sure the layer accepts touches
//		Director::getInstance()->getTouchDispatcher()->addTargetedDelegate(this,0,true);
        setTouchEnabled(true);
        setTouchMode(Touch::DispatchMode::ONE_BY_ONE);
```
CentOS で sudo 時に実行ユーザーのPATHを引き継ぐ


`sudo -s`すればとりあえずPATHが通ったのだが、それって運用の観点から見たら良くないわ。
って事で、調べました。

##環境
ゲスト: CentOS 6.2
ホスト: MacBookAir MacOS 10.8
VM: Parallels Desktop 9 for mac
ゲストを対象とする。

##/etc/sudoers を編集

```bash: 
$ sudo visudo
```

を叩いて、

```bash: 
Defaults    env_keep +=  ほにゃららら
```

が書いてある行を探そう。
それらの直下に

```bash: 
Defaults    env_keep +=  "PATH"
```

を追加し、

```bash: 
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
↓
# Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
```

とコメントアウトすれば、PATHが通るようになります。

##参考
[sudo時にPATHを引き継ぐ](http://nomnel.net/blog/centos-take-over-path-from-user-on-sudo/)

##感謝
参考にさせていただいたサイト管理人の皆様、誠にありがとうございました。
Railsでfacebookの居住地に合わせてタイムゾーンを変える方法

勉強がてらRailsでタスク管理アプリ作ってHerokuに上げてたんだが、
タイムゾーンがずれててどうしようかと思って調べた。

単純に[Herokuのタイムゾーンを日本にする](http://blog.ruedap.com/2011/02/10/heroku-timezone-japan-jst)事もできるみたいだが、
今作ってるアプリはfacebookログインできるようにしていて
例えば日本以外のユーザーがログインした場合のことも考えて
タイムゾーンを変更できるようにしてみた。

##環境
- Rails4.0.0
- Ruby2.0.0p247
- Heroku
- omniauth-facebook

##omniauth-facebookでtimezoneを取得
facebookログインした時にtimezoneを取得してデータベースに入れておく。

```app/models/user.rb
class User < ActiveRecord::Base

  has_many :tasks

  validates :provider, presence: :true
  validates :uid, presence: :true
  validates :name, presence: :true

  validates_uniqueness_of :uid, scope: :provider

  def self.create_with_omniauth(auth)
    create! do |user|
      user.provider = auth["provider"]
      user.uid = auth["uid"]

      if user.provider != "twitter"
        user.mail = auth["info"]["email"]
        user.name = auth["info"]["name"]
        user.image_url = auth["info"]["image"]
        user.access_token = auth["credentials"]["token"]
        user.timezone = auth["extra"]["raw_info"]["timezone"]
      else
        user.name = auth["info"]["nickname"]
      end
    end
  end

end
```

##time_zoneメソッドの作成
現在時刻をfacebookログイン時に取得したtimezoneで表示させるようにメソッドを作る。

```application_controller.rb
def time_zone
  Time.now + @current_user.timezone * 60 * 60 if @current_user
end
```

##メソッドの使い方
今まで

```
Time.now
```

と書いていたところを

```
time_zone
```

と変更すればオッケー。

どなたか、もっと他に良いやり方あれば教えて下さい。
neat-json を使って Vim で JSON を整形する


neat-json
================

neat-json は、Vim のカレントバッファにある JSON を綺麗に表示するためのプラグインです。(PR)

内部で Python の JSON モジュールを利用しているので、if_pyth が必須です。

インストール
----------

NeoBundle を使っている場合は、.vimrc に以下を追加してください。

```.vimrc
NeoBundle '5t111111/neat-json.vim'
```

もしくは、普通にダウンロードして展開してプラグインのパスが通っているところに置けばOKです。
https://github.com/5t111111/neat-json.vim

使い方
--------------


例えば、バッファのJSONが以下のようなぐちゃぐちゃ状態だったとします。

![json1.png](https://qiita-image-store.s3.amazonaws.com/0/29846/1e4b0abe-eda8-7266-f918-2db6d235bf19.png "json1.png")

以下のコマンドを実行すると、バッファの内容を書き換え、綺麗にインデントして表示します。

```
NeatJson
```

![json2.png](https://qiita-image-store.s3.amazonaws.com/0/29846/069fa4ad-a941-dd9a-b5b6-a6bd5023fc04.png "json2.png")

通常はUTF8でエンコードして表示しますが、
以下のコマンドを実行した場合には、生のUTF8で表示します。

```
NeatRawJson
```

![json3.png](https://qiita-image-store.s3.amazonaws.com/0/29846/bdee5300-9c00-2d12-d6c1-092c1c9ce302.png "json3.png")

いずれの場合も、JSONとして適切なデータでない場合にはエラーとなります。

if_pyth
-------------

先述の通り、Python インターフェースが必須なので、--enable-pythoninterp でビルドされている必要があります。
http://vim-users.jp/2010/03/hack132/

Thx2
----
生のUTF8データから日本語への変換については、以下の投稿を参考にさせていただきました。

### Vim (with python) で json を整形
http://qiita.com/tomoemon/items/cc29b414a63e08cd4f89
Qiitaの記事をインクリメンタルサーチするAlfred 2 Workflow

Qiita の記事をインクリメンタルサーチする Alfred 2 Workflow をつくりました。

[Githubリポジトリ](https://github.com/uetchy/alfred-qiita-workflow)から[ダウンロード](https://github.com/uetchy/alfred-qiita-workflow/archive/master.zip)出来ます。

![s1.png](https://raw.githubusercontent.com/uetchy/alfred-qiita-workflow/master/screenshots/qiita-workflow.png)

<del>ただ、Pythonの文字エンコーディングの問題で日本語の検索ワードを受け付けないので、解決策をご存知のかたはコミットして頂けると嬉しいです。</del>
__Rubyで書きなおして日本語ワードも受け付けるように修正しました。__
`wp_list_pages`で出力される最後の li に `class=last` を追加する

最後の一個だけMarginの設定を変えたい時とかに `<li class=last>`を追加したかったけど `wp_list_pages` のオプションで標準ではできないらしいのでやり方を調べてみた。

## 方法

```php:functions.php
<?php function add_last_class($input) {
	if( !empty($input) ) {
		$pattern = '/<li class="(?!.*<li class=")/is';
		$replacement = '<li class="last ';

		$input = preg_replace($pattern, $replacement, $input);

		return $input;
	}
}
```

んで、テンプレートから呼び出す時は
`<?php echo add_last_class(wp_list_pages('title_li=&depth=1&sort_column=menu_order&echo=0' )); ?>`

のように呼び出す。

`echo=0`オプションを設定することで標準出力じゃなくて返り値にできるらしいですね。元から全部返り値にしておいてくれればいいのに。。。

## できなかったこと

本当は `wp_list_pages('title_li=&depth=1&sort_column=menu_order&last=true')` 的な記述ができるように関数を上書きしたかったんだけど、やり方もわからないし標準の関数の上書きは非推奨っぽいのでやめておいた。

## 参考

WordPress › Support » how to add a style class to wp_list_pages last item
http://wordpress.org/support/topic/how-to-add-a-style-class-to-wp_list_pages-last-item
masterのpushを常に禁止する


##masterへpushできなくする

masterブランチ消しちゃった＼(＾o＾)／

みたいな事が往々にしてあるので、
githubのPull Requestみたいに、
手元でマージしなくてもマージ可能な環境では、
developへのpushは禁止にしておくのがいいと思います。

以下のサイトに書かれているようなpre-commitスクリプトを、
そっくりそのままファイル名をpre-pushとすることで、
masterへのpushを禁止することができるようになります。

commitを禁止してても(たぶん)pushで削除はできてしまうので、pushも禁止にしておいた方が確実です(´・_・`)

http://blog.kazu634.com/2013/03/16/do-not-commit-on-master-branch/


##push禁止スクリプトを自動でコピーする

ただ、これだけだとコピーするのを忘れた瞬間に終わるので、
clone時に自動でコピーされるようにします。

以下のように.gitconfigに書き、
~/.git_template/hooks/pre-pushに上記のpre-pushスクリプトを置くことで、
自動的にコピーされるようになります。

```
[init]
        templatedir = $HOME/.git_template
```

作成したpre-pushスクリプトにchmod +xで実行権限を与えるのも忘れないでください。

なお、pre-pushスクリプトは比較的新しいgitじゃないと動かないらしいです(1.8.3.4では動いています)。
そのため、SourceTree等のgitを内蔵しているソフトを利用している場合は、
システムのGitを使うように変更をした方がいいと思います。
JavaScript のテストでお手軽 fixture


Node.js ではなくブラウザでのテストの話です。

DOM が絡んだテストをするには、何らかの HTML（fixture）が必要ですが、テスト毎に HTML ファイルを用意するのは面倒です。テストコード中で簡単に fixture を用意できると便利。

Mocha には fixture の機能がありませんが、簡単に自前で用意できます。

```spec_helper.js.coffee
window.useFixture = (html) ->
  stripped = html.replace(/^\s+|\s+$/g, '')
  fixture = null
  beforeEach ->
    fixture = $(stripped).appendTo('body')
  afterEach ->
    fixture.remove()
```

という感じで関数を用意しておくと、以下のように使えます。

```something_spec.coffee
describe 'Something', ->
  describe '#doSomething', ->
    useFixture """
      <div class="view">
        <div class="something" data-something="123">Something</div>
      </div>
    """
    it 'gets data from element', ->
      something = new Something el: '.view'
      expect(something.data).to.eq 123
```

CoffeeScript は複数行文字列が簡単に使えていいですね。

ちなみに fixture をインラインで書いた方がいいと思うのは、fixture を外部ファイルにしていろんなテストで共有すると、テストコードを見てもテスト対象がどういう挙動をするのかわかりにくくなるためです。この辺の話は[この記事](http://searls.testdouble.com/posts/2011-12-11-jasmine-fixtures.html) に詳しいです。
GOSのサンプリング地点をRで可視化する

## 概要
あるプロジェクトにおけるサンプルのサンプリングポイントがどこだかを可視化しました．
（ただし，メタデータの全てを得られたわけではないので，ここにあるのが全てというわけではありません）

## Rで描く

```r
# install.packages("maptools")
# install.packages("rgeos")
# install.packages("gpclib")

rm(list=ls())

library(maptools) 
library(rgeos)
library(ggplot2) 
gpclibPermit() 
theme_set(theme_bw()) 


world.shp <- readShapeSpatial("~/Downloads/TM_WORLD_BORDERS-0/TM_WORLD_BORDERS-0.3.shp") 

# check for region-id - Use "FIPS" 
head(world.shp@data) 

## see licence, not GPL 
# world.shp.p <- fortify.SpatialPolygonsDataFrame(world.shp, region="FIPS") 
world.shp.p <- fortify(world.shp, region="FIPS") 

world <- merge(world.shp.p, world.shp, by.x="id", by.y="FIPS") 

head(world) 
dim(world) 

# only the worldmap 
p <- ggplot(data=world, aes(x=long, y=lat, group=group)) + 
geom_polygon(fill="#63D1F4") 
p <- p + geom_path(color="white") + coord_equal() 
plot(p)
ggsave(p, width=11.69, height=8.27, file="world_map.jpg") 

## Add some locations 
d <- read.table("~/Desktop/gcos_point.txt", header=T)
colnames(d) <- c("lat", "long")

dat <- read.table("~/Downloads/CAM_PROJ_GOS.csv", header=T, sep=",")
colnames(dat)[grep("LATITUDE", colnames(dat))] <- "lat"
colnames(dat)[grep("LONGITUDE", colnames(dat))] <- "long"



p1 <- p + geom_point(data = dat, aes(group = NULL), shape=20, 
                      color="#00880040") 
ggsave(p1, width=11.69, height=8.27, file="world_map_2.jpg") 




dat2 <- read.table("~/Downloads/CAM_PROJ_AntarcticaAquatic.csv", header=T, sep=",")
colnames(dat2)[grep("LATITUDE", colnames(dat2))] <- "lat"
colnames(dat2)[grep("LONGITUDE", colnames(dat2))] <- "long"
p2 <- p1 + geom_point(data = dat2, aes(group = NULL), shape=20, 
                      color="#88000040") 
ggsave(p2, width=11.69, height=8.27, file="world_map_3.jpg") 



dat3 <- read.table("~/Downloads/CAM_P_0001024.csv", header=T, sep=",")
colnames(dat3)[grep("LATITUDE", colnames(dat3))] <- "lat"
colnames(dat3)[grep("LONGITUDE", colnames(dat3))] <- "long"
p3 <- p2 + geom_point(data = dat3, aes(group = NULL), shape=20, 
                      color="#00008840") 
ggsave(p3, width=11.69, height=8.27, file="world_map_4.jpg") 
```

サンプリングポイントが重なっている部分は濃くなっています．

![world_map_4.jpg](https://qiita-image-store.s3.amazonaws.com/0/18504/587dac23-1f44-9422-afe7-a1769db70738.jpeg)


## 参考
- http://r.789695.n4.nabble.com/Projecting-data-on-a-world-map-using-long-lat-td3081298.html
- http://jeffreybreen.wordpress.com/tag/raster/
- 世界地図のshapeデータ: http://thematicmapping.org/downloads/world_borders.php
- プロジェクトについて: http://www.jcvi.org/cms/research/projects/gos/overview/
- プロジェクトのメタデータ: http://camera.calit2.net
MacでApache+PHPの環境を構築する


[MAMP](http://www.mamp.info/en/index.html)を使わず標準でインストールされているApacheとPHPを使い、複数のWEBサイトをローカルで開発できるようにします。

MAMPを使っている場合は、停止させること。

## Apacheの設定

複数のWEBサイトをローカルで開発できるようにするには、以下のファイルを設定する必要があります。

```
/etc/apache2/httpd.conf
/etc/hosts
/etc/apache2/extra/httpd-vhosts.conf
```

まずは、Apacheの起動です。

```
$ sudo /usr/sbin/apachectl start
```

### 1. /etc/apache2/httpd.confの設定

ApacheでPHPを有効にしつつ、複数サイトを動かすための設定を行います。

```
$ sudo vi /etc/apache2/httpd.conf
```

#### 1-1. PHP5モジュールを有効化する

コメントアウトを外してPHPを有効化します。

```
- #LoadModule php5_module libexec/apache2/libphp5.so
+ LoadModule php5_module libexec/apache2/libphp5.so
```

#### 1-2. バーチャルホスト設定を有効化する

コメントアウトを外し、後述するバーチャルホストの設定を有効化します。

```
# Virtual hosts
- #Include /private/etc/apache2/extra/httpd-vhosts.conf
+ Include /private/etc/apache2/extra/httpd-vhosts.conf
```

### 2. /etc/hostsの設定

特定のドメイン名は、ネットではなくローカルを参照するようにします。

#### 2-1. アクセスする時の名前を追記

```
$ sudo vi /etc/hosts
```

例えば以下のように書くと、sandbox.localhostでアクセスできるようになります。

```
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1   localhost
255.255.255.255 broadcasthost
::1             localhost
fe80::1%lo0 localhost
 
127.0.0.1 sandbox.localhost
```

#### 2-2. /etc/apache2/extra/httpd-vhosts.confの設定

バーチャルホストの設定です。

以下をhttpd-vhosts.confに追記し、サイトのパス（/Users/is0me/Dev/sandbox）を自分のパスに書き換えてください。

先ほど/etc/hostsに追記した名前をServerNameに指定します。

そして、参照先ディレクトリをDocumentRootに指定します。

```
<VirtualHost *:80>
    DocumentRoot "/Users/is0me/Dev/sandbox"
    ServerName sandbox.localhost
    ErrorLog "/private/var/log/apache2/sandbox-error_log"
    CustomLog "/private/var/log/apache2/sandbox-access_log" common
    DirectoryIndex index.php index.html
 
    <Directory "/Users/is0me/Dev/sandbox">
        Options Includes ExecCGI FollowSymLinks
        AllowOverride All    
        order deny,allow
        allow from All
    </Directory>
</VirtualHost>
```

## 確認

DocumentRootに指定したディレクトリにテストファイルを作ってください。

```
$ touch /Users/is0me/Dev/sandbox/index.php && echo '<?php phpinfo();' >> /Users/is0me/Dev/sandbox/index.php
```

### Apacheを再起動

```
$ sudo /usr/sbin/apachectl restart
```

[sandbox.localhost](http://sandbox.localhost/index.php)へアクセスして、phpinfoが表示されたら完了です。

### 完了後にサイトを追加する場合

/etc/hostsとhttpd-vhosts.confに追記しApacheを再起動してください。
MacにHomebrewをインストールする


##はじめに
パッケージ管理システムを混在させてはいけない。

MacにはHomebrew以外に、MacPorts、Finkといったパッケージ管理システムがある。

複数のパッケージ管理システムを混在させると、バージョン管理等が大変になるので止めるべき。

Homebrewを使うと、最初から入っているrubyやsvnとは違うディレクトリに新しくインストールされる。

コマンドの参照パスをそちらを優先するように設定することで、既存のソフトウェアに影響せず利用できる。

不要になればbrew uninstallで簡単に取り除ける。

## Homebrewのインストール

[Homebrew公式](http://brew.sh/)

Homebrewへのパスをbash_profileに追記する。

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

Homebrewでインストールされるソフトウェアの保存先が無ければ作成する。

```
$ sudo mkdir /usr/local/
```

Homebrewをインストールする。

```
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

先ほど編集したbash_profileを再読み込み。

```
$ source ~/.bash_profile
```

インストールできているか確認

```
$ brew -v
Homebrew 0.9.5
```