いつブロ

いつまで続くか分からないブログ(仮)主に趣味やプログラミングに関するメモを書いています。

JavaでCSV出力するライブラリを色々探してみた

JavaCSV出力をする必要があって、自分で書くのは嫌なのでライブラリを探しました。
 
最初は、 Commons CSV を検討していました。
Commons CSVは暫く2007年ぐらいから開発が始まっていたようですが、
2014年になって漸くリリースされたライブラリで、
後発な分イケてるのかなーと思って眺めていましたが、
アノテーションで出力する列の指定などが出来なさそうなので却下しました。
 
やりたいのは Entity からサクッと出力する事なんです。
 
続いて見つけたのが、 Super CSV Annotation でした。
こちらは Super CSVアノテーションの機能をプラスしたやつでした。
これはイケそうだと思って検証していると、
ダブルクォーテーションで囲む設定が全項目に対して囲むかどうかしか出来ませんでした。
しかもヘッダーの項目も含めて囲まれてしまうという。。。
(間違っていたらすみません。)
 
ヘッダーはダブルクォーテーションで囲まずに、
データの部分だけ囲んで欲しいんです。
 
折角アノテーションで出来ると思ったのに、
直そうと思ったら Super CSV も直さなくちゃいけないのでこれも却下しました。
 
最後に見つけたのが、 OrangeSignal CSV というライブラリでした。
今度こそ!と思って検証に入りました。
 
このライブラリも Entity にアノテーション付けて出力できたり、
データの部分だけダブルクォーテーションで囲んでくれるようでした。
さらに数値かどうかを判断して囲んでくれるという・・・
と、思っていたのですがどこで見間違えたのか、それは出来ませんでした。
ソースもその部分がコメントアウトされていて未実装でした。。。
 
でもなかなか良さ気で使えそうだなぁと思っていたのですが、
ふと気が付くと、ダブルクォーテーションで囲めるのは、
データ項目全部か途中で改行などがあった場合の2パターンでした。
そして、空文字の部分も囲んでくれていました。。。
 
うーん、ちょっとそこは囲んで欲しくないなぁ。
CSV ってデータ連携に使ったりするので、
数値かどうかでダブルクォーテーションを付けるというのも疑問でした。
 
この列とこの列は文字列だから絶対にダブルクォーテーションで囲んで、
null や空文字のときは、ダブルクォーテーションで囲まないというのが理想でした。
 
幸いソースが綺麗だったで自分で改造して、理想的な CSV が出力できるようにしてみました。
 
プルリクも投げてみましたが、取り込まれるかどうかは別の話。。。
 
(顔のアイコンは出て来なくてもいいのに。。)
 
 
domagen で SQL から Entity を作ってその Entity をライブラリに渡してダウンロード。。。
みたいな使い方してます。

仕事以外でスーツを着た

f:id:koichi0814:20150611213429j:plain

スーツを着る場面といえば、仕事か冠婚葬祭ぐらいだと思います。
もし他にあるとすれば、何かの授賞式とか。
学生であれば入学式や卒業式や就職活動でしょうか。
 
私の場合は仕事も私服なので、本当にスーツを着る機会が少ないです。  
そんな私ですが、今回はGW中に冠婚葬祭以外でスーツを着ました。
※注 転職活動ではないです(笑)
 
どんな理由でスーツを着たのかというと、
会社訪問でスーツを着ました。
 
誤解のないよう繰り返しますが、転職活動ではないです。
 
個人的な会社訪問です。
 
 
いち企業に所属しておきながら全く取引の無い会社に訪問してみました。
そうです。一つ前に書いたAipoの開発元を訪ねて来ました。
 
SNSが発達しているので、会ったことはないけどお互い知っている・・・
ような感じだったのですが、新しいアプリの開発の話がしたかったので対面で話をした方が
やり易そうだったので今回の初訪問になりました。
Aipoリマインダーをリリースして6年、初めてAipoを使ったのが6年半前だったので、
今思うとそれまで訪問していなかったのが逆に不思議です。
 
というか、完全に個人的な訪問だったのに
気軽に訪問OKして下さって感謝です。
 
打ち合わせそのものは1時間ぐらいでしたが、
こちらのアプリの内容も熟知されていてとてもスムーズでした。
 
気になっている事の確認や今後のやり取りの仕方等々、
整理出来たので良かったです。
 
