From 5ce5666628d63dd0cb216df00449d857db18bb5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Wed, 28 Nov 2012 22:56:07 +0100 Subject: [PATCH 1/5] RESThub 2 release post --- _posts/2012-11-28-resthub-2.markdown | 108 ++++++++++++++++++ .../2012-11-28-resthub-2/spring+backbone.png | Bin 0 -> 20323 bytes 2 files changed, 108 insertions(+) create mode 100644 _posts/2012-11-28-resthub-2.markdown create mode 100644 public/img/2012-11-28-resthub-2/spring+backbone.png diff --git a/_posts/2012-11-28-resthub-2.markdown b/_posts/2012-11-28-resthub-2.markdown new file mode 100644 index 0000000..d2867c9 --- /dev/null +++ b/_posts/2012-11-28-resthub-2.markdown @@ -0,0 +1,108 @@ +--- +layout: post +title: RESThub 2.0 released +author: bclozel +tags: [resthub, java] +published: false +--- + +We are pleased to announce the second major release of RESThub! + +![RESThub 2](/public/img/2012-11-28-resthub-2/spring+backbone.png) + +RESThub 2.0 stack is based on **Spring and Backbone.js**, and is designed to build HTML5 applications easily and efficiently. RESThub focuses on modular web applications, made of **stateless REST web services** and **client-side state managed by MVVM JavaScript clients**. + +Spring stack +------------ + +RESThub Spring stack 2.0 is based on: + - Java 7 by default, but Java 6 is fine too + - Tomcat 7 + - Spring 3.1 including Profile and JavaConfig support + - Spring MVC 3.1 and Jackson 2 for REST webservices (including full handling of Object Graphs with cyclic references) + - SQL and NoSQL persistence with Spring Data + - Logging with SLF4J and Logback + - Maven 3.0 is the reference build tool used + - TestNG, FEST Fluent Assertions 2 and Mockito for testing + +It provides the following features: + - Guidelines for your project and configuration layout + - Project templates for Spring + Backbone.js web applications (simple or multi-module) + - Zero config support for JPA (with automatic JPA Entity scanning) or MongoDB databases + - Generic CRUD webservices (XML and JSON by default) with builtin Exception to HTTP response mapper + - Helpers for running web tests + - Easy to use HTTP client based on AsyncHttplient with OAuth 2.0 support + - Logging bridge allow to send Javascript logs to the server + - High performance and easy to monitore [RPC mechanism based on RabbitMQ and Hessian](https://github.com/resthub/spring-amqp-hessian) + - [Spring MVC router](https://github.com/resthub/springmvc-router) allow to use routes à la Ruby On Rails/Play Framework + +Backbone Spring stack 2.0 artifacts are available on Maven Central. + +[Reference documentation](http://resthub.org/backbone-stack.html) | [Javadoc](http://resthub.org/javadoc/2.0) | [Tutorial](http://resthub.org/tutorial/spring.html) | [Sources](https://github.com/resthub/resthub-spring-stack) + +Backbone.js stack +----------------- + +RESThub Backbone.js stack 2.0 is based on: + - Backbone.js 0.9.2 + carefully selected extensions + - Powerful Pageable/Sortable datagrig with Backbone Datagrid (made by Loïc Frering, a RESThub developer) + - Get and set relations (one-to-one, one-to-many, many-to-one) for Backbone models with Backbone relational + - Form validation with Backbone Validation + - Parameters support on view routing with Backbone Query Parameters + - Require.js 2.0 for script loading including JS/CSS optimizer + - Handlebars 1.0 for templating + - jQuery 1.7 + - Twitter Bootstrap 2.1 + - Asynchronous calls with Async + - Dispatching keyboard shortcuts with Keymaster + - Parsing, validating, manipulating, and formatting dates and times with Moment + +If provides the following features: + - Guidelines for your project layout + - Project templates for easy project bootstrapping + - Resthub.View extends Backbone.View to provide the following enhancements: + - Default rendering implementation based on Handlebars + - $root attribute used to specify the container root element where the view should be attached (since $el is the view itself) + - Default template attribute with context management + - Zombie view and event handler cleanup + - A client to server Javascript logger, a simple but lifesaver feature when your application run in production + - Additional Handlebars helpers + - A Require.js/Handlebars plugin + - A simple Publish/Subscribe mechanism + +[Download](https://github.com/downloads/resthub/resthub-backbone-stack/resthub-backbone-stack-2.0.0.zip) | [Reference documentation](http://resthub.org/backbone-stack.html) | [Tutorial](http://resthub.org/tutorial/backbone.html) | [Sources](https://github.com/resthub/resthub-backbone-stack) + +Try it now! +----------- + +You can try now the [example "Todo application" live](http://resthub.org/todo) and [take a look at the code](https://github.com/resthub/todo-backbone-example). + +[Reference documentation](http://resthub.org/) is available for both Spring and Backbone stacks. + +Feel free to contact us on [RESThub discussion group](https://groups.google.com/forum/?fromgroups=#!forum/resthub-dev) if you need help or want to send us some feedbacks. + +The rationale behind RESThub 2.0 +-------------------------------- + +RESThub is all about **integrating and bundling frameworks with tools, best practices and documentation**. The RESThub team works everyday with those frameworks on high traffic, enterprise-grade applications for their customers. + +That's why **we value developer experience** on those libraries and despise the "Not Invented Here" syndrome above all. + +RESThub is a two-part web framework: you can use the JavaScript stack part with a Ruby-on-Rails or Node.js backend; or you could use the Java stack with an Angular.js frontend! + +We strongly believe in Open Source Software, so the whole thing is available under the Apache License 2.0 on [Maven Central](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.resthub%22) and [Github](http://github.com/resthub/). + +Roadmap +------- + +Expected new features for upcoming RESThub 2.1 are : + - Uprade to Spring 3.2 + - Upgrade to Backbone.js 1.0 + - Bean Validation + Backbone Validation plugin : do not duplicate your validation anymore on client side + - RESThub Identity manager : User/Group/Role webapp with Backbone.js GUI (alpha version available [here](https://github.com/resthub/resthub-identity)) + - ElasticSearch integration + - Websocket support + - Improved Exception to HTTP response mapper (JSON/XML serialization of i18n aware messages) + - More examples applications + +Contributions and feedbacks are welcomed !!! \ No newline at end of file diff --git a/public/img/2012-11-28-resthub-2/spring+backbone.png b/public/img/2012-11-28-resthub-2/spring+backbone.png new file mode 100644 index 0000000000000000000000000000000000000000..a6a6f46d78c53c8cb33789704580c4879f08bb7f GIT binary patch literal 20323 zcmeFZHY#ob+szueD$ zuIt`^!259@$0WZ@K4i_DYt1>c)|!<_H5FM*bP{v~1O!ZZIcW_9gx8cWpF2#B$ezJhOwK12? zc7W(b#>B4k`fEf=gn!zq7NTI;cKDb$0@A91P8e4+9t>hQmE5fCu~{;#QLDsuH|0cJV+;_>ihx}{%Us!N#i9lB#u_d|((e4N6oco`W z9JttY7zT70q-TqB9RR}(1^KaPK;yrj4a>R&Qs+NqA$249~&5a zEtM{{o{5lsENcULj!D-f|GSV}sb3{`SIUbfi)=ix^t{py!5pS~vMYEhcI1?NyI1fe zUl1(7B5SRyM2h<5Uz>2kbAe2$TiFobYR|}lxRMhxx&XamB2MGuE6HEcY2N=G^&x*4dZO} z`!UBxj2v6S*f4h@Qob3bME-{`UWkj<6c04LN1ViPYgq5d2>Up&VgJqR ziCEFNZzdd^IKG`xcEx zXbN%MhAL1|_ax#r;2lzY47kXdmq)+S>~6i_aA9${v$!K06;bd18c74{%Sfc`B+eB( zhQg&K8Cd6P>5s_TBm&eu&)83j-~8S$pmdPKPP|S+&xgNW*+Rll4Bhksw_1V%0`-l| zbRL@!KSkI>01lNE_V%{6W@if*z`$?0jZm& zA=eVqj&eZ@WRgzzbS3kb-7=(5Eb(~QnB#~2FsF`KnxOH=@DkP2F+ZWd)=oTa#hW+r z^)ZUE^U3Y#qPo}7U1-5pV0OHJ_n#Jo;B9`8_SW9T2QC<2V)uEKAO#hxL2pyY=I~N_ z7*q5UbKS?p_e>0-WR*x5I(I)L_`s3^-}I)_HtAIN#yy!zlVcQx*qOCQhHnA*`^!9Y01e-0UqaNV8e-0OXLHXps(>YKINka6NB}_={V+$T?X473 zF{0R2`zSak;yx`L-o+M=$8=i>5P*MGLRIq_})lyf%T>J{jl+sdP;|+G#vIo2t)tZ@=iPpDLN{s zL$ z`n)1$FlDavglAO(lb+&(K_(cUQQ-O5;S-a33?^UaW(aCl?_NnRXq`E^!d!k^PkG zy%HPTp-=$KB;d%u805l-|LE;`(@GFO0oj~!vC|l$ASEBTUD!ha>LC~oP~eLaVt#7s z*K-p6|XL`KYh|=^MiF<1M{M^}DO5x?caX;OmaSn}GN#w_B4db=hMj zIeKM9Ut{6Z-%lSP4Xu2+x7&wC2NTXBW}@$UedcKxa1erL7)*&k$OdU2gMof%Tr=%z zp0<9&`%otFNgUn;G>}el+zQ2r1Kjeezb0O+9W@yW@F%V z+B~Xe^JFWcwfJHVh8884YP=*nLF%GW4(&$ap4gIU`&na-)OMT&UF`v5Vlgn9Bp0#28d>Vzo$R zcbi%1Tnv9NBy$6pPwUe(PcU&ZW;V&oZkDQNK;tW9?`Qw%f18In8x7GVMI05RDgKDd z$R-lVdxk4vltbqMe7=+IC*Ad=uXb;OO{pDD62o8^5O`vqy9|+X2f$nz^YHh}(%Fd$AA0gfG&jP9~}-tQUfjkKrje z^UXu5ipCMJ%oya?^8@0>rgSKz_6_*A_IxRuR%1TtVM~SC@{U`b`1UziNU0t&a&F1y zWklPI3zT?ThK7VI^73e?U6xZ$kvDh{02#+^t zTvLEOj{4l=MSZwqgptcv0VCw}_l%dMOkVsxNgP)TMC)Mfhm&TeZ{>8sVE*ysP%TZ& zop$(KLepn{A&ZD&yvGEA-&_vVcJ#H2loJk``hya zX#~tYi~e>I&3~l0&-~En;u!KIIa1Z!{JF)zfI1%lMatkwCu_LuWe99=?@GNhtb!Q9 z7;eQ|-FeRAC+ZRjyTCL1u-o)`aXlqYbYFB|MO0gdy9I6f7u)x(n*`^e5 zc>)WOlckFFtMwBmxVCS3a9mrWRZi3lzPY zCp9?Ka7-lq&%Bld-7F@5R%Sk|AE0Qu>-3r2GRU*^Y$#Z_MB!)G4B7X0(pJX}{3XNf zTppYtQ5ac2qLeNI|E=3NHwZxcX?*#B{V{Mi;wuXF^1cwv>PZJFb(q6p&PXHznSCWa ziEic1yHu@*2~~?f)xtFfj-Jgh3*?#Wqd$5P1Z^eC0RugwPO!8ry42V=gYg^rAB7Ck z2mI|QO7r&k^v^jlAf#(uzs4ot^2Mq3GaZb^i?jkO;UVmXVwYb5E0C*=EUE4T#lV%~ ztr|Etm^glN-L!!#)kdQHB(}UOg)6wbp0K8^m_a~WQ&-;@tfl4qv3d8Pc&vn2!&o@^ zbhRYrI1SDO1LJHfz_b%?8z$@X%WFKzu0+U=+-dcL`1L6~NA9P90lvq43ug~!gA|9X zhP>LpTx?oL zw!1xLA$yI7L0O;87^}qyxf#eMP|AgOifQw8uocQ8uOAxgno%u(vdM#!{&D@N9eb{_ z|AV1MElY+-jipyd_Iq#9jL+KQmp)Yf<@q&ZPlthH8&UEs=PiPs3pUSac|V07e^?;f z0av6LIts`Aauwm5;r%*{mQvuuAfrB=zIa3}DDR)AYCYGCZu{AQQz;AU$L3rq50RKU z(!VaIUEMY&nYaB<&xV0=&Gb6W;@i$Ic$nrn_n)yHVBPpLNH(8-Q5FT!9#6OBP4P=> zjCpK|I!K}rCVfq7w&t^+_Osx2r4D?7WF)JEFEd+&$`P8yPe^ zbO=$mximRG3)ms<+HhMoV?g%sI1SbH&X(1Bn2c49-TypPUgPHM9@Z@NltYL(+PTc$ zYjJ9TnoG5y?`m?vA3lktqhX{5(Ehp9wgRV3e%hh8UdqdyeKfak{u}D-me$s9wC{VT zF*~PdqzvDeTxCjL8+jMjL$EPI`G@(P^LYzAFXkq__G*Ika5BhcQ@yA}xp2jq_U)q83 z`*$jEigCZFSD{XBWt_DQqdU)T>dhgZ1ew%4 zwtCc!+NK;gLb}~UBdht6pH4r`uDRYTQj>NXdUCry(tCz}Gmn zwYSV8$~*m;x%$KxSiTk-bch+vsMiEGC9zT_eH^);dwMs2Ye3xKZ#!vz4nZMhY1Ql| z+1J<+P30-TV5Lb_I%~zP+qm}9TRbDerR*gX&^1yy$w~V2=xBb!mDWaDqRrRP2z&SL z=UZJFkCJsax_33^vEzro@4ijmne<*xbggxXjj$XR&j#Zg-xmqrP}~T+{@Cb7>#C2U z1@Hgz?i1ojD8u-ZFB?zhK2|^BaYJNQ>{t=XZTdTch|guoXi><9Fc?T!TU~Mc_fOuF z!!O#UzcM_m@NSqtGtC?$bm$vThnIy;bm@Qn0_7!kF>lz{VlXX@(|qkU|VuV-&> zjzpO+#l55F0#$H9{#>~4)2?hiUGF}>SkNJy5uEbnfUgc8Nyh`8(MU;w2O`kp_PKk6 z_r7w#E0jM==q_9e$v7Ao5|sTt;nKk6$*86?E|jbdQ;{;$F;X#i+AdkRjE?nJ`&(Mt zSfWZYF>#iE6lFCSD8=56kIK!vtn||;Rd4R%5PVGUG40qAMd!uxd!w>sZNG(f06d)6 zG4Dzz$FiZ*v*BjEax{69NqYLz`J{+L#*VI>CBEZFGX@&uVcqozF?t&+R3Kmoje~nk z{Mk4trG^GZP224wOvQo*m)XdEYOm1T;UB4yK{9vOc#SzR~zUitl-f zp&mwU3B(tYFrBtER6skYIlvW=q*FdpH*v%|*2p4D!`)X6Dr^#KJ&RKw3jy=? z(0COscG4+l0SC&4pO|{Wf9x$WgAY}G@;ZMkwtfm}XBx1}I`}rFF0CrUX;R^ z#^P425=s2vM-4lS-1X<5;o7O}_g;L!x2i&UT}LSNHKps_nS`UVM{kU>GNqGRzhgg} z!Vw!Up9gJcmYtqO;fL`khNHr$-$-P7wT=P7(@v&ybwdrv+EU*K5@%DKht1ercb%7_ z7?-~F|G=Z_8iYpRa5!wku%i_fX2`~WR|}d=>V=Y&QDofbM3E9TA$wTsRn-v{&rHo} zL`fw#YDN|{r=Bays_1n!eHLI1l(!J8KaGzg$o&KrtkH-dMp4@PA|94_Hf8*-lNv&+ z|3UnUNkb5+;w`6ReZo&p9rg0XOiYZ2M!Ex|b=sjen8F|q5KCpRS4-tdBH!QwSG5rp zKr(kLFiVC~#m3IV0dnOkb1}CybuzA$gVJ9)>VKnzhMFEI<|QO{d_TCzHg%!;GUFZJ zj=3@2GO5#p_5V@dMsIcuYZnysa zU4T$TzxOsFdHqxv*-GNzC?X=`YqqOQ-53i?2mGP)9l!j>+qog&MhKlr;D|D??_yMg zd1*S4Zfb@A)Ck|XcWqlP`e6J#8)QOKYT&6v1tSbI0=*|ZJsy5f@$k3nm_k98h&kfZ zu0XqDmyPeZuPW-K_@B37$?n|b*AQU7nvgv%$Z?LISjCe6*#zBqs^j2BhH+YhV4tSX< z3vT%pk*BOgApRsQYJE=!70~}p4eMA}Va!`VKo+X6x6I7g*OKH+NI?CK7sZCS8J%Pn zDb}n;#g~HC!(+hx;>7oH^NY>w9l7Y9#AwKvD{$X_wr;%bhtP@O%-(7Rn{F+z;*zZY zhWV&BR*C4BxLuQSb*F%y6Jpg78$L(}m?UH8>@og5B|ep**#k)@z96Jl5Sf^~)sXMm zW$7H1Dpflg--Qu2ZF~-To*;~vC6i;VtuBMnT5rafw6C$jL7xR&MyMye7X0RR^p--E z$Ap&Sj6zA$PJK+~2zB=tlElwF!VIZ2;MBzPit1ee%)nI7m`2Tyym zidiiLY<>YsMjdK<>=F0X)vo!Py<~DO8H)U7UdQq&6!)%QK`B5f0MBn`%I1LiR9j@I zu$di#p(gAwhwHDuR)XHVgPk%=ziRqdDIexgVBeCs9 zH_#F#eAF7yrF+u)rkCK^DahwTB+(T3w<{2)pr#u{an#7tzL6_e>%hlW@foe(OQ^C| zX0n4IZQ#w8*~kaSDrM8Ar4qW|Am%{-9a$L|`~94au3FGX0}0cPdi_%k3SlX}3kE9s zwso@*#a<@!`{Fz{TEg$|2FuyZ7$$^y&2oj!Q_Gtl?$KEy<0E!U11FE0T23|qd7bu~ z=F^DMc9!_0O@NcU{Bo^653o!)~eaDQ~WfRAz@3hsndp^UV4>!A1tH50+aJDpMbtn)Mx(x_Sq&W&P6{jD93kx-JDg>+HJj_i{` z&e5pp$Qi6)x(+7Nvn*pBoXDV=1tND;Z|Baa*$)1wZ zFH4d*dua+;&*!F)ZeOQpoTaFTnUXU}<(?`}jMOsl;CA8kp0Rq3I`-1UKTJk>_% zH@zsE!-N6!!`b8c>6JWgAqz%Pg@@wtaK!6^uJhL+g}its&!Cf%R6G>SyWl+7-!RGk zy;v9~OC+~xs0>Cbq)nse@7`ikH(nl1KQUG3>5JmE(WPz;&@*~QX#%UIuH#r~ELPCl zVBJX~{hS70c4bS9Oov0G$HGVM(l3$0fxQO;zx^4RxiV@=6-~V;bjYUXH^h0sGRui^ ze$0r90l|L&&`jo0jcs8`4wBF>7(JbYJIcXVb6h5kk5`M7>`6SE6UKjgN#Viy)Yc{{ z0N+Gr$M(H<4R{H3*Yo}Pxd2!2 zIjCMajJ4AUrSV|l`Cg3mxY4v3Ivgq$YlX(&kXhdT?$ja;5?4QNA&>q0WICrD^xc0) zcPcDuy3C=3L-TLRYv!+?S3PE0Dnak|^Wc7GS4kZ_!{|ld)UE#{Ys)IG6mc&gr_!7Z zo10lSPu7ez&e_fzk)8DFFU#0!&`@fqJII@!k*o54P(adAwi;Osf^+7%?kYo7frc2* zCg>Xdym(1Vi~+|qaK?P_S;Vk09Xeo`Id^!0mJBywmGn*dxuoT>CDr=tNsykzvV2eY zrm0lv>L0d;ByPi3C1T~Ph^izkE=TU0{XpK28oDJ4cHGzP25B)tNmi=FE@Y{lix&f| ziYj6crZ#pe^_!~QV!@mSVe5xAExUFo6L;a^?(!4aidZ<~9ULx%1P~nt2$BsSNsUq& zdS+Z_!8_f-4dL%67yHfK6AW{|0xDN*g1pHDrUBJIgwVpPib5I}e2O>5d&#k7R{TU; z`~5;nm_bbpqow$Yy|Io<(nxBalVI-|%==*BN#f&^j`OkuZ3TuB{lGUrCg`455^GVHbwkGN z3+foZ_1*-LYX$i`5`uJ`s#2X9{94nLVGoAp!+dhQmP{&n3+@|LwYvl3Vr3cydk{A; zd(1jX*kM6xNh0Aul83@I;Llp5RdP4HCIWCpF@Mx327b}wbfioN_C<2-T`KCCXB1+z z$?CRyGAabNkfMiegn3p9>=@a5B2*6=VNSj|8%6FhF78JE+JXKZ&@%5IXE1$>nk1w< z;6XJ}+2@uke@V`M$X84UtOu$eh94wf(FOU_Zl_)xPm$>#I$W2UJ6|cK{$^(ixckwg z+=Pxx&J+=T4$q!0QYa;-jk>M<*HJ%?jyU568g>vO`dj3ZUBX(PJ9QE{wdITXpg&-Poir1&&6okBfNZZ*I8Th{9vs-@?KBYg^`u^wZKNjl`us0S@V=f_Y@Ro;abj*taOw*ckrd#kDvlB_R5pRF)FIh_iY zk#t-tOTJcM0On16teBEx7ECN(SXt#TW6Ey}F&eAa$2W3(hYEe1ZK&vjlwIEH9Pj{t zGAvdyRrJ1wK;%;Wa~oJ428>WDSRO8N=vEZ`Iv;11*NwNNIftDJD@on*>+z|)r6JWg z47_QmOt9?GdTdg@KV;dUYFl4m2%6ydndRMEO+3A z$ydXplZG)+b|-k{6!4NJZ!kGZqd3eFR+-C?GfC3f+yL_w&Bki_L5O<$@lQSF)PWVX z*!o7sDLRG$L{oDQ)r`=6(*1E-VZt<1wHMGAnQf!oN;ciL-dn#Q>)(A~QhR#`uU{n) zdqnEuIB372IBDnmL0g?Z_#dCX@lND$d8PMQz_rpsr-$v{7Z;P7)3y*HsiVi%5%G%8 zN?%lmuv5Cjw9JO4>Gl}HUA&Ka}DU>k6UQYEuulH4FLd8a53vzD(73L%p^)XlNTZ&6{-M(rEVD^Y7E{<5h!bL|7DK_f7@ zUp0f9nk7@iG2p25lJg=4VBkqJKRD9{A{XBz0^otZ+U&oLcPprVGf6LTvWDNaZ1+j4 zOGmrQQT03sAOd*Fv{yvR$h59Uwx3xw2);bB&Q(%aS8gBG^h*xB z^dnIe;-<7ch*CuaP-Of5T@MPuQsQN>b+l#dP)MwCo|#?nuf{OxCRLnArN%d|zmm9` zrq=WL14E9kOisL+599t0ur-*&t zWpcyRxxDd6Uvsle`r9r~+9>0#ZphI{c@5U`{Y@R#OWXmhYbChsMKDM&v?#hz*iG%b zUsY1bkl=X%R*06104lmf#qpJMqr7B5nlGV&@J!EF0UiWQT1@_oPH)J_ID)>iKnEQ0(J87Lu+7j2+DY-B%+_R_s6g~CoiB@se%5jl)d%QM?K zb4Hg72dChzMYrGJPaDJww|4R~A9yqBZ)>b0Zi@-iP$LIoN2Ye8msGN^2t{gssNSFV z%wy-BW5r)ZMP0m&KYO^%pM^X5qW77i@*pW)A6zB5h<~d+kzQ%dYR8g!xmsh@sQ)`N zzXiZ3SG9tj2!rjMe8Xy^3BZV&E^PiY_0{|Na~Udt_@;+iTE|NV?kaVHr=qU=xow6R zG#Ym#&p02zPwhHoNmZkL(_@`MCxe;uSmiv0zSM0uFjp)~N8-TOKWX1AY~H7PrW;kM z+xgsj2_Uy&#jOvl`kTw@X}8=+8UAc$4A>V1rEW$~%gU&yoEpiE?s4x2-vC(61>Foi z3{B4(zL1X$GrOmXM|a~jB!z!Tiee>fEi!)VMwgl9%=xuMrqVw)T|OoZ3WrDJv`7z$ zu}8ICQ9-${wX>4XvYe*|**#wa^-8^6u2d@2E1PS&3w@1L3_kIe%x{c%SFWmWRD@Wz zp~s)aMHNZ8v}5I+-<^HAaag&FF+Q2~i|b*Z!r||)o#pQO5VAJXeDgVvuj_{2zkc%A zq7cUEV~7^clB5%Hd@FKz9Kaw*#(%py?ZCmySGic~2)r6X?{#-bw{E6YelH z3XNU$HRw)(yN7YdSlNLZC<2HwJlrwp#}FhI1b*eSRjuk=){R$<>@QnSVj{)cFfxFC zbWyV|2MouL#Rwy@G4UYWg8XN}P7P|aPULHTpvXcZYAaet%%+Lw>afxyoFu6bT#mRU zwev@7DGx92a=lPv;6PLvvf_?K zKOgT=QTiPhq-69Q1HJxsZf1T7YgfAo$U%(KN57lVNPRJV#{W3%eKIt;97KNcw2A%r zFySv-!y)`}cID&rN>Eh6Ah%TQUdSMLLfYh+a^;6d7z`SOL zHys6Lzzo$=s?>jjq}Mh|qAT(%Md4l_)--(dtea) zSi!eI-jru*wo7=e)rR7jx3KvczvGhT{%;wr;bvaOA|$3*aR+}qM<7U0@Yt_!+rj4zQPsisyg+wYy!!d&9)&Hh;gRsC ziJEU%_o~Z}y54E{J6|yrsGW{z-{vcf$tB&U>ZRm&3tD(1PwT6i^XESJkWu{O;DF4vV8zf*J z!xbw($rTPu_~ns0@Q)r30wX%0GEK>XNi;^|u-VqI=`y6?DYrM`qn7`bMi94Uph^_8 zvXN=UJC{REYv%VOm5v^T>Wvu!%MsQ4R0D>>y|RvoV7K%<`w}O!my{5W%Z~)vd!OeG zw}AV>j%N;9=wyj^*vFXBG8D{{R`pZg&r z;c4wE3W*hYb@H2(SY1h;ojCD9Wna0PffXm zVqILjC!qp6oapy0pFLRHU@Tel9WR@gMlPf2jX|j)9!PM4$Bi` zTzaZIUAJ``ilK#rX!pTt7YbpmJ&~b4G{M@{6Y=T~g&%lg`H3~c*So37<+YGf*FzZ& zc%$Oc{B8?`G_a!FzF1)wH4JF8hKrlmut5ok`3UHcr{h{>&PK`o4Nl{;U@GP`S?2ks zdfOxs0lcWE*T5=zj=+>6|2gFf@AZV;6wxs;CM~_XF?gNP!t?Z?SztNwsN;2y?_Nd$ zt=ET}z0(%e`<_?isITtP3by1S^+y`Q`$n52>)i+u1R5!#A?T57xW6KYF>Ij}=Jxrcj z>l-DsI7)oSz<=1GQ6n|R9nSjxtw~t|cSk`>&r#2>FA!~&UqW{cZ$(N;A0$Ij3sqSs zYoA6oZi;f^2EAhV-A~r${CdrW$YYNESGCHP5{=v9kjVsjC^-Yy`=?^(b-lp4RlqM( za8&{uz_y*G-6;4FSw-En;$o+ao0tI9zLTL)au{7o<3RbMx3yt9A1fZJ=T2{8ADzTC z1We4- zF5AiB(D-lf?08v#~ zsxpdoFpte5BV17F^6hmOAG6XLD%?v4@NSibHvdGtt8K-kW3CmEg@x5;JiV+;l*@8t zsHgFZTxxX!?xR%hzS!+vaDz;|x6@M$`*IN1`LE>zI?3OE`Uc^`)yD=llZ%c_qEUC< zeIKaiH$Dp?&&2MN)}DX_Y>#>$b+7cEdaGtxYSh1O6WCmv+^q(;~=Vfb6ntI6JN9h;lBVYi6_3{QtWV0>zJRM`KDKdCwBU#ygDtst4TYE}0>09o| z6rPViAaea(z01cE*K9(3yLqm9yuT2?-p&&C35VKRgx}Y?EB_V_!uC9*o}z}L5{NC? z&)+lU?05(F|FH%T$_O&*5z;**Q#)DhZ8>g#SLlWxR4K<7)8J-Jv4S9F^IGXI``eU{ z{mN!JW76L-LIYX1LIR$~zmE2H0aXF%ChXrY#{tW;`}|`&!;azU`(-PxWVTeIm;9U@^M*Ntm??zI|naLd{Vf?YmXxfAb z{Be?RHlgf+mBctFy_!guq5qGa|HD+#?{b?TG8}eZ?Ky}JOYAHkj3=un3cHsv5bppO zpt~b~>q^7(=?CMB2j8D(2W=lsdu$%D`^LsQU|ah0!Sy37V4g6{*eexB@+$~8?<+b@ z0-OiRDp5g3*s*>9)JhvFSU>tk0@z{x;!=hS?4|dsVmDXg9<||m5v@6|7262zmI7DR zHqd^J{unMLyc_KwgWJPqf2TLZqx^JX2>qlMlg^`c?N^2YpqC&}J!lZD(BzWeK?4R` z@!(s3N+6klpaX!fzs$M5P~b~8B{0>P-zkX)Yaj-C_ijP!-8DVnU|4@ll9>oFKjb2B zF@GsqM4i<4z}gh&3-YmBnvSrF4FHXz(vv4tV?{;@S6E~r&y465Xaswh?$kcaHC`=Y zY6Lggj}ufO9;|18O8jRO(@=Nf{K89yhvg_1o1!TzV@Sr=byort){dEIPzX1z|L}cT z9n)_bOnr?q!6pWyY~_{2JsRnN`94Oqyo$7<2ouxL~v!3HX_ zrDy}XdplKP*LxAF1k~0Z$IQTZ1en6;ul=Ex$`UrD*jU)QEbyX& zAiN1fTeD8DB-iGx&Kd51q~!)vul<((x{3b^Q_ttGUL;(o1bg!B&`KO3 zIM1Ldrgw_LN|o-4sG(c`c^~qslm38!75C|Ovf2M@K*Ozwx@n@kUH=%49?3Ea%h|es zXdbIemx}ReA@)pF4|_d#m``i3pKmgLx}H875nx!i5ccNp=X9PsyM^an>aX=B=BMng zBo;2vw@e%!$lr67DeSp~wwXCl7+@cSLOSY8*CU%AeY^Ho?za%mTVO7^X20OFER~}U z2M#NbPEw9=d0Eab!dXsT!aBllWz#ZRKG7ac+rLzlt_$T~M-|qE22nKaX@mTHoYfVy zgI})boqln)N|`Vi>=Mgys6d!?(Skhe9z4(6gidWlnFzkHhcl48LM%FGKJF}(Fw&Yl zb6ZaoZbaE!*d65~sDV)yQ#D@6gwaCz9raOMDl}Du`fzCg4x+_pNzIj*U$yoMN>HGy zvw*@t$+L*1Tie&A{SZU8@aHW#^bF<+$R%ebZ z6KUy`^I#p<=mlUPIyA3-X`((4s^xFL7FY0zz0z%C+0(NiuI`F1Okx(awrenLrKe6A zxk78)v-x#(X3tchXPOuUmNs3w_$hmGK6|qG)Z}BQx{@ntGYtO~LW%5_a7^7OZ@ScC ze79&JlF?nL^ajOKAm~oZ3Mdeu7#(d+9XFQuSNO>I@DHHD_RmJ+PWYsX6sxuqn7iFC zn25%+ir|WOrE$-C5?i(tYl)k8^RZ5hO#Nfp^7c9Zqo*?y)Dm3Zc-`aWH)s-_vnk|R8M&kRN5)q!?+UrR;NAq}WalWw1 zjMt2!7i!?$jDvrx*Yh1s^@k`Th}{HMa=+RyMkwREiqDa!;QXLEziA!ac#3n>iypi} z;mCccg zt)MbB;e5n^)Qb8WT-H*TTpf=9AFj;Wp7NFbl@JoKXZi}BQ(DFC2tX7rA5Ub8{fSgQ zj2;6ccGPU&G<5GTZ2hqFc~?DZvl0IJ$njGs1B;V@5wzRpsYE%F|eVV+N76M@A1JM|2oig4bNrgi)vX52pwF8H|~9{PLtDWI~d zvUs={F`D~VLXD9nJ!9(Mj_K&1ZMXqKfIM7)HRt2)+Rrvrd0`L1_kkdtn7g~XGbsu} zFA@z=u|T$#la^K4ZKxzZ_6&*nGj!LA5`|2gb*8}=&>Ok>QYD4|Z>~^dA&8^9l zD32ybj9=?*QNGLbAYA#%63{pDP;U9;cS@N-DPJA7~| ziP)c(@y?Nz{i?s@Wgv?7=`kaQATL6Y^cMg>eA%`uMMpoHzr=x82J5l5~)0wO0@PUEm z&Iccx^q&lgD==!Ro$o4NfXR3i@|j;3E|ceGvU&l~xWik;(^_-&g#e)h@V8onAFW&j zEE0=bvK$0awV7B+7Lh#YfFx-Rj2XCHa-Sb-u3+$?4dh*;W$OWP7~@+~qMzWq4Hv(Y zpWm0?GK&3E+51HZ_r=8VWwG8Nr&2o0nf@ew2AE7d9F9r+)L~oLx{+oN2=t8B^qA<+ zE#{FXDwXI*Iatz;E=F`H>C^x2xvaQOFM$W@3TTUEe}l{qj)JaqJ;QS{kv#slrtB4t z?E%slBFnLKsBI6m(`D`8$;#OhahHG7*1alUz-^B~Uf0E)jY~D%ASCeT@8wuC0%0!A zq+-1=KAK$NPYF!# zn7{=N#Ql@r3%L16yNgk za?8Dr#o}FT2pEkxo@Fk_{YMYtS@bU@KNXQ_Opf4pCL^$c!jHPaIUA}#0XFE&cow}i zwTNmaS+#MNSVw((`?}0~axngqzg8SmO8XOq1&WB4+lEY*GXlYfe=3%{A5qhhb)2p5 zPIH&(pFeNN^Ss9Nnk+0hy*iP@#Sg9R`K*GK%zt^GEQ>9`41G8@ey$YQCIVs-vVw}Q zhoYmg`~t5NKb-gGUL8evT=0_59%?0kRMyBVw*JD@Nt_vq@^02It5(pT!va`DC_WCTva( zlw9<4Z|bqXNwL95WbG_H)ji7dDX%)5aq6H`3;eexwVCP#pxLPC+<=xgZ>&{(k*j*j zLdZCmvA5(~B!z)$sh}oQBn6gmJO(d3kkPrjexI9Z25Q~A%&$g?-Gw<{seg%dJ<`5O zX>L@KFIZ-Zk`Bn>ny7WnA_4+mYP^P zhM0Tirrc|YjCHgQXYO({TXRg&+!ZNuAF8#;-HFMWb0%^k%FXCRxv41>B6B`HzK`kr z1>c{}Kk$CMKdfv!Z0LY-MEiqj(e0j?Bjx3XuJTXVd4)7Bie(SeB(LQuRk+{YvLz-m{}JYzWvrd$RoJ!GA`qJbJVmfPt;j7J_2rj3YXGXyxcOu0$QTFqFdJ~fMlNUI;On{j2>`b|z4 z$=4)_z2oJ}U~~)_c9k;@*c3qqYk=^AE)#7u*l%0%QZSOPL^D4CO+`XEod?=Z&3ibz z?-puKMim2k@O~SC7=?&9Kp(c+x$|`O#IQ4$IXTfH;MKE4=wwME#yxXXQUB|Yl|J2Zau{lDW`H5eWz_#qxM(5@~I9@5{q~ek{ zUTY%*Rkk&BOC0CgpNBIZ9#iQr)+g%L>+BK=#J=HNdXb$F|2X<}u&E|fcC(RUx6Hjx zsQ5!NDqw|3CG#UGZ#a~ zD9+EJMPJ;@|HwJ4Z&Z|>S>;(1D1A^`xC#3MQCkT(Z`dvF04_ID{lQ=Na4ApAzX%?< zP>SSEYmpnH1iMh;!$3o-bfT(t-1qCHzCHuyFGR3h8Q}NHIL@0619Y6H%EzSP%zePd zK938|Xr%~w70t3_s95ISmwivCXo>BcYf0^;fd67HHMnMY_evI2WuQqf_l84?eX2&fMlVQU^#ikFT3*}80D+t=?}17Tec z>QlVEW8-ZBO5FEWm(D=zE2@6I=F0NiVZtZLh%i8U8fjS`dr3>TyJWYIzvpsUTbqH1PeR8`A*eX)HtQ~2VaM9VIyqq+n z&%~w@o5dT?%m#f1AkQSkTMx9w(o@fiNpv_ zrU=&fz;pc>P}P>*?5||a+6psgxJiu}IcSoeNx!0S7GG0x_>;S#(t2=r$IY0q9v$Is zd@37(0d&>qKR;@&BV9ifUA?6Dw7VE7tyfMRXj0>KV1IIHM2_6wkx1J~QuLPEP-z@} zbvLjZoJ<}4HC z^HRg_cf=62MsK^I>b?~e>B0tw$#$I{vzhFqwS{NHxv*7_uX9#8p!S)qkvi5_8WIj~ zsIssKh$(tKQyxl$c$<6^OeztG=2z%Q9DYm~Qd z0_|zK3vJ3&;-C?s&HhybvndXhCkw7ls)K2f+a#H0G*FpNPUm%19%IMQUshoy3u~k? zwXu%TwyEmKN|6&W6|bDicgjgMdtdQgUkN3K;MNP1jb9S`XOrcMO%v=FvySJj03vI0 zoM9@w`8T*FhTQuLvmYiK^Y%t;w>8UGEAmX=pa=sfMo`g3g1V?~^zP&76f1)Qb`SHG z=g@-aZu8Bqf^0`RM3#J}(DOG>LqBTS=giysijiHdB(F=f+DBLHrG(WEP*}8yGN1w< zuO(KGtJ5u_*BsZ|F<-3hN#y5=TFhn=cNl~APaA_C(#k0)yXODNpoR48YQR)FiSK;# z6eE4b?1rR~xNvk55tWb{mnDZ06goy57F+CE-Oca7HjW)W!=_B7n>%LlJ#E42)f*u7 z(?|4*H~Zekew)-H&o-EZS8R`8BH!2r${;V`=N8^N+q;*JaI}J}_}Ow>!EQtuVW36j ziPY4C(t39D6oQqo=UbKz0XVJ31f^1uZFgC)1*lUzKgj3rQ|vDQsp`&zxQ@_NQ&Za% z0J>EZ6qB^Av)>I7aj&|gqSD_1S5W{(Yy1wzT}^lgvX{09d1&4xRqQ)MWDh{=iY2%| nmk_qY|E~0(O8@U%+LFUHtSvqkq~ro%JP`+stIgfxL23U0u*}>s literal 0 HcmV?d00001 From 4e8c843d6a8d344fdc1e84837404a1be96d7f122 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Wed, 28 Nov 2012 22:56:07 +0100 Subject: [PATCH 2/5] RESThub 2 release post --- _posts/2012-11-28-resthub-2.markdown | 108 ++++++++++++++++++ .../2012-11-28-resthub-2/spring+backbone.png | Bin 0 -> 20323 bytes 2 files changed, 108 insertions(+) create mode 100644 _posts/2012-11-28-resthub-2.markdown create mode 100644 public/img/2012-11-28-resthub-2/spring+backbone.png diff --git a/_posts/2012-11-28-resthub-2.markdown b/_posts/2012-11-28-resthub-2.markdown new file mode 100644 index 0000000..d2867c9 --- /dev/null +++ b/_posts/2012-11-28-resthub-2.markdown @@ -0,0 +1,108 @@ +--- +layout: post +title: RESThub 2.0 released +author: bclozel +tags: [resthub, java] +published: false +--- + +We are pleased to announce the second major release of RESThub! + +![RESThub 2](/public/img/2012-11-28-resthub-2/spring+backbone.png) + +RESThub 2.0 stack is based on **Spring and Backbone.js**, and is designed to build HTML5 applications easily and efficiently. RESThub focuses on modular web applications, made of **stateless REST web services** and **client-side state managed by MVVM JavaScript clients**. + +Spring stack +------------ + +RESThub Spring stack 2.0 is based on: + - Java 7 by default, but Java 6 is fine too + - Tomcat 7 + - Spring 3.1 including Profile and JavaConfig support + - Spring MVC 3.1 and Jackson 2 for REST webservices (including full handling of Object Graphs with cyclic references) + - SQL and NoSQL persistence with Spring Data + - Logging with SLF4J and Logback + - Maven 3.0 is the reference build tool used + - TestNG, FEST Fluent Assertions 2 and Mockito for testing + +It provides the following features: + - Guidelines for your project and configuration layout + - Project templates for Spring + Backbone.js web applications (simple or multi-module) + - Zero config support for JPA (with automatic JPA Entity scanning) or MongoDB databases + - Generic CRUD webservices (XML and JSON by default) with builtin Exception to HTTP response mapper + - Helpers for running web tests + - Easy to use HTTP client based on AsyncHttplient with OAuth 2.0 support + - Logging bridge allow to send Javascript logs to the server + - High performance and easy to monitore [RPC mechanism based on RabbitMQ and Hessian](https://github.com/resthub/spring-amqp-hessian) + - [Spring MVC router](https://github.com/resthub/springmvc-router) allow to use routes à la Ruby On Rails/Play Framework + +Backbone Spring stack 2.0 artifacts are available on Maven Central. + +[Reference documentation](http://resthub.org/backbone-stack.html) | [Javadoc](http://resthub.org/javadoc/2.0) | [Tutorial](http://resthub.org/tutorial/spring.html) | [Sources](https://github.com/resthub/resthub-spring-stack) + +Backbone.js stack +----------------- + +RESThub Backbone.js stack 2.0 is based on: + - Backbone.js 0.9.2 + carefully selected extensions + - Powerful Pageable/Sortable datagrig with Backbone Datagrid (made by Loïc Frering, a RESThub developer) + - Get and set relations (one-to-one, one-to-many, many-to-one) for Backbone models with Backbone relational + - Form validation with Backbone Validation + - Parameters support on view routing with Backbone Query Parameters + - Require.js 2.0 for script loading including JS/CSS optimizer + - Handlebars 1.0 for templating + - jQuery 1.7 + - Twitter Bootstrap 2.1 + - Asynchronous calls with Async + - Dispatching keyboard shortcuts with Keymaster + - Parsing, validating, manipulating, and formatting dates and times with Moment + +If provides the following features: + - Guidelines for your project layout + - Project templates for easy project bootstrapping + - Resthub.View extends Backbone.View to provide the following enhancements: + - Default rendering implementation based on Handlebars + - $root attribute used to specify the container root element where the view should be attached (since $el is the view itself) + - Default template attribute with context management + - Zombie view and event handler cleanup + - A client to server Javascript logger, a simple but lifesaver feature when your application run in production + - Additional Handlebars helpers + - A Require.js/Handlebars plugin + - A simple Publish/Subscribe mechanism + +[Download](https://github.com/downloads/resthub/resthub-backbone-stack/resthub-backbone-stack-2.0.0.zip) | [Reference documentation](http://resthub.org/backbone-stack.html) | [Tutorial](http://resthub.org/tutorial/backbone.html) | [Sources](https://github.com/resthub/resthub-backbone-stack) + +Try it now! +----------- + +You can try now the [example "Todo application" live](http://resthub.org/todo) and [take a look at the code](https://github.com/resthub/todo-backbone-example). + +[Reference documentation](http://resthub.org/) is available for both Spring and Backbone stacks. + +Feel free to contact us on [RESThub discussion group](https://groups.google.com/forum/?fromgroups=#!forum/resthub-dev) if you need help or want to send us some feedbacks. + +The rationale behind RESThub 2.0 +-------------------------------- + +RESThub is all about **integrating and bundling frameworks with tools, best practices and documentation**. The RESThub team works everyday with those frameworks on high traffic, enterprise-grade applications for their customers. + +That's why **we value developer experience** on those libraries and despise the "Not Invented Here" syndrome above all. + +RESThub is a two-part web framework: you can use the JavaScript stack part with a Ruby-on-Rails or Node.js backend; or you could use the Java stack with an Angular.js frontend! + +We strongly believe in Open Source Software, so the whole thing is available under the Apache License 2.0 on [Maven Central](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.resthub%22) and [Github](http://github.com/resthub/). + +Roadmap +------- + +Expected new features for upcoming RESThub 2.1 are : + - Uprade to Spring 3.2 + - Upgrade to Backbone.js 1.0 + - Bean Validation + Backbone Validation plugin : do not duplicate your validation anymore on client side + - RESThub Identity manager : User/Group/Role webapp with Backbone.js GUI (alpha version available [here](https://github.com/resthub/resthub-identity)) + - ElasticSearch integration + - Websocket support + - Improved Exception to HTTP response mapper (JSON/XML serialization of i18n aware messages) + - More examples applications + +Contributions and feedbacks are welcomed !!! \ No newline at end of file diff --git a/public/img/2012-11-28-resthub-2/spring+backbone.png b/public/img/2012-11-28-resthub-2/spring+backbone.png new file mode 100644 index 0000000000000000000000000000000000000000..a6a6f46d78c53c8cb33789704580c4879f08bb7f GIT binary patch literal 20323 zcmeFZHY#ob+szueD$ zuIt`^!259@$0WZ@K4i_DYt1>c)|!<_H5FM*bP{v~1O!ZZIcW_9gx8cWpF2#B$ezJhOwK12? zc7W(b#>B4k`fEf=gn!zq7NTI;cKDb$0@A91P8e4+9t>hQmE5fCu~{;#QLDsuH|0cJV+;_>ihx}{%Us!N#i9lB#u_d|((e4N6oco`W z9JttY7zT70q-TqB9RR}(1^KaPK;yrj4a>R&Qs+NqA$249~&5a zEtM{{o{5lsENcULj!D-f|GSV}sb3{`SIUbfi)=ix^t{py!5pS~vMYEhcI1?NyI1fe zUl1(7B5SRyM2h<5Uz>2kbAe2$TiFobYR|}lxRMhxx&XamB2MGuE6HEcY2N=G^&x*4dZO} z`!UBxj2v6S*f4h@Qob3bME-{`UWkj<6c04LN1ViPYgq5d2>Up&VgJqR ziCEFNZzdd^IKG`xcEx zXbN%MhAL1|_ax#r;2lzY47kXdmq)+S>~6i_aA9${v$!K06;bd18c74{%Sfc`B+eB( zhQg&K8Cd6P>5s_TBm&eu&)83j-~8S$pmdPKPP|S+&xgNW*+Rll4Bhksw_1V%0`-l| zbRL@!KSkI>01lNE_V%{6W@if*z`$?0jZm& zA=eVqj&eZ@WRgzzbS3kb-7=(5Eb(~QnB#~2FsF`KnxOH=@DkP2F+ZWd)=oTa#hW+r z^)ZUE^U3Y#qPo}7U1-5pV0OHJ_n#Jo;B9`8_SW9T2QC<2V)uEKAO#hxL2pyY=I~N_ z7*q5UbKS?p_e>0-WR*x5I(I)L_`s3^-}I)_HtAIN#yy!zlVcQx*qOCQhHnA*`^!9Y01e-0UqaNV8e-0OXLHXps(>YKINka6NB}_={V+$T?X473 zF{0R2`zSak;yx`L-o+M=$8=i>5P*MGLRIq_})lyf%T>J{jl+sdP;|+G#vIo2t)tZ@=iPpDLN{s zL$ z`n)1$FlDavglAO(lb+&(K_(cUQQ-O5;S-a33?^UaW(aCl?_NnRXq`E^!d!k^PkG zy%HPTp-=$KB;d%u805l-|LE;`(@GFO0oj~!vC|l$ASEBTUD!ha>LC~oP~eLaVt#7s z*K-p6|XL`KYh|=^MiF<1M{M^}DO5x?caX;OmaSn}GN#w_B4db=hMj zIeKM9Ut{6Z-%lSP4Xu2+x7&wC2NTXBW}@$UedcKxa1erL7)*&k$OdU2gMof%Tr=%z zp0<9&`%otFNgUn;G>}el+zQ2r1Kjeezb0O+9W@yW@F%V z+B~Xe^JFWcwfJHVh8884YP=*nLF%GW4(&$ap4gIU`&na-)OMT&UF`v5Vlgn9Bp0#28d>Vzo$R zcbi%1Tnv9NBy$6pPwUe(PcU&ZW;V&oZkDQNK;tW9?`Qw%f18In8x7GVMI05RDgKDd z$R-lVdxk4vltbqMe7=+IC*Ad=uXb;OO{pDD62o8^5O`vqy9|+X2f$nz^YHh}(%Fd$AA0gfG&jP9~}-tQUfjkKrje z^UXu5ipCMJ%oya?^8@0>rgSKz_6_*A_IxRuR%1TtVM~SC@{U`b`1UziNU0t&a&F1y zWklPI3zT?ThK7VI^73e?U6xZ$kvDh{02#+^t zTvLEOj{4l=MSZwqgptcv0VCw}_l%dMOkVsxNgP)TMC)Mfhm&TeZ{>8sVE*ysP%TZ& zop$(KLepn{A&ZD&yvGEA-&_vVcJ#H2loJk``hya zX#~tYi~e>I&3~l0&-~En;u!KIIa1Z!{JF)zfI1%lMatkwCu_LuWe99=?@GNhtb!Q9 z7;eQ|-FeRAC+ZRjyTCL1u-o)`aXlqYbYFB|MO0gdy9I6f7u)x(n*`^e5 zc>)WOlckFFtMwBmxVCS3a9mrWRZi3lzPY zCp9?Ka7-lq&%Bld-7F@5R%Sk|AE0Qu>-3r2GRU*^Y$#Z_MB!)G4B7X0(pJX}{3XNf zTppYtQ5ac2qLeNI|E=3NHwZxcX?*#B{V{Mi;wuXF^1cwv>PZJFb(q6p&PXHznSCWa ziEic1yHu@*2~~?f)xtFfj-Jgh3*?#Wqd$5P1Z^eC0RugwPO!8ry42V=gYg^rAB7Ck z2mI|QO7r&k^v^jlAf#(uzs4ot^2Mq3GaZb^i?jkO;UVmXVwYb5E0C*=EUE4T#lV%~ ztr|Etm^glN-L!!#)kdQHB(}UOg)6wbp0K8^m_a~WQ&-;@tfl4qv3d8Pc&vn2!&o@^ zbhRYrI1SDO1LJHfz_b%?8z$@X%WFKzu0+U=+-dcL`1L6~NA9P90lvq43ug~!gA|9X zhP>LpTx?oL zw!1xLA$yI7L0O;87^}qyxf#eMP|AgOifQw8uocQ8uOAxgno%u(vdM#!{&D@N9eb{_ z|AV1MElY+-jipyd_Iq#9jL+KQmp)Yf<@q&ZPlthH8&UEs=PiPs3pUSac|V07e^?;f z0av6LIts`Aauwm5;r%*{mQvuuAfrB=zIa3}DDR)AYCYGCZu{AQQz;AU$L3rq50RKU z(!VaIUEMY&nYaB<&xV0=&Gb6W;@i$Ic$nrn_n)yHVBPpLNH(8-Q5FT!9#6OBP4P=> zjCpK|I!K}rCVfq7w&t^+_Osx2r4D?7WF)JEFEd+&$`P8yPe^ zbO=$mximRG3)ms<+HhMoV?g%sI1SbH&X(1Bn2c49-TypPUgPHM9@Z@NltYL(+PTc$ zYjJ9TnoG5y?`m?vA3lktqhX{5(Ehp9wgRV3e%hh8UdqdyeKfak{u}D-me$s9wC{VT zF*~PdqzvDeTxCjL8+jMjL$EPI`G@(P^LYzAFXkq__G*Ika5BhcQ@yA}xp2jq_U)q83 z`*$jEigCZFSD{XBWt_DQqdU)T>dhgZ1ew%4 zwtCc!+NK;gLb}~UBdht6pH4r`uDRYTQj>NXdUCry(tCz}Gmn zwYSV8$~*m;x%$KxSiTk-bch+vsMiEGC9zT_eH^);dwMs2Ye3xKZ#!vz4nZMhY1Ql| z+1J<+P30-TV5Lb_I%~zP+qm}9TRbDerR*gX&^1yy$w~V2=xBb!mDWaDqRrRP2z&SL z=UZJFkCJsax_33^vEzro@4ijmne<*xbggxXjj$XR&j#Zg-xmqrP}~T+{@Cb7>#C2U z1@Hgz?i1ojD8u-ZFB?zhK2|^BaYJNQ>{t=XZTdTch|guoXi><9Fc?T!TU~Mc_fOuF z!!O#UzcM_m@NSqtGtC?$bm$vThnIy;bm@Qn0_7!kF>lz{VlXX@(|qkU|VuV-&> zjzpO+#l55F0#$H9{#>~4)2?hiUGF}>SkNJy5uEbnfUgc8Nyh`8(MU;w2O`kp_PKk6 z_r7w#E0jM==q_9e$v7Ao5|sTt;nKk6$*86?E|jbdQ;{;$F;X#i+AdkRjE?nJ`&(Mt zSfWZYF>#iE6lFCSD8=56kIK!vtn||;Rd4R%5PVGUG40qAMd!uxd!w>sZNG(f06d)6 zG4Dzz$FiZ*v*BjEax{69NqYLz`J{+L#*VI>CBEZFGX@&uVcqozF?t&+R3Kmoje~nk z{Mk4trG^GZP224wOvQo*m)XdEYOm1T;UB4yK{9vOc#SzR~zUitl-f zp&mwU3B(tYFrBtER6skYIlvW=q*FdpH*v%|*2p4D!`)X6Dr^#KJ&RKw3jy=? z(0COscG4+l0SC&4pO|{Wf9x$WgAY}G@;ZMkwtfm}XBx1}I`}rFF0CrUX;R^ z#^P425=s2vM-4lS-1X<5;o7O}_g;L!x2i&UT}LSNHKps_nS`UVM{kU>GNqGRzhgg} z!Vw!Up9gJcmYtqO;fL`khNHr$-$-P7wT=P7(@v&ybwdrv+EU*K5@%DKht1ercb%7_ z7?-~F|G=Z_8iYpRa5!wku%i_fX2`~WR|}d=>V=Y&QDofbM3E9TA$wTsRn-v{&rHo} zL`fw#YDN|{r=Bays_1n!eHLI1l(!J8KaGzg$o&KrtkH-dMp4@PA|94_Hf8*-lNv&+ z|3UnUNkb5+;w`6ReZo&p9rg0XOiYZ2M!Ex|b=sjen8F|q5KCpRS4-tdBH!QwSG5rp zKr(kLFiVC~#m3IV0dnOkb1}CybuzA$gVJ9)>VKnzhMFEI<|QO{d_TCzHg%!;GUFZJ zj=3@2GO5#p_5V@dMsIcuYZnysa zU4T$TzxOsFdHqxv*-GNzC?X=`YqqOQ-53i?2mGP)9l!j>+qog&MhKlr;D|D??_yMg zd1*S4Zfb@A)Ck|XcWqlP`e6J#8)QOKYT&6v1tSbI0=*|ZJsy5f@$k3nm_k98h&kfZ zu0XqDmyPeZuPW-K_@B37$?n|b*AQU7nvgv%$Z?LISjCe6*#zBqs^j2BhH+YhV4tSX< z3vT%pk*BOgApRsQYJE=!70~}p4eMA}Va!`VKo+X6x6I7g*OKH+NI?CK7sZCS8J%Pn zDb}n;#g~HC!(+hx;>7oH^NY>w9l7Y9#AwKvD{$X_wr;%bhtP@O%-(7Rn{F+z;*zZY zhWV&BR*C4BxLuQSb*F%y6Jpg78$L(}m?UH8>@og5B|ep**#k)@z96Jl5Sf^~)sXMm zW$7H1Dpflg--Qu2ZF~-To*;~vC6i;VtuBMnT5rafw6C$jL7xR&MyMye7X0RR^p--E z$Ap&Sj6zA$PJK+~2zB=tlElwF!VIZ2;MBzPit1ee%)nI7m`2Tyym zidiiLY<>YsMjdK<>=F0X)vo!Py<~DO8H)U7UdQq&6!)%QK`B5f0MBn`%I1LiR9j@I zu$di#p(gAwhwHDuR)XHVgPk%=ziRqdDIexgVBeCs9 zH_#F#eAF7yrF+u)rkCK^DahwTB+(T3w<{2)pr#u{an#7tzL6_e>%hlW@foe(OQ^C| zX0n4IZQ#w8*~kaSDrM8Ar4qW|Am%{-9a$L|`~94au3FGX0}0cPdi_%k3SlX}3kE9s zwso@*#a<@!`{Fz{TEg$|2FuyZ7$$^y&2oj!Q_Gtl?$KEy<0E!U11FE0T23|qd7bu~ z=F^DMc9!_0O@NcU{Bo^653o!)~eaDQ~WfRAz@3hsndp^UV4>!A1tH50+aJDpMbtn)Mx(x_Sq&W&P6{jD93kx-JDg>+HJj_i{` z&e5pp$Qi6)x(+7Nvn*pBoXDV=1tND;Z|Baa*$)1wZ zFH4d*dua+;&*!F)ZeOQpoTaFTnUXU}<(?`}jMOsl;CA8kp0Rq3I`-1UKTJk>_% zH@zsE!-N6!!`b8c>6JWgAqz%Pg@@wtaK!6^uJhL+g}its&!Cf%R6G>SyWl+7-!RGk zy;v9~OC+~xs0>Cbq)nse@7`ikH(nl1KQUG3>5JmE(WPz;&@*~QX#%UIuH#r~ELPCl zVBJX~{hS70c4bS9Oov0G$HGVM(l3$0fxQO;zx^4RxiV@=6-~V;bjYUXH^h0sGRui^ ze$0r90l|L&&`jo0jcs8`4wBF>7(JbYJIcXVb6h5kk5`M7>`6SE6UKjgN#Viy)Yc{{ z0N+Gr$M(H<4R{H3*Yo}Pxd2!2 zIjCMajJ4AUrSV|l`Cg3mxY4v3Ivgq$YlX(&kXhdT?$ja;5?4QNA&>q0WICrD^xc0) zcPcDuy3C=3L-TLRYv!+?S3PE0Dnak|^Wc7GS4kZ_!{|ld)UE#{Ys)IG6mc&gr_!7Z zo10lSPu7ez&e_fzk)8DFFU#0!&`@fqJII@!k*o54P(adAwi;Osf^+7%?kYo7frc2* zCg>Xdym(1Vi~+|qaK?P_S;Vk09Xeo`Id^!0mJBywmGn*dxuoT>CDr=tNsykzvV2eY zrm0lv>L0d;ByPi3C1T~Ph^izkE=TU0{XpK28oDJ4cHGzP25B)tNmi=FE@Y{lix&f| ziYj6crZ#pe^_!~QV!@mSVe5xAExUFo6L;a^?(!4aidZ<~9ULx%1P~nt2$BsSNsUq& zdS+Z_!8_f-4dL%67yHfK6AW{|0xDN*g1pHDrUBJIgwVpPib5I}e2O>5d&#k7R{TU; z`~5;nm_bbpqow$Yy|Io<(nxBalVI-|%==*BN#f&^j`OkuZ3TuB{lGUrCg`455^GVHbwkGN z3+foZ_1*-LYX$i`5`uJ`s#2X9{94nLVGoAp!+dhQmP{&n3+@|LwYvl3Vr3cydk{A; zd(1jX*kM6xNh0Aul83@I;Llp5RdP4HCIWCpF@Mx327b}wbfioN_C<2-T`KCCXB1+z z$?CRyGAabNkfMiegn3p9>=@a5B2*6=VNSj|8%6FhF78JE+JXKZ&@%5IXE1$>nk1w< z;6XJ}+2@uke@V`M$X84UtOu$eh94wf(FOU_Zl_)xPm$>#I$W2UJ6|cK{$^(ixckwg z+=Pxx&J+=T4$q!0QYa;-jk>M<*HJ%?jyU568g>vO`dj3ZUBX(PJ9QE{wdITXpg&-Poir1&&6okBfNZZ*I8Th{9vs-@?KBYg^`u^wZKNjl`us0S@V=f_Y@Ro;abj*taOw*ckrd#kDvlB_R5pRF)FIh_iY zk#t-tOTJcM0On16teBEx7ECN(SXt#TW6Ey}F&eAa$2W3(hYEe1ZK&vjlwIEH9Pj{t zGAvdyRrJ1wK;%;Wa~oJ428>WDSRO8N=vEZ`Iv;11*NwNNIftDJD@on*>+z|)r6JWg z47_QmOt9?GdTdg@KV;dUYFl4m2%6ydndRMEO+3A z$ydXplZG)+b|-k{6!4NJZ!kGZqd3eFR+-C?GfC3f+yL_w&Bki_L5O<$@lQSF)PWVX z*!o7sDLRG$L{oDQ)r`=6(*1E-VZt<1wHMGAnQf!oN;ciL-dn#Q>)(A~QhR#`uU{n) zdqnEuIB372IBDnmL0g?Z_#dCX@lND$d8PMQz_rpsr-$v{7Z;P7)3y*HsiVi%5%G%8 zN?%lmuv5Cjw9JO4>Gl}HUA&Ka}DU>k6UQYEuulH4FLd8a53vzD(73L%p^)XlNTZ&6{-M(rEVD^Y7E{<5h!bL|7DK_f7@ zUp0f9nk7@iG2p25lJg=4VBkqJKRD9{A{XBz0^otZ+U&oLcPprVGf6LTvWDNaZ1+j4 zOGmrQQT03sAOd*Fv{yvR$h59Uwx3xw2);bB&Q(%aS8gBG^h*xB z^dnIe;-<7ch*CuaP-Of5T@MPuQsQN>b+l#dP)MwCo|#?nuf{OxCRLnArN%d|zmm9` zrq=WL14E9kOisL+599t0ur-*&t zWpcyRxxDd6Uvsle`r9r~+9>0#ZphI{c@5U`{Y@R#OWXmhYbChsMKDM&v?#hz*iG%b zUsY1bkl=X%R*06104lmf#qpJMqr7B5nlGV&@J!EF0UiWQT1@_oPH)J_ID)>iKnEQ0(J87Lu+7j2+DY-B%+_R_s6g~CoiB@se%5jl)d%QM?K zb4Hg72dChzMYrGJPaDJww|4R~A9yqBZ)>b0Zi@-iP$LIoN2Ye8msGN^2t{gssNSFV z%wy-BW5r)ZMP0m&KYO^%pM^X5qW77i@*pW)A6zB5h<~d+kzQ%dYR8g!xmsh@sQ)`N zzXiZ3SG9tj2!rjMe8Xy^3BZV&E^PiY_0{|Na~Udt_@;+iTE|NV?kaVHr=qU=xow6R zG#Ym#&p02zPwhHoNmZkL(_@`MCxe;uSmiv0zSM0uFjp)~N8-TOKWX1AY~H7PrW;kM z+xgsj2_Uy&#jOvl`kTw@X}8=+8UAc$4A>V1rEW$~%gU&yoEpiE?s4x2-vC(61>Foi z3{B4(zL1X$GrOmXM|a~jB!z!Tiee>fEi!)VMwgl9%=xuMrqVw)T|OoZ3WrDJv`7z$ zu}8ICQ9-${wX>4XvYe*|**#wa^-8^6u2d@2E1PS&3w@1L3_kIe%x{c%SFWmWRD@Wz zp~s)aMHNZ8v}5I+-<^HAaag&FF+Q2~i|b*Z!r||)o#pQO5VAJXeDgVvuj_{2zkc%A zq7cUEV~7^clB5%Hd@FKz9Kaw*#(%py?ZCmySGic~2)r6X?{#-bw{E6YelH z3XNU$HRw)(yN7YdSlNLZC<2HwJlrwp#}FhI1b*eSRjuk=){R$<>@QnSVj{)cFfxFC zbWyV|2MouL#Rwy@G4UYWg8XN}P7P|aPULHTpvXcZYAaet%%+Lw>afxyoFu6bT#mRU zwev@7DGx92a=lPv;6PLvvf_?K zKOgT=QTiPhq-69Q1HJxsZf1T7YgfAo$U%(KN57lVNPRJV#{W3%eKIt;97KNcw2A%r zFySv-!y)`}cID&rN>Eh6Ah%TQUdSMLLfYh+a^;6d7z`SOL zHys6Lzzo$=s?>jjq}Mh|qAT(%Md4l_)--(dtea) zSi!eI-jru*wo7=e)rR7jx3KvczvGhT{%;wr;bvaOA|$3*aR+}qM<7U0@Yt_!+rj4zQPsisyg+wYy!!d&9)&Hh;gRsC ziJEU%_o~Z}y54E{J6|yrsGW{z-{vcf$tB&U>ZRm&3tD(1PwT6i^XESJkWu{O;DF4vV8zf*J z!xbw($rTPu_~ns0@Q)r30wX%0GEK>XNi;^|u-VqI=`y6?DYrM`qn7`bMi94Uph^_8 zvXN=UJC{REYv%VOm5v^T>Wvu!%MsQ4R0D>>y|RvoV7K%<`w}O!my{5W%Z~)vd!OeG zw}AV>j%N;9=wyj^*vFXBG8D{{R`pZg&r z;c4wE3W*hYb@H2(SY1h;ojCD9Wna0PffXm zVqILjC!qp6oapy0pFLRHU@Tel9WR@gMlPf2jX|j)9!PM4$Bi` zTzaZIUAJ``ilK#rX!pTt7YbpmJ&~b4G{M@{6Y=T~g&%lg`H3~c*So37<+YGf*FzZ& zc%$Oc{B8?`G_a!FzF1)wH4JF8hKrlmut5ok`3UHcr{h{>&PK`o4Nl{;U@GP`S?2ks zdfOxs0lcWE*T5=zj=+>6|2gFf@AZV;6wxs;CM~_XF?gNP!t?Z?SztNwsN;2y?_Nd$ zt=ET}z0(%e`<_?isITtP3by1S^+y`Q`$n52>)i+u1R5!#A?T57xW6KYF>Ij}=Jxrcj z>l-DsI7)oSz<=1GQ6n|R9nSjxtw~t|cSk`>&r#2>FA!~&UqW{cZ$(N;A0$Ij3sqSs zYoA6oZi;f^2EAhV-A~r${CdrW$YYNESGCHP5{=v9kjVsjC^-Yy`=?^(b-lp4RlqM( za8&{uz_y*G-6;4FSw-En;$o+ao0tI9zLTL)au{7o<3RbMx3yt9A1fZJ=T2{8ADzTC z1We4- zF5AiB(D-lf?08v#~ zsxpdoFpte5BV17F^6hmOAG6XLD%?v4@NSibHvdGtt8K-kW3CmEg@x5;JiV+;l*@8t zsHgFZTxxX!?xR%hzS!+vaDz;|x6@M$`*IN1`LE>zI?3OE`Uc^`)yD=llZ%c_qEUC< zeIKaiH$Dp?&&2MN)}DX_Y>#>$b+7cEdaGtxYSh1O6WCmv+^q(;~=Vfb6ntI6JN9h;lBVYi6_3{QtWV0>zJRM`KDKdCwBU#ygDtst4TYE}0>09o| z6rPViAaea(z01cE*K9(3yLqm9yuT2?-p&&C35VKRgx}Y?EB_V_!uC9*o}z}L5{NC? z&)+lU?05(F|FH%T$_O&*5z;**Q#)DhZ8>g#SLlWxR4K<7)8J-Jv4S9F^IGXI``eU{ z{mN!JW76L-LIYX1LIR$~zmE2H0aXF%ChXrY#{tW;`}|`&!;azU`(-PxWVTeIm;9U@^M*Ntm??zI|naLd{Vf?YmXxfAb z{Be?RHlgf+mBctFy_!guq5qGa|HD+#?{b?TG8}eZ?Ky}JOYAHkj3=un3cHsv5bppO zpt~b~>q^7(=?CMB2j8D(2W=lsdu$%D`^LsQU|ah0!Sy37V4g6{*eexB@+$~8?<+b@ z0-OiRDp5g3*s*>9)JhvFSU>tk0@z{x;!=hS?4|dsVmDXg9<||m5v@6|7262zmI7DR zHqd^J{unMLyc_KwgWJPqf2TLZqx^JX2>qlMlg^`c?N^2YpqC&}J!lZD(BzWeK?4R` z@!(s3N+6klpaX!fzs$M5P~b~8B{0>P-zkX)Yaj-C_ijP!-8DVnU|4@ll9>oFKjb2B zF@GsqM4i<4z}gh&3-YmBnvSrF4FHXz(vv4tV?{;@S6E~r&y465Xaswh?$kcaHC`=Y zY6Lggj}ufO9;|18O8jRO(@=Nf{K89yhvg_1o1!TzV@Sr=byort){dEIPzX1z|L}cT z9n)_bOnr?q!6pWyY~_{2JsRnN`94Oqyo$7<2ouxL~v!3HX_ zrDy}XdplKP*LxAF1k~0Z$IQTZ1en6;ul=Ex$`UrD*jU)QEbyX& zAiN1fTeD8DB-iGx&Kd51q~!)vul<((x{3b^Q_ttGUL;(o1bg!B&`KO3 zIM1Ldrgw_LN|o-4sG(c`c^~qslm38!75C|Ovf2M@K*Ozwx@n@kUH=%49?3Ea%h|es zXdbIemx}ReA@)pF4|_d#m``i3pKmgLx}H875nx!i5ccNp=X9PsyM^an>aX=B=BMng zBo;2vw@e%!$lr67DeSp~wwXCl7+@cSLOSY8*CU%AeY^Ho?za%mTVO7^X20OFER~}U z2M#NbPEw9=d0Eab!dXsT!aBllWz#ZRKG7ac+rLzlt_$T~M-|qE22nKaX@mTHoYfVy zgI})boqln)N|`Vi>=Mgys6d!?(Skhe9z4(6gidWlnFzkHhcl48LM%FGKJF}(Fw&Yl zb6ZaoZbaE!*d65~sDV)yQ#D@6gwaCz9raOMDl}Du`fzCg4x+_pNzIj*U$yoMN>HGy zvw*@t$+L*1Tie&A{SZU8@aHW#^bF<+$R%ebZ z6KUy`^I#p<=mlUPIyA3-X`((4s^xFL7FY0zz0z%C+0(NiuI`F1Okx(awrenLrKe6A zxk78)v-x#(X3tchXPOuUmNs3w_$hmGK6|qG)Z}BQx{@ntGYtO~LW%5_a7^7OZ@ScC ze79&JlF?nL^ajOKAm~oZ3Mdeu7#(d+9XFQuSNO>I@DHHD_RmJ+PWYsX6sxuqn7iFC zn25%+ir|WOrE$-C5?i(tYl)k8^RZ5hO#Nfp^7c9Zqo*?y)Dm3Zc-`aWH)s-_vnk|R8M&kRN5)q!?+UrR;NAq}WalWw1 zjMt2!7i!?$jDvrx*Yh1s^@k`Th}{HMa=+RyMkwREiqDa!;QXLEziA!ac#3n>iypi} z;mCccg zt)MbB;e5n^)Qb8WT-H*TTpf=9AFj;Wp7NFbl@JoKXZi}BQ(DFC2tX7rA5Ub8{fSgQ zj2;6ccGPU&G<5GTZ2hqFc~?DZvl0IJ$njGs1B;V@5wzRpsYE%F|eVV+N76M@A1JM|2oig4bNrgi)vX52pwF8H|~9{PLtDWI~d zvUs={F`D~VLXD9nJ!9(Mj_K&1ZMXqKfIM7)HRt2)+Rrvrd0`L1_kkdtn7g~XGbsu} zFA@z=u|T$#la^K4ZKxzZ_6&*nGj!LA5`|2gb*8}=&>Ok>QYD4|Z>~^dA&8^9l zD32ybj9=?*QNGLbAYA#%63{pDP;U9;cS@N-DPJA7~| ziP)c(@y?Nz{i?s@Wgv?7=`kaQATL6Y^cMg>eA%`uMMpoHzr=x82J5l5~)0wO0@PUEm z&Iccx^q&lgD==!Ro$o4NfXR3i@|j;3E|ceGvU&l~xWik;(^_-&g#e)h@V8onAFW&j zEE0=bvK$0awV7B+7Lh#YfFx-Rj2XCHa-Sb-u3+$?4dh*;W$OWP7~@+~qMzWq4Hv(Y zpWm0?GK&3E+51HZ_r=8VWwG8Nr&2o0nf@ew2AE7d9F9r+)L~oLx{+oN2=t8B^qA<+ zE#{FXDwXI*Iatz;E=F`H>C^x2xvaQOFM$W@3TTUEe}l{qj)JaqJ;QS{kv#slrtB4t z?E%slBFnLKsBI6m(`D`8$;#OhahHG7*1alUz-^B~Uf0E)jY~D%ASCeT@8wuC0%0!A zq+-1=KAK$NPYF!# zn7{=N#Ql@r3%L16yNgk za?8Dr#o}FT2pEkxo@Fk_{YMYtS@bU@KNXQ_Opf4pCL^$c!jHPaIUA}#0XFE&cow}i zwTNmaS+#MNSVw((`?}0~axngqzg8SmO8XOq1&WB4+lEY*GXlYfe=3%{A5qhhb)2p5 zPIH&(pFeNN^Ss9Nnk+0hy*iP@#Sg9R`K*GK%zt^GEQ>9`41G8@ey$YQCIVs-vVw}Q zhoYmg`~t5NKb-gGUL8evT=0_59%?0kRMyBVw*JD@Nt_vq@^02It5(pT!va`DC_WCTva( zlw9<4Z|bqXNwL95WbG_H)ji7dDX%)5aq6H`3;eexwVCP#pxLPC+<=xgZ>&{(k*j*j zLdZCmvA5(~B!z)$sh}oQBn6gmJO(d3kkPrjexI9Z25Q~A%&$g?-Gw<{seg%dJ<`5O zX>L@KFIZ-Zk`Bn>ny7WnA_4+mYP^P zhM0Tirrc|YjCHgQXYO({TXRg&+!ZNuAF8#;-HFMWb0%^k%FXCRxv41>B6B`HzK`kr z1>c{}Kk$CMKdfv!Z0LY-MEiqj(e0j?Bjx3XuJTXVd4)7Bie(SeB(LQuRk+{YvLz-m{}JYzWvrd$RoJ!GA`qJbJVmfPt;j7J_2rj3YXGXyxcOu0$QTFqFdJ~fMlNUI;On{j2>`b|z4 z$=4)_z2oJ}U~~)_c9k;@*c3qqYk=^AE)#7u*l%0%QZSOPL^D4CO+`XEod?=Z&3ibz z?-puKMim2k@O~SC7=?&9Kp(c+x$|`O#IQ4$IXTfH;MKE4=wwME#yxXXQUB|Yl|J2Zau{lDW`H5eWz_#qxM(5@~I9@5{q~ek{ zUTY%*Rkk&BOC0CgpNBIZ9#iQr)+g%L>+BK=#J=HNdXb$F|2X<}u&E|fcC(RUx6Hjx zsQ5!NDqw|3CG#UGZ#a~ zD9+EJMPJ;@|HwJ4Z&Z|>S>;(1D1A^`xC#3MQCkT(Z`dvF04_ID{lQ=Na4ApAzX%?< zP>SSEYmpnH1iMh;!$3o-bfT(t-1qCHzCHuyFGR3h8Q}NHIL@0619Y6H%EzSP%zePd zK938|Xr%~w70t3_s95ISmwivCXo>BcYf0^;fd67HHMnMY_evI2WuQqf_l84?eX2&fMlVQU^#ikFT3*}80D+t=?}17Tec z>QlVEW8-ZBO5FEWm(D=zE2@6I=F0NiVZtZLh%i8U8fjS`dr3>TyJWYIzvpsUTbqH1PeR8`A*eX)HtQ~2VaM9VIyqq+n z&%~w@o5dT?%m#f1AkQSkTMx9w(o@fiNpv_ zrU=&fz;pc>P}P>*?5||a+6psgxJiu}IcSoeNx!0S7GG0x_>;S#(t2=r$IY0q9v$Is zd@37(0d&>qKR;@&BV9ifUA?6Dw7VE7tyfMRXj0>KV1IIHM2_6wkx1J~QuLPEP-z@} zbvLjZoJ<}4HC z^HRg_cf=62MsK^I>b?~e>B0tw$#$I{vzhFqwS{NHxv*7_uX9#8p!S)qkvi5_8WIj~ zsIssKh$(tKQyxl$c$<6^OeztG=2z%Q9DYm~Qd z0_|zK3vJ3&;-C?s&HhybvndXhCkw7ls)K2f+a#H0G*FpNPUm%19%IMQUshoy3u~k? zwXu%TwyEmKN|6&W6|bDicgjgMdtdQgUkN3K;MNP1jb9S`XOrcMO%v=FvySJj03vI0 zoM9@w`8T*FhTQuLvmYiK^Y%t;w>8UGEAmX=pa=sfMo`g3g1V?~^zP&76f1)Qb`SHG z=g@-aZu8Bqf^0`RM3#J}(DOG>LqBTS=giysijiHdB(F=f+DBLHrG(WEP*}8yGN1w< zuO(KGtJ5u_*BsZ|F<-3hN#y5=TFhn=cNl~APaA_C(#k0)yXODNpoR48YQR)FiSK;# z6eE4b?1rR~xNvk55tWb{mnDZ06goy57F+CE-Oca7HjW)W!=_B7n>%LlJ#E42)f*u7 z(?|4*H~Zekew)-H&o-EZS8R`8BH!2r${;V`=N8^N+q;*JaI}J}_}Ow>!EQtuVW36j ziPY4C(t39D6oQqo=UbKz0XVJ31f^1uZFgC)1*lUzKgj3rQ|vDQsp`&zxQ@_NQ&Za% z0J>EZ6qB^Av)>I7aj&|gqSD_1S5W{(Yy1wzT}^lgvX{09d1&4xRqQ)MWDh{=iY2%| nmk_qY|E~0(O8@U%+LFUHtSvqkq~ro%JP`+stIgfxL23U0u*}>s literal 0 HcmV?d00001 From 944dd40f8a063f9abe0b5c6216e118b6ca70e4c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Wed, 28 Nov 2012 23:02:47 +0100 Subject: [PATCH 3/5] Update Spring stack doc link --- _posts/2012-11-28-resthub-2.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_posts/2012-11-28-resthub-2.markdown b/_posts/2012-11-28-resthub-2.markdown index d2867c9..498ce56 100644 --- a/_posts/2012-11-28-resthub-2.markdown +++ b/_posts/2012-11-28-resthub-2.markdown @@ -3,7 +3,7 @@ layout: post title: RESThub 2.0 released author: bclozel tags: [resthub, java] -published: false +published: true --- We are pleased to announce the second major release of RESThub! @@ -38,7 +38,7 @@ It provides the following features: Backbone Spring stack 2.0 artifacts are available on Maven Central. -[Reference documentation](http://resthub.org/backbone-stack.html) | [Javadoc](http://resthub.org/javadoc/2.0) | [Tutorial](http://resthub.org/tutorial/spring.html) | [Sources](https://github.com/resthub/resthub-spring-stack) +[Reference documentation](http://resthub.org/spring-stack.html) | [Javadoc](http://resthub.org/javadoc/2.0) | [Tutorial](http://resthub.org/tutorial/spring.html) | [Sources](https://github.com/resthub/resthub-spring-stack) Backbone.js stack ----------------- From 352d9d904b6c377e25ef9ad2a31fe3ac60e97c03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Wed, 28 Nov 2012 23:42:23 +0100 Subject: [PATCH 4/5] Fix todo url --- _posts/2012-11-28-resthub-2.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2012-11-28-resthub-2.markdown b/_posts/2012-11-28-resthub-2.markdown index 498ce56..a59cb03 100644 --- a/_posts/2012-11-28-resthub-2.markdown +++ b/_posts/2012-11-28-resthub-2.markdown @@ -75,7 +75,7 @@ If provides the following features: Try it now! ----------- -You can try now the [example "Todo application" live](http://resthub.org/todo) and [take a look at the code](https://github.com/resthub/todo-backbone-example). +You can try now the [example "Todo application" live](http://resthub.org/todo/) and [take a look at the code](https://github.com/resthub/todo-backbone-example). [Reference documentation](http://resthub.org/) is available for both Spring and Backbone stacks. From 3f854b5d7223140a163b9110e0402c5b369bc460 Mon Sep 17 00:00:00 2001 From: Baptiste Meurant Date: Fri, 30 Nov 2012 16:33:08 +0100 Subject: [PATCH 5/5] add populateModel description --- _posts/2012-11-28-resthub-2.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/_posts/2012-11-28-resthub-2.markdown b/_posts/2012-11-28-resthub-2.markdown index a59cb03..b2be72c 100644 --- a/_posts/2012-11-28-resthub-2.markdown +++ b/_posts/2012-11-28-resthub-2.markdown @@ -65,6 +65,7 @@ If provides the following features: - $root attribute used to specify the container root element where the view should be attached (since $el is the view itself) - Default template attribute with context management - Zombie view and event handler cleanup + - A new populateModel function that automatically populate a model objet from form values (mapped on element names) - A client to server Javascript logger, a simple but lifesaver feature when your application run in production - Additional Handlebars helpers - A Require.js/Handlebars plugin