Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

C++アプリケーションの高速化

ボトルネックの計測

まずはどこが遅いか計測しよう。全体の時間の1%の処理を50%高速化しても、0.5%高速化したことにしかならない。
std::chronoを使うのがよいだろう。
シビアなケースでは計測結果をメモリ上に配置しておき、あとでまとめて標準出力やログファイルに出力するのがよいだろう。

無駄な処理をスキップ

無駄な処理を極限まで削ろう。
たとえば、1024バイトのデータを返す代わりに1バイトのデータを返せばすむような処理があるならそうしよう。
あるメモリから別のメモリにデータをコピーしている箇所があれば、ムーブできないか検討しよう。
2番目のメモリアロケートを省略できないか検討しよう。

メモリアクセス

ヒープメモリアロケートは遅いと肝に命じよう。
繰り返しヒープメモリアロケートしている場合は、アロケートが最初の1回のみで済ませられないか検討しよう。
適切なstdコンテナを利用しているか調べよう。
stdコンテナで機能が不足している場合は自作しよう。

ファイルアクセス

ファイルアクセスはヒープメモリアロケートに対してもはるかに遅い。
極力ファイルアクセスは避けよう。簡易データベースの利用も検討しよう。
フリーのファイルベースのデータベースとしてSQLiteやBerkeley DBがある。

排他処理の最適化

排他処理でリソースが1つの変数の場合はstd::atomicを利用しよう。
リソースが2つ以上の場合はstd::mutexでOKだが、本当にそれで良いか処理の設計自体を見直そう。

swift Intのオーバーフロー演算について

swiftは整数のオーバーフローに関して厳しめの仕様になっている。

Double, Floatには最大値はほぼない。
Double, Floatは不動小数点表現なので、最大値はほぼないと考えて良い。オーバーフロー制御構文は用意されていない。

DoubleをIntに変換するときにオーバーフローさせたくない場合は、Int(exactly:)を使う。オーバーフローする時はnilが返される。
このイニシャライザは小数点以下を正確に表現できるかどうかなので、大きさがオーバーフローかどうかをみるには、
Int.maxと値を比較するのが適切である。

Intどうしの加算、乗算でオーバーフローを検知させたい時は以下のメソッドを使う。

func addingReportingOverflow(_ other: Int) -> (partialValue: Int, overflow: Bool)
func multipliedReportingOverflow(by other: Int) -> (partialValue: Int, overflow: Bool)

仮想通貨取引の納税

会社の給与以外の所得があり、それが20万円を超えた場合は確定申告を行う必要があります。
この時、国税を国へ、市民県民税を市へ支払う必要があります。

No.1900 給与所得者で確定申告が必要な人|国税庁

例えば、2019年1月1日から2019年12月31日に行った仮想通貨取引において、全ての通貨の利益を合算した合計が30万円だった場合を考えます。

仮想通貨取引の利益は雑所得です。所得が195万以下の場合、国税の税率は5%なので、30万円 の5%で、15000円程度となります。
正確な値は給料の所得金額によって変わるので、国税局のWEB確定申告書作成サービスで確認できます。

No.2260 所得税の税率|所得税|国税庁

国税は2020年2月半ば頃から2020年3月半ば頃までの間に金融機関で確定申告書に記載された納める税金額(15000円)を支払います。

一方、市民県民税率はどこの地域も大体10%です。
したがって、30万円の10%の3万円を市へ支払います。

利益が20万円以下の場合は、国税を納める必要はありませんが、
利益が20万円以下の場合も、市民県民税は納める必要があります。
20万円ルールは国税には適用されますが、市民県民税には適用されないのです。

確定申告を行った場合は、申告した内容が市へ通知され、3万円分の納付書が2020年の6月頃に送られてきますので、この納付書をコンビニで支払うことになります。

利益が10万円で、確定申告を行わなかった場合は、10万円の10%である1万円を市へ支払う必要がありますが、この時は、市へ住民税申告を行う必要があります。

住民税の申告期間は2020年2月1日から2020年2月半ば頃までで、国税局と同じように市のWEB申告書作成サービスなどを利用して申告します。
この場合はおそらく2020年の6月頃に納付書が送られて来るのでそれを使って支払います。

住民税の申告義務2018年(平成30年)分|申告が必要な人、いつ申告するのか、忘れたら?など | 税金の知恵袋

無申告分の仮想通貨取引の市民税を申告したら延滞金が発生しなかった話

個人的な話ですが、2018年分の仮想通貨取引では利益が20万円に満たなかったので、確定申告をしませんでした。
この時、市民税を納める必要があるというのに気がつかず、放置していたのですが、今年分の確定申告について調べていたら、無申告状態であることに気がつき、市の市民税課で申告してきました。延滞金を取られるとビビっていたのですが、結局、延滞金は発生しませんでした。
個人の加算分の無申告については金額が少ないこともあるせいか(?)、延滞金は取らないようです。

利益がいくら発生しようと確定申告しておけばよかったと個人的に思いました。
利益が10万の場合は、国税はその5%の5000円です。確定申告した場合は、国に5000円支払う必要がありますが、
市民税申告書は出さなくて済みます。

この記事の正確性は保証できませんので、国税局や市の市民税課のサイトなどで十分確認することをおすすめします。

let's encrypt のACMEv1終了に関するお知らせに対応した

let's encrypt から次のようなメールがきた。

According to our records, the software client you're using to get Let's
Encrypt TLS/SSL certificates issued or renewed at least one HTTPS certificate
in the past two weeks using the ACMEv1 protocol. Here are the details of one
recent ACMEv1 request from each of your account(s):

どうやら何かする必要があるらしい。
certbotのバージョンを最新にすればいいらしい。

CentOS7を使っているが、certbotのバージョンを確認してみる。

# certbot --version
certbot 0.25.1

どうもすごく古いようだ。
yumでのアップデートも効かないしどうしたもんか。
ググった挙句みつけた次のコマンドを実行する。

# yum install epel-release
# yum update
=====================================================================================================================================
 Package                             アーキテクチャー     バージョン                                        リポジトリー        容量
=====================================================================================================================================
更新します:
 certbot                             noarch               1.0.0-1.el7                                       epel                41 k
 epel-release                        noarch               7-12                                              epel                15 k
 fail2ban                            noarch               0.10.4-1.el7                                      epel                12 k
 fail2ban-firewalld                  noarch               0.10.4-1.el7                                      epel                12 k
 fail2ban-sendmail                   noarch               0.10.4-1.el7                                      epel                14 k
 fail2ban-server                     noarch               0.10.4-1.el7                                      epel               404 k
 python-zope-component               noarch               1:4.1.0-5.el7                                     epel               228 k
 python2-acme                        noarch               1.0.0-1.el7                                       epel                74 k
 python2-certbot                     noarch               1.0.0-1.el7                                       epel               358 k
 python2-certbot-nginx               noarch               1.0.0-1.el7                                       epel                76 k
 python2-future                      noarch               0.16.0-15.20181019gitbee0f3b.el7                  epel               802 k
 python2-josepy                      noarch               1.2.0-1.el7                                       epel                89 k
 python2-mock                        noarch               1.0.1-10.el7                                      epel                92 k
 python2-pip                         noarch               8.1.2-10.el7                                      epel               1.7 M
 python2-psutil                      x86_64               2.2.1-5.el7                                       epel               116 k
依存性関連でのインストールをします:
 python2-distro                      noarch               1.2.0-3.el7                                       epel                29 k

certbotが更新された。
めでたしめでたし。

EPELって初めて知ったなあ。

CentOSなどで使う、EPELってなんだ? - Qiita