home ホーム search 検索 -  login ログイン  | help ヘルプ

find 検索

21 - 30 / 1300    [|<]  [|<]  [<]  1  2  3  4  5  6  7  8  9  10   [>]  [>|][>|]
タイトル/名前 更新者 更新日
Java/JMXのCUIツール参考メモ msakamoto-sf 2017-10-07 13:19:15
Java/JVMオプションとデフォルト値の一覧取得(-XX:+PrintFlagsFinal -XX:+UnlockDiagnosticVMOptions -XX:+AggressiveOpts) msakamoto-sf 2017-10-07 12:30:33
日記/2017/10/05/SingletonのGoodパターン、Badパターン msakamoto-sf 2017-10-06 00:37:20
Java/CRaSH(監視向けリモートシェル) 参考URLメモ msakamoto-sf 2017-06-26 19:04:10
SideBar msakamoto-sf 2017-03-26 13:57:09
プライバシーポリシー msakamoto-sf 2017-03-26 13:55:17
Java/JCE Unlimited Strength Jurisdiction Policy Files + security関連の設定ファイルをカスタマイズしたJREの頒布について調査メモ msakamoto-sf 2017-03-26 13:07:40
日記/2017/03/26/faviconを設置してみたけど、色々増えてた msakamoto-sf 2017-03-26 13:04:27
FrontPage msakamoto-sf 2017-03-20 22:01:45
技術/Linux/Ubuntu 16.04 LTSのブートUSB作成例(2017-03時点) msakamoto-sf 2017-03-19 20:54:10
ソート項目 / ソート順     1ページ 件ずつ表示

Java/JMXのCUIツール参考メモ  

所有者: msakamoto-sf    作成日: 2017-10-07 13:14:42
カテゴリ: Java 

2017年現在、JMXを見るツールとしてはJDK付属のjmc(MissionControll)やjconsoleなどがあるが、いずれも基本的にはGUIツール。サーバ内で作業するときなどは、CUIツールでJMXにアクセスできるのがあると嬉しいので、軽くググッたときの参考メモです。

→これが軽い感じのツール。実際には、以下の記事でカスタマイズしたものを使ったほうが簡単そう。

Jmxtermというのもある。これも機能的には十分そう。

これはちょっと違うかも。



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2017-10-07 13:19:15
md5:3d81e982dac2b875f4697f1aa19dcda1
sha1:2c98bab9828474ec8494967403ab2c34208dbd44

Java/JVMオプションとデフォルト値の一覧取得(-XX:+PrintFlagsFinal -XX:+UnlockDiagnosticVMOptions -XX:+AggressiveOpts)  

所有者: msakamoto-sf    作成日: 2017-10-07 12:13:33
カテゴリ: Java 

基本形 : -XXオプションの一覧を標準出(-version を付けることでjavaコマンドのusage表示を省略させる)

java -XX:+PrintFlagsFinal -version

仮想マシンチューニング用のオプションも出力:

java -XX:+PrintFlagsFinal -XX:+UnlockDiagnosticVMOptions -version

実験的なオプションも出力:

java -XX:+PrintFlagsFinal -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -version

他、"-XX:+AggressiveOpts" や "-XX:+PrintFlagsInitial" というのもある。

2011年~2017年ごろまでの参考:

その他参考:

Qiitaより:



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2017-10-07 12:30:33
md5:909a8dd8757c5179d6bfb8ae649a2967
sha1:0b19c7bc0e83618641d39ca62078882979d92930

日記/2017/10/05/SingletonのGoodパターン、Badパターン  

所有者: msakamoto-sf    作成日: 2017-10-05 23:57:09
カテゴリ: システム開発 プログラミング 

仕事としてプログラミングしてて、もう10年来ずっと、いたるところでレガシー化しやすく、テストコードを書けなくしてる最大の原因と思うのがSingletonデザインパターンだと個人的には思う。

ただ、最近DIコンテナなど扱うようになってきて、ようやくSingletonデザインパターンの使い方でGoodなパターンとBadなパターンの二種類が見えてきた。

Badパターン

Javaでかけば以下のようなコード。

public class MyClass {
  private static final MyClass instance = new MyClass();
  private MyClass() {
    // constructor
  }
  public static MyClass getInstance() {
    return MyClass.instance;
  }
}

