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 だったりします。

続きを読む・・

2006/11/30

VS.Php for Visual Studio

PHPから離れて久しいですが、VS.Php for Visual Studio なんてのが出ているのに気づいてちょっと使って見たくなりました。

名前の通りにVisual StudioをIDEとして使うPHP開発用のFrontendなんですが、Zend Studioとかよりリーズナブルだし使い勝手で悩むことも少なそうだし、Eclipseさんはちょっと苦手なんでとか考えてる私には合いそうな予感はしています。

結構初期からVisual StudioのIDEは好きで、JavaなんかもわざわざVisual Studio上で書いてたりしてた時期もありました。(JDK1.2になっても)

PHPはPHP/FIというか2.0の頃から使ってはいたんですが、Perlと同じで余人にはお勧めできないというか部下に教えるとちょっとCodingの行儀が悪くなりそうだったりとかで個人的に以外は使ってきませんでしたけ。当時満足なDebug環境が無くPrintf的なDebug中心だった事も理由ではあります。

そいうわけで開発環境としてDebug環境まで整ったZend StudioとかVS.Phpとかってちょっといいかなとは思うのですが、ASP.NetのCode Behindとかを知ってしまうと、今更PHPか・・・・とも考えてしまう。 だってお洒落じゃないですか、Code-Behind。デザインとロジックが別ファイルで管理出来るんですから。

それと基本的にDynamic typing of variablesな言語ってあまり好きではないんですよね。分かってる人が書いたのはStaticなのよりも逆に読みやすく簡素だったりするんですが、世に氾濫してるのはDirtyなCodeの方が多数を占めてたりもしますから。 昔VBとかで随分泣かされましたし。これは型付けの問題というよりも未宣言の変数に対する問題も多かったですけど。他人のコードをDebugしていると、Spellミスの別の変数使ってたりとか・・。

続きを読む・・

2006/11/24

Access2007

とりあえず使って見たけど、普通に単純に使う分にはやはり変化は無しというか2007の意味を感じられない。Tool Barの変化で逆に使いづらいと感じたりもしています。

Excelもそうですが2007からデフォルトの拡張子というかファイル形式も変わっているので、他と共有する場合は注意が必要かと。.accdbとかって5文字の拡張子が基本だったりします。単純に変換するとなんか.mdbよりサイズが大きくなります。300kbのmdbに対して560kbの.accdb。真面目にデータ入れてるわけではないんでまだ良くわかりませんが。

個人的にはこのバージョンからVBAじゃなくてとか思ってたんですがなかなかそうはいかない様子。

SQL Server 2005のFrontendとしての使い勝手はどうだろうと思ったけど、これも代わり映えせず。というよりも新機能というかその辺りを先に評価すべきだろうと。

続きを読む・・

2006/11/22

Microsoft Office2007

とりあえず評価の為Microsoft Officeを2007にしてみました。

目立つのはCommand Tab。Menu+Tool Barが合わさった感じになった新しいインターフェイスなんですが、これって邪魔じゃないですかね? それともツールバーをダブルクリックで仕舞えると考えれば、ちょっと広くなった感じで良いのかな。

確かにツールバーに色々と用意して置くと、なんか増えすぎて2段とか3段とかになってしまうのでこの方式が効率は良いのかもとは思いますが、なんか文字とか今更付け加えられても分かってる人には助長な感じが。

Excelの行数制限が65536行から約100万行になったらしいですが、CPUの高速化と搭載メモリ増加に伴いこれはありかとは思いますが、何でもExcelな人のCapacityが広がるっていうか、とんでもない巨大なExcelファイルとか送られてきそうでちょっと怖いかも。そんな急には普及しないでしょうから互換性の面でも問題になりそうな予感。

マクロとかいうかVBA関連に関してはもう暫くして余裕のある時に評価する予定です。VBAだけじゃなくVSTAとかVSTOあたりも見ておく必要があるんで。

続きを読む・・

2006/11/21

Repair the Laptop PC

丁度3年間使用してきた、IBM Thinkpad X31が故障しました。なんで修理に関して考えてみたり。

現状としては電源を入れてもランプが付くだけで、画面には一切何も表示されない。
これはある日突然にリブートした時に発生し、以降はそのまま。想像するに本体・システムボード側の故障と思われる。(チップセット・CPU等や盤面部品の不具合)

