2006/12/29

Access 2007

とりあえず、Access 2007の新機能とかに私が期待するものは無いです。というか無かった。

デザインだとか便利なコントロールなんて後付なり拡張なりで対応できる事だし、コードの記述性も保守性も見劣りする環境で、中規模というか5日以上かかるような開発案件には携わりたくないですし。

今回の新機能に一つのフィールドに複数の値を持てるとかって機能がありますが、、実質は単なるテーブルの分割でしかないし。Lookupした子テーブルのデータを水平に表示できるのは便利かもしれないけど、データ数が限定された状況でなければあまり利用価値が無いように思える。

GridなりList・Combo等の垂直スクロールをもって表現していた多数のデータを、水平方向にも適用したようなものなんだけど、水平方向で同一項目のデータを列挙するのは、あまり良い結果というか習慣を生み出さないのではと思う。有限な水平方向のサイズに対して、垂直方向はスクロールにより無限ってルールでいいと思うのだけど。

Accessで嫌なのがフォームがObjectではない所があります。VBではFormはオブジェクトして扱えるのに、Accessでは単独のStaticなインスタンスとしか扱えない。これがSubformなりを作って行くとなんだか良くわからなくなっていく部分。

Access2007になっても、後々の憂いを考えれば、一日である程度形になって、3日でテスト含めて仕上げられるようなもの以外は作っちゃいけないじゃないかと思うんですが・・・。

Microsoftも安くなったような気もしますが、今の価格を出してまでUpgradeする程の価値はあまりないのではないでしょうか。機能Upというか新機軸の大部分はTeamによるCollaborationであり、その状況での生産性を上げることを目的としているので、組織なりProjectとしてそのあたりを理解してからの導入でなければと。

とはいっても新しいPC買うとバンドルされてきて徐々にOffice 2007になってしまうんでしょうけど。

続きを読む・・

2006/12/28

Anywhere in the world.

年の瀬も迫ってきますとテレビ番組は一年を振り返ったり特集物や特番が多くなりますが、最近あまり面白くないというか興味が無くなってきてたりします。

個人的に日本のTV番組を何処からでも見らるようにしてからもう5年ぐらいになりますが、視聴頻度はどんどん下がっていたりします。以前は頻繁にSoftwareやHardwareの構成を変えたりしていましたが、最近はあまり手を入れなくなりました。

ちなみに現在はMythTVでチューナーカード二枚差しで使ってます。特に二枚使うほどの見たい番組があまりない事もありますが、リアルタイム視聴とかって最近はさっぱりしなくなりましたので、構成には疑問も感じる今日この頃です。適当に録画予約している番組をこちらに転送するより、削除している方が多いような気もしますし。

ちなみに日本の環境がFiber opticsな事もあり、こちらがADSLでも特にストレスはないです。光ファイバーといえば日本での普及状態は都市部に関してはかなりのすすんでるようですね。やはり電柱のメリットが大きいのでしょうか。目障りだし物理的にも邪魔な電柱ですが、敷設というかケーブルの増設とかの際の工期とかコストは地中線に比べてAdvantageがあるんでしょうね。

日本のテレビに関しては、もう少しというか10倍くらい余分にチャンネルが欲しいです。まぁケーブルTVと衛星にはあるんでしょうけど。地上波デジタルって始まってるらしいでず、チャンネル数は増えてるんですかね? 例え増えていたとしても理不尽な録画規制があるんでAnywhereなんて出来ないんで、どうでもいいんですけどね。

なんにしてもこのままいけば、Analogな地上波が停止するころには日本のテレビ番組をわざわざみたいとお思わなくなっているんではないかと。

