タイガー!タイガー!じれったいぞー!(SE編)

AS400, Java, JavaEE, JSF等の開発、習慣など。日々の気づきをまとめたブログ(備忘録)

【Thunderbird】 POP3受信済みメールが再受信されてしまう

メールクライアントで「Mozilla Thunderbird」は、非常に便利で大変重宝させてもらってます!

ただ先日、POP3の受信済みメールが再受信されてしまう現状が発生したので、その仕組みを学んでおきたいと思います。

受信済みメールを管理するファイル

ググってみると、どうやら下記のファイルで一元管理されているようです!

C:\Users\USER_NAME\AppData\Roaming\Thunderbird\Profiles\PROFILE_ID.default\Mail\MAIL_DOMAIN_NAME\popstate.dat

気になる中身を見てみると・・・

# POP3 State File
# This is a generated file!  Do not edit.

*MAIL_DOMAIN_NAME USER_NAME
k 55daa24b@12413 1465888909
k 55daa24b@12428 1465902328
k 55daa24b@12390 1465867308
k 55daa24b@12435 1465943505
k 55daa24b@12420 1465892509
k 55daa24b@12416 1465889508
k 55daa24b@12397 1465873908
:

なんじゃこれは??

どうやら、3桁目から16桁目の合計14桁の文字列がメール1件ごとのキーになっているようです。

直近で届いたメールのソースを確認してみると、キーらしき文字列が3行目にありました!

From - Wed Jun 15 07:31:45 2016
X-Account-Key: account2
X-UIDL: 55daa24b@12435   <<<<<<<<<<<<<<<<<<
X-Mozilla-Status: 0001
X-Mozilla-Status2: 00000000
X-Mozilla-Keys: 

このキーでメールを受信済みかどうかを認識させているのですね。

下記のサイトに、そのキー「X-UIDL」の意味が書かれていました。

@IT - メールヘッダ一覧

X-UIDL : POP利用時のためのユニーク文字列。POPサーバが付加する

なるほど。POPサーバ側で割り振ってくれているというわけですか。

動作検証

おまけで、下記の2点の操作で検証してみました。

(1) popstate.datをオープン状態で、メール手動受信してみる

  • 結果:popstate.datに書き込みできなかったため、同一のメールが再度受信された。

(2) popstate.datから任意の1行を削除して、メール手動受信

  • 結果:削除した行と同一のIDのメールのみ受信された。

今回の問題の結論

ということで、結論です。ソフトのバグ、もしくはその発生時のPCの問題なのでしょう。

  • 何かの影響で、「popstate.dat」の中身がすべてクリアされたか、「popstate.dat」が削除されてしまったのかもしれない。(直接的な原因は不明)
  • POPサーバ側は、メールを貯めいているだけなので、障害の原因であることはゼロといえる。

以上です。

asciiflow:Webサービスで簡易ネットワーク図を描きたい

ネットワーク図をガッチリ描く場合、MS製Visioあたりを使うのでしょうが、簡単な構成や図を描きたい!という場合に、専用のアプリケーションを立ち上げるというのが少々手間だったりもします。

そこで、調べていたら、asciiflow というWebサービスを発見しました!

ASCIIFlow Infinity

以前なら、EXCELを活用したり、様々なフリーソフトで目的を実現することはできましたが、最近はブラウザ1つで済ませたいのが本音。

このツールは、本当に重宝しています!

f:id:no14141:20160606082825j:plain

ポート指定によるPing試験

先日、職場の同僚から教えてもらったツールについて、記録しておきたいと思います。
こういう時に、情報共有の大切さを痛感しますね。ナレッジってやつですか・・・(今更ですが)

ツールの名称は「PsPing」。
プロセスへのpingという意味なのでしょう。

technet.microsoft.com

上記サイトより、ツールを入手! 私が行ったときのVersionは、「PsPing v2.01」でした。

