変奏現実

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

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

インターネット

Pythonで、はまった

Windows用のPython 3.4.2(64bit版)をインストール。
PythonWebとページのデザインもなかなか良いサイトを見つけたので
Pythonのサンプルソースをテキストエディタにペタペタ貼って動かしてたら、ハマりました。
1.print “Hello, Wordl!” ではまった。

元々Pythonにはprint文があるので構文上はエラーにはならないハズ。

しかし、Windows用のPython 3.4.2(64bit版)では print (“Hello, Wordl!”) だけが正解らしい。

2.¥記号問題でハマった。

テキストエディタを開くと大抵のコードページはSJISだ。

キーボードから¥記号を入れ、カーソルを¥記号のところへ持っていくと、画面右下に 5C と表示してくれる。

エスケープシーケンスのサンプルを先のサイトのページから、コピペし、カーソルを文中の¥記号のところへ持っていくと、画面右下に U+00A5 と表示してくれる。

5CはASCIIではバックスラッシュ、JISでは¥記号。 ところが、UTF-8ではU+005Cはバックスラッシュ、U+00A5が¥記号になのだから、これで正しいと云えば正しい。

しかし、Pythonでのエスケープシーケンスはバックスラッシュを使うものだ。

UTF-8同士、シフトJIS同士なら問題なかったのだろうなどと思いつつも、先のサイトのページのHTMLのソースを見ると¥記号の部分は ¥ を使っていた。

見慣れないHTMLの特殊文字だったのでググってみると、 ¥ ¥ ¥ 円記号 165(10進数)⇒A5(16進数)。

なんてこったテキストエディタに濡れ衣を着せてしまったではないか!

おそらく、そのページは『そのサイトのお作法どおり』に作られているだけなのでしょう。

『コピペはダメ!絶対ダメ!手打ち推奨!』なのかもしれません。

というか、

