UbuntuにOracle 12cを入れようとして文字化けしたOUIとDBCAを日本語にする

仕事でVirtualBoxに立てたUbuntu(14.10)にOracle 12c(12.1.0.2.0)を入れることになったのですが、
インストール完了までは鬼のようにハマりどころがありました。


今回はインストーラーのOUI(Oracle Univeral Installer)と
データベースを作成するツールのDBCA(Database Configuration Assistant)が
以下のようにトウフな感じに文字化けしたので、その対処法を紹介します。


OUI(Oracle Univeral Installer)


DBCA(Database Configuration Assistant)

OUIの文字化けの直し方

OracleをインストールするときはJREが必要になります。
インストーラーにはJavaが含まれているのですが実はこれが罠で、
Oracle付属のJREを指定すると文字化けを起こしますw


理由はおそらくOracle製品に含まれているJREの日本語パッケージが、
Ubuntuに合っていないためだと思われます。


対処法はOpenJDKをインストールして、
インストーラーのオプションにOpenJDKのパスを指定して実行します。
手順は以下になります。

1. OpenJDKをインストールします
sudo apt-get install default-jre
2. OUIに「-jreLoc」オプションでOpenJDKのパスを指定して起動します
./runInstaller -jreLoc /usr/lib/jvm/default-java

DBCAの文字化けの直し方

インストールが無事完了して、データベースを作成しようとしたら今度はDBCAが文字化けしました。
UbuntuOracleをインストールするときは、
データベースの作成はインストールが完了してから実施した方が賢明です。


対処法はこちらも同様で、dbcaの起動スクリプト内でJREのパスを定義している箇所を、
デフォルトのJREからインストールしたOpenJDKのパスに変更します。

1. [ORACLE_HOME]/bin配下にあるdbcaスクリプトをエディタで開きます
vi /u01/app/oracle/product/12.1.0/dbhome_1/bin/dbca
2. JREのパスを変更します
L70付近

#JRE_DIR=/u01/app/oracle/product/12.1.0/dbhome_1/jdk/jre
JRE_DIR=/usr/lib/jvm/default-java/jre


今回は資料に日本語のキャプチャが必要だったので日本語にしましたが、
英語でいい場合はデフォルトのLANG=ja_JP.utf8からLANG=CにするだけでOKです。


まとめ
LinuxOracleは入れない

Windowsに構築したXAMPP + NetBeansのPHP開発環境にComposerを設定する

前回のエントリ(XAMPP + NetBeansで作ったPHP開発環境でデバッグできるようにする - 猫にWeb)で
NetBeansPHPプログラムをデバッグでステップ実行できるようになりました。


今回はPHPのパッケージ管理ツールであるComposerを設定してNetBeansから利用する手順を紹介します。
パッケージ管理は依存関係もあるので、やはりツールにまかせたほうが得策です。
Composerを使うことでプロジェクト単位でパッケージ管理をすることができます。
他にもComposerにはオートローディングという機能があり、requireやincludeを書かなくても必要なライブラリのファイルを読み込んでくれます。
手順としてはこんな感じです。

1. Composerをインストールする

Composerは公式サイトからインストーラーをダウンロードしてインストールすることもできますが、
コマンドプロンプトで実行した方が楽チンなので、コマンドでインストールします。
コマンドによる手順も公式サイトに書かれています。
phpがあるディレクトリに移動して以下のコマンドを実行します。

> cd c:\xampp\php
> php -r "readfile('https://getcomposer.org/installer');" | php
> echo @php "%~dp0composer.phar" %*>composer.bat

上記が終わって以下のコマンドを実行してバージョンが表示されたらOKです。

> composer -V
> Composer version 1.0-dev (4d134ce8a2aacb9566fee8deb8c514248fd2a983) 2015-04-08 13:43:49

2. NetBeansPHPインタプリタを設定する

「ツール」 → 「オプション」 → 「一般」を選択し、
PHP 5インタプリタ」にphpのパスを設定します。


3. NetBeansにComposerを設定する

