スキップしてメイン コンテンツに移動

多分週刊チラシの裏 (Sep 21-27, 2020)

Killed by Mozilla

Mozilla がディスコンにした製品およびサービスのリスト。

COVID-19 パンデミックで収入が激減し全社の四分の一にあたる従業員の解雇と収益を得られる製品への集中に踏み切った Mozilla Corp. の最初の犠牲はノートアプリ Firefox Notes とファイル送信サービス Firefox Send となった。過去には第三のモバイル OS を目指した Firefox OS とか Mac ネイティブな Gecko ベースブラウザ Camino など懐かしい名前も見られる。

ちなみに元ネタは Google が終了したサービスをリストしている Killed by Google で、こちらは 2020 年 9 月 26 日現在 205 個の製品とサービスが挙がっている。

Firefox 81.0 リリースノート

Mozilla Firefox 81.0 が Release チャンネルに公開された。最大の新機能はメディア再生のキーボードないしヘッドセットからの制御である。要はバックグランドで再生している YouTube タブを AirPods から一時停止できるようになった。

Developer Tools における色覚異常シミュレーションの改善やブラウザ標準 audio/video 要素のアクセシビリティ改善なども含まれている。

Facebook が自社プラットフォーム上での複数国による組織的政治工作を認識しながら放置していた

Facebook が大量の偽アカウントを動員した政治工作を認識していながら、特に小国のそれに対して対策を放棄していたという内部告発。

元 Facebook のデータ科学者である Sophie Zhang 氏の告発によれば、ホンジュラスで大統領派の工作が行われていることを氏が報告してから実際に対策が為されるまでに 9 ヶ月、アゼルバイジャンでの与党の工作を同様に報告してから組織的な調査が始まるまでに実に 1 年を要したという。

本来この手の濫用に対応するはずの専任チームは濫用の圧倒的な割合を占めるスパム対応にかかりきりで、政治工作については対象が合衆国か西欧である場合を除いて積極的に行動せず、小国の民主主義は Zhang 氏の空き時間を利用した片手間の対応にかかっていたとのこと。

Rust じゃダメな理由

近年人気が出ているシステムプログラミング言語 Rust についての批評。

Rust が目標にしているシステムプログラミング領域において C / C++ などと比較した場合の安全性は評価しつつも、特に今日の C++ から見れば決定的な優位ではないこと、LLVM 依存による GCC 比での対応アーキテクチャの少なさ、ツール類の貧しさ、明文化されたメモリモデルがないことによる Unsafe ブロックの互換性への懸念、言語の複雑さや唯一の完全な処理系である rustc のコンパイル速度などが問題点に挙げられている。

何より、第一に挙げられているのは「すべてのプログラミングがシステムプログラミングではない」である。アプリケーションプログラミングで、性能要件に足るなら Go や Kotlin で良いのだ。

libc は UNIX API の一部なのか

アプリケーションと OS とのインタフェースは本来システムコールだが、実際のところ UNIX においてはそうではなく一段と高水準な C ランタイムとライブラリに拠っているため C 以外の言語が割を喰っているという指摘。

明示的にそう表明しているのは Solaris / Illumos など一部の UNIX のみだが、他の UNIX も同様とのこと。libc の一部のみを初期化して使用する文書化された方法は存在せず、結局 OS とのインタフェースとしてあらゆる言語が libc に依存している。

例外的に Go が libc に依存せず自前の標準ライブラリでシステムコールを発行しているのは割と有名だが、そのおかげで時々問題も発生している。Go の設計者 3 名の内 2 人 (Ken Thompson と Rob Pike) は C の設計者でもあることを考えるとこの実装判断は興味深い。

次世代 Xbox Series X と間違えて現行 Xbox One X を買っちゃった人が結構いる模様

Xbox Series X/S の予約が始まったのと同時に現行機種である Xbox One X の売上が急上昇し、Amazon.com では実に 747% の伸びを示したとのこと。

焦った消費者が名前の紛らわしさから誤って注文したものか、あるいはニュースに反応した (出来の悪い) ボットによる自動注文と推測されている。ちなみに名前に関しては Microsoft 自身も混乱している模様。

Windows XP / Windows Server 2003 のソースコードが流出

2001 年に発売されたコンシューマ向け OS の Windows XP とそのサーバ版である Windows Server 2003 のソースコードが公に流出した。

Microsoft のプロプライエタリなコードの流出はこれが初めてではないが、XP / Server 2003 に関してはこれが最初とのこと。

Windows XP 開発中に Aqua 風の UI テーマがあった模様

Windows XP の流出したソースコードからかつて Mac OS X (現在の macOS) に搭載されていた初期の Aqua 風テーマが発見されたという話。

Candy という名称が与えられたそのテーマは不完全だが、ボタンなどいくつかの UI 部品が丸みを帯びたポリカーボネートかガラスのような質感になっており、当時 (一応) リリースされていた Mac OS X の Aqua に類似した特徴を持っている。Windows XP の UI テーマエンジンを開発中にプレースホルダとして利用されていたようである。

