アル中の教授が出てきたり、アフリカのオカルト情報が出てきたり、というディテールが積み重なっているのが気に入った。2巻目くらいまではおもしろかった。3巻まで行くと風呂敷たたみムードになってきて、終わり方はウーンという感じだった。
- 作者:中島らも
- 発売日: 2018/09/05
- メディア: Kindle版
液体なら粉ではないので、液体歯磨き粉じゃなくて液体歯磨きなのだけど、歯磨きというと歯磨き行為との違いがわからないので液体歯磨き粉と呼んでいる。
その液体歯磨き粉をなにかのタイミングで買って、洗面台に置きっぱなしに、使わずほったらかしにしていたのだけど、チューブ状の歯磨き粉が切れたので使いだしたら便利だった。
チューブ状の歯磨き粉を使うと、チューブを持って、まずフタ開けて(このときスクリュー状だと両手使うので面倒)、もう片手で歯ブラシを持ち、適量を歯ブラシにつけて、フタをしめる(このときスクリュー状だと両手使うので面倒)、そして歯を磨く、という流れになる。
これが液体歯磨き粉だと、口ゆすぐ用のコップに2プッシュする、口に入れる、そして歯を磨く、という流れで、3工程くらい減っている。
1日に3回やる歯磨きの工程を大幅に省略できたのがうれしい。
(医薬部外品) GUM(ガム) デンタルリンス レギュラータイプ 薬用液体ハミガキ 960mL 2個パック+おまけ付き【Amazon.co.jp限定】
歯ブラシはソニックケアを使っていて、これも便利で、何が良いかというと、30秒ごとに音がして次の象限(口の中を四象限にわけて1象限ずつ磨く)に向かいましょうという案内をしてくれるので必ず2分で磨き終わるように誘導される。歯ブラシ界充実してきた。
フィリップス ソニッケアー ヘルシーホワイト 電動歯ブラシ ブルー HX6719/43
テレワークでずっと家に居ると、リビングに置いてるテレビを見たり、Macのスクリーンセーバーが動いているのが目に入ったりする時間が増えてきたので、テレビで見れたり、Macを使ってない間にぼーっと眺められる形のコンテンツを模索したい。
WebViewを開いて、JSを実行し続ける形でHackerNewsのコンテンツをランダムに流すスクリーンセーバーを作ってみた。
github.com
やっていることは至極簡単で、ScreenSaverViewのinitでWebViewを作って、タイマーを定期的に動かす。
override init?(frame: NSRect, isPreview: Bool) { super.init(frame: frame, isPreview: isPreview) self.animationTimeInterval = 999.0 let webConfiguration = WKWebViewConfiguration() self.webView = WKWebView(frame: self.bounds, configuration: webConfiguration) self.addSubview(self.webView) self.timer = Timer.scheduledTimer(timeInterval: 10.0, target: self, selector: #selector(self.step), userInfo: nil, repeats: true) self.timer.fire() }
で、タイマーでJavaScriptのコードを実行する。これは10秒おきに実行していて、
@objc func step() { let code: String = """ (() => { const TOP_URI = 'https://news.ycombinator.com/'; const pick = (list) => list[Math.floor(Math.random() * list.length)]; const newsLinks = document.querySelectorAll('a.storylink'); const visitTop = () => location.href = TOP_URI; // visit random news if (location.href === TOP_URI && newsLinks.length > 0) { location.href = pick(newsLinks); } // scroll articles else { const topBefore = window.scrollY; window.scrollBy(0, window.innerHeight * 0.9); setTimeout(() => { const topAfter = window.scrollY; // detect bottom if (topBefore === topAfter) { console.log('visitTop'); visitTop(); } }, 100); } })() """ self.webView.evaluateJavaScript(code, completionHandler: nil) }
ということをやっている。ページ遷移すると前回実行していたJSが消えてしまうので、タイマーはJavaScript側ではなくてSwift側でやっていることと、JS側は状態を持ってなくて、こういう状況ならこれをする、というのを淡々と書いているのが特徴。
もともとは仕事でメンテナンスしているウェブサービスをランダムに巡回するために作っていて、それはなかなか便利だった。休憩して戻ってくると、自分たちがホスティングしているけど見たことないコンテンツが流れてきて、へえこんなコンテンツもあるのね、ということがあったり、偶然壊れてるページを見つけられたら人力テストとしても便利。
便利さはともかく、JSを定期的に動かすだけで好きなコンテンツを流せて汎用性が高いので、Hacker Newsをランダムに閲覧する形にコードを変えてGitHubに置いといた、という形。
JSを書き換えてビルドするだけで好きなウェブサイトを流すことができるのでいろいろ模索するときの雛形としてはそこそこ便利なのではないかと思う。
Swift入門とかmacのアプリを作るための前提知識とかは持ってないのですさまじい脆弱性がある可能性がある。プロダクションでは使わないでください。
ビルドしてから実行するまでの手順が長くて、Finderで開き、ダブルクリックするとシステム環境設定のスクリーンセーバーが開き、置き換えますかと聞かれてはいと答えると置き換えられるけど、それだけでは更新されず、一度システム環境設定のトップに戻ってからスクリーンセーバーを再度開いてプレビューボタンを押す、という工程を毎回やっていて不便だった。
水族館が無観客イルカショーを配信しているのを見かけた。
YouTubeを見ると過去のライブが無料で配信されていたりするので、これだけ世の中に動画が溢れているのに新たに動画を配信する意味は何なのか気になってきている。
イルカショー界隈どうなってるのかな、と観たらオーランドのイルカショー動画が上がってて、イルカそっちのけで人間たちが空中ブランコやっていて謎の世界観だった。
キングダムをせっせと観てシーズン2まで観終わった。
シーズン1は3Dアニメという雰囲気だったけどシーズン2は普通の手書きアニメっぽくなった。合戦のばたばたしてるところは3D。兵たちがアニメみたいにふっとばされていくシーンがなくなったり、ここぞというときに劇画調にならなくなったりと、とにかく見やすかった。
話の流れとしてはシーズン1のほうが物語に引き込む力が大きくて、1話はキャッチーな始まり方で、マイナスからのスタートという感じだったけど、シーズン2は、想定されるトラブルはこんなもんで、このあとはさまざまな敵が登場するだろうけど、戦を繰り返して成り上がっていく、という営みが続くにちがいない。