2025-11-10

mysql5.6に監査ログを導入する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

 mysql 5.6で動かしていたものがそろそろ終了しようとしていて、本当に接続しているものがないかどうかを確認するために監査ログを設定しました。

mariadbのpluginを使う感じのようです。

手順は以下のような感じです。

wget https://downloads.mariadb.com/MariaDB/mariadb-5.5.68/bintar-linux-x86_64/mariadb-5.5.68-linux-x86_64.tar.gz

tar xvzf mariadb-5.5.68-linux-x86_64.tar.gz

cd mariadb-5.5.68-linux-x86_64/lib/plugin/

cp server_audit.so /usr/lib64/mysql/plugin/


mysql -u root

INSTALL PLUGIN server_audit SONAME 'server_audit.so';

SHOW PLUGINS;


vi /etc/my.cnf

[mysqld] セクションに追加

server_audit_logging=ON

server_audit_events=CONNECT,QUERY,TABLE

server_audit_output_type=FILE

server_audit_file_path=/var/log/mysql_audit.log

server_audit_file_rotate_size=1000000

server_audit_file_rotations=9


touch /var/log/mysql_audit.log

chown mysql:mysql /var/log/mysql_audit.log


service mysqld restart


2023-01-05

meishi2キーボードをカスタマイズしてレイヤー対応させてオンボードLEDも光らせてみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

 前回、meishi2キーボードを買って、キーを押したら「こんにちは~~」と出るようにしてみたというエントリを書いてみました。

ちょっとカスタマイズを加えてみます。

キーが4つだと寂しいのでレイヤー機能を使って、もう少しいろんなことをできるようにします。そしてどのレイヤーになっているかわかるようにレイヤーの状態に応じてオンボードLEDを光らせます。

変更するのは、keymap.cで以下のように変更します。

-----------------
#include QMK_KEYBOARD_H

#define PRO_MICRO_LED_TX D5
#define PRO_MICRO_LED_RX B0

#define SW_DEF_LAY TO(_DEFAULT)
#define SW_MES_LAY TO(_MESSAGE)

//KC_Q,KC_W,KC_Eを指定していますが、使わないキーを適当に割り当てています
enum custom_keycodes {
    HASE = KC_Q,
    WATA = KC_W,
    NORI = KC_E,
};

enum meishi2_moc_layers {
    _DEFAULT,
    _MESSAGE
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [_DEFAULT] = LAYOUT( /* Base */
    SW_MES_LAY, LCTL(KC_A), LCTL(KC_C), LCTL(KC_V)
  ),
  [_MESSAGE] = LAYOUT( /* Base */
    SW_DEF_LAY,HASE, WATA, NORI
  ),
};

void matrix_init_user(void) {
  setPinOutput(PRO_MICRO_LED_TX);
  writePinHigh(PRO_MICRO_LED_TX);
  setPinOutput(PRO_MICRO_LED_RX);
  writePinHigh(PRO_MICRO_LED_RX);
}

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    case HASE:
      if (record->event.pressed) {
        send_unicode_string("こんにちは~~");
      }
      return false;
      break;
    case WATA:
      if (record->event.pressed) {
        send_unicode_string("うるせ~よ");
      }
      return false;
      break;
    case NORI:
      if (record->event.pressed) {
        send_unicode_string("のりのりまさのり");
      }
      return false;
      break;
    case SW_DEF_LAY:
      if (record->event.pressed) {
        writePinHigh(PRO_MICRO_LED_TX);
        writePinHigh(PRO_MICRO_LED_RX);
      }
      break;
    case SW_MES_LAY:
      if (record->event.pressed) {
        writePinLow(PRO_MICRO_LED_TX);
        writePinLow(PRO_MICRO_LED_RX);
      }
      break;
  }
  return true;
}
-----------------

これで6つのキーが使えるようになりました。

そして、メッセージが出てくるレイヤーになっているときにはオンボードLEDが光るようになっています。


2022-12-30

meishi2キーボードを買って、キーを押したら「こんにちは~~」と出るようにしてみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

自作キーボードにちょっと興味が出たので、お気軽に試せそうなmeishi2キーボードを買ってみました。

購入は、遊舎工房から買ってみました。

https://shop.yushakobo.jp/products/834

作り方は、以下を見ながらです。

