【Java】VisualVMでJavaのプロファイリング

Javaには、「VisualVM」という非常に強力なGUIベースのプロファイラ(どのメソッドでCPUや時間などどれだけのリソースを食ったかを解析するツール)がある。

Home — Project Kenai

シンプルだが非常にわかりやすい。 ローカルで起動してプロセスにアタッチするならどんなjava起動のプロセスでも良いが、 リモートの場合、VM引数追加してしかもポートを開けないとだめなのが難点。

開発には十二分な機能だ。今後活躍してもらおう。

【Java】マニフェストファイルと実行可能JARファイル

ファイル名に「.jar」がついたJARファイルがJavaライブラリの一般的な(ていうか唯一の?)形式。 JARファイルには、自身についてのメタ情報などを記載したマニフェストファイル(META-INF/MANIFEST.MF)という仕組みがある。 (マニフェストファイル、改行しないとダメだの色々フォーマットで口うるさいことで有名なようだ)

(マニュアル) https://docs.oracle.com/javase/jp/1.5.0/guide/jar/jar.html

実行可能JAR

マニフェストファイル中に「Main-Class」、javaコマンドおなじみのメインクラスをはじめから埋め込んだJARファイルを、 「実行可能JAR」と呼ぶそうだ。

つくり方は色々あるらしいが、以下参考できそうなものをリンク参照。

JDK付属ツールでコマンドラインより作成

Jarファイルメモ(Hishidama's java-archive Memo)

Eclipseプラグインから作成

Jarファイルメモ(Hishidama's java-archive Memo)

メインクラスをわざわざ書かなくていいのは素晴らしい。 けど、結局シェル作って

java -jar runnable.jar

ってやらなければいけない。Javaってそんなにスクリプトライクに作りこむ言語仕様じゃないし。あんまり意味ない・・・。

【AngularJS1】$http,$q,Promise回りメモ

$httpサービス

$http | AngularJS 1.2 日本語リファレンス | js STUDIO

非同期なHTTPリクエストを提供してくれるサービス。 例えば、putでURL投げて結果を取得する例。

const url = 'http://api.hostname.com/manapi/user/add';
let data = {
  userid : userid,
  username : username,
  passowrd : password,
};


$http.put(url, data)
    .success(function(data, status, headers, config) {
        let user_no = data.id;
        alert(`ユーザーを登録しました。(ユーザーNo:${user_no}`);
    })
    .error(function(data, status, headers, config) {
        alert('通信に失敗しました。時間をおいて再度ご実行ください。');
    });

jQueryajax()やget()などと機能自体は同じ。

Promiseパターンなオブジェクトを戻り値として返すので、 あとでメモる$qサービスなどと連携して楽に非同期制御が書ける。 (よく、こんな仕組みを考えたものだ。)

$qサービス

AngularJS

非同期処理のユーティリティクラス。

まとめるのがしんどかったのと 非常にわかりやすい記事があったので参考にさせていただいた。

dev.classmethod.jp

こいつが非常に強力で、なるべくdirectiveやcontrollerでは直接サービス依存しないようにしている・・・。

Promise

Promiseとは (※以下はES6のPromiseについての資料です。Angularのとは用法が若干異なります。)

qiita.com

Angularは、Promiseパターンのオブジェクトを独自に提供している。 IE11など、ES6のPromiseを実装していないブラウザでも安心して?使える。

AngularのPromiseもES6と同様に、一般にPromiseパターン、そしてFutureパターン(こちらのほうの性格が強い)を足したような実装になっている。

Google App Scriptに今更ながら触った

Slackで、管理者がいちいち招待送るの面倒くさいなーと思い、 自己申請でなんとかならないか探していたら、Google App Scriptなやり方を書かれたブログ様を拝見。

qiita.com

さわってみたけど、Google App、いいな。

現場だと、Excelに票作って宴会の参加・不参加いれてね~、 NGな食べ物いってね~ってなんかごにょごにょしてたけど

フォームなんかだとスクリプトなしで集計できちゃうね。 (誰が何入れたか見れないのは、メリットかデメリットか)

他にも社内の申請とかワークフローとか使えるかも。でもメンテナンス大変そうだな。

【gulp】TypeScript → JavaScript変換構成メモ

SPA(Single Page Application)っぽいの作ってる。 タスクランナーに gulp を使って、TypeScript → JavaScriptな構成を作った。

流れとしては TypeScriptJavaScript(ES5)にコンパイルbrowserifyでモジュール単位にまとめる → uglityで圧縮 でとってた。が、なんか色々問題となっていた。

①TypeScriptのES6 ←→ ES5 Polyfillが怪しい

バージョンにもよるんだろうけど、でもバージョンアップでPolyFill失われるのびびった。 (ex: ES6追加のString.prototype.startsWithをES5に変えてくれるPolyFillが、TypeScript 1.7.2 → 1.8.10 でなくなった)

正式に、Babel使うのがいいのかもしんない。

CSSファイルの管理がちょっと辛い

Angular使ってる。 けどDirectiveごとにCSSが分かれていない。いちおう、sass(笑)使ってるので1ファイルにまとめることはできてるけど、 Directive増やすと、TypeScriptの定義はもちろん、sassのリンクするとこもメンテしないとだめ。 CSSって単純に結合しても全然普通に表示できちゃうよね。なんか無駄な努力している感。

単純にwebpack使えるなら使いたい。

目指す構成

TypeScriptJavaScript(ES6)にコンパイルbabelでES5化 → webpackでモジュール単位にまとめる → uglityで圧縮

webpackが多機能すぎてちょっと色々いじらなきゃいけないけど、これが一番すっきりするはずだ。

手順とかあとで書く。

【JavaScript】ES5環境でもResolveを使う(Polyfill)

まだまだ根強いIEのシェア。

www.netmarketshare.com

IE11がサポートするJavaScriptの企画は、ECMAScript5 (ES5)まで。 やっとコールバック地獄を抜け出す手段Promiseが提供されたのに、現状使えない。 (クライアントにブラウザこれ使ってね、といってもみんながみんなつかってくれない。。)

(参考) ECMAScript 6 compatibility table

が、PromiseはES5環境で聞くPoliyFillがあるそうだ。

GitHub - stefanpenner/es6-promise: A polyfill for ES6-style Promises

Promiseが実装されているかを見て、 なければ追加で低速だが・・・な実装を施す。

TypeScript向けにd.tsファイルもある。

とりあえず、手持ちのプロジェクトはこれを使おう。

ちょっと所信表明

本日、社内で定例会のように集まって飲んで集まったんだけど、改めてキャリアに危機感をもった。

このままでは、消耗するだけで成長できない。 そしてリターンもない。

会社は面倒見てくれないし、社内の仕事も回してくれない。 (あるにはあるが、マネジメントが適切にされていない)

このままでは永久に4次受けのまま。 これでは、30代もだめのままだ。

これから、毎日技術ブログを書く。 どんな小さなことであっても。 新しいことをかく。

習慣化すべきだ。他のことに時間を書くよりも、優先すべきだ。

まず一週間続け、キャリアパスとする。 そうする。

まず、1記事目を書こう。