修理に関して検索すると、当然ながらメーカー保障期間を過ぎているので、IBM(Lenovo)に修理を出すと5万円以上。(電話で確認)

中部ノートセンターのThinkPadリフレッシュサービス だと、29800円

検討に値する値段だけど、納期が30日~60日 というのが辛過ぎる。(9000円余分に払うと8日程度の納期でOKのようだけども・・・。)

オークションは平均落札価格 が¥40,000- 弱程度か。

LenovoになったとはいえC2DなThinkpadのXシリーズがもう時期のような気もして、新品購入はちょっと待ちたいところ。

だけど何日も代替のVAIOで不便極まりない。今までのHDDに差し替えればOKのThinkpadをオークションで入手に挑戦してみようかと。

続きを読む・・

2006/11/20

Windows Power Shell

PowerShellがいつの間にか正式版になってたので使って見ました。

単純に使うだけではなく、CommandLetを作ってみたないとか思ったのですが、どうしてかWindows PowerShell SDKをダウンロードする場所が見つかりません。PowerShell CMDLET Visual Studio 2005 Item Template なんてのも見つけたのですが、 とりあえずはSDKを探してます。ご存知の方いませんか?

SDKにCmdLetのBaseクラスとか入ってるとか思ってるんですが違うんですかね?

とか思ったら別にSDKとかなくても、using System.Management.Automationとか使えるから問題ないじゃん。

てな訳で、いくつか単機能的というかツール的なクラスをPowerShellから使ったり他のCmdLetにして組み合わせてたりしてみようかと。

やってみないと楽しいか or 詰まらないはわかりませんしね。

続きを読む・・

2006/11/19

If you don't want to it, you don't need to do it.

なんか不思議な記事というかプロダクトの紹介記事を読んだ。

「書くことがない、見られたくない、時間がない」--ブログの課題を解決するシックス・アパートの「Vox」

「私自身もブログを続けていくことに疲れてしまったことがある。そんな経験から開発したのがVoxサービスだった」と話す。ブログに疲れてしまう原因は、「書くことがない(何を書いて良いか分からない)、知らない人に見られたくない、時間がない、の大きく3つ。この課題を解決するのがVoxサービスだ」

「Blogを書くのに疲れてて、書くこととも無く、見られたくなく、時間もない。」 だったらBlogなんて書かなくていいじゃないとは思うけど、でも商売としてはそんなユーザーすらフォローというか書かせる為の啓蒙をしないといけないのね。

これはテレビとかと一緒で、疲れてて見たい番組もないし時間も無いって人に、如何にテレビを見てもらうかってのと同じで、広告戦略というか商業活動の一環なんだろうね。Blogの繁栄は商業広告抜きでは語れないし、広告主や代理店等がその発展を後押しして来たって面が多大にあるのは周知の通りだし。インターネット上で無料で各種サービスが利用出来るのもそのお陰であり、私もそれを享受しているわけだから特に文句はないけど、ちょっとタイトルに笑ったというか引いたりしてみたり。

続きを読む・・

2006/10/13

SSLStream for GMail POP3s

GMailに大変お世話になっています。

未だにβ版とはいえ便利すぎて手放せません。まぁGMailFSとかも使ってるからですが。
POP3に対応というかPOP3s 対応しているのもちょっと魅力。

それで以前にC#でTLS物を作ろうとして苦労をしていたのを思い出したのですが、.NET 2.0なるとSSLStreamとかってクラスが追加されてて、簡単に出来そうな感じだったので試してみました。



元のサンプルプログラムを弄っただけもので、あくまでもクラスのテスト用のコードですが。


using System;
using System.IO;
using System.Net;
using System.Text;
using System.Net.Sockets;
using System.Net.Security;
using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates;
namespace ConsoleSecureTcpClient
{

    class SecureClient
    {

