tag:blogger.com,1999:blog-40129493628042442332009-02-21T10:03:54.456+09:00Develoggerコンピュータ・プログラミングなどの備忘録 + 開発日誌satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.comBlogger79125tag:blogger.com,1999:blog-4012949362804244233.post-13500341387800832032008-09-03T19:58:00.005+09:002008-09-03T20:15:05.455+09:00Google ChromeGoogleから新しいブラウザ「<a href="http://www.google.com/chrome/intl/ja/features.html">Google Chrome</a>」がリリースされました。<div>早速ダウンロードして使ってみたところ、想像以上に動作が軽快ですごく気に入りました。</div><div><br /></div><div>Google Chromeには高速なJavaScriptエンジン「V8」を搭載されています。</div><div>これはIE・Firefox・Safari・Operaと比べて桁違いに高速なようです。</div><div><br /></div><div>試しにGmail・GoogleCalendar・GoogleMapsにアクセスしてみたところ、高速に動作することを体感できました。</div><div><br /></div><div>Google Chromeはまだベータ版なのでWindows XPとWindows Vistaでしか動作しませんが将来的にはMacやLinuxにも対応するようです。</div><div><br /></div><div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/20080903001-721456.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/20080903001-721444.png" alt="" border="0" /></a></div><div><br /></div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-1350034138780083203?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-41966287866618858022008-08-11T21:39:00.004+09:002008-08-11T22:05:57.058+09:00Djangoの書籍会社でDjangoの書籍を購入しました。<br />日本語では唯一のDjangoの書籍だと思います。<br /><br />書籍の内容ですが、Djangoのドキュメントより実践的な内容になっていると思います。<br />これからDjangoを始める方には最適ですね(すでにDjangoを使用している方が読んでも有用だと思います)。<br /><br />ちなみに表紙のギターを弾いている男性は、Djangoの名前の由来となっているギタリスト <a href="http://ja.wikipedia.org/wiki/%E3%82%B8%E3%83%A3%E3%83%B3%E3%82%B4%E3%83%BB%E3%83%A9%E3%82%A4%E3%83%B3%E3%83%8F%E3%83%AB%E3%83%88">ジャンゴ・ラインハルト</a>です。<br /><br />ジャンゴ・ラインハルトの音楽を聴きながらDjangoで開発するのもいいですね。<br /><br /><iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=ars3dogs-22&o=9&p=8&l=as1&asins=4048672096&fc1=000000&IS2=1&lt1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width: 120px; height: 240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0"></iframe> <iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=ars3dogs-22&o=9&p=8&l=as1&asins=B00008CH8W&fc1=000000&IS2=1&lt1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width: 120px; height: 240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0"></iframe><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-4196628786661885802?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-62960543429648407642008-06-26T21:39:00.005+09:002008-06-26T22:15:01.798+09:00Gmailの外観を変える先日参加したGoogle Developer Day 2008の基調講演のとき、私の前にGoogleの社員が座っていてノートパソコンを使っていました。<br /><br />そのGoogle社員のパソコンの画面には、おしゃれな外観のGmailが表示されていて大変びっくりしました。<br /><br />最初はGmailにテーマを変える機能があると思い、設定を見渡してもそのような項目はなかったのでWebで検索してみると、Gmailにはテーマを変える機能がなく、Firefoxのプラグインを使ってスタイルを変更するようです。<br /><br />私は「<a href="https://addons.mozilla.org/ja/firefox/addon/2108">Stylish</a>」というFirefoxのプラグインを使用して、<a href="http://userstyles.org/styles/5867">ここのテーマ</a>を適用してみました(ちなみにGoogle社員が使っていたテーマは見つけることができませんでした)。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/WS000001-752680.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/WS000001-752675.JPG" alt="" border="0" /></a><br />標準のGmailは見やすいのですが、何年も使っていると見飽きてしまいます。<br />外観を変えるだけで、いつもより少しだけですが新鮮に感じますよね。<br /><br />上記のテーマの他にもいろいろあるようなので、興味のある方は試してください。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-6296054342964840764?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-62421780873408037592008-06-12T21:04:00.003+09:002008-06-12T21:43:49.508+09:00Google Developer Day 20082008年6月10日に開催されたGoogle Developer Day 2008に参加しました。<br />開催された場所は「パシフィコ横浜」です。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/file-724304.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/file-723364.jpg" alt="" border="0" /></a><br /><br />私が参加したセッションは<br /><br />1. 基調講演<br />2. OpenSocial<br />3. Androidアプリケーションの構築<br />4. Android Dalvik VMの内側<br />5. Google Maps API for Flash<br />6. Googleのソフトウェアエンジニアの日常<br /><br />です。<br /><br />基調講演では、偶然にもGoogle社員のすぐ後ろの席でした。<br />生でGoogleの鵜飼さんを見られて大変びっくりしました(鵜飼さんが監訳した書籍はほとんど持っています)。<br /><br />ちなみにGoogleの社員はほとんどMacを使用しており、GMailやDiggなどを見ていたようです。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/file-725264.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/file-724212.jpg" alt="" border="0" /></a><br />一番面白かったセッションは「Googleのソフトウェアエンジニアの日常」です。<br />書籍やWebなどである程度知っていたのですが、中には知らない情報もあり大変興味深く聞くことができました。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/file-796809.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/file-796227.jpg" alt="" border="0" /></a><br /><br />セッション中、辺りを見渡すとMac Bookを使っているユーザが多くて驚きました。<br />他にはThink Pad、Eee PC、Let's Noteが多かったように感じます。<br /><br />やはり、他のユーザがどのようなノートパソコンを使っているのか興味がありますよね。<br /><br />初めてGoogle Developer Dayに参加しましたが、大変有意義に過ごせたと思います。<br />機会があれば、ぜひ来年も参加したいです。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-6242178087340803759?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-79945323133694265062008-06-01T20:19:00.006+09:002008-06-01T21:05:10.338+09:00PyAWSでAmzonの商品を検索PythonをからAmazon ECSを使ってAmazonの商品情報を検索する場合、PyAWSを使えば簡単に商品情報を取得することができます。<br /><br />・<a href="http://pyaws.sourceforge.net/http://pyaws.sourceforge.net/http://pyaws.sourceforge.net/http://pyaws.sourceforge.net/">PyAWS</a><br /><br />下記にサンプルを掲載いたします。<br /><br /><pre class="prettyprint"><code><br />#!/usr/bin/env python<br /># -*- coding: utf-8 -*-<br /><br />import sys<br />import codecs<br /><br />from pyaws import ecs<br /><br />sys.stdout = codecs.getwriter('cp932')(sys.stdout)<br /><br />ACCESS_KEY = "XXXXXXXXXXXXXXXXXXXXX"<br />LOCALE = "jp"<br /><br />ecs.setLicenseKey(ACCESS_KEY)<br />ecs.setLocale(LOCALE)<br /><br />bags = ecs.ItemSearch(<br /> 'Python',<br /> SearchIndex='Books',<br /> ItemPage=0,<br /> ResponseGroup='Request,Small,Images'<br />)<br /><br />for bag in bags:<br /> print bag.Title<br /></code></pre><br /><br />Amazon ECSを利用するためにはAccess Key IDを取得する必要があります。<br />Access Key IDの取得方法は下記を参照ください。<br /><br /><a href="http://www.ajaxtower.jp/ecs/pre/index1.html">Access Key IDの取得</a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-7994532313369426506?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-78788357959451571972008-05-13T22:17:00.006+09:002008-05-13T22:41:36.963+09:00Office2007会社のパソコンにはOffice2007がインストールされています。<br />最初はOffice2007になってUIが変わったので、珍しい・新鮮な気持ちで使っていました。<br /><br />しかし、時間がたつにつれて珍しい・新鮮な気持ちがなくなり、残ったのは<br />今までの機能がどこにあるかわからない状態の不便さだけです。<br /><br />しばらく使っていれば慣れて新しいUIの方が良いと感じるかもしれませんが、安くないパッケージ料金と再学習コストまで払って使う価値があるのでしょうか?<br /><br />せめて以前のバージョンのUIに切り替えられる機能を標準で提供してくれていたら良かったのですけれどね。<br /><br />Office2007は使いたくないけれど、やむなく理由があって使わなければならない方には下記のソフトがいいかもしれません。<br /><br /><a href="http://www.magnolia.co.jp/products/utility/backto2003/">BackTo2003</a><br /><br />有償のソフトウェアですがOffice2007でOffice2003みたいな操作が可能になるようです。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-7878835795945157197?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-26772650262388562522008-04-29T20:43:00.005+09:002008-04-30T21:08:18.037+09:00ハイパフォーマンスWebサイト先日、Amazonで注文していた「ハイパフォーマンスWebサイト」が届きました。<br /><br />通常、Webサイトのパフォーマンスを上げる場合、データベースやプログラム(Web側)などのバックエンドで対策をすることが多いと思います。<br /><br />しかし、この本によるとフロントエンド(JavaScript,CSS,HTML)の問題が全体の80%を占めるとのことです。<br /><br />CSSをHTMLの先頭の方に、JavaScriptをHTMLの末尾に記述するとパフォーマンスが上がるなど、私の知らなかったことがたくさん掲載されていました。<br /><br />また、アメリカのトップ10サイトのデータが掲載されているので、大変興味深く読むことができました。<br /><br />値段も安く、文章も読みやすいのでおすすめです。<br /><br /><br />※この本はフロントエンドに関するルールが14個記述されています。<br /> バックエンドに関するルールは掲載されていません。<br /><br /><br /><iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=ars3dogs-22&o=9&p=8&l=as1&asins=487311361X&fc1=000000&IS2=1&lt1=_blank&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width: 120px; height: 240px;" marginwidth="0" marginheight="0" frameborder="0" scrolling="no"></iframe><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-2677265026238856252?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-76870048214853411962008-03-22T21:15:00.004+09:002008-03-22T21:34:18.554+09:00AIRでWindowsのシステムトレイにアイコンを表示Airではデスクトップアプリケーションのようにシステムトレイにアイコンを表示することができます。<br /><br />簡単なサンプルを作成したので掲載します。<br /><br /><pre class="prettyprint"><code><br /><br /><?xml version="1.0" encoding="utf-8"?><br /><mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="applicationCompleteHandle()"><br /><br /> <mx:Script><br /> <![CDATA[<br /> import mx.controls.Alert;<br /><br /> private function applicationCompleteHandle():void {<br /><br /> /* システムトレイがサポートされているか判定 */<br /> if (NativeApplication.supportsSystemTrayIcon) {<br /> <br /> var images:Array = new Array();<br /> images.push(new BitmapData(16, 16, false, 0xFFFFFF));<br /> nativeApplication.icon.bitmaps = images;<br /><br /> var systemTrayIcon:SystemTrayIcon<br /> = (nativeApplication.icon as SystemTrayIcon);<br /><br /> /* ツールチップを表示 */<br /> systemTrayIcon.tooltip = "RiverStone";<br /><br /> var nativeMenu:NativeMenu = new NativeMenu();<br /> nativeMenu.addItem(new NativeMenuItem("メニュー1"));<br /> nativeMenu.addItem(new NativeMenuItem("メニュー2"));<br /> nativeMenu.addItem(new NativeMenuItem("メニュー3"));<br /> nativeMenu.addItem(new NativeMenuItem("メニュー4"));<br /> systemTrayIcon.menu = nativeMenu;<br /><br /> /* クリックイベント */<br /> systemTrayIcon.addEventListener(MouseEvent.CLICK, systemTrayIconClickEventHandle);<br /><br /> }<br /> }<br /><br /> private function systemTrayIconClickEventHandle(event:MouseEvent):void {<br /> Alert.show("システムトレイアイコンをクリック", "アラート");<br /> }<br /><br /> ]]><br /> </mx:Script><br /></mx:WindowedApplication><br /><br /></code></pre><br />上記のプログラムを実行するとシステムトレイに白いアイコンが表示されます。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080322001-724066.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080322001-724061.jpg" alt="" border="0" /></a><br /><br />システムトレイをクリックするとアラートが表示されます。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080322002-736413.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080322002-736411.jpg" alt="" border="0" /></a><br /><br />システムトレイに表示されているアイコンを右クリックするとメニューが表示されます。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080322003-775395.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080322003-775350.jpg" alt="" border="0" /></a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-7687004821485341196?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-68836943385797294632008-03-17T21:38:00.003+09:002008-03-17T21:55:04.371+09:00EclipseでAndroidプロジェクトを作成前回の投稿でAndroidの開発環境を構築したので、今回はAndroidプロジェクトを作成します。<br /><br />■ 手順1<br />プロジェクトエクスプローラ上で右クリックして「新規→プロジェクト」を選択。<br /><br />■ 手順2<br />新規プロジェクトダイアログのカテゴリー「Android」を展開して「Androidプロジェクト」を選択して「次へ」ボタンをクリック。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080317001-759297.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080317001-759293.jpg" alt="" border="0" /></a><br />■ 手順3<br />プロジェクト名・パッケージ名・アクティビティー名・アプリケーション名を入力して「終了」ボタンをクリック<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080317002-799454.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080317002-799448.jpg" alt="" border="0" /></a><br />■ 手順4<br />これでAndroidのプロジェクトが作成されました。最後に作成したプロジェクトを実行してエミュレータを表示します。<br /><br />プロジェクトを右クリックして「実行→Androidアプリケーション」を選択します。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080317003-722268.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080317003-722245.jpg" alt="" border="0" /></a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-6883694338579729463?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-11718340951290376772008-03-16T22:01:00.004+09:002008-03-16T22:50:55.587+09:00Androidの開発環境Androidの開発環境を構築したのでメモします。<br /><br />1. JDKのインストール<br />2. Eclipse3.3のインストール<br />3. Android SDKのインストール<br />4. ADT Plugin for Eclipseのインストール<br /><br />■JDKのインストール<br />Androidの開発にはJDK5.0以上が必要になるので、最新の<a href="http://java.sun.com/javase/ja/6/download.html">JDK6.0</a>をインストール。<br /><br />■Eclipse3.3のインストール<br /><a href="http://mergedoc.sourceforge.jp/">Pleiades All in One</a> を使えば簡単です。<br /><br />■Android SDKのインストール<br /><a href="http://code.google.com/android/download_list.html">ここから</a>各OS用のアーカイブをダウンロードできます。ダウンロードした後に任意の場所に解凍して、環境変数「ANDROID_HOME」に解凍したフォルダへのパスを設定し、環境変数「PATH」の最後に「;%ANDROID_HOME/tools」を追加します。<br /><br />■ADT Plugin for Eclipseのインストール<br />Eclipseを起動して「ヘルプ→ソフトウェア更新→検索およびインストール」を選択すると「インストール/更新」ダイアログが表示されます。<br />ここでは「インストールする新規フィーチャーを検索」を選択して「次へ」ボタンをクリック。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080316001-709229.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080316001-709223.jpg" alt="" border="0" /></a><br /><br />右側に表示される「新規更新リモート・サイト」をクリックして<br /><br />名前: Android<br />URL: https://dl-ssl.google.com/android/eclipse/<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080316002-785317.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080316002-785315.jpg" alt="" border="0" /></a><br /><br />を入力して「OK」ボタンをクリックする。<br /><br /><br />Androidにチェックが付いていることを確認して「終了」ボタンをクリック。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog200803160023jpg-730889.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog200803160023jpg-730883.jpg" alt="" border="0" /></a><br /><br />更新ダイアログに表示される「Android」をチェックしてから「次へ」ボタンをクリック。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080316004jpg-797957.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080316004jpg-797951.jpg" alt="" border="0" /></a><br /><br />使用条件に同意して、「次へ」ボタンをクリック。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080316005-745276.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080316005-745269.jpg" alt="" border="0" /></a><br /><br />「終了」ボタンをクリック(インストールするのに少し時間がかかります)。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080316006-797185.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080316006-797179.jpg" alt="" border="0" /></a><br />Eclipseを再起動して、「ウィンドウ→設定→Android」を開きSDKロケーションを設定。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080316007-788529.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080316007-788509.jpg" alt="" border="0" /></a><br />これでAndroidのプロジェクトを作成できるようになります。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-1171834095129037677?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-66315197372669899262008-03-14T21:12:00.006+09:002008-03-14T21:52:57.605+09:00PDFの閲覧にはFoxit READERがおすすめ最近までPDFのドキュメントを見るのにAdobe Readerを使用していました。しかし、あまりにも起動に時間がかるのと、リソースをたくさん使うのに嫌気がさしてきました。(私の使用しているマシンは低スペックではありません)<br /><br />Webで他のPDFを閲覧するソフトウェア探して、試してみたところ・・・<br /><a href="http://www.forest.impress.co.jp/lib/offc/print/docviewer/foxitreader.html">Foxit READER</a>というソフトウェアに落ち着きました。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080314001-793511.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080314001-793502.jpg" alt="" border="0" /></a><br /><br />これは起動も高速で閲覧するのにまったくストレスを感じません。<br /><br />12MBのPDFをAdobe ReaderとFoxit READERで開いてみたところ、Adobe Readerが12秒、Foxit READERが3秒ぐらいでした。(スクロールもFoxit READERの方が圧倒的にスムーズです)<br /><br />私にとっては高機能で遅いソフトウェアよりも、それなりの機能で早いソフトウェアの方が魅力的です。<br /><br />Adobe Readerにストレスを感じているかたは、是非おためしください。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-6631519737266989926?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-21103823938418498132008-03-12T21:42:00.002+09:002008-03-12T21:58:48.034+09:00AIRに画像ファイルをドラッグ&ドロップして表示AIRで作成したアプリケーションに画像ファイルをドラッグ&ドロップして表示するサンプルを作成しましたので掲載します。<br /><br />AIRで作成したアプリケーション外からドラッグ&ドロップするには「NativeDragEvent」に定義してある「NATIVE_DRAG_ENTER」と「NATIVE_DRAG_DROP」のイベント処理を行います。<br /><br />ポイントは<br /><br />1.<br />NATIVE_DRAG_ENTERイベントにて「NativeDragManager.acceptDragDrop」を呼び出しドラッグ&ドロップを許可する<br /><br />2.<br />NATIVE_DRAG_DROPイベントにてイベントクラスのプロパティ「Clipboard」からデータを取得して処理する<br /><br />となっています。<br />詳細は下記のサンプルをご覧ください。<br /><br /><pre class="prettyprint"><code><br /><?xml version="1.0" encoding="utf-8"?><br /><mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="applicationCompleteEventHandle()"><br /><br /> <mx:Script><br /> <![CDATA[<br /> import mx.controls.Alert;<br /> import mx.managers.DragManager;<br /><br /> var loader:Loader;<br /><br /> private function applicationCompleteEventHandle():void {<br /> <br /> canvas.addEventListener(<br /> NativeDragEvent.NATIVE_DRAG_ENTER, nativeDragEnterEventHandler);<br /><br /> canvas.addEventListener(<br /> NativeDragEvent.NATIVE_DRAG_DROP, nativeDragDropEventHandler);<br /> }<br /><br /> private function nativeDragEnterEventHandler(event:NativeDragEvent):void {<br /><br /> if (event.clipboard.hasFormat(<br /> ClipboardFormats.FILE_LIST_FORMAT)) {<br /> NativeDragManager.acceptDragDrop(canvas);<br /> }<br /> }<br /><br /> private function nativeDragDropEventHandler(event:NativeDragEvent):void {<br /> <br /> var fileList:Array<br /> = event.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;<br /><br /> if (fileList.length > 1) {<br /> return;<br /> }<br /><br /> var file:File = fileList[0];<br /> var fileStream:FileStream = new FileStream();<br /> fileStream.open(file, FileMode.READ);<br /><br /> var byteArray:ByteArray = new ByteArray();<br /><br /> fileStream.readBytes(byteArray, 0, fileStream.bytesAvailable);<br /> <br /> loader = new Loader();<br /><br /> loader.contentLoaderInfo<br /> .addEventListener(Event.COMPLETE, completeEventHandle);<br /><br /> loader.contentLoaderInfo<br /> .addEventListener(IOErrorEvent.IO_ERROR, ioErrorEventHandler);<br /><br /> loader.loadBytes(byteArray);<br /> }<br /><br /> private function completeEventHandle(event:Event):void {<br /><br /> if (loader.content is Bitmap) {<br /> image.data = loader.content;<br /> }<br /> }<br /><br /> private function ioErrorEventHandler():void {<br /> Alert.show("画像を読み込めませんでした。");<br /> }<br /><br /> ]]><br /> </mx:Script><br /><br /> <mx:Canvas id="canvas" x="0" y="0" width="100%" height="100%" backgroundColor="#FFFFFF"><br /> <mx:Image id="image" horizontalCenter="0" verticalCenter="0"/><br /> </mx:Canvas><br /> <br /></mx:WindowedApplication><br /></code></pre><br />■実行結果<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080312001-790308.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080312001-790301.jpg" alt="" border="0" /></a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-2110382393841849813?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-91523896729616971292008-03-10T21:11:00.007+09:002008-03-10T21:28:14.805+09:00AIRでディスプレイの情報を取得するAIRでディスプレイの幅・高さ・色深度を取得するには「flash.display.Screen」クラスを使用します。Screenクラスに定義されている静的フィールド「screens」・「mainScreen」からScreenクラスのインスタンスを取得してフィールドにアクセスします。<br /><br />screensには「Screen」クラスのインスタンスを格納した「Array」が、mainScreentはメインとなるディスプレイのScreenクラスのインスタンスが設定されています。<br /><br />下記にサンプルを掲載します。<br /><br /><pre class="prettyprint"><code><br />var screenArray:Array = Screen.screens;<br /><br />for (var i:int = 0; i < screenArray.length; i++) {<br /><br /> var screen:Screen = screenArray[i] as Screen;<br /> trace(screen.colorDepth);<br /> trace(screen.bounds.width);<br /> trace(screen.bounds.height);<br />}</code></pre><br /><br />■実行結果<br /><pre class="prettyprint"><code><br />色深度: 32<br />幅: 1440<br />高さ: 900<br /></code></pre><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-9152389672961697129?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-19980666926543419292008-03-08T18:45:00.006+09:002008-03-08T19:05:22.286+09:00AIRからSQLiteを使用するAIRでは「flash.data」パッケージのクラスを使用するとSQLiteというデータベースを使用することができます。<br /><br />JavaのJDBCを使用した経験があれば、すぐに理解できると思います。(非同期なことを除けば)<br /><br />簡単なサンプルを作成したので掲載します。このサンプルではSQLiteのデータベースにアクセスしてテーブルのデータを取得し、グリッドコンポーネントに表示しています。<br /><br /><pre class="prettyprint"><code><br /><?xml version="1.0" encoding="utf-8"?><br /><mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="applicationCompleteEventHandle()"><br /><br /> <mx:Script><br /> <![CDATA[<br /> import mx.collections.ArrayCollection;<br /> import mx.controls.Alert;<br /><br /> private var conn:SQLConnection;<br /> private var stmt:SQLStatement;<br /><br /> private function applicationCompleteEventHandle():void {<br /><br /> var dbFile:File<br /> = File.applicationStorageDirectory.resolvePath("local.db");<br /><br /> conn = new SQLConnection();<br /><br /> conn.addEventListener(SQLEvent.OPEN, databaseOpenEventHandle);<br /> conn.addEventListener(SQLErrorEvent.ERROR, databaseOpenErrorEventHandle);<br /><br /> conn.open(dbFile);<br /> }<br /><br /> private function closeEventHandle():void {<br /><br /> if (conn != null) {<br /> conn.close();<br /> }<br /> }<br /><br /> private function databaseOpenEventHandle(event:SQLEvent):void {<br /> readCustomerData();<br /> }<br /><br /> private function databaseOpenErrorEventHandle(event:SQLErrorEvent):void {<br /> Alert.show("データベースに接続できませんでした。", "データベース");<br /> }<br /><br /> private function readCustomerData():void {<br /><br /> stmt = new SQLStatement();<br /> stmt.sqlConnection = conn;<br /> stmt.text = "SELECT ID, NAME, ADDRESS FROM CUSTOMERS";<br /><br /> stmt.addEventListener(SQLEvent.RESULT, queryExecuteResultEventHandle);<br /> stmt.addEventListener(SQLErrorEvent.ERROR, queryExecuteErrorEventHandle);<br /><br /> stmt.execute();<br /> }<br /><br /> private function queryExecuteResultEventHandle(event:SQLEvent):void {<br /><br /> var result:SQLResult = stmt.getResult();<br /><br /> var dataSource:ArrayCollection = new ArrayCollection();<br /><br /> for (var i:int = 0; i < result.data.length; i++) {<br /><br /> var obj:Object = new Object();<br /> obj["id"] = result.data[i]["ID"];<br /> obj["name"] = result.data[i]["NAME"];<br /> obj["address"] = result.data[i]["ADDRESS"];<br /> dataSource.addItem(obj);<br /> }<br /><br /> customersGrid.dataProvider = dataSource;<br /> }<br /><br /> private function queryExecuteErrorEventHandle(event:SQLErrorEvent):void {<br /> Alert.show("SQL実行時にエラーが発生しました。", "データベース");<br /> }<br /><br /> ]]><br /> </mx:Script><br /> <mx:VBox y="0" height="100%" width="100%" x="0" verticalGap="0"><br /> <mx:Canvas width="100%" height="100%"><br /> <mx:DataGrid id="customersGrid" width="95%" height="95%" horizontalCenter="0" verticalCenter="0"><br /> <mx:columns><br /> <mx:DataGridColumn headerText="顧客番号" dataField="id"/><br /> <mx:DataGridColumn headerText="顧客名" dataField="name"/><br /> <mx:DataGridColumn headerText="住所" dataField="address"/><br /> </mx:columns><br /> </mx:DataGrid><br /> </mx:Canvas><br /> </mx:VBox><br /><br /></mx:WindowedApplication></code></pre><br /><br />■実行結果<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080308001-785042.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080308001-785039.jpg" alt="" border="0" /></a><br /><br />SQLiteのデータベースファイルを指定する際に「File.applicationStorageDirectory」を使用しています。これはWindowsXPでは「Documents And Settings/ユーザ名/ApplicationData/アプリケーション名/Local Data」を指しているようです。<br /><br />そのうちAdobe AIR用のO/Rマッピングソフトが流行りそうですね。(もう存在するのでしょうか?)<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-1998066692654341929?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-87300455830800217992008-03-07T22:18:00.002+09:002008-03-07T22:29:21.470+09:00AIRでWebサイトを表示するAIRではHTMLクラスを使えば簡単に任意のWebサイトを表示することができます。<br />Flex2ではいろいろ細工をすれば表示できましたがAIRでは驚くほど簡単にできます。<br /><br />下記がサンプルです。<br /><pre class="prettyprint"><code><br /><?xml version="1.0" encoding="utf-8"?><br /><mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" title="RiverStone"><br /><br /> <mx:Script><br /> <![CDATA[<br /><br /> private function addressKeyDownEventHandle(event:KeyboardEvent):void {<br /><br /> if (event.keyCode == Keyboard.ENTER) {<br /> browser.location = address.text;<br /> }<br /> }<br /><br /> ]]><br /> </mx:Script><br /><br /> <mx:VBox x="0" y="0" height="100%" width="100%" verticalGap="2"><br /> <mx:HBox width="100%" height="50" verticalAlign="middle" horizontalGap="2" paddingLeft="5" paddingRight="5"><br /> <mx:Button id="backButton" width="45" height="40" click="{browser.historyBack()}" label="戻る"/><br /> <mx:Button id="forwardButton" label="進む" width="45" height="40" click="{browser.historyForward()}"/><br /> <mx:Button id="stopButton" label="中止" width="45" height="40" click="{browser.cancelLoad()}"/><br /> <mx:TextInput id="address" width="100%" keyDown="addressKeyDownEventHandle(event)"/><br /> </mx:HBox><br /> <mx:HTML id="browser" width="100%" height="100%" location="http://www.r-stone.net/"/><br /> </mx:VBox><br /><br /></mx:WindowedApplication><br /></code></pre><br /><br />■実行結果<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080307001-731937.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080307001-731928.jpg" alt="" border="0" /></a><br />HTMLクラスの「historyBackメソッド」でブラウザの戻る、「historyForwardメソッド」でブラウザの進む、「cancelLoadメソッド」でブラウザの中止と同様の処理を行うことができます。<br /><br />その他にも履歴情報を取得できたり、HTMLコントロールで表示しているHTMLのDOM情報にもアクセスできるようです。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-8730045583080021799?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-69884507641618416972008-03-06T22:23:00.003+09:002008-03-06T22:35:35.626+09:00AIRのFileSystemDataGridを使ってみましたFlex3の「FileSystemDataGrid」クラスを使用すれば、ローカルにあるディレクトリの中身を表示することができます。<br /><br />簡単ですがサンプルを作成しました。<br /><pre class="prettyprint"><code><br /><?xml version="1.0" encoding="utf-8"?><br /><mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"><br /><br /> <mx:Script><br /> <![CDATA[<br /> import mx.controls.Alert;<br /> import mx.events.FileEvent;<br /><br /> private function fileChooseEventHandle(event:FileEvent):void {<br /> Alert.show(event.file.nativePath);<br /> } <br /><br /> ]]><br /> </mx:Script><br /><br /> <mx:FileSystemDataGrid id="grid" horizontalCenter="0" width="90%" height="80%" directory="{File.documentsDirectory}" fileChoose="fileChooseEventHandle(event)" verticalCenter="0"/><br /> <mx:Button x="45" y="10" label="上へ" enabled="{grid.canNavigateUp}" click="{grid.navigateUp()}"/><br /> <mx:Button x="99" y="10" label="下へ" enabled="{grid.canNavigateDown}" click="{grid.navigateDown()}"/><br /> <mx:Button x="153" y="10" label="戻る" enabled="{grid.canNavigateBack}" click="{grid.navigateBack()}"/><br /> <mx:Button x="207" y="10" label="進む" enabled="{grid.canNavigateForward}" click="{grid.navigateForward()}"/><br /> <br /></mx:WindowedApplication><br /></code></pre><br /><br />■実行結果<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080306001-748846.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080306001-748841.jpg" alt="" border="0" /></a><br /><br />「FileSystemDataGrid」クラスには上下のディレクトリに移動するメソッドや、ブラウザの戻る・進むボタンのような動きをするメソッドもあります。<br /><br />他にも表示する内容をフィルタリングできたり、ソートすることもできます。<br /><br />なかなか高機能ですよね。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-6988450764161841697?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-11976135001023580522008-03-05T22:45:00.001+09:002008-03-05T22:46:00.820+09:00ActionScript3のE4Xでハイフンを含む属性の扱いActionScript3のE4Xでハイフンを含む属性の値を取得する場合、通常のように@属性名ではコンパイルエラーとなってしまいます。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080305001-775518.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080305001-775514.jpg" alt="" border="0" /></a><br />E4Xでハイフンを含む属性値を取得する場合は、下記のようにすれば取得することができます。<br /><br /><pre class="prettyprint"><code><br />var customers:XML =<br /> <customers><br /> <customer customer-id="001">佐藤工業</customer><br /> <customer customer-id="002">田中建築</customer><br /> </customers>;<br /> trace(customers.customer[0].@["customer-id"]);<br /></code></pre><br /><br />「@」の後ろを角かっこで囲み、角かっこの中に属性名を文字列型で指定します。<br />E4Xを使い始めた当初は、この方法がわからず小一時間ほど調べました。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-1197613500102358052?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-13349228258578160202008-03-02T19:02:00.006+09:002008-03-02T20:59:46.184+09:00Adobe AIRのNativeWindowクラスAdobe AIRでネイティブのデスクトップウィンドウを作成するには「flash.display.NativeWindow」クラスを使用します。<br /><br />NativeWindowを作成する初期化オプション「flash.display.NativeWindowInitOptions」をNativeWindowのコンストラクタ渡してNativeWindowの「activateメソッド」を呼び出せばウィンドウが表示されます。<br /><br />NativeWindowInitOptionsクラスの「type」プロパティに、NativeWindowTypeに定義してある定数を設定すればウィンドウの種別を変更できるようです。<br /><br />下記にサンプルを掲載します。<br /><br /><pre class="prettyprint"><code><br /><?xml version="1.0" encoding="utf-8"?><br /><mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"><br /><br /> <mx:Script><br /> <![CDATA[<br /> import mx.core.Window;<br /><br /> private function newWindowButton1ClickHandle():void {<br /><br /> var options:NativeWindowInitOptions = new NativeWindowInitOptions();<br /> options.type = NativeWindowType.NORMAL;<br /><br /> var win:NativeWindow = new NativeWindow(options);<br /> win.title = "NORMAL";<br /> win.width = 200;<br /> win.height = 200;<br /> win.stage.addChild(createTextField("サンプル"));<br /><br /> win.activate();<br /><br /> }<br /><br /> private function newWindowButton2ClickHandle():void {<br /><br /> var options:NativeWindowInitOptions = new NativeWindowInitOptions();<br /> options.type = NativeWindowType.LIGHTWEIGHT;<br /><br /> /* NativeWindowTypeがLIGHTWEIGHTの場合はsystemChromeをNONEにする */<br /> options.systemChrome = NativeWindowSystemChrome.NONE;<br /><br /> var win:NativeWindow = new NativeWindow(options);<br /> win.title = "LIGHTWEIGHT";<br /> win.width = 200;<br /> win.height = 200;<br /> win.stage.addChild(createTextField("サンプル"));<br /> win.activate();<br /><br /> }<br /><br /> private function newWindowButton3ClickHandle():void {<br /><br /> var options:NativeWindowInitOptions = new NativeWindowInitOptions();<br /> options.type = NativeWindowType.UTILITY;<br /><br /> var win:NativeWindow = new NativeWindow(options);<br /> win.title = "UTILITY";<br /> win.width = 200;<br /> win.height = 200;<br /> win.stage.addChild(createTextField("サンプル"));<br /> win.activate();<br /> }<br /><br /> private function createTextField(text:String):TextField {<br /><br /> var button:TextField = new TextField();<br /> button.text = text;<br /> button.width = 100;<br /> button.height = 20;<br /> return button;<br /> }<br /><br /> ]]><br /> </mx:Script><br /><br /> <mx:Canvas x="0" y="0" width="100%" height="100%" backgroundColor="#FFFFFF"><br /> <mx:Button id="newWindowButton1" x="10" y="10" label="新しいウィンドウ1" click="newWindowButton1ClickHandle()"/><br /> <mx:Button id="newWindowButton2" x="10" y="40" label="新しいウィンドウ2" click="newWindowButton2ClickHandle()"/><br /> <mx:Button id="newWindowButton3" x="10" y="70" label="新しいウィンドウ3" click="newWindowButton3ClickHandle()"/><br /> </mx:Canvas><br /><br /></mx:WindowedApplication><br /></code></pre>■上記のプログラムを実行すると表示されるウィンドウ<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080301001-761391.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080301001-761367.jpg" alt="" border="0" /></a><br />■NativeWindowType.NORMALのウィンドウ<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080301002-793884.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080301002-793880.jpg" alt="" border="0" /></a><br />■NativeWindowType.LIGHTWEIGHTのウィンドウ<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080301003-755365.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080301003-755363.jpg" alt="" border="0" /></a><br />■NativeWindowType.UTILITYのウィンドウ<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080301004-704697.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080301004-704695.jpg" alt="" border="0" /></a><br /><br />Flex2ではコンテナにコンポーネントを追加する場合、コンテナの「addChild」メソッドを呼び出してコンポーネントを追加していましたが、NativeWindowクラスではNativeWindowのプロパティ「stage」に対して「addChild」を呼び出し追加するようです。<br /><br />しかし、私の環境ではFlexのコンポーネントをNativeWindowに追加することができませんでした。これはベータ版のときの制約だったようですが、正式にリリースされたバージョンでも対応していないようです。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-1334922825857816020?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-57199687924930823512008-02-29T23:11:00.006+09:002008-02-29T23:27:28.859+09:00Flex Scheduling FrameworkAdobe Labsにスケジュールコンポーネント用のフレームワーク「<a href="http://labs.adobe.com/wiki/index.php/Flex_Scheduling_Framework">Flex Scheduling Framework</a>」が公開されています。<br /><br />簡単ですがサンプルを作成したので掲載します。<br /><br /><pre class="prettyprint"><code><br /><?xml version="1.0" encoding="utf-8"?><br /><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="flexlib.scheduling.*" applicationComplete="applicationCompleteHandle()" backgroundGradientColors="[#c0c0c0, #c0c0c0]"><br /><br /> <mx:Script><br /> <![CDATA[<br /><br /> import mx.collections.ArrayCollection;<br /> import mx.collections.IList;<br /> import flexlib.scheduling.scheduleClasses.ColoredScheduleEntry; <br /> import flexlib.scheduling.scheduleClasses.SimpleScheduleEntry;<br /><br /> [Bindable]<br /> private var start:Date;<br /><br /> [Bindable]<br /> private var end:Date;<br /><br /> [Bindable]<br /> private var dataProvider:ArrayCollection;<br /><br /> private function applicationCompleteHandle():void {<br /><br /> start = new Date(2008, 0, 1, 9, 0, 0);<br /> end = new Date(2008, 0, 1, 17, 59, 59);<br /><br /> var entries:ArrayCollection = new ArrayCollection();<br /><br /> var row1:IList = new ArrayCollection(); <br /> var entry1:ColoredScheduleEntry = new ColoredScheduleEntry();<br /> entry1.startDate = new Date(2008, 0, 1, 9, 30, 0);<br /> entry1.endDate = new Date(2008, 0, 1, 11, 59, 59);<br /> entry1.label = "会議";<br /> entry1.backgroundColor = 0x663333;<br /> row1.addItem(entry1);<br /><br /> var row2:IList = new ArrayCollection();<br /> var entry2:ColoredScheduleEntry = new ColoredScheduleEntry();<br /> entry2.startDate = new Date(2008, 0, 1, 13, 0, 0);<br /> entry2.endDate = new Date(2008, 0, 1, 15, 59, 59);<br /> entry2.label = "プログラミング";<br /> entry2.backgroundColor = 0x336633;<br /><br /> row2.addItem(entry2);<br /><br /> entries.addItem(row1);<br /> entries.addItem(row2);<br /><br /> dataProvider = entries;<br /> }<br /><br /> ]]><br /> </mx:Script><br /><br /> <mx:VBox x="0" y="0" height="100%" width="100%" verticalGap="0"><br /> <ns1:Timeline id="timeline" width="800" height="20" startDate="{start}" endDate="{end}"/><br /> <ns1:ScheduleViewer id="scheduleViewer" width="800" height="300" startDate="{start}" endDate="{end}" dataProvider="{dataProvider}" entryLayout="flexlib.scheduling.scheduleClasses.layout.SimpleLayout" entryRenderer="flexlib.scheduling.scheduleClasses.renderers.ColoredSolidScheduleEntryRenderer" x="53" y="143"/><br /> </mx:VBox><br /> <br /></mx:Application><br /><br /></code></pre><br /><br />下記の画像が実行結果<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080229001-790850.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080229001-790847.jpg" alt="" border="0" /></a><br /><br />タイムラインを表示するコンポーネントとスケジュールを表示するコンポーネントは分かれているようです。<br /><br />タイムラインを表示するには「flexlib.scheduling.Timeline」クラスを使用し、スケジュールを表示するには「flexlib.scheduling.ScheduleViewer」クラスを使用します。<br /><br />スケジュールをドラッグ&ドロップで移動できるといいのですが、軽くドキュメントを見た限りでは見つかりませんでした。対応しているのでしょうか?<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-5719968792493082351?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-75160684368487437902008-02-28T21:22:00.003+09:002008-02-28T21:28:06.112+09:00FlexBuilder3を使ってみてFlexBuilder3が正式にリリースされたので使ってみました。<br />私の感想ですがFlexBuilder2と比べて格段に良くなったと感じました。<br /><br />一番嬉しいのはリファクタリングの名前の変更ができるようになったことです。<br />今まではこの機能がなかったので、クラスの名前を変更したい場合は大変でした。<br /><br />FlexBuilder3ではFlex2のアプリケーションを開発できないと思っていましたが・・・<br />FlexBuilder3からEclipseのJDTがJDKを変更できるのと同じように、FlexのSDKを変更できます。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080228001-776184.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080228001-776176.jpg" alt="" border="0" /></a><br /><br />他にも、UIをデザインする画面で拡大できるようになったり、UIコンポーネントの背景色を選択するカラーピッカーが使いやすくなったりと、細かいところもいろいろ変更されているようです。<br /><br /><br />私はまだ使用していませんが、プロファイリング機能が追加されたのでパフォーマンスチューニングも楽になりそうですね。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080228002-796966.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.r-stone.net/blogs/satoshi/uploaded_images/blog20080228002-796956.jpg" alt="" border="0" /></a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-7516068436848743790?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-43890837658582938232008-02-27T22:03:00.004+09:002008-02-27T22:29:01.686+09:00Flex2のnavigateToURLFlex2から任意のURLを新しいブラウザで開きたい場合は「flash.net.navigateToURL」関数を使用すると簡単にできます。<br /><br />navigateToURLの第一引数には「URLRequest」のインスタンスを、第二引数にはリクエスト結果を表示するウィンドウを指定します。<br /><br />リクエストメソッドとして「POST」を使用したい場合は「URLRequest」の「method」プロパティに「URLRequestMethod.POST」を設定します。<br /><br />第二引数はHTMLのAタグに指定する「target」属性のようなもので新しいブラウザを開きたい場合は「_blank」、現在のウィンドウで開きたい場合は「_self」を指定します。<br /><br />下記にサンプルを掲載します。<br /><br /><pre class="prettyprint"><code><br />var request:URLRequest = new URLRequest("http://www.google.com/");<br />request.method = URLRequestMethod.POST;<br />navigateToURL(request, "_blank");<br /></code></pre><br /><br />これを実行すると新しいブラウザが開き、GoogleのWebサイトが表示されます。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-4389083765858293823?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-31178259994710284262008-02-25T20:35:00.004+09:002008-02-25T20:48:48.345+09:00Flex2でXMLオブジェクトに変数の値を埋め込むFlex2ではXMLオブジェクトにXMLデータをリテラルで設定する際に、変数の値を埋め込むことができます。<br /><br />変数を埋め込むにはスコープ上に存在する変数名を「{}」で囲みます。<br />例えば変数「name」を埋め込む場合は「{name}」となります。<br /><br />これはXMLの構造が変化しないデータを扱うときに大変便利です。<br />下記に簡単ですがサンプルを掲載いたします。<br /><br /><pre class="prettyprint"><code><br />var id:int = 100;<br />var name:String = "山田太郎";<br /><br />var xml:XML =<br /> <employees><br /> <employee id={id}>{name}</employee><br /> </employees>;<br /><br />trace(xml.toXMLString());<br /></code></pre><br /><br />このプログラムを実行するとコンソールに下記のメッセージが表示されます。<br /><pre class="prettyprint"><code><br /><employees><br /> <employee id="100">山田太郎</employee><br /></employees><br /></code></pre><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-3117825999471028426?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-32911455578572966962008-02-24T17:14:00.005+09:002008-02-24T17:39:23.118+09:00Python2.5のwith文Python2.5からwith文が導入されました。with文を使用すればtry文のfinally節で行っていた後処理が明快に記述できます。<br /><br />例えばファイルを開いてデータを読み出してからクローズする場合は下記のようになります。<br /><pre class="prettyprint"><code><br />#!/usr/bin/env python<br /># -*- coding: utf-8 -*-<br /><br />from __future__ import with_statement<br /><br /># try finallyを使用<br />try:<br /> file = open(r"C:\test.txt", "r")<br /> for line in file:<br /> print line<br />finally:<br /> file.close()<br /><br /># withを使用<br />with open(r"C:\test.txt", "r") as file:<br /> for line in file:<br /> print line<br /><br /></code></pre><br />今回、MySQLに接続してクエリを実行してから接続を閉じる処理をwith文で作成してみたので掲載したいと思います。<br /><br /><pre class="prettyprint"><code><br />#!/usr/bin/env python<br /># -*- coding: utf-8 -*-<br /><br />from __future__ import with_statement<br /><br />import MySQLdb<br /><br />class MySQLConnector(object):<br /><br /> def __init__(self, username, password):<br /> self.username = username<br /> self.password = password<br /><br /> def __enter__(self):<br /> self.connection = MySQLdb.connect(db="test", host="localhost", port=3306, user=self.username, passwd=self.password)<br /> self.cursor = self.connection.cursor()<br /> print "called __enter__"<br /> return self.cursor<br /><br /> def __exit__(self, type, value, tb):<br /> self.cursor.close()<br /> self.connection.close()<br /> print "called __exit__"<br /><br /><br />if __name__ == '__main__':<br /><br /> with MySQLConnector("testuser", "testpassword") as cursor:<br /> cursor.execute("select * from testdata")<br /> for row in cursor.fetchall():<br /> print row<br /><br /></code></pre><br /><br />上記のサンプルを説明すると、with文は最初に「__enter__」メソッドを呼び出し、with文から抜け出すときに「__exit__」メソッドを呼び出します。<br />「__enter__」メソッドの戻り値がwith文の変数(上記のサンプルでは「as cursor」の部分です)に代入されるようです。<br /><br />※with文の中で例外が発生した場合でも「__exit__」メソッドが呼び出されます。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-3291145557857296696?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-78214103988957245922008-02-23T18:27:00.006+09:002008-02-23T19:03:56.541+09:00SQLiteのデータを操作するツールSQLiteのデータをコマンドから操作するのが面倒になり、データを操作する便利なツールがないかWebで捜したところ・・・<br /><br />2つありました。「<a href="http://sqlitecc.sourceforge.net/">SQLiteCC</a>」と「<a href="http://sqlitebrowser.sourceforge.net/">SQLite Database Browser</a>」という名前のツールです。<br />両方使ってみた結果、私としては「SQLite Database Browser」の方が使いやすく感じました。<br /><br />SQLiteCCはデータを更新すると強制終了されるのと、テーブルを作成できないので最近は使用していません。<br /><br />なので、最近は「SQLite Data Browser」を使用しています。<br />ちょっとしたデータを格納するのにSQLiteは手軽で便利ですよね。<br /><br />SQLiteについては下記の書籍が一番まとまっています。<br /><br /><iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=ars3dogs-22&o=9&p=8&l=as1&asins=4798109436&fc1=000000&IS2=1<1=_blank&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-7821410398895724592?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0tag:blogger.com,1999:blog-4012949362804244233.post-70282002077617771532008-02-22T21:10:00.004+09:002008-02-22T21:23:24.961+09:00mx.controls.textClasses.TextRangeクラス以前から気になっていたFlex2のTextRangeクラスを使ってみました。このクラスを使用すれば「TextInput」や「TextArea」に表示されている文字のスタイルを変更することができます。<br /><br />例えば「editor」というidの「TextArea」に表示されている文字の選択部分を太字にしたい場合は・・・<br /><br /><pre class="prettyprint"><code><br />var textRange:TextRange = new TextRange(editor, true);<br />textRange.fontWeight = "bold";<br /></code></pre><br /><br />とすればOKです。<br />TextRangeクラスのコンストラクタの第一引数には「TextInput」や「TextArea」などのインスタンスを、第2引数はtrueを設定します(詳細はリファレンスを参照ください)。<br /><br />文字を太字にする以外にも、下記のようにたくさんのスタイルを設定できるようです。<br /> ・文字の色<br /> ・文字の書体<br /> ・文字の大きさ<br /> ・カーニング<br /> ・文字間<br /> ・文字の整列<br /> ・斜体<br /> ・文字にリンクを設定<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4012949362804244233-7028200207761777153?l=www.r-stone.net%2Fblogs%2Fsatoshi'/></div>satoshihttp://www.blogger.com/profile/18323474778021481824noreply@blogger.com0