「ツール」 → 「オプション」 → 「フレームワークおよびツール」を選択します。
左サイドから「コンポーザ」を選択して、「コンポーザ」に手順1で作成したcomposer.pharを設定します。

ネットでよくある手順では、ここから新規にプロジェクトを作成して、
プロジェクトを選択して、「コンポーザ」の「初期化」を選択するのですが、
私の環境では以下のエラーが発生しました。

[RuntimeException]
JSON encoding failed: Malformed UTF-8 characters, possibly incorrectly encoded

色々調査したのですが、根本的な解決法は見つけられませんでした。
ただし、NetBeansで「コンポーザ」の「初期化」時にやっているのは以下のコマンドを実行して、
composer用の設定ファイルであるcomposer.jsonを作成しているだけです。

php composer.phar init

そこで以下の手順を追加で実施して解決しました。

4. 環境変数PHPのパスを追加する。

環境変数の「Path」にPHPのパスを設定します。
私の環境ではCドライブ直下にXAMPPをインストールしたので「C:\xampp\php」になります。

5. 初期化コマンドを直接実行する

コマンドプロンプトを起動して、作成したプロジェクトの直下に移動して以下のコマンドを実行します。
プロジェクトからcomposer.pharファイルへの相対パスを指定してください。

> php ..\..\php\composer.phar init

色々聞かれますが、後から修正できるので全部デフォルトでOKです。
ただし、Authorはフォーマットを「John Smith 」にしなければ次の項目にいけません。
それとラスト2つの質問はNOでOKです。

Would you like to define your dependencies (require) interactively [yes]? no
Would you like to define your dev dependencies (require-dev) interactively [yes]? no

これでcomposerの設定ファイルcomposer.jsonがプロジェクト配下に作成されます。


ここでぶっちゃけるとcomposer.jsonはこんなファイルなので手動で作っても全然OKですw

{
    "name": "necoyama3/sample",
    "authors": [
        {
            "name": "necoyama3",
            "email": "necoyama3@gmail.com"
        }
    ],
    "require": {}
}

これで準備はOKです。
「コンポーザ」 → 「依存性の追加」で好きなライブラリを検索して依存関係を含めたライブラリをダウンロードして管理することができます。

以上です。お疲れ様でした。
改めて思うのはWindowsで軽量言語の開発はするべきじゃないんだけど、
仕事の都合でしかたないのよね。

XAMPP + NetBeansで作ったPHP開発環境でデバッグできるようにする

以前のエントリ(WindowsにXAMPP + NetBeansでPHP開発環境を簡単に構築する - 猫にWeb)で
WindowsマシンにXAMPPとNetBeansを使ってPHPの開発環境を構築しました。
ただし、このままではブレークポイントをつけてもデバッガが止まらずステップ実行ができません。
少しゴニョゴニョしなければならないので、今回はその辺の手順を紹介していきます。

1 php.iniファイルを編集する

[xamppをインストールしたディレクトリ]\php\php.iniをエディタ等で開き以下を編集します。

L264付近

[Before]
output_buffering=4096

[After]
output_buffering=Off
L2079付近の[XDebug]の設定

[Before]
;zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
;xdebug.profiler_append = 0
;xdebug.profiler_enable = 1
;xdebug.profiler_enable_trigger = 0
;xdebug.profiler_output_dir = "C:\xampp\tmp"
;xdebug.profiler_output_name = "cachegrind.out.%t-%s"
;xdebug.remote_enable = 0
;xdebug.remote_handler = "dbgp"
;xdebug.remote_host = "127.0.0.1"
;xdebug.trace_output_dir = "C:\xampp\tmp"

[After]
zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
;xdebug.profiler_append = 0
;xdebug.profiler_enable = 1
;xdebug.profiler_enable_trigger = 0
xdebug.profiler_output_dir = "C:\xampp\tmp"
;xdebug.profiler_output_name = "cachegrind.out.%t-%s"
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "127.0.0.1"
;xdebug.trace_output_dir = "C:\xampp\tmp"

