2015年10月12日月曜日

ちょこっとpomメモ

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>sample</groupId>
<artifactId>sample</artifactId>
<version>0.0.1-SNAPSHOT</version>

<properties>
<java.version>1.7</java.version>
<encoding>UTF-8</encoding>
</properties>

<build>

<!-- リソース定義 -->
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/gen-resources</directory>
</resource>
</resources>

<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${encoding}</encoding>
</configuration>
</plugin>

<!-- ソースディレクトリを設定 -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>src/main/gen-java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>

<!-- CheckStyle -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.16</version>
<executions>
<execution>
<id>validate</id>
<phase>validate</phase>
<configuration>
<!-- チェックルールのパスを指定 -->
<configLocation>config/checkstyle/sun_checks.xml</configLocation>
<!-- 静的解析にて警告が見つかった場合にビルド失敗とするかどうか -->
<failOnViolation>false</failOnViolation>
</configuration>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>

<!-- FindBugs -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>process-classes</id>
<phase>process-classes</phase>
<configuration>
<xmlOutput>true</xmlOutput>
<failOnError>false</failOnError>
</configuration>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>

<!-- PMD -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.5</version>
<executions>
<execution>
<id>process-classes</id>
<phase>process-classes</phase>
<configuration>
<linkXref>true</linkXref>
<sourceEncoding>utf-8</sourceEncoding>
<minimumTokens>100</minimumTokens>
<targetJdk>1.7</targetJdk>
</configuration>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>


</plugins>
</build>

<!-- 環境プロファイル定義 -->
<profiles>
<!-- 単体試験環境 -->
<profile>
<id>ut1</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<resources>
<resource>
<directory>src/main/sg-resources/ut1</directory>
</resource>
</resources>
</build>
</profile>
<!-- 単体試験環境2 -->
<profile>
<id>ut2</id>
<build>
<resources>
<resource>
<directory>src/main/sg-resources/ut2</directory>
</resource>
</resources>
</build>
</profile>
<!-- 結合試験環境 -->
<profile>
<id>SI</id>
<build>
<resources>
<resource>
<directory>src/main/sg-resources/si</directory>
</resource>
</resources>
</build>
</profile>
<!-- 総合試験環境 -->
<profile>
<id>IT</id>
<build>
<resources>
<resource>
<directory>src/main/sg-resources/it</directory>
</resource>
</resources>
</build>
</profile>
<!-- ステージング環境 -->
<profile>
<id>ST</id>
<build>
<resources>
<resource>
<directory>src/main/sg-resources/st</directory>
</resource>
</resources>
</build>
</profile>

</profiles>

<!-- レポート定義 -->
<!-- <reporting> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> 
<artifactId>findbugs-maven-plugin</artifactId> <version>3.0.0</version> <configuration> 
<visitors>FindDeadLocalStores,UnreadFields</visitors> </configuration> </plugin> 
</plugins> </reporting> -->


</project>drふぇ

2015年8月24日月曜日

インフラ関連のスキル不足

僕はアプリケーションのエンジニアであるので、インフラ関連には全く疎い。
少し前に要件定義を行う業務に携わることがあった。
下請け業者で働く僕はあまり経験がなく、新鮮だった。

要件定義は、僕がやってきたような「よし、仕様決めてプログラム作るぜ!」というような段階でないことは当たり前だが、僕のようなアプリケーションのエンジニアの出番があまりないのだな。と感じた。

出番がないというのは間違った言い回しかもしれないが、
どちらかというと、本当に役に立ちそうな工程はもう少し後だなと感じた。
一方、真逆の事を言うようだが上流工程からアプリケーションのエンジニアがいた方がいいなと感じる部分も多々あった。

ちょっと話題がずれてるから立て直す。。。。
最初に表題を書いたときに言いたかったことは、インフラ関連の知識が僕に不足しているということ。

「あ、そう、がんばれよ!」と言う声が聞こえてきそうだが、ここには届かない。
結局要件定義の非機能要求の部分(いわゆるシステムが動作するアーキティクチャとか)ではインフラ関連の話題がとても多い。当たり前か。。。。