一人開発にはこういったモチベーションを高く保つ事はとても大切だと思いました。
 
 
普段の仕事でも、直接やり取りはしていなくても
エンドユーザーに会いに行ってみるというのも大切かも知れません。
仕様のニュアンスとか文章や人伝いだと伝わりにくいときってありますから。
でもそういう事やってのけるリーダーの人には今のところ会った事はありません。
工数が掛かりますしね!
(最後は話が逸れました。)

Aipo8への移行とAipoリマインダーの設定

www.aipo.com
 
4/8にAipo8がリリースされたので早速アップデートしてみました。
今回は7.0.2から8.0にアップデートしてリマインダーを設定し直してみました。
※注 Aipoリマインダーは個人で開発しているアプリでAipo開発元の正式アプリではありません。  

  1. http://free.aipo.com/update.html にアクセスして
    64bit版の aipo-update7.0.2to8.0-windows-x64.msi をダウンロードします。
     
    f:id:koichi0814:20150412101943p:plain  

  2. アップデートプログラムを実行する前にAipoが起動している事を確認します。
    Aipoのデータベースが起動していないとアップデートが失敗します。
    現在、開発元が対応中との事です。
     
    f:id:koichi0814:20150412102230p:plain  

  3. アップデートが完了するとこのようなフォルダ構成になっています。
    dpl8000フォルダが追加されました。
     
    f:id:koichi0814:20150412102558p:plain  

  4. 続いてリマインダーの設定を行います。
    先ずは、データベースにアクセス出来るように設定します。
    リマインダーを使用されている方にはお馴染みの設定です。
     
    f:id:koichi0814:20150412102747p:plain  

  5. pg_hda.conf をテキストエディタで開きます。
    図のようにリマインダーのクライアント認証設定を行います。
    ここでは、
     
    host all aipo_reminder 192.168.1.0/24 md5
     
    としました。
     
    f:id:koichi0814:20150412102936p:plain  

  6. postgresql.conf をテキストエディタで開きます。
    図のようにデータベースにアクセス出来るクライアントアドレスを設定します。
    ここでは、
     
    listen_addresses = '*'
     
    としました。
    全クライアントからアクセス出来るので、各々の環境に合わせて下さい。
     
    f:id:koichi0814:20150412103719p:plain  

  7. リマインダーの実行ファイルと同じ場所にある
    postgres_setting(Aipo6,7).bat をテキストエディタで開きます。
     
    f:id:koichi0814:20150412104149p:plain  

  8. 7行目のパスをAipo8用に設定します。
    標準のインストール先であればCドライブにインストールされているので、
    C:¥aipo¥dpl8000¥postgresql¥bin¥psql.exe に変更します。
     
    f:id:koichi0814:20150412110757p:plain  

  9. postgres_setting(Aipo6,7).bat をダブルクリックします。
    Aipo7.0.2でも使えていれば問題は発生しないと思います。  

  10. Aipo8のURLを確認します。
    8からパスが変更されいて、/aipoがなくなっています。
     
    f:id:koichi0814:20150412111430p:plain
     

  11. 最後にリマインダー側のURLを変更して終わりです。
    このURLを変更しておかないと自動ログインが出来ません。
     
    f:id:koichi0814:20150412111533p:plain  
     

最後に

今年はAipoリマインダーの大幅バージョンアップを予定しています。
このようにデータベースに直接アクセスしない方法で使えるようになる予定です。
現在はオープンソース版にしか対応出来ていませんが、
クラウド版にも対応予定です。(出来るかな?^^)
 
更新していませんが、最新のAipoリマインダーのダウンロードはこちらから。

www.vector.co.jp

NetBeansにNightly BuildのGlassFishを認識させる

f:id:koichi0814:20150410173034j:plain from https://www.flickr.com/photos/lezarderose/2467952736/
 
NetBeansをインストールすると、
GlassFishも同時に入れる事が出来ますが、
最近のGlassFishもアップデートが結構頻繁に行われているようなので、
正式版ではないNightly Build版を使ってみたくなりました。
 
NetBeansって正式版のGlassFishしか認識してくれないんですが、
やり方が分かったのでその方法をメモっておきます。
 
正式版でもないし、正式なやり方でもないので
何かあっても自己責任でお願いします。
 
 

1. 試した環境

 

2. どうやるのか

https://glassfish.java.net/ からGlassFishを落としてきます。
 
f:id:koichi0814:20150410174639p:plain
 
Nightly Buildsのタブを選びます。
 
f:id:koichi0814:20150410174913p:plain
 
directoryをクリック。
 
f:id:koichi0814:20150410174950p:plain
 
