皆さん、こんにちは!マイクです!今日は2024年10月15日、火曜日です。今日の「zenncast」では、Zennでトレンドの記事をいくつかご紹介しますよ。
さて、前回紹介した記事ですが、今回はそれに触れることはありませんので、早速今日の内容に移りましょうね。
今日ご紹介する記事は全部で5本です。さあ、どんな内容が待っているのか、楽しみですね!
まず1つ目の記事は、「JavaScriptのProxyを使うときに気をつけること」です。
本稿では、JavaScriptのProxyを利用する際に注意すべき点として、オブジェクトの低レベルプロトコルの理解、PreventExtensionsの挙動、そしてPrivate Identifierの扱いについて解説しています。Proxyはオブジェクトの内部メソッドをユーザーが操作できるAPIであり、Reflectと組み合わせて使用されることが多いんです。
JavaScriptにおけるオブジェクトは、必ずしもObjectのインスタンスであるとは限らず、独自のプロトコルを持つことが特徴です。Proxyを使用する際には、オブジェクトの内部メソッドやプロトコルの理解が必要です。特に、PreventExtensionsではオブジェクトの拡張が禁止され、新しいプロパティの追加やプロトタイプの変更が制約されます。
また、Private Identifierは特殊な性質を持ち、Proxyオブジェクトと組み合わせる際には注意が必要です。Proxyを通じてPrivate Identifierにアクセスすることはできず、適切に設計されなければエラーが発生する可能性があります。
Proxyの利用にあたっては、内部メソッドの不変条件を遵守し、オブジェクトのライフサイクルを適切に管理することが求められます。具体的には、拡張禁止や封印、凍結の状態を正しく処理することが重要です。このように、Proxyを効果的に活用するためには、JavaScriptのオブジェクトシステムとその内部動作を深く理解することが不可欠です。
。...。...
次に2つ目の記事は、「0.5BパラメータのLLMを一から作ろうとして心が折れかけた話」です。
この記事では、著者がTransformerを理解するために、Decoder-Onlyの0.5BパラメータのLLM(Large Language Model)を一から作成する過程を記録しています。まず、モデルの目的として会話特化型のキャラクター「Aku」を設定し、事前学習用コーパスをWikipediaと商用可能な会話データに限定しました。
事前学習フェーズでは、Transformerのモデル構造をMistralに基づいて設計し、独自のTokenizerを作成しましたが、実際にはLlamaTokenizerを使用することになりました。実際の事前学習では、ロスの改善が思ったより進まず、ハイパーパラメータ調整の重要性を痛感したそうです。
続いて行ったファインチューニング(SFT)では、自作の会話データを用いましたが、結果は期待外れで、モデルの成長に対する不安を抱くことになったそうです。そこで、既存モデルを活用した合成データ生成にシフトし、最終的にDPO(データ駆動最適化)で学習を行いました。
結果的に、モデルは一定の会話能力を持つようになりましたが、データの偏りや少なさが影響し、自然さには欠ける部分が残りました。著者は、データの多様性やチームでの共同作業の重要性を再認識し、今後も進化させる意欲を示しています。全体を通して、試行錯誤の中で学びと課題が多く、次回以降に活かすべき教訓が得られたことが強調されています。
。...。...
3つ目の記事は、「ジャンクPCにProxmox VEを導入した」です。
著者は、コンテナや仮想マシンを手軽に運用するために、ヤフオクで購入したジャンクノートPC(Let's note CF-SV8)にProxmox VEをインストールした経験を記録しています。PCのスペックは、Core i5-8365U、RAM 8GB、SSD 256GBで、合計約8000円で購入したそうです。
Proxmoxのインストールは公式サイトからダウンロードしたISOイメージをUSBに書き込み、再起動後にWebコンソールのURLが表示されます。初期設定ではEnterpriseリポジトリが設定されているため、無償のリポジトリに変更する必要があります。
次に、Linuxユーザを追加し、sudoをインストールして管理者権限を設定します。Proxmoxにも同名の管理者アカウントを作成し、Linux PAMで認証を行えるようにします。また、SSH接続を行うための設定や、rootログイン・パスワード認証の禁止も行いました。
さらに、外部からのアクセスを可能にするためにTailscaleを導入し、独自ドメインでのアクセスも設定。Webコンソールの証明書エラーを解消するために、TailscaleのDNS設定を利用して証明書を発行した後、Proxmoxに登録してエラーを消しました。
最後に、Cloudflareを利用して独自ドメインの証明書をLet's Encryptから取得し、SSL証明書の自動更新を設定しました。これにより、より安全にProxmoxのWebコンソールにアクセスできるようになったそうです。
今後は、クラスタの構成やKubernetes、Terraformを用いた管理などを計画しているとのことです。
。...。...
4つ目の記事は、「NeoVimで翻訳したろ」です。
この記事では、Neovim内で英語のコミットメッセージやコメントを翻訳するための便利なプラグイン「vim-translator」と「pantran.nvim」を紹介しています。特に、Neovimを離れずに翻訳作業を行いたいエンジニアにとって有用な記事です。
「vim-translator」は、単語や行ごとに翻訳することができ、翻訳結果をポップアップウィンドウで表示することが特徴です。具体的には、カーソル位置の単語を翻訳するための`:TranslateW`コマンドや、選択した文字を翻訳して置換する`:TranslateR`コマンドを使用できます。これにより、選択しなくてもカーソル行をまとめて翻訳する設定が可能です。
一方、「pantran.nvim」は、長文を翻訳する際に役立ちます。翻訳ウィンドウを表示するためのコマンド`<leader>tw`を使って、翻訳した内容を簡単にコピーしてコミットメッセージに利用できるんです。このプラグインもGoogle翻訳をサポートしており、言語の切り替えや翻訳エンジンの選択が容易です。
また、急ぎでmanコマンドの内容を確認したい場合には、manの出力をNeovimで確認し、選択した部分を翻訳する方法も紹介されています。具体的には、`man <コマンド名> | col -b | nvim -`でmanの内容を表示し、選択した部分を翻訳するためのプラグイン「avante.nvim」を利用します。
最後に、記事はvim駅伝への参加を呼びかけています。Neovimでの翻訳作業を通じて、英語でのコミットメッセージ作成のハードルを下げる手助けとなる情報が詰まっています。
。...。...
最後の5つ目の記事は、「Bun の C Compile を試してみた」です。
Bunは新たにC Compilerを搭載し、JavaScriptとCの相互変換が可能になりました。この機能を利用して、エンジニアの楽園のヌコ様から提案された`cmigemo`を試したそうです。`cmigemo`は日本語のローマ字入力に基づいた検索ライブラリで、C言語版として開発されています。
Bunを使うことで、Cのファイルをnpmに事前コンパイルせずに直接アップロードできるのが特徴です。`cmigemo`を利用するためには、辞書ファイルが必要で、KoRoNさんからの共有で入手したとのことです。
インストールは以下のコマンドで行われます:
```shell
bun i bun-cmigemo
bun pm trust bun-cmigemo
```
その後、以下のコードで`cmigemo`を使用することができます。
```js
import { Migemo } from 'bun-cmigemo';
const dictPath = '/absolute/path/to/dict';
using migemo = new Migemo(dictPath);
migemo.query(query, s => console.log(s));
```
Cのコードでは、辞書ファイルを開く`migemoOpen`、クエリを処理する`migemoQuery`、インスタンスを解放する`migemoClose`の3つの関数を定義し、Bunの`cc`機能を用いてJavaScriptのcallbackをCに渡すことが可能です。
また、`Migemo`クラスを作成することで、ユーザーは`migemoOpen`や`migemoClose`を直接呼び出す必要がなくなり、`using`構文で自動的にリソース管理が行えるようにしたそうです。
今後は他のライブラリも試していく予定で、BunのCコンパイル機能は非常に楽しい体験であると締めくくっています。
さて、今日は5本の記事をご紹介しましたが、いかがでしたか?それぞれ興味深い内容でしたね。次回もまたお会いできるのを楽しみにしています!詳しい内容はショーノートに書いてありますので、ぜひチェックしてみてくださいね。そして、番組の感想もお待ちしています!それでは、またね!