WorldWide Telescope

American Astronomical Society による Web アプリケーション。 ちょうど Google Earth の天球版といった趣で、全天の天文写真と星座がインタラクティブに閲覧できる。

SQL Battleships

みんな大好きプラットフォーム濫用系アプリケーション。

PostgreSQL 上で動く Battleship (Hasbro が販売している古典的ボードゲーム。映画 Battleship の原案としても有名) である。実装言語は PL/pgSQL。親切なことに Dockerfile が提供されているのですぐにプレイできる。

コメント

このブログの人気の投稿

js_of_ocaml の使い方

js_of_ocaml (jsoo) は Ocsigen が提供しているコンパイラである。その名の通り OCaml バイトコードから JavaScript コードを生成する。 これを使うことで OCaml で書いたプログラムを Web ブラウザや node.js で実行することができる。 インストール 単に OPAM を使えば良い: $ opam install js_of_ocaml js_of_ocaml-ocamlbuild js_of_ocaml-ppx バージョン 3.0 から OPAM パッケージが分割されたので、必要なライブラリやプリプロセッサは個別にインストールする必要がある。 とりあえず使うだけなら js_of_ocaml と js_of_ocaml-ppx の二つで十分。後述するように OCamlBuild でアプリケーションをビルドするなら js_of_ocaml-ocamlbuild も入れると良い。 これで js_of_ocaml コマンドがインストールされ、OCamlFind に js_of_ocaml 及びサブパッケージが登録される。 コンパイルの仕方 以下ソースファイル名は app.ml とし、ワーキングディレクトリにあるものとする。 手動でやる場合 一番安直な方法は、直接 js_of_ocaml コマンドを実行することである: $ # バイトコードにコンパイルする。js_of_ocaml.ppx は JavaScript オブジェクトの作成や操作の構文糖衣を使う場合に必要 $ ocamlfind ocamlc -package js_of_ocaml,js_of_ocaml.ppx -linkpkg -o app.byte app.ml $ # 得られたバイトコードを JavaScript にコンパイルする $ js_of_ocaml -o app.js app.byte OCamlBuild を使う場合 OCamlBuild を使う場合、.js 用のビルドルールを定義したディスパッチャが付属しているので myocamlbuild.ml でこれを使う: let () = Ocamlbuild_plugin . dispatch Ocamlbuild_js_of_ocaml . dispatcher $ # app.ml -...

救急外来にかかったときの記録

子どもの頃にかかった記憶はあるが自分で行ったことはなかったのでメモしておく。 先日怪我をした。より具体的に云うとランニング中に転倒し顎を地面に叩きつけた。深夜の12時ごろの話である。 その時点ては両手の擦傷が痛いとか下顎の間接が痛いとか奥歯のセラミックが割れなくて幸いだったといった程度だが、マスクを外して見るとなにやら下部に血がついている。 顎にも擦傷があるのかとうんざりしながら歩いて帰り、血の滲んだマスクを捨てて傷口を洗おうとしたところで皮膚が割けて肉が見えているのに気付いた。 一瞬顔が青くなったが単身なので倒れるわけにはいかない。幸い血は固まっていてそれほど出血していないし、先程まで運動していたからかあまり痛みもない。 この時点で明白な選択肢は3つあった。即ち: 救急車を呼ぶ 自力で病院へ行き救急外来を受診する 応急処置して朝になったら近場の医院を受診する である。まず 3 は精神的に無理だと悟った。血も完全には止まっていないし、痛みだしたら冷静に行動できなくなるだろう。 1 はいつでも可能だったが、意識明瞭で移動にも支障がない状態では憚られた。救急車が受け入れ先病院を探すのにも時間がかかると聞く。 結局とりあえず 1 をバックアップ案とし、2 の自分で連絡して病院へ向かうことにした。まずは病院探しである。このときだいたい 00:30 AM。 最初に連絡したのは最寄りの都立病院の ER だった。ここならタクシーで10分もかからない、のだが、なんと ER が現在休止しているとの回答だった。そんなことがあるのかと驚愕したがどうしようもない。 近場に形成外科の救急外来の開いている病院はないか尋ねたところ 消防庁の相談センター の電話番号を案内された。 ここで4つの病院を紹介された。余談だが相談の対応は人間だが番号の案内は自動音声に切り替わるので録音の用意をした方が良い (一応2回くり返してくれる。) いずれも若干遠くタクシーで2、30分かかるが仕方がない。最初に連絡した最寄りの病院はその日形成外科の当直医師がいなかった。二件目でトリアージの質問をされ、受け入れ可能とのことだったので受診先が決定。このとき 00:45 AM。 診察時に脱ぎ易い服に着替え (このときまでランニングウェアだった)、健康保険証を持って病院へ向かう。ガーゼがないのでマス...

Project Euler - Problem 35

