GraphRAGを使った生成AIチャットアプリを作ってみた
記事要約
この記事は、RAG(Retrieval Augmented Generation)の精度向上に有効な手法であるGraphRAGを使ったチャットアプリの開発事例を紹介しています。GraphRAGは文章をノードとエッジに分解し、関係性をグラフデータとして表現することで、ベクトル検索では捉えられない関連情報を拾い上げることを可能にします。
具体的には、以下のような手順でチャットアプリが開発されました。
- PDFファイルをアップロード
- PDF解析:チャンク分割、グラフ化、テキスト/ベクトル索引作成
- 質問入力:グラフデータのハイブリッド検索
- 生成AIへのコンテキスト連携
- 回答表示
開発には、以下のOSSが利用されました。
- グラフデータベース: Neo4j
- オーケストレーションツール: LangChain
- チャットUI: Chainlit
- 生成AI: GPT-4o
- Embedding: cohere.embed-multilingual-v3.0
記事では、Neo4jのインストール手順やPython環境構築、GraphRAGによるグラフ化、ハイブリッド検索、生成AIへの連携方法などが詳しく解説されています。
最後に、WikipediaのOracle Linuxの概要を例に、GraphRAGを使ったチャットアプリの実行結果と、Neo4j上で確認できるグラフデータ、ベクトル索引が紹介されています。
要約した内容の本文
GraphRAGはRAGの精度向上に有効な手法です。文章をノードとエッジに分解し、関係性をグラフデータとして表現することで、ベクトル検索では捉えられない関連情報を拾い上げることが可能になります。この記事では、GraphRAGを使ったチャットアプリの開発事例を紹介しており、PDFファイルのアップロード、解析、グラフ化、ハイブリッド検索、生成AIへの連携、回答表示などの手順が詳しく解説されています。開発にはNeo4j、LangChain、ChainlitなどのOSSが利用されています。記事では、Neo4jのインストール手順やPython環境構築、GraphRAGによるグラフ化、ハイブリッド検索、生成AIへの連携方法などが詳しく解説されています。最後に、WikipediaのOracle Linuxの概要を例に、GraphRAGを使ったチャットアプリの実行結果と、Neo4j上で確認できるグラフデータ、ベクトル索引が紹介されています。
Rules of React を経典に React を書いて心の安寧を保つべし
この記事は、React のコードを書く際に守るべき「Rules of React」について解説しています。具体的には、以下の5つのルールを説明しています。
- コンポーネントとHookは「ピュア」であるべし!
- PropsやStateに依存して、常に同じ結果を返すように設計すること。
- ランダムな値を使う場合、コンポーネントの外で生成してpropsとして渡す。
- 副作用はレンダリング外で実行し、必要に応じてクリーンアップする
- useEffectフックを使って、レンダリング後に副作用を実行する。
- クリーンアップ関数で副作用の処理を解除する。
- PropsとStateは「変えちゃダメ」
- PropsやStateを変更する必要がある場合は、新しいコピーを作成する。
- Hookから返される値は「変えちゃダメ」
- Hookから返される値を変更する必要がある場合は、新しいオブジェクトを作成する。
- Hookはトップレベルでのみ呼び出す
- 条件分岐やループの中でHookを呼び出さない。
これらのルールを守ることで、バグの発生やパフォーマンスの低下を防ぎ、より安定したReactアプリケーションを開発することができます。
ジョブズの伝説的スピーチを知らない世代へ
この記事は、スティーブ・ジョブズが2005年のスタンフォード大学卒業式で行った伝説的なスピーチ「3つの話」から得られる教訓について解説しています。
記事は、ジョブズのスピーチから「点を繋げること」「愛と喪失」「死」という3つのテーマを掘り下げています。
**「点を繋げること」**では、大学中退というジョブズの経験が、後にカリグラフィーを学び、Macの美しいタイポグラフィーを生み出すきっかけになったことを例に挙げ、人生における一見無駄に見える経験も、後になって意味を持つことを示しています。
**「愛と喪失」**では、Appleからの解雇という挫折を経験したジョブズが、その後PixarやNeXTを設立し、Appleに復帰したというストーリーを通して、愛せるものを見つけること、情熱を持ち続けることが重要であると説いています。
**「死」**では、ジョブズが17歳の時に出会った「毎日を人生最後の日のように生きろ」という言葉を胸に、人生の有限性を意識し、本当に大切なことに集中することの重要性を説いています。
記事の最後には、ジョブズの有名な言葉「Stay hungry, stay foolish(貪欲であれ。バカであれ。)」が引用され、常に学び、挑戦し続けることの重要性が強調されています。
この記事は、スティーブ・ジョブズのスピーチを通して、人生における重要な教訓を学び、自分の人生を豊かにするためのヒントを与えてくれます。
過去の経験を活かして効率よく(?) 開発を進めたハッカソンの話
この記事は、QiitaHackathon 2024 予選に参加したチーム「サトリラボ」によるレポートです。チームは「オープン」というテーマに対して、スマホを開かせないアプリ「akanai」を開発しました。このアプリは、チームメンバー全員のスマホに通知を送信し、誰かがスマホを開くと全員に音が鳴ることで、スマホの利用を制限する仕組みです。
開発において、チームは過去のハッカソンで作成したコードを再利用することで、開発時間を大幅に短縮しました。具体的には、スマホの表裏を検知する機能、Socket.IOを用いたリアルタイム通信、音の通知機能など、過去のコードを調整して今回のアプリに実装しました。
しかし、過去のコードはハッカソン用に作成されたため、再利用には修正が必要でした。チームは、コードを整理し、汎用性を高めることで、より効率的な再利用を可能にする方法を検討しています。
記事は、ハッカソン参加者に向けて、過去のコードを整理し、再利用可能な状態にしておくことの重要性を訴えています。
【基本情報】独学マラソン プロジェクトマネジメント - EVM Day 6
この記事は、EVM(Earned Value Management)と呼ばれるプロジェクト管理手法について解説しています。EVMは、プロジェクトの進捗状況とコストを管理するために、計画値(PV)、実績値(EV)、実際発生費用(AC)などを用いて分析を行います。
記事では、具体的なシミュレーションを通して、EVMを用いた分析方法を説明しています。半月後の進捗状況を例に、スケジュール差異(SV)、コスト差異(CV)、スケジュール効率指数(SPI)、コスト効率指数(CPI)、残作業コスト予測(ETC)、完了時コスト予測(EAC)、完了時コスト差異(VAC)などの指標を計算しています。
記事の著者は、EVMを用いることで、プロジェクトの進捗状況やコスト状況を数値化し、より効率的に管理できるようになることを示唆しています。また、EVMによって従業員が売上に対する意識を持つようになり、組織全体の成長に繋がる可能性も指摘しています。
tailwind-variantsを触ってみた
Tailwind Variantsの使い方: 可読性と保守性を向上させる
この記事は、Tailwind CSSの拡張機能であるTailwind Variantsの基本的な使い方について解説しています。
Tailwind Variantsは、ユーティリティクラスを組み合わせて再利用可能なコンポーネントやバリエーションを作成できる機能です。 これにより、背景色変更など、条件によってスタイルを変更する際に、複数のコンポーネントを作成する必要がなくなり、可読性と保守性が向上します。
記事では、ボタンコンポーネントを例に、サイズ、色、disable状態といったバリエーションの定義方法を説明しています。さらに、slots機能を用いて入力フォームのlabel、input、エラーメッセージのスタイルを同時に変更する例も示しています。
主なポイント:
- Tailwind Variantsは
tv
関数を用いて、base
、variants
、defaultVariants
を設定します。 -
variants
には、バリエーション名とそれに対応するスタイルを定義します。 -
defaultVariants
には、各バリエーションのデフォルト値を設定します。 -
slots
機能を使用することで、複数の要素のスタイルを同時に変更できます。
結論:
Tailwind Variantsは、コンポーネントの再利用性と保守性を向上させる強力なツールです。この記事で紹介した基本的な使い方を理解すれば、より効率的かつ柔軟な開発が可能になります。より高度な使い方については、公式ドキュメントを参照することをお勧めします。
【Streamlit検証】重い処理を含む際のキビキビした動作の実現(st.fragment)
この記事は、Streamlit で重い処理を含む UI 操作を行う際の UX 向上策を検証したものです。具体的には、階層構造の変数をユーザーに選択させる処理において、重い処理をスキップする方法として、st.form
、st.fragment
の2つの手法を比較しています。
st.form
は、フォームとして一部処理をまとめ、ボタンを押下した際にのみ実行されるため、重い処理を回避できますが、選択結果の表示にズレが生じることがあります。
一方、st.fragment
は、特定の関数のみを再実行する機能で、重い処理を含む関数を @st.fragment
でデコレートすることで、選択操作のたびに重い処理を実行せずに、スムーズな更新を実現できます。
ただし、st.fragment
は、st.fragment
内外のセッション状態管理に注意が必要で、st.fragment
内で更新された値を外部で利用する際には、再実行や値の取得部分の実行が必要となる点を認識しておく必要があります。
記事では、st.fragment
の実装が簡単で理解しやすいこと、そして、非常に快適な UX を実現できることを強調しています。また、st.fragment
を適切に活用するための注意点も併せて解説されています。
【VBA】ファイル間のコピー作業を自動化するマクロの作成
この記事は、VBAを使ってExcel作業を自動化する具体的な方法を解説しています。
具体的な内容は、ファイル1の内容をファイル2にコピーするマクロの作成方法です。
記事では、マクロを使用するメリットとデメリット、注意点などを詳しく説明しています。
メリット:
- 手動でのコピペ作業を自動化することで、時間と労力を大幅に削減できる。
- 人為的ミスを防ぐことができる。
デメリット:
- マクロを作成するのに時間がかかる場合がある。
- マクロが複雑になると、理解しづらくなる可能性がある。
- マクロがウイルスに感染するリスクがある。
具体的なコード例とデバッグ方法も紹介されており、VBA初心者でも理解しやすい内容となっています。
さらに、記事ではマクロの代替案として、ファイル1のコピー対象の列をまとめてコピーする方法も紹介されています。
この記事は、Excel作業の効率化を検討している人にとって、VBAの基本的な使い方を学ぶ良い教材になります。
Railsで使われるテーブル結合方法について
この記事は、Railsにおけるjoins
とincludes
メソッドがどのようにSQLクエリとテーブル結合を生成するかを解説しています。
主な内容:
- 内部結合(INNER JOIN)
-
joins
メソッドを使って実現 - 両方のテーブルに共通のデータを持つレコードのみを結合
-
- 左外部結合(LEFT OUTER JOIN)
-
includes
メソッドを使って実現 - 左側のテーブルの全てのレコードを返し、右側のテーブルに該当するレコードがあれば結合
-
- 右外部結合(RIGHT OUTER JOIN)
- Railsでは直接サポートされていません
-
joins
メソッドとSQLを使って実現 - 右側のテーブルの全てのレコードを返し、左側のテーブルに該当するレコードがあれば結合
- 完全外部結合(FULL OUTER JOIN)
- Railsでは直接サポートされていません
- SQLを使って実現
- 左側のテーブルと右側のテーブルの、全てのレコードを結果に含まれます。
- 自然結合(NATURAL JOIN)
- Railsでは直接サポートされていません
- SQLを使って実現
- 2つのテーブルの共通のカラム名を結合条件として自動的に結合
- 統合結合(UNION/UNION ALL)
- SQLを使って実現
- 2つ以上のSELECT文の結果を1つの結果セットに結合
記事の目的:
- ActiveRecordの
joins
とincludes
メソッドの使い方を理解する - SQLの基本的なテーブル結合を理解する
- RailsでのWebアプリ開発に役立つ知識を習得する
記事の補足:
- DB FiddleとCanvaというツールの紹介
- SQLとテーブル結合はバックエンド開発の基礎
この記事は、Railsのjoins
とincludes
メソッド、およびSQLにおけるさまざまなテーブル結合について、わかりやすく解説しています。特に、左外部結合と右外部結合の違い、およびRailsでの実現方法について詳しく説明されているのが特徴です。
【基本情報】独学マラソン フィリップ・コトラーの競争戦略 Day 5
コトラーの競争地位戦略:マーケティングで勝つための4つの戦略
この記事は、マーケティングの巨匠フィリップ・コトラーの競争地位戦略を解説しています。コトラーは、企業は市場における立ち位置によって、異なる戦略を取るべきだと主張します。
企業は、経済資源の質と量に基づき、リーダー、チャレンジャー、ニッチャー、フォロワーの4つのカテゴリーに分類されます。
- リーダー: 市場シェアを維持・拡大するために、差別化戦略(同質化によるねじ伏せ)を用います。
- チャレンジャー: リーダーに挑戦するために、自社独自の新しい価値を創出する必要があります。
- ニッチャー: 特定のニッチ市場に特化することで、差別化を図ります。
- フォロワー: リーダーやチャレンジャーを模倣することで、コストを削減し、経験とノウハウを蓄積します。
この記事では、それぞれの戦略の特徴や具体的な例が紹介され、ニッチ戦略の魅力が強調されています。
【簡単】Amazon S3を利用して、Difyでスケーラブルなストレージを実現する
この記事は、Difyのストレージ領域としてAmazon S3を利用する方法について解説しています。
EC2で構築されたDifyでは、EBSストレージの容量不足が課題でした。そこで、S3ストレージへの移行を検討し、以下の手順で設定を行いました。
- S3バケットの作成
- アクセスキーを持つIAMユーザの作成
- Difyサーバへの環境変数の設定
環境変数は、DifyのストレージタイプをS3に設定し、S3エンドポイント、バケット名、アクセスキー、シークレットキーなどを指定します。
設定後、Difyのナレッジ作成機能でドキュメントをアップロードし、S3バケットにファイルが格納されていることを確認しました。
これにより、DifyはS3を活用し、スケーラブルかつ安価なストレージを利用できるようになりました。
iPhoneでレトロなUIを作る
この記事は、レトロなUIデザインの解説と、実際に作成されたアプリのプロトタイプを紹介しています。
レトロなUIの特徴:
- 色彩: セピア調、モノクロ、パステルカラーなど
- デザイン: レトロなフォント、手書き風文字、ドット絵、ピクセルアート
- 質感: 木目調、金属風テクスチャ
- 形状: 丸みを帯びたボタン、シンプルで装飾的なデザイン
- 音とアニメーション: タイプライターの音、フィルムリールの音、アナログ的なトランジション
レトロなUIの設計例:
- 昔のWebサイトの手法: 派手な色彩、プロポーショナルフォント、フレーム、文字の動き
- 古いWindowsのUI: タイトルバー、機能ボタン、スクロールバー
- 地図: OpenStreetMap
- データ入力: グレーのボタン、ダイアログ形式のファイル選択
プロトタイプ:
- アプリのトップ画面: 2000年以前のスタイル、ハイライトのための文字が動いている
- 地図: OpenStreetMapを使用
- データ入力: Windows3.1のダイアログボックスに似たトグルボタン、formでのファイルアップロード機能
レトロなUI設計の注意点:
- レトロなUIは、見た目だけでなく、使いにくさも演出する必要がある。
- ユーザビリティを落とさないように、バランスを考慮する必要がある。
結論:
この記事では、レトロなUIデザインの要素と、実際のアプリプロトタイプを通して、レトロなUIデザインの設計方法を解説しています。レトロなUIは、見た目だけでなく、使い心地も重要な要素であり、バランスを考慮して設計する必要があることを強調しています。
Realtime APIとLangChainによる音声対話検索エージェントを試す
この記事は、OpenAIがリリースしたRealtime APIとLangChainを用いた音声対話検索エージェントのデモアプリ「Voice ReAct Agent」を紹介しています。Realtime APIは、音声認識と音声合成を必要とする従来の音声対話AIと比べて、LLMとの対話処理を高速化できるAPIです。Voice ReAct Agentでは、ユーザーの音声を認識してLangChainのツールを呼び出し、必要な処理を実行して応答します。記事では、Tavily APIキーを取得してデモアプリを実行し、「今日の東京の天気」「東京駅近辺のイタリアンレストラン」といった質問に対する応答を確認しています。Realtime APIとLangChainの組み合わせにより、様々な音声対話エージェントの開発が可能になることを示唆しています。
シェルを快適につかえるようになろう! みんなどうやってシェルの操作覚えてきた?
この記事は、シェルを快適に利用するためのヒントを紹介するブログ記事です。著者は、読者にシェルの操作をどのように学んだかについての経験を共有し、シェルを使いこなすための具体的な方法をアドバイスしています。記事の内容としては、シェルの基本的なコマンドの使い方、効率的なシェルの操作方法、便利なツールやテクニックなどが含まれていると考えられます。
SageMaker StudioのJupyterLab環境でStreamlitを使用する(Gemma 2 JPNと会話するおまけ付き)
SageMaker Studio JupyterLab で Streamlit を動かす方法
SageMaker Studio の JupyterLab 環境で、Streamlit などの Web アプリを動かすには、Jupyter Server Proxy を利用できます。
Jupyter Server Proxy は、JupyterLab 環境で起動している Web サーバーのポートにプロキシを提供します。Streamlit を例に挙げると、通常は http://localhost:8501
でアクセスする Streamlit アプリを、SageMaker Studio の JupyterLab 環境から https://**********.studio.us-east-1.sagemaker.aws/jupyterlab/default/proxy/8501
でアクセスできます。
ただし、直接この URL でアクセスすると、CSS や JavaScript の取得に失敗し、真っ白な画面が表示されます。これは、プロキシを経由することで相対パスが正しく処理されなくなるためです。
この問題を解決するには、以下の 2 つの方法があります。
-
URL に
/absolute
を追加する:https://**********.studio.us-east-1.sagemaker.aws/jupyterlab/default/proxy/absolute/8501/
のように URL を変更します。 -
Streamlit の起動パラメータに絶対パスを指定する:
streamlit run app.py --server.baseUrlPath /jupyterlab/default/proxy/absolute/8501
のように起動します。
これらの方法で、SageMaker Studio の JupyterLab 環境から Streamlit アプリを正しく表示できます。
記事では、実際に Gemma 2 JPN とチャットできる Streamlit アプリを例として紹介しており、ml.g4dn.2xlarge インスタンスでの動作を確認しています。このインスタンスは時間あたり $0.94 と、コストパフォーマンスが高いことから、用途によっては検討の余地があると述べています。
JavaScript: 即時関数とか使えたら初心者っぽくなくなるんじゃないか??
この記事は、駆け出しエンジニアがJavaScriptの即時関数(IIFE)について学んだことをまとめたものです。
まず、関数を定義する方法として、従来の関数宣言と、関数式、アロー関数という3つの方法を説明しています。関数式とアロー関数は名前のない関数を定義する方法で、アロー関数はより簡潔な記述が可能であることを解説しています。
次に、即時関数の概念を導入し、そのメリットとして「ちょっとした処理」を関数にまとめながらも、関数名をつける必要がなく、使い捨てにできる点を強調しています。具体例として、システム日付から年月日コードや年度を取得する処理を、即時関数を使って簡潔に記述する方法を説明しています。
最後に、即時関数を使うことで、変数名をシンプルに保ち、処理を関数に切り出す作業を効率化できることをまとめ、今後の学習への意欲を示しています。
要約すると、この記事は、JavaScriptの即時関数(IIFE)の使い所とメリットを、具体例を通して解説したものです。特に、「ちょっとした処理」を関数にまとめる際に、関数名をつける手間を省き、コードを簡潔に保つことができるという点が強調されています。
エンジニアが知っておくべき請負契約と準委任契約の違い
記事要約
この記事は、SIerエンジニアがよく目にする「請負契約」と「準委任契約」の違いについて解説しています。
主な内容:
- 業務委託契約には、請負契約、委任契約、準委任契約の3種類がある。
- IT業界では請負契約と準委任契約がよく使われ、委任契約はほとんど使われない。
- 請負契約は成果物を納品することが目的で、準委任契約は業務の遂行自体が目的。
- 請負契約では成果物の納品責任が発生するが、準委任契約では発生しない。
- ウォーターフォール開発では、PoCや要件定義は準委任契約、設計・開発・テストは請負契約になることが多い。
- SESも準委任契約で結ばれることが多い。
請負契約と準委任契約のメリット・デメリット:
契約形態 | 顧客側のメリット | 顧客側のデメリット | エンジニア側のメリット | エンジニア側のデメリット |
---|---|---|---|---|
請負契約 | 納期と品質が保証される | 要件変更が発生すると追加料金が発生する | 納期と品質を守れば良いという明確なゴールがある | 納期と品質を守らなければならない |
準委任契約 | 要件変更が発生しても追加料金が発生しない | 納期と品質が保証されない | 納期と品質に追われない | 検収や価格交渉が難しい |
まとめ:
- 請負契約と準委任契約は、それぞれメリット・デメリットがあるため、エンジニアは契約形態を理解し、適切に業務に取り組む必要がある。
- 契約形態を混同せずに、顧客との信頼関係を築き、プロジェクトの成功に貢献することが重要。
AWS初心者のCLF取得までの勉強方法
この記事は、AWS Certified Cloud Practitioner試験に短期集中で合格するための勉強方法を紹介しています。著者は、参考書とUdemyのオンライン講座を活用し、過去問を繰り返し解くことで試験対策を行いました。特に、過去問をあらゆる場面で解くことを推奨しています。この資格は、AWSの基礎知識を学ぶのに最適であり、無料のサービスも活用することで理解を深められると結論付けています。著者は今後、学習経過を共有するとのことです。
【基本情報】独学マラソン 情報セキュリティ Day 4
IDSとIPSの仕組みと違い
この記事は、不正侵入検知システム(IDS)と不正侵入防御システム(IPS)の違いとそれぞれのメリット・デメリットを解説しています。
IDSは不正アクセスを検知するシステムで、ネットワークへの負荷が低く、リアルタイムでの自動防御はできません。IPSは不正アクセスを防御するシステムで、リアルタイムでの自動防御が可能です。しかし、システム負荷が高く、誤って正常な通信をブロックするリスクがあります。
検知方法は、不正なアクセスパターンを登録して検知するシグネチャ型と、正常なアクセスパターンを登録して異なる通信を検知するアノマリ型があります。シグネチャ型は誤検知が少なく、アノマリ型は誤検知が多い傾向があります。
IDSとIPSは、DoS攻撃やバッファオーバーフロー攻撃などの不正アクセスからシステムを守る上で重要な役割を果たします。
恐怖ホラーゲーム。球の中に閉じ込められてしまうゲーム。
このコードは、Webカメラの映像を球体状に表示する360度パノラマビューのHTMLページを作成するものです。
- Three.jsライブラリを使用し、球体のジオメトリを作成し、Webカメラの映像をテクスチャとして適用します。
- 球体の回転はカーソルキーで制御できます。
- 左/右キーで球体をY軸方向に、上/下キーで球体をX軸方向に回転させます。
- ウィンドウサイズ変更にも対応し、カメラとレンダラーが適切に調整されます。
画像の拡散と逆拡散アニメーション。「このプログラム、まるで俺みたいだな」
この記事は、プログラマーの浅川翔太が開発した画像拡散と逆拡散のアルゴリズムについて語っています。このアルゴリズムは、画像を徐々にぼかして消失させ、その後、元の画像を復元するというものです。翔太はこのアルゴリズムを通して、人生における拡散と逆拡散、つまり、情熱や目標を失うことと、それを取り戻すことを対比させ、人生はたとえ拡散しても、再び輝きを取り戻すことができるというメッセージを伝えています。記事の後半では、このアルゴリズムの実装例となるHTMLコードが示されています。このコードは、ユーザーがアップロードした画像を拡散と逆拡散のアニメーションで表示する機能を提供します。
【脱create-react-app】pnpm + vite + React + vitest を動かす!
この記事は、create-react-appがもはや推奨されないため、Viteとpnpmを使ってReactプロジェクトを構築する方法を解説しています。
主な内容は、以下のとおりです。
- pnpmのインストール: npmより高速でnode_modulesをプロジェクト間で共有できるパッケージマネージャーです。
- Vite + React環境の構築: create viteコマンドで、create-react-appより高速にプロジェクトを作成します。
- vitestのインストール: Jestライクなテストライブラリで、Viteと統合されているため、高速なHMRが利用できます。
-
vitest + React Testing Library環境の構築:
- jsdomをインストールしてDOM環境を再現します。
- Reactコンポーネントのレンダリングや操作を行うために、
@testing-library/react
、@testing-library/jest-dom
、@testing-library/user-event
をインストールします。
記事では、それぞれのツールやライブラリの使用方法を詳しく説明し、簡単なサンプルコードも紹介しています。これにより、読者はViteとpnpmを使って、Reactプロジェクトを効率的に開発するための環境を構築できます。
Web Audio APIを使って、音源が大きな3次元の楕円軌道上を動いた場合の、音の変化をシミュレーション。
このコードは、Web Audio APIとThree.jsを使用して、3次元のランダムな楕円軌道上を動く音源をシミュレートするWebアプリを実装しています。
- ユーザーがクリックすると、音が鳴り始めます。
- 音源はランダムな大きさを持つ楕円軌道上を移動し、その位置に応じて音の左右の定位と音量が変化します。
- シーンには、ランダムな位置と色を持つカラフルなキューブが10個配置されます。
このコードは、Web Audio APIを使って音の空間表現を制御し、Three.jsを使って3Dグラフィックスをレンダリングすることで、音と視覚的な動きを組み合わせたインタラクティブな体験を実現しています。
LangChainでHugging Faceに公開されている日本語版 Gemma 2 2Bを使用する方法
この記事は、Amazon SageMaker上でGoogleのGemmaモデルをセットアップし、LangChainと統合する方法を解説したものです。
具体的には、日本語版Gemma 2 2Bモデルを用いて、SageMakerのインスタンス上でConda環境を作成し、必要なライブラリをインストールします。その後、Hugging Faceのアカウントにログインして、Gemmaモデルをロードし、簡単な質問への回答やチャット形式での対話を試みます。
さらに、DuckDuckGo検索ツールとの統合も紹介されていますが、現時点では正常に機能しない可能性があるとされています。
記事では、生成AIであるClaude.aiによって生成された文章をそのまま掲載し、生成AIの出力結果がどのようなものかを示しています。生成AIは、事前情報に基づいた文章を生成しており、手作業での修正によってより良い記事を作成できることを示唆しています。
Ruby勉強メモ:Ruby の エイリアスメソッド一覧
この記事は、Ruby の様々なメソッドのエイリアスとその機能をまとめたものです。
記事では、配列・ハッシュ・文字列・ファイル操作など、様々なデータ型や処理に対応するメソッドが紹介されています。
例えば、map
と collect
はどちらも配列の要素を全て変換するメソッドです。また、==
と eql?
はどちらもオブジェクトの等価性を判定するメソッドです。
記事にはメソッドの機能に加えて、関連するメソッド名も記載されており、メソッドの選択や使い分けを理解するのに役立ちます。
時差15時間の海外へ移住後も日本企業にフルリモートで働けている話
この記事は、カナダに移住後も日本企業でリモートワークを続ける筆者が、時差のある環境での仕事の進め方について解説しています。
具体的には、以下の3つのコツが紹介されています。
- 柔軟な勤務時間の設定: カナダの生活リズムに合わせ、日本の午前中に集中して仕事をすることで、時差による影響を最小限に抑えます。
- タスク管理の徹底: プロジェクト管理ツールを活用し、タスク内容を明確化し、不明点があっても進められる部分は進めることで、非同期コミュニケーションでも効率的に仕事を進めます。
- 丁寧なテキストコミュニケーション: 背景説明や図解、スクリーンショットを多用することで、情報伝達の齟齬を防ぎ、信頼関係を構築します。
筆者は、これらのコツを実践することで、海外からでも日本企業で円滑にリモートワークできていることを実感しており、海外移住を検討しているエンジニアにとって、リモートワークという選択肢も現実的であると示唆しています。
キャリアの岐路
この記事は、著者が管理職への不安と、プロジェクト成功のためのスキル習得、そして理想的な組織を求めるまでの経験を語っています。
著者は、管理職の責任の重さや負荷に不安を感じながらも、プロジェクト成功のために必要なスキルを検討しています。ChatGPTを用いてプロジェクト失敗の原因を分析し、スコープの曖昧性、ステークホルダー間の調整不足、技術的な不確実性を主な要因として挙げています。
これらの課題を克服するために、著者は「BIG THINGS」や「プロダクトマネジメントのすべて」といった書籍から得た知見を参考に、マスタービルダーと優秀なチームの重要性、そして「なぜ?」を常に考えることの必要性を説いています。
自身の力だけでは限界を感じた著者は、転職を決意。ティール組織を採用し、リーダーシップを分散させている企業に入社することを決めます。この企業ではプロダクト志向が強く、著者の経験を生かせる環境だと感じています。
この記事では、管理職への不安、プロジェクト成功のためのスキル習得、そして理想的な組織を求めるという、多くのITエンジニアが抱える課題を、著者の経験を通して具体的に示しています。特に、ティール組織のような新しい組織形態への期待と、プロダクト志向のエンジニアとしてのキャリアパスを模索する様子が印象的です。
コマンドラインツールの拡張性を高める:Commandパターンの活用法
コマンドパターンによるコマンドラインツール拡張性の向上
この記事は、コマンドラインツールの拡張性を高めるためのデザインパターン、Commandパターンについて解説しています。
Commandパターンは、リクエストをオブジェクトとしてカプセル化することで、コマンドの追加や変更を容易にするデザインパターンです。
メリット:
- 拡張性: 新しいコマンドを追加する際、既存コードの変更は不要
- 単一責任の原則: 各コマンドは独立したクラスで実装され、責任が明確
- 柔軟性: コマンドの実行、取り消し、再実行などが容易
- テスト容易性: 各コマンドを個別にテスト可能
- 遅延実行: コマンドオブジェクトを作成し、後で実行可能
- パラメータ化: コマンドに必要な情報をコマンドオブジェクト内にカプセル化
- ロギングと監査: 各コマンドの実行を容易に記録
デメリット:
- クラス数の増加: 新しいコマンドごとに新しいクラスが必要
- 複雑さの増加: 初期実装が複雑になる可能性
- オーバーヘッド: 小規模なアプリケーションでは過剰な設計になる可能性
例:
記事では、ファイル操作を行うコマンドラインツールを例に、Commandパターンを実装しています。
まとめ:
Commandパターンは、コマンドラインツールだけでなく、データ変換処理、バッチ処理システム、GUIアプリケーション、ゲーム開発など、様々な分野で活用できます。しかし、プロジェクトの規模や拡張性に合わせて、適切に判断することが重要です。
IPA プロジェクトマネージャ試験で覚えておくと良い用語
プロジェクトマネージャ試験対策記事の要約
この記事は、IPA高度資格「プロジェクトマネージャ試験」受験対策として、午前2対策に焦点を当て、PMとしての基礎知識を紹介しています。
主な内容は以下の通りです。
- DX: DXの3要素(先端技術、ビジネスモデル変革、競争優位性確立)と成功のための要素(経営主導、ベネフィット重視、アジャイル開発)
- プロジェクト立ち上げ: プロジェクト憲章、WBS、責任分担マトリックス(RAM)、RACIチャート
- リスクマネジメント: 定量的リスク分析ツール(感度分析、EMV分析、ディジョンツリー分析)、リスク対応(回避、転嫁、軽減、受容)
- 契約: 請負契約、準委任契約、委任契約、履行割合型、成果報酬型、派遣契約
- 変更管理: 変更管理手順、変更管理委員会
- プロジェクト・スケジュール・ネットワーク図: ADM、PDM、CPM/CCM、PERT、クリティカルチェーン法、バッファ、スケジュール作成技法(ファスト・トラッキング、クラッシング)
- EVM: PV、AC、EV、SV、CV、SPI、CPI、BAC、EAC、VAC、TCPI
- 品質計画: 要求品質、レビュー計画、テスト計画
- 品質管理: 品質管理の一連の流れ
- その他: マクレガーのY理論、ブルックスの法則、見積もり(COSMIC法、デルファイ法)
この記事は、プロジェクトマネージャ試験の受験対策だけでなく、PMとして必要な基礎知識を網羅しており、実践的な内容となっています。
2年目エンジニアが土日を使って挟み将棋のWebアプリを作ってみる
この記事は、PythonとFlaskを使って挟み将棋のWebアプリを作成した過程を解説しています。特に、挟み将棋のルールの中でも複雑な「囲い込み」判定の実装について詳しく説明しています。
主な内容:
- 挟み将棋のルールと勝利条件を解説
- 囲い込み判定の処理を段階的に解説
- 複数の駒を囲む場合の処理の詳細な説明
- 隣接した相手の駒のグループを見つける処理
- グループ化した駒が囲まれているかを検証する処理
- コード例と解説
ポイント:
- 囲い込み判定は、相手の駒が盤面の角にある場合だけでなく、辺にある場合も考慮する必要がある。
- 複数の駒を囲む場合、隣接した相手の駒のグループを特定し、グループ全体が囲まれているかを検証する。
- 処理の効率化のために、すでに検証済みのマスをフラグで管理する。
- グループ内の駒は、囲い込み判定の対象外とする。
まとめ:
この記事は、挟み将棋の囲い込み判定を実装する際に発生する問題点と、その解決策を具体的なコード例と解説を通して分かりやすく説明しています。