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

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

2017/07

「PC 向けのラズベリーパイ環境」である PIXEL for PC を日本語化して、日本語が使えるようにします。PIXEL for PC のインストールは環境しているものとします。必要な場合はこちらのエントリを参照してください:
PIXEL for PC をインストールする


まずは PIXEL のロケールを変更します。メニューから Preferences - Raspberry Pi Configuration を選びます:
2017073001


"Raspberry Pi Configuration" ダイアログが表示されるので、"Localisation" タブを選択し、"Locale", "Timezone", "Keyboard", "WiFi Country" をそれぞれ設定します:
2017073002


ちなみに自分の場合は全て日本で日本語環境で利用する前提でこのようにしました。まず Locale は ja_JP の UTF-8 を指定:
2017073003


Timezone は Asia/Tokyo を指定:
2017073004


Keyboard は Japan - Japanese を指定:
2017073005


そして WiFi Country は Japan を指定しました。英語環境で使いたい場合や日本以外のタイムゾーンで使うケースなどはそれぞれ読み替えてください:
2017073006


最後の OK ボタンをクリックした時に PIXEL を再起動をするよう促されるので、いったん再起動します。再起動すると設定したロケール(上記の場合は日本語)が有効になり、メニューが日本語されたり、時計が日本時間に設定されます:
2017073001


PIXEL にはデフォルトでは日本語入力機能も日本語フォントも(一部しか)導入されていません。これらをまとめて導入します。LXTerminal を起動して以下のコマンドを実行します(赤字はコメント):
$ sudo apt install uim uim-mozc  日本語入力機能
$ sudo apt-get install ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big fonts-vlgothic  日本語フォント

導入後に PIXEL を再起動すると日本語入力が有効になります。なお日本語英語切り替えは Shift + SPACE で行います:
2017073002


 PIXEL でも日本語入力が可能になりました。

2017年6月の Raspbian のアップデートに合わせて PIXEL for PC(PC / Mac 用の Raspbian、わかりやすく言うと「パソコン版のラズベリーパイ」)も新しくなりました。以前のものは専用の Live CD だけが提供されていたのですが、現在のバージョンではハードディスク(仮想ディスク)へのインストールができるようになりました。「デスクトップ Linux 環境推進派」として見逃せないこの環境を早速ためしてみました:
2017073001


まず、今回導入したマシンは以下のようなスペックの仮想マシンです。おそらく実機でも問題ない、はず:
 ハイパーバイザー: KVM on CentOS 6
 仮想CPU: 1
 仮想メモリ: 1GB
 仮想ディスク: 10GB

まず最新の PIXEL for PC をダウンロードします。僕が今回使ったのはこの 2017/06/22 版の iso イメージです(2GB ほどあります):
http://downloads.raspberrypi.org/rpd_x86/images/rpd_x86-2017-06-23/2017-06-22-rpd-x86-jessie.iso


このイメージを使って仮想マシンを作成して起動します。実機の場合は iso を DVD に焼いて、その DVD をドライブに入れて起動することだと読み替えてください。なお(後でわかることですが)PIXEL for PC は Debian 8 ベースなので、仮想マシン作成時の OS の種類とバージョンは Debian 8 に相当するものを指定しています:
2017073002


なお作成時のオプションとして、(今回は)アーキテクチャに 64bit 版を選択しました。このあたりは実際に導入する環境に合わせてください:
2017073003


そんなこんなで ISO から起動します。最初に表示されるブートメニューでは "Graphical install" を選択しました:
2017073004


GUI インストーラーが起動します(この右上に "Debian 8" って表示されてますね)。最初にキーボードの種類を選択します。ここでは日本簿キーボードである "Japanese" を選択しました。選択後、 "Continue" で次の画面へ:
2017073001


ここで ISO をイメージを探して、そこから色々ロードして、・・・と少し待ちます:
2017073002


ここからが本格的なインストールオプションの指定になります。まずはインストール先ディスクとボリュームを指定します。僕はデフォルトの "use entire disk" を選択しましたが、LVM(論理ボリュームマネージャー)や暗号化 LVM を使う場合は適宜指定します。終わったら "Continue" :
2017073003


次にインストール先ディスクの選択を行います。この例ではディスクは1台しかないので、その1台のディスクを選択して "Continue" :
2017073004


選択したディスクのパーティショニングを指定します。ここでは(ディスクが大きくもないので)デフォルトの "All files in one partition"(全ファイルを1つのパーティションにコピー)を選択しています。そして "Continue":
2017073005


スワップ領域と合わせたパーティショニングの情報が表示されます。この内容で問題がなければ "Finish partitioning and write changes to disk" を選択して "Continue":
2017073006


