MiraiNotes v0.1

LaravelでWebベースのマークダウンアプリを作りました。Googleドライブ保管などが可能で、簡単にDockerで試せます。

別途、サーバは用意が必要ですが、Webベースのマークダウンアプリを探している方はよろしければ試してください。

Githubで要望や改善事項など、お話しして頂けると嬉しいです。

エディタはtui-editor、プレゼンテーションモードはreveal.jsベースで、iOSやMacのSafariに対応です。

https://github.com/kght6123/MiraiNotes

高さの異なるスクロールを相互に同期する #JavaScript #JQuery #HTML

高さが異なるスクロール領域を、スクロール領域の割合を基準に同期します。

相互のスクロール領域のスクロール位置を同期する為、

同期対象のスクロールイベントが、スクロール位置の同期時に発火してしまうと、

スクロールの操作がスムーズにならなくなるので

JQueryのon・off関数 を使って、一時的にscrollイベントを無効にしています。

RaspberryPiのmDNS(avahi-daemon)のIPv4が無効になってた

ルータをASUSからAirMacに変更したところ、mDNS名で接続できなくなった。

同時に有線LANから、無線LANに接続方法を変更したが、あまり関係ない気がする。

(ASUSのルータは早々に売ったので、詳細は確認不可)

最近、インストールしたRaspberryPi3 B+は大丈夫だったので、

avahiのバージョンか初期設定の問題があるかもしれない。

とりあえず、avahiの設定でIPv4を有効にしたら解決したのですが、

そこに辿り着くまでの試行錯誤の記録です。

最初は、とりあえずSSH接続したいので、Macで下記のコマンドを実行して、

IPを探そうとしました。

% arp -a

? (192.168.10.4) at 0:25:dc:5a:9:78 on en0 ifscope [ethernet]

% nslookup 192.168.10.4
Server:		240b:251:d660:6f10:1e36:bbff:fe03:6da9
Address:	240b:251:d660:6f10:1e36:bbff:fe03:6da9#53

** server can't find 4.10.168.192.in-addr.arpa: NXDOMAIN

nslookupでホスト名が取得できず、何れがRaspberryPiかわからない

(DNSサーバに登録されてないから、、、、ホスト名は取得不可)

仕方ないので、AirMacユーティリティで対象のルータを右クリックし、

ワイヤレスクライアントから対象のRaspberryPiを探し、

マウスカーソルを合わせて接続されているホスト名とIPを確認する

IPは分かったので、IPでSSHアクセス

avahiの動作を中心に疑ってみる

RaspberryPiのavahiで登録情報の確認

$ sudo apt-get -y install avahi-utils
$ avahi-browse -at # mDNS一覧表示

# 対象のRaspberryPiが一覧にない

$ avahi-resolve -n pi3j.local
pi3j.local	240b:251:d660:6f10:eb9b:d106:f4ef:98dd

avahiの登録情報が、Ipv6になってる??

  • あとで分かったが、これは正常。(”-4″オプションをつけないと、IPv6優先)
  • IPv6のみ有効になっている考察は合っていた。

次は、IPv6での接続確認を行なった

Macのping6でIPv6接続を確認

~% ping6 pi3j.local           
240b:251:d660:6f10:eb9b:d106:f4ef:98dd, icmp_seq=3 hlim=64 time=5.850 ms
^C
--- pi3j.local ping6 statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 5.850/7.028/8.428/1.023 ms
# Ping6はOK

~% ping pi3j.local       
ping: cannot resolve pi3j.local: Unknown host
# PingはNG

avahiのIPv4が有効になってない?かもしれない。

有効になっているか、確認する。

RaspberryPiでIPv4が有効か確認

$ avahi-resolve -n -4 pi3p.local
Failed to resolve host name 'pi3p.local': Timeout reached

IPv4はNG。

他の正常なRaspberryPiへの接続も、このRaspberryPiからのIPv4接続は、NG。

このRaspberryPiのIPv4設定が怪しい。

MacのmDNS情報もIPv4が有効か確認

~% dns-sd -q pi3j.local
DATE: ---Sun 07 Oct 2018---
14:30:45.395  ...STARTING...
^C
# IPv4 NG (dns-sdはIPv4が優先)

