OmniAICreator/Qiita-1.07M huggingface dataset:
ラピュタ語でプログラム言語つくった


そのまんまOok!ですが…。練習程度に.

| ラピュタ語 | Brainfuck | 内容 |
|:-----------|------------:|:------------:|
| リテ ウルス | > | ポインタをインクリメント |
| ウルス リテ |	< | ポインタをデクリメント |
|リテ リテ | + | ポインタの指す値をインクリメント |
| ラトバリタ ラトバリタ | - | ポインタの指す値をデクリメント |
| リテ ラトバリタ | , | 入力から1バイトをポインタの指す値に代入 |
| ラトバリタ リテ | . | ポインタの指す値をASCII文字として出力 |
| ラトバリタ ウルス | [ | ポインタの指す値が0なら、対応する「ウルス ラトバリタ」にジャンプ |
| ウルス ラトバリタ | ] | ポインタの指す値が非0なら、対応する「ラトバリタ ウルス」にジャンプ |

リテの代わりにアリアロス
ラトバリタの代わりにバル
ウルスの代わりにネトリール
も使えます。

| ラピュタ語 | 代替可能 |
|:-----------|------------:|
| リテ | アリアロス |
| ラトバリタ | バル |
| ウルス | ネトリール |

HelloWorldを出力するプログラムはこんなかんじ。

```
リテ リテ アリアロス アリアロス アリアロス アリアロス アリアロス リテ リテ リテ アリアロス アリアロス リテ アリアロス リテ リテ アリアロス リテ アリアロス アリアロス バル ネトリール アリアロス ネトリール アリアロス リテ アリアロス リテ アリアロス リテ リテ アリアロス アリアロス リテ アリアロス リテ アリアロス リテ リテ ウルス リテ リテ アリアロス アリアロス リテ アリアロス リテ アリアロス アリアロス リテ リテ リテ アリアロス アリアロス アリアロス アリアロス アリアロス リテ リテ アリアロス リテ ネトリール アリアロス リテ アリアロス アリアロス リテ アリアロス アリアロス ウルス リテ アリアロス ネトリール リテ ネトリール アリアロス ウルス リテ ネトリール アリアロス ラトバリタ バル ネトリール バル アリアロス ウルス アリアロス アリアロス アリアロス アリアロス バル アリアロス リテ ネトリール アリアロス アリアロス バル アリアロス アリアロス リテ リテ リテ アリアロス リテ リテ アリアロス アリアロス アリアロス リテ アリアロス リテ リテ ラトバリタ アリアロス バル リテ リテ リテ リテ リテ アリアロス アリアロス ラトバリタ アリアロス アリアロス ネトリール リテ アリアロス アリアロス リテ ラトバリタ リテ ネトリール アリアロス ウルス リテ アリアロス アリアロス アリアロス リテ アリアロス リテ リテ アリアロス リテ アリアロス アリアロス リテ アリアロス アリアロス アリアロス アリアロス リテ リテ アリアロス リテ アリアロス リテ リテ アリアロス アリアロス リテ リテ アリアロス リテ リテ バル リテ アリアロス ウルス バル リテ アリアロス アリアロス リテ リテ アリアロス アリアロス ラトバリタ アリアロス ラトバリタ バル ラトバリタ バル ラトバリタ ラトバリタ ラトバリタ ラトバリタ ラトバリタ ラトバリタ バル ラトバリタ ラトバリタ アリアロス ラトバリタ ラトバリタ バル ラトバリタ バル ラトバリタ バル ラトバリタ ラトバリタ ラトバリタ ラトバリタ ラトバリタ ラトバリタ ラトバリタ ラトバリタ バル ラトバリタ リテ アリアロス ネトリール アリアロス リテ ラトバリタ アリアロス アリアロス ネトリール バル リテ
```

まだテストはしてませーん。
Podの雛形


自分用のPodを作ったのでまとめ。

よく使う機能は、Podにして`Github`や`Bitbucket`に置いておくと便利。

```console:tree
.
├── Classes
│   ├── XXX.m
│   ├── XXX.h
│   └── noarc
│       ├── YYY.h
│       └── YYY.m
├── Example.podspec
└── README.md
```

- ARCのファイルは、`Classes`配下に
- NoARCのファイルは、`Classes/noarc`配下に

podspecは

```ruby:Example.podspec
Pod::Spec.new do |s|
  s.name                  = "Example"
  s.version               = "1.0.0"
  s.summary               = "Example"
  s.homepage              = "http://example.com/"
  s.author                = { "Takahiro Ooishi" => "hoge@example.com" }
  s.source_files          = "Classes/*.{h,m}"
  s.source                = { :git => "git@example.com:hoge/Example.git", :tag => s.version.to_s }
  s.platform              = :ios, '5.0'
  s.ios.deployment_target = '5.0'
  s.requires_arc          = true
  s.frameworks            = 'QuartzCore', 'Security', 'SystemConfiguration'

  s.subspec 'no-arc' do |sp|
    sp.source_files = "Classes/noarc/*.{h,m}"
    sp.requires_arc = false
  end
end
```

みたいな感じ。
PHP chmod関数の第2引数に渡す8進数は、絶対に文字列リテラルにしてはいけない。絶対にだ。

こんな風に書くと、

```php:wrong.php
<?php
    chmod('hoge', '0755');
```

hogeディレクトリのパーミッションは

```text:wrong-result.txt
d-wxrw--wt
```

こうなってしまう（しかもエラーになったりもしない）。
正しくはこう。

```php:right.php
<?php
    chmod('hoge', 0755);
```

今度は正しいパーミッションに変更される。

```text:right-result.txt
drwxr-xr-x
```
ギャラクシー3Sを回転すると、画面が白くなることがある

#現象
ギャラクシー3Sを回転すると、画面が白くなる。
更新すると直る。

#原因
たぶん、widthとinitial-scaleを同時指定しているのが悪いっぽい。

>initial-scaleは、初期表示の拡大率を調節するってことなんだけども、widthと同時に指定すると、つじつま合わないこともでてくるから、その倍はviewportのwidthを何倍にして表示するかを変えるってことになったり、効かなかったりする。
http://oosugi20.tumblr.com/post/7447144358/width-device-width-initial-scale-1

#修正方法

```html:
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
↓
<meta name="viewport" content="width=device-width, maximum-scale=1, user-scalable=no">
```
iPhone4Sでアイコンと文字の間に必要以上にスペースが空く

#現象
iPhone4Sでアイコンをアイコンを文字の横に置いてmarginとかpaddingでスペースを取ったとき、
フォントサイズが11px以下だと、スペースが指定以上に空く。
フォントサイズ12px以上だと直る（指定したとおり）。

#アイコンの設置方法

- 文字の横にそのままアイコン画像を置く
- :afterで作ったボックスの背景にアイコン画像を指定

なんでなんだろ？
よくわからない・・・
画面を回転しても、viewportを320pxで固定したいとき

いろいろ試した結果、ギャラクシーS3とiPhoneがやっかい。

#content="width=320"のみ

```html:
<meta name="viewport" content="width=320">
```
ギャラクシーS3がリキッドのまま。

#jQueryでなんとかする
to-Rさんの記事の（２種）を試したら、iPhoneでいまいち。
フォントサイズが小さいまま。（もしかしたら、試したやつなんか間違ってたのかも・・・）
http://blog.webcreativepark.net/2011/01/11-023827.html
http://blog.webcreativepark.net/2012/01/06-110622.html

#上の２つをなんとかドッキングすればいいんじゃね？
##まずviewportはiPhone向けに書く

```html:
<meta name="viewport" content="width=320">
```

##アンドロイドのときは（ほんとはギャラクシーS3だけでいいんだけど。）、jQueryでviewport上書きつつzoomを指定。

```js:
var agent = navigator.userAgent;
if (agent.search(/Android/) !== -1) {
	$('meta[name=viewport]').attr({'content': 'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no'});
	$(window).bind('resize load', function(){
		$("html").css("zoom" , $(window).width()/320);
	});
}
```

これでなんとか思いどおりになったと思う。
テストした機種の数少ないので、バグあるかも・・・

#ただし注意点が１つ
Androidでスムーズスクロールがずれる。