とはいいながら、MythTVのVersion Upをしようと思ってこんな記事を書いてたりするだけなんです (笑

続きを読む・・

2006/12/27

Confusion?

VMWareにはかなり初期の頃から利用していますが、Mac用のVMWareがβ Version ですが出ていますね。CodenameがFusionとは中々素敵な名前です。

個人的にはMacにあまり興味がないというか必要性を感じてないのですが、 これは面白いかなって思います。Mac OSがというかHardware Architectureがx86ベースになったのでVMWare的にもOKって感じなんでしょうが、これとは逆の動作をするものがあるといいのにとは多くの方が思っているのでは。つまりはWindowsなりLinux上で動くVMWare(?)でMac OSが動く物は出ないのか、それとも出せないのかって事です。AppleとしてはHardware込みでのMacintoshなので、そんな物認めないスタンスの用ですが。

ライセンス的な問題さえなければ技術的にはまったく問題なく(各種ドライバーサポートの問題はあるけど) 、OSx86 Project なんてのもあるぐらいですけどね。

まぁ個人的にはMacOSが云々よりも、HostOS上のVMWareでGuestとして動くOSのイメージが、切り替えでHostOSとして動いて元のHostOSをGuestとして動かせるような仕組みは出来ないかなとか思っています。

つまりはあるときはWindowsをHostOSとしてメインに使い、LinuxなりMacOSはGuestとして使う。そしてrebootでLinuxなりMacOSをメインとして使い別のOSはGuestとして起動って感じです。 利点としてはGusetOSになることで受けるパフォーマンス上やサポートするハードウェア制約を、そちらをHostとする事で乗り越える事が出来る事でしょうか。


実機を仮想化する事は、旧機種・環境の保存・延命的な用途で行う機会も増えてますが、仮想化された環境を実機で動かす、ましてや両方で使うなんて事をやろうなんて事は無謀なんでしょうかね? WindowsXP的にはハードウエアプロファイルの指定による起動とかでどうとでもなりそうですが、Linux・MacOSは如何にって感じです。

なんにしてもこれがスムースに実現できると、真のDual BootというかMulti BootでMulti OSな環境が実現出来て幸せなんじゃないかなと。

それとHostと各GuestOS間は、XWindowなりRDPとかを利用してシームレスというか、Copy&Pasteぐらいは可能な連携が出来れば・・・・。

続きを読む・・

2006/12/26

Economical Project

最近ちょっとPrivateで知人に頼まれてDesktopなdotNetアプリケーションをASP.NET化したんですが、追加要望でコツコツと手を入れています。

Hosting場所は私がテスト用に使ってるServerだったりもしますがソースも完全に渡してるんで、もう自分で好きにしてよって感じもしますが、なにやらノせられてプロジェクト(?)は続いております。.NetにしてもC#にしても、私はPGとしての第一線からちょっと離れてしまってたので、調べながらやるのは依頼主と一緒なんですけどね。

今やってて何がダメかっていうと、二人ともデザインセンス無し(笑。 センスも無ければやる気も無しって状態に近いかと。質実剛健といえば聞こえはいいですが、お遊び用のコードなんで例外処理とか抜きまくりだし・・・。

それとテスト用に無償で借りてるHosting ServiceなんでDatabaseも容量は小さく、Transaction log領域なんて寂しい限りです。最大80,000行のレコードを挿入してからQueryで集計処理とかあったんですが、一回は出来ても次から無理ですから。Deleteすら出来はしないみたいな感じで、面倒だから集計処理後にTruncate tableとか入れたりしてました。

結局はこんな集計はデータ作成時にコード上でやれば、テーブルにレコードを挿入する必要ないでしょって事で、コードを大幅書き直し。パフォーマンスも大幅Upでクライアントも大満足みたいな結果は出ましたが。

たまにはこんな激貧Projcetもまた楽しいかと。

続きを読む・・

2006/12/25

Revision control.

最近になってPrivateでは、Visual Studio 2005でもSubversionというかAnkhSVN を使うようになりました。

それで サーバーは自分で立てるんではなくて http://unfuddle.com/ とかも使ってみてます。ドキュメント管理用にTortoiseSVNとかも使ってたんで最低限は使えるんですが、
Visual Source Safe(VSS)な生活が長かったんで戸惑うというか、やりたい事の操作がまだわからなかったり。

そういえばGoogle CodeでProject Hosting して全てを晒せって話もありじゃないかとか思ってたりも。 自分が書いたコードに対するライセンス的な問題さえクリアできれば、Backupもされてるみたいだしサーバーのレスポンスは良いしだし。

VSS も2005になってネットーワークというかWAN経由での利用が楽にはなったし、当たり前だけどVisual Studioとの親和性というか使い勝手はとても良いので、まだ最終的にどうするかは決めかねるところではありますが、暫くは両方使いながら評価したいと思ってます。

ちなみにhttp://unfuddle.com/では15MBまでは無料なアカウントを使ってるんですが、その容量の感覚がまったく掴めないです(笑。ソースコードの容量なんて気にした事なかったですしね。 これも良い経験ですかね?

続きを読む・・

2006/12/24

You wanna change your behavior, don't you ?

Once upon a time, a company released a scheme for client side HTML which name was DHTML. They also proposed a forward-thinking scheme DHTML Behavior. I thought It was a quite good technical idea, but it has not got around enough.

最近Ajaxなコードを良く書くというか試すのですが、思い出すのはDHTML Behavior。MicrosoftがIE 5.0から組み込んだ機能なんですがあまり流行らずって感じです。今になってGoogleとかで検索しても個人の簡単なページしか見つからないし、MicrosoftのドキュメントもURLが変更になったのか探すのも面倒だったり。以前は日本語のHotWiredのWebMonkeyにも解説とかイカしたSampleとかあったんですが今は見れません。 本家WebMokey には記事がありますが、1998年だったんだと感慨深げに読んでいます。

当時DHTML BehaviorにXML+XSLそしてXMLHTTPRequestを使って業務系なVBで作られたDesktopアプリケーションをいくつかWebなApriに移行したりしてましたが、IE限定とはいえあれは画期的というか開発者というよりGeekなProgramerにはとても心地よいものでした。ページは全てXML記述。各コンポーネントは独自に制定したタグにより記述され、クライアントであるブラウザ(IE)はXMLページを開く事により連鎖的にXSL・CSSを取り込みブラウザ側でTransform。後は今で言うAjaxなアプリケーションとして動作するような仕組みでした。入力に対するValidationやフィールド移動なんかの機能も定義済みで、単一画面であり画面遷移なしで検索結果の表示なんかも当然XMLHTTPで。

そんな感じで個人的にはかなり気に入っていたんですが、予算を付けられずVisualなFormデザイナーとかを作ろうとしている段階でお蔵入りとなりしまた。

今思うと時代が早すぎたのかなぁと。XMLなんて理解する人が少なく、またXSLTによるTransformなんて想像の外だった時代ではありましたし、ブラウザがフロントエンドなアプリケーションの利便性に対する理解も少なかった時代でしたし。

今ならaddEventListenerとか、Prototype.jsのbindAsEventListenerでとかって話もあるんですが、css(Javascriptも埋め込んでしましたが)で定義出来てたDHTML behaviorの方がComponetの定義としてはイカしてたとたんじゃないかと。

でもまぁ時代も流れて技術のトレンドも変わるって事で、Prototype.jsを使いこなすが吉かなぁと思う今日この頃です。でもDHTMLって言葉なんか好きだったんだよね。

続きを読む・・

2006/12/23

Happy computing with Google.

Gmail辺りから急にGoogle関連の物を使う事が増えています。というか逆に意識して増やしているんではありますが、これはこれで楽しく便利かなと思う今日この頃です。

何が便利かというとストレージというかバックエンド、つまりはDataがGoogleのServer上に保存されているので、持ち運ぶ必要がない点ですね。後は自由にファイルを置ける場所を提供してくれたらなぁとか思いますが、それを無償で提供するようなビジネスモデルが簡単に成立するわけもなく無茶な願いですね。

Gmailをストレージ代わりに使う事も出来るんですが、それはちょっと違うんじゃないかとも思いますしが、でもGmailをDB的に使うのってどうだろうとかって考えてたりして・・・。

Gmailの機能で何が最も評価できるかって言ったら、それはSPAMフィルタじゃないですかね。ユーザーからのSPAMに対する申告とかを評価・利用しているのが効果的に利いてるんだとは思いますが、POP3やIMAPでは実装できない機能ですし、逆にForwardとかFetch出来るんでSPAM Filterとしても有用なんでは。

Docs&Spreadsheetsは重厚な最近のOffice SoftwareというかMicrosoft Officeとかに慣れた体にはちょっと物足りないですが、日々更新したいような物を扱うには、何処からでも利用できるので非常に便利じゃないかと。自宅なり職場のDesktop上で記録していた金銭の収支とかをAnywhereで使いたい時には従来だとWebなApplicationを用意しなければならなかったような場合でも、Google Docs&SpreadsheetsでOKみたないな。

BlogへのPostにしても、凝ったフォーマットとかは問題が出ますが、ある程度通常の内容であればDocs&Spreadsheetsで書いた方がBloggerのEditorなんかよりも快適に操作・入力出来ると思います。PostはBloggerに限らずMetaWeblog APIなりMovableType APIにも対応してますし。

Calenderも便利ですよね。Outlookを使ってたりするんですが、これをGoogle Calender中心で同期とりたいぐらいですし。SyncML 中心でなんとかなりそうな感じではありますが、データ形式というか項目の扱いの違いとかが微妙に面倒で、納得行くようにならないんですよね。 まぁでも色々考えてるとOutlookって使い勝手いいというか好みなんで、これのBackendとしてGmailとCalenderをうまく使えないかなとか。

続きを読む・・

2006/12/22

Blogger Widget (3) for Amazaon Associates.

クロスドメイン問題に行き詰っていたAmazon アフィリエイト向けのWidgetですが、専用の外部ファイルを必要としない形、つまりはWidget内完結型での最終形はこんな感じになりました。


<script type="text/javascript" language="javascript">
<!--
/* Script for Amazon Associates */

var MAX_ADS = 3;
var LABEL_WORD_FACTOR = 4;

cKeyWords=function(name,value){this.name=name;this.value=value};
cKeyWords.compare=function(a,b){return b.value-a.value};

var org=window["onload"];
window["onload"]=
(typeof org!="function"?
function(event){insertAds(document.body,'div','post-body')}:
function(event){insertAds(document.body,'div','post-body');org(event)});


function insertAds(elm,tagName,className){
var elms=elm.getElementsByTagName(tagName);

for(var i=0; i<elms.length;i++){
var e=elms[i];
if(e.getAttribute("className")==classNamee.getAttribute("class")==className){

var words = getKeywordsFromElement(e);
var labelWords = getLabelWords(e);

// Evaluate keywords by Label
for(var n=0;n<labelWords.length;n++)
if(words[labelWords[n]])
words[labelWords[n]]*=LABEL_WORD_FACTOR;

var wordList = sortKeywordsByPoint(words);


// for Debug...
for(var n=0,t="Keywords::Debug=";n<wordList.length;n++){
t=t+wordList[n].name+"["+wordList[n].value+"] ";
}
var eee=document.createElement("p");
eee.style.fontSize="75%";
eee.style.display="none";
eee.innerHTML=t;
e.appendChild(eee);

var eDiv = document.createElement("div");

for(var n=0;n<MAX_ADS&&n<wordList.length;n++){
var eSpan = document.createElement("span");
var eAd = document.createElement("iframe");
eAd.setAttribute("src"
, "http://rcm-jp.amazon.co.jp/e/cm?t=isawseash-22"
+ "&o=9&p=9&l=st1"
+ "&mode=books-jp"
+ "&search=" + encodeURI(wordList[n].name)
+ "&fc1=<1=&lc1=&bg1=&f=ifr");
eAd.setAttribute("scrolling","no");
eAd.setAttribute("frameborder","0");
eAd.setAttribute("border","0");
eAd.setAttribute("height","150");
eAd.setAttribute("width","180");
eAd.setAttribute("marginheight","0" );
eAd.setAttribute("marginwidth","0");

if (document.documentElement.getAttribute("style") == document.documentElement.style){
eAd.style.borderStyle ="none";
var s1 ="BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none"
var s2 = eAd.outerHTML;
s2 = s2.replace(s1,"border:none");
eSpan.innerHTML =s2;
}
else{
eAd.setAttribute("style","border:none;");
eAd = eSpan.appendChild(eAd);
}
eDiv.appendChild(eSpan);
}//__for(ads)
e.appendChild(eDiv);
}//__if
}//__for
}


function getKeywordsFromElement(elm){
var re = new RegExp;
re.compile("([A-Z]+[a-z0-9\.#\+-]+[ \.][A-Z0-9]+[a-z0-9\.#\+-]+)"
+"([A-Z]+[A-Za-z0-9\.\+#\-]+)([繧。-繝エ繝シ]+)","g");

var s = getPostDocumentText(elm,"(prescriptform)");

var token = s.match(re);
var rslt=new Array();

if(token){
for(var i=0;i<token.length;i++){
if( rslt[token[i]])
rslt[token[i]]++;
else
rslt[token[i]]=1;
}//__for
}//__if(token)

return rslt;
}//__function getKeyworksFromElement;

function getPostDocumentText(elm,exceptTagNames){
var sRslt="";
var re=new RegExp(exceptTagNames,"i");
for(var i=0;i<elm.childNodes.length;i++){
var e=elm.childNodes[i];
if(elm.childNodes[i].nodeType==1
&&!String(e.tagName).match(re)){
sRslt=sRslt+getPostDocumentText(e,exceptTagNames);
}
else if(e.nodeType==3){
sRslt=sRslt+e.nodeValue;
}
}//__for(childNodes)
return sRslt;
}

function sortKeywordsByPoint(keywords){
var wordList = new Array();
for( v in keywords)
if(typeof keywords[v]!="function")
wordList.push(new cKeyWords(v,keywords[v]));
wordList.sort(cKeyWords.compare);
return wordList;
}//__sortKeywordsByPoint

function getLabelWords(ePost){
var arRslt = new Array();

for(var eNext = ePost.nextSibling;eNext.nodeType!=1;eNext=eNext.nextSibling);
var eSpans = eNext.getElementsByTagName("span"); //Lable is in Span Elemnet.

for(var i=0; i<eSpans.length;i++){
var e=eSpans[i];
if(e.getAttribute("className")=="post-labels"e.getAttribute("class")=="post-labels"){
var eKeywords= e.getElementsByTagName("a");
for(var l=0;l<eKeywords.length;l++){
arRslt.push(eKeywords[l].innerHTML);
}
break;
}//__if
}//__for

return arRslt;
}//__getSearchKeyword
-->
</script>

そんなに特殊な事をしてるわけではなくて、ベタにキーワードを抽出というか、英単語とカタカナの単語を抜き出して出現回数で順位付け、それらの単語がLabelで使われている場合は倍率ドンって感じにして、上位から順にAmazon用のタグを作成して並べるって感じです。

例によって該当しないキーワードの場合は売れ筋商品が表示されたり、Books-jp指定しているだけなので、キーワードによっては不思議な書籍が表示されますが、それはそれで楽しめないようではダメですな。

BlogのPost(記事)に直接アフィリエイトなiframeとか埋めてしまうと、後で消すとか変更とか出来ませんが、Widgetにした事で動的な後付ですから変更が容易になるあたりが利点ではありますが、意図しない物が選択・表示されてしまう悲哀を背負っていますので、その辺りの改善は外部ファイル連携バージョンで対応する予定です。

外部に置くのはxslファイルにするか、それともRESTでJSONPな感じなAPIを用意するかは、まだ考え中ですが、最近のテーマは「素敵なGoogle生活」だったりするんで、場所もGoogle関係とするとGoogle Page Createtorとかになってしまうんで、Javascriptファイルやxslファイルは置けてもAPIの実装は無理だしとか。

続きを読む・・

2006/12/21

A Problem of Cross Domain.

投稿されたPostからKeywordを抜き出して、Amazon Web Service(AWS)使って広告を表示するWidgetをと考えてたんだけど、やっぱCross Domainの問題がネックになってWidget内だけでは完結しそうにないです。

JSONPとかってやるにしてもAWSではxslファイルは指定しないと駄目なんで。結局のところScript FileなりXSL TemplateをBloggerには置けないので、どこか外に置く必要があります。BlogSpotではなくFTP Publishingであればそれも出来るかと思うんですが、それだと趣旨がちょっと変わってしまうんだなとか思ってちょっと落ち込んでます。

Keywordの抽出に関してはカタカナと英単語と抜き出して出現回数上位をとかってとこまでは書いたんで、とりあえずこのLogicでAmazonライブリンク を呼ぶように変更する予定ではあります。

ちなみに色々な制限の中でCode書いてWidget書くことと、表示される広告内容に興味があるだけてAffiliate収入なんかはどうでもいいんですが、レポートのページとかは面白いなと思う今日この頃であったりして自分で買う時にわざわざ使ったりしてみたりとか思うんですが、海外発送は書籍ぐらいなんだよな・・。


続きを読む・・

2006/12/20

No damage?

「のだめ」 ってなんだよ? っていうのが、アフィリエイトというかAmazonライブリンクを使っての最初の感想だったりします。

書籍(books-jp)を「データ」ってKeyword指定した結果がコレとかってのもありましたし、Keywordに該当する商品が無い場合は売れ筋が表示されるみたいですが、今日本ではこれが売れ筋なんですか?

その辺りが私の家には日本語を猛勉強中(?)なEuropeanな方がいますので、このBlogも読んでるじゃないかと思うとちょっと複雑な心境です。

そんな感じで適度な精神的ダメージを受けつつも、楽しんでたりします。

時間を見つけてはBlogのPostからKeywordを抜き出し評価するLogicを考えているのですが、制約と(個人の)能力の縛りがあるのでそんなに難しいのは出来ないんで、雰囲気だけでやってます。HotといかCoolだぜって自分だけで気合入れてたり。

続きを読む・・

2006/12/19

Extract Keywords.

Blogに投稿された記事から、キーワードを抽出してそれを元にAmazonの広告を作成とかって流れを夢想中。もちろんBloggerというかWidgetというルールで。

まずは形態素解析が必要になるんですが、「すべての漢字を取り出す正規表現」をPHPで試す って記事と、それをJavaScriptに応用した記事 を発見。 こちらの方はKOSHIAN API という文章からキーワードを使うAPIを実験的に公開もされています。

KOSHIANでバッチリじゃないとか思ったりもするんですが、実験的に公開されているAPIをガシガシ叩くわけにもいないので、

var res = str.match(/[一-龠]{2,}[ァ-ヴー]{2,}[a-zA-Z.]{2,}[a-zA-Z]{2,}/g);

ってのを拝借する事にします。

Keywordsが抽出できた所でこれに順位づけをしてやる必要があるんですが、これにはGoogle Suggestとはてなブックマーク件数取得APIとかを使って見ようかと。 本筋としてはAmazon ECS4.0のAPIをうまく使うべきかと思いますが、ちょっと寄り道も楽しいかと。

続きを読む・・

2006/12/18

Blogger Widget (2)

Widgetは作って見たいものの、何かネタは無いものかと思いながら唸ってばかりですが、もう1ネタ起こしてみました。

今回のは、各Postの下にAmazon Associatesな広告を自動的に挿入・表示する物です。

対象としたのはAmazonライブリンクです。これは通常キーワード・ジャンルを指定してiframeなタグ作ってから埋め込むんですが、今回のWidgetは、Postに付けられたTagをキーワードにiframeなタグを生成して、Postの本文の直後にねじ込み表示します。

複数個のTagが指定されていた場合は常に最初のTagをキーワードとします。BloggerのTagはPost・Edit時に指定した順序ではなくて、Alphabetical orderで表示されてしまうので、なんか台無しな感じですが・・・。ちなみにタグを設定してない投稿の後には売れ筋がでるんで、主に漫画とかが表示されてちょっと嫌。

それと動的にiframeタグを生成しているのですが、その際のstyle attributeの指定がどうもうまくいってません。Internet Explorer (IE)で見るとIFrameのBorderが残っちゃってます。IEの問題点として、setAttributeでstyleを指定できないので、style.cssTextでアクセスするのは知っていたつもりなんでが、何故か未だにBorderが消えてくれないです。それ以外は IE7 Firefox2 ともに大丈夫みたいです。(OperaとかIE6とかはまったく気にしてませんけど。)

こんな感じで納得いってないのですが、商品の選択され具合が興味深いので暫く動かしてみようかと思います。


ちかみにWidgetに書いてるコードはこんな感じです。(汎用的に書き初めたけど破綻してるのが物悲しい・・)


<script type="text/javascript" language="javascript">
/* Script for Amazon Associates */

var org=window["onload"];
window["onload"]=
(typeof org!="function"?
function(event){insertAds(document.body,'div','post-body')}:
function(event){insertAds(document.body,'div','post-body');org(event)});

function insertAds(elm,tagName,className){
var elms=elm.getElementsByTagName(tagName);

for(var i=0; i!=elms.length;i++){
var e=elms[i];
if(e.getAttribute("className")==classNamee.getAttribute("class")==className){
var eDiv = document.createElement(tagName.toLowerCase()=="div"?"span":"div");
var eAd = document.createElement("iframe");
eAd.setAttribute("src"
, "http://rcm-jp.amazon.co.jp/e/cm?t=isawseash-22"
+ "&o=9&p=48&l=st1"
+ "&mode=books-jp"
+ "&search=" + encodeURI(getSearchKeyword(e))
+ "&fc1=1=&lc1=&bg1=&f=ifr");

if (document.documentElement.getAttribute("style")
== document.documentElement.style)
eAd.style.borderStyle ="none";
else
eAd.setAttribute("style","border:none;");

eAd.setAttribute("scrolling","no");
eAd.setAttribute("frameborder","0");
eAd.setAttribute("border","0");
eAd.setAttribute("height","90");
eAd.setAttribute("width","728");
eAd.setAttribute("marginheight","0" );
eAd.setAttribute("marginwidth","0");

eAd = eDiv.appendChild(eAd);
e.appendChild(eDiv);
}//__if
}//__for
}

function getSearchKeyword(ePost){
var ret = null;

for(var eNext = ePost.nextSibling;eNext.nodeType!=1;eNext=eNext.nextSibling);
var eSpans = eNext.getElementsByTagName("span");

for(var i=0; i!=eSpans.length;i++){
var e=eSpans[i];
if(e.getAttribute("className")=="post-labels"e.getAttribute("class")=="post-labels"){
var eKeywords= e.getElementsByTagName("a");
if(eKeywords.length){
ret = eKeywords[0].innerHTML;
break;
}
else {break;}
}//__if
}//__for

return ret;
}
</script>


私はAffiliateとかそんなに詳しくないのですが、Amazonだと今時はREST経由で取得したXMLをXSLTで整形してとかがオシャレらしいんで、次回はそれをとか思ってます。

ちなみに当初はAmazonおまかせリンク(TM) ベータ版 とかってのを試したんてすが、load後だとなにやってもまともに動かなかったのと、Google Adsenseとは比較にならないほどのキーワード抽出というか選択の間抜けさだったりしたので止めました。

この辺り、キーワード抽出・選択あたりをPostされた記事の中から適切に出来たりしたら素敵だなぁ・・・。

続きを読む・・

2006/12/17

Open Link as New Window

なんとなくWidgetを作ってみたくて、投稿内のリンクを別窓で開くWidgetを作ってみました。

ちょっと力業のコードですがFirefoxとInternetExplorerでの動作を確認しています。

コードはこのページのソースを参照して頂ければとか思うのですが、余白・改行を詰めてあるので見れたものではありませんので以下に。
var org=window["onload"];
window["onload"]=
(typeof org!="function"?
function(event){insertTargetAttribute(document.body,'post-body')}:
function(event){org(event);insertTargetAttribute(document.body,'post-body')});

function insertTargetAttribute(e,className){
for( var eChild=e.firstChild;eChild!=null;eChild=eChild.nextSibling){
if(eChild.nodeName=='A'&&eChild.nodeType==1&&hasClassName(eChild,className))
eChild.setAttribute("target","_blank");
insertTargetAttribute(eChild,className);
}
}

function hasClassName(elm,className){
if(elm==null)return false;
if(elm.nodeType==1)
if(elm.getAttribute("class")==className||elm.getAttribute("className")==className)
return true;
return hasClassName(elm.parentNode,className);
}


要するにclassがpost-bodyなタグ以下にあるAnchor TagにAttribute target="_blank"を追加しています。今風というかXHTML 1.1とかですとtarget="_blnak"なんて廃止されちゃってたり、そもそも嫌いな方もいらっしゃるのは承知の上ですが、BloggerのWidgetでこんな機能も付加できる例としてはアリじゃないかと。

普通に投稿するときにAnchor Tagにtarget="_blank"を追加して書いてれば、こんな物は必要ありません。 本題としてはBloggerのWidget機能に対する考察であったり、Postされた記事に対しての後加工みたいな感じです。Visual系(?)な人がネタさえ考えたらもっと素敵(≒馬鹿)な事が出来そうな予感もありますし。

ちなみにGoogleというかBloggerにRequestとして、追加したWidgetのタイトルを非表示に出来るようにしてくれって事があったりします。HTML/JavaScriptなPage Elementを複数追加してると混乱しませんか?

それからこのコードのhasClassName()なんて、もっとオシャレな書き方・処理があるんじゃないかと思うんですが、どなたかアドバイス頂けたら幸いです。ちなみにprototype.jsは無しの方向で。

この下のボタンでWidgetを追加できます。お好きな方はご活用ください。



気が向いたらjavascriptでOpen as New Windowするコードで書き換えてみたりするつもりです。

それから別途にSnap Preview Anywhereとかも設定してたりして、ちょっとウザい事になってますが、今回のWidgetとは関係ありませんというか、Inspireされてたりします。

それと某巨大掲示板からリンクされてたのがTriggerだったりします・・。

続きを読む・・

2006/12/16

SQL, Query, Microsoft Access

別にMicrosoft Accessに限った話ではないですが、この手のRADなツールって悩ましいですね。Proto Typeな物を作ったり、ちょっとしたデータの分析とかには便利なんですが、育ってしまった結果としてなのかトンデモなく巨大なApplicationを作ってしまっていたりするのを見ると、ちょっと悲しくなります。

関わらなくていいなら別に問題はないのですが、もう手を入れるというかバグ潰しとか付き合いたくないんですってのが結構ありませんか?

TableやQueryにしてもVisualなBuilderを使って作ったんでしょうが、巨大すぎてGUIで見ても端まで見えるわけではないし、SQLで見ても自動生成されたのなんか見れたものではないですから。 当然のごとく定義書なんか存在しなくて現物のみとか。

VBAなコードにしても、何時の時代のコードだよってぐらいに古臭い書き方してたり、AccessというかVBAの限界に挑戦するかのように長く巨大なFunction。Option Explicit宣言も無く、突如登場する謎の変数。綴りはローマ字を省略した感じなのか意味不明。data1とかkingaku2とかってのも添えてる数字が痛いというか、なんの金額だよとか・・・。

そしてデータ型はDouble。 不思議な丸め処理で都合を合わせてるのか結果は合ってたりもするけど・・・・・・・・・。

当然の事ながら、複数ユーザー対応というか複数ユーザーで共通データを使用中。 この手はデーターが巨大になるに従いファイル共有型であるAccessでの処理には限界があって、淘汰されるべきものだったんですが、そこにリモートデスクトップ登場でWindows Server上で利用する事でパフォーマンスアップしたんで延命というかさらなる拡張・肥大化。

高価なServer機器も売れるしもうベンダー側は大満足とかって話もあるかもしれませんが、付き合い切れませんからマジで。

続きを読む・・

2006/12/15

Blogger Beta Template

Blogger BetaのTemplateというかLayoutですが、それなりに理解してきました。

BetaになってTemplateというよりLayoutを考慮した作りになっているという事で、追加したい物は基本的にWidget(Page Element)にする必要があるんですね。adsenseとかちょっと余分に張ったりしているんですが、これもWidgetというかHTML/JavascriptなPage Elementを作って、そこにCodeを書いてます。実はAdsenseの広告の選択され具合を見るのが楽しかったりするんで・・。

Adsenseに関してはBloggerで用意されたWidgetもあるんですが、微妙にサイズとか納得いかなかったので別途自分で書いてみました。それと設定したTemplateにもよるんでしょうが、DefaultではSidebarにしかPage Elementを追加できないのですが、これはTemplateをCustomiseする事で対応出来ます。

以下の、maxwidgets='1' showaddelement='no'を 削除するなり、maxwidgetsの数値を上げればOkです。


<div id='header-wrapper'>
<b:section class='header' id='header'>
<b:widget id='Header1' locked='true' title='I saw seashells. (Header)'
type='Header' maxwidgets='1' showaddelement='no'/>
<b:widget id='HTML2' locked='false' title='' type='HTML'/>
</b:section>
</div>

ちょっと話は変わりますがGoogle Docs からのPostだと、pre tagとか使えない事に今気が付きました。Google Docs自体にはEdit HTMLな機能もあるんですが、そこに書いても無視されるですね・・・。というかTagの説明入りで書いたらなんか妙な事になってるんで、結局BloggerのWyswygなEditorからHTML手打ちです・・。

Google DocsからのPostは便利なんだけど、痒い所が微妙に多いかも。

続きを読む・・

2006/12/14

Template CSS ( Cascading Style Sheets).

なんとなく趣味でStyle Sheetに、

div.post-body a { behavior: expression( this.target = '_blank'); }
とか書いてみました。

Internet Explorerのみですが、Blog Post内のLinkが別窓で開きます。

これってFirefoxとかだとどうやるんでしょうね?

続きを読む・・

2006/12/13

Blogger Beta

とりあえずBloggerをBetaにUpgradeしてみました。

相変わらずTemplateとかまだしっくり来ないんですが、レイアウト機能とか中途半端に実装されててカスタマイズとか面倒な気がしてます。

Upgradeをする前にBackupしたいなとか思ったんですが、これが中々適切な方法がない。BackupというかCopyだけならFTP Publishingに切り替えて任意のFTP Server上にBlogを構成してくれるので、それをDownloadして保存しておけばいいのですが、でもこれって復旧時はどうすればいいのでしょうか?

まぁ一旦FTP Publishingに切り替えてBackupはしたのですが、これをBlogspotに戻すときににFTPの認証エラーみたいなのが出て戻せず悩んでましたが、BetaにUpgradeしたらBlogspotに戻すことが出来ました。

なんかコレがイイと思えるようなBlogのHosting Serviceも見つけられないですし、移行の手間を考えるとウンザリってのもあるので暫くはこのまま行くと思いますが、悩みは尽きずって感じです。

Atom APIの仕様の問題とかもあるんでしょうが、BloggerにはGoogle DocsからPostしてるんですが、Titleが反映されないのにはちょっとね。

続きを読む・・

2006/12/12

ASP.Net Charting (2)

ちょっと知人から頼まれて、簡単なDesktop ProgramをASP.Net化してみたんですが、.netCHARTING が彼の借りているフリーなASP.NetなHosting環境では動かないみたいで。そんなわけでこれからZedGraphで試してみます。

ASP.NetなServerの運用環境ってあまり真面目に考えた事なかったなと、ちょっと反省してたりします。共有なHosting Serviceだと、色々とSecurity的に面倒な事もあるんでしょうし、その為の制限も色々とあるんだなぁと。

追記になりますが、これはHosting なService故のSecurity上の設定の問題でありユーザーレベルでは変更できないんじゃないかと。、OpenSourceなZedGraphならソースもあるんで、[assembly: AllowPartiallyTrustedCallers()] をZedGraph本体とZedGraph.web双方のassemblyInfo.csに追加してしまえば動くようにはなります。LicenceというかLGPL的にも問題はあまりないんじゃないじゃなかろうかとか思ってますが。

実際には彼から頼まれた事案はそれなりに面白くて、Ajaxな感じでデータとか参照出来るようにしたらイイじゃんとかも思うんで、時間が取れたらClient SideなAjax ChartingとかGrid-Viewな機能を実装してみたいなとか思ってます。

なんか久々に乱数とか使ってるプログラムを見てたら楽しそうだったです。なんか乱数なんてもう長いこと使ってないなとか感慨深げにコードを眺めてました。彼はそんな乱数使ったロジックとかそれなりに書けてるんですが、Data集計とか分析計は苦手なようで、その辺りもお客からHearingするように聞きながら仕様を起こしたりとかちょっと趣味というかPrivateな付き合いの中でやると、それもまた新鮮で偶には楽しいかと。(あくまでも今回に限りの予感もするけど)

それにしても、Google Docs&Spreadshees からBlogger BetaにPublishする時にTitleが反映されないのには納得がいかないぞと。

続きを読む・・

2006/12/11

ZedGraph

APS.Netな環境で使うChart Libraryですが、ZedGraphがいいんじゃないかと思う今日この頃ですが、まだ試してません。

LGPLなライセンスなんでdllとリンクさせる分には問題もないかと思いますし。

ちょっとガッカリというか力抜けてしまうのは、ZedGraphのWiki がPHPなんでデモとか無いんですよね。ASP.Net使えるServerは借りるのも高いのでいたし方ないのでしょうけど。 それに便利でよく出来てるWikiとかBlog物ってPHPがほとんどですからね。

続きを読む・・

2006/12/10

Chart , Charting

ASP.Net環境でのChartというかグラフ表示をいくつか試しているのですが、標準というかVisual Studio 2005に付属しているCrystal Reportはやっぱり馴染まない。バージョン互換・複数バージョンで作成されたアプリケーションに苦しんだ過去の苦い記憶が蘇って来たりしてるのもありますが。

APS.Net上でというかWebでChartを表示するには、サーバー上でgifなりpng画像を作成してそのリンクをってパターンと、Client側のJavaScriptを使ってVMLとか操作してChart作成ってパターンがあります。

前者はPHPなりperlなりって環境からはGD Graphics Library が使うのがポピュラー。.Netから使うWrapperを誰か書いてないかなとか思って探したら、Code ProjectでGD Library wrapper を見つけるも、VB6で書かれActiveX Controlでした。(でも便利そう)。 もう少し真面目に探したらGD-Sharp なんてベタな名称のWrapperを見つけました。(もっともGDはChartを作成するLibraryではないので、別途Chartを描画するLibraryが必要になるのですが。)

後者に関しては、Chart(WebFX) とかDojoで使えるんですが、データをクライアント側に引っ張り、それを元にClient sideでグラフを描画するのでクライアント側が重くなります。それと個人的にはあまり書きたくないJavsScriptなコードを直接書かなくてはいけない。なんて事がちょっと悩みの種。

色々と調べだしたら、なんか沢山出てきて現在混乱中です。

忘れないうちにメモしておきますが、A flexible charting library for .NET をチェックするのを忘れない事。

続きを読む・・

2006/12/09

GData API and Microsoft Office

BetaなBloggerではatom APIではなくてGData APIによるアクセスが結構便利というかLibraryが揃ってるので各種言語からのアクセスが簡単なようで、Backupもこれで簡単に取れるんじゃないかと。

日本のBlogにPostできたりするDesktop ApplicationではBloggerに関してはBloggerに関してはかなりシェアの問題もあるんでしょうが、消極的でPostの日付を変更できなかったりしてますので何とかしようかなと。

Googleが提供しているLibraryにはSampleも付属していてちょっと試したんですが、後はHTMLが編集できるコントロールだけ用意すればそれなりの物になるんじゃないかと。

Microsoft WordのPlug-inというかAdd-inにして、WordからPost出来るようにとかってのは意表をついてて面白いとか思うんですが、そんな個人的嗜好の物を作ってもというか、自分でも使わないような気もするんで躊躇してますが。

しかしながらMicrosoft Officeに対するAdd-inってのは作り方を覚えておくとそれなりに便利だというか、便利なものを作れたりするんですがMicrosoft Officeの使用頻度の減っている私としてはどうしたモノかとも。

確かVisaul Studo 2003 + Office 2003な形のVisual Studio Tools for Office(VSTO)は別売りで結構な価格だったと思うんですが、今調べたらVisual Studio 2005 Tools for the 2007 Microsoft Office System(VSTO2005SE)は無償でダウンロードできるみたいなんで、ちょっと試して見たい感じも。

Christmas休暇なんですが、同居人がまだ休暇に入ってないんでグタグタと色々やってみるのも楽しいかもと。

続きを読む・・

2006/12/08

ASP.NET Charting

ASP.net上でのグラフ作成をしてみたくて、.netCHARTING ってのを使って見る予定。

なんか今更のASP.Netなんですが、色々と手を出してるとちょっと離れただけで、少し混乱気味。

感覚を取り戻すのに半日ぐらいかかったりして。

続きを読む・・

2006/12/03

Office2007

Microsoft Officeを2007にして思ったのですが、この違和感はGnome上でOpenOffice.org 使ってるのに匹敵するような。

Window Managerを変えたというようなUIの変わりようなんで。

ちなみに私はXPで非LunaなClassic Style派なんで違和感は余計に感じているのかも。

UIのデザインが変わると新鮮で取っても新しくて便利な物使ってるような気はするんだけど、それと生産性というか効率は一致しなかったりしてるんですよね。

要するに慣れと新しいUIの利点の習得の問題なんでしょうが、これって時間かかるよね。

PC系の雑誌にここ数年あまり興味をそそるような感じではなくて、読む機会がグッと減ったんですが、これもまた新機能とかを掴みきれない原因かなとは思います。

以前は毎月大量購入・完全読破(ちょっと嘘)してて、移動もカバンは雑誌や書籍でパンパンで、電車の中では必ず読んでたりしたんですが、最近はすっかりご無沙汰です。

書籍自体は日本語でも英語でも構わないので入手には困らないのですが、ついついFreeなNews Paperとか読んでる事が多いです。後はPodCastというかRadioをDownloadしたのを聞いてたり。

RadioといえばBBCって素敵ですよね。高いTV Licenceを払ってるだけあると思います。NHKなんかとは全然サービスの質が違うように思います。RadioなんてWeb経由で聞き放題ですし。国内に限らず日本からだってOkだし。

お気に入りは何故か The Chris Moyles Show だったりします。

続きを読む・・