ディスクに変更の書込みを行う直前の確認画面です。変更を行う場合は "Yes" を選択して "Continue":
2017073007


この後はパーティションのフォーマットが行われ・・・:
2017073008


インストール(ファイルコピー)が開始されます。環境にもよりますが、しばらく(数十分程度)待ちます:
2017073009


このような(GRUB がなんたら・・)画面になればファイルコピー完了はもうすぐです:
2017073001


ファイルコピーが済んだら最後に GRUB のインストールを行います。この画面では "Yes" を選択して "Continue" :
2017073002


GRUB のインストール先ディスクを指定します。今回は1つしかないので、その1つを選択して "Continue":
2017073003


最後のインストール作業が行われ・・・:
2017073004


この画面になったら再起動前にドライブに挿入している DVD(iso)を取り外します。iso の場合は仮想ドライブから iso ファイルを切断します。そして最後の "Continue" :
2017073005


最後に後処理が行われ、自動的に再起動がかかります:
2017073006


PIXEL の再起動がかかった直後はこんな画面になります:
2017073001


その後、おなじみのラズベリーアイコンが表示され・・・:
2017073002


PIXEL のデスクトップ画面が起動します! あのラズベリーパイではなく、(仮想)PC 上で Raspbian OS が起動しました。もちろん Raspbian OS 同様に利用できます:
2017073003


PIXEL でも標準で Scatch などは導入済みですぐに使い始めることができます。一方で Node-RED などは別途導入が必要なので、全く同じ構成というわけではなさそうです:
2017073004


もともと Debian っぽく使えていた Raspbian ですが、マシンの基本スペックが高いぶんだけ PIXEL の方が快適に感じるかもしれません。日本語化も含めたインストール作業後の諸設定はまた別途。


メインフレーム大好きなオッサンの皆様、お疲れ様です&いつもお世話になっております。


メインフレームといえば 3270 エミュレータです。知らない人のために言っておくと「さんにーななまるえみゅれーた」と読みます。メインフレームと呼ばれる大型ホストコンピュータとのコミュニケーションに使われる表示端末 "IBM 3270" と、そのソフトウェアエミュレーターを指して使われます。

この 3270 エミュレータは、IBM が提供する(上記リンク先の)PCOMM(「ぴーこむ」以下省略)を始め、多くのソフトウェアが提供されました。そのいくつかはいわゆるオープンソースソフトウェアで、その代表的なものの1つが "x3270" だと思っています:
http://x3270.bgp.nu/

2017072701


x3270 はもともと Unix/Linux 向けの X Windows System 上で動作する 3270 エミュレータとして開発され、のちに CUI のターミナルや Windows/Mac OS でも動作するよう移植されました。現在でもソースコードやバイナリが提供されています。

この x3270(の CUI 向けアプリ)をラズパイのターミナル上で動くように導入するのが今回の目的です。さすがにラズパイ向けのバイナリは提供されていないので、ソースコードをダウンロードしてビルドします。といっても基本的にはターミナルを開いて以下の通りに実行するだけです:
$ cd /tmp
$ mkdir 3270
$ cd 3270
$ wget http://downloads.sourceforge.net/project/x3270/x3270/3.3.14ga11/suite3270-3.3.14ga11-src.tgz
$ tar xzvf suite3270-3.3.14ga11-src.tgz
$ cd c3270-3.3
$ ./configure && make
$ sudo make install

これで c3270 というコマンドが使えるようになったはずです:
$ c3270
c3270 v3.3.14ga11 Thu Jul 27 05:59:44 UTC 2017 pi

Copyright 1989-2013 by Paul Mattes, GTRC and others.
Type 'show copyright' for full copyright information.
Type 'help' for help information.

c3270>

"help" と入力すると全体ヘルプが、"help XXXX" で XXXX という項目のヘルプが表示されます。c3270 の終了(ターミナルに戻る)は "quit" です:
c3270> help
  help all           all commands
  help 3270          3270 commands
  help interactive   interactive (command-prompt) commands
  help      help for one 
  help options       command-line options
  help scripting     scripting commands
  help file-transfer file transfer options

c3270> quit
$

実際に接続先となるメインフレーム(ホストコンピュータ)のアカウントを所有している場合はサーバー名(IPアドレス)とポート番号(23)を指定して起動&接続します(ポート番号が 23 の場合は省略可能です):
$ c3270 192.XXX.XXX.XXX:23

接続に成功すると、以下のような z/OS 画面が表示されます:
2017072801



