東京に行きました

仕事の都合で久しぶりに東京に行きました。 前回は去年富士山に登ったときに中継で行ったときです。 出社自体は1年ぶりくらいだったのですがオフィスの場所を忘れてしまいGoogle Mapで検索しながらたどり着きました。 業務後メインの目的だったもともとのホームだったボルダリングジムの そらよん に行きました。 3年ぶりくらいの訪問だと思います。 前から存在してる課題はなんとなく覚えていたので登れましたがコロナ渦よりあとにできた課題は登れなかったので2週間くらい東京に宿泊して通い詰めていなぁと思いました。 ボルダリングのほかは良く行っていた居酒屋や蕎麦屋に顔を出せたりして充実した東京遠征だったなぁと思います。

3月 11, 2023

YubiKey買い足しました

以前の記事 で YubiKey 5C NFC を購入しましたが新たに YubiKey 5 NFC を買い足しました。 違いはUSBがAとCの違いであることとUSB-Aのほうが3000~4000円ほど安いということです。 気になる点はUSB-Aの方は端子がむき出しなので錆びてしまわなかと不安になる点ですが持ち歩きようにするつもりはないのであまり気にしていません。 USB-Cの方は持ち歩いていますがキャップをつけています。 使い方は5Cも5も変わらないので手持ちのデバイスと好み、値段と相談して購入すると良いと思います。 Yubico Yubico セキュリティキー YubiKey 5 NFC Yubico Yubico セキュリティキー YubiKey 5C NFC テクノベインズ USB3.1Type-C ケーブル先端用キャップ (黒) 6個/パック USB31CATCK-B0-6

3月 7, 2023

お遍路の進捗

土曜日は72番札所の曼荼羅寺から76番札所の金蔵寺駅までをめぐり、 日曜日は77番札所の道隆寺から84番札所の屋島寺までをめぐりました。 去年の7月から初めて牛歩のような速さで巡ってきたわけですが、 80番後半が見えてくると旅も終わりなんだなぁと感じますね。 クリックで拡大 クリックで拡大 クリックで拡大

3月 6, 2023

たけのこ掘りました

今年初のたけのこを掘りました。 この時期なので浅いので良いのですが問題があってイノシシの被害が今年はひどいです。 20本くらい食い荒らされた跡がありました。 対策考えないとなぁ。

3月 4, 2023

gopenai-apiでAudio APIを使えるようにしました

