これからの教育に思うこと

教育という業界に来て早いもので5年が経とうとしている。

CTOとして開発メインで事業に参画したが、早いうちからビジネスに関わるようになり、教育というものをいつも考えるようになっている。子供の教育に関して、大事なものを3つあげるとしたら、

  1. 情報収集する力
  2. 目的達成のための学習
  3. 継続する習慣

他にもコラボレーションも大事だが、まずは個として自立するためにはこの3つが必要に思う。

情報収集する力

世の中は偏りのある情報で溢れている。あなたTwitterタイムラインが誰とも違うようにネットではすでにパーソナライズされた情報を得ているので、あなたの常識は隣人の常識ではない時代が始まっている。情報を取捨選択し、解釈・消化していく、そのプロセスを念頭に置かなければならない。Googleの検索結果自体が、すでにパーソナライズされている場合、次世代の子はどのように一般常識を学ぶことができるのだろうか。その答えの一つは、色々な情報に触れること。ネットだけでなく、実際に人と話したり、世界の小説を読んだりすることでないかと思う。共通語としての英語は非常に有用なものである。他の国の人と話すことで、そのバックグランド・文化を理解できるし、共通語に翻訳されている情報は多い。日本語は人口の減少とともによりマイナー言語となり、小さな情報源となる。

目的達成のための学習

人は忘れる。コンピュータは忘れない。忘れるといことは精神を安定させるために作られた非常に大事な機構である。小学校のときに習った社会を覚えてるであろうか。もし覚えていたとしても、その情報は古くあまり役にたたない。例えば、日本の小麦の生産量など、我々の多くは30年前の記憶をベースにしているのかもしれない。記憶はコンピュータに任せるべきで、人は概略とインデックス(目次)を覚えておけば良い。忘れないものは何かといえば、自分で考え導き出した学習だ。体験したものは忘れにくいし、自分で工夫を入れたものなら尚覚えているし、そのプロセス自体が将来に役に立つ可能性は高い。具体的には、例えば、作成中のロボットがよく転ぶ、それはなぜか、重心が問題だ。重心を調べよう、というような目的のための学習だ。そもそも、社会人になると経験から学ぶことが多い。実生活から学び、それを糧としていきていく。プログラミングなどのIT教育に熱が入るが、目的に対して実装を自分で考えるプロセスは非常に有用だと思う。プログラミングという手段は10年後必要がない、もしくは量子コンピュータなどの新しいパラダイムが現れているかもしれない。手段は時代時代に変わる。目的に対して実装を自分で行うというプロセスは不変だ。その体験は未来につながる。

継続する習慣

人は非効率。一つスキルを得るのに3年ぐらいかかる。大学が4年あるのも理解できる。スポーツでも音楽でも技術を身につけるのは時間がかかる。昔からいうように継続は力だ。これは不変なように思う。これを前提とすると、どうやって継続するか。それは、興味だ。好きなものは時間を忘れて没頭する。好きだから続けるし、続けるとその次が見えてきて、気がつくと長期間時間を使っている。では、興味をどうやって見つけるか。これは親が手伝える。選択肢をあげて、好きだったものが一つでもあったら、その結果に対して、褒めて褒めて褒めまくることだと思う。選択肢はうまく調節しないといけないが。

Released iOS/iPadOS app, Wazari Browser, to make use of external keyboard


I just released iOS/iPadOS browser. This browser has the following functions.

  • Customizable shortcuts to operate browser. e.g. Change tabs without touching screen.
  • Panes to split views vertiacally or horizontally.
  • Hit-A-Hint – without touching, click links to move pages.
  • Customizable modifiers. e.g. swap capslock with ctrl key.
  • Customizable default search engine – DuckDuckGo or Google
  • Exclude web sites not to use keymapping. Some dynamic web site doesn’t use Input type=text or textarea, which Wazari keymapping doesn’t work. But you can exclude these website so you can still type on it.
  • Histories to go back easily
  • (Optional and Paying serivce) Integrated to Wazaterm so you can terminal.

Wazari browser is my first open source project and also a sub project of Wazaterm.

Download from App store


I use react-native(iOS only) to build this to catch up recent React/React Native. I will post what technique that I used for this with the following posts.

Mov to mp4/gif with ffmpeg

For the sake of my memory.

mov to mp4

mov to animation gif

macOSでkey repeatが動かない時の対処法

実際はkeyrepeatは作動している。(例えば、$などはブラウザ上でキーリピートするし、Terminalでは問題なく動く)
この現象のときは、下記をターミナルを開いて打つ。

そして、再起動。

Railsで特定のバージョンのmigrationをロールバックする方法

git branchを行ったり来たりしていてしっかり管理しないとlocalでゴミテーブルができるのでしっかりdownさせる。

db:migrate:statusでマイグレーションの状態を確認。

最初の数列をコピペしてそのファイルだけ戻す。

