ときどきの雑記帖 RE* (新南口)
特捜最前線
MISRA
C++もあったんだ>MISRA
Safer C++ with MISRA-C++ 2023 [video] : r/programming
C++
新刊近刊
The CODE シリコンバレー全史 20世紀のフロンティアとアメリカの再興
値段がちょっとお高めねと思ったら ページ数も結構あった
単行本 : 672ページ
宇宙怪人しまりす
岩波書店刊『宇宙怪人しまりす医療統計を学ぶ』『同 検定の巻』につづく第3弾.
出版社が変わるのか。
TAoCP
出たらしい
12/15新刊:ISBN978-4-04-893114-4 ドワンゴ『The Art of Computer Programming 4B』DONALD E. KNUTH 著 和田英一 監訳 岩崎英哉、田村直之、寺田実、和田英一 訳 10冊入荷 pic.twitter.com/6x78XHeGXE
— ジュンク堂書店池袋本店 PC書担当 (@junkudo_ike_pc) December 15, 2023
百年の孤独
【2階文学】
— 紀伊國屋書店 新宿本店 (@KinoShinjuku) December 14, 2023
「文庫化したら世界が滅びる」と言われているマルケス『百年の孤独』が、
どうやら来年文庫になるらしい。
衝撃すぎて言葉が出ませんでした。
まさか生きているうちに『百年の孤独』の文庫版を目にする日がやって来るとは。
世界が滅びる前に、今こそ。
単行本は2F-F22にございます。n.o pic.twitter.com/exTJduGFgv
The Creative Programmer
読書アドベントカレンダー14日目『The Creative Programmer』について書きました。テーマとしては一見陳腐ですが、著者の膨大な知識量に裏付けされていろんな話が出てくるので面白い本です。なかなかオススメです。(一昨日、そーだいさんとしたこの話も載っています)https://t.co/DFNRFXKX3V https://t.co/h3TMN4VJly
— kawasima@99卒 (@kawasima) December 14, 2023
manningの本か。
MEAPでも見た覚えがないのは あまり興味をひかれなかったからか?
お嬢様 投資をはじめる!
本日発売日です。
— スダ「お嬢様 投資をはじめる!」12/15発売 (@sudamin) December 15, 2023
コミックスなのにシュリンクされてないから全ページ立ち読みできるよ!読んでね!
…と言いたいけど、まあ半分くらいまで読んでおもしろかったら買っていただけると嬉しいです。今なら大きめの書店なら置いてあるかもなので、もし見かけたらとりあえず手にとってみてね。 pic.twitter.com/B3iDlN3o8R
COMIC ZINの書店特典のポストカードはこんな感じみたいです。
— スダ「お嬢様 投資をはじめる!」12/15発売 (@sudamin) December 15, 2023
(まだ私の手元にモノが無いので引用RTになります) https://t.co/vOeAnPeQDo
久しぶりに行ってみようかな>COMIC ZIN
FORTRAN Compiler on IBM 704
AS3000 CLA SCRIPL,A ADD INTO GAMMA COUNTERS 4F14518
PAX 0,B 4F14519
CLA BETA,B 4F14520
ADD BETAD2 3*2**18+(-3) 4F14521 BETAD2 OCT 3077775
STD BETA,B 4F14522
STA BETA,B 4F14523
TXI AS3600,A,-3 4F14524
AS3600 TXH AS3000,A,0 -30 IN XA AT END 4F14525
ラベルAS3600の行でインデックスレジスターAと0とを比較しているけれども これは例によって自己書き換えによって実行時に本当の値が入る
SXD PM0080,C -3Q IN XC AT END 4F14375
SXD AS1800,C 4F14376
SXD AS3600,C 4F14377
ここ。
ここでストアしているインデックスレジスターCに入っている値は それより前の部分でごにょごにょ計算して求められたものなのだけど 今回はその辺省略。
ちょっと気になるのが
CLA BETA,B
ADD BETAD2
とワード(36ビット)単位でロード&加算した結果を
STD BETA,B
STA BETA,B
のように分割してストアしていること
1+2 15 3 15
+---+------+---+------+
| | DEC | | ADR |
+---+------+---+------+
アドレスパートに入っている値が大きい(77775) ので加算によってその「上」にあるタグ部分にはみ出る可能性があって、 それが反映されるのを嫌った?
SCRIPLにどういう値が入ってきているのかから 追いかけないとわからんか。
まあこの辺なんですけどね
R06400 CLA LAMBDA,A STORE ORDERED, REDUCED LAMBDA TABLE 4F14276
PAX 0,B IN SCRIPL TABLE 4F14277
CLA BETA,B 4F14278
PDX 0,C 4F14279
CLA LAMBDA,A 4F14260
STO SCRIPL,C 4F14281
CLA LAMBDA+1,A 4F14282
STO SCRIPL+1,C 4F14283
CLA LAMBDA+2,A 4F14284
STO SCRIPL+2,C 4F14265
TXI R07500,C,-3 4F14286
R07500 PXD 0,C 4F14287
STD BETA,B 4F14288
TXI R07800,A,-3 4F14289
R07800 TXH R06400,A,0 -3P IN XA AT END 4F14290
SCRIPLへの転送元のLAMBDAは STATE Bでさんざん見てきたアレ (だからここでもワード3個がひとまとまりになっている)。
mktime
うるう年の一年前を取得すると… #JavaScript - Qiita という記事で
ここまで、いくつかの言語、DBでうるう年の一年前の日付の取得結果を確認してきましたが、まとめると以下のようになります。
Java → 2月28日を出力
Java Script → 3月1日を出力
PHP → 3月1日を出力
PostgreSQL → 2月28日を出力
MySQL → 2月28日を出力
SQLite → 3月1日を出力
というのがあったのだけど、 Cライブラリを使っていたら mktimeに丸投げするのが 一番簡単だけどそれだと 後ろにずれるよなあと思いつつRubyで試す。
>ruby -rdate -e "puts Date.parse('2024/02/29').prev_year"
2023-02-28
>ruby -rdate -e "puts Date.parse('2024/03/31').prev_month"
2024-02-29
>ruby -rdate -e "puts Date.parse('2023/03/31').prev_month"
2023-02-28
>ruby -rdate -e "puts Date.parse('2023/04/30').prev_month"
2023-03-30
>ruby -rdate -e "puts Date.parse('2023/04/30').prev_month(3)"
2023-01-30
ふむ。 ではとマニュアルをみると
class Date (Ruby 3.2 リファレンスマニュアル)
prev_year(n = 1) -> Date[permalink][rdoc][edit]
n 年前を返します。
self « (n * 12) に相当します。
self « n -> Date[permalink][rdoc][edit]
self より n ヶ月前の日付オブジェクトを返します。 n は数値でなければなりません。
対応する月に同じ日が存在しない時は、代わりにその月の末日が使われます。
require 'date' Date.new(2001,3,28) << 1 #=> #<Date: 2001-02-28 ...> Date.new(2001,3,31) << 1 #=> #<Date: 2001-02-28 ...>
このことは以下のように、もしかすると予期しない振る舞いをするかもしれません。
require 'date' Date.new(2001,3,31) << 2 #=> #<Date: 2001-01-31 ...> Date.new(2001,3,31) << 1 << 1 #=> #<Date: 2001-01-28 ...> Date.new(2001,3,31) << 1 << -1 #=> #<Date: 2001-03-28 ...>
なるほど。ついでにソースコードをみてみたらこうなっていた
ruby/ext/date_core.c
/*
* call-seq:
* d.prev_year([n=1]) -> date
*
* This method is equivalent to d << (n * 12).
*
* Date.new(2001,2,3).prev_year #=> #<Date: 2000-02-03 ...>
* Date.new(2008,2,29).prev_year #=> #<Date: 2007-02-28 ...>
* Date.new(2008,2,29).prev_year(4) #=> #<Date: 2004-02-29 ...>
*
* See also Date#<<.
*/
static VALUE
d_lite_prev_year(int argc, VALUE *argv, VALUE self)
{
VALUE n;
rb_scan_args(argc, argv, "01", &n);
if (argc < 1)
n = INT2FIX(1);
return d_lite_lshift(self, f_mul(n, INT2FIX(12)));
}
/*
* call-seq:
* d << n -> date
*
* Returns a date object pointing +n+ months before self.
* The argument +n+ should be a numeric value.
*
* Date.new(2001,2,3) << 1 #=> #<Date: 2001-01-03 ...>
* Date.new(2001,2,3) << -2 #=> #<Date: 2001-04-03 ...>
*
* When the same day does not exist for the corresponding month,
* the last day of the month is used instead:
*
* Date.new(2001,3,28) << 1 #=> #<Date: 2001-02-28 ...>
* Date.new(2001,3,31) << 1 #=> #<Date: 2001-02-28 ...>
*
* This also results in the following, possibly unexpected, behavior:
*
* Date.new(2001,3,31) << 2 #=> #<Date: 2001-01-31 ...>
* Date.new(2001,3,31) << 1 << 1 #=> #<Date: 2001-01-28 ...>
*
* Date.new(2001,3,31) << 1 << -1 #=> #<Date: 2001-03-28 ...>
*/
他の言語やらがどうしているのかを調べるのは任せた😄
long double
小数対応のseqコマンドをawkで実装してみた ~ 小数を扱うプログラムは難しいという話 #ShellScript - Qiita
どうやら以下の検証から GNU seq は倍精度 (double) よりも高い精度を持つ拡張精度 (long double) を使っているようです。
へー。と思って
ソースコードを見てみたらたしかに
long double
を使っているっぽい。
coreutils/src/seq.c at master
/* A command-line operand. */
struct operand
{
/* Its value, converted to 'long double'. */
long double value;
/* Its print width, if it were printed out in a form similar to its
input form. An input like "-.1" is treated like "-0.1", and an
input like "1." is treated like "1", but otherwise widths are
left alone. */
size_t width;
/* Number of digits after the decimal point, or INT_MAX if the
number can't easily be expressed as a fixed-point number. */
int precision;
};
/* Description of what a number-generating format will generate. */
struct layout
{
/* Number of bytes before and after the number. */
size_t prefix_len;
size_t suffix_len;
};
/* Read a long double value from the command line.
Return if the string is correct else signal error. */
static operand
scan_arg (char const *arg)
{
operand ret;
if (! xstrtold (arg, nullptr, &ret.value, cl_strtold))
{
error (0, 0, _("invalid floating point argument: %s"), quote (arg));
usage (EXIT_FAILURE);
}
でも、x64だとlong double
とlong
って大きさは同じじゃなかったっけ?
と思ったのでそっちも調べたら
それはVC(とmingw?)に限った話のようだ。
- seq - Command line text processing with GNU Coreutils
- seq (Unix) - Wikipedia
- long double - Wikipedia
- long doubleの話 #C - Qiita
それと
元々 seq コマンドは 1985 年の Version 8 Unix で初めて実装されたものであり、1995 年に GNU で再実装されました。 BSD Unix では実装が遅れましたが現在ではすべての BSD 系 Unix で実装されています。
BSDではseqと同じようなことをするjotというのがあったのでは? と見てみるとseqもリポジトリにあるんすね。 ソースコード冒頭のコメント等によればNeTBSDが最初?
- freebsd-src/usr.bin/jot at main
- freebsd-src/usr.bin/seq at main
- seq(1) - OpenBSD manual pages
- seq - FreeBSD
長距離電話
“長距離電話”が終了、固定電話が全国一律料金に――NTT東西が2024年1月からのIP網移行スケジュールを発表 https://t.co/qXdkXG4qb4
— INTERNET Watch (@internet_watch) December 14, 2023
パソコン通信時代に市外通話になるサイトにつなげて 電話料金が(ピー)なことになったのも 遠い昔のことですねえ…
undefined behaivor
C23: Zero-size Reallocations are Undefined Behavior https://t.co/P3i7fcUBoE "Classifying a call to realloc with a size of 0 as undefined behavior would allow POSIX to define the otherwise undefined behavior however they please." その発想はなかった...
— yoh (@yohhoy) September 6, 2021
reallocにサイズ0指定したときの仕様が曖昧で実装毎に挙動がバラバラ → C17で標準ライブラリ仕様を微調整したよ! → 新しいPOSIX定義とバッティングするんだけど~ → C23では未定義動作にしとくから勝手に定義してね!!! https://t.co/FJsejNEquQ
— yoh (@yohhoy) September 6, 2021
定規
小学校で使われてる竹尺がアクリル製になってて驚いた。妙な存在感で面白くはあるんだけどそうまでして竹尺を再現するの、教科書にあの独特の目盛りの読み方があるからなんだろうか pic.twitter.com/HoVVXC85nE
— robert yamamoto (@robamoto) December 15, 2023
ChatGPT
現行では、使いどころは「案を出させて、『わかる』人間が選ぶ」だろうなと思う。
— Shiro Kawai (@anohana) December 15, 2023
10段階で8を出せるツールは、7しかできない人からみたら「すごい」だけど、9が求められる仕事をしてきた人からみたら「まだまだ」。でも9出せる人が下請けに使ったら生産性爆上げになる可能性が。 https://t.co/IsOwmAPBde
将棋AIによる定跡自動生成のために必要となった盤面を反転させるコードをChatGPT4に書かせた話です。
— やねうら王 (@yaneuraou) December 15, 2023
ChatGPT4は、このレベルのプログラムを一瞬で書いてくれます。(ときにヒントは必要)
現時点で、平均的なプログラマーの能力をすでに上回っていると感じます。https://t.co/kMqEc02pBO
琴となり 下駄となるのも 桐の運
— Gryphon(INVISIBLE暫定的再起動 m-dojo) (@gryphonjapan) December 14, 2023