tsnetworkc3.png更新日記 - 日曜プログラマのひとりごと
更新日記インデックス | 更新日記URLインデックス | 更新日記画像インデックス
+ Subscribe to RSS1.0 | + Subscribe to Atom1.0

日記: Text World | 脳髄の日記 | 第四の日記 | jscripter's Twitter | Facebook | Myspace(記事抄録や関連メモ: コメントはこちらにどうぞ)

| 先月 | Monthly Index | Timeline | iUI Monthly Category Index(Mobile版 powered by iUI)
9/29/2013 (Sun.)

また、少し気温が上がってきた。夜になっても外気温26℃。エアコンを稼働して室温28℃。今日は昼から荷物運びとテレビの設置作業で外出。夕方はiPhone 5cの予約。注文してみないと5sはいつ入るのかわからないらしい。5cは10/2には入荷とのこと。僕が使うわけじゃないけど。

pageview.cgiはhack.jsではなくmanifest.jsonを解析してリンクする方法に変更して動き始めたが、依然としてclipを動作にどのように結び付けるのかがよくわからない。

ページの構造と動作の関係を理解するためには、ページデータを調べながら、pageview.cgiを動作させてみる必要があるのだが、どのページを調べるとよかったのか、21桁の英数字のディレクトリ名ではすぐわからなくなる。各ページでpageview.cgiを起動するための簡単なpagelist.cgiを書いていたのだが、ページの構成(backingやsticker)を解析して表示するように改良した。

#!/Perl64/bin/perl.exe
use JSON;

my $server = "http://xxx.yyy.zzz.aaa/cgi-bin/enchantMOON";
my $emoondir = "X:/xxxxx/yyyyy/enchantMOON/Data/MyNotebook1";

(my $thatscript = $0) =~ s/^.+[\\\/]([^\\\/]+)$/$1/;
$thatscript =~ s/list/view/;

open my $fh, $emoondir . "/info.json" or die "Can't open it!?: $!";
my $pagesinfo = <$fh>;
close $fh;
my @pages = ($pagesinfo =~ /"(.{21})"/g);
my $page = "";

print <<"HEAD";
Content-type: text/html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<ol>
HEAD

my $json = JSON->new->allow_nonref;
my $pageinfo = "";
my %page_scalar = ();
my @stickers = ();
my $sticker = "";
my $stickerinfo = "";
my %sticker_scalar = ();
my $manifest = "";
my %manifest_scalar = ();

foreach $page (sort @pages){
	print "<li><a href=\"$server/$thatscript?page=$page\">$page</a>\n";

	open my $fh, $emoondir . "/$page/info.json";
	$pageinfo = <$fh>;
	close $fh;
	@stickers = ($pageinfo =~ /"(.{21})"/g);
	print "<ul>\n";
	foreach $sticker (@stickers){
		if(open my $fh, $emoondir . "/$page/$sticker/manifest.json"){
			$manifest = <$fh>;
			close $fh;
			$manifest_scalar{$sticker} = $json->decode( $manifest );
			print "\t<li>$sticker: linked_pages: $manifest_scalar{$sticker}->{linked_pages}->[0] Block: $manifest_scalar{$sticker}->{blocks}->[0]->{variables}->{name}\n";
		}else{
			open my $fh, $emoondir . "/$page/$sticker/info.json" or die "Can't open it!?: $!";
			$stickerinfo = <$fh>;
			close $fh;
			$sticker_scalar{$sticker} = $json->decode( $stickerinfo );
			if($sticker_scalar{$sticker}->{strokes}->[0]){
				print "\t<li>$sticker: has not manifest.json. Perhaps, a backing.\n";
			}else{
				print "\t<li>$sticker:  Perhaps, a backing, but info.json has not strokes. Empty!!!\n";
			}
		}
	}
	print "</ul>\n";
	@stickers = ();$sticker = "";
}

print <<"BODY";
</ol>
</body>
</html>
BODY

JavaScriptにclipという関数があるので、その仕様を参考にして一応形式的に実装してみたのだが、描画の他の要素との関係をどう記述すればよいのかまだよくわからない。動くことは動くので、pageview.cgiも一応載せておくか。linked_pagesのデータは完全に生かすことができたが、描画の状態は前と同じ。

#!/Perl64/bin/perl.exe

use CGI qw(:cgi);
use JSON; # imports encode_json, decode_json, to_json and from_json.
 
my $server = "http://xxx.yyy.zzz.aaa/cgi-bin/enchantMOON";
my $emoondir = "X:/xxxxx/yyyyy/enchantMOON/Data/MyNotebook1";

(my $thisscript = $0) =~ s/^.+[\\\/]([^\\\/]+)$/$1/;
my $page = param('page');
unless($page){
	$page = "0PQQ21081376620923240";
}
my $pageinfo = "";
my @stickers = ();
my $sticker = "";
my $stickerinfo = "";
my $manifest = "";

open my $fh, $emoondir . "/$page/info.json";
$pageinfo = <$fh>;
close $fh;

@stickers = ($pageinfo =~ /"(.{21})"/g);

my $json = JSON->new->allow_nonref;
my %info_scalar = ();
my %manifest_scalar = ();

foreach $sticker (@stickers){
	open my $fh, $emoondir . "/$page/$sticker/info.json" or die "Can't open it!?: $!";
	$stickerinfo = <$fh>;
	close $fh;
	$info_scalar{$sticker} = $json->decode( $stickerinfo );
	if(open my $fh, $emoondir . "/$page/$sticker/manifest.json"){
		$manifest = <$fh>;
		close $fh;
		$manifest_scalar{$sticker} = $json->decode( $manifest );
	}
}

print <<"CANVASTOP";
Content-type: text/html

<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="UTF-8">
<style>
body {
	widht: 100%;
	background: #000000;
}

.footer {
	font-size: 80%;
	color: white;
	text-align: right;
	margin-top: 10pt;
	text-align: right;
}

.footer a {
	color: white;
	text-decolation: none;
}

#canvas {
    border: 0px;
    padding: 0p;
}

#frame {
    display: hidden;
    border: 0px;
    padding: 0p;
}

</style>
</head>
<body>
<div style="width: 768px; margin: auto;">
    <div id="frame">
	  <canvas width="768" height="1024" id="canvas"></canvas>
    </div>
</div>
CANVASTOP

my $strokecolorhex = "";
my $clipcolorhex = "";
my $backcolorhex = "";
my $linked_page = "";
my $c = 0;
my $s = 0;
my $i = -1;
my $j = -1;
my $c2 = 0;
my $s2 = 0;
my $k = -1;

