<?xml version="1.0" encoding="UTF-8"?>

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  xmlns:admin="http://webns.net/mvcb/"
  xmlns:cc="http://web.resource.org/cc/"
  xmlns="http://purl.org/rss/1.0/">

<channel rdf:about="http://www.lancard.com/diary/">
<title>LAN板とソレ以外の日々</title>
<link>http://www.lancard.com/diary/</link>
<description></description>
<dc:language>ja</dc:language>
<dc:creator></dc:creator>
<dc:date>2011-01-03T17:15:22+09:00</dc:date>
<admin:generatorAgent rdf:resource="http://www.movabletype.org/?v=2.64" />


<items>
<rdf:Seq><rdf:li rdf:resource="http://www.lancard.com/archives/000539.html" />
<rdf:li rdf:resource="http://www.lancard.com/archives/000538.html" />
<rdf:li rdf:resource="http://www.lancard.com/archives/000537.html" />
<rdf:li rdf:resource="http://www.lancard.com/archives/000536.html" />
<rdf:li rdf:resource="http://www.lancard.com/archives/000535.html" />
<rdf:li rdf:resource="http://www.lancard.com/archives/000534.html" />
<rdf:li rdf:resource="http://www.lancard.com/archives/000533.html" />
<rdf:li rdf:resource="http://www.lancard.com/archives/000532.html" />
<rdf:li rdf:resource="http://www.lancard.com/archives/000531.html" />
<rdf:li rdf:resource="http://www.lancard.com/archives/000530.html" />
<rdf:li rdf:resource="http://www.lancard.com/archives/000529.html" />
<rdf:li rdf:resource="http://www.lancard.com/archives/000528.html" />
<rdf:li rdf:resource="http://www.lancard.com/archives/000527.html" />
<rdf:li rdf:resource="http://www.lancard.com/archives/000526.html" />
<rdf:li rdf:resource="http://www.lancard.com/archives/000525.html" />
</rdf:Seq>
</items>

</channel>

