Lambdaカクテル

京都在住Webエンジニアの日記です

Invite link for Scalaわいわいランド

OpenAIのAudio Transcription APIで遊んだ

最近OpenAIがオーディオ系のAPIをいくつか出していた。といってもけっこう前の話だ。 そんな中、最近OpenAIが色々なサービスを展開している。自分も触って習熟しておいたほうが、面白いアイデアを思い付いたときにすぐにプロダクトを作れて役に立つはずだ。…

ウェブ開発の新しい航海者たちへ: Vitestで航路を切り開く

こんにちは!フロントエンドの世界は常に進化していて、新しい技術やツールが次々と現れるよね。そんな中、テストフレームワークの選択は、ウェブエンジニアの旅路における重要な決断だ。今回は、JavaScript/TypeScriptの開発において、新たな可能性を秘めた…

Airframe RPCでRxRouterにコンストラクタ引数を渡すにはbindを使う

先日Airframe RPCで遊んだ。 blog.3qe.us が、Routerをインスタンス化するときにコンストラクタ引数を渡せないという問題があった。 import wvlet.airframe.http.netty.Netty import wvlet.airframe.http._ object Server extends App { // Create a Router …

Scalaユーザから見たNext.jsの楽しさ

最近所用でNext.jsを集中的に触る機会があった。一番好きな言語はScalaで、仕事でもプライベートでもよく書いているのだけれど、Next.jsの体験がとても良く、楽しかったのでたくさん試行錯誤したくなった。この体験を良い感じにScalaに還元できたら面白いな…

HTMLとDOMとの違いメモ

フロントエンドをたまに遊びでいじっているのだが、HTMLとDOMって何が違うのかよくわかっていなかったので調べたメモ。 HTMLはMarkup Languageとあるように、ドキュメントをマークアップする一種のシリアライズフォーマットである。 DOM(Document Object Mod…

ScalaのRPCライブラリAirframe RPCを使うとNext.js風に簡単にサーバ=クライアント通信できる

Scalaの便利かつモジュラーなライブラリ群であるAirframeシリーズに収録されているAirframe RPCで遊んでみたところ、とても面白かったので紹介。 wvlet.org wvlet.org あらすじ Airframeとは Airframe RPC Scala(JVM)とScala.jsとでサーバクライアント通信を…

自前でOG:Image生成メカニズムを構成する方法

こういう画像を作る仕組みを作った。 画像を生成したい人は世間にそこそこいるかもしれないし、自分は比較的?簡単な方法でそれを達成した。せっかくなのでやり方をみんなに教えようと思ってこの記事を書いている。 全てのソースコードは以下にOGImagekunと…

ScalaTestでのテスト処理の前後に特定の処理を実行する方法

ScalaのテストフレームワークであるScalaTestでは、他のテストフレームワーク同様に、各テストの前後に特定の処理を挟むためのbefore / afterの仕組みが用意されている。 環境 Scala 3.3.0(2系でも変化はないはず) ScalaTest 3.2.17 各テストの前後に処理を…

Artek Tokyo Store行った / Vitra Toolbox RE 買った

所用で東京は表参道のあたりに滞在していた。それはまた今度エントリにするけど。 かねてより行ってみたかったArtekの旗艦店が表参道にあるので、満を持して行ってきた。そこにはArtekの製品のほかにVitraの製品も取り扱っていて、ちょうど欲しかった小物入…

urxvt(rxvt-unicode) v9.31 / v9.30でPerlがv5.38.0のときに日本語が表示できなくなる問題の解消方法

2023年にリリースされているurxvt(rxvt-unicode)には、特定のPerlのバージョンがある場合に日本語(を含むUTF-8文字列)を表示できなくなる問題がある。本稿ではその(一時的な)解消方法を提供する。 rxvt-unicode urxvt(正式にはrxvt-unicode)は、UNIX環境で動…

関数型言語で登場する高カインド型(Higher-Kinded Types; HKT) と(* -> *) -> *みたいなやつの早わかりメモ

高カインド型(Higher-Kinded Types; HKT)とその表記について勉強したのでメモ。高階関数を知っているレベルからHKTをどう表記するかまでメモする。プログラミング言語として主にScalaを用いているが、Scalaでしか分からない概念は極力排している。知ってる部…

Kyoto.js 20で『ブログ内引用グラフを自作して引用一覧を作った話』を発表しました #kyotojs

Kyoto.js 20で掲題の通りの発表をLTとしてやらせてもらいました。資料は以下です。 www.3qe.us kyotojs.connpass.com 動機 僕はここ最近Scala.jsというAltJSテクノロジーを追いかけているのですが、ちょうどKyoto.jsがあるという情報を聞き付け、ここ最近の…

Scalaで文字列から数値を得るには.toIntOptionがオススメ

Scala 2.13以降では、文字列型Stringから各種の数値を得るためのメソッドが標準ライブラリに用意されており、これを使うことで簡単に文字列から数値を得られるようになっている。parseIntやtoIntと違ってエラーを起こさないので便利。 //> using scala 2.13.…

刮目せよ!! 2023年秋、TS連携もファイルサイズもUIもイケるようになった最近のScala.js事情の紹介

最近Scala.jsの話をすると結構な人がRTしてくれる。TypeScriptの他にAltJSには今どんなのがあるのかな、という話に引用RTでScala.js今アツいですよという話をしたら結構ウケた。世間的にはTypeScript alternativeに興味がある人も多いようだ。一方、ネットに…

RSSフィードをDiscordに流せるツール『rss2discord』のご紹介

RSSをDiscordに流したいって思ったこと、ありますよね?私もそうでした。しかしながら調べてみると単体でRSS配信を行うツールはないようで、なんでもできる多機能botがそのうちの機能の1つとしてRSS機能を提供していたりする。けどRSSを配信するためだけに別…

Scalaわいわいランドに参加するボタンをブログにつけました

プログラミング言語Scalaの日本語コミュニティとして、ScalaわいわいランドというDiscordサーバを運営している。 メンバーは順調に増えている一方、これから学ぼうという人にリーチしてほしいので定期的にTwitterで宣伝しているのだけれど、どちらかといえば…

スイカ食べそびれている

スイカ食べてないことに気付いたけど、もう九月も終わろうとしているので今年は完全に食べるタイミングを逸してしまった気がする。スイカバーは食べた。

ScalaのCatsにifMという便利なやつがある

ScalaのCatsにifMという便利なやつがある。IO[Boolean]に対して条件分岐を適用して、trueの場合とfalseの場合とで異なるIOを返すというもの。別にIOでなくとも良くて、Monadなどの仲間であればifMは定義されている。例えばOption[Boolean]に対してもifMが使…

メタ思考が好き

プログラマや数学徒は抽象化が好きである。自分もご多分に漏れずそうで、例えば自分がよくやるのは思考について思考するもので、「あ〜今自分はこういう風に判断しているな〜」「こういうふうに考える傾向があるな〜」という感じに、一段階上に持ち上げて考…

Scalaのfs2でIOの実行結果をストリームに戻すにはevalMapを使う

プロの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の結果はどうなるでしょう

% touch a % ln a b % touch c % mv c b % ls -li a b つまり、ハードリンクに対してmvした場合はハードリンクの双子の中身はどうなるのか?という問題です。 答えはinode番号は別々、ファイルの中身も守られます。 ちなみにcp c bするとinode番号が同じまま…

Scalaのfs2でクソデカ文字列ストリームを特定のデリミタで分割して処理する

巨大テキストファイルが--------\nとかで区切られていて、その単位で変形して使いたいときに使える技。クソデカといっても今回は10MiBくらいでした。ぜんぜんデカくなくてごめんね。 fs2のバージョンは3.9.2。 いきなり解を示すと、.repartition(s => fs2.Ch…

RFCで標準化されたバイナリ・シリアライゼーション・フォーマットのCBORとライブラリのBorerを試してみた

先日@110146氏とごはんを食べていたのだが、そのときにBorerというライブラリがおもしろいという話を聞いたので、試しに使ってみることにした。他にもSmithyやDeep Java Libraryといったライブラリの話も聞いたので、順に書いているというわけ。 CBOR CBORと…

Scalaの難しさをインターネットから集めてみる

Scalaは難しいと思われたり敬遠されがちである。Scalaの難しさについてTwitterなどでアンケートをとったり、ネットでググって意見を吸い上げてみた。議論の叩き台にするみたいな用途を意図しています。 ご意見や記事募集中です。できればTwitterじゃなくて記…

自分の悪い癖を見つけたので直したい

最近自分の良くないところについて考え直す機会があって、いくつか直したい箇所が明白になってきた。 自分は先んじて物事を考えない傾向があって、出たとこ勝負になったり、事態が悪化するまで放置してしまったり、積極性が無かったりする。そうなった理由は…

これだけ読めばOK!Scalaの環境構築2023

自分は、仕事でScalaを数年間・プライベートな経験を含めると10年弱のScalaの経験がある、そこそこの熟練Scalaエンジニアだ。チームにメンバーが入ってきたり他人に勧めるたびにScalaの環境構築を教えている一方、最新の知見を反映した記事が無くて他人に勧…

Scala CLIのJMH機能を使ってコレクションのベンチマークを取ってみた

Scala CLIにはJava Microbenchmark Harness (JMH)を使ったベンチマークを取るための機能がある。JMHでは、いくつかのアノテーションをつけてプログラムを起動することで、自動的にパラメータを調整したベンチマークを実行してくれる。ベンチマークはメソッド…

ViteでError: EISDIR: illegal operation on a directory, readって表示されるときは"workspaces": ["./"]をpackage.jsonに足すとよい

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…

入門Laminar: 0. もうひとつの世界のReact -- Laminarをビルドする

この記事はScala.jsのUIライブラリであるLaminarをステップバイステップで学習していこうという記事の第一弾だ。 いくつかの記事に分けて、現時点で自分が知っているLaminarの知識や知見をまとめていくつもりだ。 あまりどのような構成にするかは考えていな…

一定時間ホバーするとイベントがトリガーする仕組みをLaminarで実装する

実装する必要があったので、一定時間特定の要素にマウスホバーするとイベントをトリガする処理をLaminarで実装してみた。思っていたよりも直感的に書けた。 LaminarとはScalaJSのフロントエンドライブラリ。かなりざっくり言うとReactやVueの仲間といったと…

★記事をRTしてもらえると喜びます
Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?