Flex Coder このページをアンテナに追加 RSSフィード

2011-07-13

[]最近は会社ブログ書いています

こんばんは〜、sato-shiです。

最近、会社でこんなの始めました。

技術ネタも掲載する予定です。

よろしければお越しください〜。

クラスメソッドブログを公開

http://classmethod.jp/news/etc/start-classmethod-blog/

2011-04-18

[]4/20に市ヶ谷でセミナーしま

今週の4/20水曜日に市ヶ谷でセミナーします。

ネタは「リモートアクセス環境構築事例セミナー」と題しまして、

当社で何年かに渡って検討実施されてきた、

情報セキュリティ向上と業務効率アップと

コストのバランスを考えた事例セミナーです。

↓まだ申込可能です〜♪

リモートアクセス環境構築事例セミナー

http://classmethod.jp/seminar/remote-access/

インターネットセキュリティファイアウォール等で有名な

ソニックウォール社さんとの共催となっています。

ソニックウォールさんからは、SonicWALLソリューション、次世代ファイアウォール

ネットワーク可視化と制御、スマートフォンからの社内アクセスについて

デモを交えながらご紹介頂く予定です。

からは以下のような自社事例ネタをご紹介する予定です。

  1. 当社が導入に至る背景と経緯
  2. 中小企業が抱えるセキュリティリスクについて
  3. リモートアクセスによるメリットリスク
  4. ワークライフバランスによるメリットリスク
  5. ISMSに合わせて実施した内容
  6. BCP策定に合わせて実施した内容
  7. ActiveDirectory構築に合わせて実施した内容
  8. iPhone/iPadから社内システムアクセスする方法
  9. パブリッククラウド環境の活用
    •  AmazonEC2,AmazonS3
  10. 仮想プライベートクラウド環境の活用
    •  AmazonVPC
  11. SaaSの活用
  12. 今後の予定

リモートアクセス環境構築事例セミナー

http://classmethod.jp/seminar/remote-access/

2011-03-03

[]ActionScript API for AWS を使って AIR for Android アプリを作る その4

インスタンス立ち上げとかイメージ一覧とか機能を追加した。

冗談パケ死ボタン作ってみた


f:id:sato-shi:20110303110113p:image



自爆した。



自制した。

2011-03-02

[]ActionScript API for AWS を使って AIR for Android アプリを作る その3

東京リージョン来たーってことで、早速対応完了。

インスタンス一覧です。

全リージョンのインスタンスがお手元にw。

f:id:sato-shi:20110302233824p:image


ActionScript API for AWS (Amazon Web Services)

https://github.com/satoshi7/ActionScript-API-for-AWS-Amazon-Web-Services-

2011-03-01

[]ActionScript API for AWS を使って AIR for Android アプリを作る その2

SimpleDBのUIができたのでご紹介

Domainの一覧

f:id:sato-shi:20110302003206p:image

Itemの一覧

f:id:sato-shi:20110302003205p:image

Attributeの一覧

f:id:sato-shi:20110302003204p:image


続きまして、開発中のSQSの画面。

統一されたいないAPI群をカンタンに使うってところがミソですw。

f:id:sato-shi:20110302005414p:image


さらに、開発中のEBTの画面。

f:id:sato-shi:20110302011024p:image

see you tomorrow!

2011-02-27

[]ActionScript API for AWS を使って AIR for Android アプリを作る

軽い気持ちで宣言したので作ってみました。

AndroidiPhoneで動くはずです。

Androidで動作確認しました。

メニュー

f:id:sato-shi:20110228013945p:image

EC2インスタンス一覧

f:id:sato-shi:20110228014001p:image

インスタンス詳細

f:id:sato-shi:20110228014012p:image


んで、ウリとしては、全リージョンのインスタンスを一覧できることです。

消し忘れの防止になりますw。

こんな感じで。

f:id:sato-shi:20110228021242p:image

んで最近出たばっかりのCloudFormationのStack一覧です。

f:id:sato-shi:20110228030128p:image

こっちが詳細

f:id:sato-shi:20110228030539p:image

2011-02-25

[]AWS CloudFormation 用の ActionScript API

挑戦状が来たので早速30分ぐらいで作りました

こんなかんじで書けます


var cfm:CFM = new CFM(CFM.US_EAST_1);

cfm.setAWSCredentials(AWSKey.key,AWSKey.sec);

cfm.addEventListener(AWSEvent.RESULT,awsHandler);

cfm.executeRequest(CFM.DESCRIBE_STACKS);


ActionScript API for AWS (Amazon Web Services)

https://github.com/satoshi7/ActionScript-API-for-AWS-Amazon-Web-Services-

[]AWS CloudFormation

またまたAWSよりキラーサービスが登場。

以下のようなテンプレートが用意されています


AWS CloudFormation

http://aws.amazon.com/cloudformation/

2011-02-21

[]Amazon Web Servicesセキュリティについて

Amazon Web Servicesセキュリティについて、自分用のメモ書きです。ちょっとだけ加筆しました。


  • ・補足資料

2011-02-16

[]AWS API認証の種類について

ここでミニLTです。

AWS提供しているQueryAPIを解析していますと、認証周りで違いがあることが分かります。そこで、まとめます


  • 1:EC2等で使われていたがdepricatedになった認証方法
  • 2:GETパラメータ認証する最もメジャー認証方法
    • 暗号アルゴリズム:HMACSHA1
    • 使われているサービスEC2, CloudWatch, Import Export, Auto Scaling, Elastic Beanstalk, Elastic Load Balancing, Elastic MapReduce, Identity and Access Management, Relational Database Service, SimpleDB, Simple Notification Service,Simple Queue Service, Virtual Private Cloud
    • 認証生成に使う文字:Action,SignatureVersion,SignatureMethod,AWSAccessKeyId,Timestampなどなど

  


詳しくはこちらをお試しください。


https://github.com/satoshi7/ActionScript-API-for-AWS-Amazon-Web-Services-


