HTTPからHTTPSにクエリパラメータも含めて転送

超がつくほど今更ですが、HTTPS対応した後で、従来のHTTPへのアクセスをHTTPSに転送したい場合は多いと思います。

そして、もしCGIなどの理由でクエリパラメータを使っていた場合、クエリパラメータも含めて転送したいのではないでしょうか。

http://example.jp/myapp/app.cgi?s=12
↓
https://example.jp/myapp/app.cgi?s=12

意外なことに、こういった「クエリパラメータもそのまま転送」が出てきません。なので、調べました。

続きを読む

古いUMPCをNextcloudサーバにしてみた

うちには古いUMPCの1つ、ONKYO BX407A4があります。

www.jp.onkyo.com

  • CPU:Atom Z515
  • メモリ:512MB
  • ストレージ:SSD 32GB
  • スクリーン:4.8型、1024x600ピクセル

Windows XPなら動くという代物です。

ずっと放置状態だったんですが、ふと、家庭内Nextcloudサーバにしてみては、と思いついて、やってみました。

続きを読む

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は必ず実行されると考えていいと思います。いい加減、ライフサイクルの図も改訂してほしいなあ。