programming
c++ の constexpr を使うと爆速なコードが生成できます例として,std::find_if を使ったコードが,どのような機械語(CPU命令)へとコンパイルされるか比較してみます お題:Look up table (LUT)の実装 いわゆるルックアップテーブル(look up table:LUT)と…
間接関数呼び出し(indirect function call ,indirect call)とは,変数で指定された関数(メソッド)を実行する方法ですたとえばc言語なら,ポインタ変数を使って void (*f)(void); f = foo; f(); // これが indirect function call となります 本エントリ…
vimでcsvファイルやtsvファイルを閲覧したり編集する方法です プラグインを使わない方法(急ぎの場合) 急ぎの場合,viの機能だけで凌ぐ方法です csvファイルの場合は区切りを tabに変換しておく(tsvにする) viでファイルを開く vi上で,以下のコマンドを…
pythonでテストケース用のロガーを自作したので公開しますテスト関数にデコレータを付けるだけで,成功/失敗を記録するロガーを作りました.最小実装なので,好みに合わせて拡張できます.ロガー本体のコードは末尾に掲載します.先に使い方から説明します…
C++20でやっとSFINAE(Substitution Failure Is Not An Error)が実用レベル(?)になったので,まとめておきますC++20版のSFINAEだけでなく,C++17版やC++11以前版のSFINAEも用意しました. 見比べると如何にC++11がクソで,C++20が素晴らしいかが一目で理…
c++の可変長テンプレートで2つの型リストKeysとValuesを使いたいとする その場合は リストの片方は std::tupleで一つの型にする 残りのリストは 可変長テンプレートにする とコーディングしやすい 例 template <typename KeyTuple, typename... Values_> struct Foo { using Keys = KeyTuple; using </typename>…
概要 PCの前で,重たい処理が終わるのをじっと待つのは時間の無駄です 重たい処理が終わると,自動で LINE に通知を送る方法を紹介します 処理完了!のLINE通知が届くまでは,PCなんて放置して時間を有効活用しましょう 手順 LINE公式が提供している通知連携…
C99導入された _Pragma(...) を使うとマクロ内でも pragma が書けます. _Pragma は C++11 で C++でも使えるようになっています. #include <stdio.h> #define PARALLEL_FOR _Pragma("omp parallel for") int main() { PARALLEL_FOR for (int i=0; i<10; ++i) { print</stdio.h>…
C言語またはC++で,文字列を小文字(lower case)に変換する方法です 移植性が高い方法 C99またはC++ならワンライナーで記述できます #include <ctype.h> char str[] = "ABCD"; for (char *p = str ; *p; ++p) *p = tolower(*p); ANSIのtolower関数を使っているので移</ctype.h>…
LinuxにCUDAをインストールする方法をまとめます.インストールだけでなく,動作確認として SDK,開発環境が動作すること 作成したプログラムが実行できること まで確認します インストール インストール手順 インストールはNVIDIAのページに書いてある手順…
bashなどの shell では "~/*" "$HOME/*" はホームディレクトリ以下のファイル名に展開されます.これをC/C++で実装する方法です 実装 wordexp(3) を使います #include <wordexp.h> #include <stdio.h> int main(int argc, char *argv[]) { wordexp_t exp; int flags = 0; int ret</stdio.h></wordexp.h>…
M-x describe-char を使うとカーソル下の文字コード(コードポイント・バイト列)を16進数で確認できます.表でまとめると C-u C-x = M-x describe-char 詳細表示 C-x = M-x what-cursor-position ミニバッファに簡易表示 です.滅多に使わないので,私は M-…
今時 perl なんて使う人がいるんでしょうか?そう思ってたら自分がperlを書く羽目になったのでEmacsのperl環境を更新しました.設定をまとめます lsp-mode lsp (Language server)を設定します.lsp-modeを使います. 手順1: cpan 経由で Perl::LanguageSer…
いろんな言語・コマンドラインで,日付の足し算・引き算をする方法をまとめます.例として,3月1日の1日前を計算を考えます.この計算は,うるう年があるので面倒です.たとえば 2021年3月1日の前日は 2月28日 2020年3月1日は前日は 2月29日 となりますが…
前回までのエントリの続きです make checkで実行されるテストケースの結果には,ラベルが付きます.わかりやすいのは,成功(PASS)と失敗(FAIL)です.他にもSKIPやERRORがあります.わかりにくいのはXPASSとXFAILです.以下,その意味を説明していきます…
前回のエントリの続きですmake check で 必要なプログラム・ライブラリのビルド テストケースの実行 を自動で行う方法をまとめます.autotoolsの使い方,make checkに関する基本的な情報は前回のエントリにまとめているので,本エントリは差分だけをまとめま…
emacs の php-mode を使います.phpのマニュアルを簡単かつ素早く参照できるようになります. マニュアルのダウンロード マニュアルを保存するディレクトリを作成します $ mkdir -p ~/doc/php-manual https://www.php.net/download-docs.php から"Many HTML …
pythonでローカルのネットワークインタフェースのIPアドレスを調べる方法 def get_local_ip_address(): from socket import socket, AF_INET, SOCK_DGRAM s = socket(AF_INET, SOCK_DGRAM) try: s.connect(('10.255.255.255', 1)) ipaddr = s.getsockname()[…
jupyter notebook からソースコードだけを抽出する方法です2行でまとめると nbconvertを使う方法が定番.でも動作が遅い 20倍以上高速な jq を使う方法がおすすめ となります.以下,詳細です. nbconvert を使う方法 input.ipynb からpythonコードを取り出…
久しぶりにSubversionのリポジトリをgitに移行したので手順をまとめておきます2020/11/30 追記.加筆したエントリ http://pyopyopyo.hatenablog.com/entry/2020/11/30/154224 を新しく用意しました. subversion側の状況を確認する SVNでcheckout済みの作業…
C++11を使うと綺麗に実装できます まず format() というテンプレート関数を作ります.C++11で新しく導入された,可変引数テンプレート,および std::snprintf() を使います. #include <string> #include <cstdio> #include <vector> template <typename ... Args> std::string format(const std::string</typename></vector></cstdio></string>…
boost の boost/progress.hpp を使えばOK #include <boost/progress.hpp> #include <boost/date_time/posix_time/posix_time.hpp> #include <boost/thread/thread.hpp> int main(int argc,char *argv[]) { const unsigned long expected_count=100; boost::progress_display show_progress( expected_count ); for(int i=0; i</boost/thread/thread.hpp></boost/date_time/posix_time/posix_time.hpp></boost/progress.hpp>
http://blog.tojiru.net/article/403698034.html の記事で、switch文の例として上げられてたコード '数字の0', '0' => …
svnのcommit logからGNU形式のChangelogを生成する svn2cl というツールがあります http://arthurdejong.org/svn2cl/インストールは $ sudo apt-get install subversion-tools 使い方はsubversionでcheckoutした作業ディレクトリで svn2clを起動するだけ $ s…
doxygen*1 と言えば、cやc++のソースコードからドキュメントを自動生成する便利なソフトウェアです。この doxygen、ここ1年ぐらいですごく改良されています。ちょうど昨日(2010/6/15)に最新版の 1.7.0 がリリースされたので、この機会に最新版に乗り換えて、…
円周率πを100万桁まで計算するプログラムを作ってみました。super pi もどきです。ソースコードと解説を載せます。ソースコードは80行程度の非常に短いものですが、このような簡単な実装でも最近のPCなら100万桁の円周率が一分も掛らず計算できます。 ポイン…
プログラミング時に注意すべき点の一つに,計算精度の問題があります.たとえばC/C++だと,doubleで計算しても有効桁数は15桁程度(10進数で)しかありません.その結果,以下のような状況で間違った計算結果が出てしまいます. 取り扱う数値が15桁を越える場…
実験やプログラムのデバッグをやっていると、データを解析したくなることがあります。たとえば、 数値の平均、分散の計算 相関係数の計算 ヒストグラムのプロット などなど。本エントリではこれらの処理を octave を使って行う方法についてまとめます。 octa…
gccの次期バージョン gcc 4.4.0 がそろそろリリースされそうです*1。そこで開発版の gcc 4.4.0 を試してみました。 ベンチマーク gcc 4.4.0 のchangelog*2によると、gcc 4.4.0 の目玉の一つは 最適化処理の強化になるようです。そこで、手元のコードを、以下…
bash と ruby を使って mp3のタグを一括変換した際のメモ。まずは、rubyのスクリプト #!/usr/bin/ruby require 'mp3info' require 'nkf' mp3 = Mp3Info.open(ARGV[0]) mp3.tag2.options[:encoding] = 0 title=ARGV[1] mp3.tag.title = NKF.nkf('--euc-input …