プログラミングWindows95 with MFC も読んでみる。

前回のエントリで書いたWin95ペゾリド本よりも先に、しばらく放置していたMFCによるWindows95プログラミング』も読み終えた。これも20年以上前に出た本でWin95向け。この本の次の版がアマゾンではぼったくり価格になってて、今回読んだ第4版は931円とゴミ扱い。

MFCProgWin95

「これはMFCに関する本であり、Visual C++の本ではない」!!

だが断る。今回はVisual C++のIDEを使わせていただく。

書籍ではWin95+Visual C++ 4.0を前提に書かれているが、今回はVMware上に構成したWindows 2000 + Visual C++ 6.0の環境を中心にさらった。Visual Studio 2017でも一応MFCサポートはあるのでペゾルド本のWin32 SDKほどマゾっぽくはならなくても済んだかもしれない。

プログラミングWindows95』と装丁は似ているが中身はぜんぜん違ってて、Visual C++に付属するクラスライブラリMicrosoft Foundation Classライブラリの解説書。Visual C++ のIDEの使い方の解説本ではないというのがポイント。ただIDEの解説こそを含んでいないが、サンプルのメイクファイルはVSが吐き出したものを使用しているようでペゾルド本のようにメイクファイルから手書き、というスタイルではないあたりも異なる。(手書きで最低限のメイクファイルを作るとクラスウィザードがきちんと動かない。クラスビューワはなんとなく動く。)

この本でも一応目玉というか実用的サンプルとしてMyWordというリッチテキストビューを主要コンポーネントにした簡易ワープロが掲載されているが、Win32SDKと違って非常に簡単に実装ができてしまう。今回はIDEを使ったのでそれこそサクっとできてしまうが、コードを追いかけるうえではやはり本文くらいの解説があったほうが理解は早い。

myword

本書はペゾルド本と並んでWindowsプログラミングを行ううえで、ぜひとも読んでおきたいもののひとつだし、読み終えてみるとペゾルド本よりだいぶやさしい内容であると分かる。

VC++のIDEを使って本書を読み解くとMFCを縦横に扱う感覚が身について、手書きの写経も良いがIDEを使うのも悪くないなと思えるようになった。

広告

プログラミングWindows95 をVS2017で。

だいぶ前に買って放置していた『プログラミングWindows95と『MFCによるWindows95プログラミング』をようやく読み切った。2冊合計で2272ページ。

Progwin95andfMFC.JPG

プログラミングWindows95はWindowsプログラミングの最良の書のひとつであるペゾルド本の第4版。『プログラミングWINDOWS3.1』を学生の時に読んでいたのであまり読む気が起きなかった。Win32SDKの開発手法についてはだいたい知ってるし、そのまま写経してもつまらないので、当時の最新鋭Win95+VC4用サンプルを現在最新のWin10 x64+Visual Studio 2017で動かしてみるという明らかにマゾっぽいコースにチャレンジ。定評のある読みやすい本が地獄と化す。

何に苦しむことになるか。

・文字コードが異なる
内部の文字コードがWin95ではMBCS、WinNT系ではUnicodeと異なっていてWin32 SDK自体は一応マクロで切り替わるようになっているが、それを利用するコードや環境もその辺を意識しておく必要がある。基本的にはcharがWCHAR、char*がPWSTRになる。文字化けだけならまだましな方で、string.hで宣言されてるstrcpy系がドはまり。本文中ではstrcpyだけどUnicodeはwcscpyに変更だが、後に書くSDLでさらにハマる。

・Win95とWin10で異なる内部構造
しかも動作環境はWin10でx64。文字コードの他にもメモリ管理やDLL管理その他細かいところが異なっててそのままでは動かないサンプルも。VS2017も既定値はUnicode。文字コードに注意していれば動くものは多いが、特にメモリマップトファイルを使う第19章のSTRPROGは全く動かない。(本文中でも1062ページでWindows NTでは機能しないと解説されている。)

・VS2007のSDLチェックが有効
SDLチェックが入ってくると文字コードの変更でwcscpyしたものが、さらにwcscpy_sにしないとエラー。wcscpy_sでは戻り値すら異なっている。VS2017ではSDLチェックは既定値でオンなのであえて外さないプレイ。

・VS2017のツールオプション
VS2017についているコマンドラインツール類のオプションもVC4から変わってしまってるのでメイクファイルも修正が必要。LIBC.LIBがなくなっているのでLIBCMT.LIBに置き替える。リンカオプションは簡単になっていて /subsystem:windowsを使うとうまくいく。

