昔の最近の出来事(2023.02)

2023/02/28

テレワーク。遅めに終了。

東京都コロナ感染者。新規は 1181人。

Cygwinを3.4.6でのメモリリークの状況。Emacsと拙作sysmonでじわじわプロセスサイズは大きくなっている模様。 まだ総稼働時間が短いので1GBを超えてはいないけど、減る要素は無さそうなのでやっぱりダメだとなるかも。

GIMP 2.10.34が出てるみたい。

2023/02/27

テレワーク。気持ち遅めに終了。

東京都コロナ感染者。新規は 370人。

テキストシェーピングエンジンのharfbuzzの7.0.1ってのが リリースされているのをCygwinのMLのアナウンスで知ったり。 よくわかっていないのですが、harfbuzz自身でカラー絵文字フォントのレンダリングもサポートされているのかしら? 「Dynamically load dwrite.dll on windows if “directwrite” shaper is enabled.」みたいな事も記されているので うまく使えば良い感じに文字をレンダリングできるのか?と思ったりも。

Cygwinを3.4.6にアップデートしてみたのですが3.4.3で起こっていたメモリリーク (以前の日記)は直っていないかも。1日様子見。

2023/02/26

AM中に起床。

掃除したり洗濯したり。

東京都コロナ感染者。新規は 810人。

Web散策していてたまたま知ったツイートの動画。 世の中にはこの規模でこんな実験ができる施設があるんだと思ったりも。

Web散策していて知った 「プログラミングをやりたくない人の気持ち」という記事。 なるほど、プログラミングの本というよりはプログラミング言語の本という感じなのでしょうかね。 現在は 目的を達成するのに必ずしもプログラミングする必要が無いという場面が多いのも事実です。 誰かがプログラミングできる必要はあるとは思うのですが、みんなができる必要があるか否かは その時々によるのかも知れません。 割り切って、目的を達成する手段の一つくらいに捉えるのが良いのかも知れません。だって、現実問題として欲しいと思ったものを必要な時に 必ずしも作れるとは限りませんし(主観)。 ただ、プログラムで どういう事はできてどういう事は難しいのかを 判断できるくらいの知識は必要かな とは思います。

そういえば大分前に、 PC-6000の広告に 「自作のプログラムが動いた。やめられなくなるな。」というコピーが載っていた (参考ページ) のを知りましたが、今の人向けに言うとしたらどんなコピーにする?って思ったりも。

2023/02/25

AM中に起床。

東京都コロナ感染者。新規は 1182人。

漫勉の島本和彦回。本人のうるさい感じも含めて面白かったです。 絵が決まるのが異常に速くてスゴいと思いました。あと結構デジタルが導入されているのも意外に思ったかも。 マウント武士、気になるキャラだ。

Emacs29。まだ29.0.90が来そうな気配は無し。treesitter向けにfaceが足されてたりしていて なかなか整わないなぁと思ったりも。

2023/02/24

AM中に起床。本日休業。

東京都コロナ感染者。新規は 427人。

全然関係ない流れで三毛猫はほとんどがメスというのを知りました(参考Wikipedia)。 遺伝的特性の都合らしい。そういや以前「チコちゃんに叱られる」で 「なんで猫だけ色々な模様があるの?」ってのがあって、色の変化は突然変異らしいのですが、 柄が決まる要因はまだよくわかっていないって感じでした。 因みに答えは「人間が飼っているから」でした。自然界だと目立つ柄でも人に飼われていると 生存確率が上がるからという理屈でした。

実験中のdlang-ts-modeに breakと continueにラベルを指定した時の色付けに対応してみたり。 因みにd-modeは一番最初のバージョンから 対応されている感じでした。

switchステートメントでのcaseのインデント。 以前、ちょっとだけd-modeでのsiwtchステートメントのcaseインデントが変な感じ と記したのですが、少し調べてみると 世の中には大きく以下の二種類があるようです。

caseをインデントするタイプ caseをインデントしないタイプ
switch(x){
  case 0:
      :
    break;
  case 1:
      :
    break;
  default:
      :
    break;
}
switch(x){
case 0:
    :
  break;
case 1:
    :
  break;
default:
    :
  break;
}

