$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

tech

MySQLでNested Loopなクエリはインデックスをどう辿っているか

タイムライン的なものをSELECTだけで実装しようと思った時に、Nested LoopなクエリでUsing temporary; Using filesortが出るようなそこそこ遅いクエリになる。その時にMySQLがインデックスをどう辿っているかを知りたかったので調べてみた。MySQLバージョン…

Goの学習のため書籍を三冊読んだ

A Tour of Goが終わり、もう少しGo自体の深掘りをしたいためGoの書籍をいくつか読んでみたのでメモ。今回読んだ書籍は以下の三冊。 実用 Go言語 ―システム開発の現場で知っておきたいアドバイス作者:渋川 よしき,辻 大志郎,真野 隼記オライリージャパンAmazo…

あるディレクトリ以下で特定のパターンにヒットする行を全て削除する

例えばgolangを使っていて、ある処理をt.Cleanupに寄せたので対応するdeferを全部消したい時がある。 defer hogeHelper.Close() 単純に上のように特定のパターンにヒットする行を全て削除したいということであれば、findとsedを使うだけで出来る。Macの場合…

あるレポジトリのサブディレクトリ配下を別のレポジトリへ履歴付きで移行する

Gitで開発していて、あるサブディレクトリ以下を別のレポジトリに移行したいと思うことがある。今回はそういうことをしてみたのでメモ。 まずGitHubにそのようなやり方の指南がある(Splitting a subfolder out into a new repository - GitHub Docs)。大体…

英会話LINE BotのCloudflare Queues利用部分をwaitUntil APIで書き直す

OpenAI APIで英会話LINE Botを作る with Hono + Cloudflare Workers + Queues + D1 - $shibayu36->blog; を書いたら、id:mechairoi さんからwaitUntilが使えるんではと教えてもらった。確かにwaitUntilで書き直せればQueues依存がなくせるため、コンポーネン…

OpenAI APIで英会話LINE Botを作る with Hono + Cloudflare Workers + Queues + D1

Cloudflare Worker + D1 + Hono + OpenAIでLINE Botを作るを見て、Cloudflare Workersに興味を持った。そこでLINEで英会話や添削ができるbotを作ってみた。 作ったもの こんな形で英会話をしたり、英作文テーマを作ってくれたり、添削をしてくれたりする。 …

LLMを理解する一歩として「ゼロから作るDeep Learning」をやった

LLM、GPT界隈を追いかけていて、GPTの仕組みと限界についての考察(2.1) - conceptualizationという記事を見かけた。これを見たとき、「どういうことか全然理解できない」という気持ちになった。また、その他LLMの解説記事を理解できないことが多く、自分の…

トークン数上限を超えた長い文章でもChatGPTを使って要約する

長い文章を読むときに一旦要約を読んでから中身を深く読みたい時がある。そのような時にChatGPTを使って要約できると便利だ。しかしGPT-3.5を利用しているとトークン数上限は4096であり、大体4000文字を超えた文章を要約しようとするとエラーとなってしまう…

直近の会話を考慮してChat Completion APIを呼ぶお試し

いろんな人がサンプルコードを上げているけど自分も理解するためにお試しした。 動作の雰囲気 コード chat_example.py from functools import reduce import os import openai import tiktoken openai.api_key = os.environ["OPENAI_API_KEY"] encoding = ti…

Pythonで作ったCLIツールをGitHubから直接pipでinstallできるようにする方法

chat-hatenablogをpip installでインストール可能にした - $shibayu36->blog; にて、pip installで直接CLIツールをインストールできるようにした。 pip install git+https://github.com/shibayu36/chat-hatenablog.git この時に調べたことをメモしておく。 …

CLIツールを作るとき、ユーザー設定ファイルやデータをどこに配置するか

chat-hatenablogをpip installでインストール可能にした - $shibayu36->blog;にてchat-hatenablogをpip installできるようにするとき、ユーザー設定ファイルやデータをどこに配置するかに迷った。このツールでは、環境変数の設定として.envファイルを、ブロ…

chat-hatenablogをpip installでインストール可能にした

https://github.com/shibayu36/chat-hatenablog/releases/tag/v0.3.0 chat-hatenablog v0.3.0にてchat-hatenablogをpip installできるようにした。以下のようにすれば、GitHubから直接コマンドをインストールできる。 pip install git+https://github.com/sh…

chat-hatenablog v0.2.1をリリースした。過去のブログ記事を更新してもインデックスを差分更新できるように等

ChatGPTを使って自分のはてなブログとチャットするツールを作った - $shibayu36->blog;で紹介したchat-hatenablogのv0.2.1をリリースした。 リリース内容 https://github.com/shibayu36/chat-hatenablog/releases/tag/v0.2.0 https://github.com/shibayu36/c…

Pythonのpickleファイルが壊れないようにatomicに処理する

https://github.com/shibayu36/chat-hatenablog を使っていて、途中でC-cなどでプロセスをterminateした時にpickleファイルが壊れることがあった。pickleファイルが壊れると、次のpickle.load時に EOFError: Ran out of input のようなエラーが出て、再度作…

chat-hatenablogのv0.1.0をリリース & 開発メモ

ChatGPTを使って自分のはてなブログとチャットするツールを作った - $shibayu36->blog;で紹介したchat-hatenablogのv0.1.0をリリースした。リリース内容は本当にちょっとしたものなので、追加で開発メモを公開しておく。 リリース内容 https://github.com/sh…

ChatGPTに参考となるレポジトリをいくつか聞くと便利

