SlideShare ist ein Scribd-Unternehmen logo
1 von 73
Downloaden Sie, um offline zu lesen
Guice2.0
‐New Features and 3rd Party Modules‐


                     Jul 15th, 2009
introduction
Name
   Masaaki Yonebayashi
ID
  id:yone098
Blog
  http://d.hatena.ne.jp/yone098/
Company
  Abby Co.,Ltd.  President
Agenda
Guice2.0 New Features
 Provider Methods
 Binding Override
 MultiBindings, MapBindings
 Private Modules

Tips
Third Party Modules
 Testing
 Other Language
Guice2.0




New Features
Guice2.0
Guice 2.0
 Released May 19, 2009
URL
 http://code.google.com/p/google‐guice/
guice‐2.0‐no_aop.jar
 For Android(not support AOP)
Wiki
 http://code.google.com/p/google‐guice/wiki/Guice20
New Features




Provider Methods
Provider Methods
     example          public interface Pet {
                        void run();
                      }

public class Cat implements Pet {    public class Dog implements Pet {
  private String name;                 private String name;
  public Cat(String name) {            public Dog(String name) {
    this.name = name;                    this.name = name;
  }                                    }
  public void run() {                  public void run() {
   System.out.println(                  System.out.println(
     name + “ Cat is run");               name + “ Dog is run");
 }                                     }
}                                    }
Provider Methods
    Guice1.0
Injector injector = Guice.createInjector(new AbstractModule() {
  @Override
  public void configure() {
    bind(Pet.class).toProvider(new Provider<Pet>() {
      public Pet get() {
        return new Dog("new Provider<Pet>");
      }
    }).in(Singleton.class);
  }
});
Pet pet = injector.getInstance(Pet.class);
pet.run();
Provider Methods
    Guice1.0
Injector injector = Guice.createInjector(new AbstractModule() {
  @Override
  public void configure() {
    bind(Pet.class).toProvider(new Provider<Pet>() {
      public Pet get() {
   new Provider<Pet> Dog is run
        return new Dog("new Provider<Pet>");
      }
    }).in(Singleton.class);
  }
});
Pet pet = injector.getInstance(Pet.class);
pet.run();
Provider Methods
    Guice2.0
Injector injector = Guice.createInjector(new AbstractModule() {
  @Override
  public void configure() {
  }
  @Provides @Singleton
  Pet providePet() {
    return new Cat("@Provides");
  }
});
Pet pet = injector.getInstance(Pet.class);
pet.run();
Provider Methods
    Guice2.0
Injector injector = Guice.createInjector(new AbstractModule() {
  @Override
  public void configure() {
  }
  @Provides @Singleton
   @Provides Cat is run
  Pet providePet() {
    return new Cat("@Provides");
  }
});
Pet pet = injector.getInstance(Pet.class);
pet.run();
Question
    Guice2.0
Injector injector = Guice.createInjector(new AbstractModule() {
  @Override
  public void configure() {
  }
  @Provides @Singleton
  Pet providePet() {
    return new Cat("@Provides");
  }
  @Provides @Singleton
  Pet providePet2() {
    return new Cat("@Provides2");
  }
});
Provider Methods
   CreationException :(
Exception in thread "main" 
  com.google.inject.CreationException: Guice creation 
  errors:

1) A binding to samples.providermethod.Pet was already 
  configured at 
  samples.providermethod.ProviderMethods$1.providePet().
  at 
  samples.providermethod.ProviderMethods$1.providePet2(P
  roviderMethods.java:33)
Provider Methods
   CreationException :(
Exception in thread "main" 
  com.google.inject.CreationException: Guice creation 
  errors:

1) A binding to samples.providermethod.Pet was already 
  configured at 
  samples.providermethod.ProviderMethods$1.providePet().
  at 
  samples.providermethod.ProviderMethods$1.providePet2(P
  roviderMethods.java:33)


