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

  • 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カクテル
    roshi
    roshi 2024/04/20
    ”とっとと全部gsed / gawk / gmakeで統一してほしい” ほんこれ。でもAppleは脱GPLの気配を見せているのが、、せめて定例アップデートで改善くらいはして欲しい。
  • ちっちゃなScalaコンテナを作つコツ(6 MiBだぞ) - Lambdaカクテル

    おなじみの画像 JavaScalaといったJVM言語のDockerイメージは、JVMを同梱しなければならない都合で肥大化しがちである。特に何もしなくても、例えば一般的なamazoncorretto:21のイメージサイズは217.7 MBもある。 hub.docker.com これにさらにビルド済みのJARファイルが載ってくるので、結構大きくなってしまうのだ。 そこで、Scalaのコンテナイメージのサイズをなんとか小さくできないかと、考えた。すると、JVMを使ったまま70 MiBくらいに縮めることができた。 github.com コンテナイメージのサイズを小さくするために、何をしたかを書いていく。ちなみに題材としたアプリケーションはちょっとしたHello, Worldをするだけのもので、ライブラリはCatsに依存させた。 JVM使う編 マルチステージビルドを行う Alpineなどの軽量ラン

    ちっちゃなScalaコンテナを作つコツ(6 MiBだぞ) - Lambdaカクテル
    roshi
    roshi 2024/04/02
    JVM言語をDocker上で動かすの、VMにVMが乗っかっててそれを動かしているのもまたVMっていうループをちょくちょく感じる。DockerはVMというよりjailだけど。
  • 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カクテル
    roshi
    roshi 2024/03/09
    モジュール名もレンズ由来のものでネーミングされてるのもちょっとかっこいい。
  • エンジニアの生産性を支える楽観主義 - Lambdaカクテル

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

    エンジニアの生産性を支える楽観主義 - Lambdaカクテル
    roshi
    roshi 2024/01/06
    わかる。似たようなので完璧主義の人はシステムエンジニアとして生きづらいかもと思ったりする。
  • Scalaの難しさをインターネットから集めてみる - Lambdaカクテル

    Scalaは難しいと思われたり敬遠されがちである。Scalaの難しさについてTwitterなどでアンケートをとったり、ネットでググって意見を吸い上げてみた。議論の叩き台にするみたいな用途を意図しています。 ご意見や記事募集中です。できればTwitterじゃなくて記事だと嬉しいです。流れていってしまうので・・・ また、私見は私見です。 追記(2024-03-08)ちなみに、色々書いていますが僕はScalaが大好きです(このブログでものすごい数の初心者~中級者向けの記事を書いています)し、ネットで言われているような終わった言語ではまったくないです。初心者をサポートして、難しいと感じている部分をほぐして、みんながScalaでワイワイやれるようにコミュニティを立ち上げ、継続的に活動しています。おかげさまで日の公式Scalaコミュニティとして認めてもらっています。ブログのバナー下のリンクからDis

    Scalaの難しさをインターネットから集めてみる - Lambdaカクテル
    roshi
    roshi 2023/09/19
    書き心地はいいんだけどなー。kotlin触った時これが欲しかったやつでは?とちょっと思ったw(あっちはあっちでGradle Kotlin DSLが鬼門だけど。。)
  • ScalaのビルドツールMillが生成するUberjarはZIPファイルの面白仕様を使ってシェルから直接実行できるようになっている - Lambdaカクテル

    プログラミング言語Scalaで最もよく使われているビルドツールといえばsbtだ。起動しっぱなしのインタラクティブ仕様なsbtがやや鈍重なきらいがある一方、もう1つのビルドツールであるMillが開発されており、こちらではnpmのようなシェル単位の操作体系を指向している。 mill-build.com 単にコマンド体系のみならず、Millには他にも色々と面白い機能がある。例えばsbtと違って標準でassembly、すなわちUberjarへのパッケージング機能が搭載されているという点がありがたい。このUberjarを作る機能に面白い仕組みが盛り込まれていたので紹介するというエントリ。 謎の実行権限 中身を覗く ZIPは任意の場所に任意のデータを封入できる 追記 さて、JVM言語にあまり縁がない読者のために説明しておくと、Uberjarとは、依存する関連モジュールが1つのパッケージにまとめられ、J

    ScalaのビルドツールMillが生成するUberjarはZIPファイルの面白仕様を使ってシェルから直接実行できるようになっている - Lambdaカクテル
    roshi
    roshi 2023/08/29
    mill知らなかった。昔懐かしい自己解凍形式(SFX)を応用してるのかな?
  • Optics: 「パス」に型を付ければ、データ全体に型を付ける必要はない - Lambdaカクテル

    あまり知られていない関数型言語のおもしろ概念として、Opticsというものがある。 Opticsとは、オブジェクト指向言語で言うところのSetter/Getterを一種の関数として捉え、いくつかの便利な特性を付与したものの総称だ。この便利な特性によって、Setter/Getter以上のことをパワフルにこなせる。 最も有名なOpticsはLensであり、色々な解説資料が(主にHaskell向けに)出ている。 blog.recruit.co.jp さて、これまでのOpticsを紹介する資料はSetterとGetterとしての側面に注目しがちだったので、じゃあOpticsの何が良いのか、Scalaでやる意義は何か、という側面をこの記事で紹介しようと思う。 Optics -- vs. copyメソッド地獄 Opticsは合成可能である Opticsはボトムアップのアプローチである Opticsがう

    Optics: 「パス」に型を付ければ、データ全体に型を付ける必要はない - Lambdaカクテル
    roshi
    roshi 2023/06/07
    Optics/Lensは「varを使わないgetter/setter」って雑に覚えていたけど、”JSONのデータアクセスパスに型をつける”というのは分かりやすくてよかった。
  • Scala 3.3.0から標準で使えるようになるfewerBraces記法のまとめ - Lambdaカクテル

    先日、Scala CLI v1.0.0がついにリリースされた。これまではv0系列だったので、満を持しての正式版リリースだ。おめでとう! github.com いちおう説明しておくとScala CLIは総合的なScalaのコマンドラインツールで、以下のようなことができる: Uber JAR(単体で動作するJARファイル)の生成 GraalVMを使ったバイナリの生成 Scala Nativeを使ったバイナリの生成 REPL Scala Scriptの実行環境 このように多彩な機能を持つScala CLIは、現在のscalaコマンドを置換して将来的なscalaコマンドになることが決まっている。 さて、リリースノートによればScala CLIではv1.0.0からScala 3.3.0をデフォルトで利用することになった。Scala 3.3.0にはいくつもの修正や追加機能が含まれているが、今回はその中

    Scala 3.3.0から標準で使えるようになるfewerBraces記法のまとめ - Lambdaカクテル
    roshi
    roshi 2023/05/27
    ブレース記法で書ける世界にインデント記法を持ち込むのどうなんだろう。。
  • Scalaのメモリ使用量はJavaよりも多いか検証した - Lambdaカクテル

    こういう記事を読んだ。 transparent-to-radiation.blogspot.com なんかScalaのメモリ使用量が異常に多いなと思って、調べた。検証コードもアップした。 github.com 検証として、様々なJVM(OpenJDKとかCorettoとか)とそのバージョン(8, 11, 17)でJARを実行して考察した。JVMを用意するためにASDFを使った。また、ASDFから引っぱってこれないJVMのバージョン(OpenJDKの8など)は省略している。 JAVA_OPTSは-Xms100M -Xmx2Gである。 手元のマシン(Linux x86_64 Xeon W-10855M 2.80GHz 64GiB RAM)でのrun-matrix.shの実行結果は、以下の通り(各列は、JVM、計算件数、実行時間Sec、メモリ総使用量KiB)。 openjdk-11 openjd

    Scalaのメモリ使用量はJavaよりも多いか検証した - Lambdaカクテル
    roshi
    roshi 2023/04/21
    JVMもだけどGraalVM着々と進化してるんだなー。
  • ゴチャッと必要な情報が詰め込まれた標示に萌える - Lambdaカクテル

    産業機械とか大型機械といった、相応に注意しながら操作しなければならないモノとかに貼り付けられている、ゴチャッとした、しかし必要な情報が詰め込まれたフォーマットが好きで、発見すると画像を集めてしまう。 萌えは死語っぽくなってないか?と思うけど、この感情を表現するために一番適切な言葉は萌えだと思う。 石油ストーブの横 特にワクワクするような内容は書かれていないのだが、なぜか読んでいるとワクワクする。 ボイラーがある職場 実家ではボイラーといえば湯沸かし器のことだったのだが、都会に出てくると誰もボイラーと言ってなかった思い出。ボイラーと言っている家庭があれば教えてください。 MRI 医療系は命にかかわるのでゴチャッとしているが、誰にでも分かる必要があるので派手になっている。 艦艇広報で艦内に入る機会があればこちらの記号にも出会うので熟読して覚えておくとフムフム納得Σ(・ω・ノ)ノだよ! お疲れ様

    ゴチャッと必要な情報が詰め込まれた標示に萌える - Lambdaカクテル
    roshi
    roshi 2023/04/15
    コンビニ店員がラベルで装飾したコーヒーメーカーとか(違)
  • Scala記事を書き続けている話 - Lambdaカクテル

    Table of Contents はじめに 最近Scalaまわりのアウトプットを積極的にやっている Scalaの裾野を広げたい 高度な記事はあるけれど 入門的な記事を増やす お高く留まらない言語にしていく お高く留まった言語から滅んでいく 裾野がプログラミング言語を支えている はじめに この記事は、はてなアドベントカレンダー2022の20日目の記事です。 昨日の記事はid:id:tokizuohによる『毎日行う動作を習慣にするためにメニューバー常駐macOSアプリを作った』でした。 この記事では、最近行っているScalaまわりのアウトプットについて紹介します。 最近Scalaまわりのアウトプットを積極的にやっている 最近個人的に継続している試みとして、 Scalaのライブラリや言語機能にかんする記事をどんどん書くというものがあります。 例えば一番最近だと入門⚡Shapelessという記事

    Scala記事を書き続けている話 - Lambdaカクテル
    roshi
    roshi 2022/12/20
    ありがたい。KotlinのeasyもいいけどScalaのsimpleも捨てがたいので同じくらい裾野広がって欲しい。
  • Java(Scala)アプリどう配ってますか - Lambdaカクテル

    自作の解説動画作成ツールがある程度形になってきたので、配布について考えている。 www.nicovideo.jp zmmはScalaで書かれたアプリケーションなので、JVMで動作する。JVM言語の配布形式には色々あるのだけれど、zmmではとりあえずJARを配ることにした。 Scalaにはsbt-assemblyというUberjar*1を生成するプラグインや、リリースフローを自動化するsbt-releaseというプラグインがあるので、JARを生成させるところまでは割とすぐできた。 $ sbt > release とするとインタラクティブなリリースフローが始まり、自動でコミットとかバージョン修正とかタグ打ちとかをやってくれる。非常にありがたい。 JARファイルを生成したら僕がそれをGitHub Releasesに置く。 github.com ユーザとしてはこれをダウンロードしたら実行できるはず

    Java(Scala)アプリどう配ってますか - Lambdaカクテル
    roshi
    roshi 2022/12/20
    Java Web Start(違)。Coursier(読み方いつも悩む)でアプリ起動できるの知らなかった。Dockerイメージ(できればGraalVM+ネイティブイメージ)が無難そうだけどサイズが。。
  • 1