php.iniはXAMPPのコントロールパネルから編集することもできます。


2 Apacheを再起動する。

3 PHPの設定情報を確認する。

プロジェクト作成時に生成されたindex.phpにphpinfo関数を書いて実行します。

<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <?php
            phpinfo();
        ?>
    </body>
</html>

実行して以下の内容が出力されていれば正常に設定されています。


4 デバッグ内容をコンソールに出力して、デバッグ実行時に最初の行で停止しないようにする。

NetBeansの「ツール」 → 「オプション」 → メニューの「PHP」 → 「デバッグ」をクリックします。
そして「最初の行で停止」のチェックを外して、「デバッガ・コンソールを表示」にチェックを入れて「OK」をクリックします。
NetBeansの「ウィンドウ」 → 「出力」をクリックしてデバッガ・コンソール用ウィンドウを表示します。


以上で設定は完了です。
これでブレークポイントを設定すればステップ実行ができるようになります。

WindowsにXAMPP + NetBeansでPHP開発環境を簡単に構築する

仕事でWindows(OSは7の64bit)マシンにPHPの開発環境を構築することになりました。
IDEとエディタのどちらで実装するか迷ったのですが、PHP初体験ということでIDEを使うことにしました。
本当はIDEPhpStormを使いたかったのですが、当然無料のツールだけしか使えないのでNetBeansにしました。
理由としては、ノウハウが多い、公式のドキュメントがしっかりしてる、ネットの評価がけっこう良かったところです。
調べてみると上記以外にも色々あって(知らないのも結構あった)、後は好みの問題かなと思います。


PHPの開発にはPHPとWebサーバー(例えばApache)が必要なのですが、
これらも個別にインストールするより、XAMPPを利用した方が楽チンでした。
XAMPPとはApacheディストリビューションで、Apacheに加えてPHPPerlMySQLなどを一括でインストールすることができます。
読み方はザンプというらしいです。


そんなわけで前置きが長くなりましたが、
XAMPPのインストールからNetBeansPHP実行可能なところまで構築していきます。

1. XAMPPのダウンロード

XAMPPからWindows向けのインストーラーをダウンロードします。

2. XAMPPのインストール

ダウンロードしたexeファイルをクリックします。

いきなりこんなダイアログが出て、ウイルス対策ソフトを入れていると遅くなるとか言ってくるけど、
おかまいなしに「Yes」をクリックします。


この画面で必要なソフトウェアを選択します。
最低限必要なのはPHPApacheです。それ以外は自由に入れてください。


インストールする先も任意でOKですが、
Windowsだと半角スペースが入っていないパスの方が良いと思います。


チェックボックスにチェックを入れて「Finish」をクリックすると、
XAMPPのコントロールパネルが起動します。

http://localhostにアクセスして以下の画面が表示されたら、Apacheは正常に動作しています。


23:13:08  [Apache] 	Problem detected!
23:13:08  [Apache] 	Port 80 in use by "Unable to open process" with PID 4!
23:13:08  [Apache] 	Apache WILL NOT start without the configured ports free!
23:13:08  [Apache] 	You need to uninstall/disable/reconfigure the blocking application
23:13:08  [Apache] 	or reconfigure Apache and the Control Panel to listen on a different port

上記のようなエラーが出た場合は、80番ポートを他のソフトウェアが使用している場合です。
Windowsの場合はIISの可能性が高いと思います。


Apacheが起動するためのポート番号を変更したい場合は、
[XAMPPをインストールしたディレクトリ]\apache\conf\httpd.confをエディタ等で開いて以下を編集します。

58行目付近
#Listen 80
Listen 81

219行目付近
#ServerName localhost:80
ServerName localhost:81

ポート番号を変更した場合はhttp://localhost:81で起動してください。

3 Javaのダウンロード

ここからJDKをダウンロードします。
Java SE8でOKです。

4 Javaのインストール

ダウンロードしたexeファイルをクリックします。
すべてデフォルトの設定でOKです。

