2011年7月17日日曜日

Android Bazaar and Conference 2011 Summerに行ってきました。

なんか最近色んなイベントに参加しているなぁ〜と思いつつ、
Android Bazaar and Conference 2011 Summer
に参加してきました。

実際android開発をがっつりやっている訳ではないので、ちょろっとでいいかなぁ〜という思い&HW関連で面白そうなものはないかな?というザッピングレベルで行きました。


・基調講演
 丸山不二夫
  Androidの会会長のお話。初めて話しを聞く人でした。3/11について&情報のオープン化についての話でしたが、興味的にはあまりなく&発表の仕方が微妙な感じ。あまり息継ぎない発表だったので、話を聞き流す感じだった。

 谷脇 康彦
  パワポの文字が小さいってハッシュタグへの突っ込みがひどかったが、発表が丸山さんの後だったので、ちゃんとした発表に見えたw 停電と電話不通件数などのグラフの比較。文字さえ見えれば非常にわかりやすく、興味のある内容でした。

・「Android is NOT just 'Java on Linux'」
 ブートシーケンスについて、initは指定する必要がある。
 基本的にandroidはstaticLinkで動く。マウントなどに動作が影響しないため。
 BSDベースの標準ライブラリ(Bionic)
 zygote:Linuxでいうforkの仕組みだが、少し異なる。
 
・「Linuxカーネルから紐解くAndroid」
 AndroidのカーネルとUbuntuのカーネルの違いについての説明。
 使用用途の違いにより、動作の違いについての説明。
 sandboxは同一アプリを複数プロセスで立ち上げるときに使う。
 IPCとintentの違いについて
 OOMについての説明。ubuntuでは優先度だが、androidはinitdに記述されている優先度でkillされるということ。

・「AndroidプログラマのためのARM概論。でも少しIntelの話も!」
 ARMについて。型番によるInstructionの違いなどについての説明。
 ARM特化したLinuxのLinaroについての説明。Graphics関連のInstructionのNEON
 気になったのはARMのAシリーズが2つ、Mシリーズが2つあるチップが開発されているということ。なんのためのチップなのかが不明とのこと。非常に興味あり。

・作って学ぶ!OpenGLはじめの一歩
 OpenGLを使ったプログラミング方法について、発表者が学生なんで、若いw 。
OpenGLの使い方を実際に実装して、確認してみよう!って意味の発表だったんで、まぁこうやるんだろうなぁ〜と懐かしく見ていました。

・Androidアプリデザイン入門編
 Androidのデザインについて、Androidの画像でNine Patchについての話がメイン。画像を拡大するときに画像が変にならないようにするポイントなどを発表していました。Nine Patchという言葉を初めて聞いたので、今後なんかに役立つかなぁw


完全にlowlevelな話ばかり聞いていたが、まだまだ知らないことだらけだなぁとおもいました。
ARMは今いる会社に関係性が強いので、非常に関わってみたいなぁと思う。というか日本でメジャーじゃないって
あたりがいいw

こういう色んな人の話を聞くとモチベーションがあがりますねぇ〜。
やる気が出てよい。

2011年7月16日土曜日

Xpandを試してみる

EMFベースのTemplateエンジンの勉強もしておこうかなぁということで、
Xpandについて勉強しようと思います。

以下簡単なサンプル作成手順を示します。

Xpandプロジェクトの作成




EMFメタモデルを利用する。



テンプレートを作成する。



metamodelとモデルを作成


 private void generate(BuildSpecification buildSpec, Object monitor)
   throws CoreException {

  // get project root folder as absolute file system path
  IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
  IResource resource = root.findMember(new Path(buildSpec.getProject()
    .getName()));
  String containerName = resource.getLocation().toPortableString();

  // configure outlets
  OutputImpl output = new OutputImpl();
  Outlet outlet = new Outlet(containerName);
  outlet.setOverwrite(true);
  output.addOutlet(outlet);

  // create execution context

  Map globalVarsMap = new HashMap();
  XpandExecutionContextImpl execCtx = new XpandExecutionContextImpl(
    output, null, globalVarsMap, null, null);

  EmfRegistryMetaModel metamodel = new EmfRegistryMetaModel() {
   @Override
   protected EPackage[] allPackages() {
    return new EPackage[] { BuildspecificationPackage.eINSTANCE,
      EcorePackage.eINSTANCE };
   }
  };
  execCtx.registerMetaModel(metamodel);

  // generate
  XpandFacade facade = XpandFacade.create(execCtx);
  String templatePath = "template::Sample::main";
  // String templatePath = "template::BuildTemplate::main";
  facade.evaluate(templatePath, buildSpec);

  resource.refreshLocal(IResource.DEPTH_INFINITE, null);
 }

 private BuildSpecification createModel(Object project, String srcDirName,
   String binDirName) {
  BuildSpecification buildSpecification = BuildspecificationFactory.eINSTANCE
    .createBuildSpecification();
  Project projectSpecification = BuildspecificationFactory.eINSTANCE
    .createProject();
  projectSpecification.setName("test");
  projectSpecification.setBinaryFolder(binDirName);
  projectSpecification.setSourceFolder(srcDirName);

  buildSpecification.setProject(projectSpecification);
  return buildSpecification;
 }