~% dns-sd -G v4v6 pi3j.local      
DATE: ---Sun 07 Oct 2018---
20:11:16.614  ...STARTING...
Timestamp     A/R    Flags if Hostname                               Address                                      TTL
20:11:16.884  Add        2  8 pi3j.local.                            240B:0251:D660:6F10:EB9B:D106:F4EF:98DD%<0>  120
^C
# IPv4 NG, IPv6 OK

dns-sdもIPv4だけNG、IPv6はOK

やっぱり、RaspberryPiのAvahiのIPv4設定が怪しい。

RaspberryPiのavahi-daemonのIPv4を有効にする

# 設定ファイルを編集
$ sudo vi /etc/avahi/avahi-daemon.conf

# 変更前
use-ipv4=no
use-ipv6=yes

# 変更後(use-ipv4 を yes に変える)
use-ipv4=yes
use-ipv6=yes

# 再起動&リロード
$ sudo service avahi-daemon restart
$ sudo service avahi-daemon force-reload

use-ipv4がnoになっていた。

(いつ変えた??どこで変わった??)

覚えてないので詳細は不明、、、、、気を取り直して、動作確認する。

MacのmDNS情報を確認

~% dns-sd -G v4v6 pi3j.local
DATE: ---Sun 07 Oct 2018---
22:30:50.100  ...STARTING...
Timestamp     A/R    Flags if Hostname                               Address                                      TTL
22:30:50.101  Add        3  8 pi3j.local.                            240B:0251:D660:6F10:EB9B:D106:F4EF:98DD%<0>  120
22:30:50.101  Add        2  8 pi3j.local.                            192.168.10.21                                120
^C
# IPv4,v6 OK

~% ssh pi@pi3j.local   
pi@pi3j.local password:

# mDNSでSSH接続が可能になった

IPv4もOKになり、SSH接続も可能になった。

疲れた。。。

忙しい人のためのJavaの近況とOpenJDKについて #Corretto #Zulu #Adopt

OracleからJava11がリリースされましたが

私自身、色々と誤解していた部分があったので、まとめてみました。

まとめてみると、今後はAdoptかZuluのOpenJDKがサポート期間も長く主流になるかも?と思えます。

OracleのOpenJDKも、LTSで3年サポートされれば、、、Oracle嫌いだけど。

(個人的には、流れ的にOracleのOpenJDKもLTSで3年サポートされるでしょーって思います。)

因みにサポートとは、バグフィックスやセキュリティパッチを入手できるか?ということです。

11/15 Correttoを追記。OpenJDKの戦国時代になりそうな、選択肢の豊富さになってきました。

  • Oracle JDK11
    • OracleのJDK、今までのJDKといえばほぼコレ。
    • Java12が出るまで(6ヶ月)のサポートは無償(開発・テストやプロトタイプ、デモ用途に限定)。Java12が出てからのサポートや実運用は有償。
  • Oracle OpenJDK11
    • OracleがOpenJDKをビルドして提供
    • Java12が出るまで(6ヶ月)のサポートは無償。Java12が出てからのサポート(LTS期間の3年)はチーフアーキテクトのMark Reinhold氏が宣言しているが、公式発表はなし。jdk.java.netで提供。
  • Adopt OpenJDK
    • AdoptOpenJDKコミュニティがOpenJDKをビルドして提供
    • Java8は2023年9月まで、Java11は2022年9月まで(最低4年間)サポート。
      • IBMやMS?がスポンサー
    • AdoptOpenJDK+HotspotVMと、AdoptOpenJDK+OpenJ9がある
      • Linux、AIX、Windows向けに提供されている。
      • HotspotVMのみ、MacOSとLinux ARM向けが提供されている。
    • DockerHubでも配信。 
    • IBMが、AdoptOpenJDKを4年間サポートする意向を示している。
  • RedHat OpenJDK11
    • RedHatがOpenJDKをビルドして提供
    • OpenJDK8をRed Hatが2020年10月までサポート、OpenJDK11はRed Hatが独自のサポート期間を設ける
      • Red Hat Linuxのエンタープライズ版で利用する事ができる。
  • IBM JDK + OpenJ9
    • IBMのJDK。ランタイムのOpenJ9が最近OSS化された。
    • Java8は2022年4月までサポート
      • Windows向けのバイナリは単体で提供されていない。
      • LinuxやAIX向けは単体提供あり。
      • DockerStoreで無料配信されているが、実運用は有償。
  • Zulu OpenJDK
    • AZUL SystemsがOpenJDKをビルドして提供
    • 商用サポートは8年のLTSサポートで、セキュリティとバグ修正を迅速に入手できる
    • 非商用の提供は明確にされていない。
      • JDK10、JDK9の32bit版があり、JDK6u113、JDK7u191、JDK8u181がある。
        • 非商用もサポート長いかもしれない?
      • ダウンロードページ
    • カスタマーにMicrosoft
    • 元OracleのSimon Ritter氏が所属している
  • Amazon Corretto
    • AmazonがOpenJDKをビルドして無償提供、今はプレビュー版。正式は2019年1月を予定。
    • JDK8は2023年6月(4年半)、JDK11は2024年6月(4年半)、セキュリティとバグ修正を入手できる?
    • 現在、Amazon Linux、Windows7~10、MacOSのインストーラ、Docker版が提供中、Windowsの32bit版の有無は不明。
      • 正式リリース時には、UbuntuやRed Hat Enterprise Linuxが含まれる
      • 個人的には、zip版も欲しい、、、
      • ダウンロードページ 
      • AWSにJavaの神様と言われているJames Gosling氏が所属している