foreach $sticker (keys %info_scalar){
	while($info_scalar{$sticker}->{strokes}->[++$i]){

print <<"STROKEBEGIN";
<script>
window.addEventListener("load", function(){
	var canvas = document.getElementById("canvas");
	var context = canvas.getContext("2d");
	context.beginPath();
STROKEBEGIN

		while($info_scalar{$sticker}->{strokes}->[$i]->{data}->[++$j]){
			++$c;++$s;
			if($s == 1){
				print "context.moveTo($info_scalar{$sticker}->{strokes}->[$i]->{data}->[$j],";
			}elsif($c == 1){
				print "context.lineTo($info_scalar{$sticker}->{strokes}->[$i]->{data}->[$j],";
			}elsif($c == 2){
				print " $info_scalar{$sticker}->{strokes}->[$i]->{data}->[$j]);\n";
			}elsif($c == 3){
				print "context.globalAlpha = $info_scalar{$sticker}->{strokes}->[$i]->{data}->[$j];\n";
				$c = 0;
				next;
			}
		}
		$c = 0;$s = 0;$j = -1;
		($strokecolorhex = sprintf "%X", $info_scalar{$sticker}->{strokes}->[$i]->{color}) =~ s/^FFFFFFFFFF(\w{6})$/"#$1"/;

print <<"STROKE";
	context.strokeStyle = $strokecolorhex;
	context.lineWidth = $info_scalar{$sticker}->{strokes}->[$i]->{width};
	context.stroke();
}, false);
</script>
STROKE

	}
	$i = -1;

	if($info_scalar{$sticker}->{clip}->{data}->[0]){
		if($info_scalar{$sticker}->{color} < 0){
			($backcolorhex = sprintf "%X", $info_scalar{$sticker}->{color}) =~ s/^FFFFFFFFFF(\w{6})$/"#$1"/;
		}else{
			$backcolorhex = "#FFFFFF";
		}

print <<"CLIPBEGIN";
<script>
window.addEventListener("load", function(){
	var canvas = document.getElementById("canvas");
	var context = canvas.getContext("2d");

	context.beginPath();
	context.rect($info_scalar{$sticker}->{x}, $info_scalar{$sticker}->{y}, $info_scalar{$sticker}->{width}, $info_scalar{$sticker}->{height});
	context.fillStyle = $backcolorhex;
	context.fill();

	context.beginPath();
CLIPBEGIN

		while($info_scalar{$sticker}->{clip}->{data}->[++$k]){
			++$c2;++$s2;
			if($s2 == 1){
				print "context.moveTo($info_scalar{$sticker}->{clip}->{data}->[$k],";
			}elsif($c2 == 1){
				print "context.lineTo($info_scalar{$sticker}->{clip}->{data}->[$k],";
			}elsif($c2 == 2){
				print " $info_scalar{$sticker}->{clip}->{data}->[$k]);\n";
			}elsif($c2 == 3){
				print "context.globalAlpha = $info_scalar{$sticker}->{clip}->{data}->[$k];\n";
				$c2 = 0;
				next;
			}
		}
		$c2 = 0;$s2 = 0;$k = -1;
		
		($clipcolorhex = sprintf "%X", $info_scalar{$sticker}->{clip}->{color}) =~ s/^FFFFFFFFFF(\w{6})$/"#$1"/;
		
print <<"CLIP";
	context.closePath();
	context.strokeStyle = $clipcolorhex;
	context.lineWidth = $info_scalar{$sticker}->{clip}->{width};
	context.clip();
}, false);
</script>
CLIP

	}

	if($info_scalar{$sticker}->{image}){

print<<"IMAGE";
<script>
window.addEventListener("load", function(){
	var canvas = document.getElementById("canvas");
	var context = canvas.getContext("2d");

	var img = new Image();
	img.src = "/enchantMOON/Data/MyNotebook1/${page}/${sticker}/$info_scalar{$sticker}->{image}";
	img.onload = function() {
		context.drawImage(img, $info_scalar{$sticker}->{x}, $info_scalar{$sticker}->{y});
	};
IMAGE

		if($manifest_scalar{$sticker}->{linked_pages}->[0]){
#			print $manifest_scalar{$sticker}->{linked_pages}->[0],"\n";
			if($manifest_scalar{$sticker}->{linked_pages}->[0] =~ /^[\w\d_]{21}$/){
				$linked_page = "$server/$thisscript?page=$manifest_scalar{$sticker}->{linked_pages}->[0]";
			}else{
				$linked_page = "$manifest_scalar{$sticker}->{linked_pages}->[0]";
			}

print <<"ACCESS";
	canvas.addEventListener("mousedown", mouseDownListner, false);
	function mouseDownListner(e) {
		var rect = e.target.getBoundingClientRect();
		mouseX1 = e.clientX - rect.left;
		mouseY1 = e.clientY - rect.top;
		if (mouseX1 > $info_scalar{$sticker}->{x} && mouseX1 < $info_scalar{$sticker}->{x} + $info_scalar{$sticker}->{width}) {
			if (mouseY1 > $info_scalar{$sticker}->{y} && mouseY1 < $info_scalar{$sticker}->{y} + $info_scalar{$sticker}->{height}) {
		    		location.href = "$linked_page";
			}
		}
	}
ACCESS

			$linked_page = "";
		}

print <<"IMAGEEND";
}, false);
</script>
IMAGEEND

	}

}

print <<"CANVASEND";
</body>
</html>
CANVASEND

enchantMOON解説本はAmazonで予約した。それはともかく、上のCGIを動作させるには、enchantMOONにUSB接続してDataディレクトリ以下をコピーして、ローカルサーバーの適当なディレクトリに格納する必要がある。原理的には同一の仕様を持つデータを生成して格納すればよいのだけど、それにどこまで意味があるのかは定かでない。おそらく、ページ情報と他の情報をリンクさせる拡張の方がおもしろいと思う。今は空のstorage.jsonにデータが入るようになればおもしろいのかもしれない。明日、MOONPhase 2.6.0が出るらしいが・・・

更新: 2013-09-29T23:17:47+09:00
9/28/2013 (Sat.)

iOS 7をiPad 2にインストールした。なかなか明るい。好きになったね。アプリの動きもよいみたい。一番よかったのは、アップデートがスムースになったこと。以前はアプリが多くなったせいか、アプリを一度にアップデートできなくなっていた。iOS 7からは問題なくできた。

iPadに純正の明るいグリーン(黄緑)のソフトカバーを付けているんだが、汚れが付きにくいこともいいねえ。消しゴムでこすったり、ティッシュに水を付けて拭いたりするとよく汚れが取れる。黒ずみや汚れは覚悟していたのだが、こういうところが使用感の向上につながるんだね。

なぜか最近、iCloudのコントローラーがWindowsにも載った。iCloudではiWorkが動くが、今のところ英語版で日本語は使えないことになっている。もっとも、今のところWindows用のSafariの最新版は5.1.7のままで、iWorkはサポートされない。Chromeバージョン 29.0.1547.76 mではPagesの日本語入力が見えないが、Firefox 24.0で見るとHelveticaフォントで見えるし、入力も可能だ。いずれ、SafariのWindows用最新版が発表されるのかもしれない。Windowsは簡単には衰退しない。ユーザー数を増やすためには、Macで攻めるより、iPhone/iPadで攻めるほうが効果的だ。トロイの木馬として、iCloudを使うのか、Safariを使うのか興味深い。今の時代なら、iCloudだけで十分かな。試してみるとIE10でもiCloudは動作する。IE用のiCloudプラグインが既に準備されていた。

アップルは地道にユーザーの視点に立って何をやればよいか考えている。iTunesも徐々にWebに移行していくのだろう。今はデスクトップがWebと融合する過程にある。モバイルデバイスの発展とともにユービキタス・コンピューティングの時代が訪れる。

更新: 2013-09-29T08:12:05+09:00

久しぶりに集中してスクリプトを書いた。行き着く先はまだよく見えないが、おもしろいことになりそうな予感がする。enchantMOONのMOONPhase OSを通して、JavaScriptでOSを作るという新しい考え方やテクノロジーを吸収できそうだ。

pageview.cgiというenchantMOONのデータをWebブラウザ上に表示するスクリプトを書いた。hack.jsにlocation.replaceのデータがある場合は、ページ間にリンクを張ることができる。

#!/Perl64/bin/perl.exe

use CGI qw(:cgi);
use JSON; # imports encode_json, decode_json, to_json and from_json.
 
my $server = "http://xxx.xxx.xxx.xxx/cgi-bin/enchantMOON";# localserverのCGIディレクトリ
my $emoondir = "X:/xxxxxx/yyyyy/enchantMOON/Data/MyNotebook1";# enchantMOONページデータディレクトリ

(my $thisscript = $0) =~ s/^.+[\\\/]([^\\\/]+)$/$1/;
my $page = param('page');
unless($page){
	$page = "0PQQ21081376620923240";
}
my $pageinfo = "";
my @stickers = ();
my $sticker = "";
my $stickerinfo = "";
my $hackinfo = "";
my %stickerdata = ();

open my $fh, $emoondir . "/$page/info.json";
$pageinfo = <$fh>;
close $fh;

@stickers = ($pageinfo =~ /"(.{21})"/g);

my $json;
my %perl_scalar = ();