PSToolsフォルダを「C:\tools」などへ複写し、Windows環境変数のPathへそのフォルダを通します。
DOSコマンドで、下記コマンドでポートが通るかの試験が可能になりました。

psping host名(or IP address):port番号

これまでは、TELNETコマンド「telnet host名(or IP address) port番号」で行っていましたが、TELNETコマンドを使えるようにするためには、Windows7の場合、Windowsの機能の有効化または無効化の設定で、「Telnetクライアント」を有効にする必要がありました。

f:id:no14141:20160530185756j:plain

PsPingにしても、プログラムの設置とパスを通す作業が発生しますが、ping試験的な手法でポートの空き状況を確認できるのは、非常にやりやすいと感じました。

PsPing、こちらを積極的に活用していこうと思います!

「JJUG CCC 2016 Spring」に行ってきました

昨年同様、「JJUG CCC 2016 Spring(5月21日開催)日本Javaユーザーグループ」に行ってきました。
去年は、後輩と2人でお上りさんぶりを発揮してしまい、会場まで行くのを時間ロスしてしまい、時間通りに辿りつけませんでしたが、今年は余裕の20分前着席!
ここしばらく、インフラ周りの仕事が中心だったので、アプリケーション・エンジニアとして目が覚める素晴らしいイベント体験となりました!

参加したセッションについて、自分なりの感想をまとめておきたいと思います。


日本Javaユーザーグループ総会

JJUGの1年のコミュニティー活動を知ることができました。本業外で毎月、そして年2回の大イベント実現、その他もろもろ・・・、本当に頭が下がります。
毎回思うのです。都心には住みたいとは思いませんが、ナイトセミナーやLiveなど身近に参加できるというのが、羨まし過ぎます。
確かにWebで動画や資料を拝見することは可能なのですが、リアル参加では、生で感じる空気感や講師の方の追及心により、自分のモチベーション・ガソリンをリアルで注げることが最大の利点ですから!

Type Annotation for Static Program Analysis

ここは迷わずチャンピオンの講義を選択!
超一流の話し方、表情、資料、間の取り方、そしてバックミュージックをじっくり堪能させていただきました! (今回はエアロスミスではなく、ビートルズからのつかみ。個人的にはリラックスできました)
内容的には、Type Annotationの話。正直、その存在自体わかっていませんでした。JavaEEばかりやっていますが、こつこつとJavaSE力を上げる必要性を痛感しました。櫻庭さんの新書は購入済みなのに手つかずなので、下記のサイトと合わせて教材にしてレベルアップを図っていきたいと思います。

itpro.nikkeibp.co.jp

Eclipse Collectionsで学ぶコード品質向上の勘所

こちらの講義では、何のためのコードレビューか?という目的からきちんと説明していただいたことで、その後のコード説明がすんなり頭に入ってきました。「技術的負債」・・・非常に頭の痛い話で、その負債が雪だるま式になっている自分の現状を知るきっかけとなったでしょう。
まずは、Eclipse Collections、パフォーマンス解析ツールなど、じっくりと触ってみたいですね。

資料

Jenkins2.0

昨年、Jenkinsのコミュニティーに参加できたので、川口さんの話を聞けるのは2回目。
職場でもJenkinsが動いているので、戻ったら検証のうえ、早急に2.0へアップして、現行のタスクをパイプラインへ変換しようと思います。
確かにGUI複数の作業を定義していて、その作業ステップがわかりにくかったり、その変更履歴なんかをGitで管理できればいいなぁとは感じていたので、この改変は非常に嬉しい!
さらに、今回、jenkinsの誕生秘話もお聞きできたので、何かを成し遂げるのに必要なものは、物理的な充実ではなく、目的を達成のために行動を継続する、ということを教えていただけたように思います。おまけですが、Serverを「計算機」と呼ばれていたことが印象的でした。

春だからJavaプログラミング再入門

