Rust lettreで日本語を含むメールを送信

MTA含めてハマりまくったので記録しておきます。 ローカルMTAを使う場合、 現在の最新lettre 0.10-alphaの場合、 SmtpTransport::unencrypted_localhost(); 0.9の場合、 SmtpClient::new_unencrypted_localhost().unwrap().transport(); 但し、Dockerで25por…

Rust rusoto_s3でS3読み書き用署名付きURLを取得する

rusoto_s3でS3非公開bucketへのpresign URLを取得したので記録しておきます。 参考にしたページ rusoto/s3.rs at master · rusoto/rusoto · GitHub rusoto_s3 presignで検索するも上記のテストコードしかめぼしい情報がなく、テストコードを読み進めていく。…

Rust Futureを返す非同期関数を高階関数で使用する

例えば、以下のような関数。 pub async fn func_name() -> String { "".to_string() } 実際は以下のようにimpl futures::Futureが返される関数のようになる。 pub fn func_name() -> impl futures::Future<Output = String> で、こういった関数を、高階関数の引数として与えた</output>…

Vue TypeScript マウント済みコンポーネント再利用時に非同期処理を行う。及びVuexのwatchについて

普段、非同期でデータを取ってきてデータを表示する時は、createdライフサイクルで非同期でこと足りるんだけど、$router.pushで同じコンポーネントに遷移しようとした場合、mount済みコンポーネントを再利用しようとして、created, mountedなんかが呼び出さ…

vue-router遷移時にbootstrap JQueryがリロードしないと動作しない

vue + bootstrapで構成したページ。 signin成功時に this.$router.push("/"); いつも通りvue-routerにpushするも、遷移先のページでbootstrapのJQueryが動作しない...。 ブラウザをリロードすると動作するんだけど(^_^;) ググってみるとRailsにはそういった…

Rust Diesel r2d2のpool数設定

diesel = { version = "1.4.4", features = ["postgres", "chrono", "r2d2"] } で、r2d2でconnection poolingを使用する時。 デフォルトのpool数は10個みたい。 で、actix-webなんかだと起動時にアプリケーションが4スレッド立ち上がるので、4 * 10個のセッ…

Rust 親子関係を持つレコードを木構造に変換する

