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">"auth/login"</span>, <span style="color:#b44">"POST"</span>, data, <span style="color:#b44">""</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">"エラー:ログインに失敗。"</span>);
- token <span style="color:#666">=</span> <span style="color:#b44">""</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">"data"</span>, <span style="color:#666">&</span>data_obj)) {
- printf(<span style="color:#b44">"JSONで'data'を見つけられませんでした。"</span>);
- token <span style="color:#666">=</span> <span style="color:#b44">""</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">"token"</span>, <span style="color:#666">&</span>token_obj)) {
- printf(<span style="color:#b44">"JSONの'data'鍵で、'token'を見つけられませんでした。"</span>);
- token <span style="color:#666">=</span> <span style="color:#b44">""</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">"auth/login"</span>, <span style="color:#b44">"POST"</span>, data, <span style="color:#b44">""</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">"エラー:ログインに失敗。"</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">"data"</span>, <span style="color:#666">&</span>data_obj)) {
- printf(<span style="color:#b44">"JSONで'data'を見つけられませんでした。"</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">"token"</span>, <span style="color:#666">&</span>token_obj)) {
- printf(<span style="color:#b44">"JSONの'data'鍵で、'token'を見つけられませんでした。"</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)
+
+以上