これって絶対、セキュリティホールになるぜ。まさにバックドアだわ。正門をいくら固めても勝手口がゆるゆるならば入り放題なわけで、セキュリティ設計的には絶対に認めたくないわこんなの。まぁテロリストのみなさんにも利便性を提供しましょうってことなんだろねw
2010年12月30日木曜日
2010年12月29日水曜日
[メモ] アナロジー・バカ(馬鹿の一つ覚え)
歴史が「そのまま」繰り返すと信じて疑わない老害の戯言。AppleはもうマルチSIMに向けて動き出しているというのに、いまだにSIMフリーなんて言う周回遅れな概念しか持ち合わせが無いようだし、オープンという謳い文句を無邪気に信じているし、全く、どうしようもないよこの手合いは。
いまだにOS中心主義だしw。もうOSなんてコモディティだっつーの。"OS doesn't matter" だっつーの。こういうアホの戯言を鵜呑みにする上司が居るとね、下は苦労するんですわマジでw
2010年12月27日月曜日
[Steely Dan] ロイターもなかなか洒落た見出しを付けたもんだ
"Morph the Cat" で、もはや彼岸の人の如き境地に達していた Donald Fagen。ならば今度は「ドナルドの地獄巡り」ってとこかな。ダンテかよw
2010年12月15日水曜日
[Google] せやからChromeOS は無視ってワタシ言いましたやん〜
[メモ] 入れ喰いですな、Googleさん
去年7月の発表の時点でこんだけアラート上げといたのに、なんでまた「試作機が出るから」とかワケワカラン理由でウチの開発リストにChromeOS突っ込むんすか。ブッフハイトですら匙を投げてますねんで。えーかげんにしてくださいホンマに。
2010年11月24日水曜日
[Apple] 結局 iOS 3.2.2 にダウングレードしましたわ
[Apple] ダウングレードするしかねぇのか?
フォルダもマルチタスクもAirPrintも大歓迎なのだが、この改悪で全てブチ壊しだ。ということでダウングレードを含めた対応を検討中。
2010年11月4日木曜日
[メモ] 幾ら積まれたんだかw
読んでみたらソースは朝鮮日報。しかも統計の数字は、捏造でお馴染みのBCNからの提供。ということで「はいはいわろすわろす」で済ませておけばよろしいかと存じます。
2010年11月1日月曜日
2010年10月30日土曜日
[Apple] グローバルお財布ケータイ
腐ってもGigaOM。たまにこういったハッとさせられる記事が載るからやめられない。
噂の独自SIMに関しては「キャリアというしがらみを排除するため」という実に判りやすい報道ばかりが目につくが、この記事では、実はAppleの意図はそれだけじゃないという主張がなされている。つまりモバイルペイメントへの足がかりにしたいという意図だ。この意図をGemaltoのセキュア取引実績とAppleのNFC(Near Field Communication)関連特許というピースの組み合わせから見抜いた筆者Stacey Higginbothamの卓見には恐れ入る。
それにしてもつくづく思うのは「このゲーム、やっぱ体力あるヤツにゃ勝てねぇw」ということ。Google日本語入力が出た時にも感じた事だが、やはり基礎体力に差がありすぎるのだ。いくらジャブを打ち込んでも倒せやしない。ガラパゴスでぬくぬくしてきた者と血みどろになって殴り・殴られてきた者の差は大きい。ちなみに、言うまでもない事だが、ベンダーだけでなくユーザもそのツケは払わなければならない。
2010年10月28日木曜日
[Google] 山吹色のお菓子を使った。こうかはばつぐんだ!
[INSIDE GOOGLE] FTC wrong to end Wi-Spy probe — public entitled to full account of abuses
[INSIDE GOOGLE] FTC Closes Google Privacy Inquiry
Googleストリートビュー撮影車が「意図せずに行った」WiFiデータ盗聴に関するFTC審問会が水曜日に閉会したとのこと。とんだ茶番だな。
「わざとじゃないんだよぅ」「そうかい、じゃ、ゆるしてあげよう」
流石はオバカ政権w。2010年10月26日火曜日
[Apple] 冗談だろオイ
DARING FIREBALL でこの件を知り、我が目を疑った。どうやらあのジジィ、本気でオリエンテーションロックボタンをミュートボタンに改悪するようだ。従来通りの挙動にするオプションも無しということなので、正直、呆れている。そろそろ逃げ出す準備をしておかなきゃ駄目かな。また消去法で製品選びする時代に逆戻りかいな。たまらんでホンマ。
2010年10月23日土曜日
[メモ] 余は如何にして百合スキーとなりし乎
かの「大野加奈子の命題」については常にfalseを突き返して来た私ですが、その対である「百合の嫌いな男子なんかいません」という命題に関してtrueを返さざるを得なくなった以上、過ちは速やかに改められなければならぬということで宗旨替えと相成りました。身内の腐れな皆様、「BL(笑)」とかほざいていた私が間違っておりました、ごめんなさい、もうしません。
そういえば『さくらの境』って今になって考えてみりゃ、百合以外のなにものでもないんですな。いや、以前はそんな意識はまるで無かったんですけどね。あぁ、イーナスもそうか。竹本先生のお陰で百合スキーの素養を自然と身につけていたということなんですかね。先生の場合はNLであれ百合であれ、同じモチーフが根っこにありますから取っ付きやすかったんでしょうな。
それにしてもアレですわ、最初のうちはですね、Flash撲滅運動の一環として各出版社の立ち読みコンテンツを片っ端からテストしていたんですわ。それがですな、何故か百合スキーの覚醒へとつながったわけで、いやはや、人生とは摩訶不思議なものでございます。
[Google] うわ、かっこわるぅ〜
早い話が、メインの献金先を共和党へとシフトしたってことなんだが、ホンマに節操ないなこの会社。確かにオバマの惨状を見りゃ仕方ないかなという気もするけど、それにしても尻軽過ぎるだろ。Whore!
NetPAC設立は4年前に遡るわけだが、あのころはネット中立性を守るヒーローに思えたGoogleが今じゃこのザマ。Verizonとの一件で、ネット中立性なんてGoogleにとってはどうでも良いのだという本音が出ちゃったしね。
嗚呼、俺たちの愛したグーグルたんはもう存在しないんだな。
2010年10月22日金曜日
[Google] 合法だけどevilだね
グローバル企業の多くが手を染めている「タックスヘイブン経由による課税逃れ」をGoogleもやっているということで、早速Inside GoogleのJohn Simpsonも噛み付いていた。まぁ内容的には良くある話なので目くじら立てる必要も無いっちゃ無いんだが、そこで処理されている課税対象の大半が知財収入というのには流石に萎えた。まさに双子のIPだなー。Googleは、自らの野望を実現する為に和ちゃんと達ちゃんを手玉に取る「邪悪な南ちゃん」ってとこか。
2010年10月21日木曜日
[Android] パチモンなんだから$60で充分だろw
Kevin C. Tofelはいつもわかりやすい「提灯記事」を書いてくれるので、ITにおける逆神として重宝している。今回もその筆の冴えは健在で、思わず「Kevin必死だなw」とニヤニヤしてしまった次第。Ecosystemの項なんてもう、Kevin自身何を言っているのかわからなくなっている模様。"The experience may not be optimal, but ..."って、なにその詭弁。UXは度外視ですかそうですかw
2010年10月20日水曜日
[Google] オープンという名の放置プレイ
we think the open versus closed argument is just a smokescreen to try and hide the real issue, which is, “What’s best for the customer – fragmented versus integrated?”37signalsでもネタとして引用されているこのジョブスの声明は、AndroidそしてGoogleの現状を実に良く表している。すなわちUXの不在だ。広告主をはじめとする金蔓こそがGoogleの顧客であり、一般ユーザなぞ顧客ではないというのがGoogleの本音なのだから、さもありなむ。
→我々は、オープン vs. クローズドの議論は真の問題すなわち「分裂状態 vs. 統一状態、顧客にとってベストなのは?」 という問題を覆い隠そうと目論んだ煙幕にすぎないと考えている。[訳注:分裂状態とはAndroid OSのバージョンがバラバラになっている現状のこと]
2010年10月19日火曜日
[Microsoft] オジー先生、匙を投げる
ちょうど2年前のPDC(Professional Developer Conference)でAzureが発表されたわけですが、その後の音沙汰といえば御存知の通りでして、やはり企業文化というものは容易に変え難いもんなんだなと認識を新たにした次第であります。
でもまぁ、会社的にはこれでいいんじゃないですか? デスクトップ向けとか企業向けと言った「ニッチ市場」には、Microsoftというブランドに騙されるジジィがまだたくさんおりますんでねw。老舗は老舗らしくちんまりとやっていけば良いんですよ。
2010年10月5日火曜日
[メモ] Google TV はやめとけ、こけるから
何故こけるのか? 理由は単純にして明解だ。「パートナーが多いから」こけるのだ。
パートナーが多いということはしがらみが多いという事であり、ゆえに思い切った手を打てないということであり、ユーザよりもパートナーを重視せざるを得ないということである。
わかってる人はこう言うはずだ「アライアンスwいまどきそりゃねぇだろwwww」と。2010年10月1日金曜日
[メモ] さすがですねw
北京のApple Storeなんだが、一人あたり2台までというiPhone4販売制限を撤廃したとたんに転売屋が殺到、急遽閉店とのこと。さすがは支那ち(ry
[Google] バカの一つ覚え
ネタが尽きてくるとこういった小手先の最適化に逃げるしか手が無くなる。つまらんネタでも出し続けるあたり、相変わらずの自転車操業ということらしい。汚れ仕事ばかりやらされるとチームは腐るよ。鼻の利くヤツはすり潰される前に逃げ出すんで、そろそろ数字にも現れてくるんじゃないかな。
2010年9月29日水曜日
[メモ] 自ラ能クセサルコトハ、人二任セルヘシ
小洒落た絵を描くことしか頭にないデザイナーとUXに無関心なプログラマーのチームじゃ、そりゃ負けるわな。
2010年9月23日木曜日
[メモ] Samsung Galaxy はコケる
Samsungには勢いがあるとか言ってたし、もうね、だから老害なんだよ。たのむからasymcoくらい読んどいてくださいよ。勢いじゃなくてハリボテの虚勢なんだってことがわかりますから。まったく、いつまで出荷台数ベースの市場シェアなんていう化石のような指標にこだわってるんすか。見るべきは利益率でしょうが。
だいいちね、iPadをスマートホンの延長としか捉えられない会社がまともなUXを提供出来るわけないっしょ。相変わらずGeekのおもちゃ臭いし、なんでこんなガジェットをプッシュ出来るんだよ。わけわかんね。
2010年9月17日金曜日
[Geek And Poke] AA(ry
むこうでも言うんだな「窓から投げ捨てろ」ってw
ぬるぽ例外をthrowしときゃ万事OKとか思ってるんだろボケ! その腐った根性を入れ替えねぇと、窓からオメーをthrowするぞ、な感じ。
[Google] エリックまじかっけーw
今になってはじまったことじゃないけど、さすがにこれはね、ドン引きっすわ。
Sorry, Google, but according to the lawsuit Skyhook filed against you today, you've crossed the line. Your "don't be evil" mantra is now officially a joke.
(残念だがGoogle君、今日提出されたSkyhook社からの訴状によれば、君は一線を越えてしまったようだ。「悪に染むること勿れ」という君の得意な御題目は、もはや誰の目にも悪い冗談としか映らない。)
----This move sounds especially evil because Android is supposed to be an "open" mobile platform for handset makers, with an open ecosystem -- one that theoretically lets handset makers and application developers control their own destinies. But it turns out "open" is only "open" in Google's world if it furthers Google's aims.
(こういった動向はことさら邪悪な印象を与える。というのも、Androidは携帯機器メーカーに「オープン」なプラットフオームだと思われており、そこは「オープン」な生態系、すなわち携帯機器メーカーやアプリケーション開発者が、名目上とは言え、自らの手で自らの運命を切り開くことが可能な生態系だと思われているからだ。だがこれではっきりした。Google界において「オープン」とはGoogleの意に適う場合にのみ「オープン」なのだということが。)
2010年9月11日土曜日
[Google] オープンという名の免罪符
Googleのモバイル製品開発部長であるHugo BarraのTechRadarにおける談話についてasymcoが実に的確なコメントを付けている。なるほど、これがGoogle流「愛国無罪」というわけか。
Apparently any malfeasance is excusable because in the name of openness.Googleが「オープン」の暗黒面に落ちて久しいが、その事実は未だ周知されているとは言えない。その逆走振りともたらすであろう弊害はグーグル八分どころの騒ぎではないのだから、アメリカ政府は速やかにGoogleの会社分割を基本とする健全化に乗り出すべきだ。
(Googleでは)オープンという大義名分さえあれば、いかなる不正行為も許されるらしい
2010年9月10日金曜日
[Apple] App Storeライセンス許諾の変更について
すでにあちこちでネタになっており「これでFlashが!」とか言ってウハウハな人も多いみたいですが、多分、状況としては何も変わらないでしょ。開発リソースの選択と集中という決断が出来ないFlash厨をぬか喜びさせるだけでしょうな。
と言うのも、正直なところ、あんなクソ重いミドルウェアをモバイルプラットフォームでというのは罰ゲームだとしか思えんのですよ。PC環境ですら顕著にCPU負荷のデカさが出ている現状なんですから、いわんやモバイルをや、ということなんであります。最近、趣味でFlash撲滅運動めいたことをやってるわけですが、開発を行っているPC環境でも「なんでFlashビューワごときでこんなにCPU喰うんだよw」というのが現状なんだと、HTML5化してみてよくわかりましたんでね。
2010年9月6日月曜日
[Programming] ActiBookコンテンツをFlash無しで読むためのブックマークレット
先日こんなのを作りまして、その後、いろんなところでActiBookコンテンツが利用されており、また、いくつかのバリエーションがあるというのがわかりましたんでちまちまと改良しておりました。
ActiBookコンテンツは通常、_SWF_Window.htmlでラップされており、ググると結構な数がヒットするんですが、たいがいのものはこのブックマークレットで読めるようです。動作はiPadと、Mac OSX上のFirefoxおよびSafariで確認済ですが、IEではたぶん動かないでしょう(setIntervalに3つ目の引数を渡すコードが含まれてますんで)。ChromeとOperaは未確認です。というか確認する気もないんですがw
javascript:var%20_G04={prefs:{zoom:1.6,indicatorWait:2000,mode:"two-facing-pages"},imageList:[],ix:0,baseHeight:undefined,baseWidth:undefined,drawerTimer:[],t2:undefined,serviceType:"",part:[],direction:"left",zoom:[],curZoom:1,mode:"",init:function(){var%20u=document.baseURI;if(u.match(/view\.swf/)||u.match(/ActiBook\.swf/)){document.location=u.slice(0,u.lastIndexOf("/"))+"/_SWF_Window.html";return;}if(!u.match(/_SWF_Window\.html/)){return;}document.body.bgColor="#eeeeee";document.body.style.overflow="auto";document.body.innerHTML="<div%20id='buttonL'%20style='opacity:0;background-color:#000;position:absolute;left:0px;top:0x;width:100px;z-index:2;'></div>"+"<div%20id='buttonR'%20style='opacity:0;background-color:#000;position:absolute;top:0x;width:100px;z-index:2;'></div>"+"<div%20id='picture'%20style='position:absolute;left:0px;top:0px;z-index:1;'><canvas%20id='tc'></canvas></div>"+"<div%20id='indicator'%20style='position:absolute;-moz-border-radius:16px;-webkit-border-radius:16px;top:160px;width:300px;z-index:2;opacity:0.9;background-color:#aaaaaa;font-family:Copperplate,sans-serif;font-size:48px;font-style:bold;color:white;text-align:center;vertical-align:middle;'></div>"+"<div%20id='cp'%20onMouseOver='_G04.showCP()'%20onMouseOut='_G04.hideCP()'%20ongesturestart='_G04.showCP()'%20style='font-size:20px;font-style:bold;color:white;margin:12px;padding:12px;-moz-border-radius:16px;-webkit-border-radius:16px;background-color:#aaaaaa;align:center;position:absolute;left:100px;top:0px;height:100px;z-index:2;opacity:0.0;'>"+"page <select%20id='page'%20onchange='_G04.jumpTo()'></select> "+"zoom <select%20id='zoom'%20onchange='_G04.changeZoom()'></select> "+"mode <select%20id='mode'%20onchange='_G04.changeMode()'><option%20value='single-page'>single%20page</option><option%20value='two-facing-pages'>two%20facing%20pages</option></select> "+" <a%20onclick='_G04.hideCP()'><font%20color='red'>[close]</font></a>"+"</div>";var%20x=u.slice(0,u.lastIndexOf("/"))+"/books/db/book.xml";var%20r=new%20XMLHttpRequest();r.open("GET",x,false);r.send(null);var%20d=(new%20DOMParser()).parseFromString(r.responseText,"text/xml");var%20z=d.getElementsByTagName("PageSize");if(z.length){for(var%20i=0;i<z.length;i++){_G04.zoom.push(z[i].getAttribute("zoom"));}}else{var%20x2=u.slice(0,u.lastIndexOf("/"))+"/books/db/viewer.xml";var%20r2=new%20XMLHttpRequest();r2.open("GET",x2,false);r2.send(null);var%20d2=(new%20DOMParser()).parseFromString(r2.responseText,"text/xml");_G04.zoom=d2.getElementsByTagName("zoom_s")[0].firstChild.nodeValue.split(",");}_G04.zoom.sort();_G04.curZoom=_G04.zoom[0];for(var%20i=1;i<_G04.zoom.length;i++){if(Math.abs(_G04.prefs.zoom-_G04.zoom[i])<Math.abs(_G04.prefs.zoom-_G04.curZoom)){_G04.curZoom=_G04.zoom[i];}}if(u.split("?")[1]){var%20p=u.split("?")[1].split("&");for(var%20i=0;i<p.length;i++){if(p[i].split("=")[0]=="pagecode"){_G04.ix=parseInt(p[i].split("=")[1])-1;}}}_G04.mode=_G04.prefs.mode;var%20o=document.getElementById("mode").options;for(var%20i=0;i<o.length;i++){o[i].selected=(o[i].value==_G04.mode);}_G04.direction=d.getElementsByTagName("to_open")[0].firstChild.nodeValue;if(_G04.direction=="only"){document.getElementById("mode").value="single-page";document.getElementById("mode").disabled=true;_G04.mode="single-page";_G04.direction="right";}if(_G04.direction=="right"){document.getElementById("buttonL").onclick=_G04.forward;document.getElementById("buttonR").onclick=_G04.backward;}else{document.getElementById("buttonL").onclick=_G04.backward;document.getElementById("buttonR").onclick=_G04.forward;}_G04.serviceType=_G04.getServiceType(u);var%20p=d.getElementsByTagName("page");for(var%20zs=0;zs<_G04.zoom.length;zs++){_G04.imageList[_G04.zoom[zs]]=[];for(var%20i=0;i<p.length;i++){var%20cover="";if(p[i].getElementsByTagName("cover")[0]){cover=p[i].getElementsByTagName("cover")[0].firstChild.nodeValue;}switch(_G04.serviceType){case%20"actibook1":var%20n=p[i].getElementsByTagName("number")[0].firstChild.nodeValue;var%20ext=p[i].getElementsByTagName("type")[0]?p[i].getElementsByTagName("type")[0].firstChild.nodeValue:"jpg";if(n>=0){_G04.imageList[_G04.zoom[zs]].push({cover:cover,url:x.match(/(.*books\/)/)[1]+"images/"+_G04.zoom[zs].toString()+"/"+n+"."+ext});}break;case%20"actibook2":_G04.imageList[_G04.zoom[zs]].push({cover:cover,url:x.match(/(.*books\/)/)[1]+"images/"+_G04.zoom[zs].toString()+"/"+p[i].getElementsByTagName("image")[0].firstChild.nodeValue+"/"});break;}}}_G04.baseHeight=d.getElementsByTagName("h")[0].firstChild.nodeValue;_G04.baseWidth=d.getElementsByTagName("w")[0].firstChild.nodeValue;var%20ops="";for(var%20i=0;i<_G04.imageList[_G04.curZoom].length;i++){ops+="<option%20value='"+i+"'>"+(i+1).toString()+"</option>";}document.getElementById("page").innerHTML=ops;ops="";for(var%20i=0;i<_G04.zoom.length;i++){ops+="<option%20value='"+_G04.zoom[i]+"'%20"+((_G04.curZoom==_G04.zoom[i])?"selected":"")+">x"+_G04.zoom[i].toString()+"</option>";}document.getElementById("zoom").innerHTML=ops;_G04.draw();},buildFrame:function(){var%20h=_G04.baseHeight*_G04.curZoom;var%20w=_G04.baseWidth*_G04.curZoom;if(_G04.mode=="two-facing-pages"){if(!_G04.imageList[_G04.curZoom][_G04.ix].cover){w*=2;}}document.getElementById("picture").style.height=h+"px";document.getElementById("picture").style.width=w+"px";document.getElementById("buttonL").style.height=h+"px";document.getElementById("buttonR").style.left=w-100+"px";document.getElementById("buttonR").style.height=h+"px";document.getElementById("indicator").style.left=w/2-150+"px";document.getElementById("cp").style.width=w-200+"px";document.getElementById("tc").width=w;document.getElementById("tc").height=h;},getServiceType:function(url){var%20u=url.slice(0,url.lastIndexOf("/"))+"/books/images/"+_G04.zoom[0]+"/1.jpg";var%20r=new%20XMLHttpRequest();r.open("GET",u,false);r.send(null);if(r.status==200){if(r.getResponseHeader("Content-Type")!="image/jpeg"){return%20"actibook2";}else{return%20"actibook1";}}return%20"actibook2";},forward:function(){if(_G04.mode=="single-page"){if(_G04.ix==_G04.imageList[_G04.curZoom].length-1){return;}else{_G04.ix++;}}else{if(_G04.ix>=_G04.imageList[_G04.curZoom].length-2){return;}else{_G04.ix+=(_G04.imageList[_G04.curZoom][_G04.ix].cover)?1:2;}}_G04.draw();},backward:function(){if(_G04.ix==0){return;}_G04.ix-=((_G04.mode=="single-page")?1:2);if(_G04.ix<0){_G04.ix=0;}_G04.draw();},draw:function(){_G04.hideCP();_G04.buildFrame();var%20num=(_G04.mode=="single-page")?1:((_G04.imageList[_G04.curZoom][_G04.ix].cover)?1:2);for(var%20pix=0;pix<num;pix++){if(!_G04.imageList[_G04.curZoom][_G04.ix+pix]){break;}var%20xdiff=0;if(_G04.mode=="two-facing-pages"){xdiff=((_G04.direction=="right"&&!pix)||(_G04.direction=="left"&&pix))?_G04.baseWidth*_G04.curZoom:0;if(_G04.imageList[_G04.curZoom][_G04.ix].cover){xdiff=0;}}var%20ctx=document.getElementById("tc").getContext("2d");ctx.clearRect(0,0,document.getElementById("tc").width,document.getElementById("tc").height);switch(_G04.serviceType){case%20"actibook1":if(_G04.ix+i>=_G04.imageList[_G04.curZoom].length){break;}var%20img=new%20Image();img.src=_G04.imageList[_G04.curZoom][_G04.ix+pix].url;img.onload=function(){var%20xdiff=arguments[0];return%20function(){ctx.drawImage(this,xdiff,0);};}(xdiff);break;case%20"actibook2":var%20numParts=64;_G04.part[pix]=new%20Array(numParts);for(var%20i=0;i<_G04.part[pix].length;i++){var%20img=new%20Image();var%20fn="x"+Math.floor(i/Math.sqrt(numParts)+1)+"y"+(i%Math.sqrt(numParts)+1)+".jpg";img.src=_G04.imageList[_G04.curZoom][_G04.ix+pix].url+fn;img.onload=function(){var%20pix=arguments[0];var%20i=arguments[1];return%20function(){_G04.part[pix][i]={img:this,completed:true};};}(pix,i);img.onerror=function(){var%20pix=arguments[0];var%20i=arguments[1];return%20function(){_G04.part[pix][i]={img:undefined,completed:true};};}(pix,i);}if(_G04.drawerTimer[pix]){clearInterval(_G04.drawerTimer[pix]);_G04.drawerTimer[pix]=null;}_G04.drawerTimer[pix]=setInterval(function(pix,xdiff){var%20done=true;for(var%20i=0;i<_G04.part[pix].length;i++){if(!_G04.part[pix][i]){done=false;break;}}if(done){clearInterval(_G04.drawerTimer[pix]);_G04.drawerTimer[pix]=null;var%20dx=0,dy;for(var%20i=0;i<Math.sqrt(numParts);i++){dy=0;for(var%20j=0;j<Math.sqrt(numParts);j++){var%20img=_G04.part[pix][i*Math.sqrt(numParts)+j].img;if(img){ctx.drawImage(img,Math.floor(dx+xdiff),Math.floor(dy));}dy+=_G04.part[pix][j].img?_G04.part[pix][j].img.height:0;}dx+=_G04.part[pix][i*Math.sqrt(numParts)].img?_G04.part[pix][i*Math.sqrt(numParts)].img.width:0;}}},10,pix,xdiff);break;}}window.scroll((_G04.mode=="single-page")?0:((_G04.direction=="right")?_G04.baseWidth*_G04.curZoom:0),0);document.getElementById("indicator").innerHTML=_G04.ix+1+" / "+_G04.imageList[_G04.curZoom].length;document.getElementById((_G04.direction=="right")?"buttonL":"buttonR").style.opacity=0.1;if(_G04.t2){clearTimeout(_G04.t2);}_G04.t2=setTimeout(function(){clearTimeout(_G04.t2);document.getElementById("indicator").innerHTML="";document.getElementById((_G04.direction=="right")?"buttonL":"buttonR").style.opacity=0;},_G04.prefs.indicatorWait);},showCP:function(){var%20o=document.getElementById("page").options;for(var%20i=0;i<o.length;i++){o[i].selected=(o[i].value==_G04.ix);}document.getElementById("cp").style.opacity="0.9";},hideCP:function(){document.getElementById("cp").style.opacity="0.0";},jumpTo:function(){_G04.ix=parseInt(document.getElementById("page").value);_G04.hideCP();_G04.draw();},changeZoom:function(){_G04.curZoom=document.getElementById("zoom").value;_G04.draw();},changeMode:function(){_G04.mode=document.getElementById("mode").value;_G04.draw();}};_G04.init();ActiBookコンテンツページ(URLが_SWF_Window.html)でブックマークレットを呼び出す事で動作が開始します。
画像の左右端をタップ(PCならクリック)でページ送り/戻しです。コンテンツによって右開きと左開きがあるようなので、画像表示時に進行方向を画像の左端or右端をハイライトさせて表示しています。
画像上端を2本指タップ(PCならマウスオーバー)で、ページ指定・ズーム設定・表示モード選択を行うコントローラが表示されます。
毎度の事ながら無保証・無責任なので、転んでも泣かないかたのみご利用ください。
以下にいくつか、作業中に見付けたActiBookコンテンツサイトを列挙しておきます。ちなみに各サイトとも、ActiBookコンテンツだけでなくActionBrowserその他のコンテンツも混在していますが、URLやページデザインで違いがわかりますんで、何回か見ているうちに「これは見れる、これは見れない」がわかってくるでしょう。また、リンク先にはヲタや腐れの嗜好に耐性を持たない方々にとって不適切なコンテンツが含まれている可能性がありますので御注意くださいw
- スクエニ系: ガンガンオンラインの、イラストを含むほぼ全てのコミックビューワーコンテンツと、ヤングガンガン立ち読みコーナーの新しめのもの、等
- マッグガーデン: 立ち読みコーナーの全て(?)
- webKADOKAWA: 書籍とコミック&アニメの立ち読みコーナー。古めのものはブックマークレットでは未対応なActionBrowserなどのコンテンツになっているようです。
- まんがタイムきららweb: Web連載やコミック情報の「最新刊をちょい読み」
- ホビージャパン: HJ文庫の「ちょこっと立ち読み」や、ほびーちゃんねるコミックコーナー
- 新潮社: 「立ち読み」コンテンツの全て(?)
- リブレ出版: クロフネZEROのWebコミック等(『ソラナキ初音』『もえひめ』は非ActiBookコンテンツ)
- Fujisan.co.jp: 「ちら見する」アイコンの付いたコンテンツ全て(?)
- ジャイブ: コミックラッシュの、立ち読みマークの付いた作品等
javascript:(function(){それにしてもActiBook開発元のスターティアラボさんは実に良い仕事をしておられます。きちんとデータモデルをアプリケーションから分離しておけばコンテンツの再利用が容易になるという良い見本です。物販リンクに関してもbook.xmlに表示位置を含めた全情報がそろっているのでHTML5化もラクチンということなんですね。今回はまだ対応出来ていませんが、時間を見付けてちゃっちゃと実装したいところです。
var as=document.evaluate("//a[@onclick]|//area[@onclick]",document,null,7,null);
for(var i=0;i<as.snapshotLength;i++){
var t=as.snapshotItem(i).getAttribute("onclick").replace("view.swf","_SWF_Window.html").replace("ActiBook.swf","_SWF_Window.html");
as.snapshotItem(i).setAttribute("onclick",t);
}
})();
おかげさまで楽しませていただいたのですが、ここのところ書籍費がえらいことになっております。欲しいものリストもがんがん増えています。ActiBook系はもちろん、他の立ち読みサイトでも「こんだけ美味しそうなところ見せられたら、もー、辛抱たまらんっす」というわけで、まさに思う壷状態になっております。『つぐもも』なんてもう、速攻で「ポチッとな」ですよ。プラグインフリーという心意気が、これまた素晴らしいじゃありませんか。これこそが「オープン」というものですよ。ウィンドウ最大化処理でバグッてるという点がちょっぴり鬱陶しいけど、そんなの気にしないのが真のギークってもんですw
それにひきかえ、FlashベースのくせにデフォのままだとMacでは見れないうえにコンテンツが暗号化されている某Y社なんかはさっさと悔い改めやがっちゃってくださいませと思うわけです。というわけで竹本先生におかれましては、こんな逸失利益産みまくりな間抜けとは早々に手をお切りになることを、衷心からお願い申し上げる次第であります。
2010年9月4日土曜日
[Apple] いちおう予言しとかなきゃ
ソーシャルはコンテキスト生成の場なのに、現状では、単なる露店になっちゃってるんだよね。並べられているのが人ではなく「ひとのつくりしもの」に変わるだけで、出会い系だってことには変わりないんだわ。
2010年9月3日金曜日
[メモ] ちょっとした提案
厚生省しか無いのは何故か。理由は簡単で、国家とは戦争のためのシステムだからだ。なにもドンパチやるだけが戦争ではない。実際、経済戦争はドンパチ以上に血肉と精神をむさぼる。生とは弾丸であり現ナマなのだ。「次の戦争を、次の次の戦争を」するために必要なのは生に他ならず、よって生は大量に生産・消費されなければならないものとされる。そこにあるのは生の尊厳ではなく、冷徹なバランスシートだ。21世紀に入ってすぐに厚生省と労働省が統合されたわけだが、これは、生きる事と労働する事、即ち戦う事はワンセットであるという国の方針をミもフタもなく示すものであった。
ということで、もし人の尊厳というものを真に重んじるのであれば、必要なのは、より良く生きる為に必要な厚生省ではなく、今はまだ存在しない、より良く死ぬ為の省庁だ。仮にそれを尊厳省と名付けてみよう。その設立趣旨は「安心して生活出来る社会」とセットになる「安心して死ねる社会」の実現にある。今や子供手当が出る時代なのだから、自殺手当も当然必要であろう。
どう見ても大きな政府を目指しているとしか思えない現政権にとって、尊厳省の設立は、生死に関するコントロール範囲の拡大と福祉負担の削減といった点から見て、実に有益だと思われる。尊厳省という名前はわかりにくいというのであれば国立姥捨山という方がわかりやすいかもしれない。如何であろう。
2010年9月2日木曜日
[メモ] SICPは英語で読むべし
たとえば "principle of least commitment" を「最小責任の原則」などと訳してしまうと commit という動詞の持つ「委任する」という側面は見えてくるが「明言する」「深入りする」という側面が見えなくなってしまう。この原則の背後にあるのは、ヴィトゲンシュタイン風に言うならば「語り得ぬものについては沈黙しなければならない」ということであり「どこで抽象化を止めるかを見極める事が重要だ」ということなのだ。
こういった概念の取りこぼしは一知半解への近道である。「敵を知る」は兵法の初歩だが、これでは敵の実力の半分しか理解出来ない。結局のところ、自分に都合の良いイメージを捏造してそれをもとに過小評価し返り討ちにあうか、逆に過大評価して萎縮してしまうので、ネイティブと同じリングに上がった場合は確実に負けることになる。「英語で読むべし」はそういった愚に陥る事無く等身大の理解をするための戦略なのだ。
「英語で読むべし」にはもうひとつ理由がある。「プログラミング言語は印欧諸語の延長線上にあるから」というのがそれだ。プログラミング、ひいてはチューリングマシンやノイマンアーキテクチャといったコンピュータサイエンスの諸要素は印欧圏が産み出した文化の精髄であり、それを理解するには文化を産み出した言語に触れるのが一番の近道だからだ。
なかでも英語は、格変化の簡略化や名詞における性の廃止など、印欧諸語のうちで最も抽象化が進んだ言語だと言える。言語運用という点から見れば、具体的な概念をマッピングし抽象化するという方向に言語進化のエネルギーを注ぎ込んできた。
逆に日本語は、言語運用とは抽象化ではなく具体化を意味するという側面が、21世紀のこんにちでも未だ色濃く残っている。「縁起でもない」に見られる様な言霊信仰が脈々と受け継がれて来たのだ。ある意味、英語とは正反対の進化を遂げて来たわけで、そういった背景の違いをもとに産み出された文化たるや、その理解を拒む要素があちこちにトラップとして潜んでいる。
いつの時代も言語理解は文化理解の早道であり王道であるということで、やはり英語で書かれたものは英語で味わうのが理想である。もしくは漢字に取り組んだ時のように、時間・手間といったリソースを注ぎ込んで日本化するかだ。
ちなみに、Rubyは日本人が産んだプログラミング言語だ、という認識は半分正しく半分誤りである。Matz氏はまぎれも無く日本人であるが、言語設計に垣間見られるその信条を産んだのは日本ではないからだ。
ということで「英語なんて正直言って簡単なんですから何とかしましょうよ」というのが結論だ。特にSICPは英文としては平易な部類に入るし、分詞構文で頭をひねったりする箇所も無い。なんと言っても、これほどの名著が英語だとタダで読めるのだから、読まなきゃ絶対損なのである。
2010年8月27日金曜日
[メモ] たまにあるんすよ、極論したい時が
- 「歴史はドラマ」だと? なに寝ぼけてやがる。
- 最後の審判なんてあるわけねぇ。放っときゃ滅亡するのに、わざわざ手間ひまかける必要なんてねぇだろ。
- いまだにVAN自慢とか、もうね、さっさと氏ねよと。
- 成長=善ってオマエね、小学生かよ。
- 手が血まみれなのはオレだけじゃねぇし、オマエだけでもねぇ。
- 「総員、にゃんこスーツ着用! 白兵戦になるぞ!」
[メモ] H.264のライセンス形態はおとり商法だ、とかぬかしてた奴らが終了な件
DARING FIREBALLでこの報道を知り、朝っぱらからホクホクしております。これでWebMとかいうグレーなコーデックを使う理由は完全に無くなりましたんでね。ということで、Mozilla界隈のエロい人たちにおかれましては速やかにH.264を採用されんことを冀う次第。
2010年8月19日木曜日
[Google] 「クラウドの中のGoogle、リアルを知らず」ってとこか
先週に引き続き、JoT comicにエリックがまたも主役で登場。例のイタい発言を受けての一品です。
でもまぁ、彼らにとってはビットの世界が全てですから仕方ないんでしょうね、こういう考え方になってしまうというのも。せいぜい現実の上澄みの中で怪しげな錬金術に励んで下さいねと、心から応援させていただきますですよ。
2010年8月15日日曜日
[メモ] 世間に顔向け出来ないとかですかw
表紙も凄いのですが中味がこれまたエラいことになっとります。一体これでどうしろと。ていうか、このレベルで公開する意味ってあんの?
この手のメディアには全然縁のないわたくしでありますが、先日こんなブックマークレットを作ったのをきっかけに、ActiBook系とでも言うべき系統が存在することを知って調べているうちに見つけたのがこのシロモノ。
zoomが3.5倍にまで対応しているので、ガンガンONLINEやweb KADOKAWAといった他のActiBook系サイトでは目にする事の無い1705x2154ピクセルの高品位画像が得られる半面、肝心の内容がこれでは非常にがっかりさんであります。
肖像権とか著作隣接権とかに関しましては良く存じ上げませんが「電子書籍の夜明けは遠い」ということだけはよくわかりました。
(一応、現状のブックマークレットを貼っておきます。ガンガンONLINEとweb KADOKAWAの新しめの立ち読みコンテンツに対応してます。あと、オリ★スタもw)
javascript:var%20_G04={imageList:[],ix:0,serviceType:"",part:[{u:"x1y1.jpg",dx:0,dy:0},{u:"x1y2.jpg",dx:0},{u:"x2y1.jpg",dy:0},{u:"x2y2.jpg"}],init:function(){document.body.bgColor="#eeeeee";document.body.innerHTML="<div%20id='fwd'%20onclick='_G04.forward()'%20ongesturestart='_G04.last()'%20style='position:absolute;left:0px;top:0x;width:100px;z-index:99;'></div><div%20id='bwd'%20onclick='_G04.backward()'%20ongesturestart='_G04.top()'%20style='position:absolute;top:0x;width:100px;z-index:99;'></div><div%20id='picture'%20style='position:absolute;left:0px;top:0px;width:768px;height:1024px;z-index:1;'></div><div%20id='indicator'%20style='position:absolute;-webkit-border-radius:16px;top:16px;width:200px;z-index:99;opacity:0.8;background-color:#aaaaaa;font-family:Copperplate,sans-serif;font-size:48px;font-style:bold;color:white;text-align:center;vertical-align:middle;'></div>";var%20u=document.baseURI;_G04.serviceType=_G04.getServiceType(u);if(_G04.serviceType=="unknown"){return;}var%20x=u.match(/(.*)_SWF_Window\.html.*/)[1]+"books/db/book.xml";var%20r=new%20XMLHttpRequest();r.open("GET",x,false);r.send(null);var%20d=(new%20DOMParser()).parseFromString(r.responseText,"text/xml");var%20z=d.getElementsByTagName("PageSize");var%20zoom=1;if(z.length){for(var%20i=0;i<z.length;i++){var%20v=z[i].getAttribute("zoom");if(v>zoom){zoom=v;}}}else{if(_G04.serviceType=="actibook1"){zoom=2;}else%20if(_G04.serviceType=="actibook2"){zoom=1.45;}}var%20p=d.getElementsByTagName("page");for(var%20i=0;i<p.length;i++){switch(_G04.serviceType){case%20"actibook1":case%20"actibook2":_G04.imageList.push(x.match(/(.*books\/)/)[1]+"images/"+zoom.toString()+"/"+p[i].getElementsByTagName("number")[0].firstChild.nodeValue+"."+p[i].getElementsByTagName("type")[0].firstChild.nodeValue);break;case%20"actibook3":_G04.imageList.push(x.match(/(.*books\/)/)[1]+"images/1/"+p[i].getElementsByTagName("image")[0].firstChild.nodeValue+"/");break;}}var%20h=d.getElementsByTagName("h")[0].firstChild.nodeValue*zoom;var%20w=d.getElementsByTagName("w")[0].firstChild.nodeValue*zoom;document.getElementById("picture").style.height=h+"px";document.getElementById("picture").style.width=w+"px";document.getElementById("fwd").style.height=h+"px";document.getElementById("bwd").style.left=w-100+"px";document.getElementById("bwd").style.height=h+"px";document.getElementById("indicator").style.left=w/2-100+"px";if(_G04.serviceType=="actibook3"){var%20c=document.createElement("canvas");c.width=w;c.height=h;c.id="tc";document.getElementById("picture").appendChild(c);}_G04.draw();},getServiceType:function(url){if(url.match(/_SWF_Window\.html.*$/)){var%20m=url.match(/\/\/(.+?)\/.+\/_SWF_Window\.html(.*)/);if(m[1].match("square-enix")){return%20"actibook1";}else%20if(m[1].match("kadokawa")){if(m[2]){return%20"actibook2";}else{return%20"actibook3";}}else{return%20"actibook1";}}return%20"unknown";},forward:function(){if(_G04.ix<_G04.imageList.length-1){_G04.ix++;_G04.draw();}},backward:function(){if(_G04.ix>0){_G04.ix--;_G04.draw();}},top:function(){_G04.ix=0;_G04.draw();},last:function(){_G04.ix=_G04.imageList.length-1;_G04.draw();},draw:function(){switch(_G04.serviceType){case%20"actibook1":case%20"actibook2":document.getElementById("picture").innerHTML="<img%20src="+_G04.imageList[_G04.ix]+">";break;case%20"actibook3":var%20ctx=document.getElementById("tc").getContext("2d");var%20img=new%20Image();img.src=_G04.imageList[_G04.ix]+_G04.part[0].u;img.onload=function(){ctx.drawImage(img,0,0);var%20dx=img.width;var%20dy=img.height;for(var%20i=1;i<4;i++){_G04.part[i].dx=(_G04.part[i].dx!=undefined)?_G04.part[i].dx:dx;_G04.part[i].dy=(_G04.part[i].dy!=undefined)?_G04.part[i].dy:dy;var%20aimg=new%20Image();aimg.src=_G04.imageList[_G04.ix]+_G04.part[i].u;aimg.onload=function(){var%20ci=arguments[0];return%20function(){ctx.drawImage(this,_G04.part[ci].dx,_G04.part[ci].dy);};}(i);}};break;}window.scroll(0,0);document.getElementById("indicator").innerHTML=_G04.ix+1+"%20/%20"+_G04.imageList.length;setTimeout(function(){document.getElementById("indicator").innerHTML="";},2000);}};_G04.init();
2010年8月13日金曜日
[Google] ヒールって重要だよねー
言わずと知れたVerizonとの一件ですな。「無線インターネットに関しては例の "Don't be evil." は無し(neutral-ize)ということでヨロシク」ってことなんですね。わかります。
まぁ、エリック "パルパティーン" シュミットも The Joy of Tech で主役を張れるところまで成長したわけで、いやはや、目出度い事です。やっぱりアレでしょうね、あの温和な風貌と腹黒さとの落差がたまらんのでしょうね。ギャップ萌えってやつですかw
[Google] 胡散臭ぇ
おいおい、これで4日連続だぞ、いつまでやってんだよ。クソつまんねぇノロケ話とか、正直どうでもいいんですけど。
というか、ググれば個人情報ですら手に入るという事実を堂々と発表されても、はっきり言って恐怖しか感じないんですけど?
2010年8月8日日曜日
[Programming] Mobile SafariでガンガンONLINEのFlashコンテンツを読むためのブックマークレット
javascript:var%20_G04={imageList:[],ix:0,serviceType:"",part:[{u:"x1y1.jpg",dx:0,dy:0},{u:"x1y2.jpg",dx:0},{u:"x2y1.jpg",dy:0},{u:"x2y2.jpg"}],init:function(){document.body.bgColor="#eeeeee";document.body.innerHTML="<div%20id='fwd'%20onclick='_G04.forward()'%20ongesturestart='_G04.last()'%20style='position:absolute;left:0px;top:0x;width:100px;z-index:99;'></div><div%20id='bwd'%20onclick='_G04.backward()'%20ongesturestart='_G04.top()'%20style='position:absolute;top:0x;width:100px;z-index:99;'></div><div%20id='picture'%20style='position:absolute;left:0px;top:0px;width:768px;height:1024px;z-index:1;'></div><div%20id='indicator'%20style='position:absolute;-webkit-border-radius:16px;top:16px;width:200px;z-index:99;opacity:0.8;background-color:#aaaaaa;font-family:Copperplate,sans-serif;font-size:48px;font-style:bold;color:white;text-align:center;vertical-align:middle;'></div>";var%20u=document.baseURI;_G04.serviceType=_G04.getServiceType(u);if(_G04.serviceType=="unknown"){return;}var%20x=u.match(/(.*)_SWF_Window\.html.*/)[1]+"books/db/book.xml";var%20r=new%20XMLHttpRequest();r.open("GET",x,false);r.send(null);var%20d=(new%20DOMParser()).parseFromString(r.responseText,"text/xml");var%20z=d.getElementsByTagName("PageSize");var%20zoom=1;if(z.length){for(var%20i=0;i<z.length;i++){var%20v=z[i].getAttribute("zoom");if(v>zoom){zoom=v;}}}else{if(_G04.serviceType=="actibook1"){zoom=2;}else%20if(_G04.serviceType=="actibook2"){zoom=1.45;}}var%20p=d.getElementsByTagName("page");for(var%20i=0;i<p.length;i++){switch(_G04.serviceType){case%20"actibook1":case%20"actibook2":_G04.imageList.push(x.match(/(.*books\/)/)[1]+"images/"+zoom.toString()+"/"+p[i].getElementsByTagName("number")[0].firstChild.nodeValue+"."+p[i].getElementsByTagName("type")[0].firstChild.nodeValue);break;case%20"actibook3":_G04.imageList.push(x.match(/(.*books\/)/)[1]+"images/1/"+p[i].getElementsByTagName("image")[0].firstChild.nodeValue+"/");break;}}var%20h=d.getElementsByTagName("h")[0].firstChild.nodeValue*zoom;var%20w=d.getElementsByTagName("w")[0].firstChild.nodeValue*zoom;document.getElementById("picture").style.height=h+"px";document.getElementById("picture").style.width=w+"px";document.getElementById("fwd").style.height=h+"px";document.getElementById("bwd").style.left=w-100+"px";document.getElementById("bwd").style.height=h+"px";document.getElementById("indicator").style.left=w/2-100+"px";if(_G04.serviceType=="actibook3"){var%20c=document.createElement("canvas");c.width=w;c.height=h;c.id="tc";document.getElementById("picture").appendChild(c);}_G04.draw();},getServiceType:function(url){if(url.match(/_SWF_Window\.html.*$/)){var%20m=url.match(/\/\/(.+?)\/.+\/_SWF_Window\.html(.*)/);if(m[1].match("square-enix")){return%20"actibook1";}else%20if(m[1].match("kadokawa")){if(m[2]){return%20"actibook2";}else{return%20"actibook3";}}else{return%20"actibook1";}}return%20"unknown";},forward:function(){if(_G04.ix<_G04.imageList.length-1){_G04.ix++;_G04.draw();}},backward:function(){if(_G04.ix>0){_G04.ix--;_G04.draw();}},top:function(){_G04.ix=0;_G04.draw();},last:function(){_G04.ix=_G04.imageList.length-1;_G04.draw();},draw:function(){switch(_G04.serviceType){case%20"actibook1":case%20"actibook2":document.getElementById("picture").innerHTML="<img%20src="+_G04.imageList[_G04.ix]+">";break;case%20"actibook3":var%20ctx=document.getElementById("tc").getContext("2d");var%20img=new%20Image();img.src=_G04.imageList[_G04.ix]+_G04.part[0].u;img.onload=function(){ctx.drawImage(img,0,0);var%20dx=img.width;var%20dy=img.height;for(var%20i=1;i<4;i++){_G04.part[i].dx=(_G04.part[i].dx!=undefined)?_G04.part[i].dx:dx;_G04.part[i].dy=(_G04.part[i].dy!=undefined)?_G04.part[i].dy:dy;var%20aimg=new%20Image();aimg.src=_G04.imageList[_G04.ix]+_G04.part[i].u;aimg.onload=function(){var%20ci=arguments[0];return%20function(){ctx.drawImage(this,_G04.part[ci].dx,_G04.part[ci].dy);};}(i);}};break;}window.scroll(0,0);document.getElementById("indicator").innerHTML=_G04.ix+1+"%20/%20"+_G04.imageList.length;setTimeout(function(){document.getElementById("indicator").innerHTML="";},2000);}};_G04.init();
コンテンツビューワが呼び出されるページ(URLが_SWF_Window.htmlで終わる)は、Flashが動かないので当然画面が真っ白なままなのですが、そこでこのブックマークレットを呼び出すとページ情報(book.xml)を取得して各ページの画像を表示出来るようになります。画像の左端をクリックすると次のページが、右端だと前のページが表示されます。スワイプだとイベントハンドラ書くだけでコードが膨れ上がるんで普通にonclickにしましたわw
Mobile Safariへのブックマークレット導入法はググればいくつか出て来ますんでそちらを参照してください。それにしても、もっと簡単に導入できんもんですかね。簡単な導入法がsyncだけってのは、あまりにも御無体ってもんですわ。
2010/08/10 追記:若干修正しました
・画像の左端をタップ→次のページ
・画像の左端を2本指でタップ→最後のページ
・画像の右端をタップ→前のページ
・画像の右端を2本指でタップ→最初のページ
[Google] 今度はシーカードロイドかよ
ドローンということで、要は小型の無人探査機ですな。製造元の人が「Google Earth用じゃね?」とか「風力発電施設の点検用じゃね?」とか脳天気なことをおっしゃってるそうですが、エリック・"パルパティーン"・シュミットのことですから、どうせシーカードロイドとかプロボットにでも仕立て上げるんでしょうw
2010年8月7日土曜日
[Google] この会社はただのビッチになっちゃいました、というおはなし
like a favorite daughter who gets an easy ride because she’s the pretty and clever one.流石はアンチGoogle陣営の鉄砲玉であるINSIDE GOOGLE。喩えが的確すぎて引くわw。まぁ、鼻の効く人ならこの先の展開は読み切っているんでしょうがね。潮も引いてしまったようですし、会社分割が全然見えて来ない現状では、お先真っ暗ですな。それにしても、あのグーグルたんがこんなビッチになっちまうとは、つくづく世の無常を嘆かずには居られないってもんです。それでもなお一縷の望みを捨て切れないというのは、惚れた弱みなんでしょうな。
(みんなに人気のあるネーチャンみたいなもんさ、可愛くてしかもズルいから、ヤリマンになっちまうんだなコレが)
the Google halo is well and truly gone.
(Googleの威光は、完全かつ確実に、消え去ってしまった)
2010年8月5日木曜日
[Programming] ガンガンONLINE用の画像zipperを作ったんだけど...
ということなんですが、このadd-onは流石に公開出来ませんな。あからさまに「複製は法律により禁じられています」と来られちゃね。複製が駄目ということならば「ブックマークレットでdocumentをクリアして画像だけを表示する」という手もありなんでしょうが、流石に処理内容的にボリュームが大きいので手を出しづらいところです。mobile Safariにもユーザスクリプティング環境があればなぁと。
ということで本件に関しましては、個人でこっそりと楽しませていただく事にいたします。
2010年8月2日月曜日
[Geek And Poke] 出来ちゃったUI
こういう深読み可能なエピソードは好きっす。いつもの諧謔・風刺という観点から見れば、エンタープライズ向けという名の下に作られる非人間的なUIに思い当たるし、ストレートに見れば、UIの見た目になど煩わされず本質を捉えるエンジニアたれ、という主張と捉える事も出来ます。
UIというものは、生命と同様、作るものではなく授かるものだと私は思っとります。基本的に設計不可能なんですわ。子供と同様、製作スタッフがウフフアハハというか、こう、こねこねしているうちにいつのまにやら出来ちゃってるものなんです。まぁ我々自体、神様が暇つぶしに粘土をこねこねして作ったねんどろいどにすぎないのですから、さもありなんといったところでしょう。
2010年7月29日木曜日
[Geek And Poke] クラウドクラウドとわめく上司を正気に戻すには?
ネタ元のGigaOMの記事なんかがまさにそうなんですが「お前、クラウドって言いたいだけちゃうんか」というシーンがあまりにも多いですな。CORBAからこのかた、SaaS/PaaS/IaaS/HaaSと手を変え品を変え、渋太く生き残って来た分散型アーキテクチャにまた新たな別名が加わっただけなのにねw
2010年7月28日水曜日
[Google] 法則発動にならなきゃいいね(棒読み)
どうやら巷間では「トップが禿同士だと法則は発動しない」というジンクスがささやかれているようだ。逸失利益を考慮に入れりゃ立派に発動してるだろという気もするけど。で、今回の件なんだが、うん、御愁傷様です。
2010年7月24日土曜日
[メモ] だからさー
2010年7月22日木曜日
[Programming] Google Books の画像を ZIP でまとめる Firefox アドオン
なんらかの手段によりダウンロードして読むしか無いというわけですが、Google Book Downloader はWindows 専用ですし、グリモンの Google Book Downloader スクリプト+ FlashGot もダウンロードの自動化は可能なものの、ZIPにまとめる作業が要ります。
幸いなことに Firefox アドオンでは nsIZipWriter が使えますので、ここはひとつ作ったれということで作ってみました。グーグル先生に怒られそうな機能ですし、Mozillaのアドオンギャラリーに登録するのは結構ダルいので、野良 XPI として Dropbox の公開フォルダに入れておきます → googleBooksZipper.xpi
なお、手許に Windows 環境が無いので動作検証はしていないのですが、OS の違いを吸収する処理(パスデリミタの切替くらいしか無いんですけどね)は行っているので、多分、Windowsでも動作するでしょう。
単機能なアドオンなので説明は不要でしょうが、一応、取説的なものを以下に書いておきます。
googleBooksZipper.xpiをインストールすると、コンテキストメニューに
と、現在開いている本を ZIP で保存するという項目が追加されます。この項目を選ぶと
と、ZIPファイルの保存先を聞いて来ますので、お好みの場所を選んで「保存」ボタンを押すと、
と、小さなウィンドウが開きます。このウィンドウでは出力する画像の横幅(ピクセル数)が設定出来ます。デフォルトとして1024が設定されていますので、お好みで変えてください。"close this dialog when completed" というチェックボックスがありますが、これにチェックを入れておくと、処理終了後にこのウィンドウを自動的に閉じるようになります。
設定後、ZIP ボタンを押すと処理が開始され、進捗が表示されます。処理の手順としては、まず各ページの画像URLをGoogleに問い合わせます。
続いて、各画像をダウンロードしテンポラリファイルに保存します。
各画像のダウンロードが終わると ZIP 処理が行われ、完了すると
と、その旨が表示されます。これで ZIP ファイルが所定の場所に出来ているはずなので、あとは CloudReaders など、ZIPファイルに対応したリーダーに放り込んで読みましょう。
なお、私は books.google.com を利用しているのですが、books.google.co.jp だと画像のダウンロードが中断してしまうことが多々あるようです。原因は不明なのですが、中断した場合はいったん close して最初からやり直すしか今のところ手がありません。一見したところアクセス制限してるぽいので、ウェイトを入れる必要があるのかもしれませんね。
2010年7月14日水曜日
[Google] ビッグブラザー化がさらに進行
中国とは「仲良く喧嘩」してるだけ、ってのがバレちゃいましたし、暗黒面を "Don't be evil." という謳い文句だけで 覆い隠すのはもはやムリと判断して政治献金しまくりですし、なんかもう「ゲロ以下のにおいがプンプンするぜッーーーッ!! 」な感じがしてまいりました。
2010年7月12日月曜日
2010年7月9日金曜日
[メモ] Graviluxに宇宙の熱的死を思ふ
星(というか質点)を一カ所に集めるように画面中心に向かってぐるぐると指を動かしていると、そのうち星々は一点に収束してくる。そしてそのまま指をホールドして重力を完全に一点に集中させると、まるでビッグクランチ後のビッグバンの様に星が飛び散る。この軌跡が、重力を集中させた点を焦点とする楕円にみえたり、そこを頂点に放物線を描くように見えたりと、実に美しい。
興味深いのは、このビッグクランチ・ビッグバン過程を経る毎に少しづつ星が少なくなることだ。恐らく、個々の星にはidが割り振られており、一定時間内にid個数分の処理が行われているのだろうが、処理落ちにより処理出来なかった分が処理キューから削除されてしまうといった感じのバグなのだろう。普通に考えればそうなるんだろうが、もしかしたら陽子同士の衝突までシミュレートされてるのかもしれないw
衝突によって生じたさまざまな荷電粒子が、この真っ暗闇の中にあふれているのかなぁ、などと思わず宇宙のこしかたゆくすゑながめ侍りける程に時雨来て神鳴るにぞおどろかれぬる。いとをかし。
2010年7月7日水曜日
[メモ] とりあえず
- 「みんな」という言葉が出て来たら、とりあえず疑ってかかった方が良い。
- 「美しくありたい」とか「強くなりたい」ってのは、ある種の狂気なんだよね。
- こだわりを持つという事はリスクを背負うという事に他ならない。
- 『リューシカ・リューシカ』をビルドゥングスロマンとして読むと、これがまたいいんだわ。
- 網膜は球面なのに「真っ直ぐ」を認識出来るという事は、すなわち、脳が球面補正処理をしてるって事。
- まずは「善き悪」と「悪しき善」が厳然と存在するという事を認めるべし。話はそれからだ。「悪しき善は善ではない」などとぬかすお子様は相手にするだけ無駄。
- チョムスキーの凄さは「言語はインスタンスにすぎない」と見破った点に尽きる。他は全部オマケ。GB理論とかね。
- ミニマリスムの要諦は「最小にする」ではなく「どこを最小とするか」である。
2010年7月6日火曜日
[メモ] GigaOM 終焉のにほひ
こういった提灯記事が出てくるようではもうオシマイだ。いまどきエコなんていう胡散臭いネタを臆面も無く採り挙げる時点で既に詰んでるような気もするけどね。
Mathew Ingramもそろそろこのメディアとは距離を置いた方が良いんじゃなかろうか。未だにソーシャルネットワークでウハウハwなどと考えている連中とは明らかに違う論調であり、GigaOMにおいて「もちつけ池沼」という良心が垣間見られるのは、今や彼の記事くらいしか無い。
それにしても「全肯定か全否定のどちらかしか無い(キリッ」という白黒バカが、なんでこうも多いのだろう。現実がつまらないのではない、彼らの見方がつまらないだけなのだ。
2010年6月26日土曜日
[Google Chrome] バカの一つ覚え
Appleが1ボタンマウスに拘りすぎてUXを犠牲にしてしまったという歴史を彼らは知らないようだ。ミニマリスムとは「少なければ少ない程良い」という安易な思想では、断じて、無い。
あいかわらず肝心な事については気付かない間抜けさ加減。速度なんて時間が経ちゃイヤでも上がるものなのにそれをコアコンピタンスにしちまうなんて正気の沙汰じゃねぇ。
2010年6月25日金曜日
[メモ] Amakudari 2.0
あるいは集票システム2.0ってとこか。Googleがそうなんだが、組織運営において政治力が技術力より優先されるようになると、その組織はもう壊死寸前だよ。凍傷における処置と同様、切断しか手は無いわけで、敗血症を防ぐ為にさっさと切り離した方が良いと思うが。
2010年6月23日水曜日
[メモ] 今日は暴言の日
・アドワーズお試しとかうぜぇんだよ、送って来んなボケ。
・おまえ意味と意義をごっちゃにしてねぇか。
・あぁ、それ歴史じゃないから。単なる二次創作だから。
・「他人の無知には寛容であれ、自分の無知には厳しくあれ」ごめんそれムリw
・鬼が恐かったら鬼になるしかない。いじめられたくなかったらいじめるしかない。かくして世界はいつまでたってもこのザマだ。
2010年6月22日火曜日
[メモ] ビットは撒き餌
両者ともに素晴らしいという点につきましては、わたくしごときが申し上げるまでもないのでありますが、特にリューシカについては、これはもう万人が読むべき珠玉の一冊だと申し上げてよろしいかと存じます。読む人が何を意識しているかに応じて、ふさわしいシニフィエがページから立ち上がってくるのです。「わからない時はとにかくしゃべれ」という一節から、プログラマーならばコードレビュー、UIデザイナーならばスケッチやモックといった「アウトプット」を通じて新たなインプットを得るというフィードバック的・円環的開発姿勢に思い至ることでしょう。
で、内容についてもさることながら、IT托鉢たるわたくしといたしましては、電子書籍と従来型書籍の幸福な結婚により産まれたこの素晴らしいUXを褒め讃えずにはいられないのであります。ビットメディアで購入モチベーションを高め、紙メディアで通して読んで自らの血肉とするという、ある意味では昔から綿々と続いている黄金のパターンをガンガンONLINEは定着させたんだなという感がわたくしにはございます。ガンガンONLINEに限らず、『千夜千冊』然り『REWORK』然りでありまして、consumerにとってはもちろん、providerにとっても、まさに一粒で二度おいしいウハウハ状態だと申せましょう。
紙メディア全滅とか言ってる間抜けも居るようですが、アーカイビング・推敲・コンテキスト付与・校正といった紙メディアが培って来た編集的土壌は、ビットメディアが持つ低コスト・即時生といった価値とはまた別の価値を持ち、それはビットメディアだけではそう簡単に実現出来ないものであります。よって、紙メディアはビットメディアという良きパートナーを得て飛躍する可能性を掴んだと捉えるのが妥当であります。
逆に、紙メディアのコアコンピタンスである編集的土壌を持たないところはお役御免となるわけで、屍累々阿鼻叫喚はここしばらく続くのでしょう。S学館のアレとか見てるともうね、この内容でどうやって購入モチベーションを高めろと?としか言い様の無い状態ですしね。まぁ、淘汰されるべきはさっさと淘汰されるべしということかと存じます。
2010年6月18日金曜日
[Safari Extension] lookup.safariextz 1.0.12
各項目の枠線にカーソルを持っていくとカーソルが変わりますので、そのままドラッグして移動して下さい(ドラッグ中は上図の様に、枠線がオレンジ色になります)。
2010年6月17日木曜日
[Safari Extension] lookup.safariextz 1.0.11 を公開しました
1.0.11 では、url の記述時にエンコード指定が出来るようになりました。これで goo国語辞書(eucjp)、やAMAZON(shiftjis)も利用可能です。
記述方法は、これまでの {} を拡張して
{utf8}
{shiftjis}
{eucjp}
という形でエンコード指定を行います。従来の {} 、つまり指定内容が空の場合は utf8 としてエンコードされます。
なお、エンコード指定は
- 大文字は小文字に
- ハイフンとアンダースコアは無視
- utf-8, UTF-8, Shift_JIS, EUC-JP
2010年6月16日水曜日
[Safari Extension] ギャラリーへの提出受付が始まったようです
で、めでたく
と相成りましたので、確認の為に Safari Dev Center に行ってみたところ
とのことでした。段取り悪いっすねw、というか私が勇み足だったのでしょうか。
それにしても、いくらまだステータスが experimental だからとはいえ、バイナリとアップデートマニフェストのホスティングは自分でやってね、というのは御無体ですな。やはりこの辺のこなれ具合は Google に一日の長ありといった印象です。
追記: 今行ってみたところ、登録ページ、Safari Dev Center ともに復帰してますね。よかったよかった。
2010年6月15日火曜日
[Safari Extension] lookup.safariextz 1.0.10 を公開しました
2010年6月14日月曜日
[Safari Extension] 自動アップデートに対応しました
このバージョン以降は自動でアップデートが行われるようになります。自動アップデートに関する記述を追加したのみなので、機能面としては 1.0.3 と変わりません。「アップデートを自動的にインストール」のチェックに関しましてはお好みでどうぞ
[メモ] 終風先生いつもごちそうさまです
私の様な根性曲がりにとって、終風先生の「ふにゃふにゃな印象を与えつつも、実は背筋がぴしっとしている」という芸風は憧れなのであります。露伴を思わせるんですな。共通項は「家事が大好き」ですかね。
で、
UTF-8でも出ないか。まあ、そういう問題でもないが。なんですが、「そういう問題」については「Unicodeに入っていない」ということで問題無いのですが「でもない」については、読み手の問題意識に応じてふにゃふにゃ、というか重層的に解釈する余地が残されています。
私は御覧の通りの根性曲がりなので
- 漢字制限なんてアホのすること
- 漢字はUnicodeで処理出来る、という考え自体が幻想
1.についてはもはや言うまでもないでしょう。戦後のどさくさに紛れてねじ込まれた「当用漢字表」「現代かなづかい」なる愚民化政策については、福田恆存『私の國語敎室』をはじめ、多方面でその弊害(この「害」にしても字形的には間違ってる。あやまれ、白川先生にあやまれ。まぁ、終風先生は白川先生を「と」だと言ってはりましたが)が述べられています。アホなデザイナーが作ったアーキテクチャのせいで、コード量がえらく増えてしまいました。文字コードの量も、それを処理するコードの量も。全く、こいつらのせいで、また休日出勤だぜ。
2.については、要は、我々が現在のコンピュータで日本語を使うというのは「トゥール・ダルジャンで、鴨料理をわさび醤油で食する」が如き暴挙なのだということなんですわ。コンピュータというものの背後にある、まさにゴチック建築のように堆く積上げられた「合理主義という名の神」への信仰告白(ちなみにRubyもこれですね)に目を向けようとする日本人は少ないです。その表面に紙を貼付けただけのハリボテを作り上げ、それを「日本のコンピュータ」と称する愚が現状には満ちあふれています。しょうがない、という側面はもちろんあります。現にこうやってUTF-8で書いているわけですし。
でもこれは、日本人(というか漢字を食べて来た民族一同)が、いつか自力で解決しなければならない問題なんですわ。道のりは遠く、玄月先生ですらツールについては全面的に既存のものに頼らざるを得ないという状況ではありますが、それでもなお我々は、コンピュータというもの、チューリングマシンというものを「和」の概念により分解・再構築するという使命を持っています。
なに、じっくりやりゃいいんですよ。我々の祖先は何百年もかけて漢字を食べ、消化し、日本語の血肉として来たじゃないですか。大丈夫です。森有礼とか表音主義者といった、足引っ張るバカは居ましたし、今もこれからも居るでしょうけど、こいつらは放置しときゃ自爆しますから、耳を貸さないようにすればOKです。
2010年6月13日日曜日
[Safari Extension] 設定用 UI を追加しました
- 記述する内容の詳細は、昨日のエントリを参照して下さい
- title, url, command のうちのどれか一つでも欠けると、その行はスキップされます
- apply ボタンを押すと設定が書き込まれ、直ちにコンテキストメニューに反映されます
2010年6月12日土曜日
[Safari Extension] lookup.safariextzのパターン定義の書き方
パターン定義の部分にJSON形式で記述すれば良いわけですが、これを素でいじるというのはどうみてもしんどいので、それっぽいUIを機能拡張ビルダーで作ろうと思い、昼間っからゴニョゴニョとやっておりました。
で、結論から申しますと「無理です」。この程度のパーツで一体どうしろとw
というわけで、Chrome Extensionでおなじみの、HTMLで設定用UIを書くという方針に変えました。しばらくかかりそうなので、お茶濁しではありますが、エディタでパターンを編集して貼付けるというありがちな方法を書いておきます。
まずは上の画面(Safari→環境設定→機能拡張→lookup)のパターン定義の内容をコピーして、エディタに貼付けると、こんな感じです。
[{"command": "googleEJ", "url": "http://translate.google.co.jp/?hl=ja&tab=wT#en|ja|{}", "title": "lookup: Google翻訳(英和)"}, {"command": "alc", "url": "http://eow.alc.co.jp/{}/UTF-8/?ref=sa", "title": "lookup: アルク"}, {"command": "ud", "url": "http://www.urbandictionary.com/define.php?term={}", "title": "lookup: Urban Dictionary"}]このままだと扱いづらいのですが、そこはJSONですから、好きな書式に書き換えましょう。私はこんな感じにしています。
[これでおわかりかと思いますが、基本的な構造は
{
"command": "googleEJ",
"url": "http://translate.google.co.jp/?hl=ja&tab=wT#en|ja|{}",
"title": "lookup: Google翻訳(英和)"
},
{
"command": "alc",
"url": "http://eow.alc.co.jp/{}/UTF-8/?ref=sa",
"title": "lookup: アルク"
},
{
"command": "ud",
"url": "http://www.urbandictionary.com/define.php?term={}",
"title": "lookup: Urban Dictionary"
}
]
[{site1},{site2}, ...]と、個々のサイトの記述が配列に格納された形になっており、サイトの記述は
{"command": ---, "url": ---, "title": ---}という3つの項目を持っています。
titleにはサイト名を、commandには何らかのユニークな文字列を入れてやります。urlはサイトに応じてパターンを見つける必要があります。たとえばgoo辞書(英和)でtestという単語を引き、URLを見ると
http://dictionary.goo.ne.jp/srch/ej/test/m0u/となっていますので、testの部分を入れ替えてやれば他の単語も同様に引けるというのがわかります。lookup.safariextzはurl内の{}の部分を、ページ内で選択された単語やフレーズをencodeURIComponent()したもので置き換えるようにしていますので、この場合は
http://dictionary.goo.ne.jp/srch/ej/{}/m0u/としてやれば良いという事になります。なお、辞書サイトの全てがこのパターンで行けるとは限らないのでご注意ください。POSTメソッドでないと駄目とか、文字コードはShift-jisでないと駄目といったタイプのサイトには、今のところ、lookup.safariextzは対応出来ません。
私はWikipedia(J)とウィクショナリー日本語版の2つを追加して、
[という記述にしました。titleには、他の機能拡張のアイテムと並んでもまぎらわしくないように、頭にスペースを入れてみました。
{
"command": "googleEJ",
"url": "http://translate.google.co.jp/?hl=ja&tab=wT#en|ja|{}",
"title": " Google翻訳(英和)"
},
{
"command": "alc",
"url": "http://eow.alc.co.jp/{}/UTF-8/?ref=sa",
"title": " アルク"
},
{
"command": "ud",
"url": "http://www.urbandictionary.com/define.php?term={}",
"title": " Urban Dictionary"
},
{
"command": "wikipediaJ",
"url": "http://ja.wikipedia.org/wiki/{}",
"title": " Wikipedia(J)"
},
{
"command": "wiktionaryJ",
"url": "http://ja.wiktionary.org/wiki/{}",
"title": " ウィクショナリー日本語版"
}
]
あとはこれをパターン定義の項目にペーストしてやればOKということになるのですが、その前に、ちゃんとしたJSON形式になっているかどうか確認することをお勧めします。私はJSONLintでチェックしています。チェックしてみてOKだったら、記述をパターン定義の項目にペーストしてやりましょう。
適当なページを右クリックしてコンテキストメニューを表示すると
という具合に、新たな項目2つが追加されているのが確認出来ると思います。
ちなみにtitleは何を書いても構わないので
[と記述すると
{
"command": "googleEJ",
"url": "http://translate.google.co.jp/?hl=ja&tab=wT#en|ja|{}",
"title": " ____ ∧ ∧"
},
{
"command": "alc",
"url": "http://eow.alc.co.jp/{}/UTF-8/?ref=sa",
"title": "|\ /(´~`)\"
},
{
"command": "ud",
"url": "http://www.urbandictionary.com/define.php?term={}",
"title": "| | ̄ ̄ ̄ ̄ ̄|"
},
{
"command": "wikipediaJ",
"url": "http://ja.wikipedia.org/wiki/{}",
"title": "| |=みかん=|"
},
{
"command": "wiktionaryJ",
"url": "http://ja.wiktionary.org/wiki/{}",
"title": " \|_____|"
}
]
といった感じのコンテキストメニューになります。こう見えても、耳の部分を選べばGoogle翻訳が、みかんの部分を選べばWikipedia日本語版がきちんと呼び出されます。はてしなく使いづらいですがw
ちなみにメニューアイテム個数の上限は今のところ10個までとなっています。そのため、12行のクマーAAをtitleに入れてみたところ足が切れてしまいました。ならば、ということで機能拡張ビルダーでメニューアイテムを100個くらいまで増やしたれ、と手を動かしかけましたが、何か間違ってるような気がしましたのでやめましたw
2010年6月11日金曜日
[Safari Extension] change イベントのターゲットは safari.extension.settings
この件に関しましてはちょっと躓きまして、タイトルにもあります通り「change イベントは safari.application ではなく safari.exstension.settings で addEventListener しなきゃ駄目」という事に気付くまでは、イベントが全然入って来ないので頭を抱えておりました。ドキュメントの
The target of the event is the settings or secureSettings object.という一文を見落としていたと言うわけです。ドキュメントはきちんと嫁ということですなw
[Google] せやからゆうたやん
[TNW] No More Pretty Picture Suggestions On Google.com
案の定といったところだが、それにしても最近の Google は戦略面においてこういった脇の甘さが目立つ。企業というものはどうしても、でかくなると、多角化・顧客重視などといった美名のもとでこういった「リソースをドブに捨てる」行為を行ってしまう運命にあるのだろうか。コアコンピタンス分野において最近発表された目立つ成果といえば Caffeine くらいかなという印象なのだが、これにしたって "disruptive" だとはお世辞にも言えない。どうやら順調に Microsoft の轍を踏みつつあるようだ。
[Safari Extension] コンテキストメニューの動的書き換え
頭を抱えていたのですが、イベント受信時にSafariExtensionContextMenuItemがevemt.targetとして渡されるということがわかったので、これのtitle, command, disabledプロパティを設定することでコンテキストメニューを書き換えるという手でやってみましたところ上手くいきました。書き換えるタイミングは、コンテキストメニューが実際に表示される前に発行されるvalidateイベントを受信した段階で、ということになります。
コンテキストメニューに関して制御出来るのはtitleとcommandの書き換えおよびdisabledの設定によりアイテムの表示/非表示を切り替えることだけで、新たにアイテムを追加する事は出来ません。よって、機能拡張ビルダーでダミーのアイテムをあらかじめ10個ほど確保しておきます。こんな感じです。
実際に表示するタイトルとコマンドは設定から読み込みます。patternというキー名で、中味はJSON形式で記述することにしました。
設定はサイト毎に
{"command": "googleEJ", "url": "http://translate.google.co.jp/?hl=ja&tab=wT#en|ja|{}", "title": "lookup: Google翻訳(英和)"}と記述したものを配列でまとめています。ちなみにurlの{}の部分は、単語やフレーズをencodeURIComponent()したもので置き換えられます。
実際の書き換え処理はvalidateイベントのリスナーで行います。ビルダーで登録したアイテム数ぶんvalidateイベントが発生しますので、設定の個数ぶんだけtitleとcommandを書き換え、余った分はdisabled=trueとして非表示にしています。以下はGlobal HTMLの一部です。initAll()はonloadハンドラで、設定をvar patternに読み込み、addEventListenerでvalidateイベントを監視しています。
var pattern = undefined;という感じで、とりあえず目的は達成したのですが、このやり方はかなりややこしいですね。邪道ぽいですし。やはりレファレンス通り、appendContextMenuItem等で制御出来るようになるのを待った方が賢明かもしれません。
function initAll() {
pattern = JSON.parse(safari.extension.settings.pattern);
safari.application.addEventListener(
"validate",
function(event) {
if (event.command < pattern.length) {
event.target.command = pattern[event.command].command;
event.target.title = pattern[event.command].title;
event.target.disabled = false;
}
else {
event.target.disabled = true;
}
},
false
);
...
以上の追加内容はGitHubにバージョン1.0.1として上がっていますので、詳細はそちらを御覧下さい。
2010年6月10日木曜日
[Safari Extension] 辞書サイトを開く機能拡張 (lookup.safariextz) を GitHub にアップしました
- インストール用バイナリ→ lookup.safariextz
- Gitリポジトリのトップページ→ コチラ
- Google翻訳(英→和)
- アルク
- Urban Dictionary
こちらの資料を見ると、SafariExtensionContextMenu クラスに appendContextMenuItem といったコンテキストメニューを操作するメソッドが用意されているのですが、インスタンス (safari.extension) を見る限りではプロパティが存在しません。Safari Extension まわりはまだまだ開発中という事ですし、このへんに関しましても徐々に実装が進められるということなのでしょう。
2010年6月9日水曜日
[Safari Extension] safariextz の解凍
$ xar -xf [filename]でOKです。ちなみに safariextz ファイルが格納されている場所は
~/Library/Safari/Extensionsですね。
2010年6月8日火曜日
[Safari Extension] injected script が複数個ロードされる場合があるんだが
とりあえずの回避策として、無効な injected script では document.getSelection()が常に undefined を返すので、その場合は Global HTML に対する dispatchMessage を発行しないようにしました。根本的な原因はまだわからないので、勉強かたがたドキュメントを隅々まで読んどかなあきまへんな。
injected.js
safari.self.addEventListener(
"message",
function(msg) {
const pattern = {
google: "http://translate.google.co.jp/?hl=ja&tab=wT#en|ja|{}",
alc: "http://eow.alc.co.jp/{}/UTF-8/?ref=sa",
ud: "http://www.urbandictionary.com/define.php?term={}"
};
var w = document.getSelection().toString();
if (w) {
safari.self.tab.dispatchMessage(pattern[msg.name].replace("{}", encodeURIComponent(w)));
}
},
false
);
[Programming] Safari Extension を作ってみた
- Global HTML は Chrome で言うところのバックグラウンドページ
- injected Scripts → content_scripts
- Extension Bar → ブラウザアクション
- dispatchMessage → chrome.extension.sendRequest
- info.plist → manifest.json
試しに作ってみたのは、ページ内の単語やフレーズをGoogle翻訳、アルク、Urban Dictionaryといった辞書サイトに渡して新規タブにて表示するというものです。マウスで単語を選択しコンテキストメニューからどの辞書サイトを呼ぶかを選ぶようにしています。
構成は Global HTML と injected script の組み合わせという事になります。以下は現状のソースです。
global.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" charset="utf-8">
function initAll() {
safari.application.addEventListener(
"command",
function(event) {
safari.application.activeBrowserWindow.activeTab.page.dispatchMessage(event.command);
},
false
);
}
</script>
<title>test - Global HTML page</title>
<body onload="initAll();">
</body>
</html>
injected.js
safari.self.addEventListener(
"message",
function(msg) {
var w = document.getSelection().toString();
switch (msg.name) {
case "google":
window.open("http://translate.google.co.jp/?hl=ja&tab=wT#en|ja|" + encodeURIComponent(w), "_blank");
break;
case "alc":
window.open("http://eow.alc.co.jp/" + encodeURIComponent(w) + "/UTF-8/?ref=sa", "_blank");
break;
case "ud":
window.open("http://www.urbandictionary.com/define.php?term=" + encodeURIComponent(w), "_blank");
break;
}
},
false
);
info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDisplayName</key>
<string>lookup</string>
<key>CFBundleIdentifier</key>
<string>com.yourcompany.lookup</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>Chrome</key>
<dict>
<key>Context Menu Items</key>
<array>
<dict>
<key>Command</key>
<string>google</string>
<key>Identifier</key>
<string>google</string>
<key>Title</key>
<string>Google翻訳</string>
</dict>
<dict>
<key>Command</key>
<string>alc</string>
<key>Identifier</key>
<string>alc</string>
<key>Title</key>
<string>アルク</string>
</dict>
<dict>
<key>Command</key>
<string>ud</string>
<key>Identifier</key>
<string>ud</string>
<key>Title</key>
<string>Urban Dictionary</string>
</dict>
</array>
<key>Global Page</key>
<string>global.html</string>
</dict>
<key>Content</key>
<dict>
<key>Scripts</key>
<dict>
<key>Start</key>
<array>
<string>injected.js</string>
</array>
</dict>
</dict>
<key>ExtensionInfoDictionaryVersion</key>
<string>1.0</string>
<key>Permissions</key>
<dict>
<key>Website Access</key>
<dict>
<key>Level</key>
<string>All</string>
</dict>
</dict>
</dict>
</plist>
なんといってもコンテキストメニューがさっくり使えるのがうれしいですな。まだ設定画面等については未調査ですが、ざっくりと見た感じでは Chrome Extension よりも使い出がありそうです。機能拡張ビルダーまわりは、まだまだこなれてないようで良く落ちるんですが、まぁこれはそのうち改善されるでしょう。そういえば「拡張機能」じゃなくて「機能拡張」なんすよね。INIT/cdev時代を知るものにとっては、やっぱり「機能拡張」の方がしっくり来るんですわw
処理の流れとしては
- コンテキストメニューからどのサイトを開くかを選択するコマンドを発行
- Global HTML がコマンドを受信
- Global HTML はページ内コンテンツにアクセス出来ない(つまりページ内の単語やフレーズが拾えない)ので injected script に対して dipatchMessage を発行し、その際にパラメータとしてコマンドを引き渡す
- injected script は document.getSelection() により、ページ内の単語やフレーズを取得し、コマンドに応じたサイトのURL を生成し、window.open(url, "_blank") により新規タブでページを開く
ちなみに window.open()でタブを開いているので、ポップアップが禁止されていると(「Safari→ポップアップウィンドウを表示しない」にチェックが入ってると)ページが開きません。これは問題ですね。これを回避する為には safari.self.browserWindow.openTab() といった Window/Tab 関連の新規 API を呼ぶしか無いようですが injected scripts からはこれらの API が呼べないようです。ということは、injected scripts から Global HTML に URL を渡す dispatchMessage を発行するってことですか。結構めんどくさいかもw
追記: Global HTML 側で openTab() を呼び出すように変更。それほど面倒じゃないですね。アプリとコンテンツの分離という観点からすれば、これはこれで一貫性があると言えましょう。
global.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" charset="utf-8">
function initAll() {
safari.application.addEventListener(
"command",
function(event) {
safari.application.activeBrowserWindow.activeTab.page.dispatchMessage(event.command);
},
false
);
safari.application.addEventListener(
"message",
function(msg) {
var newTab = safari.application.activeBrowserWindow.activeTab.browserWindow.openTab();
newTab.url = msg.name;
},
false
);
}
</script>
<title>test - Global HTML page</title>
<body onload="initAll();">
</body>
</html>
injected.js
safari.self.addEventListener(
"message",
function(msg) {
const pattern = {
google: "http://translate.google.co.jp/?hl=ja&tab=wT#en|ja|{}",
alc: "http://eow.alc.co.jp/{}/UTF-8/?ref=sa",
ud: "http://www.urbandictionary.com/define.php?term={}"
};
safari.self.tab.dispatchMessage(pattern[msg.name].replace("{}", encodeURIComponent(document.getSelection().toString())));
},
false
);
[Apple] Safari 5 に extension キタキタ
2010年6月5日土曜日
[メモ] そっちがそれなら、こっちはセーマンでいくぜw
なるほど、ダビデの星ってことですか。Kara Swisher 女史が「イルミナティ?」と思うのも無理は無い。ソーシャルメディアなんて所詮はカルト、ってことが良くわかりますね。
関連記事: [メモ] インターネットはエンパシーボックスの夢を見るか?
2010年6月4日金曜日
[Google] 表面を取り繕う
[INSIDE GOOGLE] New Google option: look like Bing
まさに「首のすげ替え」ですな。「さらに劣化」という共通点も一緒で、これぞまさにシンクロニシティw
関連記事: [メモ] 進化の袋小路 (animals/boomboxes/Windows PCs)
2010年6月2日水曜日
[GigaOM] Google TV は WebTV の二の舞になるのか?
こんなエントリを上げたわたくしといたしましてはニヤニヤしながらこの記事を読ませていただいたわけであります。
内容は、Michael Gartenberg が Engadget に寄稿した「やぁ、WebTV パート2さんじゃないですか(笑)」という記事に対する批判といったところ。Gartenberg の「ユーザはテレビでブラウジングしようなんて思っちゃいないってのはリサーチで既に何度も確認されてますやん」といった主張を認めつつも「いや、視聴者がWeb上で体験する内容は昔とは全然変わったよ、特にビデオはね」「HuluとかYouTubeなんてテレビにクリソツじゃないっすか」「他社のタブレットPCが総崩れになった後、iPad は実に良いタイミングでリリースされ、ユーザに受け入れられた。Google TVも、今こそ条件が揃ったと言えるんじゃないすかね」と主張している。まぁ、身内思いから出た援護射撃という線も無きにしもあらずなんだが、それにしても歯切れの悪さは否めない。
私から見れば、これってどう見ても分の悪い博打なんだけどね。いまどき「みんなで仲良くコラボしましょう」じゃねぇだろとw。で、これって「こける時も一緒にね♥」ということでもあるんだが、ここでコケたところでGoogle的には屁でもないんだろうけど、気合い入りまくりな某社とかは、うん、どうなんでしょ。いや、なんかね、HTPCとかUMPCとかいったキーワードに踊らされた頃のことを思い出しまして、ちょっと不安になったんですわw
テクノロジー云々ではなく「広告ビジネスの終焉」というコンテキストで捉えれば、結果は自ずと見えてくるはずなんですけどね。ブッフハイトはあくまでも AdSense を「オマケ」として作ったんすよw
[メモ] 「可愛さ=足の多さ」説が否定されましたw
ということで、河飯家の女性陣にとっては到底受け入れ難い数字が出ております。画一的な審美眼の蔓延についてはわたくしといたしましても深く憂慮するところでありますが、コメント欄には「タランチュラはハムスターやウサギよりも可愛いじゃん」「イカは腕が8本と触手が2本もあって可愛いよ」「それ私が言いたかったのに〜」「腕が6本で足が2組なんじゃね?」「どっちにしても可愛いから問題無し」といった心強い主張が見られ、ほっと胸をなでおろしております。
[メモ] 猫も杓子もソーシャルw
Jason Kottke が採り上げたこの記事、実に示唆に富んでいる。まぁ、早いハナシが、内向性=ネガティブとしか捉えられないバカや、なうなう言ってるアホはさっさと死んでくれってことですなw
2010年5月30日日曜日
[Apple] 譜面台にiPad
ウケ狙いでやってみたのですが、結構使えるんですわコレが。譜面として使うだけでなく、マイナスワンコンテンツなんかもiPadに入れときゃそのまま使えるわけで、機材が非常にすっきりしましたよ。この写真ではパート譜を出しているわけですが、オケ聴くときなんかは、当然、膝の上に置いてスコアを表示するわけです。「うは、これハース版やった。オレ耳悪過ぎw」といった痛し痒しもあって、なかなか楽しめました。
バランスと利便性のことを考えるならば、こりゃもうあれですな、もう1台追加で買うしかないですな。でもって、iPad#1には偶数ページ、#2には奇数ページを表示し、ページ送りイベントは Bluetooth経由でやりとりするということでどうでしょう?。うは、仕様書書きたくなって来た。嘘ですw。見開きタイプのデバイスはずっと前からコンセプトレベルで存在していたわけですから、その登場を待つというのが得策ですね。今やこんなのもあるわけですから、A4・B5といったサイズバリエーションのある汎用譜面というか汎用リーダーが出てくるのもそう遠くないでしょう。あとは書き込みへの対応ですな。紙と鉛筆のユーザビリティに追いつくまで、あと何十年かかりますかね。アルファベット文化圏限定だったら、気合い入れりゃ1年で追いつけそうですけどねw。
「家電のコンピュータ化」「コンピュータの家電化」どっち?というのは前世紀から議論が続いているテーマなわけですが、結局のところこの2つは車の両輪であり、家電(というかコモディティ)がコンピュータ面をするフェーズとコンピュータがコモディティ面をするフェーズがある、というだけのことです。ちなみに今どっちのフェーズなの?という点については単純にコストを見ればわかります。コンピュータががんがん安くなる時期は「コンピュータのコモディティ化」フェーズだってことですね。久夛良木氏は「家電のコンピュータ化」しか考えていなかったのでコケたわけですが、iPodからこのかたコモディティ面をしたコンピュータが大挙して押し寄せて来た時期に、その逆を行ったわけですから、当然っちゃ当然なのであります。コモディティの一典型である「譜面」という顏をしたiPadをいま目の前にして、IT小作をやっていた頃に考えていたそんな諸々の妄想が蘇り、感慨深いものがございます。
以上、電子書籍には活字や漫画だけじゃなくこういったジャンルもあるんすよ、ということで、関連各社の皆様方におかれましては是非一度ご検討いただきたく存じま す。
2010年5月27日木曜日
[Geek And Poke] たしかに頭髪も似て来た
ボーグが諸君を同化しようとした場合、ビビらずに small talk(世間話・雑談)でもしときゃ充分ですよということですな。スモールトークといったらアラン・ケイを真っ先に思い起こすというのが我々ギークの悪いクセなんでありますが、その辺の機微も作者さんは良く御存知でいらっしゃる。どんどんピカード頭になりつつある S. Jobs もぴったりハマってますし、iAd の強化の為にはボーグテクノロジーが必須というあたり、実に上手いなぁと感服仕った次第であります。
ネタにマジレスというのも大人げないんですが、ボーグの皆さんは心が虚ろで寂しいからこそソーシャルな生き物になれるのだ、と、アンチソーシャルオヤジであるわたくしなどは常々思っております。ディック的に言えばインターネットは21世紀のエンパシーボックスなわけでして、モバイル化の進行により一層ボーグ化が進行しつつあるということです。まぁ、なうなう言ってる人たちは気をつけたほうがいいよってことですわw
2010年5月26日水曜日
[Google] アレのことなんすけどね
それにしてもGoogleはすっかり、スーツホイホイ戦略というか「こちら側」ホイホイ戦略というか、まぁアレですわ、一種の自転車操業が板に付いて来ましたね。アンチトラストの連中に目を付けられないよう山吹色のお菓子をせっせと贈っているようですが、さっさと分割されたほうが世間の、そしてGoogle自身の為になると思いますが、ここはひとつご検討いただけないものでしょうか。
2010年5月22日土曜日
[GigaOM] ありえんよ
OperaのCTOの発言とのことだが、噴飯ものだ。「金槌を手にした者には全てが釘に見える」ってやつだな。万能のツールなんてねぇんだよw。てゆーか「世界は全てデジタル化出来る」なんていう妄想は、最低でもガニメアンのレベルに達してからほざいてくれや。
まぁ、編集長という立場上、たとえそれがミエミエのポジショントークだとしても言わにゃならん時があるのだという事情は理解出来ますし、それを無下に否定するのは大人げないとは思いますけどね。
[Google] グローリー少佐曰く「アメリカではスーパーヒーローより弁護士の方が強い」
おいおい、NAMCO © 表示してねぇぞ、何考えてんだ。「お前の物は俺の物、俺の物は俺の物」さすがはジャイアンだぜ。殿堂入りとかで適当に持ち上げといたうえで勝手にコモンズ扱いするってのは奴らのよく使う手だしな。
内容はと言えば、わけわからんロゴがゲーム性をぶちこわしている上に、モンスターのアルゴリズムも再現されてない。操作性も壊滅的だ。ネタにマジレスというのも大人げないが、正直「なめとんか」としか言い様が無い。中華みてぇなマネしてんじゃねぇよw