タグ

ブックマーク / zenn.dev (81)

  • なぜSQLiteはバイトコードを使うのか

    以前にデータベースを自作しようとして、SQLiteのアーキテクチャを見てみたらVMだったことに疑問を感じ、それをツイートしたところ作者からリプをもらいました。 作者いわく、次のような背景があったとのことでした。 SQLiteを作った当初はデータベースエンジンのことをよく知らないがコンパイラのことをよく知っていた SQLデータベース・エンジンを書くという問題をコンパイラ構築の問題として扱うのは自然なことだった データベースエンジンのコアの部分をVMにするという発想がまったくなかったので、どんなメリットがあるのか?と気になっていました。 それを作者に聞いたら、詳細な説明ページを作ってくれました。 個人的にVMにしたことで、評価&実行のパフォーマンスは多少良くなると思うが、データベースエンジンのパフォーマンスにそれほど寄与していないんじゃないかな?って思ったりしました。 記事はそのページについ

    なぜSQLiteはバイトコードを使うのか
  • Node.js の進化に伴い不要となったかもしれないパッケージたち

    tl;dr はじめに 2024 年の 4 月 24 日に Node.js 22 がリリースされました。ESM を 条件付きで require する機能や、--run フラグによる npm スクリプトのパフォーマンス改善などが v22 で追加され、2009 年に Ryan Dahl が Node.js をリリースしてから 15 年が経つ今も、Node.js は進化を続けています[1]。 こうして Node.js 自身が強化されていくにつれ、以前はサードパーティーのパッケージを使用して実現することが一般的であった機能が Node.js のみで実現可能となり、当該パッケージが不要となるような場合があります。冒頭に引用した Ben Holmes の動画では、そのように不要となったパッケージとして dotenv node-fetch chalk mocha が挙げられていますが、この記事では「これら

    Node.js の進化に伴い不要となったかもしれないパッケージたち
  • 本に書いてあるスクラムと、お前らのいうスクラム開発は別物だということにいい加減気づいてくれ

    前振り タイトルは煽りの激しい釣りです。ごめんなさい。 Web業界で今流行っている自称スクラムと、RSGTで語られるような来のスクラムとの間のギャップが大きすぎて説明が面倒臭くなったのでこの記事を書きました。 いい加減「私たちは自称スクラム開発を完璧に回しているから、スクラムの恩恵を将来得られるだろう」「私たちは来のスクラムとはかけ離れた別物のスタイルで開発をしている。だからスクラムの恩恵は永遠に得られない」という二重思考を他人にするようお願いするのにも飽きましたしね。 さて題といきましょう 題 世間で、特に渋谷や五反田や六木のWeb企業ではスクラムというものはとても流行っています。 しかしどう考えても、Web企業でよくお目にかかるスクラムと国内トップカンファレンスであるRSGTで語られるスクラムとの間には大きな隔たりがあります。 「うちはスクラムやってます」 カジュアル面談で耳

    本に書いてあるスクラムと、お前らのいうスクラム開発は別物だということにいい加減気づいてくれ
    raimon49
    raimon49 2024/02/28
    経営陣が本気でコミットしていないガワだけのなんちゃってスクラムについて。
  • GitHub OAuthアプリを使ったスパム攻撃を停止させる

    2024年2月21日ごろから、"Github Jobs"を名乗るGitHubの開発者ポジションをオファーするスパム攻撃が発生しています。 仕組みとしては、GitHubのIssueやPRでmentionをするとメールの通知が届くのを利用して、コメントでスパムメッセージを送りつけるものです。 以前からこのスパムは存在していましたが、今回おきた問題はGitHub OAuth Appを用意して、スパムコメントで24時間以内にここから申請してくださいという感じの誘導して、OAuthアプリの認証を行わせる攻撃が含まれていました。 このスパムOAuthアプリは、GitHubのprivateリポジトリの読み取りやコメントの読み書きなどの権限も持っていたため、このスパムアプリを認可してしまうと、その人のアカウントでさらにスパムコメントが増えるという問題が起きていました。 詳細は、次のGitHub Discu

    GitHub OAuthアプリを使ったスパム攻撃を停止させる
  • Java の enum を使いこなせるあなたに sealed interface

    はじめに Java の enum は大変便利で非常多くのシーンで活用されています。例えば区分を表すようなオブジェクトを表現したい際にもよく使われていますね。 Java 14 で正式機能となった switch式にて網羅性検査が行えるようになり、それまで以前ではどうしても抽象メソッド等を活用する必要があった処理についても、switch式を利用する事で簡潔に表現することができるようになりました。 また、Java 17 で正式機能となった sealed classes/interfaces と Java 21 で正式機能になった Record Patterns によって、これまで必要だった区分値のような enum を必ずしも定義しなくて良い場合も出てきました。 この記事では、今まで enum を使っていたコードがこれらの機能によってどのように変わるのかを紹介し、盲目的に enum を定義するのでは

    Java の enum を使いこなせるあなたに sealed interface
  • 初心者が本当に知りたかったC#入門以前

    この記事は「初心者だった時に知りたかったな…」っていう普通のC#入門だと教えてくれないことが書いてあります。 なので入門記事というより、C#初心者にはちょっと難しい内容もあります! C#の特徴的なところ C#は変化が早い💨 最近は毎年メジャーアップデート 2019: C# 8.0 2020: C# 9.0 2021: C# 10.0 2022: C# 11.0 2023: C# 12.0 新記法、新しい書き方がモリモリ入る しかも新しい書き方の方が便利で性能が良い(ことが多い) 少し前のC#を知ってる人からするともう別物 解説 C#は6.0までゆっくりな変化だったんですが… 7.0から様子が変わって8.0以降は毎年変わるようになりました。 ↓こちらのスライドの7ページから数枚が参考になります! あんまり変わらないバージョンもありますが、特に大きなところだと, 「null安全」になった (

    初心者が本当に知りたかったC#入門以前
  • Gmailの新スパム規制対応全部書く

    [2024年1月10日、19日追記] GmailとYahoo!側のアップデートに合わせていくつか細かい説明を追加しています(大筋は変わっていません)。変更点だけ知りたい方は「追記」でページ内検索してください。 2023年10月3日、Googleはスパム対策強化のため、Gmailへ送るメールが満たすべき条件を2024年2月から厳しくすると発表しました。また米国Yahoo!も、2024年2月 第一四半期[1] から同様の対策を行うと発表しています。端的に言えば、この条件を満たさないと宛先にメールが届かなくなるという影響の大きな変更です。 この記事では、Gmailや米国Yahoo!の規制強化への対応方法を解説します。ただし米国Yahoo!にメールを送る人は多くないと思うので、フォーカスはGmail寄りです。また、メール配信サービス(海外だとSendGridやAmazon SES、国産だとblas

    Gmailの新スパム規制対応全部書く
  • もう初回コードレビューはAIに任せる時代になった - CodeRabbit -

    どんな人向けの記事? レビューによって心理的なダメージを受けやすい方 非エンジニアだが、エンジニアチームがどんな機能を作っているか知りたい方 業務が溜まっていて、レビューに割く時間を捻出するのに苦労している方 コピペできるコードも公開します 初回レビューをAIに任せると、いろんなロールの人の役に立つ レビューは得意ですか? 優秀なエンジニアしかいないチームであれば、PRは1トピックに絞って小さく明確なコミットによって作成され、適切な要約とともに提供されることでしょう。 しかし、実際にはいろいろな制約から、PRが想定よりずっと大きくなってしまったり、関連トピックと異なるコードが混じってしまうこともあります。 実際のところ、大きなPRを適切にレビューするのは難しいことです。また、自分が詳しくない領域のレビューを行わなければいけない機会もあります。 今回の記事は、レビューを作成してくれるAI C

    もう初回コードレビューはAIに任せる時代になった - CodeRabbit -
  • GoCLIツール職人のためのRust入門

    三連休中にこんなツールを作った。 普段はGoでCLIツールを書いているけど、このツールで初めてRust格的に使ったのでその際に得た知見を元にGoでCLIを作っている人向けにとりあえずRustでツールが作れる状態になれることを目指して、CLIツールを作るときによく使っている処理やRustならではの構文などを中心に書いてみた。 この記事を通して「なぁ~んだ。案外Rustでもサクッとツール作れそうじゃん」とか「Rustにも意外とツール向けのライブラリとかあるんだなぁ」とか思って貰えると嬉しい限り。

    GoCLIツール職人のためのRust入門
  • NTT退職エントリ 底辺子会社編

    先日10年勤務したNTT退職してフリーランスエンジニアになりました。 流行りの?NTT退職エントリーですが、よくあるのはNTT研究所とかの超エリートがGAFAMでデータサイエンティストになりましたみたいな話ですが、 私の場合はグループでも底辺の話で、NTT持株会社から見るとひ孫会社で保守を専門にする会社で更に中途採用です。 研究所なんてほんの上位の話なので、NTTの実態として大量の底辺保守人材を抱えているので、ある意味リアルな話になるかなと。 自己紹介 NWエンジニア歴9年、AWSエンジニア歴1年の37歳。 NWエンジニアと言いつつほぼ監視のみという弱々エンジニアでしたが、AWSエンジニアに転向して1年でフリーランスに挑むことにしました。 前歴 新卒時は氷河期末期。 新卒は金融営業だったが1年で嫌気差し退社 次も金融だったがパワハラにあい1年で退社 になり就職活動する気も起きないが金も

    NTT退職エントリ 底辺子会社編
    raimon49
    raimon49 2023/09/30
    GAFAM予備校から晴れてGAFAM行きましたみたいなパターンよりも波乱万丈で面白いルートな気がする。NTTブランドが使えるうちにフルローン組んで物件取得と不動産投資も始めてるのが有能。
  • 225行のコードでGPTの仕組みを理解する

    概要 LLMに関心があり、ChatGPTやtransformerの仕組みを理解したいと思っていたところ、雰囲気を掴むのにこちらの動画がとても参考になりました。 動画の内容としては、以下のコーパスを学習して、直前の数文字から次の1文字(単語ではないことに注意)予測機を作成するというものです。 この動画で完成するコードは以下で、225行しかなくとても読みやすいです。 また短いですがtransformerのエッセンスが詰まっていて勉強になりそうです。 このコードを読み解くことでGPTやtransformerがどのように動いているのか、ざっくり理解してみようと思います。 ちなみに完成するとこんな感じの文字列が生成されます。ぱっと見文章っぽいですね。 first Scitizen: He's enough; but he cannot give his friends. MARCIUS: Do yo

    225行のコードでGPTの仕組みを理解する
  • GitHubのCODEOWNERSで一部サブディレクトリだけ別のオーナーを指定する

    docs/ @docs-owners docs/another-dir/ docs/another-dir/ @another-team 背景 GitHub のコードオーナーは、プルリクエストを作成した際に自動的にレビュワーをリクエストすることができる機能です。 CODEOWNERS という名前のファイルをリポジトリに配置し、.gitignore と似たような構文でディレクトリと対応するオーナーを指定します。詳しくは以下のドキュメントに記載されています。 CODEOWNERS を利用する上で、「特定のディレクトリのオーナーを指定しつつ、一部サブディレクトリだけ別のオーナーを指定したい」という状況がありました。 docs/foo-dir/file.txt ... @docs-owners docs/bar-dir/file.txt ... @docs-owners docs/another-

    GitHubのCODEOWNERSで一部サブディレクトリだけ別のオーナーを指定する
  • Terraformのライセンスの変更とその影響

    はじめに 先日、HashiCorp社はの発表により、すべての製品といくつかのライブラリの将来のリリースについて、Mozilla Public License v2.0(MPL 2.0)からBusiness Source License(BSL、またはBUSL)v1.1への移行するがわかりました。 ただし、HashiCorpのAPI、SDK、およびほとんどの他のライブラリはMPL 2.0のままです。 BSLとは? MPL 2.0との違いは? BSLは下記のようにいくつの特徴があります: 特定の期間(通常は数年)の後に、完全なオープンソースライセンス(たとえば、Apache 2.0)に変わるライセンスである。 BSLの下でリリースされたソフトウェアは、特定の期間中は商業的に利用することが制限される。 開発者がソフトウェアの商業的価値を保護しつつ、将来的にはコミュニティに還元することを目的として

    Terraformのライセンスの変更とその影響
  • Python(pytest)でテスト書くならfixture,conftest,parametrizeを理解すると世界が一気に変わる

    Python(pytest)でテスト書くならfixture,conftest,parametrizeを理解すると世界が一気に変わる 概要 Pythonのテストライブラリといえばpytestが一般的です。 Python標準のuniitestとは異なり、クラスベースではなく関数ベースでテストコードを記述することが一般的ですが、fixture,conftest,parametrizeを理解すると一気に世界が変わり、テスト体験が圧倒的に向上するため、これらの実装方法を紹介します。 リポジトリ 記事の説明に使用しているサンプルのテスト実装は、以下のリポジトリです。 想定読者 PythonやGitの基的な使い方を理解している方を想定しているため、基的な用語説明は省略しています。 環境 エンジニアの利用率の高いmacOSを前提として説明していますので、その他の環境の方は随時読み替えてください。 開

    Python(pytest)でテスト書くならfixture,conftest,parametrizeを理解すると世界が一気に変わる
  • 🪵 Go1.21 log/slogパッケージ超入門

    はじめに 2023年8月9日(日の場合)Go1.21がリリースされました🎉。Go1.21ではさまざまな変更点や追加機能が加わります。その中でもGo標準ライブラリに導入される構造化ロギングパッケージlog/slog(以下、slog)を楽しみにしている方は多いのではないでしょうか? 稿では、slogを実際に触りつつ、機能の解説をしていきます。 TL;DR 稿の概要をスライドにもまとめているので、ご参考にして下さい。 従来のlogパッケージについて slogの説明に入る前に、Go標準のlogパッケージについて簡単に紹介する。logパッケージを用いると、 io.Writer インターフェースを実装する任意の型にログメッセージを書き込むことができる。しかし以下のような制限があった。 ログレベルをサポートしていない ログレベルはほとんどのログパッケージの定番機能の一つだが、logパッケージには

    🪵 Go1.21 log/slogパッケージ超入門
  • 百番煎じのNTT退職エントリ

    2023年6月末をもって、約7年間勤めたNTT研究所を退職することになりました。7月からは外資系IT企業でデータサイエンティストとして働く予定です。これまでは研究員として、ネットワーク運用を支援するための機械学習について研究してきました。これからはエンジニアリングやデータ分析を生業にしていきます。 この記事は、僕がなぜNTTをやめたのかをまとめた、いわゆるNTT退職エントリというやつです。NTT退職エントリという言葉が定着したのは、以下のkumagiさんの伝説の記事がきっかけでしょう。 この記事が公開されたのが4,5年前でしょうか。公開以降、NTT退職エントリというものがあちこちで書かれたので何番煎じなのかも不明なのですが、自分自身の記録として残しておこうと思います。 NTT退職エントリを読んでいる方の中には、NTTへの入社を検討している人もいるでしょう。NTTの一般的なメリットとデメリッ

    百番煎じのNTT退職エントリ
  • node_modulesの問題点とその歴史 npm, yarnとpnpm

    皆さんnpmパッケージのバージョンを上げるときにハマって依存地獄から抜けられなかったことはありませんか? 私はあります。 複雑怪奇な依存関係を調べてみようとnode_modulesを覗いてみて、そのカオスっぷりに臭いものに蓋をしたことはありませんか? 私はあります。 そこでnode_modules以下について調べてみたのですが、node_modulesにどんな問題点があって、npmやyarn, pnpmは何を目指していたのか時系列順に紐解いた方がわかりやすいことに気づきました。 ここでは初期のnpmが抱えていた問題から今に至るまでを順を追って説明します。 するとnode_modulesの仕組みの他に、各パッケージマネージャの方針の違いが見えてくるはずです。 初期の頃のnpm (~2015年以前) この頃はシンプルで、依存関係はそのままnode_modulesのディレクトリ構造に反映されてい

    node_modulesの問題点とその歴史 npm, yarnとpnpm
    raimon49
    raimon49 2023/06/24
    npm --install-strategy=linkedオプションが導入されるまでの歴史。
  • Pythonのパッケージングと配布の全体像

    EDIT: このブログと似た内容の話をPyCon APAC2023にてお話ししました。 こちらの登壇資料も合わせてご覧いただけると幸いです こんにちはWantedlyの樋口です。 Pythonのパッケージングと配布は歴史が長く、多くのツール(ex. conda, pip, pipenv, poetry, rye...)が開発されてきました。これらの多様性はPythonが多くの人に使われ、継続的に改善されたゆえの賜物ですが、同時にこれらの理解を難しくしている要因にもなっていると感じます。 そこで記事では、Pythonのパッケージングと配布の全体像を紹介します。パッケージングと配布が何か、なぜ重要なのか、そしてそれぞれのツールが何を解決しようとしているのかについて説明します。以下のような疑問を解決できることを想定しています。 パッケージングと配布の仕組みがなぜあるのか 多数あるツールが何を解

    Pythonのパッケージングと配布の全体像
  • macOS の zsh ではこれだけはやっておこう

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

    macOS の zsh ではこれだけはやっておこう
    raimon49
    raimon49 2023/04/27
    コマンド実行後に空行を入れたり自動でrehashさせるの、言われてみれば設定しておくと便利そう。
  • 「こうしてスクラムが終わってしまう」前にすべきこと

    こうしてふりかえりは終わってしまった / A Demise of a retrospective ふりかえりカンファレンスで一番面白かった発表資料です。 資料をざっくり要約すると ふりかえりは最初は順調に機能するがある段階で停滞し、次第に「効果が出ていないもの」と判断されて廃止されてしまう、という話です。 理由として最初は低コスト高リターンの課題を倒していけるが、それらをすべて解決すると残るのは「リターンはあるが、コストが高すぎて解決できない課題」と「コストは低いがリターンもほぼない課題」だけになります。 開発チームは前者を「コストが高すぎて解決できない」と忌避し、後者だけに打ち込んだ結果、リターンが出ずに振り返り事態を無価値を判断してしまうからです。 ふりかえりを廃止することでチームの成長は停止してしまうでしょう。 これを防ぐために「コストが高すぎて解決できない」課題を解決する方向に頑張

    「こうしてスクラムが終わってしまう」前にすべきこと
    raimon49
    raimon49 2023/04/12
    >開発計画とかマイルストーンとかロードマップとか言われる、期間とスコープが固定されたガントチャート式の上位計画がスプリント計画の上位に「変更不可能な上位存在」として君臨 / これをLeSSと称して誤魔化す例も