コミットを比較

...

3 コミット

作成者 SHA1 メッセージ 日付
守矢諏訪子 efc47bb9df ごめん 2023-05-20 08:01:24 +09:00
守矢諏訪子 47ee53bdaf 【プログラミング】Zig言語でC向けのライブラリーを使用する方法 2023-05-18 23:07:21 +09:00
守矢諏訪子 aa60227f87 . 2023-05-18 21:33:45 +09:00
10個のファイルの変更654行の追加136行の削除

バイナリ
ass/Screenshot_20230518_215802.png ノーマルファイル

バイナリファイルは表示されません。

変更後

幅:  |  高さ:  |  サイズ: 965 KiB

ファイルの表示

@ -3,7 +3,7 @@
<id>gemini://technicalsuwako.moe</id>
<title>テクニカル諏訪子</title>
<updated>2023-05-12T00:00:00Z</updated>
<updated>2023-05-18T00:00:00Z</updated>
<author><name>テクニカル諏訪子</name></author>
<link href="gemini://technicalsuwako.moe" rel="alternate"></link>
@ -11,6 +11,217 @@
<entry>
<id>blog/c-lib-in-zig-use.gmi</id>
<author><name>凛</name></author>
<title type="html">【プログラミング】Zig言語でC向けのライブラリーを使用する方法</title>
<published>2023-05-18T00:00:00Z</published>
<category term="jp"></category>
<category term="blog"></category>
<category term="ゲーム開発"></category>
<category term="Zig"></category>
<category term="C言語"></category>
<category term="SDL"></category>
<link href="gemini://technicalsuwako.moe/blog/c-lib-in-zig-use.gmi" rel="alternate"></link>
<content type="html">
&lt;p&gt;ゲーム開発といえば、C++とか、Unityとか、Unrealとか等が思い出しますね。&lt;br /&gt;
でも、Zigという新しい言語を使った方が良いと思います。&lt;br /&gt;
しかし、新しい言語なら、必要なライブラリー(SDL、VulkanかOpenGL等)はまだ存在しませんね。&lt;br /&gt;
心配なく、Zig言語の大メリットは、C言語及びC++のライブラリーをそのまま使える事です!&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://repology.org/project/zig/versions&#34;&gt;まずはZigコンパイラーをインストールして下さい。&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;mkdir zigdev &lt;span style=&#34;color:#666&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#a2f&#34;&gt;cd&lt;/span&gt; zigdev
nvim main.zig
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;下記のソースコードを使っております。&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;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;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;c&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;@cImport&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&#34;&gt;@cInclude&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;SDL2/SDL.h&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;&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;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:#a2f;font-weight:bold&#34;&gt;if&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;(c.SDL_Init(c.SDL_INIT_VIDEO)&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&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;c.SDL_Log(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;開始失敗: %s&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;c.SDL_GetError());&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;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;error&lt;/span&gt;.SDLInitializationFailed;&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;// defer = 終了する時、実行すると意味だ。
&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;defer&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;c.SDL_Quit();&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;window&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;c.SDL_CreateWindow(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;hellow&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;c.SDL_WINDOWPOS_CENTERED,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;c.SDL_WINDOWPOS_CENTERED,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;640&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;400&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;c.SDL_WINDOW_OPENGL)&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;orelse&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;c.SDL_Log(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;ウィンドウ創作失敗: %s&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;c.SDL_GetError());&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;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;error&lt;/span&gt;.SDLInitializationFailed;&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;defer&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;c.SDL_DestroyWindow(window);&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;renderer&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;c.SDL_CreateRenderer(window,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;c.SDL_RENDERER_PRESENTVSYNC)&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;orelse&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;c.SDL_Log(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;レンダー創作失敗: %s&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;c.SDL_GetError());&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;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;error&lt;/span&gt;.SDLInitializationFailed;&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;defer&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;c.SDL_DestroyRenderer(renderer);&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;mainloop&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;while&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;true&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;sdl_event&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;c.SDL_Event&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;undefined&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;while&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;(c.SDL_PollEvent(&lt;span style=&#34;color:#666&#34;&gt;&amp;amp;&lt;/span&gt;sdl_event)&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&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;switch&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;(sdl_event.&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;type&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;c.SDL_QUIT&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;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;break&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;mainloop,&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:#666&#34;&gt;=&amp;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:#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:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;c.SDL_SetRenderDrawColor(renderer,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0xff&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0xff&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0xff&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0xff&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:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;c.SDL_RenderClear(renderer);&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;rect&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;c.SDL_Rect{&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;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&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;.w&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;60&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;.h&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;60&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;a&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.001&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;@intToFloat&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;c.SDL_GetTicks());&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;t&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;2&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;std.math.pi&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;3.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:#a2f;font-weight:bold&#34;&gt;const&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;r&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;100&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;@cos&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:#666&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;a);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;rect.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;290&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;@floatToInt&lt;/span&gt;(&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;i32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;r&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;@cos&lt;/span&gt;(a));&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;rect.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;170&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;@floatToInt&lt;/span&gt;(&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;i32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;r&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;@sin&lt;/span&gt;(a));&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:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;c.SDL_SetRenderDrawColor(renderer,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0xff&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0xff&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:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;c.SDL_RenderFillRect(renderer,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;amp;&lt;/span&gt;rect);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;rect.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;290&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;@floatToInt&lt;/span&gt;(&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;i32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;r&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;@cos&lt;/span&gt;(a&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;t));&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;rect.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;170&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;@floatToInt&lt;/span&gt;(&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;i32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;r&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;@sin&lt;/span&gt;(a&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;t));&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:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;c.SDL_SetRenderDrawColor(renderer,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0xff&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0xff&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:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;c.SDL_RenderFillRect(renderer,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;amp;&lt;/span&gt;rect);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;rect.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;290&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;@floatToInt&lt;/span&gt;(&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;i32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;r&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;@cos&lt;/span&gt;(a&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;2&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;t));&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;rect.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;170&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;@floatToInt&lt;/span&gt;(&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;i32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;r&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;@sin&lt;/span&gt;(a&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;2&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;t));&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:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;c.SDL_SetRenderDrawColor(renderer,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0xff&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0xff&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:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;c.SDL_RenderFillRect(renderer,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;amp;&lt;/span&gt;rect);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;c.SDL_RenderPresent(renderer);&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src=&#34;https://ass.technicalsuwako.moe/Screenshot_20230518_215802.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;p&gt;特に下記のコードをご覧下さい。&lt;/p&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&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;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;c&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;@cImport&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&#34;&gt;@cInclude&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;SDL2/SDL.h&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;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;@importはZig言語のライブラリーのインクルードで、@cImportはC言語のライブラリーのインクルードです。&lt;br /&gt;
&lt;code lang=&#34;&#34;&gt;#DEFINE&lt;/code&gt;なら、&lt;code lang=&#34;&#34;&gt;@cDefine&lt;/code&gt;となります。&lt;br /&gt;
例えば:&lt;/p&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;&lt;span style=&#34;color:#a2f&#34;&gt;@cDefine&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;_GNU_SOURCE&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;@cImportの後で、「c.なになに」でC言語の関数等を使えます。&lt;br /&gt;
例えば:&lt;/p&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&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;(c.SDL_Init(c.SDL_INIT_VIDEO)&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&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;c.SDL_Log(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;開始失敗: %s&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;c.SDL_GetError());&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;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;error&lt;/span&gt;.SDLInitializationFailed;&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;コンパイルするには:&lt;/p&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;zig build-exe main.zig -O ReleaseSmall --name rei --library SDL2 --library SDL2main --library c -isystem &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;/usr/include&amp;#34;&lt;/span&gt; -L &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;/usr/lib&amp;#34;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;以上&lt;/p&gt;
</content>
</entry>
<entry>
<id>blog/urloli-210.gmi</id>
<author><name>凛</name></author>
<title type="html">【】URLロリ 2.1.0登場</title>
<published>2023-05-13T00:00:00Z</published>
<category term="jp"></category>
<category term="blog"></category>
<category term="ウエブ開発"></category>
<category term=""></category>
<category term="urloli"></category>
<category term="urlロリ"></category>
<link href="gemini://technicalsuwako.moe/blog/urloli-210.gmi" rel="alternate"></link>
<content type="html">
&lt;p&gt;URLロリ は2.1.0にバージョンアップしました!!&lt;/p&gt;
&lt;h2 id=&#34;url&#34;&gt;URLロリって何?&lt;/h2&gt;
&lt;p&gt;URLロリはクッソ小さいURL短縮作成ソフトだわ〜♡&lt;/p&gt;
&lt;h2 id=&#34;heading&#34;&gt;変更&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ローカライズは関数化&lt;/li&gt;
&lt;li&gt;API機能性&lt;/li&gt;
&lt;li&gt;サーバーのソースコードを短くに&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;api&#34;&gt;APIについて&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://urlo.li/api&#34;&gt;/api&lt;/a&gt;&lt;br /&gt;
インスタンスURL及びバージョンを確認(GET)&lt;/p&gt;
&lt;h3 id=&#34;heading-1&#34;&gt;例の結果&lt;/h3&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;{
&amp;#34;url&amp;#34;: &amp;#34;https://urlo.li&amp;#34;,
&amp;#34;version&amp;#34;: &amp;#34;2.1.0&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://urlo.li/api/lolify&#34;&gt;/api/lolify&lt;/a&gt;&lt;br /&gt;
URLを短縮する(既に存在する場合、短縮済みURLを表示) (POST)&lt;/p&gt;
&lt;h3 id=&#34;heading-2&#34;&gt;必須のパラメートル&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;url&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;heading-3&#34;&gt;例の結果&lt;/h3&gt;
&lt;p&gt;既に存在する場合&lt;/p&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;curl -d url=gemini://technicalsuwako.moe https://urlo.li/api/lolify
{
&amp;#34;code&amp;#34;: 200,
&amp;#34;error&amp;#34;: &amp;#34;&amp;#34;,
&amp;#34;url&amp;#34;: &amp;#34;https://urlo.li/yoWJx&amp;#34;,
&amp;#34;origin&amp;#34;: &amp;#34;gemini://technicalsuwako.moe&amp;#34;,
&amp;#34;isnew&amp;#34;: false
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;新しく追加された場合&lt;/p&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;curl -d url=gemini://technicalsuwako.moe/about https://urlo.li/api/lolify
{
&amp;#34;code&amp;#34;: 200,
&amp;#34;error&amp;#34;: &amp;#34;&amp;#34;,
&amp;#34;url&amp;#34;: &amp;#34;https://urlo.li/fiW3B&amp;#34;,
&amp;#34;origin&amp;#34;: &amp;#34;gemini://technicalsuwako.moe/about&amp;#34;,
&amp;#34;isnew&amp;#34;: true
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;エラーの場合&lt;/p&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;curl -d url=technicalsuwako.moe https://urlo.li/api/lolify
{
&amp;#34;code&amp;#34;: 400,
&amp;#34;error&amp;#34;: &amp;#34;URLは「http://」又は「https://」で始めます。&amp;#34;,
&amp;#34;url&amp;#34;: &amp;#34;&amp;#34;,
&amp;#34;origin&amp;#34;: &amp;#34;&amp;#34;,
&amp;#34;isnew&amp;#34;: false
}%
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;curl -d url=gemini://technicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moe https://urlo.li/api/lolify
{
&amp;#34;code&amp;#34;: 400,
&amp;#34;error&amp;#34;: &amp;#34;URLは500文字以内です。&amp;#34;,
&amp;#34;url&amp;#34;: &amp;#34;&amp;#34;,
&amp;#34;origin&amp;#34;: &amp;#34;&amp;#34;,
&amp;#34;isnew&amp;#34;: false
}
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;heading-4&#34;&gt;ソースコード&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://gitler.moe/suwako/urloli&#34;&gt;Gitler&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;heading-5&#34;&gt;公式インスタンス&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://urlo.li/&#34;&gt;https://urlo.li/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;heading-6&#34;&gt;ダウンロード&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://gitler.moe/suwako/urloli/releases&#34;&gt;リリースページ&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;heading-7&#34;&gt;会話&lt;/h2&gt;
&lt;h3 id=&#34;xmpp&#34;&gt;XMPP&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;xmpp:urloli@chat.xmpp.076.ne.jp?join&#34;&gt;xmpp:urloli@chat.xmpp.076.ne.jp?join&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;irc&#34;&gt;IRC&lt;/h3&gt;
&lt;p&gt;irc.076.ne.jp/6697&lt;br /&gt;
#urloli&lt;/p&gt;
&lt;p&gt;以上&lt;/p&gt;
</content>
</entry>
<entry>
<id>blog/urloli-202.gmi</id>
<author><name>凛</name></author>
@ -167,139 +378,5 @@
</content>
</entry>
<entry>
<id>blog/vixip-release.gmi</id>
<author><name>凛</name></author>
<title type="html">【オワコンテック】vixip 1.0.0登場</title>
<published>2023-05-07T00:00:00Z</published>
<category term="jp"></category>
<category term="blog"></category>
<category term="ウエブ開発"></category>
<category term="オワコンテック"></category>
<category term="vixip"></category>
<link href="gemini://technicalsuwako.moe/blog/vixip-release.gmi" rel="alternate"></link>
<content type="html">
&lt;p&gt;前に&lt;a href=&#34;https://urlo.li/&#34;&gt;URLロリ&lt;/a&gt;、&lt;a href=&#34;https://hozon.site/&#34;&gt;保存サイト&lt;/a&gt;、及び&lt;a href=&#34;https://mixi.owacon.moe/&#34;&gt;spliti&lt;/a&gt;を作って、発行しましたが、今からここのブログで新リリースについて報告すると思います。&lt;br /&gt;
可能なタグは:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://076.moe/&#34;&gt;&lt;/a&gt; (一般なウエブ開発。Go言語、又はC言語の利用。PHPはレガシープロジェクトのみ)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://owacon.moe/&#34;&gt;オワコンテック&lt;/a&gt; (プライバシーUIのウエブ開発。PHPの利用)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nippai.moe/&#34;&gt;にっぱいゲームズ&lt;/a&gt; (ゲーム開発、&lt;a href=&#34;http://comiket.co.jp/&#34;&gt;コミケ&lt;/a&gt;や&lt;a href=&#34;http://cfxnvps5mxzdfh7aw5gwhhx2hmbr5vbww4m4m3znk6sjxnrd6l7bvnid.onion/&#34;&gt;オニケ&lt;/a&gt;等に参加するのは目指す。C言語、C++、又はZig言語の利用)
です。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;vixip&#34;&gt;vixipって何?&lt;/h2&gt;
&lt;p&gt;vixipはPixiv向けプライバシーUIです。&lt;br /&gt;
PixivはTorやVPNでアクセス出来なく、&lt;a href=&#34;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&#34;&gt;クラフレ&lt;/a&gt;を使って、JSは必須ですので、プライバシーは全くありません。&lt;br /&gt;
そうして、アカウントを持ってなければ、あんま何も見えません。&lt;br /&gt;
ですから、vixipを作りました。&lt;/p&gt;
&lt;h2 id=&#34;heading&#34;&gt;機能性&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;JSは不要&lt;/li&gt;
&lt;li&gt;イラストや漫画の表示&lt;/li&gt;
&lt;li&gt;コメントの表示(最新の5つのみ)&lt;/li&gt;
&lt;li&gt;オススメのイラストの表示&lt;/li&gt;
&lt;li&gt;イラストの検索&lt;/li&gt;
&lt;li&gt;RSSを使って作者にフォロー&lt;/li&gt;
&lt;li&gt;画像プロクシー(ログインせずイラストの拝見)&lt;/li&gt;
&lt;li&gt;R18とR18Gも拝見可能(インスタンス次第)&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/vixip&#34;&gt;Gitler&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;heading-2&#34;&gt;公式インスタンス&lt;/h2&gt;
&lt;p&gt;一般ネット: &lt;a href=&#34;%E3%82%AA%E3%83%AF%E3%82%B3%E3%83%B3Pixiv&#34;&gt;https://pixiv.owacon.moe/&lt;/a&gt;&lt;br /&gt;
TorとI2Pは今週中設置します。&lt;/p&gt;
&lt;h2 id=&#34;heading-3&#34;&gt;スクショ&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://ass.technicalsuwako.moe/Screenshot_20230507_002317.png&#34; alt=&#34;&#34; /&gt;&lt;br /&gt;
&lt;img src=&#34;https://ass.technicalsuwako.moe/Screenshot_20230507_002945.png&#34; alt=&#34;&#34; /&gt;&lt;br /&gt;
&lt;img src=&#34;https://ass.technicalsuwako.moe/Screenshot_20230507_003137.png&#34; alt=&#34;&#34; /&gt;&lt;br /&gt;
&lt;img src=&#34;https://ass.technicalsuwako.moe/Screenshot_20230507_003703.png&#34; alt=&#34;&#34; /&gt;&lt;br /&gt;
&lt;img src=&#34;https://ass.technicalsuwako.moe/Screenshot_20230507_004053.png&#34; alt=&#34;&#34; /&gt;&lt;br /&gt;
&lt;img src=&#34;https://ass.technicalsuwako.moe/Screenshot_20230507_004224.png&#34; alt=&#34;&#34; /&gt;&lt;br /&gt;
&lt;img src=&#34;https://ass.technicalsuwako.moe/Screenshot_20230507_004437.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;p&gt;以上&lt;/p&gt;
</content>
</entry>
<entry>
<id>blog/openbsd-zsh-udivdi3-syusei.gmi</id>
<author><name>凛</name></author>
<title type="html">【OpenBSD】更新後「zsh: undefined symbol &#39;_udivdi3&#39;」というエラーの修正する方法</title>
<published>2023-04-19T00:00:00Z</published>
<category term="jp"></category>
<category term="blog"></category>
<category term="bsd"></category>
<category term="openbsd"></category>
<link href="gemini://technicalsuwako.moe/blog/openbsd-zsh-udivdi3-syusei.gmi" rel="alternate"></link>
<content type="html">
&lt;p&gt;OpenBSD 7.3は公開されましたので、直ぐ全てのサーバー(64-bit)を更新しました。&lt;br /&gt;
それは問題無しで出来ました。&lt;br /&gt;
でも、ThinkPad T43(32-bit)で下記のエラーが発生しました&lt;/p&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;ssh 192.168.0.123
Last login: Tue Apr 18 22:32:51 2023
OpenBSD 7.3 (GENERIC) #660: Sat Mar 25 11:17:44 MDT 2023
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
Cannot open X display!
xmodmap: unable to open display &amp;#39;&amp;#39;
-zsh:-zsh: undefined symbol &amp;#39;__udivdi3&amp;#39;
ld.so: -zsh: lazy binding failed!
Connection to 192.168.0.123 closed.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;これのせいで、ノートでもttyでログイン出来なくなったり、端末を開かなくなった。&lt;br /&gt;
1週間後、やっと修正する方法を見つけました。&lt;/p&gt;
&lt;p&gt;まずは再起動して、起動画面で「boot -s」を入力して下さい。&lt;/p&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;Using drive 0, partition 3.
Loading…
probing : pc0 apm pci mem[632K 1533M a20=on]
disk: fd0 hd0+
&amp;gt;&amp;gt; OpenBSD/i386 BOOT 3.44
boot&amp;gt; boot -s
Enter pathname of shell or RETURN for sh: sh
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;それでシングルユーザーモードに起動します。&lt;br /&gt;
しかし、シングルユーザーモードは読み取り専用モードですので、まずはディスクをマウントするのは必要となります。&lt;br /&gt;
それ後で、ルートユーザーのシェルはshに交換しましょう。&lt;/p&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;mount -a
chsh -s /bin/sh root
reboot
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;今はいつでも通りに起動して、CTRL+Alt+F2を押して、rootアカウントにログインして下さい。&lt;br /&gt;
パッケージを更新しましょう。&lt;/p&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;pkg_add -ui
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;その後でzshに戻してはOKです。&lt;/p&gt;
&lt;pre&gt;&lt;code lang=&#34;&#34;&gt;chsh -s /usr/local/bin/zsh root
&lt;span style=&#34;color:#a2f&#34;&gt;exit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;CTRL+Alt+F5を押したら、GUI系ログイン画面に帰ります。&lt;br /&gt;
ここから普通にパソコンを使えます。&lt;/p&gt;
&lt;p&gt;以上&lt;/p&gt;
</content>
</entry>
</feed>

ファイルの表示

@ -2,6 +2,8 @@
# 記事一覧
=> /blog/c-lib-in-zig-use.gmi 2023年05月18日 【プログラミング】Zig言語でC向けのライブラリーを使用する方法
=> /blog/urloli-210.gmi 2023年05月13日 【】URLロリ 2.1.0登場
=> /blog/urloli-202.gmi 2023年05月12日 【】URLロリ 2.0.2登場
=> /blog/urloli-201.gmi 2023年05月10日 【】URLロリ 2.0.1登場
=> /blog/urloli-200.gmi 2023年05月10日 【】URLロリ 2.0.0登場

114
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"
```
以上

104
gemini/blog/urloli-210.gmi ノーマルファイル
ファイルの表示

@ -0,0 +1,104 @@
=> /blog.gmi ブログ一覧へ
#【】URLロリ 2.1.0登場
投稿日2023-05-12
URLロリ は2.1.0にバージョンアップしました!!
## URLロリって何?
URLロリはクッソ小さいURL短縮作成ソフトだわ〜♡
## 変更
* ローカライズは関数化
* API機能性
* サーバーのソースコードを短くに
## APIについて
=> https://urlo.li/api /api
インスタンスURL及びバージョンを確認(GET)
### 例の結果
```
{
"url": "https://urlo.li",
"version": "2.1.0"
}
```
=> https://urlo.li/api/lolify /api/lolify
URLを短縮する(既に存在する場合、短縮済みURLを表示) (POST)
### 必須のパラメートル
* url
### 例の結果
既に存在する場合
```
curl -d url=https://technicalsuwako.moe https://urlo.li/api/lolify
{
"code": 200,
"error": "",
"url": "https://urlo.li/yoWJx",
"origin": "https://technicalsuwako.moe",
"isnew": false
}
```
新しく追加された場合
```
curl -d url=https://technicalsuwako.moe/about https://urlo.li/api/lolify
{
"code": 200,
"error": "",
"url": "https://urlo.li/fiW3B",
"origin": "https://technicalsuwako.moe/about",
"isnew": true
}
```
エラーの場合
```
curl -d url=technicalsuwako.moe https://urlo.li/api/lolify
{
"code": 400,
"error": "URLは「http://」又は「https://」で始めます。",
"url": "",
"origin": "",
"isnew": false
}%
```
```
curl -d url=https://technicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moe https://urlo.li/api/lolify
{
"code": 400,
"error": "URLは500文字以内です。",
"url": "",
"origin": "",
"isnew": false
}
```
## ソースコード
=> https://gitler.moe/suwako/urloli Gitler
## 公式インスタンス
=> https://urlo.li/
## ダウンロード
=> https://gitler.moe/suwako/urloli/releases リリースページ
## 会話
### XMPP
=> xmpp:urloli@chat.xmpp.076.ne.jp?join
### IRC
irc.076.ne.jp/6697
\#urloli
以上

バイナリ
gemini/static/Screenshot_20230518_215802.png ノーマルファイル

バイナリファイルは表示されません。

変更後

幅:  |  高さ:  |  サイズ: 965 KiB

ファイルの表示

@ -3,6 +3,8 @@
# 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 【】URLロリ 2.1.0登場 - gemini://technicalsuwako.moe/blog/blog/urloli-210.gmi
2023-05-12T00:00:00Z09:00 【】URLロリ 2.0.2登場 - gemini://technicalsuwako.moe/blog/blog/urloli-202.gmi
2023-05-10T17:45:00Z09:00 【】URLロリ 2.0.1登場 - gemini://technicalsuwako.moe/blog/blog/urloli-201.gmi
2023-05-10T00:00:00Z09:00 【】URLロリ 2.0.0登場 - gemini://technicalsuwako.moe/blog/blog/urloli-200.gmi

ファイルの表示

@ -1,7 +1,7 @@
title: 【セキュリティ】Wireguardを使って安全に自宅のネットワークをアクセスする方法
author: 凛
date: 2023-01-17
tags: blog,jp,linux,bsd,セキュリティ,ネットワーク
tags: blog,jp,linux,bsd,セキュリティ,ネットワーク
----
また会社員になったから、あんま自宅にいない状況となりました。\
セキュリティのため、私のサーバーは:80と:443以外自宅だけからアクセス出来る様に設定しました。\

114
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"
```
以上

105
src/blog/urloli-210/index.md ノーマルファイル
ファイルの表示

@ -0,0 +1,105 @@
title: 【】URLロリ 2.1.0登場
author: 凛
date: 2023-05-13
tags: jp,blog,ウエブ開発,,urloli,urlロリ
----
URLロリ は2.1.0にバージョンアップしました!!
## URLロリって何?
URLロリはクッソ小さいURL短縮作成ソフトだわ〜♡
## 変更
* ローカライズは関数化
* API機能性
* サーバーのソースコードを短くに
## APIについて
[/api](https://urlo.li/api)\
インスタンスURL及びバージョンを確認(GET)
### 例の結果
```
{
"url": "https://urlo.li",
"version": "2.1.0"
}
```
[/api/lolify](https://urlo.li/api/lolify)\
URLを短縮する(既に存在する場合、短縮済みURLを表示) (POST)
### 必須のパラメートル
* url
### 例の結果
既に存在する場合
```
curl -d url=https://technicalsuwako.moe https://urlo.li/api/lolify
{
"code": 200,
"error": "",
"url": "https://urlo.li/yoWJx",
"origin": "https://technicalsuwako.moe",
"isnew": false
}
```
新しく追加された場合
```
curl -d url=https://technicalsuwako.moe/about https://urlo.li/api/lolify
{
"code": 200,
"error": "",
"url": "https://urlo.li/fiW3B",
"origin": "https://technicalsuwako.moe/about",
"isnew": true
}
```
エラーの場合
```
curl -d url=technicalsuwako.moe https://urlo.li/api/lolify
{
"code": 400,
"error": "URLは「http://」又は「https://」で始めます。",
"url": "",
"origin": "",
"isnew": false
}%
```
```
curl -d url=https://technicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moe https://urlo.li/api/lolify
{
"code": 400,
"error": "URLは500文字以内です。",
"url": "",
"origin": "",
"isnew": false
}
```
## ソースコード
[Gitler](https://gitler.moe/suwako/urloli)
## 公式インスタンス
[https://urlo.li/](https://urlo.li/)
## ダウンロード
[リリースページ](https://gitler.moe/suwako/urloli/releases)
## 会話
### XMPP
[xmpp:urloli@chat.xmpp.076.ne.jp?join](xmpp:urloli@chat.xmpp.076.ne.jp?join)
### IRC
irc.076.ne.jp/6697\
#urloli
以上