memorandums

日々のメモです。

おぶざーば・ぱたーん

資料を作っていて、オブザーバパターンで直感的に理解できる例がないかな。。。と考えていました。

オブザーバパターンとはこんな感じ。

Observer パターン - Wikipedia

思いつきそうで思いつかない。。。とりあえず思いついたのがダチョウ倶楽部の鉄板ネタ「どうぞどうぞ」でした。

www.youtube.com

上島さんが「じゃ、俺がやります」と手を上げると、肥後さんや寺門さんが「どうぞどうぞ」と譲ってくれます。

とりあえず、ベタで書くと以下のような感じになります。コードは可能な限りシンブルにしました。Ueshimaクラスのraise_handを実行したあと、Ueshimaクラス内でMemberクラスを生成してnotifyを実行します。そもそも上島さんが2人に「どうぞ」と言えと指示しているわけではないのでオカシイのですが、UeshimaクラスがMemberクラスを知っていているのが気持ち悪いわけです。

class Ueshima
  def raise_hand
    puts "じゃ、俺やります"
    Member.new.notify
    Member.new.notify
  end
end

class Member
  def notify
    puts "どうぞ"
  end
end

ueshima = Ueshima.new
ueshima.raise_hand

UeshimaクラスとMemberクラスを分離したのが以下になります。

class Ueshima
  def initialize(o)
    @observers = o
  end
  def raise_hand
    puts "じゃ、俺やります"
    @observers.each do |e|
      e.notify
    end
  end
end

class Member
  def notify
    puts "どうぞ"
  end
end

ueshima = Ueshima.new([Member.new, Member.new])
ueshima.raise_hand

Ueshimaクラスでraise_handメソッドがコールされたときに、オブザーバのメソッドを呼び出すことができます。メンバーは上島さんが手を上げるのを監視して待っているイメージです。ちょっとオブザーバって感じがするかなぁ?

Ueshimaクラスは@observersという配列変数を持っていて、それぞれの要素はnotifyというメソッドをもったインスタンスであることを期待しているだけで、Memberクラスのことは知らなくて済んでいます。

とりあえず思いついたので書いておきました。

はい。

GW10連休の思わぬ影響

毎週月曜日に非常勤のため小倉までソニックで移動しています。

博多駅構内にある金券ショップで格安旅券を4〜6枚程度まとめ買いしています。

今年は4月7日に6枚購入していました。

本日も講義があるためソニックに乗り換えて、特急券を見ると。。。

f:id:ke_takahashi:20190513085820j:plain

やっちまったなぁ。。。

自宅にまだ2枚あります。

4月は15日と22日しか講義がありませんでした。

4月8日から講義があると思って4月7日に購入したのですが、そこが勘違いでした。

さらにGW連休で4月29日と5月6日がありませんでした。

今年は午前に授業しているため午後から大学にいくと帰りの特急券は使いません。つまり1講義あたり1枚しか消費しないわけです。

1ヶ月しか有効期限がないのに6枚買っている時点でアウトなわけです。。。ボケています。。。

格安とはいえ、調べると片道1420円なので4枚だと5680円。

さらに今乗っている電車賃(吉塚〜小倉間の乗車券1290円+特急券510円=1800円)も正規の値段でJR九州さんにお納めしました。

いい勉強になりました。

私のような怠惰な人間は「痛い思い」を通して学びます。

でも、またやりそうだなぁ。。。ちゃんちゃん。

ダイニングテーブルの椅子修理

福岡に来てからニトリで買ったダイニングテーブルセットを使い続けています。

当時は(たぶん)珍しかった回転するタイプの椅子です。

5脚あるうちの1脚の回転部分が緩むんですね。。。ガタツキが酷くて。そもそもこういうガタツキがでるのは設計が悪いのか製造が悪いのか?5脚のうちの1脚ですから。。。製造なのかもしれません。

タツキの原因は木ネジ(黄)が緩んでくるんです。すると金属部(赤)が少しずつ浮いてきて、外れるまではいかないのですが、ガタツキ音が酷くなります。

f:id:ke_takahashi:20190512084929j:plain

これまで、ガタツキが酷くなるたびに木ネジを締めてきました。

ただ、締め直しても2,3ヶ月もすればガタつき始めます。

これまでワイヤーで金属部を動かないようにしたり、ネジに接着剤を塗布したり、ネジ穴にパテを埋め込んでネジ山を作り直したり。。。しましたがどれも効果ありませんでした。

最近、またガタツキが酷くなり。。。午前中に時間があったので分解しました。

今度は思いつきで、3Mの強力両面テープがあったので緑部に貼って金属部を置きました。

さらに、木ネジのヘッド部の内側にロックタイトを塗りました。こちらによるとそもそもロックタイトはヘッド部ではなくネジに塗布するべきもののようですが、木と金属では無理そうに感じまして、このようにしました。多少なりともネジの緩み始めを防止(遅延)したい。。。というところです。

f:id:ke_takahashi:20190512090341j:plain


機械設計でも勉強していれば、もう少しマシな解決方法を思いつくのでしょうけど。。。とりあえずロックタイトで鉄同士の固着には6時間かかるらしいので、半日程度、放置したいと思います。

さて、どうなりますやら。。。😁

アクセスポイントに接続したあとアクセスポイントを切入するとmacが自動的に再接続してくれない

macOS10.14.4の載ったMacbookAir6,1を使っています。

通勤時にはAndroidスマホでのテザリングを利用してきました。

最近、ちょっと動きがおかしいんです。

テザリングって必要なときに入れて、必要なくなれば切るのが普通。。。と思います。

