giantneco’s blog

技術メモ

AtCoder Beginner Contest 133

Contest Result - AtCoder

A から D まで解いた。

ちょっとケアレスミス多かったが、次回うまく行けば緑色まではいけそうかも。

良かった点

  • A-D までは継続して解けている

反省点:

  • まだ時間があったが E、F を諦めてしまった

ちょっとやることがあったので切り上げたのもあるが、 解き方の見当が全然つかない。

上のランクに行くためには E 以降が解けるようにならないとダメそうなので、 もうちょっと過去問を当たるかなにかして対策しておきたい。

ScalaMatsuri 2019 に参加してきたメモ

ScalaMatsuri2019 に参加してきた。

2019.scalamatsuri.org

f:id:dexil:20190630234919j:plain
ScalaMatsuri オープニング

f:id:dexil:20190630234926j:plain
もらったノベルティ

ワークショップ合わせて3日間あるが、自分は2日目のカンファレンスデーと3日目アンカンファレンスデーを見てきた。

自分は今回で 3 回目の参加。 正直最近の仕事では全然 Scala は使っていないが、 Scala 使いに限らず関数型言語好きなら参加して十分意味があったのではないかと思う。 それに日本の関数型言語界隈では一番大きい集まりなのでは?

今回は型クラス関連や、Graal の話を中心に聞いてきた。逆に DDD とか実務の話はあまり行かなかった。

あとは結構海外から聴講に来ている人もいるようで、アメリカの他台湾や韓国から来ている人も居たようだ。

参加してきたセッション

参加してきたセッションで特に記憶に残ったやつ。

再帰:スキーム,代数,finally tagless,データ型. 統合されたビジョン

簡単な型から初めて tagless final の形になるまでを段々と説明していく話。

途中までしかついていけて無いので、資料があったら見直したいがどうもなさそう… Free モナドも忘れかけてたしココらへんは勉強せんとなあ。

Scala ♥ Graal by Flavio Brasil (@flaviowbrasil)

Twitter 社での GraalVM の使われ方の話。

Twitter 社が GraalVM を使っているのは最適がが行いやすいかららしく、実際にどのような最適化をしているかが紹介された。

結構大胆な最適化をしているようで、CAS の仮想化とか、インターフェースのメソッドと実際に呼び出されるメソッドのオフセットを記録して直接そこに jump させるということもやっているらしい。

Run Scala Faster with GraalVM on any Platform by Amitpal Singh

こちらも GraalVM の話で、GraalVM の説明から native-image を使ったシングルバイナリイメージの作成の話なども。

Graal コンパイラはかなり頑張っているようで、Stream Processing を for ループに展開したりするなど色々な最適化をしており 場合によっては普通のJavaコンパイラに対して2倍以上のパフォーマンスを出せるそうだ。

Go が流行っているのは、シングルバイナリにできるのが現在のコンテナ全盛時代の時流にのっているのもあると思うので、 Scala でもそれができれば kubenetes と合わせてもっと使われるようになったりするのかも知れない。 (だとすると kubenetes 関連のセッションも見とけばよかったなあ)

あと Android 向けにもコンパイルできるようになるらしいので また ScalaAndroid やってみるという人も出てきそう。

Graal Compiler だとランタイムもうまいことバイナリイメージに収めてくれるらしく、 問題になっていたサイズの問題も解決されるのかも知れない。

Making Logic Monad by halcat0x15a

www.slideshare.net

https://github.com/halcat0x15a/logical

ScalaProlog やろうぜという話。

実用性はないかも知れないが、モナドをとかを組み合わせてこういうことが実現できるというのはすごい。

Fast & Functional by Michał Płachta (@miciek)

speakerdeck.com

Scala を使ってスクラッチでサービスを作る話。 モナドを使う実例にもなっているので、モナドの使いみちをs爪いするときの参考にできそう。

パフォーマンスチューニングを取り上げているのも良い。