以上

AntのJavaタスクでCLASSPATHを引き継ぐ

baseDirを変えて、外部のAntスクリプトを呼び出したい事があったので

javaタスクで新しいAntプロセスを起動し、build.xmlを実行することにしました。

その際に欠点があり、Ant実行時に指定したCLASSPATHが引き継がれません。

Antのドキュメントを調べてみると、VM引数に“-Dbuild.sysclasspath=last”を追加すると良さそうです。

因みに、javaタスクのcloneVm=”true”も目的を達成できそうでしたが、

対象のビルドファイル指定(-buildFile)が無効になってしまったので、

別のbuild.xmlを呼ぶことには使えなさそうです。

これで、長々とJavaタスクのclasspathを書く必要がなくなりました。

Ktorのfullstackサンプルを最新にアップデートしてみた #Kotlin

Ktorを試してみようと思い、Ktor(Backend)+KotlinJSのサンプルを見つけましたが、

影響しているモジュールが古かったので、最新にバージョンアップして、

ソースコードもバージョンアップに伴い少し修正しました。

その他、かなり自己流に修正してしまったので、PullRequestするかは検討中。。。

“Ktorのfullstackサンプルを最新にアップデートしてみた #Kotlin” の続きを読む

JRuby on Rails で #Kotlin を使う #JRuby #Rails

経緯

KotlinでWebアプリを作りたいと思い、一つの選択肢として調査した内容になります。

SpringBoot3.0がKotlinに対応してますし、Ktorもありますが、

RailsのREST-APIに適した、生産性の高いMVCフレームワークに魅力を感じて、Kotlinとの組み合わせを試して見ました。

制約

今の所、Kotlin側はデバッグやホットリロードができてません。

さらに、GradleとRailsを組み合わせて使うため、少し複雑になってます。

本格的に使う場合は、プラグインを作ってシンプルにしたいです。

また、Rails周りの経験が浅く、今はやり方が分からないのですが、デバッグ周りは出来る様にしたいと思っています。

対象OSは、macOSです。

“JRuby on Rails で #Kotlin を使う #JRuby #Rails” の続きを読む

ブラウザの閉じるボタンに割り込む #JavaScript #JQuery

経緯

過去に、間違ってブラウザを閉じない為の対策の一つとして、調べた内容になります。

onbeforeunloadイベントを使う

onbeforeunloadイベントで、画面遷移の前に特定の処理を実行できるイベントです。

returnで、trueまたは文字列を返すと、ブラウザ標準の確認ダイアログが表示され、確認を促せます。

JQueryは.unload()イベントになります。

“ブラウザの閉じるボタンに割り込む #JavaScript #JQuery” の続きを読む