読者です 読者をやめる 読者になる 読者になる

それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

インストールされてるJDKバージョンを確認し一覧するコマンド

あれ?java どこに入れたっけ

java 本体やコマンド なんてめったに使わないので、ついつい油断しますよね。

java_home という便利なコマンドが有る。

/usr/libexec/java_home

Debian にはコマンドが見当たらなかったのでたぶん、MacOS用だと思うのですが。調べてみたらXcodeに含まれるようですね。

java_homeの出力例

takuya@Desktop$ /usr/libexec/java_home  -V
Matching Java Virtual Machines (6):
    1.8.0_131, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
    1.8.0_31, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home
    1.8.0_25, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home
    1.7.0_75, x86_64:   "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home
    1.6.0_65-b14-468, x86_64:   "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    1.6.0_65-b14-468, i386: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home

VisualStudio Codeや .bashrc で使える

VS Codeで java support を入れたときの java.home 設定や

.bashrc での JAVA_HOME JDK_HOME での設定に使える

バージョンごとの使い分けもできる。

rbenv や pyenv 的な使い方ができる。

takuya@Desktop$ /usr/libexec/java_home  1.7.0_75
/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
takuya@Desktop$ /usr/libexec/java_home  1.6.0_65
/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
takuya@Desktop$

バージョンごとの使い分けに出来るので、

setenv JAVA_HOME=$(/usr/libexec/java_home  1.6.0_65)

などとすれば、Javaのバージョンを切り分けて使えますね。

参考資料

https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/java_home.1.html

Javaの対話型コンソール(repl)を使って楽をする

ちょっと動作調べるのに main 書くのめんどくさそう

java を REPL つまり、対話型インターフェイスCLIで実行したい。

go や node でお世話になるあれ。swhift にすら搭載されて。php にすら搭載されてるあれ. ruby なら pry / irbpython なら ipython / python

Javaでもやりたいよね。

REPLを実現する jar があった

github.com

起動

普通にjar を起動するだけ

takuya@Desktop$ java -jar javarepl-428.jar
Welcome to JavaREPL version 428 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_131)
Type expression to evaluate, :help for more options or press tab to auto-complete.
Connected to local instance at http://localhost:62945
java> String a = "ズンドコ"
java.lang.String a = "ズンドコ"
java> a == "ズン"
java.lang.Boolean res1 = false
java>

ああ、便利。

便利?なような気がしたけど、気の所為だった。

補完が効かない、タイピング地獄。Javaの冗長なクラス名を補完無しで書くのがつらすぎる。

うん、main 書いたほうが楽。

java9あたりから採用されるREPLを先取り

java9 から jshell が標準添付されるんで、もうすぐお役御免かも?

[Java9 新機能] jshell入門 - Qiita

参考資料

Javaプログラマ必須 - 対話型にJavaを実行できる「Java REPL」 - Calms blog

GitHub - albertlatacz/java-repl: Read Eval Print Loop for Java

curlコマンドで速度制限(スピードリミッタ)をつける

curl でファイルを次々と取得してて

curl でパッケージを取得したり、転送したりしてて他の作業に支障がでることがあります。

curl 万能なので使いすぎます。

speed limit をつけることで curl を速度制限出来ます。

速度上限をつけることで、穏やかに、急がなくていいファイルはゆっくり転送しておくことが出来ます。便利

curl --limit-rate=2k $URL

また、遅すぎると切断するようなこともできますね。

wget の場合も同じものが使える。

http://takuya-1st.hatenablog.jp/entry/20110523/1306171106

参考資料

       --limit-rate <speed>
              Specify the maximum transfer rate you want curl to use - for both downloads and uploads.  This
              feature  is  useful  if  you  have a limited pipe and you'd like your transfer not to use your
              entire bandwidth. To make it slower than it otherwise would be.

              The given speed is measured in bytes/second, unless a suffix is appended.   Appending  'k'  or
              'K'  will  count the number as kilobytes, 'm' or M' makes it megabytes, while 'g' or 'G' makes
              it gigabytes. Examples: 200K, 3m and 1G.

              If you also use the -Y, --speed-limit option, that option will take precedence and might crip-
              ple the rate-limiting slightly, to help keeping the speed-limit logic working.

              If this option is used several times, the last one will be used.
      -y, --speed-time <time>
              If a download is slower than speed-limit bytes per second during a speed-time period, the download gets
              aborted. If speed-time is used, the default speed-limit will be 1 unless set with -Y.

              This option controls transfers and thus will not affect slow connects etc. If this  is  a  concern  for
              you, try the --connect-timeout option.

              If this option is used several times, the last one will be used.

       -Y, --speed-limit <speed>
              If  a  download  is  slower  than this given speed (in bytes per second) for speed-time seconds it gets
              aborted. speed-time is set with -y and is 30 if not set.

              If this option is used several times, the last one will be used.