このようにテザリングを一度切ったあと、時間をおいてテザリングをオンにすると。。。これまではMacが自動接続してくれていたのですが。。。なぜか、Wifiを切入しないと接続してくれません。

切入する以外に、アクセスポイントを手動で選択して接続する手もありますが。。。いずれにせよ、自動的に再接続してくれないんですね。。。

不思議です。

Macbookは電源を切ることはなくて蓋を閉じてスリープ状態にして持ち歩いています。蓋を開ければ自宅なら自宅のアクセスポイントに、仕事場であれば同じようにWifiが自動接続されるんです。。。これは全く問題ないしこれまでと同じ挙動でした。

でも、テザリングだけ。。。違うんです。一手間だけなんですけどね。。。面倒。

とりあえず、SSIDを一端消して再設定したり、Macを再起動したり、PRリセットしたり。。。いろいろやりましたがダメ。

以下もやってみましたがダメ。
WiFi does not auto-reconnect : MacOS

仕様が変わったのか?回帰テスト漏れか。。。わかりません。

OSがアップデートするまで待つしかないかな。。Appleにバグレポ送ってみようかなぁ。。。

卓上ライト

サラリーマン時代には考えられなかったことですが、大学教員には独立した部屋があたります。本当に幸せなことです。ありがたやありがたや。

出勤中は多くの時間を過ごす場所になります。

自然と「なるべく居心地のよい空間にしたい。。。」という思いが湧いてきます。

些細なことですが、作業性と快適性を求めて、スタンディングデスクを自作したり、工具入れを作ったり簡易デスクを作ったりしてきました。

集中するときにはできるだけ部屋は暗い方が好きなので(目の色素が薄いので眩しさにとても弱いのです。。。大人になってわかったことですが)、部屋の照明は使わずに、最低限の電気をつけています。

LCDモニターをばらして照明を作ってみたりもしました。

もっといいやつがないかな。。。と物色していたところ、以下の商品を見つけました。

値段はちょっと高い(2,500円くらい)ですが、USBケーブルをつなげば充電できて単独でも使えるライトです。いろいろと使えそうですよね〜。とりあえず2個買って部屋の適当な位置に置いてみました。

照明としては使えませんが、視界に多少はいる感じで柔らかな刺激になります。こんな感じです。フルカラーLEDが入っているようで、実際には様々なパターンで発色させることができます。

f:id:ke_takahashi:20190509184122j:plain

なかなか一般的なオフィスではこういうことはできないかもしれません。キュービクルが割り当たっても照明までは個別にはできませんからね。。。日本のエンジニアにも部屋が割当たって、そこでガンガン開発ができたら。。。いいでしょうねぇ。自分のお気に入りの部屋からリモートで。。。というのが最近の流れなんでしょうけど。

オープンなスペースでは生産性は低下するという研究結果を最近見かけますね。やはり、創造的な作業には個室が必要と思います。

さて、仕事仕事。

教え・学ぶ・奥深さ

以下のツイートを見て。

うちではこんな光景は見たことがないな。。。と思わず反応してしまった。

その後、CACMを読んでいて、まさにこのツイートについて言及している記事を見かけました。

cacm.acm.org

様々な反応ややりとりがあったことを知った次第でした。

その記事をみて、以下の連続ツイートをしました。教員になってモヤモヤと考えてきたことが言い表せたのでブログにまとめておこうと思ったわけです。

以上です。

あくまで個人的な見解で、学生本人らに聞いたわけでも状況を確認したわけでもありませんが、教員として観察して想像する問題点でした。

じゃ、この問題をどう解決するのか。。。その答えの1つが上記の最後のツイートの通りで、Peer Instructionにあるように感じています。まだ、調べていませんが、これから調べてまとめてみたいと思います。よければ実践もしてみたいと思います。

この3日間の成果

とりあえずMFTに応募したくて急遽、GWを利用して作品作りを始めました。

2日前はこんな感じでした。

www.youtube.com

とりあえず足で地面をタップした瞬間だけ、その位置を取得するようにできた感じでした。

ただ、これも問題があちこちにありました。ご覧の通り、足は1本のはずなのにタップを認識している箇所は2,3箇所。認識するアルゴリズムの問題でした。

ちなみに、この仕組みは数年前に学生と一緒に作ったこのシステムを元にしています。このときは手だったので比較的、認識しやすかったんですね。。。

古代史シンポジウム、いよいよ明日、開催です。 - memorandums

とりあえず、アルゴリズムを見直して、さらに、レンジセンサーのスキャン周期が100msだったため、アニメーションも合わせると10FPSしか出せないことになります。これはまずい。。。ということでThreadを使って距離取得とアニメ描画を別処理にすることでなんとかなりました。

その結果が以下になります。

www.youtube.com

YouTubeの説明欄にも書きましたが、とりあえず作品タイトルが必要になるので「狭空間ケンケンパ」としました。

我が家のように狭い空間でも、タタミ1畳のスペースがあれば屋内でもケンケンパができるっ!というウリ文句で。。。ただジャンプしているだけなんですが。。。映像がつくことでやる気が持続するのでは。。。とか。子供とか高齢者のリハビリとか。。。どうですかねぇ?

現段階では、正直なところあまりおもしろくないです。。。(汗) というかものすごく疲れます。1分と真面目にやっていられません。

音楽や難易度選択画面、得点、ハイスコア、など付帯的な要素はこれからつけていこうと思います。

その前にもっと面白くするための工夫が必要に思います。そこら辺をこれから考えていこうと思います。