foreach $sticker (@stickers){
	open my $fh, $emoondir . "/$page/$sticker/info.json" or die "Can't open it!?: $!";
	$stickerinfo = <$fh>;
	close $fh;

	$json = JSON->new->allow_nonref;
	$perl_scalar{$sticker} = $json->decode( $stickerinfo );
	
	if(open $fh, $emoondir . "/$page/$sticker/hack.js"){
		$hackinfo = <$fh>;
		if($hackinfo =~ /location.replace\("([^"]+)"\);/){
			$stickerdata{$sticker} = $1;
			$stickerdata{$sticker} =~ s/^page:\/\/(.+)$/$server\/$thisscript\?page=$1/;
		}else{
			$stickerdata{$sticker} = "$server\/$thisscript\?page=$page";
		}
		close $fh;
	}else{
		$stickerdata{$sticker} = "";
	}
}

print <<"CANVASTOP";
Content-type: text/html

<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="UTF-8">
<style>
body {
	widht: 100%;
	background: #000000;
}

.footer {
	font-size: 80%;
	color: white;
	text-align: right;
	margin-top: 10pt;
	text-align: right;
}

.footer a {
	color: white;
	text-decolation: none;
}

#canvas {
    border: 0px;
    padding: 0p;
}

#frame {
    display: hidden;
    border: 0px;
    padding: 0p;
}

</style>
</head>
<body>
<div style="width: 768px; margin: auto;">
    <div id="frame">
	  <canvas width="768" height="1024" id="canvas"></canvas>
    </div>
</div>
CANVASTOP

foreach $sticker (keys %stickerdata){

	if($stickerdata{$sticker}){

print <<"IMAGE";
<script>
window.addEventListener("load", function(){
	var canvas = document.getElementById("canvas");
	var context = canvas.getContext("2d");
	var img = new Image();
	img.src = "/enchantMOON/Data/MyNotebook1/${page}/${sticker}/background.png";
	img.onload = function() {
		context.drawImage(img, $perl_scalar{$sticker}->{x}, $perl_scalar{$sticker}->{y});
	};

	canvas.addEventListener("mousedown", mouseDownListner, false);
	function mouseDownListner(e) {
		var rect = e.target.getBoundingClientRect();
		mouseX1 = e.clientX - rect.left;
		mouseY1 = e.clientY - rect.top;
		if (mouseX1 > $perl_scalar{$sticker}->{x} && mouseX1 < $perl_scalar{$sticker}->{x} + $perl_scalar{$sticker}->{width}) {
			if (mouseY1 > $perl_scalar{$sticker}->{y} && mouseY1 < $perl_scalar{$sticker}->{y} + $perl_scalar{$sticker}->{height}) {
		    		location.href = "$stickerdata{$sticker}";
			}
		}
	}
}, false);
</script>
IMAGE

	}

}

my $strokecolorhex = "";
my $c = 0;
my $s = 0;
my $i = -1;
my $j = -1;

foreach $sticker (keys %perl_scalar){
	while($perl_scalar{$sticker}->{strokes}->[++$i]){

print <<"STROKEBEGIN";
<script>
window.addEventListener("load", function(){
	var canvas = document.getElementById("canvas");
	var context = canvas.getContext("2d");
	context.beginPath();
STROKEBEGIN

		while($perl_scalar{$sticker}->{strokes}->[$i]->{data}->[++$j]){
			++$c;++$s;
			if($s == 1){
				print "context.moveTo($perl_scalar{$sticker}->{strokes}->[$i]->{data}->[$j],";
			}elsif($c == 1){
				print "context.lineTo($perl_scalar{$sticker}->{strokes}->[$i]->{data}->[$j],";
			}elsif($c == 2){
				print " $perl_scalar{$sticker}->{strokes}->[$i]->{data}->[$j]);\n";
			}elsif($c == 3){
				print "globalAlpha = $perl_scalar{$sticker}->{strokes}->[$i]->{data}->[$j];\n";
				$c = 0;
				next;
			}
		}
		$c = 0;$s = 0;$j = -1;
		($strokecolorhex = sprintf "%X", $perl_scalar{$sticker}->{strokes}->[$i]->{color}) =~ s/^FFFFFFFFFF(\w{6})$/"#$1"/;

print <<"STROKE";
	context.strokeStyle = $strokecolorhex;
	context.lineWidth = $perl_scalar{$sticker}->{strokes}->[$i]->{width};
	context.stroke();
}, false);
</script>
STROKE

	}
	$i = -1;

}

print <<"CANVASEND";
</body>
</html>
CANVASEND

clipのデータの意味がよくわからない。strokeのデータとして取り扱っても意味がないようだし。次はその辺りがねらい目。今のところ、表示する画像は矩形になっている。切り取った形状がclipだと思ったのだが、描画させるとそうでもなさそうだった・・・解説本が出るそうなので買うかな。

images/2013/09/image147308.pngpaperMOON Project Phase 1 on Chrome/Windows 8 Pro

画像や線画を重ねる順序なども今後の課題になるかもしれない。



images/2013/09/image78222.pngOn Safari/iPad 2

09/03/2013: [ロック] 最近の気になることから: iTunes FestivalのSigur Rósのメモ



更新: 2013-09-28T21:34:10+09:00

ああー、週末だ。えーっ。毎日、必死になって考えている。自由な発想で。自分が感じるままに。帰宅時の外気温は23℃から21℃に下がる。今朝は車を走らせていると20℃から19℃に下がった。窓を開けていると室温27℃。快適。毎日、夜は少しずつスクリプトを弄っている。

enchantMOONに刺激を受けた。元々、Webブラウザ上にローカルのCGIでOSのようなものを構築してきた。HTMLは基本的には自由だ。そこが好きだが、なかなかデザインに到達しないもどかしさがあった。enchantMOONは一定のサイズのcanvasにノートのページを表現する。制約がデザインを生み出す。タブレットなどのモバイルデバイスは画面サイズの制約が大きい。そこに通じているのだが、デスクトップをWebブラウザのページにどう表現するのかという課題を追究してもよいなと思う。iUIでモバイルデバイス用の画面の提供も試みているが、もっと独自なものを生み出したいと考えている。目的は、もっと自在に自分の日記を読みたいということに過ぎないのだけど。

9/23/2013 (Mon.)

iFixitが「iPhone 5s」「iPhone 5c」の分解レポートを公開 | マイナビニュースネタ。詳しくはiPhone 5s Teardown - iFixitを見よ。

いろいろあるが、RAMは1GBのままらしい。RAMはLPDDR2からLPDDR3にアップグレードしていると想像されており、そうであれば、転送速度は早く、低消費電力となる。64bit desktop-class architectureの真価は徐々に発揮されてくるという感じかな。正確な分解調査結果にはもう少し時間を要する。

昨晩、NHKで「神の数式」の続きを見た。朝書くのに十夜一冊とはと思うが、まあいいか、時空は連続しておると投げ遣り。「神の数式」のストーリーは、レオナルド・サスキンド著「ブラックホール戦争 スティーヴン・ホーキングとの20年越しの闘い」(日経BP社、2009年、原著: 2008年)に準拠しているように思えた。

昨晩の話は、ひも理論の方程式から一般相対性理論と量子力学の方程式の両方が導かれるという話とブラックホールの持つ熱がポルチンスキーのDプレーンにおけるひもの絡み方(状態)によって生じているという話が記憶に残った。

しかし、1995年に、ジョーはDプレーンがひも理論の大きな数学的な欠点を埋めることに気づいた。実際、Dプレーンの存在は論理と数学のますます大きくなる織物を完成するのに必要だった。さらにDプレーンは、より適切な極限ブラックホールをつくるのに必要とされながら、見つからずにいた秘密の部品だった。

(上掲書、469ページ)

ジョーとはポルチンスキーのファースト・ネームである。


更新: 2013-09-23T09:39:40+09:00
9/22/2013 (Sun.)

iOS 7、端末別使える・使えない機能一覧チャート : ギズモード・ジャパンの一覧表を見ると、Apple rumored to announce iPad 5 and iPad mini 2 on Oct. 15の噂の信憑性は高いと感じる。

