Egy közösségi brainstorming platform technológiai stackje – JUM Marhefka István CTO
Közös kiértékelés Vízió Közös fejlesztés, egymást inspirálva kreativitással
Közös kiértékelés A csapat
Közös kiértékelés a b
b
Szempontok •Közösségi alkalmazás Folyamatosan növekvő felhasználószám, könnyen skálázható megoldás •Könnyű karbantarthatóság, továbbfejlesztés (XP, CD) •Fejlesztők könnyen bevonhatók legyenek •Ritka, speciális ismereteket igénylő technológia minél kevesebb legyen •Egyszerűség •Multiplatform: desktop/notebook, tablet, smartphone •Lean Startup, Agile alapokon •Költségkímélő
Közös kiértékelés Technológiai stack áttekintés Kliens •HTML5 (Websocket) •CSS3 •Javascript •AJAX •JQuery Szerver •Java •JSP, Servlet •MongoDB •Google Guice (DI) •Socket.IO
Közös kiértékelés Java •JVM •Type-safe •Kifinomult refactoring (IntelliJ IDEA) •Stabil, érett •Sok fejlesztő
Közös kiértékelés MongoDB I. (fejlesztői szemszögből) •alapvetés: Java kódban legyen az üzleti logika •NoSQL, Document-oriented database (schemeless) •vö. SQL: O/R impedance mismatch (pl. Hibernate) •OO: behaviour, SQL: structure •Atomi műveletek documentek szintjén •Optimistic locking •JSON
Közös kiértékelés MongoDB II. (fejlesztői szemszögből) •Feature rich •Easy-to-use ( fapados) •Domain model bonyolultabb logikák esetén (aggregate, domain events) •Transaction scripts egyszerűbb logikák esetén •Denormalizált (no joins)
Közös kiértékelés MongoDB III. (üzemeltetői szemszögből) •Scale out (auto sharding, balancing, replica set, automated failover) •Ld. Foursquare
Közös kiértékelés Websocket •Real-time élmény kihasználva a HTML5 előnyeit (server side push) •Socket.IO •Production-ready •Hibatűrő •Fallback support (Comet, Flash) •Egyszerű •Gyors •Könnyen integrálható a JAVA-s stackbe •Nagy közösség
Közös kiértékelés google-gson •Java objects json •no annotations required •generics support •supports arbitrarily complex objects •easy-to-use •Felhasználási mód: •AJAX JSON requests/responses Java parameter objects (type-safe) •Java objects MongoDB •Joda Time DateTime class BagOfPrimitives { private int value1 = 1; private String value2 = "abc"; BagOfPrimitives() { } } (Serialization) BagOfPrimitives obj = new BagOfPrimitives(); Gson gson = new Gson(); String json = gson.toJson(obj); ==> json is {"value1":1,"value2":"abc"} (Deserialization) BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class); ==> obj2 is just like obj
Közös kiértékelés Google Guava •Google Core Libraries for Java 1.6+ •Collections •Functional idioms •Object common methods •Many more…
Közös kiértékelés Hamcrest •Matchers that can be combined to create flexible expressions of intent •Declarative matching of rules (constraints or predicates) Pl: public void testEquals() { Biscuit theBiscuit = new Biscuit("Ginger"); Biscuit myBiscuit = new Biscuit("Ginger"); assertThat(theBiscuit, equalTo(myBiscuit)); } Pl: assertThat(Math.sqrt(-1), is(notANumber()));
Közös kiértékelés Jsoup •working with real-world HTML •very convenient API for extracting and manipulating data, using the best of DOM, CSS, and jquery-like methods Connection connection = Jsoup.connect(" String query = … //FQL expression connection.ignoreContentType(true).data("access_token", facebookAccessToken.value()).data("q", query).timeout(10000).get(); Document document = connection.response().parse(); String response = document.text(); Gson gson = new Gson(); Map responseMap = gson.fromJson(response, Map.class);
Közös kiértékelés Egyéb libraryk/toolok thumbnailator
Köszönöm! Marhefka István Facebook: Be-novative Developer Forum