タイトル/名前 | 更新者 | 更新日 |
---|---|---|
技術/VirtualBox | msakamoto-sf | 2014-08-02 18:41:05 |
技術/VirtualBox/起動時に「プログラム互換性アシスタント」が表示される場合 | msakamoto-sf | 2014-08-02 18:37:37 |
Java/JAX-RS/Jerseyメモ | msakamoto-sf | 2014-07-27 20:31:43 |
JavaScript/ExtJS/「メンテナブルJavaScript」とExtJS | msakamoto-sf | 2014-07-06 20:25:10 |
JavaScript/ExtJS/Ext.Component を使ったカスタムコンポーネントの練習 | msakamoto-sf | 2014-07-06 01:47:06 |
技術/Linux/RPMパッケージの作成(no-build) | msakamoto-sf | 2014-06-08 21:25:54 |
JavaScript/ExtJS/ExtJS4 + Sencha Cmd 勉強メモ4, ExtJS以外のJSライブラリを使う | msakamoto-sf | 2014-06-08 20:14:26 |
JavaScript/ExtJS/ExtJS4 + Sencha Cmd 勉強メモ3, アイコン画像のカスタマイズ | msakamoto-sf | 2014-06-08 20:14:05 |
JavaScript/ExtJS/ExtJS4 + Sencha Cmd 勉強メモ2, テーマ(Theme)のカスタマイズ | msakamoto-sf | 2014-06-08 20:13:39 |
JavaScript/ExtJS/ExtJS4 + Sencha Cmd 勉強メモ1 | msakamoto-sf | 2014-06-08 20:13:12 |
VirtualBoxメモ。
参考:
2013-09-01追記
ブリッジモードのネットワークアダプタを使う方式:これなら1つだけでOK.
2014-01-13追記
もう少し詳しく調べたメモをページ分けて追加
ネットワークアダプタを"NAT"と"Host-only"の2つをつけて、使い分ける方式:
2013-09-01追記:最初から2つつけたところ、Ubuntu 12.04 LTS + VirtualBox 4.2.6 で、うまくeth1(=Host only)を認識してくれなかった。よくわからなかったので、ブリッジモードで逃げた。
参考:
2014-08-02追記:Windows7 + トレンドマイクロウイルスバスタークラウドの環境で、4.3.14に上書きインストールしたら、VirtualBoxのGUIマネージャが起動しなくなった。
症状はこれと一緒。修正した4.3.15がリリース予定らしいので、それまでは 4.3.12 に戻して利用する。
VirtualBoxをWindowsにインストールして起動すると、初回起動時に「プログラム互換性アシスタント」が表示されるケースがあった。表示されないケースにも遭遇していて、何が条件で表示されるのかは今のところ不明。
自分のケースでは、新しいバージョンを上書きインストールした時に表示され、一旦削除してからインストールしなおした場合は表示されなかった。
結論から言うと、互換性アシスタントが表示されたら、「このプログラムは正しくインストールされました」を選択して問題ない。
Jerseyの勉強メモ。
JAX-RSレベルで規定されている仕様については Java/JAX-RS/勉強メモ(JAX-RS 2.0) も参照。
練習サンプル:
StreamingObjectクラスをimplementしてResponseのentityにセットする。
参考サイト:
JAX-RS 2.0の仕様としてはHttpServletResponseを直接参照、操作することも可能だが、副作用の発生する操作の組み合わせによっては期待通りに動かないケースも。
「メンテナブルJavaScript」を読みまして、ExtJSではどうなるのか調べてみました。
「メンテナブルJavaScript」ではJavaScriptならではの落とし穴や、メンテナンス性を下げるようなBad Practiceと、より良い実装のGood Practiceが紹介されています。
ExtJSでは、それら実装が難しい処理のいくつかについて、その実装を隠蔽しよりクリーンなインターフェイスとして、開発者がその実装を気にしなくても安全に使えるようなユーティリティクラス・メソッドを提供しています。
本記事では「メンテナブルJavaScript」で「それ、ExtJSでできるよ」というトピックについて、一部サンプルコードも交えてExtJSで提供されている機能を紹介していきます。(特に紹介していない章については、ExtJSでも通用する普遍的な内容でした。)
注意:本記事ではあくまでも、ExtJSが詳細を隠蔽してくれているクラス・メソッドの紹介までに留めています。隠蔽している実装が本当に妥当なものであるかどうかの検証はしていません。一応ExtJS 5.0のソースを軽く読んでみて、大体書籍にあるようなノウハウが組み込まれている「っぽい感じ」はしてますが、徹底した厳密な調査・検証・テストは実施できていません。そのため、実際に使ってみると「このケースだとExtJSの実装で不都合が出てしまうな~」というのも出てくるかもしれませんが、ご了承ください。
環境:
公式APIドキュメント:
ExtJSは豊富なコンポーネントが用意されています。しかしながら、現実のアプリケーション開発ではどうしても、自分でコンポーネントを作成するようなケースが出てきます。カスタムコンポーネントの作成については、ExtJSのドキュメントにも説明はありますが、実際の開発ではHTML要素のレンダリングなどExtJSの内部を知る必要があります。
他のコンポーネントを包含しない、単体で動作するコンポーネントは一般的にExt.Componentを派生させて作成します。その時に、HTMLのレンダリング処理やイベントハンドラをどのように設定すればよいのか、イロハが分かるような資料を目指して本記事を作成しました。
環境:
技術/Linux/RPMコマンドメモ(パッケージ作成など) で簡単ながらパッケージ作成時のTipsをまとめているが、今回はビルドを伴わないパッケージの作成方法について勉強してみた。
今回の「ビルドを伴わないパッケージ」というのは、リポジトリやtarボールから展開して適切な場所にファイル・ディレクトリを配置するだけで良いファイルセットをRPMパッケージにすることを指す。PHPスクリプトや、設定ファイルなどでこのようなケースが該当する。
サンプルを作成してみたので、ポイントとなる箇所を解説していく。
サンプル:
今回の練習環境:
CentOS 6.5 x86_64版 $ rpm --version RPM version 4.8.0 $ rpmbuild --version RPM version 4.8.0
ソース構成:
rpmbuild-demo-without-compilation/ ├── buildrpm.sh ... ビルド時の一時的なtarボールの生成とrpmbuildの実行スクリプト ├── helloworld/ ... 設定ファイルのセットで、これを"/etc"以下にインストールするRPMを作成する │ ├── auto_include_child/ │ │ ├── regular1.txt │ │ └── regular2.txt │ ├── dir_only │ │ └── ignored.txt │ ├── greet.conf │ ├── greet-noreplace.conf │ ├── greet.sh │ ├── p0600.txt │ ├── p0705.txt │ └── regular.txt ├── helloworld.spec ... SPECファイル ├── LICENSE └── README.md
ビルド方法
# yum install rpm-build $ cd /home/msakamoto/work $ git clone git@github.com:msakamoto-sf/rpmbuild-demo-without-compilation.git # 以下はJenkinsなどCI環境からのビルドを意識して、サブシェルによりcdしてから buildrpm.sh を起動する例 $ cd / $ (cd /home/msakamoto/work/rpmbuild-demo-without-compilation && ./buildrpm.sh)
#!/bin/sh WORK_DIR=`pwd` BUILD_NAME=helloworld BUILD_SPEC=${BUILD_NAME}.spec BUILD_TAR=${BUILD_NAME}.tar.gz BUILD_DIR=${WORK_DIR}/rpmbuild BUILD_TAR_PATH=${WORK_DIR}/rpmbuild/SOURCES/${BUILD_TAR} /bin/rm -rf ${BUILD_DIR} # rpmbuildが使用する各種ビルドディレクトリを作成 /bin/mkdir -p ${BUILD_DIR}/{BUILD,RPMS,SOURCES,SPECS,SRPMS} # rpmbuildのためだけの、一時的なtarボールを生成してSOURCESに配置 /bin/tar czf ${BUILD_TAR} ${BUILD_NAME}/ /bin/mv ${BUILD_TAR} ${BUILD_TAR_PATH} # "$HOME/.rpmmacros" に依存せずに rpmbuild を実行 /usr/bin/rpmbuild --define "_topdir ${BUILD_DIR}" -bb ${BUILD_SPEC}
今回のspecファイルとソースツリーについては、以下の記事を参考にさせて頂いております。helloworldのパッケージ名やディレクトリ構成など、丸パクリさせてもらいました。
"Name", "Version", "Release" については難しく無い。"Group"については、可能であれば既に存在するグループ名を指定する方が良いらしい。CentOSであれば、"yum grouplist" でCentOSで利用可能なグループ名の一覧を取得できる。
Name: helloworld Version: 1.0 Release: 1 Group: Security Tools
参考:
"Vendor"は、個人ではなく会社等でパッケージを開発する際は入れておいたほうが良いだろう。"URL", "License", "Summary"はそのまま。"BuildArch" については、今回は単なる設定ファイルのパッケージングなので "noarch" を指定した。
Vendor: Example Company Inc. URL: http://www.example.com/ License: Custom License Summary: Example RPM Plain File Packaging. BuildArch: noarch
ソースの指定で、ここでrpmbuild.shが一時的に生成したtarボール名を指定している。
# use build-time generated tar ball. Source0: %{name}.tar.gz
"BuildRoot"については、最近のRHEL系rpmbuildでは無視されるようだ。RHEL5系以前との互換性のために、一つのシステム上で複数人 or 複数ジョブが同時にビルドしても衝突しないよう、mktempでユニークな一時ファイル名を生成している。なお、今回実験した環境では "rpmbuild/BUILDROOT" というディレクトリが自動的に作成され、それが "%{buildroot}" として参照できていた。
# (only create temporary directory name, for RHEL5 compat environment) # see : http://fedoraproject.org/wiki/Packaging:Guidelines#BuildRoot_tag BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildRootの解説と、最近のrpmbuildではdeprecatedになった話についての参考:
"%install" で指定する、ファイルツリーの展開先。"%{buildroot}" がインストール先のルートディレクトリに相当する。今回は helloworld を "/etc/helloworld" 以下に展開したいため、そのように調整している。
%define INSTALLDIR %{buildroot}/etc/helloworld
パッケージの説明以降は、準備とビルド(今回は何もしない)、仮のインストール、クリーニング処理になる。ファイルコピーについては、tarボール中のファイルパス名と、"%prep"でのファイル展開先との兼ね合いで微調整が必要になる。最後に"%{buildroot}"を削除している。
%description %{summary} %prep %setup -q -n %{name} %build %install rm -rf %{INSTALLDIR} mkdir -p %{INSTALLDIR} cp -Rp * %{INSTALLDIR} %clean #rm -rf %{buildroot} # Avoid Disastarous Damage : http://dev.tapweb.co.jp/2010/12/273 [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
"%files"では、属性の付け方や、"%config"の動きを練習してみた。また、正式にドキュメント化はされていないようだが、"%exclude"により、特定のファイルを除外する方式も試している。"%dir"と組み合わせており、「git向けに空ディレクトリとして、無視ファイル1つだけ入れたディレクトリをリポジトリに登録したが、パッケージインストール時はディレクトリだけを作成して終わりにしたい」というユースケースを想定している。
%files %defattr(-,root,root) /etc/helloworld/regular.txt # auto include child files under the directory /etc/helloworld/auto_include_child %config %attr(0600,root,root) /etc/helloworld/greet.conf %config(noreplace) /etc/helloworld/greet-noreplace.conf %attr(0700,root,root) /etc/helloworld/greet.sh %attr(0600,root,root) /etc/helloworld/p0600.txt %attr(0705,root,root) /etc/helloworld/p0705.txt # directory only %dir %attr(0770,-,-) /etc/helloworld/dir_only %exclude /etc/helloworld/dir_only/ignored.txt
"%files", "%attr"参考:
"%exclude"について:
最後に、pre/post, preun/postun についての練習を入れている。
%pre if [ "$1" = "1" ]; then echo "pre-install script : Initial installation." elif [ "$1" = "2" ]; then echo "pre-install script : Upgrade installation." fi %post if [ "$1" = "1" ]; then echo "post-install script : Initial installation." elif [ "$1" = "2" ]; then echo "post-install script : Upgrade installation." fi %preun if [ "$1" = "0" ] ; then echo "pre-uninstall script : Uninstall operation." elif [ "$1" = "1" ]; then echo "pre-uninstall script : Upgrade uninstallation process." fi %postun if [ "$1" = "0" ] ; then echo "post-uninstall script : Uninstall operation." elif [ "$1" = "1" ]; then echo "post-uninstall script : Upgrade uninstallation process." fi %changelog
RPMの基本
Fedoraからのドキュメント、パッケージングのガイドライン
今回、かなり参考になった記事
JenkinsなどCI環境と組み合わせる場合に参考になりそうな記事
Rubyなどのライブラリから、RPMパッケージをプログラマブルに生成するライブラリ
その他
ExtJSは豊富なコンポーネントを提供していますが、変化の激しいHTML5+JavaScript開発において、サードパーティのJavaScriptライブラリを使うケースもあります。
ExtJS4.2 + Sencha Cmdの開発環境で、サードパーティのJavaScriptライブラリを使うにはどのような構成にすればよいか試してみました。
JavaScript/ExtJS/ExtJS4 + Sencha Cmd 勉強メモ3, アイコン画像のカスタマイズ からの環境で練習します。
今回の実験環境:
Ubuntu 12.04 LTS (64bit) ext-4.2.1.883 (GPL版) Sencha Cmd v4.0.4.84 Ruby (rbenvにて ruby 2.0.0p481 をインストール済み) /work/www 以下をDocumentRootとしてApacheHTTPDで公開 /work/www/ext-4.2.1.883 にExtJSを展開済み /work/devtools 以下にSencha Cmdをインストール Webブラウザによる動作確認:Firefox 29 on Win7 Pro 日本語版
引き続き、"/work/www/extjs-tests/t1" を "${app.dir}" として参照します。
サンプルコード : https://github.com/msakamoto-sf/extjs42-senchacmdv4-exercise
ExtJS4.2 + Sencha Cmdの開発環境で、アイコン画像のカスタマイズについて練習してみます。
引き続き JavaScript/ExtJS/ExtJS4 + Sencha Cmd 勉強メモ1, JavaScript/ExtJS/ExtJS4 + Sencha Cmd 勉強メモ2, テーマ(Theme)のカスタマイズ と同じ環境で練習します。
今回の実験環境:
Ubuntu 12.04 LTS (64bit) ext-4.2.1.883 (GPL版) Sencha Cmd v4.0.4.84 Ruby (rbenvにて ruby 2.0.0p481 をインストール済み) /work/www 以下をDocumentRootとしてApacheHTTPDで公開 /work/www/ext-4.2.1.883 にExtJSを展開済み /work/devtools 以下にSencha Cmdをインストール Webブラウザによる動作確認:Firefox 29 on Win7 Pro 日本語版
引き続き、"/work/www/extjs-tests/t1" を "${app.dir}" として参照します。
サンプルコード : https://github.com/msakamoto-sf/extjs42-senchacmdv4-exercise
ExtJS4.2以降、Sencha Cmdの導入に伴い、"package"の一種類として Theme を用意する方式になりました。
JavaScript/ExtJS/ExtJS4 + Sencha Cmd 勉強メモ1 と同じ環境で、続けてThemeについて練習してみます。
今回の実験環境:
Ubuntu 12.04 LTS (64bit) ext-4.2.1.883 (GPL版) Sencha Cmd v4.0.4.84 Ruby (rbenvにて ruby 2.0.0p481 をインストール済み) /work/www 以下をDocumentRootとしてApacheHTTPDで公開 /work/www/ext-4.2.1.883 にExtJSを展開済み /work/devtools 以下にSencha Cmdをインストール Webブラウザによる動作確認:Firefox 29 on Win7 Pro 日本語版
JavaScript/ExtJS/ExtJS4 + Sencha Cmd 勉強メモ1 の続きですので、 "/work/www/extjs-tests/t1" を "${app.dir}" として参照します。
サンプルコード : https://github.com/msakamoto-sf/extjs42-senchacmdv4-exercise
最近、ExtJSを勉強しているのですが、ExtJS 4.2 になって事実上、Sencha Cmdによる開発方式が前提となりました。
そこで、ExtJS 4.2 を使ってSencha Cmdを触ってみましたので、練習メモとして公開します。
今回の実験環境:
Ubuntu 12.04 LTS (64bit) ext-4.2.1.883 (GPL版) Sencha Cmd v4.0.4.84 Ruby (rbenvにて ruby 2.0.0p481 をインストール済み) /work/www 以下をDocumentRootとしてApacheHTTPDで公開 /work/www/ext-4.2.1.883 にExtJSを展開済み /work/devtools 以下にSencha Cmdをインストール Webブラウザによる動作確認:Firefox 29 on Win7 Pro 日本語版
サンプルコード : https://github.com/msakamoto-sf/extjs42-senchacmdv4-exercise