コアダンプの数だけ強くなれるよ

見習いエンジニアの備忘log

2017-02-01から1ヶ月間の記事一覧

Ncursesでスクリーン制御

Ncurses(*1)を使ってスクリーン制御してみる。(*1) CUIでスクリーン、キー入力、カーソルなどの制御機能を提供するライブラリのこと。 make menuconfig とか実行すると出てくるアレを実現できる。 ソースコード sample.c #include <curses.h> #include <stdlib.h> #define ESCAPE</stdlib.h></curses.h>…

マウスの座標を表示する

Javascriptでマウスの座標(左上端からのX,Y距離)を表示する。 ソースコード mouse.html <HTML> <HEAD> <TITLE> マウス座標 </TITLE> </HEAD> <BODY> マウス座標 <br> (X,Y) = <input type="text" style="width:50;" id="global_x">, <input type="text" style="width:50;" id="global_y"> <br> <SCRIPT type="text/javaSCRIPT"> (function (){ // スクロール位置取得 funct…</body></html>

Windows-Linux間をTCPで通信する

TCPを使ってWindowsとLinux間で通信してみる。 具体的にはWindows上にVirtualboxで仮想マシンを作成しHost-Only-Adapter経由で通信する。 構成 サーバ : Linux CentOS 6, X86_64(64bit) on Virtualbox クライアント : Windows7 (32bit) プログラム作成 クラ…

Qt5で始めるGUIプログラミング

Qt5を使ってGUIプログラミングに挑戦してみる。 まずはウィンドウを出すだけ。Linuxサーバでアプリケーションを作成&実行し、表示はWindowsで行うスタイル。 実行環境 ホスト側 Windows7 32bit Xming 6.9.0.31 Teraterm 4.9.2 サーバ側(実行側) CentOS 6, x…

シグナル受信をepollで監視

Linuxのsignalfdを使ってシグナルをepollで監視する。 signalfd.c #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <sys/epoll.h> #include <sys/signalfd.h> #include <errno.h> #define MAX_EVENTS 10 #define RET_OK (0) #define RET_NG (-1) #d…</errno.h></sys/signalfd.h></sys/epoll.h></sys/socket.h></unistd.h></string.h></signal.h></stdlib.h></stdio.h>

TAILQでリスト管理

TAILQを使ってリストを実現する。 詳細はMan page of QUEUE参照。 tail.c #include <stdio.h> #include <stdlib.h> #include <sys/queue.h> typedef struct memEntry { TAILQ_ENTRY(memEntry) entry; int32_t size; void* ptr; } memEntry_t; typedef struct { TAILQ_HEAD(tq_head, memEntry)</sys/queue.h></stdlib.h></stdio.h>…

ソケットプログラミング(UDP)

LinuxでUDPによる通信を行うサンプルプログラム。この手の例はGoogle先生で検索すれば沢山でてくるけど、システムコールのリターン値を見てなかったり、openに対応するcloseをしていない例が多いことに気付くと思う。もちろん動かすことだけ考えたら気にする…

Linuxでシグナル捕捉

使い方をすぐに忘れるsigactionでシグナルを捕捉する方法。 #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <signal.h> #include <errno.h> #include <string.h> #include <unistd.h> static volatile sig_atomic_t RecvSigno = 0; void signal_handler(int signo) { RecvSigno = signo; } int main(void) </unistd.h></string.h></errno.h></signal.h></stdint.h></stdlib.h></stdio.h>…

Teratermマクロでカウンタ表示

Teratermマクロで実行回数を表示する。 カウンタ表示マクロ(counter.ttl) ; グローバル変数 Count = 0 true = 1 false = 0 ; 以下、dateコマンドを無限に繰り返す while true call show_counter sendln "date" wait ']$' pause 1 endwhile ; カウンタの表示 …

PowerShellで某コンビニの入店音ぽい音

WindowsのPowerShellでbeep音を出す。 折角なのであのメロディーの再現にトライしてみた。 実行に必要な準備 PowerShellのインストール Windowsメニュー → アクセサリ → PowerShellを右クリック → 管理として起動 PowerShellスクリプトの実行セキュリティポ…

Tone.jsで音を鳴らしてみる

Tone.jsを使って簡単な演奏をしてみた。 今回は4分音符で単調なメロディーを繰り返すだけ。doremi.html <html> <head> <meta charset="UTF-8"> <title>サウンド</title> </head> <body> <button id="play">PLAY</button> <button id="stop">STOP</button> <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script> <…</body></html>

X11で始めるGUIプログラミング

いまどきX11でプログラム書くことがあるかは知らないけど、 凄い昔にLinuxでGUIのプログラミングにトライしたときのサンプルコードを見つけたので掲載。 現代はQtとか使うのかな。事前準備 $ sudo yum -y install libX11* x11.c #include <X11/Xlib.h> #include <X11/Xutil.h> #includ</x11/xutil.h></x11/xlib.h>…

URLを指定して開いたページをPDFで保存する

IEで特定のページを開く→ 仮想プリンタでPDF印刷という作業を繰り返したい人向け。[作業の流れ] 仮想プリンタ(BullzipやPDF reDirect等)をインストールして通常使うプリンタに設定する。 ExcelでURLのリストを作り、マクロにPDF化するプログラムを記載して実…

最低限あると嬉しいvimrc

大抵もっとごちゃごちゃ書いてあるけど、個人的に最低限あると嬉しいvimrcの設定だけをピックアップ。 $cat ~/.vimrc syntax on "色設定 colorscheme desert "前回編集終了位置からの再開 augroup vimrcExtend au BufReadPost * if line("'\"") > 1 && line(…

ソースコードと完全に同じ文字列を出力する

実用性はゼロですが、お遊び感覚でCとperlでやってみた。Perlの場合quine.pl $_=q{ q[ * * * * * * * * * * * * * * Hello Quine * * * * * * * * * * ]; print"\$_=q{$_};eval\n"};eval 実行結果 $ perl quine.pl $_=q{ q[ * * * * * * * * * * * * * * Hel…

C言語で簡易関数トレース

シンプルなprintf()デバッグをコンパイルスイッチでON/OFFできるように実装する。trace.c #include <stdio.h> #ifdef DEBUG_ENABLE #define ENTRANCE(fmt, ...) \ printf("%s:%u:===> IN %s(" fmt ")\n", __FILE__, __LINE__, __func__, ##__VA_ARGS__); #else #defin</stdio.h>…

コードの処理速度計測にgprofを試してみた

GNUのプロファイラ gprofでコードの処理速度計測を試してみた。 関数単位、LINE(行)単位での実行速度の計測ができる模様。今回は関数単位でお試し。使い方は"-pg"のオプションを付与してコンパイルしたバイナリを実行後にgprofコマンドをかませばOK。gprofte…

linuxでkbhit()

LinuxでWindowsのkbhit()相当を実装する。kbhit.h #ifndef _KBHIT_H_ #define _KBHIT_H_ #include <stdbool.h> #include <termios.h> #include <unistd.h> extern void KB_open(void); extern void KB_close(void); extern bool kbhit(void); extern char linux_getch(void); #endif /* _KBHI</unistd.h></termios.h></stdbool.h>…

HTML,JavaScriptで格子を描画

HTML5のCanvas機能でオセロの盤面ぽい格子を描く。canvas.html <html> <head> <meta charset="UTF-8"> </head> <body> <canvas id="canv" width="500" height="500"></canvas> <script> var ctx = document.getElementById("canv").getContext('2d'); // 描画内容を指定する // 背景を500×500の緑で描画 ctx.fillStyle = "rg…</body></html>

C言語でbuffer overrun

お呼びでない関数を実行する。overrun.c #include <stdio.h> #include <stdlib.h> void goast(void) { printf("Boo!\n"); } void dummy(void) { char a[1] = {0}; a[9] = &goast; } int main(void) { dummy(); return 0; } 実行例 $ gcc overrun.c overrun.c: In function 'dumm</stdlib.h></stdio.h>…

HTML,JavaScriptでブラウザに時刻表示

HTML, JavaScriptの最初の一歩と言えばコレ。[仕様] 左上に現在時刻を"HH:MM:SS"形式で表示。'ex) 19:02:34' index.html <html> <head> <meta charset="utf-8" /> </head> <body> <div id="disp" style="font-size:48px;text-align:left;"></div> <script> setInterval(showTime, 500); function showTime() { var tv = new Date(); $("d…</body></html>

gnuplotで正規分布を表示

gnuplotで正規分布のグラフをterminal上に表示する。環境はLinux(CentOS 6)[手順] perlで正規分布に従う乱数のリストをファイルに出力 gnuplotでterminalにグラフ出力 事前準備(perl, gnulpotのinstall) $ sudo yum -y install gnuplot $ sudo yum -y instal…

find, sedで一括置換

カレントディレクトリ配下で検索したファイルについて内容を指定条件に従い置換する。実行例 $ find . -name "<search conditions>"|xargs sed -e s/'<before>'/'<after>'/g -i</after></before></search>

errno一覧

Linuxでerrno一覧 #include <stdio.h> #include <string.h> #include <errno.h> int main(void) { for(int i = 0; i <= EHWPOISON; i++) { char str[64] = {0}; strerror_r(i, str, sizeof(str)); printf("%d:%s\n", i, str); } return 0; } 実行結果 0:Success 1:Operation not permitte</errno.h></string.h></stdio.h>…

perlで正規分布

乱数の出力はボックスミューラー法。 #!/usr/bin/perl $Pi = 3.14159265359; sub RandBoxMuller { my ($u, $sigma) = @_; my ($r1, $r2) = (rand(), rand()); while ($r1 == 0) { $r1 = rand(); } return ($sigma * sqrt(-2 * log($r1)) * sin(2 * $Pi * $r2…