From ea19db4d328f3b1eddc5287ca0a87cd3684157cd Mon Sep 17 00:00:00 2001 From: i5ting Date: Thu, 29 Sep 2016 09:04:20 +0800 Subject: [PATCH 1/8] lazycommmit, please ignore --- README.md | 2 +- preview/README.html | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ccd28d2..6b02dcc 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ https://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=405001493&idx=1&sn=f0ecab9 - [6月18日北京 野狗Meetup技术沙龙](https://segmentfault.com/e/1160000005694214) -如果想邀请分享,请邮寄给我shiren1118@126.com,如果时间ok,我会尽量分享 +如果想邀请分享,请邮寄给我i5ting@126.com,如果时间ok,我会尽量分享 ## 主要内容 diff --git a/preview/README.html b/preview/README.html index 7454365..fa213b9 100644 --- a/preview/README.html +++ b/preview/README.html @@ -154,7 +154,10 @@

全栈工程师之路-Node.js

如果想邀请分享,请邮寄给我shiren1118@126.com,如果时间ok,我会尽量分享

From 6b79beff75136a60c7d780693dfe8faca1d4a1cf Mon Sep 17 00:00:00 2001 From: i5ting Date: Wed, 26 Oct 2016 21:27:15 +0800 Subject: [PATCH 2/8] lazycommmit, please ignore --- README.md | 14 +++++++++++++- ...70\210\344\271\213\350\267\257Node.js.key" | Bin 4833319 -> 4833384 bytes 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6b02dcc..24b748c 100644 --- a/README.md +++ b/README.md @@ -929,7 +929,19 @@ https://github.com/moajs/moa-frontend 移动端分 - native原生开发 -- hybrid混搭式开发 + - hybrid混搭式开发(比如cordova) + - 组件式开发(比如rn) + +面临的问题:native开发是姥姥不疼舅舅不爱,非常尴尬,很明显连培训出的人就业不要工资混经验就很明显了。另外领导们也都在惦记,能不能用h5写?这还算是保守的,如果直接激进的就直接上rn了,那么native开发的程序员就变了 + +> 一个写插件的程序员...招谁惹谁了。。。。 + +没办法,认命吧,温水里舒服了几年,也该学点东西了 + +- hybrid或组件化开发,你总要会一样 +- 无论哪种,你都离前端很近,因为h5或组件化都是从前端走出来的 +- 组件化在前端领域先行,无论借鉴还是学习都不可避免 +- 如果没时间就直接上组件化,如果有时间就好好学学前端完整体系,最终也还是要学组件化 原生开发就是iOS用oc/swift,Android用java或scala等,就算偶尔嵌入webview,能玩js的机会也非常好少 diff --git "a/dist/\345\205\250\346\240\210\345\267\245\347\250\213\345\270\210\344\271\213\350\267\257Node.js.key" "b/dist/\345\205\250\346\240\210\345\267\245\347\250\213\345\270\210\344\271\213\350\267\257Node.js.key" index 7a71c71cb09ffefe0f40fc892e111816678e99df..4356964d8435871aa89e55c8c77ea0ff70bee3fa 100644 GIT binary patch delta 41570 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 KZ9|hMP#6I02+dmn delta 42311 zcmY(r2V7Lw@;H7kyQ`OWy{>=@vKLmxLX-fOD2XHxf@?yI`VwP|N#G^sC3%TYjY(cU z-{jGI2jSA$PVZ&uy(3L}@6vm3`Wsw6|Ig>|=QH;XXU>^(&YYQZXXc!B+$Ksc3gE$w zk7#riWcOe6-6-z3hg!t2I)dy16UweV`0oCH-!%Krx4->z|G^WzAOEmI`qhz!yH%PP z%47l1P=vwyhpuvycB^*fiRaqgGwc>^CJk%V*04}Gbd+)b!8f1%!-$48X@4lMH2rB;BSd&~fci|hN@1hQW{PHW*`emA%y#W=;enyRgYB!#dF_{NxKx5R z6flL`ssUSvBWKvPf$W#IO3`u3k+-{gjxnF){iz7t1enY4t72hH^6sOgaXbHlmMQLf%7eq2D45^xJvUs`vkS zoEp4;=(zqv-Iwo8RY0IEtTyyUXc5qfCeW8j=^ zK7v@AH0zBZD)9~~hH^VrUt@qg2tw#PxM>h#rL)`L)5$}Ia$Bec1_*FOw#+RMt2cKk z@!e{Ma-p_32FPw-p~}0BB7sDBWUCs=IkGT#?@~4oz$mQxcN;ZT0L8)fJ9<;aW8h}( z0PJjEca%B^6erYzo;tWoaoQ!k?#H#5WhmzZBLL(9jN50IvfGWy3zx%&a;coZFhHOm zB-Q*cl%J_;p$*GsC&CTodTr$}K&}JrpQ&NtQ{j(E8uH5gxm>ZqE+M}W2m^z3dVV8}l0Kkh>Lgcu zVVAO=qG>1>#+k(c*&Sw>`7ByIxJzj&0}*b3+?&cCXVQ=jko(|0SPw>xRA}TUhC=cGeWDoHeIqtKGxOWOcKAwMJRd z>_%1vE1x~Y>Sr~unpkbDURJZ#uvQ(bmfgu}X2ogcu*O->S!1kWvX7O)iqxKDx3bE~ zVOAEajGfKOKga4|rLnqLN$fn<1Z$8r!m4MvkOQnJ(nc#=tAr(GO|l}jGTFY`xvUqg zN-aaVgM_~$c291wEo}sIqVGp+@qLF7U;qCoU$QpGUXe@_EbOG3RK6n!)jj`$Tp<_9 zC31=!Cr8LFa*SLcN6BS!jocwu$q90uoFu2o8S*8$LC%u%{en26Txeg&2tDu;dTgQ}?> zB#WH znYcB!u6J6@W$4QFYQqG2wT}TXNo-7CUftrdE>p}Fva4AVb`)E{u4IYWRVG84)hu9C z#nM0-N-))GtAF@N*f1+08}?ff+mwch*&os{0s9sWt7P4!VNq;L}9crfM>v_Yl=?fvMbs z5w!fIha&g%;Gt^8-ks415WWJ!$WJi$ub>1uWaVu55JkGtO`;om?Kav(-m79)uxnY> ztZH^8bZuS3F1ISzd5F|<_5j^PssSnhDgmkh%2hXs8nz`v)oMa73(<~;e!hTy;(y9Q zkT0Nw^&vJ)GC#l`)r|{K-AnCcC)q;QlD%XVSx2^!)#MO4Kn{{MWFy%_R+1HDH~F0G zCp*Yz0n`E112h0MTKV`VFmGD_ z(ycN?s$!AahHs+UJXm}y7#HuSU>ahj_a>@hflacRS1-Id|4tODYt+wfU^lUc*w5I_ z><;!QdyGB69%c`+d)Qs^}AcyO%w}9%sMctRc_%c`9{m z&=45GsRlNzdm~$y#=@FlFwX&+0a^fB0oqJd{XbOs%=+v_VuJl4R&IPut|Nhzk{M(% znL;L#F=PQ*NT!m>WI7p5#*%qt5m`cJk(p#RnM0P6Nn{+EPv(+kWW32SBpM*bghXP2 za~$CDCJIOb;E4c90LcI;0I8e~Bpu!v0GR+%|1$^ltSw5xyi`BdtCr|ra}BZ+ODg`X zx}!Wpl#z$9GNTeY(q&aebb)Sk8CB8VDPothi`j*smj&z+(2nbu7>*@K3Flj+(5eb4 z0w@M3_^pan%C@8*!jg7%x*v49A2{^GAMeGnW7+Z0zLJ&5j$tQQvuiREks4cLdJQWj z5yt&H%;R??4j>*NM)h~7XNi7@xfpk%9rNrZ_BwlpZA03VTkK`_8heB7NKUbL*o*8H zwgb7%wk2P(7ud7xO|}y`$9~1OBb~`%1&peu~T57GT6ztfL=5BC6aD(9Z9ibBdGxQ(%_N& z8=J^rTgs{897VlNgzy71vBd4=e>$@du>|XdvHYb7oe)*f>6iHD@;_}N$d|j@2aCC> zdGvwm?$^0Qc)(EZDZWn)1MK?83O?XPk&uc#_<7F z46xge5f}fW!^gjcI^)Ls)PP|aTlO(;U1b`|ErV~>y88H*8nO&uQbY~!VIv30Tt$6D zUAb9pLpi_wAeq^_87T5!X1gZcZ@;PaVceQj4cHygOdI$MFYs0teWvYhE6cx;rK9;L z^1{58h10Zlhq5R};bV=ztBC=2`%nMB_n*{M9zkZ!?`z_m*EMPiU=Z`1Kj}3ExBf)^ z|580=4c^_naU=>O)zgxVl)nvbj*CeHoxlC~z!Aj7JVp*T)7o_t{I|fH@d7^wkn8#= z$*yys1qOpLx8WL?q@nHR!d07cG!8)qy|>Ccx{f4%~H}f}s`t zrR~N2+ZUl(49&+ zyyRY(7}3MKZyCuQv;a}4$l(S@RfBe=Lq+B=)8gsug)r|5H)w{D|Bu=*bz(LAp6P`LmR zn4hBK+@pF0h>EBeB;sMRP8an)UYA2W%-7{`?_>VubQASE3=I5zLs*vtc*(7C^yvw? zcboS4P}}tvWN!7Exju@kAK&$FMH0eLj)#t5fLu4Dfiw6RL3rSY;S0xQ!?g>50gZ#h zXBPkidPE}Q=J9g)_2at><24D6ZX6z?MfaL~tiz$lDVzR<;$P^<98LEUP@F-|Uv&49 zyDj@%F2D8G`xmIOXfA2p+JX!k|AlJfSSpJtkEt@5t|u`?c?cYc`F9D>33nY;k6l+( z>H`kqimfSK>hsv2L{`jA=@>*VyUS1kFS$<6aeBqnVglz4$`$1q1CKdGU{=1iG zmrP7d&Yd^Epnulv(z*A~p0^Ueb4mX#^Rws9pF3}2u5bSSTjm)j5C`)LIXv%#OjdKL zFs2I5ZTej5F$BC9e_>cD9M(QOw8G=kmy=c^ZbFJ*gLfsEkg47w^Z3 z!~nToM|<=o;%6R-;+IbCN_cz|hBV2Eq>pdj`UeWiHVHKPyvN0Mx=OtV(B`bZq}O}g zvOr*?@UPx?%=))4kvZcpX-X`tq3fdkewDf|P}fDYfL_=2*nU5bW=qc@gs<)^CA@|rP0{Rxi^gj#?qDl4F0bOAU zgatvn#t9gN83zl%PUIEnt3_bCD$7McjR#RK7d-~cjR#R4Col-DnF?4R8bkSSsq4~r zBl@%#wLj35cd<+L;=eR#2%_OXc;S%L^ct#5dtF1ibs4=+e_f?HjB`#Ks%Y<4NqbnT zzgJ^i3H4>Xt}*u6r195Kd$dG<=u&*Y+A|TaYl=Li`geG_2PUBt-6K6|C|E z^8ogIFHNvdmzF-qR-j|>B*AHg1OiR|$U}QnS1EIjoi)dn&apG**g6QJZ=$Q9yql9y zMH%Ps(lMY}BEKMr&AY!rfenhfpokBOLa-c*vft2$jTupXKOdgX@0XzJm)`TgUP*E? z=Fngyld+ElY}Zlr0E#PtF{#T7G?icsusQmBR%+`WK+SfGS@PO+gg`CNfc(1m#*6&_ zb0cXsv){|a^i*hF{S^q|tJgw!EQkIglkh&Hp^8iff@D$)N~lWOe;UdevNh=IT$Fn) zzH@!we6MrM zZg|{bPHoGu-7lZ&ThUl%V`&h54P=JNa=R`c~gWmS8f{xkX~RQ=PR^Sz4HPYre1t8ppAb^q%H zS=q#vSWttt%k1Js!`CS;6&jMNIDh>l26oQmU<_H7>yfS+PdmF`UD~gn*{`0_uf8&) zp4G1|(DtA4d!UG@pof&0ICelj*#C*Yg^KoJ3@S1YV*BME1{I*XjNE>8f15In(mcjO zbkO~DCY|$<|H7*~EFci5`fkag3vV3%Sa*LKtCUsHuO489YS4Dy|3lRkIja|MqlBkc z9&j;9e%l(}1WgUy|CKH49bI}Zt58elABgTvYb5vjb(CJHb=MR{4qNFMpGJ}V+ow^w zlIexhbVPR+P(-)j_4DFs6eWPBk`KJ(fEN@fWkFOAZzStFJkq|7rXfdc*#uJ+%Rl^M z%$XKcS8jl1NUzt!8}MHwH*Qp3Em4iC|FxK@puF;?x0z}N>jN{d8*(fdIX1vL%D#wQ zLO!&b^ydetAOD^9u^GL{7}fvcI|iXtR3C4qtc@NqB@k5g`bX${1O~$NFJ`N~);wu~ zJo?t&V!6Mplr87L+R2Esuvlkbul&1HSN1CC|8qo!Ngr`g=ALnMvxoNzNez^}SC|)W zv)3m1$-_PJCm*2Adxdc#^*uX!kN+=OpF`m*5L6?G;clN)q5HLcY3nKP>@_Vsg_`d* z{pRm*rPmr2b29Hn8)$o*zs)U`v{$D`WtQ)8u%`(FKG-fFsZa-H$@t$q;c@K$o0Akb zMX$)p7i)fI?uYvO{pV`c)5h}D_WD7KKH0<6*4OuTgwq;{djkqShi>l`CX7AatH}EP zZyC>{yzS@^;2H9I46hhytgL)3%SEyX<%_T9NIt!`Pa6Cty1mEqT@uyXf2Ooj&9)9t^I zq3mAzqHHgf9-5}t|1B#W{gLrvpA2ny$j~&Dp>qO;_Z~C5MTXxMSt(0@pYOkAXhP_| z3!lo+7jyego|mBqkMAG8AVb%`*ng7!8g)MQ$9@0|KpsFrdh8EHqDEHhEfb|T{wG7f zFI3vmmo@m;ypr?3=9K|(fCB)8^k4G_L$193=oF{*Qi2~4MDPP;Vxn}43g=%_pl<8$ zJ0$&7j~V=fjN3vW^NE2B{jrMq*HIZdG0EJoAw!qxhp4^9@xF2B;-2iQ?;kp+^}0f) z633fl%Yw%C%dn|MxDLJPfESUPet#k znbF!Q@$a%q!@rz9XCy;4qE9nrsI&giX{r8@ZW8&Lk}>>-!w0fD|2BW)_FnaJn>Qp! zUY9!mC+rP?GXQ4+^Z?$J{wGX-a#+^rD;tAGt_(G(Hc;GKr}thO=u z$uQ*|SzWc?3?24VB|>62!I71^R~a_%Y0W>U4Bt|hm4?&L<>|=KuXNAltH@CD-E$ZA zM*I1n=O$$itn>rXxw|rjmI_wC;rzPk{#w_?7$3!mu8IE>U^cyL;V-d?{T-CO8`1{Z7I zd|m3?Z+Q{mEr3e^mjR3b-UfIF;0k~-z`N3Z%l91j7UT!XdpG}-@yypUIr*6k9e-kS zd2duYZYHrZ6_+-rn&kJ%Dm?Wyjrl@`noOC}_LhXJ{eHMi%+3=g?*o_td?1}LG0)#) z5&M(5U~dPzk!0?BLdIgW)%?l}8G0h`s_AhV`t!h5Th{BHq3w4X3n>NnyOi2mzp8Hi zYYAdwL!bYRz~q=p*vrpk{t#vR+A(LIVjjO_cJ2dH^NXfuFBq7ZoIP)5Zg%#Pnfc|j z=H?d+Oy9qJ+2q0neHNm@gS2IfGL!L-pMU)Bz6SRCb@u#)qcr$D=rMMSn?R+smwxBlnJB|APb-dAXk}~=O(fY8PJf0-azgi!MdOeRZLXv z(=`47JIkH zP~g!nfBRmFjh%OOQdA2{#4qp{B?}(@{{;psE$Hn#bv<2U14Z7VzliwU9-pCrEGHH; zYG7Qx^US-lwtX>E(1jAoOZ>%Dw}|B*fy8;^2E{k$su&NWzakwBqkA^v64HPZ zIkjCOOru=ZJ8B@S@tx|14w0*P0VTo`a@^y_IuVeY+cvRe zxYVg%8Hgd1s1fy!99Kirh#S%8KQh%nEP9g&EFImD*foz%L0ThZ18O{$Q)>d_BDP&l@ zZ84TLy<9e)v6~Lgc6Mm>@$*S>L*GUs8E*XLt_iQCZcryN0HaK>LBw=*SP28I9b#$*SOl&7A0W;Q`wQjye5a5AATelVanrv_~{!+t2sZ`sTz)^k_biI)rUmn=CP=;F8$!SE=FsYAmJ4!!)@k+a4 zG|j-B?xw}JJR5D0Z%}8@YcON5b5ofv(E9kyeJMT9hx5t3i0To6WO$mF3`#rd6IzqK z5c(TvNikJRaM}8*cU&ZnoAIHG!t;ciXEncXVPNIQds*<(pjZ9U?nM80^rCb_+9KoM&2 z&?9$>gQ{Pol!|!A2)mSCKPlf!pa2F*eX7m9cSu=Bw%M(f@nj##0m5q{wkUDR={euzBx1v0 zbIV-3QpZ;Ph3^y6q&R77+GJfB%0{-S>8-0rG&)o<$M}KVwhVW%F~OVas#e93F)nF(Ip+8c#1hkJfHS#n8U`s*E-#b zI4EPiRT!MJD61MgH`p|&LDGKYTT(Zyxax9)PpN;y`wH5PY=Dh#E^O_TlqT?hAqs?% zlj}99ZJD-p4_77?L7S!{;+H#yOQW=i_-xmJR_RXOr!d=1#^rldu@(1_^-WNnRru%( zjz+AG%ub5ch`f~LaIeUr>Dy3mi*cFTlRlZ{netS0kMJ+`99x^H&PzrgBWuvc*)KD! zpkB;>pC~94uea6ry}AwDwi%jt0`kh-DkJmw)J|G9 z&xqoMwJ71;Tx46(+3I2dTzRM_cc8$oX}oZoca_L;6~sGc^*`U>C?PSZrdi|D{`TGy zd+{kEv(_C^xHL$H zQ6hG5(ZeU$o%aclsDR^K-!DTC&@USNeSuU|FgHH<2=|?bK^jO6yvb%|(gD*mKKO$s z*7}qQb}lKJj>&Od5c#X#L0w$B!(VfToH~I=)D6Z!8l2MLf+dDUTD{*^FCV zpq}V(&&hLI9(F?=*b0($K$p3}g-vC-RG26jC32&9%{>+Q*-UvQq=)hOy_%5Z;h0FN zqyi;^dvnGnrB%6)Vcj~w2M9dDRj~%V7fdoUprbM|-ZRROh~F6(<<18N1){!4C&TxL zh300##)}ZaCBpetbYWs5Pk70)MouFTj`1E`rs<8)b&?G14E!Joo#$Eg=<=g$1|bHi zdY5TG9Ki~-V2ZCgHb;}=yM;C=5s|Tz@Y1G#TUi#zrN& z#*0%C%w}PrgnuPaEi@PL#EN>Onq>SI-YQ4#gTXSph zTFmBOBtjO3?V1-ny#~-rNHHvHV%$^F;!HA6op6rwcZhBh<%vI_Jm27+xBL_-K{X%p z*SrEELX!n4C}Epl64LEH-T#>-O+yH`8YG0#ulwkR7ydTZQ&DL8)!@M+mcj2|XQGdO zVA?2?rw(eUC|DLrcJoyZJX_nOZbzXx;a@$q;vKu%w!jIa&RTL=a>YK>RZA{Mjr+>J z#&>(DRP=;M4DP8&C|h=oM%mQ=cI$BTsUS=41@v>O-V#n^EO?^1{*Y-hwxm4SvJgQMe6qE)d$v3re3*>zVPVhZ9|$c zR8m?V_q0D3wH!t@Bs8p!GR{z>zjgkK$Pw-Y$r~EbQj{Kj|LAs#<|C&^fsZ5?6Zg?O zD4egrT@G+*ZH+7tfSpDz6nXTOyN)yAQdtXy_bA-k3UIB9P4bS4M~Re$QD4ve=K-fc zNjn*A3u@?nuIfdT!=SG&8`a`UduP!#BFwYAC^Y!Rj=hyS(gZv6=yHF{V3;d^6(t;l z=e>K%W^=(g)}hXtamm9LcB?OT++TR|!Qti)=1ydY>g*G(KBcV8xaYnBhp3tHwsu27 zRen6rQ6$El4!xJ}TOQUxHK3MlavF_r)o0WAV;XW^?`vhl7?hsJk|&yc48oAkx@6-# z)F7T|q=K|4>mY5)*o72r@ZQ{aT{t)VvdVWyFbX}xWzm>6ij?M=UEk>>brTA1b57Ey zH?1r!a$IZIJSVn9bKpqMtjBddFMV2!lAL3os$s3}1DVBnj$-gJrT#?;6W(P*v$iet zg-xraJ1-aWy6PJH1V0m@t$hWrdTWx8fwX3*qBC4IdGs>f#+7e(r->Rk!!41iqyY95K`L3XgsS@2i*m8$+_su8>*>5a+W+WW6Gi zs7#Q4%0~k*o)Kk1;aJ< ztU*AlbG*oL@B`Q#Q-DMz)3~f#VAku4n^bYfvhX7!uzPl6&e^$dj`Lr*G@;3@tP1p> zdEP03J<&G5ZPk0)TVQem$-+;{Tcjs=d1O@tiliWksSrQMv3{=(^fFulxlFO?T&^{K zh=4mHZ&|p8czXn`KIccEL`I==K~_rKlsw*f0QGnhpVP9i6l>3q1J5clx~zY5EN&VF z!_TDe-n28?zn}h=e*U+5&DbNj8KG=YhIF6pQS#I>+>bXO!4ewPe;gv|@<@R)$6)3r z8|h+N9Xz|~yZ@#sa~bQz2WjRh5b&v3tK7TQt(a`+^xcRY+&n*I{YWjWL5+v5o!FFb%OBWY> zrwY-}={c$B=VtY>EloSsQ-XU$4Bvj)t@)XVnT2uw4Zd%>s4Ta#v_tR>5!^jeB6eKN zwg85yz_24`J*#5eM-qw>1sN-IWATqv$+lZmCE^n%l@(r?%UNLG`cKDzj*HMWx1Q!!uJcm-@Ivj zg}xxUdC2#I;qZRu%|l2Te+em#Swelm1uIPPmM)|h@fbwD`^%QLp144%3I5$|{Xvj= zqSLBPym(0fo?ASn^*vYZI{r{WGsd=fs-!-5m^q>LWDe@7Vu9|3#loR(;R}?IO!e_w z+Vb*sV6amRc4JfAKyGYNDGzi=5VhR%Qn)ku1k`&T+QBE;_IvJ|M>*DXY6^YA?c>#T zH)TE-Le+!?n}LDB&K5iar!Ul_RMYp|x2##6ZV}_1PUW@>X9@;eGu$Obt~01*HB(Om zF5;S6ab9+!A9kYV|0I4{pvTYQv)XqShPpdOrrm^!L{Q{vtgV~KT^ssN0MBV^!OmxV zY(;dEpu%}0B^$L4-@$-m=5R|6H>H1KsLE}O4>r|VQ(v;3mXyZ%1Sz#(u+4Hi)K+nD4USqjUR4=-5_eNXRSxBjRaqPh;rZaPV(;HFcD4s9^$|7c*Uj zqdc&$(5>NDJzg0DqnVV`hul-voF6q)n~T%^d%Ol6zeUm+MrL!t@!R>s_Pm<}mEFM; zC55Kp6{<)DBjHJ!d-AjJF;9^RkvS6Ye_`1AWUPdMW-9moJ4#b$*Ou*ZfH%mmiGxhb|aEL}m=V)}HXOVry$ zLBAlYHFqe4`HhO@@)R4E$7wrkC0FVl^*6^Ef&G}D^$!ZxIh$0EWi zoi_#@M!eqvBbbIZY8ZTmY-{2Ig%FL!+xL~l7iK1Tq4+T^25I3HS}>a*vm>bi&ufAT zu6ElOQR9iPs#E-af&%0QKSSguZq`cRdtA!qeF^}Q;%2I+@(&+?60;1jO*JB?|oXplh9 zXHEQwB@fc&=&tYl&7h~ohyO&wU08uV4PiI6=zKpVfXneY>Jk=%vZ`8oNWB2iw&4js*6*(`W z&JfZ0((IV!S3%R9XAlEjzT-BU&U@k4&Obl|Wu#Y*g{)I@puWotP41wJIOTbnE6BrU zu6lG@U@JI?o2%2y82G=`j+$+DbjH}vh&hn`;jeA*Qe9$fKcwC@;%ZrQJJ#JQ=YwO# z$BBqir=h-h@AwAP8-l1`?<~~%+S_bC72F_#79?xc*;Cv4U=b;d%dE-#^>O#`b$nA^ zKfpe+Ak8z!n+Bvg@G_bf77E&XDuhlbkw}$AyLF9My=@Wzdz2(P{N-k#nD-Tt5%nx9 zBp}jDh$bM`iQr1}vR^D`*3F1vH%zcE%oc~(_NxNB8EBOrwM z)gvY_tP1`j!X~P#n~DZk zbb;X{<8!WKcc#}&=n(HAk-JpdSbe-dz`F^2^;miKd%PfVP3u(DS45!qGv}ecIA7*h z%E$x^g0g*^3&FV^flxtjb5AN+1+%KXLf6};T+k=fv$we#AMcQi&&`&L3N|8ICnR*j zF-hdtniAq~@)a@)J9m3fec@_NstDqggxYZX^pY)SD=-f+;|Z(yMZ2%ptBw25HO2Yf zp#q0!A7FX@9quIqE|oY??cJTn4}m;oO6Jq<@sL2K8-@(PB$667+c(@M#3zXC^1dDM z(*#~QGz)(Ryy9?GO8O4>-1&`z3{A7x7sY~##>JC_ZHlA!&U9nIw#jjbYvQ?mQ=2aC zdEG)U@ZaNx`rN0+lbG)urpPP60ezdgbcL&hYrk?0=!$i161Cu8E1#miyTU!C#O?Dd znkn{NjG9LYD(DLLk=FU6h(C;|Q;@zo-s~)bJXMx^$aJGu-6r030P&+v8gto7tY_}= zel_uFIOBvib;FpeBd4ZI{b9^~i)Aqv5j<4jo-dw82|rhtF==SC(>?ruOsdkDdr9A{ zcc7EX9xvs6KsbAPwQuEwhU0&c#akAt*ide5r+6?o>Nr8AOmAiN^PQRPCn>#mx$652 zHIQnCANBFO+~fE$Of#^yw7*m8>&aBppse5J{;b9ocuO7 zg}%2tc{X+AJ?=m5S-ct^jE`Fk6%?UFW~ zNa{*=+RzDPTc`2Ph~IX3&Z|+82I1uWYpQ84g6La6F1r&numJI<|J1M$MWKu&By^; zQ_K6fISYdyF&Inb_4r5h-aSaZB~SV*lJ1IRoBaRw9bo=P{)D?C^G`)=C0qrUa?D&- zlH6LN`Ns&}#`C$9zUPi@oS(j12v-3Udg-(JD#Vs2Tto@CnL=rj-$H9Xqx0wRb1JYy z6(;!h2U4lLZ;6&3>;G(g z)LVKM7vhXN7R!CpnJeNl) zr>if2xU0L2xv7VU7;MYoN_&r2!~IduU~kRk$M)tn72blDakJ>-PY2vw7K(lSga$<1 zM5|N%b}j#+<(eG+Jqs?t8ON(27u|lLA+)0>^&@_wkq?=WL$AGwFn?vL)Z^d)G~hmJ zN*Y*RKYsDF%Dor3299PvEe_I>Lh7E5dptC#QB~CB}J9DxB$ZCpUOB*<3>;{;}X`jTxu*l?AZ)YqDF*m^mi?%E|mtD zm?60gKkjs1WYkJ-f)Ij+VE1%S;nsQ$o~wjN8SE!XHdI=5hriI2@a&y@mA@TCt?#By zHKhA@F9oN(hwNu==^74bC%lV)bo|H1h_i+Vjy(%els{dhxsUW{+{5Vu)+{yb z0JijWzq|pQgqUKhUW(vT^ox~0A|I%bk+?4H;Qd*$K#lz00cGG=9|p_ekKMp4_4Etu6k+D+P3_Mn22yby6>WaTLiP4?MCvTZ)H0=10i3mrrJ9iD zK3B+(_}i~$2%m|ba(YmsDy{|d7;YCVL3*AD%77fHi88srj|?Zn)|EP0c=M^cWp`5XMYS>AC%;xA3|w@vSx;uKm^ zQ*^Gn0(0~vJ!lgDT>l1zGr0GyA0QEoWV5cUq`9zHJb^xu=-)jpjbE*}e;WybD5W!@ zcdfWPTcl4&W8$B`Ok1~OUS`4pR??jvm(msIktyNNL_sK(9O7S|tqD7CDC5bUCg046 zr_XD|NhlHLUokkkCh8bOEgP5(hv6c%F+9&*%!x)*?tjRVXIfMqX09H=nu3*2XQXhE zQcg7NCLRHJ<6&-Z_C`SJ^Moi}f)_m3*cV=2L|Ww|0eJf1d!WDBm)U!GfsSAkbo#~fcLk{N*go=i z)uylyW6_N(k4%jC=)Kt9!(c*@4jD6(;SnM|B5JI3AIKB@`xJ;zB2)ZX4aZhC=8eCF`g2ncV1iL6xB19_fniwwYi{^B3bZ<~r_qnQ< z@hMF(&u~etM^n8Nf2FMHG`BWa--g|wxzAO*#ne5q`_oDz9-LlZxXVLHYwYESvfhZYr9gzkoTA*upXIp5i~b4Zbl+I-e?ap(aUH1*DRT$W}r=OYUhtf8!Tpx$we_YWezy)nm4>feb^pGK&M-*FG` zw=zRS9Qqx~8~(7y6VK60gvPeVAs)0nu5nF)Stb8cgqn*`B~7eWh;JRUaBW%}7S>Gi z;6q_I;}R6$vY9RA{D_8w=h@`YAN90*A?gOfw_Tw|^OpjdxEj4zh;JUdlO0$-Hc=)L z-XgpmyPV6$7RE5p%tmm3MJjR1J}l#IHZNCpKLOpG2R4`U>yS!GynI*5x3pk@0P5j*W+yNqD_- zS>LvAuwj}Xq};#Zs#|{!K?3_;aGaM@%yuNd9en(y=+^!S%JUu!W`dD$qjhW}sIkCP z_zA)D?QC{$;V-CKc9*-tHGEScs`t}ToiL{90i;S}M$tH#PQHm52P^unke_3Z{zejY zuWBfPrF(GnxkZh|aKm?+uTStIM+#n~Eri*d1kt-_9vnw1<{tOF8aI_cFZFG#h2tTQ z32EelQ%HmZ`Wdx&k9$tzGBU!r{GR`2#mg5Z<&bOgN=w)-4-_-w-=W_9ihEdl?F=l& zqKAnyYrbY_zse6x8{4V73un4bxd)hsFuNMJnFS}Y4w2RB9FQLDx^xHRpO$N)Zx&?Nu;uiU z5*;I=(pDkxvvt|8BY;)=^d5EnYwqF8x#(qX37=QbmpDtTh^MU$JvB?qkrFt)0YB(o zUr51rc$B*^48D);LC!C!ft)A6xt76x82B}uELjeq8e=r9pKtt39i$Jgb}D365gLBBE{jmYaB;-_>4_(3Usf)4{8D@nC+cYP+IzSzh8;M#lM zRTDk=9VHw>B77Ft7&mRlOjhFVc&4$Buok)wd9g4reo zwGYPz3mAmMTKCvf;1=u`e7J<;U8Fj|Hb*hQUi1w||xd4-JL~_lem= zr1PxPuut*y`e%;4V8A!9H}E$oHfS;!ya*R1lj5u_ zxM@|nX%!BRQRNV$7E4DK2=RqY zgrIzEu0RNPVDd{H`_e?h`O{!N@o~7avV~oluq^(kXgsoGo=yovUwcH30KA;!gIjt<3n9 ziLVlAX=Q;iPW_%YIAVt8r`_%yDH$mq0z*R5G?%p;5R$B7S%TtSrWpK|#^?sjTCaQG zU2O#=_;I%Og<_p*a_g``m_Z(>5CHj+TC$rKc+a8(@DLt&eUECrNE4LA^=U;}OQVCX z_!1E|RT>sGD{j986GIaq8N0*FE-rC+CCuJUKFzt$1SSkK=S`?hRqm0`_n)V46yZZx zxc-6d(ws48;h%(GX~%Ns(+Jm2PB7iJ7-ioZ7f;O9WMv8=C=*C)co99BvDd&9HesH8 zX_PSAr&Qn!>B~8OWv9J+F#eSh@{0O5+-ovqCDl}QFKpD~KkDg=(}GG916QlQfl=AO zm4m4;-cU`*K-46Jom+GLJ$)+)%t9rqRgHVxI@nxK{H{)#u@E)LHFnWQIyL@KKvD)d zS8)lk&M{wJBwT0fV zcwGxGlfpO#a2)!DWkt4AMVjq10i=53)2Ps!TqSFKN8<+1HLS0)G7j!L1(mN4rKPru z>0s^$!8w>p*=ot2s}gDw{{1r*GpR8x%n>c*Ipa2W!Pdbyqhv~Sm~dQqn%&#lFHV7r zhV>vJ7Z2%9!BYNiP?{7MKlapVU>)~XgVR*DMa-6?6F=3F2OeN_M&hcYZxdGhG5(n% zq&TUwx44JDWwH*!?<|cs_8}Ma{-)jil%bP})co@EBM;-Z7=NcT|Ea>bU>J&lGj3Z| ze2pt;EEDxf8w6hxuC5Wa&RqrhX14xFWpRN;^^!yC=CgV+T-I<;bDzl$U2O^HsM5D9 z2hUMWH@Jr{FxtRYJXceSGu%_7#vz3>+)-ldHsAHZGTprjj@-&(Lgwm(1^iDS?b}-2 zwH+(zMek65-{5LkBU_B$Ed1Mp{Ni8si8f)e2fZUByrVO&;L|FMXJ&N~g-vz!etdZ% zYic3%dEm1yyzEURka3$O@yqPYuX=??e5ma)*cb6KBQDDV@6cvkzR@%mS3B1=A)*l} zjx8z8feq_4%eq}zqz)Q$6~L{_W9rz4Z@|09D|zc;k$wWU;L;7i?=#P z<>UXK#6y{9>hf%h3%sns9&-o5VYkRmOs#3IPZq&p zUb?WiIVH1xCztaBT{?)TDwr*JW)H+xcZ(tIXX_iAwjEi_^f-g$F`jU3Qap!3w)qh2 zrnZK~d(S!}f5vBbk|dFd zancn@2&60*QrBGVqei~5Y(w#3MfiVPj=ngiAtC!bl^=cb=$lro&bNpXQ7xGp1Ngwspap5UI>cA^(I;(r`BOX^R0^{Ts{f0;;|SPkq+ zSlME_=yJ|}N@<h_)>|TQO-@OFsvF$?ngwKe+ zC%o%?N2?|SYCpgwT6cCYSf;NO506i|M_nM&XJVyZT^%-E93Bz|7ZWr~7Q6<9sjGZE z?fe-Edy{MWuRG7(YJ&3o;>2*A5@4SaFqmD-g>~{ni!I8wxBN>+cmg=o@o>+a8q9a# zS8@JA!r|tUv-9wbb5D^d4HA8}AwvTjEn!ih8lfng+vOeaI9Kh9RQABV?Ncz_!mDaP{^ z%@(7c^)&msNIoH4?Tey)Rw{#-U5ZFNm=g8yELY_+&V;zrGI)L|V>G`x3i6d6QzL@< z9k-!hK`$Iqa6=`F!Xd$qXQQ2D2fl47g=tSGhemy@N~nUfT#d^nN9oyO{F{Y6p|CkTncUseJuC=Itd8w31lcxwhIBocUjD2@l z6j%4~j4lQg#&tzSgq5`B8j0x*mfm4$m(K38h2DExdX?Tg zNN>`6`_5o_fBWYBgg9_J3!S)^=v+&)%K5IP&bNtm zSCN4Rxt(;7r5q%jwb+Oq|L5p>;5!~zf8mJ=bN}l?O=gS^W~!jh3|ENyk`bc=52gus z;`Axft#hWgc)X1V3dOET72Z!udk6MjM=Hl*GyX&cPXdm6MS7N{L-ZUUL{gHL9EYy- zCK09V*9mNiXkM1jN^MoZdU{xbY4l?^|2pFP?X)&`qTtk>%pteA;CMT3K3sw8Tmxc9 zhb@o7d^Z98K5@+U5C=u`*3+#kMyqNIP0iz3^VpC~n9|rn+5mD4CyF#wJl2Qtr`w9F zXBf9Hqs-%^s?i6eMa5v=X5rE(JDHwE^v! zP3C@~pD(;33r?5Lf=<2WrC---ezx~7ELr`hsC^YhhCZ5RQ4bA$q8?(Y3Kw_PGN?O{ zk39V6D=++rR+~fgvGk{6hd8NIxja4`w!Hz}7fnY>mp4Jrn{tRE)*WX{7m2mln7fl6 zT;rTnZ(dlfLG8&E_!-?$PC(J}cv1jd1vnD{f(6Gon;pdM-6(z|dCkaSFV+H24$0)? z1V64GSfxSzZIUWK(Fo!F8m%FR;Ox@vwe(INADgFC-5vc+{JWnxcVw`Js0#?m=85Zz zJV!)aP%IM06^=z(nKAN?v0OkG!`d%pV!kzsQeJX%GtY|iY0V%G-oP4Ve*Qk^ade_h z*{~S4Nc1){$Wn(btP7phCVI`_=9d!AzBcG zj?L_ak)kw&>K2`g27SSf0Jh2!-cxTk9~(OHXe+26afKm+*%nCj3*EhCATOxCNwC7M z!s0T8r0;Bi=S*BE7kC+xsg~%OCm_!}{rC;=NOOiP>RD=@ixCTft|HTN$1J+~1GE%Y z)tUTfBbRf`!UT4(-51xGlnCnuM8jJc8YM^-JO?Rkgsrhn1`O~oI4Q!b(n(R11IkVw z45o^z;SHt}!|)%bqk<;K(1F&V)PGbnimA5WP-N)9eEbG;=@iyT6z_x4$vcEuZOuDG za~vjyH|qwwj|zP(h2mJ~oSXZE$XDoF#rletlSLRPlC=`Y!kIB&(Mh_)aF=6_=hS?K z5hx(XSP^=g$V~qyOTG@%)V1BQNzn1Mec=hQC^vtC)7ev$3jhCaN~L65n~^G+$!tgx8ffwV*IsJEjG&1y&xdI6|vre{qF<4 z!FdOFPbBjNsP`lu#fCvyBdpjwE-hn8@DH6gY||k$Gw%9}XuAv>h`@Pfpnci}2*J6= z-QQw@ZAPGr*i)I1hn+sn{evxWypQPtym~9MK)=caTt8%u^5f02Pu0%);XwQ8`!)aJ zSaH5%O3q;|_8((y%HOH)`uue)nH|OamdPxTyI^EM<78?|uvUc|vizM#86WK1wdHlq zB}&C*JI%LLxl*0!q>c#=48G1_f;K-pl{U7HaYdFE%pvx_o?+LJ_cYylPACCUeS$c1 z@bOCE5jZ7zK5L-+8O~3qQk(mQaGy=@U^`XCR*pKb6ZD;WUx9%W$?_@<6Cb3zx@9+^`6M^u!%ZMC?L|)S zkcuB}(3FCIW>==)A%C6@TZI_HSXzJ(~#~jXOCbrI~`UrT|%bY+Gv0 z#9~R5B7Ae%O>8=-ZEI{IY^V}6!q(K*js}YS3klti^_|iDJ8%KecWtBORVJL}v|tl6 zF&wxY|4Gz3v1G$2+$H!PDuMn)b_aDpz5h2^6z6s(l~9bj}wvoyX0XS;id8rWxPwO;xef1U3dj=zo_43LxWN6 zEKX+kn5XkK>Cxu%4xQDL>=w|dDVHhM%}g-KF0bwv&%$O?7u4nIJYt`QhtVE4<6#-& zp0*V^P0@Vd0SL^Cn%xABr8+Q+t;Vv@59`dy00+N}0QiW4CaMaORzOSVLz|(f@{t%#OI&uJIF#q z?b1urmuJj`aIp?F?M$6d%OC!TNW63iGH#XSbht-ltXLQvP%{Zwv9HW6ZxG^h_jE#G-qRWYQ9`oJ%eR4dw zTj}=xSuUpCK~uY720ct=!Y|I`o7Hkm`QOm(%QAWsEheT2`K`2UHv?nz*87xH;)-^| zBtK@vo+I8&cQQ{Zvd&BPXP7Bt2wv?~D`}bjk{B)>l;POJIh6_F%9$DW4k#rr#AHsk z#Sq8$9FNKmND`0Kgx`S6^}HIPZ7_NTCB9Ey-9gyO%Vd+>nfzp{Fduju2BrwIEGYgNRJ z$LTR~gQ9`_n%+YMiy#y>kVDaRv8H~l0l?ws#W=Xd4s=v8R1YJ;2jo6|*&8ZC`{4=8 zHv2`!f!(yQ09K&(@`A6#veYBs1l@&Q+T9x%UBuAbOA82Rb&!&_fHWR|4(t>H0!Gsk zJm!oE;vF3DAgrZhG(9G(Hlsk&x0>tkdsP6A?7GI!;4RXh7+KN-hGY?^tTIcAqm>T&!%T4g5tPyObu>cGCy!BvZnv6!fegyw1njAun=<|b|H z6t-)>{Ve|hh;M2gGQ2#kj6i^mi8D9p@*Dg*Ie~UukXc9B7tAlG@fy|;NA_SXAPtTf zsdY}P^yH}l2hlS<%FTGJ6J#{POby+J_Sr<^AYVRc^-F|&n*n}tNEh4)il z{_c_ff=Ia81tf3>9Smt~Mgu#CMR&|-f?ZoA!`L5}eK7K4Hu zLHKPsGvI36S=wr;^#-kVH}O#KT|4v25|bG5&-Bz9iE~o2IcF`9Y8$>o+t|u}$u&X5 z{gKY@%&|{(Vn_1aG09#h&@+D<)H!y@3ije(cUDI(L`=+y{-Cpkk&^B%c1kd=|C@3% zFk#Pz-;^b;8|=FAIZa*jlG7gMbvfoQacPel9m6FyRfvCDFe#y8&b!WO+vPYnu>c5*DO8)2#F`Rs&^WWuZXac7iqfCl|llkAE?JKG3n z;?5?_3vQj3xm`B-gT>-t*kxBHM;pBoBnFu*ly)6d2dFbWeWC)F1YS(0mK z$BMz)wCYgRNm5fKWeb=|tc(Xp{BrVmU=8A4wJ?%9B_4kpNCByxB9&wfMz9)#5xstN z=@hBH%Wn(Tj;kmMT7#{MO?-%VuN;YPlRS>;3GCYmi=-8QheVuHy?v}mEpuh0Hef{1~26qj9GT61t?;>SCG{1&2iYgkuK-+Pt zSmwe4u34-(!PvX$g2l$DK4$esX1h8qTuIq;)4g6=*)Z|9vaWe$`Cymtq!{k*4igQ< zrF~0IgRD7PHTCgMU0TOvNVTO9s<$7R7xcfLVsjHZRz6G|+Ch$3N4YyE^@{Z9Nj&qQ z=Jxsc8H1DX!2CeTM(oyV=`u!Su++kfd!F)hBOWKQPNTG|<5$5f{I91)E@hrm!SL*fu=TMUO|)`}$MxfI$~p?XD>7sl z$)}?HH2yk%kN5UJGKS%r*-a6W6cDiO;{ox*pt;!A}4F=l%%FmQT|e>p6Q- z#_%3x%oj&8h7MxgY;DqErp{@wSR{U%F0ijEGEI){u{OAZJq3C#m@J*~M&rulmXCC6 zM%^XV*>ysA@VeIw=48hW+pQ-)VE~pj@=9_p%Mfh=Sw!@xz+<#Hf@0|Pvdi@1`i2uy z1t!8D==Ld2-sY&oic%>Y!cQr+@H=|4mbrw|dGy5&@&lvHF03EF|L)VNs@VkVL9Q)M zPj>NaX$g*vz6;jM@9(DBCGDz_Ro=A~gl(tSYV6wT%e{A#X}q3Op!wVRL~O0wl%~+| zGsdp1z+&Sh5yxbemUvY&m2U1tlA2mraajn@eya5fA$bIE-X`Cu<>-88?io67EUwzg zv&|}2mK95LP9j9INcJYFVI(<1b4enWWR-04!rf9siik%FYW~GNDSp;Ir4p?i%tPj! zwy8r@M2X#`@Ge~vBIG$2)ub~jPhqY=vW{N4E)m_0yb`c5O=_H<8_KnN1-k7d!?~4X zmH8xVHjBH3ZkAM*(rr2Bd=MlwUjixgE_cjV8JCFV=`kZlk~Bw)?#EsRKVoijoQDO4 zd7(}7d??N;s5NsIte<;v{q8l&zBKR>ef0g^XFrtJh*jR}d7dpp*Zj*+i)N-Kr^IB- zY9?X1_D#(A^;n()y@H3Ow0Od9

