2011年7月28日木曜日

Scala勉強会に行ってきました。

最近scalaを勉強しなきゃなぁ〜と思っていたんだけど、scalaの勉強会を見つけたため、参加しました。
これです。

今回の議題はActorについてでした。
Actorについては本で読んだだけで、実際に実装したことはないため、理解を深めるいい機会かなと。
発表を聞いていて、Actorモデル自体の思想はまぁ、1973年からある考えなので、元々の思想
の組み合わせにすぎないと思う。
メッセージキューとカプセル化の合成なのかなと理解した。
最後に今日の復習のため、Actor,Futureについてまとめてみました。
こういう資料を作ることにより、自分の理解が深まるかなぁと思うんで。

Actor復習資料


毎週やっているといことなので、次回も参加だな。

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とモデルを作成


  1. private void generate(BuildSpecification buildSpec, Object monitor)  
  2.   throws CoreException {  
  3.   
  4.  // get project root folder as absolute file system path  
  5.  IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();  
  6.  IResource resource = root.findMember(new Path(buildSpec.getProject()  
  7.    .getName()));  
  8.  String containerName = resource.getLocation().toPortableString();  
  9.   
  10.  // configure outlets  
  11.  OutputImpl output = new OutputImpl();  
  12.  Outlet outlet = new Outlet(containerName);  
  13.  outlet.setOverwrite(true);  
  14.  output.addOutlet(outlet);  
  15.   
  16.  // create execution context  
  17.   
  18.  Map globalVarsMap = new HashMap();  
  19.  XpandExecutionContextImpl execCtx = new XpandExecutionContextImpl(  
  20.    output, null, globalVarsMap, nullnull);  
  21.   
  22.  EmfRegistryMetaModel metamodel = new EmfRegistryMetaModel() {  
  23.   @Override  
  24.   protected EPackage[] allPackages() {  
  25.    return new EPackage[] { BuildspecificationPackage.eINSTANCE,  
  26.      EcorePackage.eINSTANCE };  
  27.   }  
  28.  };  
  29.  execCtx.registerMetaModel(metamodel);  
  30.   
  31.  // generate  
  32.  XpandFacade facade = XpandFacade.create(execCtx);  
  33.  String templatePath = "template::Sample::main";  
  34.  // String templatePath = "template::BuildTemplate::main";  
  35.  facade.evaluate(templatePath, buildSpec);  
  36.   
  37.  resource.refreshLocal(IResource.DEPTH_INFINITE, null);  
  38. }  
  39.   
  40. private BuildSpecification createModel(Object project, String srcDirName,  
  41.   String binDirName) {  
  42.  BuildSpecification buildSpecification = BuildspecificationFactory.eINSTANCE  
  43.    .createBuildSpecification();  
  44.  Project projectSpecification = BuildspecificationFactory.eINSTANCE  
  45.    .createProject();  
  46.  projectSpecification.setName("test");  
  47.  projectSpecification.setBinaryFolder(binDirName);  
  48.  projectSpecification.setSourceFolder(srcDirName);  
  49.   
  50.  buildSpecification.setProject(projectSpecification);  
  51.  return buildSpecification;  
  52. }  

テンプレートの中身
  1. «IMPORT buildspecification»  
  2.   
  3. «EXTENSION template::GeneratorExtensions»  
  4.   
  5. «DEFINE main FOR BuildSpecification»  
  6.  «EXPAND project FOR this.project»  
  7. «ENDDEFINE»  
  8.   
  9. «DEFINE project FOR Project»  
  10. «FILE "hogebuild.xml"-»  
  11. <!--xml version="1.0" encoding="UTF-8"?-->  
  12. <project name="«name»" default="compile">  
  13.  <description>  
  14.  sampleです。  
  15.  </description>  
  16.   
  17.  «EXPAND compileTarget FOR this»  
  18.  «EXPAND jarTarget FOR this»  
  19.   
  20. </project>  
  21. «ENDFILE»  
  22. «ENDDEFINE»  
  23.   
  24. «DEFINE compileTarget FOR Project-»  
  25.  <target name="compile">  
  26.   <javac srcdir="«this.sourceFolder»" destdir="«this.binaryFolder»" debug="on">  
  27.  </javac></target>  
  28. «ENDDEFINE»  
  29.   
  30. «DEFINE jarTarget FOR Project-»  
  31.  <target name="jar" depends="compile">  
  32.   <mkdir dir="«this.distributionDir()»">  
  33.   <jar destfile="«this.fullyQualifiedJarFileName()»" basedir="«this.binaryFolder»">  
  34.   </jar>  
  35.  </mkdir></target>  
  36. «ENDDEFINE»  


Xtendを使って、Xpandのテンプレートの中から色々呼び出せるように拡張
  1. import buildspecification;  
  2.   
  3. String distributionDir(Project this):  
  4.  "dist";  
  5.   
  6. String fullyQualifiedJarFileName(Project this):  
  7.  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世紀にできていることをどのように学びその時代に適合させていくか
だと思う。


今回の戦利品


ちなみに前回の戦利品