いけむランド

はてダからやってきました

If fixing a bug is a breaking change then it is a breaking change

仕様と実装が違っていて、実装を仕様にあわせる (不具合修正する) と、結果的に今の実装からの破壊的な変更 (breaking change) が発生する場合に semver の major を bump するべきか?がわからなかったため、ググったら面白いスレッドがあったから読んでた。

続きを読む

Differences between Verification and Validation

コードレビューなどをしていて、たまに「これってメソッド名として verify より validate の方が適切じゃね?(または逆)」というパターンを見かけることがあったため、自分の中での解釈をメモしておく。

以下、主観も入っていると思われるため、参考にする場合はほどほどでお願いします。

続きを読む

ctype: use less short names in public header

cygwin.com

今までだと _P のような、ユーザコードでも使われがちなシンボル (_[A-Z]) をマクロとして、グローバルなヘッダで定義してしまっていたため、コンパイル時に展開されて、文法エラーになるようなことが多々あった。

この修正でこの問題が解消されるようでありがたい。

#include <ctype.h>

void func()
{
    int _P;
}
$ gcc -c ctype.c
In file included from ctype.c:1:
ctype.c: In function ‘func’:
ctype.c:5:13: error: expected identifier or ‘(’ before numeric constant
    5 |         int _P;
      |             ^~

とあるネトゲの不具合報告を見ての感想

ちょっと目に入ったので思ったことをメモしておく。

f:id:fd0:20210929075323p:plain

https://shop.p-eternal.jp/information/detail/?information_id=114

使用プラットフォームのタイムゾーンで日本時間(JST/GMT+9:00)以外を設定している場合、相手への攻撃が無効になる

この挙動を見ると、クライアントからタイムゾーンの情報をもらって、それを元にサーバ側の時間に変換したもので攻撃判定をしているのかなと思ってしまうが、ネトゲの場合、基本的にクライアントから来る情報は最低限しか信用してはいけない (でないとパケット内容をいじって、いくらでもチートされる可能性がある) という認識なので、これはそもそもの設計が良くないんだろうな、なんてことを読みながら思ってた。

git コマンドに必要な .git がない場合に GitHub API で代用する例

GitHub から最新バージョンの release の tar ball を持ってきて、展開して、ビルドしようとしたらビルドスクリプト内でバージョン情報の埋め込みに git コマンドを使ってるが .git が同梱されていないため、git コマンドがこけてビルドできないというパターンに遭遇した場合の対処法についてまとめる。(滅多にない。)

続きを読む