・VS2017のWindowsデスクトップアプリケーションのやる気の無さ
新しいプロジェクトのスケルトンを生成させるとコンパイル時にワーニングがでるし、文字化けもする。.cpp、.hをBOM付きUnicodeで、.rcをANSIで保存しなおすととりあえず直る。Win32SDKヘルプがまともに参照できなくて、基本的に英語なのはともかく、.Netなヘルプが出てきたり。やる気なさすぎ。今回はこの厄介なスケルトンを本のサンプルにあわせて変更するという行為を行う。

・その他のレギュレーション
付属CDからのコピペは禁止。そして写経ではないのでVS2017のIDEの機能をフルに使うことにする。本書の冒頭部分20ページに書かれているとおりIDEの解説は一切載っていないし、実際にVS2017が吐き出すWindowsデスクトップアプリケーションのスケルトンのコードを理解するためには、この本の全1150ページ中590ページまで読む必要がある。でもIDEの力を借りれるとそれ以上に効率よくサンプルを消化できるのではないかと思う。プログラミングWINDOWS3.1を読んだときは実際にメモ帳の手書きプロジェクトで通したし、MSC/C++7.0のクソPWB(IDEっぽい見た目のテキストエディタ)ではそれでも良いと思ったが、今それをやり直す気力は起きない。

※実は虫食い的にVMware+Win2000+VC6も使った。こちらのほうが明らかに変更箇所は少なくて、ほぼ問題なく動く。

 

poppadx64

この本の目玉のサンプル、テキストエディタのPopPadをWin10+VS2017で完成させると、64ビット、Unicode対応のテキストエディタに。

そんなこんなで苦労はしたが、それなりに得られたものはあった気がする。20年も前の本だが、今の環境でもだいたい通用してしまうというのはなかなかすごい。Windowsでプログラムを書く人ならこのシリーズは一読の価値はある。でも前提としている環境はそろえた方が楽だ。

Windows 10 Enterprise を Fall Creators Update してみる。

なぜか継続的に高アクセス数を記録している Windows Enterprise を Creators Update してみた。のエントリ。これの次のメジャーアップデートとなる1709が昨晩リリースされた。VLSCを確認すると1703のときは後回しだったVL版のEnterpriseが、今回の1709は一般向けと同時に公開されている。

1703のときはバカ正直に自動更新がかかるのを待ってて、いつまで経っても更新がかからなかったので、今回は同じ轍は踏まない。速攻ISOをダウンロードして人柱となる。

windows10vl1709

CDNからの取得は3.7MB/secそれほど遅くはない模様。推定20分程度。ファイルサイズが少しRTMより大きくて、1703より小さい。ファイル名は SW_DVD5_Win_Pro_Ent_Edu_N_10_1709_64BIT_Japanese_MLF_X21-50165.ISO

ISOがダウンロードできたらDVDに書き込む必要も無く、そのままマウントしてsetup.exeを実行。

windows10vl1709-2

普通に始まった。

・・・

なんか「インストールに失敗しました。」とか出てきた!!
びっくりしたから途中のスクリーンキャプチャ撮るの忘れた。

気を取り直してやりなおし。インストール時のオプションで「更新をダウンロードするか」と聞いてくるので既定値の「する」から「しない」に選択を変更したらうまく進んで終わった。

SBなんたら.dllがエラーになった以外は特に問題なさそう。プロパティを確認すると1709に更新されたこと、窓のロゴがなくなったこと、デバイスIDが表示されていることが気になった。→SBなんたら.dllのエラーはSound Blaster PX(USB接続のサウンドアダプタ)のドライバだったのでいったん削除してから再接続したら出なくなった。

windows10vl1709-3.PNG

それと「お使いのPCは監視され、保護…」って書いてある。

お使いのPCは監視され、

お使いのPCは監視され、

お使いのPCは監視され、

;゚Д゚)エエー

 

※このメッセージが意味するのはWindows Defender のステータス表示だが、「システム」のプロパティで出されると別の意味に思えてくる。

インストールが超簡単になったLinux Services for Windowsがどうしようもなく便利すぎるレベル。macosで動かすsshも決して悪くはなかったが、WSLで動くフル構成のUbuntuやsuseを見たら単にsshを動かすだけであっても絶対WSLのがいいって思うハズ。Linux(SystemV風)とは若干距離があるmacのBSD Unix(しかもデフォのツール類は古い)と、WSLのフルに近いLinux環境(apt-getとかで更新もできる)の比較だったら後者のが何かと都合がいい。それにフリーのXサーバ VcXsrvと組み合わせたら、過去最高に便利なWindows環境になった。本当はExceedとかASTEC-Xあたりが欲しい。