昨日 作った OpenAI のAPI wrapperで Audio API を利用できるようにしました。 公式のAPIではDefaultのformatがjsonになっていますがverbose_jsonにしてあります。 vtt, srt はまだ対応させていません。 長いデータを投げてないのでわからないですがQueue/WorkerではなくREST APIなので処理長いとタイムアウトしちゃいそうな気がするけどそのあたりどうなんだろう? 使用例 package main import ( "fmt" "log" "os" "github.com/ieee0824/gopenai-api/api" "github.com/ieee0824/gopenai-api/config" "github.com/samber/lo" ) func main() { a := api.New(&config.Configuration{ ApiKey: lo.ToPtr("API_KEY"), Organization: lo.ToPtr("ORG_ID"), }) f, err := os.Open("test.mp3") if err != nil { log.Fatalln(err) } result, err := a.AudioTranscriptionsV1(&api.AudioTranscriptionsV1Input{ File: f, Model: lo.ToPtr("whisper-1"), Language: lo.ToPtr("ja"), }) if err !...

3月 3, 2023

GoからOpenAIのgpt-3.5-turboを使ってみた

インストール go get github.com/ieee0824/gopenai-api 内容 次のAPIに対応しています. /v1/models /v1/chat/completions chat apiをGPT 3.5 Turboで実行する例 package main import ( "fmt" "github.com/ieee0824/gopenai-api/api" "github.com/ieee0824/gopenai-api/config" "github.com/samber/lo" ) func main() { a := api.New(&config.Configuration{ ApiKey: lo.ToPtr("api-key"), Organization: lo.ToPtr("organization-id"), }) fmt.Println(a.ChatCompletionsV1(&api.ChatCompletionsV1Input{ Model: lo.ToPtr("gpt-3.5-turbo"), Messages: []api.Message{ { Role: "user", Content: "ChatGPT 3.5のapiの使い方を教えてください", }, }, })) } 制作物 gopenai-api

3月 2, 2023

GridレイアウトをCSSを利用したものに変更しました

先日の記事 で画像をGrid表示する話をしましたが、CSSでできるという話を聞いたので置き換えました。 {{ $size := "200x" }} {{ $mobileSize := "100x100"}} <div class="img-view"> {{ range $idx, $elem := .Params }} {{ $res := resources.GetMatch $elem }} {{ $image := $res.Resize $size }} {{ $imageWebP := $res.Resize (printf "%s %s webp q70" $size) }} {{ $mobileImage := $res.Fit $mobileSize}} {{ $mobileImageWebP := $res.Fit (printf "%s %s webp q70" $mobileSize) }} {{ $imageURL := $image.RelPermalink }} {{ $imageWebPURL := $imageWebP....

2月 27, 2023

WebP対応しました

サムネイルだけですがWebP対応しました。 オリジナルサイズはどうするか悩んでいるところです。 静的配信をしてるのでserverで出し分けるのではなくpicture tagを利用してやっています。 対応差分は次のような感じです。 - <img class="pc" src="{{ $imageURL }}" alt="{{ $elem }}" width="{{ $image.Width }}" height="{{ $image.Height }}"/> - <img class="sp" src="{{ $mobileImageURL }}" alt="{{ $elem }}" width="{{ $mobileImage.Width }}" height="{{ $mobileImage.Height }}"/> + <picture class="pc"> + <source srcset="{{ $imageWebPURL }}" type="image/webp" > + <img src="{{ $imageURL }}" alt="{{ $elem }}" width="{{ $image.Width }}" height="{{ $image.Height }}"/> + </picture> + <picture class="sp"> + <source srcset="{{ $mobileImageWebPURL }}" type="image/webp"> + <img src="{{ $mobileImageURL }}" alt="{{ $elem }}" width="{{ $mobileImage....

2月 26, 2023

狩猟免許の試験を受けてきました

試験の流れ 私の地域では午前中がわな、午後が銃という構成でした。 8時30分に会場到着して視力検査、聴力検査、運動能力検査を行いました。 視力検査はよくあるランドルト環の方向を答えるやつです。 聴力検査は部屋の隅にたった状態で対角線上の位置からアラームを鳴らして聞こえたら手を上げると言うものでした。 運動能力検査は屈伸したり 岸部露伴の準備運動 みたいなことをやりました。 まぁ実際は岸部露伴程は複雑ではないです。 諸々の検査が終わったら次は筆記試験です。 30問の試験で90分時間が用意されてますが見返しを含めても15分もあれば終わると思います。 途中退席も15分からなので答案用紙に穴があくくらい見返したらいいと思います。 筆記試験が終わると筆記試験の合格者が先に発表されます。 このとき不合格の人は次の鳥獣判定と罠の判定、設営に進むことなく終わります。 合格した人は鳥獣の判定、罠の判定、設営を行い終わった人から帰っていきます。

2月 25, 2023

hugoをGitHub actionsでbuildする設定

当ブログはGithub actionsでビルドしたあとサーバーにデプロイするようにしています。 版管理はgitで画像はlfsを利用しています。 テーマは hugo-PaperModを利用しておりsubmoduleになっています。 actionsの設定 ほぼ重要なのはチェックアウト周りだけなので抜粋はチェックアウト周りだけです。 やっていることは lfs を有効にすることと submodule をチェックアウト時に取得することです。 steps: - name: Checkout uses: actions/checkout@v3 with: lfs: true submodules: recursive submodulesと書かずにsubmoduleと書いてしまって小一時間悩んでしまいましたがsが必要です。 submoduleにしてしまった場合次のような警告が出ますがそのまま実行されます。 Unexpected input(s) 'submodule', valid inputs are ['repository', 'ref', 'token', 'ssh-key', 'ssh-known-hosts', 'ssh-strict', 'persist-credentials', 'path', 'clean', 'fetch-depth', 'lfs', 'submodules', 'set-safe-directory', 'github-server-url'] hugo側の設定 大きい画像をshortcodesを利用して変換する場合時間がかかってタイムアウトをする場合があります。 なので私はtimeout: 120sという設定を入れています。 timeoutのフォーマットはGoのtime.ParseDurationの対応しているフォーマットです。

2月 21, 2023