3Dプリンターでヘッドホンフックを自作したんだけど、滅茶苦茶楽しい!!

先日、思い立って3Dプリンターを買っていろいろプリントしていたんだけど、自分でヘッドホンをデスクにひっかけるためのフックを作ってみた、という話です。こういうやつ。

そもそも、10月に3Dプリンターを買っていた。

最初はthingiverse にアップロードされている既存のモデルを印刷していたのだけど、自分の家にフィットするものを作りたくなったので自分でモデルも作ってみることにした。

とはいえ、何もない状態からモデルを作るのはハードルが高かったので、既存のモデルを参考にしつつ作業した。選んだモデルはこれ

https://www.thingiverse.com/thing:411962

3Dモデリングには 3D Shapr を選んだ。iPadとApplePencilを使ってモデリングできて、知識ゼロでもなんとなく使えたのでこれにした。Fusion360のようなmacOSで使えるソフトウェアもあるが、いまいち使い方がわからなかった。3D Shaprは月額制のサブスクリプションで結構高いのだが、学習と思って今のところ支払っている。そのうちFusion360とかに移行できるといいなと思う。

試作1号機

最初に作ったのがこれ。直方体をつなげただけ。ダサい。

しかし、ヘッドホンフックとしては一応機能する。ダサいけど。

試作2号機

2号機。工夫した点はサポートするための支え?の追加と、プレートの先の部分を細くしてスマートにした点。

これは結構いい感じだが、ヘッドホンが机の外側にはみ出ていると邪魔では?というコメントをもらった。

試作3号機

3号機。デスクの下に収まるように設計してみた。

ヘッドホンの位置はバッチリだが、机への取り付け部分のサイズが甘くスカスカになってしまった。

完成品

これが完成形。3号機とほぼ同じで、寸法の微調整をした。

デスクの天板の高さにぴったりでめちゃ良い。

さらに、たまたま手元にあったパーマセルテープを貼って外れにくくした。

終わりに

3Dプリンター、面白い。ぶっちゃけヘッドホンフックとか買った方が早くて、自分で作るのって車輪の再発明みたいなものなんだよね。でも、自分が使うものを自分のために自分で作るという点についてはソフトウェア開発に通じるものがあって楽しい。そのうち、探してもないものを作るように慣れればいいなと思う。

しかし、モデルを作るのが難しい。3DShaprはかなり直感的に扱えるけど、それでも「こういう操作をしたらこうなりそう」というiPad的な感覚とは離れている箇所もある。

CloudNativeDaysTokyo2020でカンファレンスプラットフォームを開発した

9月8日と9月9日に開催されたCloudNative Days Tokyo 2020の実行委員として、カンファレンスプラットフォームを開発しました。とても楽しく、良い経験ができました。

もともと、実行委員としては去年の末ごろから参加して準備を手伝っていました。その時の主な担当はウェブサイトで、Hugoで作ったりしていた。あとはコンテンツ周りも関わっていたかな。

これまでカンファレンスで登壇はしてきたのですが、開催する側はやったことがなかったんですね。ミートアップくらい。なので、開催する側もやってみたくて参加ました。

結果として、これまでのオフラインイベントの開催は体験できませんでした。しかし、オンラインカンファレンスという新しい体験に関わり、とても楽しく良い経験ができました。

cndt2020は去年と同様オフラインイベントの予定だったのだけど、新型コロナウイルスの流行により、オンラインイベントに変更しました。そして、オンライン化にあたり配信などをどうやるかが課題となりました。

いくつかのサービスを検討したが、結果としては自分たちで作る決断をし、自分は決断した後、7月ごろから開発に参加しました(雑誌の執筆でバタバタしていた)。

技術スタックとしてはRailsとHeroku、Auth0、Vimeo、sli.doを使用。時間もあまりなかったので、外に出せるものは出した。そのため技術的にめちゃくちゃ難しい、というものはそこまでなくて(websocket周りの経験が無かったくらい?)、素朴にモデル設計やUIをどうやるかというところが難しかった。

開発メンバーはメイン2名、スポットで時々参加する人が数人で、デスマーチではないがやや大変だったかなという印象です。

カンファレンスプラットフォームとして大事にしたのは使い勝手で、プレイベントのrejektsで分かったUIの問題などを本番までに改修できたのはよかった。

本番のイベント中は負荷の監視をしたり参加者のフィードバックやアイデアを実装、デプロイしていました。素早い対応ができたのは自前実装の利点ですね。

今後、カンファレンスで同じプラットフォームを使うとなると破壊的変更が難しくなるので、エンジニアリングとしても難易度は上がりそう。UIをよりよくするためにはReactやVueのようなフロントエンドフレームワークが必要かもしれないという話をしていて、ここは新たなチャレンジじゃないかなと思います。