尊敬するスペシャリストの1人、きしださんの講義。
今回は膨大なスライドということで、テンポよく説明しておられました(高校、大学の講義のような内容でした)。随所にでてくるセンスあふれるたとえ(ex:おにぎりまたはサンドウィッチを取ってほしい)が感動的でした。そして、最後の下記のコメントが特に印象的で、自分の息子たちにも早くプログラムをやらせようかと勝手に妄想してしましたね。

プログラムを書くという行為は、論理を証明するということ(論理のトレーニングをしている)。

欲を言えば、きしださんの近況が聞きたかったところですが・・・。はやくゴールド聖闘士の強さを知っていただきたくなりました。

Docker on A.* 〜開発から運用まで〜

去年秋頃にフラットファイル型のCMSをDockerで動かして運用しているとこですが、Javaの開発で活かすには?という動機から、こちらの講義をチョイス!   ただし、内容が完全にクラウド前提(しかもマルチクラウド)だったので、すぐに実用化とはならなそうです。
ただし、いつかオンプレ環境とお別れする日も来るはずなので、クラウド環境についても、少しずつ勉強していく必要がありそうです。早急に試せることとしては、DockerのAlpineイメージと、Private Docker Registryでしょうか。

SmartNews のニュース配信を支えるサーバ技術

毎日、SmartNewsを使っている中毒者の私。これはぜひともバックボーンを知りたいと参加したのですが、知らない世界ばかりで目が点になるという・・・。
Java周りは何とかついていけたのですが、CircleCI、Kotlin、RxJava、DataDog、NewRelic、Pagerdutyなどなど知らないものばかり。
今の自分は、Zabbixでの死活監視ができるようになって喜んでいるレベル。システムの規模が違えど、世界は広しということを痛感する講義となりました。
まずは、今回はじめて知ったキーワードより、そのサービスの概要をひとつずつ理解していく必要がありそうです。


今回は、JavaEEに関する講義も少なく、自分が参加した講義も、JavaSE、コード品質管理、CI、インフラ系という選択になりました。
来年にはJavaSE9、さらにEE8が登場してくるので、それまでの間にJavaSE基礎力、さらにはその周辺技術を理解・習得し、現行のEEアプリ開発をきちんと回せていければと思っています。

それにしても今回のJJUG、前回以上に刺激になりました! 急に上級者になれるわけではないので、簡単なものから、少しずつ前進していくしかないですね!!! 通常のワークだけでレベルアップが図れるわけがありませんから・・・。

「何かを得るには、何かを捨てなきゃ!」  (海賊戦隊ゴーカイジャー バスコの口癖より)

Windows Update適用後にExcel、Acrobat、IEが起動しなくなる現象発生!

先週の話なのですが、2016年4月更新分のWindows UpdateWindows7 PCに適用した後に、ExcelなどのMS Office等が起動できなくなる現象が発生しました。

まだまだあやふやな状態ですが、原因と対処方法がわかったので、まとめておこうと思います。

症状発生パターン

いろいろ調べていくと、下記のパターンのPCで同一の現象が見られました。

  • Windows7 32bit OS
  • EMETをインストール (Ver 5.5.5871.31892)
  • MS Office 2010, 2013

Excelを例にしますと、Excelファイルを直接クリックで起動する、またはExcelアプリを起動する、どちらのケースでも、しばらくするとExcelが起動せずに、下記のようなメッセージが表示されてました。

プログラムにコマンドを送信しているときに、エラーが発生しました。

f:id:no14141:20160419124630j:plain

さらに、タスクマネージャーを見てみると、「EXCEL.EXE」が残ってしまっています!
なお、IEやPDFはメッセージが出力されるわけではなく、アプリが起動せず、ただプロセスだけが残っていました。

原因

Windows10(64bit)でEMETを入れているPCが問題が無かったので、EMETを疑うことはなかったのですが、試しにEMETを無効にしたところ、EXCELやPDFが通常通り、起動してくれました!

ということでEMETがEXCELなどのアプリをブロックしてしまっていたようです。

