2012年01月13日

[jython]というよりpython

まぁ、細々とAccesslogとかnativestd_err.logを分析するのに、
最近はもっぱらpython。
perlはすぐ忘れる。なんでやろな。歳かな。

で、忘れやすいからメモしとく

・2次元配列をワンライナー
C=[[0 for i in range(0,12,1)] for j in range(0,24,1)]

これで、C[24][12]が全部0で初期化されて作成

・時刻文字列をTimeなオブジェクトへ
 time.strptime(文字列,"%H:%M:%S")

フォーマット文字はSimpleTimeFormatとかとほぼ同じ。規格名とかありそうだが。
import time が必要

・UTCからJSTへ
これが面倒だった(;´Д`)ので、記録しておきたい。
ぅおぅ、ぅおぅ、イッツ! タイムゾーン!!
一秒ごとにお前を

っていう。すまん。男闘呼組とか今の若い人はわからんわな。

TZを定義して、Classを作ってあーだこーだってやるやり方もあるんだが
面倒すぎる。なんで、ログをちょろちょろっとするものでClassまで作らねばならんのだ。
と、いうことで、JSTだけなら+9すりゃおkなので

from datetime import datetime,timedelta

datetime.strptime(文字列,'%H:%M:%S') + timedelta(hour=9)

・デリミタを一杯つかって、split

正規表現でおk
re.split('[ (=):\./\*]',文字列)

この例は ( = ) : . / * と半角スペースの8文字がデリミタになる。


UTCな時間でデリミタ統一感ゼロなログを分割してGNUplotでグラフ化するだけの
簡単なお仕事です。
(GNUplotだと時間軸のの整形が楽だから、だけだけど)
( ´ー`)フゥー...


posted by koteitan at 11:40| Comment(0) | TrackBack(0) | jython | このブログの読者になる | 更新情報をチェックする

2010年07月29日

[jython]スクリプト名の取得

落ち着いて聞いて欲しい

scName=sys.argv[0]

これだけで済むはずのコードが


cmdline = os.environ.get('IBM_JAVA_COMMAND_LINE')
if up1frame == topframe and cmdline and not topframe.f_globals.get('__file__'):
beg = 0
end = len(cmdline)
# Throw away everything after the '--', if present.
dashdash = cmdline.find('--', beg, end)
if dashdash >= 0:
end = dashdash
# If we can't find a filename, just use a "-"
mainfile = '-'
dashf = cmdline.rfind(' -f ', beg, end)
if dashf:
# Grab everything from after the "-f" to the following space.
beg = dashf + 4
space = cmdline.find(' ', beg, end)
if space >= 0:
end = space
mainfile = cmdline[beg:end]

scName=mainfile

websphere V7 のjythonではこうなる。
はっきり言って役に立つとは思えないが
血圧増加大な効果を喰らうのは俺だけでいい。
参考までに記録しておく

http://dbrand666.wordpress.com/2010/04/13/fix5/
http://alvinabad.wordpress.com/2008/05/28/jython-in-webspheres-wsadmin-broke-sysargv/
posted by koteitan at 11:16| Comment(0) | TrackBack(0) | jython | このブログの読者になる | 更新情報をチェックする

[jython]エスケープとエンコード

今回はpythonなんだがな。

とある障害対応でアクセスログから検索キーワードの内容を
抽出して、マズいワードを探してよ。みたいな
砂浜の砂粒から砂金を見つけるような作業