問題 原文 How many circular primes are there below one million? 日本語訳 100万未満の巡回素数は何個か? 解答 回転させた数値がすべて素数ということは、すべての桁が奇数でなければいけません(ただし2を除く)。 追記 匿名氏にコメントでご指摘頂いたのでコードを一部修正しました。 いずれかの桁に5がある場合も、回転させると必ず5の倍数が現れるので除外できます。 もっと追記 前の修正に間違いが入っているのをご指摘頂いたので修正しました。 5自体は素数なので、巻き添えで除外してはいけません。 #!/usr/bin/env perl use strict; use warnings; use feature qw/say state/; use List::MoreUtils qw/all none/; sub is_prime($) { state %memos; my $n = shift; return 0 if $n < 2; return 1 if $n == 2; return 1 if $n == 3; return $memos{$n} if exists $memos{$n}; $memos{$n} = none { $n % $_ == 0 } 2 .. sqrt $n; } sub rotate($) { my $n = shift; substr($n, 1) . substr($n, 0, 1); } sub rotations($) { my $n = shift; my %seen = ($n => 1); $seen{$n} = 1 until exists $seen{$n = rotate $n}; keys %seen; } sub is_circular_prime($) { state %memos; my $n = shift; return 0 if $n =~ /[024568]/ and $n != 2 and $n != 5; return $memos{$n} if exists $memos{$n}; my ...

Project Euler - Problem 27

問題 しばらく止まってましたが今日から再開。 原文 Considering quadratics of the form: n 2 + an + b, where |a| < 1000 and |b| < 1000 Find the product of the coefficients, a and b, for the quadratic expression that produces the maximum number of primes for consecutive values of n, starting with n = 0. 日本語訳 |a| < 1000, |b| < 1000 として以下の二次式を考える (ここで|a|は絶対値): n 2 + an + b n=0から始めて連続する整数で素数を生成したときに最長の長さとなる上の二次式の, 係数a, bの積を答えよ. 解答 最大探索範囲は-999 <= a <= 999、-999 <= b <= 999なので、およそ4,000,000通りの係数の組合せを試すことになります。組合せ毎に数列を生成して、それが素数か判定するわけですからたまりません。簡単な検討を加えて範囲を絞りましょう。 与えられた二次式をf(n)とおくと、f(0) = b、f(1) = a + b + 1です。 f(n)が長さ2以上の素数列を生成するならこれらは素数ですから、次のことがいえます: bは素数である a + b + 1は素数である b = 2のとき、aは偶数である それ以外のとき、aは奇数である 素数判定関数 is_prime には同じ引数が与えられることがよくあるのでメモ化しています。 #!/usr/bin/perl use strict; use warnings; use feature qw/say/; sub prime_seq_len($$) { my ($coeff_a, $coeff_b) = @_; my $len = 0; my $n = 0; $len++, $n++ while is_prime($n * ($n + $coeff_a) ...

Perl の新 class 構文を使ってみる

Perl 5 のオブジェクト指向機能は基本的には Python の影響を受けたものだが、データを名前空間 (package) に bless する機構だけで Perl 4 以来の名前空間とサブルーチンをそのままクラスとメソッドに転換し第一級のオブジェクト指向システムとした言語設計は驚嘆に価する。 実際この言語のオブジェクトシステムは動的型付言語のオブジェクト指向プログラミングに要求されるおよそあらゆる機能を暗にサポートしており、CPAN には Moose を筆頭とした屋下屋オブジェクトシステムが複数存在しているがその多くは Pure Perl ライブラリである。つまり「やろうと思えば全部手書きで実現できる」わけである。 そういうわけで Perl のオブジェクト指向プログラミングサポートは機能面では (静的型検査の不在という現代的には極めて重大な欠如を除けば) 申し分ないのだが、しかし Moose その他の存在が示しているように一つ明らかな欠点がある。記述の冗長さだ。 コンストラクタを含むあらゆるメソッドは第一引数としてレシーバを受ける単なるサブルーチンとして明示的に書く必要があるし、オブジェクトのインスタンス変数 (a.k.a. プロパティ / データメンバ) は bless されたデータに直接的ないし間接的に プログラマ定義の方法 で格納されるためアクセス手段は実装依存である。これはカプセル化の観点からは望ましい性質だが、他者の書いたクラスを継承するときに問題となる。ある日データ表現を変更した親クラスがリリースされると突然自分の書いた子クラスが実行時エラーを起こすようになるわけだ。 そうならないためにはインスタンス変数へのアクセスに (protected な) アクセサを使う必要があるのだが、そのためには親クラスが明示的にそれらを提供している必要があるし、そもそも Perl にはメソッドのアクセス修飾子というものがないので完全な制御を与えるならばオブジェクトの内部状態がすべて public になってしまう。 そのような事情もあり、特にパフォーマンスが問題にならないようなアプリケーションコードでは Moose のようなリッチな語彙を提供するオブジェクトシステムを使うことが 公式のチュートリアルでも推奨 されてきた。Perl コアのオブジェクトシステムの改良は...