iPod touchの第三世代は最早iOS 5に止まったままだ。iOS 7上のiPad 2ではAirDropが使えない。iOSの進展が、次第に手持ちのデバイスの更新を迫ってくる。それぞれ、年末のお買い物 (2009/12/13)、スティーブ・ジョブズの夢 (2011/10/09)の頃に購入したのだが、iPod touchは来年の年末でようやく5年のお付き合い、iPad 2はまだ2年しか経っていないということになる。

さてさて、実用上、買い替える必然性は今のところ少ない。ネタとして大騒ぎする材料としてはもってこいなのだが・・・更新日記を「Apple TV」で検索すると、Apple TV on BRAVIA (2010/11/26)で購入したことがわかった。iPad 2の1年前。MacBookでは我が家にMacがやってきた (2010/02/03)の記事が出てきた。iPod miniがiPod mini の世界 (2005/06/23)。

次の大変化は64bitのCPUと相変化型不揮発性メモリの結び付きによって起こるはずだ。DARPAから5億7千万円の資金援助を受ける、従来の1000倍速く画像を処理可能となるコンピュータとは - GIGAZINEのような記事が指し示している。今後は、Memristorをフォローする必要がある。【後藤弘茂のWeekly海外ニュース】AppleがiPhone 5sの「A7」でモバイルARM 64-bit一番乗り - PC Watchの記事も「さらに遠地点を見ると、新不揮発性メモリ時代に備えたメモリ空間の拡張という意味もある。現在はDRAMのワークメモリが不揮発性になり、ストレージとワークメモリが地続きになると、モバイルデバイスに搭載された数十GBあるいは数百GBのメモリを全てアドレスする必要が出る。その場合は、64-bitアーキテクチャが必須となる。」と言及している。

「iOS 7」が告げる「モバイルネットの新時代」 ≪ WIRED.jpは、誰もがモバイルデバイス上に「デジタルのホーム」を作り始めているとして、「PCの終焉」(The PC Market Isn't Dead Yet, but It's Barely Breathing - Barrons.com)を告げている。しかしながら、モバイルもデスクトップも融合する時代がいずれ訪れる。単に情報を表示するディスプレイのサイズや入力装置の違うだけの時代が・・・既にdesktop-class architectureを持つiPhoneのAirPlay Mirroringは普通のPC/Macのディスプレイ描画に匹敵する内容を持っている。

iPad 2/iOS 7のAirPlay MirroringをBRAVIA/Apple TVに映して操作すると快適だ。AirPlay - Wikipedia, the free encyclopediaにはまだリストされていないが、AirPlay Mirroring on Android coming soon courtesy CyanogenModのような話題もある。Androidへの実装にはライセンスが必要だと思われるが・・・

更新: 2013-09-22T19:43:15+09:00

NHKで「神の数式」をたまたま昨晩途中から見た。昨日は対称の自発的破れ、ヒッグス粒子、標準理論まで。今晩は超弦理論まで、今はひも理論と言うことが多いと思うが、進むらしい。ブライアン・グリーンの「隠されていた宇宙」の上巻を昨晩読了。ここまでは僕は復習だったが、一般性相対性理論と量子力学の統合、インフレーション宇宙論、宇宙定数、ひも理論・M理論の余剰次元、カラビ=ヤウ図形、ランドスケープ多宇宙まで進んだ。丁寧な手抜きのない、ある意味わかりやすい説明だが、多宇宙がどのような存在なのか、わかったようなわからないような気持であることは変わらない。四次元世界の認知能力しかない人間の理解を越えている。

上巻の最後のページの最後の項のタイトルは「これは科学か?」である。現実を理解しようとする努力が「ランドスケープ多宇宙」という実証できない理論を生み出している。下巻はここからスタートする。ミチオ・カク著「パラレル・ワールド 11次元の宇宙から超空間へ」(NHK出版、2006年;原著: 2005年)とレオナルド・サスキンド著「宇宙のランドスケープ 宇宙の謎にひも理論が答えを出す」(日経BP社、2006年;原著初版: 2005年)を読んで、物理学の到達点が実験によって証明できなくなったことを大変残念に思っていたわけだが、さて、どうなるのだろう。ランドスケープの量子トンネル現象がキーワードになるのか・・・別の夜にまたお会いしましょう。

9/21/2013 (Sat.)

おととい、iOS7をiPad2に早速インストールしてみた。最初は応答が鈍い感じがしたが、次第に早く動き出したような気がする。背景画像は暗いものは合わないのでAppleが準備しているものに交換。馴染のないアイコンに最初は違和感を感じたが、次第に慣れてくる。直感的には前よりよくなったような気がする。

Apple TVソフトウェアもアップデートが今朝あった。時間帯の設定が自動設定が切れていて、クパティーノのままになっていた。新しいところは、MusicからiTune Storeで音楽やミュージックビデオを購入できるようになったこと。Podcastが新しくなって、iCloudフォトが追加された。米国ではiTunes Radioが出たらしい。少しずつだが便利になる。

今のところ、Apple TVの主要な用途は「ミュージックでiCloud経由で購入済みの音楽を聴く」、「コンピュータのホーム・シェアリングでPCやMacなどのiTunes上の音楽を再生する」、「ムービーで映画をレンタルする」、「Apple EventsあるいはiTunes Festivalを視聴する」ぐらいである。その他、PodcastやYouTubeを視聴することもあった。

iPad2/iOS7を今日一日使っているとバッテリーの消費が速い感じ。もう50%を切ってしまった。まあ、こんなもんかな・・・今日は、Sound & Recordingsのフリー版を読んだ。録音や音の合成もコンピュータの進化と密接に結びついている。ストアに日本語雑誌が増えているねえ。Newsstandアプリで購読する仕組みだけど、フリー版は少ない。サンレコのフリー版は昨年の古い記事から最近のものまで混ぜて構成している。坂本龍一と中田ヤスタカの対談、戸田誠司の「そこのにいさんどこ向いているのよ」のiPhoneアプリ「hibiki」の話など読み応えがある記事が多いと思った。今時の音楽クリエータには必須の情報源なのだろう。他のオーディオやITの雑誌をダウンロードしてみたが、立ち読み機能があればいいほうで、まったくサンプルさえもないものがあって、知っている雑誌だけど興醒めですぐ削除。フリー版があるからといって購読するわけではないけど。

更新: 2013-09-22T11:11:15+09:00

New ASUS PadFone Infinity unveiled, sporting Snapdragon 800 as expected - Android Communityをチェック。PadFoneとドッキングステーションで880ドル。

これでは選択肢から外れるね。よく考えると片方のディスプレイを使うときは片方が死んでしまうので、効率が悪い。二重投資のコスト高になってしまう。

デュアルディスプレイ的に使うことも考えるとよいかも。ダイナミックディスプレイの概念はおもしろいので、もっと意味のある使い方に発展するとよい。

9/16/2013 (Mon.)

画像をcanvasに表示できるようになったので、ストロークデータによる線描と組み合わせれば大雑把にはページを再現できる。取り敢えず、strokesのx-y軸データを切り出して、Calcに読み込ませて散布図のグラフを書かせてみた。y軸で反転しているが、座標の点がつながって表示されるので、滑らかに描画するために十分な数の点座標が保存されていて、stroke単位で単にmoveTo()とlineTo()でつないでいけばよさそうとの感触が得られた。

こういうことでもなければ真剣にcanvasの描画について考えない。適当にページを書いているとbackingとstickersのストロークの区別があまりないような気がするけどね。一応、画像と線描を重ね合わせて表示できるようになった。おそらく、後は、clipのストロークデータと重ね合わせ方、透明性、色、線の太さとかを考慮すれば見掛けは同じページを作り出せるだろう。

「iPhone 5c」の第一印象--カラフルな外観の新端末に触ってみた - CNET Japan「iPhone 5s」を触ってみた--ゴールドモデルが加わった新「iPhone」の第一印象 - CNET Japanネタ。適切な評価記事を遅ればせながら眺めてみた。大体イメージ通りの評価。