以下のような親子(id -> parent)関係のあるレコードを、 [ { id: "1", parent: "", name: "/", path: "/", child_count: 0, depth: 1 }, { id: "2", parent: "1", name: "home", path: "/home/", child_count: 0, depth: 2 }, { id: "3", parent: "2", name:…

Rust jwtの発行と検証

actix-webでjwtの発行と検証を行ったので記録しておきます。 Cargo.toml こちら GitHub - Keats/jsonwebtoken: JWT lib in rust を使用しました。 jsonwebtoken = "7" jwtの生成 例として8時間まで有効のjwtを生成。尚、expireを指定しないとjwt decode時にt…

Rust Dieselでプリペーアドクエリを発行する

ドキュメントには、 let users = sql_query("SELECT * FROM users WHERE id > ? AND name <> ?") .bind::<Integer, _>(1) .bind::<Text, _>("Tess") .get_results(&connection); diesel::query_builder::SqlQuery - Rust とあるけど、MySQLとPostgreSQLでプレースホルダー指定子が</text,></integer,>…

Rust Disel DBのデフォルト値を使いつつ、model bindと共存する

fetch処理前提 例えば、select * from ...と全カラム取得する場合、bindするmodelの定義は #[derive(Debug, Clone, Queryable, Identifiable)] pub struct Account { pub id: String, pub name: String, pub email: String, pub password: String, pub avata…

Rust validatorを導入する

actix-webにvalidation処理を導入したので記録しておきます。 使用したcrateはこちら。 GitHub - Keats/validator: Simple validation for Rust structs Cargo.toml validator = { version = "0.12", features = ["derive"] } deriveを指定することでstruct…

Rust UUIDとパスワードハッシュを生成する

UUIDの生成 uuid crateを使用します。 uuid - Rust Cargo.toml uuid = { version = "0.8.1", features = ["serde", "v4"] } 生成処理のサンプル use uuid::Uuid; let uuid = Uuid::new_v4().to_hyphenated().to_string(); パスワードハッシング アルゴリズム…

Rust mockallでモックインスタンスを導入する

RustでのUnit test時にモックインスタンスを導入したので記録しておきます。 mockallの導入 Cargo.toml [dependencies] mockall = "0.8.3" mock化するインスタンスの作成 自分の場合はDBアクセスを行うRepositoryインスタンスをモック化した。実際にDBアクセ…

Rust Dieselでトランザクション処理

updateの更新結果件数を見てcommit or rollbackなんかしたかったので、明示的にbegin, rollback, commitできるインターフェースが欲しかった。 ちょっと探してみたけど、見当たらなくて、transaction_builderなんてものもあったけど、どうやら隔離レベルを指…

Rust actix-webのデバッグログについて

アクセスログについてはこのページのように記述すると actix_web::middleware::Logger - Rust midleware登録でサクっと出ると思うんだけど。 async fn main() -> std::io::Result<()> { std::env::set_var("RUST_LOG", "axtix_web=info"); env_logger::init(…

Rust actix-webでプリフライトリクエストをチェックする

actix-webでAccess-Control-Allow-Origin絡みのやつ。 actix-corsをmidleware利用する。 actix_cors - Rust Cargo.toml [dependencies] actix-web = "3" actix-cors = "0.5.3" midlewareの登録 上記の実装例を見ながら、全originからのリクエストを許可する…

Vue & TypeScriptの既存プロジェクトにCoreUIテンプレートを組み込む

作業途中だけどメモしておきます。 管理画面テンプレートのCoreUIのコンポーネントを既存Vue(TS)なプロジェクトで利用可能にする。まで。 一から作る場合は、https://github.com/coreui/coreui-free-vue-admin-template のプロジェクトをcloneなんかしてカス…

Rust dieselを既存DBに適用する

Rust dieselクレイトを運用中既存DBに適用したので、手順をメモしておきます。 依存関係の定義 データベーススキーマは通常通りDATABASE_URLに定義しておく。 自分の場合は.envに記載しておいた。 DATABASE_URL=postgresql://postgres:password@localhost:54…

Vue3 v-for内でrel属性を使用する

ハマったのでメモしておきます。 利用したVueはCDNの <script src="https://cdn.jsdelivr.net/npm/vue@3.0.0/dist/vue.global.js"></script> v-for内にrel属性を配置すると$refsに配列で参照できることを期待したんだけどうまく行かなかった。 <tr v-for="(item, index) in items"> <td> <span v-if="!item.editable" @click="edit(item, index)">{{ item.name }}</span> </td></tr>

Spark graphxで空港路線情報を解析する

データのダウンロード 書籍通り、米国運輸省のサイトからダウンロードします。 https://www.transtats.bts.gov/DL_SelectFields.asp?Table_ID=236&DB_Short_Name=On-Time On-Time : Reporting Carrier On-Time Performance (1987-present)は Filter Geograph…

PythonでSpark Streamingの動作を試す

書籍で紹介があったSpark Streamingの動作を試してみます。 HDFSは構築するのが億劫なので、masterノード上にある/tmp/dir01をウォッチします。ファイルの作成を検知した時、" "で区切られた単語を集計する簡単なプログラム。 streaming.py # -*- coding:utf…

Dockerでapache Sparkのローカル学習環境を用意する

最近、Hadoop周りの学習を始めて、Sparkをもと思いこちらの書籍を購入。学習環境を構築しました。 (function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a; b[a]=b[a]||function(){arguments.currentScript=c.currentScript ||c.scripts[c.scripts.length-2];…

RailsからS3オブジェクトをアップロードする

RailsアプリケーションからS3オブジェクトを作成します。 gem aws-adkが必要となるので、Gemfileに記述し、記述後bundle installを行います。 gem 'aws-sdk' AWSクレデンシャルの設定 S3にアクセスロールがあるIAMユーザのクレデンシャルをAWSクライアントに…

Heroku PostgreSQLのデータをpg_dumpする

ローカルでpg_dumpが実行できる(PostgreSQLがインストール済など)の前提で。 Heroku DBのクレデンシャルを確認 $ heroku pg:credentials:url --app YOUR_APP_NAME で、クレデンシャルが確認できる。 Connection information for default credential. Connect…

OSアップデートしたMacにRailsを再構築したら結構大変だった話し

opensslの章 しばらくメンテしていないRailsアプリを久しぶりに起動しようとすると以下のようなエラーが。 Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib (LoadError) 多分、rubyが指すopensslのバージョンとアップデートされたopenss…

グーグルマップ ストリートビューで日本の原風景を味わう 国道197号+320号編(4)

ラスト。宇和島まで向います。 広がる田園風景がとても素敵です。 美しい田園風景 広がる田園風景。抜けてて綺麗(^_^) 360度大パノラマ。最高だね(^_^) 何度でも見返す為の記録用。映画とかアニメで出てきそうな風景。 381号(江川崎方面)との合流地点。381号…

グーグルマップ ストリートビューで日本の原風景を味わう 国道197号+320号編(3)

今回は愛媛県から。車窓からの風景に癒されます。 愛媛県をドライブ 青空と山の緑のコントラストが綺麗。歩くと大変なんだろうなあ... 木漏れ日が綺麗すぎる一枚。 赤い鉄橋が綺麗。197号から離れて320号に入る。宇和島からの帰り道、ここでよく道に迷ってた…

グーグルマップ ストリートビューで日本の原風景を味わう 国道197号+320号編(2)

今回は檮原から。 檮原を出発 檮原の街並み。山間部をドライブしているとこういう街並みにたどり着くとホッとするよね(^_^) 営業してる。よね...?(^_^;) 交通安全用のカカシ。これ夜に運転してるとギョっとするよね(^^;)。鬼北のほうにもう一体見つけたんだ…

グーグルマップ ストリートビューで日本の原風景を味わう 国道197号+320号編(1)

今年の夏はどこへも行けそうにないので、気分だけでもと、Google ストリートビューで綺麗な風景を味わってきました。 山での涼と綺麗な田園風景を目の保養にと選んだのは国道197号 + 320号。 この道は交通量も少なく道も綺麗で、免許取り立ての頃、よく友人…

Python scikit-learn DBSCANでクラスタリングする

DBSCANとは DBSCANはクラスタに属さないデータポイントも判別できるアルゴリズム。 各データポイントは距離esp内にmin_samplesの他データポイントがあるか確認し、存在する場合は範囲内のデータポイントをクラスタ化する。 距離esp内のデータポイントがmin_s…