2016年10月9日日曜日

電子ペーパーモジュール Y-Con P020を使う

http://www.yslab.co.jp/ycon_20.html?menu_id=EPD&sub_menu_id=4
この電子ペーパーモジュールを買ったまま動かしてなかったので動かした。

ページにある通り、 共立のこのモジュールを使ってWindowsから画像送信した。

共立のページにリンクがあるドライバをインストールして、あとはTeratermから画像を送信すれば良い。

ただMacでは1bitのBMP画像が作りづらかった。

まず何とかしてBMP画像を作る。自分はPixelmatorで作った。
サイズはモジュールの都合上、200x96にしておく。

 ImageMagickをインストールしていればconvertコマンドが使えるので、これを使う。

convert 作ったBMPファイル.bmp -colors 2 +dither -type bilevel 出力するBMPファイル.bmp

 出力結果はアンチエイリアスなどが省かれるため、ちょっとギザギザに見える。

Before


After


Macで見ると赤背景に緑文字で見えたりするけど、問題ない。

あとはTeratermとかで転送すれば映るはず。



白背景に黒文字でやったはずだけど、反転した。
そういうものかもしれない。

電源がなくても最後の状態が保持できるので何かに使えそう。
Raspberry Piとかに繋いで状態表示するのも良さそう。
そのためにはBMP画像を自動で作らないといけないけど。

2016年8月15日月曜日

MATLABのmatファイルからPython PandasのDataFrameにごく簡単に変換する

MATLABで使用するmatファイルからPythonのPandasで使うDataFrameに変換しようとしてググったが、ちょっと直感的でない結果しかヒットしなかった。

http://poquitopicante.blogspot.jp/2014/05/loading-matlab-mat-file-into-pandas.html

とにかく簡単にDataFrameに変換しようとすると、以下のようになった。

# 必要ライブラリの読み込み
import pandas as pd
from scipy.io import loadmat
matdata = loadmat(u'変換したいmatファイル.mat')

# 一時変換用の辞書
dictFromMat = {}
# 辞書の要素を列挙し、DataFrameに変換
for key, value in matdata.iteritems():
    dictFromMat[key] = pd.Series(np.array(matdata[key]).flatten())
   
# 一時変換用の辞書からDataFrameを作成
dfFromMat = pd.DataFrame(dictFromMat)

型チェックとか、計算量とか何も考えていないのでベストかどうかは分からないが、とりあえずDataFrameに変換できた。
配列をflatten()しているので、一要素として配列を入れたい場合はこの方法は使えないが、csvのように一要素として一つの値しか取らない場合は使えると思う。

これでMATLABのベンダーロックインから逃れられる。

2016年3月16日水曜日

【更新】elasticsearchのkuromojiプラグインがエラーでインストール出来ない時の話

現時点で最新のElasticsearch 2.2で日本語解析プラグインのkuromojiを入れようとしたら
Could not find plugin descriptor 'plugin-descriptor.properties' in plugin zip
とか言われて、インストール出来なかった。

ググッて最初に出てきたGitHubページを参考に、コマンドの行だけ読んで
bin/plugin install elasticsearch/elasticsearch-analysis-kuromoji/2.7.0
と何も考えずに実行すると、上記エラーになる。
ページの上部に書いてある通り、
IMPORTANT: this project now moved to elasticsearch repository.
elasticsearchのリポジトリに移動しました。とあるので、
公式らしきGitHubページに書いてあるのだから…と素直に plugin-descriptor.properties とかを調べだすとドツボにはまる。

Elasticsearch公式のページにあるように
bin/plugin install analysis-kuromoji
とすればインストールできる。

公式GitHubページの方に早く反映いただけませんかねぇ?
→大変失礼致しました、書いてありました…。Elasticsearchの中の方からご連絡頂きました。


…と、ここまで書いて再度確認したら、上記操作でインストールされるのはkuromoji 2.2だった。
Elasticsearchとのバージョンの違いだろうか?
(kuromojiのGitHubページには、 kuromoji 2.2はElasticsearch 1.2用だと書かれているので、納得はしていない...)

2016年3月3日木曜日

InstagramからAPIを使わずにスクレイピングでタグ検索をする