d-modeは「caseをインデントしないタイプ」なのですが、ブロックでインデントするというルールを無視しているので ずっと違和感がありました。でも変えられないのでそれに従っていました😓
caseをインデントしないタイプ派にも言い分はあるようですが どれもイマイチ納得感がありません。 むしろ「switchステートメントのスコープ内でのみ case の引数リストが有効である」と考えると インデントする方が理に適っていると考えます。
例えばswitchで指定した値(以下の例ではx+y+z)のスコープがブロックに対応付いている事を強引に示す とするならば以下のような感じかな?

switch文(caseインデントあり) 強引に置き換え
switch(x+y+z){
  case 0:
      :
    break;

  case 1:
      :
    break;

  default:
      :


}
for(auto _tmp=x+y+z;;){ //_tmpがforブロックのスコープ内
  if(_tmp==0){
      :
    break;
  }
  if(_tmp==1){
      :
    break;
  }
  if(true){
      :
  }
  break;
}

「caseはラベルの一種と見なす」よりは「switchに対応する特殊条件表記のif文」と考える感じかなと思います。

2023/02/23

AM中に起床。

東京都コロナ感染者。新規は 1072人。

ちょろっと競プロ。今日選んだお題はコンパクトに書けた気がする。
マルチバイト文字を含まないような場合でも、perlとかだと文字列の部分切り出しには 関数substr() とかを 使う必要がありますが、D言語やpythonではスライスを使って切り出す事ができます。 文字単位で処理をする事が久しく無かったのでD言語でもこれイケるんだと再認識し直したりも。
因みに今回ハマったのが D言語での .length プロパティで返る型が ulong(仕様上はsize_t)という所。 「for(int i=0;i<str.length-x;i++){...}」みたいなコードを書いたのですが、「str.length-x」が0より小さくなる (のを期待した)場合に 当たり前ですがうまく動きません😓。 大体いつも配列や文字列の長さ分(0以上)だけ処理を行う事が多いので、 たまに前述のような処理量を限定する事をやるとハマりがちです。修行が足りません。

そういえば少し前に、多重ループを一気に脱出するのに JavaScriptでは forステートメントに ラベルを付けて brakeにラベルを指定する事で脱出できるのを知りました。D言語ではできないのかと思っていたのですが、 breakステートメントの説明を見ると、 breakの後に識別子(ラベルに対応させる)を指定する事ができるようになっていて、while,for,do,switchステートメントにラベルを付ける 事ができる(Labeled statementsと呼ぶらしい)のを知りました。 ラベルの方にしか説明が無く、while,for,do,switchステートメントの方に説明や例が示されていないので できないのかと思ってました😅。

$ cat multiloop_break.d
import std.stdio;
import std.string;

int main(string[] args)
{
  loopi:for(int i=0; i<5; i++){
    for(int j=0; j<5; j++){
      writefln("%d %d",i,j);
      if(i==2 && j==2)
        break loopi;
    }
  }
  return 0;
}

$ ldc2 -O2 multiloop_break.d

$ ./multiloop_break.exe
0 0
0 1
0 2
0 3
0 4
1 0
1 1
1 2
1 3
1 4
2 0
2 1
2 2


冷静に考えてみるに言語世代的にできないって事は無いか。修行が足りません。

2023/02/22

テレワーク。早くもなく遅くもなく終了。

東京都コロナ感染者。新規は 1195人。

そういや銀河鉄道999のTVアニメの最終回。メーテルと別れる流れの中で、メーテルは一人ではなくて 鉄郎とは別の少年を連れてたのですが、冷静に考えると なんか 怖っ て思ったりも。

2023/02/21

テレワーク。早くもなく遅くもなく終了。

東京都コロナ感染者。新規は 1451人。

競プロ。pythonの解説コードで2次元のマップがグラフになっているのか判らなかったのですが、 「文字列1 in 文字列2」が理解できていなかったのが原因でした😓。以下のような例。

        if s[x] in ".^" and i > 0:
            g[x - W].append(x)

