タイトル/名前 | 更新者 | 更新日 |
---|---|---|
Java/Maven3/Version Range "[3.0.0, 3.1.0)" などの表記について | msakamoto-sf | 2019-01-04 14:33:16 |
Java/Quartz Job Scheduler 参考メモ | msakamoto-sf | 2019-01-04 11:11:22 |
技術/Security/mitmproxy (Python製 HTTP/1, HTTP/2, WebSocket プロキシ) (URLメモ) | msakamoto-sf | 2019-01-04 10:46:14 |
日記/2019/01/03/Slackへのソフトウェアリリース情報収集の勉強メモ | msakamoto-sf | 2019-01-03 22:08:07 |
Java/"Google Java Style" とビルドシステムからの一括フォーマッタ "Spotless" 関連メモ | msakamoto-sf | 2019-01-02 19:17:08 |
Java/Java8u60でのラムダ式引数名のリフレクション対応を活用したクールなMapビルダーの参考URLメモ | msakamoto-sf | 2019-01-02 18:53:14 |
日記/2019/01/02/IntelliJ IDEA の雰囲気を掴む | msakamoto-sf | 2019-01-02 18:37:53 |
日記/2019/01/02/ブログとYakiBikiの今後について | msakamoto-sf | 2019-01-02 15:09:07 |
Java/IntelliJ IDEA/プラグイン参考メモ(2018-12時点調査段階) | msakamoto-sf | 2019-01-01 09:59:49 |
Java/Springでの Server-Sent Events, WebSocket 参考メモ(2018-12月頃) | msakamoto-sf | 2019-01-01 09:27:02 |
pom.xmlでの <version> タグの書き方で、バージョンxx以上の最新などレンジを指定できる書き方がある。
以下のような書き方ができる。
<version>[1.0.0,)</version> <version>[1.0.0,2.0.0)</version> <version>LATEST</version> <version>RELEASE</version>
参考:
ただ、Eclipseのm2eでたまたま <plugin> の <version> で上記表記を試したところ、m2eのライフサイクルがうまくこれを認識してくれなかったりした。あまり使わないほうがいいのかもしれない。
よって、実際に使うときはそもそも本当にこの表記が必要なのか?また、IDEなど周辺ツールが対応しているか?を検証する必要がありそう。
Javaでのジョブスケジューラとして Quartz というライブラリが有名なので、参考URLなどメモ。
お仕事で akka-quartz ( https://github.com/enragedginger/akka-quartz-scheduler ) を使ったことがあって、そちらではcron形式での定時実行を動かしてた。
使い込むと、もっときめ細かいジョブ制御ができそう。
日本語参考記事:
Python製の HTTP/1, HTTP/2, WebSocket 対応MITMプロキシ。良さそう。
しばらく前にチェックしたときはターミナルUIだけだったが、最新だとWebUIも備え、Windows版ではインストーラも提供されていて、かなり使いやすくなった感じ。
最近のソフトウェアリリース情報を収集する方法の勉強メモです。特にまとまってませんがダラダラと書いてきます。
主に Java エコシステム周りを中心とした収集方法を想定しています。
収集先としては・・・
ポイントは、「目を通そうとして疲れてしまわないかどうか?」かもしれない。
メールやFeedlyだと、メールorフィード一個一個で未読/既読がわかってしまうため、どうしても「目を通す」意識が発生してしまう。
Slackのチャネルに適当に流してる状態なら、「全部まとめてざっと見て終わり」になる。つまり、チャネルをざーっとスクロールするだけで既読状態になるので、精神的な負荷が低い。
あと、実際に職場のSlackでもそうしたニュースを流し込んでるチャネルがあり、それを実際に見てて、それほど「目を通すこと」を意識することなく低い負荷で流し読みできているので、自分にはそれが向いてそう、という感じがしてる。
→ということで、個人で初めてSlackのワークスペース作成した。
まず Twitter -> Slack への集約を試してみたが・・・これ、結局やめた。
続いてRSSフィード購読を試してみた。
これは無難に使えそう。以下のフィードを試しに購読させてみた。・・・まぁ、年始ということもありすぐには動きは出てこないので、数日ちょっと様子を見てみる。
メーリングリストをSlackに流す:
実際に以下のMLをsubscribeし、GmailのMLフィルタからslackの環境設定で取得した転送先メールアドレスに転送してみる。
→ とりあえず数件、slackbotに流れてきてるので、あとはしばらく様子を見てみる。
他参考:
IntelliJ IDEAのフォーマッタとか調べてたら、"Google Java Style" というのが出てきた。
これらしい。
Google謹製のフォーマッタツールも公開されてる。
Checkstyle向けのXMLも、Checkstyle公式からDLできるらしい。
参考:
これらを使えば、IDEから手軽にフォーマットできるし、checkstyleで一括チェック・レポートも生成できる。
一歩進んで、ビルドシステム側で、そもそもcheckstyleの前に一括してチェックしたいし、IDEでちまちまフォーマットしてくよりは、設定変えたときに一括して再フォーマットしたい。
そんな要望を実現するために "Spotless" という GradleやMaven向けのライブラリが開発されてた。
参考:
これらを活用することで、フォーマット関連の作業を最大限効率化できそうなので、いつか試してみたい。
参考:
何ができるようになるか?:
@Test public void java_hash_literal() { Map<String, String> hash = hash( hello -> "world", bob -> bob, bill -> "was here" ); assertEquals("world", hash.get("hello")); assertEquals("bob", hash.get("bob")); assertEquals("was here", hash.get("bill")); } public static <T> Map<String, T> hash(NamedValue<T>... keyValuePairs) { Map<String, T> map = new HashMap<>(); asList(keyValuePairs) .stream() .forEach(kvp -> map.put( kvp.name(), kvp.value()) ); return map; }
なんとなくしか理解してないが、ラムダ式の引数名をリフレクションで取り出せるようになったのを活用して、key -> value をラムダ式に見立てれば、key をラムダ式の引数名として取り出せるよね、それでクールなMapビルダー作れたよ!という話らしい。
まぁ空白とか記号混じりは厳しそうなのである程度制限はあると思うが、アイデアとしては面白い。
・・・まぁ、これ使うくらいならドメイン特化したビルダー作るかもしれないけど・・・。
IntelliJ IDEAの雰囲気を掴むために、だらだらとググったり、軽くHello Worldを手元で触ったり既存Mavenプロジェクトをインポートしたりしたメモ。
3行でまとめ:
Eclipseユーザからの移行ガイド系:
もちろん、中にはEclipseに戻ってきた人もいるようで・・・。
機能は豊富・・・なのは当然として、ショートカットキーや補完機能が豊富。
またヘルプドキュメントもしっかりしていて、日本語サイトもバッチリ。
ぶっちゃけ、ググるくらいならその前に上記日本語ドキュメント読んだ方がよほど勉強になると思われ。
最近は個人/仕事とも、Spring FrameworkやSpring Bootを触ることが多い。
基本的にはどれも普通のMaven/GradleのJavaプロジェクトなので、読み込んで実行する分にはIDEAでも問題ない。(jarビルドの場合は。warビルドにしてTomcat等にデプロイするとなると、Community Edition ではTomcat等のアプリケーションサーバの実行が未対応っぽいので、Ultimate版が必要かもしれない)
ただし、Spring Boot のプロジェクト作成については Community Edition 版は未対応。Ultimateなら対応してる。
Spring Boot のdevtoolsも、Community Edition でなんとか使えるっぽい。
Spring開発については、公式からは Eclipse ベースの Spring Tool Suite (STS)が提供されている。
今はこれを使っているのだが、IntelliJ IDEA の、それもUltimate版になると Thymeleaf のテンプレートでThymeleafの補完が使えたり、SpringにおけるDIの依存関係のビジュアライズなど使えるっぽい。
これが結構嬉しいかもしれない。
ぶっちゃけ、Eclipse(= STS)でも問題ないっちゃ問題ない。
ただ、ガッツリ開発に集中するとなると、IDEAの細かいところまで行き届いた一貫性のあるIDEとしてのエコシステムの完成度や、キーボードショートカット・補完機能による開発(体感)効率の向上は無視できない。
言い方を変えると、Eclipse(or STS)では無料 + 開発者自身で足りてない部分をアレコレリサーチして作り込んだり対応するコストがあるが、IDEAの場合は有料の代わりにIDEA内ですべて完結するようになっている、とも言える。
価格としても2019年1月時点で Ultimate版のOrganization向けが1ユーザ/年で499ドルと、安くはないが、飛び抜けて高いわけでもない絶妙な値付けになっている。
よって本気で開発にリソース投下するなら、最高の装備としてUltimate版を購入するというのは十分有効な選択肢に思われる。
まぁEclipseでも無料で戦えるじゃん!と言われるかもだけど、年額499ドルは、無料の代わりに払う諸々のコストを札束でぶん殴って十分お釣りがくる値付けだと個人的には思われる。
例えるなら、熟練兵でゲリラ戦するならEclipseでもそりゃ戦えるけど、年額499ドル払うだけで新兵を熟練兵とまではいかずともそれなりにブーストできるわけ。
それなら最初から熟練兵に499ドルの最新兵器を与えれば、最強じゃね?という話。
一言でまとめると、金の力は偉大。
このブログのために自作したYakiBikiだが、PHP4の最後の時代に作ったこともありいい加減古い。
PHP5にキャッチアップできてないのと、それゆえに、PHP7では多分動かない。
それ以外にも機能/設計面で厳しいところも多い。例えば・・・
もともとYakiBikiを作るときの目標として、小~中規模IT企業における社内Wikiという活用方法を想定していた。
そのためACLに注力し、その結果としてACLのキャッシュという形を仕込んだわけだが、これがnon-DB(独自ファイルストア)と相まり、1,000件を超えたあたりから記事の更新が数秒かかるようになってしまった。
それでもプレビューがあればまだマシだったが、プレビュー機能は手抜きで作らなかったし・・・。
そうなると、個人利用でSEOも気にしたパフォーマンスそこそこ出す必要のあるブログとしては、もはや時代遅れも大概な遺物となってしまっている。
社内Wikiというか社内ナレッジサイトなら、今なら esa.io もあるし、GSuite や Office365 などでクラウドストレージ兼ドキュメントシステムもある。
タスク/プロジェクト管理やナレッジ共有 Backlog もあるしオンプレなら老舗のredmineでも戦える。メンバー構成によってはGitHub系も選択肢に上げられる。
自分自身も、働く会社が、受託系で細かくACLを気にする必要のあるSE/PG中心SIerではなく、ある程度の期間自社メンバーと一緒に働く場所に身をおいていることもあり、ACLの必要性が薄れてしまった。
そうなると、ACLを重視したYakiBikiはもうオーバースペックというか要望的にアンマッチであり、会社で使うことも将来的にまず考えられない。
で・・・じゃぁ、どうすんねん?だが、方向性としては以下のいずれかが考えられる。
ここでどうしても死守すべき要件は次の一点。
全く新しいサイトを新規作成して、そこで新しい記事を書いていく・・・のは、それはそれで問題ない。
が、「今のサイトのURLを死守」というのは別のOSSブログシステムやGitHub Pages(Jekyll)や、ましてやはてなブログ/WP.comでは実現できない。
(多分静的サイトジェネレータの一部では .htaccess 調整でリダイレクト対応とかできるかもしれないが、現行URLは1,000を超えており、.htaccessでそれだけのエントリのrewriteを管理するのは不可能)
つまり、「今のサイトのURLを死守」=「今のサイトを引き続き独自アプリでメンテしてく必要がある」ことを意味する。
まぁ実際問題、"/"区切りの記事の階層化とか、プラグイン記法によるナビゲーションや階層化記事の一覧機能など、機能としてはそこそこ便利だし引き続き使いたい機能はある。
これを完全に捨て去るのは、個人的にも惜しい。
外部ブログASPについては・・・
つまり死守要件は適用できないので現行サイトには使えないし、新しい記事についてだけ外部ASPを使おうとしてもそもそも個人的に気に入ったASPが無い。
GitHub Page など静的サイトジェネレータへはどうか?これも .htaccess のrewrite問題 + 過去記事互換性問題が立ちはだかるのと、新しい記事についてだけ~というパターンでも、やっぱり静的サイトジェネレータだと執筆環境がWebではなくて、サイトジェネレータ + アップロードという手間がかかるので個人的には厳しい。
結局のところ、現行サイトのURLと記事生成の仕組み(現行Wikiシステム)を維持する以上、何を選んでも「現行システムのPHPマイグレーション」は避けられない。
プラス、現行Wikiシステムは今後も使いたい。
となれば、YakiBikiの軽量化 & モダナイズが総合的には最も満足度の点からも、コストの点からも優れている。(結局マイグレーションしなければいけないなら、その見返りとして現行Wikiシステムのメリットを享受し続けたい)
ただし、引き換えに、また5~10年後に同様にマイグレーションの必要が生じる。
が、まぁ、それはそれで、いいかな・・・と。なかなか難しいところはあるけれど、現行資産の保全が割と優先度高いので。
現行 "/view/(数値)" URLを Permanent Redirect で "/view/(数値).html" にしておいて、もしものときの静的HTMLアーカイブ対応に備えておく、というのも考えたが・・・
まぁ、しておくことはしておくが・・・
次回または次次回のマイグレーション時の検討課題として残しておく。
要するに、超長期的には静的HTMLアーカイブした上で GitHub Pagesなどにごっそり上げる方向で考えたい。
しかし、そのための中期~長期のURL移行期間が必要なのと、その数年~十年単位の間での技術革新によりまた選択肢が増えることもあり得る。
そのため短期的にはPHPマイグレーションを主目的にしつつ、超長期に向けた移行期間への備えとして軽量化&モダナイズを実行し、いざというときの静的HTMLアーカイブに対応しやすいようにシンプルなサイト構成となるよう改造する。
軽量化&モダナイズ&機能強化のアイデア例:
→ここでの問題として、「現行、ワールドワイドには非公開の記事をどうするか?」問題が残っている。
これについては、現行のデータを洗い出した上で、非公開記事データは現状自分しか見れない状態なので、HTML or 記事そのままのテキスト状態で、Google Driveに入れておく、という程度で問題ないと思う。
2018-12時点で、Eclipseでよく使ってる(というか必須の)プラグインでInteliJ IDEA版がどうなってるか軽くググった参考メモです。
リンク先について、Community EditionでもOKなのか商用版のみかは検証してません。調査段階のメモなので、今後実際に動かして確認してくかもしれません。
TestNG: JUnitよりはTestNGの方が実用的でシンプル、使い勝手が良いので愛用してます。
CheckStyle: IDEAだと、checkstyle.xml をソースコードフォーマッタにも反映できるのが良さげ。Eclipseだとここ、分断されてるので checkstyle.xml とは別に Java Editor の Code Formatter を手動で揃えないといけないんですよね・・・。
一個気になる機能として、Eclipseのcode formatterでは以下のような形でフォーマッタの適用範囲外を設定できる機能があります。
// @formatter:off ... // @formatter:on
checkstyleというよりはIDEのフォーマッタの機能になりますが、同等なものが IntelliJ IDEAにあるか若干気になりました。
→ありました。2018年最新版ならまず問題なさそう。
FindBugs or SpotBugsプラグイン → FindBugsならプラグインあり。SpotBugsについてはリクエスト中。
とりあえず、あるのはわかったので、後日時間があれば、実際に動かしてみたい。
Springでの Server-Sent Events, WebSocket 参考メモ(2018-12月頃)
SseEmitter版:
WebFlux版:
SseEmitter版の方が簡単そう。