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

  • なぜDBから引くときに1000件ずつchunkingするのか、説明できますか - Lambdaカクテル

    MySQLやPostgreSQLといったRDBMSからデータを引いてくるとき、扱うデータの規模によっては、1000件ずつLIMITをかけて順に引いていくということがある。 以前slow queryが出たらよくやっていたのを思い出して、ふとこのあたりってどういう根拠があってやっているのだっけ、自分が知っている他に効能があったりするのかな、と思ってSlackに書き込んだところ、同僚の id:onk に教えていただいた。その内容に加えて軽く調べた内容をまとめてみる。 Web系の話です。みなさまの知見がありましたら教えてください。 TL;DR 刺さる*1から 刺さったら困るから あたりまえ 詳細 もともとSlackに書いた原文は以下の通り(MySQL前提で書いているけどPostgresといった他のRDBMSにも適用できる話。): DB引くとき、Perl時代(?)によく1000件単位でchunkin

    なぜDBから引くときに1000件ずつchunkingするのか、説明できますか - Lambdaカクテル
    toshikish
    toshikish 2024/09/06
  • ブロッキングってそもそも何だよ - Lambdaカクテル

    さきほど別のブログ記事を書いていて(それはまたそのうち発射するけど)、その中でブロッキング処理とか同期的に扱う、という言葉を使った。 このときの自分の理解がこれ: ブロッキング 呼ぶと待たされる ノンブロッキング 呼んでも待たされない、すぐ返る そのときはJavascriptの話をしていた。Javascriptはシングルスレッドの言語だ。そして、各種のAPIは基的にノンブロッキングに設計されている。つまり、コールバックを取るようになっていたり、Promiseを返すようになっているということだ。だから、処理系が提供する特殊な処理(例えばNodeが提供するhogehogeSync()といったもの)を利用しない限り、ブロックが原理的に起こらないし、あえてする理由もない。 という話を書いていて、でも重い計算処理は待たされるだろと思った。これはブロックしていることに他ならないのではないか、と。 し

    ブロッキングってそもそも何だよ - Lambdaカクテル
    toshikish
    toshikish 2024/08/01
  • 帯状疱疹にならないほうがいい3つの理由 - Lambdaカクテル

    帯状疱疹になったけどメリット1つもないのでそのダルさを啓蒙する記事。 あらすじ 2日くらい前から左の脇腹のあたり、場所といったらちょうど俺が椅子に腰掛けたときにTシャツのタグが触れるくらいの位置にブツブツができた。 最近暑かったし汗疹かなんかかな、と思って無視していた。もしくは最近洗濯洗剤を替えたから溶け残ってかぶれたかな、と思ってた。 が、なんか痛い!ブツブツした部位に触れるたびに、針が引っかかったような、魚の骨が喉に刺さる代わりに脇に刺さったような、イテテテ、くらいの痛みがある。かゆくはない。寝返り打つと痛い。人間にマチ針が刺さってる感じ。出来の悪いフランケンシュタインみたいな感じになっている。 なんやろな〜と悠長に構えてそのことをSlackとかに書いてたらそれは帯状疱疹かもしれないからとっとと病院行ったほうがいいド〜と言われたので近所の皮膚科に行ったというわけ。 ダルさポイント1:

    帯状疱疹にならないほうがいい3つの理由 - Lambdaカクテル
    toshikish
    toshikish 2024/07/23
  • 何かを理解するためには借り物の言葉でもいい - Lambdaカクテル

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

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

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

    勉強会タダ飯人間問題を暗号通貨とNFTでなんとかしたい - Lambdaカクテル
    toshikish
    toshikish 2024/07/13
  • ゼロから考えないで既知の思想や他人、潮流に従ったほうがよい - Lambdaカクテル

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

    ゼロから考えないで既知の思想や他人、潮流に従ったほうがよい - Lambdaカクテル
    toshikish
    toshikish 2024/07/01
  • 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カクテル
    toshikish
    toshikish 2024/06/07
  • すべてのコードやライブラリ自体が技術的負債である / 高利率な技術と低利率な技術 - Lambdaカクテル

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

    すべてのコードやライブラリ自体が技術的負債である / 高利率な技術と低利率な技術 - Lambdaカクテル
    toshikish
    toshikish 2024/05/23
  • 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カクテル
    toshikish
    toshikish 2024/05/11
  • 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カクテル
    toshikish
    toshikish 2024/04/20
  • DSL作りたいんだけど何もわからないので識者に教えてもらいたい - Lambdaカクテル

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

    DSL作りたいんだけど何もわからないので識者に教えてもらいたい - Lambdaカクテル
    toshikish
    toshikish 2024/04/03
  • ちっちゃな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カクテル
    toshikish
    toshikish 2024/04/02
  • 意図や詳細を掘り下げたいときは「その心は」と言うようにしている - Lambdaカクテル

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

    意図や詳細を掘り下げたいときは「その心は」と言うようにしている - Lambdaカクテル
    toshikish
    toshikish 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カクテル
    toshikish
    toshikish 2024/03/09
  • 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カクテル
    toshikish
    toshikish 2024/01/15
  • エンジニアの生産性を支える楽観主義 - Lambdaカクテル

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

    エンジニアの生産性を支える楽観主義 - Lambdaカクテル
    toshikish
    toshikish 2024/01/06
  • OpenAIのAudio Transcription APIで遊んだ - Lambdaカクテル

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

    OpenAIのAudio Transcription APIで遊んだ - Lambdaカクテル
    toshikish
    toshikish 2023/11/15
  • 松竹梅はsortしても松竹梅になる - Lambdaカクテル

    物事の順位付けをするとき、松竹梅という雅な表現がよく使われる。自分もよく使う。 blog.3qe.us コンピュータにとってもそうなのだろうか?そう考えた私は実際にソートしてみることにした。 % echo $LANG ja_JP.UTF-8 % sort --version sort (GNU coreutils) 9.3 Copyright (C) 2023 Free Software Foundation, Inc. ライセンス GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permit

    松竹梅はsortしても松竹梅になる - Lambdaカクテル
    toshikish
    toshikish 2023/09/05
  • sbtの依存性定義でたまに見るtestやprovidedとは何か--コンフィギュレーションについて学ぼう - Lambdaカクテル

    sbtはかつてsimple build toolと呼ばれていた(今は酢豚の略とされている)。しかしビルドツールというのは質的に難しい。複数の依存性を解決し、コンパイラ達が吐き出す成果物を統合し、1つあるいは2つ以上の最終成果物にしなければならないのだから、複雑性は必然だ。そして、複雑性があるところ常に難しさがひそんでいる。 www.scala-sbt.org そしてlibraryDependenciesの難しさは初心者が最も先にハマるものの一つだ。うち、コンフィギュレーションconfigurationはその難しさの一角を占めている。コンフィギュレーションについて知識をつけることで、実行時に発生するよくある間違い(例えば、実行時にクラスが存在しないというエラーでJVMが起動しないなど)を回避できるようになる。 この記事ではsbtにおけるlibraryDependenciesのコンフィギュレ

    sbtの依存性定義でたまに見るtestやprovidedとは何か--コンフィギュレーションについて学ぼう - Lambdaカクテル
    toshikish
    toshikish 2023/08/25
  • 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カクテル
    toshikish
    toshikish 2023/06/07