変奏現実

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

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

インターネット

Java と JScript と JavaScript と Node.js

この中ではJavaが一番嫌いだ。
と云うのも、ドコかの誰かが ラムダ表記が・・・ とか言い出したので、実装しました! コレが旬!
とか・・・まるで、FF14のアップデートで売れ筋が一変するが如き事態が起き、Javaのソースに毎年年輪が入ってしまうからだ。
無論、色々な表記方法ができるとありがたい。
SQLを

try {
StringBuilder strBuld = new StringBulder();
strBuld.append("SELECT field1,field2 ");
strBuld.append("FROM table1 T1 ");
strBuld.append("LEFT JOIN table2 T2");
strBuld.append("ON join T1.pkey1 = T2.pkey1 ");
strBuld.append("WHERE T2.pkey1 = ? ");
ResultSet rs = database.select(strBuld.toString())
} catch(e) {
log("",e.message);
}

と書いてた時期がある。
Javaの主流である自己満足(マイルール)の典型的な黒歴史的実在である。
それは、色んなブラウザのJavaScriptの実装をハックして出来上がったJQueryにしても「イベントハンドラ事前登録のてんこ盛り」でしかなく、旬のものに差し替える(アップデート)ことが必要で古いものをいつまでも使うのは困りもの。
前に取り上げたとにかく短いコードで実装されたJSFIDDLEにしても、HTMLファイルにTABLEタグをもう1個置くと使えないコードでしかない。※TABLEを作った後にIFRAMEに吐き出すのも手ではあるけれどLocalStrageの扱いは要注意。
JScriptとそのブートストラップを埋め込んだBATファイルも「デスクトップシェルにブートストラップを組み込んでしまう」のが本筋のハズだし、PUSHD \\ServerName\Folder と1行突っ込んで、サーバーに配置しても動作する様にすると、勝手にUNCパスをネットドライブに差し替えるが、POPDで最後に作ったネットドライブを消してくれるけど、途中で停止させたら・・・起動する度にネットドライブがウジャウジャと増えてしまう ので 後始末が大変だ。
Node.jsもCentOSで使う分には便利なのにWindowsではNPMがMyDocumentをリポジトリィ代りに利用しているので、何かのサンプルコードをダウンロードすると途端に危ない状況に陥ってしまう。というかNode.jsの環境が壊れてしまう。勿論、Node.js専用アカウントを作っておくべきなのは理解できるけど、どこかでAppDataをシェア(共通)パスの代用にしていたら、外部に露出させてしまい、何かのライセンス情報を抜き取られるかもしれないから「動けばいいのさ」な感じの作りこみは危なっかしい。
なのでで、どれもチョット試す分には支障ないけど、
どれも入れっぱなしにしておくと、かなり危険な香りがする。
もちろん、セキュアでクラスライブラリィの様に使いやすいものは、そうそう作れないし、年月が全てをダメにすることもある。



JSFIDDLE と SyntaxHighlighter

JSFIDDLE を26列以上でもちゃんと列番号を表示させようと思った

var letter = String.fromCharCode("A".charCodeAt(0)+j-1);

<pre style="padding-left: 30px;">var letter = makeColName(j);</pre>

に変えた後が結構面倒だった。

function makeColName(col) {
    if(col-- <=0)    return "";
    var digit = "Z".charCodeAt(0) - "A".charCodeAt(0) + 1;
    return makeColName(Math.floor(col/(digit))) + String.fromCharCode("A".charCodeAt(0)+(col % digit));
}

ストレートに表記文字を ”ABCDEFGHIJKLMNOPQRSTUVWXYZ” と並べて

function makeColName(col) {
  if(col-- <=0)    return "";
  if(typeof this.COLCHARS === 'undefined') {
    this.COLCHARS ="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // いろんな文字で遊べる
    this.DIGIT = this.COLCHARS.length;
  }
  return makeColName(Math.floor(col/(this.DIGIT))) + this.COLCHARS.charAt(col % this.DIGIT);
}

すれば「あいうえお」でも「壱弐参零」もあり?
A1のAの部分は【基数が1の26進数表記】なので、
単純に剰余を求めると、0が出てきてしまうから、
まず列番号の基数を0に変え、各桁ごとにAの部分を作成して、次の桁の処理に移る。
だから

function makeColName(col) {
    var rc="";
    while(true) {
    if(col-- ==0) return rc;
    var digit = "Z".charCodeAt(0) - "A".charCodeAt(0) + 1;
    rc = String.fromCharCode("A".charCodeAt(0)+(col % digit)) + rc;
    col = Math.floor(col/(digit));
    }
}