何が問題なのか:

  • Mock用のMyClassインスタンスを作れない(constructorがprivate)ので、単体テストが非常に書きづらい。
    • Mock用ライブラリによってはClassLoaderをいじることでMock化できるものもあるが、かなりナイーブなコードとなってしまい、他のライブラリと安定して組み合わせるのが難しくなる。
  • Singleton化されたインスタンスのライフサイクルが、ClassLoaderのライフサイクルと等しくなり、非常に長く、しかもアプリケーションの世界からは扱いが難しいライフサイクルとなっている。

Goodパターン

なんちゃってアノテーションつければこんな感じ。

@Singleton(scope=Application)
public class MyClass {
  private final ApplicationContext appContext;
  public MyClass(@Inject final ApplicationContext appContext) {
    $this->appContext = appContext;
    // ...
  }
}

利用側:

// ...
ApplicationContextImpl appContext = new ApplicationContextImpl();
// ...
DIContainer dicon = DIContainer.create(appContext);
MyClass singleton = dicon.get(MyClass.class);

どう問題は解決されたのか:

  • Mock用のMyClassインスタンスを普通に作れる様になった。
  • Singleton化されたインスタンスのライフサイクルが、DIコンテナ管理となった。DIコンテナは大抵、テストコード中でライフサイクル管理できるようになってるはずなので、アプリケーションの世界から扱いやすいライフサイクル管理となる。

デメリット:

  • 「インスタンスを一つに制限する」というのを言語のルールで制限できなくなった。
    • これにより、ルールに疎いプログラマが、コード内で勝手にnewする可能性がある。

「インスタンスを一つに制限する」をどこで行うか?

Badパターンでは「インスタンスを一つに制限する」を言語のルールで実現できていたが、逆にGoodパターンではそれを諦めている。
それでは本末転倒ではないのか?
否、「インスタンスを一つに制限する」のは、「何に対して」であるのか、という点が今まではおろそかになっていたと考える。
その前に、そもそもそうした「ルール」をどこで担保するのかについて考えなければならない。

Badパターンでは「ルール」の担保を言語側で担保していた。これは非常に強固で確実だが、同時にテストコードを書くときの障害になる。

個人的には、テストコードを書きづらい設計はどんなにデザインパターン上「正しく」ても、最低最悪のクソコードである。

テストコードがかければ、リファクタリングできる。実装コードを、洗練できる。

しかし、テストコードが書けなければ、リファクタリングする機会が大幅に失われる。実装コードを洗練することが難しくなる。

プログラミングは創造的な作業であるのは確かで、最初から100%の正しさでクラス構造をデザインできることはまずありえない。必ずリファクタリングをする時が来る、あるいは振る舞いを変えるレベル=リファクタリングを超えるレベルで設計を変更する時が来る方が自然と考えたほうが良い。(これについては賛否両論ありそうだけど。)

よって、OOPだろうが関数型だろうが手続き型だろうが、リファクタリングできないソース、端的にはテストコードが書けない設計はどんなにその他が正しく作れれていも、クソコードだと断言する。

ここでSingletonの話に戻ってくると、BadパターンがなぜBadパターンか、それはテストコードを書きづらくて、大抵は書くのをギブアップするような状況になるのが理由となる。(これがconstructorがpublicで、デフォルト実装をsingleton化してるだけで、作ろうと思えば派生クラスとかで色々いじれる状況なら、テストコード用にMock化できるので許容範囲)

つまり自分の意見としては、「インスタンスを一つに制限する」のがテストコードを書きづらくするのなら、そんなルールはゴミ箱に捨てろ。それよりもテストコードを書きやすくしろ、そして書け、書いたテストコードがサンプルコードになり、後続がそれを見て使い方を学べるようにしろ、ルールの担保はコードレビューで担保しろ。ということになる。

そして、「何に対して」インスタンスを一つに制限するのかだが、これは普通に考えればアプリケーションのライフサイクルに揃えるのがSingletonの意図として順当と思われる。
となれば、アプリケーションの開始から終了までの、様々なインスタンスを収めた「文脈=Context」的なインスタンスと同じ長さになるだろうし、またSingletonは左記の「文脈=Context」に含まれるのが順当だろう。

