D:/

Topcoderで気分転換-SRM241(div1 score250)-

SRM: 241(div1 score250) Statement

You are working on a large database that holds information about several different aspects of your company, such as customers, partners, prospects, employees, products, etc. Every user in the system has access to one or more types of data. For instance, a human resources worker might only have access to employee records, while a sales person might have access to prospects, customers, and products.

You are in charge of writing reports that summarize large volumes of this information. However, since the reports may contain more than one type of data, you need to be determine which users should be allowed to view that report. In this case, assume that a user has permission to view a report if and only if they have permission to view all of the types of data contained in that report.

You are given a list of usernames in String[] userNames. You are given a list of what data types each user can access in String[] allowedData, where each element of allowedData is a space-delimited list of the permitted data types for that user. Finally, you are given a String[] reportData, where each element of report indicates a type of data included in the report.

You are to return a String[] indicating the user names of those users who should be able to access the report. The list should be returned in alphabetical order.

超意訳

  • 引数reportData指定した権限を全て持っているユーザを一覧で出してね。

書いたコード


反省

  • 所要時間: 約15分
  • allowedDataを無駄に分解しようとしてコードを書くのに時間がかかった。
  • String#contains(CharSequence s) を思い出したら早かった。
  • EclipseCoderプラグインを使うと単体テストを自動生成してくれるので、コードを書くことのに集中できて楽。

修正

よくよく考えてみたら、containsだと上手くユーザを検出できない可能性がある。
ということで下記のように修正。

プログラミング用フォント Ricty をMacで使ってみた

IDE用のフォントとしてRictyというのを見つけたのだけど、Macでは表示確認してないとのことだったので、早速試してみた。

Rictyとは

Ricty (リクティ) は研究・開発のツールとして製作されたフリーの TrueType フォントです。C、C++FORTRANPythonPerlRubyAWKシェルスクリプトMakefileLaTeX など、Linux 上でのコーディングにおける使用を想定しています。

導入方法

  1. 公式サイトからRictyアーカイブをダウンロードする。*1
  2. ダウンロードしたアーカイブファイルを解凍し、中にある下記2ファイルを/Library/Fonts/配下にコピーする。*2

Eclipseにフォントを適用してみた

導入したフォントをMacEclipseに適用してみた。フォントサイズを13以上にすると見やすいかも。

感想

公式サイトではMacでの表示確認がしてないとのことだが、今のところ特に不自由なく使えている。暫く試してみようと思う。
個人的には、Eclipse上で使う場合はフォントサイズを13以上に設定すると見やすいかなと思った。

*1:2011/5/3時点ではVersion 2.0.1 が最新。

*2:コピー先についての詳細説明はAppleのサポートページを参照ください。

Windows環境でのSQLLoaderの実行結果はマニュアル通りではない

WindowsXp(Pro)&Oracle10gXE環境でSQLLoaderを実行するバッチファイルを作ったところ、マニュアルとは異なるリターンコードが返ってきたのでメモ。
Oracleのマニュアルを確認すると、*1


Oracle SQL*Loaderでは、SQL*Loaderの完了後、すぐに実行結果を確認できます。プラットフォームによっては、SQL*Loaderの実行結果はログ・ファイルに記録されるのみでなく、プロセス終了コードにも通知されます。このOracle SQL*Loaderの機能によって、コマンドラインスクリプトからSQL*Loaderを起動したときにもその結果を確認できます。表7-1に、それぞれの結果に対応する終了コードを示します。

表7-1 SQL*Loaderの終了コード

結果 終了コード
すべての列が正常にロードされた EX_SUCC
すべての行または一部の行が拒否された EX_WARN
すべての行または一部の行が拒否された EX_WARN
ロードが中断された EX_WARN
コマンドラインまたは構文エラー EX_FAIL
SQL*Loaderに対してリカバリ不能Oracleエラー EX_FAIL
OS関連エラー(ファイルのオープン/クローズ、mallocなど) EX_FAIL

UNIXの場合、終了コードは次のようになります。
EX_SUCC 0
EX_FAIL 1
EX_WARN 2
EX_FTL 3

Windows NTの場合、終了コードは次のようになります。
EX_SUCC 0
EX_WARN 2
EX_FAIL 3
EX_FTL 4

SQL*Loaderが0(ゼロ)以外の終了コードを返した場合、システム・ログ・ファイルおよびSQL*Loaderログ・ファイルで、詳細な診断情報を確認してください。

とあるが、EX_FAIL時のリターンコード値は実際に動かしてみると"1"が返ってくる。
◆試してみたパターンとそのリターンコード

パターン 期待値 実際のリターンコード
引数に指定した制御ファイルが存在しない 3(EX_FAIL) 1
引数に指定した制御ファイルの構文が誤っている 3(EX_FAIL) 1
引数に指定したデータファイルが存在しない 3(EX_FAIL) 1
引数に指定したログファイルが読み取り専用になっている 4(EX_FTL) 4

というわけで、WINNT(WinXPPro)+Oracle10gXe環境でバッチファイルを組み、かつSQLLoaderの実行結果で後続の処理を制御する場合は、終了コードは以下のようになるので注意。*2

結果 WINNT終了コード
すべての列が正常にロードされた 0
すべての行または一部の行が拒否された 2
ロードが中断された 2
コマンドラインまたは構文エラー 1
SQL*Loaderに対してリカバリ不能Oracleエラー 1
OS関連エラー(ファイルのオープン/クローズ、mallocなど) 4

*1:明らかに誤記っぽいところもあるけれど、そのまま引用

*2:Oracle10g,11gでまだ試していないが、同じようになるのでは…

データソースを起動/停止するJythonスクリプト

管理サーバ上で管理している全てのJDBCデータソースを起動するJythonスクリプト

startDataSource.py

#redirect to log file
redirect("startConn.log","false")

#connect to adminserver
connect('weblogic','weblogic')

serverRuntime()

cd("JDBCServiceRuntime/MyDomain/")

#get jdbc datasource runtime
dataSources = cmo.getJDBCDataSourceRuntimeMBeans()
for dataSource in dataSources:
  print dataSource.getName()
  print "DataSource status : " + dataSource.getState()
  try:
    dataSource.start()
    print "DataSource status : " + dataSource.getState()
  except Exception, e:
    # if datasource have been started, catches Exception
    print e

# disconnect from adminserver
disconnect()

#stop redirect 
stopRedirect()

#exit wlst
exit()

例外処理は特に考慮していないため悪しからず。
接続したい管理サーバの情報とか、起動したいデータソース名とか、ドメイン名とかを引数に与えるともっと汎用性が高まりそう。

WLSTコマンドでアプリケーションをデプロイする方法

WebLogicにデプロイされているアプリケーションを再デプロイする方法。

redeploy.py

import sys

userName=sys.argv[1]
password=sys.argv[2]
consolePath=sys.argv[3]
appName=sys.argv[4]
appPath=sys.argv[5]

connect(userName,password,consolePath)

try:
    undeploy(appName)
except:
    System.out.println("アプリはありません");
    pass

deploy(appName=appName,path=appPath)

disconnect()

redeploy.cmd

C:\${BEA_HOME}\wlserver_10.3\common\bin\wlst.cmd redeploy.py {userName} {password} {path} {appName} {appFullPath}

=テスト

あら便利。

入力したプログラムコードを色付けするスーパーpre記法 シンタックス・ハイライトの実装について

ためしにやってみた。

public class Test {
   public static void main(String [] args) {
      System.out.println("Hello java");
   }
}

表もこの通り。

table記法

test hoge
foo bar