5 NetBeansのダウンロード


ここからWindows向けのインストーラーをダウンロードします。

6 NetBeansのインストール

ダウンロードしたexeファイルをクリックします。
すべてデフォルトの設定でOKです。

7 NetBeansしてPHPプロジェクトを作成

NetBeansを起動してメニューの「ファイル」 → 「新規プロジェクト」をクリックします。

カテゴリは「PHP」、プロジェクトは「PHPアプリケーション」を選択して「次へ」をクリックします。

プロジェクト名を入力して、「次へ」をクリックします。
ソース・フォルダは自動的にApache管理下のディレクトリに設定されています。


「終了」をクリックします。
フレームワークを使用したい場合はここでチェックを入れます。


完了するとプロジェクトが作成され、index.phpファイルが自動で開きます。

<?php 
    print "Hello World";
?>

上記のように実装して保存し、Ctrl + F5をクリックします。
ブラウザが起動して「Hello World」が表示されれば完了です。


次はデバッグの設定やComposerによるパッケージ管理、PostgreSQLとの連携等をやっていきます。

Homebrew Caskのコマンドがエラーで動かなくなった時の解決方法

Macのアプリ管理はHomebrew Caskでやっているんですが、
先日インストール一覧を確認しようとしたこんなエラーが出ました。

Error: wrong number of arguments (1 for 0) while loading '/usr/local/Library/Taps/caskroom/homebrew-cask/Casks/alfred.rb'
Please report this bug:
    https://github.com/caskroom/homebrew-cask/issues