どういう意味なのか解っていなかったのですが、以下のような事らしい。

$ python3
Python 3.9.10 (main, Jan 20 2022, 21:37:52)
[GCC 11.2.0] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> "a" in "ab"
True
>>> "b" in "ab"
True
>>> "c" in "ab"
False


つまるところ「x in "ab"」はxが1文字という前提で「x=="a" || x=="b"」と同じと言えます。 D言語だと「"ab".indexOf(x)>-1」みたいな感じにもできるでしょうか。 なるほどと思う所もあるのですが あまり直感的ではないようにも感じます。

松本零士氏 死去。85歳ですか。

2023/02/20

テレワーク。気持ち遅めに終了。

東京都コロナ感染者。新規は 510人。

Emacs29のgitブランチを見ていると、ChangeLogやetc/HISTORYが更新されていて Emacs-28.3が 2月17日付けで リリースされている事になってるようだったり? Emacs公式ページにアナウンスは出ていないし、 アーカイブサイトにも tar-ballは置かれていないようなのですが?🤔

2023/02/19

AM中に起床。

掃除したり洗濯したり。

東京都コロナ感染者。新規は 992人。

探索アルゴリズム。個人的に苦手な分野です😓。 先日の競プロ問題はこちらなのですが、 解説のコードでは 幅優先探索(BFS:breadth first search)(参考Wikipedia) に 両端キュー(deque:double-ended queue)(参考Wikipedia)を使うという実装が行われているようです。 幅優先探索がグラフ図のイメージではどういうものかも、両端キューがどういうものかも 判るものの、 何故かコードを見てもなんのこっちゃよく判らない😓

いくつか例を見てやっと解った気も。あるノードの次に探索するノード(群)を覚えておくのにFIFO(first in first out)式のキューを使っているのだと理解。 ノードに記された番号が単なるノードのIDなのか探索の順番なのか開始ノードからのホップ数なのかが分かりにくくて 混乱してました。FIFOの代わりにFILO(first in last out; スタックと同じ)式のキューを使うと 深さ優先探索(DFS:depth first search)(参考Wikipedia) になるらしい。なるほど確かに。

でも、件の競プロ問題の解説コードで、探索前にグラフの構築を行っているのですが、これで2次元のマップがグラフになっているのかが まだよく解らない....

2023/02/18

昼前起床。

東京都コロナ感染者。新規は 1146人。

競プロコーディング。作戦ミスな気がしてきた。考え直し。

考え直したアルゴリズムは実装が面倒臭くてどうしたもんか....って感じになってます。 なんか間違えているのかも。

Pouetlovebyte 2023 の結果が上がっていたのですが、 その中のBlue Rippleという16byte作品がマジでか!?という感じでした (思わずVMware上のFreeDOSで動かしたらホンマや...ってなりました)。 因みに「32b」となってますが16byteです。Pouetサイト表示上 32bより小さい分類が無いっぽいです😅。 去年もlovebyte 2022の 16byte作品にどんだけ?と思ったのですが、 まだまだ新たな作品が生み出されるようです。

競プロ。諦めて解説を参照😅。考え方の方針はふんわり合ってるくらいですが、実装例を見ても 何故これでうまくいくのか よく判らなかったり。修行が足りません。

2023/02/17

テレワーク。早くもなく遅くもなく終了。

東京都コロナ感染者。新規は 1272人。

競プロコーディング。まとまらず。

2023/02/16

テレワーク。早めに終了。

東京都コロナ感染者。新規は 1454人。

goto文。C言語だと必ず使わなくてはならない場面は無いと思いますが、昔のBASIC(N88-BASICとかの時代)だと ループを書く場合など使わざるを得ない場面が多々あったように思います。 今調べてみるとwhile文は使えたようですが、breakやcontinueに相当するものが無いようなので、 結局gotoを使わないと思った事ができない場合がありそうです。 古いFORTRANだと 算術IF(参考)は 条件付きgoto文という感じだったと思います。
さておき、文法的にgotoを使わざるを得ない場面が無く、且つ 使う方が面倒臭いという感じなので、 現在のプログラム言語では自然とgotoを使う事は無くなっているのだろうと思われます。 D言語でも多重ループを脱出する文法があればなぁ?と思う所です(※後日追記:できます)。