WEBサーバーはこれ、
アプリケーションサーバーはこれ、
ロードバランサはこれ、
データベースはこれ、
ジョブスケジューラはこれ、
ログ関連の規約はこうする、
構成管理はこうする、
試験環境、ステージング環境、本番環境はこうする、
etc...

最初に書いている方は、割と自分でも話に混じったりできるのだが、
あとになってくると辛いものがあった。。。
単純に悔しいのと、自分でもどうにかできるようになりたいのと、
「僕はアプリケーションのエンジニアであるので、インフラ関連には全く疎い。」
とかいうのはダサいので勉強しなきゃな。。。。

世の中のアプリケーションエンジニアはみんなどうしているのだろう。。。

僕は割とでかいプロジェクトばっかり回ってるからなのか。
今までアプリケーションの勉強ばかりしてきてしまった感がある。(興味本位でちょいちょいVPSとか触ってる程度)
規模が小さい開発は全てやらなきゃいけないから力が付くよと言われた理由はこの辺りにあるのかな。







2015年5月17日日曜日

Mac上のMavenでみているJavaのバージョンがおかしい。。。

何きっかけでおかしくなったのかわからないが、、、
「mvn -v」とかでみるとJavaのバージョンがおかしくなってた。
今入れているJavaは1.8のはずが、なぜか1.6とかになってる。

いろいろググったが、mvnコマンド実行する前にexportしろ的なことしか
なさそうに思えた。僕は面倒なのでできればそれをやりたくない。

「mvn -v」を実行すると、MavenHomeなるものが見える。
どうやら、「/usr/local/Cellar/maven31/3.1.1/libexec/bin」っぽい。

そこに、どう見ても実行ファイルっぽい「mvn」があったんで
そこの中を修正して強制的に1.8を見せることにした。
すごく適当なメモだが、以下のような感じ

 83 
 84 export JAVA_HOME=`/usr/libexec/java_home`
 85 
 86 if [ -z "$JAVA_HOME" ] ; then
 87   if [ -r /etc/gentoo-release ] ; then
 88     JAVA_HOME=`java-config --jre-home`
 89   fi

 90 fi


とりあえず、忘れないようにメモしただけ…

2014年10月15日水曜日

入力デバイスに夢中になりすぎて…無駄遣いをしているが止まらぬ物欲

今年の7月にHappyHackingKeyboardを3台も買ってしまった。
ProJPが2台(白/墨)
Pro2が1台(墨)

全部ヤフオクで買った中古状態いいやつだけどね…。
申し訳ない無駄に入札争ってしまった方々。。。。


結局会社でProJPの墨を使い、家ではPro2墨を使っている。
家のPCがMacであるためカーソルキーがないのを差し引いてもPro2の方が使いやすい事が分かった。

理由は、コマンドキーがおっきいから。
あと使わないキーがごちゃごちゃしてなくていい。
まぁそれだけです。

だけども、会社と家でキーレイアウトが変わるのもつらいので、、、
Pro2を買い足したい…

早く、Type-Sの墨を出すのだPFU殿。

2013年6月9日日曜日

Ubuntu 12.04LTS ~リモートアクセスのrootを有効にする~

まずは、以下でsshをインストール


sudo apt-get install ssh


デフォルト状態では、rootでのログインが可能となっているらしい。
だが、Ubuntu自体にrootを利用する設定を行っていなかったのでログインできなかった。
なので、以下でrootのパスワードを設定してやる必要があった。


sudo passwd root
(パスワードを2回聞かれるので設定)


ここまでくれば、UbuntuへMacからSSHで接続可能だ。

 

ssh 192.168.XXX.XXX -l root


【参考】
http://www.server-world.info/query?os=Ubuntu_12.04&p=initial_conf&f=2
http://d.hatena.ne.jp/Fiore/20080228/1204174833

2013年3月5日火曜日

POIの実装の選択肢

Apache POI といえば、言わずと知れたJavaでExcelを扱うための便利なライブラリ。
Excelを扱ういろんなJavaのライブラリやツールが存在するが、内部はPOIでした。
なんてことが良くあるくらい鉄板ライブラリ。