テンプレートの中身
«IMPORT buildspecification»

«EXTENSION template::GeneratorExtensions»

«DEFINE main FOR BuildSpecification»
 «EXPAND project FOR this.project»
«ENDDEFINE»

«DEFINE project FOR Project»
«FILE "hogebuild.xml"-»


 
 sampleです。
 

 «EXPAND compileTarget FOR this»
 «EXPAND jarTarget FOR this»


«ENDFILE»
«ENDDEFINE»

«DEFINE compileTarget FOR Project-»
 
  
 
«ENDDEFINE»

«DEFINE jarTarget FOR Project-»
 
  
  
  
 
«ENDDEFINE»


Xtendを使って、Xpandのテンプレートの中から色々呼び出せるように拡張
import buildspecification;

String distributionDir(Project this):
 "dist";

String fullyQualifiedJarFileName(Project this):
 this.distributionDir() + "/" + this.name + ".jar";

上記プログラムを起動するとテンプレートのFILEで定義したファイル名で保存される。
めんどいならActivator内にうまい具合に起動するようにしてしまばよい。

Xpandの公式サイト

2011年7月5日火曜日

Zen-Codingで楽々HTMLコーディング

最近@ITやらほかの記事でよく見るようになりました。
Zen-Codingです。

とりあえず、Eclipse Text Editor ,sakura Editorで利用できるということです。
いろんなサイトに記述はされていますが、備忘録的にインストール&練習をつらつら記述します。

・eclipseのupdate siteからインストール
・eclipse Text Editorを開き、簡単なタグを入力する。

入力してCommand+Eを押すと変換されます。
html:5
div.content
.content
a[target=_blank]


今日は眠いのでここまで。

オブラブ2011夏イベントに行ってきました

オブラブ2011夏イベントに行ってきました。
参加2回目ですが、今年は10周年ということで振り返るというテーマでした。

良かった点
・関数型言語の話が聞けた。
・オブラブの遍歴が聞けた。
・アジャイルの思想はITじゃなく一般的な考えなんだと再認識

悪かった点
・部屋あつい。
・電源不足
・心躍る要素が少なかった。(昔話的要素ばかり)
・ブログ炎上が聞けなかったw

アジャイルやコーチングの話を聞いてよく思うんだが、普通の経営学などに置き換えると今だとドラッガー、ちょっと前だと
カーネギーの本とさほどかわりはないと思う。
開発者だろうが、経営者だろうがやりたいことは皆happyになること。不幸になりたい人なんていないでしょう。
開発者が設計、実装、経営者が経営を抽象度をあげればすべては作業。
その作業をどのようにして、こなしていくか?というのがマネージメントであると思う。
今回のオブラブに参加して、再確認したと思います。

技術の学びは螺旋とあるが、管理等の面でも、20世紀にできていることをどのように学びその時代に適合させていくか
だと思う。


今回の戦利品


ちなみに前回の戦利品

2011年6月5日日曜日

OSGiのコマンドを作成する

前々からOSGiの勉強はせねばと思いながら、何も着手せずでしたが、
ちょろちょろと勉強し始めました。

今回はOSGiコマンドの作成方法を調査しました。
OSGiコマンドは、OSGiコンソールで実行できるコマンドです。
> headers 1

今回はuname,whatamiコマンドを作成します。

1.ActivatorにCommandProviderを継承する
2.public void _XXXX(CommandInterpreter ci) throws Exception を定義する。
※XXXXはコマンド名になります。

これだけで完了です。
では、実際動作するか確認します。
Run As→ OSGi Framework でosgi consoleを立ち上げる
osgi consoleでuname,whatamiをタイプする。

