diff --git a/gemini/blog.atom b/gemini/blog.atom index 3ad5afc..33aaeb2 100644 --- a/gemini/blog.atom +++ b/gemini/blog.atom @@ -3,13 +3,54 @@ gemini://technicalsuwako.moe テクニカル諏訪子 - 2024-01-31T00:00:00Z + 2024-02-01T00:00:00Z テクニカル諏訪子 + + blog/sp-120.gmi + + 【076】sp 1.2.0登場 + 2024-02-01T00:00:00Z + + + + + + + + + + + + + + + + +<h2 id="sp">spって何?</h2> +<p>spはシンプルなパスワードマネージャです。</p> +<h2 id="heading">変更</h2> +<ul> +<li>やっとTOTP機能性を修正した</li> +<li>makeを実行したら、バイナリがもっと小さくなる</li> +<li>パスワードの長さの延長</li> +<li>パスワード追加機能性で、パスワードが既に存在するかどうか確認</li> +<li>パスワード削除機能性で、パスワードが存在ないかどうか確認</li> +<li>パスワード変更機能性の追加</li> +<li>zsh対応の修正</li> +</ul> +<h2 id="heading-1">ソースコード</h2> +<p><a href="https://gitler.moe/suwako/sp">Gitler</a></p> +<p>以上</p> + + + + + blog/neovim-code-template.gmi @@ -372,98 +413,5 @@ Linux向けウィルスも存在しますが、その数は格段に少ないで - - blog/programming-early-return.gmi - - 【プログラミング】アドバイス2:早期リターン - 2023-12-21T00:00:00Z - - - - - - - - - - - - - - - - -<p><a href="/blog/programming-pyramid-of-doom.xhtml">前回は運命のピラミッドを避ける事について話しました。</a><br /> -運命のピラミッドを避けるる際、早期リターンをよく使用します。</p> -<h2 id="heading">早期リターンとは?</h2> -<p>早期リターンは、特定の条件が真(true)の場合に、関数の実行を直ぐに終了させる事です。<br /> -例えば、エラーが発生した場合、関数の最後まで実行する意味はありませんので、早期リターンを使う方が良いでしょう。</p> -<p>C言語の例(早期リターンを使わない場合):</p> -<pre><code lang=""><span style="color:#a2f;font-weight:bold">const</span> <span style="color:#0b0;font-weight:bold">char</span> <span style="color:#666">*</span><span style="color:#00a000">get_token</span>() { - <span style="color:#0b0;font-weight:bold">char</span> <span style="color:#666">*</span>token <span style="color:#666">=</span> malloc(<span style="color:#666">64</span>); - json_object <span style="color:#666">*</span>res <span style="color:#666">=</span> curl_con(<span style="color:#b44">&#34;auth/login&#34;</span>, <span style="color:#b44">&#34;POST&#34;</span>, data, <span style="color:#b44">&#34;&#34;</span>); - - <span style="color:#a2f;font-weight:bold">if</span> (res <span style="color:#666">==</span> <span style="color:#a2f">NULL</span>) { - printf(<span style="color:#b44">&#34;エラー:ログインに失敗。&#34;</span>); - token <span style="color:#666">=</span> <span style="color:#b44">&#34;&#34;</span>; - } - - json_object <span style="color:#666">*</span>data_obj, <span style="color:#666">*</span>token_obj; - <span style="color:#a2f;font-weight:bold">if</span> (<span style="color:#666">!</span>json_object_object_get_ex(res, <span style="color:#b44">&#34;data&#34;</span>, <span style="color:#666">&amp;</span>data_obj)) { - printf(<span style="color:#b44">&#34;JSONで&#39;data&#39;を見つけられませんでした。&#34;</span>); - token <span style="color:#666">=</span> <span style="color:#b44">&#34;&#34;</span>; - } - - <span style="color:#a2f;font-weight:bold">if</span> (<span style="color:#666">!</span>json_object_object_get_ex(data_obj, <span style="color:#b44">&#34;token&#34;</span>, <span style="color:#666">&amp;</span>token_obj)) { - printf(<span style="color:#b44">&#34;JSONの&#39;data&#39;鍵で、&#39;token&#39;を見つけられませんでした。&#34;</span>); - token <span style="color:#666">=</span> <span style="color:#b44">&#34;&#34;</span>; - } - - token <span style="color:#666">=</span> json_object_get_string(token_obj); - json_object_put(res); - - <span style="color:#a2f;font-weight:bold">return</span> token; -} -</code></pre><p>上記の問題は、3つの異なるエラーチェックがあるにも関わらず、エラーが発生しても最後まで処理を続ける事です。<br /> -それは非効率的です。<br /> -さらに、上記の例ではメモリリークが発生する可能性がある為、この方法はお勧め出来ません。<br /> -そこで、早期リターンを使って問題を解決しましょう。</p> -<pre><code lang=""><span style="color:#a2f;font-weight:bold">const</span> <span style="color:#0b0;font-weight:bold">char</span> <span style="color:#666">*</span><span style="color:#00a000">get_token</span>() { - <span style="color:#0b0;font-weight:bold">char</span> <span style="color:#666">*</span>token <span style="color:#666">=</span> malloc(<span style="color:#666">64</span>); - json_object <span style="color:#666">*</span>res <span style="color:#666">=</span> curl_con(<span style="color:#b44">&#34;auth/login&#34;</span>, <span style="color:#b44">&#34;POST&#34;</span>, data, <span style="color:#b44">&#34;&#34;</span>); - - <span style="color:#a2f;font-weight:bold">if</span> (res <span style="color:#666">==</span> <span style="color:#a2f">NULL</span>) { - printf(<span style="color:#b44">&#34;エラー:ログインに失敗。&#34;</span>); - free(token); <span style="color:#080;font-style:italic">// メモリ割当しましたが、エラーが発生したから、開放して下さい -</span><span style="color:#080;font-style:italic"></span> <span style="color:#a2f;font-weight:bold">return</span> <span style="color:#a2f">NULL</span>; <span style="color:#080;font-style:italic">// エラーが発生したから、終了しよう -</span><span style="color:#080;font-style:italic"></span> } - - json_object <span style="color:#666">*</span>data_obj, <span style="color:#666">*</span>token_obj; - <span style="color:#a2f;font-weight:bold">if</span> (<span style="color:#666">!</span>json_object_object_get_ex(res, <span style="color:#b44">&#34;data&#34;</span>, <span style="color:#666">&amp;</span>data_obj)) { - printf(<span style="color:#b44">&#34;JSONで&#39;data&#39;を見つけられませんでした。&#34;</span>); - json_object_put(res); <span style="color:#080;font-style:italic">// エラーが発生したから、JSONオブジェクトを開放する -</span><span style="color:#080;font-style:italic"></span> free(token); - <span style="color:#a2f;font-weight:bold">return</span> <span style="color:#a2f">NULL</span>; - } - - <span style="color:#a2f;font-weight:bold">if</span> (<span style="color:#666">!</span>json_object_object_get_ex(data_obj, <span style="color:#b44">&#34;token&#34;</span>, <span style="color:#666">&amp;</span>token_obj)) { - printf(<span style="color:#b44">&#34;JSONの&#39;data&#39;鍵で、&#39;token&#39;を見つけられませんでした。&#34;</span>); - json_object_put(res); - free(token); - <span style="color:#a2f;font-weight:bold">return</span> <span style="color:#a2f">NULL</span>; - } - - token <span style="color:#666">=</span> json_object_get_string(token_obj); - json_object_put(res); - - <span style="color:#a2f;font-weight:bold">return</span> token; -} -</code></pre><p>結果は同じですが、処理が少なくなる為、効率が向上します。</p> -<p>以上</p> - - - - - diff --git a/gemini/blog.gmi b/gemini/blog.gmi index 3623360..4d74d54 100644 --- a/gemini/blog.gmi +++ b/gemini/blog.gmi @@ -2,6 +2,7 @@ # 記事一覧 +=> /blog/sp-120.gmi 2024年02月01日 【076】sp 1.2.0登場 => /blog/neovim-code-template.gmi 2024年01月31日 【Neovim】テンプレートと作り方 => /blog/freebsd-nas-auto-backup.gmi 2024年01月30日 【FreeBSD】簡単にNASの自動的にバックアップする方法 => /blog/rice-productive.gmi 2024年01月04日 【プログラミング】生産力を増大する方法 diff --git a/gemini/blog/sp-120.gmi b/gemini/blog/sp-120.gmi new file mode 100644 index 0000000..3b4ba9e --- /dev/null +++ b/gemini/blog/sp-120.gmi @@ -0,0 +1,21 @@ +=> /blog.gmi ブログ一覧へ + +#【076】sp 1.2.0登場 +投稿日:2024-02-01 + +## spって何? +spはシンプルなパスワードマネージャです。 + +## 変更 +* やっとTOTP機能性を修正した +* makeを実行したら、バイナリがもっと小さくなる +* パスワードの長さの延長 +* パスワード追加機能性で、パスワードが既に存在するかどうか確認 +* パスワード削除機能性で、パスワードが存在ないかどうか確認 +* パスワード変更機能性の追加 +* zsh対応の修正 + +## ソースコード +=> https://gitler.moe/suwako/sp Gitler + +以上 diff --git a/gemini/twtxt.txt b/gemini/twtxt.txt index bd8b619..4e447e5 100644 --- a/gemini/twtxt.txt +++ b/gemini/twtxt.txt @@ -3,6 +3,7 @@ # avatar = gemini://076.moe/static/suwako.jpg # description = テクニカル諏訪子様のtwtxtフィード # link = ホームページ gemini://technicalsuwako.moe +2024-02-01T00:00:00Z09:00 【076】sp 1.2.0登場 - gemini://technicalsuwako.moe/blog/sp-120.gmi 2024-01-31T00:00:00Z09:00 【Neovim】テンプレートと作り方 - gemini://technicalsuwako.moe/blog/neovim-code-template.gmi 2024-01-30T00:00:00Z09:00 【FreeBSD】簡単にNASの自動的にバックアップする方法 - gemini://technicalsuwako.moe/blog/freebsd-nas-auto-backup.gmi 2024-01-04T00:00:00Z09:00 【プログラミング】生産力を増大する方法 - gemini://technicalsuwako.moe/blog/rice-productive.gmi diff --git a/src/blog/sp-120.md b/src/blog/sp-120.md new file mode 100644 index 0000000..4d90442 --- /dev/null +++ b/src/blog/sp-120.md @@ -0,0 +1,21 @@ +title: 【076】sp 1.2.0登場 +author: 凛 +date: 2024-02-01 +tags: jp,blog,ウエブ開発,076,sp +---- +## spって何? +spはシンプルなパスワードマネージャです。 + +## 変更 +* やっとTOTP機能性を修正した +* makeを実行したら、バイナリがもっと小さくなる +* パスワードの長さの延長 +* パスワード追加機能性で、パスワードが既に存在するかどうか確認 +* パスワード削除機能性で、パスワードが存在ないかどうか確認 +* パスワード変更機能性の追加 +* zsh対応の修正 + +## ソースコード +[Gitler](https://gitler.moe/suwako/sp) + +以上