programming

C言語やC++のマクロ内で pragma を使う方法

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++で文字列を小文字に変換する

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をインストールする方法(2024年版)

LinuxにCUDAをインストールする方法をまとめます.インストールだけでなく,動作確認として SDK,開発環境が動作すること 作成したプログラムが実行できること まで確認します インストール インストール手順 インストールはNVIDIAのページに書いてある手順…

C/C++でshellのように"~"や環境変数を展開する方法

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>…

Emacsでカーソル下の文字コード(コードポイント・バイト列)を表示する方法

M-x describe-char を使うとカーソル下の文字コード(コードポイント・バイト列)を16進数で確認できます.表でまとめると C-u C-x = M-x describe-char 詳細表示 C-x = M-x what-cursor-position ミニバッファに簡易表示 です.滅多に使わないので,私は M-…

Emacsのperl開発環境(2023年版)

今時 perl なんて使う人がいるんでしょうか?そう思ってたら自分がperlを書く羽目になったのでEmacsのperl環境を更新しました.設定をまとめます lsp-mode lsp (Language server)を設定します.lsp-modeを使います. 手順1: cpan 経由で Perl::LanguageSer…

3月1日の一日前を計算する方法

いろんな言語・コマンドラインで,日付の足し算・引き算をする方法をまとめます.例として,3月1日の1日前を計算を考えます.この計算は,うるう年があるので面倒です.たとえば 2021年3月1日の前日は 2月28日 2020年3月1日は前日は 2月29日 となりますが…

autotools で make check を実装する方法(その4):XPASSとXFAIL

前回までのエントリの続きです make checkで実行されるテストケースの結果には,ラベルが付きます.わかりやすいのは,成功(PASS)と失敗(FAIL)です.他にもSKIPやERRORがあります.わかりにくいのはXPASSとXFAILです.以下,その意味を説明していきます…

autotools で make check を実装する方法(その2)

前回のエントリの続きですmake check で 必要なプログラム・ライブラリのビルド テストケースの実行 を自動で行う方法をまとめます.autotoolsの使い方,make checkに関する基本的な情報は前回のエントリにまとめているので,本エントリは差分だけをまとめま…

ローカルにダウンロード済みのphpのマニュアルをemacsから参照する方法

emacs の php-mode を使います.phpのマニュアルを簡単かつ素早く参照できるようになります. マニュアルのダウンロード マニュアルを保存するディレクトリを作成します $ mkdir -p ~/doc/php-manual https://www.php.net/download-docs.php から"Many HTML …

pythonで自分のIPアドレスを調べる方法

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 からソースコードだけを抽出する方法

jupyter notebook からソースコードだけを抽出する方法です2行でまとめると nbconvertを使う方法が定番.でも動作が遅い 20倍以上高速な jq を使う方法がおすすめ となります.以下,詳細です. nbconvert を使う方法 input.ipynb からpythonコードを取り出…

svnからgitへの移行方法

久しぶりにSubversionのリポジトリをgitに移行したので手順をまとめておきます2020/11/30 追記.加筆したエントリ http://pyopyopyo.hatenablog.com/entry/2020/11/30/154224 を新しく用意しました. subversion側の状況を確認する SVNでcheckout済みの作業…

iostream や std::stringでprintfのような書式指定を行う方法 (C++11版)

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>…

c++でプログレス・バーを表示する方法

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>

switch文を使ってはいけない?

http://blog.tojiru.net/article/403698034.html の記事で、switch文の例として上げられてたコード '数字の0', '0' => …

svnのlogからchangelogを自動生成する方法

svnのcommit logからGNU形式のChangelogを生成する svn2cl というツールがあります http://arthurdejong.org/svn2cl/インストールは $ sudo apt-get install subversion-tools 使い方はsubversionでcheckoutした作業ディレクトリで svn2clを起動するだけ $ s…

最近のdoxygenはスゴイ