<main>:5:in `name'
<main>:5:in `<class:Alfred>'
<main>:in `<main>'
/usr/local/Cellar/brew-cask/0.43.1/rubylib/cask/source/path_base.rb:55:in `eval'
/usr/local/Cellar/brew-cask/0.43.1/rubylib/cask/source/path_base.rb:55:in `rescue in load'
/usr/local/Cellar/brew-cask/0.43.1/rubylib/cask/source/path_base.rb:52:in `load'
/usr/local/Cellar/brew-cask/0.43.1/rubylib/cask.rb:120:in `load'
/usr/local/Cellar/brew-cask/0.43.1/rubylib/cask/scopes.rb:55:in `block in installed'
/usr/local/Cellar/brew-cask/0.43.1/rubylib/cask/scopes.rb:49:in `map'
/usr/local/Cellar/brew-cask/0.43.1/rubylib/cask/scopes.rb:49:in `installed'
/usr/local/Cellar/brew-cask/0.43.1/rubylib/cask/cli/list.rb:52:in `list_installed'
/usr/local/Cellar/brew-cask/0.43.1/rubylib/cask/cli/list.rb:10:in `run'
/usr/local/Cellar/brew-cask/0.43.1/rubylib/cask/cli.rb:81:in `run_command'
/usr/local/Cellar/brew-cask/0.43.1/rubylib/cask/cli.rb:121:in `process'
/usr/local/bin/brew-cask.rb:42:in `<top (required)>'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
/usr/local/Library/brew.rb:58:in `require?'
/usr/local/Library/brew.rb:141:in `<main>'

とりあえずいつもの感じでアップデートと診断コマンドを実行したら

necoyama3:~ $brew update && brew doctor
Already up-to-date.
Your system is ready to brew.
necoyama3:~ $

てな感じで正常に動作してるので、
もう一度「brew cask list」コマンドで一覧を見てみようとしたら同じエラーが出ました。


そこでおとなしくエラーログにあるissuesを見に行って、
最終的に以下のコマンドを実行したら正常に動作するようになりました。

brew update && brew upgrade brew-cask && brew cleanup && brew cask cleanup

やっぱり最初からエラーログのissues見に行くほうが賢いですね。

僕が思う最強のWindowsコマンドプロンプト

MacLinuxでの作業が多いと、
Windowsコマンドプロンプトを使った時に貧弱すぎてテンションが下がることがあります。


今までは「Cygwin」を入れることが多かったのですが、
とにかくインストールがメンドくさいし、めちゃくちゃ時間がかかります。
ほったらかしにしても、途中でエラーのダイアログが出て止まってたりとかもよくあります。
そこでもっと短時間でできるLinuxライクなコマンドプロンプト環境を作ってみました。


全部で6つの作業を行います。多いw


1. Linuxコマンドを使えるようにする

Gow」というツールをインストールします。
インストールは全てデフォルトのままで進めていきます。
環境変数のPathへの追加も自動でしてくれます。
インストールが終了後、コマンドプロンプトを起動して以下のコマンドを起動すると、
追加されたコマンドが一覧で表示されます。


2. bashライクにカスタムする

clink」というツールをインストールします。
このツールをインストールすると以下の機能がコマンドプロンプト上で出来るようになります。

  • GNU readlineを実装し、bashと同じショートカットキーを利用可能
  • [Tab]キーによるパスおよびファイル名補完機能
  • [Ctrl] + [V]によるクリップボードからの貼り付け機能
  • 環境変数を利用した実行ファイルの利用
  • [Ctrl] + [_]キー or [Ctrl] + [X]キー→[Ctrl] + [U]キーによる「元に戻す」「やり直す」
  • セッション間の保持や検索機能、ヒストリー展開をサポート
  • スクリプト言語として「Lua」をサポート

このツールのおかげで[Ctrl] + [L]キーで画面クリアや、[Ctrl] + [R]キーで後方検索ができるようになります。
「clink」をインストールするとコマンドプロンプトの初期表示画面の文言が少し変わります。

bash起動時に設定を操作するinputrcと同様の事が、
clinkでは「clink_inputrc」というファイルを「%LOCALAPPDATA%\clink」ディレクトリに作成することで実現できます。
このファイルに「set editing-mode vi」や「set keymap vi」を記述すれば、
vi使いの人は幸せになれると思いますw


同じディレクトリにある「settings」というファイルで、キーバインドを変更することもできます。
[Ctrl] + [L]キーで画面クリアや、[Ctrl] + [R]キーで後方検索はここで設定しています。


3. Gitコマンドを使えるようにする

Git入れるだけです。
Git for Windows」から最新版をインストールします。

エクスプローラーのコンテキストメニューからGit Bashを起動できるように、
[Git Bash Here]のチェックを入れています。

PATH環境変数の設定画面では、
コマンドプロンプトからもGitを利用できるように、
2番目の「Run Git from the Windows Command Prompt」を選択しています。
3番目の「Run Git and include Unix tools from the Windows Command Prompt」にすると、
Windowsの既存コマンドに影響を与えるかもしれないので試してません。

改行コードの選択画面では、
作業時にWindowsスタイルの改行コード(CRLF)に変換し、コミット時にはUNIXスタイル(LF)に変換する。
1番目の「Check out Windows-style, commit Unix-style line endings」を選択しています。


4.「tail -f」を使えるようにする
やっぱり「tail」コマンド使うなら、「f」オプションでログファイルとか監視したいところです。
しかし、「Gow」に入っている「tail」コマンドの「f」オプションはバグってて動きません。
そこで正常に動く「Git」に入っている「tail」コマンドを使用します。


「[Gitのインストールディレクトリ]\bin」の中に「tail」コマンドがあります。
まだ環境変数にパスが通っていないので通します。
ここで注意しなければいけないのが、先ほどインストールした「Gow」よりも前にパスを通してください。

先に入れた「Gow」とかぶっているコマンドがありますが、挙動に問題はありません。


5. タブ機能の追加

ConEmu」というツールをインストールします。
バージョンは好きなものでOKです。

[Win] + [N] で新しいタブが開始でき、どのコンソールを開くか選択することができます。
また設定変更でどのコンソールを表示するか変更することができます。
候補はシステムにインストールしているものを検知して自動的に出してくれます。

タブの切り替えは「Win」+ [1 or 2 or 3]で切り替えることができます。
他にも色々設定をすることができます。

たとえばタブを右クリックして、メニューにある [Duplicate root...]で画面を開きなおすと、
カレントディレクトリをそのまま引き継いで、新しいタブで作業ができます。
タブ1でGitのコミットしながら、タブ2でlogを見ることなんかができます。


6. 「ファイル名を指定して実行」から起動できるようにする

「ConEmu」のショートカットのパスを環境変数の「Path」に追加します。
ファイル名は短い名前の方が起動しやすいです。
環境変数にパスを通せば、「Win」+「R」の「ファイル名を指定して実行」から起動できます。
僕はファイル名を「em」にして、「cmd」というディレクトリを作ってそこに保存してパスを通しました。

これでかなりLinuxライクで便利なコマンドプロンプトになったと思います。

ブラウザごとにベンチマークをとれるjsPerfが便利すぎる

JavaScriptコードスニペットベンチマークをとれるjsPerf(http://jsperf.com/)というWebサービスを知って、
けっこう簡単で便利だったので紹介します。


ベンチマークというとプロファイラを使ったり、
計測したい処理の前後に*1Dateオブジェクト作って、差分をチェックしてゴニョゴニョする感じでした。

var start = new Date();

// 計測対象の処理
hoge();

var end = new Date();

var processTime = end - start; // start から end までのミリ秒を得る

ただ、JavaScriptの場合、短いプログラムだと結果が不安定だったり、
ブラウザによって速度が左右されたりします。


そんな時に使えるのが「jsPerf」です。
このWebサービスは、計測したい処理が1秒間に何回実行できたかでベンチマークを記録します。
そのため、回数が多いほどパフォーマンスが良い事になります。
また、この計測方法だと1ミリ秒以下の短い処理でも大体の時間が分かります。


内部の処理はjsPerfの中の人が作った「Benchmark.js(http://benchmarkjs.com/)」というライブラリが使用されています。


今回は「高速な文字列の連結」というネタでベンチマークを取りたいと思います。


比較する処理は以下とします。
1. 「Array.push() で配列に格納して Array.join() で繋げる」
2. 「+ 演算子で繋げる」


計測するコードはこんな感じです。
実行回数は10万回です。

var array = new Array();
for (var i = 0; i < 100000; i++) {
	array.push(i);
}
var txt = array.join("");
var txt = "";
for (var i = 0; i < 100000; i++) {
	txt += i;
}

jsPerfの使い方

http://jsperf.comにアクセスします。
基本的な使い方は、必須項目(赤いアスタリスクがついてるもの)を埋めて「Beautify code」か「Save test case」ボタンを押下します。
「Beautify code」はインデントを揃えてくれます。

その他もろもろについては上から順番に、

    • 「test cases(http://jsperf.com/browse)」のリンクから他のユーザが作成したベンチマークを見る事ができます。
    • ユーザ名を登録しておくと、過去に作成したベンチマークを一覧で見る事ができます。
    • 「slug」は自分のベンチマークのURLになります。
    • デフォルトでは「title」の文言が設定されます。変更する事も可能です。
    • Publishedのチェックを外すと、ベンチマークを非公開にする事ができます
    • 「Preparation code」では、事前準備として必要なDOMを書いたり、共通処理などを書く事ができます。


設定を保存すると以下の画面に遷移するので、
後は、「Run tests」ボタンを押下すると計測してくれます。


別のブラウザで自分が作成したベンチマークURLを開いて計測すると、
ブラウザごとのベンチマークを計測してくれます。
また、表示方法も数値だけでなく棒グラフや円グラフでも表示してくれます。
以下は私の環境で Google ChromeFirefoxSafariベンチマークをとってみました。



というわけで、肝心の計測結果ですが、
最近のブラウザだとJavaScriptの文字列の連結はどっちでやっても速度はほとんど変わりませんでしたw


余談ですが、
はてダだとスクロールしたキャプチャが、どうやっても解像度がキレいなままアップできませんでした。
どなたか対応方法知ってたら教えてください。

*1:Dateオブジェクトは数値として扱った場合、ミリ秒の数字になります。