https://biacco42.hatenablog.com/entry/2019/08/10/185624

はんだづけは、へたくそなので作ったものはお見せできませんが、はんだづけする箇所はそんなに多くないので、へたくそでもきちんと動きました。

ファームウェアは、いろいろカスタマイズできそうなCUIを使った方法で行いました。

WSL2を利用して実施しています。

基本は、上記手順に書いてある方法でよいのですが、WSL2環境だとちょろちょろコンパイルする際にエラーが出ましたが以下を参考にすることでだいたい解決しました。

http://www.neko.ne.jp/~freewing/hardware/qmk_setup_environment_build/

コンパイルはできるのですが、WSL2からファームウェアを焼くことがどうもうまくいかなかったので、ファームウェアをやくときは、windows側にQMK Toolboxを以下から取得してインストールして行いました。

https://github.com/qmk/qmk_toolbox/releases

Windows側からWSL2のファイルを見るには、

\\wsl$

と指定すれば見れるので、wsl2側で作成したhexファイルを直接指定することができます。


カスタマイズとして、キーを押したら「こんにちは~~」と出るようにします。

meisihi2のデフォルトのキーマップは

qmk_firmware/keyboards/biacco42/meishi2/keymaps/default

にあるので、この横にカスタマイズ用ファイルの置き場所を以下のような感じで作ります。

qmk_firmware/keyboards/biacco42/meishi2/keymaps/mymap

このディレクトリの中に今回は以下の3つのファイルを用意しました。

config.h

keymap.c

rules.mk

それぞれ内容は以下になります。

config.h

今回WINDWOS環境を利用するのでUNICODE_MODE_WINCOMPOSEを指定しています。

---------------------------
#define UNICODE_SELECTED_MODES UNICODE_MODE_WINCOMPOSE
---------------------------


keymap.c

---------------------------
#include QMK_KEYBOARD_H

//KC_AとKC_Bを指定していますが、使わないキーを適当に割り当てています
enum custom_keycodes {
    HASE = KC_A,
    WATA = KC_B,
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [0] = LAYOUT( /* Base */
    HASE, WATA, LCTL(KC_C), LCTL(KC_V)
  )
};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    case HASE:
      if (record->event.pressed) {
        send_unicode_string("こんにちは~~");
      }
      return false;
      break;
    case WATA:
      if (record->event.pressed) {
        send_unicode_string("うるせ~よ");
      }
      return false;
      break;
  }
  return true;
}
---------------------------


rules.mk

ユニコードが利用できるようにします。

---------------------------
UNICODE_ENABLE = yes
---------------------------


これで以下のようにファームウェアをコンパイルします。

make biacco42/meishi2:mymap

出来上がったhexファイルをmeishi2にやきます。


meishi2側は、これでOKなのですが、このままでキーを押すとWindows側にはなんか数字やらがたくさん出てくる感じなってしまいます。

日本語を受け取るにはWindows側に以下からWinComposeを取得してインストールする必要があります。


これで無事にキーを押したら

「こんにちは~~」

と出てきてくれます。

2022-09-16

rubyで住所情報から都道府県を取り出す

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

 以下のような住所情報があったとします。

東京都府中市1-2-3 道路横ビル

これから都道府県と取り出し、それ以外と分離する場合は、以下のような感じで可能です。

org = "東京都府中市1-2-3 道路横ビル"

pref = org.match(/^.+?[都道府県]/).to_s

addr = org.sub(pref,"")

prefに都道府県、addrにそれ以外が入る感じなります。

都道府県取得の正規表現に?を忘れると

prefが「東京都府中市1-2-3 道」と最長一致なってしまうのでご注意です。


※やっぱりこれだと京都府がとれないです。

pref = org.match(/^.{2,3}[都道府県]/).to_s

の方がよさそうです。


※※上記では東京都府中市が東京都府になっちゃいます。最短一致させるための?を忘れてました。

pref = org.match(/^.{2,3}?[都道府県]/).to_s

の方がよさそうです。


2022-03-23

gitでレポートな感じ

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

 gitを運用していて、だれがどれくらい変更したんだろうとか調べたくなってみました。

とりあえず以下のようなことができるかなという感じです。


誰が何回commitしたか?

git shortlog --summary -n


特定の人が何行変更したか?

find app spec -type f | xargs -n1 git --no-pager blame -f -w|grep xxx| wc -l

