カテゴリー: ActionScript3.0
投稿日: 2011/08/23 23:11
Adobe AIRやiOSアプリ、Androidアプリを作成する際に、スクリーンサイズに合わせて様々なサイズのアイコンを用意しなければならない。
作成したアイコンを書きだす際、いちいちサイズを指定するのは時間がかかりめんどくさい作業である。

Icon Resizeでは、512px 512pxのJPEGファイルまたはPNGファイルを1つ用意すれば最大9パターンのアイコンを作成する。

Icon Resizeを起動してJPEGファイルまたはPNGファイルをIcon Resizeにドラックアンドドロップする。
Icon Resizeリリース
名前をつけて保存すると様々なサイズのアイコンが作成される。
Icon Resizeリリース

Icon Resize

カテゴリー: ActionScript3.0
投稿日: 2011/08/23 00:12
ローカルの日付や時刻を書式化するActionScript3向けライブラリを作成した。
package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	
	public class FLDate extends Sprite
	{
		/**
		 * 出力される日付文字列の書式。
		 * Y 年。4桁の数字。
		 * y 年。2桁の数字。
		 * m 月。数字。先頭にゼロをつける。
		 * n 月。数字。先頭にゼロをつけない。
		 * F 月。フルスペルの文字。
		 * M 月。3文字形式。
		 * O 月。旧暦日本語。
		 * d 日。数字。先頭にゼロをつける。
		 * j 日。数字。先頭にゼロをつけない。
		 * w 曜日。数値。
		 * l 曜日。フルスペルの文字。
		 * D 曜日。3文字形式。
		 * N 曜日。ISO-8601形式の数値。
		 * J 曜日。日本語。
		 * g 時。12時間単位。先頭にゼロをつけない。
		 * G 時。24時間単位。先頭にゼロをつけない。
		 * h 時。12時間単位。先頭にゼロをつける。
		 * H 時。24時間単位。先頭にゼロをつける。
		 * i 分。数字。先頭にゼロをつける。
		 * s 秒。数字。先頭にゼロをつける。
		 * a 午前または午後。(小文字)
		 * A 午前または午後。(大文字)
		 * S 英語形式の序数を表すサフィックス。2文字。
		 * z 年間の通算日。数字。(ゼロから開始)
		 * t 指定した月の日数。
		 * L 閏年であるかどうか。
		 */
		public function FLDate()
		{
			this.enterFrameListener(null);
			this.addEventListener(Event.ENTER_FRAME, enterFrameListener);
		}
		private var _seconds:int = 0;
		private var date:Date;
		public var weekFullEn:Array = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
		public var weekJp:Array= new Array("日","月","火","水","木","金","土");
		public var monthFullEn:Array = new Array("January", "February", "March", "April", "May", "June","July", "August", "September", "October", "November", "December");
		public var monthOldJp:Array = new Array("睦月", "如月", "弥生", "卯月", "皐月", "水無月","文月", "葉月", "長月", "神無月", "霜月", "師走");
		public var dateSuffix:Array = new Array("st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th","th", "th", "th", "th", "th", "th", "th", "th", "th", "th","st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th", "st");
		public static const HOURS_CHANGED:String = "hoursChanged";
		public static const MINUTES_CHANGED:String = "minutesChanged";
		public static const SECONDS_CHANGED:String = "secondsChanged";
		private function enterFrameListener(e:Event):void
		{
			date = new Date();
			var year:int = date.getFullYear();
			var month:int = date.getMonth();
			var day:int = date.getDay();
			var hours:int = date.getHours();
			var minutes:int = date.getMinutes();
			var seconds:int = date.getSeconds();
			
			if (seconds != _seconds) {
				dispatchEvent(new Event(SECONDS_CHANGED));
				if (seconds == 0) {
					dispatchEvent(new Event(MINUTES_CHANGED));
					if (minutes == 0) {
						dispatchEvent(new Event(HOURS_CHANGED));
					}
				}
			}
			_seconds = seconds;
		}
		public function format(pattern:String):String
		{
			var year:int = date.getFullYear();
			var month:int = date.getMonth();
			var d:int = date.getDate();
			var day:int = date.getDay();
			var hours:int = date.getHours();
			var minutes:int = date.getMinutes();
			var seconds:int = date.getSeconds();
			var res:String = "";
			for(var i:uint = 0; i < pattern.length; i++) {
				var s:String = pattern.charAt(i);
				switch(s) {
					case "#":
						if(i == pattern.length-1) {
							break;
						}
						res += pattern.charAt(++i);
						break;
					case "Y":
						res += year;
						break;
					case "y":
						res += year.toString().substr(2, 2);
						break;
					case "m":
						res += preZero(month+1);
						break;
					case "n":
						res += month+1;
						break;
					case "d":
						res += preZero(d);
						break;
					case "j":
						res += d;
						break;
					case "w":
						res += day;
						break;
					case "N" :
						res += isoDay(day);
						break;
					case "l" :
						res += weekFullEn[day];
						break;
					case "D" :
						res += weekFullEn[day].substr(0, 3);
						break;
					case "J" :
						res += weekJp[day];
						break;
					case "F" :
						res += monthFullEn[month];
						break;
					case "M" :
						res += monthFullEn[month].substr(0, 3);
						break;
					case "O" :
						res += monthOldJp[month];
						break;
					case "a" :
						res += ampm(hours);
						break;
					case "A" :
						res += ampm(hours).toUpperCase();
						break;
					case "H" :
						res += preZero(hours);
						break;
					case "h" :
						res += preZero(from24to12(hours));
						break;
					case "g" :
						res += from24to12(hours);
						break;
					case "G" :
						res += hours;
						break;
					case "i" :
						res += preZero(minutes);
						break;
					case "s" :
						res += preZero(seconds);
						break;
					case "t" :
						res += lastDayOfMonth(date);
						break;
					case "L" :
						res += isLeapYear(year);
						break;
					case "z" :
						res += dateCount(year, month, d);
						break;
					case "S" :
						res += dateSuffix[d - 1];
						break;
					default :
						res += s;
						break;						
				}
			}
			return res;
		}
		private function preZero(v:int):String
		{
			return v < 10?"0" + v.toString():v.toString();
		}
		private function from24to12(hours:int):int
		{
			return hours > 12?hours - 12:hours;
		}
		private function ampm(hours:int):String
		{
			return hours < 12?"am":"pm";
		}
		private function isoDay(day:int):String
		{
			return day == 0?"7":day.toString();
		}
		private function lastDayOfMonth(dateObj:Date):uint
		{
			var tmp:Date = new Date(dateObj.getFullYear(), dateObj.getMonth() + 1, 1);
			tmp.setTime(tmp.getTime() - 1);
			return tmp.getDate();
		}
		private function isLeapYear(year:int):String
		{
			var tmp:Date = new Date(year, 0, 1);
			var sum:uint = 0;
			for (var i:int = 0; i < 12; i++) {
				tmp.setMonth(i);
				sum += lastDayOfMonth(tmp);
			}
			return sum == 365?"0":"1";
		}
		private function dateCount(year:int, month:int, date:int):uint
		{
			var tmp :Date= new Date(year, 0, 1);
			var sum:int = -1;
			for (var i:int = 0; i < month; i++) {
				tmp.setMonth(i);
				sum += lastDayOfMonth(tmp);
			}
			return sum + date;
		}
	}
}

