北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

rustでdiscordのbotを作ってみたくて下調べ(2)

discord の bot を作るのなら websocket が必須なので下調べ。 というか、調べなくても discord-rs が使っていた websocket がそのまま使えるはずと思っていたのだが、開発が sluggish なので tokio-tungstenite を勧めている。良い名前空間を使っているだけ…

rustでdiscordのbotを作ってみたくて下調べ

結論から書くとまだ何もしてない。 discord-rs というのがあるのだけど、だいぶ古い。特に嫌なのが issue にも上がっている通り openssl 1.0 系への依存。 昨年末にEOLを迎えている ので避けておきたい。 という事で手元でバージョンを上げようと試みたのだ…

2019年のまとめ

今年を箇条書きでまとめておく。歳のせいか意識の高い話は何もなく、ああ、良くないなあとは思うのだが、まあそれとは別の話として、将来の自分用にメモを残して置くことはいいことだろう。 高脂血症の薬を飲み始め、肉食を再開する 禁酒、COMPは継続 副業を…

plain-old jarで JUnit5 を試す

https://junit.org/junit5/docs/current/user-guide/#running-tests-console-launcher に書いてあるんだけど、分かりにく過ぎたので。 $ curl -O https://repo1.maven.org/maven2/org/junit/platform/junit-platform-console-standalone/1.5.2/junit-platfor…

今日は 吉祥寺.pm20 の日です

弊社での開催でしたので、自分用のメモを残しておきます。 本当は難しいPSL / hiratara 自分のセッションでした。 speakerdeck.com Windowsデスクトップでweb開発 / setoazusaさん Windowsで開発している人は少ない TypeScriptやJavaScriptならなんとかなる…

今日は安全なシステムプログラミング言語Rustへの招待の日です

IIJさんでのセミナー を聴講に来ましたので、自分用のメモを残しておきます。 安全なシステムプログラミング言語Rustへの招待 / keenさん 2015 年に 1.0.0 がリリース ここからは安定している 6週間ごとのリリース Firefox と同じ 言語仕様は2つ Rust2015 と…

今日は Haskell Day 2019 の日です

咳が止まらない状態で非常に厳しいですが、来ていますので、自分用のメモを残しておきます。 関数型(function type)を見つめるプログラミング / 山下さん 関数の型、 Haskell では第一級 リスト型 a が型なら [a] も型 タプル a b が型なら (a, b) も型 タプ…

今日は YAPC::Nagoya::Tiny 2019 の日です

来ましたので、自分用のメモを残しておきます。 開会の挨拶 名古屋から来た人、東海から来た人 ランチはルーセントタワーB1が穴場 Tiny とは? 新たなコミュニティの形成。 小規模で開催しやすい メインはトーク ハッシュタグ: #yapcjapan フロア貸切ではな…

A Regular Expression Matcher in Rust

なんかの本でCで数十行のバックトラックを使った正規表現のマッチャが紹介されてた記憶があるんだけど、ビューティフルコードだったっけ?#regexfesta— hiratara (@hiratara) October 18, 2019 ということで、ソースコードが書かれている記事を見つけた。 ht…

今日は Regex Festa の日です

今日は Regex Festa の日です Regex Festa に来ていますので、自分のためのメモを残しておきます。 挨拶 wi-fiとお手洗い、喫煙所の案内 Opt Technologies さんについて QRコード読むとアンケートあります いろいろな正規表現、いろいろなオートマトン / @si…

結局rustの標準入出力はどう書けばいいの?