上記では、app、spec配下のファイルをxxxさんが変更した行数を取得している感じです。


2020-08-10

CentOS6でActiveRecord::ConnectionNotEstablished: No connection pool with 'primary' found.というエラーが出たとき。

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

 CentOS6の環境でrailsのrspecの全件試験をしたときに、試験の後半で

「ActiveRecord::ConnectionNotEstablished:No connection pool with 'primary' found.」

というエラーが連発して発生することがありました。

エラーが発生したテストケースを個別に実行するとエラーがでない感じです。

どうも調べていたらCentOS6のulimitの上限がありそうな気配でした。

以下参考です。

CentOS6のプロセス数の上限

こちらを参考に

/etc/security/limits.d/90-nproc.conf

の内容を

*          soft    nproc     1024

から

*          soft    nproc     2048

へ変更したら無事にエラーが消えました。


2020-02-23

八朔にはムッキーちゃんがおすすめ

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
冬は八朔がおいしいですね。
でも皮や房を向くのがめんどくさいですね。

そこでおすすめムッキーちゃん。
前から気になってはいましたが、amazonの配送料を無料にするために買ってみました。

思った以上にラクチンでよいです。おススメです。


2019-07-19

mysqlでソートしたデータをヘッダーつきcsvに保存する方法

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
mysqlでorder byでソートしたデータをヘッダーつきのcsvファイルとして保存する方法です。

以下のようなsqlを実行する感じです。

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 ',';

これで

head1,head2,head3
1,bbb,ccc
2,aaa,bbb
3,ccc,aaa

みたいなcsvファイルが出力されます。

ポイントは、
・ヘッダーは、unionの前に記載
・ソートするsql文を、select * from (    ) as tmp で囲う
です。

以下を参考にしました。
https://stackoverflow.com/questions/3175312/select-union-and-order-by-in-mysql-how-to

2019-05-06

一つのDBを複数のrailsアプリから利用する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
RailsにAPIや管理画面やバッチツールなど、いろいろ機能が盛り込まれて大きくなってきて、それぞれの機能を分離したくなってきてみました。
この段階では、
app
という一つのリポジトリがある感じです。

分離自体は、役割が結構ちゃんとわかれていたので、それほど大変ではありませんでした。
この段階では、
app_api
app_admin
app_batch
のような三つのリポジトリがある感じです。

三つに別れましたが、共通のDBを利用する必要があって、分離されたアプリそれぞれにmigrationがあって、それをなんか変わったときに人手で同期させていたのですが、それぞれ独自にカラム追加したりして、だんだん見通しが悪くなってきて、ちょっと面倒になってきました。

dbを独立したリポジトリにしてよい感じで使えないかなぁと調べていたら、
というのがあることを知りました。
Ridgepoleでは、migrationのように変更を積み重ねるのではなく、最終的なテーブル定義を保持していて、dbとテーブル定義の差分を見て、dbを変更していく感じです。
dbの状態の見通しがよくなりそうだし、定義ファイルを独立したリポジトリで管理して、それぞれのリポジトリのsubmoduleとして取り込むとよさげかなと思ってみました。

というわけで、そのような環境を構築してみます。

以下を参考にしています。
https://re-engines.com/2017/05/03/370/#rails_migrateRidgepole-2

まずはGemfileに
gem 'ridgepole'
を追加して
bundle install
します。これでRidgepoleが利用できるようになります。

現在のdb定義からRidgepole用の定義ファイルを生成します。
bundle exec ridgepole -c config/database.yml -E development --split --export -o db/schemas/Schemafile

これで
db/schemas/
以下に定義ファイルが作成されます。

試しに定義ファイルの適用コマンドを試します。
bundle exec ridgepole -c config/database.yml -E development --apply -f db/schemas/Schemafile
当然、変更はありません。
念のため、test環境にも試します。
bundle exec ridgepole -c config/database.yml -E test --apply -f db/schemas/Schemafile
こちらも変更はありません。

ここまでくれば、migrationは不要になるので思い切って削除します。
rm -r db/migrate

あと、rspecのテストのために以下の変更もしたほうがよいようです。
spec/rails_helper.rb
の中の
ActiveRecord::Migration.maintain_test_schema!
の部分をコメントアウトします。
以下のような感じです。

