Lambdaカクテル

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

Invite link for Scalaわいわいランド

Scalaのコーディングスタイルガイドでは名前は短いほうがいい

仕事でこういうシチュエーションに遭遇した。 foo.bar.buzz.Piyoというクラスがある(パッケージがfoo.bar.buzz) 同名のhoge.fuga.Piyoというクラスがよそのパッケージにもある(パッケージがhoge.fuga) こういう場合、BuzzPiyo / FugaPiyoみたいに弁別できる…

古代文明の謎を追うようにコードや仕様を読む / 「理解」のシノニムを具体的に決めてみる

ツイッターにも書いたが、エンジニアをやってる根源的な動機として、「難しいけどイケてる仕組みを理解わかりてェ・・・」というものがあり、それに衝き動かされてソフトウェアエンジニアという職をやっているようなところがある。 その一方で、難しい仕組み…

Akka HTTPでContent-Typeを設定する方法

Akka HTTPは素朴なライブラリなので、特にそういうプラグインを使っていない場合は自分でレスポンスのContent-Typeを設定する必要がある。この記事では、Akka HTTPでContent-Typeを設定する方法と、Acceptヘッダを設定する方法を説明する。 この記事ではAkka…

ScalaCheckで任意の範囲のDateTimeを生成するGen

プロパティベースドテストを行うライブラリであるScalaCheckには、任意の値を生成できるGenという仕組みがある。任意の日付時刻を生成するためのGenを定義したメモを残しておく。 Gen Genとは値を生成するためのジェネレータである。例えばGen.longは任意のL…

エンジニア入門者に習得してほしい「熟考」とは何か、それは論理的飛躍の最小化ではないか

会社の1on1があって、 id:yigarashi と30分くらい話したら面白い話がいろいろできたので紹介する。掲題ではエンジニアと書いているが、別にウェブ系ソフトウェアエンジニアに限られた話でもないし、ホモサピエンス全員におすすめ、考える葦の皆様におすすめ…

最高の体験

最高の体験をしなければならない

ActivityPubで投稿を表示できるようにした

