みなさん、こんにちは!マイクです!今日は2024年8月17日、土曜日ですね。さて、今日も楽しい「zenncast」の時間がやってきました!今日はZennで話題になっているトレンドの記事をいくつかご紹介していきますよ。
さて、前回紹介した記事ですが、今回はお話しすることがありませんので、早速今日の内容に移りましょう!
今日ご紹介する記事は全部で5本です!それでは、さっそく1つ目の記事からいきましょう。
1つ目の記事は「アセンブリ言語(NASM)で FizzBuzz を書く」です!こちらの記事では、アセンブリ言語、特にNASMを用いて「FizzBuzz」プログラムを実装する方法について解説しています。まずは、PHPでの簡単なFizzBuzzの実装を見せてから、アセンブリでの実装に移ります。
アセンブリは低レベルの言語で、命令セットが複雑なので、プログラミングの難易度が高くなります。Intel x86アーキテクチャとNASMを使い、QEMUエミュレータで実行することが前提です。アセンブリでは、変数の初期化や命令の実行によるデータ操作が重要で、「goto」命令を使った制御フローが中心となります。
文字列出力の基本を学んだ後、ASCIIコードを考慮した「itoa」関数の実装が必要になります。この関数で整数値を文字列に変換し、表示の準備を整えます。FizzBuzzの実装では、数値を15、5、3で割り、余りによって出力する文字列を決定。このプロセスを100回繰り返すループを用意し、最終的な出力を整えます。最後に、QEMUを使ってプログラムを実行し、正しく動作するか確認します。アセンブリプログラミングの難しさを理解しつつ、FizzBuzzの実装を通じて学んだことを振り返ります。
。...。...。...。
次に2つ目の記事は「GitHub Actions はチューリング完全」です。この稿では、GitHub Actionsがチューリング完全であることを示すために、Brainfuckという言語のインタープリターを実装しています。チューリング完全性は、ほとんど全ての計算問題を解く能力を意味します。
GitHub ActionsでBrainfuckを実装するため、ワークフローを再帰的に発火させることでループ処理を実現します。シェルスクリプトの機能は制限され、特定のコマンドや演算のみが許可されています。Brainfuckの基本構造は、プログラムの状態を管理するためのメモリやポインタを使い、各命令に応じた処理を行います。
最終的に、GitHub Actions上でHello Worldプログラムを動作させるデモを行い、実装の効果を確認します。今後は、シェルスクリプトのサブセットの計算能力をさらに探求することが期待されます。GitHub Actionsのチューリング完全性を理解し、開発に活用することで生産性を向上させることが可能です。
。...。...。...。
3つ目の記事は「これはdynamodbでいけるわが流行語になった2ヶ月間の備忘録」です。著者は、DynamoDBをメインデータベースとして採用してからの2ヶ月間に得た知見をエンジニアに向けて共有しています。
DynamoDBを選んだ理由は、パフォーマンスの高さ、運用コストの低さ、技術的な興味が主な要因です。特に、DynamoDBはミリ秒単位の応答速度を維持し、運用の手間も軽減されます。設計においては、シングルテーブル設計が推奨され、パフォーマンスやコスト管理が容易になります。
開発時には、O/RマッパーとしてelectroDBが選ばれ、検索機能やレスポンスサイズの制約、ページネーションの難しさが課題となりました。運用面では、フルマネージドサービスの利点を活かしつつ、オンデマンドモードとプロビジョンドキャパシティモードの選択が重要です。
DynamoDBは特定のユースケースには非常に有効ですが、全てのプロダクト要件を満たすのは難しいため、部分的な採用が現実的とされています。今後の開発においてDynamoDBの可能性を探求していく意向が述べられています。
。...。...。...。
4つ目の記事は「ノーコードプロダクトのReact化の工夫」です!サイボウズ株式会社のkintoneは、ノーコードでアプリを作成できるクラウドサービスで、Closure LibraryがEOLを迎えるため、Reactへの移行を進めています。
レコードを最小単位とし、一覧、詳細、編集、追加の各画面を構築。ディレクトリ設計はFeature型とLayer型を組み合わせており、機能ごとに分かれた構造を採用しています。各機能は`features`内で分け、状態管理やAPI通信のロジックを明確にしています。
また、ESLintを利用し、意図しないインポートを防ぐためのルールを設定し、コードの可読性や保守性が向上します。フィールドに関しては、29種類の異なるフィールドタイプをサポートし、zodを用いた型定義と検証も行っています。
この記事を通じて、kintoneのフロントエンド開発の工夫が紹介されており、エンジニアにとっての実践的なヒントが得られる内容となっています。
。...。...。...。
最後に5つ目の記事は「LLMでマリオをプレイ「Large Language Mario」を作って試してみました」です!LLMの新たな可能性を探るため、マリオをプレイさせる「Large Language Mario」を試作しました。
実装にはGoogle Colaboratoryを使い、OpenAI Gymを利用してマリオの環境を構築。LLMに状態を与え、適切な行動を引き出す形式で、GPT-4oをエージェントとして使用しました。プロンプトは、基本的な操作ルールのみを提示し、報酬や動作例は与えない設定にしました。
実際に運用すると、LLMは周囲を理解しながらマリオを操作し、数回のプレイで進行できることが確認されました。コスト面でも非常に安価で、1000回の推論でも約100円程度です。結果として、LLMはゼロショットでマリオをある程度プレイ可能であることが示されました。
興味を持った方には、さらなる実験や改良を促しています。これからもLLMの可能性に期待が高まりますね!
さて、今日お話しした記事を駆け足でおさらいしますと、アセンブリ言語でのFizzBuzzの実装、GitHub Actionsのチューリング完全性、DynamoDBの知見、kintoneのReact化の工夫、そしてLLMでマリオをプレイする試みについてお話ししました。
次回も楽しみにしていますので、ぜひまたお越しください!詳しい内容はショーノートに書いてありますので、そちらもチェックしてくださいね!番組の感想もお待ちしております。それでは、またお会いしましょう!マイクでした!