#begin
#  ActiveRecord::Migration.maintain_test_schema!
#rescue ActiveRecord::PendingMigrationError => e
#  puts e.to_s.strip
#  exit 1
#end

とりあえず、ここでmigrationからRidgepoleに切り替えた感じになります。
Ridgepoleをより便利に使えるようにします。
以下を参考にしています。
https://qiita.com/ToqTock/items/c185a38fd4e2011ddd64

まずmigrationファイルを生成されないようにします。Myappの部分は環境にあわせて変えてください。
config/initializers/generator.rb



Ridgepoleのコマンドが長いのでdb:migrateのようにdb:applyみたいな感じを使えるようにします。
lib/tasks/ridgepole_tasks.rake



ここからdbの部分を以下のような感じで独自のリポジトリにします。
cp -pr db ~/app_db
cd ~/app_db
git init
git add *
git commit
git remote add origin app_db用リポジトリ
git push -u origin master
これで
app_api
app_admin
app_batch
app_db
の4つのリポジトリができましたが、この段階では、app_dbと同じ内容が個別にapp_apiなどにある感じです。

app_apiなどの各アプリのdbディレクトリgitのsubmoduleを利用してapp_dbのリポジトリを見るようにします。
git submoduleに関しては、以下が参考になりました。
https://qiita.com/sotarok/items/0d525e568a6088f6f6bb

cd ~/app_api
この中のdbディレクトリを削除してしまいます。
rm -r db
ここで以下のコマンドを実行してapp_dbをsubmoduleにしてdbに結び付けます。
git submodule add app_db用リポジトリ db
これでリポジトリは、以下のような感じになりました。
app_api(dbフォルダはapp_db)
app_admin(dbフォルダはapp_db)
app_batch(dbフォルダはapp_db)
app_db

これでそれぞれのアプリでdbに変更したものは、app_dbを介して、それぞれに配布できるようになりました。


2019-01-16

centos7でproxyを利用してgithubにssh接続する方法

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
sshで直接githubに接続できない環境でproxy経由で接続する方法です。

.ssh/config
に以下のような記載をすればOKです。

-----------------------
Host github.com
  HostName ssh.github.com
  Port 443
  ProxyCommand /usr/bin/ncat --proxy <server>:<port> --proxy-type http %h %p
-----------------------

これで
ssh -T git@github.com
で接続できることを確認したらgitも利用できるはずです。

以下を参考にさせていただきました。
https://qiita.com/n_slender/items/30db800aad7eb193c07e
https://qiita.com/vvisteria/items/bd748406671faae228cb

2018-10-14

redmineのパスワード管理のpluginであるVaultを入れてみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
redmineでプロジェクト管理していて、特定のサイトとかのパスワードをメンバーで利用する必要があって、なにかよいパスワード管理方法がないかなぁと思って探したところ、
Vault
というredmineのpluginを見つけたのでインストールして使ってみました。

インストール方法は、以下のような感じです。

まずは、redmineのpluginのディレクトリに移動してください。
cd redmine/plugins/

Vaultを取得します。
git clone https://github.com/noshutdown-ru/vault

インストールを実行します。
cd ..
bundle install --without development test
bundle exec rake redmine:plugins:migrate RAILS_ENV=production

ちょっと設定をいじります。
config/initializers/assets.rb
に、以下を追加します。
--------------------------
Rails.application.config.assets.precompile += %w( zeroclipboard.js )
--------------------------

これはいらないかもですが。。。
chown apache:apache keys

ここまできたら、webサーバを再起動します。

redmineにVaultが認識されているはずなので、設定をします。
redmineの「管理」「プラグイン」「Vault plugin 設定」「Vault settings」で以下の変更を行います。
Encryption keyに適当な文字列を16文字で設定して「適用」をクリックします。
(なんか16文字でないとエラーがでました。)
また、ちょっと気になったのは、redmineをサブフォルダで運用している場合に、
※The requested URL /vault_settings was not found on this server.
という感じのエラーが出てしまいますが、正しく保存されている模様なので気にしないことにします。


Vaultは、プロジェクトごとにパスワード管理をするようなので、
利用する場合は、各プロジェクトで
「設定」「モジュール」
にKeysが出てくるのでVaultを利用する場合にはチェックします。