From Go To Scala Easy vs Simple (ディスカッション)

https://togetter.com/li/1371467

ちょっと Kotlin に厳しすぎない?

その他

以下は公開されている ScalaMatsuri の発表資料 公式でもリンクはあるが、これから見直すつもりの個人用メモ。

Scalaライブラリを作る前に知っておきたいメンテナンスのこと - Speaker Deck

Using Akka Cluster for a payment service - Speaker Deck

Understanding the vulnerabilities of Play through its code base - Speaker Deck

Clean Architecture in Practice @ScalaMatsuri2019 - Speaker Deck

Making Logic Monad

CPS or DI

ScalaTaiwan/2018-03-07-Programming_with_Algebraic_Data_Types at master · ScalaTaiwan/ScalaTaiwan · GitHub

悩める開発者に贈る〜 サービスの継続的な成長を支える分析設計手法

Gentle Introduction to DOT calculus

Functional Concurrency in Scala 101 (ScalaMatsuri 2019)

Case of Ad Delivery System is Implemented by Scala and DDD - Speaker Deck

Scala Driven Management - Speaker Deck

High Performance Scala/high_performance_scala - Speaker Deck

How to build an Event-Sourcing system using Akka with EKS - Speaker Deck

Write stack safe non-tailrec recursive functions - Speaker Deck

こんなに違う!ScalaとKotlin - Speaker Deck

WiFi x Scala: Implementing Captive Portal in Scala and deploy into #ScalaMatsuri - Speaker Deck

The advantage of using ’Eff’ in Scala Project - Speaker Deck

ピュアなドメインを支える技術/pure domain model and the technology behind it - Speaker Deck

Intro to typeclass in Scala - Speaker Deck

How we replaced a 10-year-old Perl product using Scala - Speaker Deck

Running Scala on AWS Lambda in a Snappy Way - Speaker Deck

ScalaのOSSに貢献しよう ~ Phil Bagwell Award記念講演

How To Use Scala At Work - Airframe In Action at Arm Treasure Data

Fast & Functional (Scala Matsuri, JP) - Speaker Deck

また資料ではないが発表に使われたソースコード

https://github.com/weihsiu/bengal

https://github.com/miciek/influencer-stats

https://github.com/halcat0x15a/logical

あとはジョブボードのもちょっと見返さないとな…

Google I/O 2019 参加報告会

slides.com

6 月に社内で行った参加報告会の資料。

広く浅くのつもりだったがやっぱりまとまりのない感じになってしまった。

テーマは1つに絞ったほうがいいんだろうが、それだと Google I/O に行ってきた感じにならないのでどうもね。

AtCoder Beginner Contest 128

Contest Result - AtCoder

2100 点中 600 点獲得。

6 問中の 3 問まで完了。

良かった点

  • 今回は WA なし

反省点:

C でほとんど時間を使ってしまった

最終的に総当りで解答できたが、時間内に解けそうかどうか確信が持てず手を付けるまで時間がかかってしまった。 あと問題文自体の理解がちょっと遅かったかも。

1000 回程度のループなら総当りでも大丈夫そう?

あとランク上昇がニーポイントに達したので、やっぱり D 問題を安定して解けるようにしておきたい。

Google I/O 2019 参加してきたメモ

Google の素晴らしいイベントである Google I/O 2019 に参加してきた。 参加したセッションそれぞれは別に書くとして、この記事はイベントの全体的な感想について。

機械学習

サンドボックスで展示されていた TPU ポッドの実物。

目立ったトピックとしては

  • MLKit
  • AutoML
  • TensorFlow Lite
  • TensorFlow 2.0 alpha

あたり。今年は機械学習関連のセッションが多かったと思う。

キーノートでも触れられていたが「AI Is Everywhere」ということで、モバイル・IoT 向けの TensorFlow のセッションが多かった。