        [STAThread]
        static void Main()
        {
            string server = "pop.gmail.com";
            string sUser = "USER " +  "Your Account@gmail.com" + "\r\n";
            string sPassword = "PASS " + "Your Password" + "\r\n";
            int port = 995;
            SslStream stream = null;

            try
            {
                // Instantiate a TcpClient with the target server and port number
                TcpClient client = new TcpClient(server, port);

                // Specify the callback function that will act as the validation delegate. This
                // lets you inspect the certificate to see if it meets your
                // validation requirements.
                RemoteCertificateValidationCallback callback =
                                                    new RemoteCertificateValidationCallback(OnCertificateValidation);

                // Instantiate an SslStream with the NetworkStream returned from the TcpClient.
                stream = new SslStream(client.GetStream(), false, callback);

             
                // As a client, you can authenticate the server and validate the results using the SslStream.
                // This is the host name of the server you are connecting to, which may or may not
                // be the name used to connect to the server when TcpClient is instantiated.
                stream.AuthenticateAsClient(server);
                if (stream.IsAuthenticated)
                {
                    // Indicates whether the authentication was successful.
                    Console.WriteLine("IsAuthenticated: {0}", stream.IsAuthenticated);
                    // Indicates whether both the client and server has been authenticated.
                    // In this example only the server is authenticated.
                    Console.WriteLine("IsMutuallyAuthenticated: {0}", stream.IsMutuallyAuthenticated);
                    // Indicates whether the SslStream uses data encryption.
                    Console.WriteLine("IsEncrypted: {0}", stream.IsEncrypted);
                    // Indicates whether the data sent is signed.
                    Console.WriteLine("IsSigned: {0}", stream.IsSigned);
                    // Indicates whether the current side of the connection is authenticated as a server.
                    Console.WriteLine("IsServer: {0}", stream.IsServer);
                }

                Byte []data = new Byte[256];
                int bytes = stream.Read(data, 0, data.Length);
                string responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
                Console.WriteLine("Received: {0}", responseData);

                data = System.Text.Encoding.ASCII.GetBytes(sUser);
                stream.Write(data, 0, data.Length);
                Console.WriteLine("Sent: {0}", Encoding.ASCII.GetString(data));

                data = new Byte[256];
                bytes = stream.Read(data, 0, data.Length);
                responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
                Console.WriteLine("Received: {0}", responseData);

                data = System.Text.Encoding.ASCII.GetBytes(sPassword);
                stream.Write(data, 0, data.Length);
                Console.WriteLine("Sent: {0}", Encoding.ASCII.GetString(data));
             
                data = new Byte[256];
                bytes = stream.Read(data, 0, data.Length);
                responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
                Console.WriteLine("Received: {0}", responseData);

                data = System.Text.Encoding.ASCII.GetBytes("QUIT\r\n");
                stream.Write(data, 0, data.Length);
                Console.WriteLine("Sent: {0}", Encoding.ASCII.GetString(data));
             
                data = new Byte[1024*1024];
                bytes = stream.Read(data, 0, data.Length);
                responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
                Console.WriteLine("Received: {0}", responseData);

            }
            catch (AuthenticationException ex)
            {
                Console.WriteLine(ex.Message);
            }
            catch (SocketException ex)
            {
                Console.WriteLine(ex.Message);
            }
            catch (IOException ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                // Make sure that the SslStream is closed.
                if (stream != null)
                    stream.Close();
            }

            Console.WriteLine("\n Press Enter to continue...");
            Console.Read();
        }
        // Check the certificate for errors and to make sure it meets your security policy.
        private static bool OnCertificateValidation(object sender, X509Certificate certificate
                    , X509Chain chain, SslPolicyErrors errors)
        {
            Console.WriteLine("Server Certificate Issued To: {0}", certificate.GetName());
            Console.WriteLine("Server Certificate Issued By: {0}", certificate.GetIssuerName());
            // Return true if there are no policy errors
            // The certificate can also be manually verified to make sure it meets your specific
            // policies by interrogating the x509Certificate object.

            if (errors != SslPolicyErrors.None)
            {
                Console.WriteLine("Server Certificate Validation Error");
                Console.WriteLine(errors.ToString());
                return false;
            }
            else
            {
                Console.WriteLine("No Certificate Validation Errors");
                return true;
            }
        }
    }
}


以前は、Mentalis.org Security Library を使用して満足していましたが、Frameworkに入ったという事でこれはこれでよい感じです。

しかしFrameworkもここまでくると、IntelliSense無しのCodingはちょっと辛いですね。

続きを読む・・

2006/10/10

Dual Head Display

正式名称(?) はなんて言えば良いのでしょうか?