UserScriptを使って、Confluenceエディタのショートカットを一部無効にする

僕は日本語のかなに切り替える際、Ctrl-Shift-jを使っている。Ctrl-Shift-k、英字なら Ctrl-Shift-;だ。かな・カナ・英字を瞬時に切り替えられてとても便利なのだけど、最近Confluenceを使い始めて困ったことが発生した。それは、 Ctrl-Shift-jのショートカットがConfluenceのエディタにもあり、かなに切り替えるとエディタ側のショートカットも発動してしまうのだ。ショートカットとしてはJiraのチケット検索ダイアログを表示するというもので、これはこれで便利なのだけど僕としてはかな切り替えの方が優先順位が高い。複数のマシンでCtrl-Shift-jをかな切り替えに使っているし、そこは譲れない。

Confluence側の設定でショートカットを無効にできればよかったけどどうもそうはいかないようだったので、10年ぶりくらいにUserScriptを書いて制御することにした。

// ==UserScript==
// @name        Disable ctrl+shift+j in Confluence editor
// @namespace    http://repl.info/
// @version      0.1
// @description  Disable ctrl+shift+j in Confluence editor
// @author       Ryo Takaishi
// @include */editpage.action?*
// @include */createpage.action?*
// @run-at document-idle
// @grant        none
// ==/UserScript==

document.addEventListener('DOMNodeInserted', function() {
    if (tinyMCE) {
        if (tinyMCE.activeEditor) {
            tinyMCE.activeEditor.shortcuts.remove("ctrl+shift+j");
        }
    }
}, false);

tinyMCEを使っているので、このようにショートカットを削除すればOK。JavaScriptを知っているとこういうちょっとした改善をシュッとできるので便利ですね。

Kubernetes Meetup Tokyo #31で「入門!ClusterAPI」というトークをした

Kubernetes Meetup Tokyo #31 で「入門!ClusterAPI 〜k8sクラスターもk8s APIで管理したい〜」というトークをした。スライドは以下。

セッションの後にsli.doを使った質問に何件か答えたのだけど、時間の都合上回答できなかったものが2つあったのでこちらで回答。

[ClusterAPIについての質問] ClusterAPI用のリソース管理ってどうしてますか?

Anonymous

ClusterAPI用のリソースというのがいわゆるマニフェストと仮定すると、他のk8sマニフェストと同じ様に管理すれば良いと思う。結局はyamlファイルなので、同じノウハウを使うことができる。

clusterAPIはclusterのバックアップについても面倒をみますでしょうか

Anonymous

クラスターのバックアップについては、ClusterAPI自身は面倒をみない認識でいる。Workload Cluster、Management Cluster共にVeleroの様なバックアップ専用のソリューションを使うのが良いかと思う。

さて、今回はオンラインでの登壇だったのだが、初めての体験で緊張した。

  • 聴衆の顔が見えないので雰囲気が掴みにくく、トークのペース調整が困難
  • 今回はモニタ2枚で片方に共有用の画面表示、もう片方に発表者ディスプレイを表示したのだが、これだと運営側とのやりとりが完全にできなくなることに発表中に気づいた。チャットなどで何か話しかけられていても気づけなかったかもしれないので、発表者ディスプレイは表示しない様にするなど対策が必要だろう。
  • sli.doを使った質問の仕組みはとてもよかった。これまでの登壇で、一番質問をもらったかもしれない。嬉しい。その一方、質問内容について質問者に確認できないので適切に回答できたかどうかが掴みにくいという課題は感じた。

いくつか課題は感じたものの、概ね体験としてはよかった。自宅にいろいろ設備を整える必要があるのでハードルはやや高いが、場所を選ばずミートアップに参加できるのは良い。他の方のトークもとてもよかったし、楽しかった!

kubectl -o custom-columnsで、配列内の任意のデータを表示したい

kubectlの–outputオプションを使うと、表示するデータとヘッダを自由に指定できる。これを使うと、例えばどのノードがDiskPressureやMemoryPressureのStatusがTrueか?を一覧で見ることができる。

方法としてはこんな感じ。costum-columnsは <header>:<json-path-expr> の形式で、これをカンマで区切って指定する。.status.conditionsは配列なのだけど、フィルタすることも可能で、以下のようにすれば良い。

~ $ k get node -o custom-columns='NAME:.metadata.name,DiskPressure:.status.conditions[?(@.type == "DiskPressure")].message'

これで、Nodeの名前とDiskPressure Conditionのメッセージを一覧で表示することができる。-o jsonpath でフィルタリングしてもいいけど、ヘッダ付きで一覧表示できるとやはり便利。