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

  • 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カクテル
    yarumato
    yarumato 2024/06/07
    “この方法はBashのドキュメントのコマンド置換のコーナーに書かれていて、「ファイルを読み出したいだけならcatじゃなくてこっち使ったほうが速いよ」とある。” むしろcatで出来たのか。
  • 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カクテル
    yarumato
    yarumato 2024/04/20
    “sedやawkに互換性があまりないのは周知の事実、perlを使うなど賢い回避策がある。でも、sedで一瞬で書けるような、例えば1〜3行目だけ削除する(sed -e '1,3d') --- のために、わざわざperlを使いたくはないんだよな”
  • 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カクテル
    yarumato
    yarumato 2024/03/10
    “Lensは複雑なデータ構造の読み書きに効果的。関数型プログラマ以外には無名。Scala言語で試す。Lensとはgetterとsetterの組で、合成できる。JSONから抽出のため、型を定義していくのがツラい。しかも殆ど利用されない”
  • 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カクテル
    yarumato
    yarumato 2024/01/15
    “JSONの差分は単純なテキストの差分で表現できない。JSON間の差分をJSONで表現する2種の仕様(JSON Patch / JSON Merge Patch)がある。この差分を生成するツールとして有名なScala実装はdiffson”
  • 『データ指向プログラミング』読んだ / OOP以前とDOPとの対比と差分などについて - Lambdaカクテル

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

    『データ指向プログラミング』読んだ / OOP以前とDOPとの対比と差分などについて - Lambdaカクテル
    yarumato
    yarumato 2023/12/06
    “DOPはOOP以前の世界に逆戻りするだけでは? DOPではその世界観とは違う点がある。永続データ構造を積極的に採用。JS/TSでDOPを貫徹するのは大変だが、ScalaだとDOP実践してるのが普通”
  • 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カクテル
    yarumato
    yarumato 2023/08/29
    関係ないけど、このブログ、CSSがdark-mode未対応なので、強制ダークモードだとまぶしい。Web系の仕事してるなら対応してくれないかな。
  • VSCodeのformat-on-saveをEmacsでもやる方法 - Lambdaカクテル

    最近チームの同僚がScalaのコードベースにscalafmtでフォーマッタをかけてくれて、ソースコードの見通しがとても良くなった。 VSCodeはセーブ時に自動的にLSP経由でコードフォーマットを呼び出す機能(format-on-save)を持っているのだが、コードベース全体がフォーマットされたことで、この設定を有効化できるようになった。 とてもありがたい。 ところでEmacsにもLSPプラグインがあるので、LSP経由でのフォーマット機能は存在するのだが、セーブ時に自動的にフォーマットする機能はないようだ。 そこで、セーブ時に自動的にフォーマッタをLSP経由で呼び出してくれる機能をEmacs Lispで書いた。ディレクトリ・モード単位で有効・無効の設定が可能な設計にした。 コード まずは、以下のコードを.emacsなどに置く。 (defvar project/format-on-save

    VSCodeのformat-on-saveをEmacsでもやる方法 - Lambdaカクテル
    yarumato
    yarumato 2023/01/21
    “LSPモードはあるがセーブ時に自動的にフォーマットする機能はないようだ。そこで、セーブ時にフォーマッタをLSP経由で呼び出してくれる機能をEmacs Lispで書いた。ディレクトリ・モード単位で有効・無効の設定が可能”
  • 去年は182本の記事を書いた人から見た、技術的なアウトプットに疲弊しないようにするコツ - Lambdaカクテル

    文脈: blog.arthur1.dev 自分は割とガンガンアウトプットする方で、たまにバズって嬉しいという品質のブログ(これ)をやっている。普段どのような心構えでやっているのか、そして続けるコツみたいなものについて書いてみようと思う(参考になるかは全くわかりません)。 あと一応断っておくと、タイトルにある "去年書いた182の記事" は非-技術的な記事も含んでいる(けど、だいたい技術記事なので許してほしい)。 どういうときに書くか どういうモチベーションで書くか どういうときにバズるか どのようにして続けるか 余談: 箇条書きの型を統一する 参考文献 あわせて読みたい どういうときに書くか 自分は基的にブログを「1年前(後)の自分が泣いて喜ぶ記事」というテイで書いている。自分が知りたかったことは他人も知りたかったはずだという仮説で書いていて、それを知りたかった人の総量はその技術のシェ

    去年は182本の記事を書いた人から見た、技術的なアウトプットに疲弊しないようにするコツ - Lambdaカクテル
    yarumato
    yarumato 2023/01/10
    “やらないほうがよい:分かっていない事について書く。何を伝えたいのかが曖昧なことを書く。何かを攻撃的に批判する。既に良い記事があるのに同じことを書く。ネットスラングを使いすぎる”
  • はてなブログに見出しにid属性付けてくれって言ったらつけてもらえた - Lambdaカクテル

    うれしすぎるンゴ〜〜〜 あらまし 自分は技術記事をよく書いているのだけれど、そういう記事は基的に構造化して書くから、必然的に見出しの量も多くなる。そして、構造化されているがゆえに、「この節の部分にリンクしたい」ということがあるものである。 そして、hタグにはid属性を付与することができ、それを使うと特定の節へのリンクを作ることは可能なのだ。 だが、はてなブログではそうはなっていなかったので、人間が<h2 id="">とか書かなくてはならなかった。 そこで、いちおう書いておくかと思って問い合わせフォームから実装してほしいンゴ〜〜〜という旨のことをもう少し丁寧に書いておき、そのまま忘れていた。 すると・・・ staff.hatenablog.com うれしすぎるンゴ〜〜〜 ところで、こういう話題もある。 masawada.hatenablog.jp まさわだくんプロダクトの便利なツールを使う

    はてなブログに見出しにid属性付けてくれって言ったらつけてもらえた - Lambdaカクテル
    yarumato
    yarumato 2022/10/10
    黒背景なのにダークモード対応CSSじゃないから、ブラウザ側で強制ダークモードしてると、白背景黒文字になるのが困るというか。
  • Facebookが開発した圧縮アルゴリズムZstandardについて調べた(非常に高速)(今日から使えます) - Lambdaカクテル

    Common Lispの処理系であるSBCLをインストールしようとしたら、追加でlibzstd-develというのを新たに要求されるようになっていた。見るからに圧縮系のライブラリだけれど聞き慣れないのでちょっと調べてみた。 ちょろっと調べたところ、以下のことが分かった: Zstandard(ゼットスタンダード?)というのが正式な名前。 Facebookが開発した。 Deflateよりも速いことを主眼においている。 BSDライセンス。 Linuxカーネルまわりで使えるようになっているほか、一部のディストロではパッケージの圧縮フォーマットとして使われているようだ。 Webというよりはどちらかといえばバックエンド的な箇所で使われている印象がある。 facebook.github.io zstd コマンド使ってみた 他の名だたる圧縮アルゴリズム同様、Linuxで直接ファイルに対してこれを実行して圧

    Facebookが開発した圧縮アルゴリズムZstandardについて調べた(非常に高速)(今日から使えます) - Lambdaカクテル
    yarumato
    yarumato 2022/10/10
    “テキスト圧縮のサイズは xz 70%、zstd 75%、bzip2 77%、gzip 79%。時間は xz 204、zstd 1、bzip2 57、gzip 19秒。tarから直接zstdが使える(tar 1.31以降)。速度が欲しいならzstd。圧縮率ならxz。”
  • Bluetoothキーボードとxcapeとの組み合わせで、スペースキーを押すとなぜか機内モードになる怪奇現象が起こる - Lambdaカクテル

    ほぼタイトルの通りなのだが、怪奇現象が起こって困っている。 FILCO Majestouch Convertible 2を使っている 青軸最高〜〜 Linux (OpenSuSE Tumbleweed)ユーザ 自分はスペースキーをShiftに割り当ててSandSを行うため、xcapeを使っている(後述) BluetoothモードでMajestouchを使っているとき、一定の確率で、スペースキーを押下して離すと機内モードに入る もちろん、Bluetoothが停止するのでキーボードも動かない 怒り という現象が起こっている。 tl;dr xcape使うときはダミーとして255ではなく無難なキーコードを使うこと 255は機内モードスイッチのキーコードになっている キーボードを差し替えたりするとxmodmapの効力が切れる ワイヤレスイヤホンはキーボードとしても追加で認識されることがある Maje

    Bluetoothキーボードとxcapeとの組み合わせで、スペースキーを押すとなぜか機内モードになる怪奇現象が起こる - Lambdaカクテル
    yarumato
    yarumato 2022/10/07
    “SandS(Space and Shift)とは、スペースキー押しっぱなしで別のキーが押下されたときはShift+そのキーが打鍵されたと扱うカスタマイズ。日本語入力方式であるSKKのために使っている。LinuxのX11環境においてSandSを実現するxcape”
  • Nothing Phone買った、ガジェットとしてかなり良い - Lambdaカクテル

    でも結構話題になってたと思うけど、Nothing Phoneが最近ようやく日でも発売開始されて、それなりに流通しだしている。 自分はいちはやくゲットしたかったのでスペインAmazonで購入したんだけど、スペイン人がのんびりしているのか、なんの事情があるのか、結局日発売よりも遅いタイミングで到着してしまった。 ブルーレイかなんかが入ってそうな感じの箱が届く 箱が面白くて、チョコボールの封のあのビニールとか、ポッキーの箱みたいに、ビリビリと一周させて開封するようになっている。 びりびり すると、体とアクセサリー類を引っ張り出せる引き出しが登場して、超かっこいいスマホがお目見えするという仕掛けになっていて面白い。 じゃん! 完全にNothingの手玉に取られているというか、わくわくを感じさせるように演出が設計されているな~と思う。面白い。 保護シートでシールされた状態で出てくる うお

    Nothing Phone買った、ガジェットとしてかなり良い - Lambdaカクテル
    yarumato
    yarumato 2022/08/23
    “非接触充電等のメカニズムが思いきり表現されている。メカ好きの心をくすぐる”
  • ちょっとしたデータファイルのフォーマットにJSON Linesを使うと便利 - Lambdaカクテル

    データ構造が決まるとアルゴリズムも自ずから定まる、みたいな話もあるように、ソフトウェアエンジニアリングの文脈では「どうデータを持つか」が重要だ。これはちょっとしたシェルスクリプトでも同様。 自分はUNIX哲学が好きで、なんかちょっとしたツールを作るときは基的に1行1データのテキスト形式を喋るように作成する。そのほうが適用できるツールが多くなるからだ。shellscriptを使うときはwhile read文を使えば1行1コマンドを実行する処理をすぐ書けるし、sedを使えば基的な加工ができる(互換性の問題があるから基的にgsedを使うけど)。開発や運用にLinuxを使っている以上、こういう形式を採用しておくと取り回しやすくなる。 その一方、1行1データのテキスト形式はそれ自体では構造化されていないという問題がある。ちょっとでも複雑な形式で書こうとすると、CSVやTSVにしようとか、:でセ

    ちょっとしたデータファイルのフォーマットにJSON Linesを使うと便利 - Lambdaカクテル
    yarumato
    yarumato 2022/08/23
    “UNIX哲学が好きで1行1データのテキスト形式をよく作成する。JSON Linesは1行1JSON形式で、拡張子は.jsonlが慣例。シェルスクリプト等で1行読みjqを組合わせてデータを取り出すのが簡単。事前にデータ検証できる”
  • 1