タグ

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

  • なぜ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カクテル
    fumikony
    fumikony 2024/09/04
  • 帯状疱疹にならないほうがいい3つの理由 - Lambdaカクテル

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

    帯状疱疹にならないほうがいい3つの理由 - Lambdaカクテル
    fumikony
    fumikony 2024/07/23
  • 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カクテル
  • DSL作りたいんだけど何もわからないので識者に教えてもらいたい - Lambdaカクテル

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

    DSL作りたいんだけど何もわからないので識者に教えてもらいたい - Lambdaカクテル
  • 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カクテル
    fumikony
    fumikony 2024/01/06
  • 秩序があると混沌よりも良いんじゃ(プロジェクト遂行における創発段階においても段取りや問題探索空間の縮小が必要という話) - Lambdaカクテル

    同僚と1on1していて面白い話をしたのでメモ。 プロジェクトの不確実性 前提として、自分はソフトウェアエンジニアとして働いているのだが、0→1的な仕事の場合、プロジェクトは最初は不確実で混沌とした状態にあり、しばらくの創発的な状況を通過していくことでいずれ不確実性が減っていき、最終的にはプロダクトとして結実する、という流れを辿る。 最初のうちは不確実だし、様々な可能性に目を向けることが必要な段階なので、ブレインストーミング的な感じでランダム性やクリエイティビティを誘導したりすることが多い。一方、これはビジネスなので、最終的にはプロダクトとして結実させなければならない。したがって道筋を描くための段取りはしなければならない。 よくある不確実性コーンみたいなのを思い描いてほしい。 不確実性へのアプローチ 自分は理数系の正式な教育を受けておらず、どちらかといえばいわゆる人文系な発想をしがちである。

    秩序があると混沌よりも良いんじゃ(プロジェクト遂行における創発段階においても段取りや問題探索空間の縮小が必要という話) - Lambdaカクテル
  • エンジニア入門者に習得してほしい「熟考」とは何か、それは論理的飛躍の最小化ではないか - Lambdaカクテル

    会社の1on1があって、 id:yigarashi と30分くらい話したら面白い話がいろいろできたので紹介する。掲題ではエンジニアと書いているが、別にウェブ系ソフトウェアエンジニアに限られた話でもないし、ホモサピエンス全員におすすめ、考える葦の皆様におすすめです、くらいのニュアンスである。 熟考すると良い 熟考すると良い答えが出る。当然のことである。しかし入門者に熟考しろと言ってプロになるかといったら難しい。 今期も例によってゴリゴリScalaを書いたりTypeScriptを書いたりPerlを書いたりしていたが、アーキテクトとして中規模プロジェクトを引っ張る機会がいくつか与えられたし、今も引っ張っている最中だ。反省点としてあるのが、具体的にどういうプロジェクトかはいったん措いといて、その進み方に着目すると、一筋縄でうまくいったり、いかなかったりしたことだ。 どういう風に考えると良いんでしょ

    エンジニア入門者に習得してほしい「熟考」とは何か、それは論理的飛躍の最小化ではないか - Lambdaカクテル
  • 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カクテル
  • CloudFront+S3構成だった自分のサイトをCloudflare+R2に移行した - Lambdaカクテル

    自分のウェブサイト( http://www.3qe.us/ )をCloudFront+S3構成からCloudflareを使った構成に乗り換えたので、ひっかかった点やつまづいた点などをメモしておく。 結論としては普通に移行できたが、メールとの兼ね合いでDNSまわりでちょっと配慮が必要な部分があるかも、といった具合。試したいときは全部読んでからチャレンジしよう。 ウェブサイトの静的配信にCloudFrontとS3を使っていた モチベーション: ALBのコストが高い Cloudflare 構成 Cloudflare Pages Cloudflare+ Denoflare + R2 修正 R2のstatic hosting機能を直接使う 手順 Webサイト追加 R2バケット作成 APIトークン作成 Denoflareでworkerをデプロイする 完了 まとめ オチ 参考文献 ウェブサイトの静的配信

    CloudFront+S3構成だった自分のサイトをCloudflare+R2に移行した - Lambdaカクテル
  • manがあるコマンドは偉いし、manを付けるべき - Lambdaカクテル

    社内で、crontabのtabは実はtableだからクーロンタブじゃなくてクーロンテーブルなんだよね、という話が盛り上がった。 ファクトチェックとして、crontab(5)が紹介されていた(cron tableという言葉が出現している)。 manで事実確認がすぐできてすごいと思う一方、それを可能たらしめているmanもありがたいと思った。 man(1) とかの数字って何? 意外なものにmanがある 最近のコマンドにman pageが無い件 manまわりのコマンドの紹介 man(1) とかの数字って何? ちなみに、manのマニュアルやコマンド自体をアドレスするときに使うman(1)といった記法のカッコ内の数字は、manのセクション番号である。 コマンドと設定ファイルが同名であることがしばしばあるため、カッコ内にセクション番号を書くことで識別できるようにしている(例えば、crontab(1)はそ

    manがあるコマンドは偉いし、manを付けるべき - Lambdaカクテル
  • PGP鍵を交換しました + 令和最新版のPGP鍵運用メモ - Lambdaカクテル

    PGP鍵を交換しました。というのも、元々使っていたPGP鍵はYubikey上で生成して使っていたところ、数ヶ月前にYubikeyを紛失するという赤っ恥の行いをやらかしてしまい、とっとと失効させて作り直す必要があったからです。ありがたいことに手元に旧い鍵の失効証明書があったので、失効は終わっています。そのまましばらくPGP自体使っていなかったのでそのままにしていたのですが、最近PGPを使う用事が発生したのでちゃんと作ることにしました。 当は、旧い鍵の主鍵で新たな鍵の主鍵に署名したり、Key Transition Statementというのを作成して両者の鍵で署名したりして、「正当に鍵が移行しましたよ」ということを表明しなければならないのですが、いかんせん旧い主鍵を使えない形態で旧鍵を運用していたので、これができません。しょうがないので、たとえばhttps://www.3qe.usに公開鍵情

    PGP鍵を交換しました + 令和最新版のPGP鍵運用メモ - Lambdaカクテル
  • 普段はPerlとScalaを書いていますが #rubykaigi 2022に参加してきました / 吸えそうな知見 - Lambdaカクテル

    普段はPerlScalaを書いて暮らしていて、Rubyを書くのはcapistranoを使うとき・・・という位のWebアプリケーションエンジニア、 id:Windymelt です。株式会社はてなで、はてなブックマークを開発しています。 普段は、関数型テクニックの話をよく記事に書いています。ちょっと見てやってください。 blog.3qe.us 今回、近所の言語の動向も見てみたい!! && 知人エンジニアRubyistが多い && 今回の開催地は比較的近所 というわけで参加することにしました(三重県津市での開催でした)。 うおーうおー #rubykaigi pic.twitter.com/2XCGMN2Iiw— Windymelt (@windymelt) 2022年9月8日 撮影した日はちょっとどんよりしていましたが、二日目以降はよく晴れました 自分の暮らしに生かせそうだなと思った知見 B

    普段はPerlとScalaを書いていますが #rubykaigi 2022に参加してきました / 吸えそうな知見 - Lambdaカクテル
  • 忙しい人に判断を仰ぎたいときは松竹梅プランを作ってチェックボックスを埋めてメンションしてもらうようにすると合理的で便利 - Lambdaカクテル

    普段の暮らしにおいて、実装の仕様をエンジニア単独では決められないことがあって、そういうときにはマネージャーとかディレクターといった意思決定可能な立場の人の判断を仰ぐことになるのだけれど、そういう立場にある人は無限にミーティングをしていたり、無限に同じような意思決定を続けなければならないので、とにかく多忙だ。 そこで、ちょっと判断を仰ぎたいのですが、といったシチュエーションでは、GitHubのIssueなどの非同期なコミュニケーションチャンネルを使って、非同期に通知が飛ぶようにメンションしつつ、以下のことをすると良い。 松竹梅で候補をあらかじめ立てておく 松はハイコストだけれど理想に近い 梅は激安プラン夜行バスといった雰囲気 GitHubはリストの冒頭にチェックリストを入れることができて、しかもチーム内だったら勝手にいじれるはず - [ ] 松プラン: DBを1000xlargeにする (費

    忙しい人に判断を仰ぎたいときは松竹梅プランを作ってチェックボックスを埋めてメンションしてもらうようにすると合理的で便利 - Lambdaカクテル
  • ちょっとしたデータファイルのフォーマットにJSON Linesを使うと便利 - Lambdaカクテル

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

    ちょっとしたデータファイルのフォーマットにJSON Linesを使うと便利 - Lambdaカクテル
  • Recursion Schemeによるドドスコ問題の恐るべき解法 - Lambdaカクテル

    さる8月1日、計算機科学の根幹を揺るがすドドスコ問題が出題され、エンジニアたちは震撼した(意味: 面白問題が出たので、なるべくヘンテコな解法を使って己の技巧を誇示するためにエンジニアたちは競ってコードを書きはじめた)。 【問題】配列{"ドド","スコ"}からランダムに要素を標準出力し続け、『その並びが「ドドスコスコスコ」を3回繰り返したもの』に一致したときに「ラブ注入♡」と標準出力して終了するプログラムを作成せよ(配点:5点)— ((🐑++)) (@Sheeeeepla) 2022年8月1日 そこで、関数型テクニックをなんとかねじこんだ解法を作ったのでここに示す。 import higherkindness.droste.Coalgebra import higherkindness.droste.data.list.{ListF, ConsF, NilF} import higherk

    Recursion Schemeによるドドスコ問題の恐るべき解法 - Lambdaカクテル
    fumikony
    fumikony 2022/08/06
  • GitHub Actionのジョブ実行画面からPull Requestを辿れるようにした - Lambdaカクテル

    こういうのを作りました。 ジョブに紐付いたPull Requestへのリンクが表示される 行ったこと: リンクを生成するジョブを1つ生やした 綺麗な表示はStep Summary機能 (後述) の力を借りている ジョブ実行画面からPull-Reqに戻りたい GitHub Actionsのジョブ実行画面には、その実行元となったPull Requestへのリンクが存在しないため、困っていた。 よくあるシチュエーション: Pull Requestを見るとジョブがコケていた 様子を見に行くうちに履歴がどんどん深くなる -- ジョブ画面内での遷移はどんどんヒストリが積まれる Pull Requestに戻れなくなってしまう この話を同僚にしたところ共感の嵐だった。したがって隠れた需要がありそうだということが判明し、うまくやる方法を考えることにした。 結果、GitHub Action上でPull-Req

    GitHub Actionのジョブ実行画面からPull Requestを辿れるようにした - Lambdaカクテル
  • 悲しみの海に溺れないようにしておくと良い - Lambdaカクテル

    Web系のエンジニアとして糊口を凌ぐようになってから5年ほど経ち、そこそこ仕事ができるようになってきた自負があるのだが、見上げてみればキリがなく、爆速で進捗を出す先輩エンジニアのふもとまで届く気がしない。ロケットのような推進力が自分にもあればいいのにと思っても、自分の歩みはカヌーくらい。 ところで、身の回りでどんなエンジニアがうまくいっているのか、その特徴について考えると、色々大変なことがあってもしばらくするとケロッとしている人が多いように思う。めちゃくちゃな負荷やプライベートでしんどかったりしても(それはそれで大変なのだが)しばらくすると何事もなかったかのように仕事をやっていたり、いつも通りOSSを書いていたりする。そういう復帰力はこれまで意識したことが無かった。思い返せば、だいたい嫌な事があった日はぐったりしているし、その週もあまり調子が出ずじまいで、とうとう土日も寝ていたりする。 こ

    悲しみの海に溺れないようにしておくと良い - Lambdaカクテル
  • GitHub ActionsからAWS使うときはアクセスキーIDをそのままシークレット名に含めるとよさそう - Lambdaカクテル

    tl;dr MY_TEAM_AWS_${ACCOUNT_NAME}_${IAM}_AKIAXXXXXXXX みたいなシークレット名にしましょうという話です 編 自分のチームではJenkinsからGitHub Actions(GHA)への脱出を継続的にやっている。プロダクトに歴史があるからJenkinsがいろいろな所で使われていて、なかなか脱出できない。 その一環として、credentialを使ってAWSにアクセスするというworkflowを書く機会があったのでメモ。 (PrivateなGitHubリポジトリを運用しているという前提の話です) 前提 外部から呼びたければIAMでcredential発行する必要がある GHAのような外部サービスからAWSのサービスにアクセスするときには、IAMでcredentialを発行してこれを使っている。 IAMは以下のような形式で、アクセスキーIDとシ

    GitHub ActionsからAWS使うときはアクセスキーIDをそのままシークレット名に含めるとよさそう - Lambdaカクテル
  • 洗い物のインターフェイスを統一して全部食洗機に投入できるようにするといい - Lambdaカクテル

    先日食洗機を買ったけれど、フライパンだけは取っ手が食洗機に収まりきらずに洗えないという問題があった。仕方がないのでフライパンだけ手で洗っていたけれど、手で洗うためにはスポンジや通常洗剤を常時シンクに露出させておく必要があるがために、プログラミングで言うとフライパンのためだけに各種実装が行われているという不健全な状態になっていた。統一的に洗い物ができないのであれば、食洗機を導入したメリットが半減してしまう。 この問題を解消するためには、フライパンの大きさを小さくするか、取っ手が外せるフライパンを導入するしかない。今回は後者のアプローチをとることにした。 取っ手が取れるフライパン 最強 取っ手が取れるフライパンといってもいろいろなメーカーがある。例えばアイリスオーヤマも出している。一般に知名度でいえばティファールのフライパンが有名。 どう選ぶか。とりあえず一番知名度が高いということは、ユーザの

    洗い物のインターフェイスを統一して全部食洗機に投入できるようにするといい - Lambdaカクテル
    fumikony
    fumikony 2021/11/12
    ティファールのモデルによっては食洗機使えないの知らなかった