nikkie-ftnextのブックマーク (950)

  • 【読書ノート】Clean Architecture 達人に学ぶソフトウェアの構造と設計 - TadaoYamaokaの開発日記

    書籍「Clean Architecture 達人に学ぶソフトウェアの構造と設計」を読んだので、内容をまとめた。 以下の内容は、ほとんどClaude3 Opusを使用して作成している。 まえがき・第I部 イントロダクション まえがき ソフトウェアシステムの構造を決定するルールは、システムの種類に関係なく普遍的である。ソフトウェアアーキテクチャの目的は、システム構築に必要な人材を最小限に抑えることであり、設計の品質は開発・保守に必要な労力で測ることができる。アーキテクチャは仮説であり、実装と計測によって証明すべきものである。書は、時代を超越した不変のルールを解説する。 印象的なフレーズ 恋のおそろしい化け物とは、意欲は無限だが実行は有限、欲する心ははてしないがおこなうには限度がある。 優れたアーキテクチャのコストが高いと思うなら、劣ったアーキテクチャにすればいい。 速く進む唯一の方法は、うま

    【読書ノート】Clean Architecture 達人に学ぶソフトウェアの構造と設計 - TadaoYamaokaの開発日記
  • testcontainers-python: pytest 実行時に使い捨て可能な LocalStack を起動する - kakakakakku blog

    Testcontainers を使うと,テストコードを実行するときに必要になるデータベース・キャッシュ・キューなどの依存関係をコード上で管理できて,実行後にはコンテナを自動的に消してくれるという使い捨て可能な仕組みを簡単に作れる❗️Testcontainers のサイトに載っている「Test dependencies as code」という表現はピッタリだと思う👌 testcontainers.com Testcontainers は Java / Go / .NET / Rust など多くの言語をサポートしているけど,今回は Python 用の testcontainers-python を試してみた.検証に使ったコードを紹介しつつ,簡単にまとめておく✍ また Testcontainers Cloud もあったりする🌩 testcontainers.com 前提 今回は以下の前提で試

    testcontainers-python: pytest 実行時に使い捨て可能な LocalStack を起動する - kakakakakku blog
  • マイナカードで確定申告が簡単になった件 - 43号線を西へ東へ

    3月15日が期限の確定申告を昨3月15日の18時に提出しました。コロナ中は1年1〜2ヶ月期限が伸びていましたが、それに合わせて割とギリギリに申告していました。 そもそも、夏休みの宿題を余裕を持って完成させた記憶がありません。今でもその頃のスピリットは持ち続けている様です。 余裕持って行動するのがどうも苦手です。 さて、確定申告をマイナンバーカードでやる方が増えてきました。マイナポータルの認証でつまづく方々多かったようですが、ドツボにハマったという話をよく聞きます。 私の場合は、経費の入力・領収書の添付等で手間取るものの、申告自体は一瞬で終わりました。マイナンバーカードの前身、住基ネット時代から電子申告していた人間からすると、昔に比べると、断然確定申告が簡単になりました。確定申告作業について、備忘録的にまとめておきます。 住基ネット時代のe-TaxをMacで使うのは至難の業でした それまでは

    マイナカードで確定申告が簡単になった件 - 43号線を西へ東へ
  • RSGT2024のセッションを見た感想「「プロダクトマネージャーがプロダクトマネジメントを失敗させる!?」カオスな……」 - はんなりと、ゆるやかに

    RSGT2024 のYoutubeが公開されたので気になったセッションを見ていきます。今回見たのはMori Yuyaさんの「「プロダクトマネージャーがプロダクトマネジメントを失敗させる!?」カオスなプロダクト開発を効率化したら硬くて息苦しい官僚組織になっちゃった! 大企業病の罠を乗り越え若々しいチームを実現するぞ」です。 www.youtube.com セッションを聞いて、重要だと思った要点 効率化を求めて分業化した結果、仮説を検証するまでに相談相手が増え、時間がかかる。 分業化した結果、各チームはTODOに追われ、顧客と接する機会もなくなっている 組織の関心が質より量が変わっていく 重要よりも緊急のタスクに追われ始める 「わたしがやらなきゃ誰"が"やる」から「わたしがやらなきゃ誰"か"やる」に変わる 売り上げが伸び悩むと他社事例に頼りだす とうぜん、考える力が落ちる 無知無能無関心を受け

    RSGT2024のセッションを見た感想「「プロダクトマネージャーがプロダクトマネジメントを失敗させる!?」カオスな……」 - はんなりと、ゆるやかに
  • フロントエンドとバックエンドの一貫したバリデーションで開発プロセスに調和と効率化をもたらす - Sansan Tech Blog

    技術部 Digitization部の湯村です。 新規アプリケーション開発で採用したバリデーションロジックの管理方法を紹介します。 1. はじめに 2023年末に以下の技術スタックでデータ化アプリケーションの開発をしました。 フロントエンド: TypeScript + Next.js バックエンド: TypeScript + Express Next.js では App Router を採用しましたが、Server Components、Route Handler は利用せず、ブラウザから Express の API を呼び出す構成にしました。 SPA + API で開発する際の課題 この構成で開発をする際の課題の1つにフロントエンドとバックエンドでのコードの重複があります。 特にバリデーションのロジックの管理方法は頭を悩ませた方も多いはずです。 バリデーションに対するアプローチ バリデー

    フロントエンドとバックエンドの一貫したバリデーションで開発プロセスに調和と効率化をもたらす - Sansan Tech Blog
  • Djangoのログ出力について - take IT easy

    先週投稿したOneToOneFieldの裏側で発行されているSQLを確認する の中でSQLをログ出力できるようにしていました。 そこについて、コピペで動いた!状態だったので、脱却するために調べました。 結論 DjangoではPythonloggingを利用しています。 logging.config.dictConfigをベースにした設定値を記述しているようでした。 コピペで動いていた設定値について まず、先週は割愛していたLOGGING の内容を転記します。 LOGGING = { 'version': 1, 'handlers': { 'console': { 'class': 'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'level': 'DE

    Djangoのログ出力について - take IT easy
  • 大規模言語モデル(LLM)における日本語評価の概観 - Algomatic Tech Blog

    はじめまして!Algomatic LLM STUDIO でインターンをしている なべ(@_h0jicha)です。普段は大学でマルチモーダル大規模言語モデルの応用に関する研究に取り組んでいます。 Algomatic のインターンでは、LLM の評価に関して網羅的な調査や各種ツールの導入に取り組んできました。 記事では、この知見を皆さんに共有することで、日語圏における LLM 評価の現状を俯瞰していただき、各ツールを適切に選択するための糸口を提供することを目的とします。 はじめに 大規模言語モデル(LLM)の開発プレイヤーが増加している昨今において、日語を対象言語とした運用を得意とする LLM が次々と公開されています。 LLM を安全に使用する ために、対象タスクに適した LLM を選択すること、ならびに有害なコンテンツ生成を検知することなど、LLM の性能を多角的に評価する枠組みが重

    大規模言語モデル(LLM)における日本語評価の概観 - Algomatic Tech Blog
  • GILを無効化したPythonを早速試してみた - RevComm Tech Blog

    バックエンドエンジニアの小門です。 この記事ではグローバルインタプリタロック (GIL) が解消されたPythonを動かしてみた検証の方法と結果について書きます。 なおGIL自体の説明や詳しい仕組みについてこの記事ではほとんど説明しないのでご了承ください。 準備として開発バージョンを取得してソースコードからビルドし、ビルド成果物のPythonランタイムを使って検証します。 準備(ビルド) Pythonにおける「GIL廃止」の第一歩として、CPython家のリポジトリにおいてGILを無効化できるようにするための修正が2024年3月12日mainブランチへマージされました。 gh-116167: Allow disabling the GIL with PYTHON_GIL=0 or -X gil=0 #116338 また同日、上記の変更を取り込んだ開発バージョンが v3.13.0a5 とし

    GILを無効化したPythonを早速試してみた - RevComm Tech Blog
  • 今日から始めるChatGPT+Zapierで雑パーソナライズ情報収集 - LayerX エンジニアブログ

    皆さんこんにちは。CTOの松です。LLM使ってますか?ChatGPT毎日触ってますか? LLMに熱狂してすでに1年以上が経ちましたが周辺エコシステムが充実してきたことでいろいろな取り組みがとても簡単に実現出来るようになったなーと感じています。 ということで今回はZapierを使った小ネタのご紹介です。 AI・LLM事業部の今 とその前に、AI・LLM事業部での取り組みから着想を得たものでして、AI・LLM事業部について簡単に紹介させてください。 LayerXの新規事業であるAI・LLM事業部では、バクラクでも取り組んできたビジネス文書の解析の延長としてLLMを活用して文書分析エンジンの開発を進めています。現在このエンジンを使ったエンタープライズ向けの新規プロダクト開発にいそしんでおります。とても楽しいですし、最近は様々なお客様からの引き合いも増えておりまして、事業成長に向けて満を持しての

    今日から始めるChatGPT+Zapierで雑パーソナライズ情報収集 - LayerX エンジニアブログ
  • 基本の正規表現を知る(正規表現) - arterminalのブログ

    課題 正規表現には様々な種類が存在すると聞くが、基として覚えるべき正規表現はどのようなものか知りたい。 解決策 POSIXの範囲内では以下の3種類の正規表現が存在する。 まずはこれらを学習すると良いのではないか。 種類 略称 基正規表現 BRE (Basic Regular Expression) 拡張正規表現 ERE (Extended Regular Expression) AWK正規表現 - POSIXの範囲内の代表的なコマンドとそれに対応している正規表現の例を以下に挙げる。 コマンド名 対応している正規表現 grep (-E オプションなし) BRE grep (-E オプションあり) ERE sed BRE AWK AWK正規表現 ※ sed において頻繁に利用される -r オプション(EREを利用するオプション)はPOSIXの範囲外 各正規表現において利用できる機能について

    基本の正規表現を知る(正規表現) - arterminalのブログ
  • 【翻訳】テスト駆動開発の定義 - t-wadaのブログ

    このブログエントリでは、テスト駆動開発(TDD: Test-Driven Development)の考案者Kent BeckがTDDの定義を改めて明確化した文章を、許可を得たうえで翻訳し、訳者の考察を沿えています。 きっかけ 2023年の年末、テスト駆動開発(TDD: Test-Driven Development)の考案者Kent Beckは、substackにTDDに関するポストを連投して論戦を繰り広げていました。TDDはその誕生から20年以上が経ち、その間に「意味の希薄化」が発生して議論が噛み合わなくなっていました。意味の希薄化(Semantic Diffusion)とは、新しく作り出された用語が広まる際に来の意味や定義が弱まって伝わる現象です。 私(和田)はTDDと関わりの深いキャリアを歩んできました。Kent Beckの著書『テスト駆動開発』の翻訳者であることもあり、TDDの正

    【翻訳】テスト駆動開発の定義 - t-wadaのブログ
  • 構造化ログから構造化イベントへ - methaneのブログ

    オブザーバビリティ・エンジニアリング 作者:Charity Majors,Liz Fong-Jones,George Mirandaオーム社Amazon オブザーバビリティ・エンジニアリングの5章のタイトルは「構造化イベントはオブザーバビリティの構成要素である」です。構造化イベントの定義は5.1節にあります。 イベント とは、番環境のサービスへの影響を理解するために、ある特定のリクエストがそのサービスとやりとりしている間に発生したすべての記録です。 そこからさらにイベントの記録について説明が続きます。 空のマップを初期化することから始めます。このマップには、そのリクエストの有効期間中に発生したものに関する興味深い詳細、 たとえばユニークID、変数の値、ヘッダー、リクエストで渡されたすべてのパラメーター、実行時間、リモートサービスへのコール、それらのリモートコールの実行時間など、後にデバッ

    構造化ログから構造化イベントへ - methaneのブログ
  • git commit --fixupを使いましょう - Don't Repeat Yourself

    発端 Pull Request で force push されると差分がわからなくなるから困るんだけどみんなどうしてますか?— codehex.bsky(へっくす) (@codehex) 2024年2月25日 ポストの前提がちょっとわかりませんが、レビュー後にforce pushされると、どこに修正を入れたのかわからないケースだと仮定します。プルリクエストがまだドラフト状態でのforce pushやrebaseで困るケースはそんなにないと思うからです。 git commit --fixup このケースではgit commit --fixupが便利です。レビューで指摘が入ったコミットに対して--fixupをかけておき、レビュワーはfixupコミットの内容を確認します。レビュワーが確認してOKが出た段階で、git rebase -i --autosquashなどを使ってfixupコミットを元コ

    git commit --fixupを使いましょう - Don't Repeat Yourself
  • 【参加メモ】AI時代のソフトウェアテストの現在と未来 #genai_autify_launchable - ソフトウェアの品質を学びまくる

    日2024年3月5日(火)の昼間に開催された、『AI時代のソフトウェアテストの現在と未来』というイベントがとてもよかったので、特に印象深かったポイントについて共有したいと思います。 イベントの詳細はこちらで。 autifyjapan.connpass.com 登壇者はタワーズ・クエストの和田卓人 @t_wada さん、Launchableの川口耕介 @kohsukekawa さん、Autifyの近澤良 @chikathreesix さんのお三方。ファシリテーターは、近澤さんと同じくAutifyの、末村拓也 @tsueeemura さんです。 宣伝タイム Launchableは、「テストの失敗をよりインテリジェントに扱う」ことを目指している。 たとえば、テストのFlakinessの判定や対処にできるだけ人を介在させないとか、過去の実行結果を見て再実行要否の判断をするといったもの。 Auti

    【参加メモ】AI時代のソフトウェアテストの現在と未来 #genai_autify_launchable - ソフトウェアの品質を学びまくる
  • 私とテストと自動化と - あどけない話

    何度か講演でこの話をしたのだが、気が向いたのでエッセンスを書き下しておこうと思う。 テスト駆動という言葉が流行る前にプログラマとなった私は、当初どのようにテストを書いてよいのか分からなかった。そんなとき、(当時はオーム社で現在はラムダノートの)鹿野さんから「ビューティフルコード」を献していただいた。分厚いなので、興味ある章から読んでいった。その一つがアルベルト・サボイア氏が書いた7章「ビューティフル・テスト」だ。 ビューティフルコード (THEORY/IN/PRACTICE) 作者:Brian Kernighan,Jon Bentley,まつもとゆきひろオライリージャパンAmazon この章では、例として二分探索が取り上げられる。二分探索のアイディアが出されたのは1946年だが、バグのない実装ができたのは12年後だという。実際に実装してみると分かるが、ソートされた配列の中に目的の要素が

    私とテストと自動化と - あどけない話
  • Ryeを使っていると uv venv が動かない - methaneのブログ

    Ryeを使っている状態で uv venv をすると、次のようなエラーになります。 $ uv venv × Querying Python at `/Users/inada-n/.rye/shims/rye` failed with status exit status: 2: │ --- stdout: │ --- stderr: │ error: unexpected argument found │ --- pythonpython3 コマンドが rye コマンドのシンボリックリンクになっていて、ryeはpythonとして起動された場合は .python-version などのルールに従って決めたバージョンのPythonを起動するようになっています。ちなみに +3.8 みたいにしてバージョンを指定することもできます。 $ python3 +3.8 -msite sys.path

    Ryeを使っていると uv venv が動かない - methaneのブログ
  • 構造化ログのフォーマット logfmt vs JSON lines - methaneのブログ

    構造化ログのプラクティスをあちこちで調べていたら、logfmtを推奨する記事を見つけたので調べてみました。 先に結論を言うと、JSON linesを使っておくのが良さそうです。 logfmt について logfmtとはスペース区切りで key=value を並べたフォーマットです。文字列にはクォートとエスケープによってスペースや改行を含められます。 at=info method=GET path=/ host=mutelight.org fwd="124.133.52.161" dyno=web.2 connect=4ms service=8ms status=200 bytes=1653 (logfmt から引用) あちこちで logfmt のリファレンスとして紹介されているのはこの記事です。 https://brandur.org/logfmt 発明されたのはどこか分かりませんが、流行

    構造化ログのフォーマット logfmt vs JSON lines - methaneのブログ
    nikkie-ftnext
    nikkie-ftnext 2024/03/04
    「先に結論を言うと、JSON linesを使っておくのが良さそうです。」
  • Googleアラートの登録キーワードRSSフィードとSlackの相性が悪いから変換プロキシを作って快適化 - 太陽がまぶしかったから

    Google アラートは便利だけど 情報収集をするのには Google アラートが便利。仕事趣味に関係するキーワードをGoogleアラートに登録し、それをRSSフィードに出力することで、最新のニュースを見逃すことなく、リアルタイムで情報を取得することができる。 しかしながら、GoogleアラートのRSSフィードをSlackに表示させようとすると以下のような表示になって視認性が低くなってしまう。 Gooogleの転送URLを通るためSlackでカード展開されない ボールドタグが文字列として出力されている 文が中途半端に出力される また同じようなニュースが重複することも多く、それもまたノイズになってしまう。 Google アラートのRSSフィードを変換するプロキシを作成 この課題に対応するため、以下のシーケンスでGoogleアラートの生成するRSSフィードを変換するサーバレス関数を作成し、

    Googleアラートの登録キーワードRSSフィードとSlackの相性が悪いから変換プロキシを作って快適化 - 太陽がまぶしかったから
  • LlamaIndexを使ったサンプルRAGアプリケーションを動かす - Re:ゼロから始めるML生活

    2023年くらいからLLMがブームになってますが、自分はというとChatGPTをそのまま使っていたくらいで、それ以上はLLMに特に触っていませんでした。 正直そんなに興味はなかったんですが、まったく知らないのはそれはそれでまずいと思うようになりました。 ということで、今回はLLMを使用する代表的な設計パターンであるRAGについてサラッと触っていきたいと思います。 RAG? LlamaIndex 良いところ とりあえず作ってみる データセット作成 LlamaIndexを使った実装 動かしてみる 下準備 動作確認 主要なコードを読む リポジトリ 参考文献 感想 RAG? 多分これを読んでいる人には釈迦に説法な気はしますが、RAGについて一応書いときます。 RAGは、大規模言語モデル(LLM)と外部知識検索を組み合わせた 生成AI設計パターン です。 RAGは、リアルタイムデータを生成AIアプリ

    LlamaIndexを使ったサンプルRAGアプリケーションを動かす - Re:ゼロから始めるML生活
  • dlshogiのPyTorch Lightning対応 - TadaoYamaokaの開発日記

    dlshogiの学習は、PyTorchを使用して、モデルの訓練処理を独自に実装していた。 マルチGPUによる分散学習に対応させようと考えているが、独自に実装するより、PyTorch lightningに対応させた方が実装が楽になるため、dlshogiをPyTorch Lightningに対応させたいと考えている。 まずは、訓練の基部分の実装を行った。 PyTorch Lightning CLI ボイラープレートをできるだけ削除するため、PyTorch Lightning CLIを使用して実装する。 PyTorch Lightning CLIを使用すると、コマンド引数のパース処理など含めて自動で行ってくれる。 起動部分の処理は以下のように記述するだけでよい。 def main(): LightningCLI(Model, DataModule) if __name__ == "__main

    dlshogiのPyTorch Lightning対応 - TadaoYamaokaの開発日記