- 技術系備忘録/Docker/Emscripten (149d)
- 2024-04-13 (Sat) 23:12:55 by takatsuka
> docker run --rm --name emsdk -v $(pwd)/sample:/opt/vol -w /opt/vol -p 8080:8080 -it emsdk emrun --no_browser --port 8080 .
- 2024-04-13 (Sat) 23:12:55 by takatsuka
- 技術系備忘録/Windows/接続されているモニタ以上の解像度でデスクトップ表示 (687d)
- 2022-10-24 (Mon) 13:04:50 by takatsuka
として起動し接続してください。4K画面としてリモートデスクトップが起動できます。
- 2022-10-24 (Mon) 13:04:50 by takatsuka
- 技術系備忘録/C++/小技/無名関数の再帰をローテクで (1062d)
- 2021-10-14 (Thu) 11:46:26 by takatsuka
・見てくれがダサい!(・・・個人の感想です)
- 2021-10-14 (Thu) 11:46:26 by takatsuka
- 技術系備忘録/C++/小技 (1127d)
- 2021-08-10 (Tue) 10:22:31 by takatsuka
- 技術系備忘録/C++/小技/型で条件分岐 (1128d)
- 2021-08-08 (Sun) 22:45:20 by takatsuka
ちなみに C++03 くらいのコンパイラでも RTTI がサポートされていれば同じこと(型がキーの std::map)が出来るので目新しい小技ではありません。がしかしココまでシンプルには書けません。
- 2021-08-08 (Sun) 22:45:20 by takatsuka
- 技術系備忘録/Docker/サーバー死活監視スクリプト (1188d)
- 2021-06-10 (Thu) 17:07:46 by takatsuka
サーバーにアクセスしエラーだったらメールで通知します。それを cron で定期的に実行します。
- 2021-06-10 (Thu) 17:07:46 by takatsuka
- 技術系備忘録/C++/Boost/boost.formatを使った文字列フォーマット。printf系関数を置き換え (1261d)
- 2021-03-29 (Mon) 11:51:39 by takatsuka
github にも公開しました
rlib-StringFormat
- 2021-03-29 (Mon) 11:51:39 by takatsuka
- 技術系備忘録/VMware/Ubuntu8.10にVMwareServer1.0をインストール (1420d)
- 2020-10-21 (Wed) 12:55:12 by takatsuka
こちらのページを参考にし、手元で試した結果をシンプルにまとめました。ありがとうございます。
- 2020-10-21 (Wed) 12:55:12 by takatsuka
- 技術系備忘録/VMware (1427d)
- 2020-10-14 (Wed) 22:18:58 by takatsuka
- 技術系備忘録/VMware/CentOS7にVMwarePlayer12をインストール (1427d)
- 2020-10-14 (Wed) 22:01:54 by takatsuka
2020-00-00T00:00:00.000+09:00| vthread-4| I125: Building module with command "/usr/bin/make -j2 -C /tmp/modconfig-b6MdgY/vmnet-only auto-build HEADER_DIR=/lib/modules/3.10.0-1127.19.1.el7.x86_64/build/include CC=/usr/bin/gcc IS_GCC_3=no" 2020-00-00T00:00:00.000+09:00| vthread-4| W115: Failed to build vmnet. Failed to execute the build command.
- 2020-10-14 (Wed) 22:01:54 by takatsuka
- 技術系備忘録/TypeScript/二分探索(binary search) (1560d)
- 2020-06-03 (Wed) 10:09:06 by takatsuka
less: (l: T, r: U) => boolean = (l: T, r: U) => l as any < r
less: (l: U, r: T) => boolean = (l: U, r: T) => l as any < r less0: (l: T, r: U) => boolean = (l: T, r: U) => l as any < r, less1: (l: U, r: T) => boolean = (l: U, r: T) => l as any < r
- 2020-06-03 (Wed) 10:09:06 by takatsuka
- 技術系備忘録/Docker/SSLアクセラレータ&リバースプロキシ (1562d)
- 2020-06-01 (Mon) 17:24:51 by takatsuka
証明書の設定などは Webサーバーコンテナの環境変数に記述するのが基本なようで、それ以外の方法を見つけられなかったです。ご存じの方おられましたら是非ご教示頂きたいです。
- 2020-06-01 (Mon) 17:24:51 by takatsuka
- 技術系備忘録/C++/OpenSSL/ビルド方法 (1768d)
- 2019-11-08 (Fri) 09:58:44 by takatsuka
- WSL(Windows Subsystem for Linux)を使ってますのでそれも必要です。が、ダウンロードと解凍でのみ使ってるので、powershell や一般的な解凍ツールに挿げ替えることは可能だと思います。
- 2019-11-08 (Fri) 09:58:44 by takatsuka
- 技術系備忘録/C++/VisualStudio/MSBuild.exeのパスを解決して実行 (1772d)
- 2019-11-04 (Mon) 21:05:15 by takatsuka
さすがに、「このプロジェクトでは VisualStudio2017 を使うので 2019 はインストールするべからず!」みたいな開発環境ルールは避けたいので、VisualStudio2019 がインストールされている環境でも期待通り MSBuild.exe を叩ける bat を用意したので備忘録兼ねて載せておきます。
- 2019-11-04 (Mon) 21:05:15 by takatsuka
- MenuBar (1805d)
- 2019-10-02 (Wed) 13:32:28 by takatsuka
#recent(30)
- 2019-10-02 (Wed) 13:32:28 by takatsuka
- 技術系備忘録/Docker (1832d)
- 2019-09-05 (Thu) 00:06:32 by takatsuka
- 技術系備忘録/Docker/LAMP環境構築 (1833d)
- 2019-09-04 (Wed) 19:37:34 by takatsuka
MYSQL_ROOT_HOST: "%"
- MYSQL_ROOT_HOST は、デフォルトが"%"のハズだけど何故かそうならない版の為に追加。
- 2019-09-04 (Wed) 19:37:34 by takatsuka
- 会社案内/品質管理方針 (1883d)
- 2019-07-16 (Tue) 13:16:41 by takatsuka
- 技術系備忘録/AWS/SoftEtherを使ってVPN接続 (1972d)
- 2019-04-18 (Thu) 09:38:22 by takatsuka
VPN を繋げた状態のローカルPC で youtube とかを見たときに VPN を経由しないようにすることが重要で、もし VPN 経由しちゃってると AWS 側の通信量の激増に気が付かずにパケ死の可能性アリです。
- 2019-04-18 (Thu) 09:38:22 by takatsuka
- 技術系備忘録/C++/小技/std.set map系の比較関数の新機能 (2031d)
- 2019-02-18 (Mon) 00:04:53 by takatsuka
裏技っぽい印象を受けてしまいますが C++14 では is_transparent を書くことでイケるようになります。
- 2019-02-18 (Mon) 00:04:53 by takatsuka
- 技術系備忘録/データベース (2300d)
- 2018-05-25 (Fri) 21:58:36 by takatsuka
- 技術系備忘録/データベース/SQLite (2300d)
- 2018-05-25 (Fri) 21:57:08 by takatsuka
- 技術系備忘録/データベース/SQLite/WHERE IN で複数指定するクエリ (2300d)
- 2018-05-25 (Fri) 21:47:43 by takatsuka
なお、こういう書き方は以前は出来なかったような気がするので、多分、最近の SQLite3 でサポートされるようになったんだと思います。
- 2018-05-25 (Fri) 21:47:43 by takatsuka
- 会社案内/求人情報 (2305d)
- 2018-05-20 (Sun) 00:13:04 by takatsuka
勤務地 さいたま市大宮区
大宮駅西口 徒歩12分
- 2018-05-20 (Sun) 00:13:04 by takatsuka
- 技術系備忘録/AWS/EC2 AmazonLinuxにSWAPを設定 (2434d)
- 2018-01-11 (Thu) 10:03:04 by takatsuka
#prettify{{
- 2018-01-11 (Thu) 10:03:04 by takatsuka
- 技術系備忘録/AWS (2434d)
- 2018-01-11 (Thu) 09:42:31 by takatsuka
が、AWS も日々進歩変更されてるので、すでに古い情報となってるかもしれません。そんな場合にはご指摘頂ければ幸いです。
- 2018-01-11 (Thu) 09:42:31 by takatsuka
- 技術系備忘録/C++/Boost/インストール手順 (2485d)
- 2017-11-21 (Tue) 14:00:08 by takatsuka
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:$HOME/boost_1_60_0/include export LIBRARY_PATH=$LIBRARY_PATH:$HOME/boost_1_60_0/lib
- 2017-11-21 (Tue) 14:00:08 by takatsuka
- 技術系備忘録/C++/Boost (2512d)
- 2017-10-25 (Wed) 10:18:27 by takatsuka
- 技術系備忘録/C++/VisualStudio (2512d)
- 2017-10-25 (Wed) 10:15:52 by takatsuka
- 技術系備忘録/C++/Boost/boost.asioコルーチン内で表コンテキストの処理を行う (2512d)
- 2017-10-25 (Wed) 09:59:24 by takatsuka
スタックフルコルーチンはとても便利なんですが、コルーチン内で実行するには都合が悪いコードもあるかなと思います。
そんなとき、表コンテキスト(って言うのだろうか。通常スタックの状態のこと。)で処理をさせて結果を得るっていうことを、同期処理っぽく書くやり方を、忘れる自信があるので備忘録です。
- 2017-10-25 (Wed) 09:59:24 by takatsuka
- 技術系備忘録/C++/VisualStudio/デバッガでstd.stringをUTF-8で表示 (2520d)
- 2017-10-17 (Tue) 10:14:50 by takatsuka
インストールされたファイルを直接編集することに抵抗があるような場合は、ユーザーフォルダを使う方法のほうが良いかもです。
- 2017-10-17 (Tue) 10:14:50 by takatsuka
- 会社案内 (2731d)
- 2017-03-20 (Mon) 21:31:38 by takatsuka
TEL 048-729-7045
- 2017-03-20 (Mon) 21:31:38 by takatsuka
- 技術系備忘録/C++/小技/templateクラスの中のtemplateクラスの書き方 (2896d)
- 2016-10-05 (Wed) 22:37:59 by takatsuka
というわけで、template クラスの中の template クラスの static 変数の実体や関数の中身を別に記述するとき、どうやって書くんだったっけ・・と悩んだ時のためにリファレンスコードとして残しておきます。
以上、だいぶ以前に書いたブログの記事を引っ張ってきました。
- 2016-10-05 (Wed) 22:37:59 by takatsuka
- 技術系備忘録/TypeScript/VisualStudioでのフロントエンド開発環境 React導入 (2910d)
- 2016-09-22 (Thu) 20:23:03 by takatsuka
- 今時点の TypeScript2.0 はまだベータ版(RCなのかな?)ですが、そこは気にせず TypeScript 2.0.2 Beta for Visual Studio 2015 という plugin を使っています。
- 2016-09-22 (Thu) 20:23:03 by takatsuka
- 技術系備忘録/TypeScript/VisualStudioでのフロントエンド開発環境 (2922d)
- 2016-09-10 (Sat) 14:04:26 by takatsuka
TypeScript 1.8 では標準で結合機能があるので、webpack 等を使わなくても結合は出来るのですが、プロジェクトの全ファイルを1つにしてしまうようで、あんまり使い勝手がよくありません。それに実は、ブラウザではそのファイルをそのままでは動かせなかったりと、自分としてはイマイチだなーと思ってました。
- 2016-09-10 (Sat) 14:04:26 by takatsuka
- 技術系備忘録/TypeScript (2939d)
- 2016-08-24 (Wed) 18:49:51 by takatsuka
- 技術系備忘録/TypeScript/メンバ関数ポインタ (2939d)
- 2016-08-24 (Wed) 18:44:55 by takatsuka
let s : string = `UserNo:${userNo} `; let t = table[key].call( users[userNo], 99 ); // オブジェクト.call() で第1引数に this となるオブジェクトを指定。第2引数以降に関数の引数を指定。 s += `${key}は${t}。`;
- 2016-08-24 (Wed) 18:44:55 by takatsuka
- 技術系備忘録/C++/小技/staticメンバ変数を持つクラスをヘッダファイルのみで実現 (2975d)
- 2016-07-19 (Tue) 17:38:42 by takatsuka
static メンバ変数を持ったクラスは、static 変数の実体を記述する為、cpp ファイル(ソースファイル)が必要になってしまいがちです。
おそらく、普通に書くとこんな感じ↑になると思います。
- 2016-07-19 (Tue) 17:38:42 by takatsuka
- 技術系備忘録/FreeNAS/レプリケーション (3022d)
- 2016-06-01 (Wed) 22:30:00 by takatsuka
- 送信先 FreeNAS にボリュームを作成しておきます。
- 2016-06-01 (Wed) 22:30:00 by takatsuka
- 技術系備忘録/FreeNAS (3023d)
- 2016-06-01 (Wed) 14:22:25 by takatsuka
- 技術系備忘録/C++/VisualStudio/メモリリークの調べ方 (3056d)
- 2016-04-29 (Fri) 01:02:16 by takatsuka
こんな感じで出たら、{155}ってのがアロケートしたカウントなので、まずこの値を覚えておきます。
- 2016-04-29 (Fri) 01:02:16 by takatsuka
- 技術系備忘録/PHP/二分探索(binary search) (3064d)
- 2016-04-21 (Thu) 15:37:58 by takatsuka
#contents
- 2016-04-21 (Thu) 15:37:58 by takatsuka
- 技術系備忘録/NetBeans (3064d)
- 2016-04-21 (Thu) 10:49:45 by takatsuka
- 技術系備忘録/NetBeans/小技 (3064d)
- 2016-04-21 (Thu) 10:47:51 by takatsuka
- 2016-04-21 (Thu) 10:47:51 by takatsuka
- 技術系備忘録/PHP/準備不要のテンプレートエンジン (3066d)
- 2016-04-18 (Mon) 22:31:27 by takatsuka
- (↑こういうときに PHP のヒアドキュメントは色分けが正しくされなくて見にくくなってしまいますがご了承下さい)
- 2016-04-18 (Mon) 22:31:27 by takatsuka
- 技術系備忘録/PHP/CentOS7(or6)にPHP5.6をインストール (3070d)
- 2016-04-15 (Fri) 16:48:25 by takatsuka
php-pecl-redis php-pecl-xdebug php-opcache php-pecl-apcu とか
- 2016-04-15 (Fri) 16:48:25 by takatsuka
- 技術系備忘録/PHP (3071d)
- 2016-04-14 (Thu) 11:09:21 by takatsuka
- 技術系備忘録/PHP/小技 (3071d)
- 2016-04-14 (Thu) 11:07:11 by takatsuka
- 技術系備忘録/Bootstrap (3077d)
- 2016-04-07 (Thu) 22:35:15 by takatsuka
- 技術系備忘録/Bootstrap/アコーディオン (3079d)
- 2016-04-06 (Wed) 22:11:16 by takatsuka
Bootstrap では collapse って名称ですが、collapse ってどんな意味だろうって調べたら、「潰れる」とか「崩壊する」とか出てきて、なるほどと思いました。
どちらも cookie を使って、リロードしても開閉状態を保持するようにしています。
- 2016-04-06 (Wed) 22:11:16 by takatsuka
- 会社案内/業務案内 (3083d)
- 2016-04-02 (Sat) 21:55:26 by takatsuka
- 技術系備忘録/C++/最適化小手先テクニック/空関数の実体はヘッダに書くべし (3084d)
- 2016-04-01 (Fri) 13:25:40 by takatsuka
*/
- 2016-04-01 (Fri) 13:25:40 by takatsuka
- 技術系備忘録/C++/最適化小手先テクニック (3088d)
- 2016-03-28 (Mon) 17:22:01 by takatsuka
C/C++では、同じ処理をさせるにもコードの書き方で吐き出されるマシン語コードに違いが出ます。
ここでは自分が有効かなと思っている最適化ネタを記載してます。
昨今のマシンスペックを持ってすれば、ちょこざいな小手先テクニックは不要と思っている方もいらっしゃると思いますし、確かに、わざわざ最適化する必要がない場合も多いと思います。
ですが、ソフトウェアという物は、要となる数箇所を最適化するだけで動作が快適になったり、逆に、なにも考慮されずに書いたコードが(塵も積もれば山となるで)ソフトウェア全体のパフォーマンスを悪化させる要因にもなりかねません。
昨今のコンパイラの最適化処理はかなり優秀ですし、今後さらに優秀になっていくと思われます。
しかし、その最適化処理を有効に機能させる為のコーディングテクニックが存在することも事実です。最適化されたコードというのは、コードの見易さとトレードオフになるケースが多いですが、何も考慮せずに書くコードより、速度面やコストパフォーマンス、コードの読みやすさなど、全てを考慮しながらコーディング出来ることが、良いソフトウェアに繋がると考えておりますし理想だと思っています。
開発環境として、VisualStudio6 及び VisualStudio.NET2003 をターゲットにしており、WindowsAPIを使った例もありますが、基本的な考え方は多分どんな環境にも通じるであろうと思います。
もし掲載されている内容に間違いなどありましたら是非ご指摘ください。それ程自信がある訳ではないので、御意見、アドバイスなど頂けると大変嬉しいです。
written by takatsuka
- 2016-03-28 (Mon) 17:22:01 by takatsuka
- 技術系備忘録 (3088d)
- 2016-03-28 (Mon) 17:21:23 by takatsuka
その当時の見解で述べている記事ばかりです。古い情報となってしまっているものも多々あると思いますが、そこも踏まえ、ご意見やご指摘など頂けると大変ありがたく思います。
- 2016-03-28 (Mon) 17:21:23 by takatsuka
- 技術系備忘録/C++ (3088d)
- 2016-03-28 (Mon) 16:55:57 by takatsuka
#lsx(技術系備忘録/C++/,notitle)
- 2016-03-28 (Mon) 16:55:57 by takatsuka
- 技術系備忘録/C++/Boost/boost.asioでUDPホールパンチング (3091d)
- 2016-03-25 (Fri) 15:30:59 by takatsuka
同じ NAT 内の端末同士は、ローカルIPで通信させるなり対策しなきゃ。(たぶん一般的なルーターでは、自分自身が開けたポートに自分自身から接続(ヘアピン)は出来なさそうなので)。とか。
- 2016-03-25 (Fri) 15:30:59 by takatsuka
- 技術系備忘録/C++/最適化小手先テクニック/VisualStudio2005,2008,2010コンテナ速度比較 (3084d)
- 2007-01-28 (Sun) 12:03:17 by takatsuka
BenchContainer.zip
- 2007-01-28 (Sun) 12:03:17 by takatsuka
- 技術系備忘録/C++/最適化小手先テクニック/STLとMFCのmap速度比較 (3084d)
- 2007-01-28 (Sun) 12:03:17 by takatsuka
BenchMap.zip
- 2007-01-28 (Sun) 12:03:17 by takatsuka
- FrontPage (6819d)
- 2006-01-09 (Mon) 21:10:35 by takatsuka
#lsx(会社案内,notitle)
#lsx(技術系備忘録,notitle)
- 2006-01-09 (Mon) 21:10:35 by takatsuka
- 技術系備忘録/C++/最適化小手先テクニック/シフト演算の乗除算に注意すべし (3084d)
- 2005-12-25 (Sun) 08:43:00 by takatsuka
通説ですが、"2のべき乗での乗除算は、シフト演算(ビットシフト)で処理したほうが早い"というのがあります。
CPUが高速化されたといっても、乗除算命令はそれなりに遅い処理で、比較するまでもなくシフト演算のほうが高速です。(List1)- List1
#prettify{{
int Test(int n)
{}return n << 3; // ビットシフトを使う
}}
8倍する掛け算なのですが、2進数の仕組みを利用し、ビットシフトすることで8倍という処理を実現しています。
これは確かに有効な手段であり、古くからあるテクニックで、まったく問題ないと思います。しかし、昨今のコンパイラは、わざわざシフト演算で記述をしなくても、シフト演算を使うコードを吐き出します。(VisualC++6で確認)
こうなると、シフト演算で記述しようと、掛け算で記述しようと、最適化の観点からはどっちでも良いということになります。・
・
・というわけで、以上でこのネタは終わりでもよいのですが、ちょっとツッコンだ個人的見解を述べたいと思います。
自分は、昨今の最適化コンパイラを使う場合、素直に掛け算で記述するほうが良いと思っています。
理由は、コードの見易さと間違いの避け易さからです。2のべき乗という単純な場合であれば、どちらの書き方であってもコードの見易さは変わらないと思いますが、それ以外の数で処理する場合、コードの見易さと間違いやすさは劇的に変わります。
15倍する例を見てみます。(List2)
- List2
#prettify{{
int Test(int n)
{}return ( n << 4 ) - n;
}}
これは、掛け算をビット演算に分解することで、掛け算命令を使わずに処理速度を稼ぐという、昔からある小手先テクニックです。16倍から1倍を引くことで15倍を実現しています。
この場合、最適化の面から言えば問題ないかもしれませんが、コードの見易さは大きく犠牲になってますし、15倍をビット演算に分解する過程でミスを犯すかもしれません。
さらに、最適化の面からも、実は正解ではなさそうです。
List2 をコンパイルした結果(アセンブラ)が List3 です。- List3
#prettify{{
int Test(int n)}mov eax, DWORD PTR n lea eax, DWORD PTR [eax+eax*2] // 3倍して lea eax, DWORD PTR [eax+eax*4] // 5倍する
}}
期待した結果とは明らかに違いますが、これがコンパイラの最適化の結果です。
つまり、見辛い上に最適ではないコードを記述してしまったことになります。
(というか、どっちの記述でも出力されるアセンブラは List3 になります。ビット演算で記述してもコンパイラ(VisualC++6)は最適化してくれました。全然違う書き方でも同じように解釈するとは優秀です。)以上の結果からわかるように、定数の乗除算程度は、素直にコンパイラ任せにするほうが、コードの見易さも犠牲にせず、しかも最適な結果になる訳です。
もちろん、コンパイラが優秀であればという条件が必要になるので、不安であれば念のため調べたほうが良いと思います。
/*
VisualC++の最適化性能がどんなもんか色々試しましたが、定数の乗除算についてはかなり詰められているようです。
とはいえ、CPU特性などを考慮すると、どういうアセンブラが最速なのかということは、一見しただけじゃ分かりません。
今回の例でも、コンパイラの出力が最速なのかどうかは確認も検証もしてません。しかし必要もないかなと思います。
*/なお、一つ注意点があります。List4をご覧下さい。
- List4
#prettify{{
int Test(int n)
{}return n / 8;
}}
一見何も問題なさそうです。コンパイラはシフト演算するアセンブラを出力してくれそうに思えます。
しかし、この場合は期待通りにはなりません。
それは型が int (符号付) だからです。単純にビットシフトすることは出来ないため、けっこう面倒なアセンブラが出力されます。どうすればよいかというと、符号付として処理する場合はどうしようもありません。
しかし、"マイナス値の引数はあり得ない"という前提があるのであれば、List5 のように書くと、ビット演算のアセンブラを出力させることが出来ます。- List5
#prettify{{
int Test(int n)
{}return (unsigned int)n / 8;
}}
unsigned int にキャストすることで、符号無しで処理しなさいとコンパイラに教えています。
もちろん、このキャストによるオーバーヘッドというのはありません。変数 n を符号無しとして扱えとコンパイラに教えているだけです。まとめとして。
昨今の最適化コンパイラのおかげで、定数の乗除算はどのように書いても最適化されたアセンブラが吐き出されるようですので、それを期待して素直な乗除算コードを書いたほうが良いと思います。
もちろん、最適化されないコンパイラや環境を使う場合、ビット演算でのコーディングは有効な手段だと思います。
List2 のような往年のテクニックも十分活かせると思いますので、知っておくことは損ではないと思います。なお、言うまでもないかもですが、本ネタは整数演算を前提に書いています。浮動小数点演算についてはまったく当てはまりませんのでご注意下さい。
- List1
- 2005-12-25 (Sun) 08:43:00 by takatsuka