EMETも、セキュリティ強化の一環で、何も設定せずにインストールして、常駐させていたのですが、やはりきちんと機能を理解して運用しないといけないわけですね。

とりあえず、EMET側の設定でEXCEL等に関するものがあったので、いったん無効にして、運用することにしました。

EMETの設定

  • タスクトレイにあるEMETを右クリックで「Open EMET」を選択。

  • ConfigurationでAppsボタンをクリック。

f:id:no14141:20160419125939j:plain

  • EXCELであれば、AppNameから「EXCEL.EXE」を右クリックして、「Disable All Mitigations」を選択。ちなみによくわかっていません。取り急ぎ、EXCEL等を起動させるためです。

f:id:no14141:20160419125944j:plain

f:id:no14141:20160419125949j:plain

総括

いずれにしましても、現時点で根本的な原因が特定できておりません!
Windows10では、EMETがあっても影響がなかったわけですし、32ビットOSのパッチに影響があったのでしょうか?
引き続き、様子をみたいと思っています。

【NetBeans】デプロイ先の変更方法

先日、APをglassfishからpayaraへ変更したのですが、WindowsPCのIDEからのデプロイ処理だけが、旧glassfishのパスで実行されてしまう問題が発生しました。その解決方法をまとめておこうと思います。

トラブル内容

  • 元々のglassfishのパスは、「C:\glassfish4_1」。新しいpayaraのパスは、「C:\payara41」です。
    NetBeansも8.1を入れて、いざMavenのデプロイ処理を実行してみると・・・
------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time: 28.925s
Finished at: Thu Nov 05 17:11:55 JST 2015
Final Memory: 16M/178M
------------------------------------------------------------------------
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
NetBeans: Deploying on [C:\glassfish4_1\glassfish;C:\glassfish4_1\glassfish\domains\domain1]deployer:gfv3ee6wc:localhost:4848
    profile mode: false
    debug mode: false
    force redeploy: true

Deploying onのパスが、glassfishのままになっているではないですか!

解決方法

プロジェクトを右クリック→プロパティ→実行内の「サーバー」を<サーバーが選択されていません>の状態で保存しておきます。

f:id:no14141:20151118175223j:plain

その後、デプロイを行いますと、デプロイメントサーバー先を聞かれるので、ここであらためてpayaraを選択してあげます。(合わせて、永久に記憶を選択。)

f:id:no14141:20151118175235j:plain

結果、新しいAP先へのデプロイが実行されるようになりました!

なかなか、難しいところですね。

【NetBeans】Glassfish4.1.1との連携

久しぶりに、Javaの開発に戻ってきたのですが、2015年10月には、Glassfish4.1.1が出ているし、サードパーティーのPrimeFacesも5.3が出ているじゃないですか!!!

というわけで、開発機で、Glassfish4.1.1を配備して、NetBeans8.0.2で連携しようとしてみると・・・

f:id:no14141:20151105202004j:plain

f:id:no14141:20151105202010j:plain

あれ? 「有効なGlassfish Serverのインストールではありません」と出てしまう。 インストール場所は、合っているのになぜでしょう?

試しに、「Payara4.1.1.154」でもやってみると、下記の通り、こちらは認識してくれました。

f:id:no14141:20151105202016j:plain

f:id:no14141:20151105202023j:plain

Glassfishが新しくなったということは、もしやIDEが上がっていると思ってNetBeansのDownloadsを確認してみると、やはり「NetBeans8.1」がリリースされておりました。

https://netbeans.org/downloads/?pagelang=ja

というわけで、「NetBeans8.1」を入れたのち、サーバーの追加から「Glassfish4.1.1」の場所を指定してやると、問題なく、Glassfish Server4.1.1のインストールとして認識してくれました!

f:id:no14141:20151105203314j:plain

基本的なことだったのかもしれません。 今日は、かなり時間を無駄にしてしまい、反省の多い1日でした・・・。

今後は、必須技術に関するアンテナをもっと高くし、行動のサイクルを速めていかなければなりませんね。