doxygen*1 と言えば、cやc++のソースコードからドキュメントを自動生成する便利なソフトウェアです。この doxygen、ここ1年ぐらいですごく改良されています。ちょうど昨日(2010/6/15)に最新版の 1.7.0 がリリースされたので、この機会に最新版に乗り換えて、…

super pi を作ろう

円周率πを100万桁まで計算するプログラムを作ってみました。super pi もどきです。ソースコードと解説を載せます。ソースコードは80行程度の非常に短いものですが、このような簡単な実装でも最近のPCなら100万桁の円周率が一分も掛らず計算できます。 ポイン…

任意精度計算ライブラリ(GMP)の使い方

プログラミング時に注意すべき点の一つに,計算精度の問題があります.たとえばC/C++だと,doubleで計算しても有効桁数は15桁程度(10進数で)しかありません.その結果,以下のような状況で間違った計算結果が出てしまいます. 取り扱う数値が15桁を越える場…

octaveでデータを解析する方法

実験やプログラムのデバッグをやっていると、データを解析したくなることがあります。たとえば、 数値の平均、分散の計算 相関係数の計算 ヒストグラムのプロット などなど。本エントリではこれらの処理を octave を使って行う方法についてまとめます。 octa…

gcc 4.4 を試してみた。

gccの次期バージョン gcc 4.4.0 がそろそろリリースされそうです*1。そこで開発版の gcc 4.4.0 を試してみました。 ベンチマーク gcc 4.4.0 のchangelog*2によると、gcc 4.4.0 の目玉の一つは 最適化処理の強化になるようです。そこで、手元のコードを、以下…

ruby で mp3 のタグを書き換える方法

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 …

Linux で ActionScript3

Linux上で、actionscript3を使って Adobe Flash のコンテンツを開発する方法をまとめてみました。この方法を使えば、無料のツールのみで flash のゲームなどが作成できます。 開発用ソフトウェアの準備 Adobe FLEX 3.0 SDK のインストール http://www.adobe.…

c++のデバッグをするならgdb-6.8を使いましょう。

2008年の3月にリリースされたgdb-6.8の目玉機能の一つに「C++サポートの強化」があります*1。この機能を使うと、STLやboostのようなテンプレートを使ったコードのデバッグがかなり楽になります。C++使いの方は、是非gdbを6.8にupgradeしましょう。具体的に、…

GCC 4.3.0 リリース

ついにリリースされた模様 ftp://gcc.gnu.org/pub/gcc/releases/gcc-4.3.0

gcc 4.3.0 rc1 登場

gcc 4.3.0 のリリース候補版 4.3.0-RC-20080222 が公開された.順調にいけば,春には正式リリースとなりそう.http://gcc.gnu.org/ml/gcc/2008-02/msg00511.html http://gcc.gnu.org/ml/gcc/2008-02/msg00389.html

linuxカーネルの実行保護機能

linuxカーネルの実行保護(ESP:Executable space protection)について調査したのでメモ.ESPとはOSのセキュリティを高めるための機能の一つ.ESPを使うとたとえば buffer overflow などによる exploit を未然に防ぐことができる.Linux での主な実装は vanill…

intel compiler v.s. gcc

intelコンパイラの最新版10.1が入手できたので,久しぶりにベンチマークを取ってみた.比較対象は intel compiler (ICC) version 10.1 20070913 gcc-4.2.2 gcc-4.3.0 (snapshots/20071020) これらのコンパイラで手元にあった数値計算のコードをビルドし,生…

配色テーブルの雛形

プログラムに埋め込む為の,色のテーブルの雛形です.ruby用 color_tbl = [ "A3A199", "5C788F", "F7D67D", "708270", "6E1273", "5CBACC", "00305C", "85360F", "00824A", "E8E3D9", "0057A6", "008A80", "BD3826", "613005", "997059", "F7D117", "F7A30A"…