プログラミング

ppbinについての覚え書き

昨年末にppbinというツールを作ったので、メモを残しておく。GitHub - eel3/ppbin: Pretty-printer for binary file ppbinとは何か? ppbinは、指定した形式でバイナリファイルの16進数ダンプを吐き出すコマンドライン・アプリだ。 $ # test.binは44 byteの…

シェルスクリプトに向いている用途

シェルスクリプトに向いている用途は、大抵の場合、以下の要件を1つ以上満たしているものだ。 作りたいものが単機能で、あまり複雑ではない。 非対話的な処理である。 既存のコマンドの羅列/組み合わせで容易に解決できる内容である。 他の言語でいう「メソ…

PythonのwaveモジュールでのPCMデータ読み出しを高速化する

RIFF WAVEファイルからリニアPCMのデータを取り出して、フレーム毎に(正確には各フレーム内のサンプル毎に)加工して出力するツールを作った。諸事情によりPython 2.xの標準ライブラリのwaveモジュールを使ったのだが、Wave_readオブジェクトの扱い方によっ…

正規表現を使ったテキストフィルタとC/C++による自作ツールではどちらが高速か?

改行区切りのテキストレコードを舐めて、特定の形式に当てはまるものを除外するツールが欲しくなった。形式の判定には正規表現が使えそうだった。Unix環境で動かすなら、既存のテキストフィルタを使えばよい。だが残念なことに動作環境はWindowsで、しかもス…

あえてbc(1)した話

たぶんまだまだ初級な小ネタ。こんな感じに16進数(プレフィックスなし)のデータが並んでいるテキストファイルtest.datがあって: 00000000 00000001 0000000F 00000010 7FFFFFFF 80000000 FFFFFFFE FFFFFFFFこれを元データ(32bit符号なし整数)としてちょ…

cat(1)しない話

初級小ネタ。例えばgrep(1)する際に、こんな感じのサンプルコードが示されることがある。 cat file.txt | grep foo しかし個人的には次のほうが好みだ。 grep foo file.txt せっかく引数でファイルを指定できるのだから、そちらを使いたい気分になるのだ。tr…

grep(1)しない話

もう1つ、初級小ネタ。DebianやUbuntuで、あるパッケージがインストールされているか否か調べるのに、今までdpkg(1)とgrep(1)を組み合わせていた。 dpkg -l | grep acpi ところで先日、dpkg(1)のmanを見たところ: -l, --list package-name-pattern... 「pac…

プログラミング言語の剰余演算子に惑う

いくつかのプログラミング言語を見ていると、算術演算子のうち四則演算の記号は、大抵の言語で同じだ。 演算 記号 加算 + 減算 - 乗算 * 除算 / 上記の記号は、COBOLのCOMPUTE文でも通用する。その一方、剰余演算子あたりから若干怪しくなってくる。私の普段…

Swift 2.2.1から3.0に更新したらSegmentation faultが多発するようになった話

Ubuntu 14.04.5にAppleのSwiftを入れて遊ぼうとしていたのだが、Swift 2.2.1から3.0に差し掛かえたらSegmentation faultが多発するようになった。 $ swift Welcome to Swift version 3.0 (swift-3.0-RELEASE). Type :help for assistance. 1> 1 + 3 Segmenta…

プログラマと予習 事前学習はどの程度必要か?

ちょっと前の記事で、もう下火になっているから、言及してもいいか。 仕事が出来る人の勉強法 優秀なプログラマに学ぶ、効率のいい勉強の仕方 - ケーススタディの人生 少なくとも、上記の記事では「プログラミング」を念頭に議論しているようだ。なのでこち…

プログラミングでのコピペの作法

プログラミングでコピペというと、次の2通りの解釈が成立するが: ソースコード中で、似たような処理を1つにまとめずに、コピペして量産していくこと。 やりたいことに近いサンプルコードやスニペットをネットで探して、コピペして利用すること。 ――この記事…

今までどのくらいプログラミング言語を触ってきたか(3秒で挫折したものものも含む) Ver.8

2016/06/27現在のステータス。id:eel3:20150614:1434290001 から1年経て、こうなっている。なおCSS、HTML、XMLは除外*1。 よく使っている AWK (Gawk) 単純なテキストレコードの処理にはAWKで十分。自作ツールをAWKやGawk単体で実装することは皆無なものの、…

ブライアン・カーニハンは写経したか?

ちょっと前の記事だけと、少し気になったので書いておく。 誰もが知ってるけど敢えて言わない確実に身につくプログラミング学習法 - WirelessWire News(ワイヤレスワイヤーニュース) 要約するのが面倒なので、内容については上記記事を参照してもらうとし…

誰も正しいコメントの書き方を知らない

「コメントの書き方」にもある種の理論・思想があり、理論・思想にもとづく「型」があると思っているのだが、「『コメントの書き方』についてそこまで突っ込んだ理解をしている人は驚くほど少ない」と考えておいたほうが無難だろう。Code Kataは既出だが、Co…

続:test(1)でシンボリックリンクか否か判定する時のオプションは-hなのか-Lなのか?

id:eel3:20121117:1353150478 の続き、だろうか? あれから3年ちょっと経つが、test(1)でファイルがシンボリックリンクか否か判定する時に-hと-Lのどちらを使うべきか、未だに迷い続けている。「どちらでもよい」と言われるとかえって迷ってしまう、難儀な性…

プログラミング比較文化論試論 進化の方向性にみるC++とObjective-Cの違い