私は今使ってるVideo Cardが、Matrox G450 Dual HeadなんでDual Headと呼んでしまいますが、単純にDual Display とかMulti Displayで良いのかな。

数年前なら贅沢感たっぷりの17LCDでのDual環境ですが、いまどきは大した金額もかからないし、OSが複数のVideo Cardの同時使用を見事にサポートしてくれるのでまったく珍しくありません。自宅の環境はAuctionで買い揃えたものばかりですが、LCD は 2万円程度が2台と本体も3万円もかかっていないというCheapさ。

ですけど、未だに少数派ですよね。LCD(液晶Display)への入れ替えとか、本体入れ替えと同時の新しいDisplayも買っちゃったりして、会社とかではDisplayが余ったり廃棄したりしてるんではないかと思うのですが、机のう上のスペースも限られてるからなのか、ディスプレイは一台のままの人多いですよね。

私の職場では机は十分に広い(21inch 二台も十分にいけるぐらい)なのと、余ったディスプレイを廃棄しようとしていたので、なんとかVideoカードを入手してDual Display環境にしています。
開発環境は特にDual Displayが効果あるんですけどね。Document見ながらCodingとか、実行中の画面を片側に出しながらDebugしたりとか。

費用対効果は絶大なのに何故にやらないのか。これは開発者ならびにその管理者・経営者が開発の作業効率に関して無頓着だからでしょうね。ノートPCの 1024x768の画面での開発作業と、17inch 1280 x1024がDualで開発とどれくらい作業効率が違うとか数値的に考えた事がないでしょうし。

私は業務系のコンサルティングをやってましたので、一つの作業にかかる時間とかに非常に興味があるというか注意がいくようになりました。何をすれば効率が上がるのかって事に。当然開発作業は作業者本人が考えないと・志向しないといけない部分がいまだ多分にあるので、単純作業のように純粋に肉体的な効率だけを考えていけばよいわけではないのですが、視覚を広げる、Diaplay の表示面積を広げる事は重要だと思います。

私にしてみれば、いまだにTouch Typing(旧称Blind Touch)が出来ない人とかはちょっと勘弁してほしいです。Touch Typingできないが故に、コメントか書かないとか、Copy and Pasteでコード書く事が多くて、それが逆に見ていてイライラするぐらい、時間はかかるは直さなければいけない部分を忘れたり。変数名やファンクション名は第三者から見たら意味の分からない略語ばかり。そんなソースコードを書く人と一緒に仕事するのは辛いです。

Joel on Software "http://japanese.joelonsoftware.com/Articles/TheJoelTest.html" とか読んで欲しいです。
特に、"8. プログラマは静かな労働環境にあるか?" って大事じゃない?
>広く書かれていることだが、生産的な利益は、知識労働者に空間と
>静かさとプライバシーを与えることによってもたらされる。古典的なソ
>フトウェア管理の本「ピープルウェア」はこれらの生産性が広範囲に
>渡ることを述べている

もう、顧客からの質問の電話がかかってくるだけで、集中は途切れてしまうし、まわりの動きだって気になる。そんなものは生産性・効率の面からいったら排除すべき問題なのに、そういった事にまったく無頓着な職場はどうなんでしょう?

続きを読む・・

2006/10/03

Allow non-administrators to receive update notifications

Allow non-administrators to receive update notifications

Windows Updateを非管理者にも許可するには、Group Policy(gpedit.msc)で以下の項目を変更する。
Local Computer Policy -> Computer Configuration -> Administrative Templates -> Windows Componetnts -> Windows Update -> Allow non-administrators to receive update notifications

ローカル コンピュータ ポリシー -> コンピュータの構成 -> 管理者用テンプレート -> Windows コンポーネント -> Windows Update -> 「非管理者による更新の通知を許可する」

とは言っても通知を受けてからの処理を許可するだけなんで、手動でのWindows Updateは出来ないような気がする。

と自分用のメモを書いてみました。

続きを読む・・

2006/09/30

Availability

AJAX を使ったUIのサンプルを作って、これを同僚やお客に見せても、あまり良い反応はなかったりして。

特にClient Server Model というか、クライアント側にRichなアプリケーションを使ってる人たちだと、やってる事・出来てる事は当たり前の事が多く、特に感動はないらしい。

