diff --git a/ass/Screenshot_20230518_215802.png b/ass/Screenshot_20230518_215802.png
new file mode 100644
index 0000000..16da159
Binary files /dev/null and b/ass/Screenshot_20230518_215802.png differ
diff --git a/gemini/blog.atom b/gemini/blog.atom
index 9cdd1e1..69a7d24 100644
--- a/gemini/blog.atom
+++ b/gemini/blog.atom
@@ -3,7 +3,7 @@
gemini://technicalsuwako.moe
テクニカル諏訪子
- 2023-05-13T00:00:00Z
+ 2023-05-18T00:00:00Z
テクニカル諏訪子
@@ -11,6 +11,117 @@
+
+ blog/c-lib-in-zig-use.gmi
+ 凛
+ 【プログラミング】Zig言語でC向けのライブラリーを使用する方法
+ 2023-05-18T00:00:00Z
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<p>ゲーム開発といえば、C++とか、Unityとか、Unrealとか等が思い出しますね。<br />
+でも、Zigという新しい言語を使った方が良いと思います。<br />
+しかし、新しい言語なら、必要なライブラリー(SDL、VulkanかOpenGL等)はまだ存在しませんね。<br />
+心配なく、Zig言語の大メリットは、C言語及びC++のライブラリーをそのまま使える事です!</p>
+<p><a href="https://repology.org/project/zig/versions">まずはZigコンパイラーをインストールして下さい。</a></p>
+<pre><code lang="">mkdir zigdev <span style="color:#666">&&</span> <span style="color:#a2f">cd</span> zigdev
+nvim main.zig
+</code></pre><p>下記のソースコードを使っております。<br />
+まずは確認して、何が起こる事を考えて下さい。</p>
+<pre><code lang=""><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>std<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#a2f">@import</span>(<span style="color:#b44">"std"</span>);<span style="color:#bbb">
+</span><span style="color:#bbb"></span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>c<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#a2f">@cImport</span>({<span style="color:#bbb">
+</span><span style="color:#bbb"> </span><span style="color:#a2f">@cInclude</span>(<span style="color:#b44">"SDL2/SDL.h"</span>);<span style="color:#bbb">
+</span><span style="color:#bbb"></span>});<span style="color:#bbb">
+</span><span style="color:#bbb">
+</span><span style="color:#bbb"></span><span style="color:#a2f;font-weight:bold">pub</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">fn</span><span style="color:#bbb"> </span>main()<span style="color:#bbb"> </span><span style="color:#666">!</span><span style="color:#0b0;font-weight:bold">void</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
+</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">if</span><span style="color:#bbb"> </span>(c.SDL_Init(c.SDL_INIT_VIDEO)<span style="color:#bbb"> </span><span style="color:#666">!=</span><span style="color:#bbb"> </span><span style="color:#666">0</span>)<span style="color:#bbb"> </span>{<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>c.SDL_Log(<span style="color:#b44">"開始失敗: %s"</span>,<span style="color:#bbb"> </span>c.SDL_GetError());<span style="color:#bbb">
+</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">return</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">error</span>.SDLInitializationFailed;<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>}<span style="color:#bbb">
+</span><span style="color:#bbb"> </span><span style="color:#080;font-style:italic">// defer = 終了する時、実行すると意味だ。
+</span><span style="color:#080;font-style:italic"></span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">defer</span><span style="color:#bbb"> </span>c.SDL_Quit();<span style="color:#bbb">
+</span><span style="color:#bbb">
+</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">var</span><span style="color:#bbb"> </span>window<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>c.SDL_CreateWindow(<span style="color:#b44">"hellow"</span>,<span style="color:#bbb"> </span>c.SDL_WINDOWPOS_CENTERED,<span style="color:#bbb"> </span>c.SDL_WINDOWPOS_CENTERED,<span style="color:#bbb"> </span><span style="color:#666">640</span>,<span style="color:#bbb"> </span><span style="color:#666">400</span>,<span style="color:#bbb"> </span>c.SDL_WINDOW_OPENGL)<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">orelse</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>c.SDL_Log(<span style="color:#b44">"ウィンドウ創作失敗: %s"</span>,<span style="color:#bbb"> </span>c.SDL_GetError());<span style="color:#bbb">
+</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">return</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">error</span>.SDLInitializationFailed;<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>};<span style="color:#bbb">
+</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">defer</span><span style="color:#bbb"> </span>c.SDL_DestroyWindow(window);<span style="color:#bbb">
+</span><span style="color:#bbb">
+</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">var</span><span style="color:#bbb"> </span>renderer<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>c.SDL_CreateRenderer(window,<span style="color:#bbb"> </span><span style="color:#666">0</span>,<span style="color:#bbb"> </span>c.SDL_RENDERER_PRESENTVSYNC)<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">orelse</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>c.SDL_Log(<span style="color:#b44">"レンダー創作失敗: %s"</span>,<span style="color:#bbb"> </span>c.SDL_GetError());<span style="color:#bbb">
+</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">return</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">error</span>.SDLInitializationFailed;<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>};<span style="color:#bbb">
+</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">defer</span><span style="color:#bbb"> </span>c.SDL_DestroyRenderer(renderer);<span style="color:#bbb">
+</span><span style="color:#bbb">
+</span><span style="color:#bbb"> </span>mainloop<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">while</span><span style="color:#bbb"> </span>(<span style="color:#a2f;font-weight:bold">true</span>)<span style="color:#bbb"> </span>{<span style="color:#bbb">
+</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">var</span><span style="color:#bbb"> </span>sdl_event<span style="color:#666">:</span><span style="color:#bbb"> </span>c.SDL_Event<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">undefined</span>;<span style="color:#bbb">
+</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">while</span><span style="color:#bbb"> </span>(c.SDL_PollEvent(<span style="color:#666">&</span>sdl_event)<span style="color:#bbb"> </span><span style="color:#666">!=</span><span style="color:#bbb"> </span><span style="color:#666">0</span>)<span style="color:#bbb"> </span>{<span style="color:#bbb">
+</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">switch</span><span style="color:#bbb"> </span>(sdl_event.<span style="color:#0b0;font-weight:bold">type</span>)<span style="color:#bbb"> </span>{<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>c.SDL_QUIT<span style="color:#bbb"> </span><span style="color:#666">=></span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">break</span><span style="color:#bbb"> </span><span style="color:#666">:</span>mainloop,<span style="color:#bbb">
+</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">else</span><span style="color:#bbb"> </span><span style="color:#666">=></span><span style="color:#bbb"> </span>{},<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>}<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>}<span style="color:#bbb">
+</span><span style="color:#bbb">
+</span><span style="color:#bbb"> </span>_<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>c.SDL_SetRenderDrawColor(renderer,<span style="color:#bbb"> </span><span style="color:#666">0xff</span>,<span style="color:#bbb"> </span><span style="color:#666">0xff</span>,<span style="color:#bbb"> </span><span style="color:#666">0xff</span>,<span style="color:#bbb"> </span><span style="color:#666">0xff</span>);<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>_<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>c.SDL_RenderClear(renderer);<span style="color:#bbb">
+</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">var</span><span style="color:#bbb"> </span>rect<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>c.SDL_Rect{<span style="color:#bbb"> </span>.x<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">0</span>,<span style="color:#bbb"> </span>.y<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">0</span>,<span style="color:#bbb"> </span>.w<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">60</span>,<span style="color:#bbb"> </span>.h<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">60</span><span style="color:#bbb"> </span>};<span style="color:#bbb">
+</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>a<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">0.001</span><span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span><span style="color:#a2f">@intToFloat</span>(<span style="color:#0b0;font-weight:bold">f32</span>,<span style="color:#bbb"> </span>c.SDL_GetTicks());<span style="color:#bbb">
+</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>t<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">2</span><span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span>std.math.pi<span style="color:#bbb"> </span><span style="color:#666">/</span><span style="color:#bbb"> </span><span style="color:#666">3.0</span>;<span style="color:#bbb">
+</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>r<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">100</span><span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span><span style="color:#a2f">@cos</span>(<span style="color:#666">0.1</span><span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span>a);<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>rect.x<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">290</span><span style="color:#bbb"> </span><span style="color:#666">+</span><span style="color:#bbb"> </span><span style="color:#a2f">@floatToInt</span>(<span style="color:#0b0;font-weight:bold">i32</span>,<span style="color:#bbb"> </span>r<span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span><span style="color:#a2f">@cos</span>(a));<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>rect.y<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">170</span><span style="color:#bbb"> </span><span style="color:#666">+</span><span style="color:#bbb"> </span><span style="color:#a2f">@floatToInt</span>(<span style="color:#0b0;font-weight:bold">i32</span>,<span style="color:#bbb"> </span>r<span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span><span style="color:#a2f">@sin</span>(a));<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>_<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>c.SDL_SetRenderDrawColor(renderer,<span style="color:#bbb"> </span><span style="color:#666">0xff</span>,<span style="color:#bbb"> </span><span style="color:#666">0</span>,<span style="color:#bbb"> </span><span style="color:#666">0</span>,<span style="color:#bbb"> </span><span style="color:#666">0xff</span>);<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>_<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>c.SDL_RenderFillRect(renderer,<span style="color:#bbb"> </span><span style="color:#666">&</span>rect);<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>rect.x<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">290</span><span style="color:#bbb"> </span><span style="color:#666">+</span><span style="color:#bbb"> </span><span style="color:#a2f">@floatToInt</span>(<span style="color:#0b0;font-weight:bold">i32</span>,<span style="color:#bbb"> </span>r<span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span><span style="color:#a2f">@cos</span>(a<span style="color:#bbb"> </span><span style="color:#666">+</span><span style="color:#bbb"> </span>t));<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>rect.y<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">170</span><span style="color:#bbb"> </span><span style="color:#666">+</span><span style="color:#bbb"> </span><span style="color:#a2f">@floatToInt</span>(<span style="color:#0b0;font-weight:bold">i32</span>,<span style="color:#bbb"> </span>r<span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span><span style="color:#a2f">@sin</span>(a<span style="color:#bbb"> </span><span style="color:#666">+</span><span style="color:#bbb"> </span>t));<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>_<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>c.SDL_SetRenderDrawColor(renderer,<span style="color:#bbb"> </span><span style="color:#666">0</span>,<span style="color:#bbb"> </span><span style="color:#666">0xff</span>,<span style="color:#bbb"> </span><span style="color:#666">0</span>,<span style="color:#bbb"> </span><span style="color:#666">0xff</span>);<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>_<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>c.SDL_RenderFillRect(renderer,<span style="color:#bbb"> </span><span style="color:#666">&</span>rect);<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>rect.x<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">290</span><span style="color:#bbb"> </span><span style="color:#666">+</span><span style="color:#bbb"> </span><span style="color:#a2f">@floatToInt</span>(<span style="color:#0b0;font-weight:bold">i32</span>,<span style="color:#bbb"> </span>r<span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span><span style="color:#a2f">@cos</span>(a<span style="color:#bbb"> </span><span style="color:#666">+</span><span style="color:#bbb"> </span><span style="color:#666">2</span><span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span>t));<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>rect.y<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">170</span><span style="color:#bbb"> </span><span style="color:#666">+</span><span style="color:#bbb"> </span><span style="color:#a2f">@floatToInt</span>(<span style="color:#0b0;font-weight:bold">i32</span>,<span style="color:#bbb"> </span>r<span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span><span style="color:#a2f">@sin</span>(a<span style="color:#bbb"> </span><span style="color:#666">+</span><span style="color:#bbb"> </span><span style="color:#666">2</span><span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span>t));<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>_<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>c.SDL_SetRenderDrawColor(renderer,<span style="color:#bbb"> </span><span style="color:#666">0</span>,<span style="color:#bbb"> </span><span style="color:#666">0</span>,<span style="color:#bbb"> </span><span style="color:#666">0xff</span>,<span style="color:#bbb"> </span><span style="color:#666">0xff</span>);<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>_<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>c.SDL_RenderFillRect(renderer,<span style="color:#bbb"> </span><span style="color:#666">&</span>rect);<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>c.SDL_RenderPresent(renderer);<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>}<span style="color:#bbb">
+</span><span style="color:#bbb"></span>}<span style="color:#bbb">
+</span></code></pre><p><img src="https://ass.technicalsuwako.moe/Screenshot_20230518_215802.png" alt="" /></p>
+<p>特に下記のコードをご覧下さい。</p>
+<pre><code lang=""><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>std<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#a2f">@import</span>(<span style="color:#b44">"std"</span>);<span style="color:#bbb">
+</span><span style="color:#bbb"></span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>c<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#a2f">@cImport</span>({<span style="color:#bbb">
+</span><span style="color:#bbb"> </span><span style="color:#a2f">@cInclude</span>(<span style="color:#b44">"SDL2/SDL.h"</span>);<span style="color:#bbb">
+</span><span style="color:#bbb"></span>});<span style="color:#bbb">
+</span></code></pre><p>@importはZig言語のライブラリーのインクルードで、@cImportはC言語のライブラリーのインクルードです。<br />
+<code lang="">#DEFINE</code>なら、<code lang="">@cDefine</code>となります。<br />
+例えば:</p>
+<pre><code lang=""><span style="color:#a2f">@cDefine</span>(<span style="color:#b44">"_GNU_SOURCE"</span>,<span style="color:#bbb"> </span>{})<span style="color:#bbb">
+</span></code></pre><p>@cImportの後で、「c.なになに」でC言語の関数等を使えます。<br />
+例えば:</p>
+<pre><code lang=""><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">if</span><span style="color:#bbb"> </span>(c.SDL_Init(c.SDL_INIT_VIDEO)<span style="color:#bbb"> </span><span style="color:#666">!=</span><span style="color:#bbb"> </span><span style="color:#666">0</span>)<span style="color:#bbb"> </span>{<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>c.SDL_Log(<span style="color:#b44">"開始失敗: %s"</span>,<span style="color:#bbb"> </span>c.SDL_GetError());<span style="color:#bbb">
+</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">return</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">error</span>.SDLInitializationFailed;<span style="color:#bbb">
+</span><span style="color:#bbb"> </span>}<span style="color:#bbb">
+</span></code></pre><p>コンパイルするには:</p>
+<pre><code lang="">zig build-exe main.zig -O ReleaseSmall --name rei --library SDL2 --library SDL2main --library c -isystem <span style="color:#b44">"/usr/include"</span> -L <span style="color:#b44">"/usr/lib"</span>
+</code></pre><p>以上</p>
+
+
+
+
+
blog/urloli-210.gmi
凛
@@ -267,69 +378,5 @@ URLを短縮する(既に存在する場合、短縮済みURLを表示) (POS
-
- blog/vixip-release.gmi
- 凛
- 【オワコンテック】vixip 1.0.0登場
- 2023-05-07T00:00:00Z
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<p>前に<a href="https://urlo.li/">URLロリ</a>、<a href="https://hozon.site/">保存サイト</a>、及び<a href="https://mixi.owacon.moe/">spliti</a>を作って、発行しましたが、今からここのブログで新リリースについて報告すると思います。<br />
-可能なタグは:</p>
-<ul>
-<li><a href="https://076.moe/">076</a> (一般なウエブ開発。Go言語、又はC言語の利用。PHPはレガシープロジェクトのみ)</li>
-<li><a href="https://owacon.moe/">オワコンテック</a> (プライバシーUIのウエブ開発。PHPの利用)</li>
-<li><a href="https://nippai.moe/">にっぱいゲームズ</a> (ゲーム開発、<a href="http://comiket.co.jp/">コミケ</a>や<a href="http://cfxnvps5mxzdfh7aw5gwhhx2hmbr5vbww4m4m3znk6sjxnrd6l7bvnid.onion/">オニケ</a>等に参加するのは目指す。C言語、C++、又はZig言語の利用)
-です。</li>
-</ul>
-<h2 id="vixip">vixipって何?</h2>
-<p>vixipはPixiv向けプライバシーUIです。<br />
-PixivはTorやVPNでアクセス出来なく、<a href="http://jezf25zgvxlsvuzdzm6fg2hoetmruhy4uxnolyw46tuh4jugcwc7byqd.onion/Cloudflare%E3%82%92%E4%BD%BF%E3%82%8F%E3%81%AA%E3%81%84%E7%90%86%E7%94%B1%EF%BC%88%E3%83%AA%E3%83%81%E3%83%A3%E3%83%BC%E3%83%89%E3%83%BB%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%83%9E%E3%83%B3%EF%BC%89">クラフレ</a>を使って、JSは必須ですので、プライバシーは全くありません。<br />
-そうして、アカウントを持ってなければ、あんま何も見えません。<br />
-ですから、vixipを作りました。</p>
-<h2 id="heading">機能性</h2>
-<ul>
-<li>JSは不要</li>
-<li>イラストや漫画の表示</li>
-<li>コメントの表示(最新の5つのみ)</li>
-<li>オススメのイラストの表示</li>
-<li>イラストの検索</li>
-<li>RSSを使って作者にフォロー</li>
-<li>画像プロクシー(ログインせずイラストの拝見)</li>
-<li>R18とR18Gも拝見可能(インスタンス次第)</li>
-</ul>
-<h2 id="heading-1">ソースコード</h2>
-<p><a href="https://gitler.moe/suwako/vixip">Gitler</a></p>
-<h2 id="heading-2">公式インスタンス</h2>
-<p>一般ネット: <a href="%E3%82%AA%E3%83%AF%E3%82%B3%E3%83%B3Pixiv">https://pixiv.owacon.moe/</a><br />
-TorとI2Pは今週中設置します。</p>
-<h2 id="heading-3">スクショ</h2>
-<p><img src="https://ass.technicalsuwako.moe/Screenshot_20230507_002317.png" alt="" /><br />
-<img src="https://ass.technicalsuwako.moe/Screenshot_20230507_002945.png" alt="" /><br />
-<img src="https://ass.technicalsuwako.moe/Screenshot_20230507_003137.png" alt="" /><br />
-<img src="https://ass.technicalsuwako.moe/Screenshot_20230507_003703.png" alt="" /><br />
-<img src="https://ass.technicalsuwako.moe/Screenshot_20230507_004053.png" alt="" /><br />
-<img src="https://ass.technicalsuwako.moe/Screenshot_20230507_004224.png" alt="" /><br />
-<img src="https://ass.technicalsuwako.moe/Screenshot_20230507_004437.png" alt="" /></p>
-<p>以上</p>
-
-
-
-
-
diff --git a/gemini/blog.gmi b/gemini/blog.gmi
index 44a0042..e71b265 100644
--- a/gemini/blog.gmi
+++ b/gemini/blog.gmi
@@ -2,6 +2,7 @@
# 記事一覧
+=> /blog/c-lib-in-zig-use.gmi 2023年05月18日 【プログラミング】Zig言語でC向けのライブラリーを使用する方法
=> /blog/urloli-210.gmi 2023年05月13日 【076】URLロリ 2.1.0登場
=> /blog/urloli-202.gmi 2023年05月12日 【076】URLロリ 2.0.2登場
=> /blog/urloli-201.gmi 2023年05月10日 【076】URLロリ 2.0.1登場
diff --git a/gemini/blog/c-lib-in-zig-use.gmi b/gemini/blog/c-lib-in-zig-use.gmi
new file mode 100644
index 0000000..41fab6d
--- /dev/null
+++ b/gemini/blog/c-lib-in-zig-use.gmi
@@ -0,0 +1,114 @@
+=> /blog.gmi ブログ一覧へ
+
+#【プログラミング】Zig言語でC向けのライブラリーを使用する方法
+投稿日:2023-05-18
+
+ゲーム開発といえば、C++とか、Unityとか、Unrealとか等が思い出しますね。
+でも、Zigという新しい言語を使った方が良いと思います。
+しかし、新しい言語なら、必要なライブラリー(SDL、VulkanかOpenGL等)はまだ存在しませんね。
+心配なく、Zig言語の大メリットは、C言語及びC++のライブラリーをそのまま使える事です!
+
+=> https://repology.org/project/zig/versions まずはZigコンパイラーをインストールして下さい。
+
+```sh
+mkdir zigdev && cd zigdev
+nvim main.zig
+```
+
+下記のソースコードを使っております。
+まずは確認して、何が起こる事を考えて下さい。
+
+```zig
+const std = @import("std");
+const c = @cImport({
+ @cInclude("SDL2/SDL.h");
+});
+
+pub fn main() !void {
+ if (c.SDL_Init(c.SDL_INIT_VIDEO) != 0) {
+ c.SDL_Log("開始失敗: %s", c.SDL_GetError());
+ return error.SDLInitializationFailed;
+ }
+ // defer = 終了する時、実行すると意味だ。
+ defer c.SDL_Quit();
+
+ var window = c.SDL_CreateWindow("hellow", c.SDL_WINDOWPOS_CENTERED, c.SDL_WINDOWPOS_CENTERED, 640, 400, c.SDL_WINDOW_OPENGL) orelse {
+ c.SDL_Log("ウィンドウ創作失敗: %s", c.SDL_GetError());
+ return error.SDLInitializationFailed;
+ };
+ defer c.SDL_DestroyWindow(window);
+
+ var renderer = c.SDL_CreateRenderer(window, 0, c.SDL_RENDERER_PRESENTVSYNC) orelse {
+ c.SDL_Log("レンダー創作失敗: %s", c.SDL_GetError());
+ return error.SDLInitializationFailed;
+ };
+ defer c.SDL_DestroyRenderer(renderer);
+
+ mainloop: while (true) {
+ var sdl_event: c.SDL_Event = undefined;
+ while (c.SDL_PollEvent(&sdl_event) != 0) {
+ switch (sdl_event.type) {
+ c.SDL_QUIT => break :mainloop,
+ else => {},
+ }
+ }
+
+ _ = c.SDL_SetRenderDrawColor(renderer, 0xff, 0xff, 0xff, 0xff);
+ _ = c.SDL_RenderClear(renderer);
+ var rect = c.SDL_Rect{ .x = 0, .y = 0, .w = 60, .h = 60 };
+ const a = 0.001 * @intToFloat(f32, c.SDL_GetTicks());
+ const t = 2 * std.math.pi / 3.0;
+ const r = 100 * @cos(0.1 * a);
+ rect.x = 290 + @floatToInt(i32, r * @cos(a));
+ rect.y = 170 + @floatToInt(i32, r * @sin(a));
+ _ = c.SDL_SetRenderDrawColor(renderer, 0xff, 0, 0, 0xff);
+ _ = c.SDL_RenderFillRect(renderer, &rect);
+ rect.x = 290 + @floatToInt(i32, r * @cos(a + t));
+ rect.y = 170 + @floatToInt(i32, r * @sin(a + t));
+ _ = c.SDL_SetRenderDrawColor(renderer, 0, 0xff, 0, 0xff);
+ _ = c.SDL_RenderFillRect(renderer, &rect);
+ rect.x = 290 + @floatToInt(i32, r * @cos(a + 2 * t));
+ rect.y = 170 + @floatToInt(i32, r * @sin(a + 2 * t));
+ _ = c.SDL_SetRenderDrawColor(renderer, 0, 0, 0xff, 0xff);
+ _ = c.SDL_RenderFillRect(renderer, &rect);
+ c.SDL_RenderPresent(renderer);
+ }
+}
+```
+
+=> /static/Screenshot_20230518_215802.png
+
+特に下記のコードをご覧下さい。
+
+```zig
+const std = @import("std");
+const c = @cImport({
+ @cInclude("SDL2/SDL.h");
+});
+```
+
+@importはZig言語のライブラリーのインクルードで、@cImportはC言語のライブラリーのインクルードです。
+`#DEFINE`なら、`@cDefine`となります。\
+例えば:
+
+```zig
+@cDefine("_GNU_SOURCE", {})
+```
+
+@cImportの後で、「c.なになに」でC言語の関数等を使えます。
+例えば:
+
+```zig
+ if (c.SDL_Init(c.SDL_INIT_VIDEO) != 0) {
+ c.SDL_Log("開始失敗: %s", c.SDL_GetError());
+ return error.SDLInitializationFailed;
+ }
+```
+
+コンパイルするには:
+
+```sh
+zig build-exe main.zig -O ReleaseSmall --name rei --library SDL2 --library SDL2main --library c -isystem "/usr/include" -L "/usr/lib"
+```
+
+以上
diff --git a/gemini/static/Screenshot_20230518_215802.png b/gemini/static/Screenshot_20230518_215802.png
new file mode 100644
index 0000000..16da159
Binary files /dev/null and b/gemini/static/Screenshot_20230518_215802.png differ
diff --git a/gemini/twtxt.txt b/gemini/twtxt.txt
index 8a320a7..6c80c5a 100644
--- a/gemini/twtxt.txt
+++ b/gemini/twtxt.txt
@@ -3,6 +3,7 @@
# avatar = https://076.moe/static/suwako.png
# description = テクニカル諏訪子様のtwtxtフィード
# link = ホームページ gemini://technicalsuwako.moe
+2023-05-18T00:00:00Z09:00 【プログラミング】Zig言語でC向けのライブラリーを使用する方法 - gemini://technicalsuwako.moe/blog/blog/c-lib-in-zig-use.gmi
2023-05-13T00:00:00Z09:00 【076】URLロリ 2.1.0登場 - gemini://technicalsuwako.moe/blog/blog/urloli-210.gmi
2023-05-12T00:00:00Z09:00 【076】URLロリ 2.0.2登場 - gemini://technicalsuwako.moe/blog/blog/urloli-202.gmi
2023-05-10T17:45:00Z09:00 【076】URLロリ 2.0.1登場 - gemini://technicalsuwako.moe/blog/blog/urloli-201.gmi
diff --git a/src/blog/c-lib-in-zig-use/index.md b/src/blog/c-lib-in-zig-use/index.md
new file mode 100644
index 0000000..8b1a9e9
--- /dev/null
+++ b/src/blog/c-lib-in-zig-use/index.md
@@ -0,0 +1,114 @@
+title: 【プログラミング】Zig言語でC向けのライブラリーを使用する方法
+author: 凛
+date: 2023-05-18
+tags: jp,blog,ゲーム開発,Zig,C言語,SDL
+----
+ゲーム開発といえば、C++とか、Unityとか、Unrealとか等が思い出しますね。\
+でも、Zigという新しい言語を使った方が良いと思います。\
+しかし、新しい言語なら、必要なライブラリー(SDL、VulkanかOpenGL等)はまだ存在しませんね。\
+心配なく、Zig言語の大メリットは、C言語及びC++のライブラリーをそのまま使える事です!
+
+[まずはZigコンパイラーをインストールして下さい。](https://repology.org/project/zig/versions)
+
+```sh
+mkdir zigdev && cd zigdev
+nvim main.zig
+```
+
+下記のソースコードを使っております。\
+まずは確認して、何が起こる事を考えて下さい。
+
+```zig
+const std = @import("std");
+const c = @cImport({
+ @cInclude("SDL2/SDL.h");
+});
+
+pub fn main() !void {
+ if (c.SDL_Init(c.SDL_INIT_VIDEO) != 0) {
+ c.SDL_Log("開始失敗: %s", c.SDL_GetError());
+ return error.SDLInitializationFailed;
+ }
+ // defer = 終了する時、実行すると意味だ。
+ defer c.SDL_Quit();
+
+ var window = c.SDL_CreateWindow("hellow", c.SDL_WINDOWPOS_CENTERED, c.SDL_WINDOWPOS_CENTERED, 640, 400, c.SDL_WINDOW_OPENGL) orelse {
+ c.SDL_Log("ウィンドウ創作失敗: %s", c.SDL_GetError());
+ return error.SDLInitializationFailed;
+ };
+ defer c.SDL_DestroyWindow(window);
+
+ var renderer = c.SDL_CreateRenderer(window, 0, c.SDL_RENDERER_PRESENTVSYNC) orelse {
+ c.SDL_Log("レンダー創作失敗: %s", c.SDL_GetError());
+ return error.SDLInitializationFailed;
+ };
+ defer c.SDL_DestroyRenderer(renderer);
+
+ mainloop: while (true) {
+ var sdl_event: c.SDL_Event = undefined;
+ while (c.SDL_PollEvent(&sdl_event) != 0) {
+ switch (sdl_event.type) {
+ c.SDL_QUIT => break :mainloop,
+ else => {},
+ }
+ }
+
+ _ = c.SDL_SetRenderDrawColor(renderer, 0xff, 0xff, 0xff, 0xff);
+ _ = c.SDL_RenderClear(renderer);
+ var rect = c.SDL_Rect{ .x = 0, .y = 0, .w = 60, .h = 60 };
+ const a = 0.001 * @intToFloat(f32, c.SDL_GetTicks());
+ const t = 2 * std.math.pi / 3.0;
+ const r = 100 * @cos(0.1 * a);
+ rect.x = 290 + @floatToInt(i32, r * @cos(a));
+ rect.y = 170 + @floatToInt(i32, r * @sin(a));
+ _ = c.SDL_SetRenderDrawColor(renderer, 0xff, 0, 0, 0xff);
+ _ = c.SDL_RenderFillRect(renderer, &rect);
+ rect.x = 290 + @floatToInt(i32, r * @cos(a + t));
+ rect.y = 170 + @floatToInt(i32, r * @sin(a + t));
+ _ = c.SDL_SetRenderDrawColor(renderer, 0, 0xff, 0, 0xff);
+ _ = c.SDL_RenderFillRect(renderer, &rect);
+ rect.x = 290 + @floatToInt(i32, r * @cos(a + 2 * t));
+ rect.y = 170 + @floatToInt(i32, r * @sin(a + 2 * t));
+ _ = c.SDL_SetRenderDrawColor(renderer, 0, 0, 0xff, 0xff);
+ _ = c.SDL_RenderFillRect(renderer, &rect);
+ c.SDL_RenderPresent(renderer);
+ }
+}
+```
+
+![](https://ass.technicalsuwako.moe/Screenshot_20230518_215802.png)
+
+特に下記のコードをご覧下さい。
+
+```zig
+const std = @import("std");
+const c = @cImport({
+ @cInclude("SDL2/SDL.h");
+});
+```
+
+@importはZig言語のライブラリーのインクルードで、@cImportはC言語のライブラリーのインクルードです。\
+`#DEFINE`なら、`@cDefine`となります。\
+例えば:
+
+```zig
+@cDefine("_GNU_SOURCE", {})
+```
+
+@cImportの後で、「c.なになに」でC言語の関数等を使えます。\
+例えば:
+
+```zig
+ if (c.SDL_Init(c.SDL_INIT_VIDEO) != 0) {
+ c.SDL_Log("開始失敗: %s", c.SDL_GetError());
+ return error.SDLInitializationFailed;
+ }
+```
+
+コンパイルするには:
+
+```sh
+zig build-exe main.zig -O ReleaseSmall --name rei --library SDL2 --library SDL2main --library c -isystem "/usr/include" -L "/usr/lib"
+```
+
+以上