5cについてはプラスチック筐体表面のタフネスがどうかとまず考えてしまう。第二世代のiPod touchを購入した時、工芸品の様なメッキ仕上げに途惑ったものだ。予想通り、カバーを装着するまでに細かな傷が一杯付いた。5でさえ、黒の筐体はかなり傷だらけになるらしい。アップルが純正のカバーを出しているということは、カバー装着は必須だということだと思う。同時に購入して迷うことなく装着するのが吉だろう。

Apple純正の5c用穴あきカバーもおしゃれだが、見える部分が考慮されていないとの批判も出ていたね。iPhoneのhonが覗いていて、「non」に見えちゃうんだよね。まあ、そこまで気にするかという感じはするが。穴あきも滑り止めになっていいのではと思うけどね。色も組み合わせるとおもしろいと上記記事には出ていたが、なるほどと思った。

ソフトバンクは旧機種の残金は割引と言っているから娘は当然買い替えるだろうなあ。他の家族も機種変で買うかもしれない。僕は5sのカメラには多少興味があるけど、まあねえ、当面パスかな。今のところモバイルデバイスの機能にはそれほどの期待はない。ブラウザなどのアプリが動けば十分。本当に必要なのはコマンドラインやサーバーを動かすことができるかどうかなんだよね。

僕が期待しているのは、Mozilla Festival in Tokyo 2013にあるようなFirefox OSの方向性なんだけど、少なくともiOSには有り得なさそうだし、Androidでも簡単には実現しそうもない。早くハードウェアが欲しいけど、自分で作るしかないのかな。


今朝早く、京都・滋賀・福井に大雨特別警報が出た。関東の埼玉熊谷、群馬みどり市では深夜に突風被害。桂川は氾濫。福井小浜では橋が流れていた。京都・福井は大雨警報に切り替えられたが、近畿は停電も。大阪・堺には大和川氾濫の危険で避難勧告が出たらしい。台風は日本の中心部を縦横断する経路で北上している。

広島市は午前11時を過ぎて快晴だが、風が強い。時折、強い風が吹き抜けていく。滋賀も大雨警報に切り替わった。一時ツイッターで桂川の氾濫映像と一緒に金閣寺が危ないとのライブカメラ映像が流れたが、大丈夫。調べてみると大和川は流域各地点のライブカメラ映像を見ることができる。通常の状況と対比して見ることができるのでよくわかる。

中心気圧は975hPa程度なのだが、規模が大きいから、総エネルギー量は大きいのだろう。被害が大きい。関東・甲信越・東北はこれから、北海道も影響を受けそうだ。広島は強風・波浪注意報が出ている。

9/15/2013 (Sun.)

タブレットで4GBのメモリを搭載しているものを検索してみると、マイクロソフトの「Surface Pro 128GB 5NV-00001」が引っ掛かってくる。64bitのWindows 8 Proが載っている。128GBのSSDとOffice Home and Business 2013を搭載して、8万円台で売られている。

ASUSの「Transformer Book T100の32GBモデル」はOffice Home and Student 2013が付属しながら、349ドルという低価格で提供されるが、メインメモリは2GBだし、32bitのWindows 8だ。Surface Pro 128GBの現行価格対比で見れば、それほど凄いというわけでもない。

iOS 7が64bit化して、iPhone 5Sに搭載されたことは何度も書いているが、はて、メモリは4GBでなければなんであろうと思う。desktop-class architectureとはなんだろう。現在の競合機種とのスペック比較表を見つけたので、他の有用なリンクと一緒に残しておこう。現行最大のメインメモリを搭載しているのはGalaxy Note 3で3GBである。

iPhoneシリーズのスペックの推移を見るにはWikipediaが便利。iPhone 5とiPhone 5sを比較すると、112gの重さ、サイズも変わらない。従って、メインメモリは1GBのままだろうと誰もが予測しているだろう。分解結果が楽しみ。

Apple TVも9/18に同時にアップデートするらしいが、何があるんだろうねえ。楽しみではある。日本語の記事も出ている。「Apple TV」のソフトウェア、9月18日にアップデートか - CNET Japanなどを参照。

いろいろな動きがあって製品が出たとしても購買に結び付くかどうかは別問題。もう山ほどタブレットは持っているし、デスクトップはメインメモリ16GBで2TBのハードディスク+32GB-SSD搭載だ。グラフィックスボードにも2GBの専用メモリがある。Apple TVもあるし。要はデバイスを使って何をするかが問題なのだ。

enchantMOONもMOONPhaseの2.6.0を出すらしい。シール画像が他のページに出現するバグは修正されるとのこと。Issue Trackerの項目も100を超えた。どこまで問題は解決されるのか。

更新: 2013-09-16T08:19:37+09:00

Ubiquitous Computingの概念は、Desktop Computingの概念と対立するものとして登場したのだが、遍く存在するコンピュータが、単なるセンサーに毛が生えてネットワークにつながったようなものから、コンピュータそのものをイメージできるようになったのは、iPhoneやAndroidを基軸としたモバイルデバイスの発展であり、Raspberry Piのようなモジュール的なシングルボード・コンピュータの登場によるものである。

「Ubiquitous Desktop」という用語を最初に使ったのは僕ではなさそうで、ググるとIEEE Xplore - Ubiquitous desktops with multi-factor authenticationが見つかった。ちょっと概念的に意味合いが異なる。

むしろ、僕のイメージは単純で素朴なものだ。Asus showcases PadFone Dynamic Display feature for Android - Liliputingのようなものを見ると小さなデバイスもデスクトップを拡張でき、実用的な意味で本物のデスクトップになることがわかる。これには「Dynamic Display」という名称が付いている。

問題は同じソフトウェア、デスクトップ環境が使えるかということ。まずはASUS PadFone Infinity ready for lift off again in ASUS teaser video - Android Communityの発表を見ようか。これはどうみてもAndroidのようだが・・・

もちろん、Webブラウザをデスクトップとして使うアイデアは既にある。基本的にはブラウジングに大きな重点が置かれていて、開発ツールのデスクトップ環境とは言えない。当然、OSフルセットのデスクトップが真の意味でのUbiquitous Desktopには必要なのである。

更新: 2013-09-15T18:04:51+09:00

5年前にはAppleがゲームチェインジャーだった。つい最近までそう思われていた。それにGoogleが加わった。Amazonも機を窺っている。しかし、次第に台湾・中国の存在感が高まっている。最初は製造拠点としてであったが、具体的にモノが作れるということは、設計、スペックやデザインにも関与できるようになるということだ。製造経験が蓄積され、設計の要素が標準化され、技術が成熟してくると、製造する側に多かれ少なかれパワーシフトが起こる。

前の記事に見たようにWintelが復活すれば、最大のどんでん返しだが、それも5年単位で起こる現象だ。もちろん、ASUS PadFone Infinity ready for lift off again in ASUS teaser video - Android Communityをまずチェックすることが重要になるだろう。Windows PhoneやFirefox OSがどのような位置づけになっていくのかはまだ見えていない。モバイルにIntelが載れば、いずれ電話でもWindowsそのものが動くということになるだろう。

もちろん、ASCII.jp:「Windows Phone 8」スマホが、日本に上陸する日 (1/2)|マイクロソフト・トゥディにも注目だ。

「Post PC」という言葉が最早無意味になるか・・・「ユービキタス・デスクトップ(Ubiquitous Desktop)」の時代になる。

更新: 2013-09-15T12:34:53+09:00

【イベントレポート】ASUS、Atom Z3740搭載2-in-1 PC「Transformer Book T100」を発表 〜米国ではOffice付きで349ドルから - PC Watchネタ。いや、iPhoneの半額、enchantMOON並^^;)

思わず重量情報を確認したね。項目のタイトルに入っていた。本体550g、ドッキング時1kg。軽い。IDF13 San Franciscoの出来事。Intelの進化でWindows復活の兆し。ASUSの2-in-1デバイスの価格は驚異的な数字を示していて、他のデバイスは霞んでしまいそうだ。10インチのタブレットでもあるわけだから、iPad対抗製品でもある。

