クリトラのコツコツITログ

3Dの皮をかぶった庶民の技術ブログです

最近の活動と次の活動の予定

最近の活動

ここのところ配信ができないため、ブログの更新が止まっていますね。
直近ではあまりコードを書く時間は取れておらず、作成していたハンズオンの改修をしていました。

主にテキストのリファクタリングを行っていたのですが、それも先日ひと段落した状態です。
今後はさらに追加でコンテンツ作成をしていくか、別の学習を進めるかの選択があるのですが、現状悩んでいます。

でも私の心はもう答えを出している感があります。

今後の作業・学習案

  • Playハンズオンにログインなどの認証系追加
  • PlayにAngular Elementsを利用する設定の追加
  • もくもくと競技プログラミング
  • もくもくと読書

今いくつか積み本が発生してしまっているので、それを読み終えてしまいたい気持ちがあります
技術書と社会人本みたいなのが半々

あとはAngular Elementsですかね
前にdockerでうまいことやろうとしたのですが、うまいことできなかったんですよね

認証系追加がコンテンツとしては正統派な気がするのですが、しんどそうだからちょっと気が引けています
ログイン機能を作成するだけだと標準機能を利用してすぐ終わりそうなので、ログインに合わせてどこまで含めるかが悩みどころですね

まとめ

ここのところはコロナでバタバタしていることもあり、思うように時間が取れていない部分があります
せっかくいいリズムで自宅での学習や作業が継続できていたので、あまりリズムを壊したくないですね

最近の活動 - GithubActions, GithubPages, Playハンズオン

最近の活動

お久しぶりです。最近はTwitterでのつぶやき更新が多くなっていました。
コロナの影響でGoogleの稼働が通常よりも下がっているせいか、動画のコンテンツチェックがAIによって行われています。
その結果、作業配信をしても何故か全部不適切コンテンツで削除されてしまいまして...

そんなこんなで作業は進めていたのですが、配信できずの更新できず状態でした。 とはいえ進めていたものをご紹介します。

進捗と残タスク

進捗

  • GithubPagesの作成
  • PlayハンズオンのCodelabs化
  • PlayハンズオンのLesson1, Lesson2の暫定完成
  • それぞれのGithub Actions設定

残タスク

紹介

ハンズオン自体の進捗はほどほどですが、その周辺環境を整えるような作業が多かったです。
GithubPagesについてはPCページでしかまともに表示されません。
レスポンシブ実装したら良かったのですが、慣れていないもので...
CSSフレームワークを使えば良かったですね。

