寒くてキーボードを叩けないので開き直って YouTube に逃げる。

2:40 消灯。寝ると寒い。寒いのにブルーシートが毛布からはがれる。

9:50 起床。洗濯機をまわす。納豆とミニハンバーグ弁当を食う。 ハンバーグ弁当というにはポテトサラダ、フライドポテト、コロッケとじゃがいもモノが多い。 洗濯物を干して外出。

ひきふね図書館。月刊ホビージャパン、月刊ふらんすをチェック。 月刊文藝春秋の残りを読む。塩野七生先生の入院録がさすがに読ませる。 新井紀子先生はどうやって法学から進路変更して数学と物理学を学習したのだろう。 今月号はアインシュタインと神の話がちらほら出てくるのが印象的だった。

退館。イトーヨーカドー曳舟店で体温チェック。

曳舟の部屋。窓を開けるのを忘れていた。食ったばかりだが時間の都合でおやつ。PC を起動。

14:30 昼寝。体を横にすると胃の中身が戻ってきそうだ。

16:30 起床。外出。

押上駅バス停。じっと待ってバスに乗る。錦糸公園前で降りる。

17:15 オリナス錦糸町。三階トイレ。二階ベンチで休憩。 いつも読み切れない Twitter のタイムライン。

18:00 タイトー F ステーションオリナス錦糸町店。MJ プロ卓東風戦 3 クレ。浮きで終了。 ラスを二回食った。いずれもひどい放銃があったが、考えようによってはラスのゲームの内容にダメさを押し込んだとも言える。 現在今月の上位プレイヤー 50 位に入っている。上手くいくと月末まで持ちこたえられる。持ちこたえてくれ。

【SCORE】
合計SCORE:+172.3

【最終段位】
四人打ち段位:伏龍 幻球:12

【12/27の最新8試合の履歴】
1st|*-*--**-
2nd|---**---
3rd|--------
4th|-*-----*
old         new

【順位】
1位回数:4(40.00%)
2位回数:4(40.00%)
3位回数:0(0.00%)
4位回数:2(20.00%)
平均順位:2.00

プレイ局数:48局

【打ち筋】
アガリ率:29.17%(14/48)
平均アガリ翻:3.79翻
平均アガリ巡目:11.79巡
振込み率:10.42%(5/48)

【12/27の最高役】
・跳満
・跳満

20:20 カスミオリナス錦糸町店。552 円。

  • 八宝菜丼
  • フライドチキン(ドラム)
  • ブラックチョコ
  • 野菜ジュース (900)
  • ライス

20:45 ビッグエー墨田業平店。228 円。

  • 小粒納豆 (3)
  • 絹豆腐
  • しょうゆヌードル
  • コッペパンホイップ&カスタード

20:55 曳舟の部屋。子供携帯電話の充電を仕込んで入浴。窓を全開にして外出したくらいでは服が乾き切っていないか。

21:30 PC 前に戻って晩飯。

22:05 インターネット。メールなし。これで今年も無職で年を越すことが確定した。

Shapes の続き。点から描こう。いきなり矩形はハードルが高い。 コツコツと部品から実装し、モンドリアンを完成させる:

precision highp float;

uniform vec2 u_resolution;

float computeDistanceToLine(
    in vec2 p1,
    in vec2 p2,
    in vec2 p0)
{
    return abs((p2.x - p1.x) * (p1.y - p0.y) - (p1.x - p0.x) * (p2.y - p1.y)) / distance(p1, p2);
}

vec3 drawLine(
    in vec2 pt1,
    in vec2 pt2,
    in vec3 color,
    in vec3 defaultColor,
    float border,
    in vec2 st)
{
    return mix(
        color,
        defaultColor,
        step(border, computeDistanceToLine(pt1, pt2, st)));
}

vec3 drawLineSegment(
    in vec2 pt1,
    in vec2 pt2,
    in vec3 color,
    in vec3 defaultColor,
    float border,
    in vec2 st)
{
    return mix(
        mix(
            color,
            defaultColor,
            step(border, computeDistanceToLine(pt1, pt2, st))),
        defaultColor,
        step(0., dot(pt1 - st, pt2 - st)));
}

// オマケ
vec3 drawRect(
    in vec2 corner1,
    in vec2 corner2,
    in vec3 lineColor,
    in vec3 defaultColor,
    float border,
    in vec2 st)
{
    defaultColor = drawLineSegment(corner1, vec2(corner2.x, corner1.y), lineColor, defaultColor, border, st);
    defaultColor = drawLineSegment(vec2(corner2.x, corner1.y), corner2, lineColor, defaultColor, border, st);
    defaultColor = drawLineSegment(corner2, vec2(corner1.x, corner2.y), lineColor, defaultColor, border, st);
    defaultColor = drawLineSegment(vec2(corner1.x, corner2.y), corner1, lineColor, defaultColor, border, st);
    return defaultColor;
}

vec3 fillRect(
    in vec2 corner1,
    in vec2 corner2,
    in vec3 faceColor,
    in vec3 defaultColor,
    in vec2 st)
{
    vec2 minV = min(corner1, corner2);
    vec2 maxV = max(corner1, corner2);
    
    defaultColor = mix(
        defaultColor,
        faceColor,
        (step(minV.x, st.x) - step(maxV.x, st.x)) * (step(minV.y, st.y) - step(maxV.y, st.y)));

    return defaultColor;
}

void main(){
    vec2 st = gl_FragCoord.xy/u_resolution.xy;

    const vec3 defaultColor = vec3(0.970, 0.937, 0.812);
    const float borderWidth = .01;
    const vec3 faceColor1 = vec3(0.855, 0.000, 0.000);
    const vec3 faceColor2 = vec3(0.885, 0.885, 0.000);
    const vec3 faceColor3 = vec3(0.215, 0.418, 1.000);

    vec3 color = defaultColor;

    const float x1 = .06;
    const float x2 = .2;
    const float x3 = .7;
    const float x4 = .925;
    const float y1 = .1;
    const float y2 = .65;
    const float y3 = .85;
    color = fillRect(vec2(0.0, y2), vec2(x2, 1.0),
                    faceColor1, color, st);
    color = fillRect(vec2(x4, y2), vec2(1., 1.0),
                    faceColor2, color, st);
    color = fillRect(vec2(x3, 0.), vec2(1., y1),
                    faceColor3, color, st);

    const vec3 lineColor = vec3(.0);

    // Horizontal lines
    color = drawLine(vec2(0.0, y3), vec2(1., y3), lineColor, color, borderWidth, st);
    color = drawLine(vec2(0.0, y2), vec2(1., y2), lineColor, color, borderWidth, st);
    color = drawLineSegment(vec2(x2, y1), vec2(1., y1), lineColor, color, borderWidth, st);
    
    // Vertical lines
    color = drawLineSegment(vec2(x1, y2), vec2(x1, 1.), lineColor, color, borderWidth, st);
    color = drawLine(vec2(x2, 0.), vec2(x2, 1.), lineColor, color, borderWidth, st);
    color = drawLine(vec2(x3, 0.), vec2(x3, 1.), lineColor, color, borderWidth, st);
    color = drawLine(vec2(x4, 0.), vec2(x4, y1), lineColor, color, borderWidth, st);

    gl_FragColor = vec4(color, 1.0);
}

ビデオに撮影して今晩のワークを終えたい。