                                          demo
Provider Methods




solves it
solved it
    Provides with Named
Injector injector = Guice.createInjector(new AbstractModule() {
  @Override
  public void configure() {
  }
  @Provides @Singleton
  Pet providePet() {
    return new Cat("@Provides");
  }
  @Provides @Singleton @Named(“NYAAA”)
  Pet providePet2() {
    return new Cat("@Provides2");
  }
});
solved it
   named
import static
  com.google.inject.name.Names.named;
Pet pet = injector.getInstance(Pet.class);
pet.run();

Pet nyaaa = injector.getInstance(
    Key.get(Pet.class, named("NYAAA")));
nyaaa.run();
solved it
   named
import static
  com.google.inject.name.Names.named;
Pet pet = injector.getInstance(Pet.class);
pet.run();
  @Provides Cat is run
  @Provedes2 Cat is run
Pet nyaaa = injector.getInstance(
    Key.get(Pet.class, named("NYAAA")));
nyaaa.run();
Question
   void Provider Methods
Injector injector = Guice.createInjector(new
  AbstractModule() {
  @Override
  public void configure() {
  }
  @Provides
  void sample() {
  }
});
Provider Methods
   CreationException :(
Exception in thread "main" 
  com.google.inject.CreationException: Guice 
  creation errors:

1) Provider methods must return a value. Do not 
  return void.
  at 
  samples.providermethod.ProviderMethods$1.sample(P
  roviderMethods.java:40)
Provider Methods
   CreationException :(
Exception in thread "main" 
  com.google.inject.CreationException: Guice 
  creation errors:

1) Provider methods must return a value. Do not 
  return void.
  at 
  samples.providermethod.ProviderMethods$1.sample(P
  roviderMethods.java:40)