Tim Cook Apple CEOがiPhone 5Sは64bit CPU A7を搭載した世界最初のdesktop-class architectureだと主張したのはこれを意識していたんだね。【イベントレポート】【基調講演編】Windows 8.1、Android、Chrome OSなどに対応した製品を多数発表 - PC Watchによれば、Bay Trailの64bit対応は来年第一四半期になる。

ASUSの低価格タブレットの製造技術が、Wintelを救う時代になったのかもしれない。iOSやAndroidデバイスと対比しても競争力のある価格でWindowsがモバイルデバイスに搭載できるようになった。過去20年、メインフレームやワークステーションの歴史が上から降りていくのは難しいことを証明していたのだが、ハードウェアの進化が凄まじく、PCにおいては転換点が近づいている。Mac OS XとiOSの融合の時期も近づいているのだろうが、64bitのOSを2GB程度のメモリで使うのはもったいないという感じがしないでもない。iPhone 5Sの搭載メモリはいくらだろう。分解記事が待たれる。

ASUSのホームページの製品群はとんがっている。最早、米国だけが新しいコンピューティング・デバイスを生み出すわけではない時代に入ったかもしれないと思わせた。iOSやAndroidデバイスが陳腐化して見えるかもしれない。マイクロソフトも息を吹き返すのではないか。僕らは同コスト・同性能でWindowsが動くならそちらのほうがはるかに便利だし、よいと思う。自作のシステムやZedがそのまま使えるね^^)/

更新: 2013-09-15T10:44:10+09:00
9/14/2013 (Sat.)

ドコモ初のiPhone「実質0円」 先行2社追随必至、dマーケットで差別化も (SankeiBiz) - Yahoo!ニュースネタ。

さあねえ。6555円+通話料か。いろいろな割引キャンペーンがあって、5Cは32GB、5Sは16GBが実質無料になる。ドコモ攻めているねえ。

さて、仁義なき戦いが始まったということだ。差別化が難しい。どうなるんだろう。

廉価版iPhoneは中国で7万円 不満噴出「全然安くない」「腎臓売れない」 (1/4ページ) - SankeiBiz(サンケイビズ)よりは日本の方が本体価格は安いみたいだけど、通信料金の設定を考慮すると同程度なのかもしれない。情報が得られれば続報を書くだろう。

昨日は4000mと12000mの高度を飛んでいた。4000mで外気温は9℃。地上は33℃の計算になる。暑さはまだ去らぬ。熱帯夜が続いている。暑さを忘れて読み耽るには少し単調と感じる部分もあるが、むずかしい題材をわかりやすく説明するには必要なことかもしれない。高校生の時読んで憧れた湯川秀樹の「素粒子」以来、最も好きなカテゴリの本である。その頃はウィルソンの霧箱の素粒子の軌跡を解析するんじゃなかったかな。

上下二巻。早川書房の「数理を愉しむ」シリーズで出してくれたので、手を出しやすかった。ありがたい。「宇宙を織りなすもの---時間と空間の正体」(草思社、2009年)はまだ読めていない。「隠されていた宇宙」(早川書房、2013年)の原題は「The Hidden Reality - Parallel Universe and the Deep Laws of the Cosmos」(2011年)。「エレガントな宇宙」(草思社、2001年、原著: 1999年)の主題、ひも理論が物理学の全体を包括する究極の理論であるという意味では同じだが、極限まで思考を推し進めて、現在の到達点を示そうとしている。

ミチオ・カク著「パラレルワールド 11次元の宇宙から超空間へ」(日本放送出版協会、2006年、原著: 2005年)を読んで、物理学も奇妙な結論に立ち至ったものだなと途惑っていたわけだが、それを解きほぐしてくれる好著と見た。まだ四分の一程度までしか読んでいないのだが、まだまだ楽しめると期待される展開だ。

宇宙の謎解き、長期戦へ ヒッグス粒子、「発見」も決着は先送り (1/2) - ITmedia ニュースにあるヒッグス粒子の重要性も上巻の127ページあたりに最初に出てくる。

さて、また途中で気が向いたら何か書きつけるかもしれない。ブライアン・グリーンは物事の違いを「マーラーの交響曲第八番の終楽章と音叉の単調な音の違いほども違うのだ」(98ページ)と表現する人だ。物事とはアインシュタインの宇宙項による斥力的重力とインフレーション理論のそれだ。どちらがどちらかは言うまでもないが、マーラーの交響曲第八番の終楽章を聴いて確認してみよう。

レナード・バーンスタイン指揮ウィーンフィルの交響曲第8番の第二部を聴きながら、もっと他にもいろいろ読んできたはずだと調べ始めた。レオナルド・サスキンドの「宇宙のランドスケープ」(日経BP社、2006年、原著初版: 2005年)や「ブラックホール戦争 スティーヴン・ホーキングとの20年越しの闘い」(日経BP社、2009年、原著: 2008年)、ローレンス・M・クラウスの「超ひも理論を疑う 「見えない次元」はどこまで物理学か?」(早川書房、2008年、原著: 2005年)とジョン・W・モファットの「重力の再発見 アインシュタインの相対論を超えて」(早川書房、2009年、原著: 2008年)など。サスキンドはひも理論の研究者だが、クラウスはひも理論を批判的に見ている。モファットは修正重力理論の研究者だ。マーラーの壮大なChorus mysticusは終わった。人間の世界に廻らす思索はどこに行き着くのか、「隠されていた宇宙」に期待したい。

9/11/2013 (Wed.)

iPhone 5CとiPhone 5Sの発表イベント。Apple TVで見た。最初はiTunes Festivalの話題から入った。9/2から10/1まで30日間。100ヵ国以上の2000万の人に配信される。Lady Gagaの初日のビデオを紹介。ライブ当日からしばらくして最後のApplauseのみがクリップとして配信されていたが、昨日ぐらいから、ライブのビデオ全体がiTunes Festivalのアプリに公開されている。

一番印象に残ったのはiPhone 5SのCPUが64bitのA7であること。世界初のdesktop-class architectureと紹介した。でもRAMがいくらかは仕様にはない。もう一つはM7のモーション・コプロセッサを搭載していること。確かにゲームの表現のリアリティはなかなかのものだった。その他、カメラのスローモーションや分解写真など、グラフィックスの性能はかなり高い。16GBで2年契約で199ドル。特に中国での販売をアピール、日本ではNTTdocomoの採用もプレゼンで示された。

5Cは99ドル。CPUはA6。価格が安い理由を当然持っている。結局、CとSの違いは筐体の材質、デザインの質感、高速性とカメラの違いに要約される。

最後はエルヴィス・コステロの生演奏。予定外の曲が入って、ほとんど独演会と化した。スタンディングオベーションにまだ歌い足りないという風情で名残惜しそうにステージを去った。

iOS 7は9/18からFreeで配信。iWorks、iPhoto、iMovieはすべての新しいiOSデバイスでは無料という発表もあった。

iPod touchの新版が出るかどうか。あるいはSIM freeのiPhoneが出るのかどうか。その価格はと思った。少なくとも5Sの199ドル、5Cの99ドルという価格は低い数値なのだろうが、2年契約という前提では安いのか高いのかさっぱりわからない。次は通信費用はおいくらと聞かねばならない。Android、Firefox OSやAmazonのKindleなどとの的確な対比を読みたいものだ。

さて、新しいApple TVの登場の予想はあえなくはずれたが、新しいiPhoneの使い心地の評価を待ちたい。電話の再発明は終わったという感が深い。次は何の再発明が起こるのか。テレビか紙か・・・

うん・・・Apple TV Software Update to Arrive Alongside iOS 7 on September 18 - Mac Rumorsが出ているね。ここらへんはハードウェアの時代ではなくて、もうソフトウェアやコンテンツの時代なのだ。Tim Cook CEOが、イベントの最初にiTunes Festivalの存在をアピールしたように。

更新: 2013-09-14T10:42:18+09:00

