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

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

メインフレーム(IBM z Systems)上で動く Linux である IBM LinuxONE の上で Node.js を動かすことに挑戦してみます。環境は IBM LinuxONE のクラウドサービスである IBM LinuxONE コミュニティクラウドの、RHEL 6.x のサーバーインスタンスを使うことにします。

なお IBM LinuxONE コミュニティクラウド上に RHEL 6.x サーバー環境を構築する手順についてはこちらを参照ください:
IBM LinuxONE コミュニティクラウドを使う(2017年1月版)


まず、そもそも LinuxONE 上に Node.js をインストールできるのか!? という問題があります。yum のリポジトリが用意されているわけではないし、ソースからビルドするのもライブラリが充分ではなかったりします。さて、どうするか・・・

実は Node.js に関しては IBM SDK for Node.js という形で、IBM から多くのプラットフォーム向けインストーラーバイナリが提供されています。LinuxONE もその対象プラットフォームの中の1つなのでした:
https://developer.ibm.com/node/sdk/


上記サイトからは x86 の Linux や Windows, Mac OS だけでなく、 AIX や Power Linux、そして LinuxONE 環境で動く Node.js の各バージョンがバイナリの形で提供されています。

実際には全てのバージョンが全ての環境で動作するわけではありません。例えば Node.js V6 の場合は以下のプラットフォームで動くものが提供されています。LinuxONE(IBM 64-bit z Systems) の RHEL の場合、7.x だけが動作環境に指定されています(他に SLES 12 と Ubuntu 16.04 で動きます。RHEL 6.x ではライブラリが足りないので動かないようです):
2017011601



逆に LinuxONE の RHEL 6.x で動く最も上位のバージョンを探してみると・・・ Node.js V1.2 であれば動きそうでした:
2017011602


というわけで、以下のサイトから LinuxONE(Linux on System z 64-bit) 向けの IBM SDK for Node.js V1.2 の最新版モジュールをダウンロードします。私がダウンロードした時点では ibm-1.2.0.17-node-v0.12.18-linux-s390x.bin というファイルがダウンロードできました。以下このファイルをダウンロードした前提で説明しますが、バージョンが異なっている場合は適宜読み替えてください:
https://developer.ibm.com/node/sdk/#v12

2017011603


ダウンロードしたファイルに管理者権限で実行権限を与え、実行します:
# chmod +x ibm-1.2.0.17-node-v0.12.18-linux-s390x.bin
# ./ibm-1.2.0.17-node-v0.12.18-linux-s390x.bin

後は画面の指示に従ってインストールするだけ。指定箇所があるとすればインストール先フォルダですが、私は /data/ibm/node というディレクトリを指定しました。

インストールが完了したら実行します。まずは IBM SDK for Node.js のバージョンを確認してみましょう:
# cd /data/ibm/node/bin
# ./node -v
v0.12.18

上記のように "v0.12.18" というバージョン名が表示されればインストール成功です! 後は /etc/bashrc などでパスを通しておけば、コマンドプロンプトから便利に使うことができるようになります:
# vi /etc/bashrc

    :
(以下の3行を最後に追加)
    :
# node.js
export NODEJS_HOME=/data/ibm/node
export PATH=$PATH:$NODEJS_HOME/bin

なお、npm(node package manager) コマンドも node と同じディレクトリに入っているので同様に使えるようになります。




ゆるキャラを画像で検索するサービスを作って公開してみました:
http://yuru.mybluemix.net/

まず最初に、自分はある程度ゆるキャラに詳しいと思っています。積極的な興味というよりは、マンホールに詳しくなっていると、最近はそのマンホールのデザインにゆるキャラが使われることが珍しくなくなってきたので、自然と(?)ゆるキャラにも詳しくなってしまうのでした。。
2017011500
 

さて、ゆるキャラに限らないのですが、イマドキ何かを調べようとした時にはまず『ググる』のが定番です。ただ、それは調べるためのキーワードが分かっている場合です。ゆるキャラの場合、名前が分かっていれば名前でググれば確実ですし、名前が分からなくても出身地とかが分かれば「ゆるキャラ 東京都」などで検索すればいくつか候補が見つかるのでそこから調べる方法もあります。

しかし問題は名前も出身地も分からず、検索するためのキーワードがない場合です。例えば目の前に着ぐるみそのゆるキャラ本体がいて、写真は撮れるんだけど、そのゆるキャラがなんという名前で、どこのゆるキャラで、どんな特徴を持っているのか、、、といった情報を調べる具体的な方法がなかったように感じていました。

といった背景もあり、「画像からゆるキャラを調べる」ことができるようなウェブサービスを作ってみた、という経緯です。いわゆる「類似画像検索」を行うため、コグニティブエンジンである IBM WatsonVisual Recognition API を使って実装してみました:
http://yuru.mybluemix.net/


使い方はシンプルで、ウェブサイトをPCかスマホのブラウザで開き、ファイル選択ボタンを押して、ローカルシステムやフォトライブラリ等から目的の画像を選択するだけです:
2017011501


PC の場合に限り、目的の画像ファイルを画面上部のこの辺りにドラッグ&ドロップしても構いません:
2017011502