JUDg}1S(UNIX9`Vgal_@U^ySahN6qX+tVN4RF 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 Date: Wed, 26 Oct 2016 21:33:22 +0800 Subject: [PATCH 3/8] lazycommmit, please ignore --- README.md | 5 +++-- preview/README.html | 25 ++++++++++++++++++++++--- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 24b748c..9cf77d5 100644 --- a/README.md +++ b/README.md @@ -723,10 +723,11 @@ Vuejs综合Angular和React的优点,应该是下一个流行趋势 Hybrid混搭开发是指使用html5技术开发的跨浏览器应用,并最终可以将html5.js.css等打包成apk和ipa包的开发方式。它也可以上传到应用商店,提供给移动设备进行安装。它最大的好处是通过h5开发一次,就可以在多个平台上安装。 -未来的2点 +未来的3点判断 - js一统天下(nodejs做后端,传统web和h5使用javasctipt,更智能的工具如gulp,更简单的写法如coffeescript等) -- h5大行其道(网速变快,硬件内存增长) +- h5大行其道,为最终方向(网速变快,硬件内存增长) +- 组件化,和jvm所谓跨平台类似,是一个很长的中间过渡阶段,用户体验好,唯一的就是现在相对初期,有点坑 ## 跨平台 diff --git a/preview/README.html b/preview/README.html index fa213b9..5ce7841 100644 --- a/preview/README.html +++ b/preview/README.html @@ -160,7 +160,7 @@

全栈工程师之路-Node.js

-

如果想邀请分享,请邮寄给我shiren1118@126.com,如果时间ok,我会尽量分享

+

如果想邀请分享,请邮寄给我i5ting@126.com,如果时间ok,我会尽量分享

主要内容

@@ -1169,8 +1169,27 @@

3)从移动端转

移动端分

    -
  • native原生开发
  • -
  • hybrid混搭式开发
  • +
  • native原生开发 + +
      +
    • hybrid混搭式开发(比如cordova)
    • +
    • 组件式开发(比如rn)
    • +
  • +
+ +

面临的问题:native开发是姥姥不疼舅舅不爱,非常尴尬,很明显连培训出的人就业不要工资混经验就很明显了。另外领导们也都在惦记,能不能用h5写?这还算是保守的,如果直接激进的就直接上rn了,那么native开发的程序员就变了

+ +
+

一个写插件的程序员...招谁惹谁了。。。。

+
+ +

没办法,认命吧,温水里舒服了几年,也该学点东西了

+ +
    +
  • hybrid或组件化开发,你总要会一样
  • +
  • 无论哪种,你都离前端很近,因为h5或组件化都是从前端走出来的
  • +
  • 组件化在前端领域先行,无论借鉴还是学习都不可避免
  • +
  • 如果没时间就直接上组件化,如果有时间就好好学学前端完整体系,最终也还是要学组件化

原生开发就是iOS用oc/swift,Android用java或scala等,就算偶尔嵌入webview,能玩js的机会也非常好少

From 6daad7201433abfc55726e20242486ef8aed92e9 Mon Sep 17 00:00:00 2001 From: i5ting Date: Wed, 26 Oct 2016 21:38:32 +0800 Subject: [PATCH 4/8] lazycommmit, please ignore --- preview/README.html | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/preview/README.html b/preview/README.html index 5ce7841..53a52a6 100644 --- a/preview/README.html +++ b/preview/README.html @@ -948,11 +948,12 @@

Hybrid开发

Hybrid混搭开发是指使用html5技术开发的跨浏览器应用,并最终可以将html5.js.css等打包成apk和ipa包的开发方式。它也可以上传到应用商店,提供给移动设备进行安装。它最大的好处是通过h5开发一次,就可以在多个平台上安装。

-

未来的2点

+

未来的3点判断

  • js一统天下(nodejs做后端,传统web和h5使用javasctipt,更智能的工具如gulp,更简单的写法如coffeescript等)
  • -
  • h5大行其道(网速变快,硬件内存增长)
  • +
  • h5大行其道,为最终方向(网速变快,硬件内存增长)
  • +
  • 组件化,和jvm所谓跨平台类似,是一个很长的中间过渡阶段,用户体验好,唯一的就是现在相对初期,有点坑

跨平台

From ae47cbf650c76d4bc03ec595f20a9d2830418322 Mon Sep 17 00:00:00 2001 From: i5ting Date: Sun, 30 Oct 2016 13:07:39 +0800 Subject: [PATCH 5/8] document, please ignore --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9cf77d5..898a559 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ https://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=405001493&idx=1&sn=f0ecab9 仔细的对比了一遍,感谢tim yang和庆丰校长的整理,非常严谨,比我讲的要好,另外感谢霍老板封我是StuQ明星讲师[呲牙][呲牙] -持续更新版本 +持续更新版本,如果有问题请在issue里提问 - 仓库地址 https://github.com/i5ting/nodejs-fullstack - 在线阅读 http://i5ting.github.io/nodejs-fullstack/ From a8bf4b175cc353817ccfe5a7ea11bf455cc02522 Mon Sep 17 00:00:00 2001 From: i5ting Date: Thu, 23 Feb 2017 18:25:22 +0800 Subject: [PATCH 6/8] doc --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 898a559..706ba01 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,11 @@ https://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=405001493&idx=1&sn=f0ecab9 如果想邀请分享,请邮寄给我i5ting@126.com,如果时间ok,我会尽量分享 + +更多沟通 + +![Connect](images/connect.jpg) + ## 主要内容 1. Why Node.js ? @@ -1060,3 +1065,7 @@ nodejs里[json-server](https://github.com/typicode/json-server) 比较好 欢迎关注我的公众号【node全栈】 ![node全栈.png](//dn-cnode.qbox.me/FtALxsauUkYDGdzcuA5y6BaIdUMC) + +更多沟通 + +![Connect](images/connect.jpg) \ No newline at end of file From 5f18d1829c086b9726cce4cb4665448a7cacb3b7 Mon Sep 17 00:00:00 2001 From: i5ting Date: Thu, 23 Feb 2017 18:25:40 +0800 Subject: [PATCH 7/8] init --- images/connect.jpg | Bin 0 -> 74199 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/connect.jpg diff --git a/images/connect.jpg b/images/connect.jpg new file mode 100644 index 0000000000000000000000000000000000000000..95099af78544e1a729369dcbb0525daf26436700 GIT binary patch literal 74199 zcmc$^1z1#D7ce{mN($254HD8h(k)0MjdZuPNOyNjcXx==AObRU2-4j>BK~Le-uvG7 z#{b3heBU>F=FC2OuR43Lz4lt`>>sl~zJeafNy$oq?%e}{?g0h#V*w-%dWejIih@au zkBd)AN=%MTfs0K`OHWTihEKuD_=KI6k>xR`fE<{UM~e3`i-@MEl!Bs)stN~K+erJl zp`5ac5{$?_baZrVOl&$_W;!Kq7H*~g<eo8R02?H`UtOhW3pVVDRo^2u83b^iwU=XL}| zI;41I29O{20}tc)!9REXTb*DdZ0iZt%jXCRNTNH*gcWc84e(Fx_oB73Rk0GDP#~pJ z(V?C7aL4|s6V0i&@52{?*FuY<9jBf}1UILs@Il+J)W6-s{FsoxHM}U?%+)Lc44Rdh z&6_{rfgbR`^iYsf=zT+F7@EpChBgfV{qd1%`han=dT-hvO z%_AMs-sKo&V^3O{{py?NT{cjUH*9b)afv4@^VPSOrWRd+}HDdq3;}i zEBr4SE1QdXx5(l=>@1FU1#Dh+Yn@&6uaO8l5<|fw``lOuH||g}KIo0U`@ywMV|ldx zr@gH>1xH~m(Ran!&aYp0wn@!Ab<)%h+v*sI>B#aE`6(H&7JeUY>c zBd}&_Y#uC=-rqe9Zol z78?tMAkmfmKWUX<6aGn#js}GE;Kl!nRiX*}0|O4>4G8o|79md*Ax{k9tsKIeFc5_d z0#+CjmLCHau+T(l0Fki#fGZN#ukruMRhAM2_nY;EmzP$l&{NBGRSBAs!&hg}6UgE1 z%wj;d4?&F8^CTB&&1yw|-OL>9LoffT!bR{Y2h{QjyW?ukI)LM|J;7=ctHf3+@tEm3 zlxKjtMq02?UNFly%LnK4^oGM&!6z9w8pkGv@A1nN5^*cFgF?_8-gg;`mFbx0w%NRf ziLxQog=hY|g{WnTtYy#JO2u{>MUPSdNda?tmKrYxLV$lU2at87?+l+fGD0$s}j zTk9jd<%jkh?@J+D8N4V-$Hm*P_y>XlqD-mE-HWpHV^S3I`rj;DTwvh0Y`C@PLB66( zYR_p4@pkY;-z^Kiwfx)}q{_|P+FAU$h-T(yVEoSEg`oGsy}T2$G0gq*MX>e!+ADcr zGX6TeaP=AuQ!#}O?HyDFAaFo=W7$u!$1Ns@mx7ewbDWBFM;8N`JL(QJ8g_Gpp!TeF z`k7=WXTIe6x&8X3#fn?cTFIZz)o+tRncE!LGQr56=@jq!@IJX>!;b|G@uN;A+7~*v zne=v@y&iMR)SA>uI}$1z@>a|5KebZ%oaHJT$f+{?Qsl#_?sxmn58>0IU{*_Ow0 zf&AuvUN!BBSVH~K8UB}?ENxT{gjglw8U{^!$B*U9CU4IxjSAZ(1RKs%^uD8aiPyV^ zgp7h?&iogazFx(ogHUO!O0B`RbN@d>JXUahy=m1HTy9}=#?xvl_f4!bJIR{#(be&M zg36XcYnHZ8^Om$RDY>eWv;5+Y-fLfH4#@Vm#CL5!Kn{DZPLrIUmuJCl2hl@@$diCHDOL|3sm4_u?57{rHV^(*PpYduJEfn;FRUR*L<=?9IEp>JEcW^MySkjr7s9!9xeZ zjpi+1iJQ6c*4v{3i~TcC$<;8gJc4Bgx9+$~n-BXchl%wW=LYGQ82Y3MHV5hlxK7RI z)#*AlDmz zNT=J!`F?UWw~)JJ&W4+%80a9f9}>sxLr4Zkaj$x$Sn_2lp)Z zTswv2o?VURw~!RLdQ0Y`e2mP_s0S&9@V!tL46S>w8YxcZPxC2sLm9SpT2&er(IFme0FA1fg`EIb|aG5T#$& zC%@_t<(=n|%ww{whyFp%z=BN~?Tk3fZ=TSSJM9YlFwx+>Si{@{4&m&yche6JK`d2z zJm2)tDe~fsr^1_gsAr~rCkN~qLtnDAxY`wzS8c|ELAgg}91-O&cVVzY{*>d$xv~gM zoLL_;a7K9PZrqyWWl<{_5cTB@*YkUbzZ?JUN(!XY`aEAg%MceFWKg98sL+#P?9rF9 zNT5e(bpy13qlugT?kH7#pO_TB{Oo<6W_bE%reT@#O1NsgI8ED~h%AmxmrmDngDkwg z`@U_S>hT&c$F(RYcazM#2A*zb3L-aQWQn166(p!)ery)Rc2FGgUA*6z8i zIWwwAjpx+W=ny@6#yL9w%u;!TSQQIO%lO(nO?f4Wv1nG}`H{xgib|pU3_!KMGYpNa zCkK-Oa{kq{fFwfGPnNwWeHhQQz^N0H0%Pehh0lmiRrpC?i?mL#n#*q)NZyRw9^7ut zp4QJ6cn|Nq=Xl)Yn;!Yi``-D$h%}@q%aJ~ACScPoJ6eqYTy;lVjipESJoilZb=X-q zhAJW?WTZ3ZDL**ATw5vg6-x(o$4v=Tbu-^h>ZZec3I=GOD7G_uQ;;K9eBvm47jY&O z{R4zD_C=T(cbHKdDs;PEH|5j|RcekYrTDvsquX;Z^_6D~fUprioAHKMqi#=fGEd>1 z|9pUhll#dHXvcVkYT6y;ISLFN!;-o+TP7E}YRdM31Cs`7q%wIz-#nww(# zurDka`h-DZ6IBjdO?=rtcZ?f5s~n4SJ9vl{*^gVKZF>jz-z94IvGWxZSEQ6g7p>F*Pca{>Om&NOYa)AEa>307`Mp)XaL{5X!8ow)^>_a)a!3 zIG5*nmE*bjsN~s}4$<25&=(#$8i@~@3BNM^B&OT4=#=k+15 zaNWtKT`$Em$nv_z+%wtFNP3O?rox9=KT?Y+yVD#Z-04U^p1-9zk*3f(f%*d!(z$cS zJ6>vH@Y?*)erN7dF=0!ir|>K$|MqLs>}%U?AHuUZm;m9WCbfiKy@0@fbzI=+&{?PO z+jPtj(KDQik}JxxoF@tmbCYp7o*me;thr^J%UKTWJHHOqXu8Q1-yss5GWKddV=Kyh z%`)gvSL&X^&8~e;wP|fDlC7x{{=&0Ca7FjH5xH=2C*)B=`$RF6^!1FPq}W%+^3?Cmc~d$zaI;>Iuy^@tvezOgx;I%9^u13N}fzn7@9@i0?;%#E6RAO#iXTi$oN z3?B*3Uu0F}+vjS=$hh=|N`|P~$$j@6RsaXJkIe}$zK+W-Iw#V;YrF4J_~1;n#8qI? z=ghRd$XKk+;aR)7L7pwtYaR4Ymaws?%7;Fv=Y;#-V(aa)O=pSNjkqQ8Rdt3ve(UCW zpbYnpR9g?HlO+-ZyfGZbT=8$)XmKJYZt9=Tu;0KkE@_=oGn%z+A-fc)qSuJ z$fH&NAUMd)%eQfc$g82gRc8vysIzl?Z4PmLRkrm)94}i*YSMd*+#Yj$ z%LixWg@4Y06$;B?s8d(_f$@GKcq%wkOW-L#^htT?U{zG5j_lCpcg|l1iR8!%->?Nx z@V|+j3GQ>R-?`uqVO^7KLfMk5(CvV}rnRl$(e^BUQB1dxQ0L;6wAUrGuI(NieHgpf z3ODw7ZB}lSWSP2Z{g8BlR_cSQx3D*Q%FFkroOZU^1P2yL`jv{?e3~fy3ky@*Nu5D2 zyIpkz`>eAj%J6mD^asd8oNwmZ)-m#IPk0|5zA}E%+T`xFy9xxqvb`(1UKZ(<3JDc5l0wC+%F{QekiV2tS@8WJ`W>n=@M+_g9Ub@FEBFX#~<+v ziQ!3ixwOg1i}1|LJo1THIcpwA9KC&=q`;rDoF#j%0QTDToZY7qHK_D?}JcP1rYwP zO2f=;{Y*>C8W0^FmuKS{H~_oCaX*o`D+udKf^3QELp79i0Kd1!T=xQ;FtDSkgpN@i zHnVRz7tIzG5NxUa+T$D^W}z|O9y#+WSm(Od)auKZ{!ZI(-qG;jV2aHw7)QT>^8f{2WOL!=1_ z`E>Q}7WF$Y6?}%n^CR=Z^qa~417`+>U9ip(ugkWZ<(s?e&*ATSq7=bNPr3H+t++Qa z(v7`y!=l!df1|P5qmP%~SWxFZvtz*hPb%KB`P5QUqfm5l#dN4Gh#_!SQ_^* zMn^;N4DEIzq}{eOdyGRMdCB&+oi(eML3$P>2m4K!GIc}Bht8`o>_gRFM*vPS z$-L=kx?7W=cE5imZ4Q~~et9L4G^r+DknW3``9pG^2K9sc@%84ok#%LsLE7>#2e*Tm zaMyL@wqjDeJcbGCeKk;6^r~HO^*KMuux8qsTBuCzd|6XoW9uA{UHO~u!oRp$`Q__X zgj=>Z7323M%-3Hky|U(&%v#(H36H+n;g!Aq0YaJ(96+3@kFzS*_P9^^65G7WD;X(r zj7^qcWo78GP<9Mo{u0AgeeO0+rT$%-g@b3W_to|?Kg%@A50HC*^UIBTM(;v3%6@=kPlbg$y*6Q9kyVjfC1P^3W}@FYXPC z#&v^uKc3`yLjnDs&qR;jl5TOlUNrg@lxd3Vmw0*v)b~Rf^_NvqF_L25s`491=cNnV z%I`dzZ4CXYbsrWu52|W1GQQJa9+BVtt}(5~`|T7M`G1Jw@~RA8d1M5id=z4A5?E=5 zthmSr@r$+Cmn6(3H=w!X6Rd0DkU)XX&CFuCI5P7m>M_bL|odr$}Di+qT+ za<$y`AYaaM^1aum?>Wyi$RCJYzVlvicy9qXP#jRk9EtU5^bqusPFJSI(OOLdNn{@! z+Vkfr<9e;Twn4m$ji1z_H&B~j3VGoiP~E2{V7T9PXv9SVUjHWmaIA|C*(E zsHf;Wlv?Pt(X+8K2IF=ZD&tqO1S6Di(Z5IRz6r&8lsKO@2wf$SrY(} z{9k>P2SwEy80kik51(7756qbwEz3z+4$UPFh27Bat6WI12rIGXCMVitwter}lB~AR znPPaig!^XyU32&tXR|(6`^DY3^Uas(GE2MbD8(GM5`CsuA3gF%m+_*$*v9A1ex1dT zvt5d{J#_r8RB+thxE3?KG%hH7M;cmT=O7T|pW$AXSu|a0@50WEK`NfNWt%;Qd0yja%*|h3 zD=*|-L5sXd9&)C@@}NLkC1r?FzNC;fFXeoR7p+~A72P~qPc`mb-&bp7q>3m*I1?2O z0?SiNKGw5zgfKbVmHdpH83}G@cD$Vuctzzhq4dn#9e4cGMOsj)=^vo%+|PMl&JW9v zMxZc6xmP4-(-m%=UhoSujaFc{*(S~C zrm;_*;TDs3!Cbcj##`w>Kni&z2QgkdXC1Gj0JE~7g8z{Q!zcQCU|1Nnruk;^X9Gd9 zcU6eq&EsrNs{0+gM(3jj@BO6brr#xA0S?--1i9cbRGn|tX64*?D<;n)hwFiX9N_9k zlUi>(c^@@e`TxU%5Rn{S-xMv8nHzi7d+?7gml|lX^C=E)x!xKUp9%`~43rL&j*@&M z&bTE6CydRV^SP22d4H zF)MDRd23T6({c9ew}*G5g|TaPb}^R6BxR=kW%@##CyaX04*Ps-HEUgS^W_W3pKHBu zkE9Xq{j{K*mS2U(DgJI$Kw%)T^SS=Lkya;xbteI6$QWL&nwIs(va!Ki?=RN4M|m2z z3d{>oGrY`>Vct&_*&E8%xRTZBjuB5@XbO*2IppnV41E6yEf z)x9hYZs++@^K+)it7xZbE>_*>R*~6*Jv`Ir+Eb#|6JOmkaW12&033bV7wp)UOjQFU zP^CucqE{dOt{wz^PBlO-OZmJQNKNH%lgk0AEoQc~rB4wOMI-OTqg8*4L_c&Dsj54f_J^3z~H`8JhN zR{doOuoV<=Hmsj%LtcRG&r_ME!!NWh_qF*3Tz_NRs#aAx?8ERgxupfwPdnR-5?FO} zJiQq|?{F7h+k7*;{R6}kKc!hSuatgeTPO2(=L)V~vq3$ARpY5xO?`OxC^L~8SX8F- zb9K?cgHf=@PHmOJ^_MuU7k!91M%C!mOb}!9RQ}9%z5(f610m~dW4HQJCn2HB8~UdK zWdfQXNsm`@w{WymkDyv_ny&D2Vq(0$&ZaYr}g#`st zsJFmr+sUqmFQyzVPO9&BXE_RT5A$u=n{RqgVw+Zer>PuuRo&6gChL9kFTn&<6Qi}8 zsp5eR;^#)5Mmb3!3rrQ`mWS{A8nIO0kQW?u=Jljhzy2m^SScpgBK#njy~cSbN#bL?^7KbWr8XWx z>5F+SwjB5&=JOjqI5(F`!5xA^Mh-ciyZsvp)SS7`$r-ryEZ&-G{ zlZDzy{hm<5d7pi_DK?Ly?P)zzDkRE0Vk%wUzW5G1Q}A~$_DYd3Z;6Oy1-S6JNE3b2 zX~@P=dOJ1hCiW^qPi01rubJpeN73=YZ9)f~L#m9a!6@(*4s>_L!Z!VqKv zLw~;_$ppRu0bdY^k`fD(0=Ny8xrYS;t`cvkM1bbM21-EF|KRig7z2|XWVAWfPLhZx z@^?Z1_QK!~5IDMf{?g22<=%_SignhS6AOvc(_cJ$Ou`mLftTHACW*)*iNBrn_zmZ; z8vO?;5K<~hXEFK>lsJyFly24>d25Fx1pL9(*)gF|U`YzB-zn8J-Dx)3w3$m_z3Ju3 zpM`DlA7r5RS1;i|om7Sn-!i?n_Qqlw4k!y0F#C444R{RA8Ju+x!{|oKc&A&e} z2zDlm<{wc0W>J2Jxksj-ZAN%)VzZK5Tf0G!!G8^n_v14S+lnbp+uI3-^Zq((4JFuG zqc5&18Vc6-GS8__Y2DZXI`_8xjzTiY=B%K^zY_!g|689CWcp(Nx%8Vzy>F`BS*u<5 zvfjT*mC`rw@bn})@LNeKIX;^^r5Ad88XCZ+=aZniFibscKRh{k6&0XrJhnJKdv-2# znnneW;rlr1&C9`mE)sA4P2uh#6L1pL5qt`b1p(_f(hN8`BSB-#0Xr!ZIS8!eKRwG| zW0gO3{Y&-#8U`Z;2uT4uC-%a<`&$Rato6g>nz{d*myYZsWZ~KmVZb7%l8^`u!z2_% z21fP&KzS606_14lGbVr~{t))}!%Y7hEpReGaQ75AY{~uz*y7>tBfw5$!p>v@TwsSS z@8dqg#9`;e!lvM$d_wiykXnR>R*dUSEN}=D34ptIAMOX}3iQ5EIPb3GeKp&Tk_AvN z_yLmhlD$j3O!&@tK!0xLfl!jHCz&2YWdw1r(QZR7Mur@J3Q>`EtZ^cwNMm960W$QG z{Z4or;Ha!NK?ixE5TcS=O~GC)+eHl#*uWw?Oh+M1rD1FiOdT3Zrf!i~uy9;8@{de% z*&kNUZQ13fJ}+*_8GpaH-nrPuz}$Mq#>t ziLc6kr7BvCwevdkG6BlTL2()_W4#f~O|u})2(e|dG?Oqw5u3uNLMuh5Mc)aeaiJhl zVGo9^rN8RWstMh}@KhbXoqUnR3*m*f(fB4zyyuQHp^qbe#$1@HSU2zbq!*jDdYla6 zEA>rp)sZGR^#|x=#gWfWf+s)L(PZ9;W{ACWZY1d46wO*kN~nzcBuU7^!{&$GI<|Z^ zTndFpa=wJ&_7w(aF0#PW72Tn-#R-Ph?Y=}I(&pL^Zs)&)3C)WJQLK{hEx1fG<%nW5 zZ1b`oK()z|uM!9dp8t&dCD}skxe|NRWS&mwu7v29_^+QY0vjp)%3LXafW|Skc~q!4 ziclo%zWxBsQ}-VrrqjnKZ#3ZJ&d4SbVXeCsN~w~daU{#1OE=`~C|N#*WJ7#^*Mc9Q zq!;TcoU|QL2Rc-O~meX;$d3alTy|$ek>CYE9H3cA$n3+HIRA=MeoX04*89E z4LKCe^~Q8*SJB3c5cOD{QW^0L$imK$98HwC@$*^vK@B7gBl+8JfpWW_h|4LbzwWy8 zRMmOBph*<9E4;@>sm0tu^a99pW3nu^Wm9H!6%q}}IfUrE{o+Vjm_B?bKCg6Ju3TUy zC8uZ#5vZd>`$TKUz+q4(FQ0yJy|>&uBEKt}R^8?Ef+q!wlfys- zI5$L#&A7vrF5qOyAtC1t2KcY^?D1kA&qIfN4RWME%GPmUe)mGc;7Tk=6QPUGxdEo@ zG*#S+%JzK_o;z0CGYPxED`I5l65boeW&KWn>-8n5(t5sJyxH7a%uV8Rn?)-3MXv97 zKGvKLX2&t94$y$P3v!ncVX4N10Qz91$ZW*L;oKhbI5v7`rRO^aD#U|{1vH$gmnu<; zh{#eMDU&NDJpNKBqHoVe7&O;Tv3#hWmfj-bSyTN0rCuid0BIQX{nVbir`w;d5K>lRL^-*D_P(%AzKL+R8pten1d>K2LaT12L!b2O`C-zZ<}06yQ(rr=C^)qsf?rkb!@_EUq$H1c-*NwNXm5=8*G zFMKJx*e^_n-u|4Yh~^w0t6=!1lO37lsS^*`|nhY+K>V$aLr#^5H9i%KaOE+D3{?C5xtVVwXD-Chry%_u~q$#(idT)2~NOT-gRF zF+4b(ButC7H}?(Z-rLjrl#*m~gE19Xa=ID4`QGm|%B;@`=gn6bhB|&~a14%SAMYpP z>yaj~SVIYXrDLOdZO$TN|AKM;BStwKPXi%9hT4<5Qd?C@$jv1`# z5YITqvi@|N;jSEdod4|~pB`^AmS)Q3#O)}fUyMpcpYAC0Da85MXI=WO_9f&}DQc&j40$Ae@ymsG$Q zdIVhG>^;=dbp}5VpKyUM* z)qCAB`=plzPBz)&wi@jA)3tjm7~!S8jJJGhHx30St4AgIYg$l>nM&i&QfuXozFpEw zC1*zRD}DbsDdqc=C$`ZnwS7%|O#?`xJnD*+N-L?W>2@0w0=wBlj6(JdpEDBuoMO@Q zDUM&t$My9~VGP)w*hS+CpOcu9oHY#~%Ti>UVk9;3#rxY1KBL`YsqO8DOvDk(SLql> z*f_$7_g+5lo|9$Nm|a~UVa*~5RqhHX8N_FV+n}I0V+z?)}nMB%cHp+`>Xg$WK8>mo(AW4W0G#f z=Y!*MviXIKn)Dnj4IUGl4oJm|ObtBjSZEPEkiJ4>^hfe3X3rQ_*uW*T@@3Zz*5Mj5 zl7iVJ_!zEP-6FJx`1?f*y^#3i@)Bw77S=>;amt>>XLh`>7qLS^~+K za*&E0##V4T3BASQ`hS3mrl=E4E+ecYOl0ty?pOL*8*0z~SLMxw2}IwLjc)qGE3p+~ zXVUmrP4H-R{46wejWyH*5>9TD(uwPi&feOy7)dR9+0Bm zKGhYpF;~FF9Wu8z6o7tBrx&C+utC}f_zFw@O~juZtOQ! zMxT%nqpv0=j2~g3O3IA0bh2*G2Y*qaDk`Y_#Bi72Iaumjvo9owf!@huGzAuE6AmjIu=^0rK6kWwDjOE|;(T=#awg5!3s0Pdox`S<+tg zRfJACqd37ukwXeKoCFJ1wRo$S5L*-_lI$na=N~2|9`?FJ(87Eyx=W;N&mW6lTNOyz zx;!Q{q3{-76rrZZx^BZ0_`To# zA_?hpD;f|zExW6s$f=x|XDM}brGkh-#At+{gfIp+YRmk0ku$I9U=(t4?;{_Vj?;_8 z)a@&&3Bgxkp~2CkN9QRxpdnTgb4 zb=?!i6~fq0fjz9#QXEg>u1$=o5u~t8lhNZYR9@r5fW$el<-a>UiHnRhaaZ}&{v!5M zkWO5T_n`Wnn!nH)rPd7$KFMH`bEm;evR(7yQ@)wU`U{PK4B;c?Y!_#tehH>! zq~FL%=vBp&0$oZ}2WX$nj5!B5adHwXA|8KI0gD#+N1ly6@ZpKEXe#{3(7hk`N+yk~ zASDpYsIZG^`P`@K zz${MK>-I&803Tz79#>B zgj+CG?dFv{%D`vq8KP$VAi_MnNWL{5jaFZS@U8y?yjf|+PxT!iN8DyTo`?8GQK z7JhAX!JW!=wV*4R%L&{ri)T>`#Ftf!ETy$_!4*Zj-=Tib%7s0^lHlocai)al;)6Jy z_~VNJ736^Epz^m>m8j(+Wl?EiDiZ{H+V@YHpNdw$sGXwafia>(St}4-jXhz{C>K*L zIQ{ArUd(B6$TYbfM5+t{yp4#5DzaS7NWI(P0M`iB+=d0oskaHcEcx>+1HvVD-O{x5 zDc!jvL7WkULhjrL_4M%x!z;?0-Dy3M(L%(RxNk(Cs^`3&sp7VyL<}$P2}D;`+Xx#9 zxbu(MThqFD=xIwfZug21*%s-;tVy3FqiN^2ZpyS~6_xlIpOuFVe9K00vnEQ~>CT3L*tK~S!_tZvq!aq&xoLv{ z)Eu|+c(G{}cihj#P{EarrGU7sv6I|Lfe6c5P-i75i7&ihXoX6JIwGGyDY6xA_L?bz z0blAq3|#2cJgM@8^uav4r9HEky?D5!tSKtC z_Fz_9ww+ zviQthz17ivVF(CjC=!O`)=zSJ0u_}|2AZS(h+`I==bAM>PYt3GrZX*SQCittI3Z~0 zc(jhsiHqfsrVuNbsk|&7l(Hmhg@com)5Hx-t`aH!0oo;!xkLY^vLIdtk;aI_`n;L} z08m9eo5U+xm>NV?Nw!pp^=yU9ZseQH=V~sGrO4%Yeyf2DmpW`m>!?LFHHg!!>(&R8 zi?4zpGq7K(N+dL2)xDIa4kAq?vvPgF6Q%1{9?R|Y0ALp<%R=K=5X}|W)fX~igaL(b@h!NL$Npy|xi^SH42fT4(=-R-V9A@@Ds1sM2i%!F6 ze!??HIXyYvFrTH~B;yZBvoi<0U7-XO+d2tT95_9xC$Yt{R)7%r3|(O?GF>h=4_vOR zYAOJWgn?aE7~d-OkS|3Zv4~@6Fo)Eli^fXOCXP@N6rN9T{94|zub*AOI{;JWD{7*l zboSf<-jwl!@7823D*WC|B$J1>Wdn0YTF{4{)57cpr+>K9Mx3E4?ltA#+{f>3tpGl_ zzs0GmFxyJKuOW)?T|-zLoB<4wdL)XAKl-5SzP77PcALzMEYS|N9xQ3Fpq(M?5_i8( zV2LfQkZ6Z0{d7qYy=I|DoWQyu)Zp8LV0N`3WL^`2ORntaEjEugI2P5c3qtUUA2ycO z!>CZEu?f9HGn|mI$mW#ehDdNFc7N_CA^`9$j31&IaW#nR(O4Hmxx`h)1HIC?EZPKJ zH>@=+)%=W}1l{t7Qu;7y(D{m$P+ZKiMa7~sNuwt|tVmM=JEYG*&5Z1$$W5|fcB)}u zwOSSQ#5_cZ^}Sc5ar{}92$@=x#)2lO;InO0u@bBrg%I~Po}#HJqhE=jXwWioZ|$MC z;qXBRngva$?{#n+yBZ^kFbswZOA^fase;uQiC>9Ig$qkORMkAdQQswB+y@=elw+us zB?S9zJY`94oMN=QAZ3$OC;Lo4wvsj%mT0n85l#>;n0e%}TrhOe4|g*Ym&}GJ{Hzd0 zRe~4$AuW$Uq#$LHSg|w*TFqLIC_T#48vgM?Zrb7)V5@W-vwGSbII3;H)0_Pi<>@qT z%-fmj$R%xahM%EqcjYj7torwiOWa6{Wus*qYRBtISkSnlxo*6uAzYIWkMiwLkvt(f zJ1d8%>RO4ctO#>r?8hjX5}_tcr+A{^;horSO1cdi-GYe3IH!1470Hh>t+M!xl-LF? z2em<>!Lu4@vaWux9tqW%2p7ZB(?@QMR4{~4tR z8n(?&@zh*tL%MiG%#m?~v_eTr(f%z%n7&sLHb%CQw74C*CV?NK>zexUX1kmXOb%gO z!|NS8NCSI{Z6jG~16U~IyS5`ct^Io>o#LqqisMViLxTtiG#9W)40Q`&xMtJ}WJ7@d zD;JXz$=>5grOGyCXmEm8c_C({)UfuF99I;@@g0d@ek?xW`XdRqOj;=)1Y)BZ4JsFG%=LD^QqsA3ZM_o|eW+lygK<4atuMlFASB>jjxuqqh{mQ(O4SX{;QDB!_5NojWqc5) zDbs>LO_p$b{UOPlIg_kE_EEY=*R>_b;pS*dl(K7m%X+Dcu6B(ZQhh-~00T4bie5;X5m$i{7z;#*cXubHfwF;{s>x_3TRY>C?mz`G)5Fz2ss zU$=qDviF8?MhQDa!>ZVysp)G6-q=YiPiAxUPk(5vVX?WNEFEaaJ1f6oZ73tk(+1Nh zj+MG{7_QUXvoN%0j{a78r;{`icA{0OU61^5vF_KtF@UQ-C%VXnt`%)xYe$&}T6wYN z!N}1zC{!Ubyhc?jbFaWdIn-N9C@Khg$z;db3a1^d;EyZoZ zVpTe;KCvk} z`hdeWWlZ$63D=GiBZ4Rf{ZZ>HjQ*G-zzYyt?S>`)j?0}^mz%Q;Vo)^Mf}}J069&TX zf{0=J6dg=Cf5#0s?(b%;3LPaLEIIx<5e%uSiYU+9-EM1RtqPnXRSttp5$Nf4qrsx! zpwhRiEI^;7o+aR|=xV8Xl-_phUeq)(u?o~`Y*-3gHFB{$gDY&1qLsBcbl2MUtqR|wrkq_>D2F;t$~o1r8i0*I%2dRa zABBuL_R~F&B40pheiYKDLe0~zh=gD=B^~l1wh(>(#D1Y|7C6!U_JBW#R#x^(hjhA6 z^*i>wgY-Edq#Z^2VUu8GxL;hm(k3nqi(;>>$#%KZz!j`Dde2?siJV&QyaUfFGPgKA z=DdT{S{Y_(=R`omSFXo3#SUq4=zE5diL@su(!_UJ#rJ9H605gqnV!>SB15@psoR!* zYR-RV0RtA>kq42GN0Be1G~-7-%>b-n#OvqmT3WYuUnadldrjJlvXvHiE-MV06u5Fb`SVv8%gKBgyU zV(Cd+%7o$M!=L1T3$d~ii@)gAR$*bpON@|{NN#5~TKaehP(g)Zt8P(h6`Tsz`TO3m zyA%XmW73isy?Wk6`=RI{Z$J0d^ANsuhNmj3@{IIC+A8QTx-llzP9@ob4IV}Ct1rHu&&|97Ml_eC15@isRSp?@rPyaBSTHZD*J-iQm6nOoHUI zN)<8nC#v>EL%arKk4$-A64|=HOt*b3A5fxR&{xpQH~&)E6}O;^v_>!VSD}H1*KWho zg#la>t^&58_DAiHrmZCb;QkOf*4|&`AwEUfi#R|smwa~FCe+$L7sSQGDo){xc?GL; z@fQ_%2|z?#THuCj`2-!D#-|Wc%2`P0KK|W*$1FbtRRNX(`V}J4N5L|%jF~#PF?jE+ z$^3aqH6z7VOHYiHHoML7gUF}Gl%@M?FKQJwanZF%@=AxX6Z(AhaeQro3>u6=PcBti zVuBbI_WZWUwn%2a{5v@zWI0M?tHbcTL`ByMSm9}OMHyJa@uvm{8k$H6VEV-oY>Pl~ z!IVmJ&#DrWacLQ{LJNuCA(0|sJ<9fzz92=ywf}%MjeQOPKLQfxaYWEZ0*`>OoY#*q zc2DcuBYsKM)L*1sD^$=%sB__e7P!i5eC+}4K3XYj*bAv7#wS5jHTj>m@48&MC^knF z0v|BR*y3ySP1VwNd$>!#X@;cAg|k+M#UuvtWY;(Hu_z*_EK+0VG0FU_u0zt6AIs*eWBY|`oREBEwLY8qkF7m zMTX&HTN7(#5G?$4(9XmwzF+#`o7BgAK832?SzYJsS3pA-9sd9qkbqD`Qcfc1Krfp^ zp1`K@x3pu(6;lJ8SztXq$^V8-k^$QqwWQY1DtsRNOnd37gDDkP`eFO743L!86qY0> z8k>m%V%?wVF_ibzWOsD9R{{Dk|5#2;L+~Mbk63|T;?)M6em+x~Sg$5~w(#~KB z9!7u5@7(6i1l~2M@OA5I!;!g+)qF1f0Scx6f(%u`s-3mqKZv4FRB-Kf>)bwSLmSa5 zoWY{%SZQIp%@K#S{6+!*H?3#~#1kFJq*Yneo`J0;Dmfqsh1>q%Vfq}exkq;UnNFzq zs?T~&Mn0Ts;9g{dJ=64cFeFtXkvO!mlf^zlXLb6zu@m!|ccfDIx}S|NGL|xl?ku9B z$4gi{UV2&+v3ZcoRY~VkJOY%Fz&dLJ}*f=m9Xyp~bp~@LeW8 zbanf~iwiQOVxcjAg@DC>10GD z)Uu|*Ud|+ z6DkVZq~TL+x;wY;7D8ab4JIB~#nub+6VblJTV0lCg$P<=wP;z^OmZHpu~T)wm}YB1*Cx>A~{IPiIlA zg-Kp2v|1Ucef3hYFiw|K{LU-i+Y70jl_%@}QMqj0O&6{mONIn}nTbQ1_)k#=La~q# z9m!{z2h<*x=6>P;I@^BL5d+NGvuPc3@eRa$Tl5zQYPeKld!Uo(SW50avOC1VbM$-I z-GNRj^3-Yhk@25^yO_|PmScuLb`iqPk5BPoH(_#kfrYn%S3gNcq26AlZz>n192 zJ4Ims{uQ0iwOl=cHSDtMp)1w|Ze_d&LyCA0lejMd6O|lp1nW=qg8_A4xTu0QA(@=T zh)TQ!{GpZ;()XYKx~lSvjTO|5G#tr@|M;?S+iJai@xS7B{)Q=KSgWtM@|brI=eUNN zu!YAYH?ZzVt4JBZc~?|E`N zHLV}m!68>Q+xd&gv(3F}&xp^RrmZ}Qy@_AllLdBPy%k8Z>E^42QVw~?&F~m661qIO z-8y^Qge^KmyGVrAle~zx77DtRJ4_*6RKop=DExIhyWL@zfU9$0ifr^U&gps`rsHLE>K{TW!+ zPz#swy!)MTOH38qyZqZCM+EkHoXha+q*Lhaf!?f$+P`Vnew4&};l26(FJXB|%|l zcY42YeE_t!Hj#MW>qgu|CpCcr3~Qk=LDXp!gLBL$8;?*(cd z*My^>TAU+w&1(l|_E{arF2%TqA~+o;i0Y^kX{UdO1Ku^v&mcwha4Y(E`QYUiqBUy3 zTm}1H*EkD!SyEe(ub#IS^v1<9#(>?b2Y&)~MNi$AM97Ho0o^k7!V?6*wLYbuN8G>c z04E`Ue^I)FmkId2cisxa7Yb;z7+=h*Ib4uDeep@|)tjpuv}bYZtUG#=(7#Yc2UypD zkJ(vW@CdU2_ujj#zj(pLZ*}7F%RgrHA1)pc<(c=(4X{YM9CeH)3)ix3wG(O=y%VVO zjGAr9%ElS*3$HA-{mdw_@mMdk0;2@g^eQBu%Flwkw`%2+Ix7=<#u<&-qisB0;slUD z)V&S|x_@Q)4&4%XXOLANH%q`leU#cN=yla&A~9_~m(tDa`sauLWHMPG$_!>o{-Rd7 zM4riT*g1J2$)f_dy3Qv57TLNi-QDG@^Ld<6;-yPLeSvWujTr}Cb$7@$B{GS}SX=;OuZUK3;jkkdr{!pZ`^Ex^{df~RD~ z-4tcE%}0UgCUBisaq$8X&PPyWXF^ezuMdq(P1MN1UuRMtzd`q6k{5_^vG<$!l;yAC z6w_~tJg#zMi$g9X&!7 z`5$SqOv2qj2odke4h{sdU9;(apaWDAOG5Dla7X_}(mj)>FFf5ryvs{csYfa0?Mj4q zbfxkNBd`5-%N}$SDD+;he;^pf_=r`I)i5KHy_I>2p8T5>$=S+T>%#|vfcr}F z>q!OyLYItCbtviYc?douZyc*egoz4@r0ToFlMJS%aDOy@gUI)TmhIrU z&tp@jG^o&7{J*k+vRIx>_llK>O4j<9iSwpuO8;h4a%^o)t>mnkcF${nY33}r2WbGF zp95&0s*)g$rVt^(|M0VW5q33F2jxwKb^!c=Z4(fs0-$HI=3;@jU+>)1MR+{Wr@eHp zg{P-gO)6vpa6u^@S8cDLTK57+CbR*EbpO3zFJ*pal8W8q|G&>HU?7JDM{UDwPmz+y z%9`?;a=N11u=1~q9iJ3@6$PUl9rSQq9Izu z+x&biMq!^6<+Zr1g@G_7peKNaTkb~H@IO}%d(?UcWg!l={_%kXG_QZGh%amh&KxHW zgRmx~nlFJF-B0bn%q6E?!pgsJw$*?F8McU(_6!NI{r%G=k-9Dy1~J`7D5M4uh4yf^ zjPL?yOk9O$Nx6y;9w?Bm04wK^4##TLI->z1w;b?nMP?i+&DOcrIUdZI%B8CouF>}2 zt3>11#c=iy(-(hIVC@}>elLVH0vP|^c&tXgWOk^6wRVZJf8$W@r!mtp(@^~11D#C{ zfcw!hLMQ-^viT^dN}tc<^|3pr(fG9&<*%MMUaWZng2hB>t>s&xEI&KTS3~)d2yb<3zSU3@4ci!NLI)ltMH$0bJ<&dtC>WO;LF|1C@xarW}vM(CZ0E>(}x zKvE3;W1*C=rceDPtsc(HSPRF+VjTs?`f$EH7azVhtbEc5iz=j8wisBJdqHKrdR`T8 ze(Tvq&x*DqJ`A<8U^z!DhU#e^KZFa)50yI_s!U%0dRrsP3yQT`3hNlZvL5{Sp-u;k z78Ay>!KTA?D!@mZ60O>SvBGDrELF9b$5#39t_4e|s7Ui1_eXiD{yl-vXVj9Bqwf3(H|6JRh0Y( z4=MAMx1@;sI>aJ14-rhM;kM{;2VGs)I=T+*=Uzy~z{b6(^N*jSRFg{|XprI$czz?$ z#k^JfyH0hcbY(43zc3U#>*R;XCcZNX#V>Jml4gw{m3^(#IDxBhDBUM%fTvk!uWp9rK?;hA+HL25JW7(&6Ftd`wR7N1!|wT=zoS2^ zGe^BiAAYOAqi?QN?#@O0tgUe*-V-1A4%G^8P3u@_D!s+MR=!4mFo9pPYl-!9GN(`L z#Oz?7;Wt{def=&*LP#o@;z)M|D?P_(d!+wK^h(hLgBf)}!jIv*;zCh6B_4p>>Vdh+ zzMH+AfPW2#mls&5d%Dz7e63$Xy$IpFgi99dBN4rnS79hnFhy^70~K6g!Dx4-abRwe zKCR7jT%?F2uMmDLDoULV6F7pegJ}0M?5-^&GPRIN1=B-1m&l&6!;dkwHI!m~ge4B{ zBx-Y60H3?xcjb5zXn9em*F(Gq3AlL1Hqrlyhh7|FcXF)5uhqo|NMkP_PEpO)pNcmf6gH!)xAMSeR1M;CdNlvMoaC_>QSomBrTt&oyO8Tt7VT671> z6s9^aBHc<8>?jo-J&9CrOAq3gqz~7f@HY%p`Tm#~sj<5mF%nUBM8)^!<&@D?5l$P= zcDM1c5fzpSlRKDd3i{+YB zd8lO$*Pb&mbG}E=&UTLle{+u(=Y0m%H6c*S5G)B5isqwBRKQ>!zMN3)-_qx(4#DhG zRpd)l)~rnyxw=WkHJ*ev%sBlmsktlFjd`u8sPw~5fzhbmmHo|o1c6ONEPET89nGr2 z`Y@Vx++B9!rt4+(>NklTY53Z-_hc-Rt6$nAY`x)CxeA{q{xJB1}uc1Y-K zQP)fE%yd(#K-l_i)BAi5=qW{rj>XQ%&YSzf{3&b`$?nXB`N!pos$|5U?@b5^A$Mh! za3?J63(w;J&zqTQv!)8<7BSBiokZ^#Gt!2v_wFXK@8113aQ79iK3c5g4n%ZKRQx)3KCK#OVElOtG{I;=mR#dE zkDcsgmK9*Ap+gW1JHWI@pR2#`Z4>&xU;G!Uk@M$L8w+rE89&9PD_1UEy>a!wx58e& zLUEN<`(+=5$3n_(v6ZWfO%ztf*b7)J+b%B@LGbueaY{Vu{lOxtc z*|H?OAx48|oY^@6kM+na_|g{CBHVRqk1JS+D*Pj&jPtEQtQ<`U zx81cPeuIT)(gbI_JTA#AI~l&{`}4tukwiGc4a!WAeKD z=1j}%?WW~e3_A;y4Cpl-&}-mL1^**m)+VP&cz@BwEBG$1=XfA)UcLM05|CSh{L+<6 z*MN5)T)lSX%HMLAuaHv!_uW16q`U+33TAtWy!+7ds=PLu$^u@_{>IAV#q2-#;oXn} z;v8SSitW9|CjQ)9&^Z zGg}9b4#K?3cZ6rmrRPZw8vB1P>Fj6f9q1lLA$dXQ9eepw=WPyL;wsEV;nb45eatWD-SZ`*p-e=e~L z^gPdeQ1NO*x_c8!){Zt6y%VK=m|p4}=_Dg|_UBTOWuzt{^_L;|2%KL_lP3>MOv4bZ zufqdV@I22+_Oa!e{B!BUEyp^;Z0>?s<|4X!p2bMLSKwfSXr3Nkv8UNmKJrSS)lWSZ z@xOqZ9uFzIQ|tUX4SOQ#=x*oi>-@PCsnww+5-4(4I8g-aoQASS#fv_5u&>L$alJrM zxpXI+S~$x?Of2PG8Dz{aRnAHhk znPQ901rg5_5w{uCnxnFz6A+oDYSFR2J*kefrcJrWUJk>wCCf5-cbL$!{B4_Ui6-a;iE9eA-%#Hd-GnFf$l1rbsi87Vq> ztMK$*DziXUNWZ?59*rHwfHUYu!M_Ount|-kzMgn)_YvBF-s?G9*y&kbdOpOwDiGTA zU@EZTi!TRMNGMV8+y3{NK;krv4I&!mBmga{qER!FmxxB`%jW>UF)?iSkTrmNkEC1G@>p|G)mgkK?2>G4iat}=|a1O_SL0{ESdCX=D4h7 zWBTech3j)iU=*s6k&;!Jre#`@29zWJ)<)*JaWv5F@-(KeudgSs4^6MAC?Cb2%HKEl zia#bMCN!+#fNs~$&hFj`PfRGWQ7K*94Lc|uaWN8!RIZPGP8{Ab65wTHW6M1$1sTEN z=HuB#iX7>vZ616U{KnnzK~z*!MkKH=AaGyAnCQ9TW9c4dt2+~}np`fr&4Es+pc5Qy5%%&yk#WtY)Yq@%}iX7>Et3PK!^ z@s?5BqBllZ;sejmJ;;{LoK6rE_&Y zq^BNf6(k57sz>255q@JWPH3bB9@^1Cm8i*z0ST}L)z;RU2t9H$d1~sP80v%oLIHDd z8myzkYj|FSBUFgr(Fb50Mxv{_H)ZOqCba6}-5bNyEZuv_9GA5FH{_(_9ifso)gT}A z*xsRVpuHUa^7!8x7jGayv7{Y~)%${*nNJ&*)5ZQMTyu;{ArysSM)H!BRdxq`D9`#g zcH%LG166t!?Yr>Z35<( z2@i;`hPnAAn|4Kt(D|`$rd5X510%s>Pr8Yh%RCZ*A#Iyhp-}5(n=qUEt0a-w|D@I^ zQJt5JP2AUX^I9^Jp(LuT8~h|BT8eceLt21bJ$f2@K(5}1hQ8TQL8$dGF^Mg4rEua{ zp17nQ&nKR|eDqiV7N-3pD%n3HliW6&`znT+cqA8mjQ&p*SUvN`jx@FflW3%uAhgHu z?`AORBCgedZ9xv+n@Z32joaXtTEc{u$S7hlUVcG}e54Kpl!%d=zt>PEKigiFS}}^~ z0EV1x0Xnrz+E)0ZDm|h1`kU7XyfjR-AiN_DY}K2#P5%2Id_`mt?-)R~I{~S2XPf z--S+cO^*IG0C*Ko(n5Rl==lmLG5F8vf6xZZ!ab8T!CT#`f+pkMg4U)?gtDQ1%5wrx z)zsV(5Ake3QsmcVBLR#PjXr$asu!iof0t)8Cn!TyzCaQsZ2e1pFoSJs+b(8cC-o`P zIv==lx{ti<>dYN8(vr9!&_AlHr1t*xD9Scz7{Cx1afL2z5@ zbuh+WtJ||hb@<87) zer{NuvAG!TrnJwz90{E>v-@Z;Q_71#@Ph$WZ#9v8N~q;H^vXm^tJ~4h(WAVy3}~d} zPg5z{)YQ~WNJ#B0>t+hrgjc*RfAp-}rBHR4J`Dr{F;c(1E9qxXU0WL+9i?AO@Z7-! zc3KiIKMtKUAfoTdl%mGSp0c1xha=ztfyy@33wu3$HzC)Y%jfK#(bK{@E{@#El zg9Qpfk!=m%XMz%$=f}F~*oCI~`^H~qyJ>IQ#2^zz6qSKv95xu@)YeT=tFb*EkAZGF zu!3FRQzXp6uFvxTe>NtKOF1mv%C6)6$C&ZgqIND}B@nPQRENVd?1oE!`h3Lp@6!I> z?nKrCI@AXVsrg_)u6eUeS0z>{i}aSq?@ot)x;!ySd)la0 zHl?te*Cd_nLh8ZWgK_lt{pr_Y29-uJYDUf?UV4g}+M5g2JoO{}bh&SPnBuq)ojBWB z0=nFIEXX;PxL*af09lY7666w7yNogQu3pPlh2^V(Bm1x!W7g^+R3DrdqNe-bud!F@)Gx) zP=2N9HVC>4oboZ}{IaBpm4gAV5(&I~DJfq+%_KQ+-pS+!Gd-l4oiLE#4=>u06|t1#-v~9jP+Ks97E}5d%5+ zC`-y}V~gNEg3${d-zWvY@iRaNpQZg<`{1+q_^)BLsck!Fv;|a0-TYpXtbGGNqQy~I ztS*e6+Lna$_CeQGBP(Z4h3~Fd>w{4yxm{n>{ZZyHMF`B7xfAl|5?7s*y$}qg`=R~anp07gD8pHD z2u>TC(E?<(fh8+K=|C=@+RR_EhZFb}*JZf5k@U zK)mBZ64HF+n}GVCOE2(qyqrD1{He!h0AEbYQAXG9a6u$L+HPh{W(cI+tJhwa8A(19 zR1Qc^ZT+r&lJ=5m0k9ZteDOM2mVjvxxJ^tz20fw9tv7O@=u`MwaLF z9Oi;yX*9MlPY-nDk7+tbWu__d4iKa892P#}DMzZ!@)0IaGs{>`gbSce&4Sd%LMnh!a#V!jjZyM5z`pOus71%CrQ`uaM1!k+ zE60h!V5|_Tv6*+RdR6a#WtFH(VY615`%2-cHPVL8{G?u6Yd+tJO5N2DwL+*=R#7== z`YKme&c@$Fpn6C87FVGa(T;Xc&9?#U*-N_|p9ga1H{&Kwof-u2#=jW30i9_KmRTlq zTJqjq-e3hLKusaaU1(*FH}lN1TJ@gcU4#9DmNh%>V?MI8B0HYk{<+VR0NVVUB+ayL z*l?1moT~SAook2;;BtdP01yioOpLBA7L}auU$U`*k(7nmgVyX3K9Z@<)OH33Vl58( zIZ2{GH&G5YHbOf;vkPnyA|i}@94j$>?Ne)gF;U=A_DFtsu_)hZhDD`FvKi;XJ}Sjo z+Q<-iJw$P8ngizz$vH%OrXfZVCO6F!pel$dtxECe!P0p2UK7%+FyWK`ZqUAB65g=E z$4nU7uHnlQZHSH>OonL+jt7L7JB;{Qzxa(%*^vT)As-VbJfGappBunq3K*1E!jgJ! z!z&=0$OuGP0I#e{Eq6U5ngZ%rmVCT$fv%+E-7%zHsN*EoOw)=Z4cC4EOgVN;oy?|% zKpOC6|6C$1axh>npe*AwK&YnE)6-M?Bu+&;!U!xg6HQ6(15OX~Ubt1vh@-ExN~ZF_ zKmld$PZ+;wDp#G#$SB_I^44e2oQ*oxXJo{(0r+aps1$}qtBd5n7ZYRhNqzNh`)>Es zR8w_&@1vek#5s|9i}SH?Xzy(#rN%w=i#-r#c}O*~NyYhCAn5wLA5~`{p~S^qlSZYw zmssm#+D`tuXGpQvdd;1nWK^*AznN|q6M0?aS~Kz$2)bIFKbu>|`R<1?QN15;YST-m zf(|(TwDKo4u*K_t1k*MFQ?Gtg@K^DWGIK5xxyCSe$6t%2Q*jMwuudmoV-JPlrr7f!&Z!mVT(3@nivk`YM!&xFXoP!yA#r9S>z65UyAWfSt}(oGa( zQUW4KosdE+Xf`O+4NQV=su34cXa2|hEHgdH*)DbUi{kU{q7rs}W7B5vBa(Aon{czd z3C(Cx&hFQ|IWv%ZmA`kxD|c;hO1&>dyp2)0%#7-pxmW;l&2~|73B-$pGZ7DF&=FS* zgp*ARIn>~xlPcX0n~o@)Zr6wnE&#UBjS>Ze?J%@MM--1ga7i6754F&VwnS!}U!lYI z<$;&1IfrROx!+RYhrNC>p&BGG`_T>s#MhuU^CK{e05X5Vj)&zBx*xx53NxTF{06|J zByz7gwDE#scQWC3lBURZc@#5PbaW*ruBH z&m}n1;yluQpT#8`n4u5Y7J=XP`8c$;+RJ+vS~C#c-hgyHBNj3C3MiaU1HjkLy(t+C zNMti{Y)_6V%HzoEZ6WpC+TdnI|2*Avxc0W;NiWkv}7V{hh`g^>png(L@?WM#+#X6lUt5CkE zWfP(cJgKJmnR5PR3c5vAw|16N5Nv9Xdctq4+JHzY%fX|Y+|6eLac0kBWc~G9Hc!$#fny-ks3f$~yD9i{Cit#u4)n?nsppcus?IRG3#^IFs#LOPUWd01EIWu zX+7WY2LiKXh$l5ruhVLys||&%_JHEeb-mPx@FwnRnAIMTtFbwWxIZeun8u=JoQEXi7RNMTv>=^sqx7NsFfFiCp9t6BECi)GP9? z@Lzr26F)!$7TnG6RQU1kr>+|Q2aSdSFyNBVNce5eVH|W7&-qv+<}?~Ae7-#mv!aK> z0)%YWKc&~t;|}o~J#;3$;{j=Lc7p*zRxpJLcgl9dXbLOP%|a5QY}*JE-o!cp`KcEh zhS#o@tnx!txfNET6xXm=EBesNl3<{aCvQ1Gj1GKCt2i_RLz!USKw6*liSSLYdcg8{0B8`JZ6B)u2ak-sU z6o7iLdUYMAC>y7HC%mWhnH~$fVq%mw@M7K*bC8Y>1OkD1blW49pP$lw!hpP&b)p^H zra31B7Rd&8`l%cCfP=harc>`Xx~Ur~1nN@Hvi$*mU=5mgF_Vc+0X|SHTTyMTcKh1v zJOKd)HR|H%Fo4hnA=nzEKxAj>!)$o1#HaUIg=9psn+6w;m9Lh_aM(=+6B835{R$Hy zc|c>;)Kqz*o)_?@;H?wm-Fi->r>Cb9P-zSv7@6>?n3$OM9RAwU5tWXQMtjUGc^szL zwmAzbKLOB8s5By10DPJ*u~x+_rLrS3H$Sw9TJ^%H$}fUE=QQ$p=5^IX=A(#Vj*iN} zOu%Iuq(yI!c62yS{vasI3jn_scoyC`hJAxa;H%3w^-m)NAlU)<6lhm_<*$|JArF{= z)i7qa0`fol=O#@BRz!QZ=Wa@Cg8g%<-Gkm#gPw@&9iaCltIuza*!XAo43zR6sYYfB zFWA^fBo`0rVhj`JfWe9BIWG|NfwZZ}va_=W#S<>sb5HWr@W%9fXwOj3^V*fDr^|%R z{d`pKD5P9IsuuEDD*~5mPqt=-)nR>iuA}jm^gpPH4+Lv!L7_6yd;IZQ+wMbqfK#T@ z5v6NO^?Rr|WG)s4Vk`18PO-(c;6b63l^ncBD{`Pt1wcM^vfS!K2@~OjKM=h}ihfB> zl%t3q*?bir0efOUsgdWHtqL6&nbpnpQ6l!YbAr(*h8pQQ07)-JOa?x1 zpayR$EF&!l3uRjcc+{t<@;|yLzww)I2r3w-?+YsEQfCkE@gZMj^Vg|eL-ZORZ#UPe zkzz{2J`qc$exSNCis&^d52^(Q=)L@Y!wFzq>&QG0dxX^LQlhWRFIdQoyjQ66peBQ#-a~r4|3<5S!o>qbwQwc2LMjRcRYF0 z-rswb!&73X9Y4d^0q#EU>!b-EWejyuJ&J#!*lv+}rEgrm1e-{;R;WLI4$TmO8h+Ec z$az;9@9^iZ0i|^J^8s6JxrtHumnVqg7n3aBzMur^q=Rn#783ckjX1v^RoQ}_Gig*y z>-IVkH0QL`6M2@}^om-b7x^kv&$f4=?pfMj;HOUiS^Myd7&IzX!0x~K@fqSrDg|FNS>o&4jO*$fVq9P6%GLH&p>t+q-;h_z|_9 zldV@rI}9+4)t-K*9*6zE@w`o=yG!nrv8+S&X-QSktr=R3Glsj>#Kcoy&9e;C(M99c zUinrGy-?dmpNe;(2)-F{cc1|Z8K97olc+fXp1DJgX0eKl00Em-SHoy^s6|JOYK;83 z#O8~}dr%JFh)YcIMxaiRR-}+L6kNEYsrFp?qg_q1bZm8WVj)xt!!)Frydz zu=@|o6yPC;LHp*vL4Phm|Jh_TfrrcroyXB9Z1L`BH=PQd1GJI8J3X+O*ctlg(nu1< z6K#Je0k3RsI;EDOfPYz^V@(5*=g?}J0f7p53jg`SHrD=#=ZTjw^;=uUy5K^$)-J&pT^vH|fs+v7$wX3r(kdz8)(^zf;Zv&qR#9Pm)Cg$hUev z+JoY3r{$>jB>e;PWrmEs|N1wgfU!E2-BhaK{>SI#d|v~&aCqQ!YjFW^6Cu-_lahtR zsY5v29#4RlbR7!S1H@1Ysb{CZ$f_??+d*;?1qxB99MN|W*3JLP;NSNca6(}VPXz2K zThjp-$~sofB$X3aNNPw6u(F@8hhcDPxjcXAT^!(J`GM#GAT9#0@h$=GMU#cKCPybcLl}+cExZH#b2G)B0vri% z5U#HG$}*?zCwfSn(Fi+TMrKm9Xh4OXjhQv0Jn0Ln(WpGr$1h zMl7jAB_@7?#xu5Ew2A_Ht^-y%XU$E7? zemN*MFu>aazJqH&ZI2dUy@1Z!9ho$mKbTCqph>r8Q~rrap}d8?LcCfMM!7TJKP9+V z##y9mUhSzzo4W)x;I3V(6o5?aNULd&2u7%K>tUVlrT|0^*6JcKRt%s&Ayu3vv9KV3 z@OTyWz*NNo5LG|nr`g_trFC)dj1UnH^*u|n(jLuKL6>SZNd8UN(uc&vsC+)_nO@ue ztkO0xFz^fx{Q29-3MRS}_cUg{Mc>mZL8ISPgUNIt^6&Cr>+&v40Fwhy#`QVL&5lv$ z5TJ~y+&=gVu>Sshs&K@(pHq;-L25->X$|*|qNC$Y^`A>tfw!LAmE-gs2&-QTn*Vd@ z*f$#f{wIp!ReK=?W!cNg-{xNi_M{G2znh0y#8^q{NaotYXvq3W>2oJ2d=TKs~VWWiemRH7xKpHV@m~7G+7QGZzLT$V<=zC9PnzBLS^B9J4S7s2ZA4*x z)-zpX`9i#3C!fC@4kNv$?n0Sy2Y?XVCEkzkl@g@H7^QN=Q8u#4CV7PA-bXP$2_gyK zDSIH?LUDvNwlW+Y_n{+nG2FirT0keEkxt#6cHK&s(?K~iH+7rdmR;orW!bjm=Un1L zMc&5H(pe7Wp1b_?gO=!NytQ zN2PLb8DCb_+Pb4?1*j2g7(z|b}Z67IENx%ma_OI{T zye0dweJ(aJWK6pg>Sk1qq)B*R-=KuF_s*J%mMhqeNGjp~5iKl|un;VufeRQ5iDvNd zj$KY;HJSpuJQ*{2;yNnN6WB7IGi$)LQcX9`Gg29UwZ|64RoE8Z5OF{do46R46D@zZ ze$_k2iqx*-dL~1gHLWU1X=KTU>z_+4v%f!uA0Dzyjs>|}9{t>S8~T}Z_HFAIr}3(Y zdU^`stI3bSOiJC+Q{F8w(3~V(BvsWMSa7ueV9U!;33(|J{@$q2GC{8SMN;;aal5<)Cs~NHX_(B|?u*K( z_T)9%JL8CBN)F)7(8qPW9iH|T%&FY0-=}f+>6#sh#2k%CLZXx%+wxSJ9r+7mVnaUo z;WFp!Yd99Sf;;uvcPe>OGY5G+rVncaf6@2pfRFOn=@Dt+=p zoEr@6#ugFDQzCm6ycsulBQrkM4pu*sIPIc%HwXLEq7$F#@NsUK6bRXpR$Qkb?q(3 zs2{f)gxJ0kS^T`|uW;vpyYZ`t2Mu-S*L=Gu?Lj1oquO**E$6KO(a5Q4R;7vAqjkBf zN^`v`hR<($L>Oh>vfM)6k1qFk6YhH*#qcRa8PyQgo@(eHS`)?L;?4|(lwX@HQphhI ziAv55CstIPIg8<3Z=uuVQtarZqa0-q;4`cd?^(8ivng*;v{~1@$e3;AHiCrSr}`D& zF^CqjsAmU%x7!KwRgexR5!b;TMY2A?TvH!;dWc!3{iAXg2=N&pWxUTuU#XPm7lv%M8u9+_@xq8{41!4f*yYM5iF>oi2c48vk)$X`uw^^=_W~W{Y-z75cNb&!CnCP-BWU{gKpwvNy%8V8? zX?aF?EB{t0IrPp;KI)gUe6vez<46+V;DxYyRGqYc>xxg!w4B zS|Pf?j>5GC)%M8uFTN6!v)$q5QC4;%52mPP2)-h6hnr2GLnGuyk;RLY2r5g~BDZU| zA_xjNt*(tJJB9st7!yH&ONpeiyj%?AX1n6WX{9jsFsg{aFj#_;9$kwUH)pQNp(;!9 z`ziPS0;SNphd5xve+7_joXOQ}|F!Iu&C|~wEhr(G75pjw`$agG&6nbK6F6$Ru5MP8 zs0M%YII+96>ds~(+j6j8+=QQG%SCR}_4es!W{HUzoeD+Qy5Z#Z;Yb%c zgo^sNFU7@mvHZK@Z{K9we=E>dg{YQP2-@#)!PTgWiw& z2E4@>yY|%BpHP5!GU-2?-`tS+5N?exN?j`95GpdKaZ@-{{?8@wJZ4AOGeGn&azdlys%0m_{INhg@gM?*RsugC=?01n>&bO})XujK7 z;W8uLU&(p0d%m?eL|nY>3%qKPbScZQtwZx$`8U}wD+d`%wdu9I2RgWKiwpOL>&k*c zfKf3od-jw>dI@;Is3iV()_mz36#ww=7?h{98A_`#UkkqvE_$rHxfT_C|08#$j`ZLI zR`N7DX?q33v8#BrC*0Ezc>~ z8}zCf`9pb|!;g}?y{@?U4(b6HyZGCl-kXshn#a<93GMfB&wBmD zpABBK{PwY=ST}d4!OV(MfK3{$XoyWRS_2a&$%zf_}l zy4;no^V$8>I())&&S!<&;CTP4(9NelS|8sjynC{}_B+hFy<}9BJ?~Ij06d`CweC4* zZd_g_6#BR9oBvUk&8M0%54tC2E{gvrY;Z+8rh#d7P{7 z=XLQ<)Mer4*f+dkC|*(ir;UJErW(E?pS{=r=;S?4iR}HO!cQ`*TUt*g#XLHsxTmvX zIh1ROl_~qN(^5$3#!lx=r8f^dg+1Ys6{Ir45Djhn@8)SfarYL;5h6*`Xr z%BOrqMxlUY+$>!(XgD8M%I&4-lR3%hJs6YZ78?>PbjTv{!R-zvl`BhZS1dPwI0^n1 z`K)vl%MV9n?>pYJEGbaB>{=yEsp6o?EwzWEug#Q-Teq>CqS+tEbg^}`P_T$HsTRURLe_0GC1FiX^fN$R3e2B%t2 z?VJ0)QGu@O`V8ZSvI9KF^rXX1pKzlO0+wV~>PhwbzYe=g-2#UiJIBPc=tj}NKz(y}Bc zr98Em1uEne$;?wqJLGvh3Ax zZB&&G&OMjyO*xO=_${C{KhJ5WuQxoQpyFz+1NtC1%H_t|AJ+H(?A1RfIc+I|FyRv( z71P}BWrEkqECQ~MF*ob*{j?9aUAT7M5J`cy+)>EeO5m}?>PJoR*SP@^F(aFoQOWzTS*E!ZYN9>Ed6}oid_T+%67<5sJFrP-$t>2P5925^$Es0e>uj;jXWFD4T zJw9UTC}-_OM%uyD{n9#um%L3n-c3Yq(CLt;5j^aSLOAN&o`zWUV564qzeriGuS-|q zWR}fuKgh5R;maj%;*!10rmnq|J`tlIbhUy=2>4mNUD?N(akjYL>>|C&R<{85anc-m z*52rk%(z1ZiPsW?f-uv{sHDBZ$G(Jq69!yEcO2Z0d)^9-9mzYUX1vzY?XaqqACuAU z3s;xf`XGaR;l=mt(OSIj)4Z?DMF-SMTq%R=@iqbM)2wEtQyx`Z1cd(O>mj4p9u}U5 z7t6qaoPANjLqZiYNFW>gf@{A$@8XH@wt-$&MpA|I>ID$_#GDNY8o5wU)&2MtAC@%h ziCW3VK>Ow4=S<-Pz?zWzr;A=^>Bq9wERJT~H$$1J1>#O%8b!q0ey~|3VE3Od6;)TW z^)>39O0MjM@mYWj+d|PdAq2J+NLa9vH6k=F3h{(uvr4T9Q9m*1_DpoTG|zUftd74x z-;^}}_J`IlMAG~Y#;T&asT^7TU4Y!6+#4c&x?il>TY;cTc1<>|pV6#+Xa=*DagE1k zGD2w{c_AAoc{0MgfgFq~F4@%FF15Y8);|~*hkk5Vfc#m8+cq}xo!O1(aihAf_^%{a zDb9coMX;egi#~~8WIpU_k++}obbFA`^+>(*9NMuNRji=mO+34Sv|rqmK$gbZ2)ENK zBGKDJcF6n2j&y+$8d8?VicT}-z$rj5vCWWJEE`GkBll|jUIrOW!>A(ZGU1pw^6|Zz zV@_+JNbv9+c=lePwCwkO&!vyz<7NGi&70$fx1Ru;UGKIE72W~AJ%_7kSG=d2HWFwK ziheV)()ojFjD3xMl9+ZPMCtMq#gF1+9sRGM^gLauzN=hOVlbw0i_DL`w`aixA=Nc2 zK=zFFZ`M?-xv|s^Xubd*WaT%zj|^@Z>tCjN$8DS|rnc4}JvQVn+hvgQ)0hGDZpJ|T zmGPH-XaDn1k;-M!ot3L&ae~={m{ zL!0=j%+Kf_c5~;q4Atnv(vX-1ya4EMV*!VzBK&pVxBPscs0}L(A$ADPi^XBenavxJ z&xvmK&}p|z_jjd7&U=2Ijo6ZGhjAIR;dbM%-_HTm%X2OW^5$ESDROE!H;}(c?C0&c z_{rI^vw-gh{mnjWc+>oxiTji1GvX=pp-z92udCp=YSyKi;jYnIf7f@~r+I*is)!CU zStJfU&MrET=Vz<=kSkB+Ewi%~CS4v=!hCEkfWzJh#B0)Dol`27(Ua-~U$7*>t(hh2Ji8GjLGN97L(cGGg2}8by1e$&!yhkpP|OO!?ZFx zPi`q`%0XtBkB_<<>2A4$8G4`!^)>=VRrk~n+J^k(dvL%BMnuo#lwUsXEqW_v*rl!c zY3|`yAB0E1{0zylmmAQW+acy^WYq^(^9H}Zb-N|ZvFTUUG~8pK`~{q?!>lBrCoYdH zj8e*YyHT#Pz>bp_>6^FjFu6{J3}B;iQ@9(FYam^~`#S54=!a|Nw!gaH-gTq#eh(1z z9z)IWP4a_)5P$VFl^Kib>JILNcviw*(b(j=@CPAZM#Q*^R&(1ZW5R)&5_q;~i$!zc zj?D7pUkS2&MX3@tJp9$Yz5EULjEiss=#KWT>a5DD4xjEt(H?6_Xs!RPnC~jTrDZ2a zNaM9w8~VGZpFIs7H(&v^6&d6mfd<#OFI*@PsIAl>e^~a09Uh_Q6`VaFEKHa&t4H)Y1%goGnMXx^?Kp1Jv(0JsI| z*B3(>3tJ~n0(3X?alq`>D+KeW5vO^O$~vXo(($sgH|h0Xv-g@0ORUU3g8Zu7N~H zj=`;0^VaTl0F3fEbG>L?cq8-i1I^YCmVE~;oZ)~OD?>yxT0GUMNE7d986W%!*S7t0 zspqJoyrd6|oejGOcq;MWJe*8Fc}PruD*$xN(_a&SQ)lTL=AoT~J!32wkYoq@R^y$4 zh1_3{-E5-W?|za>RNHpg&5#C4`ls32IC;~3*Y>s1O;u=DnTrz);q-j>zj%8Ou%?== zUpy2cAiYT^^nic?LJu|c-UURe^demWl@6hIkSe_hBE2Xo5ITeo(nLX;3Q7|}k@xPP z?>V0D+PgDQniOJ>#YR1_sPxTeNf!^m)S5l$J17w)gXT6@6G` zHacgw!~&xmJiSDad^$k5xxR;;fp?s_xnj+jLkHB~LErwcs7c+LPln`bgfBs*GUrV?kWPW|G;Az9xz<N3{ z&SS%&F~;O%6GWo(Mr+z~qtqhbjcVPs8_!pnxjmj3ww0xOp3ItvJ+0Dm>Umt`LPXm8 zfyP5nq9NglJkWvJmVJrWc)UK~LB$j`kqE!;^%QQCYglQ|lcq60@ZGtiR0YE*c8>_wrj~3*syKQrivcIVbA5?df73FQ z2u3P>!V@dETNJZ=SYq3xI-e?&NC=lD$PV|^%z87N2M~7~YlJx6gFcF`<Rqv9p8eq5`W9 z$>&d#^`CQge80~rayDISCoON^GxY)^-4OG8UJ&$E#2Yx(>=WQw!4d^%&XvBFe}OJz zZdWE(PxEDypNIg;30bio(en=%1`JB238<#}v)a%Y%KbDox{*L`ZLv5NQ{c@7=h{lw z)LBjg%NpR_LAU|KGg~2?Dp@lgUEJO>jp3)hsxE>Z_K_+*eu*Ag2as0AzFP$(ctK@h z6cuW5!vWRTymjH%GSZYeZ#uTzD@)UR6ZV9QvVf>v|6#@As`>(DPoo}#zhBxeGf$na z2`eubR4HqANV6=ygC53(U!GAw6K9-76$R+6n$HJ4ohh3i5MsD`viCs*qp@htomVK3 zPzCd=82yqUg3S(NBBs=|4TUFpHfu}~X%6`D5LQtwp0UGTQG8r!f8$B5 zF@fq3A&%|Ur6{#(MSlGcv!6OL{&&F0s+(&4LH5HVypz($ug5)41H}4nfB_@o`%jjL)`u?%JURcK zzZ+q)Hm6*q*ex8h$^(SVJbY~?eUP+SPhx93C0a#QhQJ!=G$BPZ)3m(xNgvhtG`MAI z$$H`yF6RzTl_5qU^&76~_-3=db`P8KmRcJdHGN$!5Yf^%Gw^R%&QC=0hS>tJi?rMv z@eMQ|`xnnJSGYKeUmTEL7kBMwvVGvFk=_i@6KG{grr*pa(5XmIV-pgur>883-dvyZ zQR3TZXRLDvm>AUFre22Ur)2cD2<^=JI+o_KT4cJq{}M+Cqg7+E+`00Ls@-Y9*90;< zQ9L)pYaW2yjMu~)>S0p$!4<4Gw5{lrhQo5MK?$Bt zD;;hQhbdS61=Z`f!X<+npq)rQt z3$kUkEk2!(JsT8ha-DCF{t(nkz8=J@2*)NeniM0^eigI)p4>})^lNHTK zTby|iPAZo8S@_hI6g)wE}DbJ12x2b0F=VC4) zU|8*lKmv?eauk~kKB#`S%w>*FW{=)Ov83!*4H~Kr8{fB-n@*-K`SGOQZ`tMb6+$N! zpTbu2!qH&iogM~7*W3~+#gP$pe{UKc@o`7lhqmqSB@AlXC@Nic2bx$%`9hY1gtyT@ z>HSX97C&F&Z6MLv6cNhgev+)pl%SL5A&gU0o-r$9g_cxZ>8%^LlYMw>zYwFpIoFdH z+z6!XiPht(?bzwbc@52^&8$f$*7KyT10BF?s(f917osBc51!h|nR83zu_gq;67=rA zF;K3Z6bED*Xd;#WW<)LsJi)oQFG|_gxK$Yc0&Ox6khuI5z~<|kmCAGW6;S#PfZziqsrbf3&| zmSpZc>ksp@iX)ncfV(^U3-6l-?BYh_Jy^PYrI{3`GW(R#5OZrV_b`D3W0Tc09qM&HKpE%k9s|l5IqYJUXY`qE+-<^LEQ%z zL*MICYz5Pe*xPv^3z$A6_etd0*e+Wf%L{cJhcGkCe?gah0~oy!DeyWJI}Ic~`mCGw z@RP1}M4b_t{8y`DJ%+!ByZq0UxSlOp5o)88hg_L6I-D*&3Au8P$vLH)vWR7cYY^`NaA3 zHwDeTvqxawj-k>`p5TH;YV!j+9amuoZ|?TVLptSV{I{NU6Ikr6!Wsb#hvKk^Z2cSl zla88ose~J5spYA<&3zU(X|2pJgoEGf^H8JAwcThAKyH>k9GW0La6P5WL;bA_pq7I- zy?&Co}HG8fR#7Q^gvOhgVVg_&pei zDkjWAsh-w3e`h;Fv&RRP9R za($jUZ8IQ@YxC{Y>T%w-uX#^reLZhgdN8atg5{poFF>w7sjf6pjTozUte_aX;_<*{%`V(*4KS51xcW=jK zGU1HoOYoWWSD8n9pJ=wX%qtLD+okO%$G^0_bF*`jWs`%vixx~C`-$9)Fa9%`Aa669 zp!ky|4mTz5o$WDSRretD6cJakW|GNAHgdh!;#W35+( z0^Wpv14r%mE98Exk+K@8Wf(qb%_4Xzxw)X36Ccr3sUSqgBj9}S@Yr)XQhOYTXrdW$ zyq-^4Gv<1j+qwBvs%A{AqBoG@_)U5a)$!pJK!)hpCwZ|Qe(hpz+@Ce>g33`_BEFGz0|EXmY6;n>bmd0 zH27Z%QR$5*^><_rt^(y!0@V<()VJeVyrWipg^O$ES~rw^M>cjx&n}osVRPj~RR4DJ zF>eER$P?)SEI#5ePZrD5KjeGrakLx0s@Rn7YwWhil*ppDZ}F1f0(mOg$g3yVDlX zhg9k?FP$&!1;}0qAz@yhT6`i3gt+_#YDcX|1<+r~OP~s-Tq5^>323#za>MqsO5Cp5 zYICgxHC0ce7~A_vwvq1sx&tJy*I^`YIxYvUkdoOWAKDv6manAsVdiNmJ3MKtTDV&H zr^JPam6ps)M^(-5dC=z64D!5i+;SS}IQ1KOR(8!GA+AHo^viw_M>A`;Vp`;euThE` zVZcGJj8t@S0>e${qN@+-p#HKDY~F$X1x8m<2_29adMnXWF_kzlJp%b~VpF7|(Jv$F zBaetgv6A7JeIv~SC3RgLrH0~BXJ4XVsYuwHIF=~<+KrtO%ICB)RJNnKe>B|FZ}Qi+ zY4%$HuK^a$@3LP;DsIjSd*Ay$?rPtg0L(_NSmg#X-lzG%7r&*aUB?z7ab=EKZkpBy z=JFktHsco*Nc#05(l-$PQ-{q!sYgeR!w+pHcAwN*X~NIL&-t`TZzf8Hs3p}s4HX-etm4mQ?o+64zsBev8kHZ# zRi|7SUq(MI1_<3i8t$bb0oB3e(e<2yQL(XLikywJE`CnyF_$?Jw5 zhuv)S?)4%n)+?fe4_|NOCRtx=i-<+vYTqLa2xMdnw3P?EvxdwQG+YE#@({6w%0nZm zd19*d`(8T(81<=a$Evf}m1LtY@M6)%AN%F_^=?YWm%4{JNX`dRv%conK-kBwJ0HN+ zP~I{FHAFWM)v;L`tmwhXb!Qb9VS0Nn_<8LCPoNQtz>Q2lIKR5s19A?hRMEklb?sYo z0TeH-IkC_KcpxJMEt%f>NgCvHD)zUES^iDwRu>+jV^-BmAn_N~Ic zdi~Hg=79y8#nu?s%=(&s7VPr6$wIwD6=myx@S(LKVr*RITC~{<>Po3#m8ISdtLzDH zd}t$SWhO~mUL5+=4r6JjUcrckQC{_AQi~!B47P0QnJZ8(fUS}9vm8hW4D@L^WT-?x zcgiy&q|8>{Wi?g|=~@V;s!4AN;&LgmY=9qY(Rjc$eZ(J>`fwTALJ_rI^}4jt&+(ar z0?ndqMJzx0*gtzuWox0a#hb}$9B8nihP~+T3Z>E#;P8@L6rlsdM_$QhSn@mKc$WL2ufL=iRO37BT9cpROWHh^+fC6`MK(t`dg@!kUL(pz%fwfs#{Z4Cf;rM#@R{+4 z_rZki%GFHeR_QCro83~SV)#%EXr+klZIVdt+ZMiG#LZt&sb=xV_gmH-ZBvuG5Oa6l z3x5948l~q|mY8wd!{`x`JEFo!h;8o{M_!31z0=3lZ}RLfU*HdQuN2^Y9-AvLeD$UP zxskou&SL!{h%~4pCVo5MVlq&7Ei5noH1G*<2C;7MrP_TyFS$H#2Mb?!#&PHkx*UHCIdX`F-Ivgpc93*oobe(S4B_ zPJapeH>LW!x;xJ9VkG;bz2npf?S0{=#|ZU(&fXZA+iqDp_@I0&8OhA|>;jWab#aMLU3M=HrqxOp3py(N>ZxRd?LBd`|ML*jZt*;Q+HGG94a{a zMzw?U`uGQz6xY;Z$-PwO436rt9#rw4LnEJ+t?dP|CzH#l1(a1hD_tPx+R(ieJyAY? zjFc+ZOj7gJjkVe_9O<84ATHN)s0q*d010UkO@B*RB1^HS-d^3@A)6AFnHb4%!&{c3 zUfp%Sn5&%?b%%(=iRhZ`cCxZiR%Da9^mO_T-%NTOSN2QX;IO@z^O#22ln>pVfsB)= zB6rI{tssD(l7`C-a`u-fhcaLq$cj2rD`7&X(@(Txe*l9~6m|ubi0qCw5QQ`fdi^U4 z7i+KM9lsUv-@guHmvQgA z106U|DWz)ejXdOgqLbb#J#g=vw6Fb*edK<4#glh+Fv- zf30wpudB#h9t{T$&rYe>Y3gj9Z4#;HN4+a;KUCF>rJP;8QqBcN$2Ib@C3sdg{T*-f zq~tgj^OV$LcBF=^daBnYCSBR@<>cfB4k1)LxXd10GreU{ANO0N#p6?Vrv}zuUW;7i znKEG4{CCrjt8Zns%7TwLCz6#I&D5`J>PK5-ElHQ{$)bki6XWl)uKkRI*}q#y@2l6F zntKINZmSiuMg~z5x-P>%Og=tld_==doiA7uRKl+@B8a8(n;7k74xwZvz?6bIX17`> z^N=b8Qe7n0h@5Oe&&TA@4mIae5v$zVSU={RPrd*aUrX8kdf6!KrH$ZQfmd9r8!Z4Y z3amFm$0_NiuF%JhyE11%1L*IU5FT!Gz_eVe^m@zg(KEe}%A_?Q^Y`;luuG^N<9+Lj zLV)W_e1&VG{!!9efr4_a5~<>2#?(8Bw<8pw%@EGHBh{+jmE}c9PgtFpYSk>!d#Na{ zo&zz}B70h`+jpBkK7sEBgYT|6H9W>fQ#{X;0~2;&aL-lnlo-TF9-*8&hibV^xA2gX zp|gx7f_I!tH9uO$3eh3w`a>re@f4iFK87X9b)WEz0U5S8Vjmmw>zXmd=C_xW(J9M` zRAmDbvTN+Qs2SA~G0Lh$WmirEM%0XwOF`n5&PM9v$B2H%c>bfpwH5YA)_#Z6(m}_P z(xQ_H#rU^oKq6&GYhTv*FN2?-+hXLK$AEjzqO+)CuF%7MPPT4trz}tIoQA4scSNMm zlcDCnxv;B*d}kz?aEyR66b%MQJCqs_!K48ng48Q!Oqc*6fIu46cT2e`j1Z4{Du;3` z6_B zq^yy7N0@CFYecG4FEcgF?}`>IXXVH(uO+r(d$(7>pOmX=!F6_Z^Y?^7!O*ntt%14y4`&b&s}Vd6blxPFq}8{ff3exme+ z6Ic<&`Yc9hD3=)U=iHS6R>t3OU-8N~RW32X*5`Xv)vM0HJo?>WgU+Yah3l`S&6}BTR}H}2l*;VjCPL!G(-9f=y6!oLZ749lR8JKUS3QXr;Acp zPiw`Z>*ws-x_+^m-+drzj=JIM$x6goi?P`qh{E#Z?K}5QcLgFw_`Vt*w z?g>8%uWoh|HFG1iSy=x-^XaPrcMGG|YNDzespBo1Inq{+Jvw-J`N_vTK1WU$!v-cS zC&uyBTFh~i1Uy_~<^GVyt8(>X#9T4+?txJ#iubN?}6xpyE!6^mOF?R7$pQ>N9V zSiMsXL^<&2m$dKm*HH0^|BCIhzca{roq?5;es)xnW4h(Z**^bx&vPYb3=ZUr9d#9 zaMng_nU3o9`5>BKAJK*~fm&KY-XM?WaiwIX$W9+xpMBQ8_;uM>-UMoh8J9w|emUK$OqWx=>ILD93`hKS8g3{rrrrY)ir1G<>Pv{Wb%Cg>cnYAm;n>Av zA%ac1GC`gN77WE*E|m^yz|`=t%DhPBsy3-ERki|32f8fA*V4x>CE`;ttAXc>s=_UP zVfjg2QA&uR#|6Xw#V02=AwBkm0`Gx~6T^#_5FBbEo<&Sd^d;VdPZ_Pd3lzL~N-9I8 zKC3D?Wj4;|s>i%he^=eJgI`X~4VA_x{^VJ|owqHq=8gi6&(-m$PqQE7wf1Mpsj&;q z-q!4|-Y0MQ4+9Gx*tJHf-^N#}2M#7ChVyR5+m8YQ;O3<2mau}Ocv)yt+O%=rET2+& zdXkt55!!$=E>nX#vP3PS<{OP`Fye#eO*^kUV&+8r8Q)PTE%2Rw3BnjxLwa?kL02P; zYu<3W1Ec0!wkQ+TDG_f`s<$*1qN$~JReABQbLGO>*#UQGtRR`;OryF+{d}6?w1(&@ znkVtn&mC@G;WtLhrdF5BMOJK|89-Q`I%r;xGvvBhbi8bulgDV;pDkQI>f-yaHz~KC zjt=K_Vymnk!k{Si+ZD}bSCX3F%o zkc?^5RLMtJVuKTfY%LTuR;mMTln+jA(&%?)SUuUbaNKXlM#kV@yA=4nJ>>T4&sQjTL%QS9i)_)d0!0|lE{`8)F>SITV=$^y}l;pRFDLbtRrcNp( z&n3v$?|hFOX*u()prqdO+N*d&d8<9FCGM13S>6M8)0H9jPP9uJl3#pc%X)8AKDA96 zKkC47e#wk)zWN3?nSeB5RF2&|{n*4h-y*wa#{(+7MPAfHOG_&!52r2-%0hw}r!z$T zxz@-=luPUZ6Q`iSsMi@4@h7deh8`;&2~M3sMN<5- z`i3)cwjmRr!L!@Y*VH{Ms25v6S*35J^h2+vlge(BHVUyc)@<9LWd{9 z^32;98}>(V9fIy^TPX%eOlsK^HPKRv=$#>{(B%yJ(tBVk_rWv?u-3IbBsW`^?U@N! zirVon5dLeK9Yq0&rFn&!AR=$!N$hY#+A2XBj%Stx`O*WmbR}{m2XVLB<05^Sl-x2h z_-0fuW$`QIOkDj*KgXoqPYGK%BVg-Q0D)*NOH%n3nlsJG_3Z5v6WqgU76)(Nl4u}J z=aTfY3|H-r=(H%=Li*jzv8DffRcM6g7`1qnlQ=v5{)Q6iJ^W#C0a zqkZ&AtrSDnErs2;F0t$Z`*rC~ltvqrs{8DzzXwQg`~xG}+EG`SV@o zc3ziA@+eeQjLz`L*PigIzKKqwV!!I3oOW84X{hy{I96eDidr?Dos@0we_LTSN`G9v zA2pIKWZB`f@&D50FVIdh@Ma_luOZ$I?)F)One*J%iG+I=={`OBKz6}xh5CsE* zum$tSpOOCmKtlK85cLrP-HBY@@yve!K?eVZOdk{QQYR?}L#DOh{}K6TA1jBkrAi#eh1c?s|2SPyDdo=#xqM|Xi8IlBs{x4sO z14hM5CVw;dk5_$0MS{%#i1<6wu4^TsAwW{BbdGv zgLoeggQ*FujZ5zJ{SPF?1X^GZ1Eq{$e%HfggGZv@$5pQYhN0p0QOvNBKWS0`B|kmR zg;WuU7)BJ43m9oZg%u&wtGSC5hG%I2=aU>p+^w zv320@yp#CiK|~0khT)P8V-%%Gd^9OYIGjEeMG>k7s=ti*0|~W5BZR}CMre9;FKkK+ zjs|lz4LeKN%4I0#RVB2`vA4rmSi3pKiNIe+N5kms%rm^X!fvH04!)e|rGVfjb zvpgx@kB}4-Q;4cktR=&XVkJvSfyOQ{O~!nvg1<)&ko-r<(;t#Dqt!u%12p>y%$(%R zsl$?@Do~$6#2N;FwNKy=B#0^*e3$?`yo|unhM~#1R%0mMDI@l@5C@4|)G-u)AQ6X& zT%ySWO)8RTJy;PD{i-fZSVi(M0ddgBY&ZBPcaT@I0CgnT1}(XYgib|}h{n@^!Vw~& zlEp~+h=D&#o@S36Av#V%F)RSWMS%3U^g&SAkN_+OjDv>ONB)_2nl5q(a$LZ0RN!z- z01y~C0(nOWOCu8~MRAqrLH>}F=G}lKY#6$yDgf((MPQ&X3>0^mIn*eK4Y_ABIQ%=X1yRPKJsq!{4jZ zc*nu<$l-gv0wCappCm*m3F2MvpGZ)8qU8P_O}y;qS+}nv(yN6I7fmX+JF4fJmjC-|I87z2OmT|2K7xqOaTo)nO?sK>Wc$YM3VRpLV;fW5AOId z5dB^(gjx$|7ogQqm=PMRs6-JFPJ)BtI?#grfdqPQ@ZK1rTaP&%gdZ`ED8)b(^dLr2 zh*bSGl2dq7Qk0_gunR7u-sTN_{vL;p9L zI7E6s{uT4<*S~WI;s1}k{7&|7NP2^C5E99CkRU*T3(^0B_%Ecw-ywKJG=~Ww;DSLFYsNdgH2fp7sW2n_4`*CPF&$iIpI`}O}5;U{A-P_#qABkqr3aa^u>ANtL9w#=k(`q1Na_CSPXx z_4{gwAiwN+>xzQI-Gubop*tr(yIAvI+6lbh-G8@R6!c)t;>*jXl;fWxK3m1t)Zl(u zT7qqry)N1fD^t-l1U~~+HyWdxe~u)&-nqX^@4v_~`z?!PDd5v<9>13_6 zotO%+cR0cNv$-}L+|Mr=w3uc_%r?JFZQ`sCFuShulkPLWq$KV^38!m#eai9V^U6r; z60K!m!1PVnyqU9c`9LJqd=$5;`-YP|nIuh0b26UGit=m^tI8#2K1< z)mCC>ZfCUT4H13P4y8mi(l2`UBc#oJ&Ol|J%I?jto4;{3oo3D*=+VzZ3JvYjI`L1=>b(o6jeQV=6Gz6e7K!Kg_0%!MJ z0{z}N2zY?NzCnA~N4O73orHxIH+1XUtSbC--yn*=KpXrHB01U>Mtm8=|Nq?RO*j3_ zxVqgG|1(>Qyl71R_@)5+CnvTaLS?e<7Z-MNEr!1Hk!mnNB+2%Q0wN*xVokE)gy-5|}tuL2AzOIrRHxmTcp_*fGs+YG$Z(Hiv!9}4K z+r6E!m-bLPmQ}J9ZAzujk3n% zPE(ASd(I(Rc}w~dS-Pk>!(|Utd0&Q*gb7m()v-CTX{>e5ROok8!?)899u2I(j%`s$ zhJ>mNaEVlO;!bS5YCzjUkXi&7vf(5y;5V^n{n&VwT}|Du+7JUnoK1oug#_6yJkP^8fT}}G_Mof?wqK)?Cx!| zVE5WJ5xH|5k>@c#_DXHjc!;jg(xW<<+-s5Wm=1&+!@(84c=9;s{=)&+>bH{Xf(~!h zHTk)D0?*l}Fa&_BbHv;(*v773RO_6Cv`JG^GGz}`I5qepfpSN_6>K?5(Dsr7Gr}?6 zoJ;)5x9dlPRmtwNdp|cHd}khf9usvgH*rNDC-BA(^eJSMt)Dr$ypl=I=fx3!vb2#v zC`o_NlBk&HlOMr0j#k(5Bv#yopS+PMfUMJg10&H%WFb-Z!LTXWR;FC;vi+$czed$=8VLU}in+drbjOX@bS}LP+Alrj z!?WtV-J3`wb@{>Py+MY%Igf6i3WZ1e<6ifikmqF!ER~Re{ybl$=W|Kjlzm4-696A$ zQqzp{YB9|;@)NQiZQJoJ{K4BIlQgYFDAwntu4C}TPi_x2h2v;@+p><+ZsiH5p%Wcl z-vV{P{qj$Z^RprUEa;IZixgdb369x6vu`xBhsD!luAM)Zi+W@_e(>z?x_%(JZlkuH zp>_07F8BMTAaa!%x%4o8`O}u?O7!#%2~&T8*6oS3vpqOsZKi50{WFR0=18|>oaP9w zo%LV3NmfQfb6@2+FXHrS-DcADtVnalxmMoK%(rrKr#MS4`*ekuH3?8YZqxZh_O2y$ zbjl@|et2c_3uDG|fEZs{jRC%P39qZEwNVCfiDO&uaF{M3p{0~mv&9=^*8MuRs0SgY9?ql6n!xtcq~39` zL=@e`d9S?}zmuf$w()R*l|Fk()oY1GXd7X8Ce;;=I#As6pCd2qxutSA3A9QRAgJ;T zA^qp#Q@x$IJ4+^SG@XZ{M`;Q1Q=v1C(KY!$82i{2?G11l0!%8jD-tax&UE8Ul*xQt z>Rua=pXL6eB!v~|o@frcBBVi|yw-*t0_0A6E>AqExPj-)*d&x8Kf(6 zR=jQSU7M!Fmxtl)y2aHm*oEyfRvK2&59b=ACkHn!^=6m)K#ZP8dX0p#XrwI3FPZ8u z_uY5kuUdn@Y+Uc~pW^lrDaOyqQMfGjh*flilE^B%0c}uXX{4HN-M2!!ItQ3Qw$)=st{)@_Y7xHlge%Ltt0%!(rB11I56W5UPEb zA#{RWW1rPT;?%3VU@y5Z7olU=RKj!kBm9jaaN+hRzcv70!DC66+|q3--` zAH`!hrf9Rx3rNCBIli_V)}iP=)ft(Ix$c{|t0?ekSvuqxWmUVt@k~pHUFG_lq>x@) z60$^I*=%CyRAyw!F*EzF4k6{E^q-p2ijC)FDLb}c(5@|iSou)S%o7>K5U0~DuW#&~ z3u&`6l&7MXFvAQ47*R9Yzd-306p_C=_Q8>rcn>wnj7HpvreyJ(OMN9_$5kcf-cFo_ zSIjL%-az~u%GZ;O6`iS~HVYp1%nLS_r;0G-Yhj{OpM1O$=A`sV$F4I)FmnQ7{YQbgMMgmyw!;+zxsIx;n=M^h!O)Sy$P zrl-rGTx&<`6TU_!iLbggxb~KFwJ)c_bhd=Y-qj<;vY(g#Ag50NQ!e*S$W7lp9 z;}>fKH!#T{b`!xVp6B9d7;>1}9>Ri3LnVn%F zlxViN&rnWa&p)ORvN;zCC?oJ!r>@3);T4Y2L0>a6`9Zx^(e$+ZAP7D(lv^_jW@<{D znW)^ZqM6BWT&=CyZCGwY7He3f!>t)}?g7-%BViQb&kVsuikRvIwZfF!KVzd&SHZ}M zcm2XueZzOy^BiNTD}rY5Bt25U^Aumri?W>HJVJ|iiR65ptEeVfU@PI)*6^hDRgO2N zbjKZ(v37Z^*c7RW%7nSE!qxMvor6wiM1crdNsJ-5N&O8aznzv>E|*2|Wg9w`nuJ-% z4X;=O#tLvpiSpumP%G0di`d5so2wMV^4g;A6Fhk`&vGM0Z#{^uR?b?z4p)Bx!_;4f z>^k`xhhK~IL}dzdSHxa1#&O5FWzmi?ywpbAo=N%4CLR#lEdfumg}%Wg_#OKPFMIsQ z#!pqGG$HsUkYOTa#S8@^XbJ}kTmxt*RVp)9}O+K-t2zc(z z&*Nl#6KT2mH%ZB@T-;>c3^(qCk>3m$pKS|N@=^uC9BHc0a_$t&2%=@A^*f8&B*`jR zYd=;!i>*^WAb$3h=h-{wHt|?M4#T6{$C&rh>bJ~9M$Ti5LO;tu7 zai`F`{SbX`OMJ!Yso$17@AshAF>MJJ$E`Z17Spg@uskedjl9UD` zrj>Dp{CBI@uopHt4mVAE7es;C%vj*|kdWcC?oh}xu6=#vCzs3qPPv7y43PRgo`E4a zOX&#AaTRa6IHQ(o?G~+NZtcENpOR3h)D{mG$A;A$q9=M{tSw)q>tBJ% zlI|Sq(TZr{D{29hg2aeo#ERHYZNZDK1R97Vp-ZiPrYUzOPTB1d&4)%9Ju$@0;Utws zYv;nL{4{mk7(q)u5Uiuu)o@u}v`;ZimLPKZD;oZ?$iDy$8*B{BRhAi ztn{f<`14p_X&KV9W{D<$xZRl`Zl!D*0l6l%kv_tkr6-V-nd8@Z`|RN&tI*?{-h~VZ z5!PTD6+(@Tw3>u+58Z^lq1ALWHr*kf9f6H^}j&cs_78HTb4kY6mz(04|MS3xIl8>C;p-) ze}a6cB()xju+9Qm*2TcRvykmLy3nUCe`hD^Qn*3%DMtKXp0j&rY^%@L;E?sB#p=_y zD~#<6_KiU0@u7DM$YYZzHJY?9Tk^BBC=Y7<;^TeB^|r(QnJ+L}2|H*;1a?Qiuai;Z zJ6R4WyeH50oo8}ny4@FjZ}Z<2o8cURU$@nleOEOqbxVuN@j1Mbe<+jWIZjf zYFD#}V{Y1#kdx}zA1#EcOgh>~r~7W@gJRvR4kbDG8OLiEPgZ{%3hYH2bFa!xsxeyR zSu+=n#;a;d=~O-ag_-*-~W? z_%(0f2V-ZqYVPsCb%wt{mf?I&ee4X9D~c_zQ}M**Cb(=bDc5`kjvmIm|CzK_EL8lI z##}Xexs(A`(LZ2iBwLZ_NYLWN*&Jd}1LHC;&10#UFcvH}b=*JKDLsp3nFl$1gN?NJ z@nhCCX()^RmURoWRBBO;y2!Fc`Jv{JluIHI&D+&9aRh$&d1|M4sv`QD-(+>bkHH3> z?kn>1BKi;11wtpY@I}V+SL7EuLmH4dPaYdHN{aF1XugQGR3g6e$cPl3-_VmRew%H_ zgruu9lR2mPaPM@hosu4 zB<12k6_uS!fxnB+90FMolYbw)BKfH$K&m|q0iDi2%MirkUczC(65>YpXN zvEcN-soN-jXogt+;fJm1@ybV9{ja4qB+j)x#BfaQFitUQ&H@B+A_Jz@DH-8+{q{bn zXx@TrCVAmT^>2J&C6jaxBV;Fao~zdqITY10veIxb{d!dH-!^AxXq$AT^yI=0+(!w(yxD^N;Hnh$PSrF1d(Du6|v%%-yXXDc>=tre4Tj+gY zLpKf!4pAT@dH@|fP*mc^zvY;LCo*HG`WS!q5C?$^BPfch5pHS!6jml4sg6dP zX5d8Ewy~P=leiO;LnmN@9;xssf!I`kM!JSJ`2JvzFT20kbDiYe2l7YV45f;6qU@`F zQBQT5TDNLm79QSP$9V2YJaC`e6_;}X>fbbJeE!_gyysFW)j~jr&Uhiyxa4x+>gktdprWa* z^86h3SWXbvHQEblWyw3L2 z&Yb*jpO~*t1oLt`e)MabbU8)dQ?VPhefa5Nit&~D&;ye~sVfHN4+TeFx0yDh&wXfL zJGpt*q>4Xqss2L5z3hBb%F#Fc!{`v^khJ)Fs3XxkW?GZ68`nP+imf$ zHSrHWICKtixZ&Ix{~ti6Q(bPN9faY3eRqfty1y zC>>Lor|d}(kp?@Su$V+hQz#GSB&mDgqEobf^CWPbV-ni;$S>kwzx0A=ZK8IHt+RS_ z8c3%n9s>d?B)VXmpY|mYxR!m}$AQ5F9JjQ)#AAEHQu*Z&T^PeqWz7!uby1)K?@|o{fkMHfDrFEWahwvs%kHl>K1#)TjMelK+ z3_bJ7yCNX2`wwC$Ix!Im-!AGd${wLw;t_mvp-=;dagZKJ&EtnAWUVKLdy`Otbs7us zH7+K8O^^%;H8sdJ=Ac=v5gf?6j8g_$K>jQQVLwT3NLiwFhIRS|>(qo;&6iorWP(8z zheYqdF=h^1`Y03rbtgmw4&jGOtoT9u2E^lZekm2@Ko^IDz+o$=QOZ3E8>L+^@KLH= z;kE^ayJiiQ)J&`_DvAo(#xx02guW8|g`n89DWSSM#1o(oc}9b<0sZ=kXek*&)j)zk zf-Bm_H^}+k0UQ-?g(pn5>y4jJO4+cvtkWM9lk|Un$@A#e8!4?7*kjMTxN(=GJ%l0KYD{35ENJ*L!U2*ri#ui1Sz7oFk5O1W~IR_^yp6KBK1!IkB^(u7_ zd&y1E6-zS1Nrg{jrgfoLD;OJ>18tvg4rU}8?gE7`u(G$zO4N4dt$WeE~A4Y#7aRL|T$=tH z1V#5_RP;HtS?I3vUhFEpO_*c8@C{~t>4a(<&h6|qJBM$911TQ*8iTm`QJBMyRUg+@YNpQ~loFJHY4S{u0q(bR@P6B|9 z3ynVgu_^9zH^hHhVk4-XH=-IB+*=)Y{sJizyw~>o!Si8+k(=#rO_}~m(1$y|b;r8T z7YIMT;IBalXb;~N?06l_dvmAYPNV&~CHtBsu?b-d< z8hdq-C5|H-&1ZAjcW|G(42c#Vvii*!df&gf$+qx17_$84&X!d)uYi$`Q$EstrP0~p z>EZ=t2t(ErlNxWWQKIsh4=<)GzUk(@k-qKs;l)(_h`&f6GLkYx)I=E|#Z$8*Zaw{5!+Z9a zEp~(G;sfSz5F@C};LTvq!25;{+(^O>z&EP=H@aDEzT{7hBsyAyjiIGedFbtTmhY*=^UBqr|c-am5&)2h-&EE(2!?YU-i6?xACTqE!> z|1fWv!qoA7PhtADrTbGaKlZFA;p)-bn!4r}H+xV}WM{x^BVE8uwjo^xL{S5w$|7<*~Aar2}Mg~I<+)_nj6}_As(cj%!@G%n8 zKw#A28;ndkQNC|(D6VDpnPLRDjiN);1+v10E-ENCiFc{&DfoH|g(brb+=;RUbq_t0 z*r2&orYf8{scCgjT9JHxc#`qu<3g9k`tMiwlhmi$O?gn_GwYzfpf1^_B!iLVYATXN zMT_Oc!5ed0Moc0h+#K)sJE13oB+yh-yB+li;wpo8E#}(4;!cWJN=OV+#( zhP1KND^wH7x9()SaX zNltzjYu_Xw(Z{5OsPw^5D408@O1R_bNuO0g7pR*PY2d!aOCyepi?UXQ>F-qE0P;q8 zE?_1n02j8PHNMD?3NG_p2LeSN#Xi?rkf}k$_{?zcW1{?XJGSLZ^8`BMyGx z%Pz02AaUwTtH}Y3i+@00bjcs3&7VP^*X^A)(go~17r9CHfEER5bBkKRcmFUU(IYI)HS7W#QwfMV(-EU9(zQa(k8!nQ(91oraQ zBALK`%%EgAY4ZzKx2HOepExFG(YvED|9|r5dw8&O|WXbSHIO>@+Npn}Zn@3_Pvm!#T zkezmhv(EzMW1Hf^j`CH+Dy`Q4zcISsH%}sGgZch6H4K zG5|Bp=S9WS+F6f=b2=Sv@M-O4W?#7CwCjo>gDM=W`JW$0QiR|ZYuQiYbS3#9@U?=i z55t0?jym#?hLe>?k1p!r=Q2H}mv|0TI?vOyXSpY>4>QGsEuA9-8N_}R_iZ4r1-!!W zQ~MXpS)9A5ci0Nu7>-`7ee5DEXWhep<~B#QZ9B$&?3nQ*#tM2WH+sos4RiAWvZT2-#$5V|7(| z`K8=6a*_L!Ui5gC^73D$tCKQrVGZ^S+=*_${zLDiiW*MX_66wORGhG@>b4uR?tUid>OAUW$8gLh3@yUNQYrZo0hSm%=B%L|}1nI)!Rp z?csg~8W29yj#9wu`aGv|RBq%XVsM$404u&R=C0H#8H!|rVA7KK9C9Sx@BL{|+?Zwv z-*;3bRD`D{UaTPDgx7}Ln4ka&bYH8To8igp$o#03>0)~UA^Xs;75q86{yA1J+Sf(P zOF?|=(iR2@F$0K;z>qk?5EP%*T}MneB-Q(<=tWEt5K6Ct&v%B?!L;#aH;uU1^u=y$Qm zHMSjAr@_2^mI$9w)Qg}wiD#;s>5X!-qqOI#bsFiGim4?YDZoiUaT0suKDLhc zk<$H9`H@atB%ClpJH6!$CV2!HOzSSY7(G_sNbG(MlRY9obVorEgrz7RA`DXO_-w`b zC@PMpr#jKj%NoRF=MUkG>-`LvL6u#SE$Y*7=YjA8!z1FfhQj}B*UiSdljx^2c5&3^M!X3lDUU_}Wl`*4d5 zzdN~w_w4TAJwx=qH{+*RjFo%`E>aJ&C$p|{c0vb+1d!bl4#>2`)m?Y`byMaA&j|YIPVBQpW2zWy;drDw`U%PX`Rsgs`s;Q zWL=l4#IuAERTOPA_F^9t2lFvvxUB|!bxm}?z&dczYId^eF-o~o|Le#IEe!A{fD{)*94jq^fp zyRAsVryWm)2$QJE8+@(CFTzb^J{S!&JYgO?&y-$s#0$d<5vtRJsuY|E#SVQD=iN)& zIzhJz!t<_k{cLVm2D2w-Ce0$Ly41AGm;ZjHOo8*>%t9UU{<7J&NCj1(ul&f zieWW4{UMpL4PR9bQskn}oibQga4~2!a2TuyT{}Y?x7~Otg_e;m-lgNr$7y^;2~AU$ zpqQ}7_eTcHwY+quB4-BOe zoghb<1#p)(cyyb=G?@1ozGD8CfDf1-A>?KBg^E%NcDuj{?aAb3vDstWf_Upku7juo#v8$MDL&4Gv=Ppx~*_0Hjh+**I zrBupYvDkd`_}|b)(=qS7H`rlg&u#^nN9+KuO3{4i?aTVabv-BNx^C)p?#DvGxZz6x za~dSM7@hv)`o`eSnoMhE%9!`xsXkJwanqz;7mttPHvpar+;ZMBbYS50=lvWa<+8tn z9)u7dC%dMDPPBG5vM^rUj=XmrK6?qSIb$)|SDN7PIW8rQQq`(BWBQh0%-1gU>nT-S zwqG6Cav(*P%0#B~8T>tcXy?%U)FqfrlP5Xb&7aHdqy8om1s@JtgK8rRis2KzclZVb<`|R5<)*q}c~pCaSj2MRRO(zO&g_cDvcP6!gN^0p2e#)6xcL z33T$Zu23UCqyARw>?Og+Qb`l=V=pnlq+=`jZ*G znqACl3dGz3dU`kJ4a;h9$uCnK30%qeKQ}EtmJdNsw8n+iAflD=L##iM>W9T_&lb@G z7x(3LRQ7^_w>EP;LEXF@>FX^?gFTS(a+g|iGwYIY}WL3?a&lavng~r*luhecQ zmi}Tks1@0_FY#hR;)_Zfna<=_iQNQ5?R^AX#dt+mrWh|IJFBd8W!^kpiakKFMThoA zcnN!uSvtXP?@&NzfxT`jOE*y%3R9@e?&JOny~OMQBih_AK`erw>*Bd(TP9!g7oV8} z{;CQx(z79eB#DhQcWq_-aeBCgRo2mSm_Emzyp<(^Ax2e3DKCJk;>YOVgj(DgkkG46 zv4nX19aj{wM9?O<^{s>J#$oA8LM`PToA>blVvg~psa8nO>mDVbHjj|k(5 zL9=G~>@a~SnctzA@i+=sb?tp%t8+A2r$Ujcnw-PI`ux{{`u0R?Kjx7emF%m`M;Ah# z$NYyw7%Gs%6ghWPbE6rNv+l$s!)WTwksDJFDHmtiSrxbN{ecmQgu~W^*v|m{otXZk zienUO2j@2uVXTKTRK znM*GPajX2^^R&FS9os4`EKkDFFia@K?cJMPbhawQdhYdnXZuO1)J_5}3fDmX6Q&D= zPp%>1C;`t80^rYe2xMD4pF1a~ynA!=CyYrvj`%J!ag*{K$%9Uz@ReMUx{7Ni(k6XW z$Q)4|d2z^+#`VLs7Iz>w!_;Ru;Di8cw^4ozgyD#xgN$Nm7xWc-d>X3bOgh1r`_a7v znW%>cQX@0CJRLkm0$~1qN5TulX zS`P?T-kr5n5miAn;{Gyv5%X;jXDf-)17WzV?ui*6s~~8W)l`SU=*ufp4jV4-&tJq@ zx)H3xEf!jU$!Og?q^__B$;0Y2lV!~zC;Xi+ouv-q_bW4H2O_7PNL^M^`|sF7cd<8G z5rf>lBp)16lF zqko|QX3c8Wk1W|foy3^I6|P?H;g6(xHbM&UG)SrI3(tt~$*G8oQYq-6y#Q^*|F*1e(3D}?xwXDF(A_bJ>3)-AwL#dTkOF41T$ox^8tY^2Z+^OP7*_f(x`f zfbGh^->58HMJhGQJlXMoG8936te?A{eF0h!esS#db)6Kn1LBF%C&SN|5E^7__e;EI zkqVjR=@Nc%=Ja*H^7w3vptnap(2z_EC7*UHX|cWEfEJV#tvn@Yfbz@g`%Ui)+Jhmf z1kgSv-7jUKC43Iu0M*aJJh$SP+6O-PC9+An5gYA9=OVGtasv{V+UMF>1BlWQTyK@R zH<>oucT1W%YB3mO{<^>z$B!SN$O*cxgG(8s=$QjTo_>}{N^ecOvEISi9g*PM9A3E2 zY`z4?NsvFA4fUl@LbwF~?Wn(jsbR;J*+s(4k8n#*>g92<;3~r>q=BUw0$~gX+`(8f zNc-3S$!vJI0QvnYOSD+)-tUD830TVlUo80)?`;U1u(e*uk%b)_8m*?E1qixr!YdSCb#R0jK0^^68_50& zd3Uao+DRf;K1L<02hd8S5t`)|j-Ac{fph)bK%usgD8#XbAw15*Wp5zItgMuC-iLW` z6;IfI|3wO@QODKNIKA~kWft!ANz45>?6Is1C(wo3Cq#L1>Mn5O`2J$~7@hlzcQ)lM zQx0=*R<_)!b@)UurOOb1CFiSjD&eL1Ru<(3ki_T}W2d+$6r+y}8MD+IY@@ZOYwXhs zGjT9lt60~)kQ)$AD!=>-=mMz^9wWZhZH`JZT;pQLbc{w2#%Ag_Ec$x7m{QXqE*&{m zgE5Z%Bvm~|yaT3)R+x9_D<+|k%~2{Cgd`w}zjJ;=>=>ztj)k*0l%OS#08tINfE?$- z@H~;Qn|nY~g{~}+-G3BkD~q8DsfKeaMvW@a!Ua3ck?N>!Krqja=2u)L`qKc4h&crE z&kn~hZ-j|Bf+<^UHe<;bR;Sk>f2~Pj*4&|aKQYI#Qp)TQL|D;OflKcf(EdgxIayf z-mv6csfnM5t`?iywd%6kAvC(5!FWzsyNg{e4)eds^g3qLH?h2c#&X!9`-u;U8G_9e zKYg@n_ACJ+z{LnUWX;^4CbFMe@uXtfd9@E6`K7M`SYpqO`AfkfHiwV20gjS3juh8h zcUo?3__~J4fP)rbc=ekqVW&jY$-BLK)W!PYayh$O&*X_HYnab>lJ$~iC=i*#e^{$u zp_grsjX&L4VEFDrP52y;K$=Y4Q}Ep%Jt>(q)kXpmX|$?IRT6pC6FSl8F)Cpyg2S3| zsZ045av=u7tSC>nEl~i%R^Ypi$}rna!*Aw%EwW?jHv@<(K7S`KQGOc%uP+0P<{fb= z+LHb234FTs1PI%CXg`6w_`7%))NRxCD?QWsBBH(2ut)FOuvj*{&t^lM?G~aeBCT`n;_F>t^&sUAIl3k3D~~bFQWm;KkH~$= zw-$SCj)-ZDUkAsqp-xx#M(UA{BBT@sBRM|kyp=Z0nho!*#olq0{R-*M+=2jZB28Ml z&4c0p8q#h(9&HxM@1l6N$^kKf^Bbx`U)&x{=ALDvH6T2jxa*@}C*D<_%g9&l+RfRl z_tWP_>?>#YEMu=FY@iK;5$>=f_P3PWaiQy8P}PEE_XmfLM#SzI+M%3iW?9>hOYY>4 zy;el8{MzObqjj89*6f->CjLlN&Bjs?aqIT7jg5cTi?P6Q(NVAcz^mL{95K-q+Z1;b zA1>bMt~|gzfISNPA5b$jfx^t|)jHP>$f#@iGsS;EU;jjPWkAcV#*5puGY6EBvNyCB zdW}n~=1wnrfbFJrhnEBOwg{xTLuQIp^U*{DuV@W`d<~dRki?7@d6Hz z4$>(cK|HKSJtfK@>;_!-XJ6KOQ5$m?3sUUZns`6$S{d_Bw11b5fAK^2$cAmxPu4b} z7|o7NZC6#>Y4F1?G>z+Q8Ta@Zc__67@FD5KZx7X$;_sQBCKcszBeC)K4wlQl;5szmZfgrxhcYP4QD{=pw7Em{yR)dxUw3sJd+5PTt=pm196&#lQ6 z7jn!xRKeq8U41L%Mm}cFwZWF2DFPNB!n(A51(dH2lA!NnRPAp_#BQUKK=vx zE~>oPB2{dRYT28?g5EtBCekZvL}NQ{WW#8svO=MKv zLGjsA2dZ9qsIU^p9ubblN;j1lR@fnm(XZ}b1~!lH=&$8oVI}!eaEbP?4yC{7_$Sd+-9PM7R8|gCDf7#2}+06d92(N8yK4y zA-T~E$ZIV+_k_YaLB5Kk$JGj$guZ2sj%E%|P-BEC+!{8Prc(ixA@thn2KtcrnU)jE z4dAc?ED4eYkm+xKA_{Ssy&-fu%if*%7l>|6z<N2A_9G8a?2qvSSixgTryyvRa@JNBU3UOO8IY){$rsDRE{`b!g52b1gAN4H5U0Su6W4 z#E!&{xc6Zw^4K3n$?jVhRhex8k#h@nig%~h2Vx?Kh#GLE*F1ky?l_br;Q?afHSA$b zJcE?3&bIb5*->iNL+q`jVcD`#x! z0t{Vt@_|L;sQ_N>N6I_z0Qh_NM6Nct^f|4+Y80}1CJ@>ac88{gl9H)xc70m%n3*U3ofru+v}AzhQuo*g8awB7}^c998*Fb(=gr zgSj35NJ+NjPh_L{qzv3i!4iRrp)jh+2*Rkci6Hf^f%U*(RCJJ0Nw%6O%$=r2OyHB- zC`Di}Vn7^O1BBV%ALcH$>pf*ttFFmRIm!wE6nqah!?_voXE=AJMws+edkun<@&-# z0hPDXPfGnoLpEb0*o@K}#n`>HIdUaISdyRz`ot=KQ)&fM-SSUibSGlco5p>JiZ1YK zZ?x{}wuFh!kJMi0ahNHaQ%87d)6)?RwP#a0Cr5$K%kNif7R@93vRn z8{XMH7nCHN(g05HWQ1?ffZwpeyhkL)GYgge+m6ipMI{$qsHIy#FR#cI+bdEig*I*tyGw>iTe}o^>#=$M3Pou z2saV_geA#GCd#IDC^?GDkRIsjacsDHd7klW)1Usv@gH8@8TM~)?k%C$&2=0;!Zr$6 zui)E4pGXD`T&_y0l-V@HMThk)oi6_?+4;?|V79=X8&@D0^_bYHcs%@Tkti zU$kZUVO(ZLL$g*r!w(kHWu!ds%{I7yZ{Orb{2? z>PSkGuM#FZ1n3b~UP`huNDHW{voKZI`q{4HOXSiDV7=9+#X?Q&WLQ-J#UXT{|41lH zDz}9_6PPS(r+yS;V9zTyjRpr zDZ{xG7)B`2fV5z}IreM&C!+?2_Uh%Hg%6shSJa?{ep|SkfMLmcvEtB1$y!4cF zzoruBOT7xMZP}ReDPu~yv>6YZ(}y0&b<-}j(<&L1e)_UQxg{n=GK%Y@oL!}pME(?^ zdCpZwk7Op(5s>&jheSPiV~K^2ZM7qf1vD4zK`liwojSH>y^ZLI`_UQ0qeeL8W356e zOi9qv-_$G7C>t8d9eY#-A$FyWI3MxdJKRGxqLk)rDmmwNO_7LlIa@9NyaWJ9_O6 zV%l#pB=AEi4EMfArF8Lo#>rV7#K%CwEP9p|uZKGAFm6MH8^avZHSe?z15NcksD96;65cu7mB$vD3-sRy?QD7U(3YohY9SPHoM5O_ixHC zudINid8wtm@sbQc{!1XkCJ-ggABno=rH>N-jo*I9i4 z*W!fcuW?dF{g?}H^tV;y2JRHo7l}nbA)sij`V<}eH+L&&t$@RBU$w;VDgC(gJ9u-i zwAF8L<<|*Tq3EK>?QfWhSgO_x^zM|umBa`pjFIG<3y#_=d4!S$Xv}#TV~tyU+T?HJkdVq&OVINXyWTQ!IiaV@LNv0OZ|V!b&e&$`S;;rs zX>!XN@@xADdl_AzQ^Y_H29Cq2Vr+;5E3*I#H3+*fwNAGP1&9*Q;?EZAP znlA&A3?~8KvCs;LeE+T#SZR7w?X~@Vl;mQdJ16T}?OZGVgt8b(qEUNn;IDLU%5 z`*`v(*l~u!ewpX{b=7!nuF2i$IfYQ)yR1QdzT$2E;?onxp!m^ga}eQ?VFV1 zB7<76hQ$0c`J@zrF?5Zk2V?;baUJE+AlHzp%@kl3I!5*`)8>o(+t@W|7_h zbI7EMOo3e*HtYr=1S}Heu`tAZy1s>th=`j)NqIp z%iO69{GXUwtlugvQPG$p;X?o_BNMyi^PJa(Kz?`)1}g}|_CUT6Dm93|G~Ov>hkyYX zaf7MP^G6|6SR@ZDyKT~pfDNtSQnoRCmNGw-&(AFGGPO}Wk#qw`acCG%MdPHBC8hxl zwyPzfZeKUej9}rdX&mjP(4*C;IXys*p_zV`cwFaZ`EXi?fw7| zbL@Kw;IGmoz8pZ9B!yU<=MqpOjzsCQ_0#=6z?Uc&ToCB)`75eQ+fyO?h}EWS_Up2) zW9vIECyO=2nL3*J$**4?rM8-GE;7N0T|?4;Wk0?y_O2aACjK~M*UWdyKafp*U9exP zGvYqNmBBCf@o+jhcA>^IkI#UCz*JrdtHi)0`- z&Z)v~CVF?EnKIyf7tUgUB82Ag=l;rkhlUSHdr5l-2cnmkBcEQ?UdvESg{jpK8_M zy}}BujcAlx80PpZnztCp7BV(*o^ciN6&N5H3o8i5T|yi+lv4twM50px6rJq$P2J## zeT|gvvt_~|cU@B2QEakg!S~=8+Whf+Nns61M>D2=5Vaipr9ZG$#u;isf;6WJs(l~1 z!cO3XIvF3_p<&vGet;e+V+I=`TAdLX9HteaX{F04b^??n@tPw04-hLG zT?I~j8N|S&CyDBPk(EYjGmb^0UBsriPGFie#Ys|%TE6|94aF9*r&vkH(bN)$ zjqR(gUB|_18lWhu|1Ld7__nU@jY;Hnz3m17E5+QV?7nflk9QYB+p6U}g$fZG!23N^ zh{Hmatcc{=khou&gboUI%-z7p(-RW)X|uNDp4y7}4SkAawO#9J06}tBu z1X+LKt0;@lp6!0H8miH^{M2~8nnLHdzz)C zs*ntC3HO~j{wt&2!Os*~NRuX3l>pt2F~>3{MicuZN0+>m`fS2*-F4=-OMv*V!ZB@s z_+*@shu-d;bpxNo|jDykx zj6d=9PaDJA_U*^7fE?RD^Uq38Rppre(!?8DRm3lb~i3Em6T$kDZd~@IcGzz-m9tPTgN<_5Ddy5?68Ip~d04SDHQuTCQ+bskqSun5%fVUox#O=@ZMY_!{*tZkOt0_1Dn+$@y>a-*8kD_`fy@2bopq zaGw!IoLA|~2=!6yA&T5bc@$_ELmSa5HwsTTT$xZs8@>|SdYBcWaoBn1qr(|n8h9eS zim?iVBQTOqWKLx4W%MQGgmPaZ--eg0Y|+XI*vVJZf!7y;3rmD`gt<64^ayVE%eUm) z=}E|%qE~v`Rt7y(S659W)YjQ312X#8F1cVRXd&OL_)nv4h#8?txF(Po@y@rG++X|x zd0sLv{wOF(;*@*Ea^jZEL~@4ZZ!gP*J5?(VL~Gi1Kb@3cj{Kj8dZLT&9b6>hkV$_E zeUqN-n~ z8!(ZQ6&Thva;x1jo9HTftAv|^Rp=wt)YwdE^zI9vo-#s5FofSk;r#0irV(meb(0xx z3hqB3N}J7O-Q(T~D>S}?GB~Rk&I+qLN2Z?(Xo)WESH?+xu1kc?hGzi>s?p}2rylkD zp1q(V0K&x#{P}FavxMjqcOx5uGfxE*aWzw-`fp_2Ci(Hs*6Ggg_eE{ERUYG`^?V~u z^X2dkQ#<*16Dvww<~)V`t}l00Vj35VjeLqzTcYT$=Zcll#!9{qU#+a_s-{r8p*TY% zCI~VGldJgN=_(FDIp}steSV&W0--tO>BIv#W$@lT;T!$4lCN>HX|AQm-Nkijuk z+mD}S*cp{22Je3U$vnR=kE9RY16QiniFOlY0%2I8Bo?E9qJ{u+5o`TybN48rH~K%a zvb0(BJGg)h%7$(J+>WXZ?mEmjIC&(y_k7a2GeDi5@9SS-JQ(@e;JY|JMeskMTe&KU z8MJzJEc)rcPH8!J9)bx(R70_OyxL{%bP8(x1HuL>KY;bO1(a{t#?1If&uKHn|I~oo zS4-C_^xFp?W8XDpGgsHv`&!P2&zMj^J?7U312K#u|* z5vhIy*sgyNsT56?B@UnmINm%^2!9~ahxDYr1Am2H$km9^4+Dy$=)*}|`ED7#SPwN;3O>sR`di!7#VaPC zM@{sqx{V5=rfUlq}Ei5HYh0t25`GsoyrDWH%; zlEoTWJ}Xiy0?6y=z*=ZS+_7#+U@XdmI~{axkrO-+(s$|@JsQxj4~DTfiHNdh%~k2mmI94)$kS^XT1H+B%6|<9wA9nDBXqD;q0%hB(7u#ThAbV}#6fnE#1Bcf?lUhylXmJkGauhMu0NEVts zeq{d>HS(ppmH}&EO8~+EiDS+Bf=Pc`2qk{}S?^lN7%2i^Eyg za=KFaa3pll4Gq}+An|!%%Edz6k9jDQf74+!&Hv?I@Oy7Fs`(|E*c>1?SZ~pejQ*2y zCi#aarVc@rQ{-jAbm7eV^i3d1PZ*_BDTp;p&=GHcK8N=;vj1KZ(X@qKFmM71!O`Uz zatz>qg(d9Z-iiIioZ}5uRJp@wdi@hKx_U3SejSg@<~5?H$m~gQRG|qtb8@Qp2VVwt zfzSv+lCVc#O7H9sqlG8$N7ygl@mURBWY%vA6C!_dh>8D+jPgZ#vcaW8(!rZt=c*gY zxSEDn;w5r`jYB9@CH;h&EZ3>)q3_|hVMz7OpOmZn-_Em)yYZ@-+DsVc8(orGA>9(w zY+H9?YF4(B*|gi!bTHx|R=0Qol;D1?@ZE&RI`;bdou&gLl9eGpF!g?nybS4^2Eq!5 zV7Cn+Zv7Wo37`H;11bW7+$%7AltZlYxE}c6AMK2^5^AP)e&RESgMSRdN|2&yiJ;(S zea&DFi8`t!;6l({ctC2)-59KpJEH|x6|&{7x4Jb*$|3~Abi!*6ScBDuRPbTNn@o8= zulbC}36*H{4_t{&8Qb5hQL=v8L!ylx!o&?1b2zH?muw)9K_du3Z)J&w33<(-8N^W2 zfdt52_e>{Yu@7v}pV2bgWpr^eyVx|I!!#i}veY`?1e>hPj3fZGFRZ1}Kqe>sn;9H4 zx1X<1V98Cu$g=~%MOhCnClXfftv?io+$<|Ww4F3c&Zh^(Y#q1^QdeZhfNT!bJ>0~M6|R<&Ra?((1#C!s|{|}Q9Ub&S^=&iXGv}r0HpRUu90;$%d5vg zzjC;Rv*|(b#SH5@YTPlkI=78D&lEcv0s57C;U%DsAmbz5BHjB+N5#UMTZ#DO;|@)= zQ{CGX`54`qx~`HbC@F@5KxFLBOr5dqdi@zZmPmCqu)nihZ$u~&hW6L+#Gki45JuOw zGx-;p{|97w??n919S}AOtf#jNJQ)x*_e=RBoWTAy6*SX-tjfwJc_|yYjnpsP<5HDh z?`_D@+lzmlw!`lNffhI3E?`*`Fm~PSFghcD;h4v%U9`(-IeKvkn35@B!20~ny@z)= zON`b=Xbo<7j66nYWg(%|Q(l&^7h^HDZ>o)zDzYBN6~3UHngm5)F4|P2#f>40Od=pK zwCfuT9*r_?E!-lFRId>~{BmD_whHZ}PXOUQOEG#dHmxbBETP9`#BI0l+s`|t?U9Nm zd=O9ez0`y}X{^w>bc}6Yh1xXGhUM8n{$|K3`Y9_kLn4_aK1YDpC_;x+&>(3z;h>)j3xu(KBVAbg)XTD2Ch;7G;bfdWbe;yM;W3Zr$%CulY7c1Tg#r;2L%|!C%`F+6=usG4( zDl&gQuTX+mQTUi^PYj(myY?s0oi}49wuqvUCDBfhd?Lhu}yGF;*1GU)fEH%#7Ghpc3>CC`e-1q~kke;0(M@6c!wd zMwzMq2ZZqN4M$w>*|s9@%acrb8X;FjMZenDP{7mk(rqNmUSElKz2a%dRJD%iWR2*d z>cbX#YOTEVM(ou=iNRszyrSKflMu+dZJ1|MZ5V_iYZE%8)Eb6KTh+qPq_nI-I$Kzf zeV)pdNq_S&j%Jl|ZNelxJDz( z!jt*4(WW=`|Mw^9`n28j1r=v0lP^*ge9DX<9hAerrOP1eVo)nJA+0jx$Y=ZyL+9o9 ztYxM=rJx=K}4t_^B&?xGpBU3Px3v=)tfQ^Ywq*w8c# zEf8`U5#800*R>%KJRntw8_&8zPJctvzr%{iQRA&M_R=-^?e|#blK*EjfeviGy2l&; z0d;^&2iB)vqGuZ%P-tWiI1W^zD0kL84K26T%!n|$D6F)|PfV>atQUVBT4F<*zd3;p zeyF29QF|=eDnx3j2e-%uavAhX$^_(83lY=oWMy{L`yXwv(|JIqe?>vp7Kgb?ZBrXY zK1gF)KQmboyhAwwtqAF?8UDT#u@N>BDvVSsD&yZ-BP=|BGIiN-Aiw8A&e!lqMyNfY zTCoYo#I&6RIm(`N>F^{CP1u=s;4l#u`33xW-2Y#XtH_UKNz5#ORb^9@nE$_BUKYxE zyMisJYWahR)4~xB$}P(1lkA}%)~=6A+*aBz{IZ5x_sBOc`{cWdR zrdf2iG~EB#M+e$xc*4+uyyTJsGYknFeb6_TO`~yPqtJW@4|4sAH{Qm+% CQLMHA literal 0 HcmV?d00001 From af0e541ccb1ff25417a3f48322b7f2463ab95c18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=B4=E7=89=B9?= Date: Wed, 1 Nov 2017 21:17:34 +0800 Subject: [PATCH 8/8] Improve code style Improve code style --- README.md | 498 +++++++++++++++++++++++++++--------------------------- 1 file changed, 249 insertions(+), 249 deletions(-) diff --git a/README.md b/README.md index 706ba01..5989dde 100644 --- a/README.md +++ b/README.md @@ -6,14 +6,14 @@ https://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=405001493&idx=1&sn=f0ecab9b31bad83fb065ac37bb728245&scene=1&srcid=0324iTRH12WbXL5VDxXnEhH8&key=710a5d99946419d938a0ffc16a3c72118eefbe33f3f8312ed218bccbde126b60e818c8eb1068a9b07bdc8116a077b911&ascene=0&uin=NDIzMjM3MDk1&devicetype=iMac+MacBookPro11%2C1+OSX+OSX+10.10.5+build(14F27)&version=11000006&pass_ticket=xdp3crkTJPuOH6ggUMKnwvfDGKEnMUvwC5V%2FdxlW%2FKdNO9R8zI1xsDFSR4ZJECUU -仔细的对比了一遍,感谢tim yang和庆丰校长的整理,非常严谨,比我讲的要好,另外感谢霍老板封我是StuQ明星讲师[呲牙][呲牙] +仔细的对比了一遍,感谢 tim yang 和庆丰校长的整理,非常严谨,比我讲的要好,另外感谢霍老板封我是 StuQ 明星讲师[呲牙][呲牙] -持续更新版本,如果有问题请在issue里提问 +持续更新版本,如果有问题请在 Issue 里提问 - 仓库地址 https://github.com/i5ting/nodejs-fullstack - 在线阅读 http://i5ting.github.io/nodejs-fullstack/ -- [keynote版本](https://github.com/i5ting/nodejs-fullstack/raw/master/dist/%E5%85%A8%E6%A0%88%E5%B7%A5%E7%A8%8B%E5%B8%88%E4%B9%8B%E8%B7%AFNode.js.key) -- [pdf版本](https://github.com/i5ting/nodejs-fullstack/raw/master/dist/%E5%85%A8%E6%A0%88%E5%B7%A5%E7%A8%8B%E5%B8%88%E4%B9%8B%E8%B7%AFNode.js.pdf) +- [keynote 版本](https://github.com/i5ting/nodejs-fullstack/raw/master/dist/%E5%85%A8%E6%A0%88%E5%B7%A5%E7%A8%8B%E5%B8%88%E4%B9%8B%E8%B7%AFNode.js.key) +- [pdf 版本](https://github.com/i5ting/nodejs-fullstack/raw/master/dist/%E5%85%A8%E6%A0%88%E5%B7%A5%E7%A8%8B%E5%B8%88%E4%B9%8B%E8%B7%AFNode.js.pdf) 已参加分享 @@ -22,7 +22,7 @@ https://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=405001493&idx=1&sn=f0ecab9 - [3月26日北京 NodeParty](https://cnodejs.org/topic/56f8ce05e2d0ba0b32388717) - [5月7日天津 SegmentFault D-Day](https://segmentfault.com/e/1160000004637487) - [5月21日北京 Node.js Live](http://live.nodejs.org/zh-CN/events/beijing.html) -- [6月18日北京 野狗Meetup技术沙龙](https://segmentfault.com/e/1160000005694214) +- [6月18日北京 野狗 Meetup 技术沙龙](https://segmentfault.com/e/1160000005694214) 如果想邀请分享,请邮寄给我i5ting@126.com,如果时间ok,我会尽量分享 @@ -39,18 +39,18 @@ https://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=405001493&idx=1&sn=f0ecab9 - 槽点 - 架构平衡和选择 - 企业级 -2. 我眼中的Node.js核心 +2. 我眼中的 Node.js 核心 3. 快速开发实践 4. 全栈 or 全烂 ? - 工具链 - 前端开发4阶段 - - Hybrid开发 + - Hybrid 开发 - 跨平台 - 全栈的可能 5. 未来 -最近比较火的2016年开发者调查了,Node.js和全栈、以及和js相关的技术都有不错的战绩,这次给大家分享一下《全栈工程师之路-Node.js》,准备的还不够充分,水平也有限,大家见谅啊 +最近比较火的2016年开发者调查了,Node.js 和全栈、以及和 js 相关的技术都有不错的战绩,这次给大家分享一下《全栈工程师之路-Node.js》,准备的还不够充分,水平也有限,大家见谅啊 http://stackoverflow.com/research/developer-survey-2016 @@ -70,7 +70,7 @@ He will talk about the pros and cons of Node.js, why it is a good choice for sta 中文版 -桑世龙(网名i5ting),空弦科技 CTO,StuQ 明星讲师,开源项目 Moajs 作者,Node.js 技术布道者 +桑世龙(网名 i5ting),空弦科技 CTO,StuQ 明星讲师,开源项目 Moajs 作者,Node.js 技术布道者 曾就职在新浪、网秦,曾做过前端、后端、数据分析、移动端负责人、做过首席架构师、技术总监,全栈技术实践者,目前主要关注技术架构和团队梯队建设方向,正在写一个本新书《更了不起的 Node 4:将下一代 Web 框架 Koa 进行到底》 他将讲述 Node.js 的优劣势、为什么它适合创业公司以及如何在不同的情况下选择正确的架构。与此同时,一个全面深入的关于全栈开发者秘密的总览也会涵盖其中。 @@ -78,16 +78,16 @@ He will talk about the pros and cons of Node.js, why it is a good choice for sta ![](images/tech.png) -我这里面先问一下,大家有多少人了解Node.js?有多少做前端的?做前端又有多少了解Node.js的?看来还不是很多,其实Node.js就是如果做前端不了解Node.js,我觉得在未来就不是一个好的前端了,所以我们这块讲的时候会把相关的内容加进来,第一个讲一下为什么选择Node.js,这个是从我们公司一个初创企业的角度讲的,之后讲一下Node.js核心的东西,然后讲一下实战经验,最后把全栈的展望,一直从前端,后端,移动端,包括我个人的全栈之路,把这整个全栈路径跟大家分享一下。 +我这里面先问一下,大家有多少人了解 Node.js?有多少做前端的?做前端又有多少了解 Node.js 的?看来还不是很多,其实 Node.js 就是如果做前端不了解Node.js,我觉得在未来就不是一个好的前端了,所以我们这块讲的时候会把相关的内容加进来,第一个讲一下为什么选择 Node.js,这个是从我们公司一个初创企业的角度讲的,之后讲一下 Node.js 核心的东西,然后讲一下实战经验,最后把全栈的展望,一直从前端,后端,移动端,包括我个人的全栈之路,把这整个全栈路径跟大家分享一下。 -# Part 1:为什么选用Node.js ? +# Part 1:为什么选用 Node.js ? -已经7岁的Node.js,你还熟悉么? +已经7岁的 Node.js,你还熟悉么? 以前?现在? -## 回顾一下2015年Node.js的发展历史 +## 回顾一下2015年 Node.js 的发展历史 http://i5ting.github.io/history-of-node-js/ @@ -124,9 +124,9 @@ http://i5ting.github.io/history-of-node-js/ - 2015-01-14发布了v1.0.0版本(io.js) - 2.x(io.js) - 3.x(io.js) -- 2015年09月Node.js基金会已发布Node.js V4.0版 与io.js合并后的第一个版本 -- 2015年10月Node.jsv4.2.0将是首个lts长期支持版本 -- 年底发布到4.2.4 && 5.4.0 +- 2015年09月 Node.js 基金会已发布 Node.js V4.0版 与 io.js 合并后的第一个版本 +- 2015年10月 Node.js v4.2.0将是首个lts长期支持版本 +- 年底发布到 4.2.4 && 5.4.0 目前(2016年3月20日)的2个版本 @@ -140,14 +140,14 @@ http://i5ting.github.io/history-of-node-js/ 整体来说趋于稳定 -- 成立了nodejs基金会,能够让nodejs在未来有更好的开源社区支持 +- 成立了 Nodejs 基金会,能够让 Nodejs 在未来有更好的开源社区支持 - 发布了LTS版本,意味着api稳定 -- 快速发版本,很多人吐槽这个,其实换个角度看,这也是社区活跃的一个体现,但如果大家真的看CHANGELOG,其实都是小改进,而且是边边角角的改进,也就是说nodejs的core(核心)已经非常稳定了,可以大规模使用 +- 快速发版本,很多人吐槽这个,其实换个角度看,这也是社区活跃的一个体现,但如果大家真的看 CHANGELOG,其实都是小改进,而且是边边角角的改进,也就是说Nodejs 的 core(核心)已经非常稳定了,可以大规模使用 ## 以前我们总是喜欢拿异步说事儿 -Node.js与生俱来的2个特性 +Node.js 与生俱来的2个特性 - event-driven - non-blocking I/O @@ -158,8 +158,8 @@ Node.js与生俱来的2个特性 ## 除了性能,其他都是病? -- 第一、callback hell问题,目前已经很好的解决了,promise/generator/async后面会讲 -- 第二、npm已经是开源世界里最大的包管理器了,模块非常丰富(25.6万+) +- 第一、callback hell 问题,目前已经很好的解决了,promise/generator/async 后面会讲 +- 第二、npm 已经是开源世界里最大的包管理器了,模块非常丰富(25.6万+) 官方说 @@ -168,64 +168,64 @@ Node.js与生俱来的2个特性 Node.js' package ecosystem, npm, is the largest ecosystem of open source libraries in the world. ``` -以前我们总是喜欢拿异步说事儿,现在我们拿Node.js的强大的生态来炫耀 +以前我们总是喜欢拿异步说事儿,现在我们拿 Node.js 的强大的生态来炫耀 ## 大事儿记 -下面介绍点Node.js的大事儿记 +下面介绍点 Node.js 的大事儿记 ### 企业级 -- 2014年 nearform [NODE.JS为什么会成为企业中的首选技术](http://www.nearform.com/nodecrunch/node-js-becoming-go-technology-enterprise/) +- 2014年 nearform [NODE.JS 为什么会成为企业中的首选技术](http://www.nearform.com/nodecrunch/node-js-becoming-go-technology-enterprise/) - 2015年 IBM [收购 StrongLoop,拓展云服务业务](http://www-03.ibm.com/press/us/en/pressrelease/47577.wss) -Node.js基金会的创始成员包括Joyent、IBM、Paypal、微软、Fidelity和Linux基金会 +Node.js 基金会的创始成员包括 Joyent、IBM、Paypal、微软、Fidelity 和 Linux 基金会 ![](images/member.png) 更多参见 https://nodejs.org/en/foundation/members/ -对于企业级开发,Node.js是足够的,无论从性能、安全、稳定性等都是非常棒的。 +对于企业级开发,Node.js 是足够的,无论从性能、安全、稳定性等都是非常棒的。 -空弦科技做的是基于云仓储的SaaS服务,给中小卖家提供服务,核心系统是进销存+订单池+WMS。目前来看不存在任何问题,稍后会讲我们为啥选择Node.js +空弦科技做的是基于云仓储的 SaaS 服务,给中小卖家提供服务,核心系统是进销存 + 订单池 + WMS。目前来看不存在任何问题,稍后会讲我们为啥选择 Node.js ### es && babel -- 2015年 Ecma国际大会宣布正式批准ECMA-262第6版,亦即ECMAScript 2015(曾用名:ECMAScript 6、ES6)的语言规范 +- 2015年 Ecma 国际大会宣布正式批准 ECMA-262 第6版,亦即 ECMAScript 2015(曾用名:ECMAScript 6、ES6)的语言规范 http://babeljs.io/ -babel作为es编译器,已经大量开始使用了,模块做的非常棒,还有人用babel写其他语言编译器 +babel 作为 es 编译器,已经大量开始使用了,模块做的非常棒,还有人用 babel 写其他语言编译器 -Node.js里在0.12之后才增加es6特性,es7的目前还不支持。 +Node.js 里在0.12之后才增加 es6 特性,es7 的目前还不支持。 -所以在Node.js里使用es里比较高级的特性,是需要babel去编译处理的。 +所以在 Node.js 里使用 es 里比较高级的特性,是需要 babel 去编译处理的。 -这是node追逐的事实标准 +这是 Node 追逐的事实标准 ### 微软请求 Node.js 支持 ChakraCore - 2016年01月22日,[微软请求 Node.js 支持 ChakraCore](https://github.com/nodejs/node/pull/4765) -未来Node.js不只是基于chrome v8引擎,它还可以支持更多其他js引擎,对生态、效率提升等非常有好处 +未来 Node.js 不只是基于 chrome v8 引擎,它还可以支持更多其他 js 引擎,对生态、效率提升等非常有好处 -蔡伟小兄弟的[查克拉benchmark的对比](https://github.com/DavidCai1993/ES6-benchmark) +蔡伟小兄弟的[查克拉 benchmark 的对比](https://github.com/DavidCai1993/ES6-benchmark) ``` 基本结论是 V8 ES5 >> 查克拉 ES6 > 查克拉 ES5 > V8 ES6 ``` -## 为什么我们选择Node.js ? +## 为什么我们选择 Node.js ? 先看一下我们的瓶颈在哪里 ? - 1)人(天津不好招人) -Node.js招不到,好多都是从java转的,前端也不好找,好多也是从java转的,我们相当于从0开始组建团队 +Node.js 招不到,好多都是从 java 转的,前端也不好找,好多也是从 java 转的,我们相当于从0开始组建团队 - 2)开发速度 @@ -238,20 +238,20 @@ Node.js招不到,好多都是从java转的,前端也不好找,好多也是 在没有专业运维人员的情况下,如何保证系统可用、稳定 -于是就引出了我认为的Node.js的好处 +于是就引出了我认为的 Node.js 的好处 - 1)即同样不优化,性能比大部分语言好(天生被黑的优越感,没办法) -- 2)即使优化,也比其他语言简单,比如java +- 2)即使优化,也比其他语言简单,比如 java - 3)有足够多的选择和架构的平衡 -- 4)如实在不够,java补 +- 4)如实在不够,java 补 -## 黑一下go语言吧 +## 黑一下 go 语言吧 -go的缺点是很难够(go)着 +go 的缺点是很难够(go)着 - 没有好的包管理,目前生态还不是特别好,选择的可能不多 -- 没有好的调试工具,tdd/bdd新手难掌握(vscode-go还凑合) +- 没有好的调试工具,tdd/bdd 新手难掌握(vscode-go 还凑合) - 语法不习惯,强c背景的人不多 总结:适合高端人群,但对团队开发是有门槛的,不适用国内大部分大团队,当然如果你的团队足够牛逼,选go是非常好的选择。 @@ -260,7 +260,7 @@ go的缺点是很难够(go)着 ## 选择 -Node.js给了我们足够的选择空间 +Node.js 给了我们足够的选择空间 ### 1)可难可易 @@ -268,27 +268,27 @@ Node.js给了我们足够的选择空间 - 可以面向对象 - 可以函数式 -甚至可以用各种编译器coffee、typescript、babel(es)等 +甚至可以用各种编译器 coffee、typescript、babel(es)等 对于从0开始的团队来讲,可以先面向过程、然后随着团队的成熟度,一点一点增加难度 ### 2)提供好的基础和包管理工具 - 测试相关 tdd/bdd/测试覆盖率 -- 规范化 standard、各种lint、hint +- 规范化 standard、各种 lint、hint - 构建相关 gulp、grunt、webpack,大量插件 -- 生成器 yo等 -- 包管理工具npm足够简单易用 +- 生成器 yo 等 +- 包管理工具 npm 足够简单易用 -以上这些都做大型软件的基础,Node.js在这方面做得非常好 +以上这些都做大型软件的基础,Node.js 在这方面做得非常好 ### 3)特定场景的快速 -很多人把mean组合(比如mean.io)起来,这样做的好处是如果熟悉,开发速度确实会非常快,但确定是难度太大,很少有人能搞的定 +很多人把 MEAN 组合(比如 mean.io)起来,这样做的好处是如果熟悉,开发速度确实会非常快,但确定是难度太大,很少有人能搞的定 -metetor模糊了服务端和客户端,是同构的典型应用,对于实时场景是非常高效的。 +metetor 模糊了服务端和客户端,是同构的典型应用,对于实时场景是非常高效的。 -这种东西都算特定场景的快速,一般不敢轻易上,调优难度非常大,如果有人能cover的住,在初期是非常高效的。 +这种东西都算特定场景的快速,一般不敢轻易上,调优难度非常大,如果有人能 cover 的住,在初期是非常高效的。 ### 4)总结 @@ -313,9 +313,9 @@ metetor模糊了服务端和客户端,是同构的典型应用,对于实时 我们很坦然的面对Node.js的优点和缺点 - 1)语言层面能解决的 - - 已有大量npm上的模块(目前在25.6万个以上) - - 自己造轮子(站在海量包上+简单语法+npm=快速) - - 使用Node.js里的[nan](https://github.com/nodejs/nan)自己包装c/c++轮子 + - 已有大量 npm 上的模块(目前在25.6万个以上) + - 自己造轮子(站在海量包上 + 简单语法 + npm = 快速) + - 使用 Node.js 里的[nan](https://github.com/nodejs/nan)自己包装 c/c++ 轮子 绝大部分需求都可以满足了 @@ -326,17 +326,17 @@ metetor模糊了服务端和客户端,是同构的典型应用,对于实时 稍微解释一下 -- 首先,架构和是不是Node.js写的没关系,是独立的 -- 其次,架构师常用的东东有足够的Node.js模块支持,比如mq,像rabbitmq有比较好的node模块支持,像rpc里thrift、grpc、tchannel支持的都不错,我们使用的senecajs,比如redis,我们使用的ioredis,后面做ha都是一样的。 +- 首先,架构和是不是 Node.js 写的没关系,是独立的 +- 其次,架构师常用的东东有足够的 Node.js 模块支持,比如mq,像 rabbitmq 有比较好的 node 模块支持,像 rpc 里 thrift、grpc、tchannel 支持的都不错,我们使用的 senecajs,比如 redis,我们使用的 ioredis,后面做 ha 都是一样的。 - 合适的场景用合适的东西 -有很多东西是Node.js不擅长,又不在架构范畴里的,咋办? +有很多东西是 Node.js 不擅长,又不在架构范畴里的,咋办? -3)如实在不够,java补(严格点,应该叫其他语言补) - - 比如复杂excel生成 - - 比如apns推送(go做其实也很好,不过除了我,没人能维护。。。) +3)如实在不够,java 补(严格点,应该叫其他语言补) + - 比如复杂 excel 生成 + - 比如 apns 推送(go 做其实也很好,不过除了我,没人能维护。。。) -但凡是java或其他语言里比较成熟的库,可以作为独立服务使用的,都可以做Node.js的支持。避免过多的时间用在早轮子上,影响开发进度 +但凡是 java 或其他语言里比较成熟的库,可以作为独立服务使用的,都可以做 Node.js 的支持。避免过多的时间用在早轮子上,影响开发进度 ## 效率问题? @@ -346,54 +346,54 @@ metetor模糊了服务端和客户端,是同构的典型应用,对于实时 开发效率: -- Node.js本身比较简单,开发效率还是比较高的 -- 完善的生态,比如测试、工具、npm大量模块 +- Node.js 本身比较简单,开发效率还是比较高的 +- 完善的生态,比如测试、工具、npm 大量模块 -缺少rails一样的大杀器 +缺少 rails 一样的大杀器 - - scaffold脚手架 - - orm太弱 + - scaffold 脚手架 + - orm 太弱 -Node.js的web开发框架express、koa等,简单,小巧,精致,缺点是集成度不够,目前已有的mean或yo或sails等总有某种方面的不满意 +Node.js 的 WEB 开发框架 express、koa 等,简单,小巧,精致,缺点是集成度不够,目前已有的 MEAN / yo / sails 等总有某种方面的不满意 所以我们需要做的 - 固化项目结构 -- 限定orm +- 限定 orm - 自定义脚手架 -偏偏Node.js提供了2点,可以让你30分钟写一个脚手架 +偏偏 Node.js 提供了2点,可以让你30分钟写一个脚手架 -- cli命令模块,编写非常容易 +- cli 命令模块,编写非常容易 - 基于js的模板引擎(知名的30+) ## 我们用Node.js做什么? -- api服务 +- API 服务 - 前端(moa-frontend) - SDK(OAuth Provider) -- 辅助开发cli工具 +- 辅助开发 cli 工具 ## 目前进度 -- 使用0.10.38,开发moajs框架 +- 使用0.10.38,开发 moajs 框架 - express/mongodb - - pm2部署 - - 阿里云的slb负载 - - alinode监控 + - pm2 部署 + - 阿里云的 slb 负载 + - alinode 监控 - 前后端分离 - moa-api - moa-frontend - moa-h5(未能用) -- 上redis缓存 -- 上rabbitmq -- 上senaca作为rpc -- 上kong作为api gateway(todo) -- 上consul做服务发现和配置(todo) -- 上elk作为日志分析处理(todo) -- 使用docker compose作为本地开发环境(todo) -- 线上docker(todo) +- 上 redis 缓存 +- 上 rabbitmq +- 上 senaca 作为 rpc +- 上 kong 作为 api gateway(todo) +- 上 consul 做服务发现和配置(todo) +- 上 elk 作为日志分析处理(todo) +- 使用 docker compose 作为本地开发环境(todo) +- 线上 docker(todo) 技术栈更新 @@ -407,26 +407,26 @@ Node.js的web开发框架express、koa等,简单,小巧,精致,缺点是 - 一次只上一样新技术 - 形成梯队,即可准备上新东西 -- 善用npm,实现3化 +- 善用 npm,实现3化 - 模块化 - 最小化 - 服务化 -# Part 2:我眼中的Node.js核心 +# Part 2:我眼中的 Node.js 核心 - 1)小而美的哲学 -- 2)从LAMP到MEAN +- 2)从 LAMP 到 MEAN - 3)异步流程控制 -- 4)Node.js Web开发 +- 4)Node.js Web 开发 - 5)Node.js 模块开发 -时间原因,接下来稍微介绍一下MEAN +时间原因,接下来稍微介绍一下 MEAN ## 小而美的哲学 -"Small is beautiful"是Unix哲学9条里的第一条,但对Node.js来说,它实在是再合适不过了 +"Small is beautiful" 是 Unix 哲学9条里的第一条,但对 Node.js 来说,它实在是再合适不过了 http://blog.izs.me/post/48281998870/unix-philosophy-and-nodejs @@ -443,76 +443,76 @@ http://blog.izs.me/post/48281998870/unix-philosophy-and-nodejs ## 从LAMP到MEAN -MEAN是目前最潮的全栈javascript架构 +MEAN 是目前最潮的全栈 javascript 架构 -MEAN是一个Javascript平台的现代Web开发框架总称,它是MongoDB + Express +AngularJS + NodeJS 四个框架的第一个字母组合。它与传统LAMP一样是一种全套开发工具的简称。 +MEAN 是一个 Javascript 平台的现代 Web 开发框架总称,它是 MongoDB + Express + AngularJS + NodeJS 四个框架的第一个字母组合。它与传统 LAMP 一样是一种全套开发工具的简称。 从我的角度看 -- mysql用mongodb替换,nosql里最像rdbms的,从开发和性能都是有优势的(老毕已经讲过了) -- angular的出现是一个时代,ioc,双向绑定,指令等都曾让无数热血沸腾 -- nodejs提供了完全的生态和工具链,你要的它基本都有,感谢npm,早些年nodejs的性能甩php几条街的 -- express作为nodejs示范项目,它非常精简,是比较合适的web框架 +- mysql 用 mongodb 替换,nosql 里最像 rdbms 的,从开发和性能都是有优势的(老毕已经讲过了) +- angular 的出现是一个时代,ioc,双向绑定,指令等都曾让无数热血沸腾 +- nodejs 提供了完全的生态和工具链,你要的它基本都有,感谢 npm,早些年 nodejs 的性能甩 php 几条街的 +- express 作为 nodejs 示范项目,它非常精简,是比较合适的 web 框架 我为什么选择MEAN架构? -- 成熟、稳定,简单,有问题我们能cover住,所以我们选了nodejs -- 把握趋势,以后nodejs的前景非常看好,尤其先后端统一,全栈方向 +- 成熟、稳定,简单,有问题我们能 cover 住,所以我们选了 nodejs +- 把握趋势,以后 nodejs 的前景非常看好,尤其先后端统一,全栈方向 - 在架构上可以屏蔽可能风险,不孤注一掷,也不会一叶障目,合理的使用其他语言,只要每个功能都以服务出现,至于它是什么语言写的,并不重要 - 招人成本的性价比相对较高,技术栈新,容易吸引人才 -最重要的一件事儿,是当有问题的时候,有人能cover住,在创业初期这是最最重要的事儿。 +最重要的一件事儿,是当有问题的时候,有人能 cover 住,在创业初期这是最最重要的事儿。 -我的一篇爆款文章《Node.js最新Web技术栈(2015年5月)》https://cnodejs.org/topic/55651bf07d4c64752effb4b1 +我的一篇爆款文章《Node.js 最新 Web 技术栈(2015年5月)》https://cnodejs.org/topic/55651bf07d4c64752effb4b1 讲的就是我们用的技术栈 ## 异步流程控制 -js流程控制的演进过程,分以下5部分 +js 流程控制的演进过程,分以下5部分 -- 1) 回调函数Callbacks -- 2) 异步JavaScript -- 3) Promise/a+规范 -- 4) 生成器Generators/ yield(es6) +- 1) 回调函数 Callbacks +- 2) 异步 JavaScript +- 3) Promise/A+ 规范 +- 4) 生成器 Generators/ yield(es6) - 5) Async/ await(es7) ![](images/async.png) -- 目前所有版本都支持Promise/a+规范 -- 目前Node.js 4.0 + 支持Generators/ yield -- 目前不支持ES7里的Async/await,但可以通过babel实现 +- 目前所有版本都支持 Promise/A+ 规范 +- 目前 Node.js 4.0 + 支持 Generators/ yield +- 目前不支持 ES7 里的 Async/await,但可以通过 babel 实现 整体来说,对异步流程控制解决的还是比较好的。 -详见[Node.js最新技术栈之Promise篇](https://cnodejs.org/topic/560dbc826a1ed28204a1e7de) +详见 [Node.js 最新技术栈之 Promise 篇](https://cnodejs.org/topic/560dbc826a1ed28204a1e7de) -## Node.js Web开发 +## Node.js Web 开发 -- Node.js Web开发 +- Node.js Web 开发 - express、koa - restify、hapi - - 其他框架sails、meteor + - 其他框架 sails、meteor -各种类型web开发都支持的,一般我们采用非restful的使用express、koa更简单 +各种类型 web 开发都支持的,一般我们采用非 restful 的使用 express、koa 更简单 -如果是纯restful,可以采用restify、hapi +如果是纯 restful,可以采用 restify、hapi -另外还有快速模拟api的[json-server](https://github.com/typicode/json-server),对rest支持超方便 +另外还有快速模拟 api 的 [json-server](https://github.com/typicode/json-server),对 rest 支持超方便 ## Node.js 模块开发 -- Node.js模块开发 +- Node.js 模块开发 - 普通模块 - cli - - 脚手架scaffold + - 脚手架 scaffold - c/c++ addons -普通模块和cli模块只是差package.json里的 +普通模块和 cli 模块只是差 package.json 里的 ``` "preferGlobal": "true", @@ -521,13 +521,13 @@ js流程控制的演进过程,分以下5部分 }, ``` -脚手架scaffold = cli + 模板生成,在Node.js里这2点都非常容易 +脚手架 scaffold = cli + 模板生成,在 Node.js 里这2点都非常容易 -在Node.js里写c/c++扩展,有nan抽象层,其他就看大家的c/c++水平了 +在 Node.js 里写 c/c++扩展,有 nan 抽象层,其他就看大家的 c/c++ 水平了 ## 其他 -### 如何看到koa && koa2 +### 如何看到 koa && koa2 ![](images/cover.png) @@ -535,19 +535,19 @@ http://17koa.com/node4koa/#/ ### 数据库 -见mongoose.md +见 mongoose.md -### 如何做benchmark +### 如何做 benchmark https://github.com/17koa/koa-benchmark -### 开源项目里怎么样写测试、CI和代码测试覆盖率 +### 开源项目里怎么样写测试、CI 和代码测试覆盖率 https://cnodejs.org/topic/558df089ebf9c92d17e73358 -### 真实环境部署nodejs程序 +### 真实环境部署 nodejs 程序 -见deploy.md +见 deploy.md # Part 3:快速开发实践 @@ -556,7 +556,7 @@ https://cnodejs.org/topic/558df089ebf9c92d17e73358 创业公司有很多可变性,要做的系统也无数,如何保证业务系统的边界是非常难的,我们其实走了很多弯路,图-稍后补 -## 2、静态api理论 +## 2、静态 api 理论 ![](images/api-before.png) @@ -564,25 +564,25 @@ https://cnodejs.org/topic/558df089ebf9c92d17e73358 ![](images/api-after.png) -当需求和ue定下来之后,就开始编写静态api,这样app、h5、前端就可以使用静态api完成功能,而后端也可以以静态api为标准来实现,整体效率还是比较高的。 +当需求和 UE 定下来之后,就开始编写静态 api,这样 app、h5、前端就可以使用静态 api 完成功能,而后端也可以以静态 api 为标准来实现,整体效率还是比较高的。 -另外还有基于api生成http请求的思考(未完成) +另外还有基于 api 生成 http 请求的思考(未完成) ![](images/IMG_2578.JPG) -## 3、api约定 +## 3、api 约定 ![](images/api-conversion.png) -api的最佳实践 +api 的最佳实践 -- http://developer.github.com/v3/ (严格的restful) -- 微博API (可读性强,相对比较传统) +- http://developer.github.com/v3/ (严格的 restful) +- 微博 API (可读性强,相对比较传统) -我们采用的微博API类似的,约定结构也是类似的 +我们采用的微博 API 类似的,约定结构也是类似的 res.api is an express middleware for render json api , it convention over api format like this : @@ -604,13 +604,13 @@ res.api is an express middleware for render json api , it convention over api fo ![](images/models.png) -和java开发里的目录结构类似,该分层的分层,适当的按照express/koa增加中间件、路由等目录,便于开发 +和 java 开发里的目录结构类似,该分层的分层,适当的按照 express/koa 增加中间件、路由等目录,便于开发 -## 5、使用npm模块化 +## 5、使用 npm 模块化 -- 使用npmjs的private私有模块(目前做法) -- 使用npm的本地模块开发方法(测试和部署都非常快) -- 搭建npm私服(todo) +- 使用 npmjs 的 private 私有模块(目前做法) +- 使用 npm 的本地模块开发方法(测试和部署都非常快) +- 搭建 npm 私服(todo) ``` hz-api-cloud-admin @@ -640,24 +640,24 @@ hz-doc ## 6、编写生成器 -在web开发里,写了moajs生成器,类似于rails +在 web 开发里,写了 moajs 生成器,类似于 rails ``` moag order name:string password:string ``` -其他开发,如iOS开发里模型校验非常烦,于是写了一个json2objc命令行工具,读取json,生成oc代码,可以节省不少时间 +其他开发,如 iOS 开发里模型校验非常烦,于是写了一个 json2objc 命令行工具,读取 json,生成 OC 代码,可以节省不少时间 ## 7、Moajs框架和前后端分离 - 前端:[moa-frontend](https://github.com/moajs/moa-frontend) - - public下面的采用nginx做反向代理 - - 其他的采用express+jade精简代码(ajax与后端交互) + - public 下面的采用 Nginx 做反向代理 + - 其他的采用 Express + jade 精简代码(ajax 与后端交互) - 后端:[moa-api](https://github.com/moajs/moa-api) -### 1)moa生成器 +### 1)moa 生成器 -即上面讲的生成器scaffold +即上面讲的生成器 scaffold ### 2)moa-frontend @@ -682,17 +682,17 @@ moag order name:string password:string Features - 自动加载路由 -- 支持mongodb配置 -- 集成mongoosedao,快速写crud等dao接口 +- 支持 mongodb 配置 +- 集成 mongoosedao,快速写 crud 等 dao 接口 - 自带用户管理 -- 使用jsonwebtoken做用户鉴权 -- 支持migrate测试 -- 支持mocha测试 -- 默认集成res.api,便于写接口 -- 集成supervisor,代码变动,自动重载 -- gulp自动监控文件变动,跑测试 -- gulp routes生成路由说明 -- 使用log4js记录日志 +- 使用 jsonwebtoken 做用户鉴权 +- 支持 migrate 测试 +- 支持 mocha 测试 +- 默认集成 res.api,便于写接口 +- 集成 supervisor,代码变动,自动重载 +- gulp 自动监控文件变动,跑测试 +- gulp routes 生成路由说明 +- 使用 log4js 记录日志 ### 4)总结 @@ -703,11 +703,11 @@ Features ## 其他 -- 《从0开始写Node.js框架》 +- 《从0开始写 Node.js 框架》 # Part 4:全栈 or 全烂 ? -## Node.js相关工具 +## Node.js 相关工具 - grunt/gulp/fis/webpack - bower/spm/npm @@ -720,23 +720,23 @@ Features - html/css/js(基础) - jQuery、jQuery-ui,Extjs(曾经流行) - Backbone(mvc),Angularjs、Vuejs(当前流行) -- React组件化(未来趋势)、Vuejs +- React 组件化(未来趋势)、Vuejs -Vuejs综合Angular和React的优点,应该是下一个流行趋势 +Vuejs 综合 Angular 和 React 的优点,应该是下一个流行趋势 -## Hybrid开发 +## Hybrid 开发 -Hybrid混搭开发是指使用html5技术开发的跨浏览器应用,并最终可以将html5.js.css等打包成apk和ipa包的开发方式。它也可以上传到应用商店,提供给移动设备进行安装。它最大的好处是通过h5开发一次,就可以在多个平台上安装。 +Hybrid 混搭开发是指使用 html5 技术开发的跨浏览器应用,并最终可以将 html5.js.css 等打包成 apk 和 ipa 包的开发方式。它也可以上传到应用商店,提供给移动设备进行安装。它最大的好处是通过 H5 开发一次,就可以在多个平台上安装。 未来的3点判断 -- js一统天下(nodejs做后端,传统web和h5使用javasctipt,更智能的工具如gulp,更简单的写法如coffeescript等) -- h5大行其道,为最终方向(网速变快,硬件内存增长) +- js 一统天下(nodejs 做后端,传统 web 和 h5 使用 javasctipt,更智能的工具如 gulp,更简单的写法如 coffeescript 等) +- h5 大行其道,为最终方向(网速变快,硬件内存增长) - 组件化,和jvm所谓跨平台类似,是一个很长的中间过渡阶段,用户体验好,唯一的就是现在相对初期,有点坑 ## 跨平台 -### 1)c/s架构到b/s架构 +### 1)c/s 架构到 b/s 架构 这个大部分都清楚,不多说 @@ -744,36 +744,36 @@ Hybrid混搭开发是指使用html5技术开发的跨浏览器应用,并最终 ![](images/cordovaapparchitecture.png) -在浏览器上做文章,把页面生成各个移动端的app文件 +在浏览器上做文章,把页面生成各个移动端的 app 文件 ### 3)PC端:继续加壳 ![](images/electron.jpg) -一样是延续浏览器做文章,不过这次把页面生成各个PC平台的可执行文件 +一样是延续浏览器做文章,不过这次把页面生成各个 PC 平台的可执行文件 - node-webkit is renamed [NW.js](https://github.com/nwjs/nw.js) - [Electron](https://github.com/atom/electron) - Build cross platform desktop apps with web technologies -目前比较火的编辑器[atom](https://github.com/atom/atom)和[vscode](https://github.com/Microsoft/vscode)都是基于Electron打包的。 +目前比较火的编辑器 [atom](https://github.com/atom/atom) 和 [vscode](https://github.com/Microsoft/vscode)都是基于 Electron 打包的。 ### 4) 组件化:统一用法 -React的出现影响最大的是jsx的出现,解决了长久以来组件化的问题, +React 的出现影响最大的是 jsx 的出现,解决了长久以来组件化的问题, -- 我们反复的折腾js,依然无法搞定 -- 我们尝试OO,比如extjs -- 我们最终还是找个中间格式jsx +- 我们反复的折腾 js,依然无法搞定 +- 我们尝试 OO,比如 Extjs +- 我们最终还是找个中间格式 jsx -单纯的React只是view层面的,还不足以应用,于是又有Redux +单纯的 React 只是 View 层面的,还不足以应用,于是又有 Redux 核心概念:Actions、Reducers 和 Store,简单点说就是状态控制 -然后再结合打包加壳,变成app或可执行文件 +然后再结合打包加壳,变成 app 或可执行文件 -- iOS、Android上用Cordova -- PC上使用Electron +- iOS、Android 上用 Cordova +- PC 上使用 Electron 总结 @@ -783,13 +783,13 @@ React的出现影响最大的是jsx的出现,解决了长久以来组件化的 这部分其实组件化了前端,那么能否用这样的思想来组件化移动端呢? -再看[react-native](https://github.com/facebook/react-native) +再看 [react-native](https://github.com/facebook/react-native) A framework for building native apps with React. http://facebook.github.io/react-native/ -简单点说,就是用React的语法来组件化iOS或Android SDK。 +简单点说,就是用 React 的语法来组件化 iOS 或 Android SDK。 -它们都在告诉我们,你们以后就玩这些组件就好了,你不需要知道复杂的SDK是什么 +它们都在告诉我们,你们以后就玩这些组件就好了,你不需要知道复杂的 SDK 是什么 ### 5)当下流行玩法 @@ -801,24 +801,24 @@ A framework for building native apps with React. http://facebook.github.io/react 技术点 -- 使用Node.js模块 -- 使用Webpack构建 -- 使用React(视图) + Redux(控制逻辑) -- 使用Electron加壳打包 +- 使用 Node.js 模块 +- 使用 Webpack 构建 +- 使用 React(视图) + Redux(控制逻辑) +- 使用 Electron 加壳打包 亲,你看到未来了么? ### 6)总结 -讲了node工具,前端4阶段,hybrid,各种跨平台,目前就是为了介绍Node全栈的各种可能,下面讲一下如何能做到Node全栈? +讲了 Node 工具,前端4阶段,hybrid,各种跨平台,目前就是为了介绍 Node 全栈的各种可能,下面讲一下如何能做到 Node 全栈? ## 如何全栈? 全栈核心 -- 后端不会的ui(界面相关) -- 前端不会的db(业务相关) +- 后端不会的 UI(界面相关) +- 前端不会的 DB(业务相关) 只要打通这2个要点,其他就比较容易了 @@ -828,23 +828,23 @@ A framework for building native apps with React. http://facebook.github.io/react 没有目标就向钱看,自然会找到目标 ``` -- 从java开始,蹭课,背着机箱到深圳,3个月胖20斤 -- 坚持翻译英文文档,看thinkinjava -- 毕业后开始bi,整理bi文档 -- 学长明林清,传授jQuery,愿意学,别人就更愿意分析 +- 从 java 开始,蹭课,背着机箱到深圳,3个月胖20斤 +- 坚持翻译英文文档,看 thinkinjava +- 毕业后开始 bi,整理 bi 文档 +- 学长明林清,传授 jQuery,愿意学,别人就更愿意分析 - 接手《内蒙广电数据分析与科学决策系统》,打通前、后端 -- 广东联通,自己造轮子,写jQuery插件,DRY -- 做云计算,学习AIX,写有《凌云志》 -- 分手、离职,去做iOS,从cordova开始搞h5,研究各种移动端框架,自己写框架,转原生 +- 广东联通,自己造轮子,写 jQuery 插件,DRY +- 做云计算,学习 AIX,写有《凌云志》 +- 分手、离职,去做 iOS,从 cordova 开始搞 H5,研究各种移动端框架,自己写框架,转原生 - 面试也是学习的利器,轻松进新浪 ``` 既然无法逃避,就热爱它,最后变成兴趣 ``` -- 总结了大量iOS经验,想写书,结果写了一堆写书的工具 +- 总结了大量 iOS 经验,想写书,结果写了一堆写书的工具 - 去网秦做技术总监,做首席,管架构,带人,写开源项目 -- 创业,当cto,结婚,做公众号运营,写书,只在StuQ讲点课 +- 创业,当 CTO,结婚,做公众号运营,写书,只在 StuQ 讲点课 ``` 人生不只有代码,但它能让我快乐,终生受益 @@ -860,11 +860,11 @@ A framework for building native apps with React. http://facebook.github.io/react 做后端的人 -- 对数据库是比较熟悉,无论mongodb,还是mysql、postgres -- 对前端理解比较弱,会基本的html,css,模板引擎等比较熟悉 +- 对数据库是比较熟悉,无论 mongodb,还是 mysql、postgres +- 对前端理解比较弱,会基本的 html,css,模板引擎等比较熟悉 ``` -4阶段循序渐进,build与工具齐飞 +4阶段循序渐进,build 与工具齐飞 ``` 前端开发4阶段,我的感觉是按照顺序,循序渐进 @@ -877,25 +877,25 @@ A framework for building native apps with React. http://facebook.github.io/react ### 2)从前端转 -从前端往后端转,api接口非常容易学会,像express、koa这类框架大部分人一周就能学会,最难的是对db、er模型的理解,说直白点,还是业务需求落地的理解 +从前端往后端转,api 接口非常容易学会,像 express、koa 这类框架大部分人一周就能学会,最难的是对 db、er 模型的理解,说直白点,还是业务需求落地的理解 我们来想想一般的前端有什么技能? - html - css(兼容浏览器) -- js会点(可能更多的是会点jquery) -- ps切图 -- firebug和chrome debuger会的人都不太多 +- js 会点(可能更多的是会点 jquery) +- ps 切图 +- firebug 和 chrome debuger 会的人都不太多 - 用过几个框架,大部分人是仅仅会用 - 英语一般 -- svn/git会一点 +- svn/git 会一点 那么他们如果想在前端领域做的更深有哪些难点呢? - 基础:oo,dp,命令,shell,构建等 - 编程思想上的理解(mvc、ioc,规约等) - 区分概念 -- 外围验收,如h5和hybird等 +- 外围验收,如 H5 和 hybird 等 - 追赶趋势,如何学习新东西 以上皆是痛点。 @@ -903,13 +903,13 @@ A framework for building native apps with React. http://facebook.github.io/react 所以比较好的办法 -- 玩转npm、gulp这样的前端工具类(此时还是前端) -- 使用node做前后端分离(此时还是前端) - - express、koa这类框架 - - jade、ejs等模板引擎 +- 玩转 npm、gulp 这样的前端工具类(此时还是前端) +- 使用 node 做前后端分离(此时还是前端) + - express、koa 这类框架 + - jade、ejs 等模板引擎 - nginx - 玩转【后端】异步流程处理(promise/es6的(generator|yield)/es7(async|await)) -- 玩转【后端】mongodb、mysql对应的node模块 +- 玩转【后端】mongodb、mysql 对应的 Node 模块 从我们的经验看,这样是比较靠谱的。 @@ -934,38 +934,38 @@ https://github.com/moajs/moa-frontend 移动端分 -- native原生开发 - - hybrid混搭式开发(比如cordova) - - 组件式开发(比如rn) +- native 原生开发 + - hybrid 混搭式开发(比如 cordova) + - 组件式开发(比如 RN) -面临的问题:native开发是姥姥不疼舅舅不爱,非常尴尬,很明显连培训出的人就业不要工资混经验就很明显了。另外领导们也都在惦记,能不能用h5写?这还算是保守的,如果直接激进的就直接上rn了,那么native开发的程序员就变了 +面临的问题:Native 开发是姥姥不疼舅舅不爱,非常尴尬,很明显连培训出的人就业不要工资混经验就很明显了。另外领导们也都在惦记,能不能用 H5 写?这还算是保守的,如果直接激进的就直接上 RN 了,那么 Native开发的程序员就变了 > 一个写插件的程序员...招谁惹谁了。。。。 没办法,认命吧,温水里舒服了几年,也该学点东西了 -- hybrid或组件化开发,你总要会一样 -- 无论哪种,你都离前端很近,因为h5或组件化都是从前端走出来的 +- hybrid 或组件化开发,你总要会一样 +- 无论哪种,你都离前端很近,因为 H5 或组件化都是从前端走出来的 - 组件化在前端领域先行,无论借鉴还是学习都不可避免 - 如果没时间就直接上组件化,如果有时间就好好学学前端完整体系,最终也还是要学组件化 -原生开发就是iOS用oc/swift,Android用java或scala等,就算偶尔嵌入webview,能玩js的机会也非常好少 +原生开发就是 iOS 用 OC/Swift,Android 用 java 或 scala 等,就算偶尔嵌入 webview,能玩js的机会也非常好少 -所以移动端转全栈的方法,最好是从cordova(以前叫phonegap)开始做hybrid开发。 +所以移动端转全栈的方法,最好是从 cordova(以前叫 phonegap)开始做 hybrid 开发。 -- 只要关注www目录里的h5即可,比较简单 -- 如果h5不足以完成的情况下,可以编写cordova插件,即通过插件让js调用原生sdk里功能 -- cordova的cli可以通过npm安装,学习npm的好方法 -- 学习gulp构建工具 +- 只要关注 www 目录里的 H5 即可,比较简单 +- 如果 H5 不足以完成的情况下,可以编写 cordova 插件,即通过插件让 js 调用原生 sdk 里功能 +- cordova 的 cli 可以通过 npm 安装,学习 npm 的好方法 +- 学习 gulp 构建工具 -只要入了h5的坑,其实就非常好办了。 +只要入了 H5 的坑,其实就非常好办了。 -- 然后h5、zeptojs、iscroll、fastclick等 -- 然后微信常用的,如weui、vux(vue+weui)、jmui(react+weui) -- 然后可以玩点框架,比如jquery mobile,sencha touch -- 然后可以玩点高级货,ionicframework(基于angularjs、cordova) +- 然后 h5、zeptojs、iscroll、fastclick 等 +- 然后微信常用的,如 weui、vux(vue+weui)、jmui(react+weui) +- 然后可以玩点框架,比如 jquery mobile,sencha touch +- 然后可以玩点高级货,ionicframework(基于 angularjs、cordova) - 然后前端4阶段,依次打怪升级 -- 然后node +- 然后 node 这个基本上是我走的路,从2010年写iOS、做phonegap(当时是0.9.3)、一路走到现在的总结吧 @@ -982,35 +982,35 @@ https://github.com/moajs/moa-frontend # Q & A -## 问题一:在全栈的语言选择上,除了node.js,是否还考虑过其他语言? +## 问题一:在全栈的语言选择上,除了 node.js,是否还考虑过其他语言? -有的,未来swift和lua是有可能的。swift的语法和性能上有很大优势,lua在openresty的推动下也有机会,不过没有swift大 +有的,未来 swift 和 lua 是有可能的。swift 的语法和性能上有很大优势,lua 在 openresty 的推动下也有机会,不过没有 swift 大 -像WebAssembly之类的就不太看好了 +像 WebAssembly 之类的就不太看好了 ## 问题二:请教桑老师:刚才你说的并发开发流程中静态api指的是api文档? 如果是的话谁负责编写?你们目前已经是一个人分模块从前端写到后端了吗? -目前没做到文档即静态api,所以目前是直接提供json和部分[json-server](https://github.com/typicode/json-server) +目前没做到文档即静态 api,所以目前是直接提供 json 和部分 [json-server](https://github.com/typicode/json-server) -负责是后端开发的leader在写,他的进度会比正常开发要早一周左右 +负责是后端开发的 leader 在写,他的进度会比正常开发要早一周左右 -目前不是一个人写所有的前后端,团队成立不久,天津Node.js会的不多,所以还是前后端分离。但是通过moa-frontend可以让前端了解express等后端知识,适当的时候会给予机会,前端转后端 +目前不是一个人写所有的前后端,团队成立不久,天津 Node.js 会的不多,所以还是前后端分离。但是通过 moa-frontend 可以让前端了解 express 等后端知识,适当的时候会给予机会,前端转后端 ## 问题三:第一贵司在开发协作中提到了静态api,请问是不是有什么比较好的工具可以推荐? -nodejs里[json-server](https://github.com/typicode/json-server) 比较好 +nodejs 里 [json-server](https://github.com/typicode/json-server) 比较好 -我其实很想围绕静态api,写各种请求的生成器,只要api出来,文档和各平台的http请求代码就生成出来,同时可以对正式api进行压测,可惜目前还没精力写 +我其实很想围绕静态 api,写各种请求的生成器,只要 api 出来,文档和各平台的 http 请求代码就生成出来,同时可以对正式api进行压测,可惜目前还没精力写 -## 问题四:做hybrid app在移动端会遇到性能问题吧。。有没有什么优化经验可以分享? +## 问题四:做 hybrid app 在移动端会遇到性能问题吧。。有没有什么优化经验可以分享? - 足够轻量级,少选大框架,做好前端该有的优化 -- 注意touch和click的区别,比如fastclick或zeptojs的tap手势 +- 注意 touch 和 click 的区别,比如 fastclick 或 zeptojs 的 tap 手势 - Chrome profile(css3动画) -- 使用weinre真机测试 +- 使用 weinre 真机测试 [我的h5实践](http://mp.weixin.qq.com/s?__biz=MzAxMTU0NTc4Nw==&mid=222892082&idx=1&sn=ba1cdb42b43fbec08e4328c5080774e5#rd) @@ -1018,31 +1018,31 @@ nodejs里[json-server](https://github.com/typicode/json-server) 比较好 ## 问题五:如果都全栈了,当前你们团队是如何分工的? -我们团队还是倾向于分工专业化,各个服务粒度非常小,便于轮岗、还有就是可以为以后像google那样代码开放做准备 +我们团队还是倾向于分工专业化,各个服务粒度非常小,便于轮岗、还有就是可以为以后像 google 那样代码开放做准备 -但是有很多情况下,是需要有机动的突击队的(尤其是创业时期),这样可以随便组合,另外就是全栈为remote提供了更多便利性。 +但是有很多情况下,是需要有机动的突击队的(尤其是创业时期),这样可以随便组合,另外就是全栈为 remote 提供了更多便利性。 -## 问题六:h5在手机上用iscroll坑比较多啊 尤其三星打开硬件加速的时候render页面,桑老师怎么看? +## 问题六:h5 在手机上用 iscroll 坑比较多啊 尤其三星打开硬件加速的时候 render 页面,桑老师怎么看? -可以尝试一下淘宝系的h5虚拟化,鬼道曾经在as大会上讲过的,我们目前还没能力做这么深层次的优化 +可以尝试一下淘宝系的 h5 虚拟化,鬼道曾经在 as 大会上讲过的,我们目前还没能力做这么深层次的优化 -## 问题七:Node.js做业务金额计算的金额性能和精度够吗 +## 问题七:Node.js 做业务金额计算的金额性能和精度够吗 -1)你问的不是Node.js,而是Node.js要操作的数据库。 +1)你问的不是 Node.js,而是 Node.js 要操作的数据库。 2)耗性能的计算可以在架构上平衡的 -- 如果可以延时,mq就可以了 -- 如果是非延时情况,可以采用其他语言编写对应服务,没必要非要一定要Node.js +- 如果可以延时,mq 就可以了 +- 如果是非延时情况,可以采用其他语言编写对应服务,没必要非要一定要N ode.js 3)我们目前的场景,还没有在计算遇到瓶颈 -## 问题八:关于API返回格式那里,对于status为什么不打平了把code和message放出来?这么设定有什么好处么? +## 问题八:关于 API 返回格式那里,对于 status 为什么不打平了把 code 和 message 放出来?这么设定有什么好处么? 语义上更加清晰 -整个返回的json就只有data和status,如果status.code!=0,我取msg就好了,如果等于0,处理data数据 +整个返回的 json 就只有 data 和 status,如果 status.code!=0,我取 msg 就好了,如果等于0,处理 data 数据 这种设计不见得多好,不过结构清晰,对于开发者来说,是比较容易接受的 @@ -1062,10 +1062,10 @@ nodejs里[json-server](https://github.com/typicode/json-server) 比较好 全文完 -欢迎关注我的公众号【node全栈】 +欢迎关注我的公众号【Node 全栈】 ![node全栈.png](//dn-cnode.qbox.me/FtALxsauUkYDGdzcuA5y6BaIdUMC) 更多沟通 -![Connect](images/connect.jpg) \ No newline at end of file +![Connect](images/connect.jpg)
  • 6月18日北京 野狗Meetup技术沙龙