変奏現実

パソコンやMMORPGのことなどを思いつくまま・・・記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

この画面は、簡易表示です

ハードワークとブラックワーク

根詰めてデバッグをしていたら、朝日が昇ってくるのが、ハードワーク。
午後6時過ぎに上司に「明日の朝一に」と云われ、朝までに片付けるのが、ブラックワーク。
どっちも仕事自体に違いなぞない。
MMORPGが楽しくて、朝までやってしまうのがゲーム廃人。
アイテム狙いでダンジョンに行くが全く出ず、幾度も周回しているうちに朝になってしまうのが準廃。
どっちもプレイヤーの実態に違いなぞない。
つまり、
どちらも、朝まで仕事しようがゲームしようが、次の日の予定に響くので、よろしいことではないのだ。
付け加えるなら、
でも、またやりたいと思うか?もう2度とごめんだ!と思うかの違いしかないのである。
日本人風に『云い方を替えてみる』と・・・

心意気が違う

ということになる。
が、その様な『云い方を替えてみる』ことは、自己都合を優先し意図的にやるものであり、
それは他人には全く通用しない

「マイルール」の押し付け

でしかなく、

皆、目的がバラバラな世の中なので、1つのルールが通用する時間は長くはない。

と云う当たり前な事実の前には、なすすべがないのだ。
そして、

仏の顔も3度まで

という諺の云わんとするところ(本音)でもあるし、
なぜ、目に見えない空気を読むことに固執するのか?
と云う根本的原理に振り返る必要があるのだ。
そう、ハードワークとブラックワークは有史以前から存在するのだ。
だが、金と云う便利な仮想概念が蔓延すると、
度々、ハードワークとブラックワークの違いが判らなくなってしまうのだ。
そこに至り、初めて目に見えない空気の存在を知ることとなる。
 
という無駄なことを有史以前から繰り返しているだけの存在。
 
