Kgtkr's Blog

Posts about "rust"

All tags
2023/08/01
はじめに 2022年度の大学のプロジェクトで(今更すぎる)手書き風の画像を生成するWebサービスを開発したのでそれについての話です。 リンク tegaki.fun サービスのURL nkmr-lab/average-character-cloud-backend バックエンドのリポジトリ nkmr-lab/average-character-cloud-frontend フロントエンドのリポジトリ nkmr-lab/average-figure-drawer 平均手書き文字(手書き文字の合成文字)を生成するライブラリのリポジトリ。研究室で数年前に作られた物をTypeScript化(不完全)するなどしただけで、上2つと違って1人で書いたわけではない。 サービスの概要 下の画像のように、上のテキスト欄に文字列を入力すると、その文字列に対応する手書き風の画像を生成してくれます。背景画像はユーザが用意してきて、それに合わせて文字サイズや書字方向、行間字間などを設定する仕様です。各文字は、ユーザが登録した手書き文字を複数組み合わせて平均手書き文字とい
2022/08/13
はじめに 8/8から8/12に行われたセキュリティキャンプ2022のデータベースゼミに参加してきました. このゼミでは, データベースの中でもトランザクションを中心に学び, 実装しました. 講師の星野さん(@starpoz), ありがとうございました. 講義資料 ゼミの講義資料がGitHubで公開されたので貼っておきます. Releaseページからpdfをダウンロードできます. https://github.com/starpos/develop-transaction-system 作ったもの Rust製のサーバクライアントモデルのkvsです. リポジトリ: https://github.com/kgtkr/tkvs公開サーバ: https://tkvs.kgtkr.net サーバはgrpcを使っているのでgrpcurlからも使えますが, セッションのTTL管理やbase64エンコードが大変なのでリポジトリに入っているcliクライアントを使った方が便利です. cliクライアントでの使用例 $ tkvs-client https
2022/04/04
実装したもの https://github.com/kgtkr/wjit $ cat ./sample.wjit func main() { var x = fib(10) in println(x); func_a(10); println(is_prime(3)); println(is_prime(4)); println(is_prime(5)); println(is_prime(6)); } func fib(n) { if (n < 2) { n; } else { fib(n - 1) + fib(n - 2); }; } func func_a(x) { println(x); if (x <= 0) { x; } else { func_b(x - 1); }; } func func_b(x) { println(x);
2019/12/09
Rustにはcatch_unwindという関数がありpanicをキャッチすることが出来ます。 Rustのパニック機構 - 簡潔なQ しかしここから得られるエラー情報がかなり少ないです。キャッチして得られるResultのError型はBox<dyn Any>みたいな型ですが、これがほとんどStringまたは&strとなっており(今の所他の型を見ていませんが詳しい方教えて下さい)、確認した所スタックトレース情報やパニックが発生したソースの位置情報は入っていませんでした。例えば以下のコードはpanic testと出力します。 if let Err(e) = panic::catch_unwind(move || { panic!("panic test"); }) { println!("{}", any_to_string(&*e)); } fn any_to_string(any: &dyn std::any::Any) -> String { if let Some(s) = any.downcast_ref::<S
2018/08/30
競プロで標準入力のパースがめんどうだったのでマクロ作りました。 AtCoderのRust(1.15.1)でテスト済みです。 ソースコード https://github.com/kgtkr/procon-lib-rs/blob/master/src/parser.rs 使い方 事前準備 標準入力を全て読み込む let text = { let mut s = String::new(); io::stdin().read_to_string(&mut s).unwrap(); s }; 例 入力値 5 10 20 1 a 2 b 3 c 4 d 5 e 1 2 3 4 5 input!(text=> (n:usize) (a:i64 b:i64) {n;list:(i64,#)} (arr:[i64]) ); assert_eq!(n, 5); assert_eq!(a, 10); assert_eq!(b, 20); assert_eq!(list, vec![(1,"a"