構造型プログラミングを学ぶとき、処理の流れを図示して整理するために、フローチャートなどといったダイアグラムをよく書きます。
このときに用いる作図ツールとしては dia が有名で、フローチャートやUMLの一部のダイアグラムは、これがあれば何とか作図出来るのですが、PAD (Problem Analysis Diagram, プログラム構造表記法) については、どうもdiaのテンプレートが見当たりません。SDL (Specification and Description Language) はあるのですが、PADは国産だし、しょうがないかな、と思っていました。
ところが、PadTools なるPAD作図ソフトウェアがあるじゃないですか。しかもJavaで。
PadTools 1.2
http://naou.cool-ex.com/padtools/
このツールの素晴らしいところは、PAD図を書くために、SPD (Simple PAD Description) 文というものを書かせるんです。 これ、疑似コードにとても近い存在なんですよね。ということは、このツールでPADが書ける=処理の流れが書ける=プログラミングも出来る、はず、という素晴らしい連携が期待出来るわけです。
但し構造化プログラミング向けなので、オブジェクト指向プログラミングの場合は素直にUMLを使うことを考えた方が良いでしょう。関数型プログラミングの場合は…もしかして図から入ることがない、のかな?
というわけで PadTools おすすめです。Package化したい。
2017年11月11日土曜日
2017年10月1日日曜日
BSD date で日付文字列を書き換える
BSD date コマンドでは、オプション -j を付け、-f と + のオプションを使うことで、OSの日付を設定することなく、日付文字列を書き換えることが出来ますね。(LANG=C が前提です。)
で、FreeBSD snapshot manager を使っていると、zfs のスナップショットを世代番号で作ってくれるのですが、何時のものなのかが、ちょっとわかりにくい。実際は、こう書けば日付が出てくるわけです。
ってことは、
なんて具合に日付文字列を取り出せるわけです。FreeBSD snapshot manager と zfs send で差分バックアップしたい、でもファイル名をどうしたらいいか分からない、と悩んでいたんですが、これで何とかなりそう。
ちなみにLANGがC以外だと…
まあ、こんなもんです。
% date Sun Oct 1 00:08:38 JST 2017 % date -j -f "%a %b %d %T %Z %Y" "`date`" "+%y%m%d%H" 17100100
で、FreeBSD snapshot manager を使っていると、zfs のスナップショットを世代番号で作ってくれるのですが、何時のものなのかが、ちょっとわかりにくい。実際は、こう書けば日付が出てくるわけです。
% zfs get creation zfspool/home@daily.0 NAME PROPERTY VALUE SOURCE zfspool/home@daily.0 creation Sun Oct 1 0:00 2017 - % zfs get -H -o value creation zfspool/home@daily.0 Sun Oct 1 0:00 2017 % zfs get -H -o value creation zfspool/home@daily.1 Sat Sep 30 0:00 2017
ってことは、
% date -j -f "%a %b %d %T %Y" "`zfs get -H -o value creation zfspool/home@daily.0`"+%y%m%d%H" 17100100 % date -j -f "%a %b %d %T %Y" "`zfs get -H -o value creation zfspool/home@daily.1`"+%y%m%d%H" 17093000
なんて具合に日付文字列を取り出せるわけです。FreeBSD snapshot manager と zfs send で差分バックアップしたい、でもファイル名をどうしたらいいか分からない、と悩んでいたんですが、これで何とかなりそう。
ちなみにLANGがC以外だと…
% setenv LANG ja_JP.UTF-8 % date 2017年 10月 1日 日曜日 00時23分52秒 JST % date -j -f "%a %b %d %T %Z %Y" "`date`" "+%y%m%d%H" Failed conversion of ``2017年 10月 1日 日曜日 00時23分54秒 JST'' using format ``%a %b %d %T %Z %Y'' date: illegal time format usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt date | [[[[[cc]yy]mm]dd]HH]MM[.ss]] [+format] % setenv LANG C % date Sun Oct 1 00:24:06 JST 2017 % date -j -f "%a %b %d %T %Z %Y" "`date`" "+%y%m%d%H" 17100100
まあ、こんなもんです。
2017年9月30日土曜日
fopen_s() を fopen() で書き直す?
逆はあるんですけどね。
この例だと fopen() を fopen_s() に書き換えてますが、逆はこんな感じでしょうか?
fopen_sとかsscanf_sとかの"_s"関数書き換え例まとめ
http://blog.livedoor.jp/mrcom511/archives/51270788.html
この例だと fopen() を fopen_s() に書き換えてますが、逆はこんな感じでしょうか?
#include<stdio.h> #include<errno.h> /* to rewrite fopen_s() as fopen() */ #include<string.h> /* strerror() */ int main() { int ferrno = 0; FILE *fp = NULL; /* ferrno=fopen_s(&fp,\"testfile.txt\",\"r\"); */ errno = 0; fp = fopen(\"testfile.txt\", \"r\"); ferrno = errno; /* print some variables */ printf(\"ferrno: %d fp: %p strerror: %s \\n\", ferrno, fp, strerror(ferrno)); if (fp != NULL) { fclose(fp); } return 1; }
ferrno なんて使わないし、って場合は errno.h を読まずに捨ててしまえばいいだけ、かな?
2017年6月5日月曜日
e2psのpatchを作ってみた
日本語を含むテキストファイルを PostScript形式に変換するプログラムの一つに、 e2ps があります。LinuxのディストリビューションやFreeBSDなどにもパッケージがあったりしますね。
オリジナル: http://wtpage.info/wtseries/unix.html#e2ps
Debian: https://packages.debian.org/ja/stretch/e2ps
FreeBSD: http://www.freshports.org/japanese/e2ps/
で、色々あってこれを使ってみたのですが、どうにも動きがおかしい。
というわけで patch を作ってみたわけです。
https://gist.github.com/taraijpn/ea10ff9e908befafab7cff719f26dd20
どれくらい需要があるのか分かりませんが、とりあえず公開しておきます。
1)出力ページ枚数のカウントがおかしい。
2ページ以上になっても「One page was outputed」になる。1ページのときは「 1 pages were outputed.」って何故に複数形??
4)オリジナルのソースコードで何故かコンパイルが通らない(うちでだけ?)
ps-font.c に、gsFonts という静的配列の宣言があるのですが、さすがにこれはコンパイル通らないんじゃあ……でもFreeBSD portsmonでは何故かビルド出来てる……何故だ……
http://portsmon.freebsd.org/portoverview.py?category=japanese&portname=e2ps
※FreeBSDの ports では、ps-font.c の内容を修正するための sed コマンドが Makefile 側に書かれていました。どおりで files/ の中を見ても分からないわけだよ!
buildしたログで気づきました orz
続き:https://taraijpn.blogspot.com/2019/05/e2ps.html
オリジナル: http://wtpage.info/wtseries/unix.html#e2ps
Debian: https://packages.debian.org/ja/stretch/e2ps
FreeBSD: http://www.freshports.org/japanese/e2ps/
で、色々あってこれを使ってみたのですが、どうにも動きがおかしい。
というわけで patch を作ってみたわけです。
https://gist.github.com/taraijpn/ea10ff9e908befafab7cff719f26dd20
どれくらい需要があるのか分かりませんが、とりあえず公開しておきます。
何がおかしかったかは以下の通り。
1)出力ページ枚数のカウントがおかしい。
2ページ以上になっても「One page was outputed」になる。1ページのときは「 1 pages were outputed.」って何故に複数形??
2)複数ページを出力するPostScriptなのに、何故かEPSだと言い張る。
おかげで psset に出来上がったファイルを渡すと、(pssetが内部で呼んでいる) fixpsから「fixps: DSC broken. gs will be asked a full rewrite of the file.」と言われ、正しいPostScriptと認識されず、きちんと動かない。
3)内部で持っている用紙のサイズ(ポイント数)がおかしい。
なんでこんな数値にしたんだろう。複数面付けするときの計算の事情?
4)オリジナルのソースコードで何故かコンパイルが通らない(うちでだけ?)
http://portsmon.freebsd.org/portoverview.py?category=japanese&portname=e2ps
※FreeBSDの ports では、ps-font.c の内容を修正するための sed コマンドが Makefile 側に書かれていました。どおりで files/ の中を見ても分からないわけだよ!
buildしたログで気づきました orz
===> Patching for ja-e2ps-4.34 ===> Applying FreeBSD patches for ja-e2ps-4.34 /usr/bin/sed -i.bak -e '/Times-Roman$/,/^Gothic-Medium.Katakana$/{s,$,\\,;}' /usr/ports/japanese/e2ps/work/e2ps-4.34/ps-font.c
続き:https://taraijpn.blogspot.com/2019/05/e2ps.html
登録:
投稿 (Atom)