でもいいはず。
見づらいのでSyntaxHighlighter Evolvedを入れようと思ったら、結構量もあるし、ヘッダーのPHPソースも盛らないといけないので、プラグインを入れてみた。
行の色が交互に変わらないので
wp-content / plugins / syntaxhighlighter3 / ${設定で選択したテーマ名}.css を

.syntaxhighlighter .line.alt1 {
    background-color: #33FFFF !important;
}

と変えてみた。
参考
makeColName(1) -> “A”
makeColName(2)-> “B”
makeColName(26) -> “Z”
makeColName(27) -> “AA”
今更、EXCELのワークシートのサイズが1,048,576行×16,384列まで増えていた(Excel2007以降のxlsxファイル)のに気が付いた。



USB Type-C ≒ USB 3.1

USBコネクタの向きは機種ごとにバラバラだ。
手持ちのガシェットでも・・
SONYのSO-04Eは幅が広い方が裏面。
NEXUS-7は幅が広い方が表面。
とあるmicroUSB接続のmicroSDリーダーを取りつけたら、どちらかがLEDのアクセスランプが裏側になってしまうだろう。
こんな悩みを解決するのが裏も表も無いUSB Type-C のコネクタ。
しかも、USB3.1で10Gbpsになるのかと思いきや、USB3.1とは別の規格になるそうだ。
USB3.1なら最大100Wまで電力供給ができるから、大抵(外付けHDDやプリンタを含む)のガシェットは本体電源に頼れるのにね。
もう買ってしまったガシェットも短いUSB Type-B – TypeC 変換アダプタで大体は使いまわせるような気がするけど、
いっぱい変換アダプタが必要になりそうなので
本体のガシェットもmicroSDリーダーもType-Cが出そろうまで待った方がいいのかな。
そろそろプリンタがエラーを吐きながら印刷するようなので買い替えしなければいけないけど、もうすこし待つか?(笑
ついでにパソコンも買い替えも(大笑
全部 Type-Cになるまで どれくらい期間がかかるんだろう・・・
 
 



VR, AR, HMD

VR: 仮想現実。コンピュータが作り出した世界をユーザに観せるもの とか 現実の世界を記録し、オンラインでユーザに提示するもの とか 現実の模写 とか色々ありすぎ、今では用語として破城している。
AR: 拡張現実。VRの変種、現実の映像の一部をVRの表現を差し替えるチョットダケVR。テレビ番組のスーパーインポーズのVR版。2次元バーコードが視界に入ると特定の情報やアバターなどを画面に表示するものも含まれる。キワモノだけに使い道次第ではとても便利。
HMD:ヘッドマウントディスプレイ。両目の手前に小さなディスプレイを設置するための装置。椅子に座って見かけ上の大画面で映画を鑑賞するために作られた。装着すると目の前のディスプレイで周囲のものは視界から遮られるので装着したまま動き回るのは大変危険。
ゲーミングHMD: 3D眼鏡を使用してゲームの没入感を高める研究の延長上にこのHMDにコンピューターグラフィックスを使い頭部の動きに連動してディスプレイに映る画像を変化させることでゲームの没入感を高める試みを行われているが、ディプレイの残像効果や素早い動きに追従させること自体が難しいなど、まだまだ改良点は沢山残っている。勿論、装着したまま動き回わってゲームするのは至極難しい。



ロジテック LHR-DS05WU3BK

スタッカブル(積み重ね可)でスタイリッシュなデザインのハードディスク・リーダー/ライター。
なんてことはない内臓用HDDの外付けケースで、USB3接続のものが多いが、Wifi(11 b/g/n)でも接続できるのでスマフォでも使える。
※USB3.0とWi-Fi接続は背面スイッチで簡単に切替
※eSATA無し。
HDD容量は6TBまで
スマフォの容量が足りない人向け商品だけど、
工場や室内の色々な機器のデータを有線LANを使わずにWifiで収集する用途にも使えそう。
 
 
 



コマンド プロンプト[Windows]

MSのコマンド プロンプトは実に酷い。
例えば、Windows 7までなら、
C:> mem
で、使用できるメモリ容量(640KB前後)が判ったが、Windows 8.x には勝手に無くなっている。
BATファイルでIF文でブロック形式で記述できるようになって久しいが、

@echo off
SET V1=ABCDEFG
echo "(1) V1=%V1%"
IF 1==1 (
  SET V1=123
  echo "(2) V1=%V1%"
  IF %V1%==123 (
     echo "(3) V1=%V1%"
  ) else (
    echo "(4) V1=%V1%"
  )
  echo "(5) V1=%V1%"
)
echo "(6) V1=%V1%"
IF 1==1 (
  SET V1=123
)
IF 1==1 (
  echo "(7) V1=%V1%"
)
PAUSE

をWindows 8.xで実行すると

"(1) V1=ABCDEFG"
"(2) V1=ABCDEFG"
"(4) V1=ABCDEFG"
"(5) V1=ABCDEFG"
"(6) V1=123"
"(7) V1=123"
続行するには何かキーを押してください . . .

IF文のブロックで変数を変更してもIF文の外に出てからやっと同期がとれる。
もし、パラメータの設定具合で、色々調整して何か実行するなら、
if  Aの場合 (
変数1の変更
変数2の変更
・・・
変数nの変更
)
if  Aの場合 (
何かを実行  変数1、変数2・・・変数n
)
と書いておかないと、
最初のうちはちゃんと動いていたBATファイルが、変更を加えているウチに急に動かなくなる事態に直面してしまった。
普通なら、ちゃんと文法や注意事項を読めば、何が悪いのかは直に判るハズなのだが、
状況がいっきなり変わる!
少し追加したり削ったりすると・・・文法が間違っている!宣言されていません!***の使い方が間違っている!
と散々な状況に陥り、テキストエディタでソースをUNDOしても・・・状況は変わらない???
たぶん、リポジトリィがらみの互換性調整機能が中途半端に働いて後戻りできなくなっているのだろうと思っているけどね。
そんな訳で・・・

まだ、頭の中はかなり****きている。

なぜ、こうなるのかは、Windows 8.xで
C:> HELP   IF
の説明を最後まで読んでも、 遅延環境変数の展開 のコトは1文字もない。
どうしてもスッキリしたい場合は、

setlocal enabledelayedexpansion
を宣言し
if !V1! == 2

のように書けばいいらしいが、うまくいかなかった。
また、よく判らない制約事項として
CMDやBATの拡張子のファイルで「編集」を選択すると、メモ帖が開くが これを他の拡張子の様に簡単に他のテキストエディタに変更することができない。
for  %変数名  IN (セット) DO コマンド
の変数は、BATファイルでは %%変数名 と書かなくてはいけない。
SET 変数=”ABCD EFG”
と設定値に空白が入る場合を考慮して ”で括ると、設定値に”までもが付いてくるので、
使用時は %変数:~% と “ を取り除かなければいけないから、
外部BATファイルにパラメータとして引き渡す場合は、変数だから ”%変数名:~%” で、パラメータだから ”%~1%” とか 気を付けないといけないし、
外部BATファイルの方も、”%~1%”で使う様にしないといけない。
さらに厄介なのは全角の空白も”で括らないと半角空白同様にデリミタとして扱われるっぽい。
なので、普段から
SET %変数名=”*******************************”
SET %変数名=%変数名:~%
と2行で書くクセを付けた方がいい。
“%変数名:~%”の場合、先頭1文字は”%変数名:~1,1%”で読み取れるが、”%変数名:~0,1%”とすると、~で取ったハズの真の先頭の”が取り出せる。
“%変数名:~%” と ”%変数名:~1,-1%” は結果が大体同じ。
・・・
と、貧相なメモリしかないMS-DOSの時代には許されていた変態仕様のコマンドプロンプトのスクリプトも昔に書いた短いスクリプトのためには必要だろう。
・・・
だが、新たにBATファイルを作ると
・・・
どう考えてもダラダラと長いBATファイルにしかならない。
・・・
もう
ストレートにBATファイルの中からCScriptを呼び出し、
主なコードはJScriptで書いた方が良いだろう。
だが、まともに書くと、BATファイルに

cscript //logo %~dpABC.vbs

と書き、ABC.vbsファイルを別途に用意しないといけないので
・・・
CScriptブートストラップ
 

@if (1==1) /*
@ECHO off
echo パラメータ付きでこのファイルをJScriptで実行する。

%~d0
cd %~dp0

CScript //Nologo //E:JScript “%~f0” %*
REM ファイルの最後まで読み飛ばす
GOTO :EOF
rem */
@end

/* JScriptで実行する部分 */
// 主処理の呼び出し
WScript.quit(main(WScript.arguments.length, WScript.arguments));

// 主処理
function main( argc, argv ) {
    WScript.echo(“今はJScriptらしい”);
}

と、最初にJScriptを呼び出すブートストラップ・コードを付ければ、いくつもファイルをセットで用意しなくていい。
下地としてEXCELのVBAのエディタでインラインのヘルプを使ってコーディングし、そっくり貼り付けると多少楽かもしれない。
Visual Studio をインストしてあれば、IEのエディタにJavaScriptデバッガが付くのでここでデバッグすればかなり楽だろうけど、今時分はIEを使うのはとても怖い。
コマンドプロンプトで、ゴニュゴニュしなくても、JScriptをBAT風に実行できるのはとても楽だが、デスクトップにショートカットを貼ってパラメータを付けて使った方がいいだろう。
JScriptのどこが良いのかと云えば、

  1. MS純正のMS-DOSスクリプトでは、「***の文法が間違っています。」としかエラーが出なのでデバッグにかなり手間取るが、JScriptで実行中のエラーは(34,2)の様にエラー個所を指摘してくれる。
  2. 純正のBATコマンドには各Windowsのローカル仕様が混入されており、Windows Serverでも、Windows VISTAでも動く様に作ったスクリプトも数年ごとにやってくる新しいWindowsの出現により崩壊する。
  3. たった数行のシェルスクリプトを動かすために、Cygwinをインストし、更に Windowsだから、アレは!コレは!と頭をひねって使うよりマシだ。

なにげに見つけたxls2csv.batは、お手軽でとても良いツールだ。
難点を云えば、
WScript.CreateObject
がtry catch で括られていないせいか?、沢山のXLSファイルを変換する最中にスクリプトをCtrl+Cで止めるとEXCELというプロセスがリークすなわひゾンビープロセス状態になりやすく、何度かCtrl+Cしてしまうと、ファイルロックがかかってしまうから、溜まってきたら「タスクマネージャーから強制終了」しなければいけない。
裏を返せば、スクリプト実行中に1つのEXCELのインスタンスを使いまわして、EXCELファイルをCSVファイルに変換させれば、動作が非常に速くなるハズなので、xls2csv.batの中でカレントディレクトリィのxlsファイルを検索して全部csvに変換してしまった方がいい。
もし複数のシートがあるなら、book.Worksheets.Countの分だけループしてbook.Worksheets.Item(i).Nameでシート名を取り出して、「XLSファイル名_シート名.csv」とシートごとにCSVファイルを作るように改造してみたところ意外と速くなった。しかも使い方はXLSファイルを放り込んだフォルダに改造したXlsToCsvS.batをコピり、そのフォルダでBATファイルをダブルクリックするだけととてもお手軽。変換中はコマンドプロンプトの画面が出るし終われば勝手に消えるので、後は予想通りの数だけCSVファイルが出来ていればOKだ。
ただ、XLSファイルは白紙で作ると、Sheet1  Sheet2  Sheet3 の3シートができるので、そのままでは余分なSheet2 とSheet3のファイルが出来てしまうから、空のシートは省く仕組みも考えた方がいいと思うけど、

var SheetCount = book.Worksheets.Count;
if ( SheetCount ==3 && book.Worksheets.Item(1).Name=="Sheet1" &&   && book.Worksheets.Item(1).Name=="Sheet1"  &&  && book.Worksheets.Item(1).Name=="Sheet1"  ) {
SheetCount=1;
}
for ( var i=1; i <=SheetCount;i++) {
book.Worksheets(i).Activate();
book.SaveAs(outfile + "_" + book.Worksheets.Item(1).Name + ".csv", xlCSV);
}
 

程度しか思いつかないので、改造ソースは公開できるレベルに達してはいない。
とりあえず、WindowsPowerShell や Windows Script Host も あるけれど、デバッグしだすと大変だから、最初からログファイル出力やイベントビュワー出力を付けといた方がいい。
Silverlight や WPF の様に デモ専用の見かけ倒しで、見せかけの拡張性と、実用性の低さが目立つシロモノばかり出てくるから
やっぱり

MSは人の邪魔しかしない。

なのは定説ですね。
だって、便利にしたら Visual Studio が売れないもんね!
Node.jsのノンブロッキング嗜好なんてまだカワイイ。



NAS

ネットワークアタッチトストレージ(Network Attached Storage)、LANで使えるHDDだ。
実質的にPCであり、フルタワーケースの前面スロットホットスワップ対応のSATA接続3.5″リムーバブル・ケースを付け、マザボ、CPU、メモリに金をかけず、キーボード、マウス、モニターなどが不要なWEBファイル管理ツールを入れればいいのだ。
マザボはSATAIII(6Gbps)が多いものいい
CPUはCeleronでいいだろう。メモリは程々。※なぜかCeleron(LGA1150)が余ってた。
気を付けたいのはOS用とRAID用にドライブを分ける事。OS用はLINUXなら小容量のSSDかUSBメモリでいいだろう。
とは云えフルタワーでは置き場所の困るし、なかなか良い感じのパーツが見当たらない。
ラフに組むなら、ITXマザボ小さなPCケースの上に外付けUSB(+eSATA)の3.5″HDDケースを積み上げるのもありだろう。
 
 



小さなゲームPC

ゲーマー向けのPCならデカいケース。
なぜなら、ビデオカードをもう1枚か2枚足したくなるので、PCI-Express×16のスロットが2つか3つあるマザボを選んだ方がいいからだ。
そんなマザボはとっても大きいし、大抵のビデオカードは普通サイズで、筐体後ろの拡張スロットがハーフサイズでは固定できないので、フルタワーケースしか選択肢がないのだ。
でも今は、ITXサイズのゲームもできる性能のマザボも出てるし、奥行きが短くなっているグラボも出ているので、グラボの排熱さえ十分にできれば、小さいケースでもなんとかなる。
ケースが小さいと、場所を取らない、持ち運びが楽、中を掃除するときも場所を取らない、と良い事尽くめだが、ケースが小さいと性能と排熱を優先するあまりウルサイPCになりがち、グラボやCPUのファンは、使用期間が長くなれば音が大きくなってくるものなので、ファンを交換できるものがいいのだが、GPUのファンは特に互換性というものが存在しないので、グラボごと交換になってしまうことが多い。
第一、ケースが小さいと、配線がとても難しく手に切り傷ができることもあるから、どちらかと云えばITXの様な小さいケースはマニア向けだ。
メーカー品ではDellのAkienWare-X51しかなかったけど、ドスパラのGALLERIA ST とか 少しづつ増えている様なので、小さいゲームPCの選択肢はだんだん増えていくかもしれない。
小さいケースではHDDは1個しか積めないことが多いので、ゲームのプレイ動画などはNASに保管した方がいいだろう。NAS自体はドコかでLANでつながっていればよいので、LANのハブとコンセントの傍に置けばいい、そう開き直ってしまえば、本体はとことん小さくできるし、Windowsの再インストールでうっかり消す心配も少なくなる。そのWindowsのインストールぐらいにしか使わないDVDドライブは、外付けのUSB接続のドライブにすると、その分ケースの空きが広くなるし、他のPCにも使いまわしが効き、財布にも優しく、僅かだが消費電力も下がる。
ケースの中身が、マザボ(+CPU+メモリ)、SSD、グラボだけになれば、狭い空間の配線も多少楽で、エアフローも確保しやすくなるし、排熱も減る。
一番困るのは電源ユニットから出ている電源ケーブル、大目に付いているけど、電源ケーブルを束にしてまとめると結構かさばるので、小さいケースでは仕舞って置くスペースが無い。と云って不要なケーブルをカットしてしまうと修理や返品の際に支障がある(電源が数か月で壊れることもある)ので、全てのケーブルが取り外しできるものが一番(高いけどね)。
ここまで書いておいて何なのだけど、小さくてもしっかりとした置き場所は確保しないと、棚から落下すればケースのプラパーツが破損することもあるし、大きなファンの付いたマザボやグラボも、どこか破損しないとも限らない。かといって下に置いておけば、蹴飛ばしたり、上からの落下物がPCを直撃することもあるだろう。でも、狭い場所に押し込めると排熱できなくなって「熱いPC」になってしまうから、どこに置くかよく考えてから買った方がよさそうです。(笑
 
 
 



Apple Watch

今回のは、SONYのSmartWatch 2みたいに、i-phoneとペアで使うものらしい。
初版だし、防水じゃなくてい耐水だし、見た目を楽しむモノで良いのかもしれない。
きっとApple Watch Ver.6 ぐらいまでアップグレードする頃には、防水になって、何日かバッテリーが持つようになるかもしれない。
SmartWatch 2は安めだけどXpedia専用でセット購入になってしまう、SmartWatch 3は Android Wearなので、Androidスマフォと組合せられるけどハズレもあるかもしれない、この辺はi-phoneならドレでもいいApple Watchは細かいことを考えなくていいね。i-Podでも使えるのかな?
※SmartWatch 3単体で音楽を聴くアプリは、Xperia™専用のWALKMAN アプリが必要。
 




top