卒研メモ:JavaScriptで多倍長計算

 前から興味があったので,JavaScriptでの多倍長計算をまじめに考えてみました。数値計算用のライブラリとしては既にmath.jsってのがあって,ここではDecimal.js(10進多倍長演算)を使ってのBigNumberオブジェクトが使えるようです。で,これより速い多倍長計算ができないかな?ということです。

 定番としては,既存FP数を組み合わせて多倍長化するMulti-digits(Muti-term)方式で実装すれば,そこそこ早くできるだろうという予測は容易いのですが,データ型テキトーなJavaScriptでは倍精度型を二つ組み合わせて作るということもそう簡単ではなかったりします。とはいえ,今ではFloat64Arrayという,データ型宣言ができる機構がありますので,そろそろMulti-digits多倍長のJS版ができるかなと。今のところググっても実装したものはなさそうなので,やっても無駄という可能性もあります。ま,失敗報告でもいいかなと。

 あとは,どのぐらい既存の高速化テクニックがJavaScriptで可能なのか?というテーマを追究したいところです。色々調べてみたところ,Emscriptenが大分使いやすくなってきているようで,C/C++ソースをJavaScriptにコンパイル(変換?)できるようになっており,さらにWebAssemblyというLISPのようなS型スタック機構を備えたアセンブラっぽいものもW3CのドラフトJavaScript APIWeb APIもある)になっています。一応,FirefoxとChromeでは使えるっぽい。128bitのSIMD命令の実装例もありました。

 以上のあらましは日本語記事()で大体掴めます。

 ただ,このレベルになると今後きちんと実用化されるのかどうか,そのうち放置プレイとなるのか,世間のニーズ次第ということになります。WebAssemblyに熱心なのはMozilla開発陣だけで,日本語記事を執筆された方もその一員なんですよね。

 しかしながら,どう頑張ってもネイティブ環境下以上の高速化はJavaScriptでは無理ですから,まずは使いやすくてそこそこ速いという程度で納めておくのが吉かなと。

 ボツボツ,現実逃避がてら遊んでみることにしましょう。

PCケースファンの交換

 本研究室のデスクトップマシンは大概古ぼけたPCケースに収まっています。既に3世代以上更新を重ねているものも少なくありません。見かけは古いですが,中身はマザーボードごと新品に入れ替えつつ,大事に使っています。

 私がメインに使っているマシンも,最初はIntel Core 2 Quadプロセッサの入ったシステムでしたが,今はCore i7になっています。10年以上使っていることになりますね。さすがにケースファンは軸のグリスが固まってしまっているせいか,全く動かなくなっていました。そのままでも使えますが,夏場の動作が心配ですので,付け替えることにしました。緑色に発行する120mmタイプ。

 LEDに電力使われるのも癪なので,発光しないものを探したのですが見つかりませんでしたので,仕方なくこれにしました。まぁ,起動していることが後ろから見ても分かるというのはメリットなんでしょうが,派手に見せて何かいいことがあるのかなと,年寄としては不満であります。

 光物といえば,マザーボードもGPUボードも,光らないものを見つけるのが面倒なほど,LED付きのものが当たり前になってますね。このマシンも既にそうなっています。

 透明アクリル板付きのケースにして,PCショップの店頭に並べておくのにはふさわしいのかもしれませんが,純然たる仕事用マシンとしては無駄以外の何物でもありません。光らない地味なマシンを追究していきたいところですが,現状難しいとなると,本研究室の卒研用マシンも全部光物になる日も近そうです。

卒研メモ:SPA時代にふさわしいフレームワークとは?

 今朝がたのPC Watchの記事で,ゼロ幅文字を埋め込んでコピペ元を特定するという,原始的な電子透かしテクニックが紹介されてました。

 ネタ元は,こちらのMedium記事ですが,こちらの方,Reactでサンプルコードを書いているんですね。

 最近はWeb業界もすっかりFrameworkばやりで,作り込んだUIはAngularReactのようなJavaScript frameworkで構築するのが普通になっています。当方も,頭が古いせいもあって未だにきっちりObject Orientedなframeworkの世界に馴染んでいませんが,本年の卒研ではN君がAngularを活用して楽天APIのUIを作り始めています。

 本研究室のサーバサイド中心のPHPプログラミング教材は,ちょっと時代遅れっぽいところが目立つようになりました(昨年度出来たばっかりなのに!)。ユーザサイドはSPAでかっこよく作り込み,サーバとのやり取りはAJAXで済ませてしまう,という方式もキッチリ解説する必要がありますねぇ。つか,最初から全部やり直さないとダメっぽい。

 とはいえ,HTML, CSSが怪しい人たちにJavaScriptでDOMの概念を理解してもらうのはなかなか困難です。ボチボチ下から積み上げるボトムアップ軽視では限界で,最初からOOP的チュートリアルを作っちゃって,トップダウン的にframeworkに慣れてもらうというのが良い時代なのかもしれません。

 つーことで,賽の河原のごとく,作った教材をもう一度再構築すべく,本年度後半はつらつら考えつつ「Webプログラミング開発入門 Version 2」を作っていきたいところです。幸い,Apache Cordovaの実験を行うにあたり,Node.jsの環境はばっちり構築できてますんで,導入は容易いかと。

Apache Cordova解説

 8年ぶりに3年生向けの「コンピュータシステム実験」を担当することになり,大慌てでApache Cordovaによるハイブリッドアプリケーション作成のための教材を作りました。

 熟練Webコーダーにはちょっと量が少ないかな~,と危惧していますが,まぁ初回はこれを使ってやります。あとは実習環境構築の準備が・・・まぁ次週前半に頑張ります。当初はUbuntuでやろうと画策していたのですが,Android Emulatorをまともに動かすのが現状では大変なので,Windows 10 x64環境で実習を行うことにしました。

 SAをお願いしているO君,M君よろしくです。

メールアドレス変更

 幸谷宛の旧メールアドレス tkouya@cs.sist.ac.jp は本年度(2018年度)から不達になりました。このアドレス向けにメールを送ると,”User unknown”になって戻ってくるはず。

 ということで,今後はこちらのページの下に書いてあるアドレスにメールを送って下さい。よしなに。