Clojure: Macの環境構築をする、の補足

昨日のエントリーの補足。

  • gitを初めて使う時
$ git clone https://github.com/flyingmachine/emacs-for-clojure .emacs.d

Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo.

上記のように、Xcode/iOSライセンスへの同意を要求されることがあります。
その場合、下記のようにsudoを付けて実行します。

$ sudo git clone https://github.com/flyingmachine/emacs-for-clojure .emacs.d
Password: パスワードを入力


You have not agreed to the Xcode license agreements. You must agree to both license agreements below in order to use Xcode.

Hit the Enter key to view the license agreements at '/Applications/Xcode.app/Contents/Resources/English.lproj/License.rtf'

Enterキーでライセンスが表示されます。
後は英語をしっかり読んで、画面のメッセージに従ってインストールを続行してください。

MacEmacsをダウンロードして起動しようとすると、次のメッセージが表示される場合があります。
f:id:soutoku:20151214224923p:plain

その場合、Controlキーを押しながらEmacsアイコンをクリックして[開く]か、[システム環境設定]の[セキュリティとプライバシー]の
f:id:soutoku:20151214225453p:plain
[このまま開く]ボタンを押して制限を解除します。

  • The lein executable (specified by `cider-lein-command') isn't on your exec-path

leinコマンドをPATHの通っている場所にインストールしたくない(または出来ない)場合、MacEmacsで

M-x cider-jack-in

した場合、

The lein executable (specified by `cider-lein-command') isn't on your exec-path

と表示されてCIDERが実行できません。

その場合、
/Users/ユーザ名/.emacs.d/init.el の末尾に

;; (setenv "PATH" (concat (getenv "PATH") ":leanがインストールされたディレクトリ"))
;; (setq exec-path (append exec-path '("leanがインストールされたディレクトリ")))
;; 例えば /Users/username/lein に配置した場合
(setenv "PATH" (concat (getenv "PATH") ":/Users/username"))
(setq exec-path (append exec-path '("/Users/username")))

のように、実行パスの設定を追加します。

Clojure: Macの環境構築をする

12/12開催のClojure ワークショップ(仮)参加にあたって、OS X 10.11 El CapitanにClojure環境を構築した際の備忘録。

  • Clojure単体(REPL)のインストールだけならとっても簡単。

Clojure公式サイトダウンロードページからClojure 1.7.0のリンクをクリックするとclojure-1.7.0.zipがダウンロードされ、/Users/ユーザ名/Downloads/clojure-1.7.0/フォルダに展開されるので、このフォルダをドラッグ&ドロップで適当な場所にコピーします。(私の場合は、/Applications にコピーしました。以下その前提で記述します。)
REPLの起動は、ターミナルを起動して

$ java -cp /Applications/clojure-1.7.0/clojure-1.7.0.jar clojure.main

とやればOK。

  • Leiningenのインストール

Leiningen公式サイトのInstallの記述に従います。
1. Download the lein script (or on Windows lein.bat)
のリンクを踏むとSafariの場合ブラウザにスクリプトが表示されてしまうので、リンク上で右クリック(二本指クリック)でコンテキストメニューを表示し、「リンク先のファイルを別名でダウンロード...」を選択して任意の場所にlein.txtファイルをダウンロードします。(私の場合は/Users/ユーザ名/の直下にダウンロードしました。以下その前提で記述します。)

2. Place it on your $PATH where your shell can find it (eg. ~/bin)
ターミナルでPATHが通っている場所を確認して、

$ env|grep PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

何れかにleinスクリプトを移動します。(私の場合は/usr/local/binに移動しました。以下その前提で記述します。)
ターミナルで、

$ cd ~
$ sudo mv lein.txt /usr/local/bin/lein
Password: パスワードを入力

とやります。

3. Set it to be executable (chmod a+x ~/bin/lein)
leinスクリプトに実行権限を与えます。ターミナルで

$ cd /usr/local/bin/
$ sudo chmod a+x lein
Password: パスワードを入力
$ ls -la lein
-rwxr-xr-x@ 1 ユーザ名  501  12713 12 13 11:54 lein

とやります。(自分しか使わないマシンならchmod u+xで実行権限を絞っても問題ないと思います)

4. Run it (lein) and it will download the self-install package
ターミナルで

$ lein self-install

とやると、/Users/ユーザ名/.lein/self-install/ ディレクトリにLeiningenがインスールされます。

Manual self-install is deprecated; it will run automatically when necessary.
Downloading Leiningen to /Users/ユーザ名/.lein/self-installs/leiningen-2.5.3-standalone.jar now...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   605    0   605    0     0    434      0 --:--:--  0:00:01 --:--:--   434
100 15.0M  100 15.0M    0     0   798k      0  0:00:19  0:00:19 --:--:-- 1010k

最後に /Users/ユーザ名/.lein/profiles.clj を以下の内容で作成します。
「EmacsでモダンClojure開発環境構築」の記述を拝借しました。

{:user {:dependencies [[org.clojure/tools.nrepl "0.2.7"]
                       [slamhound "RELEASE"]
                       [org.clojure/tools.trace "RELEASE"]]
        :aliases {"slamhound" ["run" "-m" "slam.hound"]}
        :plugins [[lein-kibit "RELEASE"]
                  [cider/cider-nrepl "0.10.0-SNAPSHOT"]]}}
  • Emacsのインストール

MacにはEmacsが最初からインストールされていますが、ターミナルでemacsを起動すると

GNU Emacs 22.1.1 (mac-apple-darwin)
 of 2015-11-14 on osx233.apple.com
Copyright (C) 2007 Free Software Foundation, Inc.

と表示され、バージョンが古くてCIDERを使うのに不都合があるので、MacEmacs JPサイトからデスクトップアプリケーション版をインストールします。
ダウンロードサイトからEmacs-24.3-with-inline-patch.dmgをダウンロードします。
/Users/ユーザ名/Downloads/Emacs-24.3-with-inline-patch.dmgにダウンロードされたファイルをダブルクリックしてディスクイメージをマウントします。
ディスクイメージ内のEmacsファイル(Emacs.app)をアプリケーションフォルダ(/Applications/)にドラッグ&ドロップでコピーします。
Emacsを起動するとGatekeeperによって実行が制限されていますので、
f:id:soutoku:20151213125953p:plain
実行許可を与えます。
Emacsが起動したら、Ctl-x Ctl-cで終了させます。

「Clojure 完全マスター with Emacs/Cider-mode」の記事を参考にさせて頂きました。
既存の設定を拝借しました。gitからクローンする前に、.emacs.dディレクトリが既に存在する場合は念のため退避しておきます。

$ cd ~
$ mv .emacs.d .emacs.d.old
$ git clone https://github.com/flyingmachine/emacs-for-clojure .emacs.d
Cloning into '.emacs.d'...
remote: Counting objects: 723, done.
remote: Total 723 (delta 0), reused 0 (delta 0), pack-reused 723
Receiving objects: 100% (723/723), 1.99 MiB | 846.00 KiB/s, done.
Resolving deltas: 100% (243/243), done.
Checking connectivity... done.

以上で設定は完了です。

次回は、上記と違った設定をした際のトラブルシューティングについて書きたいと思います。

Tomcat: Amazon EC2で公開する

Amazon Web Service(AWS)のEC2にTomcatをインストールして公開する方法。
Tomcatをport80でlistenするように設定しても繋がりません。
Tomcat側のlisten portは8080のまま変えずに、iptablesを変更します。

$ sudo yum update
$ sudo yum remove java-1.7.0-openjdk
$ sudo yum install java-1.8.0-openjdk-devel
$ sudo yum install tomcat8
$ sudo /sbin/iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
$ sudo /sbin/iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT
$ sudo /sbin/iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
$ sudo /sbin/service iptables save
$ sudo service iptables restart
$ sudo cat /etc/sysconfig/iptables
$ sudo service tomcat8 start

GlassFish: ただのHTMLが文字化けするってどういうこと

Windows7(64bit)上で、NetBeans 8.0.2にバンドルされているGlassFish 4.1での話。

[ファイル] -> [新規プロジェクト]で[Java Web]->[Webアプリケーション]を選択します。「名前と場所」はデフォルトのまま、「サーバーと設定」で[GlassFish Server 4.1]を選択し、ごくごくデフォルトのWebアプリケーションを新規作成します。index.htmlファイルが自動で作成されますが、このファイルの

        <div>TODO write content</div>

部分だけを日本語にします。もちろんファイルのエンコーディングUTF-8です。
こんなの、今時文字化けする要因なんて考えられませんが、このプロジェクトを[ビルド]->[実行]すると、ものの見事に文字化けします。

「プロジェクト・プロパティ」ウィンドウで[ソース]の[エンコーディング]も当然UTF-8です。念のため、[コンパイル]の[追加のコンパイラ・オプション]に

-encoding UTF-8

と指定しても効果はありません。

以前のエントリーに書いた WEB-INF/sun-web.xml の設定も関係ありません。

NetBeansから起動されるので、NetBeansのデフォルトエンコーディングが影響しているのでしょうか?
C:\Program Files\NetBeans 8.0.2\etc\netbeans.conf の netbeans_default_options に

-J-Dfile.encoding=UTF-8

を追加してみても効果はありません。

答えは
C:\Program Files\glassfish-4.1\glassfish\domains\domain1\config\domain.xml
<java-config>ディレクティブに

<jvm-options>-Dfile.encoding=UTF-8</jvm-options>

を追加することです。

Javaなんだから、最初からUTF-8に設定しておいてくれよ。まったく。

Elasticsearch: CentOS 6.6に環境構築

Elasticsearch検証環境を構築した際のメモ

Oracle VM VirtualBox 4.3.20 に CentOS 6.6 32bit をインストールした後に行った作業をメモ的に記録します。
CentOS 6.6 ではminimalインストールがデフォルトのようで、Elasticsearchとは直接関係ない作業も記述しています。

1. ネットワーク有効化
 ONBOOTフラグをyesに変更してネットワークアダプタを再起動。

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

ONBOOT=yes

[root@localhost ~]# service network restart

2. まず最初にアップデート

[root@localhost ~]# yum update

3. Javaのインストール
 OpenJDK 1.8をyumで入れる場合。

[root@localhost ~]# yum install java-1.8.0-openjdk-devel

4. Elasticsearchのインストール

[root@localhost ~]# vi /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-1.4]
name=Elasticsearch repository for 1.4.x packages
baseurl=http://packages.elasticsearch.org/elasticsearch/1.4/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1

[root@localhost ~]# yum install elasticsearch

5. Elasticsearchの起動確認

[root@localhost ~]# service elasticsearch start

 ※ここで、

OpenJDK Server VM warning: You have loaded library /usr/share/elasticsearch/lib/sigar/libsigar-x86-linux.so which might have disabled stack guard. The VM will try to fix the stack guard now.
It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.

 と表示されるが、その対策はこの後で。
 Elasticsearchが起動していることを確認。

[root@localhost ~]# curl -X GET http://localhost:9200/
{
  "status" : 200,
  "name" : "Elizabeth Twoyoungmen",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "1.4.2",
    "build_hash" : "927caff6f05403e936c20bf4529f144f0c89fd8c",
    "build_timestamp" : "2014-12-16T14:11:12Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.2"
  },
  "tagline" : "You Know, for Search"
}

6. warningの修正
 execstackコマンドのインストール。

[root@localhost ~]# yum install prelink

 libsigar-x86-linux.soのスタック実行可能フラグの変更。

[root@localhost ~]# execstack -c /usr/share/elasticsearch/lib/sigar/libsigar-x86-linux.so

 Elasticsearch再起動してwarningが表示されないことを確認。

[root@localhost ~]# service elasticsearch restart

 ついでに、ElasticsearchがOS起動時に自動起動するよう設定。

[root@localhost ~]# chkconfig elasticsearch on

7. Kuromojiプラグインのインストール

[root@localhost ~]# /usr/share/elasticsearch/bin/plugin --install elasticsearch/elasticsearch-analysis-kuromoji/2.4.1

 KuromojiをインストールしたらElasticsearchを再起動。

[root@localhost ~]# service elasticsearch restart

Kuromojiに日本語テキストを入力・表示するために、GUIと日本語の環境を導入します。

8. X Window Systemのインストール

[root@localhost ~]# yum groupinstall "X Window System" "Desktop" "Desktop Platform" "General Purpose Desktop"

9. 日本語入力環境のインストール

[root@localhost ~]# yum groupinstall "Japanese Support"

10. GUI作業用ユーザの作成

[root@localhost ~]# useradd workuser
[root@localhost ~]# passwd workuser
[root@localhost ~]# visudo
ファイルの末尾に以下を追加
workuser ALL=(ALL) ALL

11. X Window Systemの起動
 GUI作業用ユーザでログインし直して、

[workuser@localhost ~]$ startx

 X Window Systemが起動したら、[System]メニューの[Preferences]->[Input Method]の設定を行い、X Window Systemを再起動した後にKuromojiの動作確認をします。
 私はこちらの記事を参考にさせて頂きました。

 yumを使うとインストールそのものは非常に簡単なElasticsearchですが、CentOS 6.6 を使った場合の、6. のexecstackコマンドがインストールされていない際の導入方法や、8. のX Window Systemのgroupinstall引数を調べたりが、地味に時間が掛かり、私が参考にしたサイトとも引数が若干違ったりしますので、このページの情報が有益であることを期待します。

NetBeans: EC-CUBE開発環境を構築する

PHPの開発環境としても使えるNetBeans
今回、EC-CUBEの開発環境をNetBeansで構築した際のメモを記述します。

OS: Windows 8.1 Pro
JDK: Java SE Development Kit 8 Update 25
NetBeans: 8.0.1

上記は予めインストールされた状態から作業を開始するものとします。

1. EC-CUBEをダウンロードして展開する
EC-CUBEソースコードダウンロードサイトから入手します。ダウンロードの手続きは割愛します。
現時点での最新版であるVersion 2.13.3(eccube-2.13.3.zip)を入手したら、任意の作業フォルダに展開します。

2. XAMPPからPHPをインストールする
XAMPP for Windowsダウンロードサイトからxampp-win32-5.6.3-0-VC11-installer.exeを入手し、実行します。
取り敢えず必要なコンポーネントPHPなのですが、Apacheを選択解除出来ないのと、MySQLは(ツールとかも入れたいので)別途インストールするので、下図のような構成としました。
f:id:soutoku:20150126103742p:plain

3. MySQLをインストールする
MySQLダウンロードサイトからmysql-installer-community-5.6.22.0.msiを入手し、実行します。開発環境なので、Developer Default構成とします。
f:id:soutoku:20150126111825p:plain
インストール途中のAccounts and RolesのページでEC-CUBE用のアカウントを作成しておくと後で楽です。
インストールしたら、EC-CUBE用のデータベースを任意のDB名で作成しておきます。

4. NetBeansphp.exeのパスを登録する
[ツール]メニューの[オプション]のPHP画面で、PHP 5インタプリタにXAMPPのphp.exeのパスを設定します。
f:id:soutoku:20150126165110p:plain

5. NetBeansのプロジェクトを作成する
NetBeansに新規プロジェクトを作成します。
既存のソースを使用するPHPアプリケーションとします。
f:id:soutoku:20150126114953p:plain
ソース・フォルダはEC-CUBEのソースを展開したフォルダ。PHPのバージョンはXAMPPでインストールしたPHPバージョン(5.6)を選びます。
f:id:soutoku:20150126114541p:plain
実行方法はPHP組込みWebサーバーを選びます。
f:id:soutoku:20150126115226p:plain
プロジェクトのプロパティで、WebルートをEC-CUBEソースフォルダのhtmlフォルダに設定します。
f:id:soutoku:20150126121538p:plain
プロジェクトを実行すると、ブラウザにEC-CUBEのインストールページが表示されます。
f:id:soutoku:20150126121915p:plain

以降、画面の指示に従って、EC-CUBEをインストールすれば完了です。

JavaFX: WebViewってWebSocket使えるの?

前々回の記事で紹介したJavaFXブラウザでWebSocketが使えるのか気になったので、さくっと検証。
サーバとクライアントのプログラムは

[WebSocket] [Java] WebSocketを試す - DukeLab
の記事を利用させて頂きました。

で、実行した結果がこれ。
f:id:soutoku:20141217175048p:plain

無事、サーバ側からのPush通信を表示できました。

優秀じゃん、JavaFX!!

【追記】http://html5test.com/ではスコア381でした。
f:id:soutoku:20141218100118p:plain