昔の最近の出来事(2018.06)

2018/06/30

AM中に起床。

D言語からlibcurlを経由してsftpアクセスする件。 ひとまずファイルの取得に成功。原因はphobosのstd/net/curl.d へのパッチが不足していました。結局、必要な対処は


という感じ。過去に gdcでビルドした時に上手く動いていた理由は よく判らなかったり。dllに対処が必要な記憶は全く無いのですが。 ただ、読み込んだファイルの utf8文字が化けているので、 まだオールクリアという感じではありません。

libcurlでutf8文字が化ける件。D言語のコードでcurlを使って 受信した所で既に化けているような。なんでだ?
curl.dを眺めてみたら、なにやらencodingを指定するコードがあり、 デフォルトとして「ISO-8859-1」が指定されてました。これを変更 すれば良いのか?と思い「UTF-8」を指定したところ、UTF8文字を 含むテキストファイルを意図通りに表示する事ができました。 でもこれ、テキストファイルの場合は良いのですが、バイナリファイルを 受信する場合は困る気がするように思ったり。

2018/06/29

遅めに帰着。

D言語からlibcurlを経由してsftpアクセスする件。 結局cmakeを実行し直してlibcurl.dllを生成してみたり。でもsftpは 使えず。一応、一緒にビルドしたcurlではsftpが使えるので、イケ そうな感じに思うのですが...?(curlが自前のD言語で書かれた アプリになっただけでsftp自体はlibcurl.dllにスタティックリンク されたlibssh2で動くと思われるから)。

2018/06/28

遅めに帰着。

D言語からlibcurlを経由してsftpアクセスする件。 libcurlをlibssh2込みでビルドしたdllを生成すれば良い んじゃね?と思い、libcurlの構成の種類をスタティックライブラリ からダイナミックライブラリに変更してビルドすると何故か いくつかシンボルが見つからなくてリンクでエラー。 構成の種類をスタティックライブラリに戻すとビルド成功。 何故スタティックライブラリだとイケてダイナミックライブラリ だとイケないのか謎。

そういやGoogle検索で、ヒット数が多いと「すべて(の言語)」以外に 「日本語のページを検索」が出てくる場合がありますが、 ヒット数が少ないと「すべて」しか選択できない場合が あります。少なくても日本語のページだけをフィルタリング したいのだという要求に応えられるようになっていないのは 今更ですが何故だろうと思ったりも。

2018/06/27

遅めに帰着。

あまりの眠さに急速停止。

2018/06/26

遅めに帰着。

「ど根性ガエルの娘(3),(4)」。1,2巻を読んだのは 2017年2月だったのですが、 3巻が気になりながらも、その後見つける事ができずじまいで そのうちすっかり忘れていました。幸いにして3,4巻をまとめて入手 でき「衝撃の第15話」を読んだ訳ですが、3,4巻は全体的に衝撃が 強すぎてお腹いっぱいになってしまいました。 現在刊行されているのは白泉社版ですが、4巻では KADOKAWA版が 売れていなかった話だとか、連載を引き上げた話にも触れられています。
そういえば1,2巻が刊行されてすぐくらいだったと思いますが メイプル超合金のカズレーザーがその時の話題の本を読んで感想を 述べるっ て番組をテレビ朝日で放送していました。 「ど根性ガエルの娘」もその番組の中で紹介されてたのですが、 娘の方も闇が深い的な事をチラっと言ってたと記憶しています。 それについては TANEもストーリーが少し逸れているような?と 感じた所だったのですが、4巻に収録されている 19話を読んだ後、もう一度1,2巻を読み返してみると、そう感じた のは2巻最後の12話で、KADOKAWA版を引き上げる事を決めたきっかけ とも連動してたという事なのかもと思いました。今にして思うと、 3巻の収録内容が見えていての、1,2巻刊行だったのでしょう。
5巻では もうひと悶着ありそうですが、続きはまたしばらく待つ必要が ありそうです。

2018/06/25

遅めに帰着。

「ハイスコアガール(9)」。3カ月ほど前に8巻を買ったと思ったのですが、 来月アニメ放送が始まるのに合わせてるのか?と思ったりも。 でも、次巻で完結な模様。どうなるか楽しみです。

D言語からlibcurlを経由してsftpアクセスする件。 gdcでビルドした場合でもdllをロードしていたり。あれぇ?そうなんだっけ?

2018/06/24

AM中に起床。

ちょろりお出かけ。

3週間ほど前にキーボードを買ったついでに本屋に寄った時、 新刊棚に「コロコロ創刊伝説」という、のむらしんぼ氏の単行本が出ていたので 何気に買ってみました。この時、実は3巻目だというのに全く気付いていなかったの ですが、ひとまず読んでみて (TANE的に)あまりのヤバさに1,2巻も読まねばと いう感じで、近所の本屋を探してみるも2巻しか捕獲できず、今日やっと1巻を 入手したという次第です。
因みに、2010年2月2日にTV東京の 「ありえへん世界」にのむらしんぼ氏が出ていたのを観たのですが (確か番組放送時点で既に離婚して一人暮らしだったと思います)、 「コロコロ創刊伝説」の連載は2014年10月~ のようなので、 創刊伝説きっかけのTV出演では無さそうです(TV出演きっかけの創刊伝説 の可能性は判りませんけれども)。