TensorFlow だけでなく、MLKitや TensorFlow Lite のようにモバイルでの利用を考えるもの、 IoT 向けのものなど、モデルを作るよりもモデルをどう使うかという話が多かったと思う。

IoT 関連の話だと Coral が紹介されていて、セッション中で紹介されたデモではマイコンで画像認識をしていた。 あと mbed コミュニティを支援していくらしい。mbed が出てきたはちょっと意外

Google のプラットフォームでは誰でも楽に機械学習ができるようになるので、巨人の背に乗っているのか巨人に踏み潰されているのかわからない状況だ。 使うのは簡単になる反面、Google レベルの ML サービスを自前で用意使用となるとかなり厳しくなるか。

ML を使う場合の Material Designガイドラインも発表されてたし、 ML を使ったサービスがもう当たり前になってくるようになるのかも。

Android

Android の主だったトピックとしては:

Jetpack など Android に関する大きな発表のあった 2018 年に比べるとセッション数はだいぶ少なくなった。 とはいえそこそこの数のセッションがあったし、変更は色々ある。

またセッションで使われていたコードはほぼ Kotlin で Java のコードはほとんどみなかった。 Kotlin がほぼ前提になっているので、Kotlin に関するセッションは却って少なかったかも。 デベロッパーキーノートでも言及されていたが Kotlin ファーストが継続されている感じ。

あとすごいどうでもいいが「Q」に引っ掛けたジョークが度々あった。than"k you" とか。

セキュリティ・プライバシー

Android Q では Role や Shared Stroage の変更などあり、セキュリティ・プライバシ関連の変更がそこそこあった。

他にも

ところでキーノートの際にはこういう抗議活動が行われていたらしい。

Google I/Oの会場上空に飛行機による抗議のバナー広告が出現 | TechCrunch Japan

キーノートに集中していたので全然気が付かなかった。なんか飛行機とかうるさいなと思ったのでそれだったのかもしれない。

Kotlin

Kotlin ファーストということで、セッション中で紹介されていたコードはほぼ Kotlin だった。 Kotlin 前提なものが増えたおかげか、Kotlin の名前を冠したセッションはかえって少なくなってたかも。

Flutter

Flutter 関連の発表ではあまり大々的な発表はなかったが、Web 対応があったのは大きいか。 また Dart 自体についても Nullable 型対応・拡張関数など言語の拡張がこれからはいるとのこと。

ハードウェア

今年はハードウェアの発表は事前にリークされてたものが中心で、それほど物自体に驚きはなかった。 発表されたのは Pixel 3a と Google Nest。驚いたのは日本でも購入ということで、日本人タイムラインは結構反応していた。

Chromebook の発表もいつくかあった。特に押されていたのが Linux 対応で、これはIntel の Day 0 パーティでも紹介されており Chromebook 推しが結構強かった。 Linux も使えるとなると、やっぱり 1 台もっておきたい。

あと今年はハードウェアのお土産はなかったっぽい。お土産的な意味ではハズレの年だったのかも

AR

会場では AR の存在感がかなりあった。 キーノートでも大きくアピールされていたし、 Google I/O アプリでも ARCore をつかった案内とかもあった。 (これは自分は体験できていない。持っていった端末が対応していなかった。)

あと Google アップでの AR 表示によるガイドもこの日から一部の人に解放されたらしい。 ローカルガイドのレベル 6 も対象に入っているようで、自分も有資格者だったらしい。 残念ながら手持ちのスマホが対応していないので実際の動作は未確認。

サンドボックスでの AR 展示もおもしろかった。 一部キーノートで発表されてた検索結果の AR 表示も体験できたので満足度高い。

Sandbox

今年の Sandbox は 8 つ。

デモの中では日本の田舎での導入事例があったのが印象的だった。 田舎の自治体でお年寄り同士のスケジュールなどに Google Assistant を利用していた。 確かにコンピュータに弱い人には音声認識がありがたいかもしれない。