全く初めての言語を扱うとき、その言語の一般的なやり方がわからないことが多い。これまでは書籍を読むことに加え、その言語をよく知る人に「どのレポジトリが参考になりますか?」と聞いて回り、参考になるレポジトリから一般的なやり方を理解していた。 Ch…

ChatGPTを使って自分のはてなブログとチャットするツールを作った

【2023/04/18追記】現在、この記事で説明したものから使い方のインターフェースが変わっているので、実際に使うときは https://github.com/shibayu36/chat-hatenablog のREADME.mdを参考にしてください。 以下の記事を見て、もっと気軽に自分のはてなブログ…

ChatGPTを使って自分のブログ風回答を生成する仕組みを学ぶ

最近ChatGPT周りを見ていて、自分のブログをChatGPTに繋いでブログが言いそうな回答を出してもらうという記事に興味を持った。 自分のScrapboxをChatGPTにつないだ - 西尾泰和のScrapbox 自分のはてなブログをChat GPTにつないだ - hitode909の日記 ChatWP: …

YAPC::Kyoto 2023に参加しました

久々のオフライン開催ということで、YAPC Kyoto 2023に参加してきた。 久々に大量の知り合いと話せて、とにかく楽しかった! YAPCは昔から参加していたので、大量の知り合いと久々に会えた。オンライン開催だと立ち話とかもあまりできなかったので、オフライ…

vscode-rdbg(debug.gem)でのRubyデバッグが便利すぎる

最近Rubyを学び直したり、アルゴリズムの基礎練をしたりしているのだが、debug.gemおよびvscode-rdbgが便利すぎるので紹介。 debug.gemやvscode-rdbgとは debug.gem( https://github.com/ruby/debug )とは最近のRubyのモダンなdebugger。これまでlib/debug.r…

Rubyで迷路探索を幅優先探索で解く

最近は仕事ができない感から完全脱却してみる|牛尾 剛|noteに触発されて基本に戻ろうと思い、アルゴリズムの勉強をしている。今回は迷路の最短経路を幅優先探索で解くというのをやってみた。 やりたいこと 迷路を以下のような文字列で与えられたときに .#.…

Rails勉強し直している - Webアプリケーション編

Rails勉強し直している - DB操作編 - $shibayu36->blog;に引き続きRailsを勉強し直している。今回はHatena-TextbookのWebアプリケーションの課題を通して学習した。 作ったもの diffはこの辺。ユーザーが存在する前提で、記事のCRUD処理を実装した。 今回学…

Docker・MySQL・RuboCop・RSpec・factory_botを導入したRailsプロジェクトを作る

Rails勉強し直している - DB操作編 - $shibayu36->blog; の初期セットアップ部分で言及したとおり、Rails・Docker・MySQL・RuboCop・RSpec・factory_botという構成でやってみた。その構成を初期セットアップする方法についてブログ記事に残しておく。 作った…

Rails勉強し直している - DB操作編

基本に戻ろうと思い、Railsも勉強し直している。勉強し直しの時、Hatena-Textbookの課題を使うことが多いので、今回もそのようにした。 今回はデータベースの課題をRailsを使ってやってみた。 作ったもの この辺がdiff。かなり探索的に作ったのでcommitはご…

グラフアルゴリズムの理解のためにBellman–Ford法をRubyで実装してみる

アルゴリズム図鑑 絵で見てわかる26のアルゴリズム作者:石田保輝,宮崎修一翔泳社Amazon 優先度付きキューにも使われる二分ヒープ構造をRubyで実装してみる - $shibayu36->blog;に引き続き。アルゴリズム図鑑を眺めていて、グラフ系のアルゴリズムを全く知ら…

VSCodeで全ワークスペースで使うdebug launch設定をする

VSCodeでデバッガを起動したい時に、毎回.vscode/launch.jsonの追加をしていた。これ面倒だなと思っていたのだが、普通にsettings.jsonのlaunchというキー名で全ワークスペースで使うdebug launch configurationの設定ができた。 例えばRubyのデバッグのため…

優先度付きキューにも使われる二分ヒープ構造をRubyで実装してみる

アルゴリズム図鑑 絵で見てわかる26のアルゴリズム作者:石田保輝,宮崎修一翔泳社Amazon アルゴリズム図鑑を眺めていて、二分ヒープ構造は優先度付きキューに使われることを知った。面白いなーと思うと同時に、そういえば二分ヒープ構造の実装をしたことがな…

Rubyでnewに渡ってきたパラメータ引数のaccessorを自動で作る

GitHub Copilotに補完されて面白いなと思ったのでメモ。たとえばLTSVのログを格納する構造を作るときに、渡ってきたパラメータ引数名を使ってアクセサを作りたいとする。以下のようなコードで実現が可能。 class Log # パラメータ引数をハッシュで受け取って…

ローカル開発環境でMySQL5.7を使っているときにtable_open_cacheを少なくすると、なぜLost connection to MySQL serverが起きなくなるか

最近ローカル環境でMySQL 5.7 + Railsの開発をしていると、たまにMysql2::Error: Lost connection to MySQL server at 'reading initial communication packet'というエラーが出て困っていた。これについては、mac osx におけるファイルディスクリプタの上限…

不確実な状況に耐える力を学ぶ - 「ネガティブ・ケイパビリティ」を読んだ

自分は問題解決は得意な方だと思っている。しかし逆に不確実な状況・不安な状況・課題がある状況をそのままにして耐える力をもっと付けたいなと思っている。そこで最近目にした「どうにも答えの出ない、どうにも対処しようのない事態に耐える能力」であるネ…