【076】sp 1.2.0登場

このコミットが含まれているのは:
守矢諏訪子 2024-02-01 17:22:24 +09:00
コミット 2ef3cfd41a
5個のファイルの変更86行の追加94行の削除

ファイルの表示

@ -3,13 +3,54 @@
<id>gemini://technicalsuwako.moe</id>
<title>テクニカル諏訪子</title>
<updated>2024-01-31T00:00:00Z</updated>
<updated>2024-02-01T00:00:00Z</updated>
<author><name>テクニカル諏訪子</name></author>
<link href="gemini://technicalsuwako.moe" rel="alternate"></link>
<entry>
<id>blog/sp-120.gmi</id>
<author><name>凛</name></author>
<title type="html">【】sp 1.2.0登場</title>
<published>2024-02-01T00:00:00Z</published>
<category term="jp"></category>
<category term="blog"></category>
<category term="ウエブ開発"></category>
<category term=""></category>
<category term="sp"></category>
<link href="gemini://technicalsuwako.moe/blog/sp-120.gmi" rel="alternate"></link>
<content type="html">
&lt;h2 id=&#34;sp&#34;&gt;spって何?&lt;/h2&gt;
&lt;p&gt;spはシンプルなパスワードマネージャです。&lt;/p&gt;
&lt;h2 id=&#34;heading&#34;&gt;変更&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;やっとTOTP機能性を修正した&lt;/li&gt;
&lt;li&gt;makeを実行したら、バイナリがもっと小さくなる&lt;/li&gt;
&lt;li&gt;パスワードの長さの延長&lt;/li&gt;
&lt;li&gt;パスワード追加機能性で、パスワードが既に存在するかどうか確認&lt;/li&gt;
&lt;li&gt;パスワード削除機能性で、パスワードが存在ないかどうか確認&lt;/li&gt;
&lt;li&gt;パスワード変更機能性の追加&lt;/li&gt;
&lt;li&gt;zsh対応の修正&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/sp&#34;&gt;Gitler&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;以上&lt;/p&gt;
</content>
</entry>
<entry>
<id>blog/neovim-code-template.gmi</id>
<author><name>凜</name></author>
@ -372,98 +413,5 @@ Linux向けウィルスも存在しますが、その数は格段に少ないで
</content>
</entry>
<entry>
<id>blog/programming-early-return.gmi</id>
<author><name>凛</name></author>
<title type="html">【プログラミング】アドバイス2:早期リターン</title>
<published>2023-12-21T00:00:00Z</published>
<category term="jp"></category>
<category term="blog"></category>
<category term="システム開発"></category>
<category term="c言語"></category>
<category term="プログラミング"></category>
<link href="gemini://technicalsuwako.moe/blog/programming-early-return.gmi" rel="alternate"></link>
<content type="html">
&lt;p&gt;&lt;a href=&#34;/blog/programming-pyramid-of-doom.xhtml&#34;&gt;前回は運命のピラミッドを避ける事について話しました。&lt;/a&gt;&lt;br /&gt;
運命のピラミッドを避けるる際、早期リターンをよく使用します。&lt;/p&gt;
&lt;h2 id=&#34;heading&#34;&gt;早期リターンとは?&lt;/h2&gt;
&lt;p&gt;早期リターンは、特定の条件が真(true)の場合に、関数の実行を直ぐに終了させる事です。&lt;br /&gt;
例えば、エラーが発生した場合、関数の最後まで実行する意味はありませんので、早期リターンを使う方が良いでしょう。&lt;/p&gt;
&lt;p&gt;C言語の例(早期リターンを使わない場合)&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:#0b0;font-weight:bold&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;get_token&lt;/span&gt;() {
&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;token &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; malloc(&lt;span style=&#34;color:#666&#34;&gt;64&lt;/span&gt;);
json_object &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;res &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; curl_con(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;auth/login&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;POST&amp;#34;&lt;/span&gt;, data, &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;);
&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;if&lt;/span&gt; (res &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#a2f&#34;&gt;NULL&lt;/span&gt;) {
printf(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;エラー:ログインに失敗。&amp;#34;&lt;/span&gt;);
token &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;;
}
json_object &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;data_obj, &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;token_obj;
&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#666&#34;&gt;!&lt;/span&gt;json_object_object_get_ex(res, &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;data&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#666&#34;&gt;&amp;amp;&lt;/span&gt;data_obj)) {
printf(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;JSONで&amp;#39;data&amp;#39;を見つけられませんでした。&amp;#34;&lt;/span&gt;);
token &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;;
}
&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#666&#34;&gt;!&lt;/span&gt;json_object_object_get_ex(data_obj, &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;token&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#666&#34;&gt;&amp;amp;&lt;/span&gt;token_obj)) {
printf(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;JSONの&amp;#39;data&amp;#39;鍵で、&amp;#39;token&amp;#39;を見つけられませんでした。&amp;#34;&lt;/span&gt;);
token &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;;
}
token &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; json_object_get_string(token_obj);
json_object_put(res);
&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;return&lt;/span&gt; token;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;上記の問題は、3つの異なるエラーチェックがあるにも関わらず、エラーが発生しても最後まで処理を続ける事です。&lt;br /&gt;
それは非効率的です。&lt;br /&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:#0b0;font-weight:bold&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;get_token&lt;/span&gt;() {
&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;token &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; malloc(&lt;span style=&#34;color:#666&#34;&gt;64&lt;/span&gt;);
json_object &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;res &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; curl_con(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;auth/login&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;POST&amp;#34;&lt;/span&gt;, data, &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;);
&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;if&lt;/span&gt; (res &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#a2f&#34;&gt;NULL&lt;/span&gt;) {
printf(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;エラー:ログインに失敗。&amp;#34;&lt;/span&gt;);
free(token); &lt;span style=&#34;color:#080;font-style:italic&#34;&gt;// メモリ割当しましたが、エラーが発生したから、開放して下さい
&lt;/span&gt;&lt;span style=&#34;color:#080;font-style:italic&#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:#a2f&#34;&gt;NULL&lt;/span&gt;; &lt;span style=&#34;color:#080;font-style:italic&#34;&gt;// エラーが発生したから、終了しよう
&lt;/span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;&lt;/span&gt; }
json_object &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;data_obj, &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;token_obj;
&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#666&#34;&gt;!&lt;/span&gt;json_object_object_get_ex(res, &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;data&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#666&#34;&gt;&amp;amp;&lt;/span&gt;data_obj)) {
printf(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;JSONで&amp;#39;data&amp;#39;を見つけられませんでした。&amp;#34;&lt;/span&gt;);
json_object_put(res); &lt;span style=&#34;color:#080;font-style:italic&#34;&gt;// エラーが発生したから、JSONオブジェクトを開放する
&lt;/span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;&lt;/span&gt; free(token);
&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a2f&#34;&gt;NULL&lt;/span&gt;;
}
&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#666&#34;&gt;!&lt;/span&gt;json_object_object_get_ex(data_obj, &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;token&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#666&#34;&gt;&amp;amp;&lt;/span&gt;token_obj)) {
printf(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;JSONの&amp;#39;data&amp;#39;鍵で、&amp;#39;token&amp;#39;を見つけられませんでした。&amp;#34;&lt;/span&gt;);
json_object_put(res);
free(token);
&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a2f&#34;&gt;NULL&lt;/span&gt;;
}
token &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; json_object_get_string(token_obj);
json_object_put(res);
&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;return&lt;/span&gt; token;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;結果は同じですが、処理が少なくなる為、効率が向上します。&lt;/p&gt;
&lt;p&gt;以上&lt;/p&gt;
</content>
</entry>
</feed>

ファイルの表示

@ -2,6 +2,7 @@
# 記事一覧
=> /blog/sp-120.gmi 2024年02月01日 【】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日 【プログラミング】生産力を増大する方法

21
gemini/blog/sp-120.gmi ノーマルファイル
ファイルの表示

@ -0,0 +1,21 @@
=> /blog.gmi ブログ一覧へ
#【】sp 1.2.0登場
投稿日2024-02-01
## spって何?
spはシンプルなパスワードマネージャです。
## 変更
* やっとTOTP機能性を修正した
* makeを実行したら、バイナリがもっと小さくなる
* パスワードの長さの延長
* パスワード追加機能性で、パスワードが既に存在するかどうか確認
* パスワード削除機能性で、パスワードが存在ないかどうか確認
* パスワード変更機能性の追加
* zsh対応の修正
## ソースコード
=> https://gitler.moe/suwako/sp Gitler
以上

ファイルの表示

@ -3,6 +3,7 @@
# avatar = gemini://076.moe/static/suwako.jpg
# description = テクニカル諏訪子様のtwtxtフィード
# link = ホームページ gemini://technicalsuwako.moe
2024-02-01T00:00:00Z09:00 【】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

21
src/blog/sp-120.md ノーマルファイル
ファイルの表示

@ -0,0 +1,21 @@
title: 【】sp 1.2.0登場
author: 凛
date: 2024-02-01
tags: jp,blog,ウエブ開発,,sp
----
## spって何?
spはシンプルなパスワードマネージャです。
## 変更
* やっとTOTP機能性を修正した
* makeを実行したら、バイナリがもっと小さくなる
* パスワードの長さの延長
* パスワード追加機能性で、パスワードが既に存在するかどうか確認
* パスワード削除機能性で、パスワードが存在ないかどうか確認
* パスワード変更機能性の追加
* zsh対応の修正
## ソースコード
[Gitler](https://gitler.moe/suwako/sp)
以上