タグ

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

  • 値の検証もコンパイラにやらせよう: Scala 3でRefinement TypesやるにはIronっていうライブラリが良さそう - Lambdaカクテル

    Scala 3でRefinement Types(篩型)を実現するライブラリIronに入門したので紹介します。最初はRefinedに入門しようとしてたら、Scala 3ではあまり動かなかったのでそのままIronに入門しました。 tl;dr Refinement Typesっていうのを使うと、普段動的にチェックしてる値の性質が型に反映されるのでコンパイラが助けてくれる ScalaでRefinement TypesをやるライブラリとしてRefinedがある Scala 3ではパワーを発揮できないので、Scala 3ではIronというライブラリをおすすめしたい Refinedよりもシンプルでめちゃ良い感じです! tl;dr Refinement Types (篩型) Refinement Types以前 通常の型 値クラス スマートコンストラクタ Refinement Types with Re

    値の検証もコンパイラにやらせよう: Scala 3でRefinement TypesやるにはIronっていうライブラリが良さそう - Lambdaカクテル
  • 何かを理解するためには借り物の言葉でもいい - Lambdaカクテル

    エンジニアは一生勉強と世に言うが、べつにこれは所謂エンジニアに限ったことでもない。人間として生きている以上は日々が勉強の連続で、毎日何かを理解して、憶えて、その繰り返しだ。 だから、日常のレベルではドキュメントを探したりチュートリアルを見たり教科書を読んで理解することの繰り返しをやっている。 では、何をもって理解したとみなせばよいのか?意外とこれは難しい。よく言われるのが「自分の言葉で説明できたら理解していると言える」というようなものだ。『数学ガール』にも、たしか似たような事が書かれていた気がするが、記憶の彼方だ。 しかしながら、自分の言葉で一から説明しようとすると、その言葉すらも自分の言葉ではないことに気付いていく。Kubernatesを説明するためにはコンテナの語彙が必要だ。しかしコンテナの語彙をも自分の言葉で説明するなら、無間地獄に落ちていくだけだ。そうなると自分が何を説明したかった

    何かを理解するためには借り物の言葉でもいい - Lambdaカクテル
  • 勉強会タダ飯人間問題を暗号通貨とNFTでなんとかしたい - Lambdaカクテル

    ジャストアイデアなのでできるかどうかとかは全然考えていない。思い付いたのでメモという感じ。NFTで金儲けみたいな話では一切ないです。そこ勘違いしないよう。 前提 勉強会でタダ飯を喰らう人間がいて迷惑している、という話がITエンジニアならよく知る話だと思うが、これが最近は大きなメディアにも取り上げられだしたようで、一般の人間の識るところとなりつつある。 さいわいにも自分が運営しているScalaわいわい勉強会にはそういう人間は出ていないように思われる(もしかしたら気付いてないだけかも)が、なんでそういう人間が出現するのかというとタダだからである。 タダだから障壁が低くなり、われわれがコストを負担させられるという構造になっている。 有料化すべし そこで、勉強会は有料にするのが良いのではないか、と思っている。有料といっても数万円取るのではなくて、思い留まるくらいであればよい。3000円とか取るのが

    勉強会タダ飯人間問題を暗号通貨とNFTでなんとかしたい - Lambdaカクテル
    Windymelt
    Windymelt 2024/07/13
    飯を出したいのもそうなんですが、コミュニティで会を開く以上は常に費用がかかるんですね。幸いにも会場は企業様にご提供いただくこともありますが、いつまでもおんぶに抱っことはいかない事情もあります。
  • ゼロから考えないで既知の思想や他人、潮流に従ったほうがよい - Lambdaカクテル

    常識は疑うほうが良い、みたいな妙な思考が頭の中にあって、何かを考えるときに無駄に根的な所から考えてしまう。 例: 上の階がやかましいようだ 考える: そもそも夜間に振動を発生させるという行為に対する考え方は歴史的にどのように発展していったのか…… 普通こう考えたほうがいい: 管理会社に言ってみるか まったく無駄である。しかしなんか哲学的に考えたほうがカッコ良いみたいな謎のアレがあり、脳を無駄にしている。そのほうが言葉がポンポン出てきて面白いのだが、別にそういうことは既に世界のめちゃくちゃ賢い人が既に通過済みである。 speakerdeck.com 既に通過済みのパッセージを通ったところで劣化版の思考が、再生産されるだけだ。劣化してるので使えないし、再生産しているので無駄なだけだ。 良い書物はイシューに到達するまでの思考の過程をちゃんと再現してくれる。良い書物は基点となってくれる。良いとさ

    ゼロから考えないで既知の思想や他人、潮流に従ったほうがよい - Lambdaカクテル
  • じゃあ何すか、COBOL以外では4.8 - 4.7 - 0.1できないってことっすか / ScalaとSpireで安心安全な計算ライフを実現しよう - Lambdaカクテル

    先日こういうツイートが流れてきた。 Q:なぜ金融系では未だにCOBOLが使われるんですか? A:お手元にExcelがありましたら任意のセルに「=4.8-4.7-0.1」って入れてみてください。— 遊撃部長F/S&RWAs (@fstora) 2024年6月6日 Q:なぜ金融系では未だにCOBOLが使われるんですか? A:お手元にExcelがありましたら任意のセルに「=4.8-4.7-0.1」って入れてみてください。 普段我々がゴリゴリ馬車馬のように使っているソフトウェアでよく利用されている浮動小数点型、すなわちfloatやdoubleなどは特定の算術に弱いことが知られている。というかもうこの手の話題はあまりに拡散されてしまったので、なぜかネット民はみんな知っている基礎教養、三毛別羆事件とかデーモンコアみたいな感じになっている。 ちなみにこれはCOBOLかそうではないか、という軸が問題になっ

    じゃあ何すか、COBOL以外では4.8 - 4.7 - 0.1できないってことっすか / ScalaとSpireで安心安全な計算ライフを実現しよう - Lambdaカクテル
    Windymelt
    Windymelt 2024/06/10
    id:sin-idea なんとSpireにはクオータニオンございます。複素数も、それを多次元に拡張したJetもございます / 十進小数が全てを解決するわけではないという話もしてるんだけど・・・
  • Bashで$(cat foo.txt)していませんか?$(< foo.txt)しよう - Lambdaカクテル

    以下の文書はBashを使う前提の話。 Bashにはコマンド置換(Command substitution)というのがある。$(another-command)のように、$()でコマンドを括る記法だ。これを利用すると、括弧で括られたコマンドが実行され、その標準出力が文字列として取り出され、$()全体を置き換える。シェルスクリプトでは非常によく見る技術だ。 この$()でファイルの内容を読み出すというのを最近見た。このような用法は非常によく見る。 foo-command $(cat params.txt) しかし、より良い書き方があるのでこれを提唱したい。$(< params.txt)と書くことで全く同等のことができる。しかも速いのでこちらのほうが完全に上位互換となる。 foo-command $(< params.txt) この方法はBashのドキュメントのコマンド置換のコーナーにちゃんと書か

    Bashで$(cat foo.txt)していませんか?$(< foo.txt)しよう - Lambdaカクテル
    Windymelt
    Windymelt 2024/06/08
    id:koichi_nakashima 大抵のシェルで動くんですね、やった〜! Bashのドキュメントをソースに書いたので他で動くかは確認してませんでした。ともあれ動くようで良かったです
  • 難しい概念は、それを難しいと理解できるようになること自体が難しいから難しい - Lambdaカクテル

    仕事でとある機能を設計して実装していた。ある非同期な処理の状況を画面に表示するというだけのタスクだ。ちょっと様子を見に行って、そのステータスを表示すればいいだろう。そう高を括って設計を始める。 のだけれど、一向に進まない。頑張ってちょっとずつ作ってPull-Reqにするのだが、コードレビューでどんどんrejectされる。登山に出たらどんどん霧が出てくるようなありさま。なんかおかしいぞ。目の奥がチリチリしてくる。 ウームどうしたもんか、と思って頭をひねるのだが驚くべきほどに何も進まなくて、俺の頭が悪すぎるのではないかと益々不安になってしまった。 にっちもさっちも行かなくなってしまったので、同僚に助けを求めることにした。 実は難しかった 同僚と相談したときは、なんて俺はアホなんだ、寝不足かなんかで頭回ってないのかな?と思っていたけれど、同僚と話しているうちに、これ普通に難しいっスよ、という感じ

    難しい概念は、それを難しいと理解できるようになること自体が難しいから難しい - Lambdaカクテル
  • すべてのコードやライブラリ自体が技術的負債である / 高利率な技術と低利率な技術 - 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カクテル