##対処方法
htmlのzoomを取得してoffset().topに掛ける。
参考：[androidでjqueryのoffset.top scrollTopがずれる | livedecode.](http://livedecode.net/archives/107)
EC2で作成したrailsサーバーでRDSを使う方法


EC2上に構築したrailsサーバーからMYSQLのアプリを作ってRDSに接続する方法

[前提条件]
EC2上にrailsサーバーが構築されている。
RDSのインスタンスを確保している。

##gem mysqlのインストール
yumでライブラリを取得した後にgemのオプションで指定する必要がある。

```
sudo yum -y install libmysqld-dev
gem install mysql2 -- --with-mysql-config=/usr/bin/mysql_config
```

##mysqlを使ったrailsアプリ作成
```
rails new myapp3 -d mysql
```

##JavaScriptを有効にする
後で使うスカフォードを有効にするため。

```
cd myapp
vi Gemfile
gem 'therubyracer', :platforms => :rubyをコメントイン
bundle install
```

##接続設定の変更
database.ymlを接続設定の部分を以下のように書き換える。

```
vi config/database.yml
```

```config/database.yml
development:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: XXXXX
  pool: 5
  username: XXXXX
  password: XXXXX
  socket: /var/lib/mysql/mysql.sock
  host: XXX.XXXXXXXX.us-west-2.rds.amazonaws.com
```

##スカフォードを使ってアプリを作る
```
rails generate scaffold cat name:string point:string
rake db:create
rake db:migrate
```

これでRDS側で確認するとテーブルができていれば設定完了。

##補足
このままだと日本語が正しく入力できないのでRDStoolkitを使って文字コードをutf8に変更する。
RDSに割り当てたパラメーターグループの設定を変更する。
defaultを割り当てた場合は変更ができないのでインスタンスを作り直す必要がある。

```
rds-modify-db-parameter-group  パラメーターグループ名 -p "name=character_set_database, value=utf8, method=immediate" --region us-west-2
rds-modify-db-parameter-group  パラメーターグループ名 -p "name=character_set_client, value=utf8, method=immediate" --region us-west-2
rds-modify-db-parameter-group  パラメーターグループ名 -p "name=character_set_connection, value=utf8, method=immediate" --region us-west-2
rds-modify-db-parameter-group  パラメーターグループ名 -p "name=character_set_results, value=utf8, method=immediate" --region us-west-2
rds-modify-db-parameter-group  パラメーターグループ名 -p "name=character_set_server, value=utf8, method=immediate" --region us-west-2
rds-modify-db-parameter-group  パラメーターグループ名 -p "name=skip-character-set-client-handshake, value=TRUE, method=pending-reboot" --region us-west-2
```

※us-west-2はリージョン

character_set_databaseの項目だけは変更できなかったので以下のコマンドのみmysql上で実行する。

```
SET character_set_database = 'utf8'
```


このあとデフォルトで作成されたデータベースをいったん削除して作り直す。
WordPressのタグ入力がENTERキーで確定されるのを防ぐ


タグといってもHTMLタグでなく、分類につかうタグの方の話し。
日本語で入力してると変換確定に「ENTER」キーを使うわけですがこれで変換確定と同時にタグも確定とみなされて登録されるのが、どうにも使い勝手が悪いので、ぐぐって対応してみました。

みんな wp-admin/js/post.jsの下記.keyupを.keypressに書き換えればOKって書いてあるんですが、これじゃダメでした。

```JavaScript
		}).keyup(function(e){
			if ( 13 == e.which ) {
				tagBox.flushTags( $(this).closest('.tagsdiv') );
				return false;
			}
```

で、よーくファイルリストを見てると wp-admin/js/post.min.jsってファイルが。

post.jsを元に改行とかとっぱらったファイルらしく、こちらで.keyupを.keypressに書き換えたらENTERキーでタグ確定されなくなりました。

http://rentan.org/blog/2010/04/13/wordpress-edit-page-tag-fix/
を参考に元々あった.keypressの記述削除もしたので、こっちも関係あるかも（未検証）
rpm手動インストール時の依存性の欠如パッケージ一覧を簡易表示する君作った

rpmの依存問題はうんざりしていたのですが、`yum whatprovides`という素晴らしいコマンドがあることを知り、
結果を整形するものを作った。

使い方
====

```bash:
$ sudo ./yum_whatprovides_listup rpm -ivh /vagrant/*.rpm
glibc glib2 libsoup mysql sqlite coreutils glibc
```

あとはyumで入れるだけ。

```bash:
$ sudo yum install glibc glib2 libsoup mysql sqlite coreutils glibc
```

[download](https://github.com/tukiyo/yum_whatprovides_listup.git)
.zshrcあたりに1行追加して簡単にコマンド補完したい

$HOME/.zshrc あたりに以下を追加しておく

```zsh
compdef _gnu_generic flake8 pep8 SOME_COMMAND
```

サブコマンドが存在するようなコマンドは厳しいけど、それ以外は柔軟に対応してくれる。
dice.c

問題はこちら
http://nabetani.sakura.ne.jp/hena/ord12rotdice/

解説はこちら
http://qiita.com/saihon2013/items/db2241d91132d750b70e

```c:
#include <stdio.h>
#include <string.h>

char input[] = "\
0 	NNESWWS 	15635624	\
1 	EEEE 	13641	\
2 	WWWW 	14631	\
3 	SSSS 	12651	\
4 	NNNN 	15621	\
5 	EENN 	13651	\
6 	WWNN 	14651	\
7 	SSNN 	12621	\
8 	NENNN 	153641	\
9 	NWNNN 	154631	\
10 	SWWWSNEEEN 	12453635421	\
11 	SENWSWSNSWE 	123123656545	\
12 	SSSWNNNE 	126546315	\
13 	SWNWSSSWWE 	12415423646	\
14 	ENNWWS 	1354135	\
15 	ESWNNW 	1321365	\
16 	NWSSE 	154135	\
17 	SWNWEWSEEN 	12415154135	\
18 	EWNWEEEEWN 	13154532426	\
19 	WNEWEWWWSNW 	145151562421	\
20 	NNEE 	15631	\
21 	EEEEWNWSW 	1364145642	\
22 	SENNWWES 	123142321	\
23 	SWWWSNSNESWW 	1245363635631	\
24 	WESSENSE 	141263231	\
25 	SWNSSESESSS 	124146231562	\
26 	ENS 	1353	\
27 	WNN 	1453	\
28 	SSEENEEEN 	1263124536	\
29 	NWSNNNW 	15414632	\
30 	ESSSSSWW 	132453215	\
31 	ESE 	1326	\
32 	SNWNWWNSSSS 	121456232453	\
33 	SWEESEN 	12423653	\
34 	NEEWNSSWWW 	15323631562	\
35 	WSEW 	14212	\
36 	SWSNNNSNWE 	12464131353	\
37 	ENWEWSEEW 	1351513545	\
38 	WSEWN 	142124	\
39 	EWNEESEWE 	1315321414	\
40 	NESEEN 	1531263	\
41 	WSW 	1426	\
42 	ENEWE 	135656	\
";

void exchg(int *n1, int *n2)
{
	int tmp = *n1;
	*n1 = *n2;
	*n2 = tmp;
}

void solve(char *data, char *output)
{
	int i = 0, dice[3] = {2,1,3}, p = 0;
	const char S[] = "SNWE";
	for(i=0; data[i]!='\0'; i++) {
		output[i] = dice[1]+'0';
		p = strchr(S,data[i])-S;
		exchg(&dice[p/2], &dice[p/2+1]);
		dice[p/2+p%2] = 7-dice[p/2+p%2];
	}
	output[i] = dice[1]+'0';
}

typedef struct {
	char c[20];
} OUTPUT;

int main()
{
	int i = 0;
	char *code = strtok(input,"\t "), *data[3] = {code,0,0};
	OUTPUT output={0}, clr={0};	
	for(i=1; code!=NULL; i++) {
		if(i%3==0) {
			output = clr;
			solve(data[1],output.c);
			printf("%s\t%s\t%s\t%s\n",
				(strcmp(output.c,data[2])==0) ? "OK": "NG",
				data[0],data[1],data[2]);
		}
		data[i%3] = code = strtok(NULL,"\t ");
	}
	return 0;
}
```
スプレッドシートのセル取得方法

#公式ページ

セルを取得する方法自体は下記サンプルに載っています。
https://developers.google.com/google-apps/spreadsheets/?hl=ja#retrieving_a_cell-based_feed


#特定のセルのみを取得

上記のやり方に追加して、特定のセルのみを抽出する場合はどうするのかをメモしておきます。
セルを取得するやり方はservice.Queryの部分なので、引数で渡すqueryにどの位置のセルかを書いておきます。

```csharp:
// Fetch the cell feed of the worksheet.
CellQuery cellQuery = new CellQuery(worksheet.CellFeedLink);

//2行目の4列目のセルを取得する
cellQuery.Range = "R2C4"; 

CellFeed cellFeed = service.Query(cellQuery);
```

これで特定のセルのみを取得できるようです。


#特定範囲のセルを取得
Rangeというからには特定範囲を取得することもできます。
この場合は

```csharp:
// Fetch the cell feed of the worksheet.
CellQuery cellQuery = new CellQuery(worksheet.CellFeedLink);

//A2:C3の範囲を取得
cellQuery.Range = "A2:C3"; 

CellFeed cellFeed = service.Query(cellQuery);
```

と書くことでA2:C3の範囲のセルを取得出来ます。

この他にもqueryの各種パラメータを設定することで取得するセルを絞ることができます。

#注意

取得しようとしているセルの値が空だと取得できないようです。。。（未検証）
bowerで、自分のつくったcomponentの一覧をとる


超みじかいけどメモ。
上記のこと(というか、特定ユーザーのつくったcomponent一覧をとる)をやるには、以下を叩く。

```
bower search | grep github.com/nobii
    ShakenBox git://github.com/nobii/ShakenBox.git
    IconHanabi git://github.com/nobii/IconHanabi.git
```

自分のもの一覧が見れるのは、モチベーション的に大事ですよね。
Vagrantのpluginを自作した時の雑多なメモ

現在の仮想マシンの設定情報をvagrantから入手したい。
こんな感じ。フォーマットはjsonとかが理想形。

```
vagrant info 

CPU:...
Mem:...
...
...
```

まともにVagrantファイルをパースするのは馬鹿らしい。
Rubyのインタプリタを書いても仕方がないのでvagrantに手を入れることにする。

## vagrantの既存コマンドがどう動作してるのか

とりあえず、```vagrant up``コマンドなどを編集して動作確認してみると、
適当な変数をダンプしてみるといろいろ情報が取れそうなことが分かった。

## 自作コマンドを追加したい

目的を達成するためにvagrantを修正して```vagrant info```コマンドを自作して追加することを考える。

ソースを見ていると実行できるコマンドのリストは

```ruby
# cli.rb
Vagrant.plugin("2").manager.commands
```

でも、ソース見ててもCommandUpがどこから登録されているのか不明。

```ruby
# lib/vagrant/plugin/v2/manager.rb

        # This registers a plugin. This should _NEVER_ be called by the public
        # and should only be called from within Vagrant. Vagrant will
        # automatically register V2 plugins when a name is set on the
        # plugin.
        def register(plugin)
          if !@registered.include?(plugin)
            @logger.info("Registered plugin: #{plugin.name}")
            @registered << plugin
          end
        end
```

で、登録されている。
いろいろ調べていくと、以下の箇所でプラグインのロードが行われて追加されるようだ。

```ruby
# vagrant.rb

# A lambda that knows how to load plugins from a single directory.
plugin_load_proc = lambda do |directory|
  # We only care about directories
  next false if !directory.directory?

  # If there is a plugin file in the top-level directory, then load
  # that up.
  plugin_file = directory.join("plugin.rb")
  if plugin_file.file?
    global_logger.debug("Loading core plugin: #{plugin_file}")
    load(plugin_file)
    next true
  end
end

# Go through the `plugins` directory and attempt to load any plugins. The
# plugins are allowed to be in a directory in `plugins` or at most one
# directory deep within the plugins directory. So a plugin can be at
# `plugins/foo` or also at `plugins/foo/bar`, but no deeper.
Vagrant.source_root.join("plugins").children(true).each do |directory|
  # Ignore non-directories
  next if !directory.directory?

  # Load from this directory, and exit if we successfully loaded a plugin
  next if plugin_load_proc.call(directory)

  # Otherwise, attempt to load from sub-directories
  directory.children(true).each(&plugin_load_proc)
end
```

起動時に、ソースのplugin以下を再帰的に調べて行ってplugin.rbファイルがプラグインとして追加される。

つまりここまで調べてわかったのは、新しいコマンドを追加したい場合にはvagrantのpluginを作成し追加するだけで
よさそうであるということである。

## plugin作ってみた

早速目的を達するために自分でpluginを作ることにした。

```vagrant status```のソースを読んでいくと

```
with_target_vms(argv)
```

から各種VMの情報を取得していたので、この変数から情報をそのままJSONに変換して出力するような
プラグインを作ってみた。

vagrant-info

- http://github.com/lambdasakura/vagrant-info/
nrpeでリモートのコマンド結果を取得

仕組み
----

* 監視される側の /etc/nagios/nrpe.d/*.cfg を、nagios-nrpe-server を通して実行。
* nagios 1系は /etc/nagios/nrpe{,_local}.cfg で宣言したcommandを実行

# 監視される側(192.168.100.150)

```bash:
$ sudo apt-get install nagios-nrpe-server
```

```Bash:/etc/nagios/nrpe.cfg追記
allowed_hosts=127.0.0.1,10.0.3.65
```

```bash:/etc/nagios/nrpe.d/check_disk.cfg
command[check_disk]=/usr/lib/nagios/plugins/check_disk /
```

```bash:
$ sudo /etc/init.d/nagios-nrpe-server restart
```

# 監視する側(10.0.3.65)

```bash:
$ sudo apt-get install nagios-nrpe-plugin
```

```bash:手動で確認
$ /usr/lib/nagios/plugins/check_nrpe -H 192.168.100.150 -c check_disk
DISK OK - free space: / 167388 MB (94% inode=97%);| /=8969MB;;;0;185796
```

```bash:server.cfg
define host{
    use        generic-host
    host_name  server-01
    alias      Some Remote Host
    address    192.168.100.150
}
define service{
    use                     generic-service
    host_name               server-01
    service_description     disk check /
    check_command           check_nrpe!check_disk
}
```

```bash:
$ sudo /etc/init.d/nagios3 restart
```

## CHECK_NRPE: Socket timeout after 10 seconds. が出た場合

> /usr/lib/nagios/plugins/check_nrpe -H 192.168.100.150

この結果が取得できるかを確認。
Socket timeout after 10 seconds. と出た場合は192.168.100.150に接続ができていない。

```bash:no_ssl
/usr/lib/nagios/plugins/check_nrpe -n -H 192.168.100.150
```

-n をつけて取得できるか確認。

```diff:server.cfg
-   check_command           check_nrpe!check_disk
+   check_command           check_nrpe_nossl!check_disk
```
pingが通らないhostの監視でpingエラー対策

参考

* http://www.checksite.jp/nagios-ping-block-host-status/
* https://blog.e2info.co.jp/2015/06/26/nagios_ping_icmp/

## check_dummy

* /usr/lib/nagios/plugins/check_dummy を使う。

```bash:/etc/nagios/conf.d/commands.cfg
define command{
        command_name    return-ok
        command_line    $USER1$/check_dummy 0
        }
```


* `$USER1$` は、resource.cfgで`/usr/lib/nagios/plugins` に定義されています。
* `/etc/nagios-plugins/config/dummy.cfg`にcommandが沢山登録されているので目を通しておくと良い。

## return-ok

* nagios4では使えなかったので、上記のcheck_dummyを使えば良い

```diff:
 define host{
     use        generic-host
     host_name  server01
     contact_groups admin_all
+    check_command   return-ok
 }

# define command
 
 # commands
 define command{
     command_name check_http-server01
     command_line $USER1$/check_http -H server01 -u http://server01.jp/check.html
 }

# define service
 
 # http
 define service{
     use                     generic-service
     service_description     http
     host_name               server01
     check_command           check_http-server01
 }
 # 特定port
 define service{
     use                     generic-service
     service_description     server01-12345
     host_name               server01
     check_command           check_tcp!12345
 }
```
AndroidアプリにTestFlight SDKを導入する



**TestFlightのAndroidサポートは2014/3/21までなので代替サービスを検討してください。**
http://help.testflightapp.com/customer/portal/articles/1450414



## 1. SDKをダウンロードする

https://testflightapp.com/sdk/download/

からjarファイルがダウンロードできる。Mavenリポジトリとかにしてほしいがbeta版だから仕方がない。

jarファイルをプロジェクトに入れる。

## 2. 起動時の処理の実装

``TestFlight.takeOff``をApplicationの生成時に呼び出す。``android.app.Application``を継承したApplicationクラスのonCreateあたり。

``YOUR_APP_TOKEN``の部分はアプリごとに配布され ``https://testflightapp.com/dashboard/applications/<アプリのID>/token/`` で確認できるようになる。とりあえずアップロードしてアプリを追加し、Tokenを取得して次のアップロードからTokenを埋め込むか、最初のアップロードからTokenを入れたい場合はアップロードする前に[Add Application](https://testflightapp.com/dashboard/applications/create/)をするとよい。Tokenが無いとアプリごとのデータを収集できない恐れがあるが配布ができないという制限はない。

```java:MyApplication.java
package com.example.app;

import com.testflightapp.lib.TestFlight;

import android.app.Application;

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        //Initialize TestFlight with your app token.
        TestFlight.takeOff(this, YOUR_APP_TOKEN);
    }
}

