36.9℃
Misseyこんな機能あるんだ(元ポスト https://social.mikutter.hachune.net/@osa_k/112089112819611695 )
ルートビアはBarq'sがうまい https://www.coca-cola.com/us/en/brands/barq-s
人間は社会性動物なので社会の維持に貢献してれば生産性は正なんですよ
Xboxのスティックの原点ずれ、何回か抜き差ししたらなんか直ることない?
車道を走ってる自転車が右折したいときって車線のどっち側に寄るのが正しいの?
そもそも自転車は常に二段階右折をしなければならない、なるほど…… https://www.keishicho.metro.tokyo.lg.jp/kotsu/jikoboshi/bicycle/menu/rule.html#:~:text=%E5%8F%B3%E6%8A%98%E3%81%AE%E6%96%B9%E6%B3%95
重い本が少なくとも5冊は積まれてるはずだけど、引っ越しのタイミングで既読管理が壊れたのでどれを積んでるのか分からなくなった
金曜からなんとなくだるくて土曜朝起きたら発熱してたけど、丸一日寝込んでたら治った
Goは書いてあることがそのまま実行されて、それで後から読む人が不安にならないことに特化した言語だからね
ていうかRecursive Typeで怒られるのはそもそもGoで普通に型名を書くと(参照ではなく)実体としてメモリ確保されるからであって、Genericsは関係ないのでは?Cでもそういう再帰的な型は作れないし、作りたいならポインタを使って間接参照させる必要がある
1.18以前はinterfaceの中に単独で書ける型名はinterfaceのみで、それはembedded interfaceとして扱われていたけど、Genericsのサポートのためにinterfaceじゃない型名を書いたときの意味が全部定義されたらしい。力技すぎて草 https://go.dev/ref/spec#General_interfaces
Union Typeを使って「値を見てみるまでどっちの型か分からない」状態だと変数の型を見て分岐する処理が必要になる(もし必要ないならinterfaceにくくればよい)が、Goはランタイムに型を見る能力が乏しく、特にUnion Typeの制約を意識したmatch節のような物を書く手段がないから、結局フィールドの宣言でGenericsのtype constraintを書いても無意味ってことなのかな
Type parameterを導入することで「型名だけすげ替えた構造体を定義するテンプレートがほしい」というありがちな要件に対応しながら、match節はサポートしないという意思決定によって抽象化はあくまで振る舞いによってなされるものであり(i.e. interface{}の持つメソッド)、型そのものではないという立場を維持してるのかな
型に対するmatchが書けないということは帰納法が書けないということだから、型パズルをやるのはだいぶ厳しそう
文字列リテラルのprefixで何かが起きるみたいなやつ、知らないと何が起きてるか調べられない(検索できない)ので学習するのがきつい
知ってる人にすべて聞けるならいいけど、自習してて s"${foo}" みたいなのが出てきて自力で解決するの無理じゃない?って話です
Pythonのf"{}"もやばいし、f"{}"以前も%だったのでかなり救えない
@teobot f-Stringって名前、f-wordっぽいと思いませんか?
このアカウントは、notestockで公開設定になっていません。
実際よくわからんコードを説明してもらうと大抵正しい答えかキーワードが返ってくるのはマジで便利
printfのフォーマット指定子が分かりづらいのはそうとして、でもリテラルの特殊構文と違ってprintfのドキュメント見ればいいんだなっていうのはすぐ分かるから……
GTK3のドキュメントもよく分からんしRuby-GNOMEのドキュメントもほとんど何も書いてないのですべてが闇の中。適当に検索するとC++バインディングのドキュメントが引っかかるのでそれ見ながらmikutterいじってた気がする
C++標準化委員会のアンミカ「あのな、C++のコンストラクタって5種類あんねん」
ほんとに5種類かどうかは知りません(たぶん少なくとも5種類はある)
member initializer listって聞いて思い浮かべてたやつはlist-initializationだった。C++なんもわからん
https://en.cppreference.com/w/cpp/language/constructor
https://en.cppreference.com/w/cpp/language/list_initialization
C++のコンストラクタでFoo() : name("miku"), age(17) {} みたいに書くのがmember initializer list、vector<int> v{1, 2, 3}; みたいに書けるのがlist-initialization
Gtk.TreeViewのTreeってツリーメニューのことだと思ってたけど、もしかして配列の代わりに赤黒木で要素を管理してるからTreeViewなのか!
https://gitlab.gnome.org/GNOME/gtk/-/blob/gtk-3-24/gtk/gtktreeview.c?ref_type=heads#L14117
高速に動くvisible_rangeみたいな関数を作りたかったら要素を赤黒木みたいなやつで管理するしかないよなーと思ってソース見てみたらそのまんまで笑った
いや赤黒木は単純にこういうrange queryに高速に答えるために管理してるだけっぽいな(それはそれとしてモデルはTreeModelとして木構造になってる)
じゃあなんでListBoxはvisible_rangeできないんだ?
理由はよくわからんが、赤黒木を使ってrange queryの高速化をしてるウィジェットがTreeViewしか存在しておらず、むしろこっちのほうが例外っぽい
これ先頭へスクロールするアニメーションのコードにしか見えないんだけど、なんでスクロールロックになってるんだ? https://dev.mikutter.hachune.net/projects/mikutter/repository/main/revisions/e807e8103ed978c7c2a2aabb318655650003aeda/diff/core/mui/cairo_timeline.rb
なんもしないと挿入した要素の高さ分だけTreeViewが自動的にスクロールして、表示されてる内容が変わらないようになってるってことかな
昔の記憶がまったくないんだけど
> 追加された message がTL表示領域外であっても subparts 高さの演算が走っている?
https://dev.mikutter.hachune.net/issues/1528
ってGTK3以前からそういうもんじゃなかったっけ……
@teobot Netlifyに/a.htmlというファイルを置くと/aでもアクセスできてしまうみたいなんだけど、この機能を切る方法ってない?
@teobot これほんと?X-Content-Type-Optionsってブラウザにしか効かなくない?
このアカウントは、notestockで公開設定になっていません。
CPython 3.11以降はコードの単純化のためにIEEE754が必須になったらしい? https://stackoverflow.com/a/70189136
IEEE754自体に依存してると言うより、プラットフォームがNaNをサポートしてないとPython側で吸収しないといけないのがつらいという話っぽい https://github.com/python/cpython/commit/1b2611eb0283055835e5df632a7a735db8c894b8
構造体をnewしてコンストラクタで初期化するみたいな気持ちは理解するのに結構時間がかかった記憶がある
thisはレシーバが渡される暗黙の変数ですって言えば済むことなのに、2000年頃の教本は(今もかもしれんが)そういう説明がまったくなかった
最近の若者はPythonとかRustとか書いてるから自然にまあそういうもんでしょってなるのかな
ふぇのまーさんにmikutter Discordの管理者権限付与してから寝て
<script>window.alert("てお")</script>
<font size=1000>Mastodonのポストが投稿時点でサニタイズされてるのか、それとも表示時点なのかいまいち分かってない</font>
Mastodon API叩いてる限りはエンドユーザはsanitizedなHTMLしか見ないと思ってよさそう https://docs.joinmastodon.org/api/guidelines/#formatting
Mastodonから普通にポストすると<br>とか書いても<br>って見えるからまずここでエスケープが走っていそう(つまりMastodonからはHTMLを通常の手段では配信できない)
やっぱり自分でAP実装作ってertona.netに危険HTMLをぶちこまないと……
フィリスが立派な錬金術士になってエルトナに帰ってきただけでもうトゥルーエンドだよ
このアカウントは、notestockで公開設定になっていません。
週3労働よりも週5で3ヶ月働いて1ヶ月休みみたいなパターンの方がいいのでは?と思ってきた
importしたものをprefixなしで使われるとIDEの支援なしに追うのがかなり困難になるのでやめてほしい
そういう点でGoのimportはかなり偉いんだよな。必ずnamespace付きじゃないと参照できないし、importしただけでコードが走って副作用を及ぼすこともない。Rustも後者が微妙だけどそこそこ良い
Goはgo fmtがカラム揃えを強制してくることといい、コードは書く時間より読まれる時間の方が圧倒的に長いんだから読みやすさに振るのが正義という強い思想を感じる
大抵型はトップレベルに展開されるので、import自体に型推論含めてなんの副作用もない言語の方が珍しいとは思う。JS / TSはnamespace強制なのは素晴らしいのに副作用のせいでimportの順序すら自動で並び替えできないのが……
実際importの順序シャッフルしたら壊れるコードがどれくらいあるんだろうという話ではあるが
Rustで
struct A { i: i32 }
fn main() {
let mut a = A { i: 0 };
let ptr = &mut a as *mut A;
let ai = &a.i;
unsafe {
(*ptr).i = 10;
}
print!("{} {}", a.i, ai);
}
とするとリリースビルドでも10 10が出力されるんだけど、Rustはimmutable borrowを証拠にした参照の最適化はしないと思っていいのかな(ナイーブにはaiがimmutable borrowであることを利用して*aiを0に置き換えるような最適化が起きてもおかしくない気がする)
unsafeがどれくらいunsafeなのか知りたいんだけどそういうことを書いてあるドキュメントが見つからない
unsoundなのはいいとしてその帰結がどうなるのか分からん。unsoundなコードはどう壊れても文句を言えない?
あと&mutを2つ以上生やすだけでおかしくなるならThe bookの例もダメということになりそう https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html#creating-a-safe-abstraction-over-unsafe-code
原則として、 unsafe ブロックは「コンパイラには検査できない書き方をするが、ブロック内でコードが満たすべき性質を破らないことを開発者が保証する」というものなので、 unsafe ブロック内に入れようが駄目なものは駄目
「コードが満たすべき性質」がなんなのかが分からん。split_at_mutはunsafeを使わないと書けないパターンなので、これが安全であるなら「コンパイラが通す型」!=「コードが満たすべき性質」のはずだけど、じゃあ具体的に何を満たしていればよくて何をviolateしちゃいけないのか
このケースだとこれかな
> Moreover, the bytes pointed to by a shared reference, including transitively through other references (both shared and mutable) and Boxes, are immutable; transitivity includes those references stored in fields of compound types.
https://doc.rust-lang.org/reference/behavior-considered-undefined.html
split_at_mutの第一引数は&mut [i32]だけどこれでr食われるの?
@qnighy なるほど一理ある……。時間があったら読んでみます。とはいえ本当にやりたいのはView typesがないことによるエラーの迂回なのでそっちが一段落してからにします
こういうのがコンパイル通らないの本当に困ってるんだけど、Gameをimmutableな部分とmutableな部分に分割して常にバラバラに持ち運ぶしかないのかな……
struct Game {
players: Vec<i32>,
score: i32
}
fn add_score(game: &mut Game, player: i32) {
game.score += player;
}
fn play_turn(game: &mut Game) {
for player in game.players.iter() {
add_score(game, *player)
}
}
関連があるデータの意味でstructに入れた瞬間にmutabilityに関しても運命共同体になるのがとても厳しい
タプルにすらできない強く関連した2つの変数をあちこちに引き回さないといけないの、かなり気持ち悪くない?
ナイーブにやるとComponent poolがさっきのGameになって同種の競合が発生しそうな気がするけど大丈夫なんかな
結局状態更新の時にimmutableに触られるものとmutableに触られるものをComponentで切り分けることにはなるが、Entityを通した間接参照の形でグループ化できるからちょっとはマシくらいか
これって要するにメモリアロケータを作ってるのでは?まあガチのゲーム開発なら必要だけど……
特にゲームとして考えると、インクリメンタルに状態を更新するよりも「現在の状態」をimmutableに固定したままで「次の状態」を別のバッファに書き出すようにしたほうが、処理順の違いで結果が変わるみたいな現象が発生しづらくていいという面があるのでmutableな状態を特に分離して持っておく設計は妥当な気もしてきた
アトリエやったことない人におすすめするなら今はライザ一択なんだよな
ライザ1は良くも悪くも王道RPGの作りなのでかなりとっつきやすいし面白いですよ
ライザと冒険に出たい!ってなってから弓の練習し始めておいお前……まさか……ってなった
盗賊を殴り殺すロロナ
銃弾を握り締めて殴るくーちゃん
フルートを投げるクラウディア
@teobot Rustでn要素の0からなるVecを作る方法を教えて
Goの変数の初期値は仕様で定められている「ゼロっぽい値」 (The zero value) https://go.dev/ref/spec#The_zero_value
Goのmapはデフォルト値の概念を持ってるわけではなく、単にキーが存在しないときに空の値としてzero valueを返してるだけですね
キーの存在性が問題になるなら v, ok := myMap[key] というイディオムがある(キーが存在してるならokはtrue、そうでないならfalse)
GoのScanってそれこそscanfを愚直に実装するくらいしかなさそうだけどなんで遅いんだろう
当たり前のように1文字ずつ読んどるな(まあバッファリングとかは上のレイヤで吸収しろって話か) https://golang.google.cn/src/fmt/scan.go?s=2653:2691#L1079
@teobot RustでVecの要素と添字のペアをスキャンしたいんだけどどうすればいい?
@teobot C++のvector::swapに相当するものってRustにある?
@teobot 要素のswapじゃなくて、2つのVecを互いに相手へmoveしあうやつ
昼過ぎてから起きると出かける気力がなくなってしまい損した気分になる
pangoとcairoの関係、一度理解したはずなんだけど忘れてしまった
tauriって普通のSPA webappをそのまま実行可能形式にできるの?
Tauriの仕組みこんな感じかな
- TAOでOS固有の方法でウインドウを作る
- WRYでWebViewを作ってwebappを動かす
- Tauri appに登録された関数をWebViewから叩けるcloud functions的なバインディングを提供する
WebViewだからWebViewにできることはなんでもできるし、必要ならCommandsや既定のAPI (https://tauri.app/v1/api/js/) を使ってネイティブレイヤにもアクセスできる感じか
TAOとかWRYってやつもcommon libraryみたいな顔して紹介してるけど普通にTauriプロジェクトの一部なのか
二十歳そこそこのときにズブロッカ買って匂いがきつすぎて全然飲めなかったんだけど、今なら飲めるかもしれない
サイゼリヤに来たら、注文コードからアルファベットが消えていた。かつてのWN05は3405になっている。ひどいと思った。世界は本当に寂しいところになった。これでいいと本気で思っているんですか、本当のところはどうなんですか、と叫びたくなった。
@teobot 複数のエントリポントからそれぞれ異なるバイナリを作るようなCargo.tomlってどう書けばいいんだっけ
@teobot RustでVecに対してgroup_byをしたいんだけどどうすればいい?
@teobot 特定のビルドターゲットにだけ使うdependencyをCargo.tomlに書く方法ってある?
@teobot あーそっちのターゲットじゃなくて、特定の [[bin]] をビルドするときに初めてdependencyを引っ張ってきたい
Node.js 20(と新しめのNode18)はparseArgsが標準で入ってるのでTypeScriptを書けば要件満たせそう
しかしparseArgsはさすがにパーサに引数処理は埋め込めなかった気がするな
このアカウントは、notestockで公開設定になっていません。
音の回り込みによる減衰を最短経路問題として解くの頭いいな……。リアルではないけどいかにもゲームっぽい解決法って感じ https://www.famitsu.com/news/202403/22337814.html#heading-3
「琴線に触れる」の誤用は「逆鱗に触れる」ではなく「神経に障る」からの類推だと思ってるけど根拠はない
このアカウントは、notestockで公開設定になっていません。
細かいことを抜きにすれば、調理技法としては低温調理かけてからオーブンやフライパンでで表面をカリッと仕上げるのがだいたいオーブンと電子レンジの同時掛けに対応しそう
電子レンジは同じ場所しか加熱できないから、温度管理の目的の一つであるムラのなさを実現するのが難しいのでは