タグ

ブックマーク / blog.3qe.us (166)

  • すべてのコードやライブラリ自体が技術的負債である / 高利率な技術と低利率な技術 - Lambdaカクテル

    技術的負債という言葉がある。もともとは、「楽するために導入したが、メンテにコストがかかるようになってしまった技術や構成」くらいの意味合いで使われているように思う。しかし、そもそも全部が負債ではないか、というのがこのメモの趣旨である。 負債 同僚とSlackで会話していると、「けっきょくどの言語を利用しても負債になるときはなるし、大抵負債になる」といった話になった。言われてみればそうで、基的にコードというものは書いたそばから負債になっていく。去年書いたコードのことも思い出せない。 そんな中で思ったのだが、そもそも、負債になるコードと負債にならないコードとがあったり、技術が「負債化する」のではなく、コードや技術そのものが負債なのではないか。そして、どの言語で書こうが負債からは逃れることができない。負債にならないコードは存在しない。ゆえに、コードや技術は無ければ無いほど良い、ということになる。

    すべてのコードやライブラリ自体が技術的負債である / 高利率な技術と低利率な技術 - Lambdaカクテル
    Windymelt
    Windymelt 2024/05/23
    id:toro-chan 利率と書いてたのは、リターンではなくて我々が返さなければならない負債の利率という意味で書いてました。
  • Tagged Type(Branded Type)を使って飛行機の不時着や人工衛星紛失を防ごう / Scala 3ではTagged Typeを簡単に作れる - Lambdaカクテル

    Tagged Type というテクニックがある(TypeScript界隈などではBranded Typeと呼ばれているようだ)。実行時の型としては同じだが、型システム上はこれを区別して別物として扱い、混同できなくする仕組みを作るためのものだ。 AIくん!サムネイラスト作って!と頼んで作ってもらった画像 Tagged Type 単位の取り違えによる事故は後を絶たない。世の中には、キログラムとポンドを混同して飛行機があわや墜落しかけたり、メートルとヤードを混同して人工衛星がどっかに行ったりしている。尊い人命や国民の血税と比べるといささか霞むかもしれないが、ユーザIDとペイロードを間違えて送信したり、金額と口座番号を取り違えて送金したり、秘密鍵と公開鍵を間違えて表示したりしてしまえば、プログラマが大変な苦労をするか、会社そのものが傾くだろう。 しかしながら、データとしてはどちらも同じDouble

    Tagged Type(Branded Type)を使って飛行機の不時着や人工衛星紛失を防ごう / Scala 3ではTagged Typeを簡単に作れる - Lambdaカクテル
    Windymelt
    Windymelt 2024/05/11
    Phantom Typesは、「実行時には消えてる型」の総称で、それを利用して「同じ型にタグ付けして区別する」手法がTagged(Branded) Typesという認識です。
  • sed awk make 互換性 つらい うんざりザリガニ - Lambdaカクテル

    仕事でsedのコードをパパッと書いて使ったら、コードレビューで動かんと言われてしまった。そういえば、同僚はMacで、おれはLinuxだったな。 まぁsedならよくある話なので、しょうがないと思ってawkで同じことをした。awkは比較的もうちょっと互換性がある気がしているからだ(どっこいどっこいな気もする)。 しかしまだ動かないと言う。もう、大絶叫だ。アー。おしまいだ。カスがよ〜〜〜と思いつつ(社会人なので絶叫はしない)、よく調べてみるとmakeの互換性だった。というのも、試しにbrew install makeしてGNU Makeで試してみてくれ、と言ったら、あっさり動いたからである。実はsedもawkも悪くなくて、そいつを呼び出してるmakeに互換性がなかった。ごめんな、お前たち悪くなかったよ。でもそれはそうと互換性はない。 define foobarstring ... endef #

    sed awk make 互換性 つらい うんざりザリガニ - Lambdaカクテル
    Windymelt
    Windymelt 2024/04/20
    エッセイくらいの気持ちでご笑覧ください。それはそうとdeno/zxも今風なツールキットとしては良いなあ、と思っています。でも前提ツール増やすのは嫌なんだよなぁ(メンテ不可能になるため)
  • ScalaにGoroutineがやってくる!非同期処理ライブラリOxで遊んだ - Lambdaカクテル

    Channelスタイルの並行処理の記述を(もちろん型安全に)可能にするライブラリOxについて調べて試してみた。結論から言うと書き味がめちゃくちゃ良くて面白い。 ソースコードも置いておく。 github.com Ox Oxとは、sttpなどの開発でお馴染のSoftwareMillによって開発されているScala用の非同期ライブラリである。まだ非常に若く、活発に開発されている。 github.com Oxの特徴は、というか目的といっても差し支えないのだが、それはChannel指向の非同期処理、つまりGoroutineをScalaの上で実現している点だ。Goユーザならすぐに理解できるだろう。 百聞は一見に如かず。こんな感じのコードを書くことができる(v0.0.25時点)。 import ox.* import ox.channels.* import scala.concurrent.durat

    ScalaにGoroutineがやってくる!非同期処理ライブラリOxで遊んだ - Lambdaカクテル
    Windymelt
    Windymelt 2024/04/15
    再掲しておくか
  • DSL作りたいんだけど何もわからないので識者に教えてもらいたい - Lambdaカクテル

    トランスパイルするDSLを作りたいが何を読んだらいいのかまだよくわかっていないので、誰か教えてほしい、という記事です。 あらすじ DSL作りたい あらすじ 最近色々な技術を勉強している。具体的にはロガーの実装を読んだりRefinement Typesの勉強をしたりしている。仕事で必要というのが半分、興味半分といった具合で、素振りも兼ねてやっているので結果的に仕事で役立ったりしている。 個人的には、こういう暮らしの勉強みたいなところだと、業で勉強しなければならないものに加えて、シナジーが生じるような勉強をしたり購買をすると良いのだろうなと思っている。 たとえばラズパイとかN100のマシンを買ってちょっとしたk3sクラスタを作ってみたりするとクラスタ技術の良い勉強になる。さらに電子工作の勉強をしておくとラズパイと組み合わせてIoT的なこともできるようになる。 そんな中、ずっと自分が勉強したい

    DSL作りたいんだけど何もわからないので識者に教えてもらいたい - Lambdaカクテル
    Windymelt
    Windymelt 2024/04/03
    ツイートに知見が徐々に集まりつつある https://twitter.com/windymelt/status/1775374211734995158
  • 意図や詳細を掘り下げたいときは「その心は」と言うようにしている - Lambdaカクテル

    こういうツイートを見た。 少し違う話だけど、 目に見えるものすぐ口に出す私もこれにうんうんと頷きつつ、逆に「今日の富士山はキレイだね」と隣で言われると一言目に「そうだね」を返せない。 「今日の富士山綺麗だね」 「どこが?」←これで反感買う。 私の予想する相手の答え例「雲が無くてハッキリ見えてる所が」 https://t.co/Q2BlshhAxZ— ふーてん丸 (@huutenenigma) 2024年3月15日 kwsk ってインターネットスラングの中では珍しく敵意の無いものだったんだな。 https://t.co/m7FCoezS9X— すあま (@suama13) 2024年3月15日 思考の過程を掘り下げたくて理由を聞く、というのはわりとよくあるコミュニケーション様式である。日常でもよく使うし、仕事では実際にそれを聞くのが大事なので、もっと使う(それはそうと、あくまでつねにニコニコ

    意図や詳細を掘り下げたいときは「その心は」と言うようにしている - Lambdaカクテル
    Windymelt
    Windymelt 2024/03/17
    怒ってる人は代案も教えてください
  • Lensを始めとするOpticsがプログラミングをどう変えるか / 複雑なデータのモデリングをサボるには - Lambdaカクテル

    仕事でLensを使う機会があった。Lensは複雑で入り組んだデータ構造の読み書きに非常に効果的な手法であるにもかかわらず、関数型プログラマ以外にはあまり知られていないように思える。 そこでこの記事では、Lensとは何なのか、なにが良いのか、具体的にどのようなケースでLensが役立ったか、そしてLensの亜種について紹介する。業務でも使ってます! AIくんが考えるLens 前提条件 Lensとは Lensの使いどころ データをモデリングする場合 (とても つらい) Lensを使う場合: Lensはアクセスパスである Lensと愉快な仲間たち Lensの合成 -- andThenでひっつけよう Lens Law Monocleの便利機能 Lensの自動生成でサボる Focusでもっとサボる Lensがもたらしたもの まとめ あわせて読みたい 前提条件 この記事ではLensを紹介する言語としてS

    Lensを始めとするOpticsがプログラミングをどう変えるか / 複雑なデータのモデリングをサボるには - Lambdaカクテル
  • YAPC::2024 Hiroshimaにはてなパーカーで参加しました #yapcjapan - Lambdaカクテル

    ついに広島で開催されたプログラミングの祭典YAPC 2024 Hiroshimaに参加し、さきほど帰宅したのでレポートです。2/19〜2/21までの各イベントに参加しました。いくつかのトピックに分けて、現場の熱量をなるだけ伝えようと思います。 ついにやってきた大規模カンファレンス ついに、と書いていますがYAPCは例年ある程度安定して開催されています。ではなぜこう書いたかというと、COVID-19によりプログラミングコミュニティのカンファレンスが熱量を失ってしまっていたことが理由です。 COVID-19の猛威は日中に襲いかかり、ありとあらゆるイベントを中止に追いやってきたわけですが、プログラミングコミュニティの集会も例に漏れませんでした。YAPC::2020はCOVID-19の打撃を受けて延期してしまいました。他のコミュニティも、2020年当時に同じような苦渋の決断を行っていたことと思い

    YAPC::2024 Hiroshimaにはてなパーカーで参加しました #yapcjapan - Lambdaカクテル
    Windymelt
    Windymelt 2024/02/15
    ブログを書くまでがYAPCだ。みんなまたどこかで会おうねぇ〜
  • scrollIntoView()では不可能な位置へと要素をスクロールさせたいときはscrollBy()を使うテクがある - Lambdaカクテル

    ブラウザ上の要素を視認可能な位置へとスクロールする設計について調べて実装する機会があったのでメモ。 tl;dr const offsetPercentage = 25; const [parentRect, targetRect] = [ parent.getBoundingClientRect(), target.getBoundingClientRect(), ]; const offset = parentRect.height * offsetPercentage * 0.01; const diff = targetRect.top - parentRect.top - offset; parent.scrollBy({ left: 0, top: diff, behavior: 'smooth' }); 背景と課題 大前提として、element.scrollIntoViewを利

    scrollIntoView()では不可能な位置へと要素をスクロールさせたいときはscrollBy()を使うテクがある - Lambdaカクテル
    Windymelt
    Windymelt 2024/01/30
    再掲
  • JSONの差分を取ってJSON Patchを得るにはdiffsonがおすすめ - Lambdaカクテル

    こういうツイートを見た。 Scala (or Java) で、jsonのdiffをpatchファイルみたいな感じでわかりやすいテキストで出力してくれるライブラリないかなあ。そしてjacksonに依存してないといいな— Arthur (@Arthur1__) 2024年1月13日 現代のプログラミングではJSONの差分を取ったり、逆にパッチを当てるということがよくある。可能ならそれがPretty Printできると良い。 JSONの差分をScalaで取る方法についていくつか調べてみたのでメモ。 JSONの差分をどう表現する? JSON Patch diffson diffsonでJSON Patchを生成する diffsonでJSON Patchを適用する diffsonでJSON Merge Patchを生成する diffsonでJSON Merge Patchを適用する JSON Pat

    JSONの差分を取ってJSON Patchを得るにはdiffsonがおすすめ - Lambdaカクテル
  • エンジニアの生産性を支える楽観主義 - Lambdaカクテル

    あなたはポジティブっつー言葉は好きですか。自分はそんなに好きじゃない。好きじゃない人に読んでほしい気がする記事。 自分はひねくれているのでポジティブという言葉があまり好みではない。精神論っぽいし、どうしたってポジティブにならない物事もあるからだ。たとえば人が死んで落ち込んでいるときにポジティブになれというのはもはや無謀だ。ポジティブという言葉には価値判断が練り込まれている。だから無闇矢鱈にこの言葉を使っても現状を歪めるだけになる。現状を歪めるとおかしなことが起こる。だから好きではない。 とはいっても、ポジティブであったほうがよいのは確かだ。 そんな中、楽観的(optimistic)、だったらすごく便利そうだなと思った。これは現状に対する価値判断を含んでいない。現状を肯定した上で、じゃあどういう態度を取りますか?という言葉だ。 そもそも楽観的とはなんなのか。自分だったらこう考える。暮らしのレ

    エンジニアの生産性を支える楽観主義 - Lambdaカクテル
    Windymelt
    Windymelt 2024/01/07
    なぜかはてブで伸びています。令和のどんより感を打破したいあなたにどうぞ
  • 今年買ったもの 2023 - Lambdaカクテル

    今年はリモートワークが一段と進み、人間関係に変化があったり無かったりし、仕事もそこそこ進んだ、そんな一年であった。 だいたい自分はちょっとデカいものを買ったら自慢してやろうという下心で記事かなにかに書いている。中には書いていないものもある。そんな記事や写真を振り返りながら、今年を振り返ってみよう。ついでに今年の支出も振り返ることができる。もらったものも含みます。 マイク blog.3qe.us リモートワーク用という建て付けと、APEXもやってるという背後からの一突きによって、ちょっと良いマイクを買うことにした。同僚の間ではShure MV7が人気だけど、自分はハードコアな路線を歩む。大学時代に軽音部だったから勝手に自分で良い感じにしてしまおう。マイク単体とプリアンプ、オーディオインターフェイスを購入した。 【国内正規品】SHURE ダイナミック マイクロフォン BETA57A SHURE

    今年買ったもの 2023 - Lambdaカクテル
    Windymelt
    Windymelt 2024/01/03
    id:nakaoka3 Wi-Fi / LAN対応でけっこう使い勝手良いですよ〜。インクジェットのタンクよりは長持ちしそうです
  • SandSをLinuxでやってる人はxremapを導入してxmodmapとxcapeを捨ててください - Lambdaカクテル

    自分は日本語入力効率化のためにずっと昔からSandSを利用している。SandSとはSpace and Shiftの略で、以下のようなキー入力のカスタマイズのこと。 スペースキーの役割をシフトキーにする ただし、スペースキーを単発で押して離したときはスペースキーとして扱う これが日本語入力システムのSKKと非常に相性が良いので、SKKerはだいたいこの拡張を使っている。 この記事では、SandSを実現するxremapを紹介し、インストール方法や他ツールとの比較を行います。 SandSを実現する方法 さて、このSandSはWindowsLinuxmacOSでは標準で提供されていないので、なんらかのユーティリティをインストールして実現するのが一般的な手法になる。 とりわけLinuxにおけるこの分野はxmodmapとxcapeのコンビネーションが長らく使われてきたし、これを利用している人も多い

    SandSをLinuxでやってる人はxremapを導入してxmodmapとxcapeを捨ててください - Lambdaカクテル
  • 関数型プログラミング: map結果を引数とのペアにしたいときはStateが便利だったりする(StateTもあるよ) - Lambdaカクテル

    この記事では、Scala 3と関数型ライブラリであるCatsを時折使いつつ、Stateモナドを利用することでmap結果にうるおいを与えられるという話題を紹介します。 よくある処理: mapしてからペアにする まあまあよくある: メソッドはたまに値返さないことがある まあまあよくある: メソッドが非同期の場合もある Stateモナド 通常の関数をStateに持ち上げる Stateでmapする StateT登場!! 一般化する まとめ プログラミング言語で最も頻繁に使われるデータ構造といえば、タプル、とりわけ2つの要素を持つタプルであるペアかもしれない。 【タプルとは?】 タプルとは、いくつかの型を並べて組にし、1つの型として扱えるようにしたものです。例えば、StringとIntをくっつけた(String, Int)というタプルを考えることができます。 タプルを構成する型の数によって、3-タプ

    関数型プログラミング: map結果を引数とのペアにしたいときはStateが便利だったりする(StateTもあるよ) - Lambdaカクテル
  • マイクロサービスコンビニ弁当アーキテクチャ -- コンビニ弁当容器とカトラリーのライフサイクルを合致させることにより一時的結合状態を解消する - Lambdaカクテル

    コンビニ弁当の空き容器が部屋に放置されがちで、それは端的に言うと自分がズボラなだけなのだけれど(Q.E.D.)、どうしてこうなってしまうのかということを考えていた。すると意外なところに答えがあった。 最近自分は『モノリスからマイクロサービスへ』を読んでいる。まだ途中までしか読んでいないが、このによれば、マイクロサービスをただ一つの表現にまとめるならば、それぞれが独立した単位でデプロイできるようにすることがマイクロサービスである。 モノリスからマイクロサービスへ ―モノリスを進化させる実践移行ガイド 作者:Sam NewmanオライリージャパンAmazon この原則の重要性には実体験でも心当たりがある。先日やっていたプロジェクトでは、各コンポーネントが勝手にデプロイできるようにうまくアーキテクチャを組んでおいたおかげで、手詰まり状態になることを回避できていたのだ。 blog.3qe.us

    マイクロサービスコンビニ弁当アーキテクチャ -- コンビニ弁当容器とカトラリーのライフサイクルを合致させることにより一時的結合状態を解消する - Lambdaカクテル
    Windymelt
    Windymelt 2023/12/18
    自立してそのまま捨てられるゴミ袋があったらいいのにと常に思っています
  • AWS Lambda FunctionをScala.jsで書いて爆速Scalaを満喫しよう - Lambdaカクテル

    この記事は、Scala Advent Calendar 2023の5日目の記事です。 qiita.com 大遅刻してしまいましたが、Scalaは遅延評価できるのでモーマンタイですね。 この記事では、Scalaをクラウドネイティブな環境で使う例の紹介として、ScalaJavaScriptコードにトランスパイルしてAWS Lambdaで動作させる方法を紹介します。 愉快な遠足の始まりだ!!! Scalaプラットフォームの発展 Scalaはクラウドネイティブ時代に乗り遅れている?(いえいえ) 想定環境 Scala.jsで快適にLambda関数を書いてみよう 最低限のScala.jsを実装する 設定 トランスパイル Scala.jsコードをLambda関数の呼び出し規約に合わせる 規約を実装する Lambda関数を作成する イベントなどの入力 ここまでのまとめ Scala.jsでライブラリを利用

    AWS Lambda FunctionをScala.jsで書いて爆速Scalaを満喫しよう - Lambdaカクテル
  • 『データ指向プログラミング』読んだ / OOP以前とDOPとの対比と差分などについて - Lambdaカクテル

    先々月あたりに邦訳が出た『データ指向プログラミング』を読んだ。めちゃくちゃざっくり言うとオブジェクト指向における「データと振舞いの一体化」というドグマを手放させるもので、めちゃくちゃざっくり見るとC言語的な構造化プログラミングの世界に回帰するようにも見えることから、世間的には色々な評価があるらしい。 イミュータビリティが良い、みたいな話は重々承知なので適宜飛ばしながら読んだ。また、lodashまわりの話は単なるライブラリ紹介であり、特筆することがないので飛ばした。 こういう感じで言及されている zenn.dev slides.com 自分なりに読んで思ったことをまとめる。面白いだったし、自分の思想にも近しいものがある。僕は普段ScalaやTSを書いているので、その観点からの感想が多いです。OOPの歴史に詳しいわけではないので、不足があったらすみません。 OOP以前の世界との差異 イミュー

    『データ指向プログラミング』読んだ / OOP以前とDOPとの対比と差分などについて - Lambdaカクテル
  • Google CloudのCloud FunctionsでScalaを実行する - Lambdaカクテル

    仕事でCloud Functionsを触る機会があったのでメモ。この記事はScala Advent Calendar 2023の2日目の記事です。 qiita.com 昨日の記事はこちら。 zenn.dev AWSLambdaを提供しているのと同じく、Google CloudはCloud Functionsというサービスを提供している。Cloud Functionsは様々なランタイムをサポートしているが、Java 17もサポートしているため、Scalaも動作させられる。 cloud.google.com この記事では、Cloud FunctionsでペライチのScalaファイルを動作させる方法を説明する。 Functionの概要 このFunctionは、JSON形式でHTTPリクエストを受け取り、nameフィールドを使って"Hello, $name!"を返す。 ファイルの準備 今回もSc

    Google CloudのCloud FunctionsでScalaを実行する - Lambdaカクテル
  • OpenAIのAudio Transcription APIで遊んだ - Lambdaカクテル

    最近OpenAIがオーディオ系のAPIをいくつか出していた。といってもけっこう前の話だ。 そんな中、最近OpenAIが色々なサービスを展開している。自分も触って習熟しておいたほうが、面白いアイデアを思い付いたときにすぐにプロダクトを作れて役に立つはずだ。そういうわけで色々APIを見ていたところ、その中でも面白そうだった書き起こしAPIを使うことにした。自分が喋った内容を書き起こしてもらいたい。上手くいくだろうか?ボソボソ喋るオタクボイスでも? openai.itshinan.jp このAPIを使うと、オーディオ音声(wavとかflacとか色々な入力形式を使える)から各言語の書き起こしをやってくれる。イクゾー 素材音声 小銭を払う Scalaから呼び出す 所見 まとめ 素材音声 今回用意した自分の音声はこれ。過去の自分の記事の内容の一部をボソボソ読み上げている。お世辞にも上手ではないし、AP

    OpenAIのAudio Transcription APIで遊んだ - Lambdaカクテル
    Windymelt
    Windymelt 2023/11/15
    文字起こしAPIを使って自分の読み上げを文字にしてもらいました。精度がすごく良かったです
  • HTMLとDOMとの違いメモ - Lambdaカクテル

    フロントエンドをたまに遊びでいじっているのだが、HTMLとDOMって何が違うのかよくわかっていなかったので調べたメモ。 HTMLはMarkup Languageとあるように、ドキュメントをマークアップする一種のシリアライズフォーマットである。 DOM(Document Object Model)はより高いレベルの概念であり、シリアライズ形式を関知しないが、ドキュメントをツリーモデルとして表現するセマンティクスを提供する。 わかりやすくメンタルモデルを表現すると、ブラウザ(やnodeなどそれに準じるもの)がHTMLをパースし、対応するDOMモデルがオブジェクトとしてメモリ上に展開される、といえる。 プログラミング言語からはDOMを通じてドキュメントを操作する。 このためHTMLはDOMと等価ではない。 このためHTMLの属性といった構成要素がDOMと一対一対応するとは限らない。 HTMLの属

    HTMLとDOMとの違いメモ - Lambdaカクテル
    Windymelt
    Windymelt 2023/11/09
    書きました