OmniAICreator/Qiita-1.07M huggingface dataset:
ライブラリインポート時のMultiple dex files define L{package}/BuildConfigエラーの対応

ライブラリを作成してサンプルプロジェクトを作っている時、ライブラリをgradleのdependenciesに入れてインポートすると、ビルド時にこんなエラーがでました。

```
dependencies {
  compile project(':library')
}
```

```java
com.android.dex.DexException: Multiple dex files define Lcom/konifar/endlessscroll/BuildConfig;
```

サンプルプロジェクトのパッケージがライブラリのパッケージと同じだったので、違うパッケージにすれば直りました。

```
com.konifar.endlessscroll
⇩
com.konifar.endlessscroll.sample
```

以上！


参考 : [Multiple dex files define <my package>/BuildConfig, can't find the cause:](http://stackoverflow.com/questions/25103288/multiple-dex-files-define-my-package-buildconfig-cant-find-the-cause)
Ruby on Rails Tutorialで詰まったところ　その１

[Ruby on Rails Tutorial](http://railstutorial.jp/)で困ったところをメモ。

第2章 2.2 Usersリソース
チュートリアルに記載されている
`rails generate scaffold User name:string email:string`
を実行すると、
`C:/Sites/rails_projects/demo_app/config/environments/development.rb:1:in `<top (required)>': undefined method `Application' for Rails:Module (NoMethodError)`
というエラーが出る。

development.rbの1行目のメソッドApplicationが定義されてないよ、とのことなのだが、
http://stackoverflow.com/questions/23388205/rails-generate-scaffold-error
によると原因はチュートリアルのrails generateコマンドでバージョンを指定していないため、Rails 4.1系の書き方になっていることだった。

エラーが発生するときのdevelopment.rb 1行目
`Rails.application.configure do`

修正後のdevelopment.rb 1行目
`DemoApp::application.configure do`

これで通った！

よく見たら最初にrails newするときにバージョン指定してあげると、この問題は起きないって第１章（1.2.3）に書いてあったね。失敗失敗。

・・・結局その後にrails sするとInternal Server Errorが起きるので、諦めて
rails new _4.X.X_ demo_app しなおしました。
.javaから.jar、そして実行まで

java初心者の僕がjavaファイルからjarファイル作って実行するまで

↓元ファイル

```java:hello.java
public class hello {
	public static void main(String[] args) {
		System.out.println("Hello " + args[0]);
	}
}
```

javacでクラス作って〜

```
$ javac hello.java
$ ls
hello.class	hello.java
```

makefile書いて〜

```mf:hello.mf
Main-Class: hello
```

jar作って〜

```
$ jar cfmv hello.jar hello.mf *.class
マニフェストが追加されました
hello.classを追加中です(入=574)(出=354)(38%収縮されました)
```

実行！

```
$ java -jar hello.jar World!
Hello World!
```

一丁あがり！

ハマったのはmakefile作るとこですかね。

```
$ jar cvf hello.jar *.class
マニフェストが追加されました
hello.classを追加中です(入=574)(出=354)(38%収縮されました)
$ java -jar hello.jar
hello.jarにメイン・マニフェスト属性がありません
```

えっ！
みたいな

// Larry Carlton & Tak Matsumoto「TAKE YOUR PICK」を聞きながら作業しました。
manの日本語表示でHomebrewを削除、再インストールしたら表示できた

2015/04/19
初めての投稿でこんな内容になってしまった。
五日がかりでHelppage(Shellでのマニュアル表示) manの設定をしていて、色々なサイトをキーワード検索して参考にしながらやってみたが、どうしても日本語の表示ができなくて、どうしようもなくなって Homebrew を削除してしまった。  
その結果、iTerm.appやTerminal.app までおかしくなってしまった。　/usr/local/bin/zshを削除してしまったらしい、如何にもこうにも使う事ができなかったが、/bin/zshを見つけてそれを読み込むよう設定してなんとか使えるようになったところで、Homebrew を再インストールした。  
しかしなんと、今までどうしようもなかった日本語表示ができるではないか、うひょ〜、やった〜、何が原因かわからなかったけど、アタって砕けちりそうになったHomerewの削除だったが、再インストールが功を奏したようだ。ここまでの苦労が実って(偶然のような出来事だが)とても嬉しい。いろいろ勉強にもなったし、ありがたやありがたや。  
今回の事で初めてQiitaを知り、すごく活用させてもらった、今まで知らなかったなんて、でもやる気が出てきたぞ〜  :stuck_out_tongue_winking_eye:
HHVM環境でComposerをインストールする方法

composer.pharは1行目のshebangが

```
#!/usr/bin/env php
```
となっているので、コマンドとして叩くとphpで実行されてしまいます。

hhvmで起動するためには

```
$ hhmv --php composer.phar
```
とする必要があります。
しかしこれは面倒くさい。

# composer.pharは改ざんするとエラーになる

じゃあshebangを書き換えればいいじゃないかと思って

```diff
- #!/usr/bin/env php
+ #!/usr/bin/hhvm --php
```
と書き換えて実行してみると、

```
$ ./composer.phar

Fatal error: Uncaught exception 'PharException' with message 'phar has a broken signature' in :
Stack trace:
#0 (): Phar->parsePhar()
#1 (): Phar->__construct()
#2 /usr/local/bin/composer.phar(23): Phar::mapPhar()
#3 {main}
```

むむむ・・「シグネチャが壊れた」というエラーメッセージが。
composer.pharにはコンテンツ改ざん検知の仕組みがあって、中身が改ざんされたらエラーになってしまうようです。
なんとおせっかい、いや、セキュアなことでしょう。

# 対策：ラップコマンドを作ればおｋ

とりあえずオリジナルのcomposer.pharをパスの通った場所に設置して、

```bash
mv composer.phar /usr/local/bin/composer.phar
```

下記のようなラップコマンドをつくって`/usr/local/bin/composer`として保存します。

```bash:/usr/local/bin/composer
#!/bin/bash
# simply delegate to composer.phar

dir=$(cd $(dirname $0);pwd)
exec hhvm --php $dir/composer.phar "$@"
```

こうすると、`composer`と叩くだけで hhvm経由でcomposer.pharを起動することができます。
ローカルにある複数の同様ブランチを一括で削除する裏ワザ


タスク毎にブランチを作った際に面倒なのが
不要になったブランチの削除。

今まで

````
git branch -D 削除したいブランチ名

````
を実行していましが、ちまちま削除する時間もったいないなーと気づいて(今更ながら)試してみました。


## 裏ワザ実行前の状態

````workディレクトリ
g08m11$ git branch
  bug_fix_additional
  bug_fix_api
  bug_fix_delete_user
  bug_fix_jobs
  bug_fix_mailer
  bug_fix_paging
  bug_fix_recommend
  bug_fix_redirect
  bug_fix_rout
  develop
* master
  
````

## 裏ワザコマンド


````

git branch | grep 削除対象の共通文字 | xargs git branch -D

````


<b>例</b>

````

git branch | grep bug_fix | xargs git branch -D


````

## 実行コマンド

今回は「bug_fix」を含むブランチを削除するための以下のコマンドを実行

````

git branch | grep bug_fix | xargs git branch -D

````

## 裏ワザ実行後の状態

````
g08m11$ git branch
  develop
* master

````


裏ワザって程でもないですが。。。


ブランチ名にある程度の規則性を持たせることが前提ではありますが
ぜひ、試してみてください。


## ちなみに
gitのブランチの削除オプションは「-d」、「–delete」、「-D」がありますが今回は「-D」を使用しました。


<b>-d または –delete はマージされたブランチは削除できる</b>
<b>-D は容赦なく（irrespective）ブランチを削除する</b>
GoogleスプレッドシートでGoogleサジェスト結果を取得する

Googleスプレッドシートで、任意のキーワードに関するGoogleサジェスト結果を取得します。

## 使い方
任意のセル(例としてA1)にキーワードを入力し、サジェスト結果を取得したいセルに下記のように入力します。

```
=IMPORTXML("http://www.google.com/complete/search?hl=en&output=toolbar&q="&A1,"//suggestion/@data")
```


![suggest.jpg](https://qiita-image-store.s3.amazonaws.com/0/48375/4fccee47-2a19-dfd5-1091-ad745df83a85.jpeg)


## 参考
- http://webshufu.com/google-suggest-api/
vagrant 共有フォルダマウントエラー Failed to mount folders in Linux guest

エラー内容
--- 
```
Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant

The error output from the last command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device
```

解決方法
---
vagrant プラグイン vagrant-vbguestを入れる

$ vagrant plugin install vagrant-vbguest
Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
Installed the plugin 'vagrant-vbguest (0.10.0)'!

$ vagrant vbguest --status
GuestAdditions 4.3.26 running --- OK.

$ vagrant reload


```


good luck!
ボーダーブレイク用　目押し射撃練習ツールをつくる

#概要
ゲームセンターのアーケードゲーム
ハイスピードロボットバトル　ボーダーブレイクには
射撃武器を使う上で目押しと呼ばれるテクニックがあります

音で目押しのタイミングを聞く動画などがありますが
実際のゲームセンターで練習する場合周りの騒音が気になるのと
せっかくお金払ってるのでゲーム音楽を楽しみながら練習したいですよね :wink: 
そして手の近くでタイミングを教えてくれればより直感的に練習できると思い作ることにしました

##目押しとは
フルオートでない武器は適当に連打すると入力受付前に押してしまい弾詰まりが起こってしまいます
なのでカタログスペックに近づけるためには一定間隔毎に素早くクリックする必要があります
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/67904/15fbdaeb-cb43-4d87-fcc8-ddcbc4fe2ac5.png)


今回はSTAR-10をリロードA-の腕で使った場合として作っていきます

#仕組み
1.STAR-10の間隔で弾を発射
2.打ち切り後リロードを挟む(今回は弾薬量を無限とする

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/67904/832bda7c-0b33-172f-779d-2b9e66a407d5.png)



#必要な物
##ツール
半田ごて
はんだ
スズメッキ線
グルーガン
ドライバー
ミニルーター
その他工作補助ツール

##素材
###100均
時計
###秋月(通販
ボタン電池CR2032 
電池ボックス
ATtiny13A
トランジスタ
###千石電商
小型振動モーターVMT-004
ユニバーサル基板(ぱっと見一番ちっちゃかった奴
スイッチ(on/off)切り替え


#プログラム

```lang:STAR10.aps
#include <avr/io.h>
#include <util/delay.h>
int main(void){

	DDRB = 0b111111;

	while(1){
		int i;

		for(i=0;i<18;i++){

			PORTB = 0b001000;
			_delay_ms(100);
			PORTB = 0b000000;
			_delay_ms(100);
		}
		_delay_ms(1235);//"A-"(0.65)*☆10(1.90sec)
	}
	return 0;
}
```
あんま理想的じゃないけど
おもちゃだし多少はね
#回路
ダイオード使わないと壊れるかもだけど　スペースあんまないからごり押し
![vibe_ブレッドボード.png](https://qiita-image-store.s3.amazonaws.com/0/67904/c55a3562-54bd-ba1a-7bcb-337906f6c03d.png)
#工作
まず配線
![DSC_0004.JPG](https://qiita-image-store.s3.amazonaws.com/0/67904/bf5f3973-bf92-8368-7fc8-e9e20508e7df.jpeg)
![DSC_0005.JPG](https://qiita-image-store.s3.amazonaws.com/0/67904/7255375c-7f55-0cee-df97-22c2e47e1105.jpeg)

100均時計の中の基板を外し
ミニルーターで中の空間を広くし中にくっつけます

バイブレータをくっつける方法が見つからなかったので
グルーガンで他の配線を絶縁させるついでに固定しました
![DSC_0007.JPG](https://qiita-image-store.s3.amazonaws.com/0/67904/583391bb-fade-c926-8c32-2ed9abf9f784.jpeg)
![DSC_0008.JPG](https://qiita-image-store.s3.amazonaws.com/0/67904/4fa7c9cd-e49d-281d-f51e-3d735d225f2c.jpeg)

腕に密着する側の蓋をドライバーで閉め
念のための固定に輪ゴムを巻きます(振動を伝えやすくもなりそう？

#装着後の感想
![DSC_0006.JPG](https://qiita-image-store.s3.amazonaws.com/0/67904/822af6d0-5ec8-0e36-21bc-1d1cd5030042.jpeg)
振動伝わるか不安だったけど割と感度良い!

上の隙間から振動モーター見えるのがギミック感あっていいね :relieved: 


#今後の課題
タイマーでもうちょい正確にする

ダイオードで優しい回路

ISP実装で再プログラム可能or目押し武器のモード切替　の実装

**なにか質問などあればコメントお願いします。**
jQuery Mobileで$mobile.ajax(Forms|Links)Enabledが廃止されたらしい

jQueryMobileを使用すると、Ajaxによるページ遷移が有効になります。カッコいいのかもじれませんが個人的にはこの上品ぶった感じのページ遷移方法が嫌いで、無効にしたいと思いました。サーバープログラムの動作にも影響を与えることがありますし。

で、よくある設定例は、だいたい以下の通り。

```js:config.js
jQuery(document).bind("mobileinit", function(){
    jQuery.mobile.ajaxLinksEnabled = false;
    jQuery.mobile.ajaxFormsEnabled = false;
});
```

ここで作成したconfig.jsを、jQueryMobileと一緒に読み込むようにすればOKです。

・・・の、はずなのですが、これをしてもAjaxのページ遷移が有効になってしまう。なんでだろう？

と、調べてみると、ajaxLinksEnabledとajaxFormsEnabledは廃止されたようです。

 * http://havelog.ayumusato.com/develop/javascript/e267-jqm_beta1_upgrade.html

というわけで、こうするのが正解。

```js:config.js
jQuery(document).bind("mobileinit", function(){
    jQuery.mobile.ajaxEnabled = false;
});
```

これでAjaxページ遷移が無効になります。
CentOSのキーボード配列を英字に設定する

# なぜ英字配列に設定するか
Thinkpad Edge E130を購入したところ、キーボードが英字配列のものであったため、正しく動作するよう設定する。
その際、VirtualBox上のCentOSでの設定手順に手間取ったため、メモ書きしておく。

# 設定手順
以下のリンクに記述されている通りに、設定ファイルを編集し、OSを再起動する。
[CentOS/コンソール上の英語キーボード・日本語キーボードの切替方法](http://linux.just4fun.biz/CentOS/%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%E4%B8%8A%E3%81%AE%E8%8B%B1%E8%AA%9E%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E3%83%BB%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E3%81%AE%E5%88%87%E6%9B%BF%E6%96%B9%E6%B3%95.html)

```lang:/etc/sysconfig/keyboard 
KEYTABLE="us"
MODEL="pc105+inet"
LAYOUT="us"
KEYBOARDTYPE="pc"
```

日本語配列に設定する場合の記述方法も書かれているため、必要に応じて参考にする。
PoderosaからCoreOSにSSH接続できなくなった

あるときWindows AzureのCoreOSにアクセスしようとすると、次のメッセージが表示されるようになりました。

```
---------------------------
接続エラー
---------------------------
Server does not support diffie-hellman-group1-sha1 for keyexchange
---------------------------
OK   
---------------------------
```

調べてみるとdiffie-hellman-group1-sha1 という鍵交換アルゴリズムがサーバーでサポートされなくなったために発生したメッセージのようです。

 * http://qiita.com/tukiyo3/items/a9b955f0fad03f6279d2

さて、それはわかりましたがSSHでアクセスできないことにはWindows Azureの仮想マシンにはアクセスできません。上記記事によるとSSHの設定をいじれば対応は可能なようですが、そもそも仮想マシンの設定にアクセスできませんので(ry

# (自分の出した)回答

Poderosaを使わない

まあ、設定変更のために一時的に という手もありそうですが、とりあえず他のSSHクライアント(たとえばTera Termとか。自分はTera Termを使いました)を使えば、問題なく接続できます。

キーボードショートカットの変更などが面倒ですが、とりあえずはこれで進めてみようと思います。
wercker で Redis service を利用する

公式に書いてあるだろと言われそうですが一応。

## Services にある Redis を利用する

[Services - wercker](http://old-devcenter.wercker.com/articles/services/)

MySQL/PostgreSQL 以外にも MongoDB 等があり、その中に `Redis` も利用できる。

このサービスを利用する事で、ビルドプロセスの中で Redis をインストールしたりする必要が無くなる。

## 利用方法

### wercker.yaml

以下のように `wercker/redis` を `services` に追加します。

```yaml:wercker.yaml
box: wercker/rvm
services:
    - wercker/redis
build:
    ....
```

### コードでの利用

可能ならテスト環境でのみ差し替えられるようにした方が便利です。(`mock-redis` とかを使うケースの方が多いかもしれませんが）

```rb:spec_helper.rb
# redis-rb を利用している場合
config.before :all do
  Redis.current = Redis.new(
    host: "#{ENV['WERCKER_REDIS_HOST'] || 'localhost'}", 
    port: "#{ENV['WERCKER_REDIS_PORT'] || 6379"
  )
end
```

`dotenv` とか使えば `||` の部分は削れそうですが、お好みで。

参考: [Getting started with Flask, Redis and wercker](http://blog.wercker.com/2013/06/11/Gettingstarted-with-flask-redis.html)

### 他の環境変数

- `REDIS_URL`: `redis://host:port/` 形式の値が取れる
- `WERCKER_REDIS_URL` : 同上
Titanim MobuleのAndroid Moduleビルドがうまくいかないとき

Titanium Mobileのモジュール（Android）ビルドが上手くいかないときの対処法。

> BUILD FAILED
/Users/[User name]/Library/Application Support/Titanium/mobilesdk/osx/3.5.1.GA/module/android/build.xml:354: The following error occurred while executing this line:
/Users/[User name]/Library/Application Support/Titanium/mobilesdk/osx/3.5.1.GA/module/android/build.xml:356: There is discrepancy between the architectures specified in manifest and compiled binary.

こういうエラーが出るとき、manifestに
> architectures: armeabi armeabi-v7a x86

と付け加えるだけでビルドは通るようになる。
テンプレートとビルドオプションの不整合が原因かな？

参考URL：
http://markfour.blogspot.jp/2015/04/titanium-mobile-android-351ga.html
非ARC環境におけるObjective-Cのメモリリークチェック

今更、非ARC環境についてあまり考えても仕方ないのだが、そういうアプリもあるわけで。
メモリリークのチェックについて、いろいろ確認を。

Xcodeにおいてメモリリーク等のチェックに主に使うのはAnalayzeとInstruments(Leaks)

どちらも単純なメモリリークについては見つけてくれるのだが
allocした関数内で完結しない（retain増えるような別クラスに渡すとか）すると見つけてくれない（らしい）

そうなってくると難しいのがメモリリークしていないことの確認。
単純にInstrumentsのAllocations眺めてても結構変動するので
今回手を入れた個所がおかしいのか元々なのか
そもそも問題あるのかどうかすら、イマイチわからない。

なので、とりあえず、勉強がてらInstrumentsのAllocationsで見るべきポイントを絞ってみた。
・Statisticsの#Persistent
　これが確保されたままとなっている領域で、これが増え続けるようだとまずい。
・Allocation List
　そもそも怪しい領域の目星がついているのなら
　NSLog(@"%p", str)とかでアドレスをConsoleに出しておいて
　Allocation List検索して様子を探れる。
　メモリが確保された呼出し元の関数も検索対象にできるようで
　自作の関数が乗ってたりするケースもあり、便利。
　参照カウントの増減履歴なんかも見れたり。
・DetailにあるGeneration Analysis欄のMark Generation
　Markした時間のAllocationsで監視している内容を保持して
　次のMarkをしたときに前回からどれだけ#Persistentが増えたかとか出してくれるみたい。便利。
　Markした横の矢印で中に入ると前回から今回までの時間帯の情報に絞ってくれるので
　Allocation Listで対象絞ったりも多少楽かも。

公式のマニュアルにはMark Generation使い方として
同じ動作何回かしてみて増え続けないことを確認とあるのだが
UIAlertController表示を繰り返すだけでも増減0にならなかったり。
多少の変動は気にしなくていいのかも。

最後に触っててちょっと罠かなと思ったのが
・LeaksのAutomatic Snapshotting
　あまりに早いと解析しっぱなしになってしまって、メモリリーク解析されない。。
　デフォルトの10秒ぐらいで見ておけばいいっぽい。
・再生ボタンみたいなところからProfile起動する場合
　Buildし直したと見せかけて、シミュレーターのアプリは更新されていないらしい。
　普通に更新前のアプリが起動した。。

メモリリークは今後も調べたりありそうなので、もう少し詰めてみてもいいかもしれない。
Swiftで開発してもチェックはするのだろうし。
今回触れなかったけど、Trace Symbolとか便利そうだった。

とりあえず、Qiitaのお試し利用と、自分用メモ兼ねて。
そのうちまとめ直して画像付きとか凝ってみてもいいのかも。
2015年4月中四国Ｐ２Ｍセミナー メモ

2015年4月中四国Ｐ２Ｍセミナー

http://www.pmaj.or.jp/p2m/seminar/150418/index.html

## アジャイルテスティング

アジャイル -> 小さいチームではうまくいく <- 世の中で認知されつつある。

分散　利点と欠点
コミュニケーションコスト
ダイバーシティー：習慣の違い、言語の違い、相互作用／対話

チャレンジ -> 理由を確認する。人によっては問い詰められてると思うこともある。

テスティングに特定した課題
* 依存関係が大きすぎる
* アウトソース
* 独立したテストチーム
* インテグレーションのテスト

解決方法

* 全員にオープン <- みんながアクセスできるようにする。
	* 意思決定
	* 計画づくり会議
	* 議事録
* 均等な機会
	* 全員ヘッドセットで参加（例）：オブザーバー


ツール：使い分け

* Email
	* ブロードキャスト
	* 会話後のフォロー
* 電話
* メッセンジャー
* 顔を見ながらの対話 <- お互いを理解するきっかけになる。訪問しなくてもできる方法
	* バーシャル テレプレゼンス

マインドマップを利用して強調
Google Docs を利用したリアルタイムでのやり取り

ストーリーマッピングツール

ファーストチーム作り <- ゲームを用いること

学ぶことに楽しさを持ってくる。

テストでチームのコミュニケーションを手助けする。問いからテストが始めることもある。
Done の定義 <- 何を持ってOKとするかの共通理解を設ける。

早いフィードバック　フィードバックサイクルを短くする。
Feature teams 機能をベースとしたチームを作る。コンポーネントでチームをわけるより依存関係が減る
学ぶ組織を作る

## デジタル革命には　アジャイルがよく似合う

重要な言葉「インサイト」

ビジネスデジタル革命
フィルム -> デジカメ -> 別分野で活躍
３Dプリンタ -> 何が起きるのか

最後まで残る仕事 -> 料理人かもっとのこと

7つ
SO Social, LO Location, MO Mobile,
CP Contactless Payment
CL Cloud, SE Sensor, BI Big Data

サッカーを科学する
ドイツ -> 靴にセンサーをつけて情報収集。科学する。

Sales デジタル化
訪問先をすべてデジタル化する。セールスマンの行動をすべて見える化する。
販売活動に対して、足りない点を科学で指摘できるようにする。

警察のビジネスモデル。戦争のビジネスモデル。すべて変化が起きている。

デジタルビジネスの特徴。常にイノベーションを実施する。
新しい価値づくり。お客様がその製品に対して Wow と言ってくれるものを作る。

４つの視点 <- アジャイル ビジネスを作ることも同じ

* Customer Centric お客様から見る。言葉だけでは実現できない。実現するためのメソッドが「Design Thinking」
４日間のワークショップでマインドを変える。シンガポールでは小学校４年生から Design Thinking を実施している。CEFL
* Collboration
	* Dialog 議論するのではなく対話する。
	* プロトタイプ
	* 考える人／作る人をわけない。一体化で実施する。
* Visible 見えるようになれば工夫できる。ソフトウェアは見えないから改善が難しい。
	* 要件定義書なんて書いても意味がない。模型とか本当に目で見えるもの
* Iterative 改善。実際にお客様に見せてフィードバックを受ける。

ウォーターフォールで議論してビジネスを作って、この世の中に勝てるのか？
アジャイルかウォーターフォールかで議論している場合ではない。
アジャイルでないと勝てない。

Constant beta フィードバックと毎日の改善

会社としてのカルチャー　文化を変える。
アジャイルチームを作りゆっくりシフトする。
アジャイルチームが失敗を繰り返して勉強をしていく。

CEFL -> 経営者に対しての啓蒙を実施する。

エンジニア　ビジネスを提案して、ビジネスの議論ができるようにならないといけない。
テクノロジーを理解したエンジニアしかできない。

ビジネスイノベーション、アジャイル、ビジネスアナリシスは１セット


## 「納品のない受託開発」の先にある「エンジニアの働きかたの未来」

アジャイル型での受託開発。エンジニアが生きる道。
受託開発50% 自社開発50% 100%アジャイル開発

繰り返しは効率はよくない。一気に作ったほうが効率は良い。
100個決まったものを作る。繰り返しだろうと一気につくるだろうとかわならい。

どのくらい作れば、お客様は満足するのか。
なぜ繰り返すのか、いらない機能といる機能をはっきりさせるため <- 最初に約束した機能をすべて作るのであればアジャイル開発する必要はない。

要件として提示された機能を作らないとお金がもらえない。
乗せたリスクが利益になる。 <- ディフェンシブな開発

お客様のビジネスをITで支えるための顧問としてサービスを提供する。

要件定義は不要。仕様変更はいつでも出来る。
作らない提案。

来てもらうか、オンラインか。

納期を死守するとスケジュールにバッファが入る。バッファを積むことになる。

ビジョンを決める。仲間を集め、そこらビジョンを決める。最初にビジョンを決め人を集めるわけではない。

サービスを作るために必要なもの -> 時間

# ビールゲームで楽しく学ぼう

システムダイナミックス（System Dyanmics: SD）を学習するロールプレーイングゲーム

面白かった。
相手を疑ってたし、自分がコントールできると思ってた。
情報が足りてないのに足りてると勘違いしてた。
何を記録すべきか気付いたときに対応すべきだったけど、行動に移せなかった。

後半は、本当に一度リセットしたかった。。。
Hubot に Jenkins のビルド通知を流す

# 前提

* Hubot の設定ができていること
* Jenkins の設定ができていること
* Jenkins と Hubot は同一ホストで動いてるものとする（別ホストにするのも大して手順は変わらないはず）

# 準備

## Jenkins プラグイン

Web 管理画面から Jenkins の Notification Plugin をインストールしておく。

## Hubot の hubot-jenkins-notifier

`npm install --save hubot-jenkins-notifier` で https://www.npmjs.com/package/hubot-jenkins-notifier をインストールする。

```json:external-scripts.json
[
  "hubot-jenkins-notifier"
]
```

# 設定

## Hubot の設定

PORT 環境変数で 5080 ポートで HTTP の待ち受けをするようにしておく（Jenkins のデフォルトと競合するため）

## Job の設定

Notification Plugin を入れると、ジョブ設定の最初の方に Notification の設定が追加される。
（最初はビルド後の処理かと思って見つからずにパニクってました）

Add Endpoint をクリックし、

* Format: JSON
* Protocol: HTTP
* Event: Job Finalized
* URL: http://localhost:5080/hubot/jenkins-notify?room=<room_id>&notstrat=FS
* Timeout: 30000 は長いので 10000 にしておいてみる
* Log: ~~0~~ **1**

**なんか、Logに0を入れているとうまくいかないです。**

room_id は例によってアダプタ依存なので適当に。notstrat は[@ITの記事](http://www.atmarkit.co.jp/ait/articles/1412/12/news030_3.html)を参考に。

Log パラメータで Webhook に対してビルドログを送信できるっぽいのだが、Hubot の hubot-jenkins-notifier が対応していない様子。

hubot-jenkinsを入れると Hubot に命令して Jenkins のジョブ実行とかもできるみたいだけど、それは今回は見送りとしようかな・・・


# 追記：Let's Chat の絵文字を使って見やすくする

そのままだと「build #1 succeeded:」とか「#2 started failing:」とかしか言ってくれないのでぱっと見に分かりにくい。そこで、[絵文字一覧](http://www.emoji-cheat-sheet.com/)の中から青丸と赤丸を使って一目瞭然となるように改造してみよう。

```coffeescript:node_modules/hubot-jenkins-notifier/src/scripts/hubot-jenkins-notifier.coffee
    if data.build.phase in ['FINISHED', 'FINALIZED']
      if data.build.status == 'FAILURE'
        if data.name in @failing
          build = "is still"
        else
          build = "started"
        @robot.send envelope, ":red_circle: #{data.name} build ##{data.build.number} #{build} failing: #{fullurl}" if @shouldNotify(envelope.notstrat, data)
        @failing.push data.name unless data.name in @failing
      if data.build.status == 'SUCCESS'
        if data.name in @failing
          build = "was restored"
        else
          build = "succeeded"
        @robot.send envelope, ":large_blue_circle: #{data.name} build ##{data.build.number} #{build}: #{fullurl}"  if @shouldNotify(envelope.notstrat, data)
        index = @failing.indexOf data.name
        @failing.splice index, 1 if index isnt -1
```

必要なところに`:red_circle:`と`:large_blue_circle:`を足しただけ。これだけでずいぶん見やすくなる。
AngularJSでDirectiveのtemplateを変数を使って動的に変更する方法

AngularJS初心者です。Directiveで表示するtemplateを動的に設定したいと思い、なんとか解決したのでその記録を残しておこうと思います。

## 公式に説明のある方法

まず、[AngularJSのDirectiveの解説ページ](https://docs.angularjs.org/guide/directive)を見て、

```js
.directive('myCustomer', function() {
  return {
    templateUrl: function(elem, attr){
      return 'customer-'+attr.type+'.html';
    }
  };
});
```

このようにやってみました。この方法だと下記のように、`type="name"`と指定するとうまくいきます。

```html
<div ng-controller="Controller">
  <div my-customer type="name"></div>
  <div my-customer type="address"></div>
</div>
```

## 変数を指定するとうまくいかない

ただし、`type="{{name}}"`のようにScopeの変数を指定するとうまく行きません。

```text
GET http://localhost:9000/functions/%7B%7Bname%7D%7D.html 404 (Not Found)
```

中身を調べてみると、`attr.type`は`{{name}}`でした。templateUrlを用意する段階でまだ評価されていないようです。

## 変数を使って動的にtemplateを変更する

そこで、下記のようにした所、変数を使って動的にtemplateを指定することが出来ました。

```js
example = function() {
  return {
    scope: {
      name: "@"
    },
    template: '<pre ng-include="contentUrl"></pre>',
    link: function(scope, element, attrs) {
      return scope.contentUrl = "contents/" + scope.name + ".html";
    }
  };
};
```

`template`で`ng-include`を使って、動的な変化に対応できるようになりました。突っ込みどころ満載と思いますが、おかしな点、言葉遣いの間違いなどご指摘ありましたら。よろしくお願いします！

## 参考

- [AngularJSでDirectiveのtemplateUrlを動的に変更する方法 - Qiita](http://qiita.com/imaimiami/items/c7d2e38f6711c078e390)
- [angularjs - Angular.js directive dynamic templateURL - Stack Overflow](http://stackoverflow.com/questions/21835471/angular-js-directive-dynamic-templateurl/21835866#21835866)
PHPをcssやjsのプリプロセッサとして使う

ちょっとしたjsやcssのビルドにPHPを使ってみてはどうかという話。
アイディア自体は昔からありそうだけど。


# gulp-spawn

そのためにうっかりgulpプラグインを書きかけたのですが、[gulp-spawn](https://www.npmjs.com/package/gulp-spawn)で十分でした。以下は`less/*.less.php`をPHPとして実行してからlessでコンパイルして`build/`ディレクトリに出力する例。

PHPのコードはファイルではなく標準入力から読み込んでいるので、`__FILE__`が使えなかったり、`require`するパスがgulpfile.jsのあるディレクトリからの相対パスになるというところに注意。

```gulpfile.js
var gulp = require("gulp");
var less = require("gulp-less");
var spawn = require("gulp-spawn");
var php = function () {
    return spawn({
        cmd: "php",
        filename: function (base, ext) {
            return base + ext.replace(/\.php$/, '');
        }
    });
};


gulp.task("lessphp", function () {
    gulp.src("less/*.less.php")
        .pipe(php())
        .pipe(less())
        .pipe(gulp.dest("build/"));
});
```

```php:less/app.less.php
<?php $font_size = 18; ?>
#header {
    h1 {
        font-size: <?= $font_size ?>px;
    }
}
```

みたいな感じでlessの中にPHPを書くことができる。もちろんifやforやrequireを書いても良いです。
AlamofireでCache-Controlを設定する


REST APIを呼び出す際などにHTTPリクエストで`Cache-Control`を設定したい場合があると思います。

Alamofireでは、HTTPリクエストヘッダで`Cache-Control`を設定するのではなく、`NSMutableURLRequest`の`cachePolicy`や`NSURLCache`を使って設定します。

### 例:キャッシュを使わずAPIを呼び出す場合

```swift
var request = NSMutableURLRequest(URL:NSURL(string:"http://example.com")!, cachePolicy:.ReloadIgnoringLocalCacheData, timeoutInterval:4.0)
request.addValue("OAuthのAccessToken", forHTTPHeaderField: "Authorization")

Alamofire
	.request(request)
	.response{(req, res, data, err) in
		// レスポンス処理
	}
```
【React Native】objcと連携してみる

SocialFrameworkを使ってFacebook連携しようと思ったのですが、現時点(2015/04)では[FacebookSDKを使った方法](https://github.com/magus/react-native-facebook-login)はあってもSocialFrameworkを使ったものは見当たらなかった(普通使わないものなのかな？？)。

ということで、ReactNativeの公式ページの**[Native Modules (iOS)](https://facebook.github.io/react-native/docs/nativemodulesios.html#content)**をもとに、objc側にSocialFrameworkを使った投稿処理を書くことでやってみたらできたのでメモ。

## objc側の実装

まずSocialFrameworkをリンク付けする。

次に`FacebookManager`というクラスを新規に作成する。こちらに投稿自体の処理と、js側へのcallbackを実行する処理を書く。

```objc:FacebookManager.h
#import "RCTBridgeModule.h"
#import "RCTLog.h"

@interface FacebookManager : NSObject<RCTBridgeModule>

@end
```

```objc:FacebookManager.m
#import "FacebookManager.h"
#import <Social/Social.h>

@implementation FacebookManager

RCT_EXPORT_MODULE();

RCT_EXPORT_METHOD(post:(RCTResponseSenderBlock)callback)
{
  if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) {
    NSString *serviceType = SLServiceTypeFacebook;
    SLComposeViewController *composeCtl = [SLComposeViewController composeViewControllerForServiceType:serviceType];
    [composeCtl setCompletionHandler:^(SLComposeViewControllerResult result) {
      if (result == SLComposeViewControllerResultDone) {
        //投稿成功時
        callback(@[@"投稿しました"]);
      }
    }];
    
    [[self getTopViewController] presentViewController:composeCtl animated:YES completion:nil];
  }
}

- (UIViewController *)getTopViewController
{
  //省略
}
```

ポイントは、

+ `RCTBridgeModule`プロトコルを適用する
+ `RCT_EXPORT_MODULE(hoge:(RCTResponseSenderBlock)callback)`でjs側からhogeメソッドを呼ぶことができるようになる。またjs側にcallbackで処理を返すことができる

## js側の実装(ポイント部分のみ)

```js:hoge.js
var FacebookManager = require('NativeModules').FacebookManager;

//-------------------------

  //投稿ボタン押下時の処理
  FacebookManager.post(function(e) {
    AlertIOS.alert(e)
  })
```

これでFacebook投稿できました。

## まとめ

簡単な例ではあるけどれ、objcとわりかし簡単に連携できるのかなという印象。複雑なことやろうと思ったときにハマったりするのかな。
以下一応メモ。

+ ReactNativeの公式ページによると、swiftはまだ対応していないようです
+ 上のコードで動かないときは`npm update`でreact-nativeモジュールを最新にすること。自分はReactNativeしばらく触ってなかったため`RCT_EXPORT_MODULE()`あたりでエラーでました。
Ruby on Rails4.2で.pngや.jpgや.jsonへの404エラー対応

## error内容
本来404エラーが返ってきたら、rescue_fromで404に飛ばしているが
/~.pngや/~.jpgにアクセスすると

```
Missing template errors/error_404 with {:locale=>[:ja], :formats=>[:png], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. 
```
そんなテンプレートないよって言われる

## 原因
* .pngにアクセスした場合、formats=>[:png]になる
* 今回はErrorsControllerからerrorファイルを探しているがデフォルトのformatsは.html.erb
* そして.pngなんてもちろんviews/errorにない。ゆえにmissing templateと怒られた。
* slackで500エラーを通知する設定をしていたから、アホほどエラー通知が来て辛かった。ことをキッカケに気づく...

## 対策
今回は.pngアクセスでの404エラーを適切に返したいので
以下のようにフォーマット毎に処理を分けた

```
    respond_to do |format|
      format.html { render template: 'errors/error_404', layout: 'error_layout', status: 404 }
      format.all { render nothing: true, status: 404 }
    end
```

## その他
今後json等返したい機会出てきそう。そのとき詰まりそうだからmemo。

## 参考
* [stackoverflow](http://stackoverflow.com/questions/15301335/internal-server-error-500-on-missing-image-file-rails-3-2-12)
* [Github](https://github.com/rails/rails/blob/a06f13099e293ef7b2d7b31909b4f7a7e99edecc/actionpack/lib/action_controller/metal/mime_responds.rb#L8)
Subversion のコミットログを Hubot に流す(書きかけ)

# 参考

http://blog.codiform.com/2012/05/getting-hubot-to-chat-commits-to.html

# やりたいこと

room を埋め込みじゃなく、svn の post-commit フックの方に仕込みたい。


curl は Python(x,y) なら入っている・・・のかなぁ？　確認しよう。
Storyboardを使わずにUIAlertViewを表示させる。


![スクリーンショット 2015-04-19 午後7.56.53.png](https://qiita-image-store.s3.amazonaws.com/0/63677/8a082c65-e136-eb78-c559-b8cb37b01cd4.png "スクリーンショット 2015-04-19 午後7.56.53.png")






storyboardを使わずにUIAlertViewを作成するには以下のようになる。この時,それぞれのbuttonIndexは

cancelButtonTitles が　0(cancel)
otherButtonTitles が 順に１(other1)，２(other2)

となる。



```
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Title"
                                                   message:@"Message"
                                                  delegate:self
                                         cancelButtonTitle:@"cancel"
                                         otherButtonTitles:@"other1",@"other2",nil];
    
    [alert show];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


-(void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 1) {
        NSLog(@"1");

    }else if (buttonIndex == 2){
        NSLog(@"2");
    }else if (buttonIndex == 0){
        NSLog(@"0");
    }

}

@end
```
cakePHPでactionの引数を取得する方法



validatesで独自の関数を使用する場合。
独自の関数の中でactionの引数を取得する方法


例えばURLが
http://duoprac/Questions/enBasic/2
の時　

Questionsがcontroller
enBasicがaction

となっている。独自の関数内でactionの引数を取得するには



```php:getParamOfAction.php
var_dump(Router::parse(Router::url())['pass'][0]);
```
==>
string '2' (length=1)




```php:test.php
var_dump(Router::parse(Router::url()));
```

==>
array (size=5)
  'controller' => string 'Questions' (length=9)
  'action' => string 'enBasic' (length=7)
  'named' => 
    array (size=0)
      empty
  'pass' => 
    array (size=1)
      0 => string '2' (length=1)
  'plugin' => null


##参考
[Routerクラスの使い方 (CakePHP)](http://shall.dip.jp/mediawiki/index.php?title=Router%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9_%28CakePHP%29)
Rubotyで形態素解析をする


Rubotyで形態素解析（Morphological Analysis）をするruboty-maという誰得プラグインを作った。
[ruboty-ma | RubyGems.org](https://rubygems.org/gems/ruboty-ma)

`@ruboty ma XXXXX`という形で発言をすると、発言内容を形態素解析した結果を返してくれる。

```
$ ruboty
> @ruboty ma おはようございます
おはようございます(感動詞)

> @ruboty ma 今日の夕飯はお寿司です
今日(名詞) / の(助詞) / 夕飯(名詞) / は(助詞) / お寿司(名詞) / です(助動詞)
```

ruboty-maはYahoo! JAPANの提供している日本語形態素解析APIを内部で使っている。
[テキスト解析:日本語形態素解析 - Yahoo!デベロッパーネットワーク](http://developer.yahoo.co.jp/webapi/jlp/ma/v1/parse.html)

実際に使うにはヤフーが発行してくれるアプリケーションIDが必要になる。
[ご利用ガイド - Yahoo!デベロッパーネットワーク](http://developer.yahoo.co.jp/start/)

本当に誰得な機能だけど、ボット君が反応してくれると嬉しいものでした。
Cloud 9のプレビューサーバーに BASIC認証をかける

Cloud9では、プライベートプロジェクトでもサーバーを「Public」に設定することで、外部の人に見せることができます。

ただし、BASIC認証をかけておこうと次のような .htaccessを書くと Internal Server Errorが発生します。

```
<Files ~ "^\.(htaccess|htpasswd)$">
deny from all
</Files>
AuthUserFile .../.htpasswd
AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user 
order deny,allow
```

Cloud9のサーバーでは「AuthGroupFile」の記述が不要のようです。以下のようになります。

```
<Files ~ "^\.(htaccess|htpasswd)$">
deny from all
</Files>
AuthUserFile .../.htpasswd
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user 
order deny,allow
```
さんじゃらっと Postgre SQL

## リモートホストへの接続
`psql -h hostname -U username -d databasename`

PostgreSQLのデフォルトのポートは `5432`

## MySQLと違うコマンド
* データベース一覧
`\l`

* テーブル一覧
`\d`

* psqlの終了
`\q`

* データベースの選択
`\c [database name]`

## 知っておくと便利なSQL

* テーブルのデータ数一覧表示
`SELECT schemaname,relname,n_live_tup FROM pg_stat_user_tables;`

* テーブルのデータ数一覧表示降順
`SELECT schemaname,relname,n_live_tup FROM pg_stat_user_tables ORDER BY n_live_tup DESC;`

* ロール一覧
`select rolname from pg_roles;`

* ロール詳細表示
`\du`

* ログインできるユーザーを作成
CREATE ROLE user WITH LOGIN PASSWORD 'password'

* 全テーブルにSELECTの権限のみを設定
`GRANT SELECT ON ALL TABLES IN SCHEMA public TO user;`

* indexの確認
`\di`

* インデックスの作成
`CREATE INDEX [インデックス名] ON テーブル名(列名,...) ;`

* mysqlのdesc [table名]みたいなやつ
`\d+ [table名]`

* バージョンを調べる
`SELECT version();`

* tableの作成
`create table testtable ( key char(008) primary key, data1 int8 );
`

* tableの削除
`drop table testtable;`
Vimでの作業をKibanaで可視化してみた


## はじめに

皆さんが有用な情報をどんどん世界に発信している中、このような無駄以外の何物でもない記事を書いてしまったこと、深く反省しています。

しかし無駄は楽しい。
無駄とわかっていても、やってみたらどうなるだろうという興味に負けてしまいました。

## 可視化結果

まずは結果から。グラフ化されるとちょっと気持ちいい。

![kobito.1429436406.305922.png](https://qiita-image-store.s3.amazonaws.com/0/8491/340e9b01-263b-72a4-2dca-27d8926ba338.png "kobito.1429436406.305922.png")


ダッシュボードは適当に作ったもので、どのレポジトリでいつどれだけ作業したのか、どのファイルを特に更新しているのか、また更新した行数などを出せるようにしています。

何となく自分で **俺少しは作業したわー** 感が味わえればそれで良かろうなのです。

これ以降は手法などの解説なので、興味のある方だけどうぞ。

## 可視化の方法

やったことはとても単純で、以下の通りです。

 1. autocmd を使って発生したイベント毎に情報を収集
 1. 収集したデータを Elasticsearch に記録
 1. Kibana で可視化

## データの収集

### 準備

 1. Elasticsearch, Kibana のセットアップ
  * 他に記事がたくさんあるかと思うので省略
 1. Vim プラグインをインストール
  * [vim-elastic](https://github.com/liquidz/vim-elastic)
  * [vim-yacd](https://github.com/liquidz/vim-yacd) (OPTIONAL)
  * [vim-spy](https://github.com/liquidz/vim-spy)

### vim-elastic

VimからElasticsearchにデータをPOSTするためだけに適当に作ったプラグインです。
デフォルトでは http://localhost:9200 へPOSTするので、変更する場合には `g:elastic#url` を設定してください。

```
let g:elastic#url = 'http://example.com'
```

### vim-yacd

必須ではありません。
個人的に作っているプラグインですが、今回はレポジトリのルートディレクトリを取得するためだけに使っています。
他プラグインでも簡単に取れる情報だと思いますが、作ったから使ったというだけです。

### vim-spy

今回の可視化の主役プラグインです。
autocmd を使って情報を取得し、vim-elastic 経由で Elasticsearch にデータをPOSTします。
POST先の Index, Type は以下の通りです。

Index | Type | 説明
----- | ---- | ---
vim   | spy  | イベント関連のデータ
vim   | work | 行数、ファイルサイズの差分データ


データの収集はデフォルトではもちろん無効で、`:StartSpy`, `:StopSpy` コマンドで開始/停止できます。
なお物好きな方は以下の設定で自動的に有効にできます。

```
let g:vim_spy_auto_start = 1
```

## 可視化

vim-spy によって事ある毎に Elasticsearch にデータはPOSTされるので、あとは Kibana 上で好きなように可視化するだけです。

ダッシュボードができたあとは Refresh Interval を短く設定しておくと、グラフが更新されていく様を見て楽しめると同時に、本来の作業への集中を欠くことができます。でも楽しい。

## 最後に

Docker で Elasticsearch を立ち上げてPOSTさせた限りでは vim-spy を有効にしていても、作業中に重さは特に感じませんでした。
ただ環境によっては重くなる可能性があるので、もし利用する際にはご注意ください。

もし Vim 上のこんなデータも可視化してみたら面白いんじゃないの？というのがありましたら、また無駄なことで楽しみたいので是非ご連絡ください。
Windows Server 2012 R2 にHDP 2.2.0.0をインストール

HBase, Sparkを試す環境を手軽に作れないか調べてたら、Hortonworks Data Platformというものを見つけた。
Windowsにも対応しているということだったので、さくっとインストールしてみようと思ったのだが、以外にハマりまくったのでメモ。

#必要ソフトのインストール
##phthon2.7.9
1 C:\Python27 にインストール
2 システム環境変数PATHに ";C:\Python27" を追加
3 コマンドプロンプトで動作確認

```
> python -V
Python 2.7.9
```

## Microsoft Visual C++ 2010 Redistributable Package (64-bit)
デフォルト設定でインストール

##Microsoft .NET Framework 4.0
デフォルト設定でインストール

##Oracle Java JDK 1.7.0_79
マニュアルでは1.7.0._51となっているが、最新版でインストールしてみた。
1 "C:\Java\jdk1.7.0_79\" にインストール
2 システム環境変数にJAVA_HOMEを追加する
　C:\Java\jdk1.7.0_79 を設定
3 コマンドプロンプトで環境変数を確認

```
> echo %JAVA_HOME%
C:\Java\jdk1.7.0_79
```

4 システム環境変数PATHに ";c:\Java\jdk1.7.0_79\bin"を追加する
5 コマンドプロンプトで動作確認

```
> java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
```

# HDP2.2.0.0をインストール
1 Hortonworksの[ダウンロードページ](http://jp.hortonworks.com/hdp/downloads/)を開く。
2 「Download the MSI」をクリックするとhdp-2.2-latest-GA.zipがダウンロードされる。
3 hdp-2.2-latest-GA.zipを解凍する。
4 管理者権限でコマンドプロンプトを開く。

```
msiexec /i "hdp-2.2.0.0.winpkg.msi"
```

![HDP_Setup画面.png](https://qiita-image-store.s3.amazonaws.com/0/76073/badf04e5-3700-3a5e-b83b-6347cf59d621.png)

5 Hadoopのパスワード、Hive、Ooziの設定を入力してInstallボタンをクリックする。
* Hadoopのパスワードを設定
* 「Configure Single Node」を選択

[Master Componetsタブ]
* Hive, Oozieの設定は使用しなくても設定が必要
* "DB Flavor"をMSSQLからDerbyに変更

[Additional componetsタブ]
* Knox master secret を設定（パスワード）
* "Install Ranger"のチェックをはずす

Ranger関連がよくわからなかったので、今回は外してインストールを実行。 

# 試行錯誤したポイント
## MSSQLにアクセス出来ない
インストーラのデフォルトで"DB Flavor"にMSSQLが選択されている。
インストール中にMSSQLにアクセスできなくてインストールエラーとなるので、これをDerbyに変更。
（デフォルトで選ばれているのに、Required softwareに含まれていなくて不親切）
## 管理者権限
msiexecを実行するコマンドプロンプトを管理者権限で起動する必要がある。
管理者権限で起動しないと、インストールでエラーが発生。

# 動作確認


```
> cd C:\hdp
> start_local_hdp_services.cmd
```
rspecでbefore_filterをテストする

```rb
  describe '#before_filter' do
    # こうすればある程度動的テストができるというメモ
    let(:params) { { id: 999, keyword: 'test_keyword', page_id: 1, category_cd: 2, tag_id: 8, place_id: 9, } }
    def do_action(method)
      get method, params
    rescue
      post method, params
    end

    it do
      expect_any_instance_of(AccountsController).to receive(:check_signed_in).exactly(1).times
      do_action(:update)
    end
  end
```

filter漏れをなくしたくて、
（うっかり、サインインしてなきゃいけないページのサインイン確認を漏らした）
メソッド名とかも動的に取ってきて、一気に全部「これ以外はあれを通らない」みたいにしたかった。
controllerでスタブメソッド作って、、、とかも考えたけど、でもgetかpostかなんてメソッドによって違うし。

Controller名とfilterのメソッド名とアクションメソッド名はぐるぐる回すときに変える。
あとは、どのメソッドが何のfilterを通らないか、を定義すれば、やろうと思えばできるはず。
dosboxでrogue動かしてみた

## wiki

* http://www.dosbox.com/wiki/Software
* http://www.dosbox.com/wiki/GAMES

## dosboxのインストール

```bash:
apt install dosbox lhasa
```

dos時代はlha圧縮が主流だったのでlhasaもインストールしておく。


## SPECIAL KEYS

`man dosbox`

* ALT-ENTER : 全画面切り替え
* CTRL-F9 : 終了
        * CTRL-F10 : マウスキャプチャー切り替え

で終了というのだけ覚えておけばとりあえずOK。

## 実行

```bash:
dosbox ROGUE.EXE
```

* 英語キー配列の場合、`*`は`Shift-8`

## 画面サイズを拡大

* [How to enlarge a Dosbox window without fullscreen?](http://ubuntuforums.org/showthread.php?t=1419952)

```diff:~/.dosbox/dosbox-0.74.conf
 [sdl]
 fullresolution=original
-windowresolution=original
+windowresolution=1024x768
-output=surface
+output=opengl

 [render]
-scaler=normal2x
+scaler=2xsai
```


## ソフトの準備

* [rogue](http://www.dosgamesarchive.com/file/rogue/rogue/)
  * [manual](http://www.roguelikedevelopment.org/archive/files/misc/EpyxRogueDOSManual/manual.htm)
  * load : `rogue.exe /r`
  * save : `S`

* rogueの派生について
  * 日本の開発者様 : http://yozvox.web.fc2.com/526F677565.html
* crawl : キー割り当てがいろいろ違う。HPがバーになっていたり近づいたら略語の意味が表示されたり良い。
* moria : cuiで動く。白黒。`-r`でhjkl移動
* angband : 街がある。cuiでは動かない。
  * zangband : cuiで動く。`-r`でhjkl移動
* omega-rpg : 巨編rpg
playのtargetフォルダ内でのエラーについて

#はじめに
こんにちは。

今年から新卒でエンジニア & qiitaデビューした深澤です。
よろしくお願いします。

この前、PlayFrameworkを使った際、こんなエラーが出てきました。
>routes.java:8: エラー: シンボルを見つけられません

おやおや、何かなこれは。
さらに、コンソールにはこんなエラー。
>/target/scala-2.11/src_managed/main/contorllers/routes.java:8: エラー: シンボルを見つけられません

きついきついきついきつい

この手のエラー、実は結構経験していて、超単純な問題なのですが、あまり検索しても資料を見つけられなかった（僕の検索の仕方が悪いのかもしれませんが・・・）ので、今回まとめてみました。

Playに詳しい方にとっては、どうってことない問題かもしれませんが、
少しでも誰かの参考になれたら幸いです。
間違いやご質問などあれば、お気軽にコメントください。

環境はMacOSとPlayFramework2.3.8(java)です。

#そもそもplayのtargetってなんや

これは本家のサイトを参考にさせていただきました。
https://www.playframework.com/documentation/ja/2.3.x/Anatomy

こんな具合に書かれています。
>target/ ディレクトリには、Play のビルドシステムによって生成された全てのファイルが入ります。何が生成されるのか覚えておくと良いでしょう。
>classes/ には、Java や Scala のコードからコンパイルされたクラスファイルが入ります。
>classes_managed/ には、Play が管理しているクラス (例えば、ルータやテンプレートシステムによって生成されたクラスなど) が入ります。IDE をお使いの場合は、このディレクトリへクラスパスを通しておくと便利でしょう。
>resource_managed/ には、Play によって生成されたリソースが含まれます。例えば、LESS CSS や CoffeeScript からトランスコンパイルされた CSS ファイル や JavaScript ファイルは、このディレクトリに配置されます。
>src_managed/ には、テンプレートシステムが生成した Scala コードなど、Play によって生成されたソースが含まれます。
>web/ には、app/assets と public とフォルダから sbt-web によって生成されたアセットが含まれます。

ここまでがっつり日本語資料あるとありがたいですね。
わかりやすい。

playでコンパイルかけた際、いわゆる中間ファイルが入るディレクトリみたいです。
だから、コンパイルの際、こんな感じのログが出るんですね。

>[info] Compiling 2 Scala sources to AppName and path/target/scala-2.11/classes...

今回の僕のケースでは、src_managedの部分です。

#原因は？

結論から言うと、なんらかの原因で生成された間違った中間ファイルを、実際にアプリケーションを動かした際に参照してしまい、playが「見つからないよ！」って言ってるのが原因です。

間違った中間ファイルは、例えば、コントローラのどっかで、
「controllers」と書かなければならないのに
「contrllers」としてしまったりして、その状態でコンパイルしたりするとこうなります（笑）

コンパイルは普通に通るのですが、いざ、runningしたりしてアプリケーションを動的に起動すると、定義されたアクションを見つけられなくなります。

実際に自分のエラーが発生しているtargetディレクトリを参照してみると、こんな感じになってました。

>$ ll
total 48
drwxr-xr-x  6  staff    204  4 14 22:12 .
drwxr-xr-x  3  staff    102  4  1 21:30 ..
drwxr-xr-x  3  staff    102  4 15 01:09 contorllers
drwxr-xr-x  3  staff    102  4  1 21:30 controllers
-rw-r--r--  1  staff  11137  4 14 22:14 routes_reverseRouting.scala
-rw-r--r--  1  staff  10504  4 14 22:14 routes_routing.scala

コントローラの中間ファイルが二つも生成されている・・・。
きっと、コントローラの定義を間違えて、contorllersにしてしまったんですね・・・。

routes.javaくんも一生懸命インスタンスを作ろうとしてくれてますが、これでは何も生成できるわけがありません。

>package contorllers;

>public class routes {
public static final contorllers.ReverseUsers Users = new contorllers.ReverseUsers();

>public static class javascript {
public static final contorllers.javascript.ReverseUsers Users = new contorllers.javascript.ReverseUsers();
}


>public static class ref {
public static final contorllers.ref.ReverseUsers Users = new contorllers.ref.ReverseUsers();
}

>}

パッケージ名から間違ってしまっています。


#じゃあ、どーしたら良いの？？

その間違っている部分を全て修正すれば良いのですが、状況によっては、量が膨大すぎてやってられない場合もあります。

今回のようなケースなら、単純に、誤って参照されているほうのディレクトリを消し去るのも一つの手段です。

>$ sudo rm -r contorllers/

また、playにはいわゆる中間ファイルを全てクリアするコマンドが用意されているので、それを利用するのも手でしょう。
次のようなコマンドが用意されてます。
>$ activator clean
>$ activator clean-files

これで無事に動くようになるはずです。


以上です！
初qiitaの記事ですごく緊張しました。

お気軽にレビュー御願いします。
最後までありがとうございました。
QuickRunでVimのメッセージの出力をキャプチャするコマンドを定義する

**追記**
[7.4.2008](https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a) にて、`execute()` 関数が追加されました ([7.4.1996](https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a)～7.4.2007 は`evalcmd()`)。
これを利用すれば、QuickRun を利用しなくても手軽にコマンドの出力をキャプチャできそうです。

---

Vimには`:messages`や`:scriptnames`、`:map`など、現在のステータスメッセージを出力するコマンドがたくさんあります。

たとえば、現在のバッファ固有のキーマップを確認するためには、`:map <buffer>`などが便利ですし、`&runtimepath`を確認したり、環境変数を確認するため、`:echo`を利用するシーンは多々あるかと思います。

しかし、これらのコマンドは結果をメッセージ行に表示するため、通常のウィンドウのように操作をすることができず、表示行数が多い場合には、目的のものを探すのがつらいです。
また、コピペをする場合にも、マウスを使って選択した後で`<C-y>`したりする必要があったり、なにかと不便です。

ですので、これらメッセージの出力をVimのバッファに出力できると便利です。
それ専用にプラグインが作成されたりしていますが([*1](https://github.com/AmaiSaeta/capture.vim),[*2](https://github.com/tyru/capture.vim))、
ここでは、みんなだいすき QuickRun を利用して、実現します。

```vim
QuickRun vim -src 'messages'
```

これだけだと味気ないので、もう一工夫します。

```vim
command! -nargs=+ -complete=command Capture QuickRun -type vim -src <q-args>
```

これで、Exコマンドのコマンドライン補完のサポートつきで、キャプチャするコマンドを定義しました。
`:Capture ` の後、`<TAB>`を押す事で、コマンドを補完することができます。

```vim
" メッセージを確認する
Capture messsages
" スクリプトのロード履歴を確認する
Capture scriptnames
" 現在のバッファにマップされているキーマップを確認する
Capture map <buffer>
" 環境変数`$PATH`を1エントリ1行にばらして確認する
" 1. Windows
Capture echo tr($PATH,";","\n")
" 2. bash
Capture echo tr($PATH,":","\n")
```
Last.Backend登録してみた

#前置き
Cloud Orchestration ツールで良さげなのがあったので取りあえず登録してみた。
まだ、よく分かってないところもあるので間違ってたらすみません。

Last.Backend - Visual Docker Containers Orchestration platform
http://lastbackend.com/

#どういうものか
UIでサーバーを設定できて、サーバー同士の接続もグラフィカルに設定できて、簡単にサーバーを設定した内容でデプロイできるというもの。

#どういう技術であるか
デプロイされるのはDockerのイメージ。
プレビルドのDockerイメージが、Last.Backendのagentを動かしているサーバー上にデプロイされる。

#ログイン後の画面
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/15176/225dd353-b34d-b8ba-b0f6-afdb9bda3b1c.png)

#PHPのイメージを選択
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/15176/0a072804-677a-ca1b-6075-631c97ccb011.png)

#このPHPイメージを動かすサーバーを指定
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/15176/fabebeae-a909-844c-7f78-42e9bb5d8ad8.png)

#どこかのサーバーで以下のコマンドを実行
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/15176/b8289936-4885-0444-a63a-cccf95d90458.png)
接続されたら、このサーバーがDockerホストになる。

#ロンドン
上記、Dockerイメージが入っている hub.lastbackend.com は、traceroute するとロンドンだった。

#注意点
- 対応ブラウザーは、Chrome (Firefoxではイメージの選択とDrag&Dropができなかった。)
- DockerホストのOSをまだ選ぶような気がする。Ubuntu 14.04でインストール時に若干エラーが発生した。クラウド業者によりOSイメージのインストールされているパッケージに差異があり、それによりエラーが発生しているのかもしれない。
Unity+iOS or AndroidでFPS値を変える方法

##Unity+iOS or AndroidでFPS値を変える方法
スクリプトから指定するしかない。
以下のコードでFPSが60になる

```lang:適当なスクリプト
void Awake() {
 Application.targetFrameRate = 60; 
}
```

昔のiOSでは、xcode上に吐き出されたUnityAppController.mmファイルにある定数kFPSをいじれば修正できたけど、今はできなくなった。
なのでスクリプトから指定するしかない。
Unity+monodevelop+コードスペニットを使ってコーディングを楽にする

##Unity+monodevelop+コードスペニットを使ってコーディングを楽にする

スペニットテンプレートは
https://github.com/anchan828/unity-snippets
がとても便利

``` 
/Users/アカウント名/Library/MonoDevelop-4.0/Snippets/ 
```
にコードスペニットを書いたxmlファイルを入れるだけ。

```lang:Dev.template.xml 
<?xml version="1.0" encoding="utf-8"?>
<CodeTemplates version="3.0">
  <CodeTemplate version="2.0">
    <Header>
      <_Group>C#</_Group>
      <Version />
      <MimeType>text/x-csharp</MimeType>
      <Shortcut>D</Shortcut>
      <_Description>Debug.Logを簡単に記述</_Description>
      <TemplateType>Unknown</TemplateType>
    </Header>
    <Variables />
    <Code><![CDATA[Debug.Log("$end$");
]]></Code>
  </CodeTemplate>
</CodeTemplates>
```

意外とこのスペニットを使う。

monodevelop上からコードスペニットを書くには
この記事を読むとわかりやすい。
http://yasuiyasuo.blogspot.jp/2013/02/monodevelopsnippets.html
Kobitoに保存したアイテムをHTMLとMarkdownでダンプする

まとめてエクスポートしたさがあった。

-データベースファイルの場所
    - Kobito 2.x: `~/Library/Containers/com.qiita.Kobito/Data/Library/Kobito/Kobito.db`
    - Kobito 1.x: `~/Library/Kobito/Kobito.db`

```kobito-dump.rb
# Usage: $ ruby kobito-dump.rb ~/Library/Kobito/Kobito.db
require 'sqlite3'
db = SQLite3::Database.new(ARGV[0])
db.results_as_hash = true
db.execute('select * from ZITEM').each do |row|
  File.write("#{row['Z_PK']}.html", row['ZBODY'])
  File.write("#{row['Z_PK']}.md", row['ZRAW_BODY'])
end
```

という感じでどうだろう。
contenteditable=trueなエレメントにテキスト入力

# contenteditable=trueなエレメントにテキスト入力する

ScalatestのSelenium DSLの練習に
Twitterに適当なツイートしてみるコード書いてみてわかったのだが。

SeleniumのWebDriverでcontenteditableなエレメントに何か入力するには
１回クリックする必要があるらしい。

---

```scala
// tweet-box-home-timelineはcontenteditable=trueなdiv
val tweetbox = find("tweet-box-home-timeline").get

// １度クリックしないと入力できない
click on tweetbox

// ↓これは動かない。TextBoxじゃないからダメです的なエラーになる。
//enter(tweet)

// 代わりにunderlyingでscalatestのElementからseleniumのWebElementにして、sendKeysする
tweetbox.underlying.sendKeys(tweet)
```

---

[gist](https://gist.github.com/fkmt-disk/c3da6022a66e207232fd)にコード全文。
Hubot の redmine_notifier を入れて Redmine と Hubot を連携する

# はじめに

Redmine のチケットが新規作成されたり更新されたりしたら Hubot に通知するようにします。

想定環境

* Windows 7
* Bitnami Redmine Stack (今回はインストール済みの2.5.0-0を使いました）
* localhost で動かしている Let's Chat に Hubot が接続済み
* Hubot の環境変数 PORT で、HTTP ポートは 5080 で待ち受けしている

# Hubot の設定

```shell-session
C:\PATH\TO\Hubot>npm install --save hubot-redmine-notifier
```

```json:external-script.json
[
  "hubot-redmine-notifier"
]
```

設定後、Hubot を再起動する。

# Redmine の設定

https://github.com/suer/redmine_webhook をインストールする。

* htdocs/plugins/redmine_webhook に git なり Download ZIP なりで取得した一式を入れる
* htdocs/plugins で `bundle install --no-deployment` する。←これを忘れてて Faraday というHTTP通信ライブラリがなくてはまった（エラーメッセージもライブラリが無いって風に見えないのでますますはまった）
* htdocs で bundle exec rake redmine:plugins:migrate RAILS_ENV=production する。

--no-deployment はなんかエラーメッセージで出てきたので意味が分かっていない。

# プロジェクトの設定

通知を行うプロジェクトの設定画面で、Webhook のタブが出来ているので選択し、以下のように入れる。room_id はブラウザで見て確認しましょう。

```
http://localhost:5030/hubot/redmine-notify?room=<room_id>
```

これでチケットの新規発行や更新のたびにチャットに流れる・・・はず。
配布されているモーションをロボットアプリケーションとしてインストールする

よしもとロボット研究所が作成した、80点のモーションを収録したボックスライブラリを公開されました。
http://pepper-atelier-akihabara.jp/archives/259

そのままボックスライブラリを開いて、自分のアプリケーションに組み込んでも良いのですが、個々のアプリケーションで組み込むのはストレージ容量、モーションのメンテナンス（微調整）の観点からよくありません。
そこで、モーションのみをまとめたロボットアプリケーションを作成し、それを「Start Behavior」ボックスで呼び出せるようにしましょう。

自分で制作したモーションも同様の手順でロボットアプリケーションの作成が可能です。

# ボックスライブラリをChoregrapheに読み込む

上の、URLの手順に従って、ボックスライブラリをChoregrapheに読み込む。
自分で作ったモーションのボックスライブラリをロボットアプリケーションにする場合は次のステップに進みます。

# ボックスライブラリをディレクトリ形式で保存する

以下の画像に従って、ディレクトリ形式でボックスライブラリを保存しましょう。
保存場所は一時的に保存するだけなので、デスクトップなどの適当な場所で構いません。

![capture1.png](https://qiita-image-store.s3.amazonaws.com/0/10127/d1cdb20e-ea92-ea93-ec23-de6a3a76d513.png)

正常に保存されると、以下の画像のようにボックスライブラリがファイルとして出力されます。

![capture2.png](https://qiita-image-store.s3.amazonaws.com/0/10127/fe954f8e-570f-a047-8c93-f8a4f00b682e.png)

# 不要なBehaviorを削除する

![capture5.png](https://qiita-image-store.s3.amazonaws.com/0/10127/a6d5d88c-1b8e-b233-bd47-90a6d884cd02.png)


# Behaviorをプロジェクトに読み込む

今回はネガティブ、ノーマル、ポジティブの三つに分かれているので、それぞれ選択して読み込みます。

![capture3.png](https://qiita-image-store.s3.amazonaws.com/0/10127/085fef57-ac6c-4425-864d-2b88b0fa55ea.png)

![capture4.png](https://qiita-image-store.s3.amazonaws.com/0/10127/a9801876-9278-43a1-ccc6-38f07c5baf19.png)

![capture6.png](https://qiita-image-store.s3.amazonaws.com/0/10127/bd20a785-6c39-727e-d40a-eef770326560.png)


# プロジェクトを保存する

ここで保存したプロジェクト名がロボットアプリケーション名になります。

![capture7.png](https://qiita-image-store.s3.amazonaws.com/0/10127/a9254adf-54ad-e8d6-1853-a9d5dc761d23.png)


# Pepperにロボットアプリケーションをインストールする

インストールするPepperに接続して「ロボットアプリケーション」ウィンドウのボタンをクリックしてインストールする。
正常にインストールされると、個々のモーションが一覧表示されます。直接実行する場合は黄緑色の三角をクリックします。

![capture8.png](https://qiita-image-store.s3.amazonaws.com/0/10127/4e46622e-667a-f1bc-2c40-9157fe0bb841.png)


# ボックスでモーションを呼び出す。

新規プロジェクトを作成して、「Start Behavior」ボックスを使ってモーションを呼び出してみます。

![capture9.png](https://qiita-image-store.s3.amazonaws.com/0/10127/d92628fe-b41b-c94f-8182-557fa4555873.png)

「Edit Text」ボックスに入力するBehavior名は以下の形式になっています。

[アプリケーションのID]/[動作パス]
例：　yoshimotomotion-136d22/ネガティブ/-_あきれ

アプリケーションのIDをコピーします。
例：　yoshimotomotion-136d22

![capture10.png](https://qiita-image-store.s3.amazonaws.com/0/10127/c8df4788-4af0-efb5-0b24-606924342079.png)

動作パスをコピーします。
例：　ネガティブ/-_あきれ

![capture11.png](https://qiita-image-store.s3.amazonaws.com/0/10127/e7d2f04f-4ac3-6fcb-7598-1742319c3f9c.png)


# 注意点

アプリケーションのIDはプロジェクト新規作成時に生成される、プロジェクト固有の番号が付いているので、複数人で開発する場合は一人がモーション用のロボットアプリケーションのプロジェクトを作成し、それを他の人に共有するようにしましょう。

固有のID yoshimotomotion-136d22 の 136d22の部分

名前の衝突の可能性があるので、望ましくないですが、アプリケーションIDはプロジェクトのプロパティから変更でき、固有のIDの部分を削除して、アプリケーションのタイトルと同一にすることもできます。

![capture10.png](https://qiita-image-store.s3.amazonaws.com/0/10127/1260cb6e-9a5d-f52f-9127-97c7f8d78127.png)


# リポジトリ

GitHubで公開しました。
Boxライブラリに対する全ての権利はよしもとロボット研究所にあります。

https://github.com/yuhki50/pepper-yoshimoto-motion
Eclipseの環境設定メモ

### はじめに

あくまでの個人的な備忘録です。
思いつくたびにちまちま追加していきます。


### 環境

* Mac OS 10.10.2
* Eclipse Luna


### Emacsキーバインドを有効にする

Preferences -> General -> Keys ->
SchemaをEmacsに

## ショートカットキーの変更

### Content Assists（補完）
Macだと control+Space が Spotlight と衝突するので変更
Content Assists の設定を変更

### Build/Debug/Terminate
デフォルトでは Command-Shift-F11がBuild、Command-F11がDebugとなっているが、これらをCommans-RとCommand-Dに変更した。Command-Dに関しては、もともと"Line Delete"が当てられているが、これはEmacsキーバインドのC-kでいいので、これを削除した。
また、TerminateもCommand-Tに変更した。もともとTにはQuick hierarchyは（使いそうだが）とりあえず削除した。

### Option-Enter の削除
Option-SpaceでContent Asisstsを使っていると、たまにOption-Enterを誤爆する。Option-EnterはProject Propertiesだが、あまり使ったことがないので削除した。

### Javaのバージョンの共存

 * TODO
 * Java6やらJava7やらJava8やらを共存させてプロジェクトごととかに変更したい場合のあれこれ