Lambdaカクテル

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

技術

Bluetoothキーボードとxcapeとの組み合わせで、スペースキーを押すとなぜか機内モードになる怪奇現象が起こる

ほぼタイトルの通りなのだが、怪奇現象が起こって困っている。 FILCO Majestouch Convertible 2を使っている 青軸最高〜〜 Linux (OpenSuSE Tumbleweed)ユーザ 自分はスペースキーをShiftに割り当ててSandSを行うため、xcapeを使っている(後述) Bluetoothモ…

PGP鍵を交換しました + 令和最新版のPGP鍵運用メモ

PGP鍵を交換しました。というのも、元々使っていたPGP鍵はYubikey上で生成して使っていたところ、数ヶ月前にYubikeyを紛失するという赤っ恥の行いをやらかしてしまい、とっとと失効させて作り直す必要があったからです。ありがたいことに手元に旧い鍵の失効…

Scalaをスクリプト言語にしよう! Ammonite文法最速マスター

Ammonite文法最速マスター この記事は、Scalaのスクリプティング環境でありREPLでもあるAmmoniteの基礎的な利用方法をマスターし、ちょっと凝ったシェルスクリプトをAmmoniteスクリプトに書き換えられる程度のAmmonite力を手に入れるためのものです。 Ammoni…

EmacsでFlycheckのウィンドウをトグルできるようにした

自分は普段の開発ではEmacsを使っていて、VSCodeユーザに笑われつつも(被害妄想)今のところ普通に開発できている。 そして、エラー表示にはFlycheckを使っている: www.flycheck.org FlycheckはLSP-modeに対応しているので、LSPで検出したエラーをEmacsの枠組…

Perlのqw()みたいなやつがScalaにも欲しいので作った