その後必要ならSQLでmigrationエントリを消す

Sidekiqでdelayを使う。しかし、クラスメソッドを使いダイナミックなQueue名を使わない

DelayedJobと比べると使い方が少し違うので注意が必要。

Extentionを読み込むとdelayが使える

config/initializers/sidekq.rbに下記を追加(存在しない場合は作成)。これで毎回performを書かなくて良い。

これで、User.delay.my_methodが使える!

https://github.com/mperham/sidekiq/wiki/Delayed-extensions

インスタンスメソッドを使わない

インスタンスメソッドでも一見動いたので大丈夫かと思ったが実際運用してみるとだめだった。クラスメソッドでWrapして使いましょう。よく見ると太字でだめと書かれている。

I strongly recommend avoiding delaying methods on instances. This stores object state in Redis which can get out of date, causing stale data problems.

ランタイム時に動的なQueue名を指定しない

それ用のライブラリが別途あるのでそれを使用。スタティックなQueue使いにくい。。ユーザ毎にキューを用意したい。。

https://stackoverflow.com/questions/20133346/how-can-i-create-sidekiq-queues-with-variable-names-at-runtime

[LXD/LXC] lxd imageのexportとimport方法

LXDのversionは3.03

LXD export

作成してあるコンテナのイメージではなくて初期起動時にダウンロードしてくるOSイメージをexportするにはlxc launchで指定するイメージ名を引数にいれてexportする。

LXD import

version3.03ではtar.xzとsquashfsが作成されるのでこれを2つとも指定し、importする。aliasで名前をイメージ名を指定できる。:(コロン)は使えないので注意。

launchまでの速度比較

同じfingerprintのイメージをimageリストに持てないので、ubuntu16と18で比較してますが、、だいたい同じになると思います。

イメージダウンロード後にLaunch

約3分半。

importしてlaunch

52秒ぐらいで2分半は早く起動できることを確認!

RedashのLet’s encryptによるhttps化

Business IntelligenceのRedashはデータから経営判断するとても良いツールです。
SQLさえ書ければ、難しいプログラミング知識も必要のないのでテックに強いスタッフにSQLを勉強してもらえれば使ってもらえます。

AWSのAMIイメージも用意されてるのですぐに導入できます。しかし、TLS/SSL化されてないので大事なデータを傍受されてしまう危険性があります。
そこで、https化ですが、少し手間取ったので記録しておきます。

AMIを中身を見るとわかるのですが、DockerでRedash周りのプロセスが動いています。なので、方針として、ホスト側にlet’s encryptを入れる。Let’s encryptのキーがあるディレクトリをdockerからマウント。ホストでcertbotのリフレッシュで期限切れになるのを防ぐという感じです。

1. ホスト側にcertbot導入

方法はいろいろあると思いますが、AWSのRoute53を利用して作成しました。

参考:https://qiita.com/komazarari/items/88c1ed18765fb7cab6c1

https://certbot.eff.org/lets-encrypt/ubuntubionic-other通りにcertbotをインストールして、

pipでcertbot-dns-route53アドオンをインストール

AWSのsecretkey/apikeyをセットして、下記で/etc/letsencrypt以下にファイルを作成。systemd経由で期限切れの確認が走っているみたい。

2. Redash nginxのconfig作成

参考:https://gist.github.com/arikfr/64c9ff8d2f2b703d4e44fe9e45a7730e

redashのインストール場所に行って、ディレクトリとファイルを作成。

nginx.confは下記のようにした。

3. Redashのdocker composeファイルの編集

/opt/redash/docker-compose.ymlを開いて、

その後、リスタート。

systemdのpost-hook設定

直接certbot.serviceファイルを触るのはあまり良いプラクティスでなさそうだが、、

で開いて下記を追加(/usr/local/bin/certbotに変更。でないとバージョンのエラーで失敗していた)

sysytemdのコンフィグをリロードすればOK.

[Rails] Action Mailerのdelivery_methodを動的に切り替える方法

SendGridのAPI経由のEメール送信がテンプレートを使えて非常に良いので切り替えたいが、現在smtpで送っているメールをすべて一回で切り替えるのは不可能なので、同時運用したい。
下記のように、delivery_methoddelivery_method_optionsをmailメソッドに入れるとwrapしてくれるので、smtpを使わなくなる。

[Rails5.2] rails-ujsのdata-confirmをoverrideしてdialogをmodalに切り替える方法

以前のRailsはjquery-ujsを使っていたみたいで、rails-ujsでのdata-confirmダイアログの変更方法が見つからなかったのでjquery-ujsのoverride方法を参考にしながら、試行錯誤しつつdata-confirmmの挙動を変更しました。showConfirmDialog内をお好きなmodalモジュールに変更すれば動くはず。今回はUIKitを使っていたのでそれを使いました。

Scroll to top