端末エミュレータ(ターミナル)とsshが初期状態で使えるだけで「macはディベロッパー向け」とか言っちゃってる層はWindowsでWSLしたほうが幸せになれると思った。

Windows 10 のデジタルライセンスを移動。

1世代前のATOM系PentiumなMini-ITXのデスクトップを3か月ほど使ったものの、操作のレスポンスがやっぱりいまいちで第3世代Coreが使えるMini-ITXのマザーボードをオークションで若干怪しい中国系商社から買い、中身を入れ替えることにした。

一番微妙だったWin10のライセンス移行、次の手順で再認証無しに移行できた。

  1. 対象のライセンスは別のボードでWin7Ultimate→Win10Proに無償アップグレードしていたもの。MSアカウントの紐づけがある状態。
  2. 別のボードからATOMボードへ交換時には移行ツールで紐づけを変更した。電話認証なし。その後数ヶ月使用。
  3. ATOMボードで使っていたSSDを新しいi7マザーへ接続。
  4. セーフモードとかでドライバを更新して、なんとか起動してオンライン状態に。
  5. システムのプロパティで確認するとライセンスが通った状態。
  6. i7マザーからSSDを外して、別のmSATA SSDを接続してWin10Proを新規インストール。
  7. セットアップ後、MSアカウントでログオン、オンラインにするとライセンスが通った状態となっていた。この時点で元のパーツはケースを除いて全く使用していない。

これでライセンスの移行が完了。ポイントは3~4のところで、ライセンスが通っている状態のパーツはSSDしかないのに、ライセンスはそれに乗っかった状態で新しいi7マザーに取り憑いたことになる。

世代も構成も個体も全く違うボードにSSDを載せ替えて再インストール無しに起動できたというあたりの運が良かった。MSアカウントに紐づいているというのも重要なのかもしれない。

無事Win10も正規ライセンスが引き継げたし、ATOM系と違って旧世代でもデスクトップ版i7だけあって操作感も上々。いい感じ。

CodeIQ Aランク攻略法

リクルート社が運営してる CodeIQ https://codeiq.jp/ がちょっとした暇つぶしになって面白い。

課題に沿って短いコード(プログラム)を入力すると、テストが実行されて結果を表示するというもの。まあリクルートなんで、その後いろいろ勧誘メッセージが届くが基本無視。

Rooms1

学校で習った程度からバリバリプログラミングができる人までレベルに応じた問題が用意されてて言語もある程度選べるのでいろんなスキルの人が遊べると思う。問題を解くとだいたい女キャラがツンデレにあしらってくれる。

Rooms

スキルチェックの難易度はC、B、A、Sランクとなっていて、C、Bランクは課題のアルゴリズムを普通に書いて結果が出れば〇がもらえるのだけど、A、Sランクを単純にコードに置き換えるだけだと実行時間のタイムアウトで×になる場合が多い。

Aランクに関しては攻略法があって、課題の入力を最初から100件くらいをExcelで表にしてやるとパターンが見えてくる。それをテーブルに落とし込んでインデックスを引くと高速に結果が得られる。あるいは単純な式に置き換えるとか。「解答送信の有無を問わず、模範解答のネタばれにつながるような各種行為、別人による不正解答は、固くお断り申し上げます。」っていう契約になっているので投稿したコードとかは当然ここでは掲載できない。

計算量の多い処理をテーブル引きにしたり単純な式に置き換えるのは高速化の常套手段なんで上級テクといってしまえばそうなんだけど、テーブルの内容や等価式を見つけ出すことと、それをコードで表現することが題意なんですよね。

これでリクルートしちゃう求人担当も「・・・まぁまぁだな。」

 

太陽を観てみた。

ここ数日、太陽フレアでホットな太陽を望遠鏡で観てみた。

フレアを発生させた付近の黒点は数日前にウェブで見た写真よりも端に移動しているように見える。

sun170909-0950-1

写真では分かりにくいが、端にあるおかげで白斑構造がよくわかる。

sun170909-0950

 

2010年ごろは太陽活動が休止ともいわれるほど黒点数も少なくなって、「太陽終了で氷河期!?」とバカな予測立ってたけれど、11年周期の脈動は今日も正常。

 

 

システムのバックアップを考える。

パソコンまわりの実働環境のバックアップをもっと楽に行いたくなった。

Creators Update以降、Windows 10付属のシステムイメージバックアップツールの「バックアップと復元 (Windows 7)」がまともに動かなくなった。データのバックアップは「ファイル履歴」機能は動いているが、システム自体に不調が出た場合にシステムイメージが無いと面倒なことになる。

