技術
先々月あたりに邦訳が出た『データ指向プログラミング』を読んだ。めちゃくちゃざっくり言うとオブジェクト指向における「データと振舞いの一体化」というドグマを手放させるもので、めちゃくちゃざっくり見るとC言語的な構造化プログラミングの世界に回帰す…
所用で、Cloud Storageにある動画ファイルをopus(音声)形式にエンコードしたかった(Node.jsとffmpegで)。 動画ファイルがデカいのと、生成されるopusは小さいので、いちいちストレージに保存するのが手間だと考えた。そこで、間にmkfifoして作った名前付きパ…
Scalaのライブラリを検索・一望・依存性定義をコピペできたりする便利なサイトであるScaladexにコントリビュートした。という話を自慢するだけのエントリです。 Scaladexとは ScaladexとはRubyにおけるrubygems.org、PythonにおけるPyPIの、Scala版である。…
仕事でCloud Functionsを触る機会があったのでメモ。この記事はScala Advent Calendar 2023の2日目の記事です。 qiita.com 昨日の記事はこちら。 zenn.dev AWSがLambdaを提供しているのと同じく、Google CloudはCloud Functionsというサービスを提供している…
最近OpenAIがオーディオ系のAPIをいくつか出していた。といってもけっこう前の話だ。 そんな中、最近OpenAIが色々なサービスを展開している。自分も触って習熟しておいたほうが、面白いアイデアを思い付いたときにすぐにプロダクトを作れて役に立つはずだ。…
こんにちは!フロントエンドの世界は常に進化していて、新しい技術やツールが次々と現れるよね。そんな中、テストフレームワークの選択は、ウェブエンジニアの旅路における重要な決断だ。今回は、JavaScript/TypeScriptの開発において、新たな可能性を秘めた…
先日Airframe RPCで遊んだ。 blog.3qe.us が、Routerをインスタンス化するときにコンストラクタ引数を渡せないという問題があった。 import wvlet.airframe.http.netty.Netty import wvlet.airframe.http._ object Server extends App { // Create a Router …
最近所用でNext.jsを集中的に触る機会があった。一番好きな言語はScalaで、仕事でもプライベートでもよく書いているのだけれど、Next.jsの体験がとても良く、楽しかったのでたくさん試行錯誤したくなった。この体験を良い感じにScalaに還元できたら面白いな…
フロントエンドをたまに遊びでいじっているのだが、HTMLとDOMって何が違うのかよくわかっていなかったので調べたメモ。 HTMLはMarkup Languageとあるように、ドキュメントをマークアップする一種のシリアライズフォーマットである。 DOM(Document Object Mod…
Scalaの便利かつモジュラーなライブラリ群であるAirframeシリーズに収録されているAirframe RPCで遊んでみたところ、とても面白かったので紹介。 wvlet.org wvlet.org あらすじ Airframeとは Airframe RPC Scala(JVM)とScala.jsとでサーバクライアント通信を…
こういう画像を作る仕組みを作った。 画像を生成したい人は世間にそこそこいるかもしれないし、自分は比較的?簡単な方法でそれを達成した。せっかくなのでやり方をみんなに教えようと思ってこの記事を書いている。 全てのソースコードは以下にOGImagekunと…
ScalaのテストフレームワークであるScalaTestでは、他のテストフレームワーク同様に、各テストの前後に特定の処理を挟むためのbefore / afterの仕組みが用意されている。 環境 Scala 3.3.0(2系でも変化はないはず) ScalaTest 3.2.17 各テストの前後に処理を…
2023年にリリースされているurxvt(rxvt-unicode)には、特定のPerlのバージョンがある場合に日本語(を含むUTF-8文字列)を表示できなくなる問題がある。本稿ではその(一時的な)解消方法を提供する。 rxvt-unicode urxvt(正式にはrxvt-unicode)は、UNIX環境で動…
高カインド型(Higher-Kinded Types; HKT)とその表記について勉強したのでメモ。高階関数を知っているレベルからHKTをどう表記するかまでメモする。プログラミング言語として主にScalaを用いているが、Scalaでしか分からない概念は極力排している。知ってる部…
Kyoto.js 20で掲題の通りの発表をLTとしてやらせてもらいました。資料は以下です。 www.3qe.us kyotojs.connpass.com 動機 僕はここ最近Scala.jsというAltJSテクノロジーを追いかけているのですが、ちょうどKyoto.jsがあるという情報を聞き付け、ここ最近の…
Scala 2.13以降では、文字列型Stringから各種の数値を得るためのメソッドが標準ライブラリに用意されており、これを使うことで簡単に文字列から数値を得られるようになっている。parseIntやtoIntと違ってエラーを起こさないので便利。 //> using scala 2.13.…
最近Scala.jsの話をすると結構な人がRTしてくれる。TypeScriptの他にAltJSには今どんなのがあるのかな、という話に引用RTでScala.js今アツいですよという話をしたら結構ウケた。世間的にはTypeScript alternativeに興味がある人も多いようだ。一方、ネットに…
RSSをDiscordに流したいって思ったこと、ありますよね?私もそうでした。しかしながら調べてみると単体でRSS配信を行うツールはないようで、なんでもできる多機能botがそのうちの機能の1つとしてRSS機能を提供していたりする。けどRSSを配信するためだけに別…
プログラミング言語Scalaの日本語コミュニティとして、ScalaわいわいランドというDiscordサーバを運営している。 メンバーは順調に増えている一方、これから学ぼうという人にリーチしてほしいので定期的にTwitterで宣伝しているのだけれど、どちらかといえば…
ScalaのCatsにifMという便利なやつがある。IO[Boolean]に対して条件分岐を適用して、trueの場合とfalseの場合とで異なるIOを返すというもの。別にIOでなくとも良くて、Monadなどの仲間であればifMは定義されている。例えばOption[Boolean]に対してもifMが使…
プロのfs2使いにとっては常識なんだろうけど、常識がないからこうして勉強している。 fs2: 3.9.2 import cats.effect.IO import fs2.Stream val heavyProcess: String => IO[Int] = ??? // すごい時間がかかって返ってくる val stream = Stream("The answer …
% touch a % ln a b % touch c % mv c b % ls -li a b つまり、ハードリンクに対してmvした場合はハードリンクの双子の中身はどうなるのか?という問題です。 答えはinode番号は別々、ファイルの中身も守られます。 ちなみにcp c bするとinode番号が同じまま…
巨大テキストファイルが--------\nとかで区切られていて、その単位で変形して使いたいときに使える技。クソデカといっても今回は10MiBくらいでした。ぜんぜんデカくなくてごめんね。 fs2のバージョンは3.9.2。 いきなり解を示すと、.repartition(s => fs2.Ch…
先日@110146氏とごはんを食べていたのだが、そのときにBorerというライブラリがおもしろいという話を聞いたので、試しに使ってみることにした。他にもSmithyやDeep Java Libraryといったライブラリの話も聞いたので、順に書いているというわけ。 CBOR CBORと…
Scalaは難しいと思われたり敬遠されがちである。Scalaの難しさについてTwitterなどでアンケートをとったり、ネットでググって意見を吸い上げてみた。議論の叩き台にするみたいな用途を意図しています。 ご意見や記事募集中です。できればTwitterじゃなくて記…
自分は、仕事でScalaを数年間・プライベートな経験を含めると10年弱のScalaの経験がある、そこそこの熟練Scalaエンジニアだ。チームにメンバーが入ってきたり他人に勧めるたびにScalaの環境構築を教えている一方、最新の知見を反映した記事が無くて他人に勧…
Scala CLIにはJava Microbenchmark Harness (JMH)を使ったベンチマークを取るための機能がある。JMHでは、いくつかのアノテーションをつけてプログラムを起動することで、自動的にパラメータを調整したベンチマークを実行してくれる。ベンチマークはメソッド…
Viteを使っているとマシンによってビルドできなくて困っていた。 % npx vite -v vite/4.4.9 linux-x64 node-v18.17.1 % npm -v 10.1.0 % npm run dev > foobar@0.0.0 dev > vite error when starting dev server: Error: EISDIR: illegal operation on a dir…
この記事はScala.jsのUIライブラリであるLaminarをステップバイステップで学習していこうという記事の第一弾だ。 いくつかの記事に分けて、現時点で自分が知っているLaminarの知識や知見をまとめていくつもりだ。 あまりどのような構成にするかは考えていな…
実装する必要があったので、一定時間特定の要素にマウスホバーするとイベントをトリガする処理をLaminarで実装してみた。思っていたよりも直感的に書けた。 LaminarとはScalaJSのフロントエンドライブラリ。かなりざっくり言うとReactやVueの仲間といったと…