昨日の記事はだいたい2000PV。旬の話題で関係者の僕が書いているのでこのくらいの数字は予期していた。面白いのは、多くの人があの記事を読んでくれたのに、他の記事や僕のプロフィールを読んでくれた人はほとんどいないし、コメントに至っては0件ということだ。バズとはそういうものらしい。
皆様シャイでいらっしゃる。サクラを雇って最初に1つコメントを付けておけば大量にコメントがついていたのかも知れない。
最近は面白い技術遊びをしているのだが色々な事情があって表沙汰にできないのが残念。
教えちゃお
昨日の記事はだいたい2000PV。旬の話題で関係者の僕が書いているのでこのくらいの数字は予期していた。面白いのは、多くの人があの記事を読んでくれたのに、他の記事や僕のプロフィールを読んでくれた人はほとんどいないし、コメントに至っては0件ということだ。バズとはそういうものらしい。
皆様シャイでいらっしゃる。サクラを雇って最初に1つコメントを付けておけば大量にコメントがついていたのかも知れない。
最近は面白い技術遊びをしているのだが色々な事情があって表沙汰にできないのが残念。
近所に安い床屋があることに気づいたのでそこで散髪をした。随分大胆に切られた気がする。1050円。順番待ちエリアにマンガがたくさん置いてあって、高校の帰りに古本屋でマンガを立ち読みしていたことを思い出した。そしてこち亀は圧倒的に面白い。
帰りにスーパーで焼きそばの材料を買ってきた。『おいしい焼きそば』を自称する焼きそばをカゴに入れながら、この商品名によって売上はどのくらい上がるのだろうかと考えていた。『おいしくない焼きそば』よりは売れるだろうか、いや、物珍しさの効果で『おいしくない』方が売れるだろうか。あるいは、おいしくない商品なら『おいしい』の方が売れるというような交互作用が存在するのだろうか。
その後は『30日でできる! OS自作入門』を読み始めた。フランクな文章で読みやすいのだが、実践を重視しているくせにWindowsでフロッピーディスクに焼いて動かすという地獄のような実行方法で、Ubuntuでやるならそこを適宜読み替えていかねばならないのが手間だ。幸い先人は多くいる。
※この記事はビールを2本飲んで書かれた。
という気分になっているのだなあ。
今月末を持ちましてドワンゴを退職します。本日が最終出社日ですので、退職エントリを書きました。https://t.co/0AVDqB95lP
— Toshihiro Shimizu (@meso) 2019年6月28日
mesoさんには2017年のインターンのときに初めてお会いした。中間発表会に遅れてきたとき、席は用意してあったのに入り口の近くの床に座っていた。当時人事部長という立場にありながら偉ぶらず人を緊張させない振る舞いとしてとても印象に残った。フランクな人柄と組織の中核としての毅然とした態度の両方を尊敬している。
はてなブログに投稿しました
株式会社ドワンゴを退職します - kmizuの日記 https://t.co/OeorHfRiAm #はてなブログ— Kota Mizushima (@kmizu) 2019年6月28日
kmizuさんは新卒Scala研修の講師だった。Scalaのことなら何でも知っている。言語の第一人者から教わることで、細かな仕様にも妥当性や事情があることがわかった。動けばいいやのアマチュアではなく、隅々まで理解し尽くしたプロとしての仕事を求められることを実感した。
お二人とも新天地でのご活躍を祈っています。
くる人は誰かって?それは僕です。
自分の家の天気(気温・湿度・気圧)をRaspberry Piから5分ごとにサーバに送り、それを使っていろいろ遊ぶプロジェクト(github)もそろそろ大詰めだ。使用技術はScala + Play Framework。開発環境にもデプロイにもDockerを利用している。サーバはこのブログと同じさくらのVPSで、nginx-proxyによってサブドメインgyokuroへのアクセスを振り分けている。
ベースURLはhttps://gyokuro.chao.tokyo
で、現状公開しているリソースは以下のとおりだ。
例: {"status":"200","data":{"time":"00:25:00","temperature":27.7,"humidity":76.7,"pressure":1001.6}}
例: {"status":"200","data":[{"time":"00:00:00","temperature":27.6,"humidity":76.8,"pressure":1001.7},{"time":"00:05:00","temperature":27.6,"humidity":77,"pressure":1002},{"time":"00:10:00","temperature":27.8,"humidity":76.3,"pressure":1001.9},{"time":"00:20:00","temperature":27.8,"humidity":76.5,"pressure":1001.7},{"time":"00:25:00","temperature":27.7,"humidity":76.7,"pressure":1001.6}]}
/
はここにリダイレクトWordPressは自由なhtmlをウィジェットに追加できるので、iframeを使って/temperature/nowを常に表示しようと思った。しかしPlay FrameworkはデフォルトでX-Frame-Options: deny
が設定されているのでiframeに表示されない。これはクリックジャッキング防止のためだ。クリックジャッキングというのは僕のサイトを透明なiframeにして他のサイトの上に重ねて表示させることで、僕のサイトの任意の箇所を不正にクリックさせる手口だ。
MDNにしたがってX-Frame-Options: allow-from https://example.com/
を登録しようと思ったのだが、なんとChromeは対応していない。ブチギレてる。対応してないということで無視されているのでとりあえず動いてはいる。ユーザーがクリックできる箇所はないのでたぶんオッケー(ホンマか?)。
iframeが表示されるようになったはいいが、黒背景に黒文字で表示されていて読めなかった。WordPress側からiframe内のstyleを操作するのは無理っぽかったので上記の通りクエリパラメータで白文字化できるようにして対応した。
頑張って作ったので適当にAPIで遊んでみてください。グラフ化するやつ作ってほしい。
ちなみに現在の状況は27.8 ℃、76.1 %、1001.4 hPa。肌がべたつきやや不快だ。今夜から明朝にかけてすごい降るらしい。通勤はできるかな?
きのこの山というお菓子を何かと比較する不遜な輩が多くいるようだ。
きのこの山はチョコレートとカリカリが分離している。万事において分離しているというのは大事なことだ。均質ではなく、高いエントロピーの中で異質なものが混じり合う中にこそグラデーションが生まれる。そしてグラデーションの中にこそ精妙な味わいが生まれてくる。
カレーをかき混ぜてはいけないし、丼料理をつゆだくにしてはいけないし、醤油にわさびを溶いてはいけない。それが俺の美意識。
関数に複数の引数を渡すとき、コレクションをそのまま渡したいことがある。たとえばPythonであれば*
を使ってアンパックできる。
Scalaでこれをやりたくで3分ググったところη-expansionを使った方法が見つかった。
(plus _)
でplus
メソッドを関数に変換した後、さらにtupled
メソッドによって1つのタプルを引数とする関数に変換している。
正確にはアンパックではないことに気づき、タイトルに「もどき」をつけた。
僕のAndroid端末のツイッターアプリは長いツイートが勝手に省略されてWeb版に飛ばないと続きが読めなかった。アンケートも表示されなかった。さらに最近はツイートをタップしてもリプライチェーンが表示されなくなった。
Androidのバージョンが6.0で古いからアプリが更新されていないと思っていたのだが、確認してみたらなぜかアプリの自動更新がツイッターには効いていなかっただけで、手動で更新したら5系から8系に一気に上がった。上記の問題も全部解決した。Androidのバージョン起因と思い込んで端末買い替えの情報収集をしていたが必要なくなってラッキー、ただしちょっと残念な気持ちもある。新しいスマホ使ってみたかったので。
歴代の携帯電話を紹介するか。
高校入学時に購入。直接のきっかけは部活の連絡網がメーリングリストだったこと。家族や部活、クラスメイトとのメールに重宝した。一応web閲覧もでき、Yahoo地図やYahoo時刻表には助けられた。毎月の料金は端末代980円を含んで3000円前後だったと思う。
LINEが入らなかったせいで大学1年生のクラスや大学3年生の学科とのコミュニケーションに大きな支障を来した。
バッテリーが死に、その頃には古すぎてどこの店舗にも替えパーツが売ってなかったせいで起動すらできなくなった。が、電源ボタンを1時間くらい連打したら一瞬起動したのでその間に電話帳などはサルベージした。
先代の反省から広く流通しているモデルを、ということでiPhoneにした。スマホになったおかげでツイッターができるようになった。Ingressもやりはじめた。
月額料金は2GBプランで端末代含めて8000円程度。高えよ!!SoftBankへの怒りが蓄積した結果、2年縛り終了後即座に交代の憂き目に遭う。というのも買ったタイミングが絶妙に早すぎてSIMロック解除の対象にならなかったので、キャリアを変えるならこの端末は使えなかった。
安さを追求しMVNOへ。端末は一括購入で25000円くらい。AndroidはiOSに比べて痒いところに手が届く感じがあり気に入った。明るさの自動調整やアプリの自動更新など。端末自体は低スペックなのでGPSで発熱するとかカメラが不調で再起動しないと使えないなどの不具合はある。
SIMはFREETEL。毎月1〜2GBの使用で料金は1000円〜2000円程度。安いのだが安すぎたのか潰れて楽天モバイルに吸収された。ユーザーの僕には特に影響はない。今回は買い換えを見送ったがバッテリーがだいぶ怪しくなっているのでもう長くはないと思っている。
昨日急に健康意識が高まったのでスマホにGoogle Fitを入れた。万歩計のすごいやつで、歩行以外の運動も記録できる。僕は歩くのが早いので通常歩行が強めの運動に分類され、10ポイントが目標のところ43ポイントだった。歩数は6369歩で消費カロリーは1454kcalだった。
早歩きでポイントが貯まると聞くと無意味に早歩きして帰ったし、普段帰りはエレベーターで4階まで上がるが今日は階段で上がった。数値化して可視化することには強い力がある。
気に入らないのはGoogleのアプリだということだ。Googleに情報が集中する現状は気に入らないが、彼らが最も優れたIT企業であることは間違いない。最低限の機能の万歩計くらいなら自分でも作れるだろう。でも運動の激しさを判定したり位置情報と連携したりといった高度な機能を高精度で作れる気はしない。
ブログを書こうと思って管理ページにアクセスしたら異様に重くなっていた。サーバにssh接続してvmstat
を実行するとディスクアクセスが多い。さらにtop -b -d 1 -n 1
を実行するとCPUを占拠しているのはjavaだった。理由のアタリはついていて、昨日playのアプリケーションをDockerでデプロイするときに起動コマンドをsbt ~run
にしてしまっていた。~
をつけるとファイルが変更されるたびに自動で再コンパイルを行う。外すと負荷は収まった。
※この記事は『Asahi DRY ZERO』を飲んで書かれた(!)。
ブラウザをVivaldiに切り替えることにした。Chromeの独自機能は使えなくなるのでパスワード管理をBitwardenに移行し、いろいろなサービスのパスワードを登録していった。その作業中にNetflixを開いたら面白そうな映画がサジェストされ、そのまま一気に見てしまった。
『アイ・アム・マザー』はつい最近Netflixで公開された映画だ。
人類滅亡後に始まったヒト再生作業。そのすべては、1人の少女から始まった。そして、彼女はアンドロイドを母と呼ぶ。
冒頭、保存されていた胚が育成機に入れられ、女の子が誕生する。その子が機械で完全に制御されたシェルターの中でアンドロイドの「母」に育てられるシークエンスが素晴らしかった[note]冒頭8分くらいまでなので見てから読んでもらったほうがいいかも知れない[/note]。なおキャラクターに名前はないので「母」「娘」と表記する。
「娘」が泣き止まないときは「母」の腕に埋め込まれた音楽プレイヤーで子守唄を流す。どの曲が気に入るかわからないので少し聞かせては別の曲に切り替えていく。一緒に折り紙をすると「母」は素早く複雑な動物を折るが、「娘」は下手だ。しかしこの巧緻も人間とロボットという対比にならない。なぜならシェルターには「娘」と「母」しかいないからだ。一個体ずつしかいないのだから「娘」と「母」の違いにしかならない。
泣き止まない「娘」に人形を与えるときに、「母」が人形を飾り気のないビニールの包装から取り出すシーンも印象的だ。布で作られた人形は「母」やシェルターの内装とは全く違う質感を持っている[note]直後に「娘」が機械の体の「母」に抱かれているカットにつながる落差がすごい[/note]。そんな柔らかで情緒的なイメージを持つ人形というアイテムすらここでは消費される道具であり、機械によって必要となることを見越して備蓄されていたのだ。
僕は普段から人間の価値を疑っている。人間は自然の法則に従ってタンパク質やら何やらが組み合わさっただけの存在であって、その行動も全て自然の法則から演繹的に理解可能だ。ただそれが複雑すぎて「まだ」解明できていないにすぎない。つまり科学のレベルを上限値まで引き上げていいSF作品ならば人間を完全に理解し管理することは可能だ。[note]ちなみに大学院の指導教員に「いずれ人間は完全に理解されるのではないか」と質問したら「そんな世界で人間は生きられるのだろうか」と答えられたことは強く印象に残っている。[/note]
アンドロイドが子育てをするシーンは、そしてもっと広く言えば機械化されたシェルターで人間が生きるという描写はまさにそれだ。機械化とは合理化であってそこでは必要なものと不要なものが峻別されるのだが、その過程で「必要とは何のための『必要』なのか」という疑問に巻き戻される。その疑問に無理やり答えを出そうとすると、人間存在に目的を設定し、手段として扱うことになるだろう。(たとえば家畜には肉や卵を生産するという目的がある。それができなければ殺しちゃうよね)。誰かがこんな話をしていたと思って軽くググったらカントだった。
本作で言えば優しい子守唄も楽しい折り紙遊びも健全な成長という目的に回収される。「娘」の育成にはさらに隠された「目的」があるだがそれは自分の目で確かめてほしい。
僕は職業柄技術ファーストでものを考えがちだが、倫理的な視点も兼ね備えていないと人間にできることの幅を広げても人間を幸せにはできないのかもしれない。
目的のない行動をとれる不合理性こそが人間らしさである、そう結論づけるのは簡単だ。しかしNetflixのAIにレコメンドされるままに映画を見て感想を書いている(書かされている?)僕にそれを言う資格があるのだろうか。
※この記事は『金麦』を飲んで書かれた。
今日は仕事がしんどかったので帰りに不健康なラーメン(僕の中ではこの言葉は家系ラーメンを指す。なぜなら二郎系は野菜たっぷりで健康的だから)を食べて帰ろうと思った。同僚が「この辺にぃに美味いラーメン屋、あるらしいっすよ」と言っていたのでそこに行った。しかし残念なことに夜はライスが有料だった。
僕は家系ラーメンではライスは2杯〜3杯食べる。にんにく系の味と豆板醤系の味をそれぞれ楽しみたいからだ。
結局ラーメンは食べずに帰宅して焼きそばを食べた。最近は粉ソースではなくさらなる高級感を求めて液体ソースを使っているが、これも特段美味いということはない。そもそも相当な量を入れないと味がしない。そしてコストパフォーマンスが低い。
温度記録サーバはとりあえず公開できた。僕の自宅の気温・湿度・気圧を記録し続けるだけのサービスだ。
https://gyokuro.chao.tokyo/temperature
ちなみに過去ログには以下のような形式でアクセスできる
https://gyokuro.chao.tokyo/temperature/1994/05/17
サーバはScala + Play FrameworkをDockerでデプロイ、センサはRaspberry Pi + BME280でPythonのRequestsライブラリを使ってサーバにログを送信している。計測環境は鉄筋コンクリートでエアコンや換気扇で温度管理していて、Homo sapiensが1匹住んでブログを書いたりしている。
※この記事は『金麦』を飲んで書かれた。
配属されたのでぼちぼち仕事っぽい仕事をしている。ただしまだ軽い仕事を回してもらって手順を覚えている段階なので「仕事を始めた」と言えるほどのことでもない。一日中パソコンを触ってお給料を発生させる気分は最高だ。
帰宅してScalaで書いている温度管理サーバの作業を進めた。ScalaはJavaの上に作ることで構造が汚くなっている部分もあるが、Javaの財産を活用できる恩恵は大きい。
本格稼働ではないがサーバに載せた。載せたはいいがディレクトリトラバーサル(←このまえ習った)食らいそうなAPI設計なので安全が確認できるまでURLは秘密です。ひさびさにnginx_proxyの設定を思い出す必要があった。地味にdocker-composeは使ったことがあってもただのdocker runは全然したことがなかった。とは言っても記法が違うだけでやれることは似たようなものだ。環境変数を指定したり、ポートを開けたり、ボリュームをマウントしたり。
こんなコマンドを書いたわけだが-e
を連打するくらいなら当然.envファイルを使うべきだ。というか自分でDockerfileを書いてイメージを作るべきかもしれない。
梅雨だ。通勤ルートに徒歩の部分が多いので憂鬱だ。傘を差していても靴は濡れるのでいっそのこと長靴で通勤して会社で履き替えようか。なんて考えているうちに梅雨が明けてしまいそうだ。水筒だって買ったはいいが配属されたら近くに給茶機があるので必要なくなってしまった。トイレに行って帰りにお茶を汲んでくると、自分が単なる濾紙になったような気分になる。人間は情報を取り入れて適切に運動するだけの機械なので似たようなものだが。ステートフルかどうかは議論の余地がある。