【076】sp 1.2.0登場
このコミットが含まれているのは:
コミット
2ef3cfd41a
136
gemini/blog.atom
136
gemini/blog.atom
|
@ -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">【076】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="076"></category>
|
||||
|
||||
<category term="sp"></category>
|
||||
|
||||
<link href="gemini://technicalsuwako.moe/blog/sp-120.gmi" rel="alternate"></link>
|
||||
<content type="html">
|
||||
|
||||
|
||||
|
||||
<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>
|
||||
|
||||
|
||||
</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">
|
||||
|
||||
|
||||
|
||||
<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>
|
||||
|
||||
|
||||
</content>
|
||||
</entry>
|
||||
|
||||
|
||||
</feed>
|
||||
|
|
|
@ -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日 【プログラミング】生産力を増大する方法
|
||||
|
|
|
@ -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
|
||||
|
||||
以上
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
以上
|
読み込み中…
新しいイシューから参照