<item rdf:about="http://www.lancard.com/archives/000539.html">
<title>新年明けましておめでとうございます</title>
<link>http://www.lancard.com/archives/000539.html</link>
<description>去年の4月に書いて以来ですが、時にはこちらにも。 昨年1年は、YAPCに参加したりとか1年中perl三昧だったのですが今年くらいから幾らか成果物を世に出せるんじゃないかと思ってます。といいましてもCOBOLとかJCLとか汎用機ダウンサイジングに絡んだモノばっかりなのですが。 OpenCOBOLに関しましては： 1)PIC Nタイプの割とマトモなサポート 2)0/0の演算に対して0を返すパッチ 3)SPECIAL-NAMESにてユーザ定義した値の授受 4)RETURN-CODEとは独立したSYSTEM-STATUS値のサポート 5)COPY/REPLACEでの先頭一致、部分一致サポート 6)半角カナ変数名のサポート 7)Defaultのcurrency-signを￥に変更 8)OPEN済のFILE POINTERをSET文でPOINTERとして複製 等で、 9)DATE IS NATIVEサポート 10)I-O SECTIONでのAPPLY PRINTERサポート あたりは実装途中 JCL関連は、 某メーカの外部ユーティリティでよく使われるモノについては大体実装 印刷関連は、 既存帳票レイアウトおよびCOBOL側ソースに手を入れずにPDF生成。文字罫線を線画に自動変換するなど移植元のソースを極力書き換えないで印刷結果を再現するポリシーを貫いております。 と、まあ1年で良く実装したもんだとは思いますが、書いたコードよりも消した行の方が多かったりもするので実際には今残ってるコード行数の倍以上は書いていると思います。 OpenCOBOLについてはC言語ベッタリで、かなり中身が理解できてきていますので、 割と数日くらいで機能追加できる感じです。 今年一年もOpenCOBOLとのつきあいは続きそうですが、もう少し本家にも貢献できればということで、メッセージカタログの日本語への翻訳等できればと思っております。（あとbugfixとかね） 何はともあれ、本年も宜しくお願い申し上げます @minemaz...</description>
<dc:subject>Diary</dc:subject>
<dc:creator>minemaz</dc:creator>
<dc:date>2011-01-03T17:15:22+09:00</dc:date>
</item>
<item rdf:about="http://www.lancard.com/archives/000538.html">
<title>4/1ですね</title>
<link>http://www.lancard.com/archives/000538.html</link>
<description>4/1で世間的にはエイプリルフールですが、フツーに弊社Webページ更新しましたヽ(´ー｀)ノ 公式にもblogはあるのですが、ココもそれなりに長く続いておりましたので、 もう少しだけお付き合いください。 こちらは、公式にはソレはどうかというネタとか、展開して参ります ・OpenCOBOLにDBGp使ってデバッガ載せてみたよー　とかはあっちに載せます。 　（出来上がったら） ・メシネタとか猫は大体こっち...</description>
<dc:subject>OpenCOBOL</dc:subject>
<dc:creator>minemaz</dc:creator>
<dc:date>2010-04-01T13:01:29+09:00</dc:date>
</item>
<item rdf:about="http://www.lancard.com/archives/000537.html">
<title>OpenCOBOLを拡張</title>
<link>http://www.lancard.com/archives/000537.html</link>
<description> 03 FILLER PIC X(12) VALUES &apos;HELLO WORLD!&apos; 　　　　 CHARACTER TYPE KM-12P みたいなのを文法的に通るようにしてみたり。 コレで色々な移植の手間がかなり減ったヽ(´ー｀)ノ CHARACTER TYPE KM-12 部分が拡張ですね。 見覚えがあって、なおかつ同様に困ってるトコには配ったり出来るかも。...</description>
<dc:subject>OpenCOBOL</dc:subject>
<dc:creator>minemaz</dc:creator>
<dc:date>2010-03-25T16:41:26+09:00</dc:date>
</item>
<item rdf:about="http://www.lancard.com/archives/000536.html">
<title>自己書換コードとか</title>
<link>http://www.lancard.com/archives/000536.html</link>
<description><![CDATA[先々必要になるのがわかってるので、自己書換コードとか書いてみたりヽ(´ー｀)ノ あるサブルーチンを引数付きで呼び出すコードを関数へのポインタ1個だけで管理 OpenCOBOL中でサブルーチン呼び出してる箇所で色々とやるために必要だっ たり、同様に他言語からCで書いたコード呼び出すときに色々便利なので。 #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;limits.h&gt; #include &lt;sys/mman.h&gt; #include &lt;stdlib.h&gt; #include &lt;unistd.h&gt; #include &lt;errno.h&gt; void enable_code(void *addr) { long pagesize = sysconf(_SC_PAGESIZE); char* p = (void*)(((int) addr ) & ~(pagesize-1)); if(mprotect(p, pagesize, PROT_READ | PROT_WRITE |...]]></description>
<dc:subject>Program</dc:subject>
<dc:creator>minemaz</dc:creator>
<dc:date>2010-03-15T01:53:00+09:00</dc:date>
</item>
<item rdf:about="http://www.lancard.com/archives/000535.html">
<title>猫にゃん</title>
<link>http://www.lancard.com/archives/000535.html</link>
<description>猫にゃんヽ(´ー｀)ノ ご幼少の頃 最近 ゴロンゴロンする癖がついてしまった(;´Д`)...</description>
<dc:subject>猫</dc:subject>
<dc:creator>minemaz</dc:creator>
<dc:date>2010-01-21T13:20:18+09:00</dc:date>
</item>
<item rdf:about="http://www.lancard.com/archives/000534.html">
<title>OpenCOBOLで半角カナ変数名等</title>
<link>http://www.lancard.com/archives/000534.html</link>
<description>某所で扱ってるCOBOLソースに半角カナ変数名があって困ったのですが(;´Д`) とりあえず力業にてパーサ弄って半角カナ変数名については通すように改造ヽ(´ー｀)ノ C言語に変換されてもコメント欄にしか出てきませんから特に問題なかろうということですね。ちなみに半角カナのサブルーチン名/モジュール名はC言語の関数名に変換されるのでもう少し手の込んだコード修正が要ります。全角といいますか漢字については0x5cその他について考慮する必要があったりしてもう少し難しいですね。ShiftJISでソースを取り扱う限りは。 ＃ 時間さえあればすぐにでも実装出来るんですが 時間がが 某所で扱ってるCOBOLソースはCOPY句でREPLACING //HOGE// BY //FUGA//で、全てのHOGEをFUGAに置き換える拡張機能があるのですが、ついでにコレも実装してみたり。ちょっとソースが汚いですが動作はしている模様。 とりあえず以上近況でしたヽ(´ー｀)ノ...</description>
<dc:subject>OpenCOBOL</dc:subject>
<dc:creator>minemaz</dc:creator>
<dc:date>2009-11-23T03:24:36+09:00</dc:date>
</item>
<item rdf:about="http://www.lancard.com/archives/000533.html">
<title>バイナリにソースを同梱とか</title>
<link>http://www.lancard.com/archives/000533.html</link>
<description>バイナリにソースを同梱するトカ(;´Д`) コンパイル元のソースファイルどれだっけ？というか、コレ誰が何時作ったんだよとか多数の企業さんが客先に出入りしてるような環境だとわからなくなったりして、そもそもソースどこ行ったのよ？と非常に困ることがありました。 で、サンプル： objcopy --add-section=.cob_src=AICS0510.cob AICS0510.so AICS0510_new.so ヽ(´ー｀)ノ .cob_srcというセクションにAICS0510.cobってファイルを流し込んでます（ぉぃ readelf　-aの結果を外挿する前、後で比べると： --- AICS0510.so.txt 2009-10-15 17:48:48.000000000 +0900 +++ AICS0510_new.so.txt 2009-10-15 17:52:39.000000000 +0900 @@ -10,14 +10,14 @@ Version: 0x1 Entry point address: 0xfa0 Start of program headers: 52 (bytes into file) - Start...</description>
<dc:subject>Linux</dc:subject>
<dc:creator>minemaz</dc:creator>
<dc:date>2009-10-16T15:30:23+09:00</dc:date>
</item>
<item rdf:about="http://www.lancard.com/archives/000532.html">
<title>LD_PRELOADつかってOpenCOBOLで</title>
<link>http://www.lancard.com/archives/000532.html</link>
<description>LD_PRELOAD使ってOpenCOBOLでcob_file_openを差し替えとかヽ(´ー｀)ノ 　以前にOpenCOBOLとcob_perlとMySQLで等でOpenCOBOLのデータベースファイルアクセスをMySQLへの処理に差し替える等書いてたわけですが、実際に現場で動作しています。 　ただし、この方法だと、CALL文使ってファイル関連の処理を書き換えたりするので、シカケが理解出来ていないとなかなか難しいところもあるのかなと考えていました。また、書き換え後のコードはDB処理に特化していますから、元のファイル処理のコードを書いた人（というか、大抵の場合は他社の社員の人）がメンテナンスしにくくなります。これは困りますね(;´Д`) 　ということで、LD_PRELOADつかって、libcob内のcob_file_open他file関連の関数を差し替えてしまう拡張を実装中ですヽ(´ー｀)ノ。これならソース自体も元のままですし、気が向いたときファイル、またはDBを切り替え出来ますし、混在もファイルとDBでデータの突き合わせもやりやすくなります. イメージ図 ファイル/DBの切り替えですが、特殊なファイル名（DSNとか）が指定された場合に、DBを使用するという方向で実装しています。または、ファイル名をカタログを確認して、処理方法を決める等。いずれにしろ、cob_file_open他ファイル関連の関数の処理に横入り出来ればデバッグにはかなり便利ですよね。 これと、OpenCOBOL-1.1から導入されたデバッグ用の機構を併用して「どのプログラムのどの行でどのようなデータが読み/書きされたか？」をモニタ出来るような拡張も準備中です。 ヽ(´ー｀)ノ今月中に実装完了させたいところですね（出来れば）...</description>
<dc:subject>OpenCOBOL</dc:subject>
<dc:creator>minemaz</dc:creator>
<dc:date>2009-10-16T15:17:19+09:00</dc:date>
</item>
<item rdf:about="http://www.lancard.com/archives/000531.html">
<title>痛風(^Д^)でーたー</title>
<link>http://www.lancard.com/archives/000531.html</link>
<description>昨日から痛風状態でしたが、起きて色々やってたら益々ひどくなってまいりました。 ということで(;´Д`)水飲み中...</description>
<dc:subject>Diary</dc:subject>
<dc:creator>minemaz</dc:creator>
<dc:date>2009-09-09T05:05:24+09:00</dc:date>
</item>
<item rdf:about="http://www.lancard.com/archives/000530.html">
<title>mdbtoolsのiconv処理</title>
<link>http://www.lancard.com/archives/000530.html</link>
<description>作業中のPCにMS-Access入れるのが面倒だし正規ライセンスのCDがどこかに行ってしまったので(;´Д`)MDB Toolsを試してみることに・・・ 　したわけですが、普通に配布されている mdbtools-0.6pre1.tar.gz ではもう全然漢字とか通りませんでしたので、cvs版を取ってまいりました。やりかたは https://sourceforge.net/projects/mdbtools/developに書いているとおりです。ちなみにcvs login時のパスワードは無しなので、Enterだけ押しておきます。modulenameはmdbtoolsです。実行後にmdbtoolsというディレクトリが出来ていますので、cdで降りて、./autogen.shを実行後にmakeですねヽ(´ー｀)ノ。 　しかし、やっぱり漢字が通らないのでしばらくコードを眺めておりましたら、MDBICONVとかMDB_JET3_CHARSETとか環境変数を使ってくれることがわかりましたので、 export MDBICONV=WINDOWS-31J など設定して実行…やっぱり効きませんね(;´Д`) printfなど入れたりしながら動きを追ってみましたところ、HAVE_ICONVがdefineされている時に通るべきコードを通っていないことが判明(;´Д`)簡単なパッチ作って対応。とりあえずJET3というかMS-Access2000でフィールド名とかテーブル名に漢字使ってても大丈夫にはなりました。 diff -u -r mdbtools/src/libmdb/file.c mdbtools.fix/src/libmdb/file.c --- mdbtools/src/libmdb/file.c 2005-06-28 13:53:40.000000000 +0900 +++ mdbtools.fix/src/libmdb/file.c 2009-09-09 04:02:47.000000000 +0900 @@ -17,6 +17,7 @@ * Boston, MA 02111-1307, USA. */ +#include &quot;config.h&quot; #include...</description>
<dc:subject>Linux</dc:subject>
<dc:creator>minemaz</dc:creator>
<dc:date>2009-09-09T04:48:15+09:00</dc:date>
</item>
<item rdf:about="http://www.lancard.com/archives/000529.html">
<title>OpenCOBOLへの移植</title>
<link>http://www.lancard.com/archives/000529.html</link>
<description>某所で某メーカー系COBOLソースをOpenCOBOLへ移植してるのですが(´ー｀) 色々と困った点など。 とりあえず現在はOpenCOBOLには通信関連の機能（COMMUNICATION）は実装されてませんから、コレは何らか代替手段を使う必要（たとえばcob_perlを使用してperlを使った外部通信モジュールの実装など）がありまして、ソースを1対1対応で書き換えるのが難しいというのがあります。ただし、汎用機からLinux上のOpenCOBOLへ持って行くソースでは、そのような機能はほとんど使わないため今のところ問題とはなっていないのですが。同様に、印刷関連についてもメーカー系COBOLではかなり拡張されていますので、これは以前にも書いておりましたが、拡張エスケープシーケンスと仮想ラインプリンタの組み合わせで対応してたりします。 メーカー系COBOLのソースを3000本程度眺めまして、COMMUNICATION、他印刷関連のキーワードが含まれるソース1100本程を除外した残りの1900本のうち1100本についてはほとんど自動的に変換するスクリプトを作成しましたが、残りの800本程については色々と面倒な問題が残っています。 たとえば、項目名に漢字、半角カナが使用されている物もあります。これは処理系（OpenCOBOL）のパーサへのパッチで対応出来そうです。今のところプログラム名(PROGRAM-ID)に漢字、半角カナを使用した物は無いのでいくらか救われています。OpenCOBOLは仕組み上COBOLソースを一旦Cへ変換しgcc等コンパイラを使用してバイナリを生成します。このときPROGRAM-IDは関数名として展開されるため、ここが漢字、半角カナになっている場合は別途変換規則を作ってやる必要があります。項目名は内部的には全く別の連番が降られた変数名（または配列）へ変換されるため、この問題は発生しません。 その他、ファイル関連で汎用機で使えるRDB、VSAS等はOpenCOBOLでは実装されていませんので、vbISAMなど利用したソースへ置き換える必要があります。このときファイル名について汎用機ではバッチからパラメータとして引き渡すことが出来るように、COBOLの処理系が設計されていますが、OpenCOBOLの場合は環境変数なり何かから取り込む必要があります。幸いにしてそのような引き渡しを行っている箇所はファイル名に関する部分だけのようでしたので、これはコマンド起動直前に環境変数へパラメータをセットすることにして対応出来そうです。また、ファイル共有やポインタの引き継ぎに関してBASEDやEXTERNALなどのキーワードが使用されていますが、OpenCOBOLではこれらは実装されおらず、緩い制限にて使用可能のため単純にキーワードを取り去ることで流用可能でした。 COMP-1、COMP-2等の変数についてはメーカー系COBOLによって実装内容は様々ですが、某メーカーCOBOLではCOMP-1が2byteバイナリ整数、COMP-2が4byteバイナリ整数でしたのでそれぞれBINARY-SHORT、COMP-5（またはCOMP-X）にて置き換えてみました。とりあえずバイト長をあわせつつということですが、COMP-5、COMP-5についてx86_64上では8byteとして扱われるという噂（ためしてません）も在りましたので、別のもっと良い代替手段を使う必要があります。 その他FILEに関してLASTが実装されていない等在りますが、当方ではISAMではなくてMySQLへの置き換えを進めておりますので、ORDERを逆にしてやるだけで対応出来ています。 また元のCOBOLソースの定義体自体に問題があったり、長さが異なる項目へのMOVEなども既存ソースには散見されましたので、MOVE用のC言語コードを出力する段でチェックしてwarningとして出力するようにcobcを改造しつつ、安全なmemcpyを出力するようにしました。これでセグメンテーションフォルトも発生せず、問題となる箇所も見えるようになりましたので、元ソースの開発元へ問い合わせを行いながら作業を進めることが出来るようになりました。 その他にもたくさんたくさん在りますが、互換性も残しつつ元々のOpenCOBOLだけでは出来な胃部分については随時拡張していくことでかなりの工数を節約出来るようになっています。...</description>
<dc:subject>OpenCOBOL</dc:subject>
<dc:creator>minemaz</dc:creator>
<dc:date>2009-07-16T11:12:01+09:00</dc:date>
</item>
<item rdf:about="http://www.lancard.com/archives/000528.html">
<title>猫まっしぐら</title>
<link>http://www.lancard.com/archives/000528.html</link>
<description>ウチの猫にゃんがどの位(´ー`)猫草好きかというと (´ー`)このくらい好き...</description>
<dc:subject>猫</dc:subject>
<dc:creator>minemaz</dc:creator>
<dc:date>2009-05-19T10:48:28+09:00</dc:date>
</item>
<item rdf:about="http://www.lancard.com/archives/000527.html">
<title>opencobol-1.1/cobc/typeck.c</title>
<link>http://www.lancard.com/archives/000527.html</link>
<description>OpenCOBOLでcopyする項目の長さが異なるときの処理で(´ー｀)検討 3740 return cb_build_funcall_3 (&quot;memcpy&quot;, 3741 cb_build_cast_address (dst), 3742 cb_build_cast_address (src), 3743 cb_field_size(dst) &gt; cb_field_size(src) ? cb_build_cast_length (src) : cb_build_cast_length (dst)); 素のままだと単にmemcpyするコードが吐かれるんですが、srcとdstのうち短い方に合わせた方が良いんじゃないの？という修正例。ちなみにオリジナルのコードはdstの長さに合わせるようになってますが、src側で確保しているメモリ領域外も複製元としてreadされる（そしてSEGFAULT）場合があるので、おそらくこのコードの方が良いと考えてます。 試しに 3737 if ( cb_field_size(dst) != cb_field_size(src) ) { 3738 printf(&quot;memcpy(%s(%d),%s(%d),%d)\n&quot;, cb_field(dst)-&gt;name, cb_field_size(dst), cb_field(src)-&gt;name, cb_field_size(src), cb_field_size(dst)); 3739 }...</description>
<dc:subject>OpenCOBOL</dc:subject>
<dc:creator>minemaz</dc:creator>
<dc:date>2009-04-24T14:21:53+09:00</dc:date>
</item>
<item rdf:about="http://www.lancard.com/archives/000526.html">
<title>apache-php-OpenCOBOL-perlーMySQL貫通</title>
<link>http://www.lancard.com/archives/000526.html</link>
<description>apache-php-OpenCOBOL-perl-MySQL貫通ヽ(´ー｀)ノ とりあえずapache上のmod_php5から呼び出されたphpスクリプト中でphp_opencobol.so使ってOpenCOBOLで書いたプログラム（*.so形式）を呼び出してその中からcob_perl.so経由でperlスクリプト呼びだしてさらにDBI/DBD使ってMySQL呼ぶところまで完了。 ユーザー ｜ (http) ｜ apache ｜ (mod_php5） ｜ php ｜ (php_opencobol.so） ｜ OpenCOBOL ｜ (cob_perl.so) ｜ perl ｜ (DBI/DBD） ｜ MySQL シカケは大がかりなんですが、コードは短いです（たいしたことやってないので）。現場の方ではさらにapacheとユーザの間にCurlというリッチクライアントが入ります。つまりコレ(;´Д`)CurlとPHPとCOBOLとperl（＋SQL？）という多数の言語が入り交じってる環境です。ただし、COBOL部分に関してはレガシー資産のかなり部分を流用しますし、perl部分についてはこちらが用意したDB/ISAMの変換部分をほとんどそのまま利用して貰うことになってます。 モノ自体のコンセプトは昨年の10月頃には出来てて、基本部分も稼働してたんですが先ほどメモリリーク関連のバグが解決しましてヽ(´ー｀)ノapache配下のmod_php5から繰り返し呼び出してもSIGSEGVでオチ無くなりました。CGI版の場合は繰り返しは呼び出さないので顕在化してなかったんですが、module版のphp5では数回呼び出すとオチるという苦しい状況でした。解決。 cob_perlつかって印刷イメージをPDFで吐くとかもやってます。またinitだけじゃなくて環境を再初期化しないpinitとかも実装中ヽ(´ー｀)ノまだまだネタは尽きないようです。...</description>
<dc:subject>OpenCOBOL</dc:subject>
<dc:creator>minemaz</dc:creator>
<dc:date>2009-04-24T11:41:27+09:00</dc:date>
</item>
<item rdf:about="http://www.lancard.com/archives/000525.html">
<title>液晶</title>
<link>http://www.lancard.com/archives/000525.html</link>
<description>拡大してみたり(;´Д`) Dino Lite PLUSで撮影。...</description>
<dc:subject>Diary</dc:subject>
<dc:creator>minemaz</dc:creator>
<dc:date>2009-04-20T02:47:26+09:00</dc:date>
</item>


</rdf:RDF>
