サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 16e
qiita.com/po3rin
こんにちは pon です。今日はRustで類似画像検知の実装方法を紹介します。 類似画像検知には様々な方法がありますが、今回は基礎的なアルゴリズムである Average Hash を使った類似画像判定を実装を紹介します。 実際に僕が作った個人サービスでも連写で取られた写真かどうかを判定する箇所で同じアルゴリズムが動いています。 筆者はRust初心者なのでもっと良い書き方や実装があれば教えてください! Average Hash とは 下記のような処理で画像をハッシュ化します。 上記のように画像を0と1だけの一次元配列に変換できれば、あとは0と1が一致している数が多いほど似ていると判断します。かなりシンプルなアルゴリズムですが、それなりに精度が出ます。連写で撮影された画像の判定なんかでは十分な精度が出ます。 下記の画像なんかは簡単に類似画像と判断できます。 Rust で類似画像検索を実装する
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
こんにちはpo3rinです。実装していると通信のリトライを実装したくなることがあると思います。(僕は実際に LINE BotのRate Limitに引っかかり、リトライ機構を実装する必要がありました) 今回は、通信先サーバーに過度の負荷をかけないようにするためのリトライ手法「Exponential Backoff」の実装方法について説明します。 Exponential Backoff とは 少しCloud IoT Coreよりですが、GCPのドキュメントに良い解説がありますので参考に。 https://cloud.google.com/iot/docs/how-tos/exponential-backoff リトライの際に一定間隔で処理を再試行すると、通信を受け取る側のサーバーに大きな負荷がかかる可能性があります。そこで「Exponential Backoff」という考え方が出てきます。「
今回は Elasticsearch + Sudachi でユーザー辞書を使う Dockerfile を作ったので作り方を共有します。 Elasticsearchのバージョンは現行の最新(v7.4.0)ですがv6.8あたりでも動くことを確認済みです。 Sudachi とは Sudachi は日本語形態素解析器です。株式会社ワークスアプリケーションズ下の機関であるワークス徳島人工知能NLP研究所が開発しています。複数の分割単位をサポートしているなどの特徴があります。 ドキュメントはこちら https://github.com/WorksApplications/Sudachi/#sudachi-%E6%97%A5%E6%9C%AC%E8%AA%9Ereadme 今回のハンズオンの最終構成 最終的に下記のような構成を目指します。 . ├── docker-compose.yml └── elas
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 自分は普段はChromeのブックマークを使ってよく見返す記事を保存しています。Goを一年間書いてきてブックマークを整理したのですが、せっかくなのでお世話になったブックマーク記事を晒します。 Blog & Serial The Go Blog Goの公式ブログ。深いところまでしっかり書かれているので、調べたいトピックはまずはここで調べたい。 https://blog.golang.org/ Practical Go GoのcontributorであるDave Cheneyさんのブログです。Goで開発&運用する上でのアドバイスが書かれており
-race をつけてCIを通しているのにAPIがデータ競合で落ちてしまいました。調べていたら-raceがそもそも何をしているかに行き着いたので簡単に共有します。 -race とは -raceはコンパイラフラッグの一種で競合を検知するのに便利です。例えば下記のコードはmapへの読み書きが同時に起こってパニックするコードです。これをgo run main.go -raceのように実行するとwarningを出してくれます。 package main import ( "fmt" "strconv" "time" ) func main() { m := make(map[string]int) go func() { for i := 0; i < 1000; i++ { m[strconv.Itoa(i)] = i // write } }() go func() { for i := 0;
こんにちは!!Goを愛する皆様におかれましてはビッグデータ解析やニューラルネットワークの実装をGoでやりたいですよね!!そうすると嫌が応にも行列の計算が発生します。そこで今回は Go での行列計算をまとめました。 gonum/mat Go で 行列を扱う際には gonum パッケージが鉄板でしょう。gonum は行列だけでなく数値および科学的アルゴリズムの作成を支援するパッケージです。数値計算はこのパッケージに頼りましょう。 ちなみにこのリンク画像は自作サービスで自動生成しています。よかったら使ってみてください! https://qiita.com/po3rin/items/eac851304cf058c532af 行列の基本 行列の作り方と内部構造を知る まずは行列の作り方から package main import ( "fmt" "gonum.org/v1/gonum/mat" )
qiita.com
「Vue.js + Go + AWS + LINE Messaging API」で結婚式のWEB招待状 & 画像解析と共有 & エンディングムービー自動生成システムを開発した!! Introduction こんにちはpo3rinです。先日結婚式があり、タイトルの通り 「Vue.js + Go + AWS + LINE Messaging API」 で結婚式を便利 & 盛り上げるサービスを作ったので共有します。新郎新婦2人ともWEB業界なので結婚式のテーマを「plus plus ( ++ つまりプログラミングにおけるインクリメントを表現)」と少し洒落たテーマで結婚式を作りました。テーマの通り2人のできることを組み合わせて結婚式を作ろうとしたのがこの開発の始まりでした。ウェディング業界のみなさん、お仕事お待ちしてます笑 今回の投稿では下記を中心にお話します。 * 何を作ったか * インフラ構成
こんにちはpo3rinです。 「Go + WebAssembly + BuildKit」 で Dockerfile の依存グラフを図にしてくれる誰得サイトを作ったので紹介します。その名も「Dockerfile Dependency graph」!!! https://po3rin.github.io/dockerdot/ (PCブラウザだけ対応してます) 今回はこれをどのように作ったのかの共有とハマった点を紹介します。リポジトリはこちら!! どのように作ったか 全体像はこちらになります。 内部では Dockerfile から LLB(プロセスの依存関係グラフを定義するために使用されるバイナリ中間言語)を取得して、それをdot言語(データ記述言語)に変換しています。今回はその処理を Go + WebAssembly で書いています。WebAssemblyの基本的な使い方に関してはこちらをご覧
こんにちは。po3rinです。今回はDocker Meetup Tokyo #29 (Docker Bday #6)で少し話題になった小ネタです。タイトル通りDockerfile1つでGoの開発環境(ホットリロード)と本番環境(マルチステージビルド)を記述する方法を紹介します。今回は「この方法をおすすめします!」というよりかは「こういう方法もあるよー」という紹介なので、開発の状況に合わせて方法を選んでいくと良いでしょう。 イントロ 開発環境用と本番環境でイメージビルド過程を分けるモチベーションとしては、開発環境用はホットリロードしたいけど、本番はビルドしたバイナリだけを使いたいという思いなどがあります。 これらを2つのDockerfileに分ける場合、同じディレクトリ階層に「Dockerfile」という名前のファイルを2つ置けません。これに関して、下記の記事のようにdocker build
こんにちはpo3rinです。日本語解説があまりなかったので buildctlコマンドをセットアップを行い、 docker build を使わずに コンテナイメージをビルドする過程を紹介します。OS は Mac OSX を想定してます。 BuildKitとは BuildKitは、命令からイメージレイヤを作成するための操作を行うツールキットです。Buildkit === 次世代 docker build という表現で説明されることも多いですが、Buildkit 自体は Docker とは別物です。そもそも Docker は moby という OSS から作られており、その中の moby/buildkit がイメージレイヤを作成する責務を持ちます。ゆえに、Buildkit は次世代の機能を持ったビルドツールキットと言った感じで、docker build はそれを単に利用していると言った感じです。
こんにちはpo3rinです。GitHub リポジトリのOGP的画像を自動生成してくれるサービスを土日に作ったので紹介します。今まで Qiita等にリポジトリのURLを貼るだけで、クリックされずにスルーされがちだったリポジトリを救うサービスです。 Github Link Card Creator サイトはこちら!! GitHub Link Card Creator 何ができるか。。見てもらった方が早いでしょう。こんなのが作れます。 かっこよいい! 今まで Qiita にリポジトリのURLを貼るだけで、クリックされずにスルーされがちだったリポジトリも、このカードを使うと流入が期待できそうです。やることはただ <GitHub の user name>/<GitHub の リポジトリ名> を入力してエンターを押すだけです。サインインなども不要です。 注意としてはこのサイトで生成するコードは Qii
こんにちはpo3rinです。Vue.js Advent Calender 2018 9日目の記事です。 8日目の記事は vue.js(nuxt.js) の plugin はとても便利 でした。 11月にフリーの案件で Vue.js + Go言語で画像アップロード機能のあるCMSを作りました。Vue.jsでの実装の際には npmモジュールである vue2-dropzone を使うと、Vue.js にとって便利な機能が提供されており、すぐにアップロード機能が作れました。なので今回は Vue.js + Go言語 で画像アップロードを行う機能の実装をハンズオン形式で紹介していきます。 今回は Vue.js のアドベントカレンダーとしての投稿なので、Go言語の実装を飛ばしたい方向けに、Go言語のインストールが不要になるように、すでにDocker環境を用意してあります。せっかくなので今回は Docke
この記事は、Go Advent Calendar 2018の4日目の記事です。実は5日目も投稿したのですが、カレンダーが空いてた&貯めてた記事あったのでここで投稿します! 3日目はkechakoさんの UDP サーバーでクライアント毎に net.Conn を作る #golang でした! 文字列結合が大量に発生すると、Go言語であろうとさすがにコストが高くなる。 そこで Go1.10 から実装された strings.Builder を試し、ベンチマークをとってみる。 LT;DL strings.Builder を使った文字列結合は、普通に += 使うよりは断然早い!キャパシティの付加する strings.Builder.Grow() を使って前もってキャパシティを確保しておく方法が観測上は最速、使い心地も良い。 strings.Builder の中を確認する strings.Builder
この記事は、Go Advent Calendar 2018の5日目の記事です。 「Go言語でつくるインタプリタ」を読んで、プログラミング言語の「仕組み」に興味がでてきた。そして、Go言語だと構文解析が簡単に出来るとの噂が!ということで golang/go パッケージを触ってみると、Go言語で出来る事のイメージが更に広がった。せっかくなので自分のような初心者向けにハンズオン形式で紹介していきます。最終的にGo言語のソースコードから抽象構文木を所得して、そこから更に、抽象構文木を書き換えてGo言語のソースコードに変換するところまでやります。 とりあえず抽象構文木を手に入れてみる 抽象構文木 (abstract syntax tree、AST) とは言語の意味に関係ない情報を取り除き、意味に関係ある情報のみを取り出した(抽象した)木構造のデータ構造です。よってGo言語においてはスペース、括弧、改
Go言語 + Docker で開発することが多くなってきました。ファイル更新の度にローカルでサーバー動作確認して、コンテナで動作確認してーなんてのはめんどくさいので、 Dockerコンテナ内とローカルで volume を貼ってホットリロードできる開発環境を試したので記事にします。 GitHub にも 試したプロジェクトは置いてあります。 https://github.com/po3rin/go-playground/tree/master/hot_reload_docker 構成 とりあえずローカルでの構成を参考に書いときます。プロジェクト名などは柔軟に。
ずっとPython2をチームで使ったけど、開発方法の改善期間を設けたので、ここでPython3に上げることにました。また、メンバーの開発環境がバラバラで、使っているパッケージの共有もできていなかったので、ここらで見直した。今回はPythonの環境構築の方法をまとめたものと、実際の構築手順や、パッケージの共有方法を書きます。 要件 全員の開発環境をパッケージ等も含めて統一したい pythonのバージョン変えてテストとかはしない Docker使うでもいいけどDebugはしたい 初心者もなるべくハマることのない構築手順が良い 候補の洗いだし どれもエディターはVSCodeを使用想定(社内普及率が高い為) pyenv venv pipenv Anaconda Docker + ptvsd pyenv バージョン指定して処理系をとってきて共存させられる。複数のバージョン切り替えしてテストしたいだけな
「MQTTブローカーを使いたいからDocker上でクラスター組んどいて」 フロントエンドエンジニアの僕は言ってることの意味がすべてわからず無事死亡。 Dockerはハンズオンで触ったことある程度だったのでMQTTの概念の理解からDockerコマンドに慣れるまで非常に苦戦した。 MQTTはいわゆるPUB/SUB型のメッセージプロトコル HTTP は片方向なので、クライアントが接続を開始しなければならないが、MQTTは非同期メッセージング・プロトコルなので デバイスまたはセンサーがネットワークから受動的にコマンドを受信できる。また、非常に軽量なので、センサーが沢山あって、細かいデータがバンバン飛んでくるIoT アプリケーションなどに適している。 クライアントは特定のトピックに属するメッセージをパブリッシュするために、メッセージとトピックをブローカーに送信し、ブローカーは、そのトピックにサブスク
Nuxt.js でWEBサイト作っていると、スクロールで何か処理をしたいことがある。 そんなときはカスタムディレクティブが便利。特にスクロールでふわっと要素が出てくる系は、様々な箇所で同じアニメーションロジックを再利用する為、カスタムディレクティブは相性が良いです。 Nuxt.jsでの実装上でのポイント ポイントはドキュメントにも書いてある通り、「カスタムディレクティブは Vue インスタンス作成前に登録されなければならない」という点。Nuxt.js では Vue インスタンス作成前に実行したい処理は plugins ディレクトリがその責務を担います。plugins/README.md に書いてある通りです。 This directory contains your Javascript plugins that you want to run before instantiating t
開発時のめんどくさいコマンドを打ってる時間は極力減らしたいですよね。そこでMakefileなのですが、Makefileのコマンドが多くなったり、複雑になればなるほど「このコマンドなんだっけ」となります。 そこで今回は簡単に Makefile に help をつける方法を紹介します。これをつければチームメンバーに格の違いを見せつけることができます(多分 ##Go言語での開発用のMakefileを例に 今回はGo言語での開発で使う Makefile の基本型を例に紹介します。もちろんGo言語をインストールしてなくても help は動くのでコピペで試せます。 手順は2つ target に help を追加。 grepと正規表現を使ったコマンドをその下に書きます。 target の右隣に ## をつけてその後ろに説明書きを追加します。 実際のMakefileは下のようになります。ちなみにコマンド行
そろそろカード決済の実装経験しとくかと思い、PAY.JPを眺めたらかなりドキュメントが充実してたので使いやすかった。今後、カード決済するサービスを作るのを見越して決済サービスをgRPCでマイクロサービス化してみた。そのまま Vue.js と Go言語を使い、カード決済できるWEBサービスのサンプルを試しに作ってみた。その実装を簡略化してハンズオン形式で紹介します。 全コードは GitHub にあげてます。 (こちらの画像は僕がVue.js+Goで作ったサービスで運用されています。https://ghlinkcard.com/) 得られるもの Vue.js + Go言語で簡易的なSPAをつくる経験 gRPC で簡単なマイクロサービスをつくる経験 PAY.JP を使ったカード決済の流れの理解 今回使う技術スタック フロントエンドは Vue.js。サーバーサイドは Go言語で実装します。それ以外
こんにちは。僕です。最近は Vue.js で SPA、Go言語で APIサーバーを実装しています。ここで意識するのはフロントエンドとバックエンドの分離です。分離させたい理由は二つ。 アプリ化の際や、今後、他のサービスと連携させるためにも、バックエンドはAPIサーバーに徹したい。 Vue.jsで開発中にオートリロードしたい(Vue.jsをビルドして出来たファイルをGo言語でserveする形にすると、毎回ビルドするのが面倒) しかし、これをやろうとすると認証どうするの問題が付いてきます。APIサーバ、フロントの両方をセキュアにしようとするとそれだけで時間取られます。そこで使うのが認証基盤である Firebase Authentication です。これを使うと爆速で認証が作れます。そう、爆速です。Vue.js + Firebase の 解説記事はめちゃくちゃありますが、そこで返ってくるJWT
僕がWEBアプリケーションを作る時、認証周りをどう実装するか毎回悩むのですが、JWT認証が非常に実装しやすかったのでハンズオン形式で紹介していきます。 ##Go言語 サーバーサイドは Go言語でいきます。Googleが開発したプログラミング言語です。フロントエンド畑で育った僕が、なぜサーバーサイドにGo言語を選ぶかというと、主に下記の理由 構文 & 型システムがシンプル。動的言語しかやってこなかった僕でもすんなり受け入れてくれた。 並列処理が書きやすい。JavaScriptで苦戦した非同期処理が難なく書ける。 標準パッケージのサポートが強力。コードのフォーマットも自動でやってくれる。 とにかく開発者に無駄なことをさせないという気迫がすごい。ゆえに書いてて、読んでて気持ち良い。フロントエンドでずっとやってきた僕のような人間が速習でサーバサイドを学びたいと思ったらGo言語を推します。シンプルゆ
普段、機械学習やらAIやらに縁のない僕ですが、WEBエンジニアとしては、現状のAPIがどこまで出来るのか知っておきたいと思い、Google Cloud Vision APIを試してみたので共有します。使う言語はGo言語です。画像のパスを指定するだけの超シンプルなCLIを作ります。 そもそも Google Cloud Vision API って? 物体検知やテキスト抽出などがAPI経由で簡単に実行できるやつ。基本は画像認識はラベリングやら、学習データの設計やら、モデルを作ってなど工数かかるけど、その部分がGoogleがすでに用意した機械学習モデルを使って色々できますよってやつ。しかもAPIに画像投げるだけ。 公式の紹介ページ https://cloud.google.com/vision/ 前提 Go言語が使える環境が整っている GCPにアカウント登録が完了している コマンドラインパラメータ
Node.jsをとにかくデプロイしてみたい! 今回Nowのデプロイの心地よさに感動したので共有。 FirebaseのRDB使ってたから、functions使いたかったけど、無料版だとfunctionsからGoogleのサービス以外のWebAPIたたけないらしい(実際にエラー出された)。ゆえに今回Nowに出会った。 Now とは?? 本家ページ「Now」 https://zeit.co/now nowはNode.jsやDockerで動作するWebアプリケーションをホスティングできるサービス。 認証はメールのみ!設定はpackage.jsonのみでデプロイが可能。 Nowにデプロイ!!! package.jsonにデプロイしたあとに走らせるためのコマンドを記載
次のページ
このページを最初にブックマークしてみませんか?
『@po3rinのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く