さて、そもそも「なんで今さら 3270 ??」と思う人もいると思いますが、実はいま学生を対象に IBM 主催のメインフレームコンテスト、その名も
 MASTER THE MAINFRAME CONTEST 2017
 IBM メインフレームコンテスト 2017

が開催されています:
https://www.ibm.com/it-infrastructure/jp-ja/masterthemainframe/

2017072802


このコンテストの参加者へはクラウド上の IBM メインフレーム(z13)環境にアクセスするアカウントが提供され、Windows や Mac、Linux といった各自の環境からメインフレームに接続して、与えられた課題をクリアしていく、というものです。(ある意味)今では貴重になったメインフレームの世界を体験しつつ、仮想化の基礎となったメインフレーム技術スキルを身に付けていくことを目的としています。

このコンテストに参加する上でのプログラミングスキルは特に必要ではありませんが、接続環境は自分で用意する必要があります。「Windows、Mac、Linux といった環境では物足りない!」というアピールをしたい変態ギークな皆様は是非ここで紹介したラズパイ環境からのアクセスに挑戦してみてください。

なお、ラズパイから(というよりも、ここで紹介した c3270 を使って)メインフレームホストにアクセスする場合の注意点があります。IBM がコンテスト用に用意したガイドでは Windows, Mac, Linux という3種類のいずれかの GUI (x3270)環境から利用することを前提としたガイドが提供されています。一方で、ここで紹介したような CUI(c3270)環境から利用する場合、一部のキーバインドが正しく動作しないことが分かっています。例えば z/OS の画面内で「1つ前に戻る」には F3 キーを押すようガイドされているのですが、c3270 では F3 が正しくバインドされていないため、期待通りの結果にはなりません。

c3270 で1つ前の画面に戻るには F3 ではなく、コマンドラインに "Exit" と入力します。これで F3 と同じコマンドが実行され、1つ前の画面に戻ることができます:
2017072804



たまにはこういうブログネタも。

Node.js でのスクレイピングに挑戦したことがなかったのでやってみました。

一般的にスクレイピングでは http でコンテンツ文字列を取得して、正規表現などを用いて取得したコンテンツ文字列から指定のパターンに合致する箇所のテキストを取得します。今回はその部分を手でガリガリ、、ではなく、この cheerio-httpcli モジュールを使ってスクレイピングに挑戦しました:
https://www.npmjs.com/package/cheerio-httpcli

2017072600


まずはこの cheerio-httpcli モジュールを npm でインストールします:
$ npm install cheerio-httpcli

Node.js のコード内で cheerio-httpcli モジュールを利用する場合は以下のような記述を行います:
var client = require( 'cheerio-httpcli' );
 :

var url = 'https://www.google.com/finance/converter?a=1&from=EUR&to=JPY';
client.fetch( url, {}, function( err, $, res ){
  $('.bld').each( function(){
    text = $(this).text;
       :
  });
});


実はこれだけでテキストのフェッチとスクレイピングの両方が実現できてしまっています。URL を指定してその HTML テキストをフェッチします。その結果は $ に入るので、フェッチの結果は jQuery の DOM のように扱うことができます。上例では取得した HTML テキスト内において bld クラスを適用した要素内のテキスト(<xxx class="bld">XXXXX</xxx> となっている箇所の XXXXX 部分)を取得して、変数 text に代入しています。

上記のサンプルで紹介している URL: https://www.google.com/finance/converter?a=1&from=EUR&to=JPY はグーグルの通貨変換ページです(このパラメータの場合、ユーロ(EUR)から日本円(JPY)への変換レートを取得します)。この URL にアクセスすると、以下のような HTML が返って来ます:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  :
  :
</div>
 
<div id=currency_converter_result>1 EUR = <span class=bld>130.0360 JPY</span>
<input type=submit value="Convert">
</div>
<input type=hidden name=meta value=ei=E1N4WYisKN6O0QS8v4OoBA>
</form>
</body>
</div>
</html>

このようにレート変換した結果は上記赤字部分になるので、ここを取得できればよいことになります。したがって上述のように bld クラスを指定した箇所のテキスト値をスクレイピングすれば(上記の場合であれば "130.0360 JPY" という文字列が)変数 text に代入できる、ということになります。

jQuery スタイルで使えるのがとっても便利!


オラクルが、正規ライセンス購入前の勉強目的で試しにソフトウェアを利用することのできるライセンス『OTN(Oracle Technology Network)開発者ライセンス』を提供していることを今更ながら知りました:
自分用Oracle DBを「無償で」作ろう!「OTN開発者ライセンス」