POIは、ツールで利用する程度の実装ならあまり気にしないが、
とても多くのメモリを消費する。
それは、実ファイルサイズの10〜20倍くらいまで飛躍する。
また、Office2007以降のExcelファイルを扱う場合にとても顕著に現れる。

なので、本番システムでPOIを利用する場合には、メモリ問題に意識を置く必要がある。
(本番システムでPOIを使うのはどうかと思うが、仕方ない場合)


POIには、大きく2つのモデルが存在する。
以降の話はOffice2007を前提とする。

◆ユーザモデル
 ユーザモデルは、ExcelのBookを丸ごと読み込んでマクロ感覚で扱える。
 一般的にググって出てくるネタは大抵がこのユーザモデルの場合が多い。
 このユーザモデルは、Excelを丸ごと読み込むってところで
 大量のメモリを消費してしまう。
 そのかわりとても簡易的なコードで分かりやすく扱えるメリットを持つ。

◆イベントモデル
 イベントモデルは、Excelの情報をシート単位でメモリ上にあげて処理を行える。
 これは、Office2007をZIP解凍したことのある人はすぐにピンとくるだろうが、
 シート毎に別れているXMLを読んでいる訳である。
 従って、内部ではXMLの解析となる。
 
 イベントモデルは、メモリの消費量を抑えるためのものであるため
 当然ながらXMLの解析はSAXで行う。

 XSSFReaderというクラスがSAXパーサとして公開されており、
 1セルごとのイベントをユーザがハンドリングするためのインタフェースを
 インナークラスとして定義している。
 従って、ユーザはこのインナークラスを実装したコンテンツハンドラを実装する。
 
 ただ、日本で使用する場合には注意点がある。
 POI(3.8)で確認した時に、漢字を読み込むと以下のように取得される事象があった。

 Excel上の文字列:「亜」
 POIで読み込んだ文字列:「亜ア」
 
 これは、バグでSharedStringTableという辞書みたいなXMLに記載されている
 マルチバイトの文字列で東アジア圏内の発音のために用意されているタグを
 POIが意識していないためである。

 この事象を修正するには、自分でSharedStringTableのパーサを修正するか、
 POIのバグFix版を使うしかないだろう。


上記が、いわゆる2大処理方式となる。
その他に、書き込み限定で利用できるストリーミングユーザモデルというものもある。
これについては、また別の機会に書く事にする。

2012年11月4日日曜日

Ubuntu 12.04LTS Eclipseのインストール

自宅のUbuntuにEclipseをインストールする。
ここで開発をすることは特にないが、とりあえずUbuntu上でデバッグ環境を整えて置きたかった。

Eclipseのインストールは、ソフトウェアセンターで「Eclipse」をインストールするだけでOK。
以降は、その他もろもろ自分がインストールしたかったものについてのメモとなる。


▼日本語化

ソフトウェアセンターにて、Eclipseを検索すると、以下のソフトが見つかる。
 「Japanese Language package for Eclipse using Dynamic AOP, Pleiades」
 こいつをインストール。
  
 インストール先は、以下みたい。
 /usr/lib/eclipse/plugins/jp.sourceforge.mergedoc.pleiades

 適応するところまで、自動でやってくれんのかと期待したがそれは無理みたいだ。
 
 ・日本語化を適応する方法
  
  Eclipseのiniファイルに一行足すだけでよかった。
  
 
$ sudo vim /usr/lib/eclipse/eclipse.ini
-javaagent:/usr/lib/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar 
起動すると、日本語が適応されているので安心安心。


▼SVN

SVN上に普段ソースの管理を、行っているのでSVNとアクセスできないとキツい。
 なので、「Subversive」をインストールした。

 これは、Eclipseからインストールを行った。
 ヘルプ→新規ソフトウェアのインストールからまぁいろいろやって入れた。
 ここは面倒なので割愛する。

 ちょこっとだけハマったところは、SVNコネクターの指定をしていなかったのか、
 最初に選ぶのをミスったのか知らないが、設定されていなくてリポジトリを見ることができなかった。

 結局、もう一度新規ソフトウェアのインストールからSVNコネクターを
 「SVNKit 1.5.3」とかでインストールして設定したらうまくいった。