まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

タグ:windows

Java のアプリ開発をしていて、こんな実行時エラーに遭遇することがあります:
java.lang.UnsatisfiedLinkError: C:\IBM\Notes\nlsxbe.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform


最近は Windows といえば 64bit 版が普通になってきました(よね?)。自分の開発環境も 64bit 版 Windows で、Java 開発環境も(JDK も JRE も Eclipse も)64bit 版を使っています。ここまでは珍しくないと思っています。

しかし開発するアプリケーションによっては外部ライブラリ(JAR ファイル)を指定する必要があり、その JAR ファイルが 32bit のネイティブライブラリを使っていたりするなど、64bit の JDK で 32bit 前提のコードを実行しなければならなくなった場合に上記のようなエラーが発生するのでした。

典型例としては、IBM Notes の Java API を使ったアプリケーション開発が挙げられます。2017/Oct/01 現在、Windows 版の IBM Notes は 32bit 版しか存在していません。Java で IBM Notes の API を実行するには IBM Notes 同梱の Notes.jar 他をインポートして使う必要がありますが、この Notes.jar は 32bit の DLL を参照するため、64bit Java から実行すると上記のエラーが発生します。


エラーの原因が分かったところで、どのように回避すればいいでしょうか? これも解決策としてはシンプルで 32bit Java(JRE) から実行すればよいことになります。32bit JRE をダウンロードして実行してもいいですが、上記のような IBM Notes の JAR を使った場合であれば、IBM Notes が使っている Java をそのまま指定して実行すればよいことになります。

ちとややこしいのが Eclipse のような IDE を使っている場合の指定方法です。まず Java - Installed JREs の中に Standard VM として Notes Java を追加しておく必要があります。Notes Java は(ノーツをインストールしたディレクトリ)/jvm にあるので、このディレクトリを指定して追加します:
2017100101


そして Eclipse の Java プロジェクトの中で JRE System Library として、上記で設定した Notes Java を指定します。これでこのプロジェクト内で作成したアプリを実行する際には Notes Java 内の java.exe が利用されるようになるので、上記のエラーが回避できるようになります:
2017100102



 

久しぶりの LotusScript ネタです。LotusScript は IBM ノーツ/ドミノのカスタマイズに使えるマクロ言語です。内容そのものはノーツじゃなくても(VBA でエクセルなどにも)応用できると思いますが、Windows 前提です。

Windows OS に標準搭載されている ServerXMLHTTP オブジェクトをノーツの LotusScript から使って、LotusScript で WEB API っぽいことを実現してみました。

まず ServerXMLHTTP オブジェクトについて。MSDN によるとこんなものです:
https://msdn.microsoft.com/ja-jp/library/ms762278(v=vs.85).aspx

簡単に言えば「HTTP クライアントライブラリとして使える ActiveX オブジェクト」です。このオブジェクトをインスタンス化すれば、比較的簡単に HTTP クライアントプログラムが作れます。特にノーツのマクロ言語である LotusScript はソケット通信とかネットワークプログラミングに若干弱いところがあるので、このオブジェクトを外部利用して WEB API を使ってみよう、という試みです。

例えばこんな感じ。開発環境であるドミノデザイナーを使ってノーツデータベースのエージェントを LotusScript で作り、Initialize サブルーチンに以下のような内容を記載します(エージェント名は ServerXMLHTTP としました):
Sub Initialize
  Dim obj As Variant

  Set obj = CreateObject( "Msxml2.ServerXMLHTTP.6.0" )
  Call obj.open( "GET", "http://ibm.com/", False )
  Call obj.send()
  MsgBox obj.responseText
End Sub

内容がシンプルなのでなんとなく理解できると思いますが、簡単に解説すると CreateObject を使って ServerXMLHTTP オブジェクトインタンスを生成し、"http://ibm.com/" を HTTP GET して、その内容をメッセージボックスで表示する、というものです。要するに http://ibm.com/ の HTML ソースコードを画面に表示する、というものです。