いきなりちゃちい画面になりますが、気にせず nightly/ をクリック。
このとき更新日付も忘れずに覚えておいて下さい。
 
f:id:koichi0814:20150410175708p:plain
 
更新日付でページ内を検索して、最新のものをダウンロードします。
今回は glassfish-4.1-b14-04_09_2015.zip でした。
 
f:id:koichi0814:20150410175839p:plain
 
ダウンロードして解凍したものを適当な場所に置きます。
MacNetBeansのインストール先に置いてみました。
 
f:id:koichi0814:20150410180145p:plain
 
早速、GlassFishNetBeansに設定してみましょう。
 
f:id:koichi0814:20150410180307p:plain
 
名前は適当に GlassFish Server 4.2 としました。
 
f:id:koichi0814:20150410180446p:plain
 
ダメでした。
認識してくれません。
 
f:id:koichi0814:20150410185916p:plain
 
正式版だとどうなるか見てみましょう。
 
f:id:koichi0814:20150410190102p:plain
 
Nightly Buildだけど公式サイトから落としたのに・・・と諦めたらおしまいです。
こうやります。
GlassFishのコアライブラリまで辿っていきます。
/Applications/NetBeans/glassfish-4.1-b14-04_09_2015/glassfish/lib/install/applications/__admingui/WEB-INF/lib/
 
f:id:koichi0814:20150410190147p:plain
 
名前を変えてやります。
console-core-4.2-SNAPSHOT.jar → console-core-4.1.jar
 
f:id:koichi0814:20150410190530p:plain
 
これで再度NetBeansで設定すると、上手く認識してくれます。
あとはこのまま設定を終わらせるといつも通りの方法でちゃんと起動もしてくれます。
 
f:id:koichi0814:20150410190821p:plain
 
名前で判断しているようです。。。
取り敢えずこれで夏頃のベータ版、10月頃の正式版まで一足先に最新のGlassFishで遊べます。

何かあっても知りませんよ。
くれぐれも自己責任で。

実家がなくなった日

2015年3月30日(月) 住み慣れた実家の鍵をしずかに掛けました。
 
小学校入学前から就職して(正確には転職して)神戸に住むまで15,6年ぐらい住んだ実家。
それから14,5年一人暮らしをしてからも何度か帰った実家。つい最近も帰りました。
一人暮らしをし始めた当初はワンルームでテレビも無かったのでテレビ見たさと車に乗りたかったから週末はいつも帰っていました。
でも結婚してからは色々な事情で帰る事も少なくなっていました。
 
おんボロアパートで、床も沈み込んだりしてもう相当ボロボロアパートだったけど、
確かにそこに住んでいて愛着のある実家でした。
帰る場所のような感じの。
 
アパートの老朽化もあって立退きを言い渡されて半年。
新しい家を探しまわって(実際には妹に探してもらったので私は何もしていなかったのですが…)
漸く見つけたのが、なんと中古の一軒家。
それ、30年前に何とかなりませんでした?
自分の部屋めっちゃ欲しかったんですけど!
 
まぁ、色々あってアパートに住んでいたんでしょうけど。
元々は大きな一軒家だったんだけど、大人の事情でアパートに引っ越していたようです。
(いつか理由を教えて貰える約束したのに未だに教えてもらえず。プライドか何かですか。)
 
学生時代は本当に自分の部屋が欲しかったし自分のテレビが欲しかった強烈な記憶があります。
テレビも家に1台しかなく野球や相撲が好きだった父はその時間はいつもテレビを占領していたし、仕事から帰って来るとテレビは明け渡していたので、友達との話題についていけなくて嫌な思いもよくしていました。
(私が野球を好きになれないのはこれが原因なんだと思います。)
 
特に中学のときがそれが顕著でした。
日曜日は絶対に大河ドラマにチャンネルが合わせてあるので、
同じ時間帯に放送されていた「ダウンタウンのごっつええ感じ」とかほぼ見たことがありませんでした。
月曜日から話題についていけないとかサザエさん症候群よりもキツいものがありますよ!
特にこれは当時の中学生には死活問題でした!
 
父が残業の日やパチンコで勝っている日は帰りが遅く、好きなテレビが見れたりゲームが出来たりしていたので、そういう日はめちゃくちゃ嬉しかったです。
逆に家に父が居るときは何もすることがありませんでした。
ネットもまだなかったので、時間が経つのが長い長い。
体感的に1日30時間ぐらいあったかも知れません。
田舎だったし余計に。
 
