OmniAICreator/Qiita-1.07M huggingface dataset:
SublimeTextにGoSublimeを入れた


SublimeTextにGoプラグイン集の[GoSublime](https://packagecontrol.io/packages/GoSublime)を入れようとしたら下記エラーが。

```
MarGo: Missing required environment variables: GOPATH
See the `Quirks` section of USAGE.md for info
```

Preference -> Package Settings -> GoSublime -> Settings - User
にて下記追記すればOKだった。（$GOPATHは各自のパスで）

```
{"env": {"GOPATH": "$HOME/go"}}
```
Homebrewでつまづいたこと

- ```brew update```でエラー
- ```brew doctor```を行うとたくさんのエラーたちが・・・orz

## 主なエラーさん達
- ```Warning:/usr/local/bin isn't writable.```
- ```Warning: /usr/local/share isn't writable.```
- ```Warning: Some directories in /usr/local/share/man aren't writable.```
- ```Warning: You have unlinked kegs in your Cellar```
- ```Warning: You have uncommitted modifications to Homebrew```

## 解決方法
- 大体はエラーと共に解決方法が出てくるので、それを行う

## メモ
- ```$(whoami)```を使うとユーザ名が勝手に入る。ブラボー
- ```sudo chgrp 対象グループ 対象ディレクトリ名```も忘れずに？
	- ```例：sudo chgrp admin /hoge/hoge```
- ```You have unlinked kegs in your Cellar```
	- 今回はansibleで怒られたので、下記の様にした
		- ```brew link ansible```
- ```Warning: You have uncommitted modifications to Homebrew```
	- インストールしたときのGitのゴミファイルが残ってる
		- ```cd /usr/local/Library && git stash && git clean -d -f```で解決

今後も何かあれば追加していきます
Android Studioで意気揚々とテストカバレッジとった後VerifyErrorでコケたときのメモ

先日思いがけずAndroid StudioでUnit testのカバレッジをとっててハマったときのメモ。

ご存知の方も多いと思いますが、こんな感じでbuild.gradleにtestCoverageEnable trueって書いておいて、gradleタスクから、connectedAndroidTestあたりを実行すると、自動でcoverageを出力してくれます

```groovy:build.gradle
buildTypes {
    ...
    debug {
        testCoverageEnabled true
    }
    ...
}
```

参考：
[Android Tools Project Site](http://tools.android.com/tech-docs/new-build-system)
[Androidでコードカバレッジがどんな感じで測れるのか](http://qiita.com/cattaka/items/16fa27189c865254b528)
[[Android][Gradle] ライブラリプロジェクトのJaCoCoでのカバレッジ計測](http://ksoichiro.blogspot.jp/2014/05/androidgradle-jacoco.html)

が、本題は、その後作ったAPKを入れて動かそうとした時に、

```shell-session:
java.lang.VerifyError:...
```

ってでたこと。
メッセージを見るとコンパイル時とランタイム時でクラスが異なります的なエラーがでてるんですが、

？？？

いや、何も変えてない…

調べてみると、どうもtestCoverageEnabledとしたことで、裏でテスト用にいろいろ挙動が変えられておかしくなっている様子
[java.lang.VerifyError when running Android tests with testCoverageEnabled = true](http://stackoverflow.com/questions/23403092/java-lang-verifyerror-when-running-android-tests-with-testcoverageenabled-true)

正直、根本解決はできてないし、よくわからないけど、上のtestCoverageEnabledを消したら動いた。

どうなってんの・・・
erlファイルのコンパイルと実行


##erlシェルでコンパイルしてみる


```Erlang:solveMeFirst.erl
-module(solution).
-export([main/0]).
solveMeFirst(A, B) ->
    A + B.
main() -> 
    {ok, [A, B]} = io:fread("", "~d~d"),
    Res = solveMeFirst(A,B),
    io:format("~p~n",[Res]).

```
hackerrankから練習用のコードを拾ってきてコンパイルしてみようと思います。




```Erlang:コンパイルerror
c(solveMeFirst.erl).
* 1: syntax error before: '.'
c(solveMeFirst).    
solveMeFirst.beam: Module name 'solution' does not match file name 'solveMeFirst'
error

```

コンパイルするときは`c(erlファイル)`を実行する。
でも接尾辞の`.erl`を入れるとエラーになる。
そして今度はmoduleの名前がおかしいと言われた。
ファイル名を`solveMeFirst.erl`から`solution.erl`に変更してリトライ。


```Erlang:コンパイル成功
c(solution).                      
{ok,solution}
ls().
solution.beam     solution.erl
```

ファイル名は`-module().`で指定した文字列にしないとダメっぽい。コンパイル後にはbeamファイルなるものが生成された。
早速これを実行してみる。

```Erlang:
solution:main().        
4
7
11
ok
```

main関数を無事呼び出して使えました。
TDD / naming > TEST_GROUP_RUNNER() > 複数のテストを行う関数


[テスト駆動開発による組込みプログラミング](http://www.oreilly.co.jp/books/9784873116143/)
という本に TEST_GROUP_RUNNER() という関数があった。

複数のテストを実行する関数だった。

GROUPをつけることで、「色々なxxxをします」というのが分かるようになるだろうか。

コーディングしている中で、関数が以下のどちらであるかというのが分かったらソースリーディングがしやすくなるだろうか、と思う時がある。

- 低レベルの処理
- 高レベルの処理 : 低レベルの処理の組合せ

高レベルの処理だけ見ることにより、プログラムのだいたいの動きを追いやすくなる。

プログラム構造のドキュメントを残すということも手ではあるが、関数名から分かるとやりやすいと思う時がある。

<hr>
低レベルと高レベルの処理に関連して
http://qiita.com/7of9/items/49f9782d34b9fe278112
> 作業役クラスと管理役クラス / ...

クラスという考えだが、関数にあてはめてもいいかもしれない。 namingをどうするかは未定。
Macでerlangインストールしてerlang shellをちょっとだけ触ってみた　


##install

```Bash:ターミナル
brew install erlang
erl -version
Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 7.1
```

これだけ

##erlang shell

```Bash:erlでerlangのシェルに入る
[% ~ ]erl
Erlang/OTP 18 [erts-7.1] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Eshell V7.1  (abort with ^G)
1>
```

```Erlang:lsとpwdだけしてみた
% 最後にドット(.)をつけるのがポイント.
ls().
pwd().
% シェルから出たい時はこれです.
q().

```

いろいろ触って慣れていきたいと思います。
技術英語 > they’ve [been made possible] by remarkable advances in ... / the reticle is used to [make measurements]

@ LOE > April 6, 2012
http://loe.org/shows/shows.html?programID=12-P13-00014
> they’ve <font color=red>been made possible</font> by remarkable advances in our ability to sequence the human genome.

<hr>
makeで思い出したのは measurementsとの使用

https://www.microscopeworld.com/t-microscope_reticle_measuring.aspx
> Most often the reticle is used to <font color=red>make measurements</font> or count particles.

10年ほど前に「make measurementsはおかしい」という人がいたが、今だに何がおかしいのかよく分からない。使用例は度々目にするのだが。

<hr>
上の文で出てきた reticle とは何か?

http://eow.alc.co.jp/search?q=reticle&ref=sa
> 〔光学機器の〕レチクル、網線、十字線◆接眼レンズの焦点位置に刻まれた目盛り線や十字の線。
-*- coding: ... -*- と矛盾したファイルのエンコーディングを直す


Emacs で -*- coding: ... -*- と矛盾したファイルを開いた場合、例えば、

```
-*- coding: utf-8 -*-
```

とかいてあるのに shift_jis でエンコードされたファイルを開いて文字化けした状態で、 `C-x RET r` で実際のエンコーディングを指定すると正しく表示されるようになる。
その状態でファイルを編集して保存すれば、coding: と整合したエンコーディングで保存される。

参考: http://www.gnu.org/software/emacs/manual/html_node/emacs/Specify-Coding.html

# 余談

反対に、coding: と矛盾させて（その指定によらないエンコーディングで）保存するにはどうすればと思ったのですが、以下の手順で行けました。

1. `C-x RET f` でバッファエンコーディングを指定 (例えば shift_jis)
2. `M-:` で以下を評価

```
(let ((coding-system-for-write 'shift_jis)) (save-buffer))
```
Instagram APIをつかってイケてるファッションを集めたサイトを作ってみたい

# おしゃれな人を自動的にキュレーションして表示するシステムが作りたい
先日ある記事([ぐるなびや食べログはもう古い!?
女子大生は「Instagram」（インスタグラム）で
飲食店を探し、雑誌感覚で画像も検索する！](http://diamond.jp/articles/-/79924))を見つけて、すごくカルチャーショックを受けました。ラーメンをインスタグラムで見つけるなんて僕の常識ではありえなかったのです。でも確かにやってみると、食べログを見るよりなんだかワクワクします。Instagramで加工された写真ですごく食欲をかきたてられました。Instagramというプラットフォームにすごく魅力を感じました(月並)

# instagramはおしゃれな人が投稿している。それを使えたらいいなあ
要するに、Instagramには質の良い投稿があふれているのです。それを使いたいと思いました。

# クローラーか？APIか？
Web上の情報を取ってくるにはクローラーを定期巡回させか、公開されているAPIを定期的にたたくかの選択肢があります。APIが公開されている時にはそちらを使い、APIでどうしても取れない情報をクローラーで取得するのが定石なので今回はAPIを使うことにします。
参考書籍: <a rel="nofollow" href="http://www.amazon.co.jp/gp/product/B00TO6KMEK">Rubyによるクローラー開発技法 　巡回・解析機能の実装と21の運用例</a>
# Instagram APIを使ってみた
公式ドキュメント -> https://instagram.com/developer/

# 使えそうなEnd pointとそうでないEndpoint
公式ドキュメントの[Endpointsのセクション](https://instagram.com/developer/endpoints/)に例が並んでいます。それぞれどういったレスポンスが返ってくるかは、各項のRESPONSEボタンを押すと見ることができます。

## おしゃれな投稿を集められるエンドポイントを探す
ここでは今回のおしゃれなファッションの投稿を集めるという観点でいくつか試したEndpointsの考察を書きます。
### /media/popular
InstagramのDocumentationのなかで投稿のことは"media"と呼ばれます。今回は投稿を探したいのでまずmediaセクションをあたりました。/media/popularは最近の人気の投稿を返してくれます。

####good
	- like数の大きい投稿がたくさん集められる。
 
####bad
	- popularであるだけなのでファッションに関連した投稿が返ってくるとは限らない。
	- 有名人ばかりになってしまい、親近感がわかない


### /media/search
このEndpointでは、緯度・経度で場所を指定して、そこから半径5kmまでの位置情報のついた投稿を集めることができます。投稿された時間で絞ることもできます

####good
	- サイトを渋谷のファッションなどにしたい場合、ターゲットを絞りやすくなる。
 
####bad
	- 必ずしもすべての投稿に位置情報がついているとは限らないため、取得できる投稿数が少ない。
	- 半径5kmまでしか指定できないため、不便。例えば、東京都全域の投稿を集めたいときは面倒。

### /tags/[tag-name]/media/recent
このEndpointでは、tagの名前を指定して最近の投稿を集めることができます。

####good
	- ファッション関係の投稿を簡単に集められる。
 
####bad
	- like数などでレスポンスを絞ることができないため、大量のデータを一時的に保存して自分でデータを処理しないといけない。
	- ファッション関係全ての投稿にタグがツイているとは限らない。


# 今後の展開
以上のEndpointとクローラーを併用させることになりそうです。こちらの本の内容を参考にして進めていきたいと思います。本の中ではAmazonでAPIから取れるデータと、ブラウザのランキング情報を組み合わせた例が紹介されていました。
参考書籍: <a rel="nofollow" href="http://www.amazon.co.jp/gp/product/B00TO6KMEK/">Rubyによるクローラー開発技法 　巡回・解析機能の実装と21の運用例</a>


# 余談
## railsで定時実行をする方法 -> whenever
私はRuby on Railsで開発を進めています。Railsでタスクを定期実行するにはwheneverが便利です。
https://github.com/javan/whenever
[Wheneverは導入が超簡単なcrontab管理ライブラリGemです！[Rails4.1]](http://morizyun.github.io/blog/whenever-gem-rails-ruby-capistrano/)

僕はAPIを叩くrake taskを作成して、定期実行しています。ただ、このwheneverはデフォルトでは1分ごとの実行が最短間隔のため、毎秒定期実行したい時に困っています。どなたか毎秒定期実行するTipsをコメント欄で共有していただけたら幸いです。

## Rubyでinstagramを使う際のライブラリ
RubyでInstagramのAPIを叩くためのライブラリがFacebook社から公開されています。非常にシンプルで使いやすいです。ちなみにPythonもあります。
https://instagram.com/developer/libraries/
Gemの中のinstagram-ruby-gem/lib/instagram/client/以下にEndpointごとにファイルが有り、そのなかのメソッドを呼び出せば使えます。
チェッカー衰弱をチート攻略

http://soysource.web.fc2.com/memory/checker_memory.html
WinChromeならF12押して以下を打つ

```js:solve_checker.min.js

!function(){var r,c,a,n,d,f;for(Shuffle(),n=card_c.length,f=[],r=a=0,d=n;d>=0?d>a:a>d;r=d>=0?++a:--a)"n"!==card_c[r]&&f.push(function(){var a,d,f,u;for(u=[],c=a=d=r+1,f=n;f>=d?f>a:a>f;c=f>=d?++a:--a)if("n"!==card_c[c]){if(card_c[r]===card_c[c]){Card(r),Card(c);break}u.push(void 0)}return u}());return f}();

```

```js:solve_checker.js

(function() {
  var c1, c2, j, len, ref, results;
  Shuffle();
  len = card_c.length;
  results = [];
  for (c1 = j = 0, ref = len; 0 <= ref ? j < ref : j > ref; c1 = 0 <= ref ? ++j : --j) {
    if (card_c[c1] === "n") {
      continue;
    }
    results.push((function() {
      var k, ref1, ref2, results1;
      results1 = [];
      for (c2 = k = ref1 = c1 + 1, ref2 = len; ref1 <= ref2 ? k < ref2 : k > ref2; c2 = ref1 <= ref2 ? ++k : --k) {
        if (card_c[c2] === "n") {
          continue;
        }
        if (card_c[c1] === card_c[c2]) {
          Card(c1);
          Card(c2);
          break;
        } else {
          results1.push(void 0);
        }
      }
      return results1;
    })());
  }
  return results;
})();

```

```coffeescript:solve_checker.coffee

(->
  Shuffle()
  len = card_c.length
  for c1 in [0...len]
    continue if card_c[c1] is "n"
    for c2 in [c1+1...len]
      continue if card_c[c2] is "n"
      if card_c[c1] is card_c[c2]
        Card c1
        Card c2
        break
)()

```
"ソーシャルメディアの経済物理学"を紹介してみる。

ソーシャルメディアの経済物理学(http://www.nippyo.co.jp/book/5991.html)

著者：高安美佐子 (東工大) 編
著者：内山幸樹、浅野弘輔、榊剛史、セーヨー・サンティ、田中勇樹(ホットリンク)
山田健太(東大)、佐野幸恵(筑波大)、渡辺広太(日本銀行)、森岡慎司(電通)


#１．趣旨
・人間の行動履歴の分析を知識に変換することで、マーケティングに活用したい。
・blogやtwitterをKW別といった局所的なものだけでなく全体の傾向を見て把握したい。
と考えた時、
1)ポジネガ分析(良い評判と悪い評判がどれほどあるのか？)
　(教師あり学習)
2)ネットワーク分析(投稿や投稿者のつながりを見たい)
　(確率伝搬法etc)
といった結果を出すことが、一般的には最終目標となると思います。

しかし＋αとして、
"流行など人間の集団行動は、経済物理学を用いることで解析可能である"
というのが、この本の趣旨となります。


#２．経済物理学とは？
経済現象を物理学(統計力学,フラクタル)的な理論・手法による解明を目指す学問。

人間の集団行動について、
1) 確率的な現象
人を分子に見立て、分子のミクロとマクロを結びつける統計力学
2) 動的な現象
フラクタル理論
の二つを用いた説明をするという思想の元、理論が構築されています。

#３．リーマンショックと経済物理学
従来の金融アナリストが使っていた"ランダムウォーク"モデルでは
バブル,不況という重要な現象を説明することができません。

##ランダムウォークモデル
一般的に用いられるモデル。
株価があるタイミングで上がった時に、
次のタイミングでは半々の確率で上下に変動します。

##一方現実では

###1)株価の増減
例えばあるタイミングで株価が減少に転じたとき、投資家は
自分の損が広がらないように株価を安値で売ることが想定されます。
結果として、株価はより下がりやすい傾向にあります。

###2)バブル、不況
あるタイミングで、大幅に株価が減少に転じたときは、
パンデミック的に株価が安値で叩き売られることが想定され、
結果として不況が起こります。(逆に高く買い叩かれる場合はバブルが起こる。)


##経済物理学でのモデル

人間の集団行動について、
１．人を分子に見立てモデル化し、
２．分子が引き合う力を、人間が株価を同方向で売り買いする力として
３．株価の上下変動を解析する
という思想の元で、理論が構築されています。

経済物理学のモデルを用いて分子同士が引き合う力を用いることで、
バブルやデフレといった現象や解析が可能となります。

この手法が使われていれば、リーマンショックも事前に察知でき、
防ぐ手立ても事前に打つこともできるはず、ということ。
(統計力学、フラクタルといった物理学への深い理解が前提条件として
必要なため、使いこなすのは難しそうではありますが…)


#４．マーケティングにおける経済物理学

"上で述べた経済物理学のモデルは、マーケティングの世界においても同様に有用である"
という点が、この本での主張の画期的な点だと思います。

分子が引き合う力を用いた経済物理学の数式により、
クチコミや流行がどのような挙動を取るのか、あるいは起こるのか
を記述することで、予測もできたりします。

例えば、ある一定数の人が集まったときに、
1)人が大量(指数爆発的)に集まってきている状況
2)同じ流行でも、起こり方の違いがあり、その解析をする
3)流行の終焉を予測する
といったことが可能になりました。

#５．最後に
本の内容は、この基本思想をベースに理論展開がされています。
ランジュバン方程式のあたりで心が折れそうになりますが、
ブームという人間の集団行動について、画期的な研究成果が書かれており
広告・マーケティング会社にお勤めの方には特におすすめです。

また、クローラー、スパムフィルタ、形態素解析についても書かれており、
そちらも勉強になりました。
インラインSVGをレスポンシブ対応にする方法

1. svgタグのwidth,height属性を削る
2. viewBox属性に`"0 0 [width] [height]"`をセットする。

## レスポンシブ対応前のコード

```html
<svg width="640" height="400">
 <g>
  <title>background</title>
  <rect fill="#fff" id="canvas_background" height="402" width="642" y="-1" x="-1"/>
  <g display="none" overflow="visible" y="0" x="0" height="100%" width="100%" id="canvasGrid">
   <rect fill="url(#gridpattern)" stroke-width="0" y="0" x="0" height="100%" width="100%"/>
  </g>
 </g>
 <g>
  <title>Layer 1</title>
  <rect id="svg_1" height="208" width="469" y="101.5" x="93.5" stroke-width="1.5" stroke="#000" fill="#fff"/>
 </g>
</svg>
```
## レスポンシブ対応後のコード

```html
<svg viewBox="0 0 640 400">
 <g>
  <title>background</title>
  <rect fill="#fff" id="canvas_background" height="402" width="642" y="-1" x="-1"/>
  <g display="none" overflow="visible" y="0" x="0" height="100%" width="100%" id="canvasGrid">
   <rect fill="url(#gridpattern)" stroke-width="0" y="0" x="0" height="100%" width="100%"/>
  </g>
 </g>
 <g>
  <title>Layer 1</title>
  <rect id="svg_1" height="208" width="469" y="101.5" x="93.5" stroke-width="1.5" stroke="#000" fill="#fff"/>
 </g>
</svg>
```

## サンプル

https://jsfiddle.net/sfpgmr/aspLd4Lv/embedded/result/

※QiitaはSVGタグ使えないのね。残念。。
Linux(CentOS7)にtmuxを導入する。

# 概要
CentOS7にtmuxを導入する方法と簡単な使い方を綴ります。

# 導入するもの

- tmux

# tmuxって？

LinuxのコンソールをVimみたいに画面割りしたりできるツールだよ！(雑)

# 手順
## 1. インストール

インストールコマンドはこちら！
`# yum -y install tmux`

とっても簡単ね！

`Complete!`

# ざっくりと使い方説明
## 起動
`$ tmux`

## 中断
`Ctrl` `b` + `d`

## 再開
`$ tmux a`

## 画面割り
### 縦
`Ctrl` `b` + `%`
### 横
`Ctrl` `b` + `"`

### 分割した画面間の移動
`Ctrl` `b` + `o`

### 分割した画面のローテーション
`Ctrl` `b` + `Ctrl` `o`

## 新しいページ(?)

### 作成
`Ctrl` `b` + `c`

### ページ間移動
`Ctrl` `b` + `ページ番号`

## 終了

いったん中断してtmuxから抜けて
`Ctrl` `b` + `d`

終了コマンド
`$ tmux kill-session`


# ちょっと難しい使い方

tmux内でもページや窓をいっぱい作れますが、tmux自体を複数起動することもできるよ。

## 新しいセッションの起動
他のセッションがバックグラウンドにある(デタッチされた)状態で
`$ tmux`
するだけ。

## 起動中のセッション確認

`$ tmux ls`

起動中のセッションがリストアップされるよ！

```
$ tmux ls
0: 1 windows (created Fri Oct 30 10:00:00 2015) [210x82]
1: 3 windows (created Fri Oct 30 11:11:11 2015) [210x82]
```

先頭にある数字はセッション番号だよ。

## 任意のセッションを再開

通常の再開通り `$ tmux a` を使用すると直近のセッションを再開するよ。

`$ tmux ls` で表示されたセッション番号を指定することで任意のセッションを再開することができるよ。

`$ tmux a -t 2`

※[2] には任意のセッション番号を指定してね。

## 任意のセッションを終了
`$ tmux kill-session` にセッション番号を指定することで任意のセッションを終了させることが可能だよ。

`$ tmux kill-session -t 2`

※[2] には任意のセッション番号を指定してね。
Perl5,Perl6で配列の末尾からひとつ前の要素を取り出す

Perlで配列の末尾からひとつ前の要素を取り出すには。

### Perl5

```pl
#!/usr/bin/env perl

use v5.20;

my @a = ( 'a' .. 'z' );

# 配列の末尾からひとつ前の要素を取り出す
say $a[-2]; #=> 'y'
```

### Perl6

```pl
use v6;

my @a = 'a' .. 'z';

# 配列の末尾からひとつ前の要素を取り出す
say @a[*-2]; #=> 'y'
```
おわりです。

# 参考や注釈

* [Perl 6 Documentation - Operators](http://doc.perl6.org/language/operators#Method_Postfix_Precedence)
* [Perl6導入とHello, world! - Qiita](http://qiita.com/B73W56H84/items/2153e6211ed617b4605d)
* [Pythonでリストの最後(一番後ろ)の値を取得する方法 - Qiita](http://qiita.com/komeiy/items/971ead35d33c25923222)
* [PHPで配列の末尾からひとつ前の要素を取り出す - Qiita](http://qiita.com/B73W56H84/items/a25cae82058696fa20f0)
heroku-cliをFreeBSDで使うには

# heroku-cliをFreeBSDで使うには
最新の`heroku`コマンドはgoとnodeで書かれています。goはFreeBSDのネイティブバイナリが用意されている感じなのですが、nodeは用意されておらず、以下のような面倒くさいメッセージが表示されます。

```console
% heroku
Setting up node-v4.2.1... ▸    node does not offer a prebuilt binary for your OS.
 ▸    You'll need to compile the tarball from nodejs.org and place it in ~/.heroku/node-v4.2.1
```

せっかくFreeBSDには`pkg`があるのに面倒ですね。ですので、pkgでインストールしたバイナリを見るようにしましょう。

```console
% sudo pkg install node npm
...
% mkdir ~/.heroku/node-v4.2.1
% cd ~/.heroku/node-v4.2.1
% ln -s /usr/local/bin
% ln -s /usr/local/lib
```
これでheroku-cliを騙すことが出来、無事herokuコマンドを再び使えるようになります。
マイナンバーのチェックデジットを計算する（SQLで）


## マイナンバーの検査用数字（チェックデジット）
- 11桁の数字 + 1桁の検査用数字　から成り立つ12桁の番号
- その定義は[総務省令第八十五号](http://www.soumu.go.jp/main_content/000327387.pdf)の第五条にある
- 各プログラミング言語で計算するのが流行っているみたい

## SQLでやってみた

[demo](http://sqlfiddle.com/#!15/9eecb7db59d16c80417c72d1e1f4fbf1/4179)

```sql
with
  -- 検査対象のマイナンバーテーブル
  t(mn) as (values
    ('123456789010'),
    ('123456789011'),
    ('123456789012'),
    ('123456789013'),
    ('123456789014'),
    ('123456789015'),
    ('123456789016'),
    ('123456789017'),
    ('123456789018'),
    ('123456789019')
  ),
  -- 11桁目から左方向への桁数（PostgreSQL以外の場合は別の方法で連番を作る必要あり）
  d (n) as (
    select generate_series(1, 11)
  ),
  -- Pn, Qn を計算する
  r (mn, pn, qn) as (
    select
      t.mn,
      cast(substr(t.mn, 12 - d.n, 1) as integer),
      case when d.n <= 6 then d.n + 1 when 7 <= d.n then d.n - 5 else null end
    from
      t,
      d
  ),
  -- Pn, Qn からチェックデジットを導出する
  c (mn, d) as (
    select
      r.mn,
      11 - (case when mod(sum(r.pn * r.qn), 11) <=1 then 0 else mod(sum(r.pn * r.qn), 11) end)
    from
      r
    group by
      r.mn
  )
select
  c.mn,
  -- 12桁目が正しいチェックデジットかどうか
  case when cast(substr(c.mn, 12) as integer) = c.d then 'true' else 'false' end as valid
from
  c
order by
  c.mn
```

### 結果

![Kobito.rldPhE.png](https://qiita-image-store.s3.amazonaws.com/0/15117/673def88-06c9-9e90-6d26-a7be315a1b5c.png "Kobito.rldPhE.png")

## 他言語での実装

- [Ruby - マイナンバーのチェックデジットを計算する - Qiita](http://qiita.com/qube81/items/fa6ef94d3c8615b0ce64)
- [C++11 - C++でマイナンバーのチェックデジットを計算する - Qiita](http://qiita.com/yumetodo/items/600ca0df422010cbc4c1)
- [Python マイナンバー検証用モジュールを公開 - Qiita](http://qiita.com/haminiku/items/bcf4bac82bd1ca62c746)
- [マイナンバーのチェックデジットを計算する PHP版 - Qiita](http://qiita.com/rana_kualu/items/f36275032bbc6a3f18b4)
- [Perl5,Perl6でマイナンバーのチェックデジットを計算する - Qiita](http://qiita.com/B73W56H84/items/fa7fcadf7779ac7dbe8b)
Rails で Scala の Option#getOrElse みたいにデフォルト値

ActiveSupport の core_ext に依存しているので Rails 前提。

例えばメールを送るとき、ユーザのメールアドレスが設定されていればそれを使い、それがなければデフォルトのメールアドレス `anonymous@example.com` みたいなとき。

素直に書くとこうなのだけど

```rb
email = if user.email.present?
          user.email
        else
          'anonymous@example.com'
        end

send_from email
```

以下のように書くこともできる。

```rb
send_from user.email.presence || 'anonymous@example.com'
```

`user` も `nil` かもしれないときは `try!` とかを使う。

```rb
send_from user.try!(:email).presence || 'anonymous@example.com'
```

`Object#presence` は Rails 4.2.4 現在でこんな感じ。

https://github.com/rails/rails/blob/b3eac823006eb6a346f88793aabef28a6d4f928c/activesupport/lib/active_support/core_ext/object/blank.rb

```rb
  def presence
    self if present?
  end
```

`present?` を読んで `true` なら `self` を返し、そうでなければ `nil` を返す。
Scala の `Option` とは違ってラップするクラスはない。
整数をできるだけ均等になるように n分割

# 問題設定
正の整数 `x` と `n` があるとします。`x`を`n`等分してください。
`x`は`n`で割り切れるとは限りませんが、できるだけ均等にn分割したいです。
例えば、`x=13`, `n=4` に対して (つまり13の4等分) は `[3, 3, 3, 4]` で、
割り切れる場合には、例えば `x=15`, `n=3` に対してはもちろん `[5, 5, 5]` となります。
どうやったらこのn等分が求まるでしょうか？

# 結論
`//` を整数除算 (小数点以下を切り捨てる除算) とします。
求めたい等分リスト`l`は、`[(x+0)//n, (x+1)//n, ..., (x+(n-1))//n]` です。
Python3で実装するなら、

```py3
x = 13
n = 4
l = [(x + i) // n for i in range(n)]
```
です。

# 議論とか
まずはじめに、この方法は有名な事実らしいです。
私が知らないだけで常識なのかもしれません。

整数のn分割はわりとよくやる処理なので、たまに書くことがありますが、いつも次のように実装していました：

```py
x = 13
n = 4
# 同じ量を全員に配るとすると、もらえる量は
div = 13 // 4  # 13 // 4 = 3
# 同じ量を全員に配った後のあまりを求める
rem = 13 % 4  # 13 % 4 = 1
# n人中rem人は余りをひとつずつもらえる
l = [div] * (n - rem) + [div+1] * rem
```

計算効率的にはむしろ後者のほうが良いですが、綺麗じゃないといつも思っていたので、前者の綺麗な実装を見てちょっと感動したためわざわざ記事にしました。


# ちなみに：前者の綺麗な実装がなぜ動くか？
`x` が `n` で割り切れる場合、`x+0`から`x+(n-1)`の`n`による切り捨て除算はすべて`x//n`と同じ値となり、等分割ができます。

![0001.png](https://qiita-image-store.s3.amazonaws.com/0/62450/8f41df7c-4211-155f-f99f-0ecda98511b7.png)
`x` が `n` で割り切れない場合は、その余りを `rem` とすると、`x + (n-rem)` は `n` で割り切れます。すると、`x+0`から`x+(n-1)`のリストのうち、`x+(n-rem)`から先は`n`による切り捨て除算がすべて`x//n + 1`となります。 `x+(n-rem),...,x+(n-1)`のリストの長さは`rem`ですから、結局、他の人よりひとつずつ多くもらえるのは後ろから `rem` 個となります。
つまり、全員に均等に分けたあとにその余りを後ろからひとつずつ配っているのと同じことです。
Taskの裏側のスレッドの仕組みについてDeepに理解する

最近はスレッド処理関係はTaskクラスを使うので意識しませんが、内部処理の理解は大事です。ということでよりOSレイヤーに近い、マルチスレッドのためのいろいろな手法の紹介をしているサイトを紹介します。
http://www.albahari.com/threading/

上記サイトのオーナーに許可をもらって全部翻訳しました。
■スレッドの基礎
http://article.higlabo.com/ja/thread_fundamentals.html
・スレッドの概念
・JoinとSleep
・スレッドがどのように動作するか
・スレッドvsプロセス
・スレッドの使いどころと誤った使用例
・スレッドの作成と開始
・スレッドにデータを渡す
・名前付きスレッド
・フォアグラウンドスレッドとバックグラウンドスレッド
・スレッドの優先度
・例外処理
・Thread Pooling
・Task Parallel Libaryを通じてスレッドプールを利用する
・Task Parallel Libaryを使わずにスレッドプールを利用する
・スレッドプールの最適化

■同期処理の基礎
http://article.higlabo.com/ja/thread_sync.html
・同期処理
・ブロッキング
・Blocking vs Spinning
・ThreadState

■ロック
http://article.higlabo.com/ja/thread_locking.html
・概要
・Monitorクラス
・同期オブジェクトの選択
・ロックすべき状況とは？
・ロックとアトミック性
・入れ子になったロッキング
・デッドロック
・パフォーマンス
・Mutex
・セマフォ

内容盛りだくさんですが全部理解すればスレッドマスターを名乗っても大丈夫でしょう（笑）
Taskクラスを使用する際にこれらの理解が助けになると思います。
Azure SQLを使用してRedmine

#目的
- 今後、RailsのデータベースにAzureSQLを使うことで容易に冗長化を図りたい。
- 仮想マシンでいくつもデータベースを作成すると正しく冗長化していない場合、メンテナンスやセキュリティーリスクが高くなる。
- RailsだけでなくPHPからも試してみたい好奇心

#必要なパッケージのインストール
`sudo apt-get install freetds-bin freetds-dev`

##Redmine設定
基本的にデータベースの設定のみ掲載します。
それ以外は自分でカスタマイズ。自分の記事を参照にしています。
[Nginx & Passenger & Redmine(もしくはRails系導入)](http://qiita.com/ozy-san/items/5c5daf68af501ef8c62a)
データベース設定のみ以下のように変更をします。

```rb:config/database.yml
#サーバにMySQLが入っていない場合developmentとtestをコメントアウトするか、
#developmentとtest使用する場合もデータベースを変更して以下の設定を使用する。
#TODO: usernameは、hoge@SQLServerNameを指定
production:
  adapter: sqlserver
  mode: DBLIB
  port: PORT #ポート明記
  timeout: 10 #timeout設定
  azure: true #azureであることを明記
  database: redmine
  host: SQLHOST
  username: hoge@SQLServerName
  password: "Password"
```

developmentとtestをコメントアウトしたので、withoutをする。

`bundle install --without development test postgresql sqlite mysql2`

#後書
この設定に届くまで時間がかかりました。
以下を参照に悩みました。あとは、権限系の設定をすると思いますが、
Windowsマシンがないとできない模様。
>[Cannot connect to Azure using tiny_tds #90](https://github.com/rails-sqlserver/tiny_tds/issues/90)
>[Ruby on Rails4.2でMicrosoft Azure SQL Databaseに移行](http://s2terminal.hatenablog.com/entry/2015/06/28/210058)
MySQL の wait_timeout デフォルト値のワナ（接続モードによる値の違い）

# はじめに結論
wait_timeout のデフォルト値はクライアントの接続モードによって変わる。

* 接続が**対話型**の場合は **interactive_timeout** のグローバル変数値
* 接続が**非対話型**の場合は **wait_timeout** のグローバル変数値

（対話型である）mysql コマンドのプロンプトで確認した設定値が、（非対話型の）プログラムでも同じであるとは限らないので注意！
 
# wait_timeout とは

接続のアイドルタイムアウト秒数。
この秒数クライアントからの反応がない場合、MySQL サーバはクライアントとの接続を切る。
接続が切られた状態でクエリを送った場合、"Lost connection to server during query" や "MySQL server has gone away" のエラーが発生する。
 
#【ワナ】wait_timeout のデフォルト値（interactive_timeout との関係）

リファレンスマニュアルをよく読むと書いてある。（引用元は 5.6 の記述だが、5.1, 5.5, 5.7 でも同様）

* https://dev.mysql.com/doc/refman/5.6/ja/server-system-variables.html#sysvar_wait_timeout

> スレッド開始時に、セッションの wait_timeout 値は、wait_timeout グローバル値または interactive_timeout グローバル値で初期化されますが、いずれになるかはクライアントのタイプ (mysql_real_connect() に対する CLIENT_INTERACTIVE 接続オプションによって定義される) によって決まります。interactive_timeoutも参照してください。

* https://dev.mysql.com/doc/refman/5.6/ja/server-system-variables.html#sysvar_interactive_timeout

> サーバーが対話型の接続で、対話型の接続を閉じる前にアクティビティーを待機する秒数。対話型クライアントは、mysql_real_connect() で CLIENT_INTERACTIVE オプションを使用するクライアントと定義されます。wait_timeoutも参照してください。
 
要するに、セッションローカルの wait_timeout のデフォルト値は以下の通りになる。

* 接続が**対話型**（CLIENT_INTERACTIVE オプション有り）の場合は **interactive_timeout** のグローバル変数値
* 接続が**非対話型**（CLIENT_INTERACTIVE オプション無し）の場合は **wait_timeout** のグローバル変数値
 
#実際に試してみる

**事前準備：**
my.cnf に wait_timeout=60 の設定を記述して mysql サーバを再起動しておく。
 
**対話型モードでの実行：**
wait_timeout は 28800 になる。

```sql
% mysql -u root
 
mysql> SHOW VARIABLES LIKE '%timeout%';
+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| connect_timeout             | 10       |
| delayed_insert_timeout      | 300      |
| innodb_flush_log_at_timeout | 1        |
| innodb_lock_wait_timeout    | 50       |
| innodb_rollback_on_timeout  | OFF      |
| interactive_timeout         | 28800    |
| lock_wait_timeout           | 31536000 |
| net_read_timeout            | 30       |
| net_write_timeout           | 60       |
| slave_net_timeout           | 3600     |
| wait_timeout                | 28800    |
+-----------------------------+----------+
11 rows in set (0.00 sec)
```
 
**非対話型モードでの実行：**
wait_timeout は 60 になる。

```sql:
% mysql -u root -e "show variables like '%timeout%'"
+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| connect_timeout             | 10       |
| delayed_insert_timeout      | 300      |
| innodb_flush_log_at_timeout | 1        |
| innodb_lock_wait_timeout    | 50       |
| innodb_rollback_on_timeout  | OFF      |
| interactive_timeout         | 28800    |
| lock_wait_timeout           | 31536000 |
| net_read_timeout            | 30       |
| net_write_timeout           | 60       |
| slave_net_timeout           | 3600     |
| wait_timeout                | 60       |
+-----------------------------+----------+
```
CentOSにPostgreSQLをインストールしました

postgresqlをインストールしました。環境はCentOSです。

# PostgreSQLをインストール

```bash:PostgreSQLインストール
yum install -y postgresql
```
PostgreSQLがインストールされました。

# 使い方
MySQLと比べて使います。
http://qiita.com/pugiemonn/items/75870ece3c8476bcb1c8
Rails consoleでModelが読み込まれない


`rails g models hoge`でmodelを作成した場合、作成されるクラスはこんな感じ。

```hoge.rb
class Hoge <  ActiveRecord::Base
end
```

これは当然rails consoleに読み込まれる。

しかし、ActiveRecordを使わない場合、手動でファイルを作成するので、ファイル名とクラス名が一致しなくなることがある。

```hage.rb
class Hoge
  include ActiveModel::Model
end
```

こんな感じ。
こうなるとrailsの規約から外れてしまうのでrails consoleに読み込まれなくなる。
上記は極端な例だが、「tion」と「sion」、「ce」と「se」等で地味にはまることがあるので注意。
PHPでエラトステネスの篩

```php
// 私の環境では、これ以上大きい値を指定すると落ちます。
$number = 500000;

if ($number < 2) {
    exit(1);
}

$primes = array();

$sieve = array();
for ($i = 2; $i <= $number; $i++) {
    $sieve[$i] = $i;
}

while (true) {

    $prime = reset($sieve);
    if ($prime * $prime > $number) {
        break;
    }

    unset($sieve[$prime]);
    $primes[] = $prime;

    for ($i = 1; $i * $prime <= end($sieve); $i++) {
        unset($sieve[$i * $prime]);
    }
}

$primes = array_merge($primes, $sieve);

print(implode(',', $primes) . "\n");
```
ｔ分布は正規分布とカイ二乗分布で作れる #rstatsj

統計学入門(p.202)より

> 二つの確率変数 $Y$ と $Z$ が次の条件を満たすものとする。
> (a) $Z$ は標準正規分布 $N(0,1)$ に従う。
> (b) $Y$ は自由度 $k$ の $\chi^2$ 分布 $\chi^2(k)$ に従う。
> (c) $Z$ と $Y$ は独立である。
> いま、確率変数 $t$ を
> $$t = \frac{Z}{\sqrt{Y/k}}$$
> と定義すると、$t$ が従う確率分布を**自由度 $k$ の $t$ 分布**(あるいは、**スチューデントの $t$ 分布**)という。

したがって、次のようにすれば $t$ 分布からの乱数を発生させることができる。

```r:R
N <- 10000
k <- 2

random_from_norm <- rnorm(N, mean = 0, sd = 1)
random_from_chisq <- rchisq(N, df = k)
my_random <- random_from_norm / sqrt(random_from_chisq/k)
```

これが $t$ 分布と一致することを、qq プロットで確認してみよう。

```r:R
library(ggplot2)

qplot(sample=my_random, dist=qt, dparams = list(df = k)) +
  geom_abline(intercept=0, slope=1, color="red") +
  xlim(-10, 10) + ylim(-10, 10)
```

![t1.png](https://qiita-image-store.s3.amazonaws.com/0/2570/ea0b2ea1-9336-1048-c57e-12a9e4d56efc.png)

## ちなみに

カイ二乗分布は正規分布から作れる。

```r:R
my_chisq <- Reduce("+", replicate(k, list(rnorm(N)^2)))

qplot(sample=my_chisq, dist=qchisq, dparams = list(df = k)) +
  geom_abline(intercept=0, slope=1, color="red") +
  xlim(0, 15) + ylim(0, 15)
```

![t2.png](https://qiita-image-store.s3.amazonaws.com/0/2570/de060c18-9806-0368-8158-b1d0a671228a.png)

あとはわかるな？

Enjoy!
オブジェクトのマイナンバー〜Rubyのobject_idを調べてみた

10月から日本でもマイナンバー制度が始動しましたが、Rubyの世界でもすべてのオブジェクトに番号が振ってあります。

# マイナンバーと比較してみる
## 桁数
日本のマイナンバーは12桁ですが、Rubyの`object_id`は、`Integer`であること以上に特に規定がありません。とはいえ、<del>`Fixnum`がマシンのポインタのサイズを基準に設定されている都合上、その幅を越える数のオブジェクトはマシンとして処理できなさそうなので、`Bignum`になることはほぼないとは思います</del>（そして、演算対象でもないので、実際のクラスを気にする必要も事実上ありません）。

※取り消し部はコメントで追記

## 設定と変更
マイナンバーは制度開始時に一斉に設定されて、漏洩などで必要になった場合以外は変更しない、という運用ですが、`object_id`はオブジェクトの生成とともに振られ、オブジェクトがガベージコレクションの餌食になるまで（もしくは、Rubyごと終了するまで）変化しません。

## 利用目的
マイナンバーは利用目的が厳密に定められて、それ以外の理由で収集することが禁じられていますが、`object_id`はパブリックメソッドであって、プログラマーが自由に値を利用できます。

## 通称と正式名称
マイナンバーは制度の愛称で、法的な名称は「個人番号」ですが、`object_id`も使いやすくした名前で、何かで上書きした場合のために`__id__`というメソッドが別途で用意されています。

# `object_id`の各種性質
マイナンバーはともかく、`object_id`についてさらに調べてみました。
## 変わるもの、変わらないもの
`String`はミュータブルなこともあって、同じ文字列リテラルで生成しても違う`object_id`となります。一方、`true`、`false`、`nil`やシンボルといったものは、後から別に書いても同じ`object_id`となります。

## 奇数と偶数
もちろん`object_id`の具体的な値は知る必要がありませんし、あくまで実装依存に過ぎない話ではありますが、手元にあったCRuby 2.2.2、JRuby 1.7.20、Rubinius 2.5.5の全てで、奇数の`object_id`は`Fixnum`に振られていました。しかも、「2倍して1足した値」という規則正しいものでした（`0.object_id == 1`、`1.object_id == 3`）。

これは、整数演算に当たって実際にオブジェクトを生成する手間を省略するために、`object_id`自体を簡単に変換して値として使えるようにしてあるという、実装の最適化がなされていることが読み取れます。

なお、CRubyでは4で割って2余る`object_id`に`Float`を当てはめていましたが（メモリアラインメントの加減で、実際に参照したいオブジェクトには4の倍数を使うのが便利だかららしい）、JRubyやRubiniusでは偶数に各種のオブジェクトを入れてありました。

# `object_id`の利用法
## 「一意な値」として
オブジェクトが一度生成されれば`object_id`は不変なので、識別子として使うことができます。自分自身、プログラム中でキャッシュの識別用に`object_id`を使うようなコードを組んでいます。

## 間接的な参照として
JRubyでは制約があるようですが、`ObjectSpace._id2ref`というメソッドがあって、`object_id`からそのIDを持つオブジェクトを取得することができます。ふつうにオブジェクトを参照していればガベージコレクション自体起こりませんが、オブジェクト自体を直接参照せずに`object_id`経由で参照することで、参照先をガベージコレクタに回収させることができます。これを使うことで、Rubyの枠内でウィークリファレンスを実装できるようになります（なお、JRubyではJava自体のウィークリファレンスを利用する形で実装されていました）。
ESM オフラインリアルタイムどう書くの問題を解いた（３日ぐらいかけて）

[鍋谷さんの投稿](http://qiita.com/Nabetani/items/e15581b45b4a569df2d6)を拝見して[問題](https://gist.github.com/mtsmfm/4b8ffb53ffac055f5843)と[開催レポート](http://mtsmfm.github.io/2015/10/22/esm-doukaku.html)が公開されていることに今日になって気がつきました。今回は開催者側、出題者側にいたはずなのに…。

それはそれとして。

参加されたみなさんの解答を見て、基本的なアイディアはそれほど変わらなくてもその実現方法は結構違うなぁ、というのが感想でした。
それらの実装を頭のすみでぼんやりと反芻していて３日ほどが経ち、ほぼビット演算だけで解く方法を思いつきました。[かつての投稿](http://qiita.com/emattsan/items/5dfd820a4047376c3bf3)同様にこの問題特化のコードです。


解説は…そのうちブログで書く予定。…たぶん。

## Rubyで解いた

```rb
def solve(input)
  seats = 0
  input.split('').map(&:to_i).each do |visitors|
    begin
      seats = (seats >> 1) & 0x77777777
    end until (index = ('%016x' % (seats * 0x100000001)).index('0' * visitors))
    seats |= (((((1 << (visitors * 4)) - 1) * 0x100000001) << ((8 - visitors) * 4) >> (index * 4)) & 0x44444444)
  end
  '%08x' % ((seats | (seats >> 1) | (seats >> 2)) & 0x11111111)
end

def test(input, expected)
  actual = solve(input)
  if expected == actual
    puts "PASSED"
  else
    puts "FAILED input #{input}, expected #{expected}, actual #{actual}"
  end
end

test("3316", "11111110")
# 以下テストケース略
```

## 同じものをC++で書いた

```cpp
#include <iostream>
#include <sstream>
#include <iomanip>
#include <string>

static std::string to_hex(unsigned long int n, int digits)
{
    std::ostringstream oss;
    oss.fill('0');
    oss << std::hex << std::setw(digits) << n;
    return oss.str();
}

static std::string solve(const std::string& input)
{
    unsigned long int seats = 0;
    for(std::string::const_iterator i = input.begin(); i != input.end(); ++i)
    {
        const int              visitors   = *i - '0';
        const std::string      visitors_s = std::string(visitors, '0');
        std::string::size_type index      = std::string::npos;
        do
        {
            seats = (seats >> 1) & 0x77777777lu;
        } while((index = to_hex(seats * 0x100000001lu, 16).find(visitors_s)) == std::string::npos);
        seats |= (((((1lu << (visitors * 4)) - 1) * 0x100000001lu) << ((8 - visitors) * 4) >> (index * 4)) & 0x44444444lu);
    }
    return to_hex((seats | (seats >> 1) | (seats >> 2)) & 0x11111111u, 8);
}

static void test(const std::string& input, const std::string& expected)
{
    const std::string actual = solve(input);
    if(expected == actual)
    {
        std::cout << "PASSED" << std::endl;
    }
    else
    {
        std::cout << "FAILED input " << input << ", expected " << expected << ", actual " << actual << std::endl;
    }
}

int main(int, char* [])
{
    test("3316", "11111110");
    // 以下テストケース略

    return 0;
}
```
Pythonの評価式のand演算子は左辺式から評価されるようだ


これに依存したコードを書いて良いものでしょうか・・

```Python
>>> 1 is None
False

>>> 1 is None and b
False

>>> b and 1 is None
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined
```
AppleScript で Python  プログラムからの dictionary データを受け取る

こんにちは。
AppleScript で、Python プログラムからの dictionary データを受け取ることを考えてみました。

```AppleScript:AppleScript
get do shell script "LANG=ja_JP.UTF-8 /usr/local/bin/python3 ~/dictdata.py"
set dictdata to run script result
get temperature of dictdata -- ==> "暑さ"
```

```dictdata.py
# -*- coding: utf-8 -*-
dictdata = {'temperature': '暑さ', 'humidity': '蒸し暑さ'}
str, first = "{", True
for k, v in dictdata.items():
    if first:
        first = False
    else:
        str += ", "
    str += "%s: \"%s\"" % (k, v)
str += "}"
print(str)
```
Kibanaのインストールと相性のいいelasticsearchバージョン

Elasticsearchのビジュアライズツールkibanaは便利ですが、バージョンが合わないとうまく起動しなかったり、HEADなどポピュラーなツールが使えなかったりといろいろあります。
詳しくはブログにまとめましたが、簡単に結果だけここにメモします。
http://blog.laspandas.com/index.php/elasticsearch/elasticsearch_kibana_install#more-69

##比較的安定している構成とインストール

こちらを入れるとkibanaが動かない。バージョンあげるといつものプラグイン使えない…
まあ、こうやって環境の組み合わせを試行錯誤すること３時間、やっとこのコンビネーションならとりあえず大丈夫かなという組み合わせが見つかりました。
（2015/10/30時点。オレ調べ）

Elasticsearch 1.7
https://www.elastic.co/downloads/past-releases/elasticsearch-1-7-0

kibana 4.0.1
https://www.elastic.co/downloads/past-releases/kibana-4-0-1

この組み合わせだとプラグインも使えるし、まあ安定しているような気がします。

ではkibanaを早速インストールしていきましょう。

このkibanaは別プログラムとして起動する形になってます。
適当な所にダウンロードして解凍すると、中に「bin」が入っています。
まずESを起動してから、kibanaを実行しましょう

```shell:kibana
#cd bin
#./kibana
```

起動するといつものようにもりもりとログが出てきます。

うまくインストールできていると

http://127.0.0.1:5601/

にアクセスするとkibanaが見えるはず！
TinySegmenterをCrystalで書いてみた。雑だけど。


crystal
------

各種ベンチマークや軽く触ってみた感じでは早いんだけど、他の言語と比べてどれくらいの速さなのかわからなかったのでtinysegmenterをcrystalにポートして見比べることにしてみた。

mhagiwaraさんのTinySegmenter.py を参考にそのまま書き写した状態。最適化したらベンチマークの意味ないので、個人的に読みづらかった所以外は同じデータ構造になるようにしている。（TODO：実行結果が同じかどうかチェックしてない）

chezouさんの他言語のベンチマークと実装
https://github.com/chezou/TinySegmenter.jl


tinysegmenter.cr
https://gist.github.com/ikasamt/51f90cdf43c41226dc6a


実行結果
------

```bash
$ crystal build --release tinysegmenter.cr 
$ ./tinysegmenter
2015-10-30 20:48:57 +0900
2015-10-30 20:49:01 +0900
"00:00:03.9918650 sec"

$ julia -L ../src/TinySegmenter.jl benchmark.jl
  1.114797 seconds (535.51 k allocations: 26.343 MB, 4.02% gc time)

$ node benchmark.js
7.454sec

```

まとめ
------

- julia(1.1秒) > crystal(3.9秒) > nodejs(7.4秒)　という順番になった

- crystal実装、ちゃんと最適化したらjulia越えられるのか気になる

- ハロウィンみなさん元気でよろしい
FileSystemObject | マクロで FASTA を解析


OFFICE 2010

## 何？

ファイルを開いたり、ディレクトリを開いたりするオブジェクト。
らしい。
`Line Input` との違いって、 `open` に対する `IPC::Open3` みたいなもんか？（こっちはファイル限定じゃないけどさ）
大きなファイルの扱かいに長けてるって事で、 `Line Input` の方の作法は覚えず、こっちをメモる。

## 参照設定しない。

```
Dim log_path As String
log_path = "C:\Users\bunzaemon\Desktop\test.log"
```

```
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject") ' file system object
Dim TS
Set TS = FSO.OpenTextFile(log_path, 1)    ' 読み込みオンリーで開く
```

後述のライブラリ読み込み時には、 `ForReading` 記載が効くのに、こちらのコードでは、`1` でしか動いてくれない。なんで？

## 参照設定する。
ツール => 参照設定 => 参照可能なライブラリファイル => Microsoft Scripting Runtime
にチェックを入れる

```
Dim FSO As New FileSystemObject  ' file system object
Dim TS  As TextStream            ' text stream
Set TS = FSO.OpenTextFile(log_path, ForReading) ' 読み込みオンリーで開く
```

こっちは、`VBE` で補完が効くようになって何かと便利らしいけど、別の所でコーディングしてコピペするから、、、

## テストコード

single fasta を開いて長さを計算するコード。
意味もなく `auto_open` 使ってるので、これ入りの `.xlsm` は、起動時に計算して出力される。

```
Option Explicit

Sub auto_open()
    MsgBox (fasta_len("C:¥Users¥bunzaemon¥Desktop¥test.fa"))
End Sub

Function fasta_len(ByVal fasta As String)
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Dim TS
    Set TS = FSO.OpenTextFile(fasta, 1)
    
    Dim seq_len As Long
    
    seq_len = 0
    
    
    Do Until TS.AtEndOfStream
        Dim line As String
        line = TS.ReadLine
        If Left(line, 1) <> ">" Then
            seq_len = seq_len + Len(line)
        End If
    Loop
    
    
    TS.Close
    Set TS = Nothing
    Set FSO = Nothing
    
    fasta_len = seq_len
    
End Function
```


- どうやら、自動で chomp してくれるらしい。
同一 IP で有線 LAN と無線 LAN に。

イントラネット
DHCP 使ってる人には無関係。

Windows 初心者の私にとって驚愕の事実。
同一マシンでもネットワークアダプター毎に個別 IP 振らなきゃ、エラーになるそーだ。
しかも切り替えも付いてないらしい[^1]

[^1]: 一部の PC メーカープリインストールアプリ除く

Mac なら、、、と言う言葉も出かかるが、それはそれ。

1. 普通に GUI で、メインの LAN でのアドレス設定をしとく。
	- DNS やらそこらも
	- 後述の `initial.bat` でもいいけどさ。
2. 二つのバッチファイルを作成する。
3. ケースバイケースで、管理者権限で後述のバッチファイルを実行する。
 

## バッチファイル
ネットワーク接続の名称などは、`cmd.exe` で、`>netsh interface ip show addresses` して確認の事。

当該環境では、"ワイヤレス ネットワーク接続"と、"ローカル エリア接続"の二つ。つーか、日本語？？

### 有線を有効に。

```shell-session:yuusen.bat
netsh interface ip set address "ワイヤレス ネットワーク接続" static 202.18.20.111 255.255.255.0 202.18.20.1
netsh interface ip set address "ローカル エリア接続" static 192.168.XX.XX 255.255.255.0 192.168.XX.XX
```
- static 後の数値は、左から IP、ネットマスク、ゲートウェイ
- "ワイヤレス ネットワーク接続" にまず出鱈目に IP アドレスをセット。
- "ローカル エリア接続" に目的の IP アドレスをセット。
- もちろん、cp932 で保存。

順序が逆だと、一瞬二つのネットワークアダプターに同一 IP が振られる状況になってコマンドが失敗する。

### 無線を有効に。

```shell-session:musen.bat
netsh interface ip set address "ローカル エリア接続" static 202.18.20.111 255.255.255.0 202.18.20.1
netsh interface ip set address "ワイヤレス ネットワーク接続" static 192.168.XX.XX 255.255.255.0 192.168.XX.XX
```

単に、`yuusen.bat` の「ネットワーク接続の名称」を入れ替えにしただけ。

### ついでに新規購入の PC の IP 設定にも。

ネットに繋ぐ前に、管理者で実行。

```shell-session:initial.bat
netsh interface ip set address "ワイヤレス ネットワーク接続" static 202.18.20.111 255.255.255.0 202.18.20.1
PAUSE

netsh interface ip set address "ローカル エリア接続" static 192.168.XX.XX  255.255.255.0 192.168.XX.XX 
PAUSE

netsh interface ip set dns "ローカル エリア接続" static 192.168.XX.XX  primary
PAUSE

netsh interface ip add dns "ローカル エリア接続" 192.168.XX.XX 
PAUSE

netsh interface ip set wins "ローカル エリア接続" static 192.168.XX.XX 
PAUSE
```

IP はそれぞれ環境に合わせて変更を。
既に、DNS が設定されていた場合などでは、エラーが出る事もある。
不安なら、後から GUI の方で確認を取ればいい。
スライスについて


- [perldata の slice の項](http://perldoc.jp/docs/perl/5.20.1/perldata.pod#Slices)

古のメモと、最近の備忘と。


## リストのスライス

```
$ perl -le 'print +(1,2,3,4)[2,3]'
34
```


## 無名配列のスライス

```
$ perl -le 'print @{ [1,2,3,4] }[2,3]'
34
```


## 無名ハッシュのスライス
```
$ perl -le 'print @{ {1,2,3,4} }{1,3}'
24
```


## perl 5.20 以降

```
$ echo $PERL5OPT
-Mstrict -Mwarnings -MData::Dumper
```

単に、シジルが旧来のアレイスライス[^1] `@` から `%` に変更になるだけ。

[^1]: と呼ぶべきもの

### 無名配列のハッシュスライス

```
$ perl -le 'print Dumper { %{[1,2,3,4]}[2,3] }'
$VAR1 = {
          '3' => 4,
          '2' => 3
        };
```


### 無名ハッシュのハッシュスライス


```
$ perl -le 'print Dumper { %{{1,2,3,4}}{1,3} }'
$VAR1 = {
          '3' => 4,
          '1' => 3
        };

```


## perl 5.22 以降

```
$ plenv shell 5.18.4
$ perl -le 'print Dumper [ +(1,2)[9,10] ]'
$VAR1 = [];

$ plenv shell 5.22.0
$ perl -le 'print Dumper [ +(1,2)[9,10] ]'
$VAR1 = [
          undef,
          undef
        ];
```
vagrant up で mount: unknown filesystem type 'vboxsf' と言われて諦めました。

ubuntuをvagrantでupしようとしたらエラーがでました。

# vagrant up で エラー
`vagrant up`したらエラーがでました。

```bash: 
vagrant up
略
/vagrant => /Users/pugiemonn/Documents/workspace/ubuntu14
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:

stdin: is not a tty
mount: unknown filesystem type 'vboxsf'
```
なんかエラーでています。

ただvagrantは動いているようです。

```bash:vagrantはrunning
vagrant status
Current machine states:

default                   running (virtualbox)
```
どうしよう＼(^o^)／


# 結論
検索したらboxが原因らしいので別のubuntuのboxにしました。

そしたらエラーがでなくなりました＼(^o^)／

# 参考
http://zow.hatenablog.com/entry/20150116/1421336024
[Eclipseのバグ？] lambda内のgetEnclosingMethod()でInternalError


# 概要

なにやら Eclipse Compiler for Java のバグっぽいものを見かけてしまったので、整理をかねて。

【追記】
Bugzilla を検索してみたところ、どうやら既に bug report があがっているみたい。

- [Bug 476859](https://bugs.eclipse.org/bugs/show_bug.cgi?id=476859)

# 環境

- Eclipse Mars.1 Release (4.5.1)
- Java 1.8.0_65 (32bit)
- Windows 7 SP1 (64bit)

# 事象

ラムダ式の中で、局所クラスあるいは匿名クラスの enclosiong method を求めようとすると、InternalError が発生しました。

再現ソースはこんな感じ。

```java
public class FailedToGetEnclosingMethod {

	public static void main(String[] args) throws Exception {
		Runnable a = () -> {
			class LocalClass {
			}
			Class<?> clazz = LocalClass.class;
			// or
			// Class<?> clazz = new Object(){}.getClass();

			System.out.println(clazz.getEnclosingMethod());
		};
		a.run();
	}
}
```

```
Exception in thread "main" java.lang.InternalError: Enclosing method not found
	at java.lang.Class.getEnclosingMethod(Unknown Source)
	at FailedToGetEnclosingMethod.lambda$0(FailedToGetEnclosingMethod.java:14)
	at FailedToGetEnclosingMethod.main(FailedToGetEnclosingMethod.java:17)
```

原因を調査してみたら、どうやら `Class#getEnclosingMethod()` の中で使っている `getEnclosingMethodInfo()` という private メソッドの返してくる値がおかしいみたい。

リフレクションで無理やり見てみたら生成されているメソッド名が `lamda$0` なのに、enclosing method の名前が `lambda$1` になっている（数字が１違う）。


```java
import java.lang.reflect.Method;

public class FailedToGetEnclosingMethod {

	public static void main(String[] args) throws Exception {
		Runnable a = () -> {
			class LocalClass {
			}
			Class<?> clazz = LocalClass.class;
			// or
			// Class<?> clazz = new Object(){}.getClass();

			try {
				Object enclosingMethodInfo = getter(clazz, "getEnclosingMethodInfo");
				Object name = getter(enclosingMethodInfo, "getName");
				System.out.println("EnclosingMethod: " + name);

				System.out.println();

				Class<?> enclosingClass = clazz.getEnclosingClass();
				for (Method method : enclosingClass.getDeclaredMethods()) {
					if (method.getName().contains("lambda")) {
						System.out.println(method);
					}
				}

			} catch (Exception e) {
				e.printStackTrace();
			}

		};
		a.run();
	}

	/** invoke getter */
	public static Object getter(Object target, String methodName) throws Exception {
		Class<?> clazz = target.getClass();
		Method method = clazz.getDeclaredMethod(methodName);
		method.setAccessible(true);
		return method.invoke(target);
	}
}
```

```
EnclosingMethod: lambda$1

private static void FailedToGetEnclosingMethod.lambda$0()
```

これは Java8 (JDK1.8) のバグなのかな？ と思って、javac コマンドでコンパイルして java コマンドで実行してみたら、ちゃんと動く。

```
C:\temp>javac -version
javac 1.8.0_65

C:\temp>javac FailedToGetEnclosingMethod.java

C:\temp>java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)

C:\temp>java FailedToGetEnclosingMethod
EnclosingMethod: lambda$main$0

private static void FailedToGetEnclosingMethod.lambda$main$0()

C:\temp>
```

※生成されているメソッド名が違う。

なんとなく Eclipse Compiler for Java のバグっぽいよね？

gist: [FailedToGetEnclosingMethod.java](https://gist.github.com/yoshi389111/6c6b1e9c66073a72cdd4)
AzureVMでSWAP設定

#背景
- Azure 西日本 A0 インスタンスが別のローションより安い
- A0の場合、0.75GB RAM 20GBディスクなのでSWAP領域を念のため作成
![スクリーンショット 2015-10-30 20.00.24.png](https://qiita-image-store.s3.amazonaws.com/0/71588/0586df16-79f2-a8d2-79af-d28d8522a126.png)

#実践
42行目以降を書き換え

```rb:/etc/waagent.conf
# TODO: Change n -> y
# Format if unformatted. If 'n', resource disk will not be mounted.
ResourceDisk.Format=y

# TODO: Change n -> y
# Create and use swapfile on resource disk
ResourceDisk.EnableSwap=y

# TODO: Change 1500
# Size of the swapfile.
ResourceDisk.SwapSizeMB=1500

```

SwapSizeMBは、おおよそ、実搭載メモリ〜２倍が適正だと私は、認識していますので今回は1500MBに設定しました。

`sudo reboot`

##最終確認
リブート後に以下のコマンドでSwapが設定値通りになっていれば成功
`free -h`
>TODO: dfなども同様に-hオプションをつけると可視性がアップします。

##西日本A0インスタンスについて
正直なところ、西日本で安いのでテスト用途向けかなと感じています。
レスポンスタイムはやはり早いので、その分、テスト用途ではカバーできていますが…
Windows > クリーンブートの実行と戻し方

Windows7でのクリーンブートの実行およびその戻し方については、以下がわかりやすい。

[answers @ microsoft](http://answers.microsoft.com/ja-jp/windows/forum/windows_7-update/%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3/90fc9ced-7e10-4282-a0c8-93c2b36d3cad)
pptx で図を作って EPS を作りたいときは Metafile to EPS Converter

# 問題

Windows 8, 8.1 だと、wmf2eps が使えない (プリンタを作れない) ので、
pptx で作った図を tex で作った pdf に貼れない！こまった！


# 解決策

Metafile to EPS Converter を使う
http://wiki.lyx.org/Windows/MetafileToEPSConverter
requestsモジュール使ってhttps通信

* `urllib`か`requests`で毎回ググッてたのでメモを残すとした
* これで`header`と`parameter`送りつけます


```
import json
import requests

url = 'https://hoge.com'

data = {
    'hoge': 'fuga', 
    'fuga' : {'fuga1': 'いいね', 'fuga2': 'だめよ'}
    }

headers = {'Content-Type': 'application/json'}
requests.post(url,data=json.dumps(data), headers=headers)
```
cordovaでプラグインがインストールできなくなった

##はじめに
cordovaで下記プラグインをインストールしようとしたところエラーが発生。
ごにゃごにゃやっているうちの他のエラーも発生しだしました。

なんとか、エラーがでないようにはなったので、
今後の自分の為にメモしておきます。

##発生環境
cordova 4.3.1


##エラーが発生したプラグイン
###◎phonegap-plugin-push
https://github.com/phonegap-build/PushPlugin.git

```
cordova plugin add https://github.com/phonegap-build/PushPlugin.git
```

####エラー内容
```
Failed to install 'com.phonegap.plugins.PushPlugin':TypeError: Uh oh!
Arguments to path.resolve must be strings
    at Object.posix.resolve (path.js:439:13)
    at Object.module.exports.framework.install (/usr/local/lib/node_modules/plugman/node_modules/cordova-lib/src/plugman/platforms/android.js:139:35)
    at installWrapper (/usr/local/lib/node_modules/plugman/node_modules/cordova-lib/src/platforms/platforms.js:77:32)
    at Object.ActionStack.process (/usr/local/lib/node_modules/plugman/node_modules/cordova-lib/src/plugman/util/action-stack.js:68:25)
    at handleInstall (/usr/local/lib/node_modules/plugman/node_modules/cordova-lib/src/plugman/install.js:576:20)
    at /usr/local/lib/node_modules/plugman/node_modules/cordova-lib/src/plugman/install.js:363:28
    at _fulfilled (/usr/local/lib/node_modules/plugman/node_modules/q/q.js:787:54)
    at self.promiseDispatch.done (/usr/local/lib/node_modules/plugman/node_modules/q/q.js:816:30)
    at Promise.promise.promiseDispatch (/usr/local/lib/node_modules/plugman/node_modules/q/q.js:749:13)
    at /usr/local/lib/node_modules/plugman/node_modules/q/q.js:509:49
```

####解決策
バージョン指定をしてインストールしたところ解消しました。

```
cordova plugin add https://github.com/phonegap-build/PushPlugin.git#2.4.0
```

###◎google-analytics-plugin

プラグインを追加する際に下記のエラーが発生
プラグインを消して入れなおしても解消しない。

```
cordova plugin add com.danielcwilson.plugins.googleanalytics
```
###エラー内容

```
SyntaxError: Unexpected string
    at Object.parse (native)
    at getJson (/usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/plugman/util/metadata.js:29:31)
    at Object.exports.save_fetch_metadata (/usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/plugman/util/metadata.js:56:24)
    at /usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/plugman/fetch.js:148:18
    at _fulfilled (/usr/local/lib/node_modules/cordova/node_modules/q/q.js:787:54)
    at self.promiseDispatch.done (/usr/local/lib/node_modules/cordova/node_modules/q/q.js:816:30)
    at Promise.promise.promiseDispatch (/usr/local/lib/node_modules/cordova/node_modules/q/q.js:749:13)
    at /usr/local/lib/node_modules/cordova/node_modules/q/q.js:557:44
    at flush (/usr/local/lib/node_modules/cordova/node_modules/q/q.js:108:17)
    at process._tickCallback (node.js:355:11)
```

下記をやってみたら解消した。
・プロジェクト/packeage.jsonのcordovaPlugins{}の定義を削除
・プロジェクト/plugin/fetch.jsonを削除
・プラグインを一旦消して入れなおす
・0.6.1のバージョンをいれる

```
cordova plugin add com.danielcwilson.plugins.googleanalytics@0.6.1
```
crosswalk導入メモ

##はじめに
ハイブリッドアプリの場合、通常標準のWebViewを使います。
通常のWebViewの場合、機種によって挙動が異なったり、パフォーマンスが悪い場合があります。

そこでCrosswalkを使用することで、それらの問題を解決することができます。

CrosswalkはChromiumベースのレンダリングエンジンをアプリ内に内包することで、
標準Webviewを使用せずCrosswalkのレンダリングエンジンを使用することができます。


####●注意点
・Android 4.0以降のみ対応
・レンダリングエンジンを内包する為、アプリの容量が大きくなる（10MBくらい）


##◎Crosswalkをダウンロード

下記ページよりCrosswalkをダウンロードする。
<a href="https://crosswalk-project.org/documentation/downloads.html" target="_blank">Crosswalk downloads</a>

![Crosswalk   Downloads.png](https://qiita-image-store.s3.amazonaws.com/0/11290/129f6689-00f2-9b73-0810-443e7e9574b7.png)


ARM用とx86(intel製)用のツールセットが準備されているので、ターゲットにあったものを使います。
現状ARMの機種のほうがシェアが多いようです。


##◎サンプルプロジェクトを作成

上記でダウンロードしたCrosswalkファイルを展開後、
展開したディレクトリ内のbin/createを実行

```
bin/create <path_to_new_project> <package_name> <project_name>

```
path_to_new_project　・・・　新規crosswalkプロジェクトのパス
package_name ・・・　プロジェクトID(com.hoge.hoge)
project_name ・・・ プロジェクト名

package_nameがandroidのパッケージのネーミングルールに沿っていない場合下記のエラーがでます。

```
Package name must look like: com.company.Name
```
androidのパッケージルール
>・The first character after a period must not be a number
・The first character must be a letter or underscore
・Usually the app id is your company's reversed Internet domain name.
・The app id must consist of letters, numbers, and underscores.

プロジェクト(app)が作成される。

```
├── CONTRIBUTING.md
├── LICENSE
├── NOTICE
├── README.md
├── RELEASENOTES.md
├── VERSION
├── app
├── bin
├── framework
├── package.json
├── spec
└── test
```

##◎アプリをビルドする

作成されたプロジェクトファイル内の構成は下記。
cordova内のrunを実行することでアプリをビルド&デバイス（シミュレーター）で表示する。

```
.
├── AndroidManifest.xml
├── CordovaLib
├── assets
├── bin
├── build.gradle
├── build.xml
├── cordova
├── gen
├── libs
├── local.properties
├── out
├── project.properties
├── res
├── settings.gradle
└── src
```


```
//ビルドと、アプリを表示
app/cordova/run

//ビルドのみ
app/cordova/build

```
###◎アプリケーションのソースの配置先
雛形ファイル(app)内の下記を変更。

```
assets/www
//www配下内のcordova.jsを消すとjsエラーとなるので消さないようにする
```

##その他
◎Cordova5からCordovaプラグインとしてCrosswalkを使用できるようになったようです。
詳しくは下記が参考になります。

><a harf="http://blog.asial.co.jp/1436" target="_blank">Cordova 5でCrosswalkプラグインを使ってみた</a>

><a href="https://crosswalk-project.org/documentation/cordova/cordova_4.html">Crosswalk with Cordova 4.0</a>

◎プラグインを入れる場合
plugmanを使用してインストールしました（他の方法もあると思います）。

```
$ plugman install --platform android \
 --plugin https://github.com/crosswalk-project/cordova-plugin-crosswalk-webview.git \
 --project .
```
EC CUBE3で、会員登録時、商品購入時のポイント付与機能がない

お世話になっております。　EC CUBE　初心者で御座います。

今月に発売された、EC CUBE3の著書の中でも掲載がされておりました、会員登録時の際などのポイント付与に関しては
カスタマイズをする必要があります。

と明記されておりました。

カスタマイズ、またはプラグインをご存知の方がいらっしゃれば、ご教授をしていただけると大変助かります。

宜しくお願い申し上げます。