今年もまた1年が終わってしまった。
諸行無常。
自分の中の恒例行事となっているので、
振り返りと来年の目標をユルく立てようと思います。
今年立てた目標
今年の目標はこんな感じ(だったよう)でした。
- 本を読む
- Goを書く
- Kotlinの情報を何か発信する
- 健康でいる
- 習慣を変える
これらを振り返っていく。
・・・・・・・。
今年もまた1年が終わってしまった。
諸行無常。
自分の中の恒例行事となっているので、
振り返りと来年の目標をユルく立てようと思います。
今年の目標はこんな感じ(だったよう)でした。
これらを振り返っていく。
・・・・・・・。
今回、EEサーバーを使う方を考える。
8が最新の、はず
は無論okとして、
がちゃんと動くかどうか。
EE7 、 EE8サポート。
Java SE 11もクラスパスモードでサポートしているらしい。
http://wildfly.org/news/2018/12/13/WildFly15-Final-Released/
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
蓮沼さんの記事が詳しいが、Java SE 11はサポートしてない。
まぁ、Payaraもまだだし。
https://www.coppermine.jp/note/2018/12/nightmare-of-jep320/
読んでる本を並べてみると、なんかやってる風を装える気がしたので書いてみた。
意外と長めの文章ができ、装いとしては良いかもしれない。
あたりを今更読んでいる。
本を読んでいていつも思うが、
本を読み切るというのが得意ではない気がしている。
というか本を読むのに費やす時間が単純に不足してるだけともいう。
良い本。いろんな人が褒めているので今更褒めるのも野暮に感じている。読んで考察したりしてる部分もある、かもしれない。
少しプログラマ向けではないが、とても良い内容。この本に関しては分厚くないし9割ぐらい読んだ気がする。
実践vimは読んでいるが、大体知っている内容ではある。tips本なので仕方がないような側面はある。たまに知らないことが載ってるので得をする。
発売当初に買って、流し読み。そしていま読み直しているが多少は理解しやすくなったような気もする。
この本もムック本?で読みやすい分量なので一周なめておきたい。
しかし物理本にしてしまったがゴーファーのパラパラ漫画は楽しい。手軽さを求めるなら電子書籍が良いかも。
おそろしいほどに、スマホに依存している。kindle端末もあり、PCもあるので、そちらで電子書籍なら読むことが出来るのだが、一番手軽という点でスマホになっている。
おそらく、PCに本を入れておいてリファレンス的に使うというのも有効ではないかと最近思っている。
個人的な事情で、勉強するのに充てる時間が減ってきた感じがある。
感覚的に言うと無限にあった時間が有限になっただけ、ではあるので少し出来たスポットの時間を如何に有効活用するかが大事になって来ている(これは以前からもそう)。
自分にとっては、ブログに書き出すことも勉強とか読書とか、そちら方面の思考を整理するのに有効なので続けていきたい。
Clean Coderも読みたいが、ソフトウェア見積と計画的な見積のやつも読みたい。色々と積みすぎていて詰んでいる。
どの本を読むか、読まないか、捨てるかも整理したほうが良いのかもしれない。
なんかコードを書きたい
これをやってみようかと。
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
あぁ、なんかまだバグとかあるかもしれないとのこと。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ってディレクトリを作る
$ 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ってのを作ってビルドするらしい。
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するようになりました。
特定のバージョンを除外することもできる。
こんな感じで。
echo 'exclude rsc.io/sampler v1.99.99' >>go.mod
go.modの除外は、他のモジュールでは有効にならない。
この場合、hello/go.modにのみ除外が有効で、他のモジュールでhelloモジュールが使われていたとしても exclude ...
は適用されないということみたい。
特定のモジュールを指定して、置き換えができるということらしい。
ローカルにあるソースを参照させるようにしたり
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
ベンダリングして、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の仕組みにメリットがあれば使っていけば良い…のかな?
どれにしたらええんや
— yank shaving (@yy_yank) August 23, 2018
Kotlin ver 1.3-M1が出ました。
See what’s coming in Kotlin 1.3-M1
https://blog.jetbrains.com/kotlin/2018/07/see-whats-coming-in-kotlin-1-3-m1/
毎回アップデートがあるたびに変更内容を眺めてはいるのだけど、
今回は久しぶりに面白いバージョンアップだなあと思いました!
など。
そして今回もshirajiさんみたいにKotlinへコミットしてる日本の方もいて良いですねー。
https://github.com/t-kameyama
多分日本の方?だと思う。
西日本応援プロジェクト 真夏の大LT大会!というイベントがありました。
https://techplay.jp/event/684228
という企画でした。
そーだいさんが、なんかやろうとしてるなーと思ったら
あれよあれよと豪華な発表者が集まって来てて面白そうだし、
まぁ自分のお金も人の役に立つわけだしということで参加しました。
全員LTするには勿体無いぐらいでしたねーー。ホントに。
しかもLT面白いし。
なにより、各々、災害に遭った地域を思う気持ちが根底にあり発表しているというのがなんとなく伝わって来て良かったです。
自分は阪神大震災で被災してるし、
関東の震災もあったし、
地元の方では最近また大きな地震もあったし、
そして今回水害や土砂災害がありました。
(ここに並べていないけど、他にも色々震災とかありましたね)
出来ることはなかなか少ないんですけど、まあお金を送るぐらいはまぁ、
簡単に僕にも出来ることだなぁとか思ったりしてました。
あと、現場の状況をちゃんと受け止めること、というか向き合うこと。
災害があったことを覚えておくことっていうのが、なんとなく自分の中でやらなきゃいけないことな気がして、そういう意味でも勉強になる会でした。
なんか妙に真面目な話になってしまったので、このエントリは終わりにします!
2018/06/27にJetBraninsのhadiさんがくるって言うことで、
Kotlin Developers Meetupに行って来ました!
Kotlin Developers Meetup
https://kotlin.connpass.com/event/90679/
準備は@satorufujiwaraさんに任せっぱなしで、
最後ゴミの片付け手伝ったレベルでした…!
すんません!
togetterでツイートまとめましたのでこちらで雰囲気はわかると思います。
https://togetter.com/li/1243940
(ツイート載せて欲しくない方は編集自由にしていますので削除お願いします!)
当日の映像が動画になっています!
@satorufujiwaraさん ありがとうございます!
https://www.youtube.com/watch?v=TGdAvY5i-sU&feature=youtu.be
DSLの話をしていました。
hadiさんはDSLの話をしていることが多い気がしますね。
今回もジョーク混じえつつの良いトークを聞けました!
FSM DSL in Kotlin
https://speakerdeck.com/tomoya0x00/fsm-dsl-in-kotlin
@tomoya0x00 さん
Kotlin Multiplatform(?)
https://speakerdeck.com/panini/kotlin-multiplatform
@callipanさん
Spring FuをGraalVMで
的なやつ
資料アップしてない?
ブログ記事
https://taro.hatenablog.jp/entry/2018/07/02/090458
@ngsw_taroさん
ビズリーチの方もLTされてましたが、、
みつけたらこの記事に追加します!
あと@yanzmさんが自分の子供にマイクラのmodをKotlinで書いてもらった?的なLTもありました!
せっかくなので、hadiさんに話しかけようと近づいて行ったのですが
英会話ほぼ出来ないので 「I like wasabi」とだけ伝えました。
https://github.com/wasabifx/wasabi
「wasabiはもうkillしたよ」的なこと言われましたw
https://kotlinlang.slack.com/のslackチャンネルとかから#wasabiが消えてたんで知ってたんですけど、直接言われるとなんとなく寂しいですね
wasabiじゃなくてもうktor使って!てことらしいですね。
https://github.com/ktorio/ktor
@shiraj_i さん とか @callipan さんが普通に英語で会話してるのでホォー羨ましいなと思いつつ、
どういう会話かはちょっとは聴き取れるので横で聴いたりしてすごしました。
hadiさんはエヴァンジェリストチームなので世界各国の色々なところを行脚してて、
そのエピソードトークとかがメインだったような気がします!
実際に中の人に会って話す機会はなかなか貴重なことだと思うので
良いイベントでした!
会場提供 & 準備ありがとうございました!
hadiさんまたきてください!
前回に引き続き。
あえて、調べ直す。
リバースプロキシ(英: Reverse proxy)または逆プロキシは、 特定のサーバへの要求を必ず経由するように設置されたプロキシサーバ。 一般的なプロキシとは異なり不特定多数のサーバを対象としない。 リバースプロキシは、不特定多数のクライアントから寄せられる要求に対して、 応答を肩代わりすることにより特定のサーバの負担を軽減したり、 アクセスを制限することにより特定のサーバのセキュリティを高めたりする目的に用いられる。
wikipediaの引用。
https://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%90%E3%83%BC%E3%82%B9%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7
分かるんだけどなんかしっくりこない。
何がリバース?
内部ネットワークと広域ネットワークとの接点に置かれ、 外部から内部へのアクセスを代行する。通常のプロキシ(代理サーバー)の「内部から外部へ」と反対であることが「リバース」の由来。
http://www.dnp.co.jp/artscape/reference/archive_words/detail/rvrs-proxy.html
なるほど、通常のプロキシとは逆方向だよということか。
HTTP、TCP、UDP のロードバランシングが出来るらしい。
Layer 7 request routing using URI, cookie, args, and more
レイヤ7はOSI参照モデルのアプリケーション層ですね。URIやクッキーとかを使ってルーティングする機能がある。
Session persistence based on cookies *
クッキーでセッションを永続化する機能がある。
Active health checks on status code and response body *
ステータスとレスポンスボティのヘルスチェック機能がある。
Service discovery using DNS *
DNSを使ってサービス検出する機能がある。サービスディスカバリーってよく聞く言葉だな
ロードバランシングには5種類の方式が使えるらしい。
ラウンドロビン、最小接続数、ハッシュ、IPハッシュ(NGINX Plusのみ)、Least Time(NGINX Plusのみ)。NGINX Plusというのはnginxの商用版らしい。
なんとなく、調べたいので調べます。
enのwikipedia見てみましょう。
https://en.wikipedia.org/wiki/Nginx
The software was created by Igor Sysoev and first publicly released in 2004.
2004年に公式にリリースされたらしいです。
公式サイトを見て見ましょう。
https://nginx.org/en/
以下、引用。
nginx [engine x] is an HTTP and reverse proxy server,
a mail proxy server, and a generic TCP/UDP proxy server, originally written by Igor Sysoev.
For a long time, it has been running
on many heavily loaded Russian sites including Yandex, Mail.Ru, VK, and
Rambler. According to Netcraft, nginx served or proxied 23.76% busiest sites in March 2018.
Here are some of the success stories: Dropbox, Netflix, Wordpress.com, FastMail.FM.
なるほど。
ざっくり、web serverでwikipediaで見てみる。
https://en.wikipedia.org/wiki/Web_server
と、この情報にたどり着いた
https://w3techs.com/technologies/overview/web_server/all
October 2017
Below are the latest statistics of the market share of all sites of the top web servers on
the Internet by W3Techs Usage of
Web Servers for Websites.
Product Vendor Percent
Apache Apache 48.5%
nginx NGINX, Inc. 35.4%
IIS Microsoft 10.8%
LiteSpeed Web Server LiteSpeed Technologies 2.9%
GWS Google 1.1%
All other web servers are used byless than1% of the websites.
Apache強いな。。ざっくりApacheとnginxだけ気にしとけば良いか…(雑)
IISは出くわしたら気にするレベルで良いだろう。。。うん。。
ただ、この情報が統計的にどの程度有意なのかわからない。
ということで、Apacheも知っておきたいところ。
この記事がよくまとまっているように思う。勉強になった。
https://www.digitalocean.com/community/tutorials/apache-vs-nginx-practical-considerations
Apacheよりnginxの方が後発ということもあり優れている部分もあるが、一方でApacheの方が優れている部分もありそう。例えば、Apacheはモジュールの動的ロードが出来るが、nginxは出来ないのだそう。これは相性によってどちらを選ぶかということも考えたりとかがある気がする。
また、nginxをリバースプロキシにして、併用するパターンもよくあると。
さらっと読んだだけでは理解が足りないのでこの記事を何回か読み直したい。
先ほど書いたように、ざっくりは
ただ、機能もっと色々あった気がする。ので、調べると
https://www.nginx.com/products/nginx/#features
これが出てくる。
なんかこっちのサイトの方が今風だ。
などが書いてある。機能というかfeatureである。
ざっくり追いかけてみましたが、調べきれないので、おそらく続きます。
ベタープログラマは良い本である。
内容に共感出来て、その瞬間何故かニヤける感じ。
それと同時に、自分自身を省みて申し訳なくなる。ああ、すんません。
読んでいると、irofさんとかが喋りそうな内容だなと思う。
俗っぽい言葉で言うとエモいのだが、
プログラマとしてかくあるべきと言うのを思い出させてくれるというか、
“プログラマとしての正しさ”とか”プログラマとしての向き合い方”とかを改めて思い直させてくれるという感じ。
初心にかえるにはもってこいであるし、正しい方向へ向かえる本だと思う。もちろん知らなかった知識の発見や、新しい方法も読者によっては含まれていると思う。
この本はとことん、プロダクト、特にコードを中心にして物事を論じている。プログラマーたるものコードが中心だというのは全く正しい。
しかも、綺麗なコードを書く方法よりも、”今存在している問題をはらんだコードをどう解決するか”とか”いつリファクタリングをするか、どこまでリファクタリングすべきか”など「書き方」よりも「判断の仕方」が書いてあったりするのでよい。
全てを読んでいないし、飛び飛びで読んでいるのですがメモします。
6章航路を航行する
ソフトウェア考古学、いい言葉
7章汚物の中で転げ回る
大事
24章学びを愛して生きる
これが出来なくなったら辛いし、逆にこれが出来て入ればなんとかできる気がする
27章停滞を避ける
気をつけたい
28章倫理的なプログラマ
気をつけたい
29章言語への愛
わかる
30章プログラマの姿勢
そっちか
33章今度こそ分かった
ほんますんません
Javaでvarをとりあえず使って遊んで見ました。のザックリしたただのメモです。
Java 10がリリースされました!Java 9はほとんど触らなかった!
リリース日がちょうど祝日だったので少しだけ触りました。
一番遊んで見たくなるのが、
JEP286のvar のやつですよね。
これにより、ローカル変数でvarが使えるようになります。
JEP 286: Local-Variable Type Inference
うっかりキーボードを衝動買いしてしまったので、メモがてら所感をブログに書いてみます。
魔が差してHHKBとKinesisをポチってしまった
— yank shaving (@yy_yank) 2018年2月5日
今回の記事は、ただのニューストピックです。