パスワードなどはソースコードにも直接書きたくない場合には暗号化します。
Shellでは
./encr.sh -kettle your_password
Batchでは
Encr.bat -kettle your_password
「your_password」を暗号化された結果はこんな感じで出力されます。
Encrypted 2be98afb105d280bbbb18bd63c99dbdde
後はParameterに設定しても良いし、定義ファイルから読み取っても良いでしょう。
2014年11月25日火曜日
2014年8月15日金曜日
Pentaho Data Integrationでメモリー割当を増やす
環境変数に設定しても良いですがスクリプト、Batchファイルを修正する方法です。
Unix/Linuxの場合
- kitchen.sh, pan.sh
JAVAMAXMEM="2048"
-
spoon.sh
PENTAHO_DI_JAVA_OPTIONS="-Xmx2g -XX:MaxPermSize=256m"
- carte.sh
JAVAMEMOPTIONS="-Xmx2048m"
- Carte.bat, Kitchen.bat, Pan.bat
if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS=-Xmx2048m
- Spoon.bat
if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-Xmx2048m" "-XX:MaxPermSize=256m"
2014年8月12日火曜日
Pentaho Data Integration 動的な実行
http://type-exit.org/adventures-with-open-source-bi/2011/03/write-etl-that-writes-etl-creating-crosstabs-with-kettle/
2014年8月10日日曜日
PerlでCGI
Get,Post,Putで渡されたパラメータを取得するPerlによるCGI
設定ファイルはwww.jsonに記入しておく。
受け取るパラメータは27~28行目のように取得する。
Apacheからのデータは以下の環境変数を介して受け取る。
- REQUEST_METHOD:GET,PUT,POST,DELETEが入る
- QUERY_STRING:GETの場合のパラメータ
- CONTENT_LENGTH:PUTの場合のパラメータの長さ
Shellと違ってヒアドキュメント内にコマンドを書く事は出来ない模様。
#! /usr/bin/perl use strict; use warnings; use utf8; use File::Basename qw/basename dirname/; my $DIRNAME = dirname $0; my $BASENAME = basename $0; my $CONF_FILE= "$DIRNAME/cgi.json"; if ( ! -e $CONF_FILE ) { print "Content-type: text/html\n\n ${CONF_FILE} could not be read.\n$!$@"; exit; } my $CONFIG = do $CONF_FILE or die "${CONF_FILE} is could not read.\n$!$@"; my $PARMS = $ENV{'QUERY_STRING'}; my $METHOD = $ENV{'REQUEST_METHOD'}; if ( $METHOD eq "POST" || $METHOD eq "PUT" ) { read(STDIN, $PARMS, $ENV{'CONTENT_LENGTH'}); } my ($USER, $DATE); for my $PARM ( split(/&/, $PARMS) ) { my ($KEY,$VAL) = split(/=/,$PARM); $VAL =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/ego; if ($KEY eq "user") { $USER=$VAL; } if ($KEY eq "date") { $DATE=$VAL; } } print << "END"; Content-type: text/html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>$CONFIG->{title}</title> </head> <body> <div>Input parameters:$PARMS</div> <div>User:$USER</div> <div>Date:$DATE</div> </body> </html> END
外部定義ファイルcgi.jsonには以下の様に設定。
{ title => "CGI Perl Test page" }
Bourne ShellでCGI
Get,Post,Putで渡されたパラメータを取得するBourne ShellによるCGI
設定ファイルはcgi.configに記入しておく。
受け取るパラメータは18~19行目のように取得する。
Apacheからのデータは以下の環境変数を介して受け取る。
- REQUEST_METHOD:GET,PUT,POST,DELETEが入る
- QUERY_STRING:GETの場合のパラメータ
- CONTENT_LENGTH:PUTの場合のパラメータの長さ
31行目はヒアドキュメント内でのコマンド例として無駄にechoしています。
#! /bin/sh BASE_DIR=`dirname $0` BASE_DIR=`cd ${BASE_DIR} && pwd` # Change to full path BASENAME=`basename $0 | sed -e "s/\.[^.]*$//"` #Except extension CONFIG="${BASE_DIR}/cgi.config" if [ ! -f "${CONFIG}" ]; then echo "Content-type: text/html" echo "" echo "<html><body>${CONFIG} is not found.</body></html>" exit fi . "${CONFIG}" PARMS=`echo ${QUERY_STRING} | tr \& "\n"` if [ "${REQUEST_METHOD}" = "POST" -o "${REQUEST_METHOD}" = "PUT" ]; then PARMS=`dd bs=${CONTENT_LENGTH} | tr \& "\n"` fi USER=`echo "${PARMS}" | grep user | cut -d= -f 2 | nkf --url-input` DATE=`echo "${PARMS}" | grep date | cut -d= -f 2 | nkf --url-input` cat <<END Content-type: text/html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>${CONFIG_TITL}E</title> </head> <body> <div>Input parameters <div>`echo "${PARMS}"`</div> <div>User:${USER}</div> <div>Date:${DATE}</div> </body> </html> END
定義ファイルcgi.configには以下のように設定。
CONFIG_TITLE="CGI Sheel Test"
2014年8月7日木曜日
Shell Scriptのテンプレート
Bourne Shell Scriptのテンプレート
機能
定義ファイル デフォルトはスクリプト名.config
機能
- スクリプトと同じパスにある設定ファイルを読み取る。
- 設定ファイルは引数で上書き可能
- 設定ファイル内に定義された動作可能なHostでのみ実行可能
- 日付が変わったら前日のログファイルは日付きのファイルに退避
- 同じユーザーが引数も含めて同じスクリプトの複数起動を防止
- ログには日時を追加して記載
#! /bin/sh set -e # Terminate at error set -u # Error if undefined variable # System Variables BASE_DIR=`dirname $0` BASE_DIR=`cd ${BASE_DIR} && pwd` # Change to full path BASENAME=`basename $0 | sed -e "s/\.[^.]*$//"` #Except extension HOST=`hostname | cut -d"." -f 1` USER=`whoami` TODAY=`date +%Y%m%d` # echo with time stamp in front. log() { NOW=`date +%Y\/%m/%d\ %H:%M:%S` echo "$*" | sed -e "s|^|[${NOW}] |" } log "Start!" # User Variables CONFIG="${BASE_DIR}/${BASENAME}_${HOST}_${USER}.config" if [ $# -eq 1 ]; then CONFIG="$1" fi if [ ! -f "${CONFIG}" ]; then echo "${CONFIG} not found" echo "" exit 1 fi . "${CONFIG}" # Log file LOGDATE="${TODAY}" if [ -f "${LOG}" ]; then LOGDATE=`perl -MPOSIX -le 'print strftime "%Y%m%d", localtime((lstat)[9]) for @ARGV' $LOG` LOGDATE=`echo ${LOGDATE} | cut -d" " -f 1` fi if [ "${LOGDATE}" -lt "${TODAY}" ]; then echo "move log file from ${LOG} to ${LOG}.${LOGDATE}" | tee -a "${LOG}" mv "${LOG}" "${LOG}.${LOGDATE}" fi log "Config file:${CONFIG}" | tee -a "${LOG}" NOW=`date +%Y\/%m/%d\ %H:%M:%S` cat "${CONFIG}" | sed -e "s|^|[${NOW}] Config=|" | tee -a "${LOG}" # Verify host if [ `echo ${HOSTS} | grep ${HOST} | wc -l ` -eq 0 ]; then log "Not allowed on this host." | tee -a "${LOG}" exit 1 fi # Prevent multiple instance GREP_PS="$0 $*" if [ $# -eq 0 ]; then GREP_PS="$0" fi PROCESSES=`ps -o pgid,pid,tty,time,command | grep "${GREP_PS}" | awk '$1==$2' | wc -l` log "No. of proceeses ${PROCESSES}" | tee -a "${LOG}" if [ ${PROCESSES} -gt 1 ]; then log "Already running this script" | tee -a "${LOG}" ps -o pgid,pid,tty,time,command | grep "${GREP_PS}" | awk '$1==$2' | tee -a "${LOG}" log "Abort!" | tee -a "${LOG}" log "" | tee -a "${LOG}" exit 1 fi #do something log "Complete!" | tee -a "${LOG}" log "" | tee -a "${LOG}"
定義ファイル デフォルトはスクリプト名.config
#! /bin/sh LOG_DIR=${BASE_DIR} LOG=${LOG_DIR}/${BASENAME}.log HOSTS="allow_host1 allow_host2"
2014年7月19日土曜日
Mac/Ubuntuで任意のフォルダからWebサーバーを立ち上げる方法
こんな簡単な方法があるのですね。
ポート番号を既に使っていれば8000を別の使っていないポートに変えて下さい。
cd target_path python -m HTTPServer 8000これでlocalhost:8000でアクセス出来ます。
ポート番号を既に使っていれば8000を別の使っていないポートに変えて下さい。
2014年5月19日月曜日
Titanium Mobileでパスワードが認証されない場合の対処
Titanium MobileでCLIなどをアップデートしようとしてもパスワードが認証されない場合にターミナルから以下のコマンドを入力する必要がありました。
また、アップデート時に実行ユーザー名は変更出来ないので管理者権限を持つユーザーでTitaniumを起動する必要があるようです。
sudo chown -R $USER /usr/local
Titanium Studio, build: 3.2.3.201404181442
Mac OS 10.9.3
2014年2月21日金曜日
Meteor on Nitrous.IOで簡単CRUDアプリ
Webアプリ開発を劇的に省力化出来ると言われるMeteorで簡単なCRUDアプリを作ってみました。 更に60秒で開発環境を作れると触れ込みのNitrous.IOを使って省力化。
データの保存は気にしていませんでしたがMongoDBになりました。
Node.jsもMongoDBも全く知らない筆者がNitrous.IOアカウント作成後にインストールからアプリ公開までに掛かった時間は 12時間ぐらいで驚異的です。
やりたい事は
Meteor
Nitrous.IO
疲れたので今日はここまで。
データの保存は気にしていませんでしたがMongoDBになりました。
Node.jsもMongoDBも全く知らない筆者がNitrous.IOアカウント作成後にインストールからアプリ公開までに掛かった時間は 12時間ぐらいで驚異的です。
やりたい事は
- 無料、ただ、ゼロエン
- 出来るだけ簡単にサーバー上に開発環境を準備する
- 使うのはHTML/CSS/JavaScriptだけ
- 追加、表示、編集、削除(CRUD)が出来る1ページだけのアプリ
- 格好良く言えばSingle Page Application, SPAと言ふ
- 入力フォーマット確認など一切無し!
Meteor
- Open Source
- Node.jsをベースにした全部入りフレームワーク
- クライアント側もサーバー側もJavaScriptで記述
- HTML, JavaScriptコードを編集するとクライアントをリロードせずに自動更新
- データが更新されるとクライアントをリロードせずに自動更新
- 正直に言ってデモを見ても魔法のようで何が起こっているのかさっぱり分かりませんでした。
- 出来上がったアプリは1コマンドでTAR化して移動可能
- 出来上がったアプリは1コマンドでmeteor.comで公開可能
- 認証すら不要ってどうゆ〜事?
Nitrous.IO
- 384MBメモリ、750MBストレージが無料
- GitHubやFacebookとリンクしたり紹介すると使えるリソースが増える。
- 開発言語はRuby on Rails, Node.js, Python/Django, Go, PHPから選べる。
- サーバーは普通にLinuxなのでShellとかPerlとかも使えます。
- Web IDEを使う事でiPadやChromebookでも開発が出来る
- 普通にSSHやFTPも使えますし専用アプリもあり
- 環境準備
- Nitrous.IOでアカウント作成
- Meteorには1GBのストレージが必要で作りたてではポイント(N2Oと呼びます)が足りません。 GitHub のアカウントと連携させるなどしてポイントを増やして下さい。
- Box(サーバー)を立ち上げたら以下のコマンドでMeteorを準備
parts install meteor npm install -g meteorite # for debug npm install -g node-inspector
- プロジェクト作成
- より簡単にする為にTwitter BootStrapとjQueryも使いましょう。
- 開発
- HTMLの全体構造
- JavaScriptの構造
- デプロイ コマンド一つでmeteor.comに公開される。
- 削除 削除もコマンド一つ
- その他
- Meteorプロセスが残っているか確認
ps -ef | grep meteor | grep node
- Meteorプロセスが残っていれば強制終了
kill -9 `ps ax | grep meteor | grep node | awk '{print $1}'`
- デバッグ
- プロセス起動時前にオプションを追加
NODE_OPTIONS="--debug" meteor
- 別ターミナルでデバッガーを起動
$ node-inspector Node Inspector v0.7.0-2 info - socket.io started Visit http://127.0.0.1:8080/debug?port=5858 to start debugging.
- http://
hostname /debug?port=5858にアクセスするとデバッグ出来るらしい、、、
- プロセス起動時前にオプションを追加
- Meteorプロセスが残っているか確認
meteor create プロジェクト名 cd プロジェクト名 meteor add bootstrap meteor add jquery
<head> </head> <body> <div class="container"> {{> tables}} {{> send}} </div> </body> <template name="send"> <form> </form> <input type="button" id="send" value="登録" /> <input type="button" id="update" value="更新" /> <input type="button" id="cancel" value="中止" /> </template> <template name="tables"> <table> <thead> </thead> <tbody> {{#each items}} <tr></tr> {{/each}} </tbody> </table> </template>
Items = new Meteor.Collection('items'); if (Meteor.isClient) { Template.ibeacons.items = function () { }; Template.send.events({ 'click #send': function (evt, tmpl) { }, 'click #update': function (evt, tmpl) { }, 'click #cancel': function (evt, tmpl) { } }); function clearForm(tmpl) { } Template.ibeacons.events({ 'click .modify': function (evt, tmpl) { }, 'click .delete': function () { } }); } if (Meteor.isServer) { Meteor.startup(function() { if(Items.find().count() === 0) { // Itemsが0件だった場合、追加 Items.insert( ); } }); }
meteor deploy --password プロジェクト名.meteor.com
meteor deploy -delete プロジェクト名.meteor.com
疲れたので今日はここまで。
2014年1月20日月曜日
指定した日数以前のファイル削除
例えば14日以前のファイルを削除する場合はこんな感じで。
先ずはダミーファイルを用意して動作確認してから使う事を強く推奨します。
動作確認 : Solaris 8
LOG_PATH=~/log LOG_KEEP_DAYS=14 find ${LOG_PATH} -name '*.log' -mtime +${LOG_KEEP_DAYS} -exec rm -f {} \;
先ずはダミーファイルを用意して動作確認してから使う事を強く推奨します。
動作確認 : Solaris 8
2014年1月19日日曜日
Pentaho Data Integration, 巨大なXMLファイルの読み込み
Pentaho Data IntegrationでXMLファイルを読み込むにはGet Data from XMLとXML Input Stream(StAX)があります。
600MBぐらいある巨大なXMLファイルをGet Data from XMLで読み込むとjava.lang.OutOfMemoryError: Java heap spaceでエラーが出ました。 メモリ割当を2.5GBまで増やしても解決しません。
この様な大きなファイルの場合、XML Input Stream(StAX)を使う事が推奨されています。
ただXML Input Streamでは親子関係のデータを取るには以下の様にステップを組み合わせる必要があります。
600MBぐらいある巨大なXMLファイルをGet Data from XMLで読み込むとjava.lang.OutOfMemoryError: Java heap spaceでエラーが出ました。 メモリ割当を2.5GBまで増やしても解決しません。
この様な大きなファイルの場合、XML Input Stream(StAX)を使う事が推奨されています。
ただXML Input Streamでは親子関係のデータを取るには以下の様にステップを組み合わせる必要があります。
2014年1月13日月曜日
Pentaho Data IntegrationをMacで使う
本格的にMacで使いだすと色々と問題が見つかりました。
起動はダブルクリックでは無く、ターミナルから下記のコマンドを入力
/Applications/Pentaho/data-integration-4.4.0
./spoon.sh
Variableをドロップダウンから選択するにはCommand+Spaceを押す。
ただしSpotとことえりのショートカットと重なっているので無効化させておく。
起動はダブルクリックでは無く、ターミナルから下記のコマンドを入力
/Applications/Pentaho/data-integration-4.4.0
./spoon.sh
Variableをドロップダウンから選択するにはCommand+Spaceを押す。
ただしSpotとことえりのショートカットと重なっているので無効化させておく。
登録:
投稿 (Atom)