gemini://technicalsuwako.moe テクニカル諏訪子 2023-05-18T00:00:00Z テクニカル諏訪子 gostatic 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">&amp;&amp;</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">&#34;std&#34;</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">&#34;SDL2/SDL.h&#34;</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">&#34;開始失敗: %s&#34;</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">&#34;hellow&#34;</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">&#34;ウィンドウ創作失敗: %s&#34;</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">&#34;レンダー創作失敗: %s&#34;</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">&amp;</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">=&gt;</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">=&gt;</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">&amp;</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">&amp;</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">&amp;</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">&#34;std&#34;</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">&#34;SDL2/SDL.h&#34;</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">&#34;_GNU_SOURCE&#34;</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">&#34;開始失敗: %s&#34;</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">&#34;/usr/include&#34;</span> -L <span style="color:#b44">&#34;/usr/lib&#34;</span> </code></pre><p>以上</p> blog/urloli-210.gmi 【076】URLロリ 2.1.0登場 2023-05-13T00:00:00Z <p>URLロリ は2.1.0にバージョンアップしました!!</p> <h2 id="url">URLロリって何?</h2> <p>URLロリはクッソ小さいURL短縮作成ソフトだわ〜♡</p> <h2 id="heading">変更</h2> <ul> <li>ローカライズは関数化</li> <li>API機能性</li> <li>サーバーのソースコードを短くに</li> </ul> <h2 id="api">APIについて</h2> <p><a href="https://urlo.li/api">/api</a><br /> インスタンスURL及びバージョンを確認(GET)</p> <h3 id="heading-1">例の結果</h3> <pre><code lang="">{ &#34;url&#34;: &#34;https://urlo.li&#34;, &#34;version&#34;: &#34;2.1.0&#34; } </code></pre><p><a href="https://urlo.li/api/lolify">/api/lolify</a><br /> URLを短縮する(既に存在する場合、短縮済みURLを表示) (POST)</p> <h3 id="heading-2">必須のパラメートル</h3> <ul> <li>url</li> </ul> <h3 id="heading-3">例の結果</h3> <p>既に存在する場合</p> <pre><code lang="">curl -d url=gemini://technicalsuwako.moe https://urlo.li/api/lolify { &#34;code&#34;: 200, &#34;error&#34;: &#34;&#34;, &#34;url&#34;: &#34;https://urlo.li/yoWJx&#34;, &#34;origin&#34;: &#34;gemini://technicalsuwako.moe&#34;, &#34;isnew&#34;: false } </code></pre><p>新しく追加された場合</p> <pre><code lang="">curl -d url=gemini://technicalsuwako.moe/about https://urlo.li/api/lolify { &#34;code&#34;: 200, &#34;error&#34;: &#34;&#34;, &#34;url&#34;: &#34;https://urlo.li/fiW3B&#34;, &#34;origin&#34;: &#34;gemini://technicalsuwako.moe/about&#34;, &#34;isnew&#34;: true } </code></pre><p>エラーの場合</p> <pre><code lang="">curl -d url=technicalsuwako.moe https://urlo.li/api/lolify { &#34;code&#34;: 400, &#34;error&#34;: &#34;URLは「http://」又は「https://」で始めます。&#34;, &#34;url&#34;: &#34;&#34;, &#34;origin&#34;: &#34;&#34;, &#34;isnew&#34;: false }% </code></pre><pre><code lang="">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 { &#34;code&#34;: 400, &#34;error&#34;: &#34;URLは500文字以内です。&#34;, &#34;url&#34;: &#34;&#34;, &#34;origin&#34;: &#34;&#34;, &#34;isnew&#34;: false } </code></pre><h2 id="heading-4">ソースコード</h2> <p><a href="https://gitler.moe/suwako/urloli">Gitler</a></p> <h2 id="heading-5">公式インスタンス</h2> <p><a href="https://urlo.li/">https://urlo.li/</a></p> <h2 id="heading-6">ダウンロード</h2> <p><a href="https://gitler.moe/suwako/urloli/releases">リリースページ</a></p> <h2 id="heading-7">会話</h2> <h3 id="xmpp">XMPP</h3> <p><a href="xmpp:urloli@chat.xmpp.076.ne.jp?join">xmpp:urloli@chat.xmpp.076.ne.jp?join</a></p> <h3 id="irc">IRC</h3> <p>irc.076.ne.jp/6697<br /> #urloli</p> <p>以上</p> blog/urloli-202.gmi 【076】URLロリ 2.0.2登場 2023-05-12T00:00:00Z <p>URLロリ は2.0.2にバージョンアップしました!!</p> <h2 id="url">URLロリって何?</h2> <p>URLロリはクッソ小さいURL短縮作成ソフトだわ〜♡</p> <h2 id="heading">変更</h2> <ul> <li>Makefileでの「make install」部分を修正</li> <li>manページで「オプションなし」部分を追加</li> <li>「短熟」→「短縮」を修正</li> <li>クッキーは無効にする又はクッキーが未対応のブラウザ対応の修正</li> </ul> <h2 id="heading-1">ソースコード</h2> <p><a href="https://gitler.moe/suwako/urloli">Gitler</a></p> <h2 id="heading-2">公式インスタンス</h2> <p><a href="https://urlo.li/">https://urlo.li/</a></p> <h2 id="heading-3">ダウンロード</h2> <p><a href="https://gitler.moe/suwako/urloli/releases">リリースページ</a></p> <h2 id="heading-4">会話</h2> <h3 id="xmpp">XMPP</h3> <p><a href="xmpp:urloli@chat.xmpp.076.ne.jp?join">xmpp:urloli@chat.xmpp.076.ne.jp?join</a></p> <h3 id="irc">IRC</h3> <p>irc.076.ne.jp/6697<br /> #urloli</p> <p>以上</p> blog/urloli-201.gmi 【076】URLロリ 2.0.1登場 2023-05-10T17:45:00Z <p>URLロリ は2.0.1にバージョンアップしました!!</p> <h2 id="url">URLロリって何?</h2> <p>URLロリはクッソ小さいURL短縮作成ソフトだわ〜♡</p> <h2 id="heading">変更</h2> <ul> <li>送信ページの無英訳を修正</li> <li>URLは500文字移行のエラー未表示を修正</li> <li>ページデータの値を改良</li> <li>ページでバージョンの表示を追加</li> </ul> <h2 id="heading-1">ソースコード</h2> <p><a href="https://gitler.moe/suwako/urloli">Gitler</a></p> <h2 id="heading-2">公式インスタンス</h2> <p><a href="https://urlo.li/">https://urlo.li/</a></p> <h2 id="heading-3">ダウンロード</h2> <p><a href="https://gitler.moe/suwako/urloli/releases">リリースページ</a></p> <h2 id="heading-4">会話</h2> <h3 id="xmpp">XMPP</h3> <p><a href="xmpp:urloli@chat.xmpp.076.ne.jp?join">xmpp:urloli@chat.xmpp.076.ne.jp?join</a></p> <h3 id="irc">IRC</h3> <p>irc.076.ne.jp/6697<br /> #urloli</p> <p>以上</p> blog/urloli-200.gmi 【076】URLロリ 2.0.0登場 2023-05-10T00:00:00Z <p>URLロリ は2.0.0にバージョンアップしました!!</p> <h2 id="url">URLロリって何?</h2> <p>URLロリはクッソ小さいURL短縮作成ソフトだわ〜♡</p> <h2 id="heading">変更</h2> <ul> <li>Makefile化</li> <li>ソースコードは複数ファイルに分ける</li> <li>コマンドラインからURL短熟</li> <li>バージョンの表示</li> <li>ヘルプの表示</li> <li>manページ</li> <li>ポート番号はご自由に決める様にした(デフォルトは9910)</li> </ul> <h2 id="heading-1">ソースコード</h2> <p><a href="https://gitler.moe/suwako/urloli">Gitler</a></p> <h2 id="heading-2">公式インスタンス</h2> <p><a href="https://urlo.li/">https://urlo.li/</a></p> <h2 id="heading-3">ダウンロード</h2> <p><a href="https://gitler.moe/suwako/urloli/releases">リリースページ</a></p> <h2 id="heading-4">会話</h2> <h3 id="xmpp">XMPP</h3> <p><a href="xmpp:urloli@chat.xmpp.076.ne.jp?join">xmpp:urloli@chat.xmpp.076.ne.jp?join</a></p> <h3 id="irc">IRC</h3> <p>irc.076.ne.jp/6697<br /> #urloli</p> <p>以上</p>