これは雑な日記。 blog.3qe.us blog.3qe.us こういうことをやっていた。HTTP Signatureの仕様がバラけていたり、フィールド名の内容をなぜか勘違いしてい(publishedフィールドにはその投稿を作成した時刻が入るのだが、なぜか投稿のURLを入れてしまっていた…

SHA-256ダイジェストをBase64で得る(hex形式をBase64に変換する)

わけあってHTTP Signatureの実装をしており、SHA-256と仲良くしようと頑張っている。 asnokaze.hatenablog.com しかし、HTTP上ではSHA-256ダイジェストはBase64で表現されることが多い一方で、linuxでsha256sumコマンドを使ってもhex形式で結果が返るので、…

ScalaのJSONライブラリであるCirceで余分なフィールドを持つJSONをデコードする

ScalaのJSONライブラリであるCirceは、JSONをパースしてさらにcase classへと変換してくれる機能があるけれど、余分なフィールドがJSONに生えていたらどうなるのか気になったので試してみた。 build.sbt 依存性は以下の通り。 scalaVersion := "3.2.2" libra…

ActivityPubサーバを実装したかったのでまとめWikiを作ったら人々が集いつつある

最近のTwitterの荒れ具合と、Fediverseへの流入がいちじるしい。そんな中自分は、Fediverseという愉快な電網の共通語であるActivityPubの上で、botを動かそうと練習を重ねている。 blog.3qe.us この情報を自分のアカウントで発信していると、ActivityPubの実…

田舎の昼のサイレンbotをActivityPubで実装する(マストドンにアカウントを認識してもらう編)

田舎の昼のサイレンbotというbotがある。正午にウゥーーーーとつぶやくだけの、謎のbotである。 https://twitter.com/Noon_Siren_bot 最近Twitterもあやういので、練習もかねてActivityPubに移植し、マストドンやMisskeyから閲覧できるようにしようと思った(…

Twitterに投稿できなくて困っています & こっちにいます

www.itmedia.co.jp こういったニュースが話題ですが、 僕は投稿もできなくて困っています。シャドウバン的なやつ?スパム認定された? 追記 なぜかRTはできるようなので、アカウント名に助けてくれ〜というメッセージを添えて程々にRTを行ってメッセージを伝…

Scala.jsを介したJavaScriptのObjectとの相互運用について勉強した

Scala.jsはScalaからJavaScriptのトランスパイラであり、執筆時点でバージョン1.13.2を記録しており、活発に開発が行われている。加えて、これを補助するコンパイラプラグインであるScalablyTypedによるTypeScriptの型定義からScalaの型定義への転写によって…

TypeScriptのvoidをasync voidとして継承できる / ScalablyTypedによるTypeScriptライブラリとScala.jsとの相互運用で、async functionがうまく変換されない問題

困っているので、思考の整理を兼ねてメモしておく。各項目がまちがっていたらおしえてください。 動機 Scala.js ScalablyTyped ScalablyTypedにおけるvoid ScalablyTypedにおけるasync TypeScriptにおけるasync void TypeScriptにおけるvoid methodのasynchr…

Codocのテスト記事

Codocと連携して、はてブロで有料記事を作れるようになった。 blog.hatenablog.com 実際に使ってみる。 今日の運勢は・・・

Obsidianのタグはスラッシュで階層化できる / 多元的な階層化の良さ

しばらく前からObsidianというMarkdownのエディタを愛用している。 blog.3qe.us blog.3qe.us blog.3qe.us 原稿執筆やメモ書きにとても良いエディタなので、ぜひ使うことをおすすめする。 今回は主として既にobsidianを使っている人向けの記事であるが、使っ…

Scalaのタプルまわりのわだかまり

フォロワーがHaskellの問題で困っていて、助けてくれ〜!! と言われたのだが、 当方Haskellが母語ではないのでハスケルヨクワカリマセン状態になってしまった。というわけでScalaでお答えすることにした。 #Haskell でもっとスマートなプログラムを考えて下さ…

要精密検査

前回 blog.3qe.us 人間ドックの結果が返ってきたのだけれど、たくさん文字が書かれていて、精密検査しなければならなかった。 赤血球多すぎワロタ これは毎年言われてる 脂質の代謝がなんかおかしい おっちゃんやん 糖の代謝がなんかおかしい おっちゃんやん…

AWS LambdaでScalaを動かし、JSONを入出力する

先日AWS LambdaでScala 3を走らせる方法を解説した。 blog.3qe.us 解説したというか、何事もなく動いたという感じだ。 今回は安定してJSONを入出力するテクがわかってきたので解説する。 完成品はこんな感じになる: import java.io.InputStream import java.…

Scalaのobjectで、finalなvalと普通のvalとではコンパイル結果がどう違うか検証する

ふと気になっていたので、素早く検証することにした。 ちなみに逆コンパイルなどではjavapコマンドを使うのが良いと教えてもらった。 javap コマンド?— がくぞ (@gakuzzzz) 2023年6月19日 検証方法 バージョン ソースコード コンパイル シグネチャの差分を…

マネーフォワードのCSVをParquetに変換する

いろいろと分析したいので、マネーフォワードでエクスポートできるCSVファイルをSparkを使ってParquetに変換したメモ。 マネーフォワード 特に今更説明する必要もないが、マネーフォワードはオンラインで動作する家計簿サービス。カードと連携したり、勝手に…

Apache Sparkはドットかアンダースコアからファイル名が始まると読み込んでくれない

Spark 3.4.0で確認した。例えば、.foobar.csvのようなファイルを読み取らせようとしても、読み込んでくれないし、しかし一見成功したかのような振舞いになるので注意しなければならない。 //> using scala "2.13" //> using lib "org.apache.spark::spark-co…

http4s + sbt-revolverでリロードが遅いときはデフォルトタイムアウトを設定してください

苦しんでいる人をちらほら見たので解決策を示しておく。 tl;dr このように、http4sでサーバを書くとき、バックエンド実装がEmber(デフォルト)の場合はwithDefaultTimeout()を使って短いタイムアウトを指定するようにしてください。 import scala.concurrent.…

Scala Nativeがいつのまにかシングルバイナリを吐けるようになっていた

ScalaをネイティブコンパイルしてJVM無しで実行ファイルとして動かせるようにする仕組みであるScala Nativeが、いつのまにかシングルバイナリを出力できるようになっていた。これにより、Goと同じように1つのバイナリさえコピーすればScalaを動かせる環境が…

元気が無いがちである

もともと睡眠/起床失敗しやすい体質なのだが、やはりそういう日は元気がないことが多い。したがって元気が無い日がありがちである。 元気がないと 趣味や仕事の進捗が悪くなりがち 指摘やアドバイスを受け入れるだけの余裕がないがち 単純に、思考のスピード…

はじめるコモナド -- モナドの双対を使って一定のルールでリストの内容を結合する

HaskellやScalaで関数型プログラミングをしていると、コなんとかというやつに出くわすことがある。でもコなんとかからのアプローチは決まってそっけない。深夜にやってる映画を見せまいとする親のようだ。まだ君には早いよ、そのうちね、といった具合に。こ…

Scalaのバージョンを上げたがScalafixが古くてコンパイルしなかった事例

最近Scala 2.12.18が出た。最新のJDKとかに対応したり、マイグレーション向けの機能が拡充されている。 github.com そんでScala 2.12.16をScala 2.12.18まで上げたら、手元ではコンパイルが通るけどCI(GitHub Actions)では通らなくなってしまった。ログを見…

油そば容器が落下し、有害物質が飛散したインシデント

俺: リモートワーク 事業場*1規模: 1人 機械設備・有害物質の種類(起因物): 汁が残った油そばの容器、油 災害の種類(事故の型): なかなか取れない油との接触、部屋が臭くなる 被害者数 死亡者数:0人 休業者数:0人 不休者数:0人 行方不明者数:0人 嫌な気…

Optics: 「パス」に型を付ければ、データ全体に型を付ける必要はない

あまり知られていない関数型言語のおもしろ概念として、Opticsというものがある。 Opticsとは、オブジェクト指向言語で言うところのSetter/Getterを一種の関数として捉え、いくつかの便利な特性を付与したものの総称だ。この便利な特性によって、Setter/Gett…

Scala 3のimport構文のワイルドカードは_ではなくて*になっている

Scala 3には大きな構文上の変更、例えばimplicitまわりが整理されてgivenなどに変化したりしている一方で、細やかな機微にわたる変更も含まれている。今回説明するimport構文上のワイルドカード記号の変更もその一部。 Scala 2では、あるパッケージに属する…

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