```

## 3. マニフェストの設定

TestFlight SDKが **android.permission.INTERNET** と **android.permission.ACCESS_NETWORK_STATE** を必要とするので追加する。

```xml:AndroidManifest.xml
<manifest ...>
    <application ... android:name="MyApplication">
    ...
    </application>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
</manifest>

```

## 4. ビルドのアップロード

方法は2種類ある。

* [Upload Build](https://testflightapp.com/dashboard/builds/add/)でapkをドラッグ&ドロップする
* [Upload API](https://testflightapp.com/api/doc/)を使う

TestFlightでセッションデータを見たい場合は、apkはデバッグ証明書でサインする必要がある。

Signing Your Applications: Debug vs. Release
http://help.testflightapp.com/customer/portal/articles/1277927

## 代替サービス

* [DeployGate](https://deploygate.com/‎)
* [Google Play](https://play.google.com/)
 * [Google playでのベータ版配布機能について](http://qiita.com/kaa/items/3904845d225d40f9a6ef)

TestFlightを使ってみたのは既にiOSアプリでTestFlight使っており配布先（チーム）を再利用できたこと、プロトタイプで公開する予定がないことがあった。Androidでは今後はGoogle Playがファーストチョイスなのではないかと思う。
Google Chromeでたまに動画が再生できなくなる


この現象について調査中です。

#現象
20個近くの動画をランダムにピックアップして10個程度順番に再生する、というコンテンツ。
全動画は再生確認済で、基本は止まらない。
しかし、時折emptiedというエラーが発生し、そのせいで動画の再生が止まる。

#環境
* Windows 7
* Google Chrome 27, 28
* localhostで配信

#対策
```javascript
video.addEventListener('emptied', function () {
	this.load();
	this.play();
}, false);
```

と、エラー発生時にもう一度読み込みを促すことで再生される。
が、これでも再生できずに完全に動画の再生が止まることがある。
こうなると再生が行われず、最初のフレームの画像だけが表示されている状態で止まる。コントロールを表示してシーケンスをいじっても変化なし。

#推測

今のところわかっているのは、おそらく、Chromeのいちタブで動画再生に関するなにがしかの問題が発生して止まっているよう。別タブを開いて動画を直に再生させると再生されることから、そのタブのプロセスだけで問題が起きているぽい。

そのため、 **Dev toolsで動的にvideo要素生成して再生が止まったのとはまた別の動画を読みこませようとしてもまったく再生されない。**


`video.readyState === 4`になっているので、動画自体の読み込みは正常に行われている様子。
発生したら多分、JS側からの復帰は絶望的なので、発生しない対策を探すしかないかも。

#推測2
ちなみにコンテンツはサイネージコンテンツなので、PC数台にコンテンツ自体を保存している。問題が出ているPCと出ていないPCがあって、色々確認したらChromeのVersionが違うPCで問題が出ている模様。

なぜか最新のVer28で問題が起きていて、前のVer27だと問題が起きていないぽい。（確率の話かもしれないけれど）
なので、27→28の変更に関するなにかが原因しているのかも。
Qiitaのストック一覧をRSS化する方法

新着投稿やタグのフィード配信はありますが、ストック一覧は配信できないようなので、外部サービスを使った簡単な方法で実現します。

[RSS Creater](http://rssc.dokoda.jp/)にアクセスして、RSS化したいストック一覧のURLを入力します。
たとえば、ストック一覧URLは`http://qiita.com/typista/stock`になりますが、この[RSS Creater](http://rssc.dokoda.jp/)では、指定したページのHTMLに対して、RSSで抽出したい対象を指定する必要があります。

