[Scala] Joda DateTimeをBSON ISODate形でMongoDBに登録したい

Joda DateTimeって最近はもうトレンドじゃない?
とにもかくにも、今現在進行形で使っていてMongoDBにISODateとして保存したい。
けど流石に公式サポートされてる型じゃないんでCan't find a codec for class org.joda.time.DateTime.って怒られちゃいます。(下記コード)
わざわざ文字列にするのもあれだし、ということでスマートにコーデックを作る方法です。

import org.mongodb.scala._
import org.mongodb.scala.bson.codecs.Macros._
import org.mongodb.scala.bson.codecs.DEFAULT_CODEC_REGISTRY
import org.bson.codecs.configuration.CodecRegistries.{fromRegistries, fromProviders}
import scala.concurrent.duration._
import org.joda.time.{DateTime, DateTimeZone}
import org.joda.time.format.DateTimeFormat

case class Post(title: String, body: String, createAt: DateTime)

val tz = DateTimeZone.forID("Asia/Tokyo")
val format = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").withZone(tz)

val codecRegistry = fromRegistries(fromProviders(classOf[Post]), DEFAULT_CODEC_REGISTRY)
val uri = "mongodb://root:password@localhost:27017/?authSource=admin"
val db = MongoClient(uri).getDatabase("example_db")
val posts: MongoCollection[Post] = db.withCodecRegistry(codecRegistry).getCollection("posts")

val post = Post("記事のタイトル", "本文だよ!", format.parseDateTime("2020-10-01 10:00:00"))

// 【ここでエラー!】 org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class org.joda.time.DateTime.
Await.result(posts.insertOne(post).toFuture, 1 second)

続きを読む

[Linux] SSHでChrootした時にlocalhostが解決できなくなる件

タイトル通りです。
例えば /etc/ssh/sshd_config で下記のような設定をしたとします。

Match User hoge
  ChrootDirectory /home/hoge
  ForceCommand internal-sftp 
  AllowTcpForwarding yes

これはhogeというユーザにSFTPとポートフォワードだけ許可したいということ。
この時、なぜかlocalhostに対してポートフォワードができません。
その解決方法。
続きを読む

[ハードウェア] Magic-Ben MAG1 WifiモデルのLTE対応化

Magic-Ben MAG1

先月発売された中華UMPCのMagic-Ben MAG1が先日届きました。
16GBメモリ、ストレージ512GBのWifi版です。
販売開始の時点ではWifiモデルしか無かったのですが、後になってLTE対応版も発表されました。
後出しとかうっそだろ・・・と思ってたのですが、どうやらWifi版にも「SIMスロットとアンテナは搭載されてます!」という話だったので、別途ワイヤレスWANモジュールを購入してLTEに対応させてみました。
その手順について手短に紹介いたします。

続きを読む

[Web] NextcloudをConoHaオブジェクトストレージと連携する

Nextcloudはオンラインストレージのオープンソースウェアです。
Webブラウザからはもちろん、WebDAVやスマホアプリ、デスクトップアプリから利用できるので、使い勝手はGoogle DriveやDropboxとほぼ同等です。
また、アクセス制御や容量の追加が自由にできるので、会社や団体、個人利用での利便性が高いと言えます。

今回はこのNextcloudをDockerコンテナで設置し、ストレージにConoHaオブジェクトストレージ(100G/月450円)を割り当てる手順を紹介します。

※この記事の執筆時点で使用したNextcloudのバージョンは14.01になります。

続きを読む

[フロントエンド] ParcelでSASSからNodeパッケージをインポートする

最近話題のモジュールバンドラであるParcelを使ってみてます。
そこで.scssファイルから、Nodeモジュールのパッケージに入ってる.scssファイルを読み込もうとしたんですが、そのままではnode_modulesディレクトリにパスが通ってないらしく、読み込めませんでした。
それについての対処法。

// example.scss
@import "compass-mixins/lib/compass";

続きを読む