enchantMOONデスクトップ化計画に正式名?を付けた。paperMOON Project。紙の進化形としての精神をデスクトップで受け継ごうという意図を「paper」に籠めた。なんだか儚い感じもするのだけど。

ページのリストを表示するスクリプトとページを表示するスクリプトに分けた。今のところ、ページの表示は画像のみ。Webから切り出した画像にはハイパーリンクが張られている。

ストロークによる線画表現をどうするかは、少し画像処理について勉強してから考えよう。cutmull-rom splineを使っているそうだし、既にdrawStroke.jsも発表されているが、今のところ実用的には焦る必要もない。

9/10/2013 (Tue.)

昨日は初日から疲れていて、夜9時半にはご就寝。9時間の睡眠を少し下がった気温が手助けしてくれた。今日の深夜はAppleの発表があるはずだが、Steve Jobsがいないので以前の様なワクワク感はもうない。しかしながら、僕の予想に近い記事が見つかったので、ピックアップしておこう。Why an Apple TV game console is a no-brainer | iPad Atlas - CNET Reviewsネタ。

ヨーロッパのほうのディーラーのぼやきをどこかで読んだような気がするが、新型PS Vitaの値下げが話題にならないという話だったと思う(【速報】新型PS Vitaが10月10日に1万9929円(税込)で発売。ディスプレイは液晶パネルに変更 - 4Gamer.net)。スマホやタブレットが普及した今、専用ゲームコンソールはもう話題にはなり得ないだろう。据え置きのPS4もXbox Oneもそれほど売れそうにもないという感じがする。話題にするなら、PS Vita TVだろう(【速報】PS Vita TV――テレビにつないで遊べるPS Vitaが9,954円[税込]で発売決定!【SCEJAプレスカンファレンス】 - ファミ通.com)。僕はnasneとセットで購入すると思う。

Apple TVはこれまでなぜゲームを直接サポートしてこなかったのか。答えは、Game change: iOS 7 welcoming game controllers is a big deal | iPad Atlas - CNET Reviewsにある。iOS 7はゲームコントローラをサポートするらしい。

今夜はApple TV OSの新版、Apple TV用のゲームコントローラとゲームストアの発表があってもおかしくはない。これはテレビのコンテンツホルダーにとって脅威になるかもしれない。

9/8/2013 (Sun.)

メモ用のデバイスとしておもしろいenchantMOONのデータをデスクトップで取り扱えるようにしようというプロジェクトを立ち上げた。

Dataフォルダをローカル・サーバーのhtdocsに置いて、info.jsonの持つ情報を利用して、Dataファイルシステムを辿って、画像ファイルのbackground.pngをページのHTMLに表示するCGIを書いてみた。

images/2013/09/image119438.pngpageview.cgi on enchantMOON

シールを作らないと特定のURLにアクセスできないと今頃気づく。LAN上のローカルサーバーのCGIをWebから検索するわけにはいかない。

画像をクリックするとenchantMOONのサイトに跳ぶ。単にWebページから切り取った画像の場合には、hack.jsのlocation.replace()の引数からハイパーリンクを形成している。


background.pngは矩形の画像ファイルとして保存されている。imageがあるinfo.jsonにはstrokesだけでなくclipというストロークデータがある。おそらく画像を切り取った形状が記録されているのだろう。


更新: 2013-09-08T23:00:16+09:00
9/7/2013 (Sat.)

Amazon スマホ 戦略: 無償の Kindle Phone と、衛星ワイヤレスって ホント? | Agile Cat --- in the cloudネタ。これは見過ごせない記事。

何が起こるんだろうねえ。Amazon のモバイル・ビジネス : その潜在能力を分析する | Agile Cat --- in the cloudも参照。

9/6/2013 (Fri.)

注目を集めるリアクティブプログラミングネタ。また、出たね。

豚から豹へ、いやFunctional Reactive Languageへ (2013/03/17)でちょっと取り上げたけど、やはり注目か。

高階関数とかアクターという用語を知っていても、具体的なところに到達できていない。まあ、ボチボチ行こうか。でも・・・概念よりは実践だ・・・


更新: 2013-09-07T08:56:24+09:00

一昨日は青さの残っている暗い空に蝙蝠が飛び交い、虫が盛大に鳴くのを聴きながら帰路に向かった。昨日の昼休みは塩辛トンボが舞っているのを見て、赤トンボじゃない、めずらしいなと思った。今日は朝と帰りに高積雲を見つけて秋だなと思った。日記もまとめて三日分かな。今日の最新記事から、スタジオジブリの宮崎駿監督が引退記者会見を実施、ネットでは生中継も - GIGAZINEネタ。帰りのラジオでも話題になっていた。

大体、予想通りの話だが、やはり手書きで自由に絵を描きたいのかなと思った。おそらくそれが一番楽しいことだろうなと思う。しかし、それではいずれ満足できなくなるときが来そうな気がしないでもない。

僕が宮崎駿と映画館で出会ったのは「もののけ姫」(1997年)。それから「千と千尋の神隠し」(2001年)、「ハウルの動く城」(2004年)、「崖の上のポニョ」(2008年)、そして「風立ちぬ」(2013年)だ。ジブリ作品としては「ゲド戦記」(2006年)はテレビで見たような気がするが、「借りぐらしのアリエッティ」(2010年)、「コクリコ坂から」(2011年)も映画館で見たけどね。21世紀に入って1-2年置きにジブリ作品を見ている感覚だ。初期の傑作群、「風の谷のナウシカ」(1984年)や「天空の城ラピュタ」(1986年)、「となりのトトロ」(1988年)、「魔女の宅急便」(1989年)、今見ている「紅の豚」(1992年)などをテレビで見ているし。

初期の作品群は「経済は賑やかなんだけど、では心の方はどうなんだ」と頭に来て作ったらしい。あの頃はほんとうにおかしい時代だった。それはでも今でもほとんど同じ。経済指向はいまでも同じだろう。相も変わらず、昔の夢を見ている。昔がいい、ほんとかな・・・

「監督になる前にアニメーションというものは、世界の秘密をのぞき見ること、風や人の動き、表情やまなざし、体の筋肉の動きなどに世界の秘密が隠されている、と思える仕事だとわかった。それがわかった途端に、自分の仕事が奥深く、やるに値する仕事だと思えました」は創造の本質だなあと思う。「世界を作り出せるからアニメーターになった」という言葉も以前のインタビューにあったと思う。みんな世界を生み出したいのだ。人間の本質的な衝動かもしれない。

子供にこの世の中が生きる価値があるものだと伝えることが作品の根幹にあらねばと。子供を大切にして未来を託そうとするのはアラン・ケイ(73歳)に似ているところがある。同い年か、いや、一つ若い。まだまだご活躍願いたい。

更新: 2013-09-07T00:39:06+09:00
9/3/2013 (Tue.)

しばらくenchantMOONネタで走ったので、他はおいてきぼり、昨日の埼玉越谷、千葉野田のスーパーセルによる竜巻は被害が大きかった。広島も雨が一日中降り続いている。室温も28℃を切った。エアコンの存在自体を忘れている。外部気温をチェックすると19℃。窓を開けた。風が吹き込んだ。外の冷たい空気を感じている。一気に秋の気配。久しぶりにニュースネタと思ったら、Zedが落ちたので、書きかけの二つの記事を一つにまとめる。

まずは、アップルはやっぱりTVを作る! コンテンツは薄くても、まずは形を? : ギズモード・ジャパンから。元ネタは、Apple, closer to its vision for a TV set, wants ESPN, HBO, Viacom, and others to come along - Quartz。さて、どうだろうねえ。同じ価格で通常のテレビも見れるならApple TVを買うだろうけど・・・

images/2013/09/image128732.pngiTunes Festival - シガー・ロス

トランペット・トロンボーン・ホルンの管楽器とヴァイオリンが三人、ギター・ベース・ドラムス、メイン・ヴォーカルのヨンシーは弓でエレクトリックギターを弾きながら独特の高い声で歌う。10名の大編成バンド。


