参加してきました!
2018/12/16
2018/12/15
EEサーバーとJava SE 11の組み合わせをザッと調べる
EEとSEってバージョンどうなってるんだろうとふと思ったので、メモがてら書いています。
JAXB無くなったりとか色々あるので。
情報の寄せ集めです。
Javaを使ったサーバーサイドの選択肢
僕が最近のJavaのサーバーサイドってどんな感じだろうと考えたとき、
以下のような感じかなと思いました。
- Embedded web server(Tomcat、Jetty、Undertow、Payara など)を使ってアプリを動かす(fat jar的な。executable jar的な。)
- Spring Boot、Spark、Payara MicroなどでEmbedded web serverをあまり意識せず使い、アプリを動かす(fat jar的な。executable jar的な。)
- EE Server(Jakarta EE 8を前提とすると、WildFly 15、Payara 5、GlassFish 5、WebSphere*)にwebアプリケーションを作成してデプロイ(昔からよくある感じ)
※ WebSphereは有償サーバーでベンダー独自にサポートしているぽいので、調べにくいし割愛
今回、EEサーバーを使う方を考える。
Java SEは?
- 11になって行く時代
- 11がLTS
- 9とか10はなかったんや
Jakarta EE (Java EE) は?
8が最新の、はず
保証されて欲しい環境
- WildFly 15(EE8) + Java SE 8
- Payara Server 5(EE8) + Java SE 8
- GlassFish 5(EE8) + Java SE 8
は無論okとして、
- WildFly 15(EE8) + Java SE 11
- Payara Server 5(EE8) + Java SE 11
- GlassFish 5(EE8) + Java SE 11
がちゃんと動くかどうか。
・WildFly 15(EE8) + Java SE 11
EE7 、 EE8サポート。
Java SE 11もクラスパスモードでサポートしているらしい。
http://wildfly.org/news/2018/12/13/WildFly15-Final-Released/
・Payara Server 5(EE8) + Java SE 11
EE8はサポートしているとして、Java SE 11は issueが上がっている。
Java 9以降は現在サポートしていない。Jakarta EE自体が11対応というかjigsaw対応必要だろう、みたいなコメントが書いてある。
https://github.com/payara/Payara/issues/3382
https://github.com/payara/Payara/issues/2296
・GlassFish 5(EE8) + Java SE 11
蓮沼さんの記事が詳しいが、Java SE 11はサポートしてない。
まぁ、Payaraもまだだし。
https://www.coppermine.jp/note/2018/12/nightmare-of-jep320/
2018/11/28
最近読んでる本とか_201811
まえがき
読んでる本を並べてみると、なんかやってる風を装える気がしたので書いてみた。
意外と長めの文章ができ、装いとしては良いかもしれない。
どんな本を読んでいるか
- エンジニアリング組織論の招待
- マネージャーの問題地図
- 実践vim
- みんなのGo
あたりを今更読んでいる。
本を読んでいていつも思うが、
本を読み切るというのが得意ではない気がしている。
というか本を読むのに費やす時間が単純に不足してるだけともいう。
エンジニアリング組織論の招待
良い本。いろんな人が褒めているので今更褒めるのも野暮に感じている。読んで考察したりしてる部分もある、かもしれない。
マネージャーの問題地図
少しプログラマ向けではないが、とても良い内容。この本に関しては分厚くないし9割ぐらい読んだ気がする。
実践vim
実践vimは読んでいるが、大体知っている内容ではある。tips本なので仕方がないような側面はある。たまに知らないことが載ってるので得をする。
みんなのGo
発売当初に買って、流し読み。そしていま読み直しているが多少は理解しやすくなったような気もする。
この本もムック本?で読みやすい分量なので一周なめておきたい。
しかし物理本にしてしまったがゴーファーのパラパラ漫画は楽しい。手軽さを求めるなら電子書籍が良いかも。
本の読み方
おそろしいほどに、スマホに依存している。kindle端末もあり、PCもあるので、そちらで電子書籍なら読むことが出来るのだが、一番手軽という点でスマホになっている。
おそらく、PCに本を入れておいてリファレンス的に使うというのも有効ではないかと最近思っている。
時間の使い方
個人的な事情で、勉強するのに充てる時間が減ってきた感じがある。
感覚的に言うと無限にあった時間が有限になっただけ、ではあるので少し出来たスポットの時間を如何に有効活用するかが大事になって来ている(これは以前からもそう)。
自分にとっては、ブログに書き出すことも勉強とか読書とか、そちら方面の思考を整理するのに有効なので続けていきたい。
次に読みたい本
Clean Coderも読みたいが、ソフトウェア見積と計画的な見積のやつも読みたい。色々と積みすぎていて詰んでいる。
どの本を読むか、読まないか、捨てるかも整理したほうが良いのかもしれない。
あとがき
なんかコードを書きたい
2018/10/07
ちょいとA Tour of Versioned Go (vgo)をやってみる
A Tour of Versioned Go (vgo)
これをやってみようかと。
A Tour of Versioned Go (vgo)
(Go & Versioning, Part 2)
https://research.swtch.com/vgo-tour
vgoの詳細は以下に委ねる。
Goにおけるバージョン管理の必要性 − vgoについて − by @tenntenn #golang #go https://www.slideshare.net/takuyaueda967/go-vgo-102442203
動作環境
- macOS High Sierra
- Go 1.11.1
まずインストール
あぁ、なんかまだバグとかあるかもしれないとのこと。issue立ててとのこと。
You are certain to run into interesting bugs, since vgo is at best only lightly tested right now. To file issues, please use the main Go issue tracker and add the prefix “x/vgo:” to the title. Thanks.
とりあえず、素直にインストールしていきます。
go get -u golang.org/x/vgo
。。。なんだ?
go get -u golang.org/x/vgo go get: warning: modules disabled by GO111MODULE=auto in GOPATH/src; ignoring go.mod; see 'go help modules'
なんかwaring出てるけど、一旦進めてみるか。
helloなんちゃらを作る
helloってディレクトリを作る
$ mkdir hello $ cd hello
エントリポイント書く
main関数書く
package main // import "github.com/you/hello" import ( "fmt" "rsc.io/quote" ) func main() { fmt.Println(quote.Hello()) }
go.modってファイルを作る
go.modってのを作ってビルドするらしい。
echo >go.mod vgo build
果たしてすんなりビルド通るかな。
なんか、うちのネット環境が貧弱なせいもあって初回ビルドすんごい重いな。
$ vgo build go: finding rsc.io/quote v1.5.2 go: downloading rsc.io/quote v1.5.2 go: finding rsc.io/sampler v1.3.0 go: finding golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c go: downloading rsc.io/sampler v1.3.0 go: downloading golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c $ ./hello こんにちは世界。
お、なんかすんなりできた。
ディレクトリ構成はこんな感じになった。
tree . ├── go.mod └── hello ├── go.mod ├── go.sum ├── hello └── hello.go
go.modの中身はこうなった。
cat hello/go.mod
module github.com/you/hello
require rsc.io/quote v1.5.2
go.sumの中身はこんな感じ。
cat hello/go.sum golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c h1:qgOY6WgZOaTkIIMiVjBQcw93ERBE4m30iBm00nkL0i8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= rsc.io/quote v1.5.2 h1:w5fcysjrx7yqtD/aO+QwRjYZOKnaM9Uh2b40tElTs3Y= rsc.io/quote v1.5.2/go.mod h1:LzX7hefJvL54yjefDEDHNONDjII0t9xZLPXsUe+TKr0= rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
どうやら、バージョンを固定するためのものっぽい。
アップグレード
vgoで管理しているものをupdate日付とか一覧で見るにはこんな感じらしい。
vgo list -m -u
実際にupgradeするにはこのようにする。
vgo get golang.org/x/text vgo: finding golang.org/x/text v0.3.0 vgo: downloading golang.org/x/text v0.3.0
ダウングレード
逆にダウングレードする際は、バージョン番号を指定してやると良いみたい。
$ vgo get rsc.io/sampler@v1.2.0
テスト
vgo test all でvgoで管理されているモジュールのテストが走るらしい。
vgo test all
結果:
vgo test all ok archive/zip (cached) ok bufio (cached) ok bytes (cached) ok compress/bzip2 (cached) ok compress/flate (cached) ok compress/gzip (cached) ok compress/lzw (cached) ok compress/zlib (cached) ok container/list (cached) ok context (cached) ok crypto (cached) ok crypto/aes (cached) ok crypto/cipher (cached) ok crypto/des (cached) ok crypto/dsa (cached) ok crypto/ecdsa (cached) ok crypto/elliptic (cached) ok crypto/hmac (cached) ? crypto/internal/randutil [no test files] ok crypto/internal/subtle (cached) ok crypto/md5 (cached) ok crypto/rand (cached) ok crypto/rc4 (cached) ok crypto/rsa (cached) ok crypto/sha1 (cached) ok crypto/sha256 (cached) ok crypto/sha512 (cached) ok crypto/subtle (cached) ok crypto/tls (cached) ok crypto/x509 (cached) ? crypto/x509/pkix [no test files] ? encoding [no test files] ok encoding/asn1 (cached) ok encoding/base64 (cached) ok encoding/binary (cached) ok encoding/gob (cached) ok encoding/hex (cached) ok encoding/json (cached) ok encoding/pem (cached) ok encoding/xml (cached) ok errors (cached) ok flag (cached) ok fmt (cached) ? github.com/you/hello [no test files] ok go/ast (cached) ok go/build (cached) ok go/doc (cached) ok go/format (cached) ok go/parser (cached) ok go/printer (cached) ok go/scanner (cached) ok go/token (cached) ? golang.org/x/text/internal/gen [no test files] ok golang.org/x/text/internal/tag (cached) ? golang.org/x/text/internal/testtext [no test files] ok golang.org/x/text/internal/ucd (cached) ok golang.org/x/text/language (cached) ok golang.org/x/text/unicode/cldr (cached) ok golang_org/x/crypto/chacha20poly1305 (cached) ok golang_org/x/crypto/cryptobyte (cached) ? golang_org/x/crypto/cryptobyte/asn1 [no test files] ok golang_org/x/crypto/curve25519 (cached) ok golang_org/x/crypto/internal/chacha20 (cached) ok golang_org/x/crypto/poly1305 (cached) ok golang_org/x/net/dns/dnsmessage (cached) ok golang_org/x/net/http/httpguts (cached) ok golang_org/x/net/http/httpproxy (cached) ok golang_org/x/net/http2/hpack (cached) ok golang_org/x/net/idna (cached) ? golang_org/x/net/internal/nettest [no test files] ok golang_org/x/net/nettest (cached) ok golang_org/x/net/route (cached) ? golang_org/x/text/secure/bidirule [no test files] ok golang_org/x/text/transform (cached) ? golang_org/x/text/unicode/bidi [no test files] ok golang_org/x/text/unicode/norm (cached) ok hash (cached) ok hash/adler32 (cached) ok hash/crc32 (cached) ok hash/crc64 (cached) ok hash/fnv (cached) ok image (cached) ok image/color (cached) ? image/color/palette [no test files] ok image/draw (cached) ok image/gif (cached) ? image/internal/imageutil [no test files] ok image/jpeg (cached) ok image/png (cached) ? internal/bytealg [no test files] ok internal/cpu (cached) ? internal/nettrace [no test files] ok internal/poll (cached) ? internal/race [no test files] ok internal/singleflight (cached) ? internal/syscall/unix [no test files] ? internal/testenv [no test files] ? internal/testlog [no test files] ok internal/trace (cached) ok io (cached) ok io/ioutil (cached) ok log (cached) ok math (cached) ok math/big (cached) ok math/bits (cached) ok math/cmplx (cached) ok math/rand (cached) ok mime (cached) ok mime/multipart (cached) ok mime/quotedprintable (cached) # os/signal.test clang: warning: argument unused during compilation: '-nopie' [-Wunused-command-line-argument] ok net 477.127s ok net/http (cached) ok net/http/cookiejar (cached) ok net/http/httptest (cached) ok net/http/httptrace (cached) ok net/http/httputil (cached) ok net/http/internal (cached) ok net/internal/socktest (cached) ok net/mail (cached) ok net/textproto (cached) ok net/url (cached) ok os 18.478s ok os/exec (cached) ok os/signal (cached) ? os/signal/internal/pty [no test files] ok os/user (cached) ok path (cached) ok path/filepath (cached) ok reflect (cached) ok regexp (cached) ok regexp/syntax (cached) --- FAIL: TestHello (0.00s) quote_test.go:19: Hello() = "99 bottles of beer on the wall, 99 bottles of beer, ...", want "Hello, world." FAIL FAIL rsc.io/quote 0.008s --- FAIL: TestHello (0.00s) hello_test.go:31: Hello([en-US fr]) = "99 bottles of beer on the wall, 99 bottles of beer, ...", want "Hello, world." hello_test.go:31: Hello([fr en-US]) = "99 bottles of beer on the wall, 99 bottles of beer, ...", want "Bonjour le monde." FAIL FAIL rsc.io/sampler 0.008s ok runtime (cached) ok runtime/debug (cached) ok runtime/internal/atomic (cached) ok runtime/internal/sys (cached) ok runtime/trace (cached) ok sort (cached) ok strconv (cached) ok strings (cached) ok sync (cached) ok sync/atomic (cached) ok syscall (cached) ok testing (cached) ? testing/iotest [no test files] ok testing/quick (cached) ok text/tabwriter (cached) ok text/template (cached) ok text/template/parse (cached) ok time (cached) ok unicode (cached) ok unicode/utf16 (cached) ok unicode/utf8 (cached) ? unsafe [no test files]
あ、失敗してるし。
どうやら、1.99.99だとテストFAILするので、バージョン変更しようっていうサンプルっぽいですね。
流れにしたがって、 vgo get rsc.io/sampler@v1.3.1 すると テストをPASSするようになりました。
Excluding
特定のバージョンを除外することもできる。
こんな感じで。
echo 'exclude rsc.io/sampler v1.99.99' >>go.mod
go.modの除外は、他のモジュールでは有効にならない。
この場合、hello/go.modにのみ除外が有効で、他のモジュールでhelloモジュールが使われていたとしても exclude ...
は適用されないということみたい。
Replacing
特定のモジュールを指定して、置き換えができるということらしい。
ローカルにあるソースを参照させるようにしたり
echo 'replace rsc.io/quote v1.5.2 => ../quote' >>go.mod
forkしてきたものを見るようにしたり出来るみたい。
echo 'replace rsc.io/quote v1.5.2 => github.com/you/quote v0.0.0-myfork' >>go.mod
go buildもできる
ベンダリングして、GOPATHの通っているところにもっていけば go buildも出来るということらしい。
vgo vendor $ mkdir -p $GOPATH/src/github.com/you $ cp -a . $GOPATH/src/github.com/you/hello $ go build -o vhello github.com/you/hello $ LANG=es ./vhello Puedo comer vidrio, no me hace daño.
まとめというか感想というか
先ほどの資料によると(https://www.slideshare.net/takuyaueda967/go-vgo-102442203)、
これが Go 1.12では標準となるということですが、
まぁ、普通に使ってみて使えるっちゃ使えるかもなぁと思います(正直ちょっと触ったぐらいではツラミ分からない)。
いちど、ビルド・デプロイの流れを組んでしまえば (それなりに大変だろうけど)なんとかなりそうな。
でも、depとかgbとかもアクティブなのだろうし、他のツールを使っているならそのまま使っていても良いような。
モジュール単位でのバージョン管理とかvgoの仕組みにメリットがあれば使っていけば良い…のかな?
参考
- Goにおけるバージョン管理の必要性 − vgoについて − by @tenntenn #golang #go https://www.slideshare.net/takuyaueda967/go-vgo-102442203
- 和訳: Go += Package Versioning (Go & Versioning, Part 1) https://qiita.com/nekketsuuu/items/60634417e6279ccfd95b
- A Tour of Versioned Go (vgo) (Go & Versioning, Part 2)
https://research.swtch.com/vgo-tour - dep
https://getgb.io/ - gb
https://getgb.io/
2018/09/30
携帯をLINEモバイルにしました
一応このブログは、月一更新以上するのが目標設定なんですが、
先月うっかり投稿していなかったことに気づき
月一投稿記録が途絶えてしまって地味にヘコんだりしている僕です。
そして、今月も9月末に滑り込みでとりあえず書いている状態&ネタ的にもとても微妙なので、特に宣伝などせず、ブログ記事を書くだけというところにとどめておこうと思います。
この記事の要約
・携帯をLINEモバイルにした
・ MNP→LINEモバイルの契約→CIMと端末受け取る→CIM開通で完了
・特に今のところ困ってない。今まで通り。解約もそんなに大変じゃない
発端
携帯料金高い!ってとこだけなんですけどね、まぁ。
要約で書いたことがほぼ全てなんですが、携帯の回線契約ってau、docomo、ソフトバンクなどのキャリアの寡占状態で、そこにMVMO業者が参入してきた感じかなと雑に想像ているんですが、
LINEモバイルやMINEO、UQMobile、楽天モバイルなどが台頭してきているという状況なんだなということに今更ながら気づいた次第です。
参考)
どれにしたらええんや
— yank shaving (@yy_yank) August 23, 2018
しかもMNPというものがあって、電話番号もそのままで、契約を変更できるっていうのが決め手になった感じがします。
携帯電話番号の変更連絡とか、地味な事務作業ってめんどいですし。
あらためてMVNO業者に移行するためにやること
前述の通り、かなり移行コストも低かったです。
僕の場合
・auのMNPサポートセンター的なところにTEL
・LINEモバイル契約
・端末&cim受け取り
・開通
だけです。要する期間も数日レベルでした。
まとめ
LINEモバイルにしたけど特に不便もなく、auの頃と変わりはなさそうって話でした!
何か関連した話があれば続報を書きます。