サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
デスク環境を整える
kenichiro22.hatenablog.com
NSIS(Nullsoft Scriptable Install System)は、オープンソースのインストーラ作成環境で、独自のスクリプト言語で作成したスクリプトをコンパイルしてWindows用インストーラを作成することができます。Tomcatなどオープンソースソフトウェアのインストーラでもよく使用されています。スクリプトは柔軟に記述可能でプラグインも充実しており、だいたいのことはできます。このエントリーはNSISでx64プラットフォーム対応のインストーラを作成する場合のメモです。 x64環境の判定 インストーラがx64環境で動作しているかの判定は、x64.nshというスクリプトをインクルードして、以下のようなスクリプトを記述します。 # x64判定用マクロ !include x64.nsh # Ifマクロ !include LogicLib.ns ${If} ${RunningX64}
@QueryParamアノテーションで、パラメータをインジェクトすることができますが(パラメータに含まれない場合はnullになる)、パラメータがあまりに多いとメソッドシグネチャが見にくくなり、値をBeanにコピーしたりするのも面倒です。このような場合には、、 @GET @Produces({MediaType.APPLICATION_JSON}) public List<Contact> getContacts(@QueryParam("offset") Integer offset, @QueryParam("limit") Integer limit) { // 省略 } UriInfoをインジェクトする JavaによるRESTfulシステム構築では、以下のように、UriInfoをインジェクトして、そこからMultivaluedMap経由でパラメータを取得する方法が記載されています。
Gladinet Cloud Desktopは、S3のようなクラウドストレージサービスをWindowsのネットワークドライブとしてマウントするアプリケーションです。以前、Linuxでs3fsのようなソフトがないかと調査したときには有償ソフトだと思っていたのですが、Starter Editionでも十分使えそうです。 現状ではS3の東京リージョンは選択できないようなのですが、S3 Compatible Storageを選択しアクセスポイントに"http://s3-ap-northeast-1.amazonaws.com"を指定すれば、東京リージョンのBucketも利用できました。 こんな感じで、ネットワークドライブとしてマウントできます。もちろんドライブレターや名称も変更できます。 非常に使い勝手もよさそうなのですが、一点問題があるとすると、内部ではWebDAVを使用しているようで、そのポー
サーバーサイド Jerseyでマルチパート(multipart/form-data)によりアップロードされたファイルを処理するためには、jersey-multipartというモジュールを使用します。 pom.xmlのdependencyにjersey-multipartを追加します。 <dependencies> <!-- ... --> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-server</artifactId> <version>1.9</version> </dependency> <dependency> <groupId>com.sun.jersey.contribs</groupId> <artifactId>jersey-multipart</artifactId> <version
このエントリの続きです。パラメータが多い場合には、対応するメソッドの引数が増えてしまうので、引数をDTOにまとめたいという話です。 例えば、id, foo, bar, bazという引数があるメッソッドで、これらの引数を以下のようなDTOにしてクエリパラメータやパスパラメータから値を自動で設定したいとします。 public class MyParams { @PathParam("id") public Integer id @QueryParam("foo") public String foo; @QueryParam("bar") public String bar; @QueryParam("baz") public Integer baz; } 前回は、以下のようにResourceContextをインジェクトして、メソッド内でそれを介してMyParamsを取得していました。これだと
AWS SDK for Rubyでインスタンスをまとめて起動/停止するスクリプトを書きました。 特定の時間しか使わないインスタンスが複数あるのですが、これらをスケジュールにしたがってまとめて起動・停止するために、いままでCloudworksを使わせていただいていたのですが、スクリプトを書いてJenkinsから実行するようにしました。 まず、AWS SDK for Rubyのインストールですが、gemでインストールできます。Ubuntuの初期状態だと、他にいくつか必要なパッケージがありました。 sudo apt-get install ruby-dev sudo apt-get install libxslt-dev libxml2-dev sudo gem install aws-sdk スクリプトは以下のようなものです。 複数のインスタンスをまとめて操作するために、あらかじめAWS Co
接続URLの構築 / Microsoft TechNet SQL Server 2005/2008で統合認証を使ってJDBC接続する方法です(Windows限定)。JDBCドライバはここからダウンロードします。2005用ですが2008でも使えます。そういえば、この前、最新版2.0のCTP版が出たみたいです。 統合認証でJDBC接続する際には、ドライバに含まれる以下のdllファイルを使用します。まず、ファイルを検索パスの通った場所におくか、システムプロパティjava.library.pathで指定します。 sqljdbc_1.2\jpn\auth\x86\sqljdbc_auth.dll JDBCの接続URLに以下のパラメータを追加します。 jdbc:sqlserver://localhost;integratedSecurity=true;
Route 53 Getting Started Guideでは、Hosted Zoneを操作するためのXMLは別途作っておいて、dnscurl.plというスクリプトで署名してリクエストを送信しています。もう少し高レベルのAPIで操作できるものはないかと探してみたところ、cli53というpythonのツールがあったので試してみました。 barnybug/cli53 - GitHub ubuntuでのセットアップと使い方は以下のとおりです。 セットアップ インストールしていなければ、python, gitをインストールします。 $ sudo apt-get install python $ sudo apt-get install python-setuptools $ sudo apt-get install gitdnspythonをインストールします。 $ sudo easy_inst
WebアプリケーションのテストにSeleniumを使っていますが、少し前になりますがSelenium 2が正式にリリースされたので試しています。Selenium 2は、WebDriverベースとなりアーキテクチャ的にも大きく変更されています。Selenium RCで使用していたSeleniumServerは不要になっています。JUnitから使用する場合には、 Selenium 2.0 and WebDriver ― Selenium Documentation このドキュメントにあるとおりMavenのdependencyにselenium-javaを追加し、 <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.5.0</versio
EC2をコマンドラインで管理するためのEC2 API Toolsのインストール手順のメモです。 事前準備 AWSのサイトでX.509 証明書を取得しておきます。 cert-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pem pk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pem Windows Javaについてはあらかじめインストールしておきます。Amazon EC2 API Toolsを以下のURLからダウンロードして展開します。 Amazon EC2 API Tools : Developer Tools : Amazon Web Services 展開したフォルダ(ec2-api-tools-X.X.X.X)を適当な場所(C:\ec2-api-tools-X.X.X.X など)にコピーします。 以下の環境変数を設定します。環境変数に設定し
EC2で利用可能なUbuntu ServerのAMIには日本語リソースが入っていないので、ロケールを変更しただけではコンソールで日本語が使えません。 $ sudo apt-get install language-pack-ja $ sudo update-locale LANG=ja_JP.UTF-8 これで、日本語の言語パックがインストールされて、/etc/default/localeが更新されます。 参考 Ubuntuに日本語localeを設定する - dreamedge.net
いままでXperiaを使用していたのですが、ポケットに入れたまま洗濯してしまい、、Galaxy S(SC-02B)の白ロムを入手して1週間くらいまえから使い始めました。GDD PhoneからXperiaに移行したときも、Xperiaの快適さや液晶のキレイさに感動したのですが、Galaxy Sもすこぶるよいです。多分慣れてしまうとXperiaには戻れないです。 さっそく、b-mobileSIM U300でWifiテザリングの環境を構築しました。 WifiテザリングにはXperiaで使っていたBarnacleから、GDD Phoneの時に使っていたWireless Tetherに戻しました(BarnacleがGalaxy Sで動くのかわかりませんが..)。同じ場所のだいたい同じ時刻に使用してもXperiaのころに比べると体感速度が速いような気がしました。といってもmax 300kbpsなのでb
Javaでtarファイルを操作する場合には、Commons Compressを使用するのが簡単そうです。Commons Compresは他にもbzip2やgzipにも対応しています。サイトのサンプルとJavadocを見ればだいたいの使い方はわかると思いますが。 File[] filesToArchive = {file1, file2} File tarFile = new File("C:\\temp\\foo.tar"); TarArchiveOutputStream out = new TarArchiveOutputStream(new FileOutputStream(tarFile)); for(File f : filesToArchive){ out.putArchiveEntry(new TarArchiveEntry(f, f.getName())); out.writ
AWS ConsoleでAWS Identity and Access Management (IAM)が操作できるようになったので試してみました。しかし、APIを直接叩かなくなくてよくなったから簡単、ではなかったです。 いずれの方法にしろJSON形式のPolicyを定義する必要があります。AWS Policy Generatorもあるのですが、S3のAPIを使ったことがないと対象のリソースと操作(Action)をどう組み合わせると、どうなるかイメージしづらいです。 IAMでユーザーかグループを作成し、それに対してパーミッションを追加します。まずは、特定のbucketにアクセスできるパーミッションとして以下のようなPolicyを作りました。は実際には対象のbucket名です。このPolicyが正しいかは自信ありません... { "Statement": [ { // (1) "Action
EC2は完全従量制でインスタンスを起動していないときには、EBSを除きほぼ課金が発生しないため、検証用など必要なときだけすぐにサーバを準備できるので非常に便利です。ただ、必要なときしか使わないインスタンスに、Elastic IPアドレス(固定IP)を割り当てるとインスタンスが稼動していないときにも課金されてしまいます($0.01/hなので、1日のうち10時間しか使わないとすると、だいたい0.01×14h×30×85円=357円)。 Elastic IPを使わないとIPアドレスがインスタンスの起動のたびに変更されてしまうので、必要なときだけ起動するという使い方だと不便です。これを改善するため、インスタンスの起動時にDNSサーバのレコードを更新して、登録しているホスト名でインスタンスにアクセスするという方法があると思います。DNSはBINDでもいいですが、せっかくなのでRoute53を使います
追加: Android 2.3.3でのGalaxy SのGPS 私のGalaxy SもGPSは正常に位置を検出できないことがあります。当初は正常に動作していたのですが、いつの間にか不調になりました。その後、ネットの情報を参考に設定変更を試してみたところ改善したように見えますが、完璧ではないです。当初の症状は以下のようなものでした。 GPSを使うアプリケーションで位置の検出ができないか、非常に時間がかかるようになることがある 正常に位置が検出できるときは10秒くらいで検出できて、その後の動作も問題ない(RunKeeperやマップナビでも使えるレベル) Googleマップなんかではタイムアウトしてしまっているようでした。b-mobileの回線だからでは?という情報も見かけますが、GDD PhoneやXperiaのときと比べても明らかに動作が不安定なのでやはりGalaxy S自体に何か問題がある
震災の影響で突発的な停電の可能性もありAmazon S3へのバックアップ環境を構築しました。S3にローカルファイルをアップロードするプログラムはいくつかありますが、オープンソースのもの中心にいくつか試してみた限りは以下がよさそうです。 S3Sync.rb s3fs Cyberduck s3sync.rbは、S3に対してrsyncのような使い方のできるRubyスクリプトです。s3fsはS3をファイルシステムとしてマウントするプログラムで、ローカルとの同期をとるためであればrsyncとあわせて使うことになると思います。s3fsの方がS3を意識せずプログラムからは透過的にアクセスできるのがメリットですが、、今回はWindows環境でも使えるs3sync.rbを使いました。 最後のCyberduckはS3にも対応したFTPクライアントでフォルダの同期機能もあります。WindowsでGUIから操作し
Developer's Guide - Logging - Google Web Toolkit - Google Code GWT 2.1からクライアント側でjava.util.loggingパッケージのクラスが使えるようになってます。といっても私はあまり使ったことがないんですが。。クライアントでもこんな感じでログ出力が可能です。 Logger logger = Logger.getLogger(Foo.class.getName()); // ... logger.info("test log."); ログの出力先としてはポップアップでログを表示するhandlerや、サーバ側にログを送信するhandlerなどが標準で利用できます。GWT添付のサンプルコードに詳しいサンプルがあります。 これまでも、Googleのフレッド・ソオーさんのgwt-logというライブラリがありましたが、2.1か
コマンドラインからJenkinsのジョブを実行する方法を二つ。 wgetでURLにアクセスする Jenkins CLIを使う wget ジョブの実行ボタンをクリックしたときのURLにwgetやcURL経由でアクセスします。認証をかけている場合にはBasic認証でユーザ名/パスワードを渡します。 $ wget http://yourserver.com/job/<ジョブ>/build?delay=0sec --http-user=<ユーザ名> --http-passwd=<パスワード> Jenkins CLI Jenkins CLIは、http://yourserver.com/jnlpJars/jenkins-cli.jarからダウンロードできます。 ジョブを実行する場合には、以下のコマンドを実行します。"-s"オプションでジョブが完了するまで待ちます。URLは環境変数JENKINS_UR
JenkinsでMercurial Pluginを使ってbitbucketのリポジトリにアクセスしてみます。 まずは、マスタのサーバにMercurialをインストールします(Ubuntuです)。 ubuntu@ci: ~$sudo apt-get install mercurial 認証用のSSH鍵を作成していない場合には作成します。ログインしているユーザーではなくJenkinsの実行ユーザーです。 ubuntu@ci: ~$ sudo -u jenkins ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/var/lib/jenkins/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter
SQL Serverにはデータベース毎に"自動終了"というオプションがあり([データベースのプロパティ] ([オプション] ページ))、自動終了を有効にしていると接続がなくなった時点で、データベースがシャットダウンされてリソースが解放されます。再度、接続があると自動的にデータベースが開始されます。 これはデスクトップアプリケーションなどの組み込み用途の場合にリソースを節約するためだと思います。Management Studioからの接続している状態だと自動終了されませんが、コネクションプーリング経由で接続し一定時間使用されないと自動的にコネクションをクローズするような挙動のアプリケーションだと、自動終了が発生してバッファが解放されるため、再起動後の検索パフォーマンスに影響があります。 MSDE(SQL Server 2000)のころには、このオプションはデフォルトで無効になっていたと思うの
S2JDBC-GenのAntタスクを実行するためにMaven Antrun Pluginを使いました。Maven Antrun plugin自体は、これまでも使っていたのですが、普段はMavenの特定のビルドフェーズでAntタスクを実行するために使っていたので、ビルドフェーズに関係なくAntタスクのみを実行しようとして迷ったのでメモしておきます。 Antrun pluginの実行はコマンドラインから以下のように実行します。 mvn antrun:run -Dant.target=foo ここで実行されるAntタスクの以下のいずれかの場所に記述されたものになります。 idがdefault-cliのexecutionに記述されたタスク 以外は省略します。の配下にビルドフェーズ毎の実行するAntタスクを記述している場合には、default-cliというidのexecutionが実行されます。 <
Maven 2.1.0 not passing on system properties to Java virtual machine - Stack Overflow MavenのSurefire plug-inからJUnitのテストケースを実行する際にシステムプロパティを渡す方法です。システムプロパティは以下のようなコードで取得できます。 System.getProperty("foo") 通常のJavaプログラムであれば、java.exeを実行する際の引数に以下のように指定することができます。 -Dfoo=barただ、Maven経由で実行するテストケースでは、以下のようにmavenを実行しても、 mvn -Dfoo=bar testSurefire PluginのforkModeの影響で、取得できない場合があるようです。 この場合には、pom.xmlでSystemPropertie
私の会社ではSubversionを使っているので、まずHgSubversionを導入してローカルのみMecurialを試してみることにしました。HgSubversionを使うと、SubversionのリポジトリをcloneしてローカルではMercurialで管理し、ローカルでの変更をSubversionにpushするという使い方ができるようになります。 今回、クライアントはWindowsで、SubversionはLinux(Ubuntu)で動作しています。 HgSubversionのインストール まず、SubversionとMercurial(TortoiseHg)をインストールします。すでに別のクライアントでもインスールされていれば不要です。 Apache Subversion TortoiseHg HgSubversionを適当な場所にcloneします。 hg clone http:/
前のエントリの続きです。 私はS2JDBCが使いやすいのでDIコンテナとしてSeasar2を使うことが多いです。Seasa2でRESTfulなサービスを提供する場合には、S2Axis2というプロダクトがあるようですが、将来性を考えJAX-RSを使ってみたいので、JerseyとSeasar2の連携を試してみます。 Jerseyには、もともとDIコンテナとの連携用にIoCComponentProviderFactoryというインタフェースが存在し、SpringとGuiceについてはjersey-springとjersey-guiceというライブラリがあります。このコードを参考にSeasarと連携させています。簡易的にですが。今回のソースはこちらにあります。 前提としてDolteng(Seasar2用のEclipseプラグイン)を使用してS2JDBCを使用するWebプロジェクトを使用します。DB
JaveEE6に対応しているGlassfish 3.0を使う方が手っ取り早いとは思いますが、、サーブレットコンテナとしてTomcat6.0を使った環境でJAX-RSを使ってみます。 JAX-RSの実装としては、JavaによるRESTfulシステム構築では、Jersey, Apache CXF, JBoss RESTEasyなんかが紹介されています。CXFはJAX-WSも含んでいて大きそうなので、今回は参照実装であるJersey 1.5を使ってみます。前提としてMavenを使ったWebアプリケーションのプロジェクトがあるとします。 pom.xmlでの依存ライブラリの追加 pom.xmlにrepositoryとdepenencyを追加します。jersey-jsonはJSONを使用する場合に追加します。Jacksonが使われるようです。 <repositories> <!-- 省略 --> <r
JAX-WSを使用したWebサービスでサーバ側で例外を投げる場合にはどうすべきなのか試してみました。とりあえず、JavaのコードからWSDLを自動生成してWebサービスを構築した場合(ボトムアップアプローチ?)で試します。JAX-WSやWSDLの仕様を読むべきだと思いますが、ほとんど読んでません。ごめんなさい。 この前、入力された名前を返すだけのHelloというWebサービスをサンプルとして使いましたが(Tomcat+JAX-WSでWebサービス)、これに例外を投げるメソッドを追加しました。 package com.azuki3.study.ws; import javax.jws.WebService; @WebService public class Hello { public String sayHello(String name){ System.out.println(name
JAX-WSを使ったWebサービスを構築するのであれば、標準でJAX-WSをサポートしているGlassfishを使うのが手っ取り早いのですが、今回は既存のプロジェクトへの追加なのでTomcat6+Eclipseを使います。Java環境はJava6です。 JAX-WSの実装は、今回はMetro(JAX-WS RI)を追加しました。他の実装には、Apache Axis2やApache CFXがありますが、アプリケーションに組み込むのであればMetroがよさそうだったのでMetroにしました(参考のリンクを参照)。また、Metroのプロジェクトの配下にJAX-RS RIがあり関係がよくわからないです。ただ、どちらのドキュメントを見てもpom.xml等で指定するライブラリは同じファイルのようでした。 dependencyの追加 pom.xmlに以下のdependencyを追加します。 <depen
Selenium 1.0では、DefaultSeleniumにattachFileというコマンドが追加されています。 // ファイル名はURLで渡す。 selenium.attachFile("inputFile", "file:/C:/test.txt"); // もしくは、URLへの変換 selenium.attachFile("inputFile", new File("C:/test.txt").toURI().toURL().toString()); // typeでもOK selenium.type("inputFile", "file:/C:/test.txt"); attachFileでは指定されたファイルをいったんTempフォルダにコピーしてからアップロードしています。URLでローカル以外のファイルも指定できるためだと思いますが、typeコマンドも使えるのでそちらの方がコ
次のページ
このページを最初にブックマークしてみませんか?
『kenichiro22.hatenablog.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く