まぁ今時のPCでの業務になれたユーザーには、そんな事はあまり望みませんが、開発者なのに無感動というか無感覚な人にはちょっと困る。多分どのような仕組みで動いているのかまったく理解できていないからなんだろうけど、Webベースのアプリケーション開発とかした経験があるらしいけど、特になんのAJAXなUIに特に何の感覚も持てないような似非技術者とは一緒に仕事したくないですね。

なんかWebベースのアプリケーションがどの様に動いているか、ブラウザってどうやって動いて、サーバーやり取りされる情報がどうなっていて、セッションがとかまったく言葉はしってるけど、理解していないみたい。

続きを読む・・

2006/09/23

pronounced "ā-Jacks"

Wikipedia
http://en.wikipedia.org/wiki/AJAX
によると、Ajaxの発音は"ā-Jacks"つまりは エイジャックスとの事。

続きを読む・・

2006/09/13

AJAX, JAVA Applet, ActiveX

AjaxでサーバーからloadされるJavascriptが署名付きでクライアント側で評価出来るになれば良いのに。

これはHTTPSなり使ってればサーバー側の署名から評価はできるんだけど。

匿名の世界での安易にプログラム実行してしまう環境ってのはやっぱりイマイチな気がしないでもない。

いっそサイズとか非可読性を考慮して中間コードにして・・・・とか考えてたら、それってActiveX? Java Applet? とぐるっと思考が一周してしまいました。

ブラウザのみでOK、追加のコンポーネントは一切必要なしってのが、AJAXの良さなんだけどね。

でも何処のページみるのにもJavascript on とかって憂鬱な気が。

暫くはIntranet向けにしかコード書くつもりもないので、仕事的には気にならないが、技術の普及という面では気になる。イントラ向けならACTIVE Xでも JAVA Appletでも良いじゃんとか。まぁExtraに出すからとか、なんとか理由を考えつつ、自分を納得させる。

なんか自身が矛盾していると、内部でひたすらループ。

まぁ比較的に古くて枯れた技術というか手法の組み合わせなんで、あまり深く考えてはいけないでしょうね。

なんとなく、私なりに開発の本流にのせる為の条件を書いて見た。
これはライブラリを含む開発環境で網羅してもらいたい事。

・ブラウザ間の差異を吸収する事。
IEのみとかは無しの方向で。IE, Mozilaは当然として Operaぐらいはなんとかカバーしたい。

・サーバー側の動的なページ作成時における、デザインとコードの分離が可能である事。
デザインとコードの分離を進めてきたのに、ここで後戻りは・・・・・・・・。

・デバッグ機能がある事。
printf 的なのとか log出力なDebugしか出来ないのはもう嫌かも。

こんな感じです。

続きを読む・・

2006/09/10

Javascript Coding

Javascript Coding

JavaScrptはとっても柔軟で面白いけど、個人的に仕事でガリガリ書きたいコードではない。 なんか柔軟すぎるからから、複雑な事やりすぎると周りが付いてきてくれないし。

JavaScriptできますとかいってる人たちも、Classとか知らないってのが普通だったりするんで。 そのレベルのPGが沢山いるのが、IIS+aspな開発関連。まぁPHPも似たような状況だけど。

やりたい事が、やりたいレベルでやれる状況って難しいですねとか思ったり。

最近は暇を見つけるとATLASを弄っています。 AJAXを弄りだしてしまうと、従来のaspなアプリケーションが妙に寂しく感じてしまう。 ちょっと騙されている感じもしないでもないけど。

今は今後のアプリケーションプラットフォームに関して考えている段階なので、 いろいろなliblaryも試してるけど、しっくりこない。 開発環境としてはEclipseで同程度の事出来るようになれば良いのだけどね。

無いなら・必要なら作ればとか思うのだけど、やっぱり時間が無い。 本当にやりたいのはライブラリでもなく開発環境でもないので。

続きを読む・・

2006/09/01

From Google Docs

Post to the Blog.

これってどのようにBlogに反映されるのでしょうか? ちょっと気になって書いて見ました。

何の事かと思うかもしれませんが、これはGoogle Docs&Spreadsheetsからの投稿です。

なんか無理やりのようにGoogleな世界に閉じこもってDocument書いたりしてる気もしますが、これはこれで便利な環境ができつつあるなと感じる今日この頃ではあります。

続きを読む・・