Archive : 2008-06
[WSJ] 「.news」「.ibm」も可能に――トップレベルドメイン自由化へ-ITmedia News
.neetドメインとか、.orzドメインとかも、出来るといいね。
そろそろテストに向けて勉強を始めなければと思う今日この頃。当分バイト以外ではプログラムを書くのはやめにして、家でPCを使うときはPhotoshopの練習でもしようかと思う。
53.
もう一度受けられれば60とれると思うんだけれどなー。勉強しよう、英語。
このまえ「Windows Live WriterプラグインからエントリのHTMLDocumentを取得する方法」というエントリでWLW編集画面のHTMLDocumentオブジェクトを取得する方法を紹介したけれども、その方法にはまだ解決できていない問題があり、今回は自分がどこで躓いているのかを説明しつつ嘆くエントリ(笑)。
さて、現在のInvalidSourceModifierは以下のようなソースになっている。
extern alias MicrosoftMshtml;
extern alias WriterInteropMshtml;
using System;
using WindowsLive.Writer.Api;
using System.Windows.Forms;
using MicrosoftMshtml.mshtml;
using WindowsLive.Writer.PostEditor;
using WriterMshtml = WindowsLive.Writer.Mshtml;
namespace InvalidSourceModifier {
//TODO:ImagePathの設定!
[WriterPlugin("9388e56b-c684-4e04-b7f6-b8cc224d70b2", "InvalidSourceModifier", PublisherUrl = "http://www.sharplab.net/")]
public class InvalidSourceModifier : PublishNotificationHook {
public override bool OnPrePublish(System.Windows.Forms.IWin32Window dialogOwner, IProperties properties, IPublishingContext publishingContext, bool publish) {
PostEditorForm postEditorForm = getPostEditorForm(dialogOwner);
WriterMshtml.MshtmlControl mshtmlControl = (WriterMshtml.MshtmlControl)findControlByName(postEditorForm, "MshtmlControl", "WindowsLive.Writer.Mshtml");
IHTMLDocument3 doc = (IHTMLDocument3)mshtmlControl.HTMLDocument;
IHTMLElementCollection allElement = doc.getElementsByTagName("*");
foreach (IHTMLElement elem in allElement) {
object align = elem.getAttribute("align", 0);
object border = elem.getAttribute("border", 0);
if (!(align == null || align is DBNull)) {
elem.removeAttribute("align", 0);
elem.style.styleFloat = (string)align;
}
if (!(border == null || border is DBNull)) {
elem.removeAttribute("border", 0);
elem.style.borderWidth = (string)border;
}
}
updateTextEditorControl(postEditorForm);
return true;
}
private void updateTextEditorControl(PostEditorForm postEditorForm) {
WriterMshtml.MshtmlEditor mshtmlEditor = (WriterMshtml.MshtmlEditor)findControlByName(postEditorForm, "MshtmlEditor", "WindowsLive.Writer.Mshtml");
mshtmlEditor.Focus();
Control test = findControlByName(postEditorForm, "PostEditorMainControl", "WindowsLive.Writer.PostEditor");
}
private PostEditorForm getPostEditorForm(IWin32Window postProgressForm) {
return (PostEditorForm)((Form)Form.FromHandle(postProgressForm.Handle)).Owner;
}
private Control findControlByName(Control control, string controlName, string controlNamespace) {
foreach (Control cChild in control.Controls) {
Type t = cChild.GetType();
if (t.Name == controlName && t.Namespace == controlNamespace) {
return cChild;
}
if (cChild.HasChildren) {
Control returned = findControlByName(cChild, controlName, controlNamespace);
if (returned != null) {
return returned;
}
}
}
return null;
}
}
}
まず、getPostEditorFormメソッドで投稿の進捗状況を表すプログレスバーを載せたFormを基に、親のPostEditorFormを取得、その後、findControlByNameメソッドを使い、PostEditorForm内から、nameとnamespaceを頼りにMshtmlControlコントロールを探し、そのHTMLDocumentプロパティから取得する、というやり方。
これでめでたく「標準」モードや、「Webプレビュー」モードのHTMLDocumentオブジェクトが習得できるのだけれども、HTMLDocumentオブジェクトに対して操作を加えると、「HTMLコード」画面での内容と、HTMLDocumentの不整合が起きてしまう。特に、表示モードを「HTMLコード」としていた場合、HTMLDocumentに対してプラグインから操作後に表示モードを「標準」に戻すと、HTMLDocumentに対する操作内容が飛んでしまう。
む~。なんとかならんものか。誰か知恵をお貸しくださいませ。
米空軍次期空中給油機の選定白紙。米会計検査院がボーイングの異議申し立てを認む(速報)-JAN
日本国内でも日経やWBSでも報じられるなど、航空宇宙産業にとり大きなトピックとなっている米空軍の次期空中給油機選定問題。ノースロップ・グラマン-エアバス連合のA330MRTTがKC45Aとして選定された時は非常に驚いたものだが、敗れたボーイングによる異議申し立てが認められ、会計検査院が計画にストップをかけたとのこと。KC-767のリース案の白紙撤回のゴタゴタで、既にスケジュールはカツカツの筈だが、これで更に計画が遅延することになれば、色々影響も出てきそうな。
はてブのホッテントリのRSSが時折SleipnirやLunascapeのRSSリーダー機能でパースエラーを起こすことがある。非常に不便なので、解決策を考えてみた。
IE系のブラウザがパースエラーを起こすときでも、FirefoxやOperaは正しく読めているようなので、どうもIEとはてブのRSSの相性の問題らしい。そこで、RSSを一旦IE以外のパーサーに潜らせた上で、もう一度RSSに戻すことにした。
そこで使ったのがYahoo!Pipes。Yahoo!Piresは米Yahoo!が提供しているサービスで、RSSやXML、JSONなどのデータをソースに、正規表現・並び替え・ソート・翻訳などを行った上で、RSSを出力することのできるサービス。
モジュールをパイプで繋いでいくという直観的なインターフェイスになっているため操作も簡単で、かなり役立つサービスである。詳しくはYahoo!Pipesの使い方(全モジュール解説)-福井プログラマー生活向上委員会を参照。
さて今回は単にRSSを無加工でそのままRSSとして出力する作業なので、Feedのモジュールと出力モジュールを繋ぐだけ。で、SaveしてPublishして出来たのがこのHatebuWellformedRSS。 これでパースエラーにいらつくことが無くなる筈。Yahoo!Pipe便利だ…。他にも色々な場面で使えそうだ。
Lunascapeが世界展開へ シリコンバレーに現地法人 – ITmedia News
開発者である近藤秀和さんのBlogやSNSでシリコンバレー行きが言及されていたので、そうだろうなと思っていたのだけれど、ついに発表されたよう。
海外向けのHPはhttp://www.lunascape.tv/。Webサービスが興隆し、ますますブラウザの重要度が高まる今、デファクトスタンダードであり、また、今後IE8で大幅な改善が見込まれるTridentエンジンを積んだタブブラウザとして、これからは世界でもその存在感を発揮されるのが非常に楽しみだ。
Lunascapeといえば、去年は自分の稚拙なスクリプトに対し、優秀プラグイン賞、優秀スクリプト賞という身に余る評価をして頂いた(そのおかげでVS2008や液晶ディスプレイを買うことが出来た)が、これからは.NETのCOM相互運用機能を使って、Lunascapeのプラグインをスクリプトではなくマネージコードで開発できれば、と考えている。
KMDの様子が分からない…。とか前回のエントリでぼやいていたら、昨日UPされたエントリで、ちょうど講義内容の一部が紹介されていた。内容は、「携帯ビジネスの現況と今後の市場動向」。日本の携帯普及率は世界50位なのだとか。ルクセンブルクからドイツまでの1位から29位までの国々では、100%以上という話が紹介されているが、それって実際あるべき姿なのだろうか?ちょっと疑問。欧米では通話用の安い端末と、スマートフォンを持つのが流行っていると何処かで耳に挟んだが、それがこの数字の原因だとしたら、単に無駄をしているようにしか思えない。携帯も小さくなったとはいえ、ポケット一つを占拠するし、契約が二つになったら高くつくだけにしか思えないのだけれどもなぁ。日本では一台で大体のことを済ませることの出来る高性能な端末の普及しているから、数字が低く抑えられているのではないかと自分は思う。
Blogに載せられているスライドでは、他にも世界の携帯端末事情紹介が。iPhoneやAndoroidなどについては知っていたけれども、DANGERという端末と、それがMSに買収されたという話は初耳。何のためなんだろう?MSはWindows Mobileという携帯端末用OSを持っているし、Zuneという携帯音楽プレーヤーの端末も発売していて、そのどちらも.Net Compact Frmeworkをベースとしたアプリの開発環境までそろっているというのに、わざわ独自OSと、Java VMの上で動いているというDANGERを買う必要が分からない。
しかしあれだけ内容の濃いスライドが一講義40~50枚かぁ。ただただKMD生が羨ましい。是非機会があれば受けてみたいものだ。
古川享先生のBlogが久しぶりに更新されていた。そういえばKMDのサイト上のBlogは誰も更新していないけれども、KMDは今どうなっているのだろう?協生館の竣工はまだなので、三田で活動しているらしいけれども…。
さてBlogでは対談の紹介が。
ひたすら長い対談記事で読むのがつらいけれども、端々に古川先生の豪放磊落な性格が垣間見える。