Lambdaカクテル

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

Invite link for Scalaわいわいランド

2023-01-01から1年間の記事一覧

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の仲間といったと…

ScalaプロジェクトをMaven Centralにpublishするメモ

この記事はScalaプロジェクトをMaven Central Repositoryにリリースして全世界から使えるようにする手順をまとめたものである。作業は大別してSonatype側とビルドツール側とに分かれる。今回はビルドツールとしてMillを利用したが、作業の過半は同じである。…

Scala 3.3.0でunused import/variablesのチェックを有効化するには-Wunused:allを使う

未使用のimportや値を検査するコンパイラオプションとMetalsやScalafixとの関係について調べたメモです。コンパイラまわりの実装を追いきれていない可能性があるため、間違っていたらご指摘いただけると嬉しいです。 かつてScala 2系ではunused importなどの…

CatsのfoldM(foldLeftM)を勉強した

foldMについてちょっと勉強したのでメモ。 文脈 おさらい: foldLeft foldM foldMの振る舞い 発展例: ルールエンジン foldMの出番 まとめ 文脈 このへんの会話が流れてきたけど、そういえばfoldM使ったことなかったな、と思った。 やはり traverse … traverse…

松竹梅はsortしても松竹梅になる

物事の順位付けをするとき、松竹梅という雅な表現がよく使われる。自分もよく使う。 blog.3qe.us コンピュータにとってもそうなのだろうか?そう考えた私は実際にソートしてみることにした。 % echo $LANG ja_JP.UTF-8 % sort --version sort (GNU coreutils…

Scala Stewardを自分のOSSに導入する方法(5分で可能)

Scala Stewardという、自動的にScalaの依存性をアップデートしてくれるソフトウェアがある。ざっくり言うと、Scalaに特化したRenovateやDependabotみたいなやつ。 github.com 謎のゆるいネコがマスコット 以下のようなPull-Reqを作ってくれる。どうやらbuild…

CoursierでScala CLIをアップデートできないときはcsをインストールし直すと良い

プログラミング言語Scalaには、Scala製のツールやアプリケーションをインストールする基盤としてCoursierというソフトウェアが用意されている。グローバルに使うソフトウェアをインストールするのに主に使われ、振舞いとしてはnpm install -gに近い。 get-co…

Millのテストディレクトリはsbtと構成が違うので注意

ScalaのビルドツールであるMillでテストを書こうとしたらsbtとディレクトリ構成が違っていて詰まっていたのでその違いを記しておく。 % mill --version Mill Build Tool version 0.11.2 Java version: 18.0.2, vendor: Amazon.com Inc., runtime: /home/wind…

zshでRPROMPT設定してるならtransient_rprompt設定しましょう

職場のScrapboxで、 はてなのエンジニアのPS1が集まってくるページというページが盛り上がっていた。要するにシェルプロンプトどうしているかという話題。 そんな中zsh使っている同僚がRPROMPTに情報を集約してると言っていた。RPROMPTというのは画面の右側…

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