以下のAPIと接続確認ができています



次新しいのが出たら即日対応してやるっ!!!(挑戦状)


ではでは。

2011-01-27

[]ActionScript API for Amazon Simple Email Service

とりあえず作ってみた

GitHubに上げました。

とりあえず、、、動きますw。

以前とSignatureが変わっててちょっとだけ苦労しました。


ActionScript API for AWS (Amazon Web Services)

https://github.com/satoshi7/ActionScript-API-for-AWS-Amazon-Web-Services-

2011-01-23

[]AWS Elastic Beanstalk を使う その12

StandardSessionクラスがSerializableインタフェースを持っているので、Base64エンコードして直列化した文字列をSimpleDBに書き込むような流れになっています

オブジェクト文字列化に使ったのはこれ。

ちゃんとテストしていませんがw。

http://www.source-code.biz/base64coder/java/

道半ば。。

package jp.cm.aws.tomcat.session;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.apache.catalina.Session;
import org.apache.catalina.Store;
import org.apache.catalina.session.StandardSession;
import org.apache.catalina.session.StoreBase;

import biz.source_code.base64Coder.Base64Coder;

import com.amazonaws.auth.PropertiesCredentials;
import com.amazonaws.services.simpledb.AmazonSimpleDB;
import com.amazonaws.services.simpledb.AmazonSimpleDBClient;
import com.amazonaws.services.simpledb.model.Attribute;
import com.amazonaws.services.simpledb.model.DeleteAttributesRequest;
import com.amazonaws.services.simpledb.model.GetAttributesRequest;
import com.amazonaws.services.simpledb.model.GetAttributesResult;
import com.amazonaws.services.simpledb.model.Item;
import com.amazonaws.services.simpledb.model.PutAttributesRequest;
import com.amazonaws.services.simpledb.model.ReplaceableAttribute;
import com.amazonaws.services.simpledb.model.SelectRequest;

public class SimpleDBStore extends StoreBase implements Store {

	private AmazonSimpleDB sdb = null;
	private String myDomain = "SessionPersistence";
	private String mySession = "Session";

	public SimpleDBStore() throws IOException {
		sdb = new AmazonSimpleDBClient(new PropertiesCredentials(
				SimpleDBStore.class
						.getResourceAsStream("AwsCredentials.properties")));

	}

	@Override
	public int getSize() throws IOException {
		String selectExpression = "select * from `" + myDomain + "`";
		SelectRequest selectRequest = new SelectRequest(selectExpression);
		int count = 0;
		for (Item item : sdb.select(selectRequest).getItems()) {
			System.out.println("  Item");
			System.out.println("    Name: " + item.getName());
			for (Attribute attribute : item.getAttributes()) {
				System.out.println("      Attribute");
				System.out.println("        Name:  " + attribute.getName());
				System.out.println("        Value: " + attribute.getValue());
			}
			count++;
		}
		return count;
	}

	@Override
	public String[] keys() throws IOException {
		String selectExpression = "select * from `" + myDomain + "`";
		SelectRequest selectRequest = new SelectRequest(selectExpression);

		List<Item> items = sdb.select(selectRequest).getItems();
		List<String> keyNames = new ArrayList<String>();

		for (Item item : items) {
			keyNames.add(item.getName());
		}
		return (String[]) keyNames.toArray();
	}

	@Override
	public Session load(String id) throws ClassNotFoundException, IOException {
		System.out.println("load : " + id);

		GetAttributesResult result = sdb
				.getAttributes(new GetAttributesRequest().withDomainName(
						myDomain).withItemName(id));

		List<Attribute> list = result.getAttributes();

		StandardSession session = null;
		for (int i = 0; i < list.size(); i++) {
			Attribute attribute = list.get(i);
			if (attribute.getName().equals(mySession)) {
				String value = attribute.getValue();
				session = (StandardSession) fromString(value);
			}
		}

		System.out.println(session.toString());

		return session;
	}

	@Override
	public void remove(String id) throws IOException {
		System.out.println("remove : " + id);

		sdb.deleteAttributes(new DeleteAttributesRequest().withDomainName(
				myDomain).withItemName(id));
	}

	@Override
	public void clear() throws IOException {
		System.out.println("clear");
	}

	@Override
	public void save(Session session) throws IOException {
		System.out.println(session.toString());
		System.out.println("save");

		String id = session.getId();

		sdb.putAttributes(new PutAttributesRequest()
				.withDomainName(myDomain)
				.withItemName(id)
				.withAttributes(
						new ReplaceableAttribute(mySession,
								toString((StandardSession) session), true)));

		System.out.println(toString((StandardSession) session));
	}

	private Object fromString(String s) throws IOException,
			ClassNotFoundException {
		byte[] data = Base64Coder.decode(s);
		ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(
				data));
		Object o = ois.readObject();
		ois.close();
		return o;
	}

	private String toString(Serializable o) throws IOException {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		ObjectOutputStream oos = new ObjectOutputStream(baos);
		oos.writeObject(o);
		oos.close();
		return new String(Base64Coder.encode(baos.toByteArray()));
	}

}

[]AWS Elastic Beanstalk を使う その11

色々環境が揃ってきたので、Tomcat の Session Persistence を拡張しようと思った感じですw。

まずはじめに TomcatソースダウンロードしてEclipseインポートしてビルドに必要なライブラリを追加します。

次に参考にするStoreクラスのソースを見ます

FileStoreとJDBCStoreが参考になりますね。

んじゃ、これを参考に SimpleDBStoreを作りましょう。

FileStore と JDBCStore は StoreBase抽象クラス継承してStoreインタフェースを実装しています。同じようにクラス定義します。

雛形はこんな感じかな。

package jp.cm.aws.tomcat.session;

import java.io.IOException;

import org.apache.catalina.Session;
import org.apache.catalina.Store;
import org.apache.catalina.session.StandardSession;
import org.apache.catalina.session.StoreBase;

public class SimpleDBStore extends StoreBase implements Store{
	
