サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大そうじへの備え
journal.lampetty.net
自分の備忘録としてのやってみた系の話。OpenAIが提供するモデルを使って文字起こしをするC++実装のwhisper.cppを試してみた。 環境 Apple M1 MacBook Air 2020 (Memory 16GB) uname -a Darwin hogehoge.local 22.3.0 Darwin Kernel Version 22.3.0: Mon Jan 30 20:39:35 PST 2023; root:xnu-8792.81.3~2/RELEASE_ARM64_T8103 x86_64 whisper.cppのビルド 以下のコマンドを実行してビルドする。 git clone https://github.com/ggerganov/whisper.cpp.git cd whisper.cpp make ビルドが成功すると、カレントディレクトリに main という名
Go1.17beta1がダウンロードできるようになったので、Generics(Type Parameters)でStackを書いて軽く遊んだメモ。 Generics (Type Parameters)について 最新の仕様のProposalは以下を見ると良い。 実際にどんな感じのコードになるのかは、GitHubのdev.typeparams branchのコードを見ると良さそう。 Go1.17beta1のダウンロード 普段使っているgoコマンドから以下のようにGo1.17beta1をダウンロードできる。 $ go get golang.org/dl/go1.17beta1 $ go1.17beta1 download これで ~/sdk/go1.17beta1 にインストールされる。 FYI: Goは標準の機能で複数のバージョンをインストールできる。より詳しくは以下のドキュメントを読むと良い
TL;DR Apple Silicon(M1) Docker Desktop for Macでgoogle/cloud-sdkのDocker Imageを使ってコンテナ内でCloud Datastore Emulatorを立ち上げると、CPUが100%で張り付いてハングするという問題があった。 解決方法として、該当のDocker Imageをarm64v8アーキテクチャでビルドして、そのイメージでコンテナを立ち上げるようにしたら問題は起きなくなったので、その方法の紹介 問題の詳細 Apple Silicon版のDocker Desktop for MacはRosetta2を使いインテルアーキテクチャ(amd64 / x86_64)をエミュレーションして実行されている。エミュレーションが行われているため、ネイティブでarm64v8のコンテナを実行するよりCPUを使ってしまうという問題がある。
O'ReillyのOnline Learning(旧O'Reilly Safari Books Online)は月額$49でオライリーの本や動画などが見放題になるエンジニア向けのサブスクを提供している。以前は英語の本しか読めなかったが、いつからか日本語の本も読めるようになっていたのでメモ。 www.oreilly.com Sign Inして、左のメニューのSettingsをクリックするとLanguage Preferencesがあるので、ここでJapaneseにチェックを入れて下のUpdate Preferencesをクリックして保存する。 これでHomeに行き、例えばGraphQLで検索すると検索結果の画面でBooksのタブがあるのでこれを選択する。そうするとLanguageの選択ができるので、ここでJapaneseを選ぶと日本語の本だけに絞ることができる。(手っ取り早く検索結果を表示し
これはなに? 入社エントリー&会社紹介です。表題の通りで、10月をもってメルカリ/メルペイを退職し、11月からドクターズプライムという会社で働いています。 なにやってるの? Backend Engineerとして、救急車のたらい回しをなくすためのプロダクトを開発しています。救急車のたらい回しが発生する理由としては以下のスライドに書いてある通りなのですが、これを解決するのがDr.'s Primeという医師の採用サービスになります。 自分も子供を持つ親なので何度か病院のお世話になったことはあるし、子供が救急車で運ばれて手術&入院したこともあるので、救急医療に関しては一当事者として良くしていきたいという思いがありました。ドクターズプライムは救急車の搬送を断らないための仕組みを採用サービスとして第三者の立場から提供していて、素直にいいソリューションだなと思っています。 入社の経緯 今年に入ってから
Goでよく使われるMockの生成ツールとしてgomockがある。個人的にはgomockが生成したコードでモックを書くのが好きではないので、代替としてmoqを使うやり方を取り上げてみようと思う。 TL;DR moqは、mockしたいinterfaceで定義されているメソッドと同じシグネチャのメソッドを生成し、そのメソッドを実装することでmockが作れる 純粋にメソッドのモック実装のコードを書けばいいだけなので、gomockのようにライブラリとしての使い方を覚える必要はない 生成されるコードもtype safeであり、gomockのようにanyは登場しない moqには、mock化したメソッドが呼び出された回数を取得するなど、最低限のことはできるようになっている。 それ以上のことをやりたければ自分で実装する 題材 GitHubのAPIを使い指定したリポジトリのブランチを出力するServiceを考
ずいぶんと振り返りをサボってしまったので、頑張って7ヶ月分を書く 2月 この頃は各国のコロナの感染者数を毎日チェックしていた気がする。 国別の罹患者数。Cruise Shipが国に格上げされているwhttps://t.co/rp6wUIvCrS— oinume (@oinume) February 17, 2020 そしてコロナの影響で2月終わりから在宅勤務、英語でカッコよく言うとWFHというヤツに会社が全体的に移行した。仕事的にはGitHub Actionsを使って何かいろいろ自動化しようとしていて、そんなに切羽詰まっている感じではなかった気がする。 3月 新型コロナの影響で3月〜5月に行く予定だったライブやフェスがことごとく延期もしくは中止になり、個人的な趣味を奪われてしまって、仕事で溜まったストレスが発散できなくなった。仕事はプロジェクトが炎上し始めたのと、WFHになったおかげでこの
いわゆる退職エントリーというヤツです。表題の通りで、10月をもって4年3ヶ月勤めたメルカリ/メルペイを退職します。思い返せば、退職エントリーというものをブログに書くのは初めてです。少し緊張してます。 だれ? oinume です。Goが好きなBackend engineerです。 何をやっていたのか? 2016年5月に入社してからやってきたことを書き出すと以下のような感じです。メルカリ→ソウゾウ→メルペイと、気付いたらチームごと会社を異動しており、様々なプロジェクトに携わりました。一つの会社の中でこれだけたくさんのことをやったのは初めてで、様々な経験を積ませてもらい、とても刺激的でした。 ID Platform Teamでメルカリや周辺サービスのアカウントの統合 @メルカリ この記事でID Platform Teamについて詳しく説明されている メルカリ月イチ払い(現メルペイスマート払い)の
はじめに 自分のチームではA successful Git branching modelに近い感じで、リリースする前にrelease branchを作りそこにfeature branchをmergeしてからテストしてリリースする、という流れで開発からリリースまでのサイクルを回している。 リリースする前に誰かがrelease branchを作成するという作業が手間だったため、GitHub Actionsで自動化できないかと思い、実際やってみたところ意外と簡単にできたので、そこで得られた知識をこの記事にまとめる 実際のコードと説明 それでは実際のactionsのYAMLファイルをもとに細かく説明する。今回使用したYAMLファイルはここにあがっている。 on でフックしたいイベントを定義する GitHub Actionsを作成すると、.github/workflows/xxx.yml が作成さ
はじめに みなさんこんにちは。これはGo5 Advent Calendar 2019の19日目の記事です。この記事はOpenCensusとhttptrace.ClientTraceを使ってHTTPリクエストの内部的なlatencyを可視化する話です。「内部的なlatency」というのは、HTTPリクエストの中で名前解決にどのぐらいかかったとか、コネクションを張るのにどのぐらいかかったなどです。 なお、この記事に記載しているコードは全てGitHub repositoryに上げてあります。 やりたいこと とあるアプリケーションでHTTP Clientを使ってHTTPリクエストを大量に送る処理がありました。そのサーバーはUS Regionで動いていて、そこからHTTPリクエストを日本にあるサーバーに送るというもので、この処理のlatencyが非常に気になっていました。そのため、HTTPリクエスト
はじめに クライアントを作って理解するOAuth2(準備編) - oinume journalの続編。前の記事ではGoogle APIsのプロジェクトを作成してOAuth2 clientを登録した。この記事では発行されたClient idを使って実際にAccess tokenを取得する部分をGoで実装してみたいと思う。 ソースコードは GitHub - oinume/go-oauth2-client-sample: OAuth2 client sample in Go にあり、OAuthの実装はserver.goにまとまっている。main関数はcmd/oauth2-client-sample/main.goにあるが、これはサーバーの起動処理があるだけの薄いものである。サーバーの起動方法などについてはGitHubのREADMEを見てほしい。 前提 OAuth2のGrant typeはAuth
これはなに? Go言語におけるcontextパッケージを使ったキャンセルやタイムアウトについて説明する。この記事を読むと以下について詳しくなれるはず...! context.WithCancel context.WithTimeout context.Done context.Err とはいいつつも、かなり自分向けのまとめではあるし既出のトピックなので以下の記事を読むともっとわかりやすいはず。 Go Concurrency Patterns: Context - The Go Programming Language Go1.7のcontextパッケージ | Taichi Nakashima done channelを使ったキャンセルの実装 contextがあると何が嬉しいのかを説明するために、まずはdone channelを使ってキャンセルを行うコードを書いてみる。これはGo言語による並
TL;DR Bashを使うにあたって、zshが持つ標準機能のレベルと同じにするには初期設定が面倒だったけどなんとかいける。Bashは進化していると感じた。 bash-itが便利 設定は .bash_profile も含めてoinume/dotfilesに上げているので参考にどうぞ 動機 ターミナル環境を見直す(1) - zsh + prezto編 - oinume journal の記事でデフォルトのshellをzshに切り替えたけど、tmuxでバンバン新しいタブを開くと起動の遅さが気になっていてそろそろどうにかしたいと思っていた。また、zshは便利だけど設定項目を覚えたり調べるのが大変だし、ほとんどの機能は使いこなせていなかったので、これを機にシンプルなbashに乗り換えてみた。この記事はその際にやったことのメモ。 以下によると次期macOS Catalinaではbashに代わってzsh
今年5月にbetaとしてリリースされたGCPのCloud Runを使って、もともとGAEで運用していたリダイレクタを移植してみたのでその紹介。 Cloud Runとは HTTPリクエストを処理するためのFull ManagedなステートレスのContainerの実行環境。公式サイトには以下のように説明されている。 Cloud Run is a managed compute platform that enables you to run stateless containers that are invocable via HTTP requests GCPでは、Full Managedな実行環境(PaaS)として Google App Engine(Standard Edition) Cloud Functions が存在しているが、完全にContainerベースのCloud Runが
標準ライブラリのhttpパッケージだけでもmiddlewareは簡単に作れますよ、というお話。 おさらい: http.Handlerまたはhttp.HandlerFuncでやり取りする Goのhttp.Handlerやhttp.HandlerFuncをちゃんと理解する - oinume journalに書いたとおり、 http.ListenAndServe ServeMux.Handle に渡すのは http.Handler なので、何かしらのmiddlewareもこのinterfaceを満たすことを考えればよい。もしくは ServeMux.HandleFunc を使うのであれば http.HandlerFunc を使うでもよし。 middlewareはhttp.Handlerを引数に取り、http.Handlerを返す 例えば、 admin という名前のCookieを持っていないとアクセ
GoのWeb Application Frameworkでオススメは?という質問をよく受ける。 標準ライブラリのhttpパッケージ使えばおk とまずは返答している。ただ、RESTで様々なHTTPメソッドをサポートする必要があり、かつ /v1/users/{id} のようなPath内にIDが入る場合の対応を行いたい場合は gorilla/mux chi goji あたりの標準のhttpパッケージに沿ったものをオススメしている。理由としては以下。 ユニットテストで標準ライブラリのhttptestパッケージが使える(これ重要) 他の標準のhttpパッケージに沿ったフレームワークに乗り換えやすい もし乗り換えた場合でもテストコードは書き換えなくてよいはず 標準のhttpパッケージに沿ったもの、というのは、 ハンドラを登録する時に http.Handler を受け付けられるものという意味で書いている
はじめに GoでHTTP Serverを作ろうとすると、標準ライブラリを使う場合以下のようなコードをよく書くと思う。 package main import ( "fmt" "log" "net/http" ) func main() { mux := http.NewServeMux() mux.Handle("/hello", http.HandlerFunc(hello)) log.Fatal(http.ListenAndServe(":8080", mux)) } func hello(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(http.StatusOK) fmt.Fprintf(w, "Hello World") } このコードの登場人物としては以下になるが、それぞれなんだっけ?というのをいっつも忘れてしまうの
Google Apps Script(GAS)から外部のREST APIを呼ぶには、UrlFetchApp.fetch というメソッドを呼び出せば良い。例えばJSONをリクエストのペイロードとして送る場合のサンプルコードはこんな感じ。 var data = { 'email': email, 'subject': subject, 'message': message, }; var credential = PropertiesService.getScriptProperties().getProperty('FRESHDESK_CREDENTIAL'); var options = { 'method': 'post', 'contentType': 'application/json', 'headers': { 'Authorization': 'Bearer ' + Utili
背景 何かしらの理由でRESTでAPIを実装しなくてはいけない時に、JSONを直接扱うのは面倒くさい。具体的には、JSONをデシリアライズして内部のデータ構造にマッピングする処理を書くのが面倒だ。というわけで、grpc-gatewayを使ってProtocol Buffersを定義するだけでREST APIを実装できないかを検討してみた。 gRPCとは gRPCはサービスの定義やリモートから呼び出されるメソッドの詳細な定義(引数や戻り値)をProtocol Buffers(以降Protobuf)を用いて定義する。つまりgRPCではProtobufがIDL(Interface Definition Language)として使われていて、protocというコマンドからProtobuf上のサービス・メソッド定義から各プログラミング言語のソースコードが生成できる。 grpc-gatewayとは gr
いっっっつもやり方を忘れるので未来の自分のためにメモ。 1.Google Driveで対象の画像ファイルを選択して開く 2.画像が表示されるので、右上のメニュー(縦の...のアイコン)から 新しいウィンドウで開く をクリックする。 3.開いたウィンドウの右上のメニューから アイテムを埋め込む をクリックすると iframe のHTMLコードが表示されるので、それをコピーしてブログに貼り付ける。 仕事で使える!Googleドライブ クラウドストレージ徹底活用術 (仕事で使える!シリーズ(NextPublishing)) 作者: 佐藤芳樹出版社/メーカー: インプレスR&D発売日: 2015/06/12メディア: Kindle版この商品を含むブログを見る
これはHeroku Advent Calendar 2016の11日目の記事です。 HerokuではHeroku Schedulerというcronのようなサービスがあるのですが、使い込むうちに「Daily, Hourly, Every 10 minutesの単位でしかジョブを動かせない」という制限がつらくなってきたので、より良い代替であるCustom clock processesを試してみたという話。 Custom clock processesとは? clockというプロセスを立ち上げっぱなしにして、そのプロセス内でスケジューリングされたジョブを実行する仕組み。Heroku Schedulerは実行される時だけプロセスが立ち上がるけど、clockの場合は常にプロセスが常駐する。 各言語のScheduler HerokuのCustom clock processesのドキュメントで触れら
概要 gcloudコマンドを使わずにPythonとgoogle-cloudを使ってGoogle Cloud Storage(GCS)に頑張ってファイルをアップロードしてみる。google-cloudはPython向けのGoogle Cloud Platformの何かを操作するためのクライアントライブラリ。GCPの以下の機能の操作がサポートされている。 GA Google Cloud Datastore Google Cloud Storage Google Cloud Translation Stackdriver Logging Beta Google BigQuery Google Cloud Natural Language Google Cloud Speech Google Cloud Video Intelligence Google Cloud Vision Alpha Go
最近少しずつJupyter Notebookやpandas, matplotlibに慣れてきて、PythonによるData Scienceが面白くなってきたと感じてます。今日はMySQLのデータをSQLで持ってきて、Jupyter Notebook上でグラフにしてみる話。 セットアップ Python3はインストールされていることを前提。jupyterなどの必要なソフトウェアを入れる環境を作って、pip でインストールする。 python3 -m venv jupyter source jupyter/bin/activate pip install jupyter pandas matplotlib pymysql インストールが成功したら、こんな感じでJupyter Notebookを立ち上げる。 ./jupyter/bin/jupyter notebook 立ち上がったらブラウザから適
これはGo Advent Calendar 2016の18日目の記事です。今回はGoでE2Eテストを行うためのライブラリagoutiについて書きます。 GoでE2Eテストを書く理由 WebアプリケーションのサーバーサイドをGoで書いている場合、GoでE2Eテストを書くメリットとして JavaScriptが得意ではないエンジニア(自分)でもE2Eテストがガリガリかける E2Eテスト実行時のカバレッジが取れる=サーバーのコードのどこを通ったかがわかる があると思っている。特に2番めの理由が大事で、「E2Eテストを全部回した結果、サーバーのこの部分のコードは通っている」とわかるのはけっこう大きなメリットなのではないかと。どこがテストされている・いないを把握することで、「ここはE2Eテストだと難しいからユニットテストでカバーしよう」というような戦法が取りやすいと思う。 じゃあ具体的にGoでどうやっ
忙しい人向けまとめ mysqldumpの--whereオプションを使うと特定のレコードだけmysqldumpできる --whereにはLIMIT句も指定できる --whereオプションで大量のデータから一部だけをmysqldumpすることが可能 本文 mysqldump、データだけエクスポートしたりCREATE TABLEだけエクスポートできたり細かいところまで気が利いているなぁと思うツール。今日知ったのは --whereでdumpするレコードを限定できるよ、ということ。さらに、--whereにはLIMITも指定できるので、「特定の条件にマッチするレコード100件だけ」みたいなエクスポートもできる。 以下、具体例。 $ mysql -u <user> -p<password> <database> mysql> CREATE TABLE hoge ( id INT NOT NULL, na
www.lekcije.com lekcijeという、DMM英会話で講師に空きレッスンがあった時にメール通知するサービスを作った。もともとは下記で書いたものがベースになっていて、これに画面を付け足したという感じ。毎日家に帰ってから自分の空き時間でチマチマ作っていたので半年ぐらいかかってしまった。 oinume.hatenablog.com 作った動機としては DMM英会話はレッスンが終わらないと次の分の予約ができない 人気の講師はすぐ予約が埋まってしまう でも意外とキャンセルが出るので、それを逃したくない という感じ。もちろんお金をかければ1枚500円もするレッスンチケットを買いまくって予約するということはできるのだろうけど、さすがにそれは金銭的につらかったので技術で解決しようという試み。 実装に関して 本当はReactとかも使いたかったんだけど、どうしても時間が取れなくてSPA的なモノは
自分がソースコードを読む時によく使っているIntelliJのショートカット集。もちろんWebStormやAndroid StudioなどIntelliJシリーズなら全部使えるはず。他にもこんなのがあるよ、というのがあればコメントとかTwitterで教えてもらえると嬉しい。ちなみにショートカットのキーバインドはMac前提で書いてます。IntelliJのバージョンは2016.2。 F1: Quick Documentation キャレット上のシンボル(変数/関数)のドキュメントをポップアップで表示。自分は「これなんだろう?」って気になったらとりあえずF1押してる。 Opt + Space: Quick Definition Quick Documentationに加えて、キャレット上のシンボルのソースコードも含めて下記のようにポップアップで表示してくれる。 Cmd + P: Parameter
表題の通りでMySQL Casualで「カジュアルに本番データを開発環境に入れる」というタイトルで発表してきました。 カジュアルに本番データを開発環境に入れる #mysqlcasual from Kazuhiro Oinuma 当日はカジュアルウォーターを飲んでしまい発表時に顔が真っ赤になっていましたが、おかげで全く緊張しませんでしたw Yahooさんありがとう #mysqlcasual pic.twitter.com/zTkRkX6kVN— oinume (@oinume) January 22, 2016 カジュアルウォーターのおかげで緊張しなかった #mysqlcasual— oinume (@oinume) January 22, 2016 自分の発表があったのであまり他の人の話を聞く余裕がなかったのですが、いい感じにまとめられていたのでこれからじっくり読もうと思います。 toge
これはHeroku Advent Calendar 2015 21日の記事です。今回はHeroku Schedulerを監視するDead Man's Snitchというものを紹介します。 Heroku Schedulerってなに? Heroku上で特定のスクリプトやコマンドを動かすcronみたいなもの。「みたいなもの」というのは、cronと違って「何時何分に実行する」というような厳密な時間指定ができず、10分、1時間、1日単位でしか指定ができません。イメージとしては以下のような感じ。 ただ、このような要件でも十分であれば、無料のDynoでも利用できるのがメリットだと思います。 Dead Man's Snitchでコマンドが正常に稼働しているかチェックする Heroku Schedulerで動かしているコマンドが正常に稼働しているかをチェックすることができないか?と思って調べていたらこのDe
次のページ
このページを最初にブックマークしてみませんか?
『oinume journal』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く