From a3fe3b992925f58fc7e441eda7101e75a7218ce7 Mon Sep 17 00:00:00 2001 From: Sean Bradley Date: Tue, 7 Sep 2021 11:15:46 +0100 Subject: [PATCH 01/18] updates --- img/dp_python_250.jpg | Bin 36123 -> 34027 bytes img/dp_typescript_250.jpg | Bin 0 -> 41820 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/dp_typescript_250.jpg diff --git a/img/dp_python_250.jpg b/img/dp_python_250.jpg index 93e2230abd536b77f0c04fcae15fa69c137fffaa..1419039c5f336643309e41a92ae106a93f03efb5 100644 GIT binary patch literal 34027 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 vE)7e!=;cG-A*#ts4E>#`4flr|qbu| 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 diff --git a/img/dp_typescript_250.jpg b/img/dp_typescript_250.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ccb35c1aad5ad5fcde8c0e59209564588974a4f4 GIT binary patch literal 41820 zcma&N1yoyI({bB){;p!Yb@K7?kP;Apdh=V`x!c(D+qy#p0<1j*g!lyo05b9c9@e(5 z_CAa@_Kwa_S>~h8US>vTJ6UEEQEfqO4<&miXSE10k{zrOIQJ|Q(ppu}9l8BIyvXX*` zpt6b}P+U<=Qbj~uS>Zpl>QHYVYpAXLe|S6p!~4Hz75}faQc7O-);{iDhVJfe|M3Go zCwCurZzp#TMrAkqe>C!D6q4i@WaKn)hT6INdvpCWS^uT`3wtkTKYKeBFLwyzzpO3g z{69znRFD9QDhUe~&C1D{EB_Za2)7t$H7W_A@$p4X6;87TX ze_Z8%bDjTmJ^JH6&HoOC$D98SCVS{(1bID%%HKl((Z2!!VE5%QB+>pN0Z{-U0R#d`!?eEcW>z~hyW@W~UBe}MeI0Syxi3l|5M7$2XQ zoQR0%zx)568-Kq5NN~{-0XGp z$L{~F|DVTb=uZJ?7#Qf7SZLVj*pHH9VWB2Fg z3&A$5c=fAZ20*H>QxUdJY=4fGM2*;u#nZfB_&sZwG0c!8`Ty~F6l)Ri1Ox3+Mhp^w zJfOHEkYmJ*z=31H$KVvhJH+lUfC31x&mCX1xQUB}(xm^v@eU!eG74#PBIL8bh2TT< z`oe1!cHLdlt%&8Qv7R(%;LU@N8m|!3513H5l;gV$dTMl9TluR1rf9|MKdaZG?(XrT zv^;Chlc3!)FQrs(y3Ioffdu5=UD#em zIuJKtF|>yn__Fs@5tHcdAqX=Y-+G7ce!zada{Jod1%7yDGGYKSo490H`!pI?!5~Fh zhmxK{RGUR}hJ?zT5ry)8Ua4h$Cg0qFPidFY{5z9uBAM7k7M(uXTSs__wl#NV8R~OR zy$ESq9WIc?XoT3?vc;NT;1CJ@1q`)hGh6{#2IgDc1Oo6DUC`Y zBnP|x_*YLQohW7ITu=Pu!dve+73IA-f)$jH*5Stp4o%4|ULB$)fW+5-@m@a1W!@=1jgg1)SPuIRS2OA!`RoAsd^jon6YhpAcWMS5dv9aD(S!hc!UwSGN zxOC&({L-RhV6-zi;brZDqLzP6BmeuomhK;1YIqcS>@lEkS)o!|!$QVKxE=jHHUZ(6 zVCbCWz9!*;9x$*0Tt6IxnTO?6{f>4ZrqOpSjU@FbiUv;_Y>1AB@o1J>+p7ZI2lHAt z_RQKiGlX|Taf_=F}>nqj92 zJ&fTLCoJ{?$y9)j5!4eCe4CA#;$r%)__%RvV%eNk722wax|xv^N`1w?e3dzT8k3dN zz_p~JQF1w2ZHXPsiVs?~dF=-FM_<&<%H6kr^O9M~G3NqtI;C-vPOrUZ?6DgYkCE;W zMKvbuFiAfk4gzTCK^CH{~vTfkQSJs*571>2xBU1oqBH33!2eM>lM!~C{Ad8t^b zSyA`vH?JdBkTsT*h61VymOPQd9gq(9cl>QAY5f)}Jbht{-zN$s#cT1?e2|M7&V-3y za=pWJUCTNNZBT2MgWzvFwb^`Y>epXUG@Q+h#u%gWo zC`AD)GYwig#j2fI#*_2ITKS&Y)~k>^PT&w4w5nzTs>08Cl38>c6=s(_-W7Pa_1P5- zZt}m143=QiR8wd4#w0|yTWjy-@NN`hG&cq)wg)$xX&uJ zs=nc?+#P-vMq~Lrt^CN^8p$L$C-(5x2+idE`X*eUJho-#FnE;h`I;ZFrZ?T?YG!195`=+4 z4hy%{8a4a;ZN}1w+YnY&Lbk5k2qKdvO=jAk7)vuqW%B?hmc8HA=VtUKM?Bq3rvwuL z9L6r6k~>o2(!?%OeK{!wVg&t;<5xX8S5KV*Q6lonp&Kj^=kFy>xJJd#oC_AlKC<|3 zs&$Ap$QtTZfmmYBb}&u?djA5p)E`W~p2*K!?$GIT@QVGOp>jw*6|x{SC7IDS91KVu z9#<&o#9vyaD?PNm+Q$?^aXtN233;KWl}_jKGIa*ITcLBpHS8XLg#a}rwZ!#V;{;P`p++j2A_S)6ey~CjSsUQyJQ$oj- z*BTG=f94%m;kClF-hzW7j(XV%mA2fe zXhj2U<0hDGEwt>hm9(RJb=;l^<svg!`3R=p9Y({lH+{K3iA5}|%x zl`H8fg*U;E(2gcT`!3w&N;c}i#52M>Bz!1LT2815t%)urtjgUr1d`+;(Y}2So{bfO zWLD=h?kkBr>HLD{CzIYkWuRS+nb?=l7@-nD-oEhbGxD%zeaa|PGo^+9fHK{%Ul%j~ z4a)(-s?AQcy58bj)O~{#-)I5Ui-xJmXUXE3X)8yDQslS-NL)bn+396^qLPl?M3fNT z=P~hTF2B@7>&|z8e){aIK{s!{G{@*G)qA6g{s0_ohqOp4_?O0H|PzL_mi zk@v8w9v_6bV`%+EeU}cu^SiMI2ZTi?(?%A7H-6GOuLMZJH^$HqOAY^=-Zoldhxuwq zDBIzA$LCHtaf&@IYcIYeN&buxnkYlQh1BEvP^9clMmLb>+MXTqzj2` zf&du;xxHkD)uq-y2n~@0#q-z;_ThL--U-1bd!4&TJPj&_k`2{Ndbbm>VTZmcZpIwc z;xFJ>YJp2EQ%8x02No-MK^R`bv{CrlB!7i^hugT=eg-OWU%QYj!m%|SwerjvR{7?@ z1+EB^(LLMYOZ|CG*?0G3U3AcM|9w-WU1O$sW`$XDiH0W@u7VtsOxO1ath`?qeFvM% zldfH6HFc5!p7Kl~QTg57w_bBNZ4k>0E=IaBb()^9H;9_REIWC)F zk+Z^u6R8znE02!7^m7|p^{XaPiK%vB#FK8Ws!|t_30h%Tv z&R16(7n@{~;gs7md@=LhE3LOz0={=me*wd99rMGf+M6WqTu)X+YNaHg zR(U?eFW;$qeK{Q3j<-Llx!ey|_nYLys32W5YAaOp;KEmIC$9lY5kxcSe|S)dnL%kO z(T&-^!T}$9Y1t#oA_&E!TYD2jD&Ypi=m+Bd^>ZZ{#@W_!nrdfGqhTN@Hm`~2N!9WZx$m*jdN7#B*@=(1mz`bXghLrYQA+H z*fY=E=s0dIY@qdoWZzuY7#WFsA{72SAhw?OBSboJGjm;@ymhJcp3U*Wqd`;m<<~H? z9+ zubV&RZ})C~^G^np{!2AqbcUHLhl8q4^%m|;@fj+elum2Cyxwcx@0R9xWg3?<4QE}a zsMokSTVRd89m+{PYmMp4NKq%Y`N%tz<%wmXxJY`N)KDwRRmm^~ulV6HoGPs1_9=DM zv6spCr?$R@*oxYshH5zN9vmT?8DlqeOMsGw{GsijmHs42R`fk^3q5iP=PALbymfc1 zIEF?Ax|n6l!RA&GV>EY*9`peY*7q}6&4V6zguGn%x3hVe@g0=7dD~y1&y#4<%x(MM z*{Gx^Nlq#GIUPowB?vty1dQj3Qy8h_8vQN{^P^p6mp?0&gVdh1tPPCFG4FXV*49Is znyf&_)$eusR3nlirO)=KFb5=IYPv_dKbjcyezUn${60RrcH%IW>)#HvNE$h>SvZEg z+|4z({J5vx!~3~(Hvdy}aYd>IR9h7ZZ}y}|=?s2;bGlS3X~;E~bDzpYQqzjPjSC$l zCMtcdk5_1gu?2i$QQjgMdoOz_Y~OHk`jN`0Q@D<&GX42Sw9?L|#{?aa67qW!UO447 zG~=NYcpLp=fpj7K0N)6)n|Wh9wS8wwuq{T`AYXzKp>JQ=;QlqZk7Ti^s_m>9cF{~I z)u;&&1}AZ(`4C>ZmVUI-_*sKkGLDC2ar=_89_a1yOA|MheDY>Yw?I!WnRvr3e3!$N z>`Qh?xRBrda^f74Oy`AX-->6X2$lt16JoycpSjTWd9x(u?kRLlcEI1xeZb~FMBYv; z)6iUV`b*>e-6CFr7bB8aUPrHfzksL3T)@pTFWDv)nms#D9qomZa^lNQiRKx5kEavC zlxsSL>gii+on2lwRzl*j(2Z`0=~|3fb9r$u0cOMUBFaB#{1u~ zc#tI8A}=8>>oSGh2F?%DPK!NjHCU9J`NB52l7X0!0o<2s3Ou`KnLOG*)^OM1q?-#U z*bq2py_e1zBFNwpW0R*=s&*=c*-Jq77f?~+eQm{XWhKzLkC3GN3Dx4^_RM?`{sPY_+Nl7$P_U|7jTaC~m5sGo=StA{65cok-Pj@exc}Hlutx zFOmgXr`JYDh*hro>r2GS-W}=~(bvghT`!nvuQ&hP3PgqE&|cAy(`e<$u~8g+Q}0kq zQ-V21hruJt5aJ|5B}sTvm~^q3%fU$A;TE!*eba`7qAXXSvt8*&k=0T>10CKI@bt8d zJpU0NmV#&hq1Z&WF^1>CZK4^Rbp*nbbnqlCE(I2qQdOV^R<8~JTFtgc|1rt#)gf-D zOlQJQeda_-rLY{;r_8*7lAAPGxyNEj5^bOppM0ggeHQ&*IdS{?<8N7?JEy&djztTj z<|j?le(zF#{+{J;E@$Y=#=~*)G*2cwF!2_?eGrSs+EtMiN(ky}hGgG&5I}jQT4GU) zVT$Xc&m~StoOwMV&t1_B;OEuaR-gX=8KLTaYx*zRQ95A<3yr08hz@wGe zo2JoB%~^U;QgNW5|4Wh(%asAUM>-(+ohb6TElu{%54V-kJVk75G+|r|+CR=t5#~=b z(l26u-wJlyzntd#SoX5*k6S<^^qlR3r%^po7nwy4cs&kzCzldXm5sehMEWMn_Jxkz zLSpd5b8*d3qM;w`5(Y_}0S8>v_~m3`@ku6x30b5Lvgx$#FXAcAqd9|FxX=cfdo#F{ z4Fh-h7^DQAGkq~U{%4!{>G{(us zuPLiaUZr0Z6`VDJg{EepzW|5weg(ZJa!0q-52kgk?nT(s$8M?t(=U}3m8@khgIqiE zr3hv^GsiQr&L-oB{bmR58kT~TTBXfRf<|K`ua0W8-IYTjVogk@*y@>n+o60v8NUo0 zh~b|^ONT}*lGl?6zw~wS9f-@v2V=eM0usK}UI4mUx&{mj?+F|r>9&@;9DwC%O+-0n?~LUllB#NVasK!sU(Zf9(%1ZnS*0)ekd=ViI(lc*&42*>H57=1=?gf zj1ZInbL--!1$3#`YbAbhcFps5gP8$mIxqS!O*IP&Wz6(8bO|S3f$|(waQE1H)XD(^ z9dU=?O7kQ)H`uIA)mcZ;Gekz`jEHsw!FkwSCWaTeN*8yQ){Oi4N^^{#(!#_wKDvB0L)0RE}=|@=j2N`nUy3tgB4PHhufB zU2Vfk0>(Wq3nw1a{0sQ)^A{kp-d_DcHkq|~3&b~z_ISbNm$C7Up!CPUX!EB-R3^{k z>j!5aA@QZar}bO2CEu%iOQt8kUJnLL*TirnsS z4tmkvxTCEDJm?HXY7<)_hZRvz+w$WOKn`k+To;*YZquQN}f~W>Hg4s-mRX?8Tte zEqkeIT~&dk@I*$@RP<8vj;2qBb+@9lvZi=7#hsy(!$se0mX?U34Hot97 zwA!Xk7n}7%x#+lHX!wfLs+HUntHTOhR=&ZDhw`^<77Kx|&}7{`5-UF*pt~4!a}s;4 zcZT|q%s03;#XQUOhDnC^d)Em6Y&9&S^5n~$J9+;Xu*lsbE&>*H4oj{d95i@nS$Ot?9prpI8^@zm&PzfJQtvMZV7lNaF0 zm+9;Us88EW1vo4&z;?2EW*V+aGru8HnxqIEk{f3NlSQ2f*8Q@1zx$Eg_uTFRvOH6e#9ZvUozO>sinN5nF-NsOEYNyxJwJlQP?}nzBv#@XA!5**il|)0IMx0CljGm68 zXHl@*$UEt<^AMnGXj*?NcxTiCJG;7?l}~o?dR26zVd|nmF;ZgS&!XS2pkI6Lre&Q? zK%1PNT}(2!Q}j6w!VcR|#or+eTCvvp8Xd1Rgr3GhRizoKT<$9#c;!S^we995+>r6A zBzVts#yx2Pf7y(dR58Q}NPF?@FW@f#=j}Cvz@63ihe?5N_e+@OmzLW{uX{3K%!1SU zVqzPA0kIz57Jfmln{Yn5AKmP-gUwKb6E(5RR*pMCoY=AzBb6}6PO6%gMJy~8(Kfo# zzW{Qc@spqcrzh^6Sw7=!GA*+elZEQ7_1*HTnStD$vW5uKp8XB(mcfJ=%A9x|Xu4P> z+lI->!9xELg5M; zF4?8Ymu6ybEqn-iw?$_*nKgC<)?Yc6a}(wi?(|ty5H++s@K#=S-?7X_7@OexIXMyR;)04nSVjoQK@E{ozb~Y zvs~~eLqufTDX&?JAqKrVW zv8Mh6SUe2!Tkf~*DUaWza!31!PRjApiai zbKa{CzNLK>cXna#K4f9|k;WizqqAz=JuMUVfh1dly??pjn230y8!2Hjo)j)|cz%gA z&o*AW%ZN5xMiu-SsoN}@G$F*vT0$-;*K^@(6u&)UY3EovK0XTy2)#jL>1@?!-`Yij zi`AXgT7|k9l|4=#eYNuO%Mc(9G;uaCQ3qmw$0|P@TFM>Qp_bb$01g1&H4#cD}9cz|uUd88qRX29HH|x1_y) zdRcOAff0A^UTT|jdv~f&KW;nyacwHY0({GM7ROi($%_^hlKU>SUz(;GuGrnPC%xRhL#XGf9nDR4+PeDWn$BAaHN+?&o{qE+ zWu`zL@XjY|!q^o&|Wot zzAsjgY`q+rAr3HWazu^ZM2~PIE~lRx zJ)FIIwpOdX$fwV1v&yaHX$D*WUbvO5seupX#5d=ztmDJF*q(mJ@%%Th`eBqxfnpqU zQ=48&#dlUjVwti!y*ZF@-l`b&afi1z(ornTs8qfDcrHqM57){4p5}X0y@R-WGjaSbDNtkHUKN&D#;gz?P zqX*32oDnJePX#M+CKF#QBvGzM<1QVx9P4In-2(AQSj5F%)z`xgonkLKfXP@?+Dgt6sb^u+OJ9wzg{)xBA-c^WXCte!05eXdkft@K&7B6?#=5b;ly?uyTZ*!M$8od@CG1c`>FgEshY~ySsb%hNVW^d$;%L!{=T%AMV8qajU@A=n#4F z1vm(md-rlV(33HtQlON?jIh|f`GMczG3i*+jzsUGz9izVYeLxnfZu&3);q-L%W1;R zc`GhhJ08SJ;^jQ{GE7lc`w%E|rGHs<(SiK`sf%6Nk9$8E2!l0tGVmm6KFWBMSh#5%_7O1DmG zhJ(5F8a>*d%SV2sV)Om^;h!}om1F7-7!z{4n>lf{F>N?QT68y zAFDatJwh1g_wQC5!qKh1^#}*oDn|*Z1w%f$sZz>Z&u8&VVOaRH@0pUuB7Tr;rFmi0 z)6(N4${n?WUIz1&{_3QDZoo(zvagI+cW-HmP8%%n^q`gKkE5?@a#nuW zM(rJR#xzJq!B$DbsNU?Up;bAYfrtaNypb@!njN4La~rKw;F0(K*RX)p4rNF6@V9sR z^i0D+>iVw~c@D*HDp$2v93tXJv@)#t*=@idRh04!iz5_Usb}^PVmq?%<=)MEB8pbA zHnw&FY5w1dw|(Q0h^SU>DT=1#BOV3A%MjaE{(XmO3MnP1Efo@0Iilo)$!$7H`&JMq zh7dETKXqWB)@5AiE_>TGBZYL9s)(Y=%u|D$3zr!tzqkrVhSp7Z9#x`nSPpPJ>Bt(8 zWNz(#6YxyXI zXK%;qx!&rf6XA{2Et|;cFm|SNeezMCS6f4?{6zAHb8S(&W&8_tb3N=TT>64F76mu8 z8{TgIkl@XDV2p2@sqL*j5==f#SyBcA_vIEPUxpzZZnx+dh&oW6zNuPm3ZnwV=oOPi zwGDb2?|!ht4)iu$6lj~s4rec@&zD~b)=G3OkbG(@e)x9#>8!G%PR;Jnz&6~VnqjaB zLP5cz;M{tq%?B3HX!XaYt(;HkJ{IF*O4HWWDspIT?5_s+j}c>#Fxek&vOGT{Xv!92 zBu){=oEF4NtHs zE22g^CJ*?u_TZwvXKLf3OxX2iCDpoBHM`D^vcA6s`>1ze&VfKdoS&3U)C<2yP!{ZfKQ9w^kKuwIeP!OI;9`4!Pf3;=m z&-bCPfzG2w!OQ||7?sAQt8&z<0609d;lIzw5aAf*C)TRBE4T*pKh-OLmUP>XpiDz^ z$_`Smdb7C0ZS6Rmmn0Y-nC)nWf0!htzxy+c9Beca7vO{$U&hJy@E1Vktb(f^KE+46 zqOXR$mKR4_pfQjnwM_26{g~}&9_J{wwPN`L9WL&Lo*S@(S^1&!NC-yIRL?+1*cZsu zIAc1cZ^ZGj?#zim=yBiQqHSplI^HrC+nvFsVDcyR`mx{%-E0U2`G@2d2!%C7X!K=_ zstzY-MtN12He$I_lM6!6fPR*XTC42T)aqn1Y@Kf@DJ2KD za(VzysEPU46WBFQ4ZL8?+St_3e*eHTMr4Oi9v~<;i-t0L?YR$lHNo8ve+rBT%ROkW z!THqqMR)7`%Z~iQv+G!!?@)S0uoNdedPmR_{30^sZPwn*#+JB<6s~ne+aHG~byU=b zA9m%VK~nhRU5c)B^J8W)4v;OV|6aO@DwjqRTW$0kU-}wM<$Bpse_WlP)K|AIWRYpU_V(qL|uQ&M2Pu{cbESWo;~;76DzCR=Qa zx>&Te8Bb&UP!cF)O-ai*z%K_Dbb?OLQ#MB}*6Pg`8;cyGma(|1Xx?%whBeJa^_LG}HnEfVBtqnq*0&8wYA64nYg@pIuma6m&4kao(I6}-{G3jb zRI-k|A?Mpw&8)p2gYm(3)n}A!ymYyNk^RxYr_G8=`-3gwsnhleS%=(M!LTS!vd(1U zVTI3f37<`nof}L01+rEx4g+Gh;xA#sPoqmmby+LIn`K#xeYvi?nkc9nai25Hy3r<% zk3cvC68)c~DO}C=Al+IDe@UrpBt>f7YxuXy>~E>s`^_^iFp#t>S#FxMNbHpbLsQ^c z;9XL(dhNVUS9od69FD()8R0m+_(z{Nc$AkHw?QUxvfm8Vj%y>HqjW21%R4eVgP&8Z z%`U~z<)Ze&!s+JB4PhW3 z;|`dx5LuPVF0I9d{J3OMvm6vxqa8@tb%x)Qz)yL*R3ICTz4h_U@ko^uya05uXKiOP z3St;mNG@NS`Bb!utWJ8-((tZ~Pm^b5&P|n#M}eY7Rtm4x0pdE^`7Qig!}3H6U)Hl4 z&Dgn3wn=vr%2K_V2)$D3YbQR28eQn6x6PuQ?N4)P3umID8+4icJveCtk^If{4K-et zhs}oq6$uwR3j(KB_OXqR8>zFJL^t80bycu+_y{m|W~P>Bl#7ZTU%5E0R~v+YdH#`+ za1uS5nQ%|Kd3DIwd|TcbMD>kXYfW3PE)n9;%$f+_5vBn{4$SGtvQi=)v!~(1HdVh% z&sp)y6S;}$&|fT|#ExS**!8=!LRVh8?`DQA>G+n)EulwpqaV82voN7g;nhFCKr_+m zAZsZ(VLe5#QT`fG7o*rHLAh&^!X=HO-X)E#WtAdorDvCA!{c+Uwc>V$CuZJIdSjq$06+HZ|ND5 z!mM|+bu->rg5<<@7K>llWsnyR#-Zl}S)E9^XX|Wotu9HZ0>&?irSMzNes?-k)Nl>w zhif)KcH0titw`h5K<{3mf-DT#qpl54%OVQ8TcZDIcVA^Y0mn7DIgcLTHsr>>IZ4%))RWRku z2QZTg*CA^|Cd!|vW}{hew4{Ox```u&jr&W(2Mn|HG*rzNziV3A!jQyD9b@;DmVvm7 zSwGX@W|~cB9W%KUt5&O+<-Y}5g&dkg@=$8H@f0-AGG-DMr@xSw>w`61aFSN~6|^pM z81~-?czj+B{p38p#vd2@%6|5o&iVy8CB+<`=8Fibuk|1qS9p#evgtnN(2vPJWFvOy zHr0N&S(tT^4cC;xO4HUW$ZV$3u`)~SK?*M~=XY>(K;pMo?5;VB%dLC^Bf0(770dgD z3fA1FD;@`|o*HBZ+wjVs;?5d}!@mHJ{AB#0vo3$)gpya~U5f|@HE_hTXH)7|)~Hf? zR`xC)ZLCDkL*+QtDLYOLFP@K@2Msenzl5?oE%}`%B?jfv$m))dCq-l&2zZrW#I*6| z28}c=EZRfALDy=CyQ$ zA0+fWP$LtkykdGMlC39rZ@yx+7ymZltTq-I%B`$ebp-P%0 z+vXrt)bZ1DUW`-sa^k9bgGMN!dRi+ZQ^^6uj!*epr!o#5wuy^u`@;9N-Op}KU!1)^ z_>`Iv{8nRPiN=#@!c$&{blLaQyzDA{GgCy`y;>xe7GMlRa2W=BK?!XtKfm2L1%K3) zOR3E^2WwOmNf>$|*sfWnDfae0>^>+W>M8NX>b$ZQ7|H+CV28Pyi_N2xy5S)0wBJ)n zVd8f{eE#jTfsaaP^nHhSI0D|S9tQLrHzW=z$$^tnNo2N zic$$DVn5k-abl!AftdmbMqkw83(K1Yl2<(D{v#+A^wgY>lKbQ@;Kd)#!cuucbV8ga z%0ro@)h>vTk)H;e`7_5=y&^PcE({O!f_LE~@g3;^=BwpB$Eq_0S_4a$)&6miE7aUH zL(VK~Xn-J&{6`@g2vef?H{(nq5UVElz46st+0l;nGEMa8E{fZX)_MGk6J?cQzkkq) z0HmBDur{919gFE#HYwh59UVG&=mnofBh3vqsJy$6jvGsnix!J(eG*i`Z!$8_K`_pM zM^Z>1a0y56inNrxU zR^t@l0Y~r%I}*S;D|?!Fy{UQ4rrID{abWn&dmK>8@MsU6m^+H|e&8eh>ToOJ@^o&c zE>RGkxt3B}I)6%?XA!E@RwDs+wiwCg6zHm2IzZmMt6ux7uwTLNUg(0MgLe~gl6#6$ zs$XOazFI!UiYYMFgU>iaKs-+1h}lwrERY(PW7f|_B>!ZjXZ<4q2kGb1PP>wprpzTF zjgAt|04nm5WGNE`LySNTsPxgnQOE4hq*X)4>Szhi69n4VP(RTYo%?&V&;grLeNu^Tvc|?7RNKYaJ*}f*y|| z*DBobqc>R~)!>S$#7|ea>9Uybm{_FMV|+ffWv85n@bngMmq^eh{L)*R+6HlrWn-XH zJuLbNzvk@OOky>O`Z)2DSDqPi&gF9ZU}7#$4_r{aabH5s(l!csNSoqZh1@mKv;QeU zlIHB$`*q~3#YL0z=y%2t^WmgzPLc8p=XDn^nr9pM`DEZTtpz*{afa)ZHQ+F*wld#@ z`^9Y=2esl?rnn9mgi&K8RNCwuAh(cLI4NeH2VFH&bo!3=ziNNizN0er6|#=)p3h+T7Od|2XuNq(5T zz-!(&Ct{VBzcb?9)wtsp$v}Q5n{ZJfA(+H6bB<54YXEMWR8QezMz|i{77*aFo-BcE z{R@bL(GB^jTC;^1fx(=_=yLafG@&wD2Yf!Smd$9nUs;4C-A3nuo^sSge*q`6(Y=Jm z?Pfy4TE4!-6)jaaAyjCHNdsYYlMzGKLyQ#pCB(C~fWBOBVv82_ zM06;jrOqET5D%sTz+Uc{)7RlDZ@k@a=h%&r>7TFU0!fUgy>x^1}?51ntm@|_I zY3i1eMT&$t0J$3UZsVS)II*Gi(NkE?h6NB}8t~k-9E!PH7d)=~#l~NVD}ni1=BB7n zrAF!+S-T$aB<@5_S9R<| zuGOsQON}c?xg2ws53QGj*tnMYw<>*Ob4pZ6^s$Cw*t+hx!F?W%R*3cVg;=#+{yT|` z?{4RWl(lxONxpw-!_ZG(Lkd3-7}j%dl_GQ9YRhfH)Y)WWeyT)Pw60^T^Vh9i`WJqq^5qMQ;d9iFjNSJX`kpd>fLFd|rQx~smb-9H8PsG!%h*Dor9^`wEgRB&$*b1zCCnT>MSCHoVBrRgOvD| z%9y1H+;9xd6cY_$>3Vpl)RFbmfqdG8-#e2p^i)SGoYPgv9Gd! z+R?M#`tpYB*u^<9hMS~&Xa5co_*#iixd?kJ90>{GGTk8~cVHl$Q43-mA^j~dTh>jC zf3-uEVfp42QQ=iD;5pix5|bs!`h{@^X2o;=fpLfz^W90ldbnbCu>0Dd+VGd+>r#t7 zT~_f*KAkBgZ-P9_*SFzpO`CK)@W3nkOZiJa{E%-vSAkAa+lToXpM=jqr*?zQoVRPi`uIpc%@S!fNgbX`)g(mP5nU zfWp8yy9UV%lc0>ktYEV^%Qqaoo^}iO>gBqRCk|QMPT1RrE{h$y1B;8Q-+!o=?H)hW z$pR`Hodh&h)6%JNtGdZe(_#OpFr_LBRr z*aS-k&e`+V@(cD5j2hkyF~5D+-mLCMUZ>y1dH$*6LvMa8X7BvRs;%I~7lrKL7h0wTe7PR{6S*z|cL-`#u;zoO zxO-EpvQdVDr@q zExpN^;rKI|cLoq&+mIcP%3auB07w4;g2&UuAb_a!XD`Myo(Z{0O>3fzyjVnD56#hbz7bQ>>`XjHGzA?gygH{h^}-ikT|vkk^B-@APTtp;eKeb* zwlOqeZKGCtZ-xf~E5gLt2GVs@K{JmfNm?3T3y>vW?2UKkucifvhhkISb#JJWX3gO+ z%@Qca9vkTUv$M+SD0@a*Yd6vYQedPq~ zwZ0`tvJ6&Q;yJh(X10ru5;w4;!rdc%o`O=f*!>*MN{2+bJ7Z)&{^cu8D27?^$8KoR zB@sV6tj2vT;+BuR(69>D1aNt?gdKHbxZflGVRGW+Q~uD|?F(d35D7GOE>r8Hrs<_v zMmQMOdNJb{DX;dWq==NyfOme#)|P2h1J)+|bTO^K^!+P0_K0lk=E)(wQU{(OHJ8&K z?4?{ZwW8R6jv3PygO%U(E<9k5CT@s777)>-K|No~t>a6()(c>|>6b_NJV_s{9rvJ}i73;??e zh(W>!hHBODnJce6H+>!Nk<{x^u2+|CEZ9%aTlAzWM#5x!SD-ct6H zF5wCe#q;Ho|1bm6{yqq4t>VkvqyPU{`pTfTzOU=xR@{mgw*oCtoI-Gd2P^(Viv@Qn zE`{P&pg?ekqCpGAwFHMGKyioC;uQMk|IGU-liW;Z&dt8(tiAVIYwx;;(E&rt)RQ~T zWDq%8-vv3Si3g$_;p*(yqXHj9KMe@7WXKWTBTBnkO?RqTOL)uy;<`ngUU0?5_oGL3 zobH-#%H&x@}X!q%mm@XBx;!|_n=>uP? z+O}|-F50=1j%T@jDVq|BY1Yx=NLt`Ooc{$^uB@0LaqKoXDOhi(quh_x*?HB{lQFBe^%OTpXXKeWknsxOzXctiQEiZlpN11(W|;7zI*w({ zV5UGiK23}KKnh2vEp#gJED-Jq{adgEu68!${Z7R}xqa&>QGNT}1S(WnrvYh+RgH?ruBELhres zERrpZK7AKi(a=jHnS0T}YuKt;$Q1|F+%2d-7yccXqIh~WI|d^v+m>7~TQfBnD3{QM zDg?xE#5leb9DbC#0bigTXkKuOiq$y4P0+v>V8#AL#J6rxQ^bUw(fki!*t^kXpKZqNX+2bgdE@1_^2<6} zB}l|edt^f$qRfY3=MIY7tw-zF`t)uW3RiEgv8Pm)X~d*ut5#XG1lUU!hbxx|4kKkb zM*;@9S@fe374C<`a4}NJu>^@1EPAT+D62$?*js@M z{!E=TT?B87?VpIp!WSQT;xh#Zh(KfNNA#XLX>g~1fC{%WfA&tJlQR|P_+l|`TbQ+h z5f%nSVt#`2KVHMF=s-u2H|IyCN6c5B+MF|o+h($zZv88iM9WH~#|3Jgj_4_}m}Pt@ zNh_G=kzPbe{{V6`|Eb7+8#;izwuJCG-9g%xLvJXDsD$%^)UMF^xL-7dgVnpxgARe! zcT5$W>FWyvQ$%*Lno z#@xEK2Ah)ZI4!S@xt_CUTcqP*KsZw=$v~6wYzj=r(6?~*W`WP}(JB-qOQAJRjHJt5 zTBBcx*Q!sB*uveFFbW7;HwH4D?FY21pIbC#d}#ijkt0}0F-?QmiBZ%liRT&mM6OQ#s{4PM0GYs<)JX&yZ0p_!3skN!c}kQ zfZq0!sPhL={KQqAkz5DF@(*7Sre9?ud)hv<&b@nh&tDG%CN;Sp(T`&s|5SkG7lj}# zDcao-WGv1Wr<;S>^tZOKGKTVP@LFBY1DSh6?fq@WKXf9AN9O(rYUfbQF~Rt~uqbHe z{HbIL76>XLsk1|MZ-RwW*v6h5AZpQsXZ5S4Y=kI?T&}EM=Ryir+jnR+TM6TFX;`^bgjE^K_NCuMp%o%oZ!K*IH_Iw#%3bJm6x{Hs<$wn-!e;0H*qD7SID@ z-8E`+SeiAKYXK(Er9kXSmBsxt_f&Q4oEuek4IpneccF+rMIFWWRA)?`ANev*oAl_? zw~j3~b2%<#E}suJzK5*R#;jS8H$q#;`wYn%2&9z*bPvS+t$%Kbv6Pu*hV-tAc*Z`N z@1XVfl)SDv3ptnui1e=tV#$QKd4y&5atgh2s3NAYLy6EF<61e06Ug;Ov>q)6FYp`e zEdp7Tc4)T!_sNP)vzHZCR-#}xwH~XGnND=x2*J#n1nPwfNxSqts+o8ZX?-6a{%_5c zT#XkgdO^H!Ya1bg{U^~!p&w(1}-MN@(( zA@O;S496-}r`I|s5Tq(h&`2iAVAd<1@AWq26+_evl~QItADs^t*dq2oeRFaKs2VDB zGoorMNYUiAIp(@7a<-2w)KjeHRhFu&Hw!mfCj`Y%0d_$Lf}hi#lDq!_WV?q;yndZ@ zE)x+z1R2!*6e2K~XbDTCN_2<|%N=+6@u4?*n6-VU(YfS`UzKd(Q&oSxr49!Y9 zD^p0MNS=RXg4B9+^;mt)Qvcj+Xb9zN)oWzJi%vB2V(w$eFI+mvQn7C7b~LTxL-$JI zWVJqTUVX8%D5S+N8}po~^+UL^we4zQ{LpNzQ5#Ph{*FUHPGs(P4)R;d+TVuOolTe5 zerccE^krRyc$zN|RB_9v08jB|!+u{_XX|D0eja!1b8qeVGyc=u@{m2{CqHyDQ1Prc z+kW_%UmkI$k7`dR?5e$S^J?V#vk84~P)*!IWg!K(Hkv2jddJub?!u>gX@=hr zbKaDkdM;B1IdLkJ;9;OrmC-C^w%+7>|8ap_d)VuL5w^c=*XU?*%5%NkKAHv* zXc%5{Na=&SsOdRhEI~={&-CI@L`+KposyzW)`*CfhK!>8lkhpUbIa}OPWuKgzDyrzDw)6`+EI+g|#?9t;X-> zVt15K!S9!|>-h!Q+u7@{dET9L8#s|RCngS}WTyNKzU4!{n!f`dHc4M60iH58%(edk zY*LF?XX&4fwd|;+M`xb+ub^{@fwoO3`%(SAYRDh;$SG8{->kdXO;&esjP5(G%%}0U z^n}f$oY&3I?AolIVS%%ZT~(M;8aF(D7xwo@fwdoc7$E+2lDkM`-pM;!?rmQjH6Lk4 zz}rV$S%X!lIOe@Cfh}I05*32P*tK3JyM}?wr*Med@9(jFrGH6;w^&zBDyAxI$(72r z27SsfHYf6)AtU{wI@cx!xo#*)hpnf(%=Y*Yr=9Nca|_X}aa8U1NL?sqKeC7Ag%4KB zis1QFPtzw6#9e&b1c7<3P&508;smwy7d_&n%3GMDDEDIPu8nL)|JUF+&`p6^7Ks89 zyW=aXlDWS{^%cB+x>|3mh6M&pqA6z`(@V2;Z1Pty?;?v*K{b*Uk3C6Y4mQ+jgX#n# z-ZRwmB0}woHszKF<#8s`v)QJUKeh<&1sT7o$LtV%IQ}bfwwe^{(<&6`53@ZK5*F|G%YzO&($0UYGP_wu0}z1JwV39 zThAk5z)Vlrb<)=9oeiUZR@c?lEXkcBH2A-#7H1V1vM+UdRlj2+8N8&vd~F-6$jWhQ zQ^pZfZdkGFRS|(5x2u)yi+N#F1C zqQt1d;18T?$3$D%87>4hFXrifb-@AazhDLsrk9k zE=mA#FLqJGi;HS6eNhPdl$3(S|L z(&OI2Lo&7elZ*b&i;QLkfsZAzHAWlrAk{rRnO1BY6BUanZ9g}m&)tx5ZaC7eMe$zg zj0a3b6-QR%WvT|(_R^^;Jl~@!H*q)F)>+AO6-iTeqf!YvXsqTpbB*C@tt?Bz#{B-F z*9Mj&EKT!nw|!HzYL#PDPXWO%TH>NxtfQ_@^;U|A`S^-;Lu2~OcKSo~hFTybZ?+OtquJcmkz(IGa)ztwKughsxtFJ z`IUUyvplzzje!&+LMCsSB;-=;Ya+6x40an_{-b4pEM!)3yyPJ(OBZDt^V0ZX5vpwx zI`QewQ_-0~LIQY-5hPRDwR53uvxLrwbTxdBLY%igaH?&JFUf25 zwBLWfT3pKh#tMRna+UTI1E#Wj|Kwx@>J0TnP6{kU$BE5BZ!fl?+EvZHMS~$LcZNbJ z&Jh30_$sP~$nG8eOPQRJ=SXx(mUTC*Ur+i>yIqxznVHeg{iBP7FGN%{ z|7Yu42lLDdJHi5_76wNkIaJaUVtM!uQSbKr^=K!gzqBP#`wVaB))7$qNrdHwx3$Ni zz0ZbRe_;g&vl`^J31!+}RM~GFpN9pj+>mqrmA2d> z^i#1i`H*=_sE=;4mA;BbaJDCkSc~*+{R5bURgZi#m$-A3svDq~C2w2JkR8-yhnqC#Omb?fjrwAl{6pDY<&0}*4W3c_kA#s1hi4kb4q6JMb&I|B3OlYH<# z9Y#nRv%YuV5NMuQI~Gd7FXsh$!MW)my|0WRT4}{N!*NE-CL!jGNls8*kqV`;8T&tuJEbf4>g>n~f?D=kmPhJ&VxC9KbyVehb9MV2gd z`AxmHZx1+~Gu#zD_Y)P%QE^@lFDU$?^MYz8dM+^qkTkHmk%faqCs4V{8%{n8xu~fE z43c$$S+=Krzol*Aa-KmS0Rv+#h3M3fkw{sO@us~JzD3uzt74oujKE<|PTP^Fl&b@} zvYi`A$}~?^ZJG8|ddNtc0vQhA%Iz0iJov6S$2M;1d8paCD?KOZ54*fjMu&Uyey2wR z50XwvrtJ27O#_H7`u8O!KCJa!= zh`uVDSY_{T>QluKm-%AA{MiNE_{NTvmRB9ZBsQ3U*pP+hp=(9#=#X_VGtWJFIn(qy z`#%+HHZPjiinblO(i!=tCO^!eEZHmqwSRz#s@8i$%dpv93p}c|UrprM`z>eNwZ22= zjAnT8yHFX1_##12wH&!w~_BG43zxJRP#IvchWR zzcz%8RhYhi{cGG&tkqrT&*9LW_k$0yzv$ZP$XVL{5BqT!S)+bkZY0K$+NPxx;UF4< zqBR4-|Nljv>mT5A-tVe^0PV=1^4&2%0#NU+f2V%ns>S9s$9u|zi?6-6I2C($CgcojX|SiT7gNJvUsiZDTlTl1+AxIN{@qY!!K`hajIVm zBiLY)Y#=L$A&*CRS{vUsG<LE12$)fP!X=fJ-Sb`*`#*)LHzCBoDQZD59t~-_OI+z zAM>kE4XwppQW8Pme{VxEA^tcept*qr)?euXK@#&bDVxyW_5RpwA_>+&idz*K*$}7w z!3#LGAV<6~W1>LwLTvIPbPoDNkLkk<=TRbXQ#8L6)l_;Z3RC8x35eK->b}g;=Z#n3 z>s?5t8Vr$@Px$qwBD@UAU0qGe8ADT2&`doz=K}Kn2T%!jnDtO7!DFu?Xf<%NY|YSS z4EP{L1W2TeTDi1BCP!9`Ke1_{s}4Z?aY3>(e^o98h*tYg^>-#$)VBxpqRjA@?PgY8 zn$A>Sne}syZRr#|d;#G;q~xw*ZSq-Cnw6PsLKR!|u7r8>5qfe5a6WH_rt-;P^$h;d zag33VAbhoYS;g3h&c8lkdwd_ctMVa4--oCu2r4V`YoU&Q9NF}c8&fcyUpWl_vIbq~ zdDSd9@74Yqk{&1ZRkzdLHoVHv5zUAACtCwBdja^$&IN{@|<{+w?4g#zpK)M=SiS2!#vfrql zqYC+3SKS~T%Q6+S$rm0+b)6h?iZgR-VcpQ=P_=8p;b=tN{15b2pv- zBXe>7nLuty4ad>mQBDk0Fu4J7@781%Qg5QIn!X(z2JOF||LZOh;K69%Lx7Gs6Tgwh zUl*4x)a{g#oLqeJz*;4@wWrxeS**n5b=i|w(M=ae5U!toWrfv$5t!*`KzN=}wrsyH z%?wCO&+`2*c%b%1J9^Fjd4H=B8Qc52&`oiFrb6U_wMU}!?PVr3Msl-z%8^2N?Ke|1 zM*!q2s;urI6OhqXPM?}#iIp5-VllJxh04xkfK>ie%m4I3?n4BxKgaEFKat<)ey(3d zL`_&F5YR)NU)H=URbc2|DX_Tx7=&$#=E>^Z1*#Rg-c6 z*OUFJ+|2Fs5I*0`bYv-%qms_s!Kz>zK0lcpWfkf86~KTBsJHO*h+AYERp~ zK48ue9;-C#tI&94FnLzrrORu;%P8Z6p&6{mYBVnh^tukJtN8+^ahAAslu|C}NAx1M ze*zRyyx-!60)E4NwN3KZB*A5_eZ+MMA57`#10DH~Gxc#d`B*tFEle>}gfV{Vtcwz$ zw@vjE@iEOY2j#{6^c|H!SJx|6M?g50%y8fV2kx8dvcIo$UUd8MX3pJ_Wi2F2kLSrW@W8=m_UlQq+{~7vfjvTou)k{a=0Gg-&R^uoa+c%4u3<}e4V`t7K0WdN1KbB3 zyiU=&c=HOUGs8t7j;hP!C{2Ixd=ttmWburX8mft=j2UDP5M=<$M7jXOyd zU6R9Zcdnd&Q#B%N`#q)i)dUVE+)=%91NsS#Ch~1@HE6iY`(r;+&b}xv=OO-12=e!Y zs{vBEM&mB(674c$rj2HmYQ8uZ^^MAdnL4X;g&J1iImBlFVe)~1n>vE@7y|n9C-;6M zeIwy+4p}81FPNp!#G6Dx4SS=J-X4w&_f1`$)m>=3-Su6qqIfm=J&9Tkr)XYkR%N7t z&P{CO8?+t;fyWSf1nC?SXwFfPU=`y2F#9+cQ29%W;F)U!`}x;_ViBfl+>C`L1D@rG ze}H9ZAY@e=CZG;$uGp;ft*b~Ntlk0_5271-UOU;P-x6IEG}~Oir2SlT8oFJUx6xzO zXNm3hR#+b}=*XhR>Bj&BI#O0YG`47NB)g)P>XQ>ZSNF8TuUKa#6tsH#62VvrqG-30 z%!R1i1Ab)s7sCNifjk6lNhT)Av78F$M8mwYZ@IyvlwX$*O`ff|e5-kcX!5|ZQ(Wds zt2|Q6#SY}sGof$=@5CMR8NqLMCzG#`X`Z=0X_THG?YZvNa6~4i3(OBOpOPK9b-u9x zDe74n5pqazwfJP3Slp?R&VjdZ%xeb$nW`YDmJ1^z4OA8e{mRx7><9FGuV&2>ROy*z z`j~Lg@p}ZC_y?G8k zrkR5KE)R%F28Ce$v{HkyX-qrtQ}9^14ibvVE=(7+@p~8SW+zGQV+fY~wT%w*$=S^Xmf5Rsjxwoj@ef z?#BDgcIs1!2c>JNoJo;Ld1?fzP^Er<=jst@rkv1gP>C zWMH`-8PWgAEzp2E!a({{2fxB+Um(8GS(f&|hgmBo?3!iYj{@GzAG|)Ny}>CP(d7^; z_u_erKIM(7>g%&lozUc;#7K?C#zk-@JT>4K{JB+ZE~w{k+O-hoBqY@@22#xa4`39Y zLCl-%`VYVtx|MZ?m1%SuZS)20_ykuJ1c55Yc&zjo7M0PS-lu{LVBqes6&4C{?VucwJ6YvH#b25mqVxg260BS!{kboG5is0dt{90AR@L zXx|;*#xs>&f;=d$Qsqm7O0+Sm8heO1S zyxR!YG-4R`_ZgHq)JIe!vz{cJAiZSrkD&{1mK!TM1FIoehcKmE{#6CM<0R4K5EU+B zfN^PXdw}*X1k;I?yS6WU7k%5sLX7Rr%NzRYJ)d}c2CpFRWnLsm4YLidie8pRlQNf* z`=>PgUgBk%?G*SaAxIfFVwGaa)N2pIM_EjU@*(r5@~ZkPiuFh(F{FezX5PZw+zFjnT{JaMq?-&I^lhWd+MAj1**5DpTg55U+`oCoJP<0q0cq=J&yz1S)6eA zf>?`7P`~Lhd$%$eEpW;nRtaAhx<-P`WcZXNnXv2!nNs++PpwtVl}`9>7!AgCsf(Fe zBH${8ZK!vyJtyxeCbS4AwD2}|q3ZwJmoQkJAx@sSi9ka2-|RqW(&SY02G( zz#4fO46GCq`6SHddFI1O<53oyl_RlTl7X*zztGI(($@}>UHLYj7HUf<6}$gqd^*LJ z+M(bcLlk^G;)xD4`2BwyiFhO|iw5;aBz?-Uo_h_}J(CqS3pI#({q_h3P-^-I$O&)U zt?3zwiV-nb@YDCw=}4%b$2Z>lAJ<+~;x_Ydi-*qWH$q$S?m1cz)-4l;a&1wICI_m& zquAa}viqa!1>p98iq_)hW1b){O@H`A-rAv{KDstQNNgUhYMr0uM*32cZVd&7@8O28 zo#$+;YmKvUC`C`HoDu46>famyGJk+L+PgmsqMgdZ8TvSN;x?g&n!6>!>s8gb#ROE?q&)}hU8Ihjw+E?LSu0=n@aJjn^g|r|%Gv#q zqw=?mVQV9w^AkQuN#Lh1ovR!2pxtQ+L4v#vibP!;5 zmErE&CORM<1U|&fd}zh?aVwl($%o#_u4z}C$-a_wB-U@_GxPqS%!QaxU~;UTU%-q; zJ1I;&iO#Pnb@DdJ?q0onG0RD~t$_DPkKa@EV=&Znt>TiNBBPW0OzM9*<6B#b$DUQvjG0X-0s`kPwh9V2d2`+RGs*4+z1>H8EUN8qC)$+yClukyg=ZN3yxnL_ zg7a|>E7{k0!DwHu)n!IL9}P)P2Hxhq%@zEtmF~OUHQnE}A@H>v1zlA1%p6k?_hNb8m#dzv1Rn* zwx0{i%2&L71UH%}A}SM#rA$b@dr7sN1Sk(_#d>Kb6*+opWLp6tIfwKk5)KS0K4WP1@Y zUeNX40QwVZOJe5j@6svB5pi5*#68pP(jZ8cG?GxS;dF=(dhooJ8E$S7d1`UfO~*jP zXe0GOo!@j9#mt8mk7BU8b;`RapaUx*Q~p8TMI&W?WA@xpF<`^T3%0)l95){*P8PUv_s%EhF2UV)6ODJ>zw2R)P9voV_`*m@ zOeJ({9Bi%t^Hke~PTpMqWMd#{qSNXVOec!YXzwA^3b`bo#%m?2J88fAUe=Y~K1bEY z$rXK~uKUykEwZKIuW$+eNJ`z*=RMv~?m7Z%E{mgKfM}T1On`Z!)79DK6OJ9+CIfQf zEFeEr@^O~Q-(>OCI4gp9ObOK4s$V4I=HV;tmV2{+DRd*-AnJQKAwC3`%y3PCfw1As zbC;?zF>9kNtkZ_5;IN!c@9R+yr5IK)c0B7`0*Nf%-8?YX_*|*F#w^K)#+z~{cHnZNzh97op_o||rDrt=%90a0R!$Y)0&r%+Z z@^Y?^+bu@Ude3MiV_!|>Cn{D4XI|hZ(xumMx=Ua{@ zL0wh> zkT~E%!`#Um`kt>Rj8;8H$Og>;0zXPU6Hg4q&$^;X-j%S6vYXb!uAIoV1Qe56P zxazDR^O64mEl_x$%0=A@smnvm6<#1jEqTg!Ahr^BuA{x;z5zSnsbxaZ_F)We&XBVmIjN_$GCHjH%VK1CF42nP6iH| zhhxV$U1@jMVrAG^cg~HnxE`lZow4I8>9BKbZsjIz;O{k6L(wS{R^xkt8^Og#4y)k&2n2_D zcj9N(@ieqzX?GHJ{50``xIK%SHTo8S(CVOy46 zF7S1zF@}E?C3zIDG=ryjCwW;(JyBvwNUa^gRl3yP@tU|@;4@8sUzevIzkGd*a zN!~`LCSUxQpwYxLSKh!b?s!^nPM8mlv~p!RD?^Jnn#HZZB}>Cm@v=>0%Gr0G?sf4- zcgd_r^M2>H9yJrH7q|mq#JK3^%J!Tob<7&!^`^$6tzF|LDdI~dhvoRNWZB~48h&uszb`~4r8LjiMTU6+ndJn@ss=md(;XqU4! zT>;2d#ytwW!W~A%b!%OUC-3XhL5@*G(l1wo#zeBEDGQOd|mtNI|&^ zy?eClwYZpUl|GGiSvsD=1OMf1$~FtE)ODuHBF397e4L3{cQ2E1>B-nG7e99Kv{ws+ zVy0IM5&7(}j}!VOR^F&YqSJMuA>hZgso1sWJY7p~k22dZ#`W2LHAF_9^PR?@T?hMl z3R0J{ca7>2FgWLGC(Hx&ra{Uij!kdJdcnVGn$Uo~DC$`P^b71BdS!d&71OMQ50hXG4VHH~XW-0Hp^nitjL~ zkA9=`@@4AQ>Yn8Zoys>)7bvjJB zzQlV}?~zu&ya~USTF*?3nQdSHR*X#uqe$nVz@{I}U zKfvh$<&XQV`?!wp8E!ctu^r6_FX=;?m5-b-ur3tetuz9zpDh=Vub2#U;?HDeEvYez zVfUBC8d)9CCl2-r#wiOf#4I-09xRf@vz{CiIA_RIdI%oEOTVhoz~)@~;<`wrknW7X zsfBxS|I=W+H}~`}GN0#h>}o`)8wlW)bqTJ?q>%6+B4`LNylB6+y_Ea7?)s@h!L{k+ zx1DGnSp*JY__@%DfH`{f#oesbjQ@J4yDFbxdfVke7e&AVF_sAqM+_$Z9w`>|o)m>% z*uEutX4wv+?_w1AX9IZ2^0&M1A#4r3P$}^z>PK9`ljVN^|F7uxUg$jFV(Q>c%3ZQ8 ztvcNjZCLU^4z5=DEylVU$xwQw0bvSZ+6xc3?Mil_E*5Dlcqg)SX&ne6-;*O{!h?q- zhl?sT1J`cai3fNiImtVnMc$2Q~un&;s?`O#-l3>iOMb3RfpeE%wV-m<(^8? zH7$&P0M+Uw?jsS>&qI;W0l{Zfo?DH{X+sC1GhvNuQD=UE-X}Ny``vN7Vw}RBsQN5y zv6H|iL`ds)0tlYgX|8)f@RQJhfE`FPByD_Iup0cua?|b+{xL`6>zq~t1;BQ@apQKxyQ?KqRwk{2=4r3IBsA#<6w33Nm5LbNZ?!`k>TSXBKztVrX8l5 z+dA6Zqu8Z;ajf(>Db}VH{oEe3rKmN1*s~`0wQK%t6B_@%gJrhS?U&27c#74=v~-RX zdlKS|xbqxa^_ExAEjhcCl`ZoPcv;&NUwppMdPP%Z`$KSdwy*gKEMN**(svqNb%Aer zV^oI81X@D2-W*eDXU|Bm{`eM+a zNMqa+O5hoXQInnu(o(~%1d8Tf?p~IsO{HbntnH+{|BAwpV>}%oyk|9^o6W3PQ~QK))A&thE=Tyq1XG6t&I1vArd*=U5Yra zoHde*P#LrCO;=HFqj;HAZ@Ek8Y;+Zw7e*MW3QT^YS)gG>Lw^(l(omA)f>D%#=wPsO zt?_h(0fmod+R;p14XBWUoT6bqn{*iwVLJ< zI^PX_cAq^ZE%Nq}s8#mF={U5|hsM3#wMOjp7gyZ+Cx5DPdqDJ)P0Wi(h5nyDRO_;r z5108LQMm6j{XfvCrcf|B&vkxHMLwwMDt`Rb)^)HsOkDnEC#03SXwi5r^M*$6)P$hP&WGRMn@0QOe)}^7i~LuYv!-(- z@bzeJJ9wsA9ZY@1og;t?=o6uM^Lv*bJ3BB;7tX9JC3 z4bWI#MWW|Bbu>fBCrjoiuA*F?*^snwB1dw>*wc>%yj4kPRE}u?4alOL`3Se{Q$6-9 zszOOgd#0oO%{nBu`gi)0)1WL%(#fSqw68sgl|9)F+1nICyr3SmPfq|G|bra_5@67E>?Aj|X$+Sh)U z5A9TB{V#s+_8&aE5<7k-j=}m-o=+VqPlX;q`O|YZII@a|iv_p~a|p-P{5rrDO!Y8IWoqi^%y0pJ4!lvoYgTPW zF05%Y971{2GHq*|A~RmMxyl2U|3kO&aO)2Os|F}Eod}3hp|Y&+X9j_Sr}PEhT>*Mt z^k7>%quA}dFpNAn#|L_1;wNhoiR2@jq!I~V*a<5vQ`xa7=&mA)z0%Y3dJzYMJl&9S zJ})ji9OsTTdzXtMbaLOehuE(Ga1c7M`Pu2(i6Pz5(GV?hJ|2Jlco>=SioZg_b49|D zy+xU`N9^>fNGE3%$__lmn)K(QV0~(dCx=tCV)UZ{$TO|QaC=J5`DH5i`MZF}dlJ6A zacAidhltktNu!Nv#hU|xLe!(4zet;y)8{?f0B3=8gB)&LJ9!7tEb9&{A=qeFiw6-Z z(@NHJ+|?Q8wO4Zb#m-ys#(;vsccGkEboLF8eZ_Se(-iHa%-yKNRw&0NKofSS3 z`pU``#(oRJdg~zGk$&D4Y&!@~`a%{m%7nq!C2ZZqs2Lzoo>d(j7=@PihE0#$#Hw}# zSI+YgpYEuY2Oi+lswi=e+@#P_eeHb+#6W+?e_G|nb3>R(Ks1$VeH}XjgqDvB*5Q_k z+4mS6!NltOa#93?NbWAGx*T1pQKBK-c-k@p!R?B+t!W55IsfEuo*f{9H z0wk+WlH-JRm>{y)43#1j);gVo$6CIx(Q*DJ-an=`rcGj#;8O^j6x z791YuyK@cAjW(v_D&^&}Q_ie{QBr2UoIENU6FO+WaNMoc_*mJ=UZq-33(3bXmv{`V zVSX&6-E;T^tFTeD=WEt3PET75H4aa~Xl^x}7Am2X4mO~(obAtJ!VCRU0+!;hxviWF zNWzPjRQ08^D*Y3rLyRZ;1&Z0lUy_7@2t1HJDL>;mX!HtuRlEt^{K&%{XdfJC6ella zEArt-F-Q9XU43p z2a+ed5O5biB14&}G6EjFs&V<0@EDdc7jPhZvU}gB{2}FkD`C7&4<~%tknp!64!x2I z%dO;u8w{{mp(1d`iQ5rnN)l`$4eHWB5EB&dL(f~Xo_0fE zUNWr|ggxd?HXtd1GQ8V=0GjY)-*10>)AKEw_zS$hKofn`#`I?-N=M=qfO?ycX;AMz zo50vttc;PA?K{#vS1bV5AGr(z1_bK7C~?9CAMDCIv;F@Qm zsGgqU5!E@TMY7Rx@QlxAOn-g1g;>!!AZ11iK*;SwgbRLFQvcm|yX8>|OI&sda_+U! zE>GYe|MwnHE`p`qZqJUAfZEpd$p2=RBH)Ap&WN|L&4x>61np}Qz-7%730B0Ey;_8B z9$c~IfO#O3PABUAQ}(s2m9xtjx)-kK-Y*^J-=flus2AQf8}|iuh|a$3$Tk4)Qg64G z#e|m1&r?wU2-??(ZRo+DUF6&?O)zod)36^d!ag(Aw-UyUK+w8(CwVnh9AeJCzO7k* z@HVqol4knqFVH&g1<#|eCU_Be@LXYCn4Eo0{A9qdHooHCkqGo2*Jz^rg}Mo9qIT3h zheQfv3FsL|$@z6&J~&O+Syk#l0=sXiE_>AKlcJ?U7tZxDjdEbZN#Z-wH%{*L{$W83 zkoE;N?W?*nLj!4jbjKUugU^Si;O}c@KXzC1Ci4&aMch2=Z&}|oPnM1yx-&!hG3Ikt zd{H2@Z7*Z@N*KF%M+Im2aN6hn`b)!d>^daDmb0h+CGrJM>$e(|l_mh}7u7u@Un_k| z>nH65p_Q4NtM$R@$_^S{`XY^Lm_6ixpGx7;N|UcIHO01wyYg#GbvSjvc)G^w?8O&} zR!uWtNuv0#8h-fucXT{-im|*m92i3WP%-~es}+9C3(8KV0sf>C#cy(3@z;1WcJ?`2 z+{JwIF`5Uph0~s#3L1Rxl__srH80OF;~HFQJ$2fFGq=?4g;!Yg253GBH-vwt7NPp9W`U=&yHqltNuwSI$eZh?v!j_Z5?!vZme6n^yQ z9F35DYYVDuj_;l;8K3p2m12!_%kn&`*yWYE!}?VBHfC-`aa`lYhF5x`f1x>$o^B9;ZS&DH*7r}JuQ7yFm&-!puK>#HWe{Qsfqk z_*`ylC0Z#YQ{-+o*vL}I8fD&THyV`;jH34E(^YU*fOPw9|NQc13XVysy5Z}~0_8xn^n z8i9$+yFtDCb^F5NZ9-F5B})pb!>+H=gZg5r2}n|O5L+O%So?P`FOO-9b-YHrw`W@J zObM()iX(NvcmlHq@*{{UE|yVFkE^8BYj z>ECaubKa{z#0+rRlkOUjTr&ODIw3$L4w5+X#KS7=dX~El9MRhrT5% zD39&>g}#UVt-HS+121Misg>G3+{wT{Yn!jQn*8sPOv4zYNJB{|+0kDvpFQ3>27c3h zM=!P=#me*LW1{K%oeM&sd!olfd%@6poh9z2Dfvc#tfT5Fc^`Rkp6#4_+njZ6FXB}w zxz`Q6tDq7j$QK~{ zv5h4Vt-C$DgM~Tn&``J8;`M#HO`8$OaxT*(TwRK))ul*vPHd`zNuX6Z4Fh+%i~j9@ z?zwnq3>84f(KD0fL59l`G$ek z`I7fRtI8x~*IT@Ng4&*?rBmII%(&s+YG^uAq;DL^{N6RtG*8Gf%bV++aJk8sag@-D zaDC^NNKYmNJBeKQ@LwVqIs1c zJqH?pEmVl{qb^di2CHsimimTL8rr6Px)PsQ6jG7X1H_7G9Az_{;?phbn8nJ*+*K+2 zV&85=B{d~rZ(9Xn1u8p6;*KVQx&)K5Ov389Q*L)z67G^)5f;xr*qpk6*{om1!xJX)wFq&pmVk7UBR>4U$t6tD})4acEyX~7`@GE0t$mL8Z_^H==3^8b*|2z>FwpS)5}3FwP*5d*o2!jXRi|O@57aDj}~0?d>mHi1vKN4 z;w2lDzKYb8?^p>^in!<^){KKJ$D}tWAGyD4eb&Qs+=lX)QqmPr6i`J#JVkjO0%hE< zZi(%^Eyc%}=#o;m6rl8k?xT)W`qnqE)UH0G=5z^3xb&K)-oEeGr9Uo$)a>hF*Dt>5 zrk-GXZirG6z9*@=goE~KB3qnCf~-#U{uz)&M@k530YIcw8i7!FS5z$Qt(BMib!(Df zH1g!TEqlvIb;WevDN#HL;YxAP)q>TU6R2B_+vBMTL3gR`+X+$-t7}SAwJik3K`II6MG?lHG}TfM ziiGRq-+gz0FS!oA$)3nhAKh$qbd z0N1FD)7&-7UR`=p2rie=)2|b^q>A&^RCjy6Y5c!u=FlbI6qLx`x<~X8=b*8BS@BI; z`+#mU=G)=FkFvKWTiZ+0P(Ehd6R`?)fNDqw^#>0=S_7SD613tEW~|3|FLhUchK%M! z9*!fo9wH>Ht(cO@E;^?+G)v?JwxScekRRO4Ga1Ef5-ygO9%1>HcAG$X)w<+pv#gNr zLL%!xOD;%KHx%wPhC^(TtmiBcwAWaIY<&8LRh*9&}EQVFMtb;T_Gr$HI*y~cgg-7aI0Ohmhl&I(!f|5Vd-@0-H`bhTrmAJGh)!3&G@0b}zfP z$hbzmvR${yd4?`2dF~D`qP2Bnj+%;80=D{e1Y+3c75kqI!RKR0yESyNF?XAIQ}WR@ zQYFB4ZsrS4rKGVOq%^d2j_r%wpnoV3-H!=+?PesO?_UR8pQ5sUVe`b`>OM8THyVngg)% z5n+dKxQn^Ap(_$!Tcr>S&vji5gd=j&gwbRQ(twihV(oRl+Z8y}ADWAj_Q0HD^#JM#LEw&`G znDY?OB@V|AA=IVHSJTu(YUBJsXct(ryq_5h7AZy}b9Q_7b~f`aDU}l1l-tQ#3Xn-C zR^7>|p%u_BwdeW8nqAUV3!9fx!)|-CB%)Dq##JtE)jV8q8t;5EH~O~_nvPlpQ*!K%US%UPOTsnra=t~Gk;cx9 zkasuI2D?La2|(~j13)Xrdz@r8zmL4!o|OzdmwkZP%w;VgfVDKrP=zR0(xn1NhJaEt zT)tJUoN`R{J!4A^#_2egl(ewX+=e>E9bTG98(ZJBcntyady(83sAb6)M+49uFTxEW zrVmw3sgmltC`VDwnv{+1ZdD26#ONfrH*%cBEfJEtrP=wA(rJwYQVf(SC@xA< zrQp`(mmH3Uf>uX9BK`viHMdAK+rx2=#t$(v!EdpFOh94 zj>~Im*>iOs^{NoV&O@n1O(>-{9VV6GyY0|BS+d;277{J?X-?aqyrj!*poDOdvWR`I zqEuURYN(f6+NyZy3OTlDs1q1m_Z(Hma;{TS;6m1^swq;WrNtzz4k)ENmfDh4L0Z#5 zwLQbm6L^<$7XV(lwv=5KSdLng(@}9H<_ldX6c$Q?)Pk+Vn%6+nFD1$D2}|>&t?4o5 zIdO~>N2Xihu;a<408)cZ^8U!sc^M8w)VVTRlC-;baS|^MgGD_09}-fx4~a{lIsVpx zMf)$xvV)M^m+qlqF@X#_9NC|04VH=#_{{RY8 zkB)=2bgje|P+3T;Ts(9ZKWUy&YU-!bmYr8X8V>=!nkJ?fhhj=$$kz!di*0w)CR3;` zwubqVv;vxg$npNIL1N%?u{LpAIxQ=TAQwF0XTJI$313({G|#P)doS_w_dM^UxPEZLP*`C~a}tc(j+JslBUG7fO3{ zgwQLMddTyllb}q+%GV%4GX0HG-Mtdfw5Y+} z8!CM>!@K?7>ZjXuc5vBG=6~9+@aO`I)s0NZJLAG%yHea`uB&NOb`>cM6!9dhYpvIf zR5|iG2tGkG0+W~96*Y*h$c+4!>?s9pFyIbDEh*(X77zabsoGckR0oFL5dQ#ml)~o8 zTvqx~6za@&g3G&G-gcxcfK@@`PCA-1?r66amE5R+rc~lemUx=%O)ILV3d#Qfa-Yq& z{?35Cs0l2W{ZAd~G&}}^dE0v|3)>kRb02%B5;d&~Lr%ET7w&J6BPckO5Eh+|s)1aU zMGhcnC3jezw1XSCG9qFiuM)d6ZnB~4jO8X%GGxh&RdCwkN|cU(T0OC6iK4d+0J02s z0mf{1?3IfOu0flXfxBE8lI5lxSogas?vFO=m|IS{wPRx>xD5qWyTldVaT`lES(yEu z=PmY}k0rz3h}@-hoP>+*o>Tod6he1&di30AN>T~pbPG{{_L^>80}uC*ktK|p9jP#F zlP+)ECfd~NjLY|CQ!TXAgls~>+1i?^N!Vx(f+*bX+kVMjY%tcUXHncbDuTOx`N+fpMw>YDdS9qBP>ukK9=W33N+}ng#W7@4{ik4LY zm4!(nKs%oF4XOP#ZZrnySm$lxTyPsZR`ZZY%BM<$BK+)`QI=u+)Aq=+BC^t(N*(E? zE-S2+q?!$b)le0)7RNF-yK96?i5?QJe<&_j#uXtF-D=-)o4io1#=@OLJ3_iDDKy$C z>ChJ5E88obPRcn z`y~F=;q&db;blyV#r+S*W!K({x021Ubs6^xam0f#6nfF80dCMAzzuHUEI zoW9+oH;TuIi-g%?GE;J}E@S;b%ZPDF3TOt9ml6;-eo?nU1@0Z9)sJQ~ShTHdS{B3^ zQ6jjdI;K-`g2ceq^>I)~TWC?@K;y?j6%C_di|$WVXLvL`hlYS#*eeo5gVSr$w9xT7 z0ED)bsh@Ip$n_x5@CQND(mM!{f5UKaQ1Q@r^g&ae;;ECtu|vS<1F;1uW859=61A#_ zh|o_vbs;S^d6d(;(xkIQ(v;d4{+&cxxlS=>RlZaiQ{Id2AudyoHyFChG0`EY>mea( zaciT6U?<9+JSv~Ndt`-U!Q#h!Nl(afJFQv$gu*{~)RDuOu>v~D02Q<`EL`hz@ zHrKy&t@X12s)%W^)p-F7s;$(}{{TD{9v~!FLJBaTyBWzWi3m$kV$69eZ7O}vtT$w> z41hvU6jFp5aXu6!C6i}iT^RA)ecOz-oskWK(h)$?SXgPz%i!VbZ6lIYJdXfwzgr^O zEXcT$)FK8st9MMc3aCT~uju^sm0 zwhck1*IGiy+MNL1zusgb?#u4Dw(hSYUCkr`?q6-ix|OSkFsBx;O*!Z#w%+Pq?YMmF zOKMZsi=E2dA@xd+8eBENwZV29O*+fyS`?=DH`A+Tn`>J01~+qzs#33v&6cT%zb!Iu ztC-tTOR^dZOKzmPg%+GbR-~bAZBkNbC^QOW_cJ)0;}>_O1zjP@YGJuG5-W2RC4olX zeo7e*IV*X)ka!cINq)<+9G#ff+smQb zWuUsdTozekELi47&aXw7?Y4w(C`ne-@jQ9x2)Jcg4bIvkPkq@DT~tuG>j~Tc0GCHG zBOVC{^x08uKW93f0T(Nr`^5D>bSjkp07;Z}*FZ`lvW6N@qygz|2|)V>fe%?>22Vrv zPW z!kbC(K?l-4!JtZ~Rs(8Fu8xtbC#brh)SpSO4kYsP(Fi0u2qkJ!B}zP0t;I?;B%ieL zK6;d-Z%dHAuT}S)>r<`NackeO)Nb5OX72o$xUXmPh3ZPaZjS{9_KB?5^lAkqE8&;*iHmqUYMJu2hlpt3s`kYBAG z&&93w+pLI?F89l8bE2^7kkp2Rgr{Sv28t9>6h3+YHv;+H2r?u+b(wa~Etg18DKbKz zLalcY>q;q$Pf;QQ_sFkzMhw(pZ&Xct*S3t=Tos=WlLfQ_#mo3<=4G)Rqz> zs5tV$F6>uRUJ!osbF#1noz4jC%od= zy`Lw{v8-{+lRvjH>Cela{FErncsCJ!64F`$ETv0Qe=$<%4O7cO?2ib*qu=uE9?c%+ z&C?#Wy?2XwlQAv_*8(eZWU%CL%0e4cWyCV#SG#aYH42~zw|5w@#Lnlz$8G-r4+a97 zL(C=e`W95fYN|m(0y*&U*p@OB+$g z$3Pv9^tv5k)(YQR{{Rkvdyh~(*Bum%sul6j043duWW86GYK}aHgSAmpYYz>L3OUEe z$3f~XJL>SO+*;$H^%hdvdc$)k^|jk@aecVx5xOj6K>Xa@3> zBCdR}^pwO$LA9a2D^~();Gobh%KKT}OnWi3_Tu{`r!Sckh>r<|rlr{HTaI*sTyStm z-OjoN`TqcB`^(u&D4CEh~u*ENsh4V2}0NCS*&8EGL729DPhsw%2J8UpX#vF{E&+#5e^?lVEk zuc~b@8ftiPf?aVP(j(RY)y5F=c(NvUc)w}f`RrNl~J^&v|Y2v-3_ zo;n4&H`7OYEtrxs%!M%=vnC2|Ev^YY`wy}SW^-_3w5N;w$XO`v(~7N&tYjh(6qWy z>RJ?Pg*X;cX+ywh6DvKuKVem#;>=s5Wc!BV$hgIBRLH_&l;hnA3menDYEzUX?OKYH zMG|xc%FS{aH*3w=$HK0e6h~p*9_cm%jJ^;QkdT@ty)^Miu7X|MPVP;~Zy6i5R4~=1 z>V{!CJVIrQoA&lwX(^2CgpK_$T1XGC2|ydDKcthOWvfahCA0b;m+;VdxY|H;Hg`S2L(4(hG;1HGcDL(E`%Z(M zR_X3KM{)EK<4-*YXvkN#=^cvoAHPA)qhuL9Be}0g`*aN6tmWC*Y>)<~ANqsUBLQvm?L;3 zjCKTQ&D&9F_iZim;b{ydjr&TeQWISQUe^pc7!$C}5E~~#@E*E)hhUDEPKRNUwyArt$DZ&$4ngV!NK#Qo4>>uoY8V>%w2;4W5 zRDIeGg*jAug$MIA9tGcDsCvJbp!e%-MHDv!>-)3<1Eq zngMQes1>+$=}LHR&;)h*Y6WAdUr(Jh1FO4}>Kg$4O$P_K0br<9{{S!jS`O9vB8n9s z%+Po#-O43t*staC&~TX@G^cp#)~fro0^I0c?dj>#l;Qcb0sjCI(<6B5*Ma*q0^ILW zCvfQj>+;ZW7s3__#`1qm@a3TKQ{SgWCx`QY*P!)X+@rlaRs60#Iu0Lku^yqkA6MEm z0^IKP614Q`>HG8mtd5u)$6B?ojWhx(b9g(`(F4`xT>xtT08L5WH#R##oar%qlK z&_tNzgCPy1Q`dN-q<@8Re-(e|(0KH}OP?=K^!VsI`g`1^YfoR5KFt76 yM{9Mi-{JoNUW22h)I9f7kCik4{Vt!5%Kkb59-mNi-9b++0DnvS-2VWtLI2qfXZl$H literal 0 HcmV?d00001 From e495e6cd718aff3d47e1aeb965044ac2115fbb04 Mon Sep 17 00:00:00 2001 From: Sean Bradley Date: Tue, 7 Sep 2021 11:18:52 +0100 Subject: [PATCH 02/18] updates --- img/dp_python_125.gif | Bin 25198 -> 18496 bytes img/dp_python_250.jpg | Bin 34027 -> 34027 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/img/dp_python_125.gif b/img/dp_python_125.gif index 7e6907b75b91c0944e7fbd65f387cddad007e00d..601a5b375b92ad84acabdc51596a96547e339d23 100644 GIT binary patch literal 18496 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 Jet&yF06PQGk|qEE literal 25198 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≥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