	@Override
	public int getSize() throws IOException {
		return 1;
	}

	@Override
	public String[] keys() throws IOException {
		String[] ks = {"keykeykey"};
		return ks; 
	}

	@Override
	public Session load(String id) throws ClassNotFoundException, IOException {
		System.out.println("load");
		StandardSession session =
            (StandardSession) manager.createEmptySession();
		return session;
	}

	@Override
	public void remove(String id) throws IOException {
		System.out.println("remove");
	}

	@Override
	public void clear() throws IOException {
		System.out.println("clear");
	}

	@Override
	public void save(Session session) throws IOException {
		System.out.println("save");
	}

}

後はここにSessionの永続化と復元の処理を入れればOKのはず。

続きまして、上記の雛形がちゃんと動くか確認します。

アプリケーションフォルダの下にMETA-INFフォルダを作ってcontext.xmlを作ります。中身はこんな感じ。

<?xml version='1.0' encoding='utf-8'?>
<Context docBase="${catalina.home}/webapps/simpledb"
    path="/simpledb"
    reloadable="true"
    source="org.eclipse.jst.j2ee.server:test"
    backgroundProcessorDelay="1" >
  <Manager className="org.apache.catalina.session.PersistentManager"
      distributable="true"
      duplicates="0"
      saveOnRestart="true"
      maxActive="0"
      maxActiveSessions="0"
      minIdleSwap="0"
      maxIdleSwap="0"
      maxIdleBackup="0"
      maxInactiveInterval="0" 
      sessionCounter="0" >
      
     <Store className="jp.cm.aws.tomcat.session.SimpleDBStore"/> 
     
     <!--
    <Store className="org.apache.catalina.session.FileStore"
	 directory="${catalina.home}/logs/sessions" >
	</Store>
     -->
	
    <!--
    <Store className="org.apache.catalina.session.JDBCStore"
        checkInterval="1"
        connectionURL="jdbc:mysql://mydb.csnpjudtgu1o.us-east-1.rds.amazonaws.com:3306/awstest"
        driverName="com.mysql.jdbc.Driver"
        sessionAppCol="app_name"
        sessionDataCol="session_data"
        sessionIdCol="session_id"
        sessionLastAccessedCol="last_access"
        sessionMaxInactiveCol="max_inactive"
        sessionTable="tomcat_sessions"
        sessionValidCol="valid_session" />
    -->
  </Manager>
</Context>

このままだとSimpleDBStoreクラスが見つからないと怒られるので、

TOMCAT_HOME/libにクラスコピーして置きますjar化してもOK。

さて、無事にSession Persistenceをしてくれるカスタムクラス作成に成功しました〜。

ちゃんと動いているか確認してみましょう。

このアプリにひとつjspを作って以下のようにセッションに書き込みをしてみます

session.setAttribute("key1","value1");

このjspブラウザから叩くと、以下のようにTomcatログが出ました!!

2011/01/23 22:27:44 org.apache.catalina.session.PersistentManagerBase swapIn

あとは、SimpleDBにセッション情報を書き込む処理だけですね。

これは、AWS SDK for Javaダウンロードしてlibにjarを追加してごにょごにょすればすぐにできるはず。

今日はここまで。

[]AWS Elastic Beanstalk を使う その10

では続きまして Beanstalk で PHP を動かしましょう。

これもwarblerと同じようにphpアプリをwar化して配備します。

RubyJavaプラットフォーム上で動かすためにJRubyを用いましたが、

今度は、PHPJavaプラットフォーム上で動かすためにQuercusを用います

Quercusサイトリンクからwarファイルダウンロードして展開します。

いつもの hello.php記述しましょう。

<?php
  phpinfo();
?>

この結果が以下です。

f:id:sato-shi:20110123201131p:image

そして、Beanstalkに載せました。

f:id:sato-shi:20110123203336p:image


Quercus

http://quercus.caucho.com/

[]AWS Elastic Beanstalk を使う その9

TomcatRails動きました。

jruby-rack.jarバージョンが問題だったみたい。

1.0.5 から 1.0.3 に下げたらうまくいけました。

これでrailsアプリからTomcat用のwarファイル生成OKですー。


>gem uninstall jruby-rack
>gem install jruby-rack -v 1.0.3
>sudo warble config
>sudo warble

アドレス部分をご覧ください。

f:id:sato-shi:20110123181421p:image

しかーし、生成されたwarファイルが大きすぎてアップロードできないし。。

って、Management Console から Upload New Version って指定したら怒られたのに、Environment の Action から Deploy a Different Version ってやったらアップロードできた!

そして、Beanstalk で Ruby on Rails の動作環境が整いました〜。

f:id:sato-shi:20110123184617p:image

オレオレHerokuだねー。

2011-01-22

[]AWS Elastic Beanstalk を使う その8

Beanstalkでどうやったらセッションレプリケーションしようかって悩んで調べていたんですがカンタンなやり方が分かりました。Tomcatの基本を知らないオイラが馬鹿だったw。

rootで入ってserver.xmlを設定する必要なかったんですw。

配備するアプリケーション(後でwar化するやつ)にMETA-INFフォルダを作って、

context.xml記述すれば反映されることが分かりました。

Beanstalkがどうのこうのではなく、ただのTomcatに配備するアプリ側の設定だけでいけるんですね。

ということは、Beanstalkに配備するアプリの設定だけで、ファイルオーバー対応するためのセッションレプリケーション指定(JDBCStore)できるわけですね。

もー、Beanstalk最強じゃんw。

Tomcat 6 Session Persistence through JDBCStore

http://www.intelligrape.com/blog/2010/07/21/tomcat-6-session-persistence-through-jdbcstore/

Tomcatでフェイルオーバー

http://syo.cocolog-nifty.com/freely/2007/05/tomcat.html

Tomcat 5.5 で session persistence (using JDBCStore)

http://d.hatena.ne.jp/stdcall/20070102/1167688088

[]AWS Elastic Beanstalk を使う その7