Apple TVのアップデートを確認してると、偶々帰りにFMで聴いた小曽根真がビル・エヴァンスのTime Rememberedの世界観に感動して作ったというタイム・スレッドというアルバムの話を思い出して、Time Rememberedをホームシェアリングで聴き始めた。そうしているうちにiTunes Festivalが始まっていることを思い出して、アプリを起動するとSigur Rósがおおすめビデオにあったので聴き始めた。ポストロック。音楽のシリコンヴァレー: レイキャヴィック - 音楽と本を愛する (06/16/2013)で知った先端的なバンドだ。Radioheadの雰囲気につながるものがある。もっと実験的だが。

9/1/2013 (Sun.)

宮崎駿監督が引退!スタジオジブリ社長がベネチア映画祭で発表:芸能:スポーツ報知ネタ。

images/2013/09/image133205.pngジブリの熱風2013年8月号は特集「風立ちぬ」

「プロフェッショナル 仕事の流儀」、宮崎駿スペシャル「風立ちぬ」1000日の記録、映画監督・宮崎駿が8/26に放映された。

宮崎駿が体調を崩した時の庵野秀明の言葉、「死ぬなら絵コンテを完成させてください。ぼくが映画を完成させますから・・・」アニメは想像の世界すべてを具体的に生み出す必要がある。あらゆる現実の記憶から引き出され、組み立てられる想像の世界。熱風の表紙の二郎が製図を持ち帰った空っぽの部屋も現実の部屋がモデルになっているらしい。

「面倒くさいと思うこととの戦い。」いや、プログラミングもそういうところがあるね。

「おろそかに生きちゃいけないって気持ちになる・・・」どこで、菜穂子がサナトリウムを出て二郎のところに向かうというストーリーが生み出されたか。ストーリーは必然と偶然が織りなすのだ。

やはり前半と後半は違う。クライマックスは菜穂子がサナトリウムを出て二郎のところに向かってから・・・

「名古屋駅の再開の場面がクライマックス」

「ディテールしかない。ディテールこそ大切なんです。」出会いの場面をどう描くか。

「堪うる力の限りを尽くして生きる・・・」菜穂子と二郎の生き方。

「一寸先は闇でやってんだからね・・・」ストーリーもそのような生き方の中で突如として現実化する。

“宮崎駿流”アニメ製作に限界? 「引退」世界に波紋 (1/3ページ) - SankeiBiz(サンケイビズ)の記事も出た。テレビでは、カプローニ伯爵のお孫さんが泣いていたね。おじいさんがイメージ通りにアニメ化されていたことに感動していた。このお孫さんが「紅の豚」を見て、カプローニ社の社史かなにかの写真集を宮崎駿監督に贈ったのが、「風立ちぬ」の夢の場面にカプローニ伯爵が登場する切っ掛けになったのだ。このお孫さんの涙を見ていて、カプローニ伯爵も主役の一人だと思い直した。

世界は壊れつつあるのか、新しく生まれ変わりつつあるのか。経済がグローバル化し、さらにインターネットが国境を越えて国家の政治・文化・教育も変質せざるを得なくなる。

シリアでは米国の攻撃を避けて出国しようとした子連れの婦人が政治とは無関係に私たちは静かに暮らしたいだけなのにと訴える。福島の原発汚染水漏れは誰も見通しを示せない。豪雨やスーパーセルは生活を脅かす。

現実が宮崎駿監督の想像力を追い抜いてしまった。宮崎駿監督は自然災害の3.11よりはリーマン・ショックを上げた。リーマン・ショックを超えるものをアニメで描く方法論の様なものが見いだせないと感じられたのかもしれない。相手は暴走するコンピュータ・・・

更新: 2013-09-03T21:14:00+09:00

雨が止んで暗くなった道を傘を持って県病院へ向かう。うどんの太閤は混んでいるみたいだなあと思いながら。帰りもまだほとんど雨は落ちていない。太閤から人が出てくるのに出会う。これなら座れそうだ。お刺身セットをまずは注文。ビールでお疲れ様。SoundCloudにラスマス・フェイバーを見つけた - W&R : Jazzと読書の日々ネタ。

ラスマス・フェイバー - Wikipediaでまず調べる。YouTubeも「Rasmus Faber」で検索。Rasmus Faberプロデュースの「Galaxy Express 999」を見つける。アニメ関係はいろいろあるねえ。

メーテルを追いかけるイメージを重ね合わせるビデオ。Jazzだけでなく映像も凝っている。

Google や Facebook は、サーバー用の カスタム CPU に取り組むだろう | Agile Cat --- in the cloudネタ。post PCだけでなく、post Serverの現状が垣間見えてきた。

クラウドサービスのコストを握っているのはサーバーだ。如何に低コスト・高性能で動かすかが、問題だ。低消費電力のサーバーを使うのは当たり前だが、既にコンピュータは溶解しつつある。サーバーの筐体は取り払われ、解体されてラックに組み込まれている。先に見たBuild your own supercomputer out of Raspberry Pi boards | ZDNetみたいだ。メンテナンス性を含めて、もっと徹底して効率化されているように見える。PCボードは筐体に組み込むための設計にはなっていないのだろう。

こうして性能とコストの極限を追い続ける先にあるものは何だろう。パーソナル・コンピュータもクラウドの中に飲み込まれてしまうのだろうか。もうネットワークと端末しか存在しない世界になるのかもしれない。僕らのソフトウェアは生き残るが、localhostという概念はなくなるかも。

雨が降り続いている。秋雨前線。enchantMOON - Issue Tracker - Google Project Hostingがアナウンスされたので、これまで問題と感じていた点を要望事項3件とNoteページデータが壊れるバグ1件を登録した。異常な動作についてはほとんどみんなが経験しているので「一緒だね」とわかりやすい。

手書きメモツールとしての表面的な問題点は明確になったと思えるので、それは開発チームに任せて、次のステップに進む必要がある。次はプログラミング回りを見ていきたいと思うんだけど、手書きメモツールを強化するために、さて何ができるんだろうねえ。

手書きの文字列にはNoteページにリンクを作れるのだが、それはどういう仕組みになっているのだろうとHackした途端にハングしてしまった。それが異常動作報告の切っ掛けになったわけだが、ハングすると電源長押しで終了して再起動するしかないのだが、このとき正常なシャットダウンにならず、ページが壊れてしまう。壊れるというのはページにデータが表示されなくなり、サムネイル画面からdeleteするしかなくなる。これまでハングしたのもMOONBlock回りだったと思うので、プログラミングするにしても少し心配ではある。

Noteを文字列検索してリンクを自動的に貼るとかがすぐ浮かぶのだが、文字列の認識がどの程度かをもう少し調べる必要がある。現状では、手書き文字列を指で囲んで、Webをタップすると、検索文字列として何が選択されているかがわかる。試したところ、ある程度日本語は精度よく認識されているようだ。ただ、行書のような走り書きの認識は当然のことながら難しい。手書きが前提の場合、一般的なコンピューティングの常識が通用しにくい面がある。

今のところ、Noteの文字列の認識をWebの検索入力で確かめて、同じ文字列と確認されていても、Noteの検索はうまくいかないことが非常に多い。うまくいったり、いかなかったりする。

「紙の再発明」、手書きを活かした情報処理をどう発展させるかが今後の課題だろう。enchant.jsはゲームを作るプラットフォームとしてスタートしたのだが、手書きメモマシンのenchantMOONを活かすフレームワークとして拡張されることを期待している。

更新: 2013-09-01T13:55:10+09:00
| 先月 | Monthly Index | Timeline | iUI Monthly Category Index(Mobile版 powered by iUI)
2001年版 | INDEX | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2002年版 | INDEX | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2003年版 | INDEX | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2004年版 | INDEX | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2005年版 | INDEX | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2006年版 | INDEX | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2007年版 | INDEX | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2008年版 | INDEX | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2009年版 | INDEX | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2010年版 | INDEX | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2011年版 | INDEX | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2012年版 | INDEX | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2013年版 | INDEX | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8

(C)jscripter