ソモサン

私rohkiによる活動や読書の記録をつらつらと書くページです

Rust の CLI ツールで引数の値が特定のものであれば別の引数を必須にしたい

短く crap.rs の requires_if/requires_ifs を使おう。 .arg( Arg::with_name("iterator-type") .short("t") .long("iterator-type") .possible_values(&IteratorType::variants()) .requires_ifs(&[ ("AT_SEQUENCE_NUMBER", "sequence-number"), ("AFTER_SE…

Rust でクロスプラットフォーム対応するときに便利だった Cargo Plugin: cross

これ github.com 使い方 cargo install cross cross build --target i686-unknown-linux-gnu 実際に Travis で動かしている k-iter/.travis.yml at master · ROki1988/k-iter とかを見るとよいかも。 発端 rohki.hatenablog.com 前回 AWS Kinesis Stream を…

CLI で AWS Kinesis Stream の中身をひたすら追ってくれる k-iter をつくってる

作ったもの github.com インストール方法 rustup.rs - The Rust toolchain installer rustup を設定したうえで、下記コマンドを実行。 cargo install --git https://github.com/ROki1988/k-iter.git もしくは Releases · ROki1988/k-iter より合致するものを…

Rust で Scala の continually ぽいもの

こんな感じ? extern crate rand; use rand::{Rng, thread_rng}; use std::usize; pub struct Iterate<A> { func: A } impl<B, A> Iterator for Iterate<A> where A: FnMut() -> B { type Item = B; #[inline] fn next(&mut self) -> Option<B> { Some((self.func)()) } #[in</b></a></b,></a>…

Elasticsearch のクエリを知るのに elastic4s がよかった

Elasticsearch はややこしい ややこしいというか難しいというか、面倒くさいというか… で考えたところ、そも JSON を組み立てるのがそこそこ以上にしんどいんですよね。末尾の , とか。 Kibana も補完はあるのですが、そのあたりが面倒くさくて、なんか学ぶ…

Scala で Array 等を制限に合わせて分割する

短く grouped(size) を使いましょう 背景 Scala で AWS Kinesis へ PutRecords しようとしたときに、上限に引っ掛かりました。 で今回抵触した上限というのが、PutRecords 1 回あたりに含められるレコード数で、500 までとのこと。*1 なので 500 毎に分割し…

Prometheus + Grafana + Elasticsearch + Kibana を Docker でいじり中

prometheus.io いじってます。 進捗 docker-compose.yml はこんな感じ version: '3' services: prometheus: image: prom/prometheus container_name: prometheus volumes: - .\prometheus.yml:/var/app/prometheus/prometheus.yml command: - '--config.file…

elastic4s の json ライブラリ切り替えの実装にちょっと感動してる話

いつかの続き GitHub - sksamuel/elastic4s: Elasticsearch Scala Client - Non Blocking, Type Safe, HTTP, REST API, TCP リポジトリは上記。 elastic4s/package.scala at master · sksamuel/elastic4s · GitHub で、件のコードがこの辺り。ひっじょうに薄…

Kinesis Firehose のデータ変換 Lambda を Golang で作って計測してみた

概要 前回 やるといってたやつです。 AWS Lambda が Golang を公式サポートしたので、これまでやってきたのと同じような Lambda を作って計測してみました。 先に結果だけ書くと、 Rust: 55.8 k レコードを 23.4 秒で処理 => 1 秒あたり約 2384.6 レコードを…

API Gateway の Kinesis Proxy で追跡性をちょこっと上げてみる

AWS

結論 本文マッピングテンプレートを以下のようにします #set($inputRoot = $input.path('$')) #define ($data){"requestId": "$context.requestId","data": "$inputRoot"}#end { "StreamName": "STREAM_NAME", "Data": "$util.base64Encode($data)", "Partit…

CodeStar で AWS Lambda + Golang の雛形をサクッと作成してみた

前回 Golang サポートしたらやってみるといってたので、まずは雛形作成と調査だけ。Golang しっかり書いたことないですし。 CodeStar で雛形作成 AWS Lambda Supports Go をよむと CodeStar に対応しているぜー とかいてあったので、そちらで作りました。 gi…

Kinesis Firehose のデータ変換を Rust でやってみて速度向上が見込めた話

概要 Rust コードを Lambda 上で動かせたーと喜んだんですが、活用どころあるんだろうかと考えてみて検証してみました。 結果として Python 比較で1秒当たりで 15 倍ほど多く処理できました。 以下でつらつらと書いていってます。

AWS Lambda 上で Rust のコードを実行しようとして結構頑張った話

短く OpenSSL はやはり鬼門 というわけでできたー。下が成果物。 github.com

Q. 2017/12/9 の AWS Lambda の OpenSSL のバージョンは?

import ssl def lambda_handler(event, context): return ssl.OPENSSL_VERSION チェック! 結果: "OpenSSL 1.0.0-fips 29 Mar 2010" おし、めんどくさくなってきた。 情報元: OpenSSL 1.0.2 Shared Library missing · Issue #855 · Miserlou/Zappa · GitHub

AWS Lambda の Traffic Shifting Using Aliases で無理やり Chaos Engineering

できんじゃねと思ったらできました。無理やり。 この間発表された AWS Lambda の更新で、エイリアスに対して割合で別バージョンを割り振ることができるようになりました。 ユースケースとしては Canary や Blue/Green が上がってたんですが、Chaos もいけん…

Rust の ライブラリ Rusoto を使って AWS サービスにアクセスする

表題にあるとおり、Rust から AWS にアクセスするための SDK を大分前にメモしていたので試した、という話。 extern crate rusoto_core; extern crate rusoto_s3; use rusoto_s3::{S3, S3Client}; use rusoto_core::{DefaultCredentialsProvider, Region}; u…

Swagger を使って ChatWork といろんなサービスをつなげてる (条件付き)

ChatWork とほかのサービスを連携させようとする場合、選択肢は Zapier か自前実装かと思ってます。 で、そこでタイトルにある第3の選択。Swagger があればどうにかなる。MS Flow のカスタムコネクタで。

Windows でプロセスごとの TCP IO をとってグラフにした

まぁいうてリソースモニターでできてることなんですが… それでも面白いことがあったので。 結果はこんな感じ。 時々帯域をとってるのは、Firefox の通信です。 ブラウジングはこんなもんですかね。サイズ的にも KB なので、そこまでがっつり見に行ってなかっ…

Grafana で AWS の見える化がすぐできた

いやー、すごい。 わかったらすぐできました。 例として AWS の使用料を見える化します。 まず、AWS 側で計測をはじめるため、請求ダッシュボード -> 設定 -> 請求アラートを受け取る にチェックをつけます。 で、Grafana を公式サービスおひとり様用で作成…

Rust で Vector データを Map + Vector にいれる

どんな状況だったかというと、JSON で設定ファイルを書く必要があってそれが複数人にいじられるという感じで、マージで地獄を見たのでまずは TSV でどうにかしてみよう、となったときに書いたやつです。*1 ほんと JSON はマージしづらくてかなわん。 そして…

なんとなく思いついた Scala でのライブラリ切り替え

今日オブジェクトのシリアライズ形式を切り替える方法考えなきゃで、ぼんやりと思いついた方法。 trait DataFormat { type Format type Formatter[T] def ser[Data: Formatter](input: Data): Format def de[Data: Formatter](input: Format): Data } trait …

Scala spray-json の書き分けパターンのメモ

なんか、あとどれだけ json シリアライザを書けばいいんだ…ってぐらい書いて知見がまとまったのでメモ。 といっても大体 本家のReadme 書いてあります。 サンプルコードは割と雰囲気で書いているのでコンパイルはすぐできないかも。

MX ERGO 雑感

土曜日にヨドバシカメラで買って今日会社にもっていっての感想 www.logicool.co.jp 角度 買った一番の理由です。普通のマウスで角度が付いたやつがあるので、トラックボールもあるかなーと探してみてもなかったんですよね。前。 んで、今回でてきたので飛び…

builderscon tokyo 2017 で知らないものを見てきた #builderscon

短く やー、やっぱり面白い。 2年連続で参加して良かった。

builderscon tokyo 2017 でツライだけではない話を聞いた #builderscon

大人のビルコンめっちゃよかったです! 口外無用なので何も書けないんですけどw タイムテーブル builderscon.io 概要のブログ blog.builderscon.io 非常に泥臭く、人間臭く、でもツライだけで終わってない感じがよかったなぁ。 TL で流れてた某銀行の話は確か…

YAPC::Fukuoka 2017 Fukuoka に参加してきた

書くのが遅れに遅れて、展開したお土産がすっかり消化されるぐらいまでたっちゃってました。 感想ブログになります。 *1 *1:お土産はなんばん往来と博多ぶらぶらです

YAPC::Kansai 2017 OSAKA で会場のあれこれしてた #yapcjapan

yapcjapan.org というわけで、↑のあれこれやってました。 すべては下に集約されるわけですが。 あーーー、よかった。— 萬屋 rohki (@r_ohki) 2017年3月4日 会場に関してやっていたことを以下つらつらと。

Rust で素朴に HTTP リクエストを投げる

以前、Windows でHTTP リクエストするために、1時間ほど格闘した rohki です。 ツラカッタ… で、格闘する原因となった HTTP ライブラリ hyper の OpenSSL への依存が v0.10 でなくなったとのこと。 Release v0.10.0 · hyperium/hyper Remove SSL feature (and ope…

大阪から日帰り弾丸で builderscon に参加した

大まかな感想 面白かったー! なんだろう、異種格闘技戦というかごった煮というか闇鍋というか。 buildersconは「知らなかった、を聞く」をテーマとした技術を愛する全てのギーク達のお祭りです。 公式サイトや Opening で言われていた通り、祭りって言葉がぴ…

Rust でネストが深くなったけど未解決

前に行った into_iter() は無事動きました。何だったんだ。 今はこんな感じです。 perf_client/pdh_wrapper.rs at master · ROki1988/perf_client · GitHub impl PdhController { pub fn new(path: Vec<PdhCounterPathElement>) -> Option<PdhController> { pdh_open_query() .map(|q| { let cs = p</pdhcontroller></pdhcounterpathelement>…