Your SlideShare is downloading. ×
0
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Groovyしたり RPしなかったり あとは時々布教活動したり

972

Published on

0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
972
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
3
Comments
0
Likes
6
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Groovyしたり RPしなかったり あとは時々 布教活動したり G*ワークショップ 2013/09/20 13年9月25日水曜日
  • 2. お前誰よ •名前:杉浦孝博 •twitter:@touchez_du_bois •自称「アニメエヴァンジェリスト」 •...まぁ、いつものとおり。 13年9月25日水曜日
  • 3. さて、 13年9月25日水曜日
  • 4. 世の中には 13年9月25日水曜日
  • 5. 流行っているのか わからないモノ 13年9月25日水曜日
  • 6. というのも ございまして。 13年9月25日水曜日
  • 7. その中の一つ 13年9月25日水曜日
  • 8. RP 13年9月25日水曜日
  • 9. というのが ございます。 13年9月25日水曜日
  • 10. RP? 13年9月25日水曜日
  • 11. Reactive Programming 13年9月25日水曜日
  • 12. Reactive Programming? 13年9月25日水曜日
  • 13. What s RP? •データ(時間とともに変化する値)の 流れとその伝搬(振る舞い)の関係性 を記述することでプログラミングを 行うパラダイム。 13年9月25日水曜日
  • 14. What s RP? •データとして単なる値だけでなく、 入力ストリーム、イベント、時刻と いったものも、時間とともに変化す るデータとして同じように取り扱う えるものと考える。 13年9月25日水曜日
  • 15. G*的には... •GParsの「Data Flow」な感じ。 import static groovyx.gpars.dataflow.Dataflow.task final def x = new DataflowVariable() final def y = new DataflowVariable() final def z = new DataflowVariable() task { z << x.val + y.val println "Result: ${z.val}" } task { x << 10 } task { y << 5 } 13年9月25日水曜日
  • 16. G*じゃない的には... •Excelの「表計算」な感じ。 13年9月25日水曜日
  • 17. 詳しくは... •http://www.reactivemanifesto.org/ 13年9月25日水曜日
  • 18. さて、 13年9月25日水曜日
  • 19. R P の 話 は こ れ く ら い に し て わ か ん ね ぇ し ! 13年9月25日水曜日
  • 20. ※『やはり俺の青春ラブコメはまちがっている。』の平塚先生 13年9月25日水曜日
  • 21. ※プロレスラーの外道選手 13年9月25日水曜日
  • 22. ※プロレスラーの邪道選手 13年9月25日水曜日
  • 23. ※プロレスラーの非道選手 13年9月25日水曜日
  • 24. ※プロレスラーの故冬木弘道選手 13年9月25日水曜日
  • 25. ※プロレスラーのライオン道選手 13年9月25日水曜日
  • 26. ※現在WWEのクリス・ジェリコ選手 ⇒ 13年9月25日水曜日
  • 27. そんなことは さておき 13年9月25日水曜日
  • 28. .NETでRP •Rx(Reactive Extensions) •http://rx.codeplex.com/ •Microsoft Open Technologies産 •JavaScript,C++,Ruby,Python用も 13年9月25日水曜日
  • 29. JavaでRP •それなりにライブラリが提供されて いる。 •reactive4java •Reactor •RxJava 13年9月25日水曜日
  • 30. reactive4java •有志ベース(?)。 •ちょっと...な感じ。 •GWTとも連携。 •https://code.google.com/p/reactive4java/ 13年9月25日水曜日
  • 31. Reactor •SpringSource産。 •多機能な感じ。 •Reactorを使ったデータアクセス用 のコンポーネントや、Grails用のイ ベントプラグインもある。 •https://github.com/reactor/reactor/ 13年9月25日水曜日
  • 32. RxJava •Netflix産。 •お手軽な感じ。 •RxJavaを使った分散システム用のラ イブラリ(Hystrix)もある。 •https://github.com/Netflix/RxJava/ 13年9月25日水曜日
  • 33. RP with Groovy •もともとがJavaベースであるため、 GroovyのClosureをそのままでは使 えない。 •メソッドの引数の型が合わず、「そ んなメソッド知らんがな」と激おこ プンプン丸。 13年9月25日水曜日
  • 34. そこで... •ReactorとRxJavaについては、 Groovy、というかGroovyの Closureが使えるためのライブラリ がある。 •RxJavaについては、Clojureと Scalaもサポート。 13年9月25日水曜日
  • 35. Modularization(m12n) •GroovyのClosureを使えるようにす るために、Groovy 2.0から導入され た「モジュール化」の機能で実現し ている。 13年9月25日水曜日
  • 36. 詳細は •http://beta.mybetabook.com/showpage/ 508402c90cf2ffb79bb046dd 13年9月25日水曜日
  • 37. ただし... •ReactorとRxJavaでは、アプローチ の仕方、というか実現方法が異な る。 13年9月25日水曜日
  • 38. Reactorのアプローチ •Closureを引数にとるオーバーロー ドのメソッドを定義し、オリジナル のクラスに追加する。 •Closureはラッパークラスで隠 。 •オーソドックスなアプローチ。 13年9月25日水曜日
  • 39. RxJavaのアプローチ •引数の型をオリジナルの型からClosure に変換して実行する「MetaMethod」 を定義するExtensionModuleクラスを 作成する。 •Closureはラッパークラスで隠 。 •アバンギャルドなアプローチ。 13年9月25日水曜日
  • 40. Reactorの例 // モジュール・ディスクリプタ // META-INF/services/org.codehaus.groovy.runtime.ExtensionModule moduleName=reactor-groovy-module moduleVersion=1.0 extensionClasses=reactor.groovy.ext.ObservableExtensions,reactor.groo vy.ext.LinkableExtensions,reactor.groovy.ext.ComposableExtensions,rea ctor.groovy.ext.ProcessorExtensions staticExtensionClasses=reactor.groovy.ext.ReactorStaticExtensions 13年9月25日水曜日
  • 41. Reactorの例 // ヘルパークラス class ObservableExtensions { /** * Closure converters */ static <T, E extends Event<T>, V> Registration<Consumer<E>> receive(final reactor.core.Observable selfType, final Selector key, final Closure<V> closure) { selfType.receive key, new ClosureEventFunction<E, V>(closure) } } // オリジナルのクラス・インタフェース public interface Observable { <E extends Event<?>, V> Registration<Consumer<E>> receive(Selector sel, Function<E, V> fn); } 13年9月25日水曜日
  • 42. RxJavaの例 // モジュール・ディスクリプタ // META-INF/services/org.codehaus.groovy.runtime.ExtensionModule moduleFactory=rx.lang.groovy.RxGroovyPropertiesModuleFactory 13年9月25日水曜日
  • 43. RxJavaの例 // モジュール・ディスクリプタ // org/codehaus/groovy/runtime/m12n/StandardPropertiesModuleFactory.java public class StandardPropertiesModuleFactory extends PropertiesModuleFactory { public final static String MODULE_FACTORY_KEY = "moduleFactory"; public ExtensionModule newModule(final Properties properties, final ClassLoader classLoader) { String factoryName = properties.getProperty(MODULE_FACTORY_KEY); if (factoryName!=null) { Class<? extends PropertiesModuleFactory> factoryClass = (Class<? extends PropertiesModuleFactory>) classLoader.loadClass(factoryName); PropertiesModuleFactory delegate = factoryClass.newInstance(); return delegate.newModule(properties, classLoader); } return MetaInfExtensionModule.newModule(properties, classLoader); } } 13年9月25日水曜日
  • 44. RxJavaの例 // モジュール・ディスクリプタ // rx/lang/groovy/RxGroovyPropertiesModuleFactory.java public class RxGroovyPropertiesModuleFactory extends PropertiesModuleFactory { @Override public ExtensionModule newModule( Properties properties, ClassLoader classLoader) { return new RxGroovyExtensionModule(); } } 13年9月25日水曜日
  • 45. RxJavaの例 // rx/lang/groovy/RxGroovyExtensionModule.java public class RxGroovyExtensionModule extends ExtensionModule { private final static Class[] CLASS_TO_EXTEND = new Class[] { Observable.class, BlockingObservable.class }; @Override public List<MetaMethod> getMetaMethods() { List<MetaMethod> methods = new ArrayList<MetaMethod>(); for (Class classToExtend : CLASS_TO_EXTEND) { for (final Method m : classToExtend.getMethods()) { for (Class c : m.getParameterTypes()) { if (Function.class.isAssignableFrom(c)) { methods.add(createMetaMethod(m)); break; } } } } return methods; } 13年9月25日水曜日
  • 46. RxJavaの例// rx/lang/groovy/RxGroovyExtensionModule.java private MetaMethod createMetaMethod(final Method m) { return new MetaMethod() { @Override public Object invoke(Object object, Object[] arguments) { Object[] newArgs = new Object[arguments.length]; for (int i = 0; i < arguments.length; i++) { final Object o = arguments[i]; if (o instanceof Closure) { if (Action.class.isAssignableFrom(m.getParameterTypes()[i])) { newArgs[i] = new GroovyActionWrapper((Closure) o); } else if(OnSubscribeFunc.class.isAssignableFrom(m.getParameterTypes()[i])) { newArgs[i] = new GroovyOnSubscribeFuncWrapper((Closure) o); } else { newArgs[i] = new GroovyFunctionWrapper((Closure) o); } } else { newArgs[i] = o; } } return m.invoke(object, newArgs); } 13年9月25日水曜日
  • 47. Which アプローチ? •Reactorのアプローチ •長所:静的型チェック・静的コンパイ ルと共存できる。 •短所:Closureを適用したいクラスを 使用するメソッドすべてにオーバーロ ードする必要がある。 13年9月25日水曜日
  • 48. Which アプローチ? •RxJavaのアプローチ •長所:対象のメソッドが増えても、コ ードの修正不要or少ない。 •短所:静的型チェック・静的コンパイ ルと共存できない。 13年9月25日水曜日
  • 49. まとめ 13年9月25日水曜日
  • 50. まとめ •m12n(モジュール化)、ぱない。 •RPとGrailsやVert.xの組み合わせ は、ぱない、気がしないでもない。 13年9月25日水曜日
  • 51. さて、 13年9月25日水曜日
  • 52. 皆様の期待に 応えて 13年9月25日水曜日
  • 53. いつもの やりますか! 13年9月25日水曜日
  • 54. 7∼9月期の おススメアニメ 13年9月25日水曜日
  • 55. 日常系で 癒やされたい 13年9月25日水曜日
  • 56. 13年9月25日水曜日
  • 57. 13年9月25日水曜日
  • 58. 求ム 家族愛 13年9月25日水曜日
  • 59. 13年9月25日水曜日
  • 60. 夜食テロに 襲撃されたい 13年9月25日水曜日
  • 61. 13年9月25日水曜日
  • 62. 13年9月25日水曜日
  • 63. 10∼12月期の おススメ 13年9月25日水曜日
  • 64. 制作会社押し 13年9月25日水曜日
  • 65. 13年9月25日水曜日
  • 66. 『凪のあすから』 13年9月25日水曜日
  • 67. ほっちゃん (永遠の17歳) のファン 13年9月25日水曜日
  • 68. 13年9月25日水曜日
  • 69. 『ミス・モノクローム』 13年9月25日水曜日
  • 70. ご清聴ありがと うございました 13年9月25日水曜日

×