これでプロジェクトで利用するパスワードは、ここで管理できます。ただ、プロジェクトまたがりで使うものを、共有して管理はできないようなので、プロジェクトまたがりで使うものがある場合は、専用のプロジェクトを用意するのがよいかもしれません。
また、Vaultは、パスワード毎に見れる人を設定できる気配です。

ちょっと、こちらをしばらく使ってみようかなぁと思ってみました。

以下のサイトを参考にさせていただきました。
俺的備忘録 〜なんかいろいろ〜 Redmineのパスワード管理プラグイン「Valut」を使ってみる

2017-12-28

raspberry pi zero wとダイソーのリモートシャッターとrubyで遊ぶ

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
raspberry pi zero wを買ったのは、bluetooth機器とつないで、ちょっと遊んでみたいなぁと思っていたことも一つの理由だったりします。

お手軽に遊ぶ材料として、ダイソーで売っているリモートシャッターがよさげかと思ってみました。以下と同じもののようです。



これを利用した例を以下のサイトを紹介していたので、参考にさせてもらいました。
https://qiita.com/vimyum/items/8b7548ca8cf45383c5b0

こちらでは、bluebuttonというツールを利用しているのですが、ソースは以下にあります。
https://github.com/kinnalru/bluebutton

こちらのソースを見て、ちょっと遊んでみました。
こちらでは、二つのボタンを特に区別してなくて、押したことと長押しを検出していたので、ボタンを識別できるよう改造してみました。

上のIOSボタンは、押すとVolumeUpが送られてきているようです。
下のandoridボタンは、押すとEnterが来て、さらにVolumeUpが送られてきてるようです。

これで識別できそうなので、改造したのは以下のものになります。
rootで実行する必要があります。
これは、二つのボタンとそれぞれの長押しを検出して、さらにLINEに特定のメッセージを送るようにしてみました。


とりあえずIoTな気分を感じてみました。


2017-12-26

raspberry pi zero wを買ったのでusb接続でセットアップした

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

raspberry pi zero wを買いました。本当は単体で買いたかったのですが、なかなか単体で買えないのと、手ごろな手持ちのSDカードがなかったのと、電源もほどよいのが、ちょうどなかったので、ちょっと割高かなと思いましたが、セットで購入しました。

セットアップはusbでwindowsと接続して行うことができました。
手順は、
https://qiita.com/marron-akanishi/items/2ce4ae07c71dc8358093
と
https://qiita.com/gpsnmeajp/items/126fadd3e47cdd4a6c00
を見ればよさげです。
無線の設定の部分はraspi-configで設定したぐらいの違いしかないです。

途中でsshでraspberrypi.localと指定して接続するのですが、
うちにはすでに旧型のraspberry piがいて、
すでにraspberrypi.localを使っていたので、旧のほうにつながってしまいます。
新しいの方のを最初から名前を変える方法を探したのですが、
ちょっと見つからなかったので、最初に使っているraspberry piの電源を落として
raspberrypi.localで新しい方につながるようにしました。

その後、以下を参考に名前を変えました。
https://www.1ft-seabass.jp/memo/2015/04/21/raspberry-pi-hostname-memo/
名前を変える際は、無線LAN接続できるようにして、
無線でIPでも接続できるようになったのを確認してから変えたほうが良いです。
最初、上記を参考にせず間で名前を変えて、
無線設定も適当に確認しただけでやったら失敗して、
接続できなくなって最初からやりなおしになったりしたので、ご注意を。

2017-11-03

Rubyで暗号化した文字列をJavaScriptで復号化してみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Qiitaにある
JavaScriptで暗号化した文字列をRubyで復号化してみた
という記事の逆をやってみたいと思ってみました。

JavaScript側では、CryptJSを使ってRuby側で暗号されたものを
var text = CryptoJS.AES.decrypt(data, "pass").toString(CryptoJS.enc.Utf8);
で複合化をできるようにRuby側で暗号化したいと思います。
Ruby側で暗号化された値が上記のdataに入る感じです。

Ruby側は以下のような感じです。


これを使ってruby側で
enc_data = encrypt(”hogehoge”,"pass")
としてできた、enc_dataの内容をJavascript側のdataに入れてやれば、hogehogeと戻せる感じでした。

2017-10-07