CodeLab

例年通りかなり盛況していた。

今年は 4 つコースを完了すれば来年の invitation code がもらえるようになった。 昨年は 3 つだったので少し増えたことになる。

自分は 2 日目の昼頃に少し列が少なくなったのを見計らって参加。 TensorFlow のコースを中心にチャレンジしてみた。 やっぱり周りに Googler の人がいると質問しやすいので心強い。

参加まで

2 月末の抽選では落選したので、今年の Google I/O 参加はないものと思っていたが、 Google I/O 2018 の Codelabs で手に入れた invitation code が使える通知が 4/19 に来た。

invitation code を受け取ってから開催までかなり時間がないので、準備がいろいろときつい部分はある。 次回の invitation code は誰かに譲ってしまっていいかも

Google I/O の経費としては

の大体合計 300,000 円。 実際には Intel の Day 0 パーティーにも参加してきたので、その分の Uber 代もかかっている。

直前なので航空券代が高いは仕方ないとして、ホテル代がやっぱり高い。 毎度同じホテルに泊まっているが年々料金が上がり続けている。 安く泊まるならおそらくサンフランシスコで、ホステルなどが利用できるとかなり安くなりそうではある。もしかしたら AirBnb もいいかも。 ただしサンフランシスコ泊の場合は Google I/O 会場から離れているため(シャトルバスで 1 時間 15 分程度)朝早くのセッションを観るのは苦労するかもしれない。

飛行機もサンフランシスコ空港を使ったほうが、直行便があるので楽になる。 ただやはりサンノゼ空港の方が会場には近い。どちらを選ぶかは予算とスケジュール次第か。

その他

I/O ストア。今年も結構散財した。

今回も食事はよかった。

前回も思った事だが体一つでは全然みたいものをカバーできない。

Android テーマに限ったとしても、同じ時間に行われるセッションがあったりするので、まずみたいもの全てをカバーすることはできない。 Google I/O 参加してもしなくても、日本で行われる参加報告会には参加するのは悪くないと思う。

後はこの期間だけ Youtubeプレミアム契約しておいて帰りの飛行機内でセッションを見て復習するようにしておくといいかもしれない。

AtCoder Beginner Contest 125

Contest Result - AtCoder

1000 点中 1000 点獲得。

問題 C で WA が多かったのは、1 文字違いのバグに気づくのが遅れたので。

良かった点

  • とりあえず目標だった A-D 通して解くのができた

反省点:

  • ケアレスミスが多かった
    • -1 とするところが -i になってた
    • 解けたつもりでサンプル入力が解けてないのに気付いてなかった
      • 解法は間違ってなかったが単純な処理が抜けていた

今回は問題が簡単だったのにも助けられた感じだった。 当面は安定して 4 問解けるようするのが目標か。 またケアレスミスの解消も課題としておきたい。

ところで今回のでもあまりランクは上がらなかったがそういうものなんだろうか? 「暫定」と表示されているが結構数をこなさないと、この表示は取れないものなのかもしれない。

レギュラーへの参加はもうちょっとランクがあがってからにするかな。

Tenka1 Programmer Beginner Contest 2019

1200 点中 400 点獲得。C と D の問題が解けず。

C は簡単かと思い込んでいたが、なかなか通らず。 D を諦めて C を考え直してみるも、自分の間違いに気付いたのは時間切れ近くだった。

うまく処理できてなかったのは次のパターン。

14
...#..###.####

こうするパターンか、

...###########

こうするパターンか、

..........####

いずれかだと思っていたが、考えてみるうちに

......########

となるパターンもあるのに気付いたが、実装は間に合わなかった。

コードがパスしなかったときに、コードが正しくないかばかりを気にしがちだが、 そもそも考え違いに気づかないとつらい。ココらへんのことは覚えておきたい。

D は少し見てみたが、解法の見当もさっぱりつかない。解説待ち。