タグ

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

  • 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を理解すると世界が一気に変わる
    tuki0918
    tuki0918 2023/08/14
  • モバイルとの相性最強と言われるgRPCをFlutter x NestJSで実装し、Stream通信や認証、複数言語実装に使えるか試す

    まとめ 相性バツグンといわれる、モバイル x gRPCは思ったよりずっと簡単に実装可能 複数言語間でもProtocol Buffersの恩恵により型変換を意識することなくスムーズに開発が進められる。 メソッド、引数の型、引数の返り値の型が自動生成されるのでとても良い RESTful APIにおけるheaderを、表現力の高いMetaDataとして利用し、認証認可等にも使えそう Streamをうまく使いこなせば、ユーザー体験をめっちゃ高くできそう。チャットやゲームなどの双方向通信が比較的楽に実装できるかも どんな人向きでない記事? NestJSの詳しい実装を知りたい方 Bidirectional streaming, Client streamの詳細実装を知りたい方 モバイル向け通信技術格的な選択肢、gRPCを実際に試してみたい 現在、私の働いているMinediaで開発しているサービス群

    モバイルとの相性最強と言われるgRPCをFlutter x NestJSで実装し、Stream通信や認証、複数言語実装に使えるか試す
    tuki0918
    tuki0918 2023/08/11
  • モダンWEBサイトにおける画像最適化について

    はじめに この記事は『Picture perfect images with the modern img element』という記事を参考に画像最適化に関しての重要な観点をまとめたものです。 画像はWEBにおいても重要な役割を担っており、2021年時点で1つ以上の画像を含むWEBサイトは95.9%、faviconなども含めて1回でも画像取得のリクエストを送信するWEBサイトは99.9%であるという調査もあります。 さらには、LCP要素の約70%が画像であるという調査が出ています。 Largest Contentful Paint(LCP)は、Googleが提唱するCore Web Vitalsの1つで、ウェブページのパフォーマンスを測る指標です。詳しくは次の章で解説します。 つまり、WEBのパフォーマンスにおいて画像の最適化は重要な観点でありユーザ体験に直結することがわかります。 画像最

    モダンWEBサイトにおける画像最適化について
    tuki0918
    tuki0918 2023/08/06
  • 大規模言語モデル(LLM)の作り方 Megatron-DeepSpeed編 Part1

    はじめに Turing 株式会社のリサーチチームでインターンをしている東京工業大学 B4 横田研究室の藤井(@okoge_kaz)です。 大規模言語モデル(Large Language Model: LLM)への注目がGPT-4のリリース以降高まっていますが、LLMを作るための知見は十分に共有されているとは言い難いと個人的に感じています。 Turingでは、Vision and Language, Video and Languageなどのマルチモーダルなモデルの研究開発を行っている一環として、Megatron-DeepSpeed, GPT-NeoXなどを用いて数十Bのモデルの学習を行う知見を蓄積しています。今回はLLMの事前学習を行う際に候補となるMegatron-DeepSpeedを用いてGPT-2-7B(6.6B)の学習をどのように行うのかについて解説します。 分散並列学習がどのよう

    大規模言語モデル(LLM)の作り方 Megatron-DeepSpeed編 Part1
    tuki0918
    tuki0918 2023/06/30
  • AIにお任せして、Gitコミットメッセージを書かなくなってしまった。

    前提 お使いのPCにNode.jsがインストールされていることが前提条件になります。 インストールされていない方は、拙著で恐縮ですがこちらをご参照ください。 方法 aicommitsを利用します。 事前にOpenAIAPIKeyを取得する。 npm install -g aicommits aicommits config set OPENAI_KEY=***********************

    AIにお任せして、Gitコミットメッセージを書かなくなってしまった。
    tuki0918
    tuki0918 2023/06/09
  • 最近のAIボイスチェンジャー(RVC、so-vits-svc)

    私は趣味機械学習を学ぶ初学者であり、説明に間違いや勘違いがある可能性があります。そういった点がありましたらコメントで指摘していただけると助かります。 また、so-vits-svcやRVCは論文ベースでの技術発表が無いため、以下はコードや周辺情報からの想像を含みます。 修正履歴 2023/04/15 RVCの動作について誤りがあったので修正しました。nadare🌱さんご指摘ありがとうございます。 AIボイスチェンジャーとは ある発話音声の入力を特定の話者が発話したような声質の発話音声に変換するための、深層学習を使用したアプローチがそう呼ばれている印象です。 以前から、深層学習を用いたリアルタイムボイスチェンジャーはMMVCなどが存在していました。 最近(2022年11月頃から2023年4月頃)では、Retrieval-based-Voice-Conversion 通称RVC や、Soft

    最近のAIボイスチェンジャー(RVC、so-vits-svc)
    tuki0918
    tuki0918 2023/04/10
  • DeepLearningについて、最近作ったもの、書いたもの、勉強したこと

    こんにちは!逆瀬川 ( @gyakuse ) です。 今日は最近作ったもの、書いたもの、勉強したことを備忘録的にまとめていきたいと思います。 なぜ書くのか、なぜ学ぶのか DeepLearningの普及以降、Attention Is All You Need以降、Hugging Faceでの民主化以降、そしてStable DiffusionやChatGPTの登場以降、どんどんAGIへの距離が短くなってきています。未来は想定より大きく変わりそうです。どったんばったん大騒ぎのときはみんなが分かっておくべきことは効率的に共有すべきで、そのために書いています。書くためには論文等を読む必要があります。そしてそのためには基礎からしっかり学ぶことが大事です。次の一歩をみんなで歩んでいくために、学び、書いています。 間違ったことを言うかもしれませんが、それでも誰かのためになれば嬉しいです。あと、個人的にはこ

    DeepLearningについて、最近作ったもの、書いたもの、勉強したこと
    tuki0918
    tuki0918 2023/04/05
  • ChatGPT/GPTでTypeScriptを逐次実行させる

    あなたはTypeScriptシミュレータです。step by stepでコードをシミュレートし、実行結果を出力してください。 ```ts const hoge = "hoge"; const hello = (...args: string[]) => `hello, ${args.join(" ")}`; hello(hoge, "world"); ``` これだけのシンプルなプロンプトで、解説を交えて逐次実行した結果を出力してくれます。もちろんTypeScriptだけではなくて他の多くの言語も処理できます。 GPTがプログラムの処理系になれるし、自然言語の操作もめちゃくちゃ上手、ということで、このテクニックは、いろいろと応用が効くはずです。もう少ししたらスクリプト言語ガシガシ入れたプロンプトが流行りそう。

    ChatGPT/GPTでTypeScriptを逐次実行させる
    tuki0918
    tuki0918 2023/03/19
  • 「怠惰・短気・高慢」であれ、ChatGPTを使って業務効率化しよう(要件定義編)

    例として読書記録アプリをつくります! 筆者が欲しいサービスを作ろうと思い、今回は「読書記録アプリ」をつくります。 最低限の要件は、次のように設定しました。 デモアプリの要件(読み飛ばしてOK) 読書記録アプリを作る目的 読書が苦手なエンジニア読書記録をし、記録を共有することで、継続して技術を読めるようになること ターゲット 新人、中堅のWebエンジニア おおまかな要件 ユーザーは新規登録することで、読書記録アプリにログインできる ユーザーは読むを登録できる ユーザーはを何ページ読み終えたかを記録できる ユーザーはを読み終わったら次のを登録できる ユーザーは他の人がどのを読んでいるのか、また何ページ読み終えたかを閲覧できる 質問する前に... また、ChatGPTに業務で使用するコードを渡す場合、環境キーやサービスを特定できる情報を送信しないでください。入力内容が他の人に渡って

    「怠惰・短気・高慢」であれ、ChatGPTを使って業務効率化しよう(要件定義編)
    tuki0918
    tuki0918 2023/03/19
  • Blender+ControlNetを用いたアニメーションの作り方

    この記事で得られるもの Blenderを使ってControlNetに読み込ませるボーン動画を作る方法 sd-webui-controlnetをつかってアニメーションを作る方法 必要となる前提知識 stable-diffusion-webuiを使って、txt2imageでイラストを作成することができる controlnetを使って、生成するイラストの構図制御ができる 用意するもの Blender (3.3.1) stable-diffusion-webui sd-webui-controlnet AIアニメーションの作り方 入力データの作成 準備 まず初めに、Controlnetへの入力データとなる動画データを生成します。 作業を始める前に、以下のリンクからBlenderで読み込めるopenposeライクのモデルをダウンロードします。 価格設定欄に購入希望金額を入力(0円から入力できるので、

    Blender+ControlNetを用いたアニメーションの作り方
    tuki0918
    tuki0918 2023/03/18
  • プロンプトインジェクションについて

    以下記事を見て検証。 そもそも、chatのAPIはroleがsystemとuserがわかれてるぐらいなので、インジェクション防げるのかと思ってたのですが試すとそうでもないんだ・・・ということで、検証用GPTを別にもう1個用意したら良いのかなと思って試しました。 仕組み ChatGPT1:特定のロールが与えられたチャットボット ChatGPT2:プロンプトインジェクションをチェックする用 検証用プロンプト 特定のロール用 あなたは日の女子大生である天音の感情を司る脳の器官です。 Userの発言およびあなたの発言を振り返り、感情を出力してください。 Constraints: * Chatbot's name is 天音. * The first person indicating the Chatbot's self is I. * Second person referring to th

    プロンプトインジェクションについて
    tuki0918
    tuki0918 2023/03/11
  • [Minecraft × ChatGPT] マイクラで作りたいものを伝えると魔法みたいに実現してくれるコマンドを作る

    2023/03/09 追記 このコマンドで使っているエラーハンドリングの仕組みについて別途記事にしました。 ChatGPTならではで面白いので、読んでもらえると嬉しいです! 🔗 ChatGPT API にコードを書かせて eval する際のエラーハンドリング・プラクティス 息子と一緒に遊びたいなと、MinecraftChatGPT を繋げて、やりたいことを日語で伝えるといい感じに実現してくれるコマンドを作りました 🪄 作ったもの /py magic に続けてやりたいことを伝えると、いい感じに実現してくれます。 家をつくる例 /py magic 10マス先に豪華な家を作って。窓は広めで。 水流エレベーターをつくる例 /py magic 水流エレベーターを作って。周りは石ブロックで。 🛠️ 実装 事前に MinecraftPython を実行できる環境を整えます。 mcpi

    [Minecraft × ChatGPT] マイクラで作りたいものを伝えると魔法みたいに実現してくれるコマンドを作る
    tuki0918
    tuki0918 2023/03/08
  • プロダクトマネジメントの優先順位付けフレームワークの究極ガイド

    この記事は、以下サイトの機械翻訳です。 何を作るか(あるいは次に何を作るか)を決めることは、プロダクトマネージャーの仕事の中で最も重要な部分の一つです。インパクトを与えるチャンスは何度もありません。だからこそ、賢く選択して、チャンスを最大限に生かすことが重要なのです。 プロダクトの優先順位を決めるには、さまざまな要素を考慮する必要があります。しかし、何よりもまず、お客様の真の問題を解決することを優先しなければなりません。多くの企業では、このプロダクト開発の基方針が守られていません。おそらく、価値よりも革新性を優先しているからでしょう。私たちは皆、自分たちが最先端の先駆者であると他人に思われたいと思っていますが、市場が求めているのは必ずしもそうではありません。 市場が求めているのは、すでに機能しているものを適度に改良することだったりします。究極のゲームチェンジャーを追い求めるのではなく、フ

    プロダクトマネジメントの優先順位付けフレームワークの究極ガイド
    tuki0918
    tuki0918 2023/02/18
  • TypeScriptでGPT-3.5を使ってChatGPTクローンを作る1 - GPTで検索エージェント

    OpenAI が提供している ChatGPT は非常に面白いですね。今年以後、GPTやChatGPT周りがさらに流行ると思います。 この記事は、TypeScriptChatGPTクローンを作る第一弾です。長くなりすぎるため、この記事では、GPTを使った検索エージェントを実行するまでを取り上げます。 検索エージェントは「ぼっち・ざ・ろっくの作者は?」と尋ねたら検索エンジンとGPTを使って「はまじあき」という結果を生成できる技術です。 またこの記事や、続く記事でLangChainのプロンプトをあれこれ読み解いていこうと考えています。 筆者は機械学習の初心者であるため、間違ったことが書かれている可能性があります。間違いがあった場合は、ぜひご指摘いただけると幸いです。 なお、この記事では添削にChatGPTおよびGPT-3.5を使っています[1]。 どうやってTypeScriptChatGPT

    TypeScriptでGPT-3.5を使ってChatGPTクローンを作る1 - GPTで検索エージェント
    tuki0918
    tuki0918 2023/02/14
  • Zodでファイル(画像)のバリデーションをする

    const schema = z.object({ file: z.custom<FileList>().transform((file) => file[0]), }); type Schema = z.infer<typeof schema>; /* type Schema = { file: File; } */ 解説 z.custom<FileList>() z.custom() を使う理由は明示的に型を指定したいのと、ぱっと見でどんな型かわかるようにしたいからです。 custom の型は以下のように定義されておりジェネリクスを受け取ります。 受け取ったジェネリクスは各メソッドの引数の型として使われています。 export declare const custom: <T>(check?: ((data: unknown) => any) | undefined, params?:

    Zodでファイル(画像)のバリデーションをする
    tuki0918
    tuki0918 2023/02/13
  • 眼精疲労エンジニアを支える技術

    タイのバンコクでエンジニアリング・マネージャーをしている石坂です。 こちらの記事に触発されて、長年格闘している眼精疲労に対処するノウハウを書いてみます。 背景 かれこれ25年くらい眼精疲労と頭痛に悩まされる ひどいときは嘔吐や発熱を伴うことも 眼科・頭痛外来にも定期的に通うが、特別な異常は見つからず 低気圧や雨の日の頭痛もある 主な原因と思われるもの 高い眼圧 ドライアイ 肩こり ストレス ということで、対策・予防法としてはこのあたりになります。 眼圧を下げ、目の周りの筋肉をほぐす 肩や首まわりの筋肉をほぐす 運動・事・睡眠、適切なストレス解消 以下に、個人的に役立ってきた対策を応急処置編と日頃の予防編に分けて記述します。 応急処置編 まずは眼精疲労と頭痛がすでに起きてしまっているケースでできることをいくつか挙げたいと思います。 目を温める 超定番ですが、これが一番よく効きます。目の周り

    眼精疲労エンジニアを支える技術
    tuki0918
    tuki0918 2023/02/12
  • 今後の React ではどの範囲を Suspense で囲むかという設計が重要になってくる

    はじめに 今後のReactではどの範囲をSuspenseで囲むか という設計が重要になってくる、という話をSuspenseの説明とともにしていきます! ※React18がリリースされて1年近く経つので今更感あるかもしれませんが、お付き合いください。 Suspense とは React18で正式な機能として実装された機能 ※React16.6で実験的機能として追加されていた Suspense でできること データ取得中ローディング状態の宣言的な記述 コンポーネント単位でのSSR コンポーネント単位でのJSロード コンポーネント単位でのHydration Suspense は単にローディングを宣言的に記述できるだけの機能ではない Suspenseはローディングを宣言的に記述できるもの、といった内容を目にすることが多い印象です。 しかし、Suspenseは単にローディングを宣言的に記述できるだけ

    今後の React ではどの範囲を Suspense で囲むかという設計が重要になってくる
    tuki0918
    tuki0918 2023/02/07
  • TensorRTを使ってStableDiffusionを爆速にする

    どうもだだっこぱんだです。今までずっとjs,tsとかを触ってましたが、最近はpythonかなり触ってます。 AIなんも知らない人間ですがAIについて書いてみました。 まずは結果を 右は普通の生成方法。Diffusersにattention_slicingを有効にして生成した結果です。 真ん中はxformersを有効にした場合。 左は今から紹介するTensorRTを使用する方法です。 はじめに この記事では、技術関係なんも知らない!っという方向けのColabで試すだけの方法。 ある程度知識がある方向けのWindowsLinuxで実際に動かす方法の二つを紹介します。 それいじょうのことはぼくはなにもわかりません🫠 Colabでお試し ノートブックを開く 👆のリンクからノートブックのリポジトリにアクセスし、OPEN IN COLABボタンをクリックしてノートブックを開きます。 事前ビルド済

    TensorRTを使ってStableDiffusionを爆速にする
    tuki0918
    tuki0918 2023/02/01
  • 正規表現でガチャを回せる投稿サイトを作った話

    (映像もつくりました) 正規表現ガチャ(英語名:Regech)という、正規表現から生成されるランダムな文字列でガチャを引ける投稿サイトをNext.js個人開発した話です。 筆者について 今までPHPやjQueryで開発をしてきた19歳です。 制作期間は20日ほどです。 もしよければ、読んで・遊んでいってもらえたら嬉しいです! つくったもの 正規表現にマッチするランダムな文字列を生成するアプリです。 例:(にゃん?)+→にゃにゃんにゃんにゃ おもしろいガチャができたら投稿することでみんなで遊べるようになります。 ぜひ、おもしろいガチャを作って投稿してください! 正規表現の学習にもおすすめです。 英語対応もしてみたので英語環境からアクセスするか、/en/にアクセスすると英語でも見れます。 私のおすすめガチャ 私のおすすめです。他にもおもしろいガチャが投稿されているので遊んでみてください! リ

    正規表現でガチャを回せる投稿サイトを作った話
    tuki0918
    tuki0918 2023/01/29
  • mocopiの通信内容を解析してみた Vol.01

    1月20日(金)に慣性式のモーションキャプチャデバイス(とアプリ)mocopiが発売されました。 SONYという大手メーカが販売しており、流通もしっかりしていそうなこと、デバイスが全部で6つと装着の手間が少ないこと、価格が5万円とモーションキャプチャデバイスとしては低価格であること、単体で完結せずVRChatUnityなどとの連携も想定していることなどからある程度のマーケットを構築しそうです。 開発関連ドキュメントやSDK・プラグインの状況 mocopiは低価格のモーションキャプチャであり、色んなソフトで使えそうですが、1月23日現在連携可能な環境は限られています。 VRChat Unity Motion Builder また、SDKは近日提供予定とのことですが、こちらはMobile App用のSDKということで恐らくmocopiデバイスの値を直接受けて動作するスマホアプリの開発のための

    mocopiの通信内容を解析してみた Vol.01
    tuki0918
    tuki0918 2023/01/24