awsのlambdaとAPI Gatewayを使って、ちょっとはまったこと

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
ほとんど使っている人はいないのですが、
barcotterというバーコードから、そのバーコードに対応するamazonのリンクを作成するandroidアプリを作っています。
これのバーコードからamazonのリンクを生成する部分は、サーバを用意して、このサーバ側で行っています。

最初は、サーバは
Google App Engine(python)
で作っていたのですが、なんかのサポートが切れることをきっかけに
Open Shift(Ruby on Rails)
に乗り換えたのですが、こちらも最近サポートが切れる部分があったので、これをきっかけに、今回サーバ側を
aws lambda(python)
に乗り換えてみました。

今回、lambdaに乗り換えて、いざアプリを利用してみると
type java.lang.String cannot be converted to JSONObject
というエラーが出てjsonのパースができない状態になりました。

原因は、すごく些細でlamdbaでjsonを返すには
handler内で辞書オブジェクトをreturnしてやればよかったのに、
わざわざ辞書オブジェクトをjson.dumpsして文字列にしたものをreturnしてしまって、
これが原因でパースできなかったというものでした。

普通に辞書オブジェクトでreturnすると、ちゃんとbodyに以下のようにjsonが
{ 'aaa': 'bbb', 'ccc': 'ddd'}
となるのですが、文字列で返すとbodyに
"{ 'aaa': 'bbb', 'ccc': 'ddd'}"
とダブルコーテーションがついてしまって、これのせいでパースに失敗していました。

これに気づくまで、無駄に時間がかかってしまいました。

あと、結果的には関係ないのかもしれませんが
パースできないのが、文字コードがうまく処理できないのかと思い、
API Gatewayのメソッドレスポンスの
HTTP のステータス200 の
レスポンス本文のコンテンツタイプが
application/json
だったものを
application/json;charset=UTF-8
とcharsetを追加しました。

とりあえず無事に移行できました。

2017-08-31

sinatraでベーシック認証した時のユーザ名とパスワードを取得する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
apacheなどのwebサーバ側でベーシック認証させておいて、
sinatra側で、その時のユーザ名とパスワードを取得する方法です。


auth_info = Base64.decode64(request.env['HTTP_AUTHORIZATION'].split(' ')[1]).split(':')
username = auth_info[0]
password = auth_info[1]

2017-04-04

LINE BOT APIを使っていたものをLINE Messaging APIに書き直す

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
すごく今更ですが、以前LINE BOT APIを使ってみたものを、LINE Messaging APIに直したものを紹介します。

ちなみにLINE Messaging APIを始めるには、以下が参考になりました。
http://milk0824.hatenadiary.jp/entry/2016/10/01/211555

まずは、
LINE BOT APIのcallbackにAWS Lambdaを使ってみる
を直したのは、以下のような感じです。

お次は、rubyで書いたものです。
ruby2.0以上ならば、line-bot-apiというgemがあり、こっちを使うと、もうちょっと楽にかけそうなのですが、以下はruby1.9でも動くことを前提としているのでline-bot-apiは使っていません。

rubyで書いたものの最初の、
LINE BOT APIを利用して電車遅延情報の送信を改良した
を直したのは、以下のような感じです。

そして、
LINE BOT APIを利用してGoogle Calendarの情報を通知する
を直したのは、以下のような感じです。
ちなみにキャンセルされた予定の処理を追加しています。

最後に、
LINE BOT APIを利用して雨が降りそうな時は通知するようにしてみる
を直したのは、以下のような感じです。

2017-03-24

railsの開発環境のjavascriptがなんだかよくわからないことになった時の対策

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
railsのdevelopment環境でいろいろいじっているうちに
なぜだかわからないのですが、jqueryの動きがあやしい感じになってしまいました。

xhrで投げた結果を受け取って、それを画面の置き換えるのが、うまく動かなかったり
imageの位置を変な感じで取得しようとして受け取れなかったり
みたいな感じになっていました。

原因は、もうわからなかったのですが、
rake assets:clean
で一回asset関連をクリーンしたら、うまく動くようになりました。

2016-11-26

yahooあんしんねっとが終わるようなので対応を考えてみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
家で使っているAndroidタブレットでは、Androidの機能を利用して子供用のアカウントを作って利用できるアプリを制限して使わせています。
なので変なアプリを入れる可能性は低いと思っているのですが、ブラウザでなんでも調べられるのはどうかなぁと考えてyahooあんしんねっとを入れて、これを使えるようにしていました。