手動でやるわけにはいかんし、public static void main(…
とやるのも('A`)マンドクセ
cygwinのpythonでちゃっちゃとやるわ。

で、splitとか検索ワード部分の抽出とかは割愛するとして
デコードの部分

sword=sword.decode("shift_jis")

が何故かうまくいかない(\x何某\x何某\x何某\x何某のまま)
対話モードでやってみると(\x何某をコピペしてな)
うまく行く。

小1時間ほど思案して orz となる。

\x何某と表示されるってことは、メモリ上では
\\x何某 と\ がエスケープされているわけだ。
ファイルから読んでるんだから当たり前だわな。

ということで、

sword=sword.decode("string_escape")
sword=sword.decode("shift_jis")

エスケープを外せばいいだけ。┐(´д`)┌ ヤレヤレ

夏バテ気味で脳に栄養足りてないな・・。

http://lightson.dip.jp/zope/ZWiki/053_e6_96_87_e5_ad_97_e3_82_92_e3_82_a8_e3_82_b9_e3_82_b1_e3_83_bc_e3_83_97_e3_81_99_e3_82_8b_ef_bc_8f_e3_82_a8_e3_82_b9_e3_82_b1_e3_83_bc_e3_83_97_e3_82_92_e5_a4_96_e3_81_99
http://www.python.jp/doc/2.5/lib/standard-encodings.html
http://www.trashbox.jp/~moriwaka/moin.cgi/PythonEncode
posted by koteitan at 10:44| Comment(0) | TrackBack(0) | jython | このブログの読者になる | 更新情報をチェックする

2010年07月13日

[jython]続続続続・バージョン

備忘録っぽいよな。

・SystemExit が Exceptionのサブクラス
 だから、途中でsys.exit()するとExceptionでcatchされ、例外扱い。( ゚Д゚)ハァ?
 2.4とかではちゃんとExceptionの別列になっているので問題ない。

・Exception.messageが無い
 笑えるぐらいメンバ数が違う。あっはっは。

( ´ー`)フゥー...。これ役に立つのか・・・。orz
posted by koteitan at 18:22| Comment(0) | TrackBack(0) | jython | このブログの読者になる | 更新情報をチェックする

2010年07月07日

[jython] 続続続・バージョン

(=゚ω゚)ノぃょぅ

化石みたいなバージョンで開発すると頭がウニになるな。
今回のドツボポイントは日本語だ。

ログを出力するために共通系の処理へバイパスしたんだが
羅列される\uXXXX\uXXX\uXXX\uXXX\uXXX

ハイハイ、ワロスワロス。utf-8ね。

hoge.encode("shift_jis") と・・・

unknown encoding: shift_jis

( ゚Д゚)ハァ?

pythonのHPでもその他サイトでもおkだし、ローカルのcygwinでpython起動しても
ちゃんと動くから、またバージョンか・・。

調べてみると、JapaneseCodecsっていうパッケージが必要で、入ってないし
諸々の制約やなんやらで入れられないし。
ローカルのpythonは2.5.5だから標準で組み込まれているのね、なるほどね。
(2.4から標準)

さて、どうするか・・。

・javaでos.system()に相当する機能を車輪の再開発 → 却下
・日本語をつかわない → 個人的には(・∀・)イイネ!!ー でも却下
・デコードを自前でやる → 車輪の再開発でしかない却下

普通にprintとかはできるから、shift_jisな瞬間はある模様なんだが、、、と
いろいろ調べてみたらどうやらパイパス用に作った関数を通すと\uXXXX表記になるみたいで
そこだけ切り出したpyファイルを作って再現させてみようとすると再現しない。

キタコレ

結論から言うと、可変長引数に日本語文字を入れると\uXXXX表記に変換されている模様
こんな化石みたいなバージョンでこんなことしてドツボる人もあんまり居ないだろうけど
備忘録として記録しておこう。

可変長引数をやめて、リストやタプル、javaのコンテナでやるといい。
あー、('A`)マンドクセ


化石て2回書いてしまった。
posted by koteitan at 10:32| Comment(0) | TrackBack(0) | jython | このブログの読者になる | 更新情報をチェックする

2010年06月23日

[jython]script開発中にドツボパターン

ちょっと前にも書いたが、wsadminのjythonに組み込まれているpythonは
古い。だから、最近のpython基準で解説してある書籍やサイトを参考に
していると( ゚Д゚)ハァ? となる。

最近はまったのはdict() 辞書。これは2.3か2.4ぐらいからなので使えない。またか。
jythonなんだから、javaのHashMapとか使えばいいんだけどさ。

なんだかなーーーー。
posted by koteitan at 12:58| Comment(0) | TrackBack(0) | jython | このブログの読者になる | 更新情報をチェックする

2010年06月02日

[jython]続・バージョン

某HPに生きた化石と書かれているぐらいドマイナー言語jython
http://www.okisoft.co.jp/esc/python/iron-python-intro.html

ハッハッハ。

昨日からの続きでXMLのパーサーもどきとラッパー、
各種アクセス用の簡単なライブラリをこさえた。
殆ど過去のJavaソースからの切り張りだがさ。

駄菓子菓子、ここに罠があった。
ローカルでちょろちょろっとテストしてOKOK
さぁ、WebSphere上でGoだ、とするとTraceback (innermost last):

( ゚Д゚)ハァ?

つらつらとTracebackを読むと、

NameError: False

「Falseとか知らねーし」て意味だわな。
DocumentBuilderFactoryの設定周りにちょこちょこっと使うんだがさ。
昨日も書いたが、websphereに組み込まれているjythonは2.1
化石も化石だが、このjythonだと実装しているpythonはおそらく2.2
つまり、TrueやFalseというBooleanが無い。
信じられないかもしれない。この平成、21世紀だというのに
大昔のC言語よろしく、1がtrue、0がfalse。

ローカルのテスト環境はjython2.2b2、True/Falseがちゃんと認識される。これが原因。
しかし、こんなしょうもない小バグにピキピキさせられるのは結構くるよな。
posted by koteitan at 18:06| Comment(0) | TrackBack(0) | jython | このブログの読者になる | 更新情報をチェックする

2010年05月10日

[jython]というよりpython

pythonからbashの関数は直接は呼べない。
shのサブプロセス作って、いちいちコールとかヤッテランネ。

全部pythonで書けばいいじゃまいか、とも思われるが
そうもいかないのが現場である。
少ししか連携すべき関数はないからwrap書くしかないねぇ(´-ω-`)
posted by koteitan at 17:52| Comment(0) | TrackBack(0) | jython | このブログの読者になる | 更新情報をチェックする

2009年11月10日

[jython]WebSphere変数の修正・確認

WebSphere変数の〜〜がどうなっているか確認してくれ、
今すぐ、全サーバーで!!

とか言われてもだね、40も50もあるものを管理コンソールで
「ポチポチポチポチ PrtSc」 「ポチポチポチポチ PrtSc」 「ポチポチポチポチ PrtSc」

ポチポチポチポチ PrtSc
  ( _, ,_)
_(__つ/ ̄ ̄ ̄/_
  \/    ./
モクヒョウヲセンターニイレテスイッチジャネーンダカラヨ…



         /\
        ../  ./|
      ∴\/./
     _, ,_゚∵ |/
   (ノ゚Д゚)ノ     うわぁあああああ!!脳が腐る!!
  /  /
 ̄ ̄ ̄ ̄ ̄ ̄

ある変数名をJAVA_HOMEとしよう。対象は全範囲。

def show(Category,obj,Name):

print "Category < %s > " % Category
print ""
for ID in obj.splitlines():
val = AdminConfig.list("VariableSubstitutionEntry",ID)
vName=AdminConfig.showAttribute(ID,"name")
print " %s : %s " % (vName,getparam(val,Name))


def getparam(val,Name):

for v in val.splitlines():
if (AdminConfig.showAttribute(v,"symbolicName")==Name):
return AdminConfig.showAttribute(v,"value")
break
return "Not Entry"


show("CELL",AdminConfig.list("Cell"),"JAVA_HOME")
Nodes=AdminConfig.list("Node")
show("NODE",Nodes,"JAVA_HOME")
for n in Nodes.splitlines():
show("SV",AdminConfig.list("Server",n),"JAVA_HOME")



カシャーンとエンターでこんな結果に
Category < CELL >

Cell01 : ${WAS_INSTALL_ROOT}/java
Category < NODE >

CellManager01 : ${WAS_INSTALL_ROOT}/java
Node01 : ${WAS_INSTALL_ROOT}/java
Category < SV >

dmgr : Not Entry
Category < SV >

as1 : Not Entry
as2 : Not Entry
as3 : Not Entry
以下略

現実は残酷である↓
ポチポチポチポチ PrtSc
  ( _, ,_)
_(__つ/ ̄ ̄ ̄/_
  \/    ./
スクリーンショットガヒツヨウナンダッテヨ…ヤッテランネェ

       |
   \  __  /
   _ (m) _ピコーン
      |ミ|
   /  .`´  \
     ('A`)    そうだ!画像加工しよう!
     ノヽノヽ
       くく

            | カチカチカチカチカチカチ
            | アキュポイントでイメージ加工は不可能に近い…
     ∧ ∧ 。o | 
     (;´Д`)/ ̄ \_
_ξ_(__つ / Thinkpad /_
  旦

ポチポチポチポチ PrtSc
  ( _, ,_)
_(__つ/ ̄ ̄ ̄/_
  \/    ./
ノウガクサルノウガクサルノウガクサル


posted by koteitan at 17:15| Comment(0) | TrackBack(0) | jython | このブログの読者になる | 更新情報をチェックする

2009年11月05日

[jython]jython奮闘記(2)

奮闘も糞ももう、jythonでの開発は殆ど終わってるんだけどねー(´-ω-`)

InfocenterとサンプルとXMLと謎のメッセージに格闘してな・・。

記事で紹介したWebSphere Application Server Administration Using Jython
が届いた

まだ、ざーっとしか目を通してないんだが、とりあえず所感

・検索したい
e-bookがあるなら先に言ってくれ orz

章立てはjython入門(python入門)、
Admonオブジェクト紹介、Admintask紹介、
それらをつかった具体例、リファレンスとなる。
jythonスクリプトが出てくる箇所ではコードの説明があるのはGood

しかし、洋書独特のものも有りなん。
P139 List7.15を試してみようとしたが・・・


wsadmin>import WAuJ_utilities as WAuJ
WASX7015E: コマンド "import WAuJ_utilities as WAuJ" を実行中に例外が発生しました
。例外情報:
com.ibm.bsf.BSFException: exception from Jython:
Traceback (innermost last):
File "<input>", line 1, in ?
ImportError: no module named WAuJ_utilities



モジュールが無い。標準じゃねーのか。
欄外に、

13 For the import in line 1 to succeed,the WAuJ_utilities module must be available in one of the sys.path.

1行目のimportをやるにはsys.pathにWAuJ_utilitiesが含まれてないといかんよ。

で、どこにあるんだよ・・。
このあともshowasDict()とかバンバン出てくるんだが、
肝心のモジュールがねぇよヽ(`Д´)ノ リンクもねぇよ

検索してみると海外のフォーラムに断片的にあるから
モジュール自体はどこかに存在してることは確定的

公式サイトがここ(多分)

This site is new, and under construction. Look for new content soon, including articles, sample code, mailing list(s), and more!


鋭意制作中?

ということで★2つ
posted by koteitan at 12:14| Comment(2) | TrackBack(0) | jython | このブログの読者になる | 更新情報をチェックする

2009年10月09日

[jython]ヒープサイズの調整

ASが一杯だ。いちいち管理コンソールとかやってられねぇ。面倒すぎる。
よろしい、ならばjythonだ。

(1)APサーバーを列挙

servers = AppConfig.list("Server")
for sv in servers.splitlines():
if(AdminConfig.showAttribute(sv,"serverType")=="APPLICATION_SERVER"):
#これでセル配下の全ASに大して同じ処理を実行できる。

(2)仮想マシンのIDを取得
jvms = AdminConfig.list("JavaVirtualMachine",sv)
for jvm in jvms.splitlines():

※JVMが複数あることは無いからループは無用だが、
 他の設定だと複数あることもあるので常にsplitlines()は意識
 しなければドツボにハマる。

(3)ヒープサイズ変更
最小ヒープサイズ=initialHeapSize
最大ヒープサイズ=maximumHeapSize

AdminConfig.modify(jvm,[["initialHeapSize",256],["maximumHeapSize",1024]])


変数名とかの調べ方
 ・上位のIDからAdminConfig.showAll()
 ・(WAS_INSTALL_ROOT)/profiles/(your profile)/config の
  XMLファイルから目星をつける
 ・InfoCenter

JVMの構成IDから変えることができるものとして他に、
verboseModeGarbageCollection(冗長GC)
genericJvmArguments(汎用JVM引数)
などなど。詳しくはshowAllしてくれ。

対象ASが100個有った場合、
一個処理するのに2分かかったとして200分の処理が
長くとも5分で終わる。
正しくセットできているかどうか、はそのセットした値を
逆にshowAttributeすれば証跡も残せる。
コンソールからだと画面のSSぐらいしかない。
(コンソールログというものがあり、証跡としてはこれでも十分だが
読めるようにするには編集をやらねばならんね。)
posted by koteitan at 15:27| Comment(0) | TrackBack(0) | jython | このブログの読者になる | 更新情報をチェックする

2009年09月03日

[jython]jython奮闘記(1)

WebSphereの設定の殆どをスクリプトでやらねばならん。
管理コンソールでポチポチやればいいじゃん、って思うわけだが
誰でもできるようにしとけ?わけわかんね。
こっちのほうがトラブったら悲惨だとおもうんだが。

Websphere+jythonでググるとこのblogが一番上ってぐらいマイナー言語わかる奴連れてこれるのかよ、とか愚痴ったところでどうしようもない。

ケガの功名、ググって見たときにIBM発刊のWebsphere管理jythonの本が
あるじゃまいか!!



って、発売11月!!遅いわ!!とりあえず、注文したけどさ。
Infocenterの丸コピだったらどうしようという不安ががが。

ということで、サンプルと格闘してtry and errorしかない。
V6の時はテスト環境が使えたが、今回は無いので仕方なく
V7トライアルを利用しているが重い重い重い重い。
マシン買い換えようかしら・・・( ;∀;)

本日のメモ
 構成オブジェクトを列挙したい!!
 AdminConfig.list('Server',"App*")
これでServerクラスで、Appで始まるオブジェクトが列挙される。

 構成オブジェクトのプロパティを見せろ!!
 先のコマンドで、IDをHOGEに格納している前提で、
 AdminConfig.showall(HOGE)

これで、HOGEに格納したオブジェクトが持つプロパティ、
または下位オブジェクトが列挙される

 値変更!!
 AdminConfig.modify(HOGE,[['aaaaa','bbbbb']])
列挙した名前をつかって、python配列型で。

 セーブ!
 AdminConfig.save()
これを忘れると管理コンソールで「変更を破棄」と同じに
 なってしまう。

とりあえず、基本の4つね。

愚痴ったけどね、でもね、エクセルやパワーポイントで
資料作成してるよりはよっぽどいいぞ、うん。

posted by koteitan at 18:08| Comment(8) | TrackBack(0) | jython | このブログの読者になる | 更新情報をチェックする

2007年07月19日

[jython]WebSphereと戦ってみる

jythonのページを更新した(HPからドゾー)

AdminConfigとかは便利なんだけど
いつも手探りだからなんだかねぇ。
もうちょっと資料でてこないものかねぇ。(´-ω-`)

セミナーとか行けば詳しい資料貰えるのかな…。
posted by koteitan at 15:33| Comment(0) | TrackBack(0) | jython | このブログの読者になる | 更新情報をチェックする

2007年06月15日

[jython]jython memo

備忘録がてらにφ(`д´)カキカキ

OSのコマンドを実行し、その結果を取得する。
シェルで言うところのバッククォートに相当する処理だが、
unixでは
 hoge = commands.getoutput('ls')

と書く。しかし、これはwindowsだと「{は有効なコマンドじゃない」
みたいな謎のエラーを吐くので(多分シェル変数を使おうとしているのかな)使えない。

windowsではこう書くらしい。
 hoge = os.popen('dir').read()

( ´・∀・`)へー
つか、これじゃあ、jythonぢゃなくpython tipsだなコリャ。
posted by koteitan at 18:48| Comment(0) | TrackBack(0) | jython | このブログの読者になる | 更新情報をチェックする

2007年05月25日

[jython]jacl2jython

jacl script から jython scriptへ自動変換してくれるツール

http://www-1.ibm.com/support/docview.wss?rs=180&uid=swg24012144

ためしに業務のjaclを変換してみた。

  1. カレントにjaclを置いておかないとダメ
  2. 日本語がスクリプトに含まれると失敗する

まぁ、一から全部書き直すことを考えれば便利なんだけどね。
小さいスクリプトなら書き直すほうが早いかもね。
日本語NGが地味に痛い。
posted by koteitan at 15:41| Comment(0) | TrackBack(0) | jython | このブログの読者になる | 更新情報をチェックする

2007年05月24日

[jython]WebSphereでjython

んー、重くて重くて。
マシンが非力なのか、コマンド一個打つたびに、
一服できちゃうぜよ。なんとかならんのか、このV6.1は。

WebSphereでjythonモードの管理スクリプトに入るには

#wsadmin.sh -lang jython

と、言語モードをjythonに指定しないといけない。
デフォルトはまだjaclなのである。
なんだかなー。
よーく考えたらjythonをインストールしなくても
WebSphereがあればOKだったような気もするが、(・ε・)キニシナイ!!
posted by koteitan at 16:25| Comment(0) | TrackBack(0) | jython | このブログの読者になる | 更新情報をチェックする

2007年05月23日

[jython]13日のjython(4)

jython続編である。(HPからTips-jythonと辿ってちょ)
結論から言うと、ネットワークに関しては、pythonに任せておく方が楽。

javaでガンガってもあんまり意味無いし報われない、と思う。
posted by koteitan at 14:44| Comment(0) | TrackBack(0) | jython | このブログの読者になる | 更新情報をチェックする

2007年05月22日

[jython]13日のjython(3)

ファイルIOを調べてみた。(気になる方はHPからTips、jythonと辿ってくだされ)
pythonでもjavaでもどっちでもなんとでもなる処理な場合、
正直、どっちでやろうか迷う。
pythonの勉強とjythonの背景から、pythonでやるべきなんだろうけど。


while 1:
  str = infile.readLine()
  if not str: break


という書き方だけはなんとかならんもんなのかなぁ。

while not (str = infile.readLine()):

の方がしっくりくるんだが…。
posted by koteitan at 16:25| Comment(0) | TrackBack(0) | jython | このブログの読者になる | 更新情報をチェックする

2007年05月21日

[jython]13日のjython(2)

まぁ、新しい言語でもなんでも基本は同じだろうし、
とりあえずやってみるべよ。
まず、ココを参考にインストールして、hello worldからやってみるか。

  1. Hello world
  2. ファイルI/O
  3. ネットワーク
  4. WebSphere管理コマンド
こんな時間割でやってみよう。
HelloWorld編、TIPSに載せたので、興味ある人はHPから見てちょ。
posted by koteitan at 11:31| Comment(0) | TrackBack(0) | jython | このブログの読者になる | 更新情報をチェックする

[jython]13日のjython(1)

なんだ、コレ。
java+pythonというハイブリッドな言語なんだが、
JSPの香りがするなぁ。
簡易スクリプトとOoのミックスインといえば響きはいいが、
どうなんだ、とモヤモヤしてたら業務で使わなければいけなくなった。

WebSphereのV6から管理スクリプトの言語がjaclからjythonに
シフトしている(V6以降のリリースではjaclはサポートされなくなる)

とは言っても、ちょろっと資料を漁っても日本語ではろくなものが無いなぁ。
書籍もこの1冊ぐらいか、しかも英語だし(;´Д`)ハァハァ


pythonはちょっとかじっただけだけど、javaはまぁ大丈夫だから
これで何とかしてみるしかねぇなぁ。英語は辛いが。
posted by koteitan at 11:26| Comment(0) | TrackBack(0) | jython | このブログの読者になる | 更新情報をチェックする