h(3WB)scG6t4 z`Nb&##EhsoOF(%o#-R$1C!=gx(Vw~_X?g=N!-s1!{7Xans>p!`pbGoIc$kGdW_G=> zt1yVq6w8FJKQC`~sD=gG=@~6BY`KcWUcyXHk=tM}64qk^Gf5dZ{+5=Ez9OVn7TMQT z2Z?YnKusRD>pwq5eE+#BM0(S%ujUEUD9FyStkSw3M-iQqh+NjL?fTvA$n#NuLw232 z@{KGPR@}R-`}9vg!LMh7d(6X)bgjTNW6}wzWX<`MLN%T2GFXHQBg*fp`idDq z<#Ch>A>I-$K8N9N>KR+hsBA^JM4ZKRr3qeA(9lyG7{TZOOg~1K0A%kX`V=sNL8n0T zz`zMc9?yA(Ln^V6atQQ}D~Ah|9tQ89sjRW$@D+k)$O~G8p0yZY1@tbI0ifdmQ7xcy z0Td|E8~x--98>dD^G|}Q@)N@tHjOC85>3cRo$2Ng(=A|feqso}VYsRo0@yer7(16< zepl$bf(;5jb`2Z+ihf8i$e(O~1KTbtdPUHk6^7<@xjONqGvm%)jnb6wVY;#AL>J>y zG`}sSF@7`7LOTWbxAkAOVG1l+vqBjuP)PZ%&`X$5fUXvVgexCC1GLp2X+~AB6&q8q z$?@>mr~+>Rsxo1;#kA@R^;Z zHJ*1fLbVQ1XTw@X(Nrm9gMg}%X{RUZA%Whugbv5wEEWiZ60re#1VWW+ zHrY)z@uptPb^vp~VhH{<>^I3$A{c_;w*51Gk6^~1F(bg#i91ZpV{$@ZhjZtga6bdJhV*Fdcai)==!@z)qa1w zOmzsb9`r3}C%fLS=r@p6fabyo%RDN`>RTkF975%IE|twM7On=?9u_KdGjDeS+4b=q-yiC3{E< zt!)M;<12_Rh4u)meq&aor4xqX>^#8F9wuB7;n82w%^x8rNz?-9QIJDXlY4XmM+;x* zt_xJSox0Rcj{<6kKn-DCfnpGZb#oNeI72KS;cI{xRj6LD;xmPwkM%tYWm_e7VD-`a zCJn6!DEjOa>O8*fI-<8IU)(2Xi@-bUYY8q=$CKzFfd2H)j#Z)tkA3UPnEAptsls2Y zg+uo#K-I!Hhd@ud#s6W_1^kcl7}HI`a7RISeCeXyt51D!geezpH@-c$N0|GuV(7uf zF2UFnvzYXM#5&D(}=R#}<2M=sen5<;fi+|}8VED3=^At8AK@*sL;;=w5!!L$n#`h@` zF6f#Q_Uy-?OF^{?or0Ngps7~MQ-spryND)$#7` z*Y|m%JI8^sB+59V+&BA%u}NT?W@)Oy#HQA1wddl?VN@q!E0;*F-f#t1T^5Xf@T`4> zp>wCM>zlL-Uwz+$AKZ-x-+khN16bb$bY7tAR7Jr@-`D}}^wnqSI?nD;-n7IrmP1N8 zKB;KNYH`jyK{I-VDnFnqZX#EFn){Lv1@LAJwyD+fRpFmq*oaYh?XtKc`xItK^)E11 zHo2-&U2zpiCi?$IUBzff`Dz7!22Ywfi1ZCBQ-gzSi*oS2h}@ypA4+!8V?ZN6rVT7KjXWpaz_jhj7Ev%XVO=)> z%LMNSPtg8Eqng|vQ|^>h(N3T%2kUL^KNl!WjquOiA&psoZ*?lZazJ(@&K8uH?g+kAkiQ_?!d@3nETs1j)MX@WY2bX>70#B^Ovd_ z(!Je=&PMW*zyz18#{{Janoec!72s{aj8_<*E!=7b+FPs14u!74p_kif7Z$H1N6uk% zymGPtFoq98i}%u5+ zRNMj{zi$tD!k*aMv`SH6FaMhz8*Etbyuhf;^xz8etblwk;#}3HQXJYvdhRAA0QndQ zty543fZYNWe0FA&l`O%tj&6!r3>X&7O40ehb?zxupa;N~kNe)9hYZ(XHJIIN*IW_Q zcwy|v#*TyfOP%cSOTTzgmS^DwT`yNc{N$|H3o{MOETdQW={z2GH|cu7#{EtD%BOn{ zK6hYsPSZhQ)rQqAym#|wzTXyy(0AUM_+32{(B~|V{qmv1)Mzzjd364Q@k*+SDWi`^ zE(VmBj2^yp^bD91Dcs(iXR7&@bby4O!C`IMyH^JidjP^Y-gx1cQmo??>z{D)Uj*2x zz?J{d8WbkwN5=9}DgC5YywmrpQD?jP?s^P_AI0g4hQnp=z5J+7=(b~ONBNmdOjHUj zZ@-IDFv%#C0i*w?f^+eUDgXcY=bSTV=FGKenrf<1ree4_1(hW>r{YM3zT6D0*DQfU)1u=2O%I*7OMU_BY zdW!$$_Q;YbL26X+t(Ob0GR@|#Z zOL^O^MFiX<8)F+w%N52Hfuz|;fG-A+DV4HkI}LB$LdHr76&3>4U5WHdJT zWZd_YXF3vOMuxpTWn;lB7bV`EK* zro-GYVoa`HfCce#fBo8+iFFe5(KEtCAl94|TwplWRPiAuqfE)|8)poo_#D@qY=5kV z#=P>$<%^`t!R;Wh&-%swtrXH)2YVAdP6t8|AqEN&2{ukXfM_V>YoY1xCFB}mB?9g#%6RjlA6mUh@6+M5pzJqzlrq9VY+R^&4EDM4%zM1h7O+> zB~o1F#}O=_vU38pG>!s>jf<^;wKoN+ z7zC$Y+B2{mgytFR<0^zIi;Io_3fcLOQ*-LdB&KHJYhf2yxEF|2y9JemP;C*s{n@6S zpl%N#JWgSSL{!w#E3VBy6@!oW4u0zUt>HT`-rJ807L}$mw{H6-_t!)Ot&bV$(!>)L z#6ahwwM&z!0`-YV zVs5SbD-%wHtYB{KCT=T<)PEO4`Hb91fD$HN2g<3!jr+7*4pA}}gR%geotkXJaOL3e zQAdz{4T%I$B7m968!Z@=L%s9>sGLA?qR9#%n6+Kwj2=rJ!POmZq7q7A z7`^s)`6)pW!=qpRZTF@2mQYZ$1K&DRkiLE0N@|PG(qr5+d9!x^OcAnAC#e1BIc-s< zLlaUX{W?}tck~|nJx|lB4wy);Sa}yN>`D9Kudc$e51WHQNcO)PLfq%a3!&QDsj}76 zQ>ykx63oKJDijDrQOuqYFzDN}s;o3Wa1T4f@cjvX^TfLEvl=U zYs?X2& zp^Y|J_^an4((G$^tXR_qa>SZ`kjq{Pc&^ktALL*v^8}O7o-)TfS)2i;Nls*u5mhuU z^A)W938t(BUx;AXP-HgB01A=-4DcLC7eb@14kb7OWpv@ACNx;e;(!HO#-z4rVmd5p zvuaWx)jAw;7nk7hHl&`alt@{8ZsVA40*GWG%h+uy9XF!x1RuJ8Sx&Qhb)?yi<0xeS z%!$PT!U>r}m0qR^R1)?87>E{ijlaej6^Anv$D(7tg9kE& zA56(K)wfLYrlAf*7+OS3t@hS9!ymlc2w3WZ8EZuL_3un#oS`A1OEsYtD*RtVd_SiR zFc;U@o)9?3t}}K`JI(-+HCzAlcNqQ(<;JHoh~>EeH+jP8AA?E)*E*m0Ah*e!j7U66 ze73gF#(EKCUK1DvL9ufQ;|K0!hQrk}tl%q(oo&hsj3p56!iS(zsK#_g@yZPIxk7TU z6yc4dX^6!-4#E6%hP6fj_sMn$ronKAY#;1MLiV9B_7*ltn;B^1eZZ68#^e&yQgJNB z-_*;|$!X4~(*#$mG0HVmCK{<9ucCpR1fX4Qfc-BT`O-A+_6mZp?z|#RC3BVYBWFxu zEqVVmgvX8n_9P`y6YJ#cMXV<&FrHS;itqe&(FqE9luJ$edmm!hM{%lGph+YpsL_@dNu4iu^+Bdse7sfX-sg^=L3`qg={-3F8aU60E}&iI>X-rL;Cb!u zoUxwdZusu2}25<(;FG4{h&pZy z@)?1$mv1cv(9Sh3K%+rZn#;ME^a!lhm>k&yEs)`iJDo{Y%u0uB)y$DiaTKrbX1QoE z3DPencDb-JfRsX{^#D>5kwR8E6=;BNS-POq(1Hb%usomSsQXh9+1>4M34U_+v#Xj& zGJoEeu9#u_)=_OEogeZg+3Jh`HCs@>V@+m@bbEfD*FQ9mqgsvd({sF}I&rdjhLe3Z zYk^SQC^L&wW7-6eZXtuUJdKORsvh5dHuz7OjVjq1{D!dkC{Ux;($ZIE*(%XD0a5p-g%9${5L10*yYE|Dlq$EIwc6Z8R7gUE?pk! z%MF_c1erudNjcuU}}Fv*I+l(c11~)L>g7f=XETnc$pGW%b=L^T zo`LuO!XT2XASV$tSdGZgXHoX3Z#p#HlZNo7lSk;raLpXBValM9S4zVZ1Q4c{?hJea z+utQxCwj33Cgx7Xj*-2;zUbT*EF;;1hY-XCr#2I=z@dpbe|qWe6Z{nWw<%QFp5fi; zHEF_d5(YLCjUWV)`(?*Xw4e{ECID9}4Y6#>P}Rfo7eCj`7SrJy0jyxEs=TSZShk2E zTeZActD=y0B5+?g3gVA@nOf@z>uJ)n3+#}&t(11OYPMFtLy$txnjK&PPN>1ed$ z8wCJ;JW5Y423QG`Ze<=SxU|?3#fWW|9O|2}t86;-GymaKqb{(8PXNZ$r5ZULKm#jq z>eQX@$If>WLjpAe#V)7zO9;Th2tO8%fmMXblVuoW{4#N&TUH;z{a+|PNm|0=jH}U2 ziN9441(+F7Cigs>k{9;XOHFsEg`CLzRNu4mvvd&`M6FM4G;Qp2Hv$J@+D!z4WNp#+ zHf);m_0U^_Y3wxZ4Ldv(`rp8E)2EaP!!LF$yfO>cGI?BjYf~F^J9!KTwCP`MayP>g znj-)XTXcwvj=x<05!P91PPuY`ZLIO`y*byHm)nhI)(J~VJ{b24>l#+Zz3mkGklT^Q>a+LnZHHzG*A!czJyj@4?n%@TSo$Nq}m1j5Jzgt#ySq1 z7_QVn!@JNzB0)>U&r4tQ_Ih}l&UR!Mf&)}mG`)B%dn;L$GL`_q2J=6$3_rhxTS$Dc z(b>(bi#N}<9_?spm605&v*m4^XCjsNAThu>FfJ}Nqj(!UiPHpV*w7DOR<*~@g#8!$ zj+|A+|246vZD+|%XkN}IjQqp}!vZiiWsmz5O6&CkX>5Zt!fX}BonPzMxp=~#x~o`AjT>QpJZ zfM;3HRBpMa^ob|KR3DsP<>FO?m7~ieK4JABdMBHele0lLC55cCy8jc#XY zXj7$#h+c7)71Fd*6>@!v#}3Ga@$)>(ZtyUMr@}kHuHw|g4(M;^zKK|DaRJ@Ka&!0D%KbvWV6 z2)iln=$F2DN8-=2^a*SlQgbq5vsVSYKO}msvkg8A&V|!cvci_GYxZmpt$+iM>x*v| z`g&BB)HLI5f5hHtc({UZMMO@SFF@yk^^+oE=m!O#HfyzE4-Lh#87?)|K*J=ugBNXU ze$c~Osz%G9QvVqMk?yI?5?3y>IXWfnW_4Kbs~>W=FO~Oy=&DS6()B59zzISt!Rv9K zS_M}4r<%c-eZuRF^B~N7P;vm(KMb5gB8S(np_jzT*RHAF>MUzST+GWM%LEO12TV%1 zT@R%Vx{&Sg_^1T#>V&TaGp;_*TE9#ueU(+wmF3;4_j|L{#Y*2@*<8=-_~)YQ=$U&v zMd6-886-86J84SA_!iz@qV4iSsV!>ywxjH+h-}hRONofIp_9I0>(hc~e001w(PNIA zbHCG=v#PQW6&cTV_RNkb4u0y}(a#eS|PyYOS_@q-yV@_9ba3F|zpJ)4c zZ3-IZQkUN7Q-QLPzO~fbHSV|$y+3QyN;iHhyuO`KbUo(2fV`NMtN82WR;zs8K#wAJ zF!_3%ydN_5sVHA-y+dw`PwG}j*59xmGaCvQr*morRR2v{NNz*=OD2yls7qlYwWZbqRf$=b+*kV{D!tRWb=4Db#{(c z-Mub53^H$9^!i-R>(+?_4Fxu>I`dh*NlrD-W~~?PwU17&_s1p(tLAx36gIeu!>PDX zDnXF_!$?rW+03mYLEAPY`ElIRG&g!~z&=+aXHYur*iGYi@2RUw+?@eSa>KaqG?h_V zMX|Ytwu4)0U8khLi%yh8U70v=a85@n)H&i5S2u8a7obiIr&z?SxP#YevM=%X`p7tDX}&we%#VmZ?a@BJGWyO2q4tP`jM+MQ@N{Ir=aPf(?2di^P4Lsy_;c4* zxQ54zuEvA832F6f(=^Y#Y1%b|gl8wL=O@~4-0No2J&E?=zp6;q8{$qjbe+-qR5pBk zZw=X0y_S>wA?tO&r%Otzgp-rj>aPym)o~e^LkBOuej*8;L`NmnPp)uj^4S4Hl#m@4|;uD?U z6l;Gh=`b2irn>*V)?-Ja1DOQqwY9%J{(72N`7&!%>6&Ff(f|FD1jDxdde;uXP@yLI ztB1aZH9u%u{}_D!?cJs%zF_R&wWJlhs{pf;d$8tB+}ZE{u6pkl482Y4Q6=BIz+#8u z1K@Mys&|L4Hvsd+DGlB0AB>69@^6#8OgLaCW0gjMcr&UZ#5ZvydQR2g^NZ;}4+A2i zkl+a@w1?o9Ol>vACOJ}QE5&V{ZwXOjhijh=ULzaCMem=N%{~VOw5Fet=yo>XNTADX{y&Ou!6@@sGV&;p;H}Z2BPF^{MD@{05NjjI|C}oDCaV|#i zVyQ|hJ89_0+D}2pV(_nFH`aB|*#i*{8|i1m%!(J3U3$4?uufD|F59BB>HroWfuxU; z+xK$47&{Kdi=srsW=SzAKTNH83xopzRN$O6%I-QP8wOUbg!G|K2pGw0(&8pnw!Vi#qRwo+1L7B5N`OBrEwGIWj>%9$}Z->M0KR9cZrO5=B0jWEjXER=Cn z0tjBd&Y{*U+(ff!Dv1gLt!D8qz%kPg(18cPfB!H+ocOilfapWmTHLx7$G*^#kAy`o zDX3*lMN$w-h$%|)kr4+#k|+x8`%iS!h`u$8z5uHeq%z1;8i-pxWY||GRrFe3C!vRC zQIC1d2^iiUUBzzfF0n-CmIXhzYh?gWb4VqU^;Bf8PIO1cCvu z@dQLBQGUh9ryPII_qM)XG0ZBEaq5>60ltWxZ zA+ILbe}LFf*`1l3GDqSsPizAky&=zy>lN9n0kd=Mw22>y&Sz~o3%JCfx=7cS=WdO0 z=EhbA38(Sqy#|zvz!mt#r!pykDTpalEcnv9L|Cc>`qVW9eWMU8-2RVmhTq@aeK&c5 zIwJWB!nIa}#j?V=-Gq!@FRtC(~TP8fQyzZPdai`hJ8$kWv<*MY%Le$)Kuu~B3qkE1!&BmFsL!>U($)W2#gclZD<~XQB z8uC=0k=j<-yVARS5I3?Wf0VxuNVzijmJeTCoV_PVyt=z#>zHghGvB&+@1*E8BWcTB zg~4EuViQ!6RDw`N5dxVivqdmd5gEjvn@#7~;F+udB}g^TP_QA@E0|R}$&!!$SGGbE z%+jlJN0MeR_Sl0Q{L>>L%z=2XvyAcT%&}49lo3<<0|a)+Ejm6n6;MGEX&7n5mivDK zJj>U=e!A@EerX(#`%^6DIi6%YTUpX*_M}6c4Qz`aLBX89RKOZ_1O<)V!#F@bFAPt5 zu)pMg&i=+3mxjR3iSqdq7BnKbMDz7R?62S6TK!^j^ab!pq-KaeGZdisS0BvdIp3h7T$^4bj7 zv8hK95eXh$%XG!R^>6?#$6SDohz&fK_8@*&bJ^Z;T;r)wQ62Z0H zE#mRhOZorxAG}U_PdGBIF?8DJw42U>6Wo-#aY2jt)3ETW-Lr3;HIEVlr27K~eSVzQ09<9qthnKKLjT_AnoHh)8z+;yl~ z@aX5w56ZKSyT|>v&H9Iwef1Wb=;=%NF`KMUexKL;n!C(n+VowM+{XF1L=SuuxO__8 zrQa)il9L_>S9`=HeJ&V4C&nf`_V5+nJ6rp0-HPAT;2HmjOWTR)df3fGZD{`UP3?xO lo{K(iIoSMqRo(Xw9zXqDd+C=Ko9i~e`?Y68#*U#={}05Tw(9@@ diff --git a/img/dp_python_250.jpg b/img/dp_python_250.jpg index 1419039c5f336643309e41a92ae106a93f03efb5..2305ab0027791fc1b7bfc7e58bed9ba9393fec85 100644 GIT binary patch delta 84 zcmaFe$@IFDX@d`wf}5kIg`=67p@EyTiJ_sZvy-Kv!j`XsimolrKyv%tD}pv$>ba+8JHpi MT#7cYU~+B(0LXF{B>(^b From 4661329d074b5cfdc53e69d91e1325f7095af4f2 Mon Sep 17 00:00:00 2001 From: Sean Bradley Date: Tue, 7 Sep 2021 11:20:26 +0100 Subject: [PATCH 03/18] updates --- ...design_patterns_in_python_book_125x178.jpg | Bin 11218 -> 11655 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/img/design_patterns_in_python_book_125x178.jpg b/img/design_patterns_in_python_book_125x178.jpg index a9e180f5bfc08f90fdcfdf2b4eb8cc9760a3f2ae..0cf8aaa3bfa6a4868b48ff73c2fc86f1c4ffa661 100644 GIT binary patch delta 10900 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 delta 10472 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 SHcs!Y3tM#)C+&j( From 7db433020e85072dc09ec7f95c06215b2ea8c27d Mon Sep 17 00:00:00 2001 From: Sean Bradley Date: Sun, 10 Oct 2021 09:07:31 +0100 Subject: [PATCH 04/18] updates --- README.md | 6 ++++++ abstract_factory/README.md | 8 ++++---- adapter/README.md | 10 +++++----- bridge/README.md | 10 +++++----- builder/README.md | 10 +++++----- chain_of_responsibility/README.md | 10 +++++----- command/README.md | 10 +++++----- composite/README.md | 10 +++++----- decorator/README.md | 8 ++++---- facade/README.md | 6 +++--- factory/README.md | 10 +++++----- flyweight/README.md | 10 +++++----- interpreter/README.md | 10 +++++----- iterator/README.md | 10 +++++----- mediator/README.md | 10 +++++----- memento/README.md | 10 +++++----- observer/README.md | 10 +++++----- prototype/README.md | 8 ++++---- proxy/README.md | 8 ++++---- singleton/README.md | 8 ++++---- state/README.md | 10 +++++----- strategy/README.md | 10 +++++----- template/README.md | 10 +++++----- visitor/README.md | 10 +++++----- 24 files changed, 114 insertions(+), 108 deletions(-) diff --git a/README.md b/README.md index 2b4e1c6..207dde5 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,12 @@ There are 4 possible ways to access the video content in this course, All the code examples in the book can be found in these pages. + +> **Note** + If you just want to read my design pattern articles and you don't need to access the videos, then you can read them via [Medium Membership](https://sean-bradley.medium.com/membership) + + + ## Overview A Design Pattern is a description or template that can be repeatedly applied to a commonly recurring problem in software design. diff --git a/abstract_factory/README.md b/abstract_factory/README.md index 9432996..1dec563 100644 --- a/abstract_factory/README.md +++ b/abstract_factory/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Terminology -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Abstract Factory UML Diagram @@ -36,7 +36,7 @@ python ./abstract_factory/abstract_factory_concept.py ## Abstract Factory Example Use Case -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Abstract Factory Example UML Diagram @@ -117,4 +117,4 @@ Python Errors and Exceptions : [https://docs.python.org/3/tutorial/errors.html]( ## Summary -*...Refer to Book or Videos for extra content.* \ No newline at end of file +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file diff --git a/adapter/README.md b/adapter/README.md index 1e033bf..2a8800c 100644 --- a/adapter/README.md +++ b/adapter/README.md @@ -17,11 +17,11 @@ Cover | Links ## Overview -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Terminology -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Adapter UML Diagram @@ -29,7 +29,7 @@ Cover | Links ## Source Code -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Output @@ -43,7 +43,7 @@ method B ## Example Use Case -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Example UML Diagram @@ -143,4 +143,4 @@ When executing [/adapter/cube_a.py](/adapter/cube_a.py) you will notice that the ## Summary -*...Refer to Book or Videos for extra content.* \ No newline at end of file +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file diff --git a/bridge/README.md b/bridge/README.md index c5ee0d9..fef2a84 100644 --- a/bridge/README.md +++ b/bridge/README.md @@ -17,11 +17,11 @@ Cover | Links ## Overview -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Terminology -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Bridge UML Diagram @@ -29,7 +29,7 @@ Cover | Links ## Source Code -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Output @@ -43,7 +43,7 @@ c ## Example Use Case -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Example UML Diagram @@ -121,4 +121,4 @@ PS> python ## Summary -*...Refer to Book or Videos for extra content.* \ No newline at end of file +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file diff --git a/builder/README.md b/builder/README.md index 0c9fb25..719cdbe 100644 --- a/builder/README.md +++ b/builder/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Terminology -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Builder UML Diagram @@ -28,7 +28,7 @@ Cover | Links ## Source Code -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Output @@ -39,7 +39,7 @@ python ./builder/builder_concept.py ## Example Use Case -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Example UML Diagram @@ -113,4 +113,4 @@ This line, creates a list at runtime including the strings 'SmallChair', 'Medium ## Summary -*...Refer to Book or Videos for extra content.* \ No newline at end of file +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file diff --git a/chain_of_responsibility/README.md b/chain_of_responsibility/README.md index 2ddcd9b..2e90d00 100644 --- a/chain_of_responsibility/README.md +++ b/chain_of_responsibility/README.md @@ -17,11 +17,11 @@ Cover | Links ## Overview -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Terminology -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Chain of Responsibility UML Diagram @@ -29,7 +29,7 @@ Cover | Links ## Source Code -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Output @@ -47,7 +47,7 @@ Finished result = -1.5 ## Example Use Case -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Example UML Diagram @@ -111,4 +111,4 @@ See PEP-3111 : [https://www.python.org/dev/peps/pep-3111/](https://www.python.or ## Summary -*...Refer to Book or Videos for extra content.* \ No newline at end of file +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file diff --git a/command/README.md b/command/README.md index 758771d..6bce730 100644 --- a/command/README.md +++ b/command/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Terminology -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Command Pattern UML Diagram @@ -28,7 +28,7 @@ Cover | Links ## Source Code -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Output @@ -42,7 +42,7 @@ Executing Command 2 ## Example Use Case -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Example UML Diagram @@ -78,4 +78,4 @@ It is just a useful construct that you will see developers use as a recommendati ## Summary -*...Refer to Book or Videos for extra content.* \ No newline at end of file +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file diff --git a/composite/README.md b/composite/README.md index 9e419cb..d5eb2f2 100644 --- a/composite/README.md +++ b/composite/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Terminology -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Composite UML Diagram @@ -28,7 +28,7 @@ Cover | Links ## Source Code -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Output @@ -48,7 +48,7 @@ COMPOSITE_2 id:2050574298128 ## Composite Example Use Case -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Composite Example UML Diagram @@ -124,4 +124,4 @@ Visit [https://docs.python.org/3/reference/expressions.html#conditional-expressi ## Summary -*...Refer to Book or Videos for extra content.* \ No newline at end of file +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file diff --git a/decorator/README.md b/decorator/README.md index d43e32f..fa6c65a 100644 --- a/decorator/README.md +++ b/decorator/README.md @@ -17,11 +17,11 @@ Cover | Links ## Overview -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Terminology -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Builder UML Diagram @@ -37,7 +37,7 @@ Decorator Method(Component Method) ## Example Use Case -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Example UML Diagram @@ -133,4 +133,4 @@ The `__str__` dunder was also overridden in the [/prototype/prototype_concept.py ## Summary -*...Refer to Book or Videos for extra content.* \ No newline at end of file +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file diff --git a/facade/README.md b/facade/README.md index 90cdb6f..9eaf5bb 100644 --- a/facade/README.md +++ b/facade/README.md @@ -17,7 +17,7 @@ Cover | Links ## Overview -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Facade UML Diagram @@ -37,7 +37,7 @@ B ## Example Use Case -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Example UML Diagram @@ -170,4 +170,4 @@ Found 2 errors in 2 files (checked 1 source file) ## Summary -*...Refer to Book or Videos for extra content.* \ No newline at end of file +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file diff --git a/factory/README.md b/factory/README.md index 5f2d0da..32b2924 100644 --- a/factory/README.md +++ b/factory/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Terminology -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Factory UML Diagram @@ -28,7 +28,7 @@ Cover | Links ## Source Code -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Output @@ -39,7 +39,7 @@ ConcreteProductB ## Example Use Case -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Factory Example UML Diagram @@ -93,4 +93,4 @@ See PEP 3119 : [https://www.python.org/dev/peps/pep-3119/](https://www.python.or ## Summary -*...Refer to Book or Videos for extra content.* \ No newline at end of file +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file diff --git a/flyweight/README.md b/flyweight/README.md index ed2ffda..1791752 100644 --- a/flyweight/README.md +++ b/flyweight/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Terminology -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Flyweight UML Diagram @@ -28,7 +28,7 @@ Cover | Links ## Source Code -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Output @@ -41,7 +41,7 @@ FlyweightFactory has 5 flyweights ## Example Use Case -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Example UML Diagram @@ -86,4 +86,4 @@ eg, ## Summary -*...Refer to Book or Videos for extra content.* \ No newline at end of file +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file diff --git a/interpreter/README.md b/interpreter/README.md index 444cb18..15d5d5f 100644 --- a/interpreter/README.md +++ b/interpreter/README.md @@ -17,11 +17,11 @@ Cover | Links ## Overview -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Terminology -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Interpreter UML Diagram @@ -29,7 +29,7 @@ Cover | Links ## Source Code -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Output @@ -43,7 +43,7 @@ python ./interpreter/interpreter_concept.py ## Example Use Case -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ![Abstract Syntax Tree Example](/img/interpreter_ast_roman_numeral.svg) @@ -171,4 +171,4 @@ Outputs ## Summary -*...Refer to Book or Videos for extra content.* \ No newline at end of file +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file diff --git a/iterator/README.md b/iterator/README.md index faa5d1a..3985ce4 100644 --- a/iterator/README.md +++ b/iterator/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Terminology -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Iterator UML Diagram @@ -28,7 +28,7 @@ Cover | Links ## Source Code -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Output @@ -42,7 +42,7 @@ This method has been invoked ## Example Use Case -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Example UML Diagram @@ -118,4 +118,4 @@ Also note that the list being printed at the end is automatically filled from th ## Summary -*...Refer to Book or Videos for extra content.* \ No newline at end of file +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file diff --git a/mediator/README.md b/mediator/README.md index e61a680..1c429e9 100644 --- a/mediator/README.md +++ b/mediator/README.md @@ -15,11 +15,11 @@ Cover | Links ## Overview -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Terminology -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Mediator UML Diagram @@ -27,7 +27,7 @@ Cover | Links ## Source Code -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Output @@ -39,7 +39,7 @@ COLLEAGUE2 <--> Here is the Colleague1 specific data you asked for ## Example Use Case -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Example UML Diagram @@ -62,4 +62,4 @@ Component1: <<< In <<< : data C ## Summary -*...Refer to Book or Videos for extra content.* \ No newline at end of file +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file diff --git a/memento/README.md b/memento/README.md index 56214e0..c8b1eee 100644 --- a/memento/README.md +++ b/memento/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Terminology -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Memento UML Diagram @@ -28,7 +28,7 @@ Cover | Links ## Source Code -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ### Output @@ -53,7 +53,7 @@ State #3 ## Example Use Case -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Example UML Diagram @@ -151,4 +151,4 @@ print(example.value) # now raises an AttributeError ## Summary -*...Refer to Book or Videos for extra content.* \ No newline at end of file +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file diff --git a/observer/README.md b/observer/README.md index 8dbbecf..572da33 100644 --- a/observer/README.md +++ b/observer/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Terminology -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Observer UML Diagram @@ -28,7 +28,7 @@ Cover | Links ## Source Code -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Output @@ -41,7 +41,7 @@ Observer id:2084220160272 received ('Second Notification', {'A': 1, 'B': 2, 'C': ## Example Use Case -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Example UML Diagram @@ -88,4 +88,4 @@ Note, if instantiating an empty **Set** then use `my_object = Set()` rather than ## Summary -*...Refer to Book or Videos for extra content.* \ No newline at end of file +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file diff --git a/prototype/README.md b/prototype/README.md index 069acd9..494327d 100644 --- a/prototype/README.md +++ b/prototype/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Terminology -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Prototype UML Diagram @@ -28,8 +28,8 @@ Cover | Links ## Source Code -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Summary -*...Refer to Book or Videos for extra content.* \ No newline at end of file +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file diff --git a/proxy/README.md b/proxy/README.md index 693ced3..84f6398 100644 --- a/proxy/README.md +++ b/proxy/README.md @@ -17,11 +17,11 @@ Cover | Links ## Overview -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Terminology -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Proxy UML Diagram @@ -40,7 +40,7 @@ pulling data from Proxy cache ## Example Use Case -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Example UML Diagram @@ -101,4 +101,4 @@ See the [Lion](/proxy/lion.py), [Serpent](/proxy/serpent.py) and [Leopard](/prox ## Summary -*...Refer to Book or Videos for extra content.* \ No newline at end of file +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file diff --git a/singleton/README.md b/singleton/README.md index 92164e1..d2c2bb4 100644 --- a/singleton/README.md +++ b/singleton/README.md @@ -16,7 +16,7 @@ Cover | Links | ## Overview -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Singleton UML Diagram @@ -32,11 +32,11 @@ id(OBJECT2) = 2164775087968 id(OBJECT3) = 2164775087968 ``` -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Example Use Case -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Example UML Diagram @@ -133,4 +133,4 @@ PS> python ## Summary -*...Refer to Book or Videos for extra content.* \ No newline at end of file +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file diff --git a/state/README.md b/state/README.md index 436853d..fe92635 100644 --- a/state/README.md +++ b/state/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Terminology -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## State UML Diagram @@ -28,7 +28,7 @@ Cover | Links ## Source Code -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ### Output @@ -43,7 +43,7 @@ I am ConcreteStateC ## State Example Use Case -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## State Example Use Case UML Diagram @@ -92,4 +92,4 @@ EXAMPLE() # function now gets called by default ## Summary -*...Refer to Book or Videos for extra content.* \ No newline at end of file +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file diff --git a/strategy/README.md b/strategy/README.md index a0dcbb4..2cfec06 100644 --- a/strategy/README.md +++ b/strategy/README.md @@ -15,11 +15,11 @@ Cover | Links ## Overview -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Terminology -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Strategy UML Diagram @@ -27,7 +27,7 @@ Cover | Links ## Source Code -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Output @@ -40,7 +40,7 @@ I am ConcreteStrategyC ## Strategy Example Use Case -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Strategy Example Use Case UML Diagram @@ -57,4 +57,4 @@ I am Crawling. New position = [3.5, 0] ## Summary -*...Refer to Book or Videos for extra content.* \ No newline at end of file +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file diff --git a/template/README.md b/template/README.md index 8b3e0b3..9c5072f 100644 --- a/template/README.md +++ b/template/README.md @@ -15,11 +15,11 @@ Cover | Links ## Overview -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Terminology -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Template Method UML Diagram @@ -27,7 +27,7 @@ Cover | Links ## Source Code -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Output @@ -42,7 +42,7 @@ Class_B : Step Three. (overridden) ## Template Method Example Use Case -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Template Method Use Case UML Diagram @@ -76,4 +76,4 @@ footer : -- Page 1 -- ## Summary -*...Refer to Book or Videos for extra content.* \ No newline at end of file +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file diff --git a/visitor/README.md b/visitor/README.md index bb6e27f..6f6ed37 100644 --- a/visitor/README.md +++ b/visitor/README.md @@ -17,11 +17,11 @@ Cover | Links ## Overview -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Terminology -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Visitor UML Diagram @@ -29,7 +29,7 @@ Cover | Links ## Source Code -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Output @@ -44,7 +44,7 @@ A ## Visitor Example Use Case -*...Refer to Book or Videos for extra content.* +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ ## Visitor Example UML Diagram @@ -141,4 +141,4 @@ jklmn 1011 ## Summary -*...Refer to Book or Videos for extra content.* \ No newline at end of file +_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file From c1e4ebbaea96a0332ae997e60f5d85d5b736e7c9 Mon Sep 17 00:00:00 2001 From: seanwasere youtube Date: Tue, 19 Oct 2021 12:45:21 +0100 Subject: [PATCH 05/18] Update FUNDING.yml --- .github/FUNDING.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 4aef64b..a3e9e77 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -9,4 +9,4 @@ community_bridge: # Replace with a single Community Bridge project-name e.g., cl liberapay: # Replace with a single Liberapay username issuehunt: # Replace with a single IssueHunt username otechie: # Replace with a single Otechie username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] +custom: ['https://sean-bradley.medium.com/membership']# Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] From 16ce9fda5c8b69c0a10a55fed043deb53bacc10b Mon Sep 17 00:00:00 2001 From: Sean Bradley Date: Mon, 17 Jan 2022 09:36:21 +0000 Subject: [PATCH 06/18] updates --- coding-conventions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coding-conventions.md b/coding-conventions.md index 410dee4..5c8de04 100644 --- a/coding-conventions.md +++ b/coding-conventions.md @@ -21,7 +21,7 @@ You can also enter Python code directly into the Python Interactive Console by t ``` python PS> python -Python 3.9.1 (tags/v3.9.1:1e5d33e, Dec 7 2020, 17:08:21) [MSC ... +Python 3.10.1 (tags/v3.10.1:2cd268a, Dec 6 2021, 19:10:37) [MSC ... Type "help", "copyright", "credits" or "license" for more information. >>> ``` From a6afc3d54451b211e3faa2a4c2871a71fbbba9b0 Mon Sep 17 00:00:00 2001 From: seanwasere youtube Date: Thu, 3 Feb 2022 16:25:12 +0000 Subject: [PATCH 07/18] Update LICENSE --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 75037ef..dc50b29 100644 --- a/LICENSE +++ b/LICENSE @@ -6,5 +6,5 @@ Book : https://www.amazon.com/dp/B08XLJ8Z2J : ASIN B08XLJ8Z2J EBook : https://www.amazon.com/dp/B08Z282SBC : ASIN B08Z282SBC Videos : https://www.youtube.com/playlist?list=PLKWUX7aMnlEJzRvCXnwFEdk_WJDNjMDOo -Copyright (c) 2019-2021, Sean Bradley +Copyright (c) 2019-2022, Sean Bradley All rights reserved. From 48cd28f7f35858216b5d5cb829a91dcefa398c67 Mon Sep 17 00:00:00 2001 From: Sean Bradley Date: Mon, 18 Apr 2022 21:25:13 +0100 Subject: [PATCH 08/18] updates --- abstract_factory/README.md | 8 ++++---- adapter/README.md | 10 +++++----- bridge/README.md | 10 +++++----- builder/README.md | 10 +++++----- chain_of_responsibility/README.md | 10 +++++----- command/README.md | 10 +++++----- composite/README.md | 10 +++++----- decorator/README.md | 8 ++++---- facade/README.md | 6 +++--- factory/README.md | 10 +++++----- flyweight/README.md | 10 +++++----- interpreter/README.md | 10 +++++----- iterator/README.md | 10 +++++----- mediator/README.md | 10 +++++----- memento/README.md | 10 +++++----- observer/README.md | 10 +++++----- prototype/README.md | 8 ++++---- proxy/README.md | 8 ++++---- singleton/README.md | 8 ++++---- state/README.md | 10 +++++----- strategy/README.md | 10 +++++----- template/README.md | 10 +++++----- visitor/README.md | 10 +++++----- 23 files changed, 108 insertions(+), 108 deletions(-) diff --git a/abstract_factory/README.md b/abstract_factory/README.md index 1dec563..19f2dd5 100644 --- a/abstract_factory/README.md +++ b/abstract_factory/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Terminology -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Abstract Factory UML Diagram @@ -36,7 +36,7 @@ python ./abstract_factory/abstract_factory_concept.py ## Abstract Factory Example Use Case -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Abstract Factory Example UML Diagram @@ -117,4 +117,4 @@ Python Errors and Exceptions : [https://docs.python.org/3/tutorial/errors.html]( ## Summary -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file diff --git a/adapter/README.md b/adapter/README.md index 2a8800c..d977bd2 100644 --- a/adapter/README.md +++ b/adapter/README.md @@ -17,11 +17,11 @@ Cover | Links ## Overview -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Terminology -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Adapter UML Diagram @@ -29,7 +29,7 @@ _...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or ## Source Code -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Output @@ -43,7 +43,7 @@ method B ## Example Use Case -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Example UML Diagram @@ -143,4 +143,4 @@ When executing [/adapter/cube_a.py](/adapter/cube_a.py) you will notice that the ## Summary -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file diff --git a/bridge/README.md b/bridge/README.md index fef2a84..e47e5ab 100644 --- a/bridge/README.md +++ b/bridge/README.md @@ -17,11 +17,11 @@ Cover | Links ## Overview -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Terminology -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Bridge UML Diagram @@ -29,7 +29,7 @@ _...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or ## Source Code -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Output @@ -43,7 +43,7 @@ c ## Example Use Case -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Example UML Diagram @@ -121,4 +121,4 @@ PS> python ## Summary -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file diff --git a/builder/README.md b/builder/README.md index 719cdbe..fb2f7bf 100644 --- a/builder/README.md +++ b/builder/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Terminology -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Builder UML Diagram @@ -28,7 +28,7 @@ _...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or ## Source Code -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Output @@ -39,7 +39,7 @@ python ./builder/builder_concept.py ## Example Use Case -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Example UML Diagram @@ -113,4 +113,4 @@ This line, creates a list at runtime including the strings 'SmallChair', 'Medium ## Summary -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file diff --git a/chain_of_responsibility/README.md b/chain_of_responsibility/README.md index 2e90d00..3fa4a4b 100644 --- a/chain_of_responsibility/README.md +++ b/chain_of_responsibility/README.md @@ -17,11 +17,11 @@ Cover | Links ## Overview -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Terminology -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Chain of Responsibility UML Diagram @@ -29,7 +29,7 @@ _...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or ## Source Code -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Output @@ -47,7 +47,7 @@ Finished result = -1.5 ## Example Use Case -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Example UML Diagram @@ -111,4 +111,4 @@ See PEP-3111 : [https://www.python.org/dev/peps/pep-3111/](https://www.python.or ## Summary -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file diff --git a/command/README.md b/command/README.md index 6bce730..5920c95 100644 --- a/command/README.md +++ b/command/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Terminology -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Command Pattern UML Diagram @@ -28,7 +28,7 @@ _...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or ## Source Code -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Output @@ -42,7 +42,7 @@ Executing Command 2 ## Example Use Case -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Example UML Diagram @@ -78,4 +78,4 @@ It is just a useful construct that you will see developers use as a recommendati ## Summary -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file diff --git a/composite/README.md b/composite/README.md index d5eb2f2..37d5e84 100644 --- a/composite/README.md +++ b/composite/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Terminology -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Composite UML Diagram @@ -28,7 +28,7 @@ _...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or ## Source Code -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Output @@ -48,7 +48,7 @@ COMPOSITE_2 id:2050574298128 ## Composite Example Use Case -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Composite Example UML Diagram @@ -124,4 +124,4 @@ Visit [https://docs.python.org/3/reference/expressions.html#conditional-expressi ## Summary -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file diff --git a/decorator/README.md b/decorator/README.md index fa6c65a..6d74631 100644 --- a/decorator/README.md +++ b/decorator/README.md @@ -17,11 +17,11 @@ Cover | Links ## Overview -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Terminology -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Builder UML Diagram @@ -37,7 +37,7 @@ Decorator Method(Component Method) ## Example Use Case -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Example UML Diagram @@ -133,4 +133,4 @@ The `__str__` dunder was also overridden in the [/prototype/prototype_concept.py ## Summary -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file diff --git a/facade/README.md b/facade/README.md index 9eaf5bb..dfa62ef 100644 --- a/facade/README.md +++ b/facade/README.md @@ -17,7 +17,7 @@ Cover | Links ## Overview -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Facade UML Diagram @@ -37,7 +37,7 @@ B ## Example Use Case -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Example UML Diagram @@ -170,4 +170,4 @@ Found 2 errors in 2 files (checked 1 source file) ## Summary -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file diff --git a/factory/README.md b/factory/README.md index 32b2924..d1dd8fc 100644 --- a/factory/README.md +++ b/factory/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Terminology -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Factory UML Diagram @@ -28,7 +28,7 @@ _...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or ## Source Code -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Output @@ -39,7 +39,7 @@ ConcreteProductB ## Example Use Case -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Factory Example UML Diagram @@ -93,4 +93,4 @@ See PEP 3119 : [https://www.python.org/dev/peps/pep-3119/](https://www.python.or ## Summary -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file diff --git a/flyweight/README.md b/flyweight/README.md index 1791752..170c137 100644 --- a/flyweight/README.md +++ b/flyweight/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Terminology -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Flyweight UML Diagram @@ -28,7 +28,7 @@ _...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or ## Source Code -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Output @@ -41,7 +41,7 @@ FlyweightFactory has 5 flyweights ## Example Use Case -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Example UML Diagram @@ -86,4 +86,4 @@ eg, ## Summary -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file diff --git a/interpreter/README.md b/interpreter/README.md index 15d5d5f..bac547f 100644 --- a/interpreter/README.md +++ b/interpreter/README.md @@ -17,11 +17,11 @@ Cover | Links ## Overview -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Terminology -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Interpreter UML Diagram @@ -29,7 +29,7 @@ _...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or ## Source Code -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Output @@ -43,7 +43,7 @@ python ./interpreter/interpreter_concept.py ## Example Use Case -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ![Abstract Syntax Tree Example](/img/interpreter_ast_roman_numeral.svg) @@ -171,4 +171,4 @@ Outputs ## Summary -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file diff --git a/iterator/README.md b/iterator/README.md index 3985ce4..be63322 100644 --- a/iterator/README.md +++ b/iterator/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Terminology -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Iterator UML Diagram @@ -28,7 +28,7 @@ _...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or ## Source Code -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Output @@ -42,7 +42,7 @@ This method has been invoked ## Example Use Case -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Example UML Diagram @@ -118,4 +118,4 @@ Also note that the list being printed at the end is automatically filled from th ## Summary -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file diff --git a/mediator/README.md b/mediator/README.md index 1c429e9..3f7b3a0 100644 --- a/mediator/README.md +++ b/mediator/README.md @@ -15,11 +15,11 @@ Cover | Links ## Overview -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Terminology -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Mediator UML Diagram @@ -27,7 +27,7 @@ _...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or ## Source Code -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Output @@ -39,7 +39,7 @@ COLLEAGUE2 <--> Here is the Colleague1 specific data you asked for ## Example Use Case -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Example UML Diagram @@ -62,4 +62,4 @@ Component1: <<< In <<< : data C ## Summary -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file diff --git a/memento/README.md b/memento/README.md index c8b1eee..922eba6 100644 --- a/memento/README.md +++ b/memento/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Terminology -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Memento UML Diagram @@ -28,7 +28,7 @@ _...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or ## Source Code -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ### Output @@ -53,7 +53,7 @@ State #3 ## Example Use Case -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Example UML Diagram @@ -151,4 +151,4 @@ print(example.value) # now raises an AttributeError ## Summary -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file diff --git a/observer/README.md b/observer/README.md index 572da33..2744223 100644 --- a/observer/README.md +++ b/observer/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Terminology -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Observer UML Diagram @@ -28,7 +28,7 @@ _...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or ## Source Code -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Output @@ -41,7 +41,7 @@ Observer id:2084220160272 received ('Second Notification', {'A': 1, 'B': 2, 'C': ## Example Use Case -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Example UML Diagram @@ -88,4 +88,4 @@ Note, if instantiating an empty **Set** then use `my_object = Set()` rather than ## Summary -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file diff --git a/prototype/README.md b/prototype/README.md index 494327d..4b49386 100644 --- a/prototype/README.md +++ b/prototype/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Terminology -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Prototype UML Diagram @@ -28,8 +28,8 @@ _...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or ## Source Code -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Summary -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file diff --git a/proxy/README.md b/proxy/README.md index 84f6398..aa62785 100644 --- a/proxy/README.md +++ b/proxy/README.md @@ -17,11 +17,11 @@ Cover | Links ## Overview -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Terminology -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Proxy UML Diagram @@ -40,7 +40,7 @@ pulling data from Proxy cache ## Example Use Case -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Example UML Diagram @@ -101,4 +101,4 @@ See the [Lion](/proxy/lion.py), [Serpent](/proxy/serpent.py) and [Leopard](/prox ## Summary -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file diff --git a/singleton/README.md b/singleton/README.md index d2c2bb4..c59e0b8 100644 --- a/singleton/README.md +++ b/singleton/README.md @@ -16,7 +16,7 @@ Cover | Links | ## Overview -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Singleton UML Diagram @@ -32,11 +32,11 @@ id(OBJECT2) = 2164775087968 id(OBJECT3) = 2164775087968 ``` -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Example Use Case -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Example UML Diagram @@ -133,4 +133,4 @@ PS> python ## Summary -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file diff --git a/state/README.md b/state/README.md index fe92635..90dd505 100644 --- a/state/README.md +++ b/state/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Terminology -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## State UML Diagram @@ -28,7 +28,7 @@ _...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or ## Source Code -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ### Output @@ -43,7 +43,7 @@ I am ConcreteStateC ## State Example Use Case -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## State Example Use Case UML Diagram @@ -92,4 +92,4 @@ EXAMPLE() # function now gets called by default ## Summary -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file diff --git a/strategy/README.md b/strategy/README.md index 2cfec06..41d0205 100644 --- a/strategy/README.md +++ b/strategy/README.md @@ -15,11 +15,11 @@ Cover | Links ## Overview -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Terminology -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Strategy UML Diagram @@ -27,7 +27,7 @@ _...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or ## Source Code -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Output @@ -40,7 +40,7 @@ I am ConcreteStrategyC ## Strategy Example Use Case -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Strategy Example Use Case UML Diagram @@ -57,4 +57,4 @@ I am Crawling. New position = [3.5, 0] ## Summary -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file diff --git a/template/README.md b/template/README.md index 9c5072f..dc1736c 100644 --- a/template/README.md +++ b/template/README.md @@ -15,11 +15,11 @@ Cover | Links ## Overview -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Terminology -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Template Method UML Diagram @@ -27,7 +27,7 @@ _...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or ## Source Code -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Output @@ -42,7 +42,7 @@ Class_B : Step Three. (overridden) ## Template Method Example Use Case -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Template Method Use Case UML Diagram @@ -76,4 +76,4 @@ footer : -- Page 1 -- ## Summary -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file diff --git a/visitor/README.md b/visitor/README.md index 6f6ed37..0c7cf82 100644 --- a/visitor/README.md +++ b/visitor/README.md @@ -17,11 +17,11 @@ Cover | Links ## Overview -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Terminology -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Visitor UML Diagram @@ -29,7 +29,7 @@ _...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or ## Source Code -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Output @@ -44,7 +44,7 @@ A ## Visitor Example Use Case -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Visitor Example UML Diagram @@ -141,4 +141,4 @@ jklmn 1011 ## Summary -_...Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), [Videos](#videos) or [Medium Membership](https://sean-bradley.medium.com/membership) for extra content._ \ No newline at end of file +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file From d205f2296ef1730a9f1aa9413358d51b4c637fe0 Mon Sep 17 00:00:00 2001 From: Sean Bradley Date: Mon, 18 Apr 2022 21:32:45 +0100 Subject: [PATCH 09/18] updates --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 207dde5..221d51f 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ All the code examples in the book can be found in these pages. > **Note** - If you just want to read my design pattern articles and you don't need to access the videos, then you can read them via [Medium Membership](https://sean-bradley.medium.com/membership) + If you just want to read my design pattern articles, and you don't need to access the videos, then you can read them via [Medium Membership](https://sean-bradley.medium.com/membership) From 1423ad5065d7b528e1b67e83dbfc6003930e7297 Mon Sep 17 00:00:00 2001 From: Sean Bradley Date: Mon, 18 Apr 2022 21:38:58 +0100 Subject: [PATCH 10/18] updates --- README.md | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 221d51f..a918c80 100644 --- a/README.md +++ b/README.md @@ -35,11 +35,23 @@ There are 4 possible ways to access the video content in this course, All the code examples in the book can be found in these pages. - -> **Note** - If you just want to read my design pattern articles, and you don't need to access the videos, then you can read them via [Medium Membership](https://sean-bradley.medium.com/membership) +--- +**TIP** +> [Design Patterns In python](https://www.amazon.com/dp/B08XLJ8Z2J) **(Paperback/Kindle)** includes Video Access Codes to view videos for FREE from the official documentation website at [https://sbcode.net/python/](https://sbcode.net/python/) + +--- + +**TIP** + +> Get **Udemy Discount Coupons** at [https://sbcode.net/coupons](https://sbcode.net/coupons) + +--- + +**Note** + +> If you just want to read my design pattern articles, and you don't need to access the videos, then you can read them via [Medium Membership](https://sean-bradley.medium.com/membership) ## Overview @@ -47,7 +59,7 @@ A Design Pattern is a description or template that can be repeatedly applied to A familiarity of Design Patterns will be very useful when planning, discussing, managing and documenting your applications from now on and into the future. -Also, throughout the book, as each design pattern is discussed and demonstrated using example code, I also introduce new python coding concepts with each new design pattern. So that as you progress through the book and try out the examples, you will also get experience and familiarity with some of the finer details of programming with python. +Also, throughout the book, as each design pattern is discussed and demonstrated using example code, I also introduce new python coding concepts with each new design pattern. So that as you progress through the book and try out the examples, you will also get experience and familiarity with some finer details of programming with python. So, in this book, you will learn about these 23 Design Patterns, @@ -80,8 +92,8 @@ So, in this book, you will learn about these 23 Design Patterns, ## Pattern Types -_...Refer to Book or Videos for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ ## Class Scope and Object Scope Patterns -_...Refer to Book or Videos for extra content._ +_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ From b8c94e1fa62445bde4d5a453ae111fbd17dcb962 Mon Sep 17 00:00:00 2001 From: Sean Bradley Date: Wed, 25 May 2022 09:06:32 +0100 Subject: [PATCH 11/18] updates --- LICENSE | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/LICENSE b/LICENSE index dc50b29..e676d93 100644 --- a/LICENSE +++ b/LICENSE @@ -1,10 +1,12 @@ -All code, images, text, downloads and videos from +All code, images, text, videos and downloads from Repository : https://github.com/Sean-Bradley/Design-Patterns-In-Python Website : https://sbcode.net/python Book : https://www.amazon.com/dp/B08XLJ8Z2J : ASIN B08XLJ8Z2J EBook : https://www.amazon.com/dp/B08Z282SBC : ASIN B08Z282SBC -Videos : https://www.youtube.com/playlist?list=PLKWUX7aMnlEJzRvCXnwFEdk_WJDNjMDOo +YouTube : https://www.youtube.com/playlist?list=PLKWUX7aMnlEJzRvCXnwFEdk_WJDNjMDOo +Udemy : https://www.udemy.com/course/design-patterns-in-python/?referralCode=7493DBBBF97FF2B0D24D +Skillshare : https://skl.sh/34SM2Xg Copyright (c) 2019-2022, Sean Bradley -All rights reserved. +All rights reserved. \ No newline at end of file From ad475792f1e7c61bb26b0648e6310aa022b334d0 Mon Sep 17 00:00:00 2001 From: Sean Bradley Date: Wed, 25 May 2022 09:12:29 +0100 Subject: [PATCH 12/18] updates --- img/udemy_btn_sm.gif | Bin 1082 -> 3254 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/img/udemy_btn_sm.gif b/img/udemy_btn_sm.gif index 03abf370f5113acd3f485b5096895ee160edae06..bab7b914ee901b7f268b990859e5f1dfb3b2af93 100644 GIT binary patch literal 3254 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 literal 1082 zcmV-A1jYMDNk%w1VR`@}0K@|$p)IXNUICCbUl<~Tp{kd*ej zz5oFLQ&dy?-rwULCE(xSzrVj_W@YK==>GBYqN1X5baV3Z@|2a7xw*Qtw6uVLfZzZL z3=It74;azW(*OVeA^8LV00000EC2ui0D1r-000I5peK%GX`X1Ru59bR<0sE_ZQppV z?|kq7qMvM%KqMx@q;ko`1%-%>l+dhNuTGCJ5$JRR2qbn)Rz7`EZ@|$gyWhGqPqFcS z**JlMpn&_Uayk=fUK?RJ1X2MBe~n3jISF-khByk8hmM*%kT(rqb{!jxH;HN;eVeK` zoi&4#b^)n13SE@5Zx<02TB|m#G^U|zVl~2rq&pA;1ram?5zGfS0}BfnzQ4VZu#{9b zwYJDT8P)>=GXe$H*ftCt91z(xz#o$0l*z%}qWU=*@CH090IyxT5AWhVL-&JW6JYm3 zsgVV41HOLb0uF>H@52KP%or2^pzyU+21J+!a{z;B8X`n62tnt{ zEH?xYk|-(@jWqa1W#k|*-GG80Aduu>4FE}b6i8ZIz~Mqvt_G-5HINV<01q0hF_^)C zYe!bwXf&`DfZv91H0a!MkZ);I8R|G%FhH^y1FIYkNU#bZ!iA>*BzQm!fG}mt93ngj zYv6&$uz%qqlH!1X193{9Ax&_)5MCVsnQlx>A)o{q2@llHEJK2U1r#Q8DB!_@26zPy z7%%)G0z9v~Da46OOF@GMd~el|RP>XryEG;!a5y9OxpX5FS9s1A-boGs3JjS4n-|HZ z!p}djT0p=7jS(zhfCbad0ZSKc%z$107mFr!I2!qSVM`jeSji5o2~dkZSh$(O@TWcQ^^eBVD!OIcbQhl1`^5u82~a3VATR^ z0c2GL5L`f5V*gpC!2upnP=N(ho_D2+1rX>PVxa-G1Dbd_IOdH>S#(D+G+;o|RPez! zjR0*;#T7}|RKS&43lv~dKqnT4B}oIya2!b-f|9Y7ej11A!uA7P2gFj-}{$+&}12jan zK!5=R50J;w0TA3KLA^6r-~pf(3b1du0zW{o1PITto0Q@{$`1mGFo?%9tSQm~0SV5N zgaD9z*{}`-TvQi>6nUb+$r)>$1O!wynnOJ@=tWep?y5|N1P~nHSr0JFFjOo-+AOrU zGkW5HrN7ou^UxaiEJFjPbx~T%ObhMw4B|C_Y1Knt&Gpyxz##V6WS4FB3LyXhJ0UQ? Ak^lez From ac8bee4aa08cad20974ab0fdf247b92444c4a71c Mon Sep 17 00:00:00 2001 From: SBCODE Date: Wed, 25 May 2022 09:48:29 +0100 Subject: [PATCH 13/18] Update FUNDING.yml --- .github/FUNDING.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index a3e9e77..e546f77 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -3,7 +3,7 @@ github: [Sean-Bradley]# Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] patreon: seanwasere open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username +ko_fi: sean_bradley tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry liberapay: # Replace with a single Liberapay username From ab5401e782f67a461c2194e3832083ec218e5250 Mon Sep 17 00:00:00 2001 From: Sean Bradley Date: Tue, 16 Aug 2022 09:33:03 +0100 Subject: [PATCH 14/18] updates --- factory/client.py | 2 +- factory/factory_concept.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/factory/client.py b/factory/client.py index 0a93224..c4f9bc5 100644 --- a/factory/client.py +++ b/factory/client.py @@ -3,5 +3,5 @@ from chair_factory import ChairFactory # The Client -CHAIR = ChairFactory().get_chair("SmallChair") +CHAIR = ChairFactory.get_chair("SmallChair") print(CHAIR.get_dimensions()) diff --git a/factory/factory_concept.py b/factory/factory_concept.py index 0c17e2a..7adab51 100644 --- a/factory/factory_concept.py +++ b/factory/factory_concept.py @@ -58,5 +58,5 @@ def create_object(some_property): # The Client -PRODUCT = Creator().create_object('b') +PRODUCT = Creator.create_object('b') print(PRODUCT.name) From cf5f268504d07ce711244dcc6c15fc734b1a4754 Mon Sep 17 00:00:00 2001 From: Sean Bradley Date: Tue, 16 Aug 2022 09:59:19 +0100 Subject: [PATCH 15/18] updates --- abstract_factory/README.md | 8 ++++---- abstract_factory/abstract_factory_concept.py | 4 ++-- abstract_factory/furniture_factory.py | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/abstract_factory/README.md b/abstract_factory/README.md index 19f2dd5..69d18d8 100644 --- a/abstract_factory/README.md +++ b/abstract_factory/README.md @@ -60,7 +60,7 @@ Your Python code may produce errors. It happens to everybody. It is hard to fore Use the `Try`, `Except` and optional `finally` keywords to manage error handling. -In the example code, if no chair or table is returned, an `Exception` error is raised and it includes a text string that can be read and written to the console. +In the example code, if no chair or table is returned, an `Exception` error is raised, and it includes a text string that can be read and written to the console. Within your code you can use the `raise` keyword to trigger Python built in exceptions or even create your own. @@ -69,9 +69,9 @@ def get_furniture(furniture): "Static get_factory method" try: if furniture in ['SmallChair', 'MediumChair', 'BigChair']: - return ChairFactory().get_chair(furniture) + return ChairFactory.get_chair(furniture) if furniture in ['SmallTable', 'MediumTable', 'BigTable']: - return TableFactory().get_table(furniture) + return TableFactory.get_table(furniture) raise Exception('No Factory Found') except Exception as _e: print(_e) @@ -97,7 +97,7 @@ The `try/except` allows the program to continue running, as can be verified by t Alternatively, if your code didn't include the `try/except` and optional `finally` statements, the Python interpreter would return the error `NameError: name 'my_var' is not defined` and the program will crash at that line. -Also note how the default Python inbuilt error starts with `NameError` . You can handle this specific error explicitly using an extra `except` keyword. +Also note how the default Python inbuilt error starts with `NameError`. You can handle this specific error explicitly using an extra `except` keyword. ``` python try: diff --git a/abstract_factory/abstract_factory_concept.py b/abstract_factory/abstract_factory_concept.py index 2cdde1b..7b6a105 100644 --- a/abstract_factory/abstract_factory_concept.py +++ b/abstract_factory/abstract_factory_concept.py @@ -22,9 +22,9 @@ def create_object(factory): "Static get_factory method" try: if factory in ['aa', 'ab', 'ac']: - return FactoryA().create_object(factory[1]) + return FactoryA.create_object(factory[1]) if factory in ['ba', 'bb', 'bc']: - return FactoryB().create_object(factory[1]) + return FactoryB.create_object(factory[1]) raise Exception('No Factory Found') except Exception as _e: print(_e) diff --git a/abstract_factory/furniture_factory.py b/abstract_factory/furniture_factory.py index efd74f8..f52fdc9 100644 --- a/abstract_factory/furniture_factory.py +++ b/abstract_factory/furniture_factory.py @@ -13,9 +13,9 @@ def get_furniture(furniture): "Static get_factory method" try: if furniture in ['SmallChair', 'MediumChair', 'BigChair']: - return ChairFactory().get_chair(furniture) + return ChairFactory.get_chair(furniture) if furniture in ['SmallTable', 'MediumTable', 'BigTable']: - return TableFactory().get_table(furniture) + return TableFactory.get_table(furniture) raise Exception('No Factory Found') except Exception as _e: print(_e) From 27ae28142016094bd8b9b11b81c8836438ad0345 Mon Sep 17 00:00:00 2001 From: Sean Bradley Date: Wed, 12 Oct 2022 20:50:02 +0100 Subject: [PATCH 16/18] updates --- adapter/adapter_concept.py | 1 + bridge/bridge_concept.py | 1 + builder/builder_concept.py | 1 + command/command_concept.py | 1 + composite/composite_concept.py | 1 + decorator/decorator_concept.py | 1 + factory/factory_concept.py | 1 + interpreter/interpreter_concept.py | 3 ++- iterator/iterator_concept.py | 1 + observer/observer_concept.py | 1 + prototype/prototype_concept.py | 1 + proxy/proxy_concept.py | 9 +++++++-- singleton/singleton_concept.py | 4 +++- visitor/client.py | 1 + visitor/visitor_concept.py | 1 + 15 files changed, 24 insertions(+), 4 deletions(-) diff --git a/adapter/adapter_concept.py b/adapter/adapter_concept.py index 420b295..ce43edf 100644 --- a/adapter/adapter_concept.py +++ b/adapter/adapter_concept.py @@ -1,4 +1,5 @@ # pylint: disable=too-few-public-methods +# pylint: disable=arguments-differ "Adapter Concept Sample Code" from abc import ABCMeta, abstractmethod diff --git a/bridge/bridge_concept.py b/bridge/bridge_concept.py index 2fea67d..3ba44b8 100644 --- a/bridge/bridge_concept.py +++ b/bridge/bridge_concept.py @@ -1,4 +1,5 @@ # pylint: disable=too-few-public-methods +# pylint: disable=arguments-differ "Bridge Pattern Concept Sample Code" from abc import ABCMeta, abstractmethod diff --git a/builder/builder_concept.py b/builder/builder_concept.py index cf674c8..676f3ee 100644 --- a/builder/builder_concept.py +++ b/builder/builder_concept.py @@ -1,4 +1,5 @@ # pylint: disable=too-few-public-methods +# pylint: disable=arguments-differ "Builder Concept Sample Code" from abc import ABCMeta, abstractmethod diff --git a/command/command_concept.py b/command/command_concept.py index 07e0fee..e16231b 100644 --- a/command/command_concept.py +++ b/command/command_concept.py @@ -1,3 +1,4 @@ +# pylint: disable=arguments-differ "The Command Pattern Concept" from abc import ABCMeta, abstractmethod diff --git a/composite/composite_concept.py b/composite/composite_concept.py index 7d16268..b61280e 100644 --- a/composite/composite_concept.py +++ b/composite/composite_concept.py @@ -1,3 +1,4 @@ +# pylint: disable=arguments-differ "The Composite pattern concept" from abc import ABCMeta, abstractmethod diff --git a/decorator/decorator_concept.py b/decorator/decorator_concept.py index 7bb2708..617add5 100644 --- a/decorator/decorator_concept.py +++ b/decorator/decorator_concept.py @@ -1,4 +1,5 @@ # pylint: disable=too-few-public-methods +# pylint: disable=arguments-differ "Decorator Concept Sample Code" from abc import ABCMeta, abstractmethod diff --git a/factory/factory_concept.py b/factory/factory_concept.py index 7adab51..6dbb529 100644 --- a/factory/factory_concept.py +++ b/factory/factory_concept.py @@ -1,4 +1,5 @@ # pylint: disable=too-few-public-methods +# pylint: disable=arguments-differ "The Factory Concept" from abc import ABCMeta, abstractmethod diff --git a/interpreter/interpreter_concept.py b/interpreter/interpreter_concept.py index 7b2bc8b..8439db5 100644 --- a/interpreter/interpreter_concept.py +++ b/interpreter/interpreter_concept.py @@ -1,4 +1,5 @@ # pylint: disable=too-few-public-methods +# pylint: disable=arguments-differ "The Interpreter Pattern Concept" @@ -7,7 +8,7 @@ class AbstractExpression(): @staticmethod def interpret(): """ - The `interpret` method gets called recursively for each + The `interpret` method gets called recursively for each AbstractExpression """ diff --git a/iterator/iterator_concept.py b/iterator/iterator_concept.py index 47cb1f3..59ff128 100644 --- a/iterator/iterator_concept.py +++ b/iterator/iterator_concept.py @@ -1,4 +1,5 @@ # pylint: disable=too-few-public-methods +# pylint: disable=arguments-differ "The Iterator Pattern Concept" from abc import ABCMeta, abstractmethod diff --git a/observer/observer_concept.py b/observer/observer_concept.py index 5720694..1c29aa3 100644 --- a/observer/observer_concept.py +++ b/observer/observer_concept.py @@ -1,4 +1,5 @@ # pylint: disable=too-few-public-methods +# pylint: disable=arguments-differ "Observer Design Pattern Concept" from abc import ABCMeta, abstractmethod diff --git a/prototype/prototype_concept.py b/prototype/prototype_concept.py index a1c0ef8..3c82b1b 100644 --- a/prototype/prototype_concept.py +++ b/prototype/prototype_concept.py @@ -1,4 +1,5 @@ # pylint: disable=too-few-public-methods +# pylint: disable=arguments-differ "Prototype Concept Sample Code" from abc import ABCMeta, abstractmethod diff --git a/proxy/proxy_concept.py b/proxy/proxy_concept.py index e7ff9ff..bdbe2f9 100644 --- a/proxy/proxy_concept.py +++ b/proxy/proxy_concept.py @@ -1,8 +1,10 @@ # pylint: disable=too-few-public-methods +# pylint: disable=arguments-differ "A Proxy Concept Example" from abc import ABCMeta, abstractmethod + class ISubject(metaclass=ABCMeta): "An interface implemented by both the Proxy and Real Subject" @staticmethod @@ -10,6 +12,7 @@ class ISubject(metaclass=ABCMeta): def request(): "A method to implement" + class RealSubject(ISubject): "The actual real object that the proxy is representing" @@ -20,6 +23,7 @@ def __init__(self): def request(self): return self.enormous_data + class Proxy(ISubject): """ The proxy. In this case the proxy will act as a cache for @@ -36,13 +40,14 @@ def request(self): Using the proxy as a cache, and loading data into it only if it is needed """ - if self.enormous_data == []: + if not self.enormous_data: print("pulling data from RealSubject") self.enormous_data = self.real_subject.request() return self.enormous_data print("pulling data from Proxy cache") return self.enormous_data + # The Client SUBJECT = Proxy() # use SUBJECT @@ -50,4 +55,4 @@ def request(self): # load the enormous amounts of data because now we want to show it. print(SUBJECT.request()) # show the data again, but this time it retrieves it from the local cache -print(SUBJECT.request()) \ No newline at end of file +print(SUBJECT.request()) diff --git a/singleton/singleton_concept.py b/singleton/singleton_concept.py index 0942a30..1d9d869 100644 --- a/singleton/singleton_concept.py +++ b/singleton/singleton_concept.py @@ -2,6 +2,7 @@ "Singleton Concept Sample Code" import copy + class Singleton(): "The Singleton Class" value = [] @@ -21,6 +22,7 @@ def class_method(cls): "Use @classmethod to access class level variables" print(cls.value) + # The Client # All uses of singleton point to the same memory address (id) print(f"id(Singleton)\t= {id(Singleton)}") @@ -32,4 +34,4 @@ def class_method(cls): print(f"id(OBJECT2)\t= {id(OBJECT2)}") OBJECT3 = Singleton() -print(f"id(OBJECT1)\t= {id(OBJECT3)}") \ No newline at end of file +print(f"id(OBJECT1)\t= {id(OBJECT3)}") diff --git a/visitor/client.py b/visitor/client.py index 5fe14d0..293cd4a 100644 --- a/visitor/client.py +++ b/visitor/client.py @@ -1,4 +1,5 @@ # pylint: disable=too-few-public-methods +# pylint: disable=arguments-differ "The Visitor Pattern Use Case Example" from abc import ABCMeta, abstractmethod diff --git a/visitor/visitor_concept.py b/visitor/visitor_concept.py index 2fdf969..f3c33fb 100644 --- a/visitor/visitor_concept.py +++ b/visitor/visitor_concept.py @@ -1,4 +1,5 @@ # pylint: disable=too-few-public-methods +# pylint: disable=arguments-differ "The Visitor Pattern Concept" from abc import ABCMeta, abstractmethod From 304522712fd602a5cd827ad7c2af735203c59f0b Mon Sep 17 00:00:00 2001 From: Sean Bradley Date: Thu, 29 Dec 2022 07:53:10 +0000 Subject: [PATCH 17/18] updates --- flyweight/flyweight.py | 2 +- flyweight/flyweight_concept.py | 6 +++--- flyweight/flyweight_factory.py | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/flyweight/flyweight.py b/flyweight/flyweight.py index 63667e3..e7e33de 100644 --- a/flyweight/flyweight.py +++ b/flyweight/flyweight.py @@ -4,5 +4,5 @@ class Flyweight(): # pylint: disable=too-few-public-methods "The Flyweight that contains an intrinsic value called code" - def __init__(self, code: int) -> None: + def __init__(self, code: str) -> None: self.code = code diff --git a/flyweight/flyweight_concept.py b/flyweight/flyweight_concept.py index 85508a3..daa478f 100644 --- a/flyweight/flyweight_concept.py +++ b/flyweight/flyweight_concept.py @@ -9,21 +9,21 @@ class IFlyweight(): class Flyweight(IFlyweight): "The Concrete Flyweight" - def __init__(self, code: int) -> None: + def __init__(self, code: str) -> None: self.code = code class FlyweightFactory(): "Creating the FlyweightFactory as a singleton" - _flyweights: dict[int, Flyweight] = {} # Python 3.9 + _flyweights: dict[str, Flyweight] = {} # Python 3.9 # _flyweights = {} # Python 3.8 or earlier def __new__(cls): return cls @classmethod - def get_flyweight(cls, code: int) -> Flyweight: + def get_flyweight(cls, code: str) -> Flyweight: "A static method to get a flyweight based on a code" if not code in cls._flyweights: cls._flyweights[code] = Flyweight(code) diff --git a/flyweight/flyweight_factory.py b/flyweight/flyweight_factory.py index d2c1491..9206d38 100644 --- a/flyweight/flyweight_factory.py +++ b/flyweight/flyweight_factory.py @@ -5,14 +5,14 @@ class FlyweightFactory(): "Creating the FlyweightFactory as a singleton" - _flyweights: dict[int, Flyweight] = {} # Python 3.9 + _flyweights: dict[str, Flyweight] = {} # Python 3.9 # _flyweights = {} # Python 3.8 or earlier def __new__(cls): return cls @classmethod - def get_flyweight(cls, code: int) -> Flyweight: + def get_flyweight(cls, code: str) -> Flyweight: "A static method to get a flyweight based on a code" if not code in cls._flyweights: cls._flyweights[code] = Flyweight(code) From b79e663966f10a78b1f709a2341568faa677b849 Mon Sep 17 00:00:00 2001 From: Sean Bradley Date: Mon, 30 Oct 2023 21:30:17 +0000 Subject: [PATCH 18/18] updates --- README.md | 15 ++++----------- abstract_factory/README.md | 8 ++++---- adapter/README.md | 10 +++++----- bridge/README.md | 10 +++++----- builder/README.md | 10 +++++----- chain_of_responsibility/README.md | 10 +++++----- command/README.md | 10 +++++----- composite/README.md | 10 +++++----- decorator/README.md | 8 ++++---- facade/README.md | 6 +++--- factory/README.md | 10 +++++----- flyweight/README.md | 10 +++++----- interpreter/README.md | 10 +++++----- iterator/README.md | 10 +++++----- mediator/README.md | 10 +++++----- memento/README.md | 10 +++++----- observer/README.md | 10 +++++----- prototype/README.md | 8 ++++---- proxy/README.md | 8 ++++---- singleton/README.md | 8 ++++---- state/README.md | 10 +++++----- strategy/README.md | 10 +++++----- template/README.md | 10 +++++----- visitor/README.md | 10 +++++----- 24 files changed, 112 insertions(+), 119 deletions(-) diff --git a/README.md b/README.md index a918c80..1e77797 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ It is supplementary to my book titled **Design Patterns In Python** (ASIN : B08X ## Course Access -There are 4 possible ways to access the video content in this course, +There are 3 possible ways to access the video content in this course, 1. Udemy : [https://www.udemy.com/course/design-patterns-in-python/?referralCode=7493DBBBF97FF2B0D24D](https://www.udemy.com/course/design-patterns-in-python/?referralCode=7493DBBBF97FF2B0D24D) - Get **Udemy Discount Coupons** at [https://sbcode.net/coupons](https://sbcode.net/coupons) @@ -27,10 +27,7 @@ There are 4 possible ways to access the video content in this course, - 30 Day Money Back Guarantee 2. YouTube Membership : [https://www.youtube.com/channel/UCmUILI2AWt2MSUgPlZwFdOg/join](https://www.youtube.com/channel/UCmUILI2AWt2MSUgPlZwFdOg/join) - Cancel Membership Anytime -3. Skillshare : [https://skl.sh/34SM2Xg](https://skl.sh/34SM2Xg) - - Certificate of Completion - - Cancel Subscription Anytime -4. Book : [https://www.amazon.com/dp/B08XLJ8Z2J](https://www.amazon.com/dp/B08XLJ8Z2J) : ASIN B08XLJ8Z2J +3. Book : [https://amzn.to/466lBN6](https://amzn.to/466lBN6) : ASIN B08XLJ8Z2J - **Book** includes FREE Video Access Codes to view videos from the official documentation website at [https://sbcode.net/python/](https://sbcode.net/python/) All the code examples in the book can be found in these pages. @@ -49,10 +46,6 @@ All the code examples in the book can be found in these pages. --- -**Note** - -> If you just want to read my design pattern articles, and you don't need to access the videos, then you can read them via [Medium Membership](https://sean-bradley.medium.com/membership) - ## Overview A Design Pattern is a description or template that can be repeatedly applied to a commonly recurring problem in software design. @@ -92,8 +85,8 @@ So, in this book, you will learn about these 23 Design Patterns, ## Pattern Types -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Class Scope and Object Scope Patterns -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ diff --git a/abstract_factory/README.md b/abstract_factory/README.md index 69d18d8..fe3f1c5 100644 --- a/abstract_factory/README.md +++ b/abstract_factory/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Terminology -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Abstract Factory UML Diagram @@ -36,7 +36,7 @@ python ./abstract_factory/abstract_factory_concept.py ## Abstract Factory Example Use Case -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Abstract Factory Example UML Diagram @@ -117,4 +117,4 @@ Python Errors and Exceptions : [https://docs.python.org/3/tutorial/errors.html]( ## Summary -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ \ No newline at end of file diff --git a/adapter/README.md b/adapter/README.md index d977bd2..36a5311 100644 --- a/adapter/README.md +++ b/adapter/README.md @@ -17,11 +17,11 @@ Cover | Links ## Overview -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Terminology -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Adapter UML Diagram @@ -29,7 +29,7 @@ _... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lecture ## Source Code -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Output @@ -43,7 +43,7 @@ method B ## Example Use Case -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Example UML Diagram @@ -143,4 +143,4 @@ When executing [/adapter/cube_a.py](/adapter/cube_a.py) you will notice that the ## Summary -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ \ No newline at end of file diff --git a/bridge/README.md b/bridge/README.md index e47e5ab..21be331 100644 --- a/bridge/README.md +++ b/bridge/README.md @@ -17,11 +17,11 @@ Cover | Links ## Overview -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Terminology -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Bridge UML Diagram @@ -29,7 +29,7 @@ _... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lecture ## Source Code -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Output @@ -43,7 +43,7 @@ c ## Example Use Case -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Example UML Diagram @@ -121,4 +121,4 @@ PS> python ## Summary -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ \ No newline at end of file diff --git a/builder/README.md b/builder/README.md index fb2f7bf..1016ae9 100644 --- a/builder/README.md +++ b/builder/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Terminology -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Builder UML Diagram @@ -28,7 +28,7 @@ _... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lecture ## Source Code -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Output @@ -39,7 +39,7 @@ python ./builder/builder_concept.py ## Example Use Case -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Example UML Diagram @@ -113,4 +113,4 @@ This line, creates a list at runtime including the strings 'SmallChair', 'Medium ## Summary -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ \ No newline at end of file diff --git a/chain_of_responsibility/README.md b/chain_of_responsibility/README.md index 3fa4a4b..23537c5 100644 --- a/chain_of_responsibility/README.md +++ b/chain_of_responsibility/README.md @@ -17,11 +17,11 @@ Cover | Links ## Overview -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Terminology -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Chain of Responsibility UML Diagram @@ -29,7 +29,7 @@ _... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lecture ## Source Code -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Output @@ -47,7 +47,7 @@ Finished result = -1.5 ## Example Use Case -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Example UML Diagram @@ -111,4 +111,4 @@ See PEP-3111 : [https://www.python.org/dev/peps/pep-3111/](https://www.python.or ## Summary -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ \ No newline at end of file diff --git a/command/README.md b/command/README.md index 5920c95..9835591 100644 --- a/command/README.md +++ b/command/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Terminology -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Command Pattern UML Diagram @@ -28,7 +28,7 @@ _... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lecture ## Source Code -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Output @@ -42,7 +42,7 @@ Executing Command 2 ## Example Use Case -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Example UML Diagram @@ -78,4 +78,4 @@ It is just a useful construct that you will see developers use as a recommendati ## Summary -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ \ No newline at end of file diff --git a/composite/README.md b/composite/README.md index 37d5e84..7a9f7b0 100644 --- a/composite/README.md +++ b/composite/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Terminology -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Composite UML Diagram @@ -28,7 +28,7 @@ _... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lecture ## Source Code -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Output @@ -48,7 +48,7 @@ COMPOSITE_2 id:2050574298128 ## Composite Example Use Case -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Composite Example UML Diagram @@ -124,4 +124,4 @@ Visit [https://docs.python.org/3/reference/expressions.html#conditional-expressi ## Summary -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ \ No newline at end of file diff --git a/decorator/README.md b/decorator/README.md index 6d74631..31c7f86 100644 --- a/decorator/README.md +++ b/decorator/README.md @@ -17,11 +17,11 @@ Cover | Links ## Overview -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Terminology -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Builder UML Diagram @@ -37,7 +37,7 @@ Decorator Method(Component Method) ## Example Use Case -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Example UML Diagram @@ -133,4 +133,4 @@ The `__str__` dunder was also overridden in the [/prototype/prototype_concept.py ## Summary -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ \ No newline at end of file diff --git a/facade/README.md b/facade/README.md index dfa62ef..242a2d6 100644 --- a/facade/README.md +++ b/facade/README.md @@ -17,7 +17,7 @@ Cover | Links ## Overview -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Facade UML Diagram @@ -37,7 +37,7 @@ B ## Example Use Case -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Example UML Diagram @@ -170,4 +170,4 @@ Found 2 errors in 2 files (checked 1 source file) ## Summary -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ \ No newline at end of file diff --git a/factory/README.md b/factory/README.md index d1dd8fc..4a6f2b9 100644 --- a/factory/README.md +++ b/factory/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Terminology -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Factory UML Diagram @@ -28,7 +28,7 @@ _... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lecture ## Source Code -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Output @@ -39,7 +39,7 @@ ConcreteProductB ## Example Use Case -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Factory Example UML Diagram @@ -93,4 +93,4 @@ See PEP 3119 : [https://www.python.org/dev/peps/pep-3119/](https://www.python.or ## Summary -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ \ No newline at end of file diff --git a/flyweight/README.md b/flyweight/README.md index 170c137..e0fbbc2 100644 --- a/flyweight/README.md +++ b/flyweight/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Terminology -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Flyweight UML Diagram @@ -28,7 +28,7 @@ _... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lecture ## Source Code -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Output @@ -41,7 +41,7 @@ FlyweightFactory has 5 flyweights ## Example Use Case -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Example UML Diagram @@ -86,4 +86,4 @@ eg, ## Summary -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ \ No newline at end of file diff --git a/interpreter/README.md b/interpreter/README.md index bac547f..c49e7d8 100644 --- a/interpreter/README.md +++ b/interpreter/README.md @@ -17,11 +17,11 @@ Cover | Links ## Overview -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Terminology -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Interpreter UML Diagram @@ -29,7 +29,7 @@ _... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lecture ## Source Code -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Output @@ -43,7 +43,7 @@ python ./interpreter/interpreter_concept.py ## Example Use Case -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ![Abstract Syntax Tree Example](/img/interpreter_ast_roman_numeral.svg) @@ -171,4 +171,4 @@ Outputs ## Summary -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ \ No newline at end of file diff --git a/iterator/README.md b/iterator/README.md index be63322..c995307 100644 --- a/iterator/README.md +++ b/iterator/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Terminology -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Iterator UML Diagram @@ -28,7 +28,7 @@ _... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lecture ## Source Code -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Output @@ -42,7 +42,7 @@ This method has been invoked ## Example Use Case -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Example UML Diagram @@ -118,4 +118,4 @@ Also note that the list being printed at the end is automatically filled from th ## Summary -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ \ No newline at end of file diff --git a/mediator/README.md b/mediator/README.md index 3f7b3a0..c62667a 100644 --- a/mediator/README.md +++ b/mediator/README.md @@ -15,11 +15,11 @@ Cover | Links ## Overview -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Terminology -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Mediator UML Diagram @@ -27,7 +27,7 @@ _... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lecture ## Source Code -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Output @@ -39,7 +39,7 @@ COLLEAGUE2 <--> Here is the Colleague1 specific data you asked for ## Example Use Case -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Example UML Diagram @@ -62,4 +62,4 @@ Component1: <<< In <<< : data C ## Summary -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ \ No newline at end of file diff --git a/memento/README.md b/memento/README.md index 922eba6..98e5fe7 100644 --- a/memento/README.md +++ b/memento/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Terminology -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Memento UML Diagram @@ -28,7 +28,7 @@ _... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lecture ## Source Code -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ### Output @@ -53,7 +53,7 @@ State #3 ## Example Use Case -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Example UML Diagram @@ -151,4 +151,4 @@ print(example.value) # now raises an AttributeError ## Summary -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ \ No newline at end of file diff --git a/observer/README.md b/observer/README.md index 2744223..1965ab3 100644 --- a/observer/README.md +++ b/observer/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Terminology -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Observer UML Diagram @@ -28,7 +28,7 @@ _... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lecture ## Source Code -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Output @@ -41,7 +41,7 @@ Observer id:2084220160272 received ('Second Notification', {'A': 1, 'B': 2, 'C': ## Example Use Case -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Example UML Diagram @@ -88,4 +88,4 @@ Note, if instantiating an empty **Set** then use `my_object = Set()` rather than ## Summary -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ \ No newline at end of file diff --git a/prototype/README.md b/prototype/README.md index 4b49386..0b69ff8 100644 --- a/prototype/README.md +++ b/prototype/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Terminology -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Prototype UML Diagram @@ -28,8 +28,8 @@ _... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lecture ## Source Code -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Summary -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ \ No newline at end of file diff --git a/proxy/README.md b/proxy/README.md index aa62785..64456cf 100644 --- a/proxy/README.md +++ b/proxy/README.md @@ -17,11 +17,11 @@ Cover | Links ## Overview -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Terminology -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Proxy UML Diagram @@ -40,7 +40,7 @@ pulling data from Proxy cache ## Example Use Case -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Example UML Diagram @@ -101,4 +101,4 @@ See the [Lion](/proxy/lion.py), [Serpent](/proxy/serpent.py) and [Leopard](/prox ## Summary -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ \ No newline at end of file diff --git a/singleton/README.md b/singleton/README.md index c59e0b8..c2cebd3 100644 --- a/singleton/README.md +++ b/singleton/README.md @@ -16,7 +16,7 @@ Cover | Links | ## Overview -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Singleton UML Diagram @@ -32,11 +32,11 @@ id(OBJECT2) = 2164775087968 id(OBJECT3) = 2164775087968 ``` -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Example Use Case -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Example UML Diagram @@ -133,4 +133,4 @@ PS> python ## Summary -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ \ No newline at end of file diff --git a/state/README.md b/state/README.md index 90dd505..4f1fce5 100644 --- a/state/README.md +++ b/state/README.md @@ -16,11 +16,11 @@ Cover | Links ## Overview -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Terminology -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## State UML Diagram @@ -28,7 +28,7 @@ _... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lecture ## Source Code -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ### Output @@ -43,7 +43,7 @@ I am ConcreteStateC ## State Example Use Case -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## State Example Use Case UML Diagram @@ -92,4 +92,4 @@ EXAMPLE() # function now gets called by default ## Summary -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ \ No newline at end of file diff --git a/strategy/README.md b/strategy/README.md index 41d0205..8f1a389 100644 --- a/strategy/README.md +++ b/strategy/README.md @@ -15,11 +15,11 @@ Cover | Links ## Overview -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Terminology -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Strategy UML Diagram @@ -27,7 +27,7 @@ _... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lecture ## Source Code -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Output @@ -40,7 +40,7 @@ I am ConcreteStrategyC ## Strategy Example Use Case -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Strategy Example Use Case UML Diagram @@ -57,4 +57,4 @@ I am Crawling. New position = [3.5, 0] ## Summary -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ \ No newline at end of file diff --git a/template/README.md b/template/README.md index dc1736c..fe00545 100644 --- a/template/README.md +++ b/template/README.md @@ -15,11 +15,11 @@ Cover | Links ## Overview -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Terminology -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Template Method UML Diagram @@ -27,7 +27,7 @@ _... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lecture ## Source Code -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Output @@ -42,7 +42,7 @@ Class_B : Step Three. (overridden) ## Template Method Example Use Case -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Template Method Use Case UML Diagram @@ -76,4 +76,4 @@ footer : -- Page 1 -- ## Summary -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ \ No newline at end of file diff --git a/visitor/README.md b/visitor/README.md index 0c7cf82..1f969de 100644 --- a/visitor/README.md +++ b/visitor/README.md @@ -17,11 +17,11 @@ Cover | Links ## Overview -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Terminology -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Visitor UML Diagram @@ -29,7 +29,7 @@ _... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lecture ## Source Code -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Output @@ -44,7 +44,7 @@ A ## Visitor Example Use Case -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ ## Visitor Example UML Diagram @@ -141,4 +141,4 @@ jklmn 1011 ## Summary -_... Refer to [Book](https://www.amazon.com/dp/B08Z282SBC), pause [Video Lectures](#videos) or subscribe to [Medium Membership](https://sean-bradley.medium.com/membership) to read textual content._ \ No newline at end of file +_... Refer to [Book](https://amzn.to/466lBN6) or [Design Patterns In Python website](https://sbcode.net/python/) to read textual content._ \ No newline at end of file