しかしyahooあんしんねっとが2016/12/20に終了してしまう模様です。
webで検索の手段が使えないのもいまいちなので別の手段を探していました。

無料でよさそうなかなぁと思ったのは、
シマンテックのノートンファミリー
かなぁと思ったりもしたのですが、ちょっと大げさすぎるかなぁとも思ってみました。

いろいろ調べていたら
ノートン コネクトセーフ
というものがあることを知りました。
これはシマンテックが公開しているDNSのようです。

今回は、ブラウザ経由で変なサイトに飛ばないようにしたいので、このDNSを設定することにしてみました。
AndroidでDNS設定をするには、いかが参考になります。
http://did2memo.net/2015/04/08/android-wifi-dns-8-8-8-8/
上記では、8.8.8.8を設定していますが、この部分をノートン コネクトセーフのDNSを設定しました。

これで子供用アカウントでchromeを使えるようにしてみました。

その上でさらに以下で紹介されていたgoogleのセーフサーチの設定もしてみました。
http://rezv.net/android/557/

とりあえず、これで当面様子を見てみようかと思っています。

2016-08-05

capybaraとseleniumを使ってrubyでできてないwebサイトのテストをする

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
普段はrailsを使っているのでrspecを使ったテストを書いているのですが、このテストを既存のrubyを使ってないwebサイトの試験に使ってみることを試してみました。

前提は以下のような感じです。
・テストはWindows上でInternetExplorerを利用して行う
・データベースはMS SQL server
・webサイトはASP.Netで書かれている(htmlを出力しているなら言語は問わないはずです)
・テスト用のデータベース、webサイトを専用に用意する
 ※今回database_cleanerを利用しているので既存データがあったらごっそり消えます。

windows環境でrubyが使えるようにする手順は省略します。
bundlerとrspecをgem installして利用できるところまでは準備してください。


まずInternetExplorerをseleniumで利用できるように準備します。
IE用のドライバを以下から取得します。
http://docs.seleniumhq.org/download/
ダウンロードしたzipファイル内の
IEDriverServer.exe
を
c:\ruby\bin
などのパスが通っているフォルダに配置してください。
そしてIEの設定を確認します。
インターネットオプション
セキュリティで
各ゾーンの
保護モードを有効にする
のチェック状態をすべてのゾーンで同じにするように設定しておく必要があります。


ここからテストプログラム用の環境を作っていきます。
ちなみに、ここから作成するファイルの文字コードはすべてUTF-8です。

まず適当なフォルダを作成して、その作成したフォルダ内で以下を実行します。
rspec --init

フォルダ内にGemfileを準備します。
Gemfile

必要なgemをインストールするためフォルダ内で以下を実行します。
bundle install


rspec設定ファイル(.rspec)を作成します。
.rspec

フォルダ内にconfigフォルダを作成して、その中にデータベース接続設定ファイルを作成します。
config/database.yml

フォルダ内にspecフォルダを作成して、その中にspec_helperを作成します。
spec/spec_helper.rb

データベースのデータにアクセスするためのActiveRecordモデルを作成します。
specフォルダ内にmodelsフォルダを作成して、ここにrailsと同じようにモデルを作成します。
ここではItemクラスを例として作成しています。
spec/models/items.rb

データベースにテストデータを登録するためのFactoryGirlの設定を作成します。
specフォルダ内にfactoriesフォルダを作成して、この中に作成します。
上記のItemクラスに設定する値を例として作成しています。
spec/factories/items.rb

これらの準備ができたらspecフォルダ内にspecファイルを作成します。
spec/sample_spec.rb

テストの実行は作成したフォルダの一番上(Gemfileがあるところ)で以下を実行します。
rspec


こんな感じでとりあえず、データベースにテスト用データを突っ込んで、毎回データベースを初期化するための環境ができあがります。


今回のフォルダ構成をまとめると以下のような感じなります。
+-config
| +-database.yml
+-spec
| +-factories
| | +-items.rb
| +-models
| | +-items.rb
| +-spec_helper.rb
| +-sample_spec.rb
+-.rspec
+-Gemfile
+-Gemfile.lock


以下のサイトが参考になりました。
http://kakakakakku.hatenablog.com/entry/2016/01/09/142221