technicalsuwako.moe/gemini/blog.atom

468 行
58 KiB
XML
Raw Blame 履歴

このファイルには曖昧(ambiguous)なUnicode文字が含まれています

このファイルには、他の文字と見間違える可能性があるUnicode文字が含まれています。 それが意図的なものと考えられる場合は、この警告を無視して構いません。 それらの文字を表示するにはエスケープボタンを使用します。

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0">
<id>gemini://technicalsuwako.moe</id>
<title>テクニカル諏訪子</title>
<updated>2024-02-17T00:00:00Z</updated>
<author><name>テクニカル諏訪子</name></author>
<link href="gemini://technicalsuwako.moe" rel="alternate"></link>
<entry>
<id>blog/sdl2-easy-collision.gmi</id>
<author><name></name></author>
<title type="html">【SDL2】簡単な3D衝突検出の解説</title>
<published>2024-02-17T00:00:00Z</published>
<category term="blog"></category>
<category term="jp"></category>
<category term="プログラミング"></category>
<category term="zig"></category>
<category term="sdl"></category>
<category term="opengl"></category>
<category term="ゲーム開発"></category>
<link href="gemini://technicalsuwako.moe/blog/sdl2-easy-collision.gmi" rel="alternate"></link>
<content type="html">
&lt;p&gt;最近、自作のゲームを作成していますが、衝突検出を実装する事に懸念を抱きました。&lt;br /&gt;
しかし、作った後はそんなに難しくないと気づきました。&lt;br /&gt;
その為、今回はこれについて説明します。&lt;br /&gt;
記事での利用している言語はZig言語ですが、C言語やC++でも使えます。&lt;/p&gt;
&lt;h2 id=&#34;heading&#34;&gt;プログラミングタイム!!&lt;/h2&gt;
&lt;p&gt;3つのオブジェクトを設置します。&lt;/p&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;// オブジェクト
&lt;/span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;const&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;Wall&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;struct&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;x&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;y&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;z&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;size&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;};&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;const&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;Floor&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;struct&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;x&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;y&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;z&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;size&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;};&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;const&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;Player&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;struct&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;xpos&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;ypos&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;zpos&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;xsize&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;ysize&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;zsize&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;velocity&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;gravity&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;};&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;wall&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;Wall&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;.x&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;6.0&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;.y&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0.0&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;.z&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;26.0&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;.size&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;6.0&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;};&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;floor&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;Floor&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;.x&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;6.0&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;.y&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;7.0&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;.z&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;26.0&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;.size&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;50.0&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;};&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;player&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;Player&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;.xpos&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0.0&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;.ypos&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;50.0&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;.zpos&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0.0&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;.xsize&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0.2&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;.ysize&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0.8&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;.zsize&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0.2&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;.velocity&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0.1&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;.gravity&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0.2&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;};&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;fn&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;draw()&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;void&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;// ここは`glBegin`、`glVertex3f`等を設置しますが、長すぎる為、これはスキップします。
&lt;/span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;&lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;上記のコードで、主に「gravity」や「velocity」が大切です。&lt;br /&gt;
次は衝突検出の関数を作ります。&lt;/p&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;fn&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;checkPosToObj(xpos&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;ypos&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;zpos&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;size&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;obj&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;anytype)&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;bool&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;const&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;thresholdX&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;size;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;const&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;thresholdY&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;size;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;const&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;thresholdZ&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;size;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;const&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;deltaX&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f&#34;&gt;@abs&lt;/span&gt;(xpos&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;obj.xpos);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;const&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;deltaY&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f&#34;&gt;@abs&lt;/span&gt;(ypos&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;obj.ypos);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;const&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;deltaZ&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f&#34;&gt;@abs&lt;/span&gt;(zpos&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;obj.zpos);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;return&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;deltaX&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;thresholdX&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;deltaY&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;thresholdY&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;deltaZ&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;thresholdZ;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;床と壁のサイズ値は1つだけで、プレイヤは3つ(X, Y, Z)がある為、上記を使った方が良いですね。&lt;br /&gt;
両方のオブジェクトが3つのサイズ値があれば、下記の関数を使っては良いと思います。&lt;/p&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;fn&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;checkObjToObj(a&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;anytype,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;b&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;anytype)&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;bool&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;const&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;thresholdX&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;a.xsize;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;const&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;thresholdY&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;a.ysize;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;const&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;thresholdZ&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;a.zsize;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;const&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;deltaX&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f&#34;&gt;@abs&lt;/span&gt;(a.xpos&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;b.xpos);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;const&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;deltaY&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f&#34;&gt;@abs&lt;/span&gt;(a.ypos&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;b.ypos);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;const&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;deltaZ&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f32&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f&#34;&gt;@abs&lt;/span&gt;(a.zpos&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;b.zpos);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;return&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;deltaX&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;thresholdX&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;deltaY&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;thresholdY&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;deltaZ&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;thresholdZ;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;thresholdはいつでもプレイヤ以外のオブジェクトのサイズとなります。&lt;/p&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;pub&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;fn&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;main()&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;!&lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;void&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;// ...
&lt;/span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;// 衝突検出
&lt;/span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;if&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;(checkPosToObj(floor.x,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;floor.y,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;floor.z,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;floor.size,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;player))&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;std.debug.print(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;床を触って良かった! ypos = {d}&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;.{player.ypos});&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;player.ypos&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;floor.y&lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt;(player.ysize);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;else&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;std.debug.print(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;ああああああ!! ypos = {d}&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;.{player.ypos});&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;player.ypos&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;-=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;player.gravity;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;if&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;(checkPosToObj(plane.x,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;plane.y,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;plane.z,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;plane.size,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;player))&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;std.debug.print(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;壁だわ...&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;.{});&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;player.zpos&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;plane.z&lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt;(player.zsize);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;// ...
&lt;/span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;&lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;heading-1&#34;&gt;結果&lt;/h2&gt;
&lt;p&gt;&lt;video src=&#34;https://ass.technicalsuwako.moe/zig-cd.ogv&#34; controls=&#34;controls&#34; style=&#34;max-height: 400px;&#34;&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;ねぇ!簡単でしょ〜!&lt;/p&gt;
&lt;p&gt;以上&lt;/p&gt;
</content>
</entry>
<entry>
<id>blog/sp-120.gmi</id>
<author><name></name></author>
<title type="html">】sp 1.2.0登場</title>
<published>2024-02-01T00:00:00Z</published>
<category term="jp"></category>
<category term="blog"></category>
<category term="ウエブ開発"></category>
<category term=""></category>
<category term="sp"></category>
<link href="gemini://technicalsuwako.moe/blog/sp-120.gmi" rel="alternate"></link>
<content type="html">
&lt;h2 id=&#34;sp&#34;&gt;spって何?&lt;/h2&gt;
&lt;p&gt;spはシンプルなパスワードマネージャです。&lt;/p&gt;
&lt;h2 id=&#34;heading&#34;&gt;変更&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;やっとTOTP機能性を修正した&lt;/li&gt;
&lt;li&gt;makeを実行したら、バイナリがもっと小さくなる&lt;/li&gt;
&lt;li&gt;パスワードの長さの延長&lt;/li&gt;
&lt;li&gt;パスワード追加機能性で、パスワードが既に存在するかどうか確認&lt;/li&gt;
&lt;li&gt;パスワード削除機能性で、パスワードが存在ないかどうか確認&lt;/li&gt;
&lt;li&gt;パスワード変更機能性の追加&lt;/li&gt;
&lt;li&gt;zsh対応の修正&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;heading-1&#34;&gt;ソースコード&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://gitler.moe/suwako/sp&#34;&gt;Gitler&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;以上&lt;/p&gt;
</content>
</entry>
<entry>
<id>blog/neovim-code-template.gmi</id>
<author><name></name></author>
<title type="html">【Neovim】テンプレートと作り方</title>
<published>2024-01-31T00:00:00Z</published>
<category term="jp"></category>
<category term="blog"></category>
<category term="neovim"></category>
<category term="開発"></category>
<category term="プログラミング"></category>
<category term="linux"></category>
<category term="bsd"></category>
<category term="freebsd"></category>
<category term="openbsd"></category>
<category term="zig"></category>
<category term="c言語"></category>
<category term="php"></category>
<category term="go言語"></category>
<link href="gemini://technicalsuwako.moe/blog/neovim-code-template.gmi" rel="alternate"></link>
<content type="html">
&lt;p&gt;&lt;a href=&#34;/blog/zig-gengo-1.xhtml&#34;&gt;Zigの使い方第部を投稿した後、この言語を辞めました。&lt;/a&gt;&lt;br /&gt;
理由は自由にフォーマット出来なかった事です。&lt;br /&gt;
しかし、解決方法を見つけましたが、それが結構面倒くさいと思います:&lt;/p&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;// zig fmt: off
&lt;/span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;// vim: set ts=2 sts=2 sw=2 et:
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;各「.zig」ファイルで上記のコメントを自分で貼る事が必要為、「neovimは自動で追加されたら良いなぁ」と思ったら、やっぱりそれが可能です&lt;/p&gt;
&lt;h2 id=&#34;confignviminitlua&#34;&gt;~/.config/nvim/init.lua&lt;/h2&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;vim.api.nvim_exec(&lt;span style=&#34;color:#b44&#34;&gt;[[
&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt; autocmd BufNewFile *.zig 0r ~/.config/nvim/template.zig
&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;]]&lt;/span&gt;, &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;false&lt;/span&gt;)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;confignvimtemplatezig&#34;&gt;~/.config/nvim/template.zig&lt;/h2&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;// zig fmt: off
&lt;/span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;// vim: set ts=2 sts=2 sw=2 et:
&lt;/span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;const&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;std&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f&#34;&gt;@import&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;std&amp;#34;&lt;/span&gt;);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;それで、毎回「&lt;code lang=&#34;&#34;&gt;nvim ほげほげ.zig&lt;/code&gt;」で使って新しい「.zig」ファイルを作ったら、自動で上記の行列を追加されます。&lt;br /&gt;
これを好みでしたので、他の言語のテンプレートを作りました。&lt;/p&gt;
&lt;h2 id=&#34;confignviminitlua-1&#34;&gt;~/.config/nvim/init.lua&lt;/h2&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;-- テンプレート&lt;/span&gt;
vim.api.nvim_exec(&lt;span style=&#34;color:#b44&#34;&gt;[[
&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt; autocmd BufNewFile *.c 0r ~/.config/nvim/template.c
&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt; autocmd BufNewFile *.cc 0r ~/.config/nvim/template.cc
&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt; autocmd BufNewFile *.h 0r ~/.config/nvim/template.h
&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt; autocmd BufNewFile *.hh 0r ~/.config/nvim/template.hh
&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt; autocmd BufNewFile *.go 0r ~/.config/nvim/template.go
&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt; autocmd BufNewFile *.md 0r ~/.config/nvim/template.md
&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt; autocmd BufNewFile *.zig 0r ~/.config/nvim/template.zig
&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt; autocmd BufNewFile *.php 0r ~/.config/nvim/template.php
&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;]]&lt;/span&gt;, &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;false&lt;/span&gt;)
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;templatec&#34;&gt;template.c&lt;/h3&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;&lt;span style=&#34;color:#080&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#080&#34;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#080&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#080&#34;&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;templatecc&#34;&gt;template.cc&lt;/h3&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;&lt;span style=&#34;color:#080&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#080&#34;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#080&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#080&#34;&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;templateh&#34;&gt;template.h&lt;/h3&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;&lt;span style=&#34;color:#080&#34;&gt;#ifndef _H
&lt;/span&gt;&lt;span style=&#34;color:#080&#34;&gt;#define _H
&lt;/span&gt;&lt;span style=&#34;color:#080&#34;&gt;&lt;/span&gt;
&lt;span style=&#34;color:#080&#34;&gt;#endif
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;templatehh&#34;&gt;template.hh&lt;/h3&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;&lt;span style=&#34;color:#080&#34;&gt;#ifndef _HH
&lt;/span&gt;&lt;span style=&#34;color:#080&#34;&gt;#define _HH
&lt;/span&gt;&lt;span style=&#34;color:#080&#34;&gt;&lt;/span&gt;
&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;i&lt;/span&gt; {
&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;
&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;private&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;
};
&lt;span style=&#34;color:#080&#34;&gt;#endif
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;templatego&#34;&gt;template.go&lt;/h3&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;package&lt;/span&gt; main
&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;import&lt;/span&gt; (
)
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;templatephp&#34;&gt;template.php&lt;/h3&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;lt;?&lt;/span&gt;php
&lt;span style=&#34;color:#080&#34;&gt;?&amp;gt;&lt;/span&gt;&lt;span style=&#34;&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;以上&lt;/p&gt;
</content>
</entry>
<entry>
<id>blog/freebsd-nas-auto-backup.gmi</id>
<author><name></name></author>
<title type="html">【FreeBSD】簡単にNASの自動的にバックアップする方法</title>
<published>2024-01-30T00:00:00Z</published>
<category term="jp"></category>
<category term="blog"></category>
<category term="freebsd"></category>
<category term="nas"></category>
<category term="デジタル自主"></category>
<link href="gemini://technicalsuwako.moe/blog/freebsd-nas-auto-backup.gmi" rel="alternate"></link>
<content type="html">
&lt;p&gt;&lt;a href=&#34;/blog/digital-autonomy-076video-hosting.xhtml&#34;&gt;先月は「076動画ホスティングの解決策」という投稿を書きました。&lt;/a&gt;&lt;br /&gt;
先週の週末、このNASに4 TiBのSSDを追加しましたので、それによりGitlerと動画のストレージ容量が増大出来ました。&lt;br /&gt;
でも、バックアップならどうすれば良いですか?&lt;br /&gt;
今回はこれを解決すると思いますが、ちゃんと理解するには、まずは「076動画ホスティングの解決策」をご覧下さい。&lt;/p&gt;
&lt;h2 id=&#34;heading&#34;&gt;必要なソフト&lt;/h2&gt;
&lt;p&gt;今回必要なソフトは1つだけで、rsyncです。&lt;/p&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;# doas pkg install rsync&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;root&#34;&gt;rootになれ&lt;/h2&gt;
&lt;p&gt;そこからrootアカウントで行います。&lt;/p&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;# doas su -l&lt;/span&gt;
$
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;zfs&#34;&gt;ZFSで使ってディスクを確認して&lt;/h2&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;$ zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
backup 888G 259G 629G - - 0% 29% 1.00x ONLINE -
xroot 3.62T 259G 3.37T - - 0% 6% 1.00x ONLINE -
zroot 920G 277G 643G - - 0% 30% 1.00x ONLINE -
$ ls -thal /zroot /backup /xroot
/xroot:
total &lt;span style=&#34;color:#666&#34;&gt;52&lt;/span&gt;
drwxr-xr-x &lt;span style=&#34;color:#666&#34;&gt;19&lt;/span&gt; peertube peertube 19B 1月 &lt;span style=&#34;color:#666&#34;&gt;29&lt;/span&gt; 23:34 peertube
drwxr-xr-x &lt;span style=&#34;color:#666&#34;&gt;7&lt;/span&gt; root wheel 7B 1月 &lt;span style=&#34;color:#666&#34;&gt;28&lt;/span&gt; 23:30 .
drwxr-xr-x &lt;span style=&#34;color:#666&#34;&gt;22&lt;/span&gt; root wheel 28B 1月 &lt;span style=&#34;color:#666&#34;&gt;28&lt;/span&gt; 20:32 ..
drwxr-xr-x &lt;span style=&#34;color:#666&#34;&gt;17&lt;/span&gt; suwako suwako 17B 1月 &lt;span style=&#34;color:#666&#34;&gt;23&lt;/span&gt; 16:14 repo
drwxr-xr-x &lt;span style=&#34;color:#666&#34;&gt;6&lt;/span&gt; git git 8B 1月 &lt;span style=&#34;color:#666&#34;&gt;18&lt;/span&gt; 16:14 git
drwxr-x--- &lt;span style=&#34;color:#666&#34;&gt;8&lt;/span&gt; git git 8B 1月 &lt;span style=&#34;color:#666&#34;&gt;18&lt;/span&gt; 15:59 gitler
/backup:
total &lt;span style=&#34;color:#666&#34;&gt;43&lt;/span&gt;
drwxr-xr-x &lt;span style=&#34;color:#666&#34;&gt;19&lt;/span&gt; peertube peertube 19B 1月 &lt;span style=&#34;color:#666&#34;&gt;29&lt;/span&gt; 23:34 peertube
drwxr-xr-x &lt;span style=&#34;color:#666&#34;&gt;22&lt;/span&gt; root wheel 28B 1月 &lt;span style=&#34;color:#666&#34;&gt;28&lt;/span&gt; 20:32 ..
drwxr-xr-x &lt;span style=&#34;color:#666&#34;&gt;17&lt;/span&gt; suwako suwako 17B 1月 &lt;span style=&#34;color:#666&#34;&gt;23&lt;/span&gt; 16:14 repo
drwxr-xr-x &lt;span style=&#34;color:#666&#34;&gt;6&lt;/span&gt; root wheel 6B 1月 &lt;span style=&#34;color:#666&#34;&gt;23&lt;/span&gt; 14:26 .
drwxr-xr-x &lt;span style=&#34;color:#666&#34;&gt;6&lt;/span&gt; git git 8B 1月 &lt;span style=&#34;color:#666&#34;&gt;18&lt;/span&gt; 16:14 git
drwxr-x--- &lt;span style=&#34;color:#666&#34;&gt;8&lt;/span&gt; git git 8B 1月 &lt;span style=&#34;color:#666&#34;&gt;18&lt;/span&gt; 15:59 gitler
/zroot:
total &lt;span style=&#34;color:#666&#34;&gt;43&lt;/span&gt;
drwxr-xr-x &lt;span style=&#34;color:#666&#34;&gt;19&lt;/span&gt; peertube peertube 19B 1月 &lt;span style=&#34;color:#666&#34;&gt;29&lt;/span&gt; 23:34 peertube
drwxr-xr-x &lt;span style=&#34;color:#666&#34;&gt;22&lt;/span&gt; root wheel 28B 1月 &lt;span style=&#34;color:#666&#34;&gt;28&lt;/span&gt; 20:32 ..
drwxr-xr-x &lt;span style=&#34;color:#666&#34;&gt;17&lt;/span&gt; suwako suwako 17B 1月 &lt;span style=&#34;color:#666&#34;&gt;23&lt;/span&gt; 16:14 repo
drwxr-xr-x &lt;span style=&#34;color:#666&#34;&gt;6&lt;/span&gt; root wheel 6B 1月 &lt;span style=&#34;color:#666&#34;&gt;23&lt;/span&gt; 14:26 .
drwxr-xr-x &lt;span style=&#34;color:#666&#34;&gt;6&lt;/span&gt; git git 8B 1月 &lt;span style=&#34;color:#666&#34;&gt;18&lt;/span&gt; 16:14 git
drwxr-x--- &lt;span style=&#34;color:#666&#34;&gt;8&lt;/span&gt; git git 8B 1月 &lt;span style=&#34;color:#666&#34;&gt;18&lt;/span&gt; 15:59 gitler
$ du -lsh /zroot/* /backup/* /xroot/*
6.2G /zroot/git
142G /zroot/gitler
104G /zroot/peertube
6.9G /zroot/repo
6.2G /backup/git
142G /backup/gitler
104G /backup/peertube
6.9G /backup/repo
6.2G /xroot/git
142G /xroot/gitler
512B /xroot/mainpc
104G /xroot/peertube
6.9G /xroot/repo
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;heading-1&#34;&gt;シェルスクリプトを作る&lt;/h2&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;$ nvim sync-backups.sh &lt;span style=&#34;color:#666&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; chmod +x sync-backups.sh
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;この「 &amp;amp;&amp;amp; chmod +x sync-backups.sh」の部分は、「sync-backups.sh」を保存して終了したら、直ぐに実行可能にして下さいという意味です。&lt;/p&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;&lt;span style=&#34;color:#080&#34;&gt;#!/bin/sh
&lt;/span&gt;&lt;span style=&#34;color:#080&#34;&gt;&lt;/span&gt;
&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;# 1 TiB&lt;/span&gt;
rsync -vaHzop --delete /zroot/* /backup
&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;# 4 TiB&lt;/span&gt;
rsync -vaHzop --delete /zroot/* /xroot
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;「rsync -vaHzop &amp;ndash;delete /zroot/* /backup」の意味は&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;rsync = ソフト&lt;/li&gt;
&lt;li&gt;-vaHzop = 何をコピーするか表示する、アーカイブモード (1:1のコピーを作る事)、ハードリンクを保管、、オーナーを保管、許可を保管&lt;/li&gt;
&lt;li&gt;&amp;ndash;delete = もう存在しないファイルやディレクトリがあれば、消す&lt;/li&gt;
&lt;li&gt;/zroot/* /backup = /zrootの内容の全部を/backupにコピーする&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;crontab&#34;&gt;crontabを変更して&lt;/h2&gt;
&lt;p&gt;最後にcrontabを変更しましょう。&lt;/p&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;$ crontab -e
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;0 0,6,12,18 * * * /root/sync-backups.sh
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;それで、毎日4回 (0:00、6:00、12:00、そうして18:00で) バックアップのスクリプトを実行されます。&lt;/p&gt;
&lt;p&gt;以上&lt;/p&gt;
</content>
</entry>
<entry>
<id>blog/rice-productive.gmi</id>
<author><name></name></author>
<title type="html">【プログラミング】生産力を増大する方法</title>
<published>2024-01-04T00:00:00Z</published>
<category term="jp"></category>
<category term="blog"></category>
<category term="linux"></category>
<category term="bsd"></category>
<category term="セキュリティー"></category>
<category term="デジタル自主"></category>
<category term="ソフトウェア"></category>
<category term="メール"></category>
<category term="プライバシー"></category>
<link href="gemini://technicalsuwako.moe/blog/rice-productive.gmi" rel="alternate"></link>
<content type="html">
&lt;p&gt;かつて、ハッカー達は非常に生産的でした。&lt;br /&gt;
&lt;a href=&#34;http://w.sneed4fmhevap3ci4xhf4wgkf72lwk275lcgomnfgwniwmqvaxyluuid.onion/wiki/Unix%E3%81%AE%E6%AD%B4%E5%8F%B2?lang=ja&#34;&gt;例えば、ケン・トンプソンさん、デニス・リッチーさん、とブライアン・カーニハンさんは2年でUNIXを作りました。&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://gitlab.freedesktop.org/wayland/wayland&#34;&gt;しかし、現在では29人の人々が15年間Waylandを作っていますが、まだ本番環境には適していません。&lt;/a&gt;&lt;br /&gt;
何故でしょうか。&lt;/p&gt;
&lt;p&gt;今日のハッカーはもはや生産的ではありません。&lt;br /&gt;
あたしは16年間ハッカーであり、その理由を説明します。&lt;/p&gt;
&lt;h2 id=&#34;1-&#34;&gt;1. プログラミングはもはや楽しくない&lt;/h2&gt;
&lt;p&gt;あたしがプログラミングを始めた時、空のテキストエディタを開き、自分の好きな様にコードを書き、コンパイルし、それが商業的に出荷可能な製品でした。&lt;br /&gt;
今日でもそれは可能ですが、2014年以降に始めたすべてのコーダーは、端末で「Hello World」を表示するだけの為に60の依存関係と300の異なるクラスを入り、複雑すぎるフレームワークを使います。&lt;br /&gt;
貴方がそれを使わないと、貴方を素人だと思うでしょう。&lt;br /&gt;
あたしは、そう思う人が素人だと思います。&lt;br /&gt;
自身のソースコードを開くたびに、それをより良くする事にワクワクします。&lt;br /&gt;
SucklessやOpenBSDチームによって作られたソースコードを開くたびに、編集する事にワクワクします。&lt;br /&gt;
しかし、ほとんどの現代の開発者によって作られたソースコードを開くたびに、悲しく、怒り、そして惨めになります。&lt;/p&gt;
&lt;p&gt;今日のコードはあちこちに散らばっています。&lt;br /&gt;
今日のコードはもはや価値ある製品を作る事ではなく、永遠に同じコードベースに閉じ込められ、自殺したくなる様にする事です。&lt;/p&gt;
&lt;h2 id=&#34;2-&#34;&gt;2. 技術は間違った方向に進んでいる&lt;/h2&gt;
&lt;p&gt;多くの人々は技術が前進していると主張していますが、その「前進」の方向が何であるかは誰も知りません。&lt;br /&gt;
あたし達は50年前よりも優れたハードウェアを持っていますが、今日のソフトウェアはどんどん遅くなっています。&lt;br /&gt;
我々は、卒業直後の若いコーダーを引き付ける為に人気のプログラムに複雑さを加えすぎており、彼らは大学でVisual Studio Code、React、Laravelのような不必要に複雑なプログラムの使用を学び、CI、Scrum、Agile、パッケージマネージャ、フレームワーク、Electron、Microsoft Office、IntelliJ、VS Code等の生産性を阻害する不要な事を気にする本物のプログラマーについて教えられています。&lt;br /&gt;
あたしは高校中退ですが、Neovim、Git、そしてCやGoのような本物のプログラミング言語を使用しています。&lt;br /&gt;
それ以外は何も使いません!&lt;br /&gt;
&lt;a href=&#34;/portfolio.xhtml&#34;&gt;そして、まだ完成していないプログラムを除いて、たった1年で11のプログラムを作りました。&lt;/a&gt;&lt;br /&gt;
これらのプログラムの殆どは1日未満で作成されました。&lt;br /&gt;
いくつかはPHPから書き直され、他は時間をかけて徐々に更新され、続ける理由が見つからなかった数個は諦めました。&lt;br /&gt;
現在、C、SDL、OpenGL、OpenALで3Dゲームを作成しており、2日後には機能的なプロトタイプが出来ました。&lt;/p&gt;
&lt;p&gt;商業ゲーム開発で逆の事が起こっているのは、この業界だけです。&lt;br /&gt;
&lt;a href=&#34;https://zenn.dev/daichi_gamedev/articles/unity-licence-fee&#34;&gt;Unityとの論争の後、より多くのゲーム開発者が独自のゲームエンジンを書き始め、カスタムエンジンで同じくらい、またはそれ以上に生産的になり、カスタムエンジンははるかに軽量なので、より高品質なゲームを作る事が出来る事に気づきました。&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;3-&#34;&gt;3. プログラミングにおける政治性&lt;/h2&gt;
&lt;p&gt;幸いな事に、日本では殆どのハッカーが政治から自由ですが、海外では「CODE_OF_CONDUCT.md」を持たないプロジェクトを見つけるのが非常に難しくなっています。&lt;br /&gt;
これは、良いコードを殆ど貢献しない精神的に問題のある人々を快適にする為に、才能を追い出す様に設計されています。&lt;br /&gt;
しかし、殆どのオープンソースプロジェクトは海外の物であり、政治に重点を置き過ぎている為、言ってはいけない言葉が多く、世界の50億人のうち2人を不快にする可能性がある事を事前に知っておかなければならず、特定の代名詞を使用する様に強制されますが、これはソフトウェア開発には属していません。&lt;br /&gt;
日本のソフトウェア開発者は政治を気にしないにも関わらず、国内のハッカー文化には残念ながらこの影響が及んでおり、より国際化した日本の「現代的」な開発者が海外の「現代的」な開発者の影響を受けています。&lt;/p&gt;
&lt;h2 id=&#34;4-&#34;&gt;4. 先輩が後輩に間違った方法を教える&lt;/h2&gt;
&lt;p&gt;あたしが以前言った様に、シンプルなテキストエディタ、バージョンコントロールと、コンパイラだけが良いソフトウェアを作る為に必要です。&lt;br /&gt;
しかし、若い開発者には必要のない様々なツールの使用が教えられています。&lt;br /&gt;
これはストレスを増やし、非生産的になるだけです。&lt;br /&gt;
&lt;a href=&#34;https://brik.co.jp/tips/1125&#34;&gt;BRIKの「フロントエンドエンジニアになるためのロードマップ」がその一例です。&lt;/a&gt;&lt;br /&gt;
あたしは「インターネットの基本を習得」、「HTML/CSS/JavaScriptの習得」、「バージョンコントロールの習得」と、「Webセキュリティ知識の習得」が必要だとは思いますが、それ以降は全く不要で、5番から19番を無視すれば、ずっと優れた生産性の高いフロントエンド開発者になれます。&lt;br /&gt;
それら全てを学ばなければならないなら、良いソフトウェアを作る事には関心がなく、短期的な利益のみを目的とする悪い会社で働いているという事です。&lt;/p&gt;
&lt;p&gt;古いUNIXコミュニティでは、削除出来る機能を常に探していましたが、現代の開発者は追加出来る機能を常に探しています。&lt;br /&gt;
誰が最も生産的で、長期的に最もお金を稼いでおり、製品が最も安定しているかを見れば、UNIXの古参者達が正しい事は明らかです。&lt;/p&gt;
&lt;p&gt;あたしは現代の産業を憎んでこの記事を書いたのではなく、常に一部である事を愛してきた産業の状態について心配しているからです。&lt;/p&gt;
&lt;p&gt;以上&lt;/p&gt;
</content>
</entry>
</feed>