Lambdaカクテル

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

Invite link for Scalaわいわいランド

動画・音楽ファイルの秒数を算出するにはffprobeを使うと便利

動画ファイルや音楽ファイルの長さを知りたいことがある。例えばファイルをエンコードし直して一定のファイルサイズに収めたいときなどは、ターゲットとなるビットレートを算出するために秒数を得る必要がある。 メディアファイルの秒数を得るには、ffmpegに…

関数型プログラミング: map結果を引数とのペアにしたいときはStateが便利だったりする(StateTもあるよ)

この記事では、Scala 3と関数型ライブラリであるCatsを時折使いつつ、Stateモナドを利用することでmap結果にうるおいを与えられるという話題を紹介します。 よくある処理: mapしてからペアにする まあまあよくある: メソッドはたまに値返さないことがある ま…

初心者向け: Scala CLIでScalaをはじめよう

この記事は Scala Advent Calendar 2023の19日目の記事です。19日って「あ〜今月が終わる」ってなるちょうど良い塩梅の日付ですね。 qiita.com この記事では、Scalaの総合ツールであるScala CLIを利用する様子を紹介し、Scala CLIでScalaのちょっとしたアプ…

マイクロサービスコンビニ弁当アーキテクチャ -- コンビニ弁当容器とカトラリーのライフサイクルを合致させることにより一時的結合状態を解消する

コンビニ弁当の空き容器が部屋に放置されがちで、それは端的に言うと自分がズボラなだけなのだけれど(Q.E.D.)、どうしてこうなってしまうのかということを考えていた。すると意外なところに答えがあった。 最近自分は『モノリスからマイクロサービスへ』を…

Scalaで一定のコレクションを無限に繰り返すようなストリームを作る

このような、一定の要素を無限に繰り返したリストが欲しいことがある。無限に続くリストは通常のリストでは扱えないため、ストリームを使わなければならない。Scala 2.12まではストリームのためにStreamを使い、2.13以降はLazyListを使うことになっている*1*…

リモートワーク大時代に来るアーキテクチャ、それは疎結合

なんかタイトルでデカく出てしまったけど、リモートだと疎結合なアーキテクチャのがうまくいくね、という経験をしたという話。特にオチはないです。ソフトウェア設計が好きな皆様のおやつとして読んでください。 COVID-19でリモートワークが拡大した 最近や…

シンプルで使いやすいマイクロHTTPフレームワーク『Cask』を紹介するよ

今日はScalaで動作するマイクロHTTPフレームワークであるCaskを紹介したいと思います。Scalaを見る目が変わると思います。Scalaはけっこう複雑寄りのエンタープライズグレードの超強いライブラリが多いような気がするのですが、今回ご紹介するのはとてもeasy…

AWS Lambda FunctionをScala.jsで書いて爆速Scalaを満喫しよう

この記事は、Scala Advent Calendar 2023の5日目の記事です。 qiita.com 大遅刻してしまいましたが、Scalaは遅延評価できるのでモーマンタイですね。 この記事では、Scalaをクラウドネイティブな環境で使う例の紹介として、ScalaをJavaScriptコードにトラン…

Node.jsのストリーミングAPIにPromise版が生えていた、こっち使うと便利そう

昨日こういう記事を書いた。 blog.3qe.us ↑ではがんばってパイプラインが送るイベントを監視してPromiseでラップしていたけれど、実は公式にPromise版のAPIが提供されていた。 nodejs.org これを使うといい感じに入出力が終わったタイミングで完了するような…

Node.jsでGoogle Cloud Storage上のファイルからファイルへ、変換しつつ保存する

マニアックなネタだが割とハマったのでメモっておく。 Google Cloud Storage 詳細は割愛するが、要するにAWS S3のGoogle版である Node.js SDK Node.jsにはGoogleまわりのSDKが提供されていて、Cloud Storageを操作するためのSDKも用意されている。 cloud.goo…

『データ指向プログラミング』読んだ / OOP以前とDOPとの対比と差分などについて

先々月あたりに邦訳が出た『データ指向プログラミング』を読んだ。めちゃくちゃざっくり言うとオブジェクト指向における「データと振舞いの一体化」というドグマを手放させるもので、めちゃくちゃざっくり見るとC言語的な構造化プログラミングの世界に回帰す…

Node.jsでCloud Storageのファイルをストリーミングしてffmpegに渡したかったけどffmpegはFIFO非対応っぽい

所用で、Cloud Storageにある動画ファイルをopus(音声)形式にエンコードしたかった(Node.jsとffmpegで)。 動画ファイルがデカいのと、生成されるopusは小さいので、いちいちストレージに保存するのが手間だと考えた。そこで、間にmkfifoして作った名前付きパ…

冬をエンジョイする

ここ数日はまだギリ耐えられていたのだが、ついにガチめに京都は寒くなってしまったので困っている。毛布とかの準備を(一応)進めているけれど、何年住んでてもこの寒さに慣れない。 とはいえ冬は冬で風情があってよいもので、アロマキャンドルを出してみたり…

PyPIのScala版、Scaladexにコントリビュートした

Scalaのライブラリを検索・一望・依存性定義をコピペできたりする便利なサイトであるScaladexにコントリビュートした。という話を自慢するだけのエントリです。 Scaladexとは ScaladexとはRubyにおけるrubygems.org、PythonにおけるPyPIの、Scala版である。…

Google CloudのCloud FunctionsでScalaを実行する

仕事でCloud Functionsを触る機会があったのでメモ。この記事はScala Advent Calendar 2023の2日目の記事です。 qiita.com 昨日の記事はこちら。 zenn.dev AWSがLambdaを提供しているのと同じく、Google CloudはCloud Functionsというサービスを提供している…

秩序があると混沌よりも良いんじゃ(プロジェクト遂行における創発段階においても段取りや問題探索空間の縮小が必要という話)

同僚と1on1していて面白い話をしたのでメモ。 プロジェクトの不確実性 前提として、自分はソフトウェアエンジニアとして働いているのだが、0→1的な仕事の場合、プロジェクトは最初は不確実で混沌とした状態にあり、しばらくの創発的な状況を通過していくこと…

個人コミュニティはDiscordでいい気がする

昔はSlackで自分しかいないワークスペースを作っていたんだけど、webhookまわりの設定がいろいろ面倒で、雑にwebhook urlを生成して使えるDiscordのほうが何も考えなくていいなと思うようになった。フィードとかを流したいし、各種botの実験場にしたい。 Twi…

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.…

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