家じゅうの4台のどのWindows10でも「バックアップと復元 (Windows 7)」を使ってバックアップ先をNASにしても外付けHDDにしても途中でバックアップが失敗する。Win10 1607では問題なかったのに。こんなWindows7な機能は切り捨てたいのだろう。これまではシステムバックアップはAOMEI Backupper Standardというフリーソフトでシステム構築時、大きな更新時に静的なイメージ作成を行っていたが静的なバックアップだとイメージが古くなっていくし、更新も面倒だし。それに中国製ソフトだからという理由で何となく不安。AOMEI製品の出来はバイドゥ製のソフトよりまともな感じはするけどね。

売り物のバックアップソフトは長い間Norton Ghost 2003を使っていたがたいがい古くなっていてWindows Vista以降は使いたくないし、最近はdebianのdd+gzipでごまかしたりしてたけど、そろそろ売り物のバックアップツールを買うことにした。

候補は次のもの

ライフボート LB バックアップワークス
一応国産ソフト。販売もメガソフト扱い。中身はParagonらしい。

Acronis Ture Image
アメリカ製。かなり以前からあるソフト。国内ではソースネクストが先月まで扱っていた。ソースネクストということで若干の不安があったが、それについては後述。

Paragon Hard Disk Manager、Drive Backup
ドイツ製。これも以前からあるし、LBシリーズのOEM元だったりする。以前NTFS for Macを使ったことがある程度。

対象外として

AOMEI Backupper Standard
中国製。ちょっと胡散臭い中華ソフトと違って結構しっかりしてる雰囲気だし、起動メディアを作ったらインストールは不要なので使いやすい。Ghost以降はだいぶ使ったし、正直言って個人使用ならこれで十分で実際そうだった。でも今回はインストールしての使用はしたくないので候補から外す。

EaseUS Todo Backup Home
中国製。USってつくからアメリカ?って思ってしまうが、サイトもDVDfabっぽいというか、中華風が漂う雰囲気。ちょっと使いたくないし、過去にも使ったことが無い。

結局この中からAcronis True ImageとParagon Hard Disk Managerを買った。本音をいうとBackup ExecLTO Ultiumが使いたいが、さすがに個人では無駄。

使った感とかは後日別エントリにて。

 

アナログオシロは終了しました。

以前から危惧していたが、ついに汎用のアナログオシロスコープが新品では手に入らなくなった。中古は豊富に出回っているので使おうと思えばいくらでも手に入るが、新品は学習用のものしか販売されていない。このスペックではアマ無線の変調モニタくらい(シャックの飾り)にしか使えない気がする。せめて20MHz以上の帯域と2現象と遅延掃引は欲しい。

MCP アナログオシロスコープ CQ5005 5MHz
https://www.mcpjapan.co/cq-series

秋月扱いのEZ-Digital 20MHzアナログ機もいつの間にかなくなってたし、テクシオとA&Dが100MHzの汎用を、岩通が1GHzの広帯域を最後まで作っていたがすべて販売終了。ショッピングサイトではA&Dの注文を受けているところもあるが専門の商社でないとドロップシッピングだから注文してもキャンセルだな。

仕事でもアナログオシロは使っていたが、今となっては高速な信号処理の前には必要の無いことなんだろう。当時はまだデジタルオシロがアナログオシロと共存していて、テクトロのアナログ200MHz機とデジタル2Gs/secのカラー表示な新鋭機を前に実時間サンプリングと等価サンプリングがごっちゃになっている上司と言い争って、自分の知識不足もあって「掃引1回分のデータだけじゃどうやっても等価サンプリングなんてできませんよ。」っていう言葉が出てこなかった想い出。

このブログでも管面をしばしば登場させているのはテクシオのCS-5400で100MHz 3現象 リードアウト付きのアナログオシロ。汎用アナログ機としては最終形態なので使えると(DPOを買うまでは)手放せない。中古で買うと2万円前後。このクラスだと汎用オシロとしてアマチュアが使うには十分すぎるスペックだけど、今だと3万円で買える中華デジタルオシロのがストレージとかFFTとかいろいろと便利機能がついててそっちのが良く見えたりするかも。

cs5400

 

ひと目でわかるVisual C# 2010 アプリケーション開発入門

cs2010appdev

ひと目でわかるVisual C# 2010 アプリケーション開発入門』を完了した。最新版は2013/2015版が出てるが、お安かったので2010版を買ってVisual Studio 2013で写経した。

この本を漢字一文字で表すと「」です。一言で表現すると「羊の皮をかぶった」です。表現を変えると「やさしく見えて実はスパルタ式な中級者向け良書」。