でも、そういう事があっての今の自分なんですよね。
(人間の脳って上手く出来ていますね〜。)
 
最近は年に何度かふらっと帰ったりしていたし、
まだ現役で暮らせるアパートだったので、
もうそこには帰れないと思うと寂しいものがあります。
 
3月29日(日) 大安
午前中はあいにくの雨模様でしたが、この日から新しい実家での生活が始まりました。
新しく帰る家です。
今まで住んでいたアパートは狭かったのでみんなで集まるのも難しかったですが、
今度は違います。
父もみんなで集まるのが夢だったようです。
(これからは頻繁に集合が掛かるらしい(笑))
 
最後には古い実家の前で家族みんなで集合写真を撮りました。
こうやって集まるのもあと何回出来るか分かりません。
昔は早く親元を離れて暮らしたいと思っていましたが、
今は出来る限り帰ろうと思っています。
(何でこうなっちゃうんでしょうね。)
 
写真は良いですね。
いくら撮っても足りないぐらいです。
引っ越し前に住んでいた家や、子どもの写真とか、両親と子どもが遊んでいる風景とか、
いつかは見れなくなってしまうものは今のうちにいっぱい、めいっぱい撮っておく事をオススメします。

 
 

話はそれますが・・・

最近は仕事もリモートワークのような働き方が良いと思っています。
少子化対策、ITで地方創世(徳島とか有名ですよね)としてのリモートワークは理に適っているような気がしてならないです。
新しい実家も小野市ですが、西脇市にもリモートワークやっている人が居ましたね。
田舎は良いですね〜。
(今の会社でもそういう仕事が出来るように変えていきたい。)
 
私は神戸に出て来てしまいましたが、田舎でも意外と技術者はまだまだ残っているかも知れませんし、都会で働く人を実家がある田舎に呼び戻すという手もアリかも知れません。
 
両親が近くにいると何かあっても直ぐに駆けつけられるし、
子どもの世話も頼めるし、小さい子どもにはおじいちゃんおばあちゃんといっぱい遊んで欲しいし、 田舎は自然がいっぱいなので、子育てにも良いし。
*

エンジニアに必要な社交性

コミュ障な私が言うのもナンですが、
エンジニア(主にプログラムを黙々と組む人)はもっと喋る方が良いと思う。
その方が自分を知ってもらえるので、大げさに言うと向こうから仕事がやって来ます。
 

喋る事が苦手な人の特徴

  • 改善点を見付ける能力があるけど、それを人前で言う事がないから環境が改善されない事にストレスを感じている
  • 技術的な事は誰にも負けないという自負があるけど、実は単なる井の中の蛙である事に気が付いていない
  • 困っている人を見ると助けたくなるけど、手を差し伸べるの恥ずかしい
  • 自分が困っている場合、人に聞くのは一生の恥だと思っている
  • 異様に負けず嫌い

どうでしょうか。
割りと当たっているのではないでしょうか。
(ここに書くのは恥ずかしいですが私もそういう時期がありました。)
 
逆にコミュ障から見た、仕事で上手に喋る人の特徴も書いておきましょう。  

喋る事が上手な人の特徴

  • ムードメーカーであるが故に、いつも仕事が楽しそう
  • 無理難題を押し付けられそうになってもサラリとかわしつつ相手にも好印象なため、仕事量をコントロール出来ている
  • よく喋るので自分が困っている事が周りに聞こたりして他の人から助けられやすい
  • 何をやっているのか把握されやすいため、◯◯ならあの人に聞けば良いという周りからの信頼がある

挙げればキリがないですが、
前者は負の側面しかなく、後者は良い事しかありません。
上手く喋る人の方が総じて仕事が出来ているし、周りからの信頼も厚いように思います。
逆に喋る事が苦手な人は、能力はあってもそれを活かせきれていないように思えます。
 
 

先ずは第一歩

喋る事が苦手な人にいきなり喋れと言っても無理なので、
まずは、得意な(好きな)技術的な話をブログなどでアウトプットするのが良いと思います。
楽しくやれる事から始めてみるのが負担も少ないし長続き出来るし。
それが話題になって、そこから話の幅も広がって向こうから話し掛けてくれるかも知れません。  
私の場合は、社内SNSに色々投稿していたり(大半がスルーされていますがw)、
プロフィールに顔写真を載せているのでこちらが知らなくても向こうは知っていたり、
勝手に有名人になっていたりして、話題を振らなくても(喋った事がない人からも)話しかけてもらえたりしています。
 