よって、Goodパターンではテストコードの書きやすさを担保しつつ、アプリケーションのライフサイクル(Goodパターンで挙げた例ではDIコンテナ)に合わせて管理できるようにした。これなら、テストコード中でプログラマブルにライフサイクル管理がしやすくなる。

「ルール」よりは「テストコードによる例示とコードレビューによる担保」へ

自分の意見になるが、「テストコードを書ける設計になっていること」が最重要となる。
よって、Singletonデザインパターンを実装する場合もテストコードを書ける設計にすることがまず大前提となる。
しかし、Mock化などを考えると言語レベルでの「一つに制限」する「ルール」は採用できない。
そうなると慣れてないプログラマが自分でインスタンスを作ってしまったりする可能性があるが、そのリスクはどう見るか?

そのリスクは、「テストコードによる例示とコードレビューによる担保」で回避すればよい、というのが自分の意見になる。

重要なのは、「何に対してインスタンスを一つに制限しなければならないのか」を明示すること。

実際にDIコンテナやアプリケーションのcontextインスタンスを作り、そこからSingletonインスタンスを取り出すのをテストコードで表現すること。それができる設計にすること。
そうしておくことで、後続のプログラマに対して、そのクラスの使い方、Singletonとしての存在意義をテストコードで表現できる。

もし間違って独自にインスタンスを作るようなコードを書いた場合は、コードレビューで指摘して直してもらう。その際に、テストコードを示してSingletonとしての使い方、アクセス方法、テストコードの書き方を例示することで、後続のプログラマの勉強にもつながる。

もう一度書くと、テストコードを書く障害になるような設計は、どんなに他が正しくてもゴミ箱ゆきというのがここ数年における自分の意見なので、それに基づくと上記のようになった。

以上。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2017-10-06 00:37:20
md5:52236fb8050e949c0c90355914245d54
sha1:7b41518cbe4645a10c375a56e4a422e7020699ad

Java/CRaSH(監視向けリモートシェル) 参考URLメモ  

所有者: msakamoto-sf    作成日: 2017-06-26 18:59:53
カテゴリ: Java 

Javaの監視にはJMXがあるが、その他に、れっきとした「シェル」としてコマンドラインインターフェイス経由でJVMの内部状態を問い合わせたり、コマンドを発行できるフレームワーク兼ライブラリとして「CRaSH」というのがあるので参考URLだけメモ。

telnetやSSHでログインできるれっきとした「シェル」を内部で起動させ、そこから独自コマンドで情報を取得したり、あるいはGC実行など副作用のある処理を実行することができる。

独自コマンドについてはデフォルトでJVMの監視で最低限必要なものは備えていて、Groovyスクリプトで拡張や追加ができるらしい。

Springなど著名FWでも組み込まれており、実績もある。JMXよりはライトウェイトな使い方になるかもしれない。

その他参考:



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2017-06-26 19:04:10
md5:088d8c1745ad8dd8069066dca4165942
sha1:51c8f3a3df4f77f99179edafc7a0da05c9f99b82

SideBar  

所有者: msakamoto-sf    作成日: 2008-11-23 18:22:11
カテゴリ:


最新コメント10件
2009-03-21 by msakamoto-sf

プレーンテキスト形式でダウンロード
現在のバージョン : 15
更新者: msakamoto-sf
更新日: 2017-03-26 13:57:09
md5:a86f817d4f48993d70ff288bc7f69737
sha1:f11fe1a27260645620fc846ece9bb1bc201036a3

プライバシーポリシー  

所有者: msakamoto-sf    作成日: 2017-03-26 13:42:32
カテゴリ:

本文書は、当サイト(Glamenv-Septzen.net)における個人情報の保護およびその適切な取り扱いについての方針を示したものです。

当サイトに掲載されている広告について