[GithubPages] (https://christina-inching-triceps.github.io/)
Play Frameworkハンズオン - Lesson1
Play Frameworkハンズオン - Lesson2

まとめ

GithubPagesやActionsはそこまで使ったことがなかったので、ちょっとした勉強になりました
やはり自己学習をすると色々と幅が広がりますね

これ自体は非常に技術的に高度なものではないですが、ある程度技術に慣れていると「知る」ということがまず重要ですよね

f:id:christina_triceps:20200406153431p:plain

ハンズオン資料とキーボード、そして女声

ここ数日のまとめ

ここのところ引き続きslickやplay-slickのセットアップ資料を作成していました。
なんとかslickのセットアップ資料は完成しましたよ〜。嬉しいですね

他には自作したキーボードのchoco60にマイスレイヤーを追加する設定をしていました。
普段はあまり使わないのですが、シングルディスプレイでvim使ってると便利な気がしています。

私はvimをiterm2上で利用しているのですが、hotkey設定をしていてaltをダブルタップするとターミナルが表示非表示でトグルされます。
それでchromeとterminalを行き来するんですが、chrome側で簡単にマウス操作してページをスクロールしたりページ開いたりするのに使えそうです。

またこれらについてはqiitaの記事も書いていました。 それにまた時間が取られましてねぇ...

あと他にも女声の練習としてカラオケいったりもしていました。
今度は地声でアプローチをかけてみているのですが、悪くない感触はあります。
ただ歌ってる途中で地声が強くなってきているので、基礎練習が足りないのと、あと1-2個くらいエッセンスが必要そうです。

アウトプット

Qiita

女声


残酷な天使のテーゼ 女声練習地声系

この辺がここ数日のアウトプットです。
またslickのセットアップ資料と実装はfeatureブランチを作って対応していたのですが、一旦masterへマージしました〜

まとめ

キーボードやったりハンズオン作ったり女声やったりと、充実していましたね。
変なことばっかりやってますね。楽しいので良いのですが

f:id:christina_triceps:20200323034408p:plain

Slick3.3系でMySQLの日付型をマッピングする実装 - 3パターン実装してみたよ -

本日の配信


Slick3.3とMySQLの日付型の戦い part2 - 兎にも角にも実装するよの巻 -

今日は昨日に引き続きslickとMySQLの日付型のマッピングを実装していました。
昨日候補に上げていた 1. def * を自分で実装するパターン
2. MappedColumnTypeを利用するパターン
3. Profileを拡張するパターン

一応それぞれを実装して比較をすることまではできました〜

進捗と残タスク

進捗

  • 各3種の実装比較

1-2の実装: Commit Log
3の実装: Commit Log

残タスク

  • 実装サンプルの整理
  • コンテンツへのインクルード
  • 実際に今回採用する実装方法決め

結局のところどれがいいのか

通常の独自クラスについてはMappedColumTypeを利用するのが良いのでしょうが、今回の日付型に限ってはProfileを拡張する方法が一番良いと感じました。
今後ちゃんと記事にまとめようと思いますが、それぞれのメリット・デメリットを簡単に記載します。

ただし、あくまで私の実装した範囲においてなので、もっとよい実装方法があった場合にはこの限りではありません。

def *で対応するパターン

誰でも理解しやすくてシンプルな実装になります。
複雑なことをしていないので、何をしているのか一番理解しやすいと思います。

デメリットは今後追加される全てのテーブルの全ての日付型に対して律儀に対応しなければならないことです。

MappedColumnTypeのパターン

今回のケースでは一番旨味が少ない実装パターンになったと思います。
本来であればmapping処理を記載すると、特に自分で処理することなくデフォルトの型のように取り扱えるはずなのです。

はずなのですが、今回はこれを利用しても結局 def * の実装や、各マッピング系処理での自前実装が必要になり、無駄にコード量が増え複雑度があがりました。
自分の使い方が間違っているんですかね...

なんか他の実装だと base[LocalDateTime, java.sql.timestamp] みたいな実装も見かけるので、そのような形にするともう少しうまいこと実現できるのでしょうか??
でもLocalDateTimeはTEXT処理されてしまうので、結局汚くなってしまうのではという気がしています。

また、さらにしんどいのが def * パターンと同じように結局マッピング周りに手を入れる必要が出てくるので全テーブルにコツコツ処理を書かないといけないです。

ここは今になって自信がなくなってきたので、いいやり方知ってる人がいたら教えて欲しいです。

Profile拡張

そもそも、これが公式で推奨されている実装方法です。
https://scala-slick.org/doc/3.3.1/upgrade.html#support-for-java.time-columns

The types are: Instant, LocalDate, LocalTime, LocalDateTime, OffsetTime, OffsetDateTime, and ZonedDateTime.
If you need to customise these formats, you can by extending a Profile and overriding the appropriate methods

って、書いてあります。

今回必要なLocalDateTimeの部分だけ拡張してslickのprofileとして引き渡してあげれば、ちゃんと自分で実装したparse処理に従って日付処理をしてくれます。
なので、一回作れば他のモデルではprofileにこれを指定するだけで済みます。

初学者に対して「Profile作れ」っていうのは、結構ハードルが高いので初心者向けとは言いづらいのですが、Profile全体の説明をする必要もないので案外プログラミング経験者なら理解できるのではないでしょうか。
未経験だと、うん、しんどいとおもうけど。

というわけで、日付型に関してはこの実装方法が最適な気がしています。
ただ繰り返しになりますが、slick側でデフォルトで対応している型であり、一般的に利用される型だから、これが向いてるだけで自分で作ったクラスなどをいい感じに使う場合には通常MappedColumnTypeが良いと思われます。

まとめ

英語だからと面倒くさがってちゃんとドキュメントを読まないとこういうことになるのですね...
公式サイトにちゃんと書いてあるやないですか...

とはいえ、いや、万人にprofileを拡張しろって真顔でいうのは結構しんどい気がするんですよねぇ...
DBIOやデータアクセス周りはプロジェクトの技術強いマンがラッパー作ったり隠蔽することが多いとはいえ、slickというもの自体が相変わらず初心者にあまり優しくないなぁという思う今日のこの頃なのでした。

f:id:christina_triceps:20200317233826p:plain

Slick3.3系でMySQLのLocalDateTimeをいい感じにしたかったけど、できなかった

本日の配信


Play-SlickでLocalDateTimeを何とかする part1 - どうにもならなかった -

本日は久しぶりに作業配信です。
slickの調整に入ったはいいが、相変わらずこの辺りは苦労しますね...

slick3.3からMySQLの日付関係の型がString受け取りになって、parse処理が雑なせいでそのままではエラーになってしまうという状態です。
このあたり、一体どういう利用され方を想定しているんですかね??
バグというと言い過ぎだかもしれませんが、バグと言っても差し支えないレベルなのでは...

進捗と残タスク

ある程度進捗は出たのですが、結局悩んだり検証したりで時間が浪費され...
slickってやっぱりしんどいのでは??

実装までのマッピングや準備もそうですが、どうやってファイルやクラス分けたらいいのか非常に悩んでしまいます
db.runもできれば隠蔽したいけど、いざとなれば自分で領域が切れるようにもしたい

隠蔽したりラップしたい箇所が多いんですよね、slickって
DBアクセスのレイヤーはそういうものという気もしますけどね
ほんとむずかしい

進捗

  • slickを利用したサンプルのベース作成
  • 次回以降のコンテンツ作成方針決定

残タスク

  • LocalDateTimeとslick column typeのマッピング
  • slick modelのいい感じのファイル分け

基本的には以下の3パターンを考えています。

  • Stringで受け取ってmodelとのマッピングで処理
  • implicitのSlick Column Mappingを作成する
  • MySQLProfileを拡張して独自profileを作成する

最後のやつはやってみたのですが、なんかうまく動かなかったんですよね
何か悪いはずなんですが、何が悪かったんだろう??

まとめ

改めてSlick側の実装に入ったわけですが、安定のよくわからなさです
一番シンプルで簡単だけど、あまり見た感じ汚くないものといういいとこ取りができるのでしょうか
作れるだけの能力が私にあるのだろうか...

f:id:christina_triceps:20200317004237p:plain

choco60というキーボードを自作してみました!!

自作キーボード作成までの紆余曲折

昨年からずっと自作キーボードを作る作ると話をしていたのですが、なかなか時間が合わなかったりお金を溜めるために時間が必要だったりで作れずおりました。
この度ついに作ってみましたよ〜。

初めての自作キーボード作成ではありましたが、気の良い仲間たちのおかげで楽しく安全に作ることができました。
この日記自体も作成したキーボードで書いてます。

いざ遊舎工房へ

自作キーボードと言えば遊舎工房ですよね。
ご多分に漏れず私も遊舎工房さんにお邪魔しました。

f:id:christina_triceps:20200314122901j:plain

大沖さんの「あたい」って感じの絵が懐かしいですね。
懐かしいのです。チルノとか、チルノとか、チルノ。

遊舎工房さんには店舗と作業ルームがありまして、この看板はショップ側の入り口に置いてありました。
秋葉原駅からだと10分くらい歩きますかね??

キーボード探し

作業ルームの利用申請を行って荷物を置いてから、作成するキーボード探しをしました。
慣れてくると事前にネットで探して購入するのでしょうが、そもそも自作キーボードが初めてなので店頭で物色しながら手に馴染むものを調査開始です。

基本的には親指周りにキーがあるやつ、キー数が少ないやつ、格子型の正方形タイプに分かれるんですかね?
どれにするか結構悩んでしまいました

標準タイプかキー数が少ないタイプが候補だったのですが、仕事と自宅の両方で利用するというのが悩みの種でした。
家と会社で違う種類のキーボードだと感覚が合うまでに時間がかかるので、できるだけ揃えたかったのですよね。

60%キーボードだと2台買うか、持ち運びをしないといけないのですが自作キーボードの耐久性は持ち運びに向いてる感じはしない。
となると、標準のものを買うしかないということで、今回は表題のchoco60を購入することに決めました〜。

購入物一覧

f:id:christina_triceps:20200314141841j:plain

作成するものも決まったところで、お店で購入です。

  • choco60 * 1: 15,400円
  • Zelios 67g * 65 : 8,580円 
  • TRRSケーブル * 1: 330円
  • Tai-Hao PBT Black&DarkGrey * 1: 7,700円
  • Mil-Max ソケット 100*2 : 7,700円

Choco60の本体の中にもいろいろ入ってました。

ちなみに全部で4万円...
なかなかのお値段ですよね。流石に気が引けました

購入物の補足

Zelios 67g

これはキーの軸です。
普段は青軸、赤軸、茶軸といったものにしか触れていないので、この軸を選ぶのに時間がかかってしまいました。
お店には各軸のキーを試しに触るためのキーボードが置いてあるので、それを触りながら探すんですよね。

いくつか気に入ったものがあるのですが、だいたい全部売り切れちゃってました。
その中で唯一残っていたのがこのZeliosです。
67gというのが軸の重さなのですが、これは結構重たい軸のはずです。

私は打鍵時の圧が強いので結構重たいものを好みます。 指を置いたときに沈まず動かないくらいの重さは欲しいです。

あとはコリコリした感じが好きなので、タクタイル系の軸が向いているみたいです。

音も気にしていたので、青軸のように音が出てしまうのは避けています。
Zeliosは音がしないというほど静かではないですね。
コリコリとした音はしますが、かちゃかちゃは音がしないです。

単純な音量だとHHKBとあまり変わらない気がしますが、マイクからだとこちらの方が静かに聞こえるかも??

Tai-Hao PBT

これはキーボードのキャップで、なんかこう、いい感じのやつです。
choco60というかHHKBは地味にキー配置とキーの幅が一般的ではない部分があるので、全てのキーにピッタリはハマりませんでしたがいい感じです。

知り合いのいろんなキーボードを触って分かったのですが、キーボードの打鍵感は軸以外にもキーキャップの影響が非常に大きいみたいです。
私はプラスチックで押し込んだときに指にしっかりと振動が伝わるものが好きみたいで
その感覚を「コリコリ感」といってるみたいです。

見た目も落ち着いたグレーと黒色で結構気に入りました。

Mill-Max ソケット

これはキーボードにくっつけるキーボードを着脱可能にするパーツです。
通常は半田付けしてガッツリくっつけるみたいなのですが、軸は取り替えて遊びたいのでソケットをつけました。
これが高いの何の...

またこのパーツをつけるときには一つ気をつけないといけないことがありました。

キーボードを埋め込み基盤と軸の間にプレートを挟むのですが、その間にスペーサーというもので余白をとります。
ソケットをつけるとキーの軸とプレートの間にプラス1mmほどの余白が必要になるので、購入時に同梱されているものよりも1mm広いスペーサーと、そのためのネジが必要です。

私も組み立てた後にネジとスペーサーを取り替えました
最初に気づかなかったので、なかなか面倒でした...

キーボード作成

そんなこんなでキーボードを作成です。
作業に集中してて全然写真が撮れていませんでした。

これは作業途中の一枚です。

f:id:christina_triceps:20200314181759j:plain

いろんな道具を使ってコツコツ作りました。

ハンダづけがなかなか上手にできなくてねぇ。
特にソケットを最後までさせていない状態でつけてしまうと完成後にキーが浮いてしまうので、しっかりと奥まで差し込んでつける必要があります。

急いでやると結構雑につけちゃうので、丁寧にのんびりやるのが一番です。

そして完成

いろいろとすっ飛ばして完成

f:id:christina_triceps:20200316144502j:plain

この真ん中にトラックパッドを置いたセパレートスタイルがやりたかったんですよねぇ。

土曜日に作成した後、日曜日に長いネジを買ってセパレータを伸長する対応とかしてたので結構時間かかっています。
元々の状態だと触ってるうちに一部のキーが脱落していくという致命的な脆弱性が...

ちなみに今の状態でもたまに一部のキー軸が浮いてきます。
どうもボディがプラスチックプレートなので、強く打ちすぎると湾曲してしまいその連続で少しずれてくるみたいですね。

あと僕はキーの隅っこを弾く感じでキーを叩くことがあるので、そうすると戻りの力で浮いてくるっぽいです。

特にdeleteキーはそれで落ちてきます。
Uキーだけは、なんか自然とズレてきます。

余分に軸を買ってあるので、付け替えたら多少回避できるかな??

なんだかんだで個体差はあるので。

まとめ

今回はHHKBに近いキーボードを作成したので、操作感は文句なしです。
調子乗って結構重い軸を書いましたが、1時間くらい打ち続けていると流石に筋肉にきますね...

慣れていけばムキムキになれるかも?

とはいえ、日記でも書かない限りは常に打ち続けることってなくて考えてる時間の方が多いので大丈夫でしょう、たぶん。

これは沼にハマると無限に時間とお金が溶けそうです。
絶対半田ごてとか、ピンセット買うもんね。
ないとメンテできないし

PlayFrameworkハンズオン作成 - lesson1をlesson2に繋げつつdocker化するよ。slickもくるよ -

本日の配信


Playハンズオンのリファクタリングと次のレッスンの準備

土日は長々と作業していたので配信なし、日曜日はStorybookの検証をしていたので久しぶりの定期配信です。
休日はDBを使わないLesson1は一通り完成しコンテンツの整理と分割をしていました。

今日は全体的なディレクトリ構成の変更とlesson1で作成したコンテンツをlesson2で使えるようにセットアップをしていました。
思ったよりも大きな変更なくlesson2へ繋げられそうで、ホッとしましたよ〜

lesson2でDB接続までを行う予定なので、そこまで出来ればもうひと段落というところでしょう
とはいえ、Slickは手強い...

ここのところの進捗と残タスク

進捗

  • lesson1のコンテンツ整理
  • ディレクトリ構成の変更
  • lesson2のseed作成

残タスク

  • lesson2のseedを参考プロジェクトディレクトリへ移動
  • ミリ秒以下の日時設定を秒までに修正
  • ミリ秒以下の設定方法をおまけに移動

テーブル設計でミリ秒以下への対応をしたせいでSlickのmappingが大変になってしまっているので、それをおまけ側へ移動しようとおもいます。
秒までであれば、複雑なことをしなくても日付側に変換が効くのでまずはそこから始めようと思います。

まとめ

lesson1のリファクタリングという名のコンテンツ再確認と動作検証がしんどすぎてモチベーションが下がりそうだったので、続きを作成することにしましたが思ったよりも順調に進みそうなので無事にやる気が出てきました
とはいえ、lesson1をしっかりとしたコンテンツにする必要があるので、どこかで自分で通してみないといけませんね

いや、ほんとこういう資料作る人すごいと思います
絶対粗めっちゃありますもん私の...

f:id:christina_triceps:20200310011402p:plain