ときどきの雑記帖 RE* (新南口)
The Terminator
ガンダム@テレ玉
ソロモン攻略戦
- ミサイルを抱えた不細工な奴(パブリク)
- めぐりあい宇宙ではカットされたブライトさんとワッケインとのやり取り
- ボール初登場。
- ソーラ・システム
- マサキさん
- ティアンム艦隊から出撃したジム+ボールの編隊の中に…
- ビグ・ザム
そう言えばレビル将軍はどこにいたんだろう? ソーラ・レイ直撃のときには全艦隊の指揮を執っていたような感じだけど、 ソロモン攻略の時点でもそうなら姿が見えないのはなんで…?
ティアンムが戦死したからレビルに指揮権が移ったわけでもなさそうだし、 最前線には出てきていないだけ (から画面には登場せず)という感じか?
次回 恐怖!機動ビグ・ザム
contract
C言語における浮動小数点演算の短縮 (contract) とそれに対する防衛術
C言語では、複数の浮動小数点演算を一つの演算にまとめることを許容しています。これは式の短縮 (contract) と呼ばれています(C17 6.5の段落8)。
(JIS X3010では「contract」の訳語に「短縮」を使っているようなので、この記事でもそれに従います。)
なんでそんな訳に。と思ったが 辞書を見ると確かに短縮やそれに類するものも載っていた。 へー。
配糖体
8週間目から脂肪が減りはじめ、腹部全脂肪面積が低減したというのだ。
ちょっと前に南武線の車内広告で見かけたやつ。
数字をごまかしているわけではないんだろうけど なんか「違和感」がぬぐえないなあと思っていたら、 いくつかこの広告に言及している記事があった
- サプリメントに頼らない生活 No.08:誇張した効能宣伝にご注意|お役立ち情報
- 体脂肪低減うたう「サントリー特茶」データの中身 出典論文見ると腹部全脂肪面積の減少幅はわずか | 特集 | 東洋経済オンライン
Excel
regex
OptionExplicitさんから教えていただきましたが、正規表現にはバージョンがあってPCRE、PCRE2とあるようです。
— りゅうりゅう@VBAer × ココナラPRO認定 (@blacklist_ryu) December 28, 2024
VBAで使えるのは前者、ワークシート関数では後者になるとのこと。
後者の方が現在では一般的になるみたいですね。 https://t.co/56HL12nH4x
引用元の記事はまあUnicodeのプロパティ絡みのアレだよねえ というところだけど、 PCRE(とPCRE2)ってそういう文脈で使われるものなのか とおもったのだけど
Excelワークシート関数: 正規表現を扱う新しい関数、既存関数の新機能 #Excel - Qiita
REGEXTEST の解説記事によれば、使える正規表現は「PCRE2風」だとのことで、近い将来、強力で快適な正規表現生活が待っているようです。
この関数のすべての正規表現、および REGEXEXTRACT と REGEXREPLACE では、正規表現の PCRE2 ‘flavor’ が使用されます。
flavorが引っかかるけど確かにPCRE2という単語自体はあった。
んでも PCRE2Project/pcre2: PCRE2 development is based here. を使っているってことはないよねえ。たぶん。
Regular expression functions in Excel | Hacker News の中にこんな流れがあった
Any information on which standard they have implemented (POSIX BRE, ERE, PCRE, …. | Hacker News
Any information on which standard they have implemented (POSIX BRE, ERE, PCRE, …)? Since they are Microsoft, I would not be surprised if there is none.
All regular expressions for this function, as well as REGEXEXTRACT and REGEXREPLACE use the PCRE2 ‘flavor’ of regex.
Okay, thanks! Now next question which comes into my mind: is there info about the regex engine they are using? I would expect there is some (proprietary?) C++ library also used in other MS products or are they even using a FOSS licensed one?
Seems likely that if they explicitly say they’re supporting the PCRE2 syntax it is because they are using the BSD licensed libpcre.
Reinventing a regular expression system is very far down on the list of things I’d ever want to do. Those things are filled with dragons and require years of refinement to get the bugs out.
According to the documentation links in the article, it’s using PCRE2.
\dが「億」にマッチしたりするんですかね(笑)>Excelの正規表現
XFD
Excelネタもう一つ
↓のURLのPDFをダウンロードして印刷してモニターのそばに貼っておくと便利かも!(^ ^)https://t.co/YtYZ57qGcn https://t.co/qOUvWTX9Na
— りゅうりゅう@VBAer × ココナラPRO認定 (@blacklist_ryu) December 21, 2024
何か月か前にTがTwenty(20番目)という別の投稿を見かけていて それはすぐに覚えられた(笑)
Rは18番目か😄
リンク先のPDFには AからJZまでが1ページにまとめられているのだけど、 計算式で同じような表をXFD(16384番目)までつくれるんじゃないか と思って
=TEXTBEFORE(ADDRESS(1,SEQUENCE(16384/26+1,26,1,1),2),"$")
でAからXFDまで並べることはできた。 それぞれの下の行に対応する番号を入れるのはさて…
ところで最初は
=TEXTSPLIT(ADDRESS(1,SEQUENCE(16384/26+1,26,1,1),2),"$")
という計算式を使ったのだけどこれでもうまくいく。 んが、textsplitの結果はこの例の場合2要素になるから それの先頭要素だけを取り出す必要があるはずなのに、 それをしないでも動く。
実際A1セルに"A$1"を入力してからB1セルに
=TEXTSPLIT(A1,"$")
を入力するとB1にA、C1に1という結果になる。 ところが A1セルに"A$1"、A2セルに"B$1"を入力し B1セルを
=TEXTSPLIT(A1:A2,"$")
とすると、$の前の部分だけがスピルされる。
調べてみると
(Excel)TEXTSPLIT関数で分割した最後の項目を取得する - いきなり答える備忘録
なぜかというとTEXTSPLIT関数の第1引数に配列を与えるとそれぞれの最初の項目しか返ってこないからで、
- Strange behaviour with TEXTSPLIT which to me seems like a bug. Any - Microsoft Community
- =TEXTSPLIT() of array not returning 2d array - Microsoft Q&A
そういう動作になっているのは間違いなさそうだけど 公式の仕様として明記されているのは見つけられなかった。
で、16384個もあるんじゃ表にするのも大変だよね ということでA1セルに対応する数を知りたい列名や 逆に列名を知りたい数を入力すると それに対応する結果を返す計算式を (エラーチェックはさぼった)。
=INDEX(TEXTBEFORE(ADDRESS(1,SEQUENCE(16384,1,1,1),2),"$"),A1)
=MATCH(A1,TEXTBEFORE(ADDRESS(1,SEQUENCE(16384,1,1,1),2),"$"),0)
awk
getline
もうちょっとgetline < "/"
の件を追いかけてみた。
OTAの場合getlineの処理は awkgetlineという関数が担っていて
awk/run.c at master · onetrueawk/awk
Cell *awkgetline(Node **a, int n) /* get next line from specific input */
{ /* a[0] is variable, a[1] is operator, a[2] is filename */
Cell *r, *x;
extern Cell **fldtab;
FILE *fp;
char *buf;
int bufsize = recsize;
int mode;
bool newflag;
double result;
if ((buf = (char *) malloc(bufsize)) == NULL)
FATAL("out of memory in getline");
fflush(stdout); /* in case someone is waiting for a prompt */
r = gettemp();
if (a[1] != NULL) { /* getline < file */
x = execute(a[2]); /* filename */
mode = ptoi(a[1]);
if (mode == '|') /* input pipe */
mode = LE; /* arbitrary flag */
fp = openfile(mode, getsval(x), &newflag);
tempfree(x);
if (fp == NULL)
n = -1;
else
n = readrec(&buf, &bufsize, fp, newflag);
if (n <= 0) {
;
} else if (a[0] != NULL) { /* getline var <file */
x = execute(a[0]);
setsval(x, buf);
if (is_number(x->sval, & result)) {
x->fval = result;
x->tval |= NUM;
}
tempfree(x);
} else { /* getline <file */
setsval(fldtab[0], buf);
if (is_number(fldtab[0]->sval, & result)) {
fldtab[0]->fval = result;
fldtab[0]->tval |= NUM;
}
}
} else { /* bare getline; use current input */
if (a[0] == NULL) /* getline */
n = getrec(&record, &recsize, true);
else { /* getline var */
n = getrec(&buf, &bufsize, false);
if (n > 0) {
x = execute(a[0]);
setsval(x, buf);
if (is_number(x->sval, & result)) {
x->fval = result;
x->tval |= NUM;
}
tempfree(x);
}
}
}
setfval(r, (Awkfloat) n);
free(buf);
return r;
}
読み込みそのものはreadrec (awk/lib.c at master · onetrueawk/awk) という関数で
if ((sep = *rs) == 0) {
sep = '\n';
while ((c=getc(inf)) == '\n' && c != EOF) /* skip leading \n's */
;
if (c != EOF)
ungetc(c, inf);
}
for (rr = buf; ; ) {
for (; (c=getc(inf)) != sep && c != EOF; ) {
if (rr-buf+1 > bufsize)
if (!adjbuf(&buf, &bufsize, 1+rr-buf,
recsize, &rr, "readrec 1"))
FATAL("input record `%.30s...' too long", buf);
*rr++ = c;
}
if (*rs == sep || c == EOF)
break;
if ((c = getc(inf)) == '\n' || c == EOF) /* 2 in a row */
break;
if (!adjbuf(&buf, &bufsize, 2+rr-buf, recsize, &rr,
"readrec 2"))
FATAL("input record `%.30s...' too long", buf);
*rr++ = '\n';
*rr++ = c;
}
getcって読み込み失敗のときはEOFを返すでいいんだっけ?
kbk@toybox4:~$ vi opn.c
kbk@toybox4:~$ cat opn.c
#include <stdio.h>
int
main() {
FILE *fp = fopen("/", "r");
if (!fp) {
puts("ng");
else {
puts("ok");
int c = getc(fp);
printf("%d\n", c);
perror("");
fclose(fp);
}
return 0;
}
kbk@toybox4:~$
kbk@toybox4:~$ gcc opn.c
kbk@toybox4:~$ ./a.out
ok
-1
Is a directory
kbk@toybox4:~$
いずれにしてもgetcでは読み込みでエラーがあってもわからないわけだよね (別途ferrorで検査するなどのことをする必要がある)。
ちなみにgawkだとread(2)を使って読み込みを行っていて、 EOFに達したか読み込みに失敗したかはそこで判定している
/* fill initial buffer */
if (has_no_data(iop) || no_data_left(iop)) {
iop->count = iop->public.read_func(iop->public.fd, iop->buf, iop->readsize);
if (iop->count == 0) {
iop->flag |= IOP_AT_EOF;
return EOF;
} else if (iop->count == -1) {
*errcode = errno;
if (errno_io_retry() && retryable(iop))
return -2;
iop->flag |= IOP_AT_EOF;
return EOF;
} else {
iop->dataend = iop->buf + iop->count;
iop->off = iop->buf;
}
}
(iop->public.read_func
の実体がread(2))
OTAのこれも最近変えたものだとは思えない (UNIX V7のawkでも同じっぽい)のだけど、 そうするとgetlineの仕様を満足できないわけで なにがなにやら。
locale
めんどくさい
Re: supporting in the UTF-8 environment on native Windows
昭和100年
昭和100年とCOBOLはキャッチーだからタイトルにしていただいただけでして、本題は2038年問題のつもりなんですスイマセン!要はブラックボックス化の恐怖。動いてるから問題ないってわけにはいかんと気づいてほしい。 / “COBOL技術者の減少と、技術の「時限爆弾」に我々はど…” https://t.co/FEtUmYcGF3
— 上原 哲太郎/Tetsu. Uehara (@tetsutalow) December 23, 2024
TOKYO FMでは12/22深夜(つまりは23日)放送の 山田五郎と中川翔子の『リミックスZ』|山田五郎|中川翔子|AuDee(オーディー) | 音声コンテンツプラットフォーム でこの昭和100年問題が話題になったのだけど、 同時に2000年問題やら2036年問題などにも触れていた(ちょっと説明が怪しかったけど)。 そのなかに2036年問題というのもあって、 聴いていたときはそんなんあったっけ? ですませたけど、翌朝になっても気になったので(ry
ふむ。
pythonic
Python で len(x) がメソッドじゃなくて関数であるの何??感
— ま (@0x3b800001) December 18, 2024
別に x.len() でいいはずなんだよな
確かこれかなり以前に話題になったことがあって、 Guidoが見解を明確にしていなかったっけ?と思ったが
ほとんどの言及が(ぴー)なのは今に始まったことではないか。
ほぼ唯一のまともな反応がこれで
Pythonの組み込み型にlenメソッドはなくて、長さを知るときにlen関数を使うのはなぜ? Guido氏の意向に迫る https://t.co/LS87A5D2xm とかも経緯読み解きとして面白いすね https://t.co/ui4WmEIuI6
— yoh (@yohhoy) December 19, 2024
そこから辿った記事など。
- Pythonの組み込み型にlenメソッドはなくて、長さを知るときにlen関数を使うのはなぜ? Guido氏の意向に迫る - nikkie-ftnextの日記
- len が関数になっている理由 - methaneのブログ
2009年だったかー
コーディングシート
#今年も残りわずかなので今年一番伸びた写真を貼る
— 絶滅メディア博物館★公式 (@extinct_media) December 20, 2024
フォートランとベーシックの御寄贈お待ちしております! pic.twitter.com/Tu16m9rAXz
大学でFORTRANのは使ったな。 BASICのもあったのか。
技術者倫理
西亭新九郎が暗躍しているのか、 (技術者)倫理が話題になるのが続きますわねえ。
そういえば、高専ではこんな教科書読まさせられた。いろんな大企業の倫理やらかしエピソードが載ってて面白かった記憶がある。良い教育を受けたな。 https://t.co/TYaRialUSb pic.twitter.com/5dfDSHhDPp
— りくお | MarpWebEditor (@riku720720) December 23, 2024
高専でもこういう教科書あるのね
技術者倫理という単語がありましてね。IT技術者は技術者を名乗ってるけど素人なので知らない人もいるかと思いますが、メーカー技術者は研修を受けてほぼみんな知っているはず。
— いりじうむ (@irid_v2) December 22, 2024
ちなみにテキサス州とかで迂闊にエンジニア名乗ると大変な事になる。https://t.co/BYJwoaSHJe
— EFFY開発チーム (@effy_staffs) December 23, 2024
The IDEON
『伝説巨神イデオン』接触篇&発動篇のYouTube無料配信が決定。YouTubeのサンライズチャンネルの「2025年お正月スペシャル配信」の一環として、2025年1月3日午後8時から配信が開始されます https://t.co/NFJHxeyiQe
— amass (@amass_jp) December 26, 2024
なんと
ということで
2024年分はこれにて終了。 通常のペースだと次回は1/1になるけど、 たぶんスキップして1/4になります。 よいお年を。