これで、実装したコマンドが実行されます。

OSGiコマンドは基本的に、先勝ちの方式のようです。
なので、headersなどの既に定義されているものは再定義はできないようです。

以下サンプルです。
package ph.jpn.calm.osgi.sample;

import java.net.URL;
import java.rmi.server.ServerCloneException;
import java.util.Dictionary;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.logging.Logger;

import javax.naming.Context;

import org.osgi.framework.Bundle;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
import org.osgi.framework.ServiceReference;
import org.eclipse.osgi.framework.console.CommandInterpreter;
import org.eclipse.osgi.framework.console.CommandProvider;
import org.eclipse.osgi.framework.util.Headers;

public class Activator implements BundleActivator ,CommandProvider {

 private BundleContext context;
 
 /*
  * (non-Javadoc)
  * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
  */
 public void start(BundleContext context) throws Exception {
  
  System.out.println("Hello World!!");
  this.context=context;
  Hashtable properties = new Hashtable();
  context.registerService(CommandProvider.class.getName(), this, properties);
  
 }
 
 /*
  * (non-Javadoc)
  * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
  */
 public void stop(BundleContext context) throws Exception {
  System.out.println("Goodbye World!!");
 }

 @Override
 public String getHelp() {
  StringBuffer buffer = new StringBuffer();
  buffer.append("\tuname - returns framework information\n");
  return buffer.toString();
 }
 
 public void _uname(CommandInterpreter ci) throws Exception {
  String vendor = context.getProperty(Constants.FRAMEWORK_VENDOR);
  String version = context.getProperty(Constants.FRAMEWORK_VERSION);
  String osName = context.getProperty(Constants.FRAMEWORK_OS_NAME);
  String osVersion = context.getProperty(Constants.FRAMEWORK_OS_VERSION);
  System.out.println("\n " + vendor + " " 
    + version + " (" + osName + " " 
    + osVersion + ")");
  
  
 }


 public void _whatami(CommandInterpreter ci) throws Exception {
  try {
   long id = Long.parseLong(ci.nextArgument());
   Bundle bundle = context.getBundle(id);
   //
   if(bundle==null){
    System.out.println("No ID");
   }
   URL url = bundle.getEntry("plugin.xml");
   if(url != null) {
    System.out.println("\n I'm" + bundle.getSymbolicName() + ") a plug-in");
   } else {
    System.out.println("\n I'm " + bundle.getSymbolicName() + ") not a plug-in");
   }
  } catch (NumberFormatException nfe) {
   System.out.println("\n Error processing command");
  }
 }
 

}

2011年5月8日日曜日

MasterMinds of Programmingを読んでます

最寄の図書館にて、色々本を物色していましたが、最近の図書館にはびっくりですね。
技術書などもちょろちょろあるんですね。学生の時代はそんなになかった気がするんだが。。

というわけで、MasterMinds Of Programmingという本を借りて読みました。
これはプログラム言語設計者18人へのインタビューをまとめたものになっていて、
非常に楽しめる本でした。
Guido van Rossumへのインタビューもあり、selfが残っている理由なども記述されていました。
質問と回答から見ると天邪鬼なんじゃないか?という回答していて、それを読んでいるだけでも
面白かったです。


時間がある人は是非。

MasterMinds of Programming

2011年1月3日月曜日

Creative Ziio7インチを購入

Creative Ziio7インチを購入しました。

以下公式サイト
http://jp.creative.com/products/product.asp?category=948&subcategory=949&product=20231&listby=

7インチ、400gで25000円でandroid端末が購入できる大変魅力であったため、購入しました。
android 2.1というところでマルチタッチやFlashが見れないなどなどデメリットもありましたが
android 2.2にupdateされるのではないかと思いますので、まぁ待ってみます。



CPUはARMベースの
CPUはZiiLABS ZMS-08です。

簡単なSpecは
・ARM Cortex-A8 at 1 GHz
・1 GByte Addressable RAM
・HDMI出力可能
・32GBまでmicroSD追加可能


・アプリのインストールについて
 AndroidMarketにはアクセス不可
 AndroApp,andronaviなどにアクセスし直接apkファイルをダウンロードしてインストール可能。
 PCでapkファイルをダウンロードして、転送後インストールも可能

・充電について
 音楽を聴くだけなら約半日以上持ちましたので、充電が持たないというイメージはないです。