それが人間だ。(大笑



インテル Compute Stick

Windowsなら32Bit版でもいいなら、Atom Z3735Fでもいいのかもしれない。
※一部の重~い開発環境を除く。
INTELもnucより小さいスティックタイプのパソコンを出してきた。
今時のAtomはUSB3が使えず、いくらSSDよりトロいとは云えHDDもUSB2で接続するのは辛い。
だから、NASかオンラインストレージ(OneDriveやDropBox)を使って他のパソコンやタブレットなどと連携した方がいいだろう。
本体のmicroSDはスマフォにデータを渡すため、USB2はUSBメモリかLogcoolのUnifyingレシーバー専用と思っていい。
それに、HDMI出力付きのWindowsタブレットを持っていれば、特に必要はないけれど、壊れた時の予備として確保しておくのは悪くないかもしれない。
そして、家の誰もが好きに使える様にしておくと、youtobeのURLをこのスティックパソコンで見れるメアドに送っておけば、気が向いた時に大きな画面で動画が観れるのは楽しいかもしれない。
難点を云えば、テレビが、1画面に2つの画像入力を同時に表示する機能がないと、テレビの番組やCMの情報を見ながらメモを取って、このスティックパソコンで検索したりその情報をメールしたりするのはメンドクサイから、結局は、スマフォやタブレットも必要になってしまうかもしれない。
一方、仕事場のパソコンの大半がこのスティックタイプのパソコンに変わってしまうかもしれない。古いパソコンは、電力の大食いだし、発熱も音も酷く、いつも不機嫌で、HDDがイライラ音を立てるので、コレに交換してしまった方が電気代も場所も食わないし。高価なnucと違ってVESAマウンタ付のディスプレイも必要なく、本体も安価なので大助かりかもしれない。実際、LANで共有するNASがあれば1つ1つのパソコンに何TバイトのHDDを必要とはしなくなくなっているし、持ち運びに便利で場所を取らないハズのノート型パソコンが机を独占している状況が変わるかもしれない。
問題は内臓の32GBのeMMCにWindowsと一緒にMS-Officeが入るかどうかかな?
何だかんだで、ボクの小容量(256GB SSD)Cドライブの使用量は90GBにもなっている。
ユーザ領域が12GBもあった。半分はAppDataフォルダ(通常は隠しフォルダ)なので、意外とキツイのかもしれない。(笑
いづれにしても、
1TBぐらいのHDDがあって当たり前に思っているMSが、
Windows10をリリースした後に
いつもの調子で、延々と大量のアップデートをWindowsUpdate経由で垂れ流し
たった32GBのeMMCをアップデートのインストーラで埋めつくしてしまのに何か月?(何日?)かかるのか?
と云うあたりが試金石になるだろう。
ps.
2015/04/22 USB2×2口のスティック型パソコンをドスパラが発売。不意のリセットが起きるかもしれないけど、1口よりは・・・(ニヤ



【白旗】chipset 用ドライバのダウンロードおよびインストール あるいは Service Unavailable

Windows 8.1(64bit)のデスクトップのトレイアイコンに白旗が掲げられている。
ここをクリックすると、
ずーーーーーーーーーーーーーーーーーーーーーーーーーーーと
応答なし
やっと、何か出たと思ったら

chipset 用ドライバのダウンロードおよびインストール

chipset のドライバが適用されていません。
ご使用の chipset のモデル名は Intel Smart Connect Technology です。

タップまたはクリックして Intel Corporation の Web サイトから新しいドライバーをダウンロードタップまたはクリックして Intel Corporation の Web サイトから新しいドライバーをダウンロード

そしてリンク(https://downloadcenter.intel.com/download/20866)をクリックすると

Page Not Found

なので
その様になったと
カキコして
「メッセージの詳細」画面の【送信】ボタンを押すと
 

Service Unavailable


HTTP Error 503. The service is unavailable.
と出る。
 
もう3回目なので、
画面左上の「↑」を押して「アクションセンター」に移動し、「アーカイブ」のボタンを押して
 

忘れることにした。



[Jetpack モニター] サイト ssiscirine.perma.jp がダウンしていたようです。

ウザイ奴がPOST /xmlrpc.phpを雨の様に連打してくる度に、Celeron 847のCPUファンがフォンフォンと唸りをあげる。
cpu-day
IPアドレスを調べてみると、国籍も管理者も不明なIPアドレスだった。
現在、管理国単位でDROPしているのは CN、CA、IR、NL、TW、IQ、UA、RU、DE、BO。
そのPOST /xmlroc.phpが、誰かさんの気に障ったらしく、しつこく/var/www/cgi-bin/の下を手当たり次第に叩いてくる。
※このnucはインスト直後から/var/www/cgi-bin/ディレクトリィは空っぽです。
どうやら、他人どうしの喧嘩に巻き込まれたらしく、両側から叩かれる可哀想なCeleron 847。
httpdのconfで嫌なipアドレスをドンドン追加して、はじいているウチにApacheがInternal error(設定大杉!)を引き起こす始末、元に戻すと、翌日の再起動には、また奴がやって来る。
そんな訳で、jetpackモニターに時折応答できない日々が続く。
ps.
あまりにもウザイ /xmlroc.phpなので、
/xmlroc.php は httpdのconfでローカルLAN仕様に、
そしてIPアドレスは  iptables  の deny_ip の初登録となりました。
ps.2
ポート80は、DROPの設定が大杉なので、
echo “-A INPUT -p tcp –dport 80 -j ACCEPT_COUNTRY” >> $IPTABLES_CONFIG
でいいよね?(変更済



Mars gate

いわゆる凱旋門(triumphal arch)。 戦勝記念に建てられた門。
Mars Gateでググると、パリのエトワール凱旋門近くのホテルの予約のページが出てきた。
だが、ここで考えているのは、本物の火星への門。
すなわち、「火星への近道」のことだ。
地球と火星は同じ太陽を周回する惑星なので、隔てる距離は時期によってまちまちで、移動するとなれば料金もバラバラ。
それでは不便なので、どこかの上空に火星に通じる空間の虫食い穴を作れば、すぐに行けるハズだ。
但し、「隔てる距離は時期によってまちまち」なので、隔てた空間を繋ぐ虫食い穴の位置は常に移動させることになるから、地磁気を目安に安定させるなら、北極か南極の上空と云うことになるのだろう。
ただ、北極を火星に使ってしまうと、後は南極しか残っていないので、ドコへ虫食い穴を繋ぐかでモメそうだ。
また、重力場のほとんどのエネルギーが3次元以外の外に漏れているらしいので、
北極上空に虫食い穴を繋ぐと火星の重力場がダダ漏れし、もっと上空に火星の質点が生じそうな気がする。
それはそれで、質点をフライバイに使えば衛星を低料金で打ち上げられるかもしれないが、今安定している衛星(月を含む)は、多大な影響を受け軌道がゆがんでしまうだろうから、しっかりと重力場を抑え込む技術が必要なようだ。
そして、火星の重力場がMarsGate付近の空間に染み出てくると云うことは・・・
地球の重力場も火星の向こう側にに染み出ている訳で、地球と火星が引っ張り合ってしまうから、直に衝突してしまうだろう。
これを回避するには、地球と火星の重力場と釣り合うだけの反対方向の力、例えば遠心力で補うなら地球も火星もMarsGate付近を周回しなければならないという変テコな状況が起きてしまう。これでは、地球や火星の衛星も風前の灯であるから、これを回避するためには、両極にMarsGateを生成し、両極側から重力で引っ張って釣り合いを取るしかない。これなら人工衛星もなんとか安定しそうだ。
勿論、いくつかの惑星を繋いで、リング状にMarsGateを生成する方法もあるが、各惑星の重力場の大きさがまちまちなので、安定させるのは大変である程度の歳差運動は避けられないだろう。
それにMarsGateを凱旋門の様に年中無休で開けておく必要はなく、定期便を通す時だけ解放すればよいから、
月曜日は月、火曜日は火星、水曜日は水星、木曜日は木星、金曜日は金星、土曜日は土星、日曜日は太陽(無理! などと運用してもいい。
臨時便で、アンドロメダ大星雲のɤ とかもいいかもしれない。
しかし、こんな技術が完成したら、超々距離のロジスティックが安価になり、工場はドコにでも建て放題、貴重な地下資源も蛇口をひねるだけで簡単に取り出せる様になり、電力も太陽近くに太陽熱発電所を設置するだけでよい・・・
そうなると便利すぎて、MMORPGのごとく情報と人脈とコネの3つを原動力に不器用と不自由さを埋めることが目的の今時の経済は大崩壊。(大笑
などと考えたら、超々距離のロジスティックが安価になるなら、異星間への移動も楽になるハズ。今までそんな技術がない地球だから、異星からの移動も等価交換な障壁(?)で運賃が高値すぎて全く相手にされなかったが、運賃が下がればどの異星からもやってくるようになるかもしれない。
そうなると悪い異星人も混ざっていそう。何も悪い異星人が巨大な怪獣を連れてやってくるとは限らない。ほとんどが美味しそうなトンデモナいネタを持ってきてトンデモナい契約を吹っかけてトンズラするようなのばかりな様な気がする。勿論、地球人の方もそんなのがいっぱい異星に行く様な気もする。そんな異星間バトルが始まってしまう未来はアニメのネタにもなりそうもない。
しかし、そんな異星人の集客をアテにできなければ、いつになっても Mars Gate は存在しないだろう。
構築、動力、制御、運用 どれ一つとっても、何をすれば判らないのだから。



prototype と static

javascriptでクラスっぽいものにしたい場合
メンバーをprototypeにメンバー関数を追加する。

sjis.prototype.xxx = function() {
alert("OK");
};

ところがこの宣言したメンバーをメンバーから参照すると

sjis.prototype.yyy = function() {
xxx();
alert("OK");
};

とundefinedとなってしまうことがある。
通常のfunction 定義は、jsファイルを読み切ってから実行するので参照先は後に書いても問題ないけど、
無名関数の場合は、その場で組み込んでしまうようで、参照するメンバーは先に記述しないとダメらしい。
 
クラス宣言っぽいことはできるけど
private、protected、staticなメンバーは作れないのも痛い。
それっぽいやり方はいくつか見つけたけど
基本は、prototype に入れる方法なのでチョット扱いが大変。
それくらいなら、
var   クラス名_STATIC_メンバー名=null;
と書いた方が楽。



デスクトップに貼ったJSからSJISのCSVをダウンロードさせてみる 改訂2018/10/2

サーバーサイドでSJISにエンコードすること自体どうにでもなる。
しかし、デスクトップにHTMLとJavaScriptだけ貼ってローカルにあるテキストをCSVファイルとしてダウンロードさせようとすると、
JavaScriptのテキストはUnicode(16Bit)なので、そのまま出力するとEXCELで読むと文字化けする。
JavaScriptでは、SJISをUnicode(16Bit)に変換する機能はあるが、Unicode(16Bit)をSJISにする機能は無い。
JScriptならWindowsのドコかにStrSonvがあれば拾って来ればいいのかもしれない。
今風なら既に【外部のJSファイル(延々と長いコード表が載っている)】があるのだから、これを借りるのが普通。
しかし、今のブラウザは大抵のコードページならUnicode(16Bit)に変換できる能力を持っているのでコレを使って逆変換テーブルを作ってもいい。
SJISの文字の入ったバイナリーなイメージを作り、Readerに読ませ、Unicode(16Bit)に変換させた結果を、Unicode(16Bit)のコードをキーワードにSJISのコードを得られるArrayに詰め込めばいいハズだ。難しいのはUnicode(16Bit)しか使えないJavaScriptの上でどうやってSJISのイメージを作るのかというあたりと、SJISのコード表で有効な範囲だけイメージを作ること。
0x80など未定義になっている部分のイメージが混ざると・・・続くバイトを全角の2バイトと思って変換され文字化けてしまうし、また変換できなかった文字が空白に変換された場合、最後に変換できなかった文字がコード表の「空白」を上書きしてしまい派手な文字化けの原因になる。
それでも、MakeConvert16bitTable や file_reader.readAsText(b,”SJIS”); をゴニョればeuc-jpもできるはずだ。
16ビット領域の文字コード表を作るとループしまくるのでとても遅くなりそうな気がしたけど、今のパソコンならどうということはないらしい。
これでデータベース用のコード変換表もできるハズ。

//Unicode16 - SJIS文字コード表
var utf16Ar=null;
//画面表示直後(onload)に文字コード表を作るMakeSJISConvertの呼び出しが消えないオマジナイ
if( window.addEventListener ) {
  window.addEventListener( 'load', MakeSJISConvert, false );
} else if( window.attachEvent ) {
  window.attachEvent( 'onload', MakeSJISConvert );
} else {
  window.onload = MakeSJISConvert;
}
// Unicode を SJISに変換する
function UTF16toSJIS(utf16) {
  try{
    //コード表作成時に未定義文字をしていした時のオマジナイ
    utf16Ar[" "] = " ";
    //コード表作成時に未定義文字をしていした時のオマジナイ
    utf16Ar[undefined] = " ";
    var a = utf16.split('');
    var buf = new Uint8Array(a.length * 2);
    var j=0;
    for(var i=0; i< a.length; i++) {
      var ch = utf16Ar[a[i]];
      if(ch === undefined) {
        buf[j++] = (0x20);
      } else {
        var chH = ((ch>>8) & 0x0ff);
        var chL = ( ch     & 0x0ff);
        buf[j++] = chL;
        if( chH != 0) {
          buf[j++] = chH;
        }
      }
    }
    var rc = new Uint8Array(j);
    for(var i=0; i<j; i++) {
      rc[i] = buf[i];
    }
    return rc;
  } catch(e) {
    alert(e);
  }
}
//Unicode16 - SJIS文字コード表(utf16Ar)の作成
function MakeSJISConvert() {
  MakeConvert8bitTable();
  MakeConvert16bitTable();
}
//Unicode16 - SJIS文字コード表(utf16Ar)の16bit文字コード分の作成
function MakeConvert16bitTable() {
  //SJISで文字コードに指定している領域のみ作成すること
  MakeConvert16bitSubTable(0x0081,0x009f,0x0040,0x007e);
  MakeConvert16bitSubTable(0x00e0,0x00ef,0x0040,0x007e);
  MakeConvert16bitSubTable(0x0081,0x009f,0x0080,0x00fc);
  MakeConvert16bitSubTable(0x00e0,0x00ef,0x0080,0x00fc);
}
//変換処理の呼び出し回数
var callCount=0;
var transferCharCodeCount=0;
var undefined8BitCount=0;
var undefined16BitCount=0;
var throw16BitCount=0;
//Unicode16 - SJIS文字コード表(utf16Ar)の8bit文字コード分の作成
function MakeConvert8bitTable() {
  try {
    // 8bit area
    var buffer1 = new Uint8Array(256);
    for(var i=0; i<256; i++) {
      if(0x00<=i && i <= 0x1f) {
        switch(i) {
        case  9 : case 10 : case 13 ://制御コードはCSVで使用するTAB,CR,LFだけ登録
          buffer1[i] = i;
          break;
        default://制御コードはCSVで使用するTAB,CR,LF以外は空白として登録
          buffer1[i]=" ";
          break;
        }
      } else if(0x80<=i && i <=0xa0) {//CSVで使わないコードは空白にする
        buffer1[i]=" ";
      } else if(0xe0<=i && i <=0xff) {//CSVで使わないコードは空白にする
        buffer1[i]=" ";
      } else {
        buffer1[i] = i;
      }
    }
    var b = new Blob( [buffer1], {type: "application/octet-stream"});
    var file_reader = new FileReader();
    file_reader.onload = function(e) {
      var sjisAr = e.target.result;
      utf16Ar = new Array();
      for(var i=0;i<256;i++) {
        var utf16 = sjisAr.substr(i,1);
        if(utf16!==undefined){
          if( utf16Ar[utf16] != buffer1[i] ) transferCharCodeCount++;
          utf16Ar[utf16] = buffer1[i];
        } else {
          undefined8BitCount++;
        }
      }
    }
    file_reader.readAsText(b,"SJIS");
  } catch(e) {
    alert(e);
  }
}
//Unicode16 - SJIS文字コード表(utf16Ar)の8bit文字コード分の作成
function MakeConvert16bitSubTable(hiBegin,hiEnd,lowBegin,lowEnd) {
  try {
    // 16bit area
    callCount++;
    var sizeHi  = ( hiEnd  - hiBegin  + 1 );
    if(isNaN(sizeHi)) { alert("Nan sizeHi"); }
    var sizeLow = ( lowEnd - lowBegin + 1 );
    if(isNaN(sizeLow)) { alert("Nan sizeLow"); }
    var sizeAr  = sizeHi * sizeLow;
    if(isNaN(sizeAr)) { alert("Nan sizeHi,sizeHi("+sizeHi+") * sizeLow("+sizeLow+")"); }
    var buffer1 = new Uint16Array(sizeAr);
    var n1=0;
    var tx = "";
    for(var hi=hiBegin; hi<=hiEnd; hi++) {
      for(var low=lowBegin; low<=lowEnd; low++) {
        buffer1[n1++] = (hi & 0x0ff) + ((low <<8) & 0x0ff00);
      }
    }
    var b = new Blob( [buffer1], {type: "application/octet-stream"});
    var file_reader = new FileReader();
    file_reader.onload = function(e) {
      var sjisAr = e.target.result;
      var i=0;
      for(var hi=hiBegin; hi<=hiEnd; hi++) {
        for(var low=lowBegin; low<=lowEnd; low++) {
          var sjis = (hi & 0x0ff) + ((low <<8) & 0x0ff00);
          var utf16 = sjisAr.substr(i++,1);
          if(utf16!==undefined){
          try {//Unicode16で扱えない文字かどうかチェック
            if(utf16.charCodeAt(0).toString(16)!="3000") {
              var test = "【" + utf16 + "】" + utf16.charCodeAt(0).toString(16);
            }
            if( utf16Ar[utf16] != sjis ) transferCharCodeCount++;//登録した文字数を数えてる
            utf16Ar[utf16] = sjis;
          } catch(e) {//Unicode16で扱えない文字は無視
            alert(e+"sjis="+sjis);
            throw16BitCount++;
          }
          } else {
            undefined16BitCount++;
          }
        }
      }
    }
    file_reader.readAsText(b,"SJIS");
  } catch(e) {
    alert("MakeConvert16bitTable():"+e);
  }
}

CSVをダウンロードするコードは、

//JavaScriptはUnicode(16bit)なので、
//htmlに<input type='button' onclick='exportData("漢字\tあいうえお\tカキクケコ\r\n")'>と書いて呼び出す。
//\tがデリミタとして判定されない場合は , に変える。
function exportData(unicode16CSV) {
  var sjis = UTF16toSJIS(unicode16CSV);
  var blob = new Blob([sjis], {type: "application/octet-stream"});
  var url = URL.createObjectURL(blob);
//ここはHTMLにダウンロード用のaタグを貼っておいて再利用した方がいい。
  var a = document.querySelector("#results");
  a.href = url;
  a.download = "シフトJISコードで作ったCSVファイル.csv";
  a.text="re-download";
  a.click();
}

日本語のファイル名でダウンロードするとファイル名が文字化けするブラウザもあるだろう
画面でCSVデータを編集してCSVにするサンプル
↑2018/10/2修正済(あるいは改悪済)
〇 FireFox(62.0.2 (64ビット)),Chrome(バージョン: 69.0.3497.100(Official Build) (64 ビット)),IE Ege(バージョン不明)で治ってるように見えた。
× IEではダウンロード不可だった。
ps.2018/1/4
今では文字化けしている。サロゲートペアを考慮していないせいだと思うけど・・・
※サロゲートペア:16ビット固定の文字表現であったUnicodeので未使用でだった0xD800~0xDBFFを上位サロゲート、0xDC00~0xDFFFを下位サロゲートとし、上位サロゲート+下位サロゲートの4バイトで文字を表現する文字を拡張したものがUTF-16らしい。
※2018/10/2 FireFoxで8ビットコードが化けまくっていたので以下修正。
おかしくなっていた原因は、
(1)16ビット文字のマップを作るつもりが、英字が半角文字に変換されていた。⇒マップに登録済みの文字は無視する。
⇒まだ、上位ビットがFF(1111)の文字だけ、うまく変換できない。
「a」(0xff41)は、なぜか成功するけど
「U」(0x0ff35)は「ガ」に、
「1」(0x0ff11)が「・」に
なってしまう」。
(2)nullコードは’\u0000’で判定しないとダメだった。
(3)ダウンロード用に作成したSJIS(バイナリー)データにnullが混じっていた⇒null部分はカット。

var utf16Ar;
function UTF16toSJIS(utf16) {
  try{
    var i = 0;
    var a = utf16.split('');
    //alert(a.length);
    var rc = new Uint8Array(a.length*2);
    var countSP=0;
    var ch16=null;
    var j=0;
    for(var i=0; i< a.length; i++) {
      var ch = a[i];
      if(utf16Ar[ch.charCodeAt(0)] === undefined)
        rc[j++] = (0x20);
      else
        ch16 = (utf16Ar[ch.charCodeAt(0)]);
      if((ch16 >> 8)==0) {
        rc[j++] = ch16;
        countSP++;
      } else {
        rc[j++] = ch16 & 0x0ff;
        rc[j++] = ch16 >> 8;
      }
    }
    var rc8 = new Uint8Array(j);
    for(var i=0; i< j; i++) {
      rc8[i] = rc[i];
    }
    return rc8;
  } catch(e) {
    alert(e);
  }
}
function MakeConvert8bitTable() {
  try {
    // 8bit area
    var buffer1 = new Uint8Array(256);
    for(var i=0; i<256; i++) {
      if(0x00<=i && i <= 0x1f) {
        switch(i) {
        case  9 : case 10 : case 13 :
          buffer1[i] = i;
          break;
        default:
        buffer1[i]=0;
          break;
        }
      } else if(0x80<=i && i <=0xa0) {
        buffer1[i]=0;
      } else if(0xe0<=i && i <=0xff) {
        buffer1[i]=0;
      } else {
        buffer1[i] = i;
      }
    }
    // download sjis code list file
    if(downloadSjisCodeList) {
      var b = new Blob( [buffer1], {type: "application/octet-stream"});
      var url = URL.createObjectURL(b);
      var a = document.querySelector("#results");
      a.href = url;
      a.download = "sjis8.txt";
      a.text="re-download";
      a.click();
    }
    var b = new Blob( [buffer1], {type: "application/octet-stream"});
    var file_reader = new FileReader();
    file_reader.onload = function(e) {
      var sjisAr = e.target.result;
      utf16Ar = new Array();
      for(var i=0;i<256;i++) {
        var utf16 = sjisAr.substr(i,1);
        if( utf16 != '\u0000' && utf16Ar[utf16.charCodeAt(0)] === undefined ){
          utf16Ar[utf16.charCodeAt(0)] = buffer1[i];
        }
      }
    }
    file_reader.readAsText(b,"SJIS");
  } catch(e) {
    alert(e);
  }
}
var callCount=0;
function MakeConvert16bitSubTable(hiBegin,hiEnd,lowBegin,lowEnd) {
  try {
    // 16bit area
    callCount++;
    var sizeHi  = ( hiEnd  - hiBegin  + 1 );
    if(isNaN(sizeHi)) { alert("Nan sizeHi"); }
    var sizeLow = ( lowEnd - lowBegin + 1 );
    if(isNaN(sizeLow)) { alert("Nan sizeLow"); }
    var sizeAr  = sizeHi * sizeLow;
    if(isNaN(sizeAr)) { alert("Nan sizeHi,sizeHi("+sizeHi+") * sizeLow("+sizeLow+")"); }
    var buffer1 = new Uint16Array(sizeAr);
    var n1=0;
    var tx = "";
    for(var hi=hiBegin; hi<=hiEnd; hi++) {
      for(var low=lowBegin; low<=lowEnd; low++) {
        buffer1[n1++] = (hi & 0x0ff) + ((low <<8) & 0x0ff00);
      }
    }
    // download sjis code list file
    if(downloadSjisCodeList) {
      var b = new Blob( [buffer1], {type: "application/octet-stream"});
      var url = URL.createObjectURL(b);
      var a = document.querySelector("#results");
      a.href = url;
      a.download = "sjis16(" + callCount + ").txt";
      a.text="re-download";
      a.click();
    }
    var b = new Blob( [buffer1], {type: "application/octet-stream"});
    var file_reader = new FileReader();
    file_reader.onload = function(e) {
      var sjisAr = e.target.result;
      var i=0;
      var count=0;
      for(var hi=hiBegin; hi<=hiEnd; hi++) {
        for(var low=lowBegin; low<=lowEnd; low++) {
          var sjis = (hi & 0x0ff) + ((low <<8) & 0x0ff00);
          var utf16 = sjisAr.substr(i++,1);
          try {
            if( utf16 != '\u0000' && utf16Ar[utf16.charCodeAt(0) ] === undefined ){
              utf16Ar[utf16.charCodeAt(0) ] = sjis;
            }
          } catch(e) {
            // invalidated char
          }
        }
      }
    }
    file_reader.readAsText(b,"SJIS");
  } catch(e) {
    alert(e);
  }
}

※2023/3/7 クラシック版エディタの記事だったので差替え



DirectX12≒Mantle>>X11 AND 8-Core >> 4-Core

やっとFFXIVが6月にDirectX11のクライアントをリリースする予定なのだが・・・
3D-Mark(Version 1.5.884)のベンチマーク結果だけみると
DirectX12はDirectX11と比較してCPUのマルチコアが有効に働くので、Core-i7の8コアパワーが圧倒的なパフォーマンスを引き出すらしい。
しかし、綺麗な画面で高FPSでサクサク動くのか?と云えばそう云う訳ではなく
あくまでも3D-Markがサクサク動くだけな様だ。
ちょっと勿体ない。
 



JavaScriptで壁を感じる時

Hyper Script が JavaScriptになって既に四半世紀が過ぎようとしていた。
大量の document.www.xxx.yyy.zzz の  getter と setter にマミれてたJavaScriptも
良好な document.getElementById(id-name) の発見により暫しの安寿を得た。
が、これを好機と捉えたMSがブラウザーのIE独自仕様変更紛争を仕掛け、これにより世界中のサイトが不意のWindowsUpdateにより、画面が崩壊する事態が発生する。
幾度のW3C勧告も虚しく仕様変更紛争は激化し無料のIE6がマーケットで伸びるなか、ActiveXやOLEによるクリティカルなセキュリティホールが多数出現する事態が続きMSの戦況は大きく傾き、ついには最終防衛ラインVB-Scriptの陥落により、MS独自路線は崩壊することとなる。
それにより、ブラウザごとに実装がバラバラで誰にも全く見向きもされなかったためロクなハッキングがなされなかったJavaScriptが脚光を浴びることになるが、仕様の齟齬ゆえに入力チェック程度の実装ですら行き詰まりとなり、多くのコードはサーバーサイドへと流れていった。
そして時が過ぎ、無名の多数の不屈の精神によって生み出されたprototype.jsやjquery.jsの様な汎仕様的なコードの出現により、JavaScriptのクライアントサイドへのコードの復帰を促す流れが生み出されたものの、それはJavaScriptをWEBのダークサイドに手招く悪魔の仕業であり、再びWEBは泥沼のセキュリティホールへと押し戻されるのであった。
戦況は膠着状態となり・・・今に至る。




top