tag:blogger.com,1999:blog-4695572056828020522024-03-05T14:28:22.898+09:00コチョナナバRuby on Railsなどをいろいろと調べた技術メモなのです。VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.comBlogger638125tag:blogger.com,1999:blog-469557205682802052.post-80047285494188249892023-01-05T21:52:00.004+09:002023-01-05T21:54:09.049+09:00meishi2キーボードをカスタマイズしてレイヤー対応させてオンボードLEDも光らせてみた<p> 前回、<a href="https://kingyo-bachi.blogspot.com/2022/12/meishi2.html" target="_blank">meishi2キーボードを買って、キーを押したら「こんにちは~~」と出るようにしてみた</a>というエントリを書いてみました。</p><p>ちょっとカスタマイズを加えてみます。</p><p>キーが4つだと寂しいのでレイヤー機能を使って、もう少しいろんなことをできるようにします。そしてどのレイヤーになっているかわかるようにレイヤーの状態に応じてオンボードLEDを光らせます。</p><p>変更するのは、keymap.cで以下のように変更します。</p>-----------------<div><div>#include QMK_KEYBOARD_H</div><div><br /></div><div><div>#define PRO_MICRO_LED_TX D5</div><div>#define PRO_MICRO_LED_RX B0</div><div><br /></div><div>#define SW_DEF_LAY TO(_DEFAULT)</div><div>#define SW_MES_LAY TO(_MESSAGE)</div></div><div><br /></div><div>//KC_Q,KC_W,KC_Eを指定していますが、使わないキーを適当に割り当てています</div><div>enum custom_keycodes {</div><div> HASE = KC_Q,</div><div> WATA = KC_W,</div><div> NORI = KC_E,</div><div>};</div><div><br /></div><div><div>enum meishi2_moc_layers {</div><div> _DEFAULT,</div><div> _MESSAGE</div><div>};</div></div><div><br /></div><div>const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {</div><div> [_DEFAULT] = LAYOUT( /* Base */</div><div> SW_MES_LAY, LCTL(KC_A), LCTL(KC_C), LCTL(KC_V)</div><div> ),</div><div> [_MESSAGE] = LAYOUT( /* Base */</div><div> SW_DEF_LAY,HASE, WATA, NORI</div><div> ),</div><div>};</div><div><br /></div><div><div>void matrix_init_user(void) {</div><div> setPinOutput(PRO_MICRO_LED_TX);</div><div> writePinHigh(PRO_MICRO_LED_TX);</div><div> setPinOutput(PRO_MICRO_LED_RX);</div><div> writePinHigh(PRO_MICRO_LED_RX);</div><div>}</div></div><div><br /></div><div>bool process_record_user(uint16_t keycode, keyrecord_t *record) {</div><div> switch (keycode) {</div><div> case HASE:</div><div> if (record->event.pressed) {</div><div> send_unicode_string("こんにちは~~");</div><div> }</div><div> return false;</div><div> break;</div><div> case WATA:</div><div> if (record->event.pressed) {</div><div> send_unicode_string("うるせ~よ");</div><div> }</div><div> return false;</div><div> break;</div><div> case NORI:</div><div> if (record->event.pressed) {</div><div> send_unicode_string("のりのりまさのり");</div><div> }</div><div> return false;</div><div> break;</div><div><div> case SW_DEF_LAY:</div><div> if (record->event.pressed) {</div><div> writePinHigh(PRO_MICRO_LED_TX);</div><div> writePinHigh(PRO_MICRO_LED_RX);</div><div> }</div><div> break;</div><div> case SW_MES_LAY:</div><div> if (record->event.pressed) {</div><div> writePinLow(PRO_MICRO_LED_TX);</div><div> writePinLow(PRO_MICRO_LED_RX);</div><div> }</div><div> break;</div></div><div> }</div><div> return true;</div><div>}</div><div>-----------------<div></div></div><p>これで6つのキーが使えるようになりました。</p><p>そして、メッセージが出てくるレイヤーになっているときにはオンボードLEDが光るようになっています。</p><p><br /></p></div>VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-84886990277845032082022-12-30T16:20:00.000+09:002022-12-30T16:20:13.084+09:00meishi2キーボードを買って、キーを押したら「こんにちは~~」と出るようにしてみた<p>自作キーボードにちょっと興味が出たので、お気軽に試せそうなmeishi2キーボードを買ってみました。</p><p>購入は、遊舎工房から買ってみました。</p><p><a href="https://shop.yushakobo.jp/products/834">https://shop.yushakobo.jp/products/834</a></p><p>作り方は、以下を見ながらです。</p><p><a href="https://biacco42.hatenablog.com/entry/2019/08/10/185624">https://biacco42.hatenablog.com/entry/2019/08/10/185624</a></p><p>はんだづけは、へたくそなので作ったものはお見せできませんが、はんだづけする箇所はそんなに多くないので、へたくそでもきちんと動きました。</p><p>ファームウェアは、いろいろカスタマイズできそうなCUIを使った方法で行いました。</p><p>WSL2を利用して実施しています。</p><p>基本は、上記手順に書いてある方法でよいのですが、WSL2環境だとちょろちょろコンパイルする際にエラーが出ましたが以下を参考にすることでだいたい解決しました。</p><p><a href="http://www.neko.ne.jp/~freewing/hardware/qmk_setup_environment_build/">http://www.neko.ne.jp/~freewing/hardware/qmk_setup_environment_build/</a></p><p>コンパイルはできるのですが、WSL2からファームウェアを焼くことがどうもうまくいかなかったので、ファームウェアをやくときは、windows側にQMK Toolboxを以下から取得してインストールして行いました。</p><p><a href="https://github.com/qmk/qmk_toolbox/releases">https://github.com/qmk/qmk_toolbox/releases</a></p><p>Windows側からWSL2のファイルを見るには、</p><p>\\wsl$</p><p>と指定すれば見れるので、wsl2側で作成したhexファイルを直接指定することができます。</p><p><br /></p><p>カスタマイズとして、キーを押したら「こんにちは~~」と出るようにします。</p><p>meisihi2のデフォルトのキーマップは</p><p>qmk_firmware/keyboards/biacco42/meishi2/keymaps/default</p><p>にあるので、この横にカスタマイズ用ファイルの置き場所を以下のような感じで作ります。</p><p>qmk_firmware/keyboards/biacco42/meishi2/keymaps/mymap</p><p>このディレクトリの中に今回は以下の3つのファイルを用意しました。</p><p>config.h</p><p>keymap.c</p><p>rules.mk</p><p>それぞれ内容は以下になります。</p><p>config.h</p><p>今回WINDWOS環境を利用するのでUNICODE_MODE_WINCOMPOSEを指定しています。</p><div><p></p></div><div>---------------------------</div><div>#define UNICODE_SELECTED_MODES UNICODE_MODE_WINCOMPOSE<br /><div><div>---------------------------</div><p><br /></p><p>keymap.c</p><div>---------------------------</div><div><div><div>#include QMK_KEYBOARD_H</div><div><br /></div><div>//KC_AとKC_Bを指定していますが、使わないキーを適当に割り当てています</div><div>enum custom_keycodes {</div><div> HASE = KC_A,</div><div> WATA = KC_B,</div><div>};</div><div><br /></div><div>const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {</div><div> [0] = LAYOUT( /* Base */</div><div> HASE, WATA, LCTL(KC_C), LCTL(KC_V)</div><div> )</div><div>};</div><div><br /></div><div>bool process_record_user(uint16_t keycode, keyrecord_t *record) {</div><div> switch (keycode) {</div><div> case HASE:</div><div> if (record->event.pressed) {</div><div> send_unicode_string("こんにちは~~");</div><div> }</div><div> return false;</div><div> break;</div><div> case WATA:</div><div> if (record->event.pressed) {</div><div> send_unicode_string("うるせ~よ");</div><div> }</div><div> return false;</div><div> break;</div><div> }</div><div> return true;</div><div>}</div></div></div><div>---------------------------</div><p><br /></p><p>rules.mk</p><p>ユニコードが利用できるようにします。</p></div><div><div>---------------------------</div></div></div><div>UNICODE_ENABLE = yes</div><div><div>---------------------------</div></div><div><br /></div><div><br /></div><div>これで以下のようにファームウェアをコンパイルします。</div><div><br /></div><div>make biacco42/meishi2:mymap</div><div><br /></div><div>出来上がったhexファイルをmeishi2にやきます。</div><div><br /></div><div><br /></div><div>meishi2側は、これでOKなのですが、このままでキーを押すとWindows側にはなんか数字やらがたくさん出てくる感じなってしまいます。</div><div><br /></div><div>日本語を受け取るにはWindows側に以下からWinComposeを取得してインストールする必要があります。</div><div><br /></div><div><a href="https://github.com/samhocevar/wincompose">https://github.com/samhocevar/wincompose</a></div><div><br /></div><div>これで無事にキーを押したら</div><div><br /></div><div>「こんにちは~~」</div><div><br /></div><div>と出てきてくれます。</div><div><br /></div>VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-24798354110129003402022-09-16T15:44:00.006+09:002023-08-31T08:48:42.889+09:00rubyで住所情報から都道府県を取り出す<p> 以下のような住所情報があったとします。</p><p>東京都府中市1-2-3 道路横ビル</p><p>これから都道府県と取り出し、それ以外と分離する場合は、以下のような感じで可能です。</p><p></p><blockquote><p>org = "東京都府中市1-2-3 道路横ビル"</p><p>pref = org.match(/^.+?[都道府県]/).to_s</p><p>addr = org.sub(pref,"")</p></blockquote><p></p><p>prefに都道府県、addrにそれ以外が入る感じなります。</p><p>都道府県取得の正規表現に?を忘れると</p><p>prefが「東京都府中市1-2-3 道」と最長一致なってしまうのでご注意です。</p><p><br /></p><p>※やっぱりこれだと京都府がとれないです。</p><p>pref = org.match(/^.{2,3}[都道府県]/).to_s<br /><br />の方がよさそうです。</p><p><br /></p><p>※※上記では東京都府中市が東京都府になっちゃいます。最短一致させるための?を忘れてました。</p><p>pref = org.match(/^.{2,3}?[都道府県]/).to_s<br /><br />の方がよさそうです。</p><p><br /></p>VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-62028064471782532022022-03-23T13:51:00.004+09:002022-03-23T13:51:51.975+09:00gitでレポートな感じ<p> gitを運用していて、だれがどれくらい変更したんだろうとか調べたくなってみました。</p><p>とりあえず以下のようなことができるかなという感じです。</p><p><br /></p><p>誰が何回commitしたか?</p><p><span style="background-color: #f8f8f8; color: #1d1c1d; font-family: NotoSansJP, Slack-Lato, Slack-Fractions, appleLogo, sans-serif; font-size: 14px; font-variant-ligatures: common-ligatures;">git shortlog --summary -n</span></p><br />特定の人が何行変更したか?<p><span style="background-color: #f8f8f8; color: #1d1c1d; font-family: NotoSansJP, Slack-Lato, Slack-Fractions, appleLogo, sans-serif; font-size: 14px; font-variant-ligatures: common-ligatures;">find app spec -type f | xargs -n1 git --no-pager blame -f -w|grep xxx| wc -l</span></p>上記では、app、spec配下のファイルをxxxさんが変更した行数を取得している感じです。<br /><br /><p><span style="background-color: #f8f8f8; color: #1d1c1d; font-family: NotoSansJP, Slack-Lato, Slack-Fractions, appleLogo, sans-serif; font-size: 14px; font-variant-ligatures: common-ligatures;"><br /></span></p>VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-37980981289957922552020-08-10T22:38:00.001+09:002020-08-10T22:38:32.832+09:00CentOS6でActiveRecord::ConnectionNotEstablished: No connection pool with 'primary' found.というエラーが出たとき。<p> CentOS6の環境でrailsのrspecの全件試験をしたときに、試験の後半で</p><p>「ActiveRecord::ConnectionNotEstablished:No connection pool with 'primary' found.」</p><p>というエラーが連発して発生することがありました。</p><p>エラーが発生したテストケースを個別に実行するとエラーがでない感じです。</p><p>どうも調べていたらCentOS6のulimitの上限がありそうな気配でした。</p><p>以下参考です。</p><p><a href="http://www.shinobe.org/2014/05/21/centos6%E3%81%AE%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E6%95%B0%E3%81%AE%E4%B8%8A%E9%99%90/" target="_blank">CentOS6のプロセス数の上限</a><br /></p><p>こちらを参考に</p><pre class="moz-quote-pre" wrap="">/etc/security/limits.d/90-nproc.conf</pre><p>の内容を</p><pre class="moz-quote-pre" wrap="">* soft nproc 1024</pre><p>から</p><pre class="moz-quote-pre" wrap="">* soft nproc 2048</pre><p>へ変更したら無事にエラーが消えました。</p><p><br /></p>VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-22079174906749873812020-02-23T23:22:00.001+09:002020-02-23T23:22:26.564+09:00八朔にはムッキーちゃんがおすすめ冬は八朔がおいしいですね。<br />
でも皮や房を向くのがめんどくさいですね。<br />
<br />
そこでおすすめムッキーちゃん。<br />
前から気になってはいましたが、amazonの配送料を無料にするために買ってみました。<br />
<br />
思った以上にラクチンでよいです。おススメです。<br />
<br />
<br />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=gyotech-22&language=ja_JP&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B001TUY5MO&linkId=36e12b87555e17d95ca98408e35ce6e7" style="height: 240px; width: 120px;"></iframe>VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-4904030272600670592019-07-19T22:26:00.002+09:002019-07-19T22:27:27.191+09:00mysqlでソートしたデータをヘッダーつきcsvに保存する方法mysqlでorder byでソートしたデータをヘッダーつきのcsvファイルとして保存する方法です。<br />
<br />
以下のようなsqlを実行する感じです。<br />
<br />
<pre>select 'head1','head2','head3'
union
select * from (
select col1,col2,col3 from tbl
order by col1
) as tmp
INTO OUTFILE '/tmp/sort_data.csv'
FIELDS TERMINATED BY ',';
</pre>
<br />
これで<br />
<br />
<pre>head1,head2,head3
1,bbb,ccc
2,aaa,bbb
3,ccc,aaa</pre>
<br />
みたいなcsvファイルが出力されます。<br />
<br />
ポイントは、
<br />
・ヘッダーは、unionの前に記載<br />
・ソートするsql文を、select * from ( ) as tmp で囲う<br />
です。<br />
<br />
以下を参考にしました。<br />
<a href="https://stackoverflow.com/questions/3175312/select-union-and-order-by-in-mysql-how-to" target="_blank">https://stackoverflow.com/questions/3175312/select-union-and-order-by-in-mysql-how-to</a>VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-74594355234245016962019-05-06T23:03:00.002+09:002019-05-06T23:03:36.938+09:00一つのDBを複数のrailsアプリから利用するRailsにAPIや管理画面やバッチツールなど、いろいろ機能が盛り込まれて大きくなってきて、それぞれの機能を分離したくなってきてみました。<br />
この段階では、<br />
app<br />
という一つのリポジトリがある感じです。<br />
<br />
分離自体は、役割が結構ちゃんとわかれていたので、それほど大変ではありませんでした。<br />
この段階では、<br />
app_api<br />
app_admin<br />
app_batch<br />
のような三つのリポジトリがある感じです。<br />
<br />
三つに別れましたが、共通のDBを利用する必要があって、分離されたアプリそれぞれにmigrationがあって、それをなんか変わったときに人手で同期させていたのですが、それぞれ独自にカラム追加したりして、だんだん見通しが悪くなってきて、ちょっと面倒になってきました。<br />
<br />
<div>
dbを独立したリポジトリにしてよい感じで使えないかなぁと調べていたら、</div>
<div>
<a href="https://github.com/winebarrel/ridgepole" target="_blank">Ridgepole</a></div>
というのがあることを知りました。<br />
Ridgepoleでは、migrationのように変更を積み重ねるのではなく、最終的なテーブル定義を保持していて、dbとテーブル定義の差分を見て、dbを変更していく感じです。<br />
dbの状態の見通しがよくなりそうだし、定義ファイルを独立したリポジトリで管理して、それぞれのリポジトリのsubmoduleとして取り込むとよさげかなと思ってみました。<br />
<br />
というわけで、そのような環境を構築してみます。<br />
<br />
以下を参考にしています。<br />
<a href="https://re-engines.com/2017/05/03/370/#rails_migrateRidgepole-2" target="_blank">https://re-engines.com/2017/05/03/370/#rails_migrateRidgepole-2</a><br />
<br />
まずはGemfileに<br />
gem 'ridgepole'<br />
を追加して<br />
bundle install<br />
します。これでRidgepoleが利用できるようになります。<br />
<br />
現在のdb定義からRidgepole用の定義ファイルを生成します。<br />
bundle exec ridgepole -c config/database.yml -E development --split --export -o db/schemas/Schemafile<br />
<div>
<br /></div>
<div>
これで</div>
db/schemas/<br />
以下に定義ファイルが作成されます。<br />
<br />
試しに定義ファイルの適用コマンドを試します。<br />
bundle exec ridgepole -c config/database.yml -E development --apply -f db/schemas/Schemafile<br />
<div>
当然、変更はありません。</div>
<div>
念のため、test環境にも試します。</div>
<div>
<div>
bundle exec ridgepole -c config/database.yml -E test --apply -f db/schemas/Schemafile</div>
</div>
<div>
こちらも変更はありません。</div>
<div>
<br /></div>
<div>
ここまでくれば、migrationは不要になるので思い切って削除します。</div>
<div>
<div>
rm -r db/migrate</div>
</div>
<div>
<br /></div>
<div>
あと、rspecのテストのために以下の変更もしたほうがよいようです。</div>
<div>
spec/rails_helper.rb</div>
<div>
の中の</div>
<div>
ActiveRecord::Migration.maintain_test_schema!</div>
<div>
の部分をコメントアウトします。</div>
<div>
以下のような感じです。</div>
<div>
<br /></div>
<pre>#begin
# ActiveRecord::Migration.maintain_test_schema!
#rescue ActiveRecord::PendingMigrationError => e
# puts e.to_s.strip
# exit 1
#end
</pre>
<div>
<br /></div>
<div>
とりあえず、ここでmigrationからRidgepoleに切り替えた感じになります。<br />
Ridgepoleをより便利に使えるようにします。<br />
以下を参考にしています。<br />
<a href="https://qiita.com/ToqTock/items/c185a38fd4e2011ddd64" rel="nofollow" target="_blank">https://qiita.com/ToqTock/items/c185a38fd4e2011ddd64</a></div>
<div>
<br />
まずmigrationファイルを生成されないようにします。Myappの部分は環境にあわせて変えてください。<br />
config/initializers/generator.rb<br />
<script src="https://gist.github.com/vivahiraj/dda844e1f6c6ad3c211d11c1fea1ef22.js"></script>
<br />
<br />
<br />
Ridgepoleのコマンドが長いのでdb:migrateのようにdb:applyみたいな感じを使えるようにします。<br />
lib/tasks/ridgepole_tasks.rake<br />
<script src="https://gist.github.com/vivahiraj/95a1d2965c936d2e4e8abc382e9fc2cb.js"></script><br />
<br />
<br />
ここからdbの部分を以下のような感じで独自のリポジトリにします。<br />
cp -pr db ~/app_db<br />
cd ~/app_db<br />
git init<br />
git add *<br />
git commit<br />
git remote add origin app_db用リポジトリ<br />
git push -u origin master<br />
これで<br />
app_api<br />
app_admin<br />
app_batch<br />
app_db<br />
の4つのリポジトリができましたが、この段階では、app_dbと同じ内容が個別にapp_apiなどにある感じです。<br />
<br />
app_apiなどの各アプリのdbディレクトリgitのsubmoduleを利用してapp_dbのリポジトリを見るようにします。<br />
git submoduleに関しては、以下が参考になりました。<br />
<a href="https://qiita.com/sotarok/items/0d525e568a6088f6f6bb" target="_blank">https://qiita.com/sotarok/items/0d525e568a6088f6f6bb</a><br />
<br />
cd ~/app_api<br />
この中のdbディレクトリを削除してしまいます。<br />
rm -r db<br />
ここで以下のコマンドを実行してapp_dbをsubmoduleにしてdbに結び付けます。<br />
git submodule add app_db用リポジトリ db<br />
これでリポジトリは、以下のような感じになりました。<br />
app_api(dbフォルダはapp_db)<br />
app_admin(dbフォルダはapp_db)<br />
app_batch(dbフォルダはapp_db)<br />
app_db<br />
<div>
<br /></div>
<div>
これでそれぞれのアプリでdbに変更したものは、app_dbを介して、それぞれに配布できるようになりました。</div>
<div>
<br /></div>
</div>
<div>
<br /></div>
VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-3874068691627821952019-01-16T21:44:00.000+09:002019-01-16T21:45:45.527+09:00centos7でproxyを利用してgithubにssh接続する方法sshで直接githubに接続できない環境でproxy経由で接続する方法です。<br />
<br />
.ssh/config<br />
に以下のような記載をすればOKです。<br />
<br />
-----------------------<br />
<pre class="moz-quote-pre" wrap="">Host github.com
HostName ssh.github.com
Port 443
ProxyCommand /usr/bin/ncat --proxy <server>:<port> --proxy-type http %h %p</pre>
-----------------------<br />
<div>
<br /></div>
これで<br />
ssh -T git@github.com<br />
で接続できることを確認したらgitも利用できるはずです。<br />
<br />
以下を参考にさせていただきました。<br />
<a href="https://qiita.com/n_slender/items/30db800aad7eb193c07e" target="_blank">https://qiita.com/n_slender/items/30db800aad7eb193c07e</a><br />
<a class="moz-txt-link-freetext" href="https://qiita.com/vvisteria/items/bd748406671faae228cb" target="_blank">https://qiita.com/vvisteria/items/bd748406671faae228cb</a>
VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-4832261684717657032018-10-14T23:02:00.002+09:002018-10-14T23:02:20.400+09:00redmineのパスワード管理のpluginであるVaultを入れてみたredmineでプロジェクト管理していて、特定のサイトとかのパスワードをメンバーで利用する必要があって、なにかよいパスワード管理方法がないかなぁと思って探したところ、<br />
<a href="https://noshutdown.ru/en/redmine-plugins-vault/" target="blank">Vault</a><br />
というredmineのpluginを見つけたのでインストールして使ってみました。<br />
<br />
インストール方法は、以下のような感じです。<br />
<br />
まずは、redmineのpluginのディレクトリに移動してください。<br />
cd redmine/plugins/<br />
<br />
Vaultを取得します。<br />
git clone https://github.com/noshutdown-ru/vault<br />
<br />
インストールを実行します。<br />
cd ..<br />
bundle install --without development test<br />
bundle exec rake redmine:plugins:migrate RAILS_ENV=production<br />
<br />
ちょっと設定をいじります。<br />
config/initializers/assets.rb<br />
に、以下を追加します。<br />
--------------------------<br />
Rails.application.config.assets.precompile += %w( zeroclipboard.js )<br />
--------------------------<br />
<br />
これはいらないかもですが。。。<br />
chown apache:apache keys<br />
<br />
ここまできたら、webサーバを再起動します。<br />
<br />
redmineにVaultが認識されているはずなので、設定をします。<br />
redmineの「管理」「プラグイン」「Vault plugin 設定」「Vault settings」で以下の変更を行います。<br />
Encryption keyに適当な文字列を16文字で設定して「適用」をクリックします。<br />
(なんか16文字でないとエラーがでました。)<br />
また、ちょっと気になったのは、redmineをサブフォルダで運用している場合に、<br />
※The requested URL /vault_settings was not found on this server.<br />
という感じのエラーが出てしまいますが、正しく保存されている模様なので気にしないことにします。<br />
<br />
<br />
Vaultは、プロジェクトごとにパスワード管理をするようなので、<br />
利用する場合は、各プロジェクトで<br />
「設定」「モジュール」<br />
にKeysが出てくるのでVaultを利用する場合にはチェックします。<br />
<br />
これでプロジェクトで利用するパスワードは、ここで管理できます。ただ、プロジェクトまたがりで使うものを、共有して管理はできないようなので、プロジェクトまたがりで使うものがある場合は、専用のプロジェクトを用意するのがよいかもしれません。<br />
また、Vaultは、パスワード毎に見れる人を設定できる気配です。<br />
<br />
ちょっと、こちらをしばらく使ってみようかなぁと思ってみました。<br />
<br />
以下のサイトを参考にさせていただきました。<br />
<a href="https://orebibou.com/2016/09/redmine%E3%81%AE%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E7%AE%A1%E7%90%86%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%80%8Cvalut%E3%80%8D%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF/" target="blank">俺的備忘録 〜なんかいろいろ〜 Redmineのパスワード管理プラグイン「Valut」を使ってみる</a><br />
<br />VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-74588141928077421272017-12-28T14:30:00.000+09:002017-12-28T14:30:44.832+09:00raspberry pi zero wとダイソーのリモートシャッターとrubyで遊ぶraspberry pi zero wを買ったのは、bluetooth機器とつないで、ちょっと遊んでみたいなぁと思っていたことも一つの理由だったりします。
<br />
<br />
お手軽に遊ぶ材料として、ダイソーで売っているリモートシャッターがよさげかと思ってみました。以下と同じもののようです。<br />
<br />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=gyotech-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B00JX70WIG&linkId=450cffa7b9847eca08d06c2cda10fe19" style="height: 240px; width: 120px;"></iframe><br />
<br />
これを利用した例を以下のサイトを紹介していたので、参考にさせてもらいました。<br />
<a href="https://qiita.com/vimyum/items/8b7548ca8cf45383c5b0" target="_blank">https://qiita.com/vimyum/items/8b7548ca8cf45383c5b0</a><br />
<br />
こちらでは、bluebuttonというツールを利用しているのですが、ソースは以下にあります。<br />
<a href="https://github.com/kinnalru/bluebutton" target="_blank">https://github.com/kinnalru/bluebutton</a><br />
<br />
こちらのソースを見て、ちょっと遊んでみました。<br />
こちらでは、二つのボタンを特に区別してなくて、押したことと長押しを検出していたので、ボタンを識別できるよう改造してみました。<br />
<br />
上のIOSボタンは、押すとVolumeUpが送られてきているようです。<br />
下のandoridボタンは、押すとEnterが来て、さらにVolumeUpが送られてきてるようです。<br />
<br />
これで識別できそうなので、改造したのは以下のものになります。<br />
rootで実行する必要があります。<br />
これは、二つのボタンとそれぞれの長押しを検出して、さらにLINEに特定のメッセージを送るようにしてみました。<br />
<br />
<script src="https://gist.github.com/vivahiraj/efbb9573d479f9ca7fb7fb81147a8e97.js"></script>
<br />
とりあえずIoTな気分を感じてみました。<br />
<br />
<br />VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-26856899879490258132017-12-26T21:38:00.002+09:002017-12-26T21:38:43.581+09:00raspberry pi zero wを買ったのでusb接続でセットアップした<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=gyotech-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B0746H9881&linkId=6d2bf5a9fe9aafa12334f0af654429a7" style="height: 240px; width: 120px;"></iframe>
<br />
raspberry pi zero wを買いました。本当は単体で買いたかったのですが、なかなか単体で買えないのと、手ごろな手持ちのSDカードがなかったのと、電源もほどよいのが、ちょうどなかったので、ちょっと割高かなと思いましたが、セットで購入しました。<br />
<br />
セットアップはusbでwindowsと接続して行うことができました。<br />
手順は、<br />
<a href="https://qiita.com/marron-akanishi/items/2ce4ae07c71dc8358093" target="_blank">https://qiita.com/marron-akanishi/items/2ce4ae07c71dc8358093</a><br />
と<br />
<a href="https://qiita.com/gpsnmeajp/items/126fadd3e47cdd4a6c00" target="_blank">https://qiita.com/gpsnmeajp/items/126fadd3e47cdd4a6c00</a><br />
を見ればよさげです。<br />
無線の設定の部分はraspi-configで設定したぐらいの違いしかないです。<br />
<br />
途中でsshでraspberrypi.localと指定して接続するのですが、<br />
うちにはすでに旧型のraspberry piがいて、<br />
すでにraspberrypi.localを使っていたので、旧のほうにつながってしまいます。<br />
新しいの方のを最初から名前を変える方法を探したのですが、<br />
ちょっと見つからなかったので、最初に使っているraspberry piの電源を落として<br />
raspberrypi.localで新しい方につながるようにしました。<br />
<br />
その後、以下を参考に名前を変えました。<br />
<a href="https://www.1ft-seabass.jp/memo/2015/04/21/raspberry-pi-hostname-memo/" target="_blank">https://www.1ft-seabass.jp/memo/2015/04/21/raspberry-pi-hostname-memo/</a><br />
名前を変える際は、無線LAN接続できるようにして、<br />
無線でIPでも接続できるようになったのを確認してから変えたほうが良いです。<br />
最初、上記を参考にせず間で名前を変えて、<br />
無線設定も適当に確認しただけでやったら失敗して、<br />
接続できなくなって最初からやりなおしになったりしたので、ご注意を。<br />
<br />VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-47006060155307048332017-11-03T23:07:00.000+09:002017-11-03T23:07:26.376+09:00Rubyで暗号化した文字列をJavaScriptで復号化してみたQiitaにある<br />
<a href="https://qiita.com/shigekid/items/60d3387de6a804bc38b9" target="_blank">JavaScriptで暗号化した文字列をRubyで復号化してみた</a><br />
という記事の逆をやってみたいと思ってみました。<br />
<br />
JavaScript側では、CryptJSを使ってRuby側で暗号されたものを<br />
var text = CryptoJS.AES.decrypt(data, "pass").toString(CryptoJS.enc.Utf8);<br />
で複合化をできるようにRuby側で暗号化したいと思います。<br />
Ruby側で暗号化された値が上記のdataに入る感じです。<br />
<br />
Ruby側は以下のような感じです。<br />
<br />
<script src="https://gist.github.com/vivahiraj/bdd715df10ee3298a79b4ef503c48386.js"></script>
<br />
これを使ってruby側で<br />
enc_data = encrypt(”hogehoge”,"pass")<br />
としてできた、enc_dataの内容をJavascript側のdataに入れてやれば、hogehogeと戻せる感じでした。<br />
<br />VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-35320148337098991682017-10-07T23:09:00.000+09:002017-10-07T23:11:41.555+09:00awsのlambdaとAPI Gatewayを使って、ちょっとはまったことほとんど使っている人はいないのですが、<br />
<a href="https://play.google.com/store/apps/details?id=vivahiraj.barcotter" target="_blank">barcotter</a>というバーコードから、そのバーコードに対応するamazonのリンクを作成するandroidアプリを作っています。<br />
これのバーコードからamazonのリンクを生成する部分は、サーバを用意して、このサーバ側で行っています。<br />
<br />
最初は、サーバは<br />
Google App Engine(python)<br />
で作っていたのですが、なんかのサポートが切れることをきっかけに<br />
Open Shift(Ruby on Rails)<br />
に乗り換えたのですが、こちらも最近サポートが切れる部分があったので、これをきっかけに、今回サーバ側を<br />
aws lambda(python)<br />
に乗り換えてみました。<br />
<br />
今回、lambdaに乗り換えて、いざアプリを利用してみると<br />
type java.lang.String cannot be converted to JSONObject<br />
というエラーが出てjsonのパースができない状態になりました。<br />
<br />
原因は、すごく些細でlamdbaでjsonを返すには<br />
handler内で辞書オブジェクトをreturnしてやればよかったのに、<br />
わざわざ辞書オブジェクトをjson.dumpsして文字列にしたものをreturnしてしまって、<br />
これが原因でパースできなかったというものでした。<br />
<br />
普通に辞書オブジェクトでreturnすると、ちゃんとbodyに以下のようにjsonが<br />
{ 'aaa': 'bbb', 'ccc': 'ddd'}<br />
となるのですが、文字列で返すとbodyに<br />
"{ 'aaa': 'bbb', 'ccc': 'ddd'}"<br />
<div>
とダブルコーテーションがついてしまって、これのせいでパースに失敗していました。</div>
<div>
<br /></div>
<div>
これに気づくまで、無駄に時間がかかってしまいました。</div>
<div>
<br /></div>
<div>
あと、結果的には関係ないのかもしれませんが</div>
<div>
パースできないのが、文字コードがうまく処理できないのかと思い、</div>
<div>
API Gatewayのメソッドレスポンスの</div>
<div>
<div>
HTTP のステータス200 の</div>
<div>
レスポンス本文のコンテンツタイプが</div>
<div>
application/json</div>
<div>
だったものを</div>
</div>
<div>
application/json;charset=UTF-8</div>
<div>
とcharsetを追加しました。</div>
<div>
<br /></div>
<div>
とりあえず無事に移行できました。</div>
<div>
<br /></div>
VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-72842895800978246212017-08-31T23:41:00.000+09:002017-08-31T23:41:33.235+09:00sinatraでベーシック認証した時のユーザ名とパスワードを取得するapacheなどのwebサーバ側でベーシック認証させておいて、<br />
sinatra側で、その時のユーザ名とパスワードを取得する方法です。<br />
<br />
<br />
<pre>auth_info = Base64.decode64(request.env['HTTP_AUTHORIZATION'].split(' ')[1]).split(':')
username = auth_info[0]
password = auth_info[1]
</pre>
VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-64621340538403763482017-04-04T22:55:00.000+09:002017-04-04T22:58:21.732+09:00LINE BOT APIを使っていたものをLINE Messaging APIに書き直すすごく今更ですが、以前LINE BOT APIを使ってみたものを、LINE Messaging APIに直したものを紹介します。<br />
<br />
ちなみにLINE Messaging APIを始めるには、以下が参考になりました。<br />
<a href="http://milk0824.hatenadiary.jp/entry/2016/10/01/211555" target="_blank">http://milk0824.hatenadiary.jp/entry/2016/10/01/211555</a><br />
<br />
まずは、<br />
<a href="https://kingyo-bachi.blogspot.jp/2016/04/line-bot-apicallbackaws-lambda.html" target="_blank">LINE BOT APIのcallbackにAWS Lambdaを使ってみる</a><br />
を直したのは、以下のような感じです。<br />
<script src="https://gist.github.com/vivahiraj/bfe6b9d2c5d0a093684db344be95f6e4.js"></script>
<br />
お次は、rubyで書いたものです。<br />
ruby2.0以上ならば、line-bot-apiというgemがあり、こっちを使うと、もうちょっと楽にかけそうなのですが、以下はruby1.9でも動くことを前提としているのでline-bot-apiは使っていません。<br />
<br />
rubyで書いたものの最初の、<br />
<a href="https://kingyo-bachi.blogspot.jp/2016/04/line-bot-api_30.html" target="_blank">LINE BOT APIを利用して電車遅延情報の送信を改良した</a><br />
を直したのは、以下のような感じです。<br />
<script src="https://gist.github.com/vivahiraj/e0c4c36d417853c9ca05acb8dc62993c.js"></script>
<br />
そして、<br />
<a href="https://kingyo-bachi.blogspot.jp/2016/05/line-bot-apigoogle-calendar.html" target="_blank">LINE BOT APIを利用してGoogle Calendarの情報を通知する</a><br />
を直したのは、以下のような感じです。<br />
ちなみにキャンセルされた予定の処理を追加しています。<br />
<script src="https://gist.github.com/vivahiraj/4ede96371463d03aeff547072149c5e8.js"></script>
<br />
最後に、<br />
<a href="https://kingyo-bachi.blogspot.jp/2016/05/line-bot-api.html" target="_blank">LINE BOT APIを利用して雨が降りそうな時は通知するようにしてみる</a><br />
を直したのは、以下のような感じです。<br />
<script src="https://gist.github.com/vivahiraj/e7b0a1dd87ab0b1d0e8bdfaef8f40621.js"></script>
VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-4996734899837558592017-03-24T21:45:00.001+09:002017-03-24T21:45:09.564+09:00railsの開発環境のjavascriptがなんだかよくわからないことになった時の対策railsのdevelopment環境でいろいろいじっているうちに<br />
なぜだかわからないのですが、jqueryの動きがあやしい感じになってしまいました。<br />
<br />
xhrで投げた結果を受け取って、それを画面の置き換えるのが、うまく動かなかったり<br />
imageの位置を変な感じで取得しようとして受け取れなかったり<br />
みたいな感じになっていました。<br />
<br />
原因は、もうわからなかったのですが、<br />
<pre wrap="">rake assets:clean</pre>
<pre wrap=""><div style="font-family: Meiryo; white-space: normal;">
で一回asset関連をクリーンしたら、うまく動くようになりました。</div>
<div style="font-family: Meiryo; white-space: normal;">
</div>
<div style="font-family: Meiryo; white-space: normal;">
</div>
<div style="font-family: Meiryo; white-space: normal;">
</div>
</pre>
VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-85591274057690845792016-11-26T23:56:00.001+09:002016-11-26T23:56:41.324+09:00yahooあんしんねっとが終わるようなので対応を考えてみた家で使っているAndroidタブレットでは、Androidの機能を利用して子供用のアカウントを作って利用できるアプリを制限して使わせています。<br />
なので変なアプリを入れる可能性は低いと思っているのですが、ブラウザでなんでも調べられるのはどうかなぁと考えてyahooあんしんねっとを入れて、これを使えるようにしていました。<br />
<br />
しかしyahooあんしんねっとが2016/12/20に終了してしまう模様です。<br />
webで検索の手段が使えないのもいまいちなので別の手段を探していました。<br />
<br />
無料でよさそうなかなぁと思ったのは、<br />
シマンテックの<a href="https://family.norton.com/web/" target="_blank">ノートンファミリー</a><br />
かなぁと思ったりもしたのですが、ちょっと大げさすぎるかなぁとも思ってみました。<br />
<br />
いろいろ調べていたら<br />
<a href="https://support.norton.com/sp/ja/jp/home/current/solutions/v53246970_EndUserProfile_ja_jp" target="_blank">ノートン コネクトセーフ</a><br />
というものがあることを知りました。<br />
これはシマンテックが公開しているDNSのようです。<br />
<br />
今回は、ブラウザ経由で変なサイトに飛ばないようにしたいので、このDNSを設定することにしてみました。<br />
AndroidでDNS設定をするには、いかが参考になります。<br />
<a href="http://did2memo.net/2015/04/08/android-wifi-dns-8-8-8-8/" target="_blank">http://did2memo.net/2015/04/08/android-wifi-dns-8-8-8-8/</a><br />
上記では、8.8.8.8を設定していますが、この部分を<a href="https://support.norton.com/sp/ja/jp/home/current/solutions/v53246970_EndUserProfile_ja_jp" target="_blank">ノートン コネクトセーフ</a>のDNSを設定しました。<br />
<br />
これで子供用アカウントでchromeを使えるようにしてみました。<br />
<br />
その上でさらに以下で紹介されていたgoogleのセーフサーチの設定もしてみました。<br />
<a href="http://rezv.net/android/557/" target="_blank">http://rezv.net/android/557/</a><br />
<br />
とりあえず、これで当面様子を見てみようかと思っています。<br />
<br />VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-87910763277284647632016-08-05T23:13:00.000+09:002016-08-07T21:24:08.638+09:00capybaraとseleniumを使ってrubyでできてないwebサイトのテストをする普段はrailsを使っているのでrspecを使ったテストを書いているのですが、このテストを既存のrubyを使ってないwebサイトの試験に使ってみることを試してみました。
<br />
<br />
前提は以下のような感じです。<br />
・テストはWindows上でInternetExplorerを利用して行う<br />
・データベースはMS SQL server<br />
・webサイトはASP.Netで書かれている(htmlを出力しているなら言語は問わないはずです)<br />
・テスト用のデータベース、webサイトを専用に用意する<br />
※今回database_cleanerを利用しているので既存データがあったらごっそり消えます。<br />
<br />
windows環境でrubyが使えるようにする手順は省略します。<br />
bundlerとrspecをgem installして利用できるところまでは準備してください。<br />
<br />
<br />
まずInternetExplorerをseleniumで利用できるように準備します。<br />
IE用のドライバを以下から取得します。<br />
<a href="http://docs.seleniumhq.org/download/" target="_blank">http://docs.seleniumhq.org/download/</a><br />
ダウンロードしたzipファイル内の<br />
IEDriverServer.exe<br />
を<br />
c:\ruby\bin<br />
などのパスが通っているフォルダに配置してください。<br />
そしてIEの設定を確認します。<br />
インターネットオプション<br />
セキュリティで<br />
各ゾーンの<br />
保護モードを有効にする<br />
のチェック状態をすべてのゾーンで同じにするように設定しておく必要があります。<br />
<br />
<br />
ここからテストプログラム用の環境を作っていきます。<br />
ちなみに、ここから作成するファイルの文字コードはすべてUTF-8です。<br />
<br />
まず適当なフォルダを作成して、その作成したフォルダ内で以下を実行します。<br />
<pre>rspec --init</pre>
<br />
フォルダ内にGemfileを準備します。<br />
Gemfile<br />
<script src="https://gist.github.com/vivahiraj/568e4f07445e0c9078c8c59bdd9f355a.js?file=Gemfile"></script>
<br />
必要なgemをインストールするためフォルダ内で以下を実行します。<br />
<pre>bundle install</pre>
<br />
<br />
rspec設定ファイル(.rspec)を作成します。<br />
.rspec<br />
<script src="https://gist.github.com/vivahiraj/568e4f07445e0c9078c8c59bdd9f355a.js?file=.rspec"></script>
<br />
フォルダ内にconfigフォルダを作成して、その中にデータベース接続設定ファイルを作成します。<br />
config/database.yml<br />
<script src="https://gist.github.com/vivahiraj/568e4f07445e0c9078c8c59bdd9f355a.js?file=database.yml"></script>
<br />
フォルダ内にspecフォルダを作成して、その中にspec_helperを作成します。<br />
spec/spec_helper.rb<br />
<script src="https://gist.github.com/vivahiraj/568e4f07445e0c9078c8c59bdd9f355a.js?file=spec_helper.rb"></script>
<br />
データベースのデータにアクセスするためのActiveRecordモデルを作成します。<br />
specフォルダ内にmodelsフォルダを作成して、ここにrailsと同じようにモデルを作成します。<br />
ここではItemクラスを例として作成しています。<br />
spec/models/items.rb<br />
<script src="https://gist.github.com/vivahiraj/568e4f07445e0c9078c8c59bdd9f355a.js?file=moodels_items.rb"></script>
<br />
データベースにテストデータを登録するためのFactoryGirlの設定を作成します。<br />
specフォルダ内にfactoriesフォルダを作成して、この中に作成します。<br />
上記のItemクラスに設定する値を例として作成しています。<br />
spec/factories/items.rb<br />
<script src="https://gist.github.com/vivahiraj/568e4f07445e0c9078c8c59bdd9f355a.js?file=factories_items.rb"></script>
<br />
これらの準備ができたらspecフォルダ内にspecファイルを作成します。<br />
spec/sample_spec.rb<br />
<script src="https://gist.github.com/vivahiraj/568e4f07445e0c9078c8c59bdd9f355a.js?file=sample_spec.rb"></script>
<br />
テストの実行は作成したフォルダの一番上(Gemfileがあるところ)で以下を実行します。<br />
<pre>rspec</pre>
<br />
<br />
こんな感じでとりあえず、データベースにテスト用データを突っ込んで、毎回データベースを初期化するための環境ができあがります。<br />
<br />
<br />
今回のフォルダ構成をまとめると以下のような感じなります。<br />
<pre>+-config
| +-database.yml
+-spec
| +-factories
| | +-items.rb
| +-models
| | +-items.rb
| +-spec_helper.rb
| +-sample_spec.rb
+-.rspec
+-Gemfile
+-Gemfile.lock
</pre>
<br />
<br />
以下のサイトが参考になりました。<br />
<a href="http://kakakakakku.hatenablog.com/entry/2016/01/09/142221" target="_blank">http://kakakakakku.hatenablog.com/entry/2016/01/09/142221</a><br />
<br />
<br />VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-62458407893709068302016-05-13T23:21:00.000+09:002016-11-06T22:00:23.914+09:00お気に入りのマンガを紹介してみますただなんとなく私のお気に入りのマンガを紹介してみます。<br />
タイトルだけをつらつらと書いていきます。<br />
<br />
・未完<br />
ONE PIECE、弱虫ペダル、海街diary、銀の匙 Silver Spoon、<br />
僕のヒーローアカデミア、鬼灯の冷徹、神様のバレー、ばらかもん、<br />
あさひなぐ、キングダム、ダンジョン飯、ボールルームへようこそ、<br />
3月のライオン、リアル、宇宙兄弟<br />
<br />
<a href="http://www.amazon.co.jp/gp/product/4088725093/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4088725093&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4088725093&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=4088725093" height="1" style="border: none !important; margin: 0px !important;" width="1">
<a href="http://www.amazon.co.jp/gp/product/4253214517/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4253214517&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4253214517&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=4253214517" height="1" style="border: none !important; margin: 0px !important;" width="1">
<a href="http://www.amazon.co.jp/gp/product/4091670253/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4091670253&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4091670253&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=4091670253" height="1" style="border: none !important; margin: 0px !important;" width="1">
<a href="http://www.amazon.co.jp/gp/product/4091231802/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4091231802&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4091231802&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=4091231802" height="1" style="border: none !important; margin: 0px !important;" width="1">
<br />
<a href="http://www.amazon.co.jp/gp/product/4088802640/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4088802640&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4088802640&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=4088802640" height="1" style="border: none !important; margin: 0px !important;" width="1">
<a href="http://www.amazon.co.jp/gp/product/4063870170/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4063870170&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4063870170&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=4063870170" height="1" style="border: none !important; margin: 0px !important;" width="1">
<a href="http://www.amazon.co.jp/gp/product/4832233599/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4832233599&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4832233599&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=4832233599" height="1" style="border: none !important; margin: 0px !important;" width="1">
<a href="http://www.amazon.co.jp/gp/product/4757526164/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4757526164&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4757526164&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=4757526164" height="1" style="border: none !important; margin: 0px !important;" width="1">
<br />
<a href="http://www.amazon.co.jp/gp/product/4091837980/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4091837980&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4091837980&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=4091837980" height="1" style="border: none !important; margin: 0px !important;" width="1">
<a href="http://www.amazon.co.jp/gp/product/408877079X/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=408877079X&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=408877079X&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=408877079X" height="1" style="border: none !important; margin: 0px !important;" width="1">
<a href="http://www.amazon.co.jp/gp/product/4047301531/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4047301531&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4047301531&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=4047301531" height="1" style="border: none !important; margin: 0px !important;" width="1">
<a href="http://www.amazon.co.jp/gp/product/4063713296/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4063713296&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4063713296&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=4063713296" height="1" style="border: none !important; margin: 0px !important;" width="1">
<br />
<a href="http://www.amazon.co.jp/gp/product/4592145119/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4592145119&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4592145119&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=4592145119" height="1" style="border: none !important; margin: 0px !important;" width="1">
<a href="http://www.amazon.co.jp/gp/product/408876143X/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=408876143X&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=408876143X&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=408876143X" height="1" style="border: none !important; margin: 0px !important;" width="1">
<a href="https://www.amazon.co.jp/%E5%AE%87%E5%AE%99%E5%85%84%E5%BC%9F-%E3%83%A2%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-KC-%E5%B0%8F%E5%B1%B1-%E5%AE%99%E5%93%89/dp/4063726746/ref=as_li_ss_il?s=books&ie=UTF8&qid=1478437033&sr=1-21&linkCode=li2&tag=gyotech-22&linkId=399966e7f3e5e7d8059b4128c5c72bfd" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4063726746&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=li2&o=9&a=4063726746" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
<br />
<br />
<br />
・完結<br />
ジョジョの奇妙な冒険、SLAM DUNK(スラムダンク)、機動警察パトレイバー、鋼の錬金術師、<br />
金色のガッシュ、MASTERキートン、PLUTO、動物のお医者さん、<br />
とめはねっ! 鈴里高校書道部、僕だけがいない街、うしおととら、四月は君の嘘、<br />
87CLOCKERS、俺物語!<br />
<br />
<a href="http://www.amazon.co.jp/gp/product/4088511263/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4088511263&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4088511263&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=4088511263" height="1" style="border: none !important; margin: 0px !important;" width="1">
<a href="http://www.amazon.co.jp/gp/product/4088716116/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4088716116&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4088716116&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=4088716116" height="1" style="border: none !important; margin: 0px !important;" width="1">
<a href="http://www.amazon.co.jp/gp/product/4091221211/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4091221211&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4091221211&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=4091221211" height="1" style="border: none !important; margin: 0px !important;" width="1">
<a href="http://www.amazon.co.jp/gp/product/4757506201/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4757506201&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4757506201&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=4757506201" height="1" style="border: none !important; margin: 0px !important;" width="1">
<br />
<a href="http://www.amazon.co.jp/gp/product/4091262317/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4091262317&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4091262317&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=4091262317" height="1" style="border: none !important; margin: 0px !important;" width="1">
<a href="http://www.amazon.co.jp/gp/product/4091816916/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4091816916&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4091816916&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=4091816916" height="1" style="border: none !important; margin: 0px !important;" width="1">
<a href="http://www.amazon.co.jp/gp/product/4091874312/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4091874312&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4091874312&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=4091874312" height="1" style="border: none !important; margin: 0px !important;" width="1">
<a href="http://www.amazon.co.jp/gp/product/459211082X/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=459211082X&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=459211082X&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=459211082X" height="1" style="border: none !important; margin: 0px !important;" width="1">
<br />
<a href="http://www.amazon.co.jp/gp/product/409151197X/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=409151197X&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=409151197X&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=409151197X" height="1" style="border: none !important; margin: 0px !important;" width="1">
<a href="http://www.amazon.co.jp/gp/product/4041205573/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4041205573&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4041205573&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=4041205573" height="1" style="border: none !important; margin: 0px !important;" width="1">
<a href="http://www.amazon.co.jp/gp/product/4091224814/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4091224814&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4091224814&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=4091224814" height="1" style="border: none !important; margin: 0px !important;" width="1">
<a href="http://www.amazon.co.jp/gp/product/B00AF5PJOM/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=B00AF5PJOM&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B00AF5PJOM&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=B00AF5PJOM" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;">
<br />
<a href="http://www.amazon.co.jp/gp/product/4088793048/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4088793048&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4088793048&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=4088793048" height="1" style="border: none !important; margin: 0px !important;" width="1">
<a href="http://www.amazon.co.jp/gp/product/4088467566/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4088467566&linkCode=as2&tag=gyotech-22"><img border="0" src="https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4088467566&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gyotech-22"></a><img alt="" border="0" src="https://ir-jp.amazon-adsystem.com/e/ir?t=gyotech-22&l=as2&o=9&a=4088467566" height="1" style="border: none !important; margin: 0px !important;" width="1">
<br />
<br />
<br />
<br />
<br />VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-69809388076232127862016-05-09T22:39:00.000+09:002017-04-04T23:07:35.711+09:00LINE BOT APIを利用して雨が降りそうな時は通知するようにしてみる※サンプルをLINE BOT APIからLINE Messaging APIに書き換えたものを以下で公開しました。<br />
<a href="https://kingyo-bachi.blogspot.jp/2017/04/line-bot-apiline-messaging-api.html" target="_blank">https://kingyo-bachi.blogspot.jp/2017/04/line-bot-apiline-messaging-api.html</a><br />
<br />
<a href="https://kingyo-bachi.blogspot.jp/2016/04/line-bot-api_30.html" target="_blank">LINEで電車遅延情報を送ってみる</a><br />
と<br />
<a href="https://kingyo-bachi.blogspot.jp/2016/05/line-bot-apigoogle-calendar.html" target="_blank">LINEでGoogle Calendarの情報を送ってみる</a><br />
に続きLINEで雨が降りそうな時に通知してみることにしてみます。<br />
<br />
天気に関する情報を取得する手段はいろいろあるのですが、降水確率を取得する手段はあまりなく、以下ぐらいしか見つけられませんでした。<br />
<a href="http://www.drk7.jp/weather/" target="_blank">http://www.drk7.jp/weather/</a><br />
こちらを活用させていただきます。<br />
<br />
家を出る直前ぐらいにLINEで通知する感じにして祝日は通知しないようにしたいと思います。<br />
<br />
以下のような感じになります。<br />
<br />
<script src="https://gist.github.com/vivahiraj/726c12da72a5dfea641c5b3288444929.js"></script><br />
<br />
これを以下のような感じでcron設定して月曜から金曜までの出勤前の6:50に動作するようにしました。<br />
<pre>50 6 * * 1,2,3,4,5 /usr/bin/ruby /home/hogehoge/ruby/line_bot/rain_chk.rb >> /home/hogehoge/ruby/line_bot/rain_chk.log
</pre>
<br />
毎日、朝お天気アプリを見て天気を見ているのに、出る直前には傘を持つことを忘れてしまうので何かの形でわかるようにしたいと思ったわけです。<br />
<br />
一番よいのは傘が置いてあるところでわかりやすく気付ける形になれればよいのですけどね。<br />
<br />
<br />VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-25944124285181421672016-05-07T22:13:00.001+09:002017-04-04T23:06:36.697+09:00LINE BOT APIを利用してGoogle Calendarの情報を通知する※サンプルをLINE BOT APIからLINE Messaging APIに書き換えたものを以下で公開しました。<br />
<a href="https://kingyo-bachi.blogspot.jp/2017/04/line-bot-apiline-messaging-api.html" target="_blank">https://kingyo-bachi.blogspot.jp/2017/04/line-bot-apiline-messaging-api.html</a><br />
<br />
LINEに<a href="https://kingyo-bachi.blogspot.jp/2016/04/line-bot-api_30.html" target="_blank">電車遅延情報を送ってみる</a>に続き、Google Calendarの情報を送ってみます。<br />
<br />
Google Calendarの情報を取得するには、<br />
<a href="https://kingyo-bachi.blogspot.jp/2013/12/rubygoogle-calendar.html" target="_blank">rubyでGoogle Calendarをいじる</a><br />
を参考にしていただけたらと思います。<br />
google-api-clientを利用するのですが、今回は古いバージョンの0.6.4を利用します。<br />
最新バージョンでは結構使い方が変わっているようです。<br />
<br />
そして情報を取得したいユーザのoauth情報を取得した「.google-api.yaml」を作成しておいて以下のプログラムと同じ場所に置いておきます。<br />
以下は明日の予定をチェックして予定があればLINEに通知するものになります。<br />
<br />
<script src="https://gist.github.com/vivahiraj/bf838827df7b9fb9d4778b366e46568a.js"></script><br />
<br />
ローカル環境で利用することを前提にしています。
送信先IDはcallbackを設定してなんとか事前に取得しておく必要があります。<br />
<br />
これを以下のような感じでcron設定して毎日23:10に動作するようにしました。
<br />
<pre>10 23 * * * /usr/bin/ruby /home/hogehoge/ruby/line_bot/gcal_chk.rb >> /home/hogehoge/ruby/line_bot/gcal_chk.log
</pre>
<br />
<br />
Google Nowを使っていれば不要な気がするけれど、いずれLINE BOT APIでグループチャットにもメッセージが送れるようになると信じて、その時はグループチャットにグループの予定を送るものとして使いたいなぁと思ってみたりしています。<br />
<br />VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-47329358875037096902016-04-30T21:34:00.000+09:002017-04-04T23:05:35.937+09:00LINE BOT APIを利用して電車遅延情報の送信を改良した※サンプルをLINE BOT APIからLINE Messaging APIに書き換えたものを以下で公開しました。<br />
<a href="https://kingyo-bachi.blogspot.jp/2017/04/line-bot-apiline-messaging-api.html" target="_blank">https://kingyo-bachi.blogspot.jp/2017/04/line-bot-apiline-messaging-api.html</a><br />
<br />
以前<br />
<a href="http://kingyo-bachi.blogspot.jp/2016/04/line-bot-api_27.html" target="_blank">LINE BOT APIを利用して電車遅延情報を送信する</a><br />
というのを書いたのですが、ちょっと改造しました。<br />
<br />
以下をできるようにしようと思います。<br />
・祝日は通知しなくてよくしたい<br />
・localで実行しているがIPアドレスが変わる可能性があるので送信できなかったときはメール通知をしたい<br />
<br />
祝日に関してはholiday_jpというgemを使って判別することにしました。<br />
<a href="https://github.com/komagata/holiday_jp" target="_blank">https://github.com/komagata/holiday_jp</a><br />
<br />
メール送信はGmailを利用しようと思います。以下が参考になりました。<br />
<a href="http://qiita.com/nownabe/items/3a348c86b3c0a2c87ab0" target="_blank">http://qiita.com/nownabe/items/3a348c86b3c0a2c87ab0</a><br />
<a href="http://grottad.com/blog/228" target="_blank">http://grottad.com/blog/228</a><br />
<br />
<br />
で、改良版の電車遅延情報を送信するものは以下のとおりです。<br />
<br />
<script src="https://gist.github.com/vivahiraj/1ba7096081d7fd0fe79ad1c4a7281d98.js"></script><br />
<br />
これを以下のような感じでcron設定して月曜から金曜までの出勤前の6:50に動作するようにしました。<br />
<pre>50 6 * * 1,2,3,4,5 /usr/bin/ruby /home/hogehoge/ruby/line_bot/train_chk2.rb >> /home/hogehoge/ruby/line_bot/train_chk.log
</pre>
<br />VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-77885986577046272412016-04-29T22:04:00.002+09:002016-04-29T22:04:35.493+09:00財布を買い換えてみた今まで以下の「エムピウ m+ 二つ折り財布」を使っていたのですが、だいぶボロになってきてしまいました。<br />
<br />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=gyotech-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B00H4T55AU" style="height: 240px; width: 120px;"></iframe>
<br />
<br />
買い換えるにあたり財布の中身を断捨離してコンパクトなものにしたいなぁと思ったわけです。<br />
またキーホルダーもちょっとついでに買い換えたいなぁと思ったわけです。<br />
<br />
最初に気になったのは、以下の「薄いマネークリップ abrAsus (アブラサス)」と「小さい小銭入れ abrAsus (アブラサス)」の組み合わせです。<br />
<br />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=gyotech-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B00IZGVP5U" style="height: 240px; width: 120px;"></iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=gyotech-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B00IZH4RYA" style="height: 240px; width: 120px;"></iframe>
<br />
<br />
ですが、本当にこのサイズでいけるのかが不安であったりもします。いざ買ってみてちょっと合わなかった場合を考えるとちょっとお高めな感じもします。
<br />
なのでもうちょっとお安く同じようなものがないか探して見ました。<br />
<br />
「小さい小銭入れ abrAsus (アブラサス)」の代わりになるものは、なかかなか見つからなかったのですが以下を見つけました。<br />
<br />
<table border="0" cellpadding="0" cellspacing="0"><tbody>
<tr><td><div style="background-color: white; border: 1px solid #000000; margin: 0px; max-width: 250px; padding-top: 6px; text-align: center;">
<a href="http://hb.afl.rakuten.co.jp/hgc/14e462b9.58738ae4.14e462ba.78bd4323/?pc=http%3A%2F%2Fitem.rakuten.co.jp%2Fsumajyo%2Flt_co_002_c&m=http%3A%2F%2Fm.rakuten.co.jp%2Fsumajyo%2Fi%2F10267428%2F&scid=af_item_tbl&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwiY29tIjoxLCJjb21wIjoiZG93biIsInByaWNlIjoxLCJib3IiOjEsImNvbCI6MCwidGFyIjoxfQ%3D%3D" style="word-wrap: break-word;" target="_blank"><img border="0" src="http://hbb.afl.rakuten.co.jp/hgb/14e462b9.58738ae4.14e462ba.78bd4323/?me_id=1298384&item_id=10267428&m=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Fsumajyo%2Fcabinet%2Fleather%2Fitem%2Fco%2Flt_co_002_a_cart.jpg%3F_ex%3D80x80&pc=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Fsumajyo%2Fcabinet%2Fleather%2Fitem%2Fco%2Flt_co_002_a_cart.jpg%3F_ex%3D240x240&s=240x240&t=picttext" style="margin: 2px;" /></a><br />
<div style="font-size: 12px; line-height: 1.4em; margin: 0px; padding: 2px 6px; text-align: left; word-wrap: break-word;">
<a href="http://hb.afl.rakuten.co.jp/hgc/14e462b9.58738ae4.14e462ba.78bd4323/?pc=http%3A%2F%2Fitem.rakuten.co.jp%2Fsumajyo%2Flt_co_002_c&m=http%3A%2F%2Fm.rakuten.co.jp%2Fsumajyo%2Fi%2F10267428%2F&scid=af_item_tbl&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwiY29tIjoxLCJjb21wIjoiZG93biIsInByaWNlIjoxLCJib3IiOjEsImNvbCI6MCwidGFyIjoxfQ%3D%3D" style="word-wrap: break-word;" target="_blank">レザー製キー&コインケース/極小コインケース/財布/小銭入れ/キーケース/おしゃれ/レザー/本革/牛革/手作り/雑貨/デザイン文具/ギフト/革/レザー/小さい小銭入れ/極小/レディース/メンズ/コンパクト/女性用/男性用/キーホルダー【雑貨micke!】/02P23Sep15</a><br />
価格:2980円(税込、送料別)</div>
</div>
<br />
<div style="font-size: 12px; line-height: 1.4em; margin: 5px; word-wrap: break-word;">
</div>
</td></tr>
</tbody></table>
<br />
<br />
<br />
「薄いマネークリップ abrAsus (アブラサス)」の方は、お安めのマネークリップがそこそこありました。<br />
その中で以下を選んで見ました。断捨離実行に弱気になってカードがそこそこ入るのがポイントです。<br />
<br />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=gyotech-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B019GFJTRE" style="height: 240px; width: 120px;"></iframe>
<br />
そしてカードを断捨離しきれなかった保険として以下も買いました。<br />
<br />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=gyotech-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B007E6BW28" style="height: 240px; width: 120px;"></iframe>
<br />
とりあえず入れ替えてみた結果、以下のような感じになりました。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3bu-mBnaPAXnEe-AhU_dAiUtVTWinoRXKOsW35RA4-ymjgPVp67UsdH7HRy-ZKMpZxR_RKkQzBo8b4ybsbTnj-jp-xHMiPIdKB72BjSPCDxIQO2eTcHROGJKmcsH1MpAVYOBjQwmIcKw/s1600/DSC_0026.JPG" imageanchor="1"></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiep17YeoBdjRIRknM6qGqW4Uq0rDaZth6dTRoq5OglLARyVYwewZZMKYJLKCuqfxb547GWReX8MHVKqzLzssVatShT8a7NRH2sLs8dm7KuDlj6tSaFJI-Bm8_A3GFJfOg8-CwB8aPn1Mc/s1600/DSC_0027.JPG" imageanchor="1"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiep17YeoBdjRIRknM6qGqW4Uq0rDaZth6dTRoq5OglLARyVYwewZZMKYJLKCuqfxb547GWReX8MHVKqzLzssVatShT8a7NRH2sLs8dm7KuDlj6tSaFJI-Bm8_A3GFJfOg8-CwB8aPn1Mc/s320/DSC_0027.JPG" width="320" /></a><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3bu-mBnaPAXnEe-AhU_dAiUtVTWinoRXKOsW35RA4-ymjgPVp67UsdH7HRy-ZKMpZxR_RKkQzBo8b4ybsbTnj-jp-xHMiPIdKB72BjSPCDxIQO2eTcHROGJKmcsH1MpAVYOBjQwmIcKw/s320/DSC_0026.JPG" width="320" /><br />
<br />
カードの断捨離を全然していないのでトータルの厚みは増えてしまっています。<br />
そのうち断捨離するとして、とりあえず違う場所にしまえるようになったので、まぁよしとします。<br />
<br />
ちょっと使ってみた感想としては、もともと財布を入れていた場所がマネークリップだけになっているので軽い感じにはなっています。<br />
あとキーホルダーと小銭要れが一緒になったので軽い買い物は、これだけでいけるのも便利です。<br />
<br />
今まで一つの財布に入っていたものが分かれてしまっている、ちょっとまだどこに何を入れたかがあやふやだったり、場合によっては二つ出さないといけないので戸惑いはありますが、きっとなれていくことでしょう。<br />
<br />
<br />
<br />
<br />
<br />VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0tag:blogger.com,1999:blog-469557205682802052.post-83974440258384418642016-04-27T22:53:00.000+09:002016-04-27T22:53:53.502+09:00LINE BOT APIを利用して電車遅延情報を送信するLINE BOT APIを利用してメッセージを送信するには、以下のような感じでできます。<br />
<br />
<script src="https://gist.github.com/vivahiraj/85876c1aa82c9a1a43e874e1182902e8.js"></script><br />
<br />
ローカル環境で利用することを前提にしています。<br />
送信先IDはcallbackを設定してなんとか事前に取得しておく必要があります。<br />
<br />
これでメッセージは送信できたのですが、せっかくなので役に立つ機能を作りたいものです。<br />
なので電車が遅延していたら通知するbotを作ってみます。<br />
適当な時間に自動実行できるようにさせたら便利な気がします。<br />
<br />
電車遅延情報の取得は<br />
<a href="https://rti-giken.jp/fhc/api/train_tetsudo/" target="_blank">鉄道遅延情報のjson(https://rti-giken.jp/fhc/api/train_tetsudo/)</a><br />
を使わせていただきます。<br />
<br />
以下のような感じです。<br />
<br />
<script src="https://gist.github.com/vivahiraj/3a82857f26dbeceb066b34bcd7d62780.js"></script><br />
<br />
遅延を確認したい電車情報の部分は、<br />
<a href="https://rti-giken.jp/fhc/api/train_tetsudo/" target="_blank">鉄道遅延情報のjson(https://rti-giken.jp/fhc/api/train_tetsudo/)</a><br />
<div>
を見ながら適当に変更します。</div>
<div>
<br /></div>
<div>
なんとなく便利そうな気がします。</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
LINE BOT APIを使ってみた感想としては、まだトライアルで機能が少ないので機能追加を期待したいところです。</div>
<div>
個人的には以下のような改善されるとうれしいなぁと思うしだいです。</div>
<div>
・グループチャットにbotから送信ができるようになってほしい</div>
<div>
・callbackがなくてもフレンドリストなどを取得できるようになってほしい</div>
<div>
・IPのホワイトリストは、めんどくさいのでなくしてもらいたいなぁ</div>
<div>
<br /></div>
VIVAHIRAJhttp://www.blogger.com/profile/09613361160338136322noreply@blogger.com0