当サイトでは、第三者配信の広告サービス(Amazonアソシエイト https://affiliate.amazon.co.jp/ )を利用しています。
このような広告配信事業者は、ユーザーの興味に応じた商品やサービスの広告を表示するため、当サイトや他サイトへのアクセスに関する情報 「Cookie」(氏名、住所、メール アドレス、電話番号は含まれません) を使用することがあります。

当サイトが使用しているアクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。
このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。
このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。
この規約に関して、詳しくは https://www.google.com/policies/privacy/partners/ をご確認ください。

当サイトへのリンクについて

当サイトは完全リンクフリーです。
トップページ、記事など、正規に公開しているページであれば、どのページにリンクしていただいても問題ありません。
ただしインラインフレームの使用や、画像への直リンクなどは禁止させて頂いております。

免責事項

当サイトに掲載する情報は記事公表時点の正しいものを提供するよう努めております。
ただし、提供している情報、リンク先などにより、いかなる損失や損害などの被害が発生しても当サイトでは責任を負いかねますので、ご了承ください。

リンク先の商品は当サイトが販売しているのではなく、各リンク先店舗での販売となります。
購入方法、その他お問い合わせは各店舗までご確認ください。
商品購入に関するトラブルに関しては、当サイトでは責任を負いかねますのでご了承ください。

著作権について

当サイト「Glamenv-Septzen.net」に掲載されている情報についての著作権は放棄しておりません。
当サイト記事からの引用に関しましては「引用元の明示」によって無償で引用頂けます。
ただし、全文転載はお断りいたしております。
引用許可範囲についても、事前予告なくこれを変更する事があります。
また、当サイトのRSSを利用し、コンテンツをそのまま盗用することも禁止しています。

初出掲載:2017-03-26


以下の記事を参考にさせていただきました:


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2017-03-26 13:55:17
md5:7c61b5893c9311e068aabaac8ed236d8
sha1:5cfb1c132250f2d7d5347e1aaca09b05fa6447e8

Java/JCE Unlimited Strength Jurisdiction Policy Files + security関連の設定ファイルをカスタマイズしたJREの頒布について調査メモ  

所有者: msakamoto-sf    作成日: 2017-03-26 00:04:28
カテゴリ: Java 

以下のカスタマイズを行ったJREを、独自開発のJavaアプリケーションと共に頒布できるか調べたメモ。

頒布したい要件:

  • Windows用の64bitのJREバージョン8を頒布したい。
  • 頒布対象は社内 + 社外

注意:著者個人の見解であり、Oracleに確認した結果ではありません。

先に結論だけ書くと、上記カスタマイズを行ったJREを、独自開発のJavaアプリケーションと共に頒布することは「できない」と思われる。

(全て表示する)
プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2017-03-26 13:07:40
md5:447670df2df287a38a2b6a05e209ed8d
sha1:ae19ffde511ecf26860d4a855917a79960d550b4

日記/2017/03/26/faviconを設置してみたけど、色々増えてた  

所有者: msakamoto-sf    作成日: 2017-03-26 12:51:45
カテゴリ: Web 

今頃になってfaviconを設置してみたが、単にfavicon.icoファイル単品で置いて終わり、という時代の知識で止まっていたため、色々増えてて勉強し直しになってしまった。

  • PNGが使えるようになってる。
  • Chromeならandroidのホーム画面向けの指定が増えてる。
  • SafariならiOSのホーム画面向けの指定が増えてる。
  • IE11ならWin8/10以降でのスタートメニューへのピン留め用指定が増えてる。

メジャーどころのブラウザ/プラットフォームベンダからの公式ドキュメント系:

favicon作るのも、色んなサイズを用意する必要が出てきてる。それらに対応したfaviconジェネレータも、Webサービスとして色々見つかった。

今回使ったのはこちら:

これで生成した画像ファイルと、browserconfig.xmlを組み込んだ。manifest.jsonについては、本サイトのようなblogサイト程度であれば不要と判断し、設置は見送り。

他にもこちらが評判良いらしい。(今回は試してない)

その他参考にしたサイト:


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2017-03-26 13:04:27
md5:23c9f3614230d10e8b02f652ad2d2a30
sha1:a0a7ac921c33289269a2943462e522cba4e9a695

FrontPage  

所有者: msakamoto-sf    作成日: 2008-11-23 18:22:11
カテゴリ:

Glamenv-Septzen : ぐらめぬ・ぜぷつぇん

msakamoto-sf こと 坂本昌彦 によるプログラミング技術を中心としたブログ兼Wikiです。


使用しているツールの制約上、コメントやトラックバックは受け付けられません。
本コンテンツへのご意見もしくはコメント投稿用アカウント申請については、Eメールにて下記アドレスまでご連絡下さい。

sakamoto.gsyc.3s@gmail.com

なお、2001 - 2003年にかけて作成し、Niftyホームページ上にて公開していたコンテンツについては以下を参照して下さい。*1

風晶のC言語プログラミング
https://www.glamenv-septzen.net/nifty/index.html
2010年頃作ってた英語出張版
https://www.glamenv-septzen.net/en/
*1: 技術・非技術系問わず内容が非常に古くなっています。坂本の大学生時代の活動内容としてメモリアルページとして利用して下さい。

プレーンテキスト形式でダウンロード
現在のバージョン : 12
更新者: msakamoto-sf
更新日: 2017-03-20 22:01:45
md5:30bee1164dde1456fc7383e0344530a9
sha1:cede6a63238e0e05c9e380e5e933827c3bab777e

技術/Linux/Ubuntu 16.04 LTSのブートUSB作成例(2017-03時点)  

所有者: msakamoto-sf    作成日: 2017-03-19 13:22:39
カテゴリ: Linux Ubuntu 

2017-03時点で、Windowsホスト上でUbuntu 16.04 LTSのブートUSBを作成したので、そのメモです。

といっても、2017年時点ではLinuxのブートUSB作成手順は十分「枯れた」状態で、安定して使えるフリーソフトがいくつか出ており、日本語での解説記事も豊富です。
Linuxディストリビューション側も、今やブートUSBに対応「していない」ディストリビューションの方が少数派のようです。
よって、今回のポイントは「どのUSB書き込みソフトを使うか」の一点だけでした。特に技術的な挑戦ポイントはありません。

2017-03時点で、主に以下のようなUSB書き込みソフトが有名みたいでした:

今回は「Rufus」を使ってみました。他のソフトは未検証です。「Rufus」を選んだ理由としては、USBWriterは2015年でリリースが止まってる一方でRufusは2017年と新し目のリリース、Universal USB Installerはあまりにもパラメータが少なすぎて、決め打ちっぽくて怖い、UNetbootinもディストリビューション選ぶみたいで中で何してるか分からない、などの消去法に従いました。

Ubuntu については公式より 16.04 LTS の Desktop 版ISOイメージをDLしました。特に日本語作業などもしてないので、Ubuntu 公式の、Installer付きのLiveCD/DVDのDesktopイメージそのままです。

2017-03-19 時点では 16.04.2 LTS となっていますが、手元で作業したときのファイル名は "ubuntu-16.04.1-desktop-amd64.iso" でしたので、もしかしたら1つ古かったかもです。

isoファイルがダウンロードできれば、後は簡単です。USBメモリをPCに差し込み、認識できたら Rufus を起動します。(今回は rufus-2.12.exe を使用)
Rufusも、ダウンロードしたexeを単体で起動できるのでシンプルで楽ちんです。

あとは以下のようにオプションを指定します。「ブートディスクを作る」のプルダウンメニューで「ISOイメージ」を選択肢、右横のアイコンをクリックしてISOファイルを選択します。


「新しいボリュームのラベル」は、空のままでしたが、ISOファイルを選択したら自動で「Ubuntu 16.04.1 LTS amd64」と入りました。
「準備完了」となれば、「スタート」ボタンをクリックします。

USB3.0接続なら、数分待てば書き込み完了です。
(なお、内部ではsyslinuxを使っているらしく、今回使ったバージョンではsyslinuxの自動ダウンロードを聞かれました。OKかなにかして、そのまま進めた所、rufusのexeと同じ場所に "rufus_files" というフォルダが作成され、そこにsyslinux関連フォルダ・ファイルがDLされました)

あとは実際にUSB起動してみて、動作確認できればokです。

参考:



プレーンテキスト形式でダウンロード
現在のバージョン : 2
更新者: msakamoto-sf
更新日: 2017-03-19 20:54:10
md5:c5467714cc6d9f706a1565218964df07
sha1:195aa937fd0ce34c715b93af0b2199dd8ae32425