お行儀が良ければ良い!(訳では無い

ということを思い知らされた。

しかし、¥記号問題という古くからあり今なお困惑する問題が残っていると云うことを知ってもらおうと云うなら秀作です。

※ # coding: utf-8と書きだした途端にハマりますからね。

※何でも¥記号には3種類あるらしい

5C  アメリカではバックスラッシュだが、日本国内限定(JIS規格)で「¥」になってるため、IMEパッドの文字コード表でも日本語フォントならUTF-8でも「¥」になっている。     ※5Cの各国の状況はISO/IEC 646を参照

A5  Unicodeの円記号、HTMLの特殊記号(半角の¥記号)の16進数表記。

9D  アメリカのMS-DOSで使っているIBM-PCの文字コード(現在のCP437)の円記号

HTMLで半角の¥記号を表示したい場合はA5を使えば確実らしい。

しかし、このページってエスケープシーケンス(A5ではなく5C)の話ですよね?というところがミソになっている。

3.wxPythonでハマる

実はまだ64ビット版は開発版しかなく、評価中の様で、今月に2度もUPされていました。

リリース版はもうちょっと先の様ですので、Pythonのインストールコマンドpipを使って、開発版をインストールすることにしました。

あるブログで

pip install –pre –f http://wxpython.org/Phoenix/snapshot-builds wxpython-phoenix

でイケた!と書いてあったのですが、失敗!

wxPythonの開発者ブログを見ると、今現在の開発版では

pip install –pre -f http://wxpython.org/Phoenix/snapshot-builds/ wxPython_Phoenix

と小細工が必要らしいです。

パッケージ名はwxpython-phoenixでも良いそうですが、

snapshot-builds とwxpython-phoenix の間に スラッシュ(/) と 半角スペース( )  が必要なようです。

と云っても回答者はその点をはっきりとは指摘していなかったので今週のパッチのみ有効なトリビアな気もします。

※来週には事情が変わってるかもしれません。(泣

 4.インデントでハマった

何気にタブや4個の空白記号で、それっぽくインデントして、思った通り動いてくれたけど

タブや4個の空白記号を混在してもソレっぽく動いてくれます。

当たり前のことですが、テキストエディタの設定で タブの表記を空白記号何個分で表示するのか変えられますから、空白とタブを混在させると

  • タブ=2個の空白記号
  • タブ=4個の空白記号

の人で見え方が違うハズです。

その辺のところは入門編に解説があるハズもなく

美しい

と書いてはいないですが・・・そんな感じです。(入門編はそうあるベキですよね!

でも、いつかハマりそうです。

ただ、先の¥記号問題のISO/IEC 646を観れば判りますが

インデントでブロックを表現しているので

{や}が無い国では絶賛されている

んだろうなと思ったのですが、

[や]も無い国らしい

ので微妙かも?

C言語やJavaの { ・・・} や[・・・]の使用頻度は半端なく高いし、JavaScriptで無名のイベントを登録するには必須です。

そうなると最近のJavaで

前世期の遺物の代表であるラムダ表記が組み込まれた

のも、1行で宣言ができる!と云うより

{}を扱うのがメンドクサイ国向けのアピールなのかなと思いました。

5.for文でハマった

通常は

for 変数 in リストまたは配列:

なので、C言語風に

for    ( i =0; i<  list.length; i++)

と書くのは美しくないようです。

ま、それはいいのですが、デバッグ中に

ループの何周目で地雷を踏んだ

のかは知りたいところです。

CSVファイルの一気飲みするソースなら必須でしょう。

「カンマが足りない行があります!」とか曖昧なエラーしか出せないpythonソースなんて使わされられるのは勘弁してもらいたいです。

データが数万行もあってもEXCELに取り込めればCTRL+↓で何とかなるでしょうが、列数が256列もあったらEXCELはCSVを正しく読んでくれるでしょうか?

否、んーなものにEXCELを持ち出してくるあたりから間違っているような・・・

この場合はPythonの標準ライプラリィ(組み込み関数)のenumerate()を使い、

for (周回数をカウントする変数、内容を格納する変数) in enumerate(リストまたは配列):

で良いみたいですが

collections ライブラリィを使った方が何か付け加える度にソースをゴソゴソと書き換えることが減りそうな気がしました。

特定のCSVファイルなら

for (1列目の変数、2列目の変数・・・n列目の変数) in zip(リストまたは入れる):

が楽そうです。

 6.いつかハマりそう

何も難しいコードではありません。

x, y = y,x

Pythonなら、 xとyの変数を、期待通りに入れ替えてくれます。

他の言語で似たようなコードを書いてバグった人は多いと思いますので、

Pythonぐらいでしか通用しないコードは美しくない

とか云われそうです。

しかし、先の式の実装は、初歩のアセンブラ言語で書けば

PUSH Y

PUSH X

POP Y

POP X

で、済む話です。

※高度なアセンブラ言語ではPOPの順番が間違っていると指摘される可能性があります。

こんな簡単なことがC言語やJavaでは一時変数を使う以外には判りやすい方法がなく、難解(パっと見、読みにくくなる)になってしまうのが今でも不思議です。

7.宣言文でハマった

def   関数名(引数1、引数2・・・):

変数=引数1+引数2

return 変数

はあまり違和感がない。

なぜか”標準”で定数がない。

一応、タブル (1,2,’A’) はあるけど、constではなく、Read Only属性が付いている変数なので、中身がいっぱいあると詰め込むのに時間がかかる。

8:スライスでハマる

変数名[n:m] で、n番目からm番目まで切り取ってくれるので便利。

  • 変数名[n:]  ※n番目以降を取り出す
  • 変数名[:m]  ※m番目までを取り出す

なんかも助かります。

但し、スライス表現のnやmは配列子の番号ではなく、配列の隙間に付けた番号のようです。

※配列をスライスするには指定された2か所の隙間にナイフを刺し込んでサっと取り出す・・・みたいなイメージなのでしょうね。

※大雑把なボクはどこから切り分ければ良いか考えずに配列を1個づつ切り分けてから、先頭から0,1,2と数えて取り出しそうです。⇒スプリット&マージ

※文化の相違なのかな?

※数式の書き方も世界共通ではないそうですけどね。

[0:1]   は、(変数名[0])のことなので配列は0オリジンみたいだからと・・・

変数名[n]から変数名[m]までを取り出すなら

変数名[n:m] かと思ったら、変数名[n:m+1]としないといけない。

さらにCやJavaのよくやってしまいがちな無用な(・・・)を付け、変数名[n:(m+1)] などとすると、

Pythonだから、エラー?どう動くんだろう?とか悩ませてしまいそうです。

 
総括:

Pythonってよさげ?

{}を付け更に見やすいようにタブレーションまでするCやJavaでは面倒くさいので、Eclipseなどは保存時にフォーマッタで決め打ちの書式変換をかけるのが普通。

なので、Pythonのことは考えずJava専用に設定したEclipseのエディタでPythonのソースを開いて保存すると、あ¨~~~~~(声にならない悲鳴 が出そうで怖い気がしました。

スライスやenumerateなど、他の言語のソースでは微妙に意味が違うコードは意外と不味い味がするかもしれない。

総評:

「元はみんなアルゴルの系譜なのさ」などと思っているとハマることは間違いない。



ネット上におけるボットを考えてみた

このサーバーの今のアクセスログ・ファイル(18,657行)を
自分のIPアドレスでgrepすると2,914行もヒットしましたが、
BOTでgrepすると3,016行もヒットします。
検索BOTには
“Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)” 1760行
“Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)”   823行
のように名刺を置いていくので、分布も判りますし、日記を検索に載せてくれる便利なツールですが
このBOTが動画広告をクリックしてたケースが案外(20%以上)多いらしいです。
その分、広告主はお金を払っているのでちょっと問題がありそう。
ボットの辞書に「動画広告はクリックしない」というのが必要でしょうね。
 
 
 



SSDのSLC,MLC,TLC

SSDの中の記憶素子にはデジタル(0か1)だけかと云えばそうでもない。
記憶素子に記録できる情報の数によりSLC(1ビット),MLC(2ビット),TLC(3ビット)と分けられる。
1素子に記憶できる情報量は当然1ビット,2ビット,3ビットとビット数のまんまで、情報量はビット数に比例する。
しかし、表現できる値は、2通り,4通り,8通りと倍々ゲームになるので、1ビット増すと表現可能な値の範囲が2倍に増えるのでデジタル化って美味しく感じられる。
ところが、1素子で表現できる値の数が多いほど読み書きする処理の精度はビット数の2乗に比例し倍々ゲームになるのに、1素子に保持できる情報量は等倍にしかならないので、1素子あたりのビット数を増やしてもあまり美味しい話にはならない。
仮に1素子に4ビットの情報を記憶させようとすると、16通りの記憶素子の情報をデジタル化する回路の難易度がTLCの倍なのに、素子の情報量はTLCの1.33倍にしかならず、苦労するだけな感じがする。
もっと進んで、1素子に8ビットの情報を記憶させようとすると、256通りの記憶素子の情報をデジタル化する回路の難易度がかなり高そうだが、記憶できる情報量はSLCの8倍にしかならないものの、チップ全体での記憶素子の情報を読み書きする回路の比率が十分小さいなら、チップサイズが8分の1になるのだから、コストパフォーマンスが上がる可能性はある。
別な方法としては時間軸すなわち情報の伝達遅延を利用し、1素子から順に複数の情報を引き出すこともできないことはないだろう。情報を書き込む際に素子上での情報を記憶する位置と書き込み電圧に相関関係があればできなくはなさそう。単純なFET遅延回路を縦に積み上げる構造でもいいし、多数のエミッタを持たせられれば、ビットごとにデータ線を引く必要もない。4ビットや8ビットぐらいでは新機構を考えるだけメンドクサく、シリアル出力だからビット数が多くなると転送時間もかかるのだが、4~16ビットぐらいならDDRのバーストモードでそのまんま出力できるところが美味しい。もしSSDなら512バイト分=32,768ビットのシリアル転送でも構わないだろう。ま、そこまで行くと縦に積層していくのが大変だが、レーザーを基盤に浸透させ光共鳴状態で不純物を一定間隔で濃淡を作り出せば、極薄いPN結合素子の積層構造が作れるかも。光干渉形成積層遅延素子(Light-interference-forming Laminated-delay-element’s-Array:Lif-LdeA)とでもいうものが・・・
そんな妄想がそう遠くない様な気がしている。
 
 
 
 
 



JrunScript

JDK6以降についているjrunscriptコマンドが付いている。
※最新のVer.8でもJREなら付いていない。
なぜか、JDK8のインストーラは
PATH変数に C:\ProgramData\Oracle\Java\javapath; を先頭に追加するが、そこには java.exe、javaw.exe、javaws.exe  しかないので、コマンドプロンプトで使いたいJDKコマンドを、C:\ProgramData\Oracle\Java\javapath にショートカットかシンボリックリンクを貼れば良さそうだが、jrunscriptはjli.dllを参照しているので無理だったので、素直に環境変数を変えた方が良さそうだ。
新規に JAVA_HOME 変数を作り C:\Program Files\Java\jdk1.8.0_25 を設定。
PATH 変数の最後に ;%JAVA_HOME%\bin を追記。
※本当は正しい方法が別にあるのかもしれない。
※もし、C:\ProgramData\Oracle\Java\javapathにシンボリックリンクなどを貼ったまま放置すると「エラー: メイン・クラスcom.sun.tools.script.shell.Mainが見つからなかったかロードできませんでした」となってしまうので消しておくこと。
パラメータを付けなければ、インタラクティブモード、つまり古式ゆかしい対話式でJavaScriptを実行してくれる。
対話式の注意点としは、for文など { ブロック形式 } を使う文法も一行に収めなければダメ。

> jrunscript
nashorn> for (i = 0;  i< 10; i++ ) { printf(“%d”,i);  }
0
1
2
3
4
5
6
7
8
9
nashorn>Ctrl+C

>

nashornはJDK8のJavaScriptエンジンの名前。Java SE 7ではrhinoのハズ。
普通にJavaScriptを読ませたければ、

> jrunscript   -f  JavaScriptファイル名

とすれば、ファイル単位でスクリプトを評価するので、

for (i = 0;  i< 10; i++ ) {

printf(“%d”,i);

}

も、ちゃんと読んでくれ、同じように実行してくれる。
これだけではシェルやBATファイルの代りにJavaScriptが使えるだけ、

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("nashorn");
engine.eval("for (i = 0;  i< 10; i++ ) { printf('%d',i);  }");
とやるようで結局JNDIな面倒な呼び方はそのまんま。
ただ、メソッドに渡すパラメータが複雑怪奇な構造だと
evalで呼び出すのは面倒でInvokeDynamicやMethodHandlerを使えるのは便利な気もする。
//エンジンを探す
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
// スクリプトで ほげ関数を 定義する.
engine.eval("function ほげ(message) { print(message); }");
// Javaから ほげ関数を呼び出す.
Invocable invocable = (Invocable)engine;
invocable.invokeFunction("ほげ", "hello");
またスクリプトで
var a = Java.type("クラスのフルパス名");
とJavaのクラスが容易に呼び出せる一方で
var IntArrayType = Java.type("int[]")
var arr = new IntArrayType(10);

と 配列の扱いはなかなか面倒なようだ。



Office Premium 搭載パソコン

コレを買うと、Office 365 Solo (¥12,744/年) のハズが
半額のOffice 365 サービス (Office Premium 搭載パソコン専用)(¥6,264 (税込))で更新できてお得ということになっているが・・・
まともなスペックのOffice Premium 搭載パソコンはドレも良いお値段になっている。プリインストールでOffice分がいくらなのかは判らないから、最初に大目に支払っているのだろう。(大笑
中にはメモリを1GBにケチるなどして安くしているOffice Premium 搭載パソコンもあるだろうけど、アンチウイルス系ソフトも常時動作しているのだ。
今までそうであったように、使用して年月が経つと、飛んでも無い量のWindows Updateにより起動が長い!動作がノロい!時どきフリーズする!などケチった分だけ痛い目に遭うのが早い事は想像しやすい。
とは云っても、過ぎたるは及ばざるがごとしの諺通り。Hyper-VでOSをいくつも動かすことが多いし、CドライブがHDDでは起動もHyper-VゲストOSも遅いので、手元のパソコンはメモリを24GBに増設しCドライブを40GBのSSDに変えてWindowsを再インストールしたらCドライブが真っ赤になっていた。
そう、そんなにメモリを載せる人が少なかった時期のWindows7なので副作用が出たのだ。Windows7の初期設定では実装メモリの3倍(仮想記憶(2倍)+ハイバネーション(1倍))の領域をHDDに確保する。圧倒的に容量が少ないSSDでも同様に確保しようとするが、さすがに遠慮して0GBにならないようになってるだけマシな状況だった。64GBのSSDでは多少遠慮して40GBぐらい食われるが、128GBのSSDになると遠慮なく実装メモリ量×3倍=72GBぐらい食われそうな勢いだった。(汗
そんな一例も含め、WindowsもOfficeも最初のバージョンから結構な年月が経っていることもあり、下位互換性を取るための様々なプログラムや設定が異常に多くなってしまう。(爆
例えXPの後継をWindowsServer200Xをベースに作ったとしても、最終的には【下位互換性を取るための様々なプログラムや設定を上乗せしない訳にはいかない】。(爆
そんなこんなで、何十年も前のWindows 3.3当時のOfficeの文書を何十年も前のパソコンで開くのと同じことをしようとすると、WindowsやOfficeを最新にバージョンアップしてしまった後では、当時よりも大幅に性能の良いパソコンが必要になってしまうのだ。
※といっても当時のOfficeの文書はフロッピーディスクという現在ではパソコンに搭載されることが極めて少なくなったメディアに入っているに違いない。MOもしかり。
だから、ずーっと同じOSやアプリを何十年も使っていると、諸々の要因で追加や変更が加わり、ごった煮になり、互換性のテストしなければいけない項目は増える一方!OSもアプリも保守が大変になるから、コストパフォーマンスはどんどん悪くなり、製品単価は下がるどころか、上がり始めるのだ。
ソフトウェアだから改造は容易だろう?と云う人もいるだろう。
例えば、ピラミッドの頂上にもう1個石を上乗せするのは大変だができない訳では無い。だが、後1個!後1個!・・・と云って無理を通せば、最後には誰がやっても出来ない特異点(無理っぽ)に到達するのは想像できるだろう。
いやソフトウェアだから永遠に積み上げられるという人もいるかもしれない。しかし、画面からはみ出した部分は観えなくなる。縮尺を縮じめてしまうと、さっぱり状況がわからない。今の高さをmで吹き出し表示させても、いつかは吹き出しが画面の横幅を越えてしまうので、どんな方法でも限界はあるし、新しい方法を生み出すには、ソフトウェア・デザインの大改造が必要で、その費用は誰が払うの?という最終問題が発生する。
ありていにいえば、しっかりと将来性や拡張性を見据えたものでも、見えてないデッドスペースが多いってだけであり、やはり最後には、特異点(無理っぽ)に到達するだ。
もっとはっきり云えば、無理を云う貴方の後ろにも、無理を云う別の貴方がいて、さらにその後ろにも・・・と、世の中は無理を云う貴方の行列は永遠に続くのだから、きりがないのだ。
IPv4のアドレスが枯渇するは先見性が足りなかったのではない。ただただ無理を通した結果なのだ。IPv6もIoTが好調に進み、地球上全ての温暖化マップを作成するための気温やCO2分圧の測定IoTを大量に散布するプロジェクトとか、血糖値などの測定用使い捨てのIoTなどで大量に消費されたりするなどの事態がいくども起きれば、経済は潤うが、無尽蔵に思えたIPアドレスが枯渇するのもそう遠い話ではないので、有限数のIPアドレス中継から無限数のドメイン中継に変わるのも時間の問題だろう。
ハードウェアのコストパフォーマンスが良くなる時期は見た目のコストパフォーマンスは改善されるが、WindowsやOfficeは保守が大変なのでハードウェアとは無関係にコストパフォーマンスは悪化する。
ハードウェアのコストパフォーマンスが良くならない時期(サブプライムローン破綻とか、今現在の円安とか・・・)は見た目のコストパフォーマンスは悪化し、更にWindowsやOfficeは保守が大変でコストパフォーマンスは同様に悪化する。
結局、WindowsやOfficeも無理が祟っているのが現状と云えるのではないだろうか?
そろそろ、WindowsやOfficeも捨ててしまった方が、全体としてのコストパフォーマンスは上昇するような気がする。
しかし、無理が祟っている様な状況だからこそ、WindowsやOfficeの競合らしいモノが実質的に無いのであって、全体としてのコストパフォーマンスは上昇するような気がする状況になれば、競合であふれかえる可能性が高い。
そして、それはユーザも同じこと。扱いに困るWindowsやOfficeだからこそ仕事になっているのだ。これが全体としてのコストパフォーマンスは上昇するような気がする状況になれば、こっちも競合であふれかえる可能性が高い。

憎まれっ子、世にはばかる。

は、意味深いコトワザなのである。
おまけに、最新のWindowsもOfficeも新しいUIはいづれも不評だ。
滅多に見ないバージョン表記なぞドコかに埋めておけばいいと思っているのか?最近のOfficeでバージョン表記を探すことすら大変だからだ。
Office 365で自動的に最新バージョンOfficeが使えることが1つの目玉であるが、その最新バージョンでは最初に「バージョン表記を探すクエストを請けなくてはいけない!2度目、3度目になれば苦痛になりそうだ。
今のバージョンではEXCELのシートに貼った図形をドラッグ選択したいと思った途端!

  1. ツールバーの左端のタグに切り替え、
  2. ツールバーの右端にある「検索」のプルダウンメニューを開き
  3. 下から2番目図形を選択するモードにチェックを入れなければいけない。

そして、また図形を追加するのは

  1. ツールバーの左端から2番目の挿入のタグに切り替え、
  2. ツールバーの「図形」をクリックして追加する図形(矩形とか吹き出しとか矢印)を選択しないといけない。
  3. 続けて追加するときにクリックを1回でも減らしたいなら、左端に図形が列挙されているので、目線を画面の左端と右端を高速で移動しなくてはいけない。

ので、結構メンドクサイUIなってしまっている。
次バージョンではどんな操作になるのだろうか?
もっとメンドクサイ仕様になっている気がする。
MMORPGを毎日プレイしていると、そのうちアップデートなんて仕様が変わるだけで、また覚え直すのが億劫になってくるが、やはりWindowsやOfficeでも同様である。
FFは遊びではないと云う人もいる。
仕事で使うWindowsやOfficeならなおさら。
嫌々付き合っていくしかないらしい。
本当に

憎まれっ子、世にはばかる。

は、意味深いコトワザなのである。
 
そんなことはない!新しいアップデートに挑戦することは楽しい!
確かにそうだろう。でも、楽しいのは3度目までだと思うよ。4度目には大抵の人はもう飽き飽きしているよ!
何でこの職場では4つのOfficeのバージョンの操作を即答しないといけないんだと!
そしてそれは、質問してくる奴が使っているOfficeのバージョンの探し方すら見当もつかないせいなのだ!と気が付くのである。
だから、最新バージョンでは最初に「バージョン表記」を探すクエストを請けなくてはいけない!のである。



WindowsPCの共有フォルダをLinuxで借りる方法

Androidのソースが大きすぎるのでWindowsPCのHDDを間借りすることにした。
# yum -y install cifs-utils
インストール:
cifs-utils.x86_64 0:6.2-6.el7
依存性関連をインストールしました:
libldb.x86_64 0:1.1.16-4.el7             libtalloc.x86_64 0:2.0.8-4.el7
libtdb.x86_64 0:1.2.12-3.el7             libtevent.x86_64 0:0.9.18-6.el7
libwbclient.x86_64 0:4.1.1-37.el7_0      pytalloc.x86_64 0:2.0.8-4.el7
samba-libs.x86_64 0:4.1.1-37.el7_0
完了しました!
# mkdir   /フォルダ
WindowsPC側で
共有するためのアカウントと共有フォルダを作る

アカウントは何でもいいが、パスワードを付けないとWindowsUpdateを全くやっていない一部のXP以外はネットワーク接続ができない。

共有するフォルダのプロパティで【共有】タグで【共有】ボタンを押し、先のアカウントで読み書きできるようにする。

# mount -t cifs -o user=ユーザ,password=パスワード //WindowsPCのIPアドレス/共有フォルダ   /フォルダ
#
何も出ないけど使える。
自動接続する場合は
echo //WindowsPCのIPアドレス/共有フォルダ /フォルダ cifs user=ユーザ,password=パスワード,defaults 0 0 >> /etc/fstab
でいいらしい。
しかしandroidのソースをコピーしてみると
cp: シンボリックリンク `/フォルダ/android-x86/ndk/sources/cxx-stl/llvm-libc++/libcxx/test/strings/basic.string/string.nonmembers/string_opgtEQ’ を作成できません: サ ポートされていない操作です
と出てきた。シンボリックリンク は使えないらしい。
もちろん repo init すら通らない。
Get http://git.android-x86.org/manifest
Traceback (most recent call last):
File “/フォルダ/android-x86/.repo/repo/main.py”, line 500, in <module>
_Main(sys.argv[1:])
File “/フォルダ/android-x86/.repo/repo/main.py”, line 476, in _Main
result = repo._Run(argv) or 0
File “/フォルダ/android-x86/.repo/repo/main.py”, line 155, in _Run
result = cmd.Execute(copts, cargs)
File “/フォルダ/android-x86/.repo/repo/subcmds/init.py”, line 390, in Execute
self._SyncManifest(opt)
File “/フォルダ/android-x86/.repo/repo/subcmds/init.py”, line 163, in _SyncManifest
m._InitGitDir(mirror_git=mirrored_manifest_git)
File “/フォルダ/android-x86/.repo/repo/project.py”, line 2076, in _InitGitDir
self._UpdateHooks()
File “/フォルダ/android-x86/.repo/repo/project.py”, line 2098, in _UpdateHooks
self._InitHooks()
File “/フォルダ/android-x86/.repo/repo/project.py”, line 2126, in _InitHooks
os.symlink(os.path.relpath(stock_hook, os.path.dirname(dst)), dst)
OSError: [Errno 95] Operation not supported
とは云え
# df -H
ファイルシス              サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos-root      41G   22G   19G   55% /
devtmpfs                    1.7G     0  1.7G    0% /dev
tmpfs                       1.8G     0  1.8G    0% /dev/shm
tmpfs                       1.8G  9.0M  1.7G    1% /run
tmpfs                       1.8G     0  1.8G    0% /sys/fs/cgroup
/dev/sda2                   521M  168M  354M   33% /boot
/dev/sda1                   210M   10M  200M    5% /boot/efi
/dev/mapper/centos-home      20G   34M   20G    1% /home
/dev/sdb1                    63G   21G   39G   35% /usbSSD
//WindowsPCのIPアドレス/共有フォルダ  3.1T  537G  2.5T   18% /フォルダ
3.1Tは魅力的なサイズだ。(大笑
http://thinkit.co.jp/free/tech/26/4/1.html などを見てダミーファイルを作ろうとしたが
# dd if=/dev/zero of=/フォルダ/ext3.img bs=1G count=1 seek=128
何時まで経っても終わらないので・・・
dd のseek オプションで一瞬で大きなファイルを作るを参考に
128GB=128 × 1024 (MB) × 1024 (KB) × 1024 (B)=137438953472 だから
# dd   if=/dev/zero   of=/フォルダ/ext3.img  seek=137438953472   bs=1   count=1
1+0 レコード入力
1+0 レコード出力
1 バイト (1 B) コピーされました、 0.00187216 秒、 0.5 kB/秒
で、サクっとエリアを借り、フォーマット
# mkefs -t ext4  /フォルダ/ext3.img
ke2fs 1.42.9 (28-Dec-2013)
/フォルダ/ext3.img is not a block special device.
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
8388608 inodes, 33554432 blocks
1677721 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2181038080
1024 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): [ENTER]done
Writing superblocks and filesystem accounting information:
長い。タスクマネージャで調子を見ていたらHDDの起動音が・・・ディスクが止まっていたらしい。すぐに
done
メモリが24GBなのでキャシュしていたのかな?
ま、他にも何かあるのかもしれない。
適当にマウントしてみると
# df -h
ファイルシス              サイズ  使用  残り 使用% マウント位置
・・・
//WindowsPCのIPアドレス/共有フォルダ   2.8T  756G  2.0T   28% /フォルダ
/dev/loop0                  126G   61M  120G    1% /ext3.imgをマウントしたフォルダ
とりあえずコレでシンボリックリンクも貼り放題。
巨大なファイル(qemuのイメージファイルとか)のコピーをWindowsのタクスマネージャで見てみると、瞬間最大で100MB/秒強(LANが1Gbpsなので上限値)とか、USB2でSSDにつなぐより速いのでrepoのダウンロードも短くて済みそうだが、nucのCPUファンが唸りっぱなしになった。
 
いつも使う訳ではないのでスクリプトで切り替える様にする
ssdmount.sh

 # WindowsPCのIPアドレス
WINPC_IP_ADDRESS=192.168.*.*
# WindowsPCの共有フォルダ
WIN_SHARE_FOLDER=共有フォルダ名
# WindowsPCのアカウント
WIN_ACC=user=ユーザ名,password=パスワード
# 共有フォルダのマウント先
WINPC_SHARE_MOUNT_POINT=マウントするフォルダ名
# WindowsPCの共有フォルダにあるext4イメージファイル
EXT_IMG=${WINPC_SHARE_MOUNT_POINT}/イメージファイル名
# ext4イメージファイルのマウント先
EXT4_MOUNT_POINT=イメージファイルをマウントするフォルダ名
#
if [ “$1” == “-u” ]; then
    echo  umount  mode
    mount  |  grep  “on ${EXT4_MOUNT_POINT}”
    mount  |  grep  “on ${WINPC_SHARE_MOUNT_POINT}”
    #EXT4イメージをアンマウント
    umount  ${EXT4_MOUNT_POINT}
    #共有フォルダをアンマウント
    umount  ${WINPC_SHARE_MOUNT_POINT}
elif [ “$1” == “-m” ]; then
    echo  mount  mode
    #共有フォルダをマウントするフォルダを作る
    if [ ! -e ${WINPC_SHARE_MOUNT_POINT} ]; then
        echo  make ${WINPC_SHARE_MOUNT_POINT}
        mkdir  ${WINPC_SHARE_MOUNT_POINT}
        chmod  0777  ${WINPC_SHARE_MOUNT_POINT}
    fi
    #EXT4イメージファイルをマウントするフォルダを作る
    if [ ! -e ${EXT4_MOUNT_POINT} ]; then
        echo  make ${EXT4_MOUNT_POINT}
        mkdir  ${EXT4_MOUNT_POINT}
        chmod  0777  ${EXT4_MOUNT_POINT}
    fi
    #共有フォルダをマウント
    mount -t cifs -o ${WIN_ACC}    //${WINPC_IP_ADDRESS}/${WIN_SHARE_FOLDER}    ${WINPC_SHARE_MOUNT_POINT}
    #EXT4イメージをマウント
    if [ -e ${EXT_IMG} ]; then
        mount   ${EXT_IMG}    ${EXT4_MOUNT_POINT}
    fi
    mount  |  grep  “on ${EXT4_MOUNT_POINT}”
    mount  |  grep  “on ${WINPC_SHARE_MOUNT_POINT}”
else
    echo unknown mode [$1].
    echo option -m or -u.
fi

いつも思うけど、手打ちしたものをシェルスクリプトにしてしまうと長くなるなぁ~
しかし、WindowsPC側にEXT4イメージファイルを配置してnucから使うのはトリッキーではあるけれど・・・
チョット使ってみたいのでKVMゲストをWindowsPCに作るには便利だ。
バックアップも取りやすい。
Windows10のプレビュー版もモサモサと動く(サクサクではない
 
参考 : http://ry.tl/mount.html



マウスコンピュータ  スティック型PC 「m-Stickシリーズ MS-NH1」

安くて気軽に買える。
小さくて置き場所に困らない。
サイズはChromecastぐらい。
eMMC(32GB)なのでCentOS7はインストできないがUbuntuなら大丈夫だろう。
WifiとBluetoothは付いている。
LIVAとの違いは、LIVAにはUSB3ポートと有線LANポートがあるけど、micro SDメモリースロットはない。
ブログ鯖にするなら、やはりLIVAのUSB3にSSDを繋いだ方が良さそう。
どっちも心配なのは24時間稼働(繋ぎっぱなし)で過熱しないかどうか?
ま、スペックをみるかぎり Windows 8.1 with Bing 付きらしいので、最安値。
中古のパソコンでいいんだけど?と云う人に進めてみるかな?
でも、HDMI出力しかなので、格安のアナログRGB入力のモニタに金物の変換アダプタを繋いでも映らない。
HDMI to VGA adapter ブラック / HDMI信号をVGA出力信号に変換するアダプターのようにRaspberry-Piでも使えると評価されたものを探すといいだろう。安い(今、880円)
注意点としてはUSBが1口なのでBluetoothのキーボードやマウスを使いたいが、最初にデバイスを認証させるために有線のキーボードとマウスを接続しておかないといけない。
無線アダプタ1個でキーボードとマウスを繋ぐ Logicool のMK270 (2~3千円前後)も買っておいた方がいいだろう。アダプタ自体にキーボードとマウスの認証情報が書き込まれるので、他のPCにアダプタを挿すとすぐ使えるので据え置きしてるノートPCにも使え重宝する一品。
 



【KVMゲスト】Android-x86でWifiしたい・・・ing

https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Virtualization_Host_Configuration_and_Guest_Installation_Guide/chap-Virtualization_Host_Configuration_and_Guest_Installation_Guide-PCI_Device_Config.html#sect-Virtualization_Host_Configuration_and_Guest_Installation_Guide-PCI_Assignment-AI_device_to_a_host
を見ると
 
# vi /var/log/dmesg
[    4.871293] iwlwifi 0000:02:00.0: CONFIG_IWLWIFI_DEBUG disabled
[    4.871299] iwlwifi 0000:02:00.0: CONFIG_IWLWIFI_DEBUGFS enabled
[    4.871304] iwlwifi 0000:02:00.0: CONFIG_IWLWIFI_DEVICE_TRACING disabled
[    4.871307] iwlwifi 0000:02:00.0: CONFIG_IWLWIFI_DEVICE_TESTMODE disabled
[    4.871311] iwlwifi 0000:02:00.0: CONFIG_IWLWIFI_P2P disabled
[    4.871315] iwlwifi 0000:02:00.0: Detected Intel(R) Centrino(R) Advanced-N 6235 AGN, REV=0xB0
[    4.871353] iwlwifi 0000:02:00.0: L1 Disabled; Enabling L0S
# lspci | grep Centrino
02:00.0 Network controller: Intel Corporation Centrino Advanced-N 6235 (rev 24)
# virsh nodedev-list –cap pci
pci_0000_00_00_0
pci_0000_00_02_0
pci_0000_00_16_0
pci_0000_00_19_0
pci_0000_00_1a_0
pci_0000_00_1b_0
pci_0000_00_1c_0
pci_0000_00_1c_2
pci_0000_00_1d_0
pci_0000_00_1f_0
pci_0000_00_1f_2
pci_0000_00_1f_3
pci_0000_02_00_0
# virsh nodedev-dumpxml pci_0000_02_00_0
<device>
<name>pci_0000_02_00_0</name>
<path>/sys/devices/pci0000:00/0000:00:1c.2/0000:02:00.0</path>
<parent>pci_0000_00_1c_2</parent>
<driver>
<name>iwlwifi</name>
</driver>
<capability type=’pci’>
<domain>0</domain>
<bus>2</bus>
<slot>0</slot>
<function>0</function>
<product id=’0x088e’>Centrino Advanced-N 6235</product>
<vendor id=’0x8086′>Intel Corporation</vendor>
</capability>
</device>
# virsh edit Android4.4
<controller type=’virtio-serial’ index=’0′>
<address type=’pci‘ domain=’0x0000‘ bus=’0x02 slot=’0x00‘ function=’0x0‘/>
</controller>
がダメ。

    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
      </source>
    </hostdev>
が
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </hostdev>
に書き換わったけど変更はできた。

# virsh start Android すると
エラー: ドメイン Android4.4 の起動に失敗しました
エラー: サポートされない設定: host doesn’t support passthrough of host PCI devices
それどころかホストがらの切り離しにも失敗。
# virsh nodedev-dettach pci_0000_02_00_0
エラー: デバイス pci_0000_02_00_0 の切断に失敗しました
エラー: この操作はサポートされていません: neither VFIO nor KVM device assignment is currently supported on this system
 



KVMゲストがSPICEでつながらなくなった?

原因は不明。
yum update したら
いっぱいアップデートがあがったせい?
よく判らないから、/etc/libvirt/qemu.conf を一旦戻し、
spice_tls = 0 を付けてみた。
libvirt で qemuの disable-ticketing
の設定方法は不明のまま。
http://www.spice-space.org/page/SSLConnection の記事が更新されていたのも気になっている。
X-Windowを入れてデスクトップでも確認できるようにした方がよさそう。
参考1:http://manual.geeko.cpon.org/ja/cha.libvirt.connect.html#sec.libvirt.connect.auth.libvirt.sasl
参考2:http://www.atmarkit.co.jp/ait/articles/1006/29/news083.html
ブリッジ接続(br0)をDHCPからstaticにIPを割り振ったのも影響しているかもしれない。
 
しばらくして、SPICEの繋ぐIPアドレスはKVMのゲストではなく、KVMのホストの方だったと思い出した。(大笑
アップデートのおかげなのか?qemu.confを元に戻してもつながるようになった。(感謝感謝
これで電子証明書は無駄になったけどいいや(笑
 
前に買った中華タブレットが不調なのでまた大きな画面でAndroid4.4で遊べるようになるのは助かる。
 



行番号付きエディタっぽい奴ができた

ソースコードを綺麗に行番号付きで添付しているページをよく見かけます。
SyntaxHighlighter」を使っているらしいのですが、ソースを範囲指定しようとすると行番号も一緒になり、
行番号付きでコピペしてしまうのでとても不便です。
調べてみると、ここのやり方でソースコートを表示させると、ソースだけコピペできるので非常に便利です。
で、どうせなら、編集できる様になると嬉しい。
と云う訳で・・・
HTML5で contenteditable 属性というのが追加され、ブラウザの画面で、その部分だけテキストを編集できるそうです。
 
じゃぁ~組み合わせれば・・・・
と思って
<pre class=”brush: ruby;” contenteditable=”true”>
としてみたら、「SyntaxHighlighter」が
<pre>・・・</pre>
<div>・・・</div><div>・・・</div><div>・・・</div><div>・・・</div>・・・と変換していたので失敗。
なので

<div contenteditable=”true”>
 <pre class=”brush: ruby;”>

 ・・・

 </pre>

</div>

と<pre>部分を<div>で包んだらどうなるんだろう?
ソースの代りに、WordPressの投稿の編集「テキスト」モードから記事をコピペしてHtmlなEscapeテキストを表示してみた結果は、
まぁまぁ良い感じになりました。
でも、ちょっと遊んでみると・・・

  • 欠点1: 編集して文字を入力しても、テキスト文字の色は周囲と同じ。
  • 欠点2: 行を増やしても行番号が増えない!
  • 欠点3: 一部文字の色が真っ黒の部分(25行目付近)は悲惨!
  • 欠点4: 画面右上隅にが出る。
  • 欠点5: 最後にはグッチャグチャ(笑

って、感じです。
そうそう簡単にはいきませんよね?(爆
contenteditable との組み合わせなんて、気が付けば誰でもやるだろうし・・・
これからが楽しみだなぁ~(笑
 
参考1: ソースコードを行番号付きで、きれいに表示する「SyntaxHighlighter」の導入と使い方
参考2: [HTML5API] contentEditable 属性を使用したリッチテキストエディタの実現
 




top