またエージェントのプロパティとして、実行時のトリガーは「イベント」で「アクションメニューの選択」、対象は「データベースの全ての文書」に設定しておきます。もちろん実行内容によってはここを変更する必要がでてきますが、今回の例ではこの設定でメニューから選択して実行できるようにしました:
2017081001


改めてこのデータベースをノーツで開くと、メニューから作成したエージェント(図では "ServerXMLHTTP")が選択できるようになっているはずです。これを選択して実行すると・・・
2017081002


こんな感じのダイアログボックスが表示され、中に http://ibm.com/ の HTML ソースコードが表示されているはずです:
2017081003


いかがでしょう。上記例では HTTP GET の例を紹介しましたが、この ServerXMLHTTP オブジェクトを使うと、POST など他のメソッドを指定することもできるし、もちろん送信データを指定することもできます。その辺りの詳しい話は公式ドキュメントを参照ください:
https://msdn.microsoft.com/ja-jp/library/ms762278(v=vs.85).aspx


HTTP クライアントがここまで簡単に使えると、各種 Web API が使えるようになるので、IBM Bluemix のワトソン API をノーツクライアントから(それもフロントエンドから)直接実行する、なんてことも可能になると思っています(余談ですが以前に Java を使って、ノーツのバックエンドからワトソン API を使う、という内容を紹介したことがあります。その記事はこちら)。


ノーツデータを広く応用・活用する際に使えそうなライブラリです。

クラウドファンディング Indiegogo で申し込んで以来、ずっと楽しみにしていた GPD Pocket が届きました!まだ2日程度しか使っていませんが、さっそくレビューを書いてみます。ちなみにこのレビューエントリは GPD Pocket (と IKEA の無線LAN)で書いています。

GPD Pocket はわずか 480g の超小型 PC ですが、Intel Atom z8759 CPU を駆り、8GB メモリと 128GB eMMC(Surface Pro 3 は4GB+128GB SSD で 622g)を搭載しており、エントリーモデルとはいえないスペックを誇っています。クラウドファンディングではこれで $399 でした(量産後も $599 予定らしいので超お買い得だと思ってます):
2017062501


大きさは横18cm、縦10.6cm、厚さ1.85cm。iPhone6 と比較するとこんな感じです:
IMG_0937


いくつか注文していたのですが、届いたのは最初に注文した Windows 10 Home 搭載版です。Ubuntu を選択することもできます(これも注文しているので、届いたらいずれ)。とりあえず初期セットアップして、Windows Update して、Defender を有効にして、いくつかの定番ソフト(Chrome, 7Zip, Teraterm, WinSCP, Paint.Net, サクラエディタあたり)を導入して使っています。(ディスククリーンアップとかはしていない)この時点で 99.2 GB の空きがあります:
2017062501


