OmniAICreator/Qiita-1.07M huggingface dataset:
JavaEEのアーキテクチャを再興する。（まとめページ）

##　！！！！　随時更新中　！！！！！
アーキテクチャで使用する各要素技術を説明しながら、アーキテクチャを組み上げていく方式でドキュメントを作っていきます。
本稿はまとめページとして、随時更新していきます。

# アーキテクチャ検討
Javaを使ってWebアプリケーションを作成するJavaEEのアーキテクチャは現在過渡期です。
その過渡期の中で、アーキテクチャについてどう考えていけばよいか、本稿で検討します。
Javaはお硬くて良い言語です。しかしながら、もう少し簡単にいじれると、よりサポート範囲？実用性？が上がります。

# 要素技術検討
## パーシステンス層
### JPA 
* [毛嫌いされる今だからこそ、Java！ --- JPA編 ----](http://qiita.com/ukiuni@github/items/f3e68e7f8fdcc0830e06)
* [嫌われてる今だからのJava -JPAでEntity（Schema）の変更に追従する- ](http://qiita.com/ukiuni@github/items/deee96c1b8d38016b6c0)

## プレゼンテーション層
### JAX-RS
* [覚えておくといつか必ず役に立つ。Javaで簡単Web API作成。- JAX-RS -](http://qiita.com/ukiuni@github/items/a516439b30c340703292)

### WebSocket
* [覚えておくと、いざというときに役に立つ。JavaでリアルタイムWeb - WebSocket -](http://qiita.com/ukiuni@github/items/536175b698a2fabf648d)

### JavaScript連動
* [覚えておくと、いつかあなたの役に立つ、JavaでJavaScriptのコードを解釈する。](http://qiita.com/ukiuni@github/items/b885f1d418e901e0f5f1)

## クライアント層
### テンプレートエンジン
* [createElementとかやっちゃダメ。Twitter製のテンプレートエンジンを使いましょう。 - hogan.js -](http://qiita.com/ukiuni@github/items/3653902e86bca75801d8)

### AngularJS
* [あなたが絶対に覚えておくべきフレームワーク、AngularJSのサワリ！](http://qiita.com/ukiuni@github/items/08e341626416400bbc62)
* [意外と情報がない！？メモっておくと楽できる、AngularJSで国際化対応](http://qiita.com/ukiuni@github/items/1d1b47e274ac204709c9)

## CI
[Embed Tomcat＋JUnit＋Selenium＋DBUnit + Antで自動テストする。](http://qiita.com/ukiuni@github/items/1448d392cc2a45aabf30)

## その他
### 動的クラス生成
* [覚えておくと、いつかあなたの役に立つ、Javaでクラスを動的生成](http://qiita.com/ukiuni@github/items/2c55a64f45272f4faef5)

# アーキテクチャ検討
静的型言語と動的言語の良い所を活かしたサンドイッチ型のアーキテクチャを、なるべくJavaの標準技術を使うことで、学習効率の良い、移植性の高いアーキテクチャを作成していきます。
チャットなどでメッセージが一番下に追加されたときの自動スクロール

Twitter は新しいメッセージが上に追加される。

個人的にはこの仕様は直感的ではない。
と言うのも、僕は古いメッセージから順番に追っていく場合、上に古いメッセージがあって、それを下に追っていく派の人間だからである。

http://jsfiddle.net/itomaki/wQC25/1/

てなわけで、上に古いメッセージが残っていて、下に新しいメッセージが追加されるようなチャットの UI を作ってみた。

http://jsfiddle.net/itomaki/pSy7z/1/

メッセージの追加とともに自動スクロールする ver.
http://jsfiddle.net/itomaki/dhjhD/

# メッセージの流れ方は、LINE と Twitter のターゲットの相違がある？？
上に古いメッセージが溜められ、下に新しいメッセージが追加されることを「古い順に追加」とでも呼ぶことにするか。。

LINE は「古い順に追加」
Twitter は「新しい順に追加」
2ch は「新しい順に追加」
...

LINE は、「会話」をターゲットとするアプリだから、「古い順に追加」なのかもしれない。
「会話」は、どういった経緯でいまの話題になったのか？ということの流れが分からないと噛み合ない。だからユーザは必ず過去の話を参照する必要に迫られる。このとき、「古い順に追加」だと、現在の話題に至るまでの過去の流れを把握しやすい。。ということじゃないかなぁ（<-- 完全に想像）

対して、Twitter や 2ch は「言い逃げ、憂さ晴らしの捨て台詞、ステマ」みたいなものをターゲットとするアプリだから、過去に何を言っていようが、バトンが渡された側はあまり関係ないんだよね。たぶん。（<-- ただの素人の意見です。間違っていたらすいません）

# 実装上の違い
「新しい順に追加」の場合は、一番上に新しいメッセージが追加されるだけなので、追加されたメッセージの高さだけページが長くなるだけ。ユーザは自発的にスクロールしなくても、新しいメッセージを閲覧できる。

http://jsfiddle.net/itomaki/wQC25/1/

ところが、「古い順に追加」の場合は、一番下に新しいメッセージが追加されるため、この新しいメッセージを閲覧するためには、ユーザは自発的にページを下にスクロールする必要がある。

http://jsfiddle.net/itomaki/pSy7z/1/

自動的にスクロールする機能を入れてやればOK。

http://jsfiddle.net/itomaki/dhjhD/

# まとめ
言いたかったことは、わりと小さな工夫（追加する領域の高さだけ下にスクロール）をするだけで、「新しい順に追加」のときに自動スクロールすることができる。ってことです。

```position: fixed``` をうまく使うことも、わりと重要なポイントかもね。
Vagrant既存環境をボックス化

プロビジョニングがめんどくさければ、手動でインストールした環境をボックス化できる。

# ボックスの生成

```shell-session
$ vagrant package
$ ls package.box
package.box
```

# ボックスを追加

```shell-session
$ vagrant box add precentos6.5 package.box
$ vagrant box list
CentOS6.5    (virtualbox, 0)
precentos6.5 (virtualbox, 0)
```

# 追加したボックスを指定して起動

```shell-session
$ vagrant init precentos6.5
$ vagrant up
$ vagrant ssh
```
linux版FlightRadar24 feederでサインアップ


linux版fr24feedのv242以降では、共有キーの取得（サインアップ）まで行けるようになったので試してみた。
これで、Windows環境がなくてもサインアップできる。

# 環境変数設定 (不要)
```bash:
#export FR24AUTHIP=83.140.247.20
```
2014.12.13: この設定はしないようにしましょう。エラーになっちゃいます。

# サインアップチャレンジ
linux版 fr24feedを以下の通り起動
緯度経度、メールアドレスとdump1090が動いてるホスト、ポートを入力する。

```bash:
$ ./fr24feed_arm-le_242s --signup
[i]FR24Feed v242 - built on Apr 23 2014/09:49:17
Welcome to the FR24 Feeder sign up wizard!

Before you continue please make sure that:

 1 - You have a working receiver/decoder providing Basestation compatible stream
 2 - You know the network address of the data feed (localhost:30003 by default)
 3 - You know your receivers location up to 1 decimal point
 4 - You have a working email address that will be used to contact you

To terminate - press Ctrl+C at any point

Step 1/5 - Enter Latitude  (DD.DDDD)
$:35.XXXXX
Step 2/5 - Enter Longitude (DD.DDDD)
$:134.XXXX
Step 3/5 - Enter your email address (username@domain.tld)
$:fujiba@exsample.com
Step 4/5 - Enter your the hostname of the data feed (leave empty for localhost)
$:
Step 5/5 - Enter your the port number of the data feed (leave empty for 30003)
$:

Validating form data...OK

The closest airport found is 'Tottori (ICAO:RJOR IATA:TTJ)' near Tottori.

Latitude: 35.530060
Longitude: 134.166504
Country: Japan
```

入力に問題なければ、処理を続行する。
`Would you like to conttinue using these settings?`に`yes`と答えればデータをいくつか受信してFR24のデータと照合し、問題なければ、共有キーとレーダーコード（ユーザID）が表示される。
登録したメールにも送られてくる。

```
Flightradar24 may, if needed, use your email address to contact you regarding your data feed.

Would you like to continue using these settings?

(yes/no)$:yes

Taking data sample, minimum 3 AC required including at least 2 ADS-B:

[b]connecting to localhost:30003
[b]connected
[i]00:00 - Connected to the data feed
[b]working
[i]Data feed time difference OK abs(17:57:59.688 - 17:57:59.659)=0
[b]00:06 - 2 AC in range
[b]00:11 - 2 AC in range
[b]00:16 - 2 AC in range
[b]00:21 - 2 AC in range
[b]00:26 - 2 AC in range
[b]00:31 - 2 AC in range
[b]00:36 - 2 AC in range
[b]00:41 - 2 AC in range
[b]00:46 - 3 AC in range
[i]Removed 0 of 3 AC
[b]disconnected

Sending data sample to the server, completing registration...OK

Account registered successfully!
Your sharing key is: *********
Your radar  code is: T-R****

Soon you should also receive an email containing this information.

To start sending data please start the feeder providing your key:
./fr24feed_arm-le_242s --fr24key=*******
```

あとは、https://www.flightradar24.com/premium/ で、設定時と同じメールアドレスを指定すればフィードを送る限り、タダでアカウント使える。
最後のフィードから７日間有効な模様。
覚えておくと、いつかあなたの役に立つ、JavaでJavaScriptのコードを解釈する。

JavaとJavaScriptは、名前が似てるだけではなく、すごく親和性が高いんです。
JavaからJavaScriptを実行することができるのです。それを使って、JavaでJavaScriptの単体試験などをすることができることは[以前の投稿](http://qiita.com/ukiuni@github/items/b16f9d0f2062f59e5f7b)でご紹介しました。
さらにはJavaからJavaScriptのコードのメンバにアクセスすることができます。

# JavaからJavaScriptのメンバにアクセスする。
サンプルコードはEclipseのプロジェクトの形式でGithubで[公開](https://github.com/ukiuni/NashornParseInspection)してあります。
お試しになりたいときは、Eclipseにインポートして、Java8で実行してください。

## サンプルコード

```java:JavaScript実行部（抜粋）
ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
engine.put("parser", new Main());
engine.eval("function MyJSClass() {"
			+ "this.param = \"testParam\";"
			+ "this.func=function(){};this.p2=1"
		+ "}");
engine.eval("parser.parse(new MyJSClass())");
```

JavaでJavaScriptを実行するためにはScriptEngineを使います。簡単ですね。
最後の行でJavaScriptからJavaを実行しています。parseメソッドはJavaで作られており、その中でJavaScriptのメンバを取得しています。

```java:JavaScript解析部（抜粋）
//クラス名の取得
Object constructor = scriptObject.getProto().get("constructor");
ScriptFunction scriptFunction = (ScriptFunction) constructor;
System.out.println("className = " + scriptFunction.getName());

//メンバの取得
PropertyMap properties = scriptObject.getMap();
for (Property property : properties.getProperties()) {
	String key = property.getKey();
	Object obj = scriptObject.get(property.getKey());
	System.out.println(" property = " + key + ", arg = " + obj + " (" + obj.getClass() + ")");
}
```

クラス名の取得の方はちょっとくせがあるので、上記方法を覚えておくと良いです。
もっと良いやり方があれば教えて下さい。
メンバの取得はシンプルですね。

Java8ではNashornというJavaScriptのランタイム実装を使っています。Java7以前はRhinoという別の実装を使っているので。上記とは別になること、ご注意ください。

# どんな時に役に立つの？
まずひとつは単体試験に使えます。JavaScriptを別ファイルから読み込んで、クラス定義、メンバがきちんと出来ているかをJavaでテストすることができます。
また、フレームワークの作成に使うことができます。フレームワークとしてどのように使うかは別投稿でご紹介します。
RubyでTwitter APIを使ってツイートする


## アプリの新規登録
下記にログインし、Create New Appからアプリを新規登録します。

https://apps.twitter.com/

Application settingsのAccess levelをRead onlyからRead and writeに変更しておきます。

## Access tokenの取得
Application settings - API Keys - Create my access tokenを選択し、Access tokenを取得します。

## Twitter APIにアクセスする為のgemをインストールする
``` $ gem install twitter ```

## tweetするためのコード

```ruby:tweet.rb
require 'twitter'

client = Twitter::REST::Client.new do |config|
  config.consumer_key        = "Consumer Keyを入力"
  config.consumer_secret     = "Consumer Secretを入力"
  config.access_token        = "Access Tokenを入力"
  config.access_token_secret = "Access Token Secretを入力"
end

# tweet
client.update("tweet from my app")

```
0と1の相互変換

前提：`int　x = 0;`, `assert(x == 0 || x == 1);`

```c
if (x == 1) {
  x = 0;
} else {
  x = 1;
}
```

```c
x = (x == 1) ? 0 : 1;
```

```c
x = (x ? 0 : 1);
```

```c
x = 1 - x;
```

```c
x = x ^ 1;
```

```c
x = !x;
```

```c
x = ~x & 1;
```
Travis CI で最新の MeCab を使う

# Travis CI には MeCab が入っていない

Travis CI の box には最初 MeCab が入っていません。
こういう場合、普通なら `.travis.yml` の `before_install` を用いて以下のように MeCab をインストールするでしょう。

```yaml
before_install:
  - sudo apt-get update -qq
  - sudo apt-get install -qq mecab mecab-ipadic-utf8 libmecab-dev
```

しかし、Travis の `apt-get` で入ってくる MeCab は古い (0.98) ので、例えば [natto gem](https://bitbucket.org/buruzaemon/natto/src) を使うようなアプリケーションが実行できません。
これでは Travis が赤くなって困るので、何とかして最新版 (2014/05/31 現在 0.996) を入れたいところです。

# 解決策: apt-get を使わず直にインストールする
最新の MeCab ソースコードを[公式 Google Code](https://code.google.com/p/mecab/downloads/list) から落としてきて、自家ビルド & インストールすれば良いのです。

基本的に[公式インストールガイド](http://mecab.googlecode.com/svn/trunk/mecab/doc/index.html#install-unix)の通り MeCab 本体と辞書をインストールすれば良いのですが、
* before_install に書くには行が多い
* Travis 上ではインストール後に `sudo ldconfig` もする必要がある
と多少面倒くさいです。

そこで、このインストール作業を一括して行うスクリプトを [Gist に用意しました](https://gist.github.com/dtan4/351d031bec0c3d45cd8f)。
`.travis.yml` に

```yaml
before_install:
  - curl https://gist.githubusercontent.com/dtan4/351d031bec0c3d45cd8f/raw/mecab_install.sh | bash
```

と書くだけで MeCab 0.996 と IPA 辞書 (UTF-8) がインストールされます。

どうぞご利用ください。
LinuxMint16にChefをインストール

最近LinuxMintをインストールして、あとから見直すためにQiitaに設定を色々と書き込んでたわけですが、よく考えたらこういう時にこそをChefを使えばいいんじゃないかとやっと気づいたのでChefのインストールのメモです。

`knife-solo`とかでホストから接続してchef自体をインストールするって方法もあるんでしょうが、かえってめんどくさくなりそうなので直接インストールする方向でいきます。

## ruby本体インストール

いつもの`rbenv`を使ったインストール。今回は64bitを使ってるのでちょっとエラーが出たのでその対処も。

まず必要なライブラリとかをインストール。

```shell-session
sudo aptitude install git autoconf bison build-essential libssl-dev libyaml-dev libreadline6 libreadline6-dev zlib1g zlib1g-dev
```

しようとすると、依存関係の問題が出てきて、恐ろしい対策を出してくるのでここは強気で"No"と答えましょう。

```shell-session
The following actions will resolve these dependencies:

      Remove the following packages:
1)      cinnamon                    
2)      cinnamon-screensaver        
3)      libgfortran3                
4)      liblapack3                  
5)      mint-meta-cinnamon          
6)      nemo                        
7)      nemo-fileroller             
8)      nemo-share                  
9)      python-numpy                
10)     python-opencv               



Accept this solution? [Y/n/q/?] n
```

んで、次に「んじゃ`libqfortran3`アップデートする？」と聞いてくるのでそれには”OK!"と元気に答えます。

```shell-session
The following actions will resolve these dependencies:

     Upgrade the following packages:                                            
1)     libgfortran3 [4.8.1-10ubuntu8 (now, saucy) -> 4.8.1-10ubuntu9 (saucy-upda
```

### rbenv

いつものコマンドを使って`rbenv`をインストール。「いつも」と言いましても自分がいつも使ってるだけで一般的にそうなのかどうかは知りません。

```shell-session
# rbenv 本体
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

# Plugins
mkdir ~/.rbenv/plugins
# ほぼ必須。ruby本体入れるのに使う。これ無しで使う方法知らない。
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
# `rbenv rehash`が自動的に
git clone https://github.com/sstephenson/rbenv-gem-rehash.git ~/.rbenv/plugins/rbenv-gem-rehash
# `rbenv update`コマンドが使えるように
git clone https://github.com/rkh/rbenv-update.git ~/.rbenv/plugins/rbenv-update
```

んで`. ~/.bash_profile`, `rbenv install 2.1.2`, `rbenv global 2.1.2`でRubyのインストールは完了。

## chef, knife-solo のインストール

`gem install knife-solo`でOKです。これで`chef`も依存関係で勝手に入るので。

あとはザクザクとレシピを書いてgitのリポジトリに置いときましょう。

### つぶやき

ところで`chef`をインストールしたら`knife`コマンドが使えるようになるってすごくややこしいと思うのは自分だけですかね。命名した人の「どやぁ、かっこいいやろぉ。」的な態度が勝手に頭に浮かんできてしまいます。

## Berkshelfも入れとく(追記)

何かと便利な`Berkshelf`もいれとく
`gem install berkshelf`でインストール。
readdir(3)を使ってみる

## はじめに

「lsを読まずにプログラマを名乗るな！」を少し読みました。読んでみて標準ライブラリ関数に興味を持ちました。今回は標準ライブラリ関数の`readdir(3)`を使ってみたことを少し書きたいと思います。

## 実装

``` main.c
#include <dirent.h>
#include <stdlib.h> // NULLを利用するために
#include <stdio.h> // printfを利用するために

int main()
{
  DIR *dirp;
  struct dirent *dp;

  dirp = opendir(".");

  if (dirp == NULL)
    return -1;

  while (1) {
    dp = readdir(dirp);

    if (dp == NULL)
      break;

    // printf("%d\n", dp->d_namlen);
    printf("%s\n", dp->d_name);
  }

  (void)closedir(dirp);
  return 0;
}
// vim: set sw=2 sts=2 et :
```

## ヘッダファイルはどこにあるか？

次のような`man`コマンドでヘッダファイルを調べることができます。

```
$ man 3 readdir
```

セクション番号として`3`を指定することで、標準ライブラリを調べることができます。

## まとめ

[C言語でglob](http://qiita.com/sassy_watson/items/03c16bd03b56e5579477)に既に同じような記事があります。こちらも併せて読むことで理解が深まると思います。

ファイルを読み込む実装は書籍で見かけることがありますが、カレントディレクトリにあるファイル名、ディレクトリ名を取得する実装は目新しく面白いと思いました。

スクリプト言語などではファイル名、ディレクトリ名を取得するようなオブジェクトが用意されていることが多いですが、そういうオブジェクトは標準ライブラリを利用しているのだろうか？という疑問が少し芽生えました。
ガントチャートに日付を入れるpluginsを追加する


## 前提
AWS MarketのRedmine powered by Bitnamiを使用。

## プラグイン
[vividtone/redmine_gantt_with_date](https://github.com/vividtone/redmine_gantt_with_date)


## 操作ログ

```
cd apps/redmine/htdocs/plugins/
git clone https://github.com/vividtone/redmine_gantt_with_date.git

cd apps/redmine/htdocs/
bundle install --without development test postgresql sqlite
ruby bin/rake redmine:plugins:migrate RAILS_ENV=production
ruby bin/rake tmp:cache:clear
ruby bin/rake tmp:sessions:clear
```

## 参考
[BitnamiのRedmineを2.5.0に更新した - Basic](http://d.hatena.ne.jp/rabbit2go/20140309/1394374120)
[RedmineでPluginを入れるのにハマった件 - ポジローぽけっと](http://pojiropocket.hatenablog.com/entry/2014/04/27/193319)
[BitNami Redmine - Bitnami documentation](http://wiki.bitnami.com/Applications/BitNami_Redmine)
【RSSアプリ】ブログ名をセルに表示してみる

XMLからブログ名を取得して来ようとすると、思わぬ壁にぶつかることがある。
例えばブログのタイトルってitemタグにあるわけではなく

```xml
  <channel rdf:about="http://rssblog.ameba.jp/xxx/rss.html"> 
    <title>ブログ名Powered by Ameba</title>  
(以下略)
 </channel>
```

と、channelタグにあったりする。
んでコイツをパース処理時にどう取得してくんべかなぁとあれこれ策を練ってみてもどーしても取れなかったりする。
(出来るのかもだけど僕は諦めましたという話です)

なのでitemタグから取得する方法を考えました。
いたってシンプルな話なのですが、itemタグ内にいるlinkタグで情報が取れた時に処理を追加します。

```objc
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {

 if([_elementName isEqualToString:@"link"]) {
   // 通常のlink情報取得処理

   // ここで記事名を特定するメソッド追加
   [self getArticleName_];
 }
(以下略)
}

- (void)getArticleName_ {
    NSRange nameRange = [link rangeOfString:@"ドメイン"];
    if(nameRange.location != NSNotFound) {
        データクラス.articleName = @"ブログ名";
    }
}
```

てな感じで。
URLのドメインでほぼブログは特定出来るでしょうから、そこから無理くりブログを特定させてしまおうと思った次第です。
getArticleName_で複数のURLに対し値を割り振れれば良いのではないでしょうか。

無論、channelから簡単に取れるならそれに越したことはありません。どなたか教えて頂けると幸いです。
質問：rpm-build errorの対処方法教えて下さい。

```
Error: Package: rpm-build-4.9.1.3-6.el6.x86_64 (hhvm)
           Requires: pkgconfig >= 1:0.24
           Installed: 1:pkgconfig-0.23-9.1.el6.x86_64 (@anaconda-CentOS-201311272149.x86_64/6.5)
               pkgconfig = 1:0.23-9.1.el6
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
```

```
yum install hhvm
```

をしたら上のrpm関連でエラーが起きました。
これの対処方法おしえてください。
Canvasの内容を画像ファイルとして保存させる

タイトルにDartって入れてませんがDartです。いま生でJavaScriptを書くのは、Cが流行り始めてる時代に生アセンブルでフルスクラッチするようなものなので、みなさんDartしましょう！（という布教）

Canvasの内容を画像ファイルとして保存させるには、まずCanvasの内容をData URLスキームに変換します。

```dart
// id="canvas"のCanvasElementがHTMLドキュメントにあるとする
CanvasElement canvas = document.query('#canvas');
String dataUrl = canvas.toDataUrl();
```

`toDataUrl()`の引数を省略すると、デフォルトでPNG画像へのData URLスキームの文字列を返します。取得したURLは画像へのURLになるので、そのままそのURLへアクセスする形で画像の表示、またはダウンロードすることができます。

ユーザー任意でそのURLへアクセスさせる場合は、AnchorElement(aタグ)のhrefにそのURLを設定し、そのElementをドキュメントへ追加するという方法もあるのですが、今回はDart側からダウンロード自体を開始させてみます。

Qiitaのこちらの記事を参考にします。

[javascriptで生成したファイルをローカルに保存する - Qiita](http://qiita.com/ukyo/items/d623209655a003b13add)

```dart
AnchorElement anchor = new AnchorElement()
  ..href = dataUrl
  ..download = 'image.png'
  ..dispatchEvent(new CustomEvent('click');
```

この流れでCanvasの内容を画像ファイルとしてダウンロードさせることができます。

ですが、自分の環境ですと、ダウンロードされるファイルのファイル名が「ダウンロード.png」になってしまいます。(Mac OS X 10.9, Chrome 35)原因誰か教えてプリーズ。
dokku を OS X のvagrant で動かすためにyak shavingした

注意：dokku開発のペースが早くすぐ陳腐化するのでバージョンには注意してください

ブログ記事 http://blog.coiney.com/2013/08/10/create-my-own-heroku/ http://qiita.com/hokaccha/items/af109d4037fa1d788617 みて全然できなくてものすごく毛を刈った。

# この記事で言いたいこと
http://r7kamura.github.io/2014/02/18/private-paas-beach.html
r7kamuraさんがやってるようにDigital Ocean 使うのが一番早いと思う。

# yak shaving

(1) 手元の開発環境(vmware fusion ubuntu12)で動かそう、dokkuインストール

(2) 動かない… 
configuration にある、cat ~/.ssh/id_rsa.pub | ... すると、以下の表示がでてうまくいかない
sudo: no tty present and no askpass program specified

(3) sudoの設定が悪いと思う、/etc/sudoersいじったら変な設定にしたらしく自分のユーザでsudo できなくなって詰む

(4) もう一回ubuntu12入れなおそう…

(5) やっぱり同じエラーで動かない...

(6) dokkuの推奨はubuntu 14だし、14入れなおそう

(7) やっぱり動かねえ… 

(8) いろいろぐぐってるとvagrantで動かすという記事見つけた http://blog.n-z.jp/blog/2014-04-18-ubuntu-1404-dokku.html# （最終的にこれが一番よかった）

(9) no tty とかでないでできそう。ただ git push できないが、別のページで解決 http://beletsky.net/2013/09/playing-with-dokku-on-vagrant.html

	git remote add deploy dokku@dokku.me:node-sample

(10) やっとpushできてhttp://node-sample.dokku.me:8080 で返ってくるようになったぞ
ちなみに、dokku.meってなんぞやって思ったが、vagrantがうまくやってくれている模様。

(11) あれ、よくみたらhttp://node-sample.dokku.me:8080 で返ってくるのnginx のデフォルトページじゃん… 

(12) nginx再起動したらよかった https://github.com/progrium/dokku/wiki/Troubleshooting

結局、3日くらいかかった…。
yumでデータベースが開けないエラーが起きるとき

http://blog.r-unit.co.jp/archives/author/kuga

ここのブログに載っている内容試したら上手く行きました。

```
cd /var/lib/rpm 
```

の中にある、__db系のファイルを一度削除して

```
yum clean all
```

するといいようだ。
ファイルが直接呼び出された時にだけ実行するアレ Php/Ruby/Python


## PHP

```php

if (realpath($argv[0]) == __FILE__) {
	# コード
	some_code();    
}

```

## Ruby

```ruby

if __FILE__ == $0
  # コード
  some_code
end

```

## Python

```python

if __name__ == '__main__':
    # コード
    some_code()
```
Goのclosureへのパラメータの渡し方


[Effective Go#channels](http://golang.org/doc/effective_go.html#channels)に載ってるclosureへのパラメータの渡し方2パターンのperformanceを比較した。

## きっかけ
- [Go研vol.16](https://github.com/goken/goken/tree/master/goken16-grep)で、ほぼ同じだけどclosureへのパラメータの渡し方だけ違うコードがあった。

- 2つの書き方でperformanceに差があるのか調べてみよう。

## closureへのパラメータの渡し方
以下はEffective Goからの引用。

[Effective Go#channels](http://golang.org/doc/effective_go.html#channels)

loop変数はloop内で繰り返し再利用されるため、下記コードはバグがある。
全てのgoroutineでloop変数を共有した状態になってしまう。

```Go:bug.go
func Serve(queue chan *Request) {
	for req := range queue {
		sem <- 1
		go func() {
			process(req)
			<- sem
		}()
	}
}
```

解決策として、Effective Goでは以下2パターンを上げている。

1.closureに引数として渡す

```Go:pattern1.go
func Serve(queue chan *Request) {
    for req := range queue {
        sem <- 1
        go func(req *Request) {
            process(req)
            <-sem
        }(req)
    }
}
```

2.loop中でloop変数と同じ名前の変数を作る

```Go:pattern2.go
func Serve(queue chan *Request) {
    for req := range queue {
        req := req // Create new instance of req for the goroutine.
        sem <- 1
        go func() {
            process(req)
            <-sem
        }()
    }
}
```

## performance比較
上記2パターンのperformanceをgo test -benchで比較した。
[ソースコード](https://gist.github.com/taka011239/f60bf285d888df07b1ea)

```bash:results
BenchmarkClosure1	     500	   5356625 ns/op	   11165 B/op	      38 allocs/op
BenchmarkClosure2	     500	   6917004 ns/op	  262473 B/op	   20029 allocs/op
```

## 結果
- pattern2はpattern1と比較して、より多くのメモリを確保する
- ちゃんとclosureに引数として渡すように書いたほうが良い
Androidstudio入れてみた

Windows7 64bit

■andoroidstudioインストール
http://developer.android.com/sdk/installing/studio.html#Updating
　⇒　android-studio-bundle-135.1078000-windows.exe

■java7のインストール
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
　⇒　Java SE Development Kit 7u60
　⇒　Windows x64（jdk-7u60-windows-x64.exe ）

■環境変数の設定
　JAVA_HOME=C:\Program Files\Java\jdk1.7.0_60
MacportsやHomebrewのアップデート

#Macports
portをアップデートして古いバージョンを消しつつ新しいバージョンをインストール、
最後にゴミファイルをクリーンまで一元化してshell scriptにまとめておく。
port syncよりかはまるごとselfupdateしてしまった方が良いらしい。
ナンデダロー。

```
#!/bin/sh
port selfupdate
port -uf upgrade outdated
port clean installed
```

#Homebrew
本体アップデートしてインストールされてるのをアップグレードしてクリーンナップ。

```
#!/bin/sh
brew update
brew upgrade --all
brew cleanup
```

#Fink
入れてないんでわかりません！
latexで条件付きの連立方程式を綺麗に書く方法

今までtexを使うことが多かったのですが、条件付きの連立方程式が綺麗に書けていなかったので、やり方を調べて私のブログにまとめました。↓
http://infotech776.blog.fc2.com/blog-entry-55.html
御存知の方も多いと思いますが参考までに！
ビルドとかテストしない人向けのJenkins情報


#フリースタイルビルドでのTips

## Build Failerなんだけど？

Shellを実行する場合、終了コードが0以外だと、そのままではBuild Failed で終わってしまう。
たとえば、差分を検出して、結果をコンソールに出力しようとするだけのジョブの場合、

```
% diff test.txt test_hoge.txt
```

を実行し、差分があった場合、$? が1になって、Build Failerになってしまいます。
こういうときは、Shellの開始と終了で、set +e, set -e を挟むと良い。

# マスタ／スレーブ構成の場合のTips

## 環境変数が変だなあ？

マスタ／スレーブ方式の場合、スレーブの環境変数がなんか違うって言うときは、ご注意を。
プロファイルは、/etc/bashrc とか、.bashrcを見る....。

## なんでマスタでやるはずのジョブをスレーブで実行しているの？

Jenkinsがマスタ／スレーブの場合は、基本的にマスタは仕事せず、できるだけスレーブをこきつかうという、執事頭に昇格します。
特定の環境でしか実行できないジョブ／ビルドは、ちゃんと実行するノードを指定すること。でないと、Windowsサーバでシェルの作業が始まってたりします。

## スレーブ同士で成果物をやりとり

スレーブAで作った成果物を、スレーブBに渡して処理させたい場合。直接（SSHとか）のつながりがなくとも、マスタが仲介してAからBに転送することが可能 :)

# 同一ホストで違う権限（ユーザ）でJenkins動かしたい場合

別アカウントで動くJenkinsスレーブをたくさんつくるのが良さげ。
別アカウントのマスタのJenkinsをたくさん作るんじゃなくて、マスタは１つ、スレーブという形で（同じホスト内であっても）違うユーザで動くスレーブノードを作ると良いかと思われます。

# Cronの記録をメールじゃなくってJenkinsにためる

Javaも入ってないしんだけれど、Jenkinsに記録を溜めることって、できるの？

いわゆる、『外部ジョブの監視』。基本はjenkinsのjarを利用するのですが、別にJenkinsのAPIを使ってCronの結果をhttpでPOSTすればいいので、java入ってなくても大丈夫。

メールでCronの結果を受けるのも良いですが、Jenkinsにためてみましょう。

手前味噌で申し訳ないですが、この辺が参考に。

- [外部ジョブの監視も使ってみよう！](http://daily-postit.blogspot.jp/2011/12/blog-post_08.html)

# Windows Serverで使う場合

## サービス化

サービス化しちゃいましょう。
サービスをドメインユーザで動かすと、ドメインに参加してるサーバに対してファイルシステム上のやりとりができるので、非常に便利。

## 複数サービス化 (同一ホストで複数スレーブのパターン）

Windowsでサービス化する場合、いったんJNLPでJenkinsのスレーブのサービスを立ち上げて、起動したJavaの画面から『サービス化』すると良い。
ただし、サービス化の場合のサービス名は、固定文字列になっちゃうので、別サービス名で複数のスレーブを登録したい場合は注意。

いったん作成した最初のJenkinsスレーブのサービス名を変更し、config.xml も調整すること。
 
## たくさんあるジョブをまとめて有効化／無効化したい

CLIとかでフィルタしてコマンドから無効化／有効化できるんだろうけど...。
一括有効化／無効化対象のジョブは、特定のスレーブで実行するように設定し、あとはスレーブの停止／起動で対応...。

# 一部rootの処理をしたいとき

スレーブにしてもマスターにしても、sudoが結構ポイントだったり。
たとえば、バックアップに関わるコマンドとか、rsyncだけはsudoしてjenkinsにやらせたい時とかは、このあたりを調整。

```source:bash
# tty で怒られるのでコメントアウト
#Defaults requiretty
# jenkinsユーザでも実行させたいコマンドは定義
Cmnd_Alias BACKUP_TASK = /usr/bin/rsync, /usr/bin/ssh, /usr/bin/du
# jenkinsさんには上記タスクはroot権限で実施できるようにする
jenkins ALL = (root) NOPASSWD: BACKUP_TASK

```
FDT+Haxe+CreateJSをセットアップする


概要
------------------
FDTのセットアップ（[HaxeをFDTで使ってみる](http://qiita.com/nenjiru/items/e73ded750bfea0baf31d)）までできたので、ライブラリを追加してみる。
ライブラリ自体の使い方は[Haxeでライブラリをつかう](http://qiita.com/nenjiru/items/d5a29ba3a408f90863e6)からどうぞ。

まずはターミナルからcreateJSがあるか検索

````sh
$ haxelib search createjs
````

````sh
$ haxelib install createjs
````

ちなみにこれでインストールされるのは定義ファイルのみ

プロジェクトを作成
------------------

![project.png](https://qiita-image-store.s3.amazonaws.com/0/20773/ae7f506c-70ed-3f05-b1db-80e9ae991a34.png "project.png")

Basic JS のプロジェクトを作成

compile.hxml を設定する
------------------

![compile-xml.png](https://qiita-image-store.s3.amazonaws.com/0/20773/da08b4b7-03c9-f8b2-5d1f-0cdd4e4e0eb0.png "compile-xml.png")

Arguments で -lib createjs を追加する

デバッガを設定する
------------------
Flashベースと同じくデバッガ設定を新規作成する

![DebugConfigurations.png](https://qiita-image-store.s3.amazonaws.com/0/20773/95d9d699-0b70-64b4-0132-a5fe96a4a357.png "DebugConfigurations.png")

※ちなみにコンパイルエラーがあると Problems に Error が表示されて当然コンパイルされないが、bin にファイルがあるのでちょっと気づきにくいのはおれだけですか
VagrantにFabricでプロビジョニング

Chefは使ったことがなく、Puppetは忘れたので、お手軽そうなFabricでプロビジョニングしてみた。

# fabricインストール

ホスト側に入れる

```shell-session
$ sudo easy_install pip
$ sudo pip install fabric
```

# vagrant-fabricインストール

Vagrantのプラグインを入れる

```shell-session
$ vagrant plugin vagrant-fabric
$ vagrant plugin list
vagrant-fabric (0.2.2)
```

# Vagrantfile

```rb
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "CentOS6.5"
  config.vm.provision :fabric do |fabric|
    fabric.fabfile_path = "./fabfile.py"
    fabric.tasks = ["init"]
  end
end
```

# fabfile.py

```py
# -*- coding: utf-8 -*

from fabric.api import local, run, env

env.user = "root"

def package():
  run("yum -y update")
  run("yum -y groupinstall 'Development tools'")
  run("yum -y install wget git openssl-devel")

def iptables():
  run("chkconfig iptables off")
  run("service iptables stop")

def locale():
  run("yum -y groupinstall 'Japanese Support'")
  run("echo 'LANG=\"ja_JP.UTF-8\"\nSYSFONT=\"latarcyrheb-sun16\"' > /etc/sysconfig/i18n")
  run("echo 'export LANG=ja_JP.UTF-8' >> ~/.bash_profile")

def clock():
  run("cp -fp /usr/share/zoneinfo/Japan /etc/localtime")
  run("echo 'ZONE=\"Asia/Tokyo\"' > /etc/sysconfig/clock")

def mysql():
  run("yum -y remove mysql*")
  run("yum -y install http://repo.mysql.com/mysql-community-release-el6-4.noarch.rpm")
  run("yum -y install mysql-community-server")
  run("chkconfig mysqld on")

def ruby():
  run("git clone https://github.com/sstephenson/rbenv.git ~/.rbenv")
  run("echo 'export PATH=\"$HOME/.rbenv/bin:$PATH\"' >> ~/.bash_profile")
  run("echo 'eval \"$(rbenv init -)\"' >> ~/.bash_profile")
  run("source ~/.bash_profile")
  run("git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build")
  run("rbenv install -v 2.1.2")
  run("rbenv rehash")
  run("rbenv global 2.1.2")
  run("echo 'export PATH=\"$HOME/.rbenv/versions/2.1.2/bin:$PATH\"' >> ~/.bash_profile")
  run("gem install bundler")

def jq():
  run("curl -o /usr/local/bin/jq http://stedolan.github.io/jq/download/linux64/jq")
  run("chmod 755 /usr/local/bin/jq")

def twurl():
  run("gem install twurl")

def init():
  package()
  iptables()
  locale()
  clock()
  mysql()
  ruby()
  jq()
  twurl()
```

# プロビジョニングを適用

```shell-session
$ vagrant up --provision
```
Gitbookでpdfとebookを作成する

gitbookでsite版の出力をしてる記事は結構あるけど、実際に配布する用のpdfとかebookのことを書いてる記事があまり見かけないので、ちょっとまとめました。

# 前提
- すでにgitbook環境が導入済み
- buildするプロジェクトがある
- brew cask installが使える

gitbook導入手順は[こちらの記事](http://qiita.com/nekogeruge_987/items/46dfb552b33aac4ef9b0)が参考になります。

`brew cask`は[この辺の記事](http://qiita.com/ryurock/items/1432578d364985f6cb06)がわかりやすいです。

# pdfを出力する

gitbook-pdfが必要ですので`npm install`します

```console
$ npm install -g gitbook-pdf
$ gitbook pdf
```

# pdf版について

お手軽に``pdf``作れるのはいいのですが、いくつか気になる点があります。

- 目次が適用されない
- ページリンクが機能しない
- 1ページに収まる量を超えた内容がそのまま改ページされて見辛い

## 目次がない＆リンクっぽい文字だけど押せない
![スクリーンショット 2014-05-31 13.17.57.png](https://qiita-image-store.s3.amazonaws.com/0/40887/e64fac72-c3d8-50b1-9c01-59540081ccb8.png)

## 改ページ辛い
![スクリーンショット 2014-05-31 13.18.14.png](https://qiita-image-store.s3.amazonaws.com/0/40887/5b2e7d08-494e-e830-40cc-e49d5039dd49.png)
 
![スクリーンショット 2014-05-31 13.18.26.png](https://qiita-image-store.s3.amazonaws.com/0/40887/e398f6f7-28bf-3d8b-d62d-8402a17b53f2.png)

「す」だけ。。。改ページ辛い・・・

# ebookを出力する

```console
$ gitbook ebook
```

大抵の人は、エラーになります。``Calibre``の``ebook-convert``が必要らしい。

```shell-session
Starting build ...
Need to install ebook-convert from Calibre
```

## Calibreをbrew cask installする

```console
$ brew cask install Calibre
```

## ebook-convertのPATHを通す

とりあえず自分は``/usr/bin/``下にしてます。お好みで変えてください

```shell-session
$ sudo ln -s ~/Applications/calibre.app/Contents/console.app/Contents/MacOS/ebook-convert /usr/bin/ebook-convert
```

## gitbook ebookを実行する

```console
$ gitbook ebook
```

ちょっと時間かかります。


# ebook版について

- 目次があります
- 目次ページからの各章へのリンクが使えます
- フォントがでかくて辛いですが、縮小表示すれば普通に読めます

## 目次がある！

![スクリーンショット 2014-05-31 13.37.20.png](https://qiita-image-store.s3.amazonaws.com/0/40887/d4015be2-0f7f-8c76-c59e-22bbfede29dc.png)

## ページリンクが有効

![スクリーンショット 2014-05-31 13.36.41.png](https://qiita-image-store.s3.amazonaws.com/0/40887/a8945655-aacc-ccae-a06b-7610d0047588.png)

## フォントサイズでかい；；けど縮小でなんとかなる

![スクリーンショット 2014-05-31 13.38.15.png](https://qiita-image-store.s3.amazonaws.com/0/40887/6b8ce7d8-93cb-0a51-b584-90fcd2d4c0a4.png)

　　　　↓ 縮小したやつ

![スクリーンショット 2014-05-31 13.38.31.png](https://qiita-image-store.s3.amazonaws.com/0/40887/2607ccf9-5738-e192-90d5-e73859f0a096.png)


# おわり
両方触ってみて、やっぱり`ebook`版が良さそうです。
導入で`ebook-convert`入れないといけないのがちょっと面倒ですが最初だけなので、全然問題ないかと。
Ruby toolboxからirb Toolsの項目を眺める

[The Ruby Toolbox - irb Tools](https://www.ruby-toolbox.com/categories/irb_tools)

さらっとした紹介的なもので、あまり深くは突っ込んでません。

まだ編集中です

## Awesome print
* [michaeldv/awesome_print](https://github.com/michaeldv/awesome_print)
* ```ap (何かしらのobject)```でいい感じに表示してくれる
    * [michaeldv/awesome_print examples](https://github.com/michaeldv/awesome_print#examples)で各種例
    * railsのmodelにも対応
        * ただselectして列に別名つけたりすると辿れないっぽい
        * あくまでオブジェクトの値を表示しているだけかな？

### Usage
```rb
pry(main)> require 'awesome_print'
pry(main)> test = Hoge.join(:fuga).select("hoges.id, hoges.note, fugas.id, hoges.name hoge_name").limit(2).all
pry(main)> ap test
[
    [0] #<Hoge:0x1033220b8> {
                     :id => 1, # fugas.idとhoge_nameは出ない
                   :note => nil
    },
    [1] #<Hoge:0x103321ff0> {
                     :id => 2, # fugas.idとhoge_nameは出ない
                   :note => nil
    }
]
```

## Hirb
* [cldwalker/hirb](https://github.com/cldwalker/hirb)

> Hirb provides a mini view framework for console applications and uses it to improve irb’s default inspect output. Given an object or array of objects, hirb renders a view based on the object’s class and/or ancestry. 

* Hirbでは```Hirb::Helpers::Table```と```Hirb::Helpers::Tree```の2つがメインの見た目として選べる
    * オプションありいろいろいじれる
* ただ試しに手元のプロジェクトに入れて、rails exampleのようにしてみたが期待した表示にならず
    * おそらく何か手順を見逃しているように思える
* 日本語とか使う場合は[miaout17/hirb-unicode](https://github.com/miaout17/hirb-unicode)を使うと、テーブル表示の場合ずれなくてすみます

## pry-rails
* pryをrailsで使用できるようにする
* いつもお世話になっております

## Clipboard
* [janlelis/clipboard](https://github.com/janlelis/clipboard)
* 変わり種。LinuxやMac、 Windowsのクリップボードを制御できる。
* Linuxは```xclip```か```xsel```が必要。

### Usage
```ruby
Clipboard.copy   # コピー
Clipboard.paste  # ペースト
Clipboard.clear  # クリア
```

* コマンドラインからクリップボード使いたい場合は[blip | RubyGems.org | your community gem host](http://rubygems.org/gems/blip)使えとのこと。
    * 中身見ると、Clipboard使ってますねこれ
Eclipseで文字サイズを簡単に変更するプラグイン

目が疲れている時や、レビュー時にEclipseの文字サイズを簡単に変更できたら楽だなと思って探してみた。

最終目的は、SublimeTextの様に Ctrl+マウススクロールで文字サイズが変更できるようになると良い。(まだ出来てない)

# プラグイン
いままでEclipseのプラグインを作ったことがないので、不安にかられつつ。まぁやってみようと思い調べる。
調べている間にFont Size Changerというプラグインを http://sourceforge.net/ で見つけた。

# インストール
Eclipse4.3に入れてみる、1.1.4のzipを解凍してインストールフォルダに入れる。
アイコンは出るのに、動かない！！

でもどうにかすれば動くかなと思い、(SVNでチェックインするのが面倒なので…)ソースをダウンロードする。

# Github
ついでだから、githubに勝手に移植しよう！
と思い、ソースをローカルリポジトリにコミット。


とおもったら公式のgithubがあった。
しかもForkされてて4.2でも動くように修正してあった。

# 再インストール
しかし、jarが無かった。
cloneして、```/net.shu-cream.eclipse.font/plugin.xml``` を開いて、右下にあるエクスポートでjarを作成してインストール。
動いた！！

# 結論
公式公開されたものをForkしたものをエクスポートして公開していいのか調べるのが面倒なのでここまで。

探したら見つかる！
Mac OS X MavericksでNTFSを読み書きする(まとめメモ)

http://qiita.com/leon_AKQJT/items/e5027286fc6d7d79f9f5

上記を参考にコマンドを実行する。

```shell-session
brew upgrade
brew install fuse4x
brew install ntfs-3g
sudo mv /sbin/mount_ntfs /sbin/mount_ntfs.orig
sudo ln -s /usr/local/Cellar/ntfs-3g/2014.2.15/sbin/mount_ntfs  /sbin/mount_ntfs

sudo /bin/cp -RfX /usr/local/opt/osxfuse/Library/Filesystems/osxfusefs.fs /Library/Filesystems
sudo chmod +s /Library/Filesystems/osxfusefs.fs/Support/load_osxfusefs

```

http://safx-dev.blogspot.jp/2013/12/os-x-109-mavericks-ntfs.html
にfuse4xのアップデートする場合は、カーネルモジュールアンロードしておけと書かれているけど、osxfuseも同じなのかな？
phpMyAdminやMySQL Workbenchでselectした結果のblob型データが文字化けした時の対処法

phpMyAdminやMySQL Workbenchでselect文を発行した際に、blob型やvarbinary型のデータが文字化けした経験はありませんか？
そのような場合には、以下のようなselect文を発行することで、データの文字化けを解消して結果を表示できるかもしれません。

## MySQL Workbenchの場合で試す場合
MySQL Workbenchには、デフォルトでblob型やvarbinary型のデータの文字化けを解消した上でselect文の結果を表示してくれる機能が付いています。

**Edit>preferences..>SQL Query>Treat BINARY/VARBINARY as nonbinary character string**

この項目にチェック後にMySQL Workbenchを再起動することで有効化できます。
これだけで文字化けを解消できる場合もあるのですが、それでも無理な場合には、以下のselect文を試してみてください。
（以下のselect文を試す場合にも、上記設定は必須です）

## 文字化けを解消するためのSQL文
このSQL文はphpMyAdmin、MySQL Worckbenchどちらの場合でも文字化けを解消できました。

***例）TestテーブルのNameフィールドの文字コードujisのデータが文字化けする場合***

```lang:SQL
select cast(Name as char character set ujis) from Test
```
このselect文で文字化けを解消できることがあります。
現在のblob型又はvarbinary型のデータを、そのデータの本来の文字コードのchar型にキャストするという方法です。

文字化けを解消するためにネットで情報を探した際にstackoverflowの下記ページを参考にしました。
[sql - How do I convert from BLOB to TEXT in Mysql?](http://stackoverflow.com/questions/948174/how-do-i-convert-from-blob-to-text-in-mysql)

ちなみに、特定のデータを検索した場合は以下のようになります。

***例）「テスト」という文字列を含むデータを検索する場合、***

```lang:SQL
select cast(Name as char character set ujis) from Test where cast(Name as char character set ujis) like '%テスト%'
```

同じようにselect文の結果が文字化けして困っている方は一度試してみてください。
iOSシミュレータで起動時にロケーション情報をセットする方法

~~まず服を脱ぎます~~ iOSシミュレータでgps情報を使うアプリを開発していると、ちょこちょことロケーションの設定をしたくなりますよね。
そんな時はgpxファイルを登録し、schemaに登録しておくと起動時に勝手にロケーション設定してくれます。

######GPXファイルについてはこちらが参考になります。  
[XcodeでiOSデバイスの位置情報をシミュレートする](http://qiita.com/key/items/d33aba1f7eb76f898730)


GPXファイルを登録したら、EditSchemaを開いて下記のようにGPXを登録します。
![foro_ios_—_main_m.png](https://qiita-image-store.s3.amazonaws.com/0/31077/3d4adeda-cc91-e00d-ec87-9922273675b6.png)
そうすると起動時に勝手にロケーションが指定されて「あら便利！」という感じです。
Light Table (Clojure) で実行可能なサンプルコードをコメントとして残す

Clojureでは`#_`の次のフォームがコメントとして扱われることを利用するとサンプルコードを便利な形で残せます。

```sample.clj
#_(map #(* 3 %) (range 9))
```

Light Tableではテキストを選択してCtrl-Enterすると選択部分の評価が行われます。
`;`によるコメントではPareditによるリストの選択が利きませんが、`#_`ならPareditを用いたショートカットキーでリストの選択ができて便利です。
WordPressマルチサイト化

過去には一つのblogを、複数人で投稿したりもしていたけど、そもそものネタの方向性が違う場合はそうもいかない（わけでは無いが）。

だからと言ってWordPress(以下WP)を複数配置するのもメンテナンスを考えても効率が悪い。
そもそも、そこにマルチサイトがあるのに何故しない。
という事で、WPのマルチサイト化にレッツトライ。

Path単位で分けるのも悪くはないが、サブドメイン単位で分ける方がスッキリしそうなので、今回はそっちで。

### 手順

1. WPのマルチサイト対応設定
WP_ALLOW_MULTISITEをtrueにしてサイトのネットワークをサブドメインで作成

2. DNSのサブドメインワイルドカード設定
今回は*.blogを特定ホストに向けた

3. Apache Virtual Host設定
同ApacheでWP以外も扱いたいので、WPをホストする*.blogをVirtual Host設定でDocumentRootをドメインのルートを扱うDocumentRootとは別に設定

### ポイント

詳細はあえてここで書かなくても色々な所で紹介されてるので省略。
一点だけ言うなら、サブドメインの構成はちゃんと考えてから作業する事。途中で構成間違ったと思い、wp-config書き換えたが時既に遅しで、色々面倒だったのでインストールし直した。

あと、サイトのルートに出来るblogいらないんだけど、これは無効に出来ないのかな？

結局詳細までわかってないかもだけど、とりあえず目的は達成されたので良しとする。


これであんなblogやこんなblog立て放題やー！
ChangePropertyAction で小数を設定する時の注意

## Blend SDK の ChangePropertyAction
Blend SDK に含まれる ChangePropertyAction を使うと XAML上で簡単に要素の値を変更する事ができます。
以下は例としてボタンがクリックされた際にプログレスバーの値を1秒間かけて 0.5 に変更します。
（Storyboard 無しでアニメーションできるのも便利！）

```xml
<Button>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Click">
            <ei:ChangePropertyAction TargetName="progressBar" 
                                     PropertyName="Value"
                                     Value="0.5"
                                     Duration="0:0:1" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>
```
## Culture 変更による問題
アプリ内の言語設定を以下のようにドイツ語に変更します。

```csharp
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    var de = new CultureInfo("de");
    Thread.CurrentThread.CurrentCulture = de; // 今回問題になるのはこっちの設定
    Thread.CurrentThread.CurrentUICulture = de;
}
```

上記の設定の後、ボタンをクリックすると以下の例外が発生してしまいます。

```text
System.Exception: 0.5 is not a valid value for Double.
 ---> System.FormatException: Input string was not in a correct format.
   at System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
   at System.Double.Parse(String s, NumberStyles style, IFormatProvider provider)
   at System.ComponentModel.DoubleConverter.FromString(String value, NumberFormatInfo formatInfo)
... 続く
```

理由は以下のリンクを見るとわかります。
[http://ja.wikipedia.org/wiki/%E5%B0%8F%E6%95%B0%E7%82%B9](http://ja.wikipedia.org/wiki/%E5%B0%8F%E6%95%B0%E7%82%B9)

なんと、ドイツでは小数点はカンマで表します。
（他にイタリアやフランスなど）
なので、 `Value="0.5"` ではなく `Value="0,5"` と書かないと正しくパースされないようです。
しかも、トリガーの Invoke() が実行されるタイミングでパースが走るので、頻繁にカルチャが切り替わるシーンでは問題になります。

パッと思いついた対策は以下のように StaticResouce を使用する方法です。
ちょっと面倒ですね。。。

```xml
<Button>
    <Button.Resources>
        <sys:Double x:Key="progressBarValue">0.5</sys:Double>
    </Button.Resources>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Click">
            <ei:ChangePropertyAction TargetName="progressBar"
                                     PropertyName="Value"
                                     Value="{StaticResource progressBarValue}"
                                     Duration="0:0:1" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>
```
scenic3で作成したプロジェクトをGITで管理しようとした時にAppUrls.javaがコミットできない問題への対応


scenic3で作成したプロジェクトをgitでコミットしようとした時に、controller/AppUrls.javaが管理対象にならなくてハマったので対応策を共有しておきます。

デフォルトの設定だとEclipse附属のGitではAppUrls.javaがコミット対象のリストに表示されません。なぜ管理対象にならないかというとどうも以下の理由っぽいです。

・scenic3のpluginが色々と編集することで「derived」属性を付与される
・Gitの初期設定ではderived属性のファイルやフォルダは.gitignoreに自動的に追加される
　→コミット対象から除外される

そのため、このあたりの設定を変更します。

１．自動で無視されるのを防ぐ

Eclipse > 環境設定 > Team > Git
"Automatically ignore derived resources by adding them to .gitignore"のチェックを外す。

2. すでに.gitignoreに追加されている場合、.gitignoreを編集する

```
$cd [controllerフォルダのパス]
$vi .gitignore

	/controller の行を消す
```

3. プロジェクトをリロード

とりあえずこの変更で対象リストに表示されるようになりました。
よかったよかった。
hub pull-requestがError creating pull requestになってしまうときは


hubコマンドで以下の様なエラーが出てしまうことがありました。

```bash
$ hub pull-request
Error creating pull request: Unprocessable Entity (HTTP 422)
Missing field: "head_sha"
Missing field: "base_sha"
No commits between user:master and user:new_branch
```

対応としては`-u`オプション付きでもう一度`push`することです。
`-u`については[このあたり](http://qiita.com/ironsand/items/6c301fef730d53f35bc3)を参照してください。

```
$ git push -u origin new_branch

$ hub pull-request
#成功するはず！
```
Railsでモデルの関係図を自動的に描いてくれる便利なやつ


Ruby on RailsでWEBアプリを開発している時に便利かなぁっと思って，導入してみました！
簡単にその導入方法をまとめます．

# 環境
* Rails
	* 4.1.0
* Ruby
	* 2.0.0p451
* OS
	* Max OS X 10.9.3 (Mavericks) <--- __このOSだと途中詰まる箇所があります!!__

# Graphvizをインストールする
Graphvizというモノをインストールします．これがないと[Rails ERD](http://rails-erd.rubyforge.org/)が動かないらしいです．
下にMacとDebian，Ubuntuでのインストール方法をあげています．Windowsは知りません!


```HomebrewMacOSX
$ brew install graphviz 
```

```MacportsMaxOSX
$ sudo port install graphviz
```

```Debian,Ubuntu
$ sudo aptitude install graphviz
```

# Gemfileにrails-erdを追加する
1つ目のGemfileの内容はMacOSX Mavericksじゃない人向けです．
Mavericksの人は2つ目のGemfileの内容を書いて下さい．

```Gemfile
group :development do
	gem 'rails-erd
end
```

```Gemfile(forMavericks)
group :development do
	gem 'rails-erd', github: 'paulwittmann/rails-erd', branch: 'mavericks'
end
```

Mavericksの人は2つ目のGemfileのように書かないと次のエラーが出ちゃいます...!

```
CoreText performance note: Client called CTFontCreateWithName() using name "Arial Italic" and got font with PostScript name "Arial-ItalicMT". For best performance, only use PostScript names when calling this API.
```

# いよいよ実行!

まずbundle installです．

```
$ bundle install
```

その後，次のコマンドを実行すると，Railsのrootに``erd.pdf``が生成されます．

```
$ rake erd
```
HiveによるHBase ROWカウント

下記の通りtable(hbase.table.nameは任意のHBaseテーブル名)を作って

```sql
CREATE EXTERNAL TABLE hbase_table(
    key string,
    value string
) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,column:val")
TBLPROPERTIES("hbase.table.name" = "table");
```

セレクト。

```sql
select count(*) from hbase_table;
```

これでMapReduceでカウントされる。
【Ruby】TwitterAPIで特定のワードを呟いてる人をフォローする方法

<img src="http://www.teachthought.com/wp-content/uploads/2012/10/twitter-logo-break.png"><br>
RubyでTwitterのAPIを叩いて特定のワードを含んだツイートを取得し、そのツイートを呟いたユーザをフォローするプログラムを書いていきます。

## 環境

- Ruby 2.1.1p76
- Twitter gem (v5.9.0)


## 実装手順

### Twitterのapiを使うのに便利なTwitter gemをインストール

```
gem install twitter
```

### Twitterのアプリ登録

1. [Twitter Developers ](https://dev.twitter.com)でアプリ登録をする。<br>
ログイン → 右上 の[My Applications] → [Create a new application]

2. アプリの設定
    - Name：任意
    - Description：任意
    - Website：適当なURL
    - Callback URL：適当なURL<br>
※WebsiteとCallbackURLはhttp://localhost:3000 だとエラーになるので、https://www.google.co.jpでも何でもいいのでURLを入力してください。

3. [API Keys] → API key, API secret<br>
これらをあとで使います。

### 設定

```ruby
client = Twitter::REST::Client.new do |config|
  config.consumer_key        = "API key"
  config.consumer_secret     = "API secret"
  config.access_token        = "ユーザのaccess token"
  config.access_token_secret = "ユーザのaccess secret"
end
```

### Tweetを取得し、つぶやいたユーザをフォロー

```ruby

# 「バルス」を含むつぶやきを15件取得し、フォロー
client.search("バルス").take(15).each do |tweet|

   client.follow(tweet.user.id)

end

# @justinbieberへのリプで、「marry me」を含むつぶやきを15件取得し、フォロー
client.search("to:justinbieber marry me").take(15).each do |tweet|

   client.follow(tweet.user.id)

end

# 「#ruby」を含むつぶやきで日本語のものを15件取得し、フォロー
client.search("#ruby", lang: "ja").take(15).each do |tweet|

   client.follow(tweet.user.id)

end
```
ちなみにTwitterのAPIの仕様上、15分につき15人までしかフォロー出来ないので注意して下さい。
以上です。お疲れさまでした！！

### ブログやってます！！

[その時凡人が動いた](http://alex23drum.hatenablog.com)
Windows2012Server Essentials 評価版でVisualSVNServerを試す


#はじめに
 2014春はWinXPサポート切れでごたごたしましたが、来年2015/7にもWindows2003Serverのサポート切れで、社内サーバのいくつかが影響を受けます。
その中のSVNサーバがWindows2003Serverで動いているので、そろそろ移行についての準備しておかないと、ということで、
gitにしなくていいのか？とかサーバLinuxにしないの？といった話もありますが、とりあえず、現状維持、つまり、OSだけアップグレード、という、安易な方法で検討してみます。
Windows2012ServerEssenials評価版というのが期間限定で利用できそうなので、SVNサーバに使っているVisualSVNServerがそもそも動くのかどうか検証してみました。

#Windows2012ServerEssentials評価版の入手・インストール

## ダウンロード
ダウンロードは無料です。
http://technet.microsoft.com/ja-jp/evalcenter/dn205288.aspx

Microsoftアカウントの登録が必要です。
180日間使用できます。

## インストール
  適当なPCにインストールして確認します。あまりおもしろくもないのでここは省略します。

##  困ったこと
*  Win8同様の画面なので面倒です。お決まりの「シャットダウンが見つからない」のに苦労します。
*  Administrator以外にnetadmin（ネットワーク管理者）が必要です。おまけにパスワードチェックがきびしくなっています。パスワードに会社名（インストール時に登録必須）が入っているだけではねられます。
*  インターネット時刻設定が面倒なことになっています。
http://www.server-world.info/query?os=Windows_Server_2012&p=ntp
素直にntpdのソフトを入れたほうがいいかもしれません。

#確認したこと

## VisualSVNServerのインストール・動作

### VisualSVNServerのダウンロード

以下からインストーラをダウンロードします。
http://www.visualsvn.com/server/

standard edition(Free)版をダウンロードしました。

### インストール
  普通にインストールするだけ。特に問題なし。

使用したVisualSVNServer のバージョンは2.7.5
一緒にインストールされたsvnのバージョンは1.8.8

### サービス化されているか
インストールと同時にWindowsサービスに登録されるのも今まで通り。
サービス開始／停止もVisualSVNServerの画面からも操作できるのも今まで通り。特に問題なし。

### SVNクライアントからコミット/アップデート
テスト用にリポジトリを作って、他のPCからTortoiseSVNで、チェックアウト／コミット／アップデートも特に問題なさそうです。

## 既存のリポジトリの移行
  がっつりリポジトリフォルダごとコピーしてきても動くとは思いますが、一応、svnadmin dump/loadで移行できるか確認します。
一つやってみましたが、特に問題ないようです。
  リポジトリ数が多いと一つ一つdump/loadするのは大変なので、スクリプトか何かで一括でできるようにした方が良さそうです。

## コミットメール送信
  今はrubyで作成したコミットメール送信の仕組みを使っています。（rubyで作成とはいってもどこかで拾ってきたものをVisualSVNServer向けにちょっとアレンジしたもの）
これをrubyの最新版に合わせて改造するか、何かで真面目にこさえるか。。。検討中。。。。
Apache module作るよ

apache moduleを作る機会があったので、作り方のメモ

### 環境準備

apache moduleを作成、ビルドするためにはapxs(Apache Extension)なるものが必要。
これはapache devパッケージとしてあるのでこれを入れる。
apache2.xではMPM(Multi Processing Module)によって導入するdevelパッケージが違うようなので、まずは確認。

```shell-session
> apache2 -V
```

として、

```
Server MPM:     Prefork
```

となっているのを確認して、prefork用のパッケージをインストールする。

```shell-session
> sudo apt-get install apache2-prefork-dev
```

ちなみに、MPMが`Worker`となっている場合は、

apache2-threaded-dev

をインストールする。

### ひな形の作成

以下、`module_name`の部分は任意のモジュール名

```shell-session
> apxs2 -n module_name -g
```

### build & install

```shell-session
> apxs2 -c mod_module_name.c
> apxs2 -i -a -n 'handler_name' mod_module_name.la
```

### soモジュールのみの作成

```shell-session
> apxs2 -c mod_module_name.c -o mod_module_name.o
> gcc -shared -o mod_module_name.so mod_module_name.o
```

### sample

https://github.com/unksato/mod_sleep

詳細は次回に
brewで管理しているパッケージを更新する


まずは`--help`で確認。`upgrade`ですね！

```bash
$ brew --help
Example usage:
  brew [info | home | options ] [FORMULA...]
  brew install FORMULA...
  brew uninstall FORMULA...
  brew search [foo]
  brew list [FORMULA...]
  brew update
  brew upgrade [FORMULA...]
  brew pin/unpin [FORMULA...]

Troubleshooting:
  brew doctor
  brew install -vd FORMULA
  brew [--env | config]

Brewing:
  brew create [URL [--no-fetch]]
  brew edit [FORMULA...]
  open https://github.com/Homebrew/homebrew/wiki/Formula-Cookbook

Further help:
  man brew
  brew home
```

ということで以下で更新できます。

```bash
$ brew upgrade [パッケージ(FORMULA)]

#例----------------
$ sbt --version
sbt launcher version 0.12.4

$ brew upgrade sbt
==> Upgrading 1 outdated package, with result:
sbt 0.13.2
==> Upgrading sbt
==> Downloading http://typesafe.artifactoryonline.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/0.13.2/sbt-launch.jar
######################################################################## 100.0%
==> Caveats
You can use $SBT_OPTS to pass additional JVM options to SBT.
For convenience, this can be specified in `~/.sbtconfig`.

For example:
    SBT_OPTS="-XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
==> Summary
?  /usr/local/Cellar/sbt/0.13.2: 3 files, 1.1M, built in 3 seconds

$ sbt --version
sbt launcher version 0.13.2
#------------------
```
brew本体をアップデートする


`--help`でそれっぽいものを探したところ、`update`がありました。

```bash
$ brew --help
Example usage:
  brew [info | home | options ] [FORMULA...]
  brew install FORMULA...
  brew uninstall FORMULA...
  brew search [foo]
  brew list [FORMULA...]
  brew update
  brew upgrade [FORMULA...]
  brew pin/unpin [FORMULA...]

Troubleshooting:
  brew doctor
  brew install -vd FORMULA
  brew [--env | config]

Brewing:
  brew create [URL [--no-fetch]]
  brew edit [FORMULA...]
  open https://github.com/Homebrew/homebrew/wiki/Formula-Cookbook

Further help:
  man brew
  brew home
```

さっそく実行。

```bash	
$ brew update
Updated Homebrew from 487f4f06 to e0d83255.
#ログが続く...
```

更新できました！
覚えておくと、いつかあなたの役に立つ、Javaでクラスを動的生成

Javaは様々なところで使われてきた実績があります。
だからこそ、様々な可能性が探られ、いろいろな機能が提供されてきました。

Javaで動的にクラスを作成する、という機能も、幾分前からあります。
Javaの良さは静的型付け言語でのお硬さですが、JVM上で動的にクラスを作成するとで、Javaの可能性が広まります。

広げ方は別途お伝えするとして、本稿ではJavassistを使ったJavaのクラスの動的生成をご紹介します。

# クラスの動的生成とは
Javaはコンパイルを行う言語なので、普通は
ソースコード作成→コンパイルでクラスファイルを作成→アプリケーション実行
のようにアプリケーションを作っていきますが、クラスの動的生成を行うと、アプリケーションの実行中にクラスを作ることができます。

# Javassistによるクラスの動的生成
クラスの動的生成を行うことのできるプロダクトはいくつかありますが、ここではjavassistを使用します。javassistはAPIがとてもうまく設計されており、わかりやすくクラスを作成することができます。

# サンプル
サンプルの全体はGithubで[公開](https://github.com/ukiuni/JavaAssistInspection)してありますので、ここでは主要部分の抜粋を記載します。

```java:クラスの生成サンプル
//クラスの作成
CtClass cc = ClassPool.getDefault().makeClass("MyClass");

//フィールドの追加
CtField field = CtField.make("private int calledNumber = 0;", cc);
cc.addField(field);

//メソッドの追加		
CtMethod method = CtNewMethod.make("public String generateCurrentString() {return \" + currentNumber is + \" + calledNumber++;}", cc);
cc.addMethod(method);

//アノテーションの追加
ConstPool constpool = cc.getClassFile().getConstPool();
AnnotationsAttribute attr = new AnnotationsAttribute(constpool, AnnotationsAttribute.visibleTag);
Annotation annot = new Annotation("javax.xml.ws.BindingType", constpool);
annot.addMemberValue("value", new StringMemberValue("http://www.w3.org/2003/05/soap/bindings/HTTP/", constpool));
attr.addAnnotation(annot);
method.getMethodInfo().addAttribute(attr);
```

フィールドを追加するときも、メソッドを追加するときも、各インスタンスを生成してクラスに追加していく要領でできます。

簡単なのでぜひお試しください。
使いドコロがわからない？それはまた別稿でご紹介します。
LabVIEW Tips: Exeの多重起動

#はじめに
LabVIEWで作成したEXEは多重起動できません。EXEファイルを何度ダブルクリックしても、すでに起動していたら画面がアクティブになるだけです。
HWやデバイスドライバ、計測機器との通信がある関係上、複数起動できないのは、むしろ好都合なのですが、まれに、複数インスタンスが起動できたらいいな、というケースもあります。EXEをコピーして名前を変えればいいのですが。

#多重起動を許可する設定
  exeをビルドした時に一緒にexeと同名のiniファイルが作成されますが、それに以下の1行を追加します。

    allowmultipleinstances = TRUE

#おまけ
  exeをビルドする都度、Iniファイルを編集するのもなんなので、EXEのビルド設定のビルド後アクションでこの行を追加するVIを作って自動化します。

サンプルをGithubに登録しておきました。
https://github.com/alucky4416/LvBuildAction

Post-Build Action_AddToIni_allowmultipleinstances.viというファイルをプロジェクトにコピーして、プロジェクトファイルに追加して、EXEのビルド設定のビルド後アクションに追加したVIを設定すると、EXEビルドして作成されたIniファイルの末尾に多重起動を許可する設定が追加されます。


#参照
http://digital.ni.com/public.nsf/allkb/AB268878693EF4B586257037004A6725
ruby-llvm をビルドするまでにやること


それほど複雑でもないけど、いつもやっている手順をメモ

## checkout

適当なディレクトリに `clone`

```bash
% mkdir RubyLLVM; cd RubyLLVM
% git clone git@github.com:ruby-llvm/ruby-llvm.git
% cd ruby-llvm
```

## bundle install

個人的な好みで、ライブラリや binstubs はプロジェクトの親ディレクトリにインストールしている。

```bash
% bundle install --path ../lib --binstubs ../bin
Resolving dependencies...
Using rake 0.9.6
Using docile 1.1.3
...
```

## Build libRubyLLVMSupport and config file

`llvm-config` にパスが通っている必要がある。

```bash
% llvm-config --version
3.4
```

ext/ruby-llvm-support にある Rakefile を実行

```bash
% cd ext/ruby-llvm-support
% ../../../bin/rake
checking for llvm-config... llvm-config
checking for C++ compiler... Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.1.0
Thread model: posix
clang++
% cd ../..
```

これで、

* C バインディングの `libRubyLLVMSupport-3.4.dylib`
* 環境情報を集めた lib/llvm/config.rb

が作成される。

## Test

```bash
% LD_LIBRARY_PATH="`llvm-config --libdir`" ../bin/rake
Run options: --seed 13559

# Running:

.....................................................................................

Finished in 0.630651s, 134.7814 runs/s, 464.5993 assertions/s.

85 runs, 293 assertions, 0 failures, 0 errors, 0 skips
```