C#の文法詳細は無し、.NET Frameworkの説明は全体も詳細も無し、IDEの細かい使い方もなし、じゃんじゃんクラス作ってオブジェクト指向してるし、「できるシリーズ」のノリで読み始めちゃうとおそらく第四章あたりで挫折すると思う。MSDNプログラミングシリーズって書いてあるので、まあまあな内容だろうなーという予想はついてましたが。VC++でMFCのチュートリアルで最初に出てくるSCRIBBLEサンプルにめんくらったが、それに近い。

とりあえず最後まで通してサンプルが完成したら、その状態で動作を詳細に追いかけるとなんとなく分かってくる。本の内容では何をしているかの簡単な解説と操作というかコーディングの説明があるが、全体が組みあがってこないと動作が追いにくい。設計図に基づいてコーディングするスタイルは他の解説書ではなかなか見られないので貴重なんだけど、全体が組みあがらないと「何やってるかわかんないけど設計図どおり(書いてあるとおり)やったらできちゃった」状態になるし。

入門と言ってるけど、とりあえず最後まで通してやってることが理解できたら中級者名乗っていいんじゃないでしょうか。自分は最後のWPFんとこはあんまりまじめにやってないんで入門者のままですが。

あと、VC#2010対応なのでVisual C# 2013ではデリゲートをnewして作るのは今はダサい、とか若干の違いはあるものの、VC++2013ほどの違いは無くて安心。

本文中に説明が無いので自己学習しないと分からないが、サンプルは「MVVMパターン(Model View ViewModel)」の構造を使って構築されている。これが分かっているかどうかで全然違ってくる。動作の解説はとにかく、このキーワードが載っていないあたりがやっぱりだと思った。わかってないと特にCommandプロパティ(”Viewに関連付けられる、Logicがプロパティとして公開する自作のCommandクラスのオブジェクトで、イベントハンドラとUI更新ハンドラのdelegateを内部に保持するもの。”)あたりが意味不明。

新聞の広告に出ていた100倍ズーム双眼鏡

新聞の1面にある小さい広告欄に結構頻繁に出ている「格安」100倍ズーム双眼鏡セット。今回はテレマルシェ( http://shop.telemarche.co.jp/ )で、これだった。

ケンコー 100倍ズーム双眼鏡 特別3点セット
http://shop.telemarche.co.jp/shopdetail/000000001653/003/X/page1/order/

他にもよく見かけるナシカも取り揃えている。

NASHICA/ナシカ 100倍ズーム双眼鏡 3点セット
http://shop.telemarche.co.jp/shopdetail/000000001704/003/X/page1/order/

天体望遠鏡で有名だったミザールもある。

MIZAR/ミザール 100倍ズームコンパクト双眼鏡 7倍単眼鏡付き!
http://shop.telemarche.co.jp/shopdetail/000000001561/003/X/page1/order/

全部三脚と低倍率の双眼鏡・単眼鏡のセット品。

このショップサイトは光学機器をメインに扱っているだけあって、脚や低倍率のスコープを付けているのは、商品の特性を十分に知ったうえでのチョイスだろう。

こういった「普通」や「超高級」、「ニッチ」な双眼鏡も扱ってたりする様子。

ペンタックス10倍双眼鏡 アーバネットMCⅡ 10×25mm 9,800円
http://shop.telemarche.co.jp/shopdetail/003002000001/003/X/page1/order/

Kenko 防水双眼鏡 ウルトラビューOP 10×32 DH 7,980円
http://shop.telemarche.co.jp/shopdetail/012000000046/003/X/page1/order/

シュタイナー 双眼鏡 STEINER NIGHTHUNTER XP 8×56 168,700円
http://shop.telemarche.co.jp/shopdetail/012000000053/003/X/page2/order/

10万円超えなんて双眼鏡の世界では正直どうということもない。むしろ世の中にあまたある双眼鏡からこの商社が選んだ、逸般人向けとしか言いようのないニッチなチョイス。最高。

Vixen/ビクセン 星座観察用双眼鏡 SG2.1×42 24,000円
http://shop.telemarche.co.jp/shopdetail/000000001597/ct118/page1/order/

こんなにセンスがあるのに100倍ズーム双眼鏡を一番目立つ新聞広告に選ぶとは罪作りだな。

消費者としては100倍ズーム双眼鏡セットを10,000円ポッキリで買うよりも10倍双眼鏡を10,000円未満で買う方が圧倒的に良いことはまちがいない。それなのに良質な情報源であるべき新聞広告に載せるのはキャッチーな100倍ズーム双眼鏡セットであるあたりが悲しい。