Tomcat管理するための設定と等々がされているBeanstalk用のAMIの中身を探っています

そこで驚愕の事実が!?(大げさかも)

なんと、Tomcat管理するBeanstalkの肝といえる部分(Host Managerっていうのかな)がRuby1.9.1で書かれています。設定ファイルYaml記述されている。他データはSqlite3に保存されているみたい。

Tomcatの死活監視にはbluepillっていうツールが使われているみたい。

ここらへんも勉強になるなぁ。

いいものはどんどん取り入れると。

bluepill

https://github.com/arya/bluepill

[]AWS Elastic Beanstalk を使う その6

Beanstalkでインスタンス立ち上げると、次に思うのがTomcatバージョン上げたり、server.xml編集したりいろいろやりたい!ってはず!?

ということで、方法が無いか調べたらあっさり分かりました。

まず、普通にBeanstalkでEnvironmentを作ります

次にEC2タブのKey Pairsで事前に鍵を用意します。keysample

.pemとかね。

Environmentのコンフィグ画面から先ほど作ったKey Pairを指定します。

これで、普通EC2インスタンスとしてSSHログインできるようになります

こんな感じで入れましたよー。

       __|  __|_  )  Amazon Linux AMI
       _|  (     /     Beta
      ___|\___|___|

ちなみにログインIDは、ec2-user です。rootじゃ入れません。

rootコマンドはsudoでどうぞー。

sudo su -

ログインすれば普通Linuxですからserver.xmlを修正するとかして、DataSourceの設定とか、セキュリティロールの設定なんかをすればいい。

これで念願のSession Clusteringが実現できるのでは!?と。

基本的にはスティッキーセッションロードバランシングで処理先を固定にしておいて、万が一インスタンスが落ちた際には、他のインスタンスセッション内容を引き継ぐと。

MySQLをHttpSessionの永続化先にしておけば、オートスケール、ロードバランサー、フェイルオーバー対応したお気楽クラウド生活が!!

各種設定とか必要なアプリインストールが終わったらログアウトして、

オリジナルAMI作成します。Custom AMI ですね。

最後にBeanstalkのEnvironmentコンフィグ画面で先ほど作成したCustom AMI IDを指定しましょう。

最初からオリジナルAMIを使いたいって人もいると思うんですが、AWSとしてはAmazon AMIにはTomcat再起動や、WARファイルの配備、ログの取得など裏で色々やっているので、Beanstalkで使うにはAmazon AMIからコピーしてほしいってさ。

f:id:sato-shi:20110122194649p:image



Editing server.xml, logging in as root

https://forums.aws.amazon.com/thread.jspa?threadID=58723&tstart=0

JVM/Tomcat config questions

https://forums.aws.amazon.com/thread.jspa?threadID=58744&tstart=0

2011-01-21

[]AWS Elastic Beanstalk を使う その5

Ruby on Rails を Beanstalk で動かしてみましょう。

まずはじめにgem環境を整えます

>gem update
>gem update --system
>gem install rails --version '<3'
>gem install warbler
>gem install jruby-openssl
>gem install rake
>gem install activerecord-jdbcmysql-adapter
>gem install jruby
>gem install jruby-rack

railsローカルで動かしてみましょう。

>rails -v
Rails 2.3.10
>ruby -v
ruby 1.8.7
>rails railssample
>cd railssample
>ruby script/generate scaffold person name:string age:integer
>rake db:migrate
>ruby script/server

ブラウザRailsデフォ画面を表示します。

f:id:sato-shi:20110121130707p:image

次にrailsからwarファイルを吐き出すwarblerの手続きです。これいいね。

さっそく

>warble config
>warble war

で完成するはずですが、コケる。。。。只今調査中。。



gemsからRailsインストール

http://takeoba.com/index.php?gems%A4%AB%A4%E9%A4%CERails%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB

Warblerでwarファイルを作る

http://rubyist.g.hatena.ne.jp/muscovyduck/20090205/p1

JRuby on Rails on Amazon Elastic Beanstalk

http://blog.headius.com/2011/01/jruby-on-rails-on-amazon-elastic.html

[]AWS Elastic Beanstalk を使う その4

Beanstalk の System.getProperties()で取得できるキーと値一覧

KEY : java.runtime.name VALUE : OpenJDK Runtime Environment
KEY : AWS_ACCESS_KEY_ID VALUE :
KEY : sun.boot.library.path VALUE : /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/i386
KEY : java.vm.version VALUE : 19.0-b06
KEY : shared.loader VALUE :
KEY : java.vm.vendor VALUE : Sun Microsystems Inc.
KEY : java.vendor.url VALUE : http://java.sun.com/
KEY : AWS_SECRET_KEY VALUE :
KEY : path.separator VALUE : :
KEY : tomcat.util.buf.StringCache.byte.enabled VALUE : true
KEY : java.util.logging.config.file VALUE : /usr/share/tomcat6/conf/logging.properties
KEY : java.vm.name VALUE : OpenJDK Client VM
KEY : file.encoding.pkg VALUE : sun.io
KEY : sun.java.launcher VALUE : SUN_STANDARD
KEY : user.country VALUE : US
KEY : sun.os.patch.level VALUE : unknown
KEY : java.vm.specification.name VALUE : Java Virtual Machine Specification
KEY : user.dir VALUE : /usr/share/tomcat6
KEY : java.runtime.version VALUE : 1.6.0_20-b20
KEY : java.awt.graphicsenv VALUE : sun.awt.X11GraphicsEnvironment
KEY : java.endorsed.dirs VALUE :
KEY : os.arch VALUE : i386
KEY : java.io.tmpdir VALUE : /var/cache/tomcat6/temp
KEY : line.separator VALUE :
KEY : java.vm.specification.vendor VALUE : Sun Microsystems Inc.
KEY : java.naming.factory.url.pkgs VALUE : org.apache.naming
KEY : java.util.logging.manager VALUE : org.apache.juli.ClassLoaderLogManager
KEY : os.name VALUE : Linux
KEY : sun.jnu.encoding VALUE : UTF-8
KEY : java.library.path VALUE : /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/i386/client:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/i386:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/../lib/i386:/usr/java/packages/lib/i386:/lib:/usr/lib
KEY : java.specification.name VALUE : Java Platform API Specification
KEY : java.class.version VALUE : 50.0
KEY : sun.management.compiler VALUE : HotSpot Client Compiler
KEY : os.version VALUE : 2.6.34.7-56.40.amzn1.i686
KEY : user.home VALUE : /usr/share/tomcat6
KEY : catalina.useNaming VALUE : true
KEY : user.timezone VALUE : Universal
KEY : java.awt.printerjob VALUE : sun.print.PSPrinterJob
KEY : file.encoding VALUE : UTF-8
KEY : java.specification.version VALUE : 1.6
KEY : catalina.home VALUE : /usr/share/tomcat6
KEY : JDBC_CONNECTION_STRING VALUE :
KEY : java.class.path VALUE : :/usr/share/tomcat6/bin/bootstrap.jar:/usr/share/tomcat6/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar
KEY : user.name VALUE : tomcat
KEY : java.naming.factory.initial VALUE : org.apache.naming.java.javaURLContextFactory
KEY : package.definition VALUE : sun.,java.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.
KEY : java.vm.specification.version VALUE : 1.0
KEY : java.home VALUE : /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre
KEY : sun.arch.data.model VALUE : 32
KEY : user.language VALUE : en
KEY : java.specification.vendor VALUE : Sun Microsystems Inc.
KEY : java.vm.info VALUE : mixed mode
KEY : java.version VALUE : 1.6.0_20
KEY : java.ext.dirs VALUE : /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/ext:/usr/java/packages/lib/ext
KEY : sun.boot.class.path VALUE : /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/resources.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/rt.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/sunrsasign.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/jsse.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/jce.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/charsets.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/netx.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/plugin.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/rhino.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/modules/jdk.boot.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/classes
KEY : server.loader VALUE :
KEY : java.vendor VALUE : Sun Microsystems Inc.
KEY : catalina.base VALUE : /usr/share/tomcat6
KEY : file.separator VALUE : /
KEY : java.vendor.url.bug VALUE : http://java.sun.com/cgi-bin/bugreport.cgi
KEY : common.loader VALUE : ${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar
KEY : sun.io.unicode.encoding VALUE : UnicodeLittle
KEY : sun.cpu.endian VALUE : little
KEY : PARAM5 VALUE :
KEY : package.access VALUE : sun.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.,sun.beans.
KEY : PARAM4 VALUE :
KEY : PARAM3 VALUE :
KEY : PARAM2 VALUE :
KEY : PARAM1 VALUE :
KEY : sun.cpu.isalist VALUE :

[]ActionScript API for AWS (Amazon Web Services)

出す出すと言ってだいぶ時間が経ってしまいましたが、、、

GitHubにアップしました。

ActionScript からカンタンAWSアクセスするためのAPI群です。

とりあえずswcが必要な方はこちらへ

[cmawslib.swc](https://github.com/satoshi7/ActionScript-API-for-AWS-Amazon-Web-Services-/blob/master/bin/cmawslib.swc)

Amazon Web Services Query API提供しているものはほぼ全ての操作対応しています

      • RDS - Amazon Relational Database Service
      • SQS - Amazon Simple Queue Service
      • IAM - AWS Identity and Access Management
    • 使い方

コードAdobe Flex Library Project で作っています

ご使用の際には Adobe Flash Builder などでプロジェクトインポートを行い、

アプリケーション側の設定画面からライブラリ追加をしてご利用ください。

    • 開発の仕方

以下のように短いコードを書いて頂ければカンタンAWS操作できます


      • Amazon Elastic Compute Cloud
	var ec2:EC2 = new EC2();
	ec2.setAWSCredentials(AWSKey.key,AWSKey.sec);
	ec2.addEventListener(AWSEvent.RESULT,awsHandler);
	ec2.executeRequest(EC2.DESCRIVE_REGIONS);
	var emr:EMR = new EMR();
	emr.setAWSCredentials(AWSKey.key,AWSKey.sec);
	emr.addEventListener(AWSEvent.RESULT,awsHandler);
	emr.executeRequest(EMR.DESCRIBE_JOB_FLOWS);
      • Amazon Relational Database Service
	var rds:RDS = new RDS();
	rds.setAWSCredentials(AWSKey.key,AWSKey.sec);
	rds.addEventListener(AWSEvent.RESULT,awsHandler);
	rds.executeRequest(RDS.DESCRIBE_DB_INSTANCES);
      • Amazon Simple Notification Service
	var sns:SNS = new SNS();
	sns.setAWSCredentials(AWSKey.key,AWSKey.sec);
	sns.addEventListener(AWSEvent.RESULT,awsHandler);
	sns.executeRequest(SNS.LIST_TOPICS);

	var sdb:SDB = new SDB();
	sdb.setAWSCredentials(AWSKey.key,AWSKey.sec);
	sdb.addEventListener(AWSEvent.RESULT,awsHandler);
	sdb.executeRequest(SDB.LIST_DOMAINS);
	var sqs:SQS = new SQS();
	sqs.setAWSCredentials(AWSKey.key,AWSKey.sec);
	sqs.addEventListener(AWSEvent.RESULT,awsHandler);
	sqs.executeRequest(SQS.LIST_QUEUES);
	var acw:ACW = new ACW();
	acw.setAWSCredentials(AWSKey.key,AWSKey.sec);
	acw.addEventListener(AWSEvent.RESULT,awsHandler);
	acw.executeRequest(ACW.LIST_METRICS);

      • AWS Identity and Access Management
	var iam:IAM = new IAM();
	iam.setAWSCredentials(AWSKey.key,AWSKey.sec);
	iam.addEventListener(AWSEvent.RESULT,awsHandler);
	iam.executeRequest(IAM.LIST_ACCESS_KEYS);
      • AWS Elastic Beanstalk
	var ebt:EBT = new EBT();
	ebt.setAWSCredentials(AWSKey.key,AWSKey.sec);
	ebt.addEventListener(AWSEvent.RESULT,awsHandler);
	ebt.executeRequest(EBT.DESCRIBE_APPLICATIONS);
	public function awsHandler(event:AWSEvent):void{
		var data:Object = event.data;
		//XML形式のテキストが取得されます。
		ta.text += data.toString();
	}
    • 注意

ライブラリを使うには、AWS契約を行って頂き、発行される Access Key ID と Secret Access Key を使用します。

事前にご準備ください。

[@sato_shi](http://twitter.com/sato_shi/) - Classmethod,Inc. http://classmethod.jp/(http://classmethod.jp/)]


ActionScript API for AWS (Amazon Web Services)

https://github.com/satoshi7/ActionScript-API-for-AWS-Amazon-Web-Services-

2011-01-20 AWS Elastic Beanstalk を使ってみる

[]AWS Elastic Beanstalk を使う その3

Environmentのコンフィグ画面のContainerタブで、Environment Properties ってなんやねんっ!って思って調べました。結論から言いますシステムプロパティを設定しているだけでした。

要は、DB接続先とかAWS接続先とか各種環境変数をBeanStalkのEnvironment Propertiesとして書いておけば、テストアプリ、本番用アプリテストDB、本番用DBなどの切り替えをソースの修正なしに画面のみで行える訳です。

実際にやってみましょう。これが設定した画面。文字列適当

勝手DB接続してコネクションプールしてくれるとかは幻想でしたw。

f:id:sato-shi:20110120213948p:image

んで、今度はBeanStalkに載せるアプリ側で値を取得してみましょう。

雛形アプリソースを修正しました。

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="java.util.*" %>

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <title>Hello AWS Web World!</title>
    <link rel="stylesheet" href="styles/styles.css" type="text/css" media="screen">
</head>
<body>
  <div id="content" class="container">
    <div class="section grid grid15 gridlast ec2">
      <h2>System Properties:</h2>
      <ul>
    <% Properties props = System.getProperties(); %>
    <li><%= "AWS_ACCESS_KEY_ID : " + props.getProperty("AWS_ACCESS_KEY_ID") %></li>
    <li><%= "AWS_SECRET_KEY : " + props.getProperty("AWS_SECRET_KEY") %></li>
    <li><%= "JDBC_CONNECTION_STRING : " + props.getProperty("JDBC_CONNECTION_STRING") %></li>
    <li><%= "PARAM1 : " + props.getProperty("PARAM1") %></li>
    <li><%= "PARAM2 : " + props.getProperty("PARAM2") %></li>
    <li><%= "PARAM3 : " + props.getProperty("PARAM3") %></li>
    <li><%= "PARAM4 : " + props.getProperty("PARAM4") %></li>
    <li><%= "PARAM5 : " + props.getProperty("PARAM5") %></li>
			</ul>
        </div>
    </div>

</body>
</html>

実行結果はこれ。確かに値が取れていますね。

f:id:sato-shi:20110120221036p:image

どうやって値を取るかどこにも載っていなかったのですが、

勘でどうにかなりました。。。これドキュメント載せるべきかと。

ではではー。

[]AWS Elastic Beanstalk を使う その2

続きましてオリジナルアプリEclipseからアップするテスト

Classic Eclipseプラグイン入れて動かそうと思ったけど、

動きが微妙なので、素直にWeb Tools Platform All in Oneダウンロード

んで、

AWS Toolkit for Eclipseダウンロードぉ〜。

Eclipse 3.6 をインストールしてUpdateSiteの指定

f:id:sato-shi:20110120115025p:image

アップデート完了して初期画面

f:id:sato-shi:20110120122510p:image

AWSAccess Key と Secret Key を入力します。

f:id:sato-shi:20110120123322p:image

プロジェクトの新規作成から AWS Java Web Projectを選択

f:id:sato-shi:20110120153208p:image

雛形プロジェクトを選択することもできる。

Basic Java Web ApplicationシンプルJSPアプリで、

Travel LogはS3,SimpleDB,SNSを使っているみたい。

f:id:sato-shi:20110120153559p:image

Run on Server で ローカルWebアプリをBeanstalkにデプロイ

f:id:sato-shi:20110120153744p:image


そしてブラウザから動作確認。完了。はえー。

f:id:sato-shi:20110120153003p:image

[]AWS Elastic Beanstalk を使う その1

最初に身元確認の電話w。

AWS Management Console にタブが増えている〜。

f:id:sato-shi:20110120105905p:image

んで、これは何でしょうw

f:id:sato-shi:20110120111860p:image

何が起きたかわからんカンタンすぎるよ!!

と、EC2タブを開いてみる。インスタンス起動しているし〜。

どんだけーーー。

良心的にmicroインスタンスとなっております

f:id:sato-shi:20110120112304p:image

んじゃ、環境を変更してみよう。

f:id:sato-shi:20110120112532p:image

ロードバランサのスティッキーセッションデフォルトでOFFのようなのでONに設定

f:id:sato-shi:20110120112651p:image

オートスケーリングデフォルトでMax4になっているので1に設定w。

f:id:sato-shi:20110120112904p:image

重要イベント発生時にAmazon SNS を使ってメール通知を設定

f:id:sato-shi:20110120112937p:image

JVMログ吐き出し先をAmazon S3 に設定とかすてきすぎる。

f:id:sato-shi:20110120113105p:image

JDBC接続先のURL設定〜。これはTomcatのDataSource設定かなぁ。

Amazon RDSとかMySQLとかOracleURL設定すればいいみたい。f:id:sato-shi:20110120113253p:image

んじゃ何かアプリデプロイしてみますか。

Create New Applicationを選択

f:id:sato-shi:20110120125624p:image

サブドメインの設定ができるのね。

ここで合わせてwarファイルアップロードできます

とりあえずAdobe BlazeDSのsamples.warをアップしてみる。

はい。完成!

f:id:sato-shi:20110120125750p:image

さっそくURLアクセス

http://classmethod.elasticbeanstalk.com/

(そのうち消えるURLですw)

さくっとBlazeDS表示されましたねw

f:id:sato-shi:20110120125847p:image

管理画面みて何となく分かったのですが、

1つのEnvironmentの中に複数のApplicationを置くような感じですかね?

いや、玉川さんのブログを見ると、1つのApplicationの中に複数のEnvironmentがあるんですねぇ。

Applicationごとにサブドメイン設定されたURLが割り当てられています

f:id:sato-shi:20110120131400p:image

Applicationを削除すると、EC2管理コンソールでインスタンスが消えますので、1Applicationで最低1インスタンスってのがよくわかります

2010-12-22

AWS SDKs for ActionScript 0.1

まぁ名前はかっこ良いですが中身はまだまだですw。

ActionScriptクラウド操作できます

サーバー不要ですってのがポイント

もちろん、AIR for Androidで動きます

何も考えずに気軽に使えるのがいいかなってことで短いソースごにょごにょできますwww

var ec2:EC2 = new EC2();
ec2.setAWSCredentials(AWSKey.key,AWSKey.sec);
ec2.addEventListener(AWSEvent.RESULT,awsHandler);
ec2.executeRequest(EC2.DESCRIVE_REGIONS);

EC2,EMR,RDS,SNS,SimpleDB,CloudWatch,IAM,SQSあたりのAPIほぼ全てにアクセスできます


さて、次はユーザーインタフェースか。。。


次はgithubに上げるか。

2010-12-20

FMS on AWS

リモートログインするとテキストアートが出てきます



       ___     _       _     
      /   |   | |     | |      
     / /| | __| | ___ | |__   ___
    / /_| |/ _  |/ _ \|  _ \ / _ \
   / ___  | (_| | (_) | |_) |  __/
  /_/   |_|\__,_|\___/|____/ \___|
  Revolutionize Interactive Media Experiences
  
  Adobe Systems Incorporated
  Adobe Flash Media Server on Amazon Web Services
  Version: 4.0.1.8011             AMI Version: r1

  Product Information: http://www.adobe.com/go/fmsaws
  Support Forums: http://forums.adobe.com/community/flash/flash_media_server
  Paid Product Support: http://www.adobe.com/support/flashmediaserver/

2010-12-13

GalaxyTab & AIR for Android 勉強会

12月21日に飯田橋で勉強会します。

RETWEETで話しきれなかった部分とか、

デモアプリの解説とか、

ドコモさんに質問しまくったりとか、

まったりと勉強会しようとおもっています

よろしければどうぞー。

GalaxyTab/Sで始める、AIR for Androidアプリ開発勉強会

http://kokucheese.com/event/index/6407/

自宅にGoogleTVが来た

自宅にGoogleTVが来ました。

たくさん写真撮ったので載せますね。

某米国の住所に送られてきたGoogleTVを日本に送り直しました。

箱を開けると本体とキーボードHDMIケーブル。

なるほど、テレビとDVDプレイヤーの間にGoogleTVを挟んでHDMI接続ってことね。奇跡的にすんなりつながりました。米国ではさらにセットトップボックスが間に入りそうです。

起動したらロゴがでた!

f:id:sato-shi:20101214001016j:image

WiFi繋げてシステムアップデート

f:id:sato-shi:20101214001014j:image

更新中。。。

f:id:sato-shi:20101214001015j:image

ハイビジョンテレビ映った!キレイ!!

f:id:sato-shi:20101214001017j:image

さらにアップデート

f:id:sato-shi:20101212001745j:image

おーメニューでたー。

f:id:sato-shi:20101214001018j:image

初のテレビツイッター

f:id:sato-shi:20101214001019j:image

ファッション番組もあります

f:id:sato-shi:20101214001020j:image

そのまま通販ページへ

f:id:sato-shi:20101214001021j:image

映像みながら関連商品見れます

f:id:sato-shi:20101214001022j:image

ニュースも見れます

f:id:sato-shi:20101214001023j:image

Youtubeをだらだら見れます

f:id:sato-shi:20101214001024j:image

株価情報

f:id:sato-shi:20101214001026j:image

普通ホームページ

f:id:sato-shi:20101214001027j:image

テレビ見ながら検索

f:id:sato-shi:20101214001025j:image

amazonで映画購入

f:id:sato-shi:20101214001029j:image

NBA試合結果

f:id:sato-shi:20101214001028j:image

右下でテレビ観ながらメニュー使う

f:id:sato-shi:20101214001030j:image

テレビ観ながらヤフー

f:id:sato-shi:20101214001031j:image

動画検索

f:id:sato-shi:20101214001032j:image

トロン観ながら1,2,3,4

f:id:sato-shi:20101214001033j:image

geso と検索

f:id:sato-shi:20101214001034j:image

ゲソを視聴

f:id:sato-shi:20101214001035j:image

テレビ観ながら気になったキーワード検索

f:id:sato-shi:20101214001036j:image

Googleさんは国民全員にタダで配ろうとしているんじゃないかなぁ。

パソコン不要になりますよ!!!

GoogleTV と Androidケータイ で生活できちゃいます

パソコン詳しい必要全くありません。

そんな未来がすぐ近く。。。。

2010-11-28

[]Adobe MAX 2010 RETWEET 発表資料

皆様多くの方のご参加ありがとうございました。

遅くなりましたが資料をアップいたしました。


何ができるの?

AIR for Desktop
AIR for Android

どうやって作るの?

Flex SDK 4.5 Hero
Adobe AIR Launchpad

実用的なものを作るには?

カスタムURLスキーム for iOS
暗黙的インテント for Android

サーバー連携?

BlazeDS
Spring framework
Spring BlazeDS and Spring ActionScript

サーバ連携についてはほとんどお話できませんでしたので(汗、

改めて何かの機会にご紹介させていただきますw。


Flex 4.5 (Hero)による モバイルアプリケーション開発と サーバ連携

http://fxug.net/archives/retweet/RETWEET_Share.pdf

2010-10-28

[]AIR for Android with Flex 4.5

さてさて、そろそろブログ更新を再開します。

MAXの熱をそのままにGetting Start!


簡単なアプリを作りながらAndroidアプリ開発を学びます。

レッスン1:Flex 4.5 を使った画面遷移。

ルートとなるMXMLを用意します。

<?xml version="1.0" encoding="utf-8"?>
<s:MobileApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
	xmlns:s="library://ns.adobe.com/flex/spark" 
	firstView="views.FIrstView">
</s:MobileApplication>

中身は何も記述していません。ポイントはfirstViewの指定です。これは、ナビゲーションベースUIを実現していて、最初に表示するページを指定します。

FirstView.mxmlを見てみます。


<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
		xmlns:s="library://ns.adobe.com/flex/spark" title="ホーム">
	<s:Button label="go to SecondView" click="{navigator.pushView(views.SecondView)}" width="100%" />
</s:View>

ボタンクリックした際に次のページへ遷移する記述をしています。navigator.pushViewというところがポイントです。

SecondView.mxmlを見てみます。


<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
		xmlns:s="library://ns.adobe.com/flex/spark" title="次のページ">
	<s:Button label="go to FirstView" click="{navigator.popView()}" width="100%"/>
</s:View>

一方、次のページでは、ボタンクリックした際に前のページに戻っています。navigator.popViewというところがポイントです。

これで簡単なAndroidアプリができました。約2分ですw。

実行結果を見てみましょう。

f:id:sato-shi:20101029003742p:image

続いて、ウィンドウを横にしてみます。

f:id:sato-shi:20101029003854p:image

ボタンクリックすると、行ったり来たりページが遷移します。

[]Adobe MAX 2010 RETWEET

MAX参加者による報告イベントです〜。

私の担当は、AIR for Android 上で動作する Flex SDK 4.5 (Hero)について、Flash Builder を用いながら何が実現できるのかどのように作るのか解説をします。


Adobe MAX 2010 RETWEET

Adobe Flash Platform 最新情報 from MAX

開催日時 2010年11月25日(木)13:00〜17:40

開催場所 ベルサール汐留

定員 400〜500名

主催 アドビ システムズ 株式会社

講演・協賛 株式会社NTTドコモ

申し込み方法 下記リンクの[申し込み]ボタンクリックして、申し込みページへお進み下さい。


Adobe MAX 2010 Follow Up」

アドビ システムズ Andy Hall、轟啓介

Android携帯の取り組み」

株式会社NTTドコモ 山下哲也氏

Flash Player 3D / InMarket / AIR 2.5 (mobile + TV) / Roadmaps / XD / Sneak Peeks Demo : Amepigg Android


「次期Flexフレームワーク”Hero”:Sparkコンポーネント

taiga.jp

廣畑大雅氏


スマートフォンアプリ開発とフレームワークの活用」

clockmaker.jp

池田泰延氏


「進化するデザイン/開発ワークフロー : Flash Builder “Burrito” + Flash Catalyst “Panini”」

AKABANA

有川榮一氏


Flash Player レンダリング

cuaoar

上条彰宏氏


スマートフォンアプリ開発 with “Hero”」

クラスメソッド株式会社

横田聡氏


AIR for Androidアプリ開発」

株式会社サイバーエージェント

浦野大輔氏/切通伸人氏



参加無料! Adobe MAX 2010 RETWEETAdobe Flash Platform 最新情報 from MAX

http://www.adobe.com/jp/joc/max/retweet/

2010-10-25

[]Adobe MAX 受講予定 一覧

今日からMAXです。私の受講一覧を載せます。

f:id:sato-shi:20101024122312j:image

Monday, October 25, 2010

9:30 am - 11:30 am General Session: Welcome to the Revolution Nokia Theatre, L.A. Live

2:00 pm - 3:00 pm Developing Adobe AIR apps for the BlackBerry® Tablet OS

3:30 pm - 4:30 pm Advanced ActionScript with Apparat

5:00 pm - 6:00 pm Using Flash Catalyst CS5 to Design Rich User Experiences

8:00 pm - 10:00 pm Meet the Teams Los Angeles Convention Center

Tuesday, October 26, 2010

8:30 am - 9:30 am Developer Tips for Building Great Games using AIR for Android

10:00 am - 12:00 pm General Session: User Experience: The Next Generation Nokia Theatre, L.A. Live

1:30 pm - 2:30 pm Designing PDF Portfolio Layouts with Flash Builder 4

3:00 pm - 4:00 pm Building Language Learning Tools with Flash Catalyst, Flash Builder,

and Flash Media Server

4:30 pm - 5:30 pm New LiveCycle Data Services Support for HTML5/JavaScript,

Android, Apple iOS, Java, and .NET

6:00 pm - 8:00 pm Sneak Peeks Nokia Theatre, L.A. Live

Wednesday, October 27, 2010

8:00 am - 9:00 am Deep Dive into Mobile Development with the Flex SDK

9:30 am - 10:30 am Building Enterprise Adobe AIR Applications for Android

11:00 am - 12:00 pm Rapidly Building Flex RIAs with Spring BlazeDS Integration and

Spring Roo

1:30 pm - 2:30 pm Multiscreen Development Techniques with Flex and Adobe AIR

3:30 pm - 4:30 pm Having Fun with Layouts in Flex 4

5:00 pm - 6:00 pm Google + Flash Platform = Awesome

Locations are tentative and may change. Please check your schedule the week of October 18 for confirmed room locations.


この他にコミュニティブースに顔出したり、Japanセッションに参加したりと盛りだくさんです。。。


そして、落書きしてきました。


f:id:sato-shi:20101024123751j:image