そういう意味でも、地道なアウトプットが自然と自分の思い描いていた方向に向かわせてくれるのでやっていて楽しいです。  
 
今週のお題が「卒業」ということもあり、喋る事が苦手なエンジニアが卒業すべき事について書いてみました。

何のために社内勉強会をやるのか

f:id:koichi0814:20150228002828j:plain https://www.flickr.com/photos/vancouverfilmschool/5842844315/in/set-72157619795109053

2ヶ月続けての社内勉強会主催

1月に続いて2月も2日続けて社内勉強会をやらせて貰いました。
 
お題は

  • Webの基礎知識の話
  • JavaEEの話
  • エンジニアから提案するという話

の3本立てでした。

今回は多過ぎました。
テーマを広げ過ぎて誰に向けての勉強会なのかサッパリ分かりませんでした。

なかなか人が集まらない社内勉強会だから、
じゃあ、テーマを増やしてみたらどうだろうと思ってやったことが裏目に出てしまいました。
 
社内勉強会をする場合、Javaに関する勉強会だとウケが良いから
元々その路線で行くつもりで考えていましたが、
Javaの初心者にWebシステムを作る上で使うJavaの話をしようにも、
Webの知識を持っていない人が多そうだったので、
社内SNSでアンケートを取ってみたら、
やっぱりWebの基礎知識についてやった方が良いという結果になりました。
 
なので、Webの基礎知識とJavaを使ったWebシステムの話ということで、
JavaEEの話をしようと思いました。
 
もう一つ、何故エンジニアから提案するという話を3つ目に入れたかというと、
エンジニアでも設計だけとかプログラミングだけじゃあダメだろうと、
何年か前からそっち方面の勉強もしていたので、
その辺りの知識も必要としている人が居ると思って、
それで3つ目にこのテーマを入れました。
 
結果は最初に書いた通りサッパリでした。
テーマを広げた所為でWebの知識は知りたかったけど、
提案とかそっち方面の話は別に要らないとか、その逆もあったり、
Javaの話は全然わからなったけど、提案の話はためになったとか・・・
人に依っては聞きたくもない話を聞かされたという感想を持った人も居ました。
 
決定的だったのはググったら分かる内容は要らない!という一言でした。
 
おっしゃる通りで。。。
 
JavaEEの話は環境構築の話だったので、
「へー」と思った人も居ましたが、概ねイマイチな反応でした。
そもそもこのブログで書いていた内容だったので、
私自身も「あ、要らないか」ってあっさり思ってしまいました。
 
 
そういう訳で、
2日目はJavaEEの話はもうブログ見て下さいって言って終わりにしました。
Webの基礎知識の話も極力ググったら簡単に出てくるような話ではなくて、
実体験を元に興味のそそられるような内容に変えてみました。
 
1日目のダメ出しのときに色々言われた事を全部取り込んだお陰で掴みも良く、
最初から楽しんでもらえる勉強会になりました。
 

誰のための勉強会なのか

こちらが話をして相手が聞いているような勉強会は、
発表者の発表の練習にもなったり勉強会の資料作成にあたって、
調べる事も多いので発表者自身の勉強になりますが、
そもそも誰のための勉強会なのかというのが抜け落ちていたように思いました。
テーマだけ周知するのではなく、そのテーマの詳細部分ももっと伝えて
勉強会に参加する事で何が得られるのかを明確にすべきでした。
 

何のために社内勉強会をやるのか

ひとえに勉強することに興味を持ってもらう事です。
 
学生時代は勉強していた人も社会人になると勉強する機会が減ってしまい、
目の前の仕事を片付ける事だけに時間を費やすのは勿体無いと思います。
仕事もある程度出来るようになると、時間的な余裕が出来る筈なので、
その時間を使って新しい技術を学んだり、学んだ事を共有する事でまた新しい気付きのようなものも生まれると思います。
その繰り返しでチームや組織って成長するものじゃないかなと思います。(知らんけど。)
 
SI業界は多重下請け構造になっているので、
大体どこかの会社に常駐していたり、一部は一括請負で自社でやっている所もあります。
そんな中で新しい技術や新しい取り組みに手を出そうとするとコストになるので嫌われます。
仕事はそつなくこなしていても、そのままじゃ自分の持っている技術はどんどん陳腐化します。
そうならないように先ずは自分から学んで仕事で使える状態にしておくと、
新しい波が来ても取り残される事は少ないんじゃないかなと思います。