現状。 StdoutLock は LineWriter を噛んでるので、 BufWriter の意味があるのか謎。ベンチマーク取らねば。 use std::io::{self, BufRead, BufWriter, Write}; fn main() { let stdio = io::stdin(); let mut input = stdio.lock(); let stdout = io::stdou…

emacsで自動改行して欲しくない

特に端末へコピペとかするときに、本当に迷惑なので。 init.el をイジる。まず、 (setq indent-line-function 'insert-tab) なんて記述があったので削除(誰がなんのために入れたんだ?)。 次に、 (electric-indent-mode 0) を追加。 これでほとんどのモー…

今日はRustのLT会 Shinjuku.rs #6 @FORCIAの日です

ブログ枠で RustのLT会 Shinjuku.rs #6 @FORCIA に来ています。ブログ枠が何をすればいいのかあまりわかってませんが、とりあえずブログにメモを残しておきます。 開会 会場、懇親会はフォルシア株式会社さんが提供(ありがとうございます!) 次回 11/19 で一…

rustのcombineで入力されたトークンによる場合分け

combine を使ったときに、例えば識別子のパース時に予約語を弾く方法。 最初は and_then を使うのかと思ったのだけど、 エラーの型指定がえらく面倒 だったので諦め。というか、なんか絶対違うだろうと思って別の方法を模索。 Parser のドキュメントに以下の…

rust の publicsuffix は遅過ぎる

rust で Public Suffix List を扱うクレートの速度が遅過ぎるので、パッチを書いた。最右部のラベル ( .jp .com など) でルールを区分けして、後は愚直に線形探索という方法だったので、そりゃあ遅すぎるよねって感じ。 github.com 実は Perl の Domain::Pub…

今日は Roppongi.rs #1 の日です

職場から近いので Roppoingi.rs に来ました。自分のためにメモを残しておきます。ハッシュタグは #roppongirs 。 Rustがいかにエンジニアの脳を楽にさせているかをC++初心者が語る〜関数篇〜 / @natsu_no_yuki さん C++歴15年の初心者 rvalue reference, tem…

Strassen の行列積を求めるアルゴリズム

アルゴリズムイントロダクションで、行列積を求める奇妙なアルゴリズムを見つけたので rust で実装した。簡単のため、行列の表現には ndarray を用いている。 #[macro_use] extern crate ndarray; use ndarray::prelude::*; type Matrix = Array2<i32>; type Matr</i32>…

rustのsliceとlen()

こう書くと、 fn main() { let mut a = [1, 2, 3, 4, 5]; let x = &mut a[3..a.len()]; println!("{:?}", x); } こう怒られる。 error[E0502]: cannot borrow `a` as immutable because it is also borrowed as mutable --> src/main.rs:3:23 | 3 | let x = …

rustで「サイコロを転がす」を解く

最近 rust を勉強し始めたので、オフラインリアルタイムどう書くで一番簡単な問題(と思っている) サイコロを転がす を解いた。破壊的更新を戦略的に使えるのは、この程度の難易度のサンプルであれば書いてて大変気持ちがいい。 yhpg-rs/lib.rs at ord12rot…

rust の perl-xs を触る

rust の perl-xs なるリポジトリを見つけたので触ってみた。 Perl の carton と rust の cargo が動く環境1であれば、 README に書かれている通りリポジトリを clone してきて以下で簡単に試せる。 $ carton install $ carton exec -- 'cd t && perl Makefil…

トレイト境界の F: FnMut(u8) -> bool という記法について

rust で where の中でトレイト境界を書ける。そして、クロージャはトレイトで実現されている。ってことなんだけど、クロージャを表す型変数のトレイト境界の書き方はなんとも気持ちが悪い。 struct Cacher<T> where T: Fn(u32) -> u32 { calculation: T, value:</t>…

VSCodeからWSL上のRLSを使うメモ (2)

ある朝突然、 cargo test が VSCode Insiders から呼べなくなった。これを踏んでた。どうやら昨日の夕方に 1.36.0-insider がアップデートされて壊れたようだ(アップデートされた記憶はあまりない)。 github.com 以下に従って5月のビルド 1.35.0-insider …

VSCodeからWSL上のRLSを使うメモ

悲しいことにうまく動せていない。時間が解決してくれる気はする。 その1. Remote WSL環境 開発者版 VSCode insiders が必要。 VSCode とは別のアプリとしてインストールできるので気にせず入れて良い。Remote WSL 拡張を入れればそれで終わり。 その2 で使…

dockerで古いバージョンのperlを使う

Docker Hub に perlのイメージ が上がっていて便利なのだけど、残念ながら 5.24 までしかない。検索してみたけど他に良さげなイメージもなかった。 仕方がないので 自分でビルド をして上げておいた(自分で使う用)。幸い、以下のリポジトリにいい感じの Do…

LTSのubuntuを16.04から18.04へアップグレードした

以下に書いてあるとおり。 wiki.ubuntu.com 基本的に sudo do-release-upgrade を叩いただけ。sshd の config を置き換えていいかみたいなことを聞かれたので、触った覚えがないので不安を覚えつつ置き換えた。後は、質問に答えながら延べで数時間放置してい…

minillaは便利

songmu さんの WEB+DB の記事を読むのが良い。 gihyo.jp リリーステストで、 Hoge.pm requires 5.010 due to explicit requirement で死んだときは Perl version 指定が正しいか確認する。 // とか使ってると 5.8 系はサポートできないというか、流石に 5.8 …

CircleCIのsave_caheするPATHとdocker imageの相違

.circleci/config.yml に以下のように書いておいたら、ある時からキャッシュが効かなくなってハマった。 version: 2 jobs: build: docker: - image: perl:5.28 steps: - checkout - restore_cache: key: cacheminil-v1 - run: name: Install Minilla command…

mariadbのdokcer imageの10.2と10.3でmysql.dbが違う

https://hub.docker.com/_/mariadb 10.2 の方では、 MYSQL_USER で test_ データベースを作れない。 mariadb:10.2 の mysql.db 。 MariaDB [mysql]> SELECT Host, Db, User, Create_priv FROM db; +------+--------------+----------+-------------+ | Host …

【朗報】健康になるために酒を辞める必要はなかった

前回の健康診断で、高脂血症のため要治療というショッキングな結果が出た。どうせ医者に行けば禁酒しろと言われると思い、2018年は完全に酒を絶った。本当に一滴たりとも酒は飲んでいない。 そして一年後の健康診断の結果がこちら。 健康診断の結果 変わって…

django.urlsのコードリーディング

django ではURLのルーティングを django.urls パッケージで処理している。このパッケージのソースはなかなか読みにくいので、読むための手がかりを記しておく。 バージョンは2.1を仮定していることに注意1。 クラス階層 django.urls パッケージでは継承もイ…