2023/02/15

テレワーク。気持ち遅めに終了。

東京都コロナ感染者。新規は 1858人。

競技プログラミング。 この問題をやってみました。 ひとまず解けるものにはなったのですが、やっぱり問題文をミスリードしてしまいます。 変数xとyの使い方が行と列で逆になっているので混乱します。

2023/02/14

テレワーク。早くもなく遅くもなく終了。

東京都コロナ感染者。新規は 2232人。

競技プログラミング。時間無視でコーディング練習してみているのですがどうにも同じようなコードを並べてしまいがち。 一応動くけどなんか長いって感じです。あと、読解力が無さ過ぎて問題の意味がよくわからないものがあります。 制約やサンプルから意味が判るものはありますが、サンプルを見てもなんだかよく判らないものも。慣れでどうにかなるのだろうか?

実験中のdlang-ts-mode。一部インデントがイマイチな感じになるケースがあったり。でも対応方法が判らない。うーむ。

2023/02/13

テレワーク。早めに終了。

東京都コロナ感染者。新規は 810人。

ちょろりコーディング。多重ループを一気に抜けるのにはgotoを使いたくなります。 pythonには forブロックの後にelseブロックを置いて多重ループを抜ける方法があるらしい。 JavaScriptには forステートメントにラベルを付けて breakにラベルを指定する事で、内側ループから外側ループをbreak する事ができるらしい。ほぅ....

2023/02/12

AM中に起床。

掃除したり洗濯したり。

東京都コロナ感染者。新規は 799人。

競技プログラミング。文字列としてWebで見る事はあったのですが 具体的にどんなものかよく知らなかったので調べてみたり。 「競技プログラミング」のWikipediaによると、 「参加者全員に同一の課題が出題され、より早く与えられた要求を満足するプログラムを正確に記述することを競う。」ものらしい。 色々あるようです。たまたま上の方にあったAtCoderのサイトに過去問題が公開されていたので 見てみました。ぱっと見 いきなり書くのはムズかしそうと思いました😅。 そんな訳で、D言語で最初の方の問題をやってみたのですが、やっぱり ぱっと見の感触通り 調べながらじゃないとダメだ😅。 因みに使用言語は問わないっぽいですが、標準Cライブラリ縛りのC言語だと実装が大変な問題もありそうです。

1月8日頃のEmacs 29.0.60と実験中のdlang-ts-modeを使って実装してみていたのですが、何故かインデントが変に反応する場面があります。 あるネストされたforブロックでは問題無いのに、それをコピペすると何故かコピペしたブロックでインデントが変になるので なんでだ?という感じです。29のgitブランチでtreesitter関連修正行われているので それが反映されたら自動的に直るのを期待したり。でも、 2月には29.0.90が来るかな?と予想していたのですがまだ来ないです....

2023/02/11

AM中に起床。

東京都コロナ感染者。新規は 1752人。

先日 漫勉neoが始まるのにギリギリ気づいてリアルタイムと録画で観たり。 先週から始まっていたようですが 気づいていませんでした😓。さておき、今回は 水瀬藍 氏。 冒頭の「ブラタモリじゃない方の番組」とは 以前放送されていたタモリ倶楽部のスクリーントーン回の事かと。 9ヵ月くらい前の事だと今気づきました。さておき、今回の放送でコリンスキーの筆というのがあるのを知りました (因みにコリンスキーとはチョウセンイタチの毛の事らしい(参考)。 筆のメーカーではない)。 スクリーントーンもカラー原稿も全てアナログでしたが、過去の漫勉で放送されたデジタル作画回を思い返してみても、 結局手間はどちらも同じくらいかかっているよなぁ?とは思ったりも。下手するとUNDOが無い分アナログの方が速いかも?