例えばこの画像のゆるキャラを調べてみることにしました。まあ有名なヒトなので答はわかっているのですが、ちょっとトリッキーなアイテムも写っていて普段と違う画像になっているので、いいサンプルかな、と:
く


この画像を選択するか、画面内にドラッグ&ドロップすると画面が暗転して検索が始まります:
2017011503


暗転から戻ると、検索結果として候補キャラが画面下部に表示されているはずです。最大で100件表示されます:
2017011504


今回の画像の場合、下の方にそれっぽいのが見つかりました:
2017011505


該当する結果の画像をクリックすると、そのゆるキャラの情報がポップアップします。ご存知「くまモン」でした。なお PC であればマウスオーバーでも表示されます:
2017011506


まだまだ学習量が充分ではなく、第一候補となることはまだ珍しいとか、(着ぐるみの写真ではなく)絵の場合には精度が落ちるとか、横から写した画像に弱いとか、背景画像に左右されることが多いとか、まだまだ問題はありますが、一応動くものが作れたと思ってます。

実際の用途としてはある程度いけるかな、と思ってます。もちろん精度高く検索できることが理想ですが、上記で書いたように「名前が分かれば色々調べる方法はあるんだけど、肝心の名前が出てこない」のを解決するツールとして考えると、検索結果の候補の中に含まれていれば、それはそれでオッケーかな、と。


なお、今回のサービスは Visual Recognition の中では現時点でベータ版の /v3/collections/ で始まる API を使って開発しています。今後の仕様変更などがあった場合にサービスがどうなるか何とも言えませんが、なるべく対応させていく予定です。合わせてもう少し学習データの量を増やして検索精度を上げられないか、がんばってみます。


CentOS や RHEL で便利に利用されているパッケージ管理コマンドの "yum" 。このコマンドの便利な使い方の1つが groupinstall と呼ばれる機能です。ある環境を用意しようとした際に複数のパッケージを導入しないといけない場合、その複数のパッケージを1つの「グループパッケージ」のまとまりとみなし、グループパッケージ1つを指定して導入することで環境構築が可能になります。

個人的によく使う例で紹介すると、GUI のデスクトップ環境であれば "Desktop"、日本語サポート環境であれば "Japanese Support" などです。それぞれ以下のコマンドで導入できます:
(デスクトップ環境)
# yum groupinstall "Desktop"
(日本語サポート環境) # yum groupinstall "Japanese Support"

上記のようにグループパッケージを指定するだけでまとまったパッケージを導入できるのは便利なのですが、ではこれらのコマンドで実際にどのようなパッケージが導入されるのかを調べる方法はあるでしょうか? その答が yum の groupinfo コマンドです。例えば "Desktop" で何が導入されるのかを確認するには以下のようなコマンドを実行します(黒字が入力、青字が出力結果です):
# yum groupinfo "Desktop"
  :
  :
グループ: デスクトップ
 説明: シンクライアントとして使用できる最低限のデスクトップ
 強制的なパッケージ:
   NetworkManager
   NetworkManager-gnome
   alsa-plugins-pulseaudio
   at-spi
   control-center
   dbus
   gdm
   gdm-user-switch-applet
   gnome-panel
   gnome-power-manager
   gnome-screensaver
   gnome-session
   gnome-terminal
   gvfs-archive
   gvfs-fuse
   gvfs-smb
   metacity
   nautilus
   notification-daemon
   polkit-gnome
   xdg-user-dirs-gtk
   yelp
 標準パッケージ:
   control-center-extra
   eog
   gdm-plugin-fingerprint
   gnome-applets
   gnome-media
   gnome-packagekit
   gnome-vfs2-smb
   gok
   openssh-askpass
   orca
   pulseaudio-module-gconf
   pulseaudio-module-x11
   vino
 オプション パッケージ:
   sabayon-apply
   tigervnc-server
   xguest


同様に "Japanese Support" の場合は以下のようになりました:
# yum groupinfo "Japanese Support"
  :
  :
グループ: 日本語のサポート
 Language: ja
 標準パッケージ:
   ipa-gothic-fonts
   ipa-mincho-fonts
   ipa-pgothic-fonts
   ipa-pmincho-fonts
   vlgothic-fonts
   vlgothic-p-fonts
 条件付パッケージ:
   autocorr-ja
   eclipse-nls-ja
   ibus-anthy
   kde-i18n-Japanese
   kde-l10n-Japanese
   libreoffice-langpack-ja
   man-pages-ja
   poppler-data


これらの結果の中の「強制的パッケージ」と「標準パッケージ」が groupinstall コマンドによって導入されます。また「オプションパッケージ」や「条件付きパッケージ」が導入可能になります。

滅多にはないのですが、CentOS/RHEL の環境によっては "yum groupinstall" コマンドが使えないこともあります。その場合はここに記載した情報を使って "yum install" で同様の環境構築が可能になります。

※ここに記載されていないグループパッケージを導入する場合は、"yum groupinfo" の使える環境でパッケージを確認し、そこにリストされたパッケージを "yum install" する、という形になります。


このページのトップヘ