OmniAICreator/Qiita-1.07M huggingface dataset:
Cgroupで利用可能なサブシステムを調べる


```
$ cat /proc/cgroups
#subsys_name    hierarchy       num_cgroups     enabled
cpuset  0       1       1
cpu     0       1       1
cpuacct 0       1       1
memory  0       1       1
devices 0       1       1
freezer 0       1       1
net_cls 0       1       1
blkio   0       1       1
perf_event      0       1       1
$
```
Essential JavaScript Design Patterns For Beginners (作者：Addy Osmani)

#JavaScriptデザインパターン：The Observer Pattern
###JavaScriptの勉強にすごく役に立つので、JavaScriptを勉強したい人にはお勧めです。
**The Observer pattern**は状態が変化する方から「通知」をする仕組みを持ちます。これにより、観察者は常に観察しなければいけない状態から開放されます。
####※The Observer patternのサンプルソース####
```js:
function Observer(){  
    this.functions = [];  
}  
   
Observer.prototype = {  
    subscribe : function(fn) {  
        this.functions.push(fn);  
    },  
       
    unsubscribe : function(fn) {  
        this.functions = this.functions.filter(  
            function(el) {  
                if ( el !== fn ) {  
                    return el;  
                }  
            }  
        );  
    },  
      
    update : function(o, thisObj) {  
        var scope = thisObj || window;  
        this.functions.forEach(  
            function(el) {  
                el.call(scope, o);  
            }  
        );  
    }  
};  
```
####※The Observer patternのサンプルソースを呼び出してみる####
```js:
var console = {};
console.log = function(o){
    alert(o);
};

if (!Array.prototype.forEach) {
  Array.prototype.forEach = function(fun /*, thisp*/) {
    var len = this.length;
    if (typeof fun != "function")
      throw new TypeError();

    var thisp = arguments[1];
    for (var i = 0; i < len; i++) {
      if (i in this)
        fun.call(thisp, this[i], i, this);
    }
  };
}

if (!Array.prototype.filter){
  Array.prototype.filter = function(fun /*, thisp*/){
    var len = this.length;
    if (typeof fun != "function")
      throw new TypeError();

    var res = new Array();
    var thisp = arguments[1];
    for (var i = 0; i < len; i++){
      if (i in this){
        var val = this[i]; // fun が this を 変化させた場合に備えて
        if (fun.call(thisp, val, i, this))
          res.push(val);
      }
    }
    return res;
  };
}

var o = new Observer;
var f1 = function(data) {
    console.log('f1 received data: ' + data);
};

var f2 = function(data) {
    console.log('f2 received even more data: ' + data);
};

o.subscribe(f1);
o.subscribe(f2);

o.update('status Updated!');
```
###勉強・分析・まとめ：
####１.全体の構造について
ここで紹介した**The Observer Pattern**のサンプルソースを見たら、まず全体的に前紹介した**Constructors With Prototypes**を使って定義されていることが分かります。
　
####2.各メソッドについて
・**subscribe**メソッドはコールバック関数の形でそれぞれの観察者への通知処理を保存します。
　
・**unsubscribe**メソッドは通知対象外にする観察者の通知された時に実行する処理を削除します。これにより、該当観察者へ通知しなくなります。
　
・**update**メソッドは**subscribe**メソッドにより、this.functionsに保存した処理を順番に呼び出すことを通して自分の状態が変更したことを各観察者に通知します。
　
####3.補足：　
・**Array.prototype.filter**メソッドは与えられた関数によってテストを実行し、それに合格したすべての要素からなる新しい配列を生成します。
　
・**Array.prototype.forEach**メソッドは与えられた関数を、配列の各要素に対して一度ずつ実行します。
pull vs rebase


ボクはgit rebase派です。正確にはgit pull --rebase origin masterを実行します。git pull origin masterは使いません、なぜならコミットの順番がおかしくなるから。

