C

12言語polyglotで足し算

CodeIQのコーディングパズルで、同一のソースコードで複数の言語処理系で動作するプログラム(いわゆるpolyglot)として、標準入力からの2つの数を加算して出力するものを書くというお題"hybrid A+B problem"が出ていました。12言語(Bash, Brainfuck, C, CL…

kobo touchをWebブラウザからリモート操作

一つ前の記事(kobo touchのスクリーンショットをHTTP経由で取得 - Okiraku Programming)に引き続き、Webブラウザからkoboをリモート操作できるようにしてみました。(正確には画面をタップできるようにしただけ)セットアップ方法は一つ前の記事と全く同様で…

kobo touchのスクリーンショットをHTTP経由で取得

kobo touchを改造して、Webブラウザ等からスクリーンキャプチャを撮れるようにしてみました。 内部的にはカラーで処理されているのが分かりますね。 やり方は以下の通り。0. あらかじめ、telnet/ftpなどを有効化してファイルを転送できるようにしておきます…

Pascal文字列

C

Pascal文字列をgccで使うメモ。Pascal文字列とは、 [文字列長] [A] [B] [C]というバイト列で表現される文字列。文字列長が1byteなので、長さの上限は255byte。型はunsigned char[]。普通のC文字列は [A] [B] [C] [\0]とNULL終端で表されますが、Pascal文字列…

1linerでstraceやltrace

だいぶ前に書いた、引数に指定したC言語のコードを実行するスクリプト、ce。 何となく作ってみた。Cでワンライナー(1liner)っぽいものが書けます。 これを拡張して、ltraceやstraceが簡単に実行できるようにしてみました。Binary Hacksのお伴にいかがでしょ…

LD_PRELOADでBrainf*ck

LD_PRELOADを使って、GNU/Linuxに含まれる(ほぼ)全てのコマンドで、Brainf*ckを実行可能にしてみます。 LD_PRELOADとは Linuxでは、同じ名前の関数(などのシンボル)を持つ複数のライブラリがダイナミックリンクされている場合、最初に見つかった方が使われる…

ローレベルな最適化をしてみる

C asm

d.y.d.を見て、O(n)くらい→必要ならO(1)で n*(n+1)/ 2 にするとかオーダーを意識しよう、という趣旨だということは百も承知で、ローレベルな最適化をして遊んでしまったのでメモ。 #include <stdio.h> #include <stdlib.h> int main( int argc, char* argv[] ) { if( argc >= 2 </stdlib.h></stdio.h>…

コマンドラインから直接Cを実行

C

何となく作ってみた。Cでワンライナー(1liner)っぽいものが書けます。 OSのテストなどでシステムコールを直接呼びたいときなんかは便利かと。perlでsysopenとかやるよりも直接的。 使用方法 ce [-m] [-I sysheader] [-i header] [C-code] [args ...] -m : in…

コンソール用ストップウォッチ

C

たまにはCプログラムでも。ただのストップウォッチには興味ありませんですか、そうですか。 % gcc -Os -o stopwatch stopwatch.c % stopwatch 5 / 0:00:03.9 ↑くるくる回る。 sleepコマンドの代わりにすると、待ち時間がわかって良いかも? でもそれだけ。 な…

Cの変数境界値

C

ARMのcharの型の話でふと思い出したのですが、こんな問題がありました。 int a,b,c; な変数があったとして、 if (a > b) 〜と c = a - b; if (c > 0) 〜の違いは何か? 別にintじゃなくてもshortでもcharでも構いませんが。 意識しておかないとバグの元にな…

ARMのgccのcharはunsigned

ARM gcc バッドノウハウ集 : char 型より: ARM gcc では,char 型で宣言した変数は unsinged char として扱われます. x86 などの他の gcc では signed char として扱われます. 普通はこちらの方ですね. あれだけ散々ARM向けにクロスコパイルしてたのに、…

Leopard(10.5)でTiger(10.4)向けユニバーサルバイナリをコンパイル

Mac C

Leopard(MacOS X 10.5)のgccを使ってコンパイルしたバイナリは、そのままではTiger(MacOS X 10.4)上では動かないようです。 ちょっと検索したところ、10.4uのSDKを指定すれば良いことが分かりました。 ついでに、ユニバーサルバイナリを作る方法も調べてみた…

ソースコードの短いbrainf*uckインタプリタ

C

人様の書いたものですが、下のが非常に短い。 http://esoteric.sange.fi/brainfuck/impl/interp/small.c わずか202バイト。まさにShort Codingな世界。そういえば、Short Conding買っちゃいました。職人芸な世界の本なのに、素人にもとても読み易いです。id:…

小さなBrainf*ckインタプリタに挑戦

Brainf*ck(何となく伏せ字)という言語があるそうな。たった8つの命令しかないのに、(理論上)あらゆるプログラムが書ける(というかチューリング完全な)言語です。詳しくは Wikipediaの記事などを。8つしか命令がない、引数もないので、コンパイラやイン…