##「タイトル」と「URL」だけを抽出するためのポイント

①RSS化する範囲を「IDで指定」
②テキストボックスにを入力し「Enter」キーを押す
　＊抽出の対象がオレンジ色でマークアップされます。

```:XPath
//div[@class='publicItem_body']/h1/a
```

③「フィードを作成」ボタンを押す
④RSS作成完了
　たとえば`http://rssc.dokoda.jp/r/67114666d0b686ad696dadadff595c66/http/qiita.com/typista/stock`のようになります。

![qiita-rss.jpg](https://qiita-image-store.s3.amazonaws.com/0/8200/80e2c67e-6346-eed2-de92-3b6e0096176e.jpeg)

##ストック一覧をRSS化するメリット
[ifttt](https://ifttt.com/)がとても便利で、[pocket](http://getpocket.com)を軸にEvernoteやTwitterに連携させています。
そのため、Qiitaで「ストック」した投稿をできれば自動で[pocket](http://getpocket.com)に反映できないかなぁと思っていました。
この方法でRSS化しておけば、[ifttt](https://ifttt.com/)でRSSから[pocket](http://getpocket.com)に反映するのは簡単です。これで新たに「ストック」した投稿が[pocket](http://getpocket.com)にも反映されるようになります。
あくまでRSS化しているだけなので、[ifttt](https://ifttt.com/)を利用するかどうかに関係なく、他にも応用しやすいと思います。


##免責事項
この方法は、[RSS Creater](http://rssc.dokoda.jp/)を利用するにあたって、Xpath表現で抽出対象を指定しているものです。
そのため、[RSS Creater](http://rssc.dokoda.jp/)の今後の仕様変更等だけでなく、Qiitaのストック一覧ページのHTML構成にも依存してます。
【質問】Scalaでプリントデバッグするには? PHPのvar_dump()やNode.jsのconsole.log()のような関数はありますか?

Scalaでオブジェクトの属性を簡単に見たいです。

PHPだったら var_dump($object); 、Node.jsだったら console.log(object); で見ることができますが、Scalaでも同等のことがしたいです。

IDEは使ってません。

Scalaでプリントデバッグするにはどうしたらいいでしょうか?
PHPのvar_dump()やNode.jsのconsole.log()のような関数はありますか?
lessの知らなかった機能

パターン絞り込み
----
&パターン

manでオプションのみ絞り込み表示したい場合は
&\ -

httpだけ絞り込みしたい場合は
&http

tailモード
----
F
Control-cでtailモード抜ける

mark
----
vimと同じように maでマークし'aでとべる

編集
----
v

現在の行数/トータル行数 を表示
----
イコール
いつ突然死してもいいようにPC起動後○日後に自動シャットダウンさせる設定(Windows & Linux)

タイトルが物騒ですが、もし自宅で作業中にそんな事になった場合、PCが起動しっぱなしだと開いているアプリケーションとかブラウザの状況とかの生々しい画面を第一発見者や捜査関係者に見られて、趣味嗜好や場合によっては色々と恥ずかしい事にもなりかねません。

というわけで、PC起動時に自動的に時間経過でシャットダウンさせるようにしておくと良いでしょう。

## Windowsの場合(XP以降)

こんなショートカットをスタートアップに入れておきます。

```
C:\Windows\System32\shutdown.exe /s /t 172800
```

`/s`はシャットダウンを実行するオプション、`/t`は○秒後に実行するオプションです。

ちなみに172800は48時間です。ご自分のライフスタイルや環境に合わせて秒を調整してください。

なお、shutdown.exeのパスはWindowsのOSによって異なる場合があります。

自動シャットダウンを中止させたい場合はコマンドプロンプトから

```
C:\Windows\System32\shutdown.exe /a
```

を実行すると解除できます。

## Linuxの場合

方法は2通りあります。

### 1. shutdownコマンドで時間指定のオプションを使用する(問題多々あり)

Windowsと同じようにshutdownコマンドで分単位の時間指定することができます。/etc/rc.localに

```bash
shutdown -h +2880 &
```

と指定します。(2880分は48時間です)

```bash
$ sudo shutdown -c
```

でキャンセルできます。

ただし、この方法だと起動時からshutdownが予約されているので、その後手動でshutdownコマンドを実行しても弾かれてしまいます(自動シャットダウンを先にキャンセルする必要があります)。

また、「シャットダウンまであと○分」的なメッセージが定期的に端末に表示されるので正直邪魔です。

なのでLinuxの場合は、以下に挙げる2つ目の方法の方が良いかもしれません。

### 2. atコマンドでスケジューリングする

atコマンドは初期状態のUbuntuではインストールされていなかったので、

```bash
$ sudo apt-get install at
```

でインストールする必要があります。他のディストリビューションの場合もそれぞれのパッケージシステムからインストールしてください。

atコマンドをインストール後、/etc/rc.localに以下の様に指定します。

```bash
echo "shutdown -h now" | at now + 2880 minutes
```

起動時にスケジューリングされた自動シャットダウンのタスクはatqコマンドで確認できます。

```bash
$ sudo atq
1       Fri Aug  2 12:44:00 2013 a root
```

左端の`1`がジョブ番号です。

atコマンドで指定したタスクをキャンセルする場合はatrmコマンドを使用します。

上記、atqコマンドで表示されたタスクのジョブ番号を指定して実行します。

```bash
$ sudo atrm 1
```

## Macの場合

所有していないので分かりません・・・まあOS XならLinuxと同じ感じでいけるとは思いますが。

情報お待ちしています。

## まとめ

HDDの全データも削除するような処理と組み合わせたスクリプトを時間経過で実行するように指定すれば、死後は安泰ですが、何らかの事情でPCを起動させたまま何日か急に家を空ける事になった場合なんかでも実行されてしまうので、自動実行はシャットダウン程度にとどめておいて、HDDのデータは暗号化ファイルシステムとかで保存する方が良いのかな、なんて思います。

追加情報や間違いの指摘などありましたらコメントでお知らせ頂ければ嬉しいです。
vagrantコマンドメモ

virtualboxの事前ダウンロードを忘れずに。


## インストール
### mac
最新版を公式からdmgでインストール

### windows

chocolateyからインストール

```
cinst vagrant
```

## 初期設定

### vagrantファイル作成

```
cd [作業フォルダ]
vagrant init
```

### boxファイル取得

```
vagrant box add box名 url

ex)
vagrant box add CentOS-6.4-x86_64-v20130427.box http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130427.box
```

### vagrantファイル修正



### VM起動

```
vagrant up
```

### ssh設定

```vagrant ssh [host名]```を```ssh [host名]```として接続したい

```
vagrant ssh-config [host名] >> ~/.ssh/config
```

#### よく使うコマンド
| コマンド | 内容 |
|:----|:----|
| vagrant init | 初期化 |
| vagrant box add box名 url |box登録 |
| vagrant up|VMインストール起動|
| vagrant ssh VM名|VMにssh接続|
| vagrant halt|VM終了|
| vagrant destroy|VM削除|
Android-x86でlogcatをファイルとして保存する．

まだまだ安定版からは程遠いAndorid-x86．
不意に固まったりするときに，logcat をファイルに保存しておきたい．

## 解法

init.x86.rc に logcat の内容をファイル /data/log.txt に落とす記述がある．

```
service logcat /system/bin/logcat -v threadtime -f /data/log.txt
    class debug
```

class debug の記述があるので，カーネル起動時の引数に DEBUG=1 または DEBUG=2 を追加すれば，init の起動時からログを取ってくれる．

起動後にログを開始したければ，コマンドラインから

```
# start logcat
```

などする．止めたければ  ```stop logcat```
confirmが発生しない条件がある

# 疑問
なぜtableタグで囲むとconfirmが発生しないのかわからなくて困ってます
情報等ありましたらコメントお願いします

# confirmが発生しないコード
### view_hoge.rb
```rb:
<table >
	<tr>
	<%= form_tag({:action => :import}, {:multipart => true}) do %>
		<th>入力</th>
		<td>
			<%= file_field_tag :file %>
			<%= submit_tag 'csv', :data => { :confirm => '入力') } %>
		</td>
	<% end %>
	</tr>
</table>
```

### hoge.html
```html:
<table >
	<tr>
	<form accept-charset="UTF-8" action="/hoge/import" enctype="multipart/form-data" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="/=" /></div>
		<th>入力</th>
		<td>
			<input id="file" name="file" type="file" />
			<input class="Button" data-confirm="実行しますか？" data-disable-with="処理中..." name="commit" type="submit" value="登録" />
		</td>
	</form>	
	</tr>
</table>
```

# confirmが発生する
### view_hoge.rb
```rb:
<%= form_tag({:action => :import}, {:multipart => true}) do %>
	入力
	<%= file_field_tag :file %>
	<%= submit_tag 'csv', :data => { :confirm => '入力' } %>
<% end %>
```

### hoge.html
```html:
<form accept-charset="UTF-8" action="/hoge/import" enctype="multipart/form-data" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="=" /></div>
		<input id="file" name="file" type="file" />
		<input class="Button" data-confirm="実行しますか？" data-disable-with="処理中..." name="commit" type="submit" value="登録" />
</form>
```
MacのAndroidStudioでrunするとcrashする問題の解決

## 事象
AndroidStudioで run を実行すると Waiting for ADB と表示され、ロードが終わらないままcrashする

## 確認したこと
- AndroidStudioのバージョン (2.0 / 2.2 /2.3)
- JDKのバージョン確認

```bash:
$ java -version
java version "1.6.0_43"
Java(TM) SE Runtime Environment (build 1.6.0_43-b01-447-11M4203)
Java HotSpot(TM) 64-Bit Server VM (build 20.14-b01-447, mixed mode)
```

- ADB server手動起動

```bash:
$ sudo /Applications/Android\ Studio.app/sdk/platform-tools/adb start-server
* daemon not running. starting it now on port 5037 *
ADB server didn't ACK
* failed to start daemon *
```

## 対応
adb_usb.ini に入っている改行を削除

```bash:
$vim ~/.android/adb_usb.ini
# ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT.
# USE 'android update adb' TO GENERATE.
# 1 USB VENDOR ID PER LINE.
0x011c
                           # <---- 改行を削除
```

地味にハマりました…。
cliで正規表現パターンの生成 (txt2regex)

txt2regexを使うと正規表現のウィザードが表示される。使い方覚えれば役に立つかも？

```bash:
$ txt2regex
[.]終了  [0]リセット  [*]色                             ^txt2regex$ ^txt2regex$
[|]または  [(]グループ化開始                       !! 未サポート部分
 RegEx perl    : ..*
 RegEx php     : ..*
 RegEx postgres: ..*
 RegEx python  : ..*
 RegEx sed     : ..*
 RegEx vim     : ..*

     .oO(21113)()
  [1-2]: 

  マッチを始めるのは:
  1) 行の先頭から
  2) 行の任意の部分から

```

```Bash:
$ txt2regex --help
usage: txt2regex [--nocolor|--whitebg|--all]
       txt2regex --showmeta|--showinfo <program>
       txt2regex [--all|--prog <p1,p2>] --make <target>
       txt2regex --history <value>

OPTIONS (they are default OFF):

  --all                 works with all registered programs
  --nocolor             self-explanatory
  --whitebg             colors adjusted to white background terminals
  --showmeta            prints a complete metachar table for all programs
  --showinfo <program>  prints regex info about the program

  --history <value>     prints to STDOUT a regex from a history data
  --make <target>       prints a ready regex for a common pattern
  --prog <p1,p2,...>    choose which programs to use (separated by commas)

  --version             prints the program version and quit
  --help                prints the help message and quit

for more details about the options, read the README file.
```
OSXにvagrantとsaharaプラグインをインストール

簡単2ステップでインストールします。

* [Vagrant Downloads](http://downloads.vagrantup.com/) ページから最新版をダウンロードしてインストールします。
* ターミナルで```vagrant plugin install sahara```を実行します。

saharaプラグインについては[Vagrantの必須プラグインSaharaをVagrant 1.1に対応させました | Ryuzee.com](http://www.ryuzee.com/contents/blog/6555)、[Vagrant1.1のMulti-VM環境でSaharaを使う方法 | Ryuzee.com](http://www.ryuzee.com/contents/blog/6604)を参照してください。
親子関係にあるテーブルで外部キーとなるIDを自動で保管して保存する

# 概要
親テーブル→子テーブルの関係にあるデータをまとめて保存して
外部キーの対応も行う

# モデルとテーブル作成
```rb:
rails g model hoge hoge1:string
rails g model fuga fuga1:string hoge_id:integer
```

# hoge.rb
```rb:
belongs_to :pqc_sheet_name
```

# fuga.rb
```rb:
has_one :pqc_apply
```

# save_data_model.rb
```rb:
def save_data
  hoge_arr = {'hoge1' => 'hoge'}
  fuga_arr = {'fuga1' => 'fuga'}
  hoge = Hoge.new(hoge_arr)
  hoge.fuga_arr = Fuga.new(fuga_arr)
  hoge.save!
end
```

# 結果

### hoge
| id | hoge1 |
|:-----------|------------:|
| 1       |        hoge |

### fuga
| id | fuga1 | hoge_id |
|:-----------|:-----------|:-----------|
| 1       |        fuga | 1 |
Seleniumでスマホビューをテストする

## はじめに
* SeleniumWebdriverでスマホビューのテストをする方法の一つとしてUserAgentを偽装する手がある
* もちろん実機を使うのも１つの手であるが

## 動かしてみた
* 以下のどちらの方法でもブラウザが立ち上がり自動操縦できることを確認した

### webdriver-user-agentを使って書く
* githubに設定できるagentなどは詳しく載っているので[こちら](https://github.com/alisterscott/webdriver-user-agent#options)を参照
* `gem install selenium-webdriver webdriver-user-agent` をしておく

```rb:test.rb
require 'rspec'
require 'selenium-webdriver'
require 'webdriver-user-agent'

driver = Webdriver::UserAgent.driver(:browser     => :firefox,
                                     :agent       => :iphone,
                                     :orientation => :landscape)
driver.get 'http://yahoo.co.jp' # スマホビューのYahoo!のサイトが表示される
driver.title.should == 'Yahoo! JAPAN' # ページタイトル確認
sleep 1
driver.quit  # ブラウザ終了
```

### Capybaraを使って書く
* ブラウザの操作はCapybaraでおなじみのコマンドなので設定部分だけを
* UserAgentについては[こちら](http://www.openspc2.org/userAgent/)を参照
* support以下のファイルなどに記述しておく

```rb:
Capybara.register_driver :ios do |app|
  profile = Selenium::WebDriver::Firefox::Profile.new
  ua = 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25'
  profile["general.useragent.override"] = ua
  opts = { browser: :firefox, profile: profile }
  Capybara::Selenium::Driver.new app, opts
end
```

----

#### Firefoxでスマホビューを確認したい場合
* アドレスバーにabout:configと打つ
* general.useragent.overrideに'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25を設定すればよい

# ～ただの宣伝～
* [全国のSeleniumer必読](http://qiita.com/oh_rusty_nail/items/b8ba525d31ea7c522856)
* Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
LVMボリュームのマウントの仕方

```
apt install -y lvm2
```

# マウント

ボリュームグループ名(VG)を確認 
----

 * /dev/sdcがどのボリュームグループを持つか確認

```Bash:
$ sudo pvscan
  PV /dev/sde3   VG pve   lvm2 [148.55 GiB / 16.00 GiB free]
  Total: 1 [148.55 GiB] / in use: 1 [148.55 GiB] / in no VG: 0 [0   ]
```

今回は`pve`という名前のボリュームグループがあることがわかる。
ボリュームグループは`/dev/ボリュームグループ名/ロジカルグループ名`となる

## ボリュームグループ内のロジカルボリューム名を確認

```Bash:
$ sudo lvscan
  inactive          '/dev/pve/swap' [4.00 GiB] inherit
  inactive          '/dev/pve/root' [37.25 GiB] inherit
  inactive          '/dev/pve/data' [91.30 GiB] inherit
```

## ロジカルボリュームをシステムで利用できるようにする

```Bash:
$ sudo lvchange --available y /dev/pve/root
```

```bash:inactiveからACTIVEになる。
$ sudo lvscan
  inactive          '/dev/pve/swap' [4.00 GiB] inherit
  ACTIVE            '/dev/pve/root' [37.25 GiB] inherit
  inactive          '/dev/pve/data' [91.30 GiB] inherit
```

```Bash:
$ sudo mount /dev/mapper/pve-root /mnt/
```

# アンマウント

```Bash:
$ sudo umount /mnt/
```

ロジカルボリュームをシステムから利用できなくする
----

```Bash:
$ sudo lvchange --available n /dev/pve/root
```
.pryrc for you and me!

# [dotpryrc](https://github.com/JuanitoFatas/dotpryrc/) for you and me!

## What is [Pry](https://github.com/pry/pry/)?

> An IRB alternative and runtime developer console.

## What is .pryrc?

Pry startup file, more information [The .pryrc file](https://github.com/pry/pry/wiki/Pry-rc).

## What's inside? (Bold is highlight)

* __Nice welcome & farewell message when you enter & leave Pry.__
* Ability to load daily-used gem. Loaded benchmark for you.
* A security check for your old Ruby.
* Better printing via [hirb](https://github.com/cldwalker/hirb) and [awesome_print](http://github.com/michaeldv/awesome_print).
* Customized Prompt to make you feel at home.
* Four Convenient hotkeys when travelling in debugging.
* Customized hotkeys for Ruby and Pry built-in commands.
* Copy-to-clipboard utility for OSX or one-command install away for non OSX.
* Autoload console commands for you if you're riding with Rails.
* Live Programming and code reloading with sketches.
* Added helpers: `lorem` Ipsum, `to_yaml` abstraction, `Array#toy`, `Hash#toy`...etc.
* Save Pry's history to `.irb_history` for Environment protection.

## Install

__Make sure backup your own `.pryrc` first!!!__

Download the [zip](https://github.com/JuanitoFatas/dotpryrc/archive/master.zip) then put these two files to your home directory.

## Contribute

Please check [dotpryrc GitHub Repository](https://github.com/JuanitoFatas/dotpryrc/)

## Have fun! ❤ ❤ ❤

![Pry welcome you with a nice message!](https://raw.github.com/JuanitoFatas/Foto/d67f3bdffeedc512f50a11e3370745c23baed38e/dotpryrc/in-action.gif)

If you like this, please drop me a tweet to [@JuanitoFatas](https://twitter.com/JuanitoFatas). Glad to hear from you soon.
PHP (igo-php) で形態素解析



# どんなものがあるか?

- php_mecab  (phpのモジュール)
- igo-php

# どれがいいの?

igo-php にした。

- Mac OS X の MAMP だとモジュール組み込みなど激しく面倒なので。

# 使ってみた感想

思ったよりうまく分けてくれなかったので、利用を諦めた。
ちゃんと調教するといいのかもだけど、工数が見えないので諦めた。

## 問題点

- 氏名が、苗字と名前に分けられた (氏名両方で取得したかった)
- 名前が、真奈だとしたら、真、奈と別れた
- AKB48 が AKB と 48 にわかれた

などなど、沢山。
辞書登録等しなきゃなんだろうけども。


# igo-php の公式サイト

Igo - a morphological analyzer
http://igo.sourceforge.jp/

# igo-php の特徴

### 公式ページから概要/特徴

- Javaで実装された形態素解析器。→ Common Lisp版
- 辞書フォーマット及び解析結果は、ほぼMeCab互換。
- 単機能。
- Javaの形態素解析器としては比較的高速。
- スレッドセーフ。

# インストールの大まかな流れ

まずは大まかな流れ (2013/08/01 時点)

1. jarファイルをダウンロード
2.  Mecab用IPA辞書をダウンロード
3. 上記jarを使って、IPA辞書をコンパイルして作成 
4. igo-php をダウンロード (igo-php 0.1.7)


# インストール方法

## 1. jarファイルのダウンロード

ダウンロード - Igo - SourceForge.JP
http://sourceforge.jp/projects/igo/releases/

## 2. Mecab用IPA辞書をダウンロード

Downloads - mecab - Japanese morphological analyzer
https://code.google.com/p/mecab/downloads/list

以下のが最新かな??
mecab-ipadic-2.7.0-20070801.tar.gz 

## 3. 上記2つを使って、辞書をコンパイルして作成 

3の辞書を作成する方法

```
java -Xmx1024m -cp igo-0.4.5.jar net.reduls.igo.bin.BuildDic ipadic mecab-ipadic-2.7.0-20070801 EUC-JP
```

## 4. igo-php をダウンロード 

igo-php 公式は、どっちだろ?

siahr/igo-php
https://github.com/siahr/igo-php

Igo-php プロジェクト日本語トップページ - SourceForge.JP
http://sourceforge.jp/projects/igo-php/


# java で解析テスト

``` $ java -cp igo-0.4.5.jar net.reduls.igo.bin.Igo ipadic 
すもももももももものうち [Enter]  
```

# php で解析テスト

```
$ php Igo.php <辞書へのパス> <文字列（またはテキストファイル）> 
$ php Igo.php /home/user/ipadic "すもももももももものうち" 
```

メモリー不足になるので、一時的に増やした方がいいかも。

```
PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes) in /Users/hoge/igo-php-0.1.7/lib/Igo/FileMappedInputStream.php on line 26
```


# 実際のコード

dirname 使っているところは許して。define等で絶対パスを。

```php
<?php
ini_set('memory_limit', '128M');
set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/igo-php/lib/Igo');
require_once(dirname(__FILE__) . '/igo-php/lib/Igo.php');

$igo = new Igo(dirname(__FILE__) . '/ipadic', 'UTF-8');
$result = $igo->parse("すもももももももものうち");
print_r($result);
$result = $igo->wakati("すもももももももものうち");
print_r($result);
```



# 参考サイト

BakedMemo: igo-phpを使って形態素解析をする方法
http://bakedmemo.blogspot.jp/2013/01/igo-php.html

[PHP]文章を解析して単語ごとに分解する（形態素解析） | PHP Archive
http://php-archive.net/php/morphological-analysis/
WebGL Report 実行結果

WebGL の情報をグラフィカルに表示するサイトがあったので試してみました。

> ■ WebGL Report
> http://webglreport.com/

テストに使用したブラウザは以下の３つです。

|テストに使用したブラウザ|バージョン|
|:------------|:--------:|
|Windows 7 + Chrome 28|28.0.1500.95 m|
|Windows 7 + Firefox 22|22.0|
|Windows 7 + IE11 Developer Preview|11.0.9431.0|
|Windows 7 + IE11 Release Preview|11.0.9600.16411|

Chrome 28
![webgl_report_chrome.png](https://qiita-image-store.s3.amazonaws.com/0/26094/699d4ebc-c2c3-7a34-a4e8-a2384a43b27d.png)

Firefox 22
![webgl_report_firefox.png](https://qiita-image-store.s3.amazonaws.com/0/26094/1239fa9f-c814-8829-b3ea-a8b7ad71d328.png)

IE11 Developer Preview
![webgl_report_ie11_developer_preview.png](https://qiita-image-store.s3.amazonaws.com/0/26094/ec4a09d9-1ba5-44e2-be68-83bd6a95f5d1.png)

IE11 Release Preview
![webgl_report_ie11_release_preview.png](https://qiita-image-store.s3.amazonaws.com/0/26094/612eb81d-e607-c120-d0a5-6a9eb1406e63.png)
Propertyデコレータを使う?


Pythonでpropertyを定義するとき,大部分のサンプルは以下のようになっている.

```python:property1
class Prop1(object):

    @property
    def x(self):
        '''x property'''
        return self._x

    @x.setter
    def x(self, value):
        self._x = value

    @x.deleter
    def x(self):
        del self._x
```

ただ,これpropertyデコレータで指定できるのはgetterのみで,
以下のようにdeleterにpropertyデコレータをつけても,deleterが定義されない. (setter/getterは定義される)

```python:property2
class Prop2(object):

    @property
    def x(self):
        del self._x

    @x.setter
    def x(self, value):
        self._x = value

    @x.getter
    def x(self):
        return self._x
```

deleterはともかく,setter/getterどちらにpropertyデコレータをつけるのが正しいのか忘れそうである.
かといって,以下のように完璧にデコレータとバイバイするのも野暮ったい気がする.

```python:property3
class Prop3(object):

    def getx(self):
        return self._x

    def setx(self, value):
        self._x = value

    def delx(self):
        del self._x

    x = property(getx, setx, delx, 'x property')
```

ということで,propertyデコレータは使わない(関数として使う)+getter/setter/deleterの指定にはデコレータを使用する,という書き方はどうだろう.

```python:property4
class Prop4(object):

    x = property(doc='x property')

    @x.setter
    def x(self, value):
        self._x = value

    @x.getter
    def x(self):
        return self._x

    @x.deleter
    def x(self):
        del self._x
```

ただ,ネット上のソースコードを見た感じ,普通にgetterにpropertyデコレータをつける書き方が多数派のように見える...
flycheck で C/C++ のエラーチェック定義を追加する

皆さん，[flymake](http://www.emacswiki.org/emacs/FlyMake) は使ってますか？ flymake は編集中にリアルタイムで文法エラー・警告を指摘してくれる Emacs の機能です．Emacs でプログラムを書く人にはおなじみの機能のはず (知らなかった人は是非使ってみてください)．

しかし，この flymake は少々設定が面倒です．そこで，いくつかの言語の flymake 設定をまとめてくれているのが [flycheck](https://github.com/lunaryorn/flycheck) になります．

flycheck には最近 C/C++ に対応しました．cppcheck という静的解析ツールによる警告などを表示してくれます．ただ，この cppcheck はシンタックスエラーを全て指摘してくれるわけではないようです (逆にコンパイラだけでは指摘できないような部分はチェックしてくれるんですけどね)．

そこで，コンパイラによる通常のエラーチェックを行う定義を書きました．それが以下のコードになります．

```common-lisp
(require 'flycheck)

(flycheck-define-checker c/c++
  "A C/C++ checker using g++."
  :command ("g++" "-Wall" "-Wextra" source)
  :error-patterns  ((error line-start
                           (file-name) ":" line ":" column ":" " エラー: " (message)
                           line-end)
                    (warning line-start
                           (file-name) ":" line ":" column ":" " 警告: " (message)
                           line-end))
  :modes (c-mode c++-mode))
```

flycheck-define-checker というのがエラーチェックの定義を追加するマクロです．c/c++ が定義名，その次の文字列がコメント，:command がコンパイラや静的解析ツールのコマンドと引数，:error-patterns がコンパイラによるエラー出力の正規表現，そして :modes がその定義を利用するモードです．定義2行目のコメント文字列は必須なので注意してください．

flycheck に他の言語のエラーチェックを追加したい人も，このコードでだいたい何をすればいいかわかると思います．詳細は [マニュアル](http://flycheck.lunaryorn.com/) を参考にしてください．flycheck-define-checker の各要素の説明は [3.1 Definition of syntax checkers](http://flycheck.lunaryorn.com/Extending.html#Definition) に書かれています．

ちなみに，この定義を `(flycheck-select-checker 'c/c++)` を C/C++ のフックに書けば C/C++ モードで有効にすることができます (もちろん自動で flycheck を有効にするなら `(flycheck-mode t)` も書いてください)．
SSHで日本語が入力できない


あとですいこうする

ローカルのMac(英語でインストール)の iTerm, Terminal, zsh, bashすべての組み合わせでは日本語を入力できる
上記すべての組み合わせでsshでサーバーのbashに日本語を入力しようとすると、消えてなくなる
日本語を入力できるサーバーとそうでないサーバーがある

不思議なことに、別のMac(日本語でインストール)では日本語入力できる

できないMac:

$ locale
LANG=
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

できるMac:

$ locale
LANG="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_CTYPE="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_ALL=

export LC_CTYPE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

をMacのzshenvに書いたら、↓こうなり、SSH先でも日本語使えるようになった


LANG=
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
$.DeferredでsetTimeoutの取り扱いを簡単にする

`setTimeout`を使って複雑な非同期処理を書くのは、タイマーIDの管理が大変でやりたくない。
Deferredオブジェクトならそこら辺うまいこと取り扱えるんで、よくDeferredオブジェクトで`setTimeout`をラップして使う。

```js
$.extend({
	wait: function(duration){
		var dfd = $.Deferred();
		setTimeout(dfd.resolve, duration);
		return dfd;
	}
});
```


こんな感じで使える

```js
var time = +new Date();

// 1秒待つ
$.wait(1000).done(function(){
	console.log(new Date() - time); //=> 大体 1000
});

// 2秒たったらキャンセルする
var timer = $.wait(3000).fail(function(){
	console.log(new Date() - time); //=> 大体 2000
});
$.wait(2000).done(timer.reject);

// Deferredオブジェクトなので $.when が使える
$.when($.wait(1000), $.wait(2000), $.wait(3000)).done(function(){
	console.log(new Date() - time); //=> 大体 3000
});
```
Chrome Developer Tools で html を検索する



# なぜか検索窓がない!

- 昔のバージョンでは右上にあったぽいがない!
- 設定にも表示のオン、オフない!


# 表示させる方法

右下の設定アイコンをクリックして、キーボードショートカットを見ると良さげ。

Mac の場合

Command + F で、下に検索フォームが出てくる
Eshell の Shebang で複数引数をサポートする

## 要約

Eshell は

```rb:
#!/usr/bin/env ruby -Ku
```
みたいな複数引数 Shebang をサポートするべき．

## 前置き
皆さん Eshell 使ってますか?
Eshell は Emacs Lisp で書かれたシェルです．
当然 Emacs Lisp で拡張できるので色々やりたい放題できます．

それはともかく Shebang の話をします．
Shebang というのはシェルスクリプト等の先頭行に現れる，

```zsh:foo.sh
#!/bin/sh
```

のように書かれている行のことで，これが付いているプログラムは，

```
$ ./foo.sh
```
とすれば `/bin/sh foo.sh` を実行した時と同じ結果を得られます．

しかしこの Shebang，複数の引数を指定した時の挙動は環境によるらしいです([Wikipedia の Shebangの項](http://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%90%E3%83%B3_%28Unix%29)参照)．
例えば以下のような Shebang だと([TOBY SOFT wiki ](http://tobysoft.net/wiki/index.php?Ruby%2Fshebang%A4%CBenv%20ruby%20-Ku%A4%C8%BD%F1%A4%AF%A4%C8%C6%B0%A4%AB%A4%CA%A4%A4) から引用)，

```rb:buzz.rb
#!/usr/bin/env ruby -Ku
```

```
$ ./buzz.rb
/usr/bin/env: ruby -Ku: そのようなファイルやディレクトリはありません
```

と Linux では言われます． Eshell でも同じ事を言われます．
Mac は複数引数の Shebang をサポートしているため，上記の Shebang を持つスクリプトも実行してくれます．

Mac のシェル上で動くのに Emacs のシェル上で動かないのはおかしいですよね?

なので Eshell に複数引数の Shebang サポートを追加しました．

## 本編
以下のコードを `.emacs` に追加してください．

```el:.emacs
(defadvice eshell-script-interpreter (around esi activate)
  (setq ad-return-value
        (let ((file (ad-get-arg 0))
              (maxlen eshell-command-interpreter-max-length))
          (if (and (file-readable-p file)
                   (file-regular-p file))
              (with-temp-buffer
                (insert-file-contents-literally file nil 0 maxlen)
                (when (re-search-forward "^#![ \t]*\\(.+\\)$" nil t)
                  `(,@(split-string (match-string 1)) ,file)))))))
```

それでは，よき Emacs & Eshell ライフを！

## Q: 引数を複数 Shebang 内に書くのって全然ポータブルな書き方じゃないよね．
* Eshell で複数引数 Shebang が動く
* Eshell は Emacs 上で動く
* Emacs はどこでも動く

良かったですね．どの環境でもちゃんと動きます．ポータブルです．
rbenv と refe を連携させる


複数のバージョンのるりま（Ruby リファレンスマニュアル）がインストールされている場合、
refe の `-d` オプションでデータベースを指定してバージョンを切り替える。

rbenv を使用している環境では、rbenv で選択した Ruby のるりまが見たいので、
rbenv で選択した Ruby バージョンのデータベースを自動で指定してくれる rbenv plugin を書いた。


## インストールと使い方

```
$ git clone https://github.com/hara/rbenv-refe2.git ~/.rbenv/plugins/rbenv-refe2
$ rbenv refe Array#each
```

refe2 (bitclust) の 0.7.0 以降で確認した。


## 作り方

rbenv plugin の書き方は [rbenv プロジェクトの Wiki](https://github.com/sstephenson/rbenv/wiki/Authoring-plugins) にまとめられている。
rbenv にコマンドを追加する場合、決められた場所に実行可能ファイルを置くだけでよい。

例えば

```
$ rbenv mycommand
```

を追加したい場合、

```
$RBENV_ROOT/plugins/myplugin/bin/rbenv-mycommand
```

に置く。

コマンドからは `rbenv-COMMAND` で他の rbenv コマンドを呼び出せるので、
今回は `rbenv-version-name` で現在の Ruby バージョンを取得してデータベースのパスを構築し、
refe コマンドを呼び出している。
Blocks in Objective-c

Objective-Cのblockの定義の仕方とか、関数への渡し方とかのまとめ。

## Blockの基本

```objc:
^(int n) {
    return n + 1;
};

int (^plusOne) (int) = ^(int n) {
    return n + 1;
};
```
## 型宣言
同じようなBlockを作成したい場合はよくあるので、その場合は型を宣言しておくことができる。

```objc:
typedef int (^PlusOne)(int);

PlusOne plusOne = ^(int n) {
    return n + 1;
};
```

## レキシカルスコープ
Blockの中ではBlockの中で定義した変数しか参照できないが`__block`修飾子をつけると特別にBlockの中からでも参照できるようになる。

```objc:
__block int x = 100;
void (^print)(void) = ^(void) {
    NSLog("%d", x);
};
print();  // 100が表示される
```

## メソッドの引数として渡す
このような形でメソッドの宣言をする

```objc:
- (void)oneWithFunc:(int (^)(int))func {
    int n = 1;
    return func(n);
}
```

呼ぶときはこんな感じ。

```objc:
[myObject oneWithFunc:^(int n) {
    return n * 2;
}];

// 1 * 2で2が返ってくる
```
refe で最新のるりまを参照する 

最近のるりま (Ruby Reference Manual) は GitHub で管理されていて、
bitclust コマンドで更新できるようになっているようなので入れてみる。

bitclust は refe2/bitclust-core/bitclust-dev の 3 つに gem 化されて rubygems.org に登録されている。
現在登録されているバージョン (0.7.0) は古い Subversion リポジトリからデータを取得するようなので、
GitHub から最新の bitclust を入れた。

```
$ git clone https://github.com/rurema/bitclust.git
$ cd bitclust
$ rake build
$ gem install pkg/bitclust-core-0.8.0.gem
$ gem install pkg/refe2-0.8.0.gem
```

`rake build` には bundler が必要。
そのうち rubygems.org に 0.8.0 がリリースされるはずなので、そうしたら

```
$ gem install refe2
```

でよい。

bitclust をインストールしたら bitclust setup コマンドでデータベースを作成する。

```
$ bitclust setup
```

るりまのデータを [rurema/doctree](https://github.com/rurema/doctree) から取得するので、
git がインストールされている必要がある。

setup コマンドは、二度目以降は `git pull` してくれるので、
るりまを更新したくなったら setup コマンドを実行すればよい。

デフォルトでは 1.8.7, 1.9.3, 2.0.0 のデータベースが作成されるが、
`--versions=1.9.3,2.0.0` のようにバージョンを指定することも可能。

デフォルトのバージョン (`./bitclust/config` に書いてある) のデータベースから検索するには

```
$ refe Array
```

とする。またはデータベースを指定して

```
$ refe -d ~/.bitclust/db-1.9.3 Array
```

のようにバージョンを指定して検索できる。
【まとめ】パソコンのデスクトップを晒してみる

#パソコンのデスクトップを晒してみる

今回は、私のパソコンのデスクトップをちょっとばかりカスタマイズしてみたので、紹介してみようと思います。

コメント欄にて、みなさまのパソコンのデスクトップも教えていただければうれしいです。仮想環境でも良いので、お気に入りのデスクトップを紹介していただければと思います。画像は、形式にこだわらず普段使いが伝われば十分です。


```
![](画像URL)
```




##パソコンのスペック
| 項目 | 名前 | その他 |
|:-----------|:------------|:------------|
| 機種名       |        MacBookAir  |     11inch/Mid 2011     |
| OS     |      Mac OS X|   -     |


##スタート
パソコンの電源を入れれば、以下の画面になります。メニューバーやDockは全く使うことがないので、普段は非表示にしています。コンセプトとしては、使っているアプリも少ないので、シンプルな感じです。



##Dock

正直、Dockは、あまり使っていないので、何も置かなくても良いのですが、念のために少数のアプリを置いています。(緊急避難用?



##メニューバー

Macのメニューバーは以下の様な感じになってます。使うことは、ありません...。

##カスタマイズ

メニューバーやDockが邪魔な場合は、以下を参考にカスタマイズしてください。`TinkerTool`というアプリも便利です。

[Macのデスクトップを広々使うためにメニューバーを隠す方法](http://mba-hack.blogspot.jp/2013/08/mac_1.html)

##壁紙

壁紙は最初に設定してあったものから変更しました。私は、基本的にOSのロゴを黒ベースで設定しています。壁紙のダウンロードは、以下のサイトがお勧めです。お勧めのサイトがあれば是非教えて下さい。

[http://www.socwall.com/](http://www.socwall.com/)


#コメント

みなさまのデスクトップ画像をお待ちしております。もしよろしければ、貼り付けていってください。

また、沢山のウィンドウを開いて、コーディングしている時のデスクトップでも構いません。普段使いが伝われば、嬉しいです。よろしくお願いします。
HttpClientでの通信がキャンセルできなかった

# HttpClientでキャンセルができなかった

doInBackground内
（所々端折ってます）

```java:Get.java
HttpGet get = new HttpGet(url);
HttpResponse response = mHttpClient.execute(get);
InputStream is = null;
BufferedInputStream bis = null;
FileOutputStream fos = null;
try {
    is = response.getEntity().getContent();
    bis = new BufferedInputStream(is, BUFFER_SIZE);
    fos = new FileOutputStream(file);
    byte buffer[] = new byte[BUFFER_SIZE];
    long total = response.getEntity().getContentLength();
    long size = 0;
    long loadedByte = 0;
    while ((size = bis.read(buffer)) != -1) {
        if (isCancelled()) {
            return null;
        }
        loadedByte += size;
        fos.write(buffer, 0, (int) size);
        publishProgress(loadedByte, total);
    }
    fos.flush();
    return file;
} finally {
    Log.d("Download", "Download Stream Close Start.");
    IOUtils.closeQuietly(is);
    Log.d("Download", "Download Download [is] Closed.");
    IOUtils.closeQuietly(bis);
    IOUtils.closeQuietly(fos);
}
```

## IOUtils.closeQuietly(is);がちょーながい

AsyncTask#cancel() を呼ぶ

LogCat
hh:05:49.830: D/Download(19932): Download Stream Close Start.
hh:06:39.184: D/Download(19932): Download [is] Closed.
....
InputStreamのcloseまで50秒！！
（たぶん）通信がキャンセルされてない！！

#### ！？　なんで！！！

`HttpGet#abort() よんでない…`

#### え？
### HttpGet#abort() よんでない！！！

```java:Get.java
    while ((size = bis.read(buffer)) != -1) {
        if (isCancelled()) {
            get.abort();
            return null;
        }
        loadedByte += size;
        fos.write(buffer, 0, (int) size);
        publishProgress(loadedByte, total);
    }
}
```
### いけた (\*´ω｀\*)