キーボードは結構しっかり作られています(英語キーボード)。打鍵感もあって、サイズの割に両手で打ちやすい印象。ただ、かなり特殊な配列になっているので、アルファベットや数字以外の特殊キー(カッコとかーとか)はまだかなりの頻度で打ち間違えます。今はまだウェブやSNS、ブログ編集がメインで本格的なプログラミング目的では使ってないのですが、そうなってくるともう少し慣れが必要かも。ちなみに英語<->日本語の切り替えは Alt + `(ESC の右横)で可能です:
IMG_0933


タッチパッドはトラックポイント(!)です。しかも僕がメイン機として公私にわたって愛用している ThinkPad と互換の感圧式トラックポイントで、スティックそのものにも互換性がありました(写真は僕が持っていた ThinkPad 用の赤いスティックを GPD Pocket に差して使っている様子です):
IMG_0934



外部インターフェースはこんな感じ。右からUSB 3.0、オーディオ、micro HDMI、USB C(電源)。これらに加えて無線LANとBluetoothを搭載しています。あー、micro HDMI の変換アダプタ買っとこ:



2日ほどしか使ってないのですが、「期待をはるかに超える出来」だと思います。実はこれまでセカンド機には Portabook を使っていました(ネタで買ったら意外と使いやすかったパターン)。今でもキーボードの入力のしやすさはメイン機であるThinkPad と比較しても劣らないと思っているのですが、いかんせん基本スペックの低さがネックになり、使いにくさを感じることが多くあるのも事実です。また GPD が出している別のミニ PC : GPD Win も所有しているのですが、こちらはどちらかというと「Windows の動くゲーム機」で、Windows としての使い勝手は必ずしもいいものではありませんでした。その点 GPD Pocket は編集機能を多く使う人にとっても使いやすいし、充分すぎるスペックが搭載された魅力的な PC だと思っています。


(2017/Jul/01 追記 続編を書きました)
GPD Pocket に ThinkPad のトラックポイントスティックを試す

この週末に猛威を振るった(振るう?)ランサムウェア "WannaCry" 。影響範囲が大きく、公式なサポートが終了した Windows XP/Vista 向けにも対策パッチが提供される事態になりました。サポートが終了しているとはいえ、使われていることは事実だし、その状態で使われた結果(被害者ではなく)加害者側になってしまう可能性があることで例外的に対策パッチが提供される判断に至ったのだと思います:
http://thehackernews.com/2017/05/wannacry-ransomware-windows.html


私自身は Windows XP/Vista を普段使っているわけではないのですが、仮想デスクトップ環境として「冷凍保存」しています。まあ懐古趣味みたいなものです(ちなみに Windows 2000 や OS/2、 PC-DOS 環境も冷凍保存してますw)。この環境を一時的に解凍してパッチを適用してみたので、その手順を紹介します。

まず Windows XP を起動し、Windows Update を実行・・・してもサポートが終了しているので何もできません。そりゃそうだ。 今回のパッチを XP や Vista で適用するには Microsoft Update カタログから OS 毎のパッチを直接ダウンロードして実行する、という手順を取る必要があります。

というわけで、XP で InternetExplorer を起動し、Microsoft Update カタログ(catalog.update.microsoft.com)にアクセスし、今回の対策対象である "MS17-010" を検索します:
2017051401


すると OS 毎の検索結果が見つかってリスト表示されます:
2017051402


今回は Windows XP 用のパッチが目的なので、"Windows XP" と書かれたものを探して「追加」します(僕が確認した時の日付は 2017/05/13 でした):
2017051403


で、これをダウンロードして実行してパッチを適用します:
2017051404


最後に再起動して適用完了、です。



(参考)
世界中で感染が拡大中のランサムウェアに悪用されているMicrosoft製品の脆弱性対策について(IPA プレスリリース)
マイクロソフト セキュリティ情報 MS17-010
ランサムウェア WannaCrypt 攻撃に関するお客様ガイダンス(Microsoft TechNet)




 

Windows 環境向けの Raspberry Pi エミュレータ(Raspbian エミュレータと呼ぶべき?)を使ってみました。

準備は簡単。パッケージが用意されているので、最新ファイルをダウンロードして展開するだけです:
https://sourceforge.net/projects/rpiqemuwindows/


最新ファイル(2016/Jul/18 時点では qemu.zip)をダウンロード&展開できたら、実行は run.bat ファイルを実行するだけです(QEMU上で動く、ってことだと思う):
2016071801


これだけでラズパイの起動が開始します。CPU は1つだけなんですね。ちなみにこの画面をアクティブにするとマウスコントロールが奪われてしまうので、他のウィンドウを操作する場合は Ctrl+ALT でマウス制御を戻してください:
2016071802


そしてしばらく待つと(ラズパイを触ったことがある人ならお馴染みの)初期設定画面が起動します:
2016071803


上記メニューの update を選んでシステムのアップデートを行うと自動的にテキスト端末画面に戻ります。ここで普通にコマンドを実行しての利用もできますが、ここで "startx" と入力すると X Window のデスクトップを起動することができます:
2016071801


こんな感じ。Scratch も使えそうです:
2016071802



ラズパイに興味あるけど、まだ持ってなくて、試しに操作を体験してみたい、という人向け・・・かな? OS イメージを SD カードに書き込んで・・・とか、余計な意識なしにとりあえず動く環境が使えるので、気分は味わえると思います。

このページのトップヘ