※同じく無料版である IBM Db2 Express-C みたいな位置付け?と思っていたのですが、ちと違いそう。Express-C は機能としては Express Edition に近いのですが、開発者エディションというわけではありません。「サポートなしで本番利用可」なのが IBM Db2 Express-C であり、この辺りが違いと言えそうです。

※むしろ IBM Db2 Developer Community Edition の位置付けが近い感じ。


利用するには Oracle アカウントの登録が必要ですが、登録自体は無料でした。各種オラクル製品がダウンロード可能で、オラクルDBはもちろん、Java や MySQL などの製品版も対象に含まれていました。利用目的は制限されていますが、仕様、検証、開発、テストに使うことはできるとのこと。早速使ってみました。なんと 20年以上ぶりにオラクル DB をインストールしてみた顛末です(笑)。


まずは OTN ページにアクセスして "Sign In" します:
2017072101


自分の OTN ID とパスワードを指定して「サインイン」します:
2017072102


サインイン後、"Software Downloads" をクリックしてダウンロードページに移動します:
20170721025


ダウンロードページをスクロールすると、ダウンロード対象の製品一覧が見つかります。オラクルDBも新しいエディションである 12c の Enterprise/Standard Edition 含めてダウンロードできますが、自分は比較的軽量な方がいいので 11g の Express Edition を選択しました:
2017072103


オラクルDB Express 11g2 のダウンロードページです。License Agreement にチェックを入れます:
2017072104


そして対象プラットフォーム(下図は Linux x64 を選択。他に Windows 32/64 bit 版を選択可)を選ぶとダウンロードが開始されます:
2017072105


ダウンロードできれば後はインストールするだけですが、Linux 版のオラクルDB Express 11g2 の場合、インストールするにはメモリが 2GB 必要です(足りないとインストーラーが止まります)。充分なスワップメモリが確保されていない環境の場合は動的にスワップファイルを増やす必要があります。その方法や手順は以下を参照ください:
Linux の SWAP 領域を増やす


改めて Linux 版の場合は zip された rpm ファイルがダウンロードされます。なので 64bit Linux 上でダウンロードしたファイルを unzip し、Disk1 フォルダ以下にある rpm ファイルを指定してインストールします:
# unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip
# cd Disk1
# rpm -ivh oracle-xe-11.2.0-1.0.x86_64.rpm
準備中...                ########################################### [100%]
   1:oracle-xe              ########################################### [100%]
Executing post-install steps...
You must run '/etc/init.d/oracle-xe configure' as the root user to configure the database.


「root で /etc/init.d/oracle-xe configure を実行しろ」というメッセージが表示されているので、このコマンドを実行して初期セットアップを実行します。セットアップ時の選択肢は全てデフォルトのままで、明示的に指定したのはパスワード(と確認パスワード)だけです:
# /etc/init.d/oracle-xe configure

Oracle Database 11g Express Edition Configuration
-------------------------------------------------
This will configure on-boot properties of Oracle Database 11g Express
Edition.  The following questions will determine whether the database should
be starting upon system boot, the ports it will use, and the passwords that
will be used for database accounts.  Press <enter> to accept the defaults.
Ctrl-C will abort.

Specify the HTTP port that will be used for Oracle Application Express [8080]:

Specify a port that will be used for the database listener [1521]:

Specify a password to be used for database accounts.  Note that the same
password will be used for SYS and SYSTEM.  Oracle recommends the use of
different passwords for each database account.  This can be done after
initial configuration: (パスワード指定)
Confirm the password: (確認パスワード指定)

Do you want Oracle Database 11g Express Edition to be started on boot (y/n) [y]:

Starting Oracle Net Listener...Done
Configuring database...Done
Starting Oracle Database 11g Express Edition instance...Done
Installation completed successfully.


これでセットアップ完了、、のはず、ですが、この後の作業を便利に行うための追加作業をしておきます。オラクル DB をコマンドラインから操作する場合に便利な環境変数が /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh(および /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.csh)コマンドによって設定されます。なので、/etc/bashrc などに以下の1行を追加して、対象ユーザーがログインする際にこの環境変数設定が行われるようにしておきます:
. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh

改めてログインし直して(この環境変数設定を有効にして)、SQL*Plus を実行し、system DB に対して SQL を実行してみます:
# sqlplus system

SQL*Plus: Release 11.2.0.2.0 Production on 土 7月 22 01:54:50 2017

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

パスワードを入力してください:


Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
に接続されました。
SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE    11.2.0.2.0      Production
TNS for Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production

SQL>

動きましたー! 懐かしい(Solaris の前の)SunOS 以来のオラクル DB インストール体験でした。いやあ、再びオラクルをインストールする日が来るとは・・・

このページのトップヘ