テック

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…

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

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

Python scikit-learn 凝集型クラスタリングを使用する

凝集型クラスタリングとは データポイントを単クラスタと仮設定し、最も似たクラスタ同士を指定の数のクラスタ数になるまで集めていく。 また、クラスタの結合は少ない数のクラスタ同士で結合していこうとする。 "最も似た"のアルゴリズムは以下の3種類があ…

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

k-means クラスタリングとは 指定したクラスタの数の重心点を配置し、最も近いデータポイントに対して1次クラスタ分けを行う(Assign Point(1)) 各クラスタごとの重心点をクラスタの重心に合うよう移動させていく(Recompute center(1)) 重心点を移動させたこ…

Python scikit-learnでt-SNE 多様体学習を可視化する

t-SNE 多様体学習 高次元データの各データポイントの類似度を距離として計算し、2次元(または3次元)空間に配置したランダムな点に距離を元にして配置していく。 2次元または多くても3次元に圧縮するのが一般的らしい。また、学習モデルを別の行列に対してtra…

Python scikit-learnでNMF分解を行う

非負値行列因子分解(NMF)とは、PCAと違って、第2成分以降が直交するベクトルではなく、すべてのベクトルが正の方向指す分析ベクトルとなる。 特徴量ごとにまとまりのあるデータに対しての特徴が掴みやすくなる。らしい。 元となる行列に近似する行列Yとなる…