ブックマーク / zenn.dev/yag_ays (21)

  • ローカルに立てたアプリケーションを、Cloudflareを使って独自ドメインかつ認証機能付きで限定公開する

    概要 自分が作ったウェブアプリケーションを少数ユーザにさくっと公開して使ってほしい、できればIPアドレス直打ちではなく独自ドメインを使って、なおかつ認証機能も付けておきたい、という条件でクラウドなどあれこれ試した結果、Cloudflareエコシステムで実現することができました。 今回は大まかな技術スタックで実現方法を解説しつつ、あれこれ試行錯誤して選択しなかった方法などにも触れつつ紹介していきたいと思います。 利用したサービス Cloudflare Register ドメインはCloudflareで購入しました。 Cloudflare Tunnels ウェブアプリケーションは、自宅で常時起動しているプライベートなサーバの中でアプリケーションを起動して、それをCloudFlare Tunnelsを使って外部に公開します。 詳細は割愛しますが、以下のようにcloudflared tunnel

    ローカルに立てたアプリケーションを、Cloudflareを使って独自ドメインかつ認証機能付きで限定公開する
    yag_ays
    yag_ays 2023/09/18
  • Elasticsearch&KibanaのHTTPS対応 in Docker Container

    概要 この記事ではDocker Composeで動かしているElasticsearchとKibanaをHTTPS対応して、ローカルで立ち上げたKibanaのAlert機能を使えるようにします (追記:現在Elasticの有料プランに入らなければAlert機能は一部に制限されているようです)。 基的には、以下の記事の通り設定します。とても分かりやすい記事でした、ありがとうございました。 上記記事からの変更点としては、秘密鍵/公開鍵は毎回生成せず一度だけ作成してローカルに配置し、Docker Compose実行時に読み込むようにしています。なぜなら、外部からElaticsearchを叩くときに公開鍵が必要になるからです。 方法 HTTPS通信に必要な鍵の作成と配置 まずはHTTPS通信に利用する鍵を作成します。Elasticsearchが提供しているスクリプトを使うため、この作業もDocke

    Elasticsearch&KibanaのHTTPS対応 in Docker Container
    yag_ays
    yag_ays 2023/09/09
  • Sentryを使ったScrapyのウェブクローリング監視

    クローリング監視の必要性 ウェブサイトのクローリングは、インターネット上の情報を自動的に収集する方法です。機械学習の文脈では、言語モデルや辞書作成などのデータの収集に欠かすことができません。必要な質および量のデータを収集するためには、定期的かつ大規模なクローリングが必要となります。 さて、クローリングを実装し運用する上で問題となるのが、エラーの対応です。インターネットを通じてウェブページをクローリングする際には、以下のような問題が偶発的に発生します。 ネットワーク的な問題でリクエストがタイムアウトする リクエスト先のサーバの問題で、正常にHTMLが読み込まれない ウェブページの構造が変わってしまい、意図した抽出処理が失敗する 上の2つは実行時の外部環境に起因するため時間を空けたり再実行することで解決することがありますが、最後の1つは外部環境の変化に対して自身のコードが対応できていない問題で

    Sentryを使ったScrapyのウェブクローリング監視
    yag_ays
    yag_ays 2023/09/03
  • 本質的ではないが重要なNotionドキュメンテーション作成テクニック

    はじめに みなさんはNotionを使っていますか?私は仕事でもプライベートでも活用しています。Ubieという私が所属している会社ではドキュメントは全面的にNotionを使用しており、仕事の細かなドキュメントや議事録から、外部に公開するためのカルチャーガイド(UPP)まで、様々なところでNotionが使われています。 ドキュメンテーションの質は、とにかく文書を書くことです。その上で、それをどうやって人に読んでもらうか、意図を理解してもらうか、ということが次に来ます。読まれる場所に文書があったからといって、それが乱雑に言いたいことを書きなぐった文書だったり、短編小説レベルの長文であれば、それを人が上から下まで完璧に読んで理解してくれると期待することは酷でしょう。伝えたい内容が簡潔に記してあり、かつそれが読者の目を惹いてかつ読みやすい形になっていて、初めて伝わる文書であると私は思います。 そこ

    本質的ではないが重要なNotionドキュメンテーション作成テクニック
    yag_ays
    yag_ays 2023/02/23
  • Khadas VIM4のデバイス固有のセットアップ

    Khadasのシングルボードコンピュータ(SBC)であるVIM4の、デバイス固有のセットアップを行う。 スペック Khadas VIM4 Amlogic A311D2 Khadas 新M2Xエクステンションボード - M.2 SSD ちなみにkhadas DIYケースを購入したが、M2Xエクステンションボードを装着すると格納できなかった。 情報 公式ページ: VIM4 | Khadas ドキュメンテーション: VIM4 [Khadas Docs]

    Khadas VIM4のデバイス固有のセットアップ
    yag_ays
    yag_ays 2022/11/23
  • FaissをソースコードからビルドしてGPUで利用する

    概要 Faissは、Facebook Research (現Meta Research) が開発した近似最近傍探索 (Approximate Nearest Neighbor: ANN) のライブラリです。C++で実装されており、GPUでの実行にも対応しているほか、PythonのWrapperも提供されいます。Pythonパッケージではfaiss-cpuとfaiss-gpuの2種類が存在し、公式ではAnacondaでのインストールを推奨しているのですが、PyPIからもパッケージがインストール可能です。 GPU環境でのFaiss実行を試みたのですが、現在PyPIで提供されているfaiss-gpu==1.7.2では私の環境では正常に動作しませんでした。そのためソースコードからビルドしてインストールしたのでその経緯と、最後にGPU/CPUの簡単なベンチマークを紹介したいと思います。

    FaissをソースコードからビルドしてGPUで利用する
    yag_ays
    yag_ays 2022/11/04
  • 任意のCUDAバージョンのPyTorchをPoetryでインストールする

    2023/07/03追記 Poetry 1.5.1より、指定したソースからのインストールが容易になったようです。下記記事を参考ください。 Poetry1.5.1からGPU版のPytorchのインストールが簡単になりました PyTorchからGPUを利用するためには、CUDAのバージョンに合ったパッケージをインストールする必要があります。PyTorchの"Get Started"ページでは、プラットフォームやバージョン、パッケージマネージャーを選択すると、それに応じたインストールコマンドが表示される仕組みがありますが、ここにはPoetryは含まれていません。 そこでこの記事では、Poetryを利用しているプロジェクトにおいて、任意のCUDAバージョンのPyTorchパッケージをインストールする方法を解説します。 方法 実現する方法はいくつか存在するので、それぞれ解説していきます。ここでは、例

    任意のCUDAバージョンのPyTorchをPoetryでインストールする
    yag_ays
    yag_ays 2022/10/26
  • TelegrafでNature RemoのCloud API情報を取得する

    概要 家に転がっているRaspberry PiでTelegraf/InfluxDB/Grafanaの時系列DB&可視化環境を整備したので、今回はTelegrafというメトリクス収集のツールを使って、自宅に設置してあるNature Remo Eから得られる電力の情報をCloud API経由で取得してみようと思います。 方法 Nature Remo Cloud APIの設定 Nature RemoのCloud APIを利用するために、まずは home.nature.global からOAuth2のアクセストークンを発行しておきます。 そして今回は/1/appliancesのエンドポイントを利用します。リクエストのheaderに先ほどのOAuth2のアクセストークンを設定し、下記のようにcurlコマンドで叩いてみます。 curl --request GET \ --url https://api

    TelegrafでNature RemoのCloud API情報を取得する
    yag_ays
    yag_ays 2022/06/21
  • NLP Hacks Vol.3で「時間情報表現抽出とルールベース解析器のこれから」という題で登壇しました

    2022/04/08に開催されたNLP Hacks vol.3にて、「時間情報表現抽出とルールベース解析器のこれから」という題でLTをさせていただきました。主催のELYZA様および参加くださった皆様、ありがとうございました。 この記事ではLTで触れることのできなかったja-timex公開後からいままでの経緯や、今後のja-timexの方向性について、少し補足を兼ねてお話できればと思います。 ja-timex公開後の変化 ja-timexの開発開始は2021/7/18、初めてのリリースが2021/08/01、Zennでの紹介記事の公開が2021/08/03でした。その後地道に機能改善やバグ修正を含め開発を続けてきましたが、公開後に変わったことが幾つかあります。 normalizeNumexpのPython実装の出現 登壇資料でも触れましたが、元々は東北大乾研による数値表現や時間表現の解析器で

    NLP Hacks Vol.3で「時間情報表現抽出とルールベース解析器のこれから」という題で登壇しました
    yag_ays
    yag_ays 2022/04/11
  • 自作ウェブアプリを使って自分でJVS/声優統計コーパスの読み上げを録音した話

    概要 以下の記事で「簡単に原稿を読み上げて録音できるウェブアプリケーションをStreamlitで作った」というツールの紹介をしました。 ソフトウェア開発界隈ではEat your Own Dog foodという言葉があるように、作ったからには自分で試してみないとねということで、私も自分の声の音声データを作成してみました。この記事では、自作の原稿読み上げウェブアプリケーションを自分で利用しながら感じた使用感や、音声データ収集の難しさについて雑多に書いてみようと思います。 読み上げ対象 今回はJVSコーパスにおけるvoiceactress100を読み上げました。これは声優統計コーパスが作成した音素バランス文100文に対して、句読点情報が付与されたものです(参考)。また、読み上げ時にはルビ情報が付加された以下のサイトに掲載されているテキストを利用しました。 読み仮名(ルビ)つき声優統計コーパス音素

    自作ウェブアプリを使って自分でJVS/声優統計コーパスの読み上げを録音した話
    yag_ays
    yag_ays 2022/03/07
  • 簡単に原稿を読み上げて録音できるウェブアプリケーションをStreamlitで作った

    Tojiが動作している様子 概要 YouTubeなどの動画サイトを開くと、最近流行りのVTuberゲーム実況などで、音声合成や声質変換を活用している様子を見かけることが多くなりました。私はゆっくり実況を見すぎて逆にあれが自然に思えてくるくらいの人間なのですが、自然な音声合成や声質変換の技術発展には目を見張るものがあります。 私も興味があってそうした音声情報処理の世界に片足を突っ込み始めているのですが、ディープニューラルネットを利用した各種タスクでは、ドメインが変わったとしてもデータ量が物を言う世界には違いがないようです。音声に関する代表的なデータセットとしては、Common Voice、声優統計コーパス、JUSTコーパス、JVSコーパスなどがあります。こうしたコーパスや音源を利用することで気軽に各種タスクに適用することができますが、既存製品と肩を並べたり実用に耐えうるものを作ったり、また

    簡単に原稿を読み上げて録音できるウェブアプリケーションをStreamlitで作った
    yag_ays
    yag_ays 2022/03/07
  • Flask/FastAPIライクなルーティングとパスパラメータの仕組みを、単純な実装から理解する

    ウェブフレームワークのシンプルな実装の背景 FlaskやFastAPIといったウェブフレームワークでは、以下のようにアクセスするエンドポイントのパスとその処理内容を一つの関数で実現したり、パスをパラメータ化して関数内部で利用することができます。 # FastAPIの事例 (公式ドキュメントより) @app.get("/") async def root(): return {"message": "Hello World"} @app.get("/items/{item_id}") async def read_item(item_id): return {"item_id": item_id} これまでは何気なく便利だなと思いながら利用していたのですが、内部ロジックやその実装背景をきちんと理解していませんでした。よくよく考えると、どういう方法でパスパラメータはデコレーター引数の文字列の一

    Flask/FastAPIライクなルーティングとパスパラメータの仕組みを、単純な実装から理解する
    yag_ays
    yag_ays 2022/02/21
  • 機械学習の推論WebAPIの実装をテンプレート化して使い回せるようした

    概要 機械学習を利用したウェブサービスを開発していると、WebAPIとして外部から利用できる形で機械学習の推論を実行可能にしたいということがよくあると思います。私も幾度となくそうした実装をする中で使いまわし定番のコードを用意しているので、知識の棚卸しや改めて新しい技術を学ぶという意味でも、久しぶりに構造や技術スタックを刷新したものを今回作成しました。 そこで記事は、テンプレート化した機械学習のWebAPI実装の構成と、そこから実際に機械学習の推論を行うWebAPIを作る過程を書いてみようと思います。 テンプレートプロジェクト 今回作ったテンプレートプロジェクトはyagays/fastapi-ml-templateです。 利用しているパッケージ/ツール 利用している技術スタックとしては以下のようになっています。 Web API Pythonのパッケージ依存関係管理: Poetry Webフ

    機械学習の推論WebAPIの実装をテンプレート化して使い回せるようした
    yag_ays
    yag_ays 2022/02/17
  • StreamlitでGoogle OAuth2.0を使った認証を行う

    概要 Streamlitは、Pythonで気軽にインタラクティブなウェブアプリケーションを作ることができるパッケージです。私自身も機械学習を使ったデモや可視化ツールとして積極的に活用していますが、そうやってStreamlitアプリを量産して適当にホストしていると、だんだん社内で利用する人が増えてきたり、社外の協力者に使ってもらうことを検討し始めたり……。 そして発生するのがアクセス制限と認証の問題です。特に外部IPで公開する場合は、URLを知っている人なら誰もがアクセスできる状態になってしまい、アプリケーションの内容によってはセキュリティ的に問題となります。私はこれまでStreamlitでid/passの入力ボックスを実装してみたり、GCE上で動いているnginxでBASIC認証を行うなどして制御してきたのですが、やはり個人でアカウント情報を管理するのは面倒かつ不安で、何かしらの基盤上で統

    StreamlitでGoogle OAuth2.0を使った認証を行う
    yag_ays
    yag_ays 2022/01/12
  • Pythonパッケージを公開するときに便利なツール/サービス

    先日ja-timexというPythonパッケージを作成してPyPIに公開したのですが、開発に利用している便利なツールやサービスを紹介します。 Poetry Pythonのパッケージ管理/依存解決ツールとして広く利用されはじめているPoetryですが、パッケージとして公開するための機能も優れています。 具体的には、以下の3ステップでPyPIにリリースすることができます。 $ poetry config pypi-token.pypi $pypi-token # 最初だけ $ poetry build $ poetry publish 従来setup.pyに記載していたパッケージ公開用の各種メタ情報はpyproject.tomlに記載します。 また、PyPIのテスト環境へのリリースもサポートしています。PyPIの番環境では同じバーション番号のファイルをリリースできないため、ちょっとでも不具合

    Pythonパッケージを公開するときに便利なツール/サービス
    yag_ays
    yag_ays 2021/08/06
  • テキストから日付や時間を抽出するPythonパッケージ ja-timex を作りました

    語の自然言語で書かれたテキスト中から、日付や時間、期間、頻度といった時間に関する表現を抽出し、Pythonのdatetime/timedelta形式に変換できるPythonパッケージ ja-timexを作りました。この記事では基的な使い方や動作の仕組み、このパッケージの実装方針を紹介します。 ja-timexとは 皆さんも一度はテキスト中に現れる日付や時間を正規表現でパースした経験があるのではないでしょうか?もしくはdatetime.strptime(str, '%Y/%m/%d %H:%M')といったように、datetimeに変換するパターンを書くこともあるでしょう。こうしたプログラム上で日付や時間を扱うことはよくある作業であるものの、入力されるフォーマットが複雑になったり、日付がテキストの中の一部に含まれたりすると、途端に処理が面倒になります。日付や時間は決まったルールに従ってい

    テキストから日付や時間を抽出するPythonパッケージ ja-timex を作りました
    yag_ays
    yag_ays 2021/08/03
  • Docker ComposeでElasticsearch + Sudachiの環境を構築する (2022/08版)

    概要 この記事では、全文検索エンジンElasticsearchに形態素解析器Sudachiを利用する環境をDocker Composeで簡単に構築する方法を説明します。 こうした記事はウェブ上で多く書かれておりますが、バージョンや設定が古くなっていたりとそのままでは動かなくなっているため、現時点での構築事例ということでアップデートを行いたいと思います。当然ながら記事も古くなっていくものと思われますので、2021/05 2022/08時点での最新という点に留意ください。 (追記 2022/08/23) バージョンアップを行いました。 Elasticsearc: 7.10.1 → 7.17.3 SudachiDict: sudachi-dictionary-20201223-core → sudachi-dictionary-20220729-core 環境 Elasticsearch: 7

    Docker ComposeでElasticsearch + Sudachiの環境を構築する (2022/08版)
    yag_ays
    yag_ays 2021/05/21
  • Sudachipyの設定ファイルにユーザ辞書を自動で追加するスクリプト

    概要 形態素解析器Sudachiでユーザが任意の辞書ファイルを利用するには、設定ファイルの項目userDictにファイルパスを追加する必要があります。オジリナルのSudachi自体やPython版のsudachipyでは設定ファイルをjson形式で渡すことで自由にユーザ辞書を使うことができますが、sudachiをバックエンドで使っている別のシステムなどでは、設定ファイルを自由に渡すことができない場合があります。そうした状況では設定ファイルを直に書き換える必要がありますが、Pythonパッケージとしてインストールされた設定ファイルを探し出して変更を加えるのは大変ですし、Dockerなどの環境構築時に利用できない問題があります。 そこで、spaCy+GiNZAを利用している状況において、GiNZAが利用するsudachipyの設定ファイルにユーザ辞書のパスを追加するためのスクリプトを作りました

    Sudachipyの設定ファイルにユーザ辞書を自動で追加するスクリプト
    yag_ays
    yag_ays 2021/05/15
  • doccanoをCloud Runにデプロイして複数人で利用できる環境を構築する

    この記事ではCloud Runのコンテナ上にアノテーションデータが保存されますが、Cloud Runはインスタンスの常時起動が保証されません。意図しないインスタンス停止等でアノテーションデータが消える場合があり、恒久的な環境構築には向かないのでご注意ください。 概要 doccanoはOSSで開発されている自然言語処理向けのアノテーションツールです。この記事では、doccanoをCloud Run上にデプロイして、複数人が異なる環境からアクセスしてアノテーション作業を行えるような環境を構築します。 方法 DoccanoレポジトリのOne-click Deploymentからデプロイ doccanoのGitHubレポジトリには「One-click Deployment」という項目があり、AWSGCPなどのクラウド環境にデプロイできるボタンが提供されています。今回はこのボタン経由でサービスを作

    doccanoをCloud Runにデプロイして複数人で利用できる環境を構築する
    yag_ays
    yag_ays 2021/04/19
  • CVATで爆速でアノテーションを付与する - 画像分類編

    概要 機械学習プロジェクトにおいて、学習データをいかに効率よく大量に収集するかは大きな課題です。学習データのサイズによって取りうるアプローチも異なりますし、モデル精度にも大きく影響します。ウェブサイト等から自動で収集できるケースを除いて、多くの場合は人間が手動でアノテーションを行う必要がありますが、機械学習を試すことができるほどの量を集めるには時間とコストを要します。大量のデータを作成するためには、効率よくアノテーションをする環境を整えることが大事です。 この記事では、CVATというアノテーションツールを使って、画像分類の学習データを高速に作成する方法を紹介します。 デモ 実際にアノテーション付与をしている様子です。画面左下にキーボードで入力したキーが表示されています。1と2しか入力していないですが、逆に言えばそれだけでアノテーションが行える環境が構築できます。 方法 ここからはCVATで

    CVATで爆速でアノテーションを付与する - 画像分類編
    yag_ays
    yag_ays 2021/02/22