追記2: ライブラリ化した。Mavenにpublishする手続きをちびちびやっている。 github.com 追記: 実装おかしかったのでちょっと修正した Perlにはqw()という文字列のリストを構築するための便利な構文があって、以下の表現は等価だ: ("foo", "bar", "buzz", "q…

一回しか変数を呼べなくすることは可能か

バグを出しにくいソフトウェアを型で実現、みたいな話題が好きで、しょっちゅう型でなんとかできないか考えている。 そんな中、そもそもバグが出るのって、1つの変数を複数回「見る」ことによるものも多いのではないかと思った: 同じ変数が、離れた別々のス…

変数echoとsedのコンボはbashだけで完結できる / bashの文字列置換いろいろ(ときどきzsh)

GitHub Actionsのyamlファイルをいい感じに矯正してくれるActionlintというのを入れていたら、SC2001という項目を指摘された。 www.shellcheck.net string="stirng" ; echo "$string" | sed -e "s/ir/ri/"というコードは、string="stirng" ; echo "${string/…

忙しい人に判断を仰ぎたいときは松竹梅プランを作ってチェックボックスを埋めてメンションしてもらうようにすると合理的で便利

普段の暮らしにおいて、実装の仕様をエンジニア単独では決められないことがあって、そういうときにはマネージャーとかディレクターといった意思決定可能な立場の人の判断を仰ぐことになるのだけれど、そういう立場にある人は無限にミーティングをしていたり…

GitHub ActionsでJSONを組み立てるのは actions/github-script 経由が一番早そう

GitHub Actionsでworkflowを組んでいると、外部ツールと組合わせるために、JSONを組み立てなければならないことがある。Actionに直接渡すだけだとJSONの出る幕はあまりないが、外部サービスになんかするといった時にはすぐJSONが必要になりがち。 二重の苦労…

普段はPerlとScalaを書いていますが #rubykaigi 2022に参加してきました / 吸えそうな知見

普段はPerlとScalaを書いて暮らしていて、Rubyを書くのはcapistranoを使うとき・・・という位のWebアプリケーションエンジニア、 id:Windymelt です。株式会社はてなで、はてなブックマークを開発しています。 普段は、関数型テクニックの話をよく記事に書い…

プログラミング向きな等幅フォントBerkeley Monoを購入した、めっちゃ良いのでおすすめです

Berkeley Monoというフォントがある。 berkeleygraphics.com プログラミングなどに使える有償フォントで、個人向けライセンスを購入すると75ドルで永年アップデート特典が得られる。 Berkeley Monoっていうフォントを大枚はたいて購入したんだけどマジで最高…

Haskellのguard/<$のコンボはCatsではasを使う

覚えておきたいのでメモ。 x <$ guard (y == z) こういう式をCatsで表現したいとき、Catsには<$も$>も、そのままの演算子では存在しない。そのかわり、Catsにはasという名前で同等のメソッドがある。 typelevel.org F[A] => B => F[B] as つまりこういう感じ…

おい少年、g(x)(f(x))になるパターンはScalaのCatsでg <*> fにできるぜ

tl;dr g(x)(f(x)) === g <*> f 共通の引数を持つ1引数関数たちはReaderとして合成可能であり、ReaderがApplicativeのインスタンスであることを利用している 本編 おい少年と呼び掛けてみたものの、関数型女子高生がいるかもしれないよね。それはさておき、 …

ブラウザおすすめマウスジェスチャn連発

自分はVivaldiというブラウザを使っている。プライベートでも仕事でも。 vivaldi.com Vivaldiは、マウスジェスチャを標準搭載している。マウスジェスチャとは、右クリックしながらマウスを一定の型で動かすことで、特定の機能をトリガーするといった仕組みだ…

Cats EffectのforeverMのMはモナドのM

Cats Effectには、foreverMという >> を無限に繰り返すことと等価なメソッドがある: import scala.concurrent.duration._ import scala.language.postfixOps val wait = 100 milliseconds def indicator: IO[Unit] = IO.sleep(wait) >> (IO.print("\r|") >> …

読むたびに内容が変化するファイルは作成できるか

こういう話題を見て、そもそも読み出すたびに内容が変化するようなファイル(としてふるまう何か)を作ることはできるだろうか?ということを考えた。 linuxで時間帯によって設定を変える方法の定石ってなんだろう やっぱタイマーで設定ファイル書き換え?なん…

#rubykaigi に参加するのでWalletPassesをインストールした

RubyKaigi 2022に参加する。 rubykaigi.org 会場は三重県で、近所なので航空機を取らなくてすむから助かった。 良い時代なもので、入場するときに呈示するチケットも電子化されていて、こういう感じのメールが届く。 入場券のPDF もしくは、Apple Walletに追…

CirceでShapelessのHListとJSONとを相互変換するにはcirce.shapesを使うとよい

Circeというライブラリがある。ScalaでJSONまわりの変換とかをやってくれるライブラリだ。 circe.github.io dev.classmethod.jp 他方、Shapelessというライブラリがある。ScalaでHeterogeneous List、つまりリストなんだけど異なるデータ型を含むリストを扱…

Cats Effect 3のDeferredでGoroutine / channelっぽいことをする

GolangにはGoroutineという良いやつがある。非同期処理をいい感じにやってくれる賢い軽量スレッドだよ。 go-tour-jp.appspot.com そして、Goroutine同士はchannelという概念を通じて会話することができる。 go-tour-jp.appspot.com 他方、Scalaの非同期処理…

ScrapboxをUNIX的に縮退したScrapbogusを自前で動かしている

こういう記事を読んだ: uma-the390.hatenablog.com まず前提として、自分はScrapboxのヘヴィーユーザで、加えて会社でもScrapboxが大々的に使われている。いまプライベートScrapboxのページ数を数えてみたら、974ページあった。だからこの記事はScrapboxをdi…

ちょっとしたデータファイルのフォーマットにJSON Linesを使うと便利

データ構造が決まるとアルゴリズムも自ずから定まる、みたいな話もあるように、ソフトウェアエンジニアリングの文脈では「どうデータを持つか」が重要だ。これはちょっとしたシェルスクリプトでも同様。 自分はUNIX哲学が好きで、なんかちょっとしたツールを…

K-means法でドット絵を作る記事が面白かったのでScala.jsで真似てみた

こういう記事を見た。 zenn.dev これは非常に面白かった。特に、寿司の画像が面白かった。そこで、自分も同じように寿司の画像をドット絵にしてみたいと思い、真似することにした。 ただ真似するだけではつまらないので、Scalaで関数型っぽくスマートに実装…

はてなブログに見出しにid属性付けてくれって言ったらつけてもらえた

うれしすぎるンゴ〜〜〜 あらまし 自分は技術記事をよく書いているのだけれど、そういう記事は基本的に構造化して書くから、必然的に見出しの量も多くなる。そして、構造化されているがゆえに、「この節の部分にリンクしたい」ということがあるものである。 …

SKKで接頭辞・接尾辞を入力するためには専用の方法が用意されている

SKKで入力していて、たまたまミスタイプで>を入力していたら、なぜか変換が走ってびっくりした。 ちょう> ↓ 超 役物を入力したら自動的に変換される機能があるからその一環かと思っていたけれど、>自体は入力されていないので別の機能みたいだ。 TL;DR 接頭…

jqでキーに対応する要素がないときnullの代わりに空文字を返すにはemptyを活用すると良い

シェルスクリプトとの組合わせでjqを書く機会があり、助かったのでメモ。 jqとはお馴染みのJSONオペレータであり、JSONを入力して色々な操作ができる。シェルスクリプトから使うと便利だ。 そんな中、jqとシェルスクリプトとでは「要素が無い」をどう表現す…

いもす法をRecursion Schemeを使って実装する(Scala + Droste)

いもす法というのがある: imoz.jp ようするに、多次元に累積和を拡張したもの。競技プログラミングで2次元いもす法がよく使われるらしい(筆者は競プロやらないのでよく知らない)。 そして先日Recursion Schemeについていくつか記事を書いた: blog.3qe.us b…

Recursion SchemeについてScalaのDrosteで勉強する(むずかしい理論はガン無視する)

前回、ドドスコ問題を解いた。 blog.3qe.us 記事ではRecursion Scheme自体の話題や、各構成要素の子細には立ち入らなかったため、Recursion Schemeを理解するためには不十分だった。そこでこの記事では、再帰的な構造、FixとPattern Functorとの関係、Recurs…

Recursion Schemeによるドドスコ問題の恐るべき解法

さる8月1日、計算機科学の根幹を揺るがすドドスコ問題が出題され、エンジニアたちは震撼した(意味: 面白問題が出たので、なるべくヘンテコな解法を使って己の技巧を誇示するためにエンジニアたちは競ってコードを書きはじめた)。 【問題】配列{"ドド","ス…

zshメモ: 直近のコマンドの最後の引数だけ取り出す / 最後の引数以外を取り出す

直近のコマンドの最後の引数だけ取り出す よくやるのでこれは覚えている。直前に入力したコマンド列のうち、最後の引数だけが取り出されて置換される。 !:$ 直近のコマンドの最後の引数以外を取り出す ↑の反対のことを行う。サブコマンドのみを置換したい場…

NumpyのCommon Lisp実装Numclがあるらしい

Pythonの(といいつつCで速度を稼いでいる)Numpyという数値計算用のライブラリがあり、広く使われているのは誰もが知るところだと思う。実際には、WebエンジニアからはPandasといったフレームワークを被せて使うことが多い。 そんな中、NumpyのCommon Lisp…

Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?