時・分・秒の更新タイミングをイベントとして取得することができるため、時計アプリを簡単に実装できる。
また、書式はPHPとほぼ同じなのでPHPを使っている人であれば、よく使う書式をそのまま利用できる。
package 
{
	import flash.desktop.ClipboardTransferMode;
	import flash.display.Sprite;
	import flash.events.Event;
	
	public class Main extends Sprite 
	{
		
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		private var flDate:FLDate = new FLDate();
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			flDate.addEventListener(FLDate.SECONDS_CHANGED, s);
		}
		private function s(e:Event):void
		{
			trace(flDate.format("Y/m/d H:i:s")); //2011/08/23 00:06:11
		}
		
	}
	
}
カテゴリー: HTML/CSS/JavaScript
投稿日: 2011/08/03 01:01
Google Chrome拡張機能の開発方法を紹介する。

はじめにマニュフェストファイル(manifest.json)を作成する。
このマニュフェストファイルはJSON形式になっており、プラグインの名前、プラグインの説明、バージョンなどを記述する。
matchesには、プラグインの動作を許可するURLを記述する。このURLにはワイルドカードを指定できる。jsにはJavaScriptファイルを指定する。
{
    "name": "プラグインの名前",
    "description": "プラグインの説明",
    "version": "0.1",
    "content_scripts": [
    {
      "matches": ["http://arthur87.sakura.ne.jp/"],
      "js": ["main.js"]
    }]
}


main.jsには、ページ中の「A」という文字列を「a」に置き換えるコードを記述した。
 document.body.innerHTML=document.body.innerHTML.replace("A", "a");



Google Chromeを起動して、アドレス覧に「chrome://extensions」と入力すると「機能拡張」の設定画面が表示される。
「拡張機能のパッケージ化」を選択して、パッケージ化を行う。
Google Chrome拡張機能開発
«Prev || 1 | 2 | 3 |...| 29 | 30 | 31 || Next»
コマンド記号の描画 Adobe AIR シームレスインストール Google Maps API for Flash ポリライン Google Maps APIとスマートフォン Twitterクライアント サンプル MapTool2 リリース Google Chrome拡張機能開発 Icon Resizeリリース KMLファイルの作成 Flex TextAreaの強制スクロール Alertコントロールのカスタマイズ 日本語形態素解析 テンプレートエンジン Smarty Action Message Format(AMF)