投稿

KotlinはどれほどC#を意識しているか?

イメージ
今週のC#記事はKotlinがどれほどC#を意識しているかにします。(Bloggerを開く前まではReactivePropertySlimがどれだけ軽くなったのか調べて書こうかなと思ってたのですが新鮮なネタのほうから書くことにします)

新鮮なネタと言ってますが、あくまで自分の中でです。
なぜ新鮮かというとこちらのKotlin公式サイト(https://kotlinlang.org/)と言うんでしょうか?オフィシャルなサイトの右上のサイト内検索で"C#"を検索するとちゃんとC#の単語出現場所を検索してくれることに気づいてしまったからです。

C#erならわかるかと思いますが、C#って検索システムによってはちゃんと検索してくれないんですよね…"C"で検索した扱いになったりとか。Google大先生はもちろんちゃんとC#で検索できるんですが、内部で特殊扱いしているのか、Q#やP#だと"Q"や"P"の検索結果が目立ちます。

はい、本題に戻りまして、kotlinlang.orgでのC#検索結果がこちらになります。

出現個所をまとめると

ExtensionsAndroid Frameworks Using Annotation ProcessingFAQGenericsControl Flow: if, when, for, whileCoroutinesFunctions ですね。
詳細ExtensionsKotlin, similar to C# and Gosu, provides the ability to extend a class with new functionality without having to inherit from the class or use any type of design pattern such as Decorator. This is done via special declarations called extensions. Kotlin supports extension functions and extension properties.https://kotlinlang.org/docs/reference/extensions…

睡眠時間管理アプリ「Sleep as Android」

つい1か月ほど前、食生活や睡眠時間などの体調管理をちゃんとしないとな~ということで何個かアプリを入れてみたのですが、その中で唯一まともに継続ができてる睡眠時間管理アプリを紹介しておきます。

Sleep as Android

睡眠の深さを測ってくれる(ちゃんと測ってるかはわかりませんがw)アプリで目覚ましを設定したらその時刻から30分前(時間は設定できます)の間でちょうどよい時間に目覚まししてくれるという品物。
自分は普段8時に起きなければいけなくてその時間に設定してますが、7時30分から目覚ましの圏内になります。もっぱら眠くてスヌーズにしますが(笑)。それでもスヌーズオプションには設定時刻に鳴るオプションもあるのでそのまま2度寝にGOします。
それ以外にも睡眠時間を記録してくれる機能があったり、目覚ましを設定せずとも睡眠の計測をさせることもできるので、寝れるだけ寝たいというユースケースにも対応してます。


無料使用期間が2週間(だったかな)あるので、試しに使ってみてはどうですかね。ちなみに、課金は一度きりで400円程度なので気に入ったらお金を出してみるのもいいかもしれませんよ。

Xperia XZs SOV35をAndroid 8.0にアップデートしてみた

イメージ
はい、タイトルの通りですが02/9の夕方ごろ8.0へのアップデートが降ってきたので、メイン機であるXperia XZsの人柱アップデートをしました。後悔はありません(今のところ) アップデート中は昼寝していたのでどれほど時間がかかったのかはわかりませんが電池の減りは20%ぐらいでした。


PiPを試そうとアレコレやってみたのですがどうもYouTubeはYouTube Redに入ってないとダメみたいです。
いちおうGoogle Play Musicの定額には入ってるんですけどね…日本でもYouTube Red始まらないといくらVPNでアメリカ装ってYouTube Red使おうにもGoogle Play Musicの定額連携はされないみたいです。 いちおうPiPはGoogle Mapの経路案内を開始で試しましたが、経路案内なんか今までしたことなく……使うこともなさそうでした。ChromeとかでもPiPできそうでしたがYouTube Webのほうを開いて動画流しても上手くできず…どのサイトが対応してるかはわかりませんでした。
設定画面からPiP対応のアプリを見ることはできますが、これ、信用できないですねぇ~~~

[C#]async/awaitの挙動をTask-Likeとawaitableパターンで変えてみる

卒論でそういうことをやったので書いておきます。(卒論で作ったプログラム)

まずはasync/awaitの基礎部分から(全部説明するとは言っていない)
public static async Task Sample() { int simpleResult = await Simple(); int distributedResult = await Distributed(); } asyncメソッドはこんな感じ(結構おおざっぱ)ですけども、awaitキーワード(演算子?)の後ろ部分で何らかの処理(スレッドは問わない)を行い、そのawaitキーワードによってasyncメソッドの実行スレッドに返ってくる(正確には同期コンテキストがどのスレッドに戻るか決める)のですが、このawaitキーワードの後ろの部分はawaitableパターンならなんでもいいという話。
また、asyncメソッドの戻り値がTask型になっていますが、ここも(C# 7.0から)Task-Likeであればなんでもいいという話。

というわけで、Task-Likeとawaitableパターンを使えばasync/awaitの挙動を変えれるのですが、公式的にこれを利用しているのがValueTaskです。防御的プログラミングとかで早期リターンした場合などにわざわざTaskを起動させるまでもない場合に即時返却するのがValueTaskです。

Task-Like まずTask-Likeのほうから。
Task-Likeするにはasyncメソッドの戻り値となるTask'型とそのTask`型がasyncメソッドの展開後どのような動きをするか組み立てるAsyncTaskMethodBuilder`型が必要です。(`は名前が被るので自作する方の型という意味です)

また、現時点でほとんどのプラットフォームではAsyncMethodBuilderAttribute属性も自分で定義する必要があります。
namespace System.Runtime.CompilerServices { public sealed class AsyncMethodBuilderAttribute : Attribute { public AsyncMethodBuilderAttribute(…

[アズールレーン]金ブリ汚染

イメージ
アズールレーンを連合縛りで日本艦ボコボコにしてる変わったプレイングをしていますが、ユニオン・ロイヤルのSSRしか育ててなかったので金ブリでドックが圧迫されてます(涙)


ちなみに連合艦SSRはこんな感じ
サンディエゴに限っては2隻目の育成始めてます()

先々週ぐらいには次のイベントはユニオンかな~と大陸版の情報見ながら思ってましたが、なんかコラボイベ着ましたよね。(連合縛りだけどコラボ艦は使わせてくださいなんでもしますから)
もちろんコラボSSRはすべて集める気ですが、前半ピックアップ90連ぐらいで揃ったんですよねぇ。。。(確立に負けた顔)

[Kotlin]ジェネリクスのオーバーロードの衝突をJvmNameで回避する

イメージ
最近UIが変わって初期画面がトレンドになってしまい見る機会が減ってしまったQiitaを昨日久々に見にいったらこんな昔の記事にコメントしてくれてる親切な方がおりまして、それによると@JvmNameをつければジェネリクスのオーバーロードの衝突をKotlinコード上では回避できると。

とりあえず物は試しでTry Kotlinで動かしてみました。

まずはオーバーロードが衝突するほう
もちろんコンパイルエラーです。

そのつぎにJvmNameを付けたほう
はい。動きました。

たしかに、Java側で名前さえ違えばKotlinで見た目上は同じメソッド名使えますよね。なんで昔気づかなかったのだろうか。まぁこの方法Kotlinでコード書いてKotlinで使う場合にしかできませんが。

こんど何かライブラリ書くときはこれ使ってみようかなw

コメントくれた方ほんとにありがとうございました。

Bloggerのコードハイライトにhighlight.jsを使ってみる

前回の投稿でBloggerでのコードハイライトをどうしようかと書きましたが、やっぱりhighlight.jsが手っ取り早くて簡単かなと。。。

ちょうどCDNで提供してるところがあったので使わせてもらうことにします。

当分の間はこんな感じで

<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/cs.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/java.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/kotlin.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/xml.min.js"></script> <link href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/vs.min.css" rel="stylesheet"></link> <script>hljs.initHighlightingOnLoad();</script>

C#のハイライトはこんな感じかと
class Program{ static v…