                                       demo
New Features



Provider Methods Summary
Provider Methods summary


The definition is simple.
There is no generation cost of the 
Provider class.
It is a short cut.
New Features




Binding Overrides
Binding Overrides
   Sample Module
private static Module module1() {
  return new AbstractModule() {
     protected void configure() {
       bind(Pet.class).to(Dog.class);
    }
  };
}
Binding Overrides
   Module override
Injector injector = createInjector(
  Modules.override(module1())
    .with(new AbstractModule() {
      protected void configure() {
        bind(Pet.class).to(Cat.class);
      }
    }
));
Pet pet = injector.getInstance(Pet.class);
pet.run();
Binding Overrides
   Module override
Injector injector = createInjector(
  Modules.override(module1())
    .with(new AbstractModule() {
      protected void configure() {
   Cat is run
        bind(Pet.class).to(Cat.class);
      }
    }
));
Pet pet = injector.getInstance(Pet.class);
pet.run();
New Features



Binding Overrides
Override multiple
Binding Overrides
    override multiple
private static <T> Module newModule(final T bound) {
  return new AbstractModule() {
     protected void configure() {
       @SuppressWarnings("unchecked")
       Class<T> type = (Class<T>) bound.getClass();
       bind(type).toInstance(bound);
     }
  };
}
Binding Overrides
  override multiple
Module module = Modules.override(
   newModule("A"), 
   newModule(1),
   newModule(0.5f)
).with(
   newModule("B"), 
   newModule(2),
   newModule(1.5d)
);
Injector injector = createInjector(module);
Binding Overrides
 override multiple
assertEquals("B", 
    injector.getInstance(String.class));
assertEquals(0.5f, 
    injector.getInstance(Float.class));
assertEquals(1.5d, 
    injector.getInstance(Double.class));
New Features



Binding Overrides
Override constant
Binding Overrides
  override constant
Module original = new AbstractModule() {
  protected void configure() {
     bindConstant().annotatedWith(named(“c9")).to(“ak");
  }
};
Module replacements = new AbstractModule() {
   protected void configure() {
     bindConstant().annotatedWith(named(“c9")).to(“yaman");
   }
};
Injector injector = 
   createInjector(Modules.override(original)
                  .with(replacements));
Binding Overrides
 override constant
Injector injector = 
 createInjector(Modules.override(original)
      .with(replacements));

assertEquals("yaman",
  injector.getInstance(
    Key.get(String.class, named("c9"))));
Binding Override summary


An existing module can be recycled.
The offered module can be 
customized.
New Features



 MultiBindings,
MapBindings
Guice2.0

dependency
 guice‐multibindings‐2.0.jar
 artifactId
  multibindings
 groupId
  com.google.inject.extension
New Features




MultiBindings
MultiBindings
  MultiBindings
Module abc = new AbstractModule() {
   protected void configure() {
     Multibinder<String> multibinder =
       Multibinder.newSetBinder(
           binder(), String.class);
     multibinder.addBinding().toInstance("A");
     multibinder.addBinding().toInstance("B");
     multibinder.addBinding().toInstance("C");
   }
};
MultiBindings
  MultiBindings
Injector injector = Guice.createInjector(abc);
Set<String> abcStr = 
  injector.getInstance(Key.get(
    new TypeLiteral<Set<String>>() {}
  ));

assertEquals(setOf("A", "B", "C"), abcStr);
MultiBindings
  MultiBindings
private static class Test {
  @Inject
  private Set<String> multiString;
}

Test test = injector.getInstance(Test.class);
assertEquals(setOf("A", "B", "C"), 
  test.multiString);
New Features




MapBindings
MapBindings
  MapBindings
Module abc = new AbstractModule() {
   protected void configure() {
     MapBinder<String, String> multibinder =     
     MapBinder.newMapBinder(
       binder(), String.class, String.class);
     multibinder.addBinding("a").toInstance("A");
     multibinder.addBinding("b").toInstance("B");
     multibinder.addBinding("c").toInstance("C");
   }
};
MapBindings
  MapBindings
Injector injector = Guice.createInjector(abc);
Map<String, String> abcMap = 
  injector.getInstance(Key.get(
    new TypeLiteral<Map<String, String>>(){}
  ));

assertEquals(
   mapOf("a", "A", "b", "B", "c", "C"),
   abcMap
);
MapBindings
  MapBindings
private static class Test {
  @Inject
  private Map<String, String> map;
}

Test test = injector.getInstance(Test.class);
assertEquals(
   mapOf("a", "A", "b", "B", "c", "C"), 
   test.map
);
New Features



MapBindings
•with AnnotationType
MapBindings
 MapBindings with AnnotationType
/**
 * Ikemen annotation
 */
@Retention(RUNTIME)
@BindingAnnotation
@interface C9 {
}
MapBindings
  MapBindings with AnnotationType
Injector injector = Guice.createInjector(
  new AbstractModule() {
  protected void configure() {
    MapBinder<String, Integer> mapBinder = MapBinder
    .newMapBinder(binder(), 
        String.class, Integer.class, C9.class);
    mapBinder.addBinding("yaman").toInstance(35);
    mapBinder.addBinding("shot6").toInstance(31);
    mapBinder.addBinding("yone098").toInstance(31);
    mapBinder.addBinding("skirnir").toInstance(52);
  }
});
MapBindings
  MapBindings with AnnotationType
Map<String, Integer> abc = 
  injector.getInstance(Key.get(
    new TypeLiteral<Map<String, Integer>>(){},
    C9.class));

assertEquals(
  mapOf("yaman", 35, "shot6", 31, 
    "yone098", 31, "skirnir", 52), 
  abc
);
MapBindings
  MapBindings with AnnotationType
private static class Ikemen {
  @Inject
  @C9
  Map<String, Integer> map;
}

Ikemen ikemen = injector.getInstance(Ikemen.class);
assertEquals(
  mapOf("yaman", 35, "shot6", 31, 
        "yone098", 31, "skirnir", 52), 
  ikemen.map);
MultiBindings summary


The advantage of MultiBindings is 
not found. :(
It depends on guice‐multibindings‐
2.0.jar.
New Features




PrivateModule
PrivateModule
  PrivateModule
Injector injector = Guice.createInjector(
  new PrivateModule() {
  public void configure() {
    bind(String.class).annotatedWith(named("c9"))
     .toInstance("katayama");
     expose(String.class).annotatedWith(named("c9"));
  }
});
assertEquals("katayama",
  injector.getInstance(Key.get(String.class,
    named("c9"))));
PrivateModule
  PrivateModule
private static class Test {
@Inject
@Named("c9")
private String c9katayama;
}

Test test = injector.getInstance(Test.class);
assertEquals("katayama", test.c9katayama);
New Features



PrivateModule
expose
PrivateModule
  PrivateModule
Injector injector = Guice.createInjector(
  new PrivateModule() {
  public void configure() {
    bind(String.class).annotatedWith(named("c9"))
     .toInstance("katayama");
     expose(String.class).annotatedWith(named("c9"));
  }
});
assertEquals("katayama",
  injector.getInstance(Key.get(String.class,
    named("c9"))));
PrivateModule
  PrivateModule
Injector injector = Guice.createInjector(
  new PrivateModule() {
  public void configure() {
    bind(String.class).annotatedWith(named("c9"))
     .toInstance("katayama");
     expose(String.class).annotatedWith(named("c9"));
  }
});
assertEquals("katayama",
  injector.getInstance(Key.get(String.class,
    named("c9"))));

                                         demo
New Features



PrivateModule
@Exposed
PrivateModule
    PrivateModule
Injector injector = Guice.createInjector(
  new PrivateModule(){
    protected void configure() { }
    @Provides @Named("c9") @Exposed 
    String provideKata() { return "KATA"; }
  }, new AbstractModule() {
    protected void configure() { }
    @Provides @Named("yaman")
    String provideYama(@Named("c9") String c9) {
      return c9 + "YAMA";
    }
});
PrivateModule
  PrivateModule
assertEquals("KATAYAMA", 
  injector.getInstance(Key.get(
    String.class,
    named("yaman")))
);




                                  demo
PrivateModule


Use it positively if you make the 
framework.
It will become easy to design the 
module.
The module can be safely used by 
limiting scope.
Guice2.0
New Features




InjectionListener



                demo
New Features




Names.bindProperties




                 demo
Guice2.0



Third Party Modules
Third Party Modules




Testing
Third Party Modules
GuiceBerry
 JUnit and integration testing
 http://code.google.com/p/guiceberry/
AtUnit
 JUnit and mocking frameworks (JMock, 
 EasyMock)
 http://code.google.com/p/atunit/
Third Party Modules




Other Language
Third Party Modules
Groovy‐Guice(Groovy)
 http://code.google.com/p/groovy‐guice/
Ninject(.NET)
 http://ninject.org/
Snake Guice(Python)
 http://code.google.com/p/snake‐guice/
Smartypants‐IOC(Flex)
 http://code.google.com/p/smartypants‐
 ioc/
Guice2.0




Summary
summary



Enjoy! Guice2.0
Haiku


Today
very hot
No Haiku❤
Thank you!
    :)

Weitere ähnliche Inhalte

Was ist angesagt?

Converting Db Schema Into Uml Classes
Converting Db Schema Into Uml ClassesConverting Db Schema Into Uml Classes
Converting Db Schema Into Uml Classes
Kaniska Mandal
 
Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...
Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...
Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...
Paul King
 

Was ist angesagt? (20)

Clustering your Application with Hazelcast
Clustering your Application with HazelcastClustering your Application with Hazelcast
Clustering your Application with Hazelcast
 
T.Y.B.S.CS Advance Java Practicals Sem 5 Mumbai University
T.Y.B.S.CS Advance Java Practicals Sem 5 Mumbai UniversityT.Y.B.S.CS Advance Java Practicals Sem 5 Mumbai University
T.Y.B.S.CS Advance Java Practicals Sem 5 Mumbai University
 
Kotlin Generation
Kotlin GenerationKotlin Generation
Kotlin Generation
 
Converting Db Schema Into Uml Classes
Converting Db Schema Into Uml ClassesConverting Db Schema Into Uml Classes
Converting Db Schema Into Uml Classes
 
Data binding в массы! (1.2)
Data binding в массы! (1.2)Data binding в массы! (1.2)
Data binding в массы! (1.2)
 
Writing and using Hamcrest Matchers
Writing and using Hamcrest MatchersWriting and using Hamcrest Matchers
Writing and using Hamcrest Matchers
 
The Ring programming language version 1.5.2 book - Part 76 of 181
The Ring programming language version 1.5.2 book - Part 76 of 181The Ring programming language version 1.5.2 book - Part 76 of 181
The Ring programming language version 1.5.2 book - Part 76 of 181
 
That’s My App - Running in Your Background - Draining Your Battery
That’s My App - Running in Your Background - Draining Your BatteryThat’s My App - Running in Your Background - Draining Your Battery
That’s My App - Running in Your Background - Draining Your Battery
 
Mobile Fest 2018. Александр Корин. Болеутоляющее
Mobile Fest 2018. Александр Корин. БолеутоляющееMobile Fest 2018. Александр Корин. Болеутоляющее
Mobile Fest 2018. Александр Корин. Болеутоляющее
 
What Have The Properties Ever Done For Us
What Have The Properties Ever Done For UsWhat Have The Properties Ever Done For Us
What Have The Properties Ever Done For Us
 
Vavr Java User Group Rheinland
Vavr Java User Group RheinlandVavr Java User Group Rheinland
Vavr Java User Group Rheinland
 
Java libraries you can't afford to miss
Java libraries you can't afford to missJava libraries you can't afford to miss
Java libraries you can't afford to miss
 
yagdao-0.3.1 JPA guide
yagdao-0.3.1 JPA guideyagdao-0.3.1 JPA guide
yagdao-0.3.1 JPA guide
 
Dependency Injection with CDI in 15 minutes
Dependency Injection with CDI in 15 minutesDependency Injection with CDI in 15 minutes
Dependency Injection with CDI in 15 minutes
 
Unit/Integration Testing using Spock
Unit/Integration Testing using SpockUnit/Integration Testing using Spock
Unit/Integration Testing using Spock
 
京都Gtugコンパチapi
京都Gtugコンパチapi京都Gtugコンパチapi
京都Gtugコンパチapi
 
Why Kotlin - Apalon Kotlin Sprint Part 1
Why Kotlin - Apalon Kotlin Sprint Part 1Why Kotlin - Apalon Kotlin Sprint Part 1
Why Kotlin - Apalon Kotlin Sprint Part 1
 
Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...
Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...
Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...
 
разработка серверов и серверных приложений лекция №4
разработка серверов и серверных приложений лекция №4разработка серверов и серверных приложений лекция №4
разработка серверов и серверных приложений лекция №4
 
Vielseitiges In-Memory Computing mit Apache Ignite und Kubernetes
Vielseitiges In-Memory Computing mit Apache Ignite und KubernetesVielseitiges In-Memory Computing mit Apache Ignite und Kubernetes
Vielseitiges In-Memory Computing mit Apache Ignite und Kubernetes
 

Andere mochten auch (9)

Dena Loves Perl
Dena Loves PerlDena Loves Perl
Dena Loves Perl
 
ALA Member Benefits Guide
ALA Member Benefits GuideALA Member Benefits Guide
ALA Member Benefits Guide
 
Megrisoft Corporate Fact Sheet
Megrisoft Corporate Fact SheetMegrisoft Corporate Fact Sheet
Megrisoft Corporate Fact Sheet
 
Ala Fall PD Day Presentation v2
Ala Fall PD Day Presentation v2Ala Fall PD Day Presentation v2
Ala Fall PD Day Presentation v2
 
Ala Fall PD Day Presentation
Ala Fall PD Day PresentationAla Fall PD Day Presentation
Ala Fall PD Day Presentation
 
Cultivating Campus Collaborations
Cultivating Campus CollaborationsCultivating Campus Collaborations
Cultivating Campus Collaborations
 
Savy Training 16.05.2009
Savy Training 16.05.2009Savy Training 16.05.2009
Savy Training 16.05.2009
 
Cognotes - Sunday June 26
Cognotes - Sunday June 26Cognotes - Sunday June 26
Cognotes - Sunday June 26
 
A list of companies
A list of companiesA list of companies
A list of companies
 

Ähnlich wie Guice2.0

VISUALIZAR REGISTROS EN UN JTABLE
VISUALIZAR REGISTROS EN UN JTABLEVISUALIZAR REGISTROS EN UN JTABLE
VISUALIZAR REGISTROS EN UN JTABLE
Darwin Durand
 
Jug Guice Presentation
Jug Guice PresentationJug Guice Presentation
Jug Guice Presentation
Dmitry Buzdin
 
Java осень 2012 лекция 2
Java осень 2012 лекция 2Java осень 2012 лекция 2
Java осень 2012 лекция 2
Technopark
 
JJUG CCC 2011 Spring
JJUG CCC 2011 SpringJJUG CCC 2011 Spring
JJUG CCC 2011 Spring
Kiyotaka Oku
 
とある断片の超動的言語
とある断片の超動的言語とある断片の超動的言語
とある断片の超動的言語
Kiyotaka Oku
 

Ähnlich wie Guice2.0 (20)

Dependency Injection for Android
Dependency Injection for AndroidDependency Injection for Android
Dependency Injection for Android
 
Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014
Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014
Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014
 
VISUALIZAR REGISTROS EN UN JTABLE
VISUALIZAR REGISTROS EN UN JTABLEVISUALIZAR REGISTROS EN UN JTABLE
VISUALIZAR REGISTROS EN UN JTABLE
 
Unit testing with mock libs
Unit testing with mock libsUnit testing with mock libs
Unit testing with mock libs
 
Architecting your GWT applications with GWT-Platform - Lesson 02
Architecting your GWT applications with GWT-Platform - Lesson 02Architecting your GWT applications with GWT-Platform - Lesson 02
Architecting your GWT applications with GWT-Platform - Lesson 02
 
Jug Guice Presentation
Jug Guice PresentationJug Guice Presentation
Jug Guice Presentation
 
Secret unit testing tools no one ever told you about
Secret unit testing tools no one ever told you aboutSecret unit testing tools no one ever told you about
Secret unit testing tools no one ever told you about
 
Nice to meet Kotlin
Nice to meet KotlinNice to meet Kotlin
Nice to meet Kotlin
 
Sword fighting with Dagger GDG-NYC Jan 2016
 Sword fighting with Dagger GDG-NYC Jan 2016 Sword fighting with Dagger GDG-NYC Jan 2016
Sword fighting with Dagger GDG-NYC Jan 2016
 
Java осень 2012 лекция 2
Java осень 2012 лекция 2Java осень 2012 лекция 2
Java осень 2012 лекция 2
 
Sharper Better Faster Dagger ‡ - Droidcon SF
Sharper Better Faster Dagger ‡ - Droidcon SFSharper Better Faster Dagger ‡ - Droidcon SF
Sharper Better Faster Dagger ‡ - Droidcon SF
 
Mutation testing Bucharest Tech Week
Mutation testing Bucharest Tech WeekMutation testing Bucharest Tech Week
Mutation testing Bucharest Tech Week
 
Devoxx 2012 (v2)
Devoxx 2012 (v2)Devoxx 2012 (v2)
Devoxx 2012 (v2)
 
Testing in android
Testing in androidTesting in android
Testing in android
 
JJUG CCC 2011 Spring
JJUG CCC 2011 SpringJJUG CCC 2011 Spring
JJUG CCC 2011 Spring
 
Alexey Buzdin "Maslow's Pyramid of Android Testing"
Alexey Buzdin "Maslow's Pyramid of Android Testing"Alexey Buzdin "Maslow's Pyramid of Android Testing"
Alexey Buzdin "Maslow's Pyramid of Android Testing"
 
Object Oriented Solved Practice Programs C++ Exams
Object Oriented Solved Practice Programs C++ ExamsObject Oriented Solved Practice Programs C++ Exams
Object Oriented Solved Practice Programs C++ Exams
 
とある断片の超動的言語
とある断片の超動的言語とある断片の超動的言語
とある断片の超動的言語
 
The Ring programming language version 1.4.1 book - Part 16 of 31
The Ring programming language version 1.4.1 book - Part 16 of 31The Ring programming language version 1.4.1 book - Part 16 of 31
The Ring programming language version 1.4.1 book - Part 16 of 31
 
Daggerate your code - Write your own annotation processor
Daggerate your code - Write your own annotation processorDaggerate your code - Write your own annotation processor
Daggerate your code - Write your own annotation processor
 

Mehr von Masaaki Yonebayashi (14)

Go guide for Java programmer
Go guide for Java programmerGo guide for Java programmer
Go guide for Java programmer
 
HHVM Hack
HHVM HackHHVM Hack
HHVM Hack
 
Android T2 on cloud
Android T2 on cloudAndroid T2 on cloud
Android T2 on cloud
 
JavaFX-with-Adobe
JavaFX-with-AdobeJavaFX-with-Adobe
JavaFX-with-Adobe
 
Flex's DI Container
Flex's DI ContainerFlex's DI Container
Flex's DI Container
 
T2 in Action
T2 in ActionT2 in Action
T2 in Action
 
T2@java-ja#toyama
T2@java-ja#toyamaT2@java-ja#toyama
T2@java-ja#toyama
 
Merapi -Adobe Air<=>Java-
Merapi -Adobe Air<=>Java-Merapi -Adobe Air<=>Java-
Merapi -Adobe Air<=>Java-
 
sc2009white_T2
sc2009white_T2sc2009white_T2
sc2009white_T2
 
sc2009white_Teeda
sc2009white_Teedasc2009white_Teeda
sc2009white_Teeda
 
yonex
yonexyonex
yonex
 
S2Flex2
S2Flex2S2Flex2
S2Flex2
 
Teeda
TeedaTeeda
Teeda
 
Wankumatoyama#01
Wankumatoyama#01Wankumatoyama#01
Wankumatoyama#01
 

Kürzlich hochgeladen

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Kürzlich hochgeladen (20)

04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 

Guice2.0