JavaScriptで、とりあえずランダムな文字列を作る

また小ネタです。

JavaScriptで、別に暗号学的とかは考慮しない、一応ランダムな文字列を生成したい場合があります。

手軽な方法の1つは、Math.random()を文字列にすることですが、一応整数にしておきましょう。桁数も決め打ちというよりはシステム制約に則ることにします。

JavaScriptで使える安全な整数範囲は、Number.MAX_SAFE_INTEGERです。

developer.mozilla.org

なので、その桁数の長さの文字列にすれば常に同じ長さの文字列が得られます。

function getRandomNumberString() {
  const digitMax = Math.ceil(Math.log10(Number.MAX_SAFE_INTEGER))
  const number = Math.floor(Math.random()*Number.MAX_SAFE_INTEGER)
  return ('0'.repeat(dMax-1) + String(number)).slice(-dMax)
}

ただの整数なので、利用者に見せない、単にシステム上区別がつけばいい程度の話に限定されますが、参考まで。

今日の日付をISO形式で取得する

小ネタです。

JavaScriptで、「今日の日付」をISO8601形式(YYYY-MM-DD)で取得する方法はいくつかありますが、toISOString()を使う場合、UTCになる都合上、タイムゾーンによる補正が必要です。

(new Date(Date.now() - (new Date()).getTimezoneOffset()*60000)).toISOString().substring(0,10)
// Dateの数を減らしたい人向け
const n = new Date()
new Date(n - n.getTimezoneOffset()*60000).toISOString().substring(0,10)

わざわざISO8601形式で日付を出すのは、input type="date"の値(valueminmax)として「今日」を使うためです。input要素で使うのだから、JavaScriptでもメソッド一発で出せるといいのですが。

Googleのメッセージングサービスを整理する

先日、Googleはメッセージング/コミュニケーション関連の統一責任者を設定しました。

www.theverge.com

また、「Hangout Meet」を「Google Meet」に改名したのも最近のことです。Google MeetはGSuite利用者向け(つまり有料)ですが、現在は無料のGmailユーザにも開放されつつあります。

gigazine.net

そもそも、Googleの関連サービスは名前が似ていたり機能が被っていたりと混乱を積極的に誘ってきます。そこで、とりあえず整理してみました。

続きを読む

DebianやUbuntuでwxWidgets+CodeLiteの開発環境を作る

クロスプラットフォームの開発環境として昔からあるものの1つが、wxWidgetです。最新の3.1.3は2019年10月リリースで、ちゃんと開発は継続しています。

DebianUbuntuの上で開発環境を作る方法を調べたのですが、古いものが多く、また前提条件も不明瞭で、やってみると苦戦します。なんとか、IDE(CodeLite)を含めて実行までたどり着けたので、メモしておきます。

続きを読む

ActivityのonStopは必ず実行されるから安心していい

androidのActivity(やFragment)を使う上で、ライフサイクルが重要なことはしばしばいわれます。

しかし、よく分からないこともありました。

「onStopが呼ばれないままActivityがDestroyedに至るのは、どういう状況か」

多くのブログなどは、単にandroid公式の図だけコピーして「onStopとonDestroyは実行されない場合があります」と書くだけですが、手元で動かすと、onStopは実行されるんですよね(一方、onDestroyは、backボタンでアプリを消す以外の方法だと、だいたい呼ばれてないような)。で、onStopが呼ばれないケースって何だろうと思ってましたが、色々見ていたら公式に書いてありました。

developer.android.com

Starting with Honeycomb, an application is not in the killable state until its onStop() has returned.

Honeycombですよ奥さん!バージョン3.x、2011年デビューのあのHoneycombですよ!Honeycomb、Google Playの「プラットフォームのバージョン」には掲載さえされてないんですよ!

というわけで、Honeycomb以降はonStopが呼ばれるまではkillableにならない以上、現実的にはonStopは必ず実行されると考えていいと思います。いい加減、ライフサイクルの図も改訂してほしいなあ。

WHOの病名指針(2015年版)を試訳してみた

世の中は新型コロナウイルス一色ですね。

ところで、同ウイルスによる症状について、地名をつけて呼ぶべきという人たちがいるようです。

www.fnn.jp

新型コロナウイルスへの感染が引き起こす肺炎などの病気の名称について、「WHOが決めた『COVID-19』は覚えにくいし、病気の本質が理解しづらい。『武漢熱』と呼ぶべきだ」と訴えた。

地名をつけると本質が分かるという発想は、個人的には全く理解できません。

さて、この記事でも言及されていますが、世界保健機関(WHO)が病名の指針を2015年に作っています(つまり、比較的最近ではあるものの、今回のCOVID-19とは無関係です)。しかし、私が検索した範囲では、この指針の日本語版がありません。

原文(英語版)はこちら。

http://apps.who.int/iris/bitstream/10665/163636/1/WHO_HSE_FOS_15.1_eng.pdf

なので、あえて試訳をここに示します。もしWHOや国連から問題とされたら消します。また、国連なり厚労省が公式の日本語訳を出したら、この記事はそのリンクに書き換えます。

訳についての注意

  • 医療や公衆衛生の素人による試訳です。公式訳がないため、やむなく作成しているものです。なるだけ正確に訳するよう努めましたが、確実な情報が必要な場合は原文を参照してください。
  • 文の区切りは原則として原文にあわせていますが、読みやすさを考慮し、大きな区切りのカンマなどは文として分割した箇所があります。
  • 丸カッコ内は、理解しやすさを考慮して翻訳時に加えた文言です。
  • 角カッコで英小文字を囲んだ部分([a]、[b]……)は訳注で、末尾に内容を記載しました。はてなブログの仕様上、脚注は1系統しかないため、脚注は原注に用いました。

以下が試訳となります。

続きを読む

Chromium版のEdge、実のところどうなのか

Chromium版のEdgeを入れて、いくつか気になる点を見てみました。

続きを読む