インスタグラムで画像検索してディープラーニングにでも使うか〜
と思ってたらAPIが2015年12月の改訂により全然使えないものになっていた。

https://www.instagram.com/developer/

プライバシーポリシーみたいなのを登録しないと、自分自身と招待した10人位のユーザの情報しか取れない。
こんなんならFlickrのほうがまだマシだ。

https://www.flickr.com/services/api/

とはいえ、Instagramのほうがソーシャル感が強いのは事実。
何とかしようということで、スクレイピングするスクリプトを書いた。

https://github.com/syamoji/getInstagram

インスタグラムのWebページを観察すると、POSTで何かしら投げたら次のページが読み込めることがわかった。

スクリプト上部で検索タグを決めて、取得ページ数を設定したら情報が取得できる。
サーバの負荷にならないように、1ページ取得すると5秒待つ仕様にしてある。
デフォルトではCSVファイルに保存している。

gemとして公開までしてみたいなぁ

2016年2月23日火曜日

elasticsearchをlocalhost以外の外部からアクセスできるようにする

elasticsearchはver.2以降でデフォルトlocalhostからのみ接続を許可することになっている。

elasticsearch.ymlで
network.host: 0
とすれば別のマシンからもアクセスできるようになる。

VirtualBoxゲストOS内のelasticsearchにホストOSからアクセスできず、NATの設定やらポートフォワーディングの設定やらを見直していたが、elasticsearch自体の設定だったとは…

DELETEメソッドで簡単に消したりできるので、信頼するネットワーク内でのみ実施したほうが良い。


参考
http://christina04.hatenablog.com/entry/2015/11/27/204127

2016年1月29日金曜日

MacでVLCを複数ウィンドウで再生できるようにする

VLCで同時に複数画面で再生したい場合、Windowsでは設定に「複数ウィンドウで開く」という項目があるらしいが、Macには無い。

その場合は、スクリプトエディタでスクリプトを書けば開けるようになる。

Mac標準のスクリプトエディタを起動し、以下のスクリプトを貼り付ける。
VLCはアプリケーションフォルダに置いておく。

on run
    do shell script "open -n /Applications/VLC.app"
    tell application "VLC" to activate
end run

on open theFiles
    repeat with theFile in theFiles
        do shell script "open -na /Applications/VLC.app " & quote & (POSIX path of theFile) & quote
    end repeat
    tell application "VLC" to activate
end open
ファイル→書き出すをクリックし、適当な名前を付け、保存する場所を選ぶ。
ドラッグアンドドロップなどで使いやすいようにデスクトップなど。
ダイアログ下部の「ファイルフォーマット」を「アプリケーション」に変更し、保存する。

出来たアプリケーションに動画ファイルをドロップすれば、複数ウィンドウで再生できるようになる。

参考
http://superuser.com/questions/894840/how-to-play-multiple-instances-of-vlc-on-mac

2016年1月1日金曜日

Elasticsearch 2.0系 でupdateしようとしたときに illegal_argument_exception が出る時の対処法

Elasticsearchで更新しようとして、
curl -X POST http://localhost:9200/blog/article/1/_update?pretty -d '{"script": {"inline": "ctx._source.content = \"new content\""}}'
を実行して
{
  "error" : {
    "root_cause" : [ {
      "type" : "remote_transport_exception",
      "reason" : "[Artie][127.0.0.1:9300][indices:data/write/update[s]]"
    } ],
    "type" : "illegal_argument_exception",
    "reason" : "failed to execute script",
    "caused_by" : {
      "type" : "script_exception",
      "reason" : "scripts of type [inline], operation [update] and lang [groovy] are disabled"
    }
  },
  "status" : 400
}
のようなエラーが返ってくるとき、elasticsearch.ymlに設定が必要になる。
/etc/elasticsearch/elasticsearch.yml とかにあるファイルを開いて
script.inline: on
を書けば良い。

ググったら↓こう書けと出てくるページもあるが、2.0系では有効ではない。
script.engine.groovy.inline.aggs: on
script.groovy.sandbox.enabled: true

参考
http://stackoverflow.com/questions/25291927/how-to-run-update-elasticsearch-with-external-script
http://t-cyrill.hatenablog.jp/entry/2014/04/19/161422