プログラミングの世界では、サピア=ウォーフの仮説がささやかれるほど、プログラミング言語の違いがプログラミングのスタイルや設計に影響を及ぼす現象が見られる。本稿ではC++とObjective-Cを取り上げ、言語の進化の方向性がプログラムの実装に及ぼした影…

親父の副音声 バージョン管理システムへのコミット編

(以下、id:eel3:20160105:1451997199 の副音声を大音量でお楽しみください) (論理的に一塊である)小さな作業ごとにコミットしろ コミットログを残せ コメントで残すな、コミットログで残せ コメントアウトして残すな、履歴間の差分を残せ 不要なファイル…

親父の小言 バージョン管理システムへのコミット編

(以下、バージョン管理システムをVCSと書いている。副音声はこちら) (論理的に一塊である)小さな作業ごとにコミットしろ コミットログを残せ コメントで残すな、コミットログで残せ コメントアウトして残すな、履歴間の差分を残せ 不要なファイルは消せ …

俺のhcaslがこんなに遅いわけがない

id:eel3:20151102:1446476928 のhcasl、TDM-GCC 4.8.1でビルドしたC言語/C++版バイナリを手元のCygwin(64bit)で実行すると激遅なの。 $ make -f Makefile_mingw g++ -finput-charset=cp932 -Wall -std=c++11 -pedantic hcasl.cpp -o hcasl $ time perl -e…

実際のところ地方在住のプログラマ的に大学図書館はどの程度役に立つか?

資料力は書店・ネット以上!理系ビジネスマンにオススメしたい図書館6選 | リクナビNEXTジャーナル この手の記事を目にする度に非常に悲しくなることに、私は地方在住者なのである。そもそも、関東圏でも関西圏でもなく、名古屋とか仙台とか松江でもない。県…

C Puzzles(C言語パズル集)の個人的解答

C Puzzlesの日本語訳があったので、解いてみた。 原文 C PUZZLES, Some interesting C problems 日本語訳 C言語パズル集:Cにまつわる興味深い問題あれこれ | POSTD 夏休み中に解いたので、一応「夏休みの課題」になるのかな。とりあえず、所詮は自称Cプログ…

Visual Studio付属のC#/Visual Basicの言語仕様書のバージョン一覧

Visual Studio(のExpress以外のエディション)にC#やVisual Basicの言語仕様書が付いているのはわりと知られた話だと思うのだが、具体的にどのバージョンにどんなものが付いているのか分からなかったので、現物をみて調べてみた。以下、Visual Studio Profe…

設定ファイルとして使うためのLua組み込みあれこれ

Cで書いたアプリケーションにLuaを組み込む機会があったので、メモを残しておく。具体的な組み込み方(LuaのC APIの呼び方など)はネットに出回っているし、本も何冊か出版されているので、それ以外について書き記そうと思う。タイトル名の通り、設定ファイ…

rand(3)の使い方(C/C++での擬似乱数取得方法)

どうも一部で微妙に盛り上がったらしい。 xcode - c言語での乱数生成 - スタック・オーバーフロー Mac、iOSで、rand()関数の疑似乱数アルゴリズムがヘン! - Qiita なので書いておく。 rand(3)の特徴 CやC++の標準ライブラリにはrand(3)という擬似乱数を生成…

続 C++、D言語、Go言語、Rustのハローワールドのバイナリサイズ

id:eel3:20150622:1434981139 の続きというかやり直しというか。使用したソースファイルの内容や、ビルド時のコマンドなどについては、前回のエントリを参照してほしい。 前回の落穂拾い (1):Go言語で動的リンク Go言語は、本家プロジェクトのコンパイラで…

C++、D言語、Go言語、Rustのハローワールドのバイナリサイズ

タイトルに若干偽りあり。C言語・Common Lisp(ECLとMKCL)・OCamlも含んでいる。一応、組み込みっぽい業界にいる人として、C言語の次のシステム・プログラミング向けの言語は興味の対象だ。もちろん、今すぐ急に別の言語に移行するような事態は、可能性とし…

今までどのくらいプログラミング言語を触ってきたか(3秒で挫折したものものも含む) Ver.7

2015/06/14現在のステータス。id:eel3:20140614:1402681256 から1年経て、こうなっている。なおCSS、HTML、XMLは除外*1。 よく使っている AWK (Gawk) 単純なテキストレコードの処理にはAWKで十分。自作ツールをAWKやGawk単体で実装することは皆無なものの、…

不死身のqDebug

Qtに用意されているデバッグ表示用のマクロ qDebug。こいつはデフォルトではリリースビルドでもデバッグ表示の処理を行う。無効化したいなら、別途 QT_NO_DEBUG_OUTPUT を定義する必要がある。ここまでは、まあ、よくある話だろう。今回つまづいたのは: qDe…

ごく普通なGNU Make活用例

2012年半ばぐらいから拡張機能ありでGNU Makeを使用するようになったが、makeの基本的なところを通り越したあたりの話題――実践の場にて各機能をどんな風に使用するかについての情報がなかなか見つからない。特に拡張機能の話題が少ない。仕方なくNetBSD Make…

業務システムをハックする従業員たち

業務システムは大抵従業員にハックされる。ここでの「ハック」は、いわゆる「ライフハック」的な意味でのハックだ。SIなどで業務システムを設計・開発している人や、情報システム部などで自社の業務システムに携わっている人からすれば、ごくごく当たり前の…