TANEがコロコロを初めて読んだのは「ドラえもん のび太の恐竜」が 連載されていた時で、 Wikipedia から思い出すに、1980年の1月号か、2月号だと思います (ドラえもんがタイムマシンを直せなくてヤバい感じになってる コマが最後で次号に続くって所でした)。それより前からドラえもんが 好きだったので、コロコロはドラえもんから入った口なのですが、 のむらしんぼ氏の「とどろけ!一番」の第一話は1980年2月号から なので、丁度最初の頃から読んでいた感じという事になります。 創刊伝説を読むまですっかり忘れていたのですが、一番が六年生を 二回やる話とか、ボクシング漫画になった話は確かにあったのを 覚えていて、今回創刊伝説を読んであのようなストーリーになったのには、 えらく苦労した結果だったのを知りました(^^;;;
それにしても、1977年に22才でサンデーに投稿してそこから担当が付いて、 初連載である「ケンカばんばん」の1話がコロコロの1979年5月号、 「とどろけ!一番」の連載開始が1980年の2月号からな訳で、 只者では無い人だったというのを今更ですが思ったりも。

のむら氏自身の話以外にも、当時連載していた作家陣の物語も面白くて、 どれも「当時はこんな事になっていたのか」と驚かされました。 「ゲームセンターあらし(すがやみつる)」 F1キッドという漫画を連載していたのに 急にゲームセンターあらしを描く事になった話、 「超人キンタマン(立石圭太)」オガンダムがバカラスになった事情、 「ファミコンロッキー(あさいもとゆき)」すがやみつる氏のアシスタントだった 所をいきなり抜擢された話、 「あまいぞ!男吾(Moo.念平)」スカウトが先で藤子不二雄賞で入選を取った のが後だという事、 あと「おぼっちゃまくん」より前に小林よしのり氏が 読み切りで描いた「炎のカン」と「お祭り珍太」も(内容は覚えてませんが) 作品の存在自体は覚えていて、創刊伝説で二作品ともアンケート結果が最下位だった のを乗り越えた先に「おぼっちゃまくん」があったというのを知り、 なんかスゲーって思いました。

とにかく、40年近く前に読んだコロコロの話なのに、意外と覚えているし 作中に当時のページのコピーとか出てくるのですが、全部見た記憶がある というのは、それだけ本誌を何度も読み返していたからかも知れません。

そういやコロコロ300号が出たとき にマガジンハウスの雑誌でコロコロ関係者のインタビュー記事が載っていました。 今見てみると、初代編集長の千葉和治氏、のむら氏の初代担当編集者の 平山隆氏のインタビュー記事も載ってました。

2巻の中にゲーム雑誌向けに書かれた読み切り作品が収録されていた のですが、その中でENIXの「ポートピア連続殺人事件」の犯人を 「TOKYOナンパストリート」の作者である関野ひかる氏を通じて 聞くという話があります。どういう繋がりの知り合い?と思って Wikipedia を眺めてみた所、関野ひかる氏は漫画家さんで、「TOKYOナンパストリート」は プログラムコンテストの受賞作品だというのを初めて知りました(^^; 「TOKYOナンパストリート」で画像検索するとパッケージ写真なんか も出てくるのですが、パッケージ裏に作者紹介として本人顔写真やら年齢 やらが載っていて、こういう時代もあったのだなぁと思ったりも。 それによると「3年B組金八先生」のコミカライズ作品を描いていたらしい。 何気に「パソコン歴 2年」と書かれているのですが、 作ろうと思って作れるものではないくらいの規模 (今となっては小さいプログラムでしょうけど、同じ感じの ものを 今の便利になった技術を使って良いので作れと言われたとしても、 完成させられる人はそんなに居ないだろうと思われるレベル)の ように思ったりも。

2018/06/23

昼前起床。

掃除したり。

そういや UWP(Universal Windows Platform)アプリのウインドウ描画が変になる件 (一つ前のメモ)。 こちら のマイクロソフトのコミュニティに事例が報告されているようです(2018年2月付け)。 TANEの所で最初に確認されたのは 2017/9/17よりも前(しかも PCは現在使用しているのとは別のもの)なのですが、今だに直らない所を 見ると、レアなバグなのだろうか?と思ったりも。もしくは UWPアプリをメインで使っている人がほとんど居ない可能性も考えられますが。

2018/06/22

遅めに帰着。

そういやEmacs-26.1でflymake-modeのバージョンが上がったようで、 今まで使えていた関数や変数が変わったり、Webから拾った 設定が使えなくなっていたりする模様。 結構面倒臭いのはflymake-popup-current-error-menuという関数が無くなった 為、エラーメッセージを見るのに、エラー箇所にマウスカーソルをかざす 必要がある点。これだとターミナルで -nw で使うとき困るのでは?と思った ので、他に方法は無いのか?と思って調べてみたところ、メニューバーに 「List all probrems」というメニューがあり、エラーのリストを表示する バッファを開く事ができるのが判ったり。メニューから実行される のはflymake-show-diagnostics-bufferという関数なのですが、 これを分割ウインドウで表示できれば良くね?と思い、以下のようなのを 考えてみたり。

;; flymake-show-diagnostics-buffer拡張 for Emacs-26.1
(defun flymake-show-diag-buffer-ex ()
  "Extended flymake-show-diagnostics-buffer"
  (interactive)
  (progn
    (let* ((rootw-h (window-height))
           (win-r (get-buffer-window (current-buffer)))
           (win-d (split-window nil (- rootw-h 5))))
      (select-window win-d) (flymake-show-diagnostics-buffer)
      (select-window win-r)
      )))

(if (string-match "26." (version))
    (progn
      (define-key d-mode-map "\C-c\C-e" 'flymake-show-diag-buffer-ex)
      (define-key c-mode-map "\C-c\C-e" 'flymake-show-diag-buffer-ex)
      ))

コードを書いているその場でエラー内容が表示されるので、すぐに直す事を 考えると diag-bufferのウインドウはそんなに広く無くても良い 感じかも。御参考まで。
因みに、dmdとldcではgdcの -fsyntax-only に相当する機能は無いようなので、 flymakeを使うためだけにgdc(ただし dmd2.068相当のバージョン)を使用しています。

ファインディング・ドリー。因みに初見。2016年の夏公開なので、約二年前の作品か。 もっと前な感じがするのは ファインディング・ニモ とごっちゃになっている からかも。面白かったと思います。それよりも、まさか シュガーラッシュの 続編が来るとは全くの想定外だったかも。

2018/06/21

遅めに帰着。

スタティックライブラリのlibcurl.lib。 phobosの std/net/curl.d ではDLLを自力でロードした後、 シンボルをtupleに関数テーブル的に保持して、用事のあるところで 関数コールするという仕組みになっているようです。即ち スタティックライブラリをリンクするだけではうまくいかない気が するのですが、MinGWターゲットのgdcではどうやって動いていたんだ? と今更思ったり。

2018/06/20

早めに帰着。

libcurlを使うコードのdmd対応。ひとまずdmd付属のlibcurlをリンクして 実行ファイルを生成できたのですが、sftpが使えないなぁ?と思ったり。 そういや自前で対応してたのをすっかり忘れていたのですが、 ssh2込みのlibcurlは自分でビルドしないとダメな予感。共通ライブラリに 入れるのであれば、フルスペックで使えるのを期待すると思うのですが、 そうでないときの対応は結構面倒臭い気が。

ひとまずlibssh2とlibcurlはcmakeを使ってスタティックライブラリを ビルドできてみたのですが、phobosのstd.net.curlがdllを自力でロード していてスタティックリンクしたライブラリの方で動いていない気が したり。

GTSのGTリーグ。耐久レースをチクチクやっているのですが、どれも 3位以内に入るのが厳しい状況。なにより1時間かかるのですが 途中でやめると賞金が貰えないので全然ダメでもやるしかない感じ だったり。

2018/06/19

遅めに帰着。

OpenALとOggライブラリを手持ちWinアプリでリンクしてみたり。 ひとまずリンクには成功して音も出ました。 でも、.exeファイルを生成するときに何故か .expと .lib が 生成されて何故?って感じ。Web検索してみると現象自体は そのものズバリなものがあったのですが、原因と解決方法が 説明を読んでも訳が判らなくて、なんのこっちゃ?な感じ。

本来はDLLを作成するときに生成されるファイルらしいのですが、 dmdのコマンドラインでは.expが生成されないものと全く同じ 為、何を以って生成するに至っているのかが判りません。 こちらのページを読む感じ、「シンボルをエクスポートするプログラム」 の場合に自動的に生成する感じに読めるのですが、 スタティックライブラリOpenALかOggのライブラリのどちらかがそういう事に なっているのか?と思い調べてみるも良くわからず。

その後、原因判明。OpenALのビルドに於いて、cmakeによりconfig.hという ヘッダファイルが自動生成されているのですが、その中で AL_APIとALC_APIというdefineが以下のようになっていました。

/* API declaration export attribute */
#define AL_API  __declspec(dllexport)
#define ALC_API __declspec(dllexport)

スタティックライブラリの場合は

/* API declaration export attribute */
#define AL_API
#define ALC_API

で良いハズという事でビルドしたOpenAL32.libをリンクすると .expと.libが生成される事は無くなりました。 ダイナミックライブラリとスタティックライブラリの両方を 生成する事は考慮されていないという事になるのかしら?

2018/06/18

早くも無く遅くも無く。

VSでOpenALをビルドしたり。スタティックビルドを行いたかったのですが、 VSのGUIからCMakeを開く方法ではcmake実行時のパラメータを指定する事 ができない為、コマンドラインでcmakeを実行してから、生成された プロジェクトを開くとか、リンカオプションにこそっとx86ターゲット のオプションが積まれていてx64にしているつもりが効いてなかったり とか、ハマり処は沢山あったもののどうにかビルドに成功。

続いてVSでfreealutをビルドしようとしたのですが、cmakeがエラー。 こちらもコマンドラインでcmake実行し、パラメータでOpenALの インクルードパスとライブラリパスを足して生成されたプロジェクトを 開く方法で対応。こちらはWIN32向けにはそもそもスタティック ライブラリが考慮に入っていなくて、OpenALのスタティックライブラリ 向けにdefineを足したり、alut.hのヘッダファイルを弄ったりして どうにかhello_world.exe(実行すると英語でhallo worldとしゃべる) のビルドに成功。ひとまずスタティックライブラリは生成できたと思われ。 それにしても、結構弄る必要があったのですが、スタティックライブラリ でビルドしたくなる人は居ないのだろうか?

ビルドしたOpenAL,freealutとlibogg,libvorbisを手持ちアプリで 使うのはまた後日。

2018/06/17

昼頃起床。

掃除したり洗濯したり。

std.format.doFormat()の代わりは自力コードで対応。

libjpeg、libpng、freeglutですったもんだしている状況ですが、 任意精度の算術ライブラリであるGMPやMPFR、cairoをVisualStudio でビルドしようと思うと、なかなかな敷居の高さがある模様。

VSでliboggとlibvorbisをビルドしてみたり。VS向けのプロジェクトが 用意されていたのであまり手間がかからずにビルド成功してると 思われ。

2018/06/16

AM中に起床。

dmd移行。InvalidMemoryOperationErrorについて検索してみた所、 D Wikiにこのようなページ を見つけたり。今まであまり意識した事無かったのですが、デストラクタ でメモリ操作を行うのは鬼門らしい。 なのですが、何気に意図的に確保した配列をdeleteで削除する コードを散りばめていたりするので、それが裏目に出るみたい。
終了時にInvalidMemoryOperationErrorになるのは、どうやら以下の ようなコードが原因のようでした。

~this(){
  destroy() ;
}

int destroy(){
  DestroyMenu(hrootmenu) ;
  hrootmenu=null ;
  foreach( key ; hsubmenu.keys ){
    hsubmenu.remove(key) ;
  }
  return(0) ;
}

WinAPIのCreateMenu()で生成したメニューのハンドラをDestroyMenu()で 削除するのですが、その時、管理用に使用しているD言語の連想配列も 全ての連想配列キーを削除するようなコードにしてました。 foreach()でキーを削除する部分が無ければ 終了時のInvalidMemoryOperationErrorは解消されました。 ウインドウメニューの場合は動的に項目を追加/削除する事が無ければ ガベージコレクタにお任せで大丈夫かなという気はしますが、 画像データを保持するようなクラスの場合、積極的にクラスの中で 割り当てた配列をdeleteで解放しておかないと、巨大サイズの画像を 何回も再読み込みしていると連続領域が確保できない場合を繰り返して メモリ不足に陥るケースがありました。という訳で、 一通り見直してみる必要がありそうです。

デストラクタに入っていたメモリ解放コードを無しにした所、 ズッコケる事は無くなりました。 あと、delete文は廃止予定という事で、core.memory.GC.free()を使う ようにしてみたのですが、delete のように即効性が無い為か、 deleteを使った場合よりもプロセスサイズが縮まらない感じだったり。

OpenGLを使ったコードのビルド。出来合いのfreeglutのライブラリを Webから拾ってリンクできる所は確認できていたので、pngとjpegのライブラリ を今回VSで生成したものを使用すれば良いハズ。で、リンクはできた のですが、実行すると一瞬表示されるもすぐにウインドウが閉じたり。 どうやらOpenGL描画がダメな感じだったり。仕方ないのでfreeglutの ライブラリをビルドしてみる事に。
freeglut-3.0.0 ではVisualStudio 向けのプロジェクトファイルが無くなっているようなので、 Visual Studio Installerで「CMakeのVisual C++ツール」をインストール してCMakeを使えるようにする必要があります。 ファイル→開く→CMake からCMakeLists.txt を開くと問題無く開いて メニューのCMakeからビルドを実行すると特にエラーすること無く ビルドできました。イマイチどこに生成したファイルができている のか判らなかったのですが、ユーザーフォルダの下のCMakeBuilds に生成される模様。出来上がったfreeglut_static.libでリンク に成功。実行してみると 「This is quite likely caused by a bad '-display' parameter」 なるメッセージがコンソールに表示されたり。ひとまずこれで 追いかけられそう。

freeglut。ひとまず原因判明。メッセージの直接の原因は DISPLAYという環境変数が設定されていた事によるもの。Cygwinで X-Window描画を行うアプリ向けに設定しているのですが、これが Cygwinのbashから起動すると悪さをしているというのが原因でした。 もう一つは大分前に freeglutへの乗り換えを試したときに見つけた問題。 glutのティーポットなどのプリミティブ描画を行う際に glutCreateWindow()を使わずに自前で用意した描画コンテキスト に描画を行う場合にSegfaultになるというもの。 当時試したのは3.0.0-RC0というバージョンだったのですが、 RCが取れた版数でもここん所は直されなかったようです。 そんな訳で、以下のようなパッチで対応してみたり。

--- fg_geometry.c.orig  2014-10-18 01:09:00.000000000 +0900
+++ fg_geometry.c       2018-06-17 00:10:07.617524600 +0900
@@ -178,11 +178,11 @@
 void fghDrawGeometrySolid(GLfloat *vertices, GLfloat *normals, GLfloat *textcs, GLsizei numVertices,
                           GLushort *vertIdxs, GLsizei numParts, GLsizei numVertIdxsPerPart)
 {
-    GLint attribute_v_coord   = fgStructure.CurrentWindow->Window.attribute_v_coord;
-    GLint attribute_v_normal  = fgStructure.CurrentWindow->Window.attribute_v_normal;
-    GLint attribute_v_texture = fgStructure.CurrentWindow->Window.attribute_v_texture;
+    GLint attribute_v_coord   = fgStructure.CurrentWindow==NULL ? -1 : fgStructure.CurrentWindow->Window.attribute_v_coord;
+    GLint attribute_v_normal  = fgStructure.CurrentWindow==NULL ? -1 : fgStructure.CurrentWindow->Window.attribute_v_normal;
+    GLint attribute_v_texture = fgStructure.CurrentWindow==NULL ? -1 : fgStructure.CurrentWindow->Window.attribute_v_texture;

-    if (fgStructure.CurrentWindow->State.VisualizeNormals)
+    if (fgStructure.CurrentWindow!=NULL && fgStructure.CurrentWindow->State.VisualizeNormals)
         /* generate normals for each vertex to be drawn as well */
         fghGenerateNormalVisualization(vertices, normals, numVertices);

@@ -193,7 +193,7 @@
                                vertIdxs, numParts, numVertIdxsPerPart,
                                attribute_v_coord, attribute_v_normal, attribute_v_texture);

-        if (fgStructure.CurrentWindow->State.VisualizeNormals)
+        if (fgStructure.CurrentWindow!=NULL && fgStructure.CurrentWindow->State.VisualizeNormals)
             /* draw normals for each vertex as well */
             fghDrawNormalVisualization20(attribute_v_coord);
     }
@@ -202,7 +202,7 @@
         fghDrawGeometrySolid11(vertices, normals, textcs, numVertices,
                                vertIdxs, numParts, numVertIdxsPerPart);

-        if (fgStructure.CurrentWindow->State.VisualizeNormals)
+        if (fgStructure.CurrentWindow!=NULL && fgStructure.CurrentWindow->State.VisualizeNormals)
             /* draw normals for each vertex as well */
             fghDrawNormalVisualization11();
     }
--- mswin/fg_init_mswin.c.orig  2014-10-18 01:09:00.000000000 +0900
+++ mswin/fg_init_mswin.c       2018-06-17 00:17:49.077044500 +0900
@@ -47,7 +47,7 @@

     /* What we need to do is to initialize the fgDisplay global structure here. */
     fgDisplay.pDisplay.Instance = GetModuleHandle( NULL );
-    fgDisplay.pDisplay.DisplayName= displayName ? strdup(displayName) : 0 ;
+    fgDisplay.pDisplay.DisplayName= 0 ; //displayName ? strdup(displayName) : 0 ;
     atom = GetClassInfo( fgDisplay.pDisplay.Instance, _T("FREEGLUT"), &wc );

     if( atom == 0 )

これでOpenGLによる描画も可能になりました。

で、dmd2.080ではstd.format.doFormat()が無くなっている為、 OpenGLの文字描画がまだ出来ていません。

2018/06/15

遅めに帰着。

VSでlibjpegをビルドした際、アプリのプロジェクトが何故か上手くライブラリ を認識してなくて、djpegのビルドに失敗するのを調べたり。どうやらリンク するjpeg.libのパスが違ってる模様。デフォルトだとRelease/jpeg.libを リンクするのですが、x64向けにターゲットを変えた際にx64/Release/jpeg.lib にビルドされるのに連動してパスが変わっていなかった模様。 直してdjpeg.exeを生成できたのでファイルのデコードを試してみた感じ ではうまく動いてそう。なので、生成されたjpeg.libの疑いは少し晴れたかも。

手持ちコード内でlibjpeg内のエラー時はハンドラ関数を実行する様に していたのですが、それを一旦外してみた所原因判明。 JPEGロード部分はC言語のコードを使っているのですが、その時のコンパイラは v8系のlibjpegヘッダを参照しており、VSでビルドしたのはv9系だった為、 バージョン不一致で弾かれていたというTANEのチョンボでした(^^; 修行が足りません。

Cygwinパッケージのx86_64-w64-mingw32クロス環境でインストールした libjpegなので、v9に上げるのはちょっと面倒臭い感じです。なので、 VSでv8をビルドしリンクしてみた所、ちゃんとJPEG画像表示も動きました。

後は、ウインドウを閉じる時(プロセス終了する時)に InvalidMemoryOperationErrorの例外が飛ぶ原因を直せれば dmdおよびldc2への移行が可能そうです。さて、どう調べたもんか.....

2018/06/14

遅めに帰着。

dmdでのコンパイル。外部シンボルが見つからない件は、Webの 情報から以下のような感じにしたら実行ファイルの生成に成功したり。

dmd  -m64 -L=/subsystem:windows -L=/entry:mainCRTStartup ... msvcrt.lib msvcmrt.lib  -L=/LTCG -L=/NODEFAULTLIB:libcmt.lib

結局、どのライブラリが必要なのか良く判らないけどリンクできたという感じ。

で、実行してみるとウインドウの表示に成功し、PNGデータのアイコンも表示 されてるようだったり。PNGファイルとD言語で書かれた画像ファイルのローダーは 動いたのですが、JPEGファイルはダメ(libjpegの中で何かが起こってエラーハンドラ の関数が実行されてる模様)。 そしてウインドウを閉じる時にMemoryOperationErrorの例外が発生したり。 うーむ、どうやって調べたもんか。

2018/06/13

早めに帰着。

あまりの眠さに急速停止。

2018/06/12

遅めに帰着。

VSでlibjpegとlibpngをビルドしてリンクを試みたのですが jpegの方で __imp_strncpy という外部シンボルが見つからないと怒られたり。 何故....

2018/06/11

遅めに帰着。

dmdのコンパイル。VSでd言語のソースが認識されていないのが原因だと 判ったり。で、 Vidual D をインストール。d言語のソースがソリューションエクスプローラー で認識されるようになったり。で、ビルドしてみるもエラー。 dmd.exeが見つからないと言われてるのですが、インストールパスの 設定しているのに何故?という感じ。7zのアーカイブを任意の 場所に展開する方式なのでPATHを通していないのですが、それが 問題か?と思ったりも。
仕方ないのでインストーラーを使ったdmdのインストールを行って みたところ認識されたり。でもコンパイルエラー。 何やら res/default_ddoc_theme.ddoc というファイルが必要ですが、 アーカイブに含まれていなかった為、GitHubからダウンロードした ソース一式からコピーしてみたところ、ひとまずビルドには成功 しました。
因みに、インストーラーでインストールしたdmdでも、VSのリンカ が使用される為か、SUBSYSTEMをWINDOWSにするとやっぱりリンクで エラーします。やっぱりVSでリンクするとmain()始まりのプログラムを /SUBSYSTEM:WINDOWSでリンクできないのではないか疑惑。 例えば、main()始まりで作ったプログラムで、ちょっとした実行結果を MessageBox()で表示するので、console画面は出さなくて良いみたいな プログラムを書けないような気がするのですが。
その後、Webを検索して試したところ、 「dmd -m64 -L=/subsystem:windows -L=/entry:mainCRTStartup ...」 でmain()始まりでconsole画面を出さないようにできる事が判りました。 ldcでも同じリンクオプションの指定でOKそう。 検索してもズバリな答えが一番上に出てこず、割とバッドノウハウな 感じのが上の方に出てくるのはイマイチに思いましたが、まぁ。

ひとまずlld-link.exeを使わなくてもconsole画面抑止制御ができた ので、dmdを弄って実験する必要は無くなりました。で、そもそもの 本題はMinGWでビルドしたC言語で書かれたライブラリをリンクすると 動かない実行ファイルが生成されたので、VSでコンパイルしたライブラリ ではどうか?というのが試したい事だったのですが、そこんところは まだ手を付けられず。

GTSのF1500選手権。インテルラゴスもチートでどうにかゴールドゲット。 長い闘いでした。

2018/06/10

AM中に起床。

掃除したり洗濯したり。

dmd。リンカの切り替えをコマンドラインから無効化できない感じなので、 dmdを再コンパイルできればそこんところのコードを弄って確認できるかも? と思い、VSでdmdの再コンパイルを試みたり。説明が全く無いので src/dmd/vcbuild ディレクトリにあるdmd.slnファイルをプロジェクトとして 読み込めば良いのか?と思い読み込ませてビルドをしてみるもエラー。 初回はライブラリの版数が合わないとかいう事のようだったので、 「プロジェクト→ソリューションの再ターゲット」を実行してみたり。 再度ビルドしてみるとなにかしらコンパイルしてそうな感じ だったのですが、dmd本体のリンクと思われる所で外部シンボル (_mainCRTStartup)が見つからないというリンクエラーで停止。 どういうリンクオプションを付けているのかも、どのオブジェクトファイルを リンクに使用しているのかも さっぱり判らないので途方に暮れたり。
それにしてもビルドを自動化している割に、そのまま食わすとエラーする のはどういう事?という気も。まぁ、この辺はUNIX系のconfigureも、 shが無いOSとかで実行しろと言われても途方に暮れる訳ですが、 一通り揃っていると思われる環境で突っかかるのは何故?という気が しなくもありません。

「はじめアルゴリズム(3)」。先週捕獲済で読んでいたのですが、 メモるの忘れていました。平行線が交わる話は2巻のおまけページ で触れらていた話ですが、3巻の物語中でも出てきてます。 一点透視図法である点に向かって平行線が集中する絵や図を描く事 があるのですが、数式的に無限遠点で交わる事が示されているのに、 へーっと思ったり。あと、「1+2+4+8+...=-1」になるという話。 解析接続という考え方で証明できるという事ですが、TANEは これを見たとき 2進数で符号bitを含めてall1だと-1になる 感じに思えました。次はどんな話が出てくるか楽しみです。

2018/06/09

AM中に起床。

散髪に行ったり。帰りにちょろり本屋に。

dmd対応。先日のリンカの件はsc.iniの64bit環境部分に 「LINKCMD=%@P%\lld-link.exe」を追記してリンカを明示すればlld-link を使うようになりました。でもエラー。
libcmt.libをいうライブラリをリンクしているようですが、これもVSを インストールしたときに入ったものを参照しているようだったり。 リンカオプションからVSのLIBPATHを全部外してリンクしてみた所、 今度はDMDに含まれるwindows\lib64やwindows\lib64\mingwを参照 しなくなってて、それをLIBPATHとして指定したり。 すると、libcmt.libが見つからないというリンクエラーになったり。 DMDにlibcmt.libが含まれるのかと思いきやどこにも見つからなくて 謎な状況。VSを入れる前はどこにあるlibcmt.libを参照してたんだ? それともlibcmt.libを参照していなかったのか?
毎度の事ですがdmd関連から情報は得られず。面倒くせぇ...

VSでコンパイルした.objファイルのフォーマットの件。 プロジェクトの構成マネージャーでアクティブソリューションプラットフォーム を新規追加してx64を選んでみた所、objdumpで認識可能な .objファイルが生成されてみたり。でも、 「ファイル形式 pe-bigobj-x86-64」となってて、 MinGWのx86_64ターゲットで生成した.oファイルの形式 「ファイル形式 pe-x86-64」とちょっと違ってたり。

そういやVSを入れたのでldcが使えるかも?と思い試してみたり。 取り合えず展開してPATHとか一切通さずにHelloWorldレベルの コードをコンパイルしてみた所、-m32も-m64もどちらでも 所望の実行ファイルが生成できたり。64bitの方は「ファイル形式 pe-x86-64」 となっていたのですが、VSでビルドしたライブラリとの相性はまだ判らず。 -vでコマンドラインは表示できるので、dmdの方との差とかも調べられるかも。

ldc2で手持ちのWinアプリをビルドしてみたり。コマンドラインに微妙な 違いはあるものの、dmdに近い感じに思ったり。で、ビルドしてみたところ ちょっとイマイチな感じに。SUBSYSTEMをWINDOWSにするとリンクに失敗する のですが、どうもWinMain()式のコーディングを要求されているみたい。 で、SUBSYSTEMを指定しない(SUBSYSTEM:CONSOLEと同じ)と、 リンクには成功するのですがファイルエクスプローラから起動すると コンソールウインドウが開きます。もー、面倒臭いなぁ.....

ldcの動きを-vで眺めて、dmdのソースを少し見た結果、 次のような感じになってるのかなぁ?と思ったり。


一時的でも環境変数VSINSTALLDIRを未定義にできればdmdで参照するリンカや ライブラリをVSが無い時と同じ状態に戻せると思うのですが、 Cygwinのbashに環境変数が引き継がれなくてどうしたもんか。

GTSのF1500選手権。鈴鹿でかろうじてゴールドゲット。

2018/06/08

遅めに帰着。

dmd対応、というかVisual Studio。ひとまずIJGのlibjpegを Webの情報を頼りにビルドしてみたり。libjpegの説明書通りにやっても UTF8のBOMが付いてるとエラーするとかハマりどころがいくつかあったの ですが、なんとなくビルドができてライブラリが生成されてみたり。 で、objdumpで生成された.objファイルを見てみたのですが、 知らないフォーマットのファイルだという判定をされてみたり。 うーむ。

何故かdmdを使ったビルドのリンクに失敗するようになったり。 どうやらVisualStudioでインストールされたリンカ(link.exe)を使うように なったせいでエラーになっている模様。てか、sc.iniの場所の lld-link.exeを使っていたのが何故こうなるのか謎。そもそも sc.iniには64bit環境時(?)のリンカを指定する記述が無い為、 lld-link.exeが使用されていたのも何故?って感じ。 毎度の事ですが、この手のブラックボックス化が行き過ぎてて どこの何を使っているのかがサッパリ分からない為、エラー すると途方に暮れる感じはどうにかならないのかなぁ?と思います。
「ボタン一つで便利になる」というのは別に良いのですが、 便利になる事と何をやっているのかが判らないのとは話は別 というのが個人的な感想。便利なのに加えて何をやっているのかも 明確でもあるというのが良いと思うのですが、前者が行き過ぎると 何故か後者が満たされなくなるという不思議。

GTSのF1500選手権。ブランズハッチでどうにかゴールドが取れたり。 長い闘いでした。でも、まだインテルラゴスと鈴鹿は取れていない ので、次はそのどちらか。

2018/06/07

遅めに帰着。

dmd対応。結局できあいのライブラリは見つけられずじまいの為、 Visual Studio の無償ダウンロード版を入れてみる事にしてみました。 インストール完了後、再起動を要求されて 何故?と思ったりしましたが とりあえず起動。うん、どうすりゃ良いかさっぱり判らん。

2018/06/06

遅めに帰着。

Emacs 26.1で display-line-numbers-mode という行番号表示を 行うモードが使えるようになりました。elispで実現しているのでは なく、組み込みの行番号表示の仕組みを使っているようです。 その為、linum-modeでは行数が多いと操作が ままならなかった のですが、そういうのは無くなりました。てか、今までできて なかった事の方が何故って感じですが、まぁ....

2018/06/05

遅めに帰着。

Emacsの雑記を更新しました。 Emacs 26.1ベースのIMEパッチを置いてみました。ご参考まで。

2018/06/04

遅めに帰着。

Emacs 26.1。美人時計の26.1対応を 置いてみました。 御参考まで。

Emacs 26.1。ひとまず一晩動かして特に問題が無さそうだったので、 CygwinパッケージのEmacsを26.1にアップデートしてemacs-w32を野良ビルド版に 入れ替え。Emacs-25.3の時にorg-9.0.3を使用していたのですが、何故かEmacs-26.1では うまく動かないようだったので、今日時点での最新版であるorg-9.1.13を 入れてみたり。因みにEmacs-26.1に含まれるorg-modeは9.1.9なので そちらでも良いのですが、色々弄る場合があったりするのでこちらも野良ビルド したのを使うという感じです。

Antimalware Service Executableがやっと静かになったり。

2018/06/03

AM中に起床。

Emacs 26.1。初回起動のIME切り替えがうまくできない件。25.1でも ダメだったり。てか、前からこうだっけ?Windows10がアップデート したのが原因だったりする?と思ったりも。今となっては確認する事が できませんが。

Pouetで最近開催された デモパーティーの作品を眺めていたらoldskoolデモで、MZ-700の作品が あるのを知ったり( NEOTOKYO by Ivory Labs & Quadtrip & Fit)。意外に思ったのは 作ったのは日本人では無さそうな点。1982年発売の日本のパソコン (エミュレータかも知れませんが)向けに日本人じゃない人が2018年にデモを 作っているって激レア過ぎると思ったりも。

なんかAntimalware Service Executable(MsMpEng.exe)というプロセスがCPUを 使い続ける状態だったり。何やってんだ?

Emacs 26.1。しばらく起動してアクセサリ類を動かしてみたり、パッチの 整理をしてみたり。

2018/06/02

早起きしたり。

秋葉にお出かけ。そしてキーボードを購入。

購入したのはREALFORCEのR2TLSA-JP3-BK。キー荷重30gのキーボードです。 指が痛いのがどうにも治らず、 ある結論に達したためREALFORCEに白羽の矢を立てたという苦肉の対応です。
まずRazerの黄軸キーボード。消音化リングを調節したり スポンジでトラベル距離を調節したり、 色々と試してみたのですが、絶対的な対策とはならなかったという結論。 で、改めてキーの押し方などを観察した結果、どうやらキーがスムーズ に動かなくなってきているのが判りました。TANEは普段使いがEmacsの為 Cntl(キー位置的にはCapsLock)を頻繁に押すのですが、押していると 何故か指が痛くなります。連打をしている訳ではなく押しっぱなしに するのでスムーズに動くか否かはあまり関係無いようにも思っていた のですが、どうもこのほんのちょっとした突っかかりが要因の一つに あるようだと考えてます。黄軸はアクチュエーションポイントが浅いので、 キーが反応しないという事は無く、スムーズに動かないのも気のせいくらい の感じなのですが、気付かないうちに軽い突き指を繰り返している感じに なっているのではないかと思ってます。
続いてサンワのロープロファイル赤軸のキーボード。これは職場使いにしてみています。 しかし、これもキーは軽いのに何故かしばらく使っていると指が徐々に 痛くなるという感じです。指が痛くなった後で使う事にしたキーボード なので、キーを軽くするという対策はハズしているのかも知れません。
最後にサンワのロープロファイル青軸のキーボード。 底打ちが原因の一つにあるのではないかと試してみたものの、 長い時間使っているとやっぱりダメっぽいという感じ。

という訳で、痛いのだけをどうにかできないか?という理由のみで、 世の中に今あるキーボードで一番キー荷重が軽いのはREALFORCE 一択だった いう流れです。少し使ってみた所では良好な感じがします。ただ、 これまでの流れから考えると時間をかけないと真価のほどはまだ 判らないと考えています。因みに、 アクチュエーションポイントを変えられるので、誤入力せず且つ 底打ちダメージが無い所に調節してみるという事で、 1.5mm,2.2mm,3.0mmのうちの2.2mmを選択してみています。

Emacsの26.1が来てた。Cygwinパッケージにも来ているようです。 てか早っ!

Emacs 26.1に自前のIMEパッチを当ててみたり。ほんの少しリジェクト されたのですが、手動で適用可能な範囲。あとエラー無くパッチできた 所も変数が構造体に包まれたりしてたのをちょっと直してみたり する感じでビルドに成功。でも、色々と動かなくなってたり。


今回は色々とハマりどころがあるようです。動かない所は少し調べて からでないと乗り換えは危険かも。Cygwinパッケージインストール でうっかり入れてしまわないように気を付けるのが一番大変なのですが(^^;

その後「(wrong-type-argument floatp 1280)」の原因はftruncate関数に 整数を食わすとエラーするようになったのが原因と判明。え~~~~? 仕方ないので「(ftruncate value)」を「(ftruncate (float value))」に 書き換え。厳密に型をチェックするコストでfloatに変換してくれた方が 実用的じゃないか?とは思うのですが、互換を崩してでもエラーにする方が 良いと判断されたのでしょう。あと、美人時計が動かなかったのもこれが 原因(美人時計内の問題でdeferredは何も関係無し)でした。 と言う訳で、初回起動のままだとIME切り替えがうまくできない 問題だけが未解決という状況。

初回起動のIME切り替えがうまくできない件、今使っている25.3で確認したら そちらもダメだったり(^^; という訳で26.1での不具合ではありませんでした。 起動後必ずウインドウを動かすので、バグっているのに気づかなかったという 感じです(^^;;

2018/06/01

遅めに帰着。

GTS。F1500選手権は少しお休み。増えた別のレースを消化してみたり。

dmd対応。できあいのライブラリが見つからないのですが、 ズッコケる理由が判らなかったので、どこまで進んでいるのか 調べてみたり。すると、CreateWindowEx()の呼び出しが戻って来る前に 死んでいる事が判ったり。ウインドウを生成する部分は外付けライブラリを 使わないコードと全く同じなのですが、何故か動かないという感じ。

dmd付属のwindbg.exeを使用してみたのですが、ファイルが読み込めない 感じだったり。32bitビルドした実行ファイルしか扱えないのでは ないかという疑惑。

Cygwin64のgdbを使うとひとまず実行とSegfaultした所での スタックトレースの表示はできたり。CreateWindows()に指定したWNDCLASS のWndProcの中に入っているようですがその中で死ぬ模様。でも死んでるのが 意図的にデバッグ停止させるために仕込んだ例外throwなので どうしたもんか。


TOP PREV