Google Fonts。Emacsで各国言語の文字を表示するのにNotoフォントを探す事はあったのですが、 Noto以外の日本語文字フォントも置かれているのを知りました。 Windows10だと標準で入っている「BIZ UDゴシック」も 「BIZ UDGothic」として 置かれているようです。ほぅ....

2023/02/10

テレワーク。早くもなく遅くもなく終了。

東京都コロナ感染者。新規は 1922人。

Emacsでのpythonコーディング向け(実際にはほとんど書いてませんが)にflymake-python-pyflakesパッケージを使用してたのですが、 新しい環境でなぜかエラーするようになったり。結論から言うと 新しいflake8ではカラー表示するようになったのですが、出力されるカラーエスケープシーケンスを食って エラーになっていたのが原因でした。 flake8のオプションに --color=never を足して解決したのですが、毎度flymakeやflycheckは エラーの原因がすぐに究明できなくてハマります。因みにflake8がエラーすると代わりにpyflakesが 実行されていて、こちらでなんとなくチェックできてしまっていたので flake8がエラーしている事に すぐに気づきませんでした😓

2023/02/09

テレワーク。遅めに終了。

東京都コロナ感染者。新規は 2173人。

Inkscapeの1.3向けスクリーンコンテストが行われている模様 (About Screen Contest)。 20周年を祝うってテーマらしい....そんなになるんだっけ? TANEがInkscapeを知ったのは2007年2月23日だったのですが、 それでも16年前になるのか。さておき、年一回周期だとすると1.3のリリースは5月頃か?

2023/02/08

テレワーク。遅めに終了。

東京都コロナ感染者。新規は 2612人。

あまりの眠さに急速停止。

2023/02/07

テレワーク。遅めに終了。

東京都コロナ感染者。新規は 3131人。

Web巡回して終了。

2023/02/06

テレワーク。遅めに終了。

東京都コロナ感染者。新規は 1105人。

調べ事して終了。

2023/02/05

AM中に起床。

掃除したり洗濯したり。

東京都コロナ感染者。新規は 2287人。

Web散策していて知った 「A Virtual Wooden Pixel Display Created in Unity」。 実物ではないのですが、もしパネルを1枚ずつ動かす事ができれば ちゃんと絵として見えるという事なのでしょう。ほぅ....

Emacs29のブランチ。大分落ち着いてきた気はするものの、treesitter関連の変更がちょいちょい行われているような気も。 まだしばらく29.0.90は来ないかな....?

2023/02/04

AM中に起床。

散髪にお出かけ。

東京都コロナ感染者。新規は 2992人。

libjxlがCygwin64のclangでコンパイルエラーになる件。 「_mm512_cvtsi512_si32」という関数が見つからないという感じだったのですが、単純にコンパイラのバージョンだけを見て(?) AVX512を有効にしているようだったので、とりあえずdefineをコメントアウトしてみたところコンパイルエラーせずに ビルドできました。実行もひとまず問題無さげ。

2023/02/03

テレワーク。遅めに終了。

東京都コロナ感染者。新規は 2941人。

libjxlのv0.8.0が出てたらしい。 mainブランチ(次のv0.9.0向け)をCygwin64のclangでビルドしてみたのですが、コンパイルエラーでビルド失敗。 gccだとビルドに成功。デコードの方は大丈夫そうだけどエンコードの方はコアダンプしてダメ。 gccだとエンコードに失敗するのは以前から変わらない感じかも。

2023/02/02

テレワーク。遅めに終了。

東京都コロナ感染者。新規は 3502人。

GIMPの2022年の年次報告書のページが上がっていたり (2022 annual report)。 約束はしていない事に念を置いた感じですが 2023年中の3.0.0リリースについて触れられてました。 去年は3.0のリリースについて言及が無かったのですが、 今年は触れられている点でリリースに向けて開発は進んでいる事が伺えるかなと思いました。

2023/02/01

テレワーク。遅めに終了。

東京都コロナ感染者。新規は 4012人。

あまりの眠さに急速停止。


TOP PREV