参考：[git-pull、git-pull --rebaseをめぐる冒険＋コンフリクトした場合の作業 - satoko's blog - s21g](http://blog.s21g.com/articles/928)

下記は、masterからb1, b2, b3ブランチを作成し、b1 (hoge.txtを追加), b2 (fuga.txtを追加), b3 (piyo.txtを追加)でそれぞれ1度pushを行った後、b3をmasterにmergeし、b1ではgit pull origin masterを、b2ではgit pull --rebase origin masterを、実行したときのコミットログです。

* pullの場合

> Date: Sat Mar 3 00:44:07 2012 +0900
>
> Merge branch 'master' of github.com:Hiroyou/rebase into b1
>
> Date: Fri Mar 2 07:42:25 2012 -0800
>
> Merge pull request #4 from Hiroyou/b3
>
> added piyo.txt
>
> Date: Sat Mar 3 00:40:00 2012 +0900
>
> added piyo.txt
>
> Date: Sat Mar 3 00:25:27 2012 +0900
>
> added hoge.txt

* rebaseの場合

> Date: Sat Mar 3 00:34:41 2012 +0900
>
> added fuga.txt
>
> Date: Fri Mar 2 07:42:25 2012 -0800
>
> Merge pull request #4 from Hiroyou/b3
>
> added piyo.txt
>
> Date: Sat Mar 3 00:40:00 2012 +0900
>
> added piyo.txt

rebaseの場合はpiyo.txt→fuga.txtの順、pullの場合はhoge.txt→piyo.txtの順になっており、rebaseの方が直感的じゃないでしょうか。masterをメンテしている人からすると、なんで勝手にコミットの順変えるの？却下！って感じになると思います。

ただし、この後 b1, b2のそれぞれでpushを行うと、b1の場合はうまくいくのですが、b2の場合はnon-fast-forwardのエラーが出てしまいます。

これはrebaseによって、ローカルのb2とリモートのb2とがnon-fast-forwardな状態になってしまっているからです。最新のmasterからの差分を確認した上で問題がないようであればgit push -f origin masterと-f (強制)オプションを付けて実行すればpushすることはできます。

ただし、、、

ここでエラーメッセージに従ってgit pull origin b2とかしてしまうと、下記のようになってもうわけがわからなくなりますのでご注意を。b2をb2にmergeするだとか、同じコミットが2回入っていたりだとか、悲劇です。

> Date: Sat Mar 3 01:43:30 2012 +0900
>
> Merge branch 'b2' of github.com:Hiroyou/rebase into b2
>
> Date: Sat Mar 3 00:34:41 2012 +0900
>
> added fuga.txt
>
> Date: Fri Mar 2 07:42:25 2012 -0800
>
> Merge pull request #4 from Hiroyou/b3
>
> added piyo.txt
>
> Date: Sat Mar 3 00:40:00 2012 +0900
>
> added piyo.txt
>
> Date: Sat Mar 3 00:34:41 2012 +0900
>
> added fuga.txt

これがgit rebaseが危険だと言われる所以なのでしょうか？

でも大丈夫。こうなった場合でもgit reset b2^で元の状態に戻せます。その後、-fをつけてpushすれば万事OK

注）git show-branchとかgit guiでRepository > Visualize All Branch Historyとかを駆使して注意してやった方が良いです。あくまで自己責任でお願いします。
ux-trie を Homebrew でインストール

[ux-trie](http://code.google.com/p/ux-trie/) を Homebrew でインストールするために、Formula を書いてみた。

```ruby:ux.rb
require 'formula'

class Ux < Formula
  homepage 'http://code.google.com/p/ux-trie/'
  url 'http://ux-trie.googlecode.com/files/ux-0.1.8.tar.bz2'
  md5 'f21a67d2ee33d51f5cb92f6dd481e922'

  def install
    ENV.append 'CPPFLAGS', "-I/usr/include/malloc"

    system "./waf", "configure", "--prefix=#{prefix}"
    system "./waf", "build"
    system "./waf", "install"
  end
end
```
プロとはなにか？興味のある方は、ぜひご意見・ご感想をコメントしてください。

#プロとは何か？
#####このサイトの利用者は、技術以外の方もこれから増えると思いますが、
#####多分今現在９割以上技術者であると思います。
#####この中にはプロ的な存在の方もきっといっぱいいるでしょう。
#####技術が好きな人にとっては、やはりプロな人は憧れ的な存在だと思います。
#####「プロになりたいですか？」と聞かれたら、なれればなりたいなあと思う人は大勢いるでしょう。
　
#####「だれだれがJavaScriptのプロです」、「だれだれがJavaのプロです」、
#####「だれだれがデザインのプロです」…という言葉をどう理解されているか私は知りたくてたまりません。
#####このプロという言葉はとても曖昧です。100人いれば100通りの答えがあるでしょう。
#####私はたとえ100％明確できなくても、すこしだけでもそれを明確にできたら、
#####それなりの意義があると信じています。
　
#####正直私は好奇心が強くて、いろんな新しい技術やものに興味を持っています。
#####しかし、コンピュータに10年ぐらい触ってもまだプロになっていないです。
#####ちょっと悔しいです。その理由は下記のように反省しています。
#####・いろいろなものに興味があるのは良いが、深さが足りなかった
#####・プロとはどんなものなのか具体的なイメージを持たなかった
#####・勉強がすきだけど、復習が嫌いで、練習も足りなかった
#####・まとめることも足りなかった(まあ、これからQiitaでまとめていきます。)
　
#####私もプロになりたいです。
#####私はJavaScriptが好きなので、まず最初はJavaScriptのプロになりたいです。
#####そのため、最近「プロとは何か？」を考え始めました。
#####「こんなことどうでも良いではないですか？」と思う方はいるかもしれません。
#####しかし、私はようやくそれが分かる重要性を感じてきました。
#####なぜならば、「プロとは何か？」という定義を明確にしたら、
#####このプロを目指す目標がそのおかげて明確化になります。
　
#####私が思うJavaScrptのプロで例えたら、下記のようになります。
#####①JavaScriptのプロだから、JavaScriptの構文ももちろん分かるよね。(笑わないでね^^)
#####②JavaScriptのプロだから、JavaScriptの中にどれらのオブジェクトがあり、
#####　それぞれどのプロパティを持ち、どのメソッドを持っているかは言うまでもなく、
#####　それらの使い方も分かりますね。
#####③JavaScriptのプロだから、書いているソースはコーディング基準を守っているよね。
#####④JavaScriptのプロだから、書いているソースが拡張性が高いよね。
#####⑤JavaScriptのプロだから、デザインパターンが分かるよね。
#####⑥JavaScriptのプロだから、もちろん今流行っているjQueryを使い倒せるよね。
#####　また、そのソースを読めることができ、プラグインも作れるよね。
#####⑦JavaScriptのプロだから、UI関連もできるよね。
#####⑧JavaScriptのプロだから、今JavaScriptでTitaniumを使ってスマートフォンのAppが作れるから、
#####　もちろんできるよね。
#####⑨JavaScriptのプロだから、他の誰もできないことができるよね。
#####⑩JavaScriptのプロだから、誰でもできることを超速でできるよね。
#####⑪JavaScriptのプロだから、他の技術も短期間マスターできるよね。
#####　……
　
#####こうすると、自分が思っているプロのイメージが湧いてきます。
#####自分の思っているプロのことを①〜……まで実現できたら、自分の中で思っているプロになります。
#####そして、他の方が共通に思っているプロのできることができた時、
#####みんなに思われるプロになリます。
　
###みなさんも、ぜひあなたの思っているXXXプロのできることをコメントしてください。
　
#####＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝
#####好きな言葉：孫正義さんの「己の限界は己の考え方が決めてしまうものである。」
#####＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝
#####自分の理解：
#####成功した人は、最初はきっと己の考え方を変えて、己の限界を取払ったのでしょう。
#####最初から自分の可能性を否定したら、成功しません。
#####自分を肯定することによって、ようやく理想・目標を達成するために、
#####どうすべきかを考え始めるでしょう。考え方で人の可能性が違ってきますね。
#####＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝
nginxで443へのアクセスを443にスルーパス

VPSを使っているとかでproxyサーバー - appサーバー間の通信も必要に応じてセキュアにしておきたいときには、以下のような感じで。

```
upstream app-ssl {
  server app01:443;
  server app02:443;
  ...
}

server {
  listen 443;
  ...
  location / {
    proxy_pass https://app-ssl;
    ...
  }
}
```
os.chdir() とスコープ

Python でのカレントディレクトリの移動について。
説明のためカレントディレクトリは `C:\` とします。(お察しの通り Windows です)

```python3:hoge.py
import os

def hoge():
    print('hoge')
    os.chdir(r'C:\foo\bar')

print(os.getcwd())
hoge()
print(os.getcwd())
```

[`os.getcwd()`](http://www.python.jp/doc/release/library/os.html#os.getcwd "15.1. os — 雑多なオペレーティングシステムインタフェース &mdash; Python 2.7ja1 documentation") と [`os.chdir()`](http://www.python.jp/doc/release/library/os.html#os.chdir "15.1. os — 雑多なオペレーティングシステムインタフェース &mdash; Python 2.7ja1 documentation") の説明は割愛。
出力は以下の通り。

```pycon:Python3
>>> import hoge
C:\
hoge
C:\foo\bar
```

というわけでスコープを抜けてもカレントディレクトリは戻りませんでした。
個人的には呼び出した関数がなにしてるかなんて知らなくて済む方がいいと思うので、
元に戻してくれた方が親切な気がするんですが。
Apache Maven で Hadoop を管理する方法

プロジェクト管理ツールである [Apache Maven](http://maven.apache.org/) で Hadoop MapReduce プログラムを管理する方法について。今回作成したプロジェクトは [github](https://github.com/holidayworking/hadoop-maven-sample) で公開している。

## 手順

### 1. プロジェクトの作成
まずはじめにプロジェクトを作成する。

    $ mvn archetype:create -DgroupId=org.holidayworking -DartifactId=hadoop-maven-sample

引数で指定している `group-id` にはプロジェクトのルートパッケージ名、`artifactId` にはプロジェクト名を指定する。今回はルートパッケージ名を `org.holidayworking`、プロジェクト名を `hadoo-maven-sample` としている。

### 2. pom.xml の編集
ライブラリとして hadoop-core.jar が必要となる。今回は Cloudera から公開している[レポジトリ](https://ccp.cloudera.com/display/CDHDOC/Using+the+CDH3+Maven+Repository)から入手するようにする。

```xml:pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.holidayworking</groupId>
  <artifactId>hadoop-maven-sample</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>hadoop-maven-sample</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

   <repositories>
    <repository>
      <id>cloudera</id>
      <url>https://repository.cloudera.com/content/repositories/releases/</url>
    </repository>
  </repositories>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-core</artifactId>
      <version>0.20.2-cdh3u2</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
```

### 3. プログラミング
適当な処理をするプログラムを作成する。


### 4. プログラムの実行
jar を作成してから、hadoop コマンドで実行する。

    $ mvn clean package
    $ hadoop jar target/hadoop-maven-sample-1.0-SNAPSHOT.jar org.holidayworking.WordCount CHANGES.txt output

## 補足

### Eclipse にインポートするには？
Eclipse に下記のパッケージをインストールしておく。

* m2e - Maven Integration for Eclipse
* m2e - slf4j over logback loggin (Optional)

そして、プロジェクトのディレクトリで下記のコマンドを実行する。

    $ mvn eclipse:eclipse

すると、Eclipse で管理するのに必要なファイルが作成されるので、あとはインポートしてやればいい。
キーに空白が入る時のJsonReaderWriterFactoryの挙動

####生成されるXElementが変わるっぽい。

テストコードは以下。

``` JsonReaderWriterFactory.cs

using (var reader = JsonReaderWriterFactory.CreateJsonReader(Encoding.Unicode.GetBytes(json),
                        XmlDictionaryReaderQuotas.Max))
{
  var element = XElement.Load(reader);
}

```

---

####まずはキーに空白が入ってないパターン。

    {"hogehoge":[{"aaa": 123}, {"bbb": 234}]}

↓

    <root type="object">
      <hogehoge type="array">
        <item type="object">
          <aaa type="number">123</aaa>
        </item>
        <item type="object">
          <bbb type="number">234</bbb>
        </item>
      </hogehoge>
    </root>

---

####次にキーに空白が入ってるパターン。

    {"hoge hoge":[{"aaa": 123}, {"bbb": 234}]}

↓

    <root type="object">
      <a:item xmlns:a="item" item="hoge hoge" type="array">
        <item type="object">
          <aaa type="number">123</aaa>
       </item>
        <item type="object">
          <bbb type="number">234</bbb>
        </item>
      </a:item>
    </root>

---

原因はよくわかってないので知ってる方居らっしゃれば教えて頂ければ幸いです。
XMLとJSONの仕様の差異とかなのでしょうか。
CentOSにgangliaを入れてみる

rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm 
 *URLが無効な場合は以下
  rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm

yum -y install ganglia ganglia-gmetad ganglia-gmond ganglia-web httpd php
(トラックするサーバはgmondだけでよい)

confを編集する必要はあるが、稼動させるだけなら、、

# 監視サーバー
/etc/init.d/gmetad start
/etc/init.d/gmond start
/etc/init.d/httpd start

# トラッキングサーバ
/etc/init.d/gmond start

もろもろconfを編集後、
http://<監視サーバ>/gamglia にアクセスして画面が表示されれば成功
今いるgitレポジトリ内のファイルを一瞬で開くelisp

自分で書いたelispの中で一番重宝しているもの．
以下のコードを適当なところ(init.elなど)に貼れば，`C-;`でそのプロジェクト内のファイルをanything絞りこみして開ける．

```elisp:anything-git-project.el
(defun anything-c-sources-git-project-for (pwd)
  (loop for elt in
        '(("Modified files (%s)" . "--modified")
          ("Untracked files (%s)" . "--others --exclude-standard")
          ("All controlled files in this project (%s)" . ""))
        collect
        `((name . ,(format (car elt) pwd))
          (init . (lambda ()
                    (unless (and ,(string= (cdr elt) "") ;update candidate buffer every time except for that of all project files
                                 (anything-candidate-buffer))
                      (with-current-buffer
                          (anything-candidate-buffer 'global)
                        (insert
                         (shell-command-to-string
                          ,(format "git ls-files $(git rev-parse --show-cdup) %s"
                                   (cdr elt))))))))
          (candidates-in-buffer)
          (type . file))))

(defun anything-git-project ()
  (interactive)
  (let* ((pwd default-directory)
         (sources (anything-c-sources-git-project-for pwd)))
    (anything-other-buffer sources
     (format "*Anything git project in %s*" pwd))))
(define-key global-map (kbd "C-;") 'anything-git-project)
```

実行すると以下のようにそのレポジトリ内のファイルが一覧表示され，そこから絞り込んでファイルを開ける．

![](http://f.cl.ly/items/180j0j0u1C1b3H2G3v0h/Screen%20Shot%202012-03-02%20at%205.23.28%20PM.png)

編集してコミットしてないファイルやトラックされていないファイルは分けて表示してくれる．便利．
var_dumpの結果をファイルに保存

```php
<?php
function var_dump_file($var, $filename = './var_dump.txt'){
	if(file_exists($filename)){
		unlink($filename);
	}
	ob_start();
	var_dump($var);
	$out = ob_get_contents();
	ob_end_clean();
	file_put_contents($filename, $out, FILE_APPEND);

	return true;
}
?>
```
FaultしたデータがNSArrayController+NSTableViewで表示される問題への対処

フォールトしたデータがTableViewに現れることがあったのでそれを防ぐ方法．

NSArrayControllerとNSTableViewをcocoa bindで繋いで表示していて，データの編集や削除を繰り返すとフォールトしたデータがテーブルに表示されることがある．そのデータを操作(例えば編集など)して保存しようとしても実体がないため落ちてしまう．
この問題に対処するには，フォールトしている場合は全データがnullになることを利用して`- filterPredicate`を実装しデフォルトの検索条件で**nullになり得ないフィールドがnullになっていないかどうか**をチェックすればよい．

本来はFaultしたデータが表示されてしまう問題を解決すべきだけれど，原因不明…

```objc
- (NSPredicate *)filterPredicate {
  return [NSPredicate predicateWithFormat:@"some_required_field != nil"];
}
```
heroku create -s cedarでcedarがないと言われたときの対処法

####要約
下記がうまくいかない

```sh
$heroku create -s cedar
/Library/Ruby/Gems/1.8/gems/heroku-1.14.6/lib/heroku/commands/keys.rb:19:in `read': No such file or directory - cedar (Errno::ENOENT)
```
####解決策
herokuをgemからインストールしていたが、これをアンインストールしてherokuのサイトからツールをダウンロードしてインストール(gemのherokuの正体はよくわからないけど、rubyを使うことはなさそうなのでとりあえず)
####参考にしたサイト
[Play! frameworkで作ったアプリをHerokuで動かしてみた](http://d.hatena.ne.jp/nkmrshn/20110827/1314451643)
[Java がサポートされたクラウド環境 Heroku で Play!Scala を試す](http://techblogjp.appirio.com/2011/09/java-heroku-playscala.html)
####環境
scala:2.8.1
play:1.2.3(scala module:0.9.1)
ruby:1.8.7
git:1.7.7.4
mac osx:10.6.8
####経緯
```sh
$heroku auth:login
$play new foo --with scala
$cd foo
$play run
^C~ ...
$git init
$git add app conf lib public test
$git commit -m init
$heroku create -s cedar
Enter your Heroku credentials.
Email: foobar@hoge.com
Password: 
/Library/Ruby/Gems/1.8/gems/heroku-1.14.6/lib/heroku/commands/keys.rb:19:in `read': No such file or directory - cedar (Errno::ENOENT)
	from /Library/Ruby/Gems/1.8/gems/heroku-1.14.6/lib/heroku/commands/keys.rb:19:in `add'
	from /Library/Ruby/Gems/1.8/gems/heroku-1.14.6/lib/heroku/command.rb:48:in `send'
	from /Library/Ruby/Gems/1.8/gems/heroku-1.14.6/lib/heroku/command.rb:48:in `run_internal'
	from /Library/Ruby/Gems/1.8/gems/heroku-1.14.6/lib/heroku/commands/auth.rb:106:in `save_credentials'
	from /Library/Ruby/Gems/1.8/gems/heroku-1.14.6/lib/heroku/commands/auth.rb:47:in `get_credentials'
	from /Library/Ruby/Gems/1.8/gems/heroku-1.14.6/lib/heroku/commands/auth.rb:30:in `user'
	from /Library/Ruby/Gems/1.8/gems/heroku-1.14.6/lib/heroku/commands/auth.rb:10:in `init_heroku'
	from /Library/Ruby/Gems/1.8/gems/heroku-1.14.6/lib/heroku/commands/auth.rb:6:in `client'
	from /Library/Ruby/Gems/1.8/gems/heroku-1.14.6/lib/heroku/command.rb:48:in `send'
	from /Library/Ruby/Gems/1.8/gems/heroku-1.14.6/lib/heroku/command.rb:48:in `run_internal'
	from /Library/Ruby/Gems/1.8/gems/heroku-1.14.6/lib/heroku/commands/base.rb:18:in `heroku'
	from /Library/Ruby/Gems/1.8/gems/heroku-1.14.6/lib/heroku/commands/app.rb:27:in `create'
	from /Library/Ruby/Gems/1.8/gems/heroku-1.14.6/lib/heroku/command.rb:48:in `send'
	from /Library/Ruby/Gems/1.8/gems/heroku-1.14.6/lib/heroku/command.rb:48:in `run_internal'
	from /Library/Ruby/Gems/1.8/gems/heroku-1.14.6/lib/heroku/command.rb:20:in `run'
	from /Library/Ruby/Gems/1.8/gems/heroku-1.14.6/bin/heroku:13
	from /usr/bin/heroku:19:in `load'
	from /usr/bin/heroku:19
CPCファイル

```xml:cpc
Content-Type:multipart/mixed;boundary="THIS_STRING_SEPARATES"
Content-Length:1172
Content-Location:

--THIS_STRING_SEPARATES
Content-Type:application/X-arib-resourceList
Content-Location:resource.bin
Content-Length:48

  / Z  FL-NOENC.eri  ｻ U   ﾌRTP.nci
--THIS_STRING_SEPARATES
Content-Type:text/xml;charset="UTF-8"
Content-Location:FL-NOENC.eri
Content-Length:533

<?xml version="1.0" encoding="UTF-8"?>
<eri>
	<header>
		<date>20100125</date>
		<time>184137</time>
		<encryption>0</encryption>
	</header>
	<startup>
		<content_title>test</content_title>
		<duration>000000</duration>
		<start>http://192.168.2.5/0655_HD.m2ts</start>
	</startup>
	<es_info>
		<video_info resolution='1' coding ='mpeg2'/>
		<audio_info es_number='1' mode='stereo'>
			<audio_title>a</audio_title>
		</audio_info>
		<caption_info number='1' language='ja'/>
	</es_info>
</eri>

--THIS_STRING_SEPARATES
Content-Type:text/xml;charset="UTF-8"
Content-Location:RTP.nci
Content-Length:204

<?xml version="1.0" encoding="UTF-8"?>
<nci>
	<header>
		<date>20100125</date>
		<time>184137</time>
	</header>
	<protocol>http_tts</protocol>
	<http_server stalling='on' time_seek='on'/>
</nci>

--THIS_STRING_SEPARATES--
```
SCSSをCSSにして送るだけのサーバー

    require 'sass/plugin/rack'
    
    use Sass::Plugin::Rack
    run Rack::File.new('./public/')

SCSSファイルは ./public/stylesheets/scss 内に置きます（./public/stylesheets/scss/mysite.scss）。
CSSファイルは ./public/stylesheets 下に作られます（./public/stylesheets/mysite.css）。
開発環境では

    rack config.ru

ってやって、HTML（テンプレート）のCSSを読み込む所だけ、rackのポート番号をつけてやるといいと思います。
<link rel="stylesheet" type="text/css" href="stylesheets/mysite.css">

つうかPHPで作っててもSCSS使いたいんです。
自炊したマンガのPDFをiPad用に調整するシェルスクリプト

失敗したらリトライするバージョンを作成
https://github.com/toshinori/scripts/tree/master/pdf

```shrink_pdf.sh
#!/bin/sh

# use xpdf, pdftk, imagemagick, poppler

set -e

readonly TARGET=$1

if [ ! -e "${TARGET}" ];
then
	echo "${TARGET} not found."
	exit 1
fi

readonly DIR=`dirname "${TARGET}"`
readonly FILENAME=`basename "${TARGET}"`
readonly BASENAME=`basename "${TARGET}" ".pdf"`

cd "${DIR}"

readonly PRIFIX="work"

echo "${FILENAME}"
echo "PDF to PPM"

readonly RESOLUTION=150
`pdftoppm "${FILENAME}" -r ${RESOLUTION} "${PRIFIX}"`

echo "PPM to JPG"
readonly SIZE=1024
`mogrify -format jpg -geometry ${SIZE}x${SIZE} "${PRIFIX}*.ppm"`

echo "JPG to PDF"
`mogrify -format pdf "${PRIFIX}*.jpg"`

echo "backup target file."
`mv -f "${FILENAME}" "${FILENAME}.bak"`

echo "concat PDF."
`pdftk ${PRIFIX}*.pdf output "${FILENAME}"`

echo "dispose."
`rm -f *.ppm`
`rm -f *.jpg`
`rm -f ${PRIFIX}*.pdf`
```

使い方。

```sh
./shrink_pdf.sh "hoge.pdf"
```

まとめて実行する。
カレント配下のPDFを抽出してすでに処理済みのファイルはスキップ。

```shrink_all.sh
#!/bin/sh

set -e

BACKUP=""

find . -type f -name '*.pdf' | while read PDF 
do
	BACKUP="${PDF}.bak"
	
	if [ ! -e "${BACKUP}" ]; then
	    ./shrink.sh "${PDF}"
	fi

done
```
CentOS 5.5 32bitにgitoliteをインストール


#### Gitのインストール


**gitユーザの作成**
adduser --shell /bin/sh --home /home/git git


**git のインストール**
リポジトリの追加デフォルトのyumのリポジトリにはgitが含まれていないようなので、
リポジトリを追加します。

cd /usr/local/src
sudo wget http://dag.wieers.com/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
sudo wget http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt


**rpmパッケージのインストール**
sudo rpm -ivh rpmforge-release-0.3.6-1.el5.rf.i386.rpm



**yumコマンドで今追加したリポジトリを常時参照するのではなく必要な時だけ使うための設定**
sudo vim /etc/yum.repos.d/rpmforge.repo
enabled = 0


**gitインストール**
sudo yum -y --enablerepo=rpmforge install git





#### **gitoliteのインストール**



**重要：perlのバージョンをあげる**

※以下の処理は、perl -v がperl-5.12以上なら不要
※俺の環境はperl-5.8.1とかだったため、正常にインストールできなかった

wget http://search.cpan.org/CPAN/authors/id/J/JE/JESSE/perl-5.12.1.tar.gz 
tar zxvf perl-5.12.1.tar.gz
cd perl-5.12.1
make
make test
sudo make install

perl -v

**gitoliteをいよいよ入れちゃう**
git clone git://github.com/sitaramc/gitolite
gitolite/src/gl-system-install
export PATH=/home/git/bin:$PATH
ln -s .ssh/id_rsa.pub /home/git/GitlabAdmin.pub <-- gitoliteの識別名として使われるのでリンクで名前を付ける
su - git
cd ~gl-setup -q ~/GitlabAdmin.pub
Railsで時間を「◯分前」「◯時間前」にフォーマットする

```ruby:config/initializers/time_formats.rb
# coding: UTF-8
Time::DATE_FORMATS[:human] = lambda {|date|
  seconds = (Time.now - date).round;
  days    = seconds / (60 * 60 * 24); return "#{date.month}月#{date.day}日" if days > 0;
  hours   = seconds / (60 * 60);      return "#{hours}時間前" if hours > 0;
  minutes = seconds / 60;             return "#{minutes}分前" if minutes > 0;
  return "#{seconds}秒前"
}
```

```ruby
naotyA = User.create(:created_at => Time.now - 5.minutes)
naotyB = User.create(:created_at => Time.now - 5.hours)
naotyC = User.create(:created_at => Time.now - 5.days)
naotyA.created_at.to_s(:human) #=> "5分前"
naotyB.created_at.to_s(:human) #=> "5時間前"
naotyC.created_at.to_s(:human) #=> "2月25日"
```
カレントディレクトリをwebサーバで公開

ssh や rsync などができないけれど、それでも手っ取り早くファイルを共有して取得したいときなどに。
いまどきのUnixには大抵 Python は入ってるだろう。

```
$ python -m SimpleHTTPServer
```

ポートを指定する場合:

```
$ python -m SimpleHTTPServer 20000
```

あとは取得したい側から wget なり curl なり、好きなように。
#Oracle アプリが発行したクソ長いSQLを調べるには

以下のようなSQLでみつけられる

```sql
select t1.last_active_time,
 dbms_lob.getlength(t1.sql_fulltext),
 dbms_lob.substr(t1.sql_fulltext,3000,1),
 dbms_lob.substr(t1.sql_fulltext,3000,3001),
 dbms_lob.substr(t1.sql_fulltext,3000,6001),
 t1.sql_text,t1.sql_fulltext,t1.* 
from
 v$sqlarea t1
where
 t1.parsing_schema_name ='スキーマ名'
  and
 t1.module ='exe名'
order by
 t1.last_active_time desc
Windows7でFlash CS5のメモリを増やす方法

１．Flash CS5を起動してたら終了

２．ユーザーディレクトリ/AppData/Local/Adobe/Flash CS5/ja_JP/Configuration/ActionScript 3.0/jvm.ini をエディタでオープン

３．-Xmx256m という一文を -Xmx512m とかに変更

他のバージョンやOSのバージョンが違うと場所が若干変わりますが、同じような場所にある、はず。。
CakePHPでデフォルトページの設定

初期状態でトップページにアクセスした時に表示されるページ。
/lib/Cake/View/Pages/home.ctp

この設定箇所は、/app/config/routes.php の下記の記述。
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));

この設定を任意のページに変更すれば表示画面が変わる。


また、ビューとレイアウトを変更するのはチェックページにもあるように、
以下の方法でも可能。

１．app/View/Pages/ に home.ctp を作って設置。
(To change the content of this page, create: APP/View/Pages/home.ctp.)
※ページ内のコンテンツ

２．app/View/Layouts/ に default.ctp を作って設置。
(To change its layout, create: APP/View/Layouts/default.ctp.)
※ヘッダーとフッターの部分


はじめてCakePHP使った時に少し迷ったので共有します。
パイプのひとつ前の終了ステータスを取得することはできますか?

Linux のパイプラインで, ひとつ前のコマンドの終了ステータスを取得することってできるんでしょうか.

例えば, 以下のような場合, ruby スクリプトが 0 以外のステータスで終了した場合, それを通知する, なんてことがやりたいです.

```
$ ruby script.rb | notify_if_error
```

できなければ, こういう方法もあるとは思いますが...

```
$ notify_if_error --cmd "ruby script.rb"
```

でも前者の方がわかりやすいように思います.
どなたか教えてください.
scss内でimageを参照したいとき

background-imageで画像を参照したいとき、sass-railsが提供するヘルパーを使うと簡単に書ける。

```scss:app/assets/stylesheets/application.css.scss
span.naoty {
  background-image: image-url("naoty.png") //=> url(/assets/naoty.png)
  // or backgroud-image: url(image-path("naoty.png"))
}
```
Hadoop で日本語のワードカウント

形態素解析エンジンとして [Gomoku](https://github.com/sile/gomoku) を使っている。

```java:WordCount.java
package org.holidayworking.hadoop.japanese;

import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

public class WordCount extends Configured implements Tool {

    @Override
    public int run(String[] args) throws Exception {
        if (args.length != 2) {
            System.err.println("Usage: WordCount <input path> <output path>");
            return -1;
        }

        Job job = new Job(getConf(), "WordCount");
        job.setJarByClass(WordCount.class);

        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));

        job.setMapperClass(WordCountMapper.class);
        job.setReducerClass(WordCountReducer.class);

        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);

        job.setOutputKeyClass(Text.class);
        job.setOutputKeyClass(IntWritable.class);

        return job.waitForCompletion(true) ? 0 : 1;
    }

    public static void main(String[] args) throws Exception {
        System.exit(ToolRunner.run(new WordCount(), args));
    }

}
```

```java:WordCountMapper.java
package org.holidayworking.hadoop.japanese;

import java.io.IOException;

import net.reduls.gomoku.Morpheme;
import net.reduls.gomoku.Tagger;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        String line = value.toString();
        for (Morpheme m : Tagger.parse(line)) {
            if (m.feature.startsWith("名詞")) {
                context.write(new Text(m.surface), new IntWritable(1));
            }
        }
    }

}
```

```java:WordCountReducer.java
package org.holidayworking.hadoop.japanese;

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {

    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        int count = 0;
        for (IntWritable value : values) {
            count += value.get();
        }
        context.write(key, new IntWritable(count));
    }

}
```
Away3d 4.0 beta Planeの頂点をランダムに移動し、地面ぽくする

```actionscript3:RandomMoveVertex.as
/**
 * copyright (c) 2012 www.romatica.com
 * @auther itoz
 */
package
{
    import away3d.containers.View3D;
    import away3d.core.base.SubGeometry;
    import away3d.debug.AwayStats;
    import away3d.entities.Mesh;
    import away3d.materials.ColorMaterial;
    import away3d.primitives.PlaneGeometry;
    import away3d.primitives.PrimitiveBase;

    import flash.events.Event;
    import flash.geom.Vector3D;
    import flash.utils.getTimer;

    [SWF(backgroundColor="#FFFFFF", frameRate="60", width="800", height="600")]
    /**
     * Planeの頂点をランダムに移動し、地面ぽくする
     * 動作サンプル
     * @see http://dl.dropbox.com/u/958512/sample/away3d4/randomMoveVertex/index.html
     */
    public class RandomMoveVertex extends View3D
    {
        private static const ZERO : Vector3D = new Vector3D(0, 0, 0);
        private var _planeMat : ColorMaterial;
        private var _planeGeo : PrimitiveBase;
        private var _plane : Mesh;

        public function RandomMoveVertex()
        {
            antiAlias = 0;
            backgroundColor = 0xa1c3c0;

            // ----------------------------------
            // プレーン
            // ----------------------------------
            _planeMat = new ColorMaterial(0x567524, 0.5);
            _planeGeo = new PlaneGeometry(1024, 1024, 32, 32);
            _plane = new Mesh(_planeGeo, _planeMat);
            scene.addChild(_plane);

            // ----------------------------------
            // 頂点をランダムに移動
            // ----------------------------------
            var subgeos : Vector.<SubGeometry> = _plane.geometry.subGeometries ;
            var  len : int = subgeos.length;
            for (var j : int = 0; j < len; j++) {
                var geo : SubGeometry = subgeos[j] as SubGeometry;
                var vlen : int = geo.vertexData.length;
                for (var k : int = 0; k < vlen; k ++) {
                    geo.vertexData[k] += Math.random() * 50 - 25;
                }
            }

            camera.y = 500;
            addEventListener(Event.ENTER_FRAME, update);
            addChild(new AwayStats());
        }

        private function update(event : Event) : void
        {
            camera.x = Math.sin(getTimer()/1000) *1000;
            camera.z = Math.cos(getTimer()/1000) *1000;
            camera.lookAt(ZERO);
            render();
        }
    }
}

```
php + imagick でチェック柄の画像を生成する

おしゃれなかんじを演出したい気持ちになったので、さくっとそれっぽいコードを書いてみました。
これで作った画像を background に指定すると、こういう感じになります。
https://burberryplaid-php.herokuapp.com/

この `index.html` では `background: url(image.php) fixed` という指定をしてあります。

で、その `image.php` の中身はこんなかんじです。

```php:image.php
<?php

require __DIR__ . '/../vendor/autoload.php';

$colors = [
  '#CBFF8C',
  '#E3E36A',
  '#C16200',
  '#881600',
  '#4E0110',
];

shuffle($colors);

use BurberryPlaid\Image;

$generator = new Image();

try {
  $image = $generator->generate(100, 100, array_slice($colors, 0 , 3));

  header('Content-type: image/png');
  echo $image;

  $image->destroy();
} catch (Exception $e) {
  echo $e->getMessage();
}
```

で、実際に画像を生成しているのは~~こんなんです。~~ GitHub に置いておきました。
https://github.com/riaf/burberryplaid-php

- - -

参考記事: http://colorburned.com/2008/11/create_a_burberry_style_plaid.html
Away3D 4.0 beta カメラの注視点を指定

```actionscript3:CameraLookAt.as
/**
 * copyright (c) 2012 www.romatica.com
 * @auther itoz
 */
package
{
    import flash.geom.Vector3D;

    import away3d.debug.AwayStats;
    import away3d.containers.View3D;
    import away3d.entities.Mesh;
    import away3d.materials.ColorMaterial;
    import away3d.primitives.CubeGeometry;

    import flash.events.Event;
    import flash.utils.getTimer;

    [SWF(backgroundColor="#FFFFFF", frameRate="60", width="800", height="600")]
    /**
     * Camera3Dの注視点を指定
     * 動作サンプル
     * @see http://dl.dropbox.com/u/958512/sample/away3d4/cameralookat/index.html
     */
    public class CameraLookAt extends View3D
    {
        private static var ZERO : Vector3D = new Vector3D(0, 0, 0);
        private var _cubes : Array;

        public function CameraLookAt()
        {
            antiAlias = 4;
            backgroundColor = 0xa1c3c0;

            _cubes = [];

            var material : ColorMaterial = new ColorMaterial(0x56a0b6);
            var max : int = 10;
            for (var i : int = 0; i < max; i++) {
                var cubeGeo : CubeGeometry = new CubeGeometry(256, 256, 256, 4, 4, 4);
                var cube : Mesh = new Mesh(cubeGeo, material);
                var xx : int = Math.cos(360 / max * i * ( Math.PI / 180)) * 1000;
                var yy : int = Math.sin(360 / max * i * (Math.PI / 180)) * 1000;
                cube.position = new Vector3D(xx, yy, 0);
                _cubes.push(cube);
                scene.addChild(cube);
            }
            addEventListener(Event.ENTER_FRAME, update);

            addChild(new AwayStats());
        }

        private function update(event : Event) : void
        {
            // カメラを移動し、注視点を原点に
            var t : Number = getTimer();
            _camera.x = int(Math.cos(t / 1000) * 1000);
            _camera.y = int(Math.sin(t / 1000) * 1000);
            _camera.lookAt(ZERO);

            render();
        }
    }
}
Away3D 4.0 beta 立方体をくるくる回す、ベーシックサンプル。

```actionscript3:BasicSample.as

/**
 * copyright (c) 2012 itoz.jp
 * @auther itoz
 */
package
{
    import away3d.cameras.Camera3D;
    import away3d.containers.Scene3D;
    import away3d.containers.View3D;
    import away3d.entities.Mesh;
    import away3d.materials.ColorMaterial;
    import away3d.primitives.CubeGeometry;

    import flash.display.Sprite;
    import flash.events.Event;

    [SWF(backgroundColor="#FFFFFF", frameRate="60", width="800", height="600")]
    /**
     * Away3D 4.0 beta 立方体をくるくる回す、ベーシックサンプル。
     * 動作サンプル
     * @see http://dl.dropbox.com/u/958512/sample/away3d4/basicSample/index.html
     */
    public class BasicSample extends Sprite
    {
        private var _view : View3D;
        private var _scene : Scene3D;
        private var _camera : Camera3D;
        private var _cubeGeo : CubeGeometry;
        private var _cube : Mesh;

        public function BasicSample()
        {
            _view = addChild(new View3D()) as View3D;
            _view.antiAlias = 4;
            _view.backgroundColor = 0xa1c3c0;

            _scene = _view.scene;
            _camera = _view.camera;

             var material : ColorMaterial = new ColorMaterial( 0x56a0b6);
            _cubeGeo = new CubeGeometry(256, 256, 256, 4, 4, 4);
            _cube = new Mesh(_cubeGeo, material);
            _scene.addChild(_cube);
            addEventListener(Event.ENTER_FRAME, update);
        }

        private function update(event : Event) : void
        {
          
            _cube.rotationY += 4;
             _view.render();
        }
    }
}

```
Away3D 4.0 beta のプリミティブの中心点をずらす

```actionscript3:GeometryApplyTransformation.as

/**
 * copyright (c) 2012 www.romatica.com
 * @auther itoz
 */
package 
{
    import away3d.containers.View3D;
    import away3d.entities.Mesh;
    import away3d.materials.TextureMaterial;
    import away3d.primitives.CubeGeometry;
    import away3d.textures.BitmapTexture;

    import flash.display.BitmapData;
    import flash.events.Event;
    import flash.geom.Matrix3D;

    [SWF(width='800',height='600',frameRate='60',backgroundColor='#000000')]
    /**
     * Away3D 4.0 beta のプリミティブの中心点をずらす
    * 動作サンプル
    * @see http://dl.dropbox.com/u/958512/sample/away3d4/applyTransformation/index.html
    *    
    * pivotPoint movePivot という中心点を操作する？とおもわれる物があるが、現時点(2012.2.29)はまだ動かないぽい?
    * http://away3d.com/forum/viewthread/124/
    * http://away3d.com/forum/viewthread/1680/
    * のでapplyTransfomationを使ってみた
     */
    public class GeometryApplyTransformation extends View3D
    {
        private var _cubeData : CubeGeometry;
        private var _cube : Mesh;
        private var _mat3d : Matrix3D;

        public function Main()
        {
            backgroundColor = 0xc1c4c1;
            antiAlias = 4;
            var material : TextureMaterial = new TextureMaterial(new BitmapTexture(new BitmapData(32, 32, false, 0x56a0b6)));
            _cubeData = new CubeGeometry(100, 400, 100, 4, 4, 4);
            _cube = new Mesh(_cubeData, material);
            _mat3d = new Matrix3D();
            _mat3d.appendTranslation(0, -200, 0);
            _cube.geometry.applyTransformation(_mat3d);
            scene.addChild(_cube);
            addEventListener(Event.ENTER_FRAME, onUpdate);
        }

        private function onUpdate(event : Event) : void
        {
            _cube.rotationX += 4;
            render();
        }
    }
}
```

```html：preview.html

params.wmode = "direct";
```
Away3D 4.0 beta のプリミティブの作り方

var material:TextureMaterial = new TextureMaterial(new BitmapTexture(new BitmapData(32,32)));
var cube:CubeGeometry = new CubeGeometry(30, 30, 30, 1, 1, 1, false);
var mesh:Mesh = new Mesh(cube, material);
scene.addChild(mesh);
Twipをピクセルに変換する

Twipをピクセルに変換する方法は以下の通りです。

```vb
Imports System.Runtime.CompilerServices

''X-coordinate
Public Function Twips2PixelsX(ByRef grph As Graphics, ByVal twipsX As Integer) As Double
  Dim LOGPIXELSX As Int32 = 88
  Dim hdc As IntPtr = grph.GetHdc
  Dim pixelsX As Int32 = GetDeviceCaps(hdc, LOGPIXELSX)
  grph.ReleaseHdc(hdc)

  Return twipsX * pixelsX / 1440
End Function

''Y-X-coordinate
Public Function Twips2PixelsY(ByRef grph As Graphics, ByVal twipsY As Integer) As Double
  Dim LOGPIXELSY As Int32 = 90
  Dim hdc As IntPtr = grph.GetHdc
  Dim pixelsY As Int32 = GetDeviceCaps(hdc, LOGPIXELSY)
  grph.ReleaseHdc(hdc)

  Return twipsY * pixelsY / 1440
End Function

''Get device information
<System.Runtime.InteropServices.DllImport("gdi32.dll", CharSet:=Runtime.InteropServices.CharSet.Auto)> _
Private Function GetDeviceCaps(ByVal Phdc As IntPtr, ByVal cIndex As Int32) As Int32
End Function
```
SELECTクエリ実行と結果確認がお手軽な2行のPHPデバッグコード

開発中、MySQLデータベースを更新したあと、更新結果がどう反映されたかすぐ確認したいことがある。
PDOとかmysql_query()とかでSELECTを出して確認してもいいけどforeachで回したり整形したりするのが面倒。
mysqlコマンドが使える環境なら、exec('mysql…')したほうが楽だし見やすい。


```php
<?php
exec('mysql -t -u ユーザ名 -pパスワード データベース名 -e "SELECT …" 2>&1', $output);
var_dump(PHP_EOL.implode(PHP_EOL, $output));
```

* -t: 表形式で出力する。これを指定することで罫線がつき見やすくなります。
* -e: ```-e "SQL"``` でクエリをmysqlコマンドで直接叩けます。


```php:MAMPでやるときの例
<?php
exec('/Applications/MAMP/Library/bin/mysql -t -u root -proot foo -e "SELECT * FROM table1 WHERE id = '.$id.'" 2>&1', $output);
var_dump(PHP_EOL.implode(PHP_EOL, $output));
```
leiningenで標準入力を扱う場合

これまたはまったのでメモ。leiningenは大変便利ですが、stdinを扱うような場合に注意が必要です。特に何も考えずにstdinを扱うようなプログラムを`lein run`するとずっと入力待ちになってしまいます。公式のページのほうにも

    There's a problem in the library that Leiningen uses to spawn new processes that blocks access to console input. This means that functions like read-line will not work as expected in most contexts, though the repl task necessarily includes a workaround.

とあるのにしばらくしてから気づきましたorz。解決方法としては`lein trampoline run`などとやればよいようです。プログラム側への変更は特に必要ないっぽい。
recordやprotocolを使った場合には再コンパイルが必要

[lein](https://github.com/technomancy/leiningen)を使っていることを想定。`defstruct`などと違って`defrecord`はJavaのクラスを、`defprotocol`はJavaのインターフェイスを実際に生成してくれます。type hintsを与えたいときなどなどに便利ですが、落とし穴があります(はまった)。

`lein run`や`lein test`を走らせるときに`defrecord`などは自分でコンパイルしないと修正が反映されません。なので、`defrecord`などを含むときには`lein compile && lein run`とやるかclassesのディレクトリを削除する必要がありそうです。

nsに`:reload`とかを付けると解決されそう(?)ですが、ソースコードのほうは汚したくないので。。。
共有ライブラリのビルド

SConsで(関数「func」を内包した)共有ライブラリをビルドする

```
$ ls
SConstruct  func.c  func.h
$
```

```c:func.c
#include <stdio.h>
#include "func.h"
void func(void)
{
    printf("%s called\n", __FUNCTION__);
}
```

```c:func.h
#ifndef FUNC_H
#define FUNC_H
void func(void);
#endif // FUNC_H
```

```python:SConstruct
target  = 'simple'
sources = ['func.c']
env = Environment(CPPFLAGS=['-Wall', '-O2'])
env.SharedLibrary(target, sources)
```

```
$ scons -Q
gcc -o func.os -c -fPIC -Wall -O2 func.c
gcc -o libsimple.so -shared func.os
$ ls
SConstruct  func.c  func.h  func.os  libsimple.so
$
```
静的ライブラリのビルド


SConsで(関数「func」を内包した)静的ライブラリをビルドする

```
$ ls
SConstruct  func.c  func.h
$
```

```c:func.c
#include <stdio.h>
#include "func.h"
void func(void)
{
    printf("%s called\n", __FUNCTION__);
}
```

```c:func.h
#ifndef FUNC_H
#define FUNC_H
void func(void);
#endif // FUNC_H
```

```python:SConstruct
target  = 'simple'
sources = ['func.c']
env = Environment(CPPFLAGS=['-Wall', '-O2'])
env.StaticLibrary(target, sources)
```

```
$ scons -Q
gcc -o func.o -c -Wall -O2 func.c
ar rc libsimple.a func.o
ranlib libsimple.a
$ ls
SConstruct  func.c  func.h  func.o  libsimple.a
$
```
続・make_array

要素数や型を推論させます．
いずれも

```cpp:main.cpp

#include "make_array.hpp"

int main()
{
    auto arr = make_array(1, 2, 3, 4); // => arr は std::array<int, 4>
}

```

というふうに使えます．

```cpp:make_array.hpp

#include <array>

template <class T>
inline std::array<T, 0> make_array()
{
    return std::array<T, 0>{{}};
}

template <
            class... Args, 
            class Result = std::array<
                                        typename std::decay<typename std::common_type<Args...>::type>::type,
                                        sizeof...(Args)
                                     >
         >
inline Result make_array(Args &&... args)
{
    return Result{{ std::forward<Args>(args)... }};
}

```

std::common_type を用いて型を推定．左辺値参照に推定されてしまう可能性があるので，std::decayを噛ましています．

```cpp:make_array.hpp

#include <array>

template <class T>
inline std::array<T, 0> make_array2()
{
    return std::array<T, 0>{{}};
}

template <
            class First,
            class... Rest,
            class Result = std::array<First, sizeof...(Rest)+1>
         >
inline Result make_array2(First && f, Rest &&... rest)
{
    return Result{{ std::forward<First>(f), std::forward<Rest>(rest)... }};
}

```

最初の要素の型をそのまま std::array の型として使います．
Titanium Mobile Android開発：実機に転送する。

###ずっと探してました。ようやく自分の持っている[Android] Sony Tablet S をmacから開発可能にしました。同じ悩みを持った人のために方法を公開します。

###前提：
１．Android　SDK既にインストール済み
（未インストールの場合http://dl.google.com/android/android-sdk_r16-macosx.zip
からダウンロードして、インストールしてください。）
２．MacBook Air
３．開発ツールはTitanium
４．Android実機（私の場合は Sony Tablet Sであるが、他のメーカのAndroidも同じであるはず）
***
###手順：
（１）「USB Vendor ID」入れた「/Users/myacountname/.android/adb_usb.ini」ファイルの作成
（「USB Vendor ID」はメーカ別に振られています。最後の補足の部分をご覧ください。私が持っているのはSonyの端末なので、0x054cとなります。）

`cd ~/.android`
`echo 0x054c > adb_usb.ini`

（２） adb_usb.ini を下のパスに存在することと「USB Vendor ID」が設定していることを確認してください。
（Sonyの場合0x054cが表示されたことを確認します。）

`cat /Users/myacountname/.android/adb_usb.ini `


（３）adbサーバーをリスタート
`./adb kill-server`
`./adb start-server`

（４）USBケーブルで実機をつなぐ

（５）Android側の設定
　①設定→アプリケーション→「提供元不明のアプリ」をチェックする
　②設定→アプリケーション→開発→「USBデバッグ」をチェックする

（６）Titaniumのプロジェクトを右クリックし、Install to Android Deviceをクリックします。

（７）AppsのところにAppがインストールされたことを確認します。

***
####補足：上記0x054cの「054c」は下記のURLの中のUSB Vendor IDsで確認したのです、
私と使っているAndroidが違う場合、下記のURLで自分の持っている端末のメーカ（Companyに該当する）部分を探してください。　例：Dellの場合、上記「0x054c」を「0x413C」にすれば良いです。
http://developer.android.com/intl/ja/guide/developing/device.html


一応他のサイトへ行きたくない人のために、見栄えがよくないが必要な情報を下記にリストアップしました。
**USB Vendor IDs：**
***
**Company**　　**USB Vendor ID**
***
Acer	　　　　0502
***
ASUS	　　　　0B05
***
Dell	　　　　413C
***
Foxconn	　　　　0489
***
Fujitsu	　　　　04C5
***
Fujitsu Toshiba	04C5
***
Garmin-Asus	091E
***
Google	　　　　18D1
***
Hisense	　　　　109B
***
HTC	　　　　0BB4
***
Huawei	　　　　12D1
***
K-Touch	　　　　24E3
***
KT Tech	　　　　2116
***
Kyocera	　　　　0482
***
Lenevo	　　　　17EF
***
LG	　　　　1004
***
Motorola	22B8
***
NEC	　　　　0409
***
Nook	　　　　2080
***
Nvidia	　　　　0955
***
OTGV	　　　　2257
***
Pantech	　　　　10A9
***
Pegatron	1D4D
***
Philips	　　　　0471
***
PMC-Sierra	04DA
***
Qualcomm	05C6
***
SK Telesys	1F53
***
Samsung	　　　　04E8
***
Sharp	　　　　04DD
***
Sony	　　　　054C
***
Sony Ericsson	0FCE
***
Teleepoch	2340
***
Toshiba	　　　　0930
***
ZTE	　　　　19D2
***
プログラムを実行する際にOpenMPの並列数を設定する


環境変数OMP_NUM_THREADSを使用する。

```
$ OMP_NUM_THREADS=1 convert -format jpg in.jpg out.jpg
```

OMP_NUM_THREADS > 1だとOpenMP有効にしたImageMagickがときどきSEGVするのはどうにかならんのか。
Capistrano の変数を Unicorn サーバの設定で利用する

Capistarano で環境変数を設定し``config/unicorn.rb``で参照すればいい

``` ruby:config/deploy.rb
set :user, do # ユーザ名を入力させる
  Capistrano::CLI.ui.ask("User: ") 
end
set :application, "ikemen"
default_environment['DEPLOY_USER'] = user
default_environment['DEPLOY_APP_NAME'] = application
```

``` ruby:config/unicorn.rb
user = ENV['DEPLOY_USER'] || 'username' # ENV['USER'] でも取れたりする...
application = ENV['DEPLOY_APP_NAME'] || 'busaiku'

root_path = "/var/www/users/#{user}/#{application}"
listen "/tmp/#{user}_#{application}_unicorn.sock"

stderr_path "#{root_path}/shared/log/unicorn.log"
stdout_path "#{root_path}/shared/log/unicorn.log"

worker_processes 2
pid "#{root_path}/shared/pids/unicorn.pid"
working_directory "#{root_path}/current"

```

こんな感じでサーバ側に値を渡してやる
ディスクの書き込み速度を調べる

大雑把に。

```
$ dd bs=1M count=100 if=/dev/zero of=/home/ore/disktest oflag=direct
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.06987 seconds, 1.5 GB/s
```

上記の場合、NUL(0x00)で埋められた1MBのデータを100回 /home/ore/disktest に書き込む。最後の "1.5 GB/s" がその結果の転送速度なので、たとえば複数のマシンで速度を比較したいときはこれを見るといいでしょう。
Eclipseのコンソール文字化け解決法。

Eclipseのコンソールに標準出力すると文字化けするのでその解決法。

Eclipseディレクトリ直下のeclipse.iniファイルに下記の一文を追加し、
 = の後に指定の文字コードを記述する。
-Dfile.encoding=utf-8
Sandcastle Help File Builderの設定メモ


1.ShowMissingNamespacesをFalse
2.DocumentInheritedFrameworkMembersをFalse(ビルドが早くなる)
3.Languageを日本語
4.HelpTitleにそれなりのタイトルを設定
5.1度ビルドしたら再起動するとビルドに失敗する可能性が減る
Git の空ディレクトリ登録してくれない問題への対処方法

Git は、空ディレクトリに対して `git add` しても、インデックスしてくれない。

```sh
$ find . -type d -name .git -prune -o -type d -empty -exec touch {}/.gitignore
```

これで、全ての空ディレクトリに `.gitignore` 作ってしまい、空ディレクトリじゃなくなればいい。
Capistranoでassets:precompileとbundle:installの順序が逆？

Rails3.1をCapistrano(2.11.2)でデプロイしようとして、assets:precompileをデプロイ先で動かそうと

```ruby:Capfile
load 'deploy/assets'
```

を有効にしたところエラーとなった。bundle:installの前に bundle exec rake assets:precompileが動いているように見えるため、下記をdeploy.rbに書いたら解決した

```ruby:deploy.rb
before "deploy:assets:precompile", "bundle:install"
```

capistrano(2.11.2)のバグと見た
doctest.testfile()を使ってドキュメント兼テストコードを作成

doctest.testfile()が便利そうな気がしたのでメモ

dcotest.testmod()はソースコード中のコメントにある例をテストしていて，
これも便利だと思っていたけど，コメントが多くなってしまいがち


```example.txt
Example of hoge
 python hoge.py -v
=========================

adder() receives two arguments and returns
the sum of them

 >>> from hoge import adder
 >>> adder(1, 2)
 3
 >>> adder('doc', 'test')
 'doctest'
```

```python:hoge.py
import doctest

def adder(a, b):
    return a + b

if __name__ == "__main__":
    doctest.testfile('./example.txt')
```
CSS内で変数を使う方法

style要素も要素だから追加削除したりid振ったりして中身を書き換えたりできる(もちろんscriptも)
CSSで変数使いたくてたまらない場面が多い人にはうれしい(CSS切り替えデザインを愛してる人など)
使いどころはゲームに多そう
\#id:rev84とjsとcssで遊んでいたら発見した

```javascript:var_css.js
//Qiita内でデバッガに1行づつ貼りつけるとQiitaのロゴが移動する
var x = 1000;
$("head").append("<style id='style_id'>#siteid{margin-left:" + x + "px;}</style>");
var y = 5;
$("#style_id").html("#siteid{margin-top:" + y + "px;}");
$("#style_id").remove();
Capistrano でタスクを超えて変数を保持する方法

``` ruby:deploy.rb
self[:variable:] = variable
```
カピストラノさん難しいよカピストラノさん

ちなみに
``current_path`` ``shared_path`` ``release_path`` は `` deploy_to`` を遅延評価しパスを作成しているので

```ruby:deploy.rb
self[:is_development] = false

set user, "eccyan"
set application, "ikemen"

set deploy_to, do
  if self[:is_development]
    "/var/www/http/#{user}/#{application}"
  else
    "/var/www/http/#{application}"
  end
end

task :development do
  self[:is_development] = true
  puts current_path #=> "/var/www/http/eccyan/ikemen"
end

task :production do
  self[:is_development] = false
  puts current_path #=> "/var/www/http/ikemen"
end

```

みたいな事が出来る。
コンスセルや再帰を使わずに直積

結論：スタックを使え。
ただし、Stack&lt;T&gt;はミュータブルコレクションなので、状況によっては使いにくい。
下のコードだと、IEnumerable&lt;T&gt;にPushしている拡張メソッド。
これはPushの結果が別インスタンスになることが重要なので、本当はコンスセルのほうが都合がいい。

```csharp:Program.cs
using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        var upperOrLower = "ABCD"
            .Select(x => new[] { char.ToUpper(x), char.ToLower(x) }.AsEnumerable())
            .DirectProduct(x => new string(x.ToArray()));

        foreach (var s in upperOrLower)
        {
            Console.WriteLine(s);
        }
    }
}

public static class EnumerableEx
{
    public static IEnumerable<TResult> DirectProduct<T, TResult>(
        this IEnumerable<IEnumerable<T>> source,
        Func<IEnumerable<T>, TResult> collector)
    {
        return source
            .FoldRight(
                Enumerable.Repeat(Enumerable.Empty<T>(), 1),
                (p, q) => p.SelectMany(x => q.Select(y => y.Push(x))))
            .Select(x => collector(x));
    }

    public static TAccumulate FoldRight<T, TAccumulate>(
        this IEnumerable<T> source,
        TAccumulate seed,
        Func<T, TAccumulate, TAccumulate> func)
    {
        Stack<T> stack = new Stack<T>();
        foreach (T item in source) stack.Push(item);
        while (stack.Count > 0) seed = func(stack.Pop(), seed);
        return seed;
    }

    public static IEnumerable<T> Push<T>(this IEnumerable<T> source, T head)
    {
        yield return head;
        foreach (T item in source) yield return item;
    }
}
```