From 7764081ac6b3ca624b5cba0ab432a6b5b1beae19 Mon Sep 17 00:00:00 2001 From: Leah Wasser Date: Thu, 22 Aug 2024 20:54:20 -0600 Subject: [PATCH 1/6] fix: update image paths to packaging dir seo --- .../dont-talk-about-peps-pyopensci.jpeg | Bin 91314 -> 0 bytes .../python-packages/lion-meme-pyopensci.jpeg | Bin 70545 -> 0 bytes .../pyOS-package-guide-contributors.png | Bin 80507 -> 0 bytes .../pycon-packaging-review-process.png | Bin 62990 -> 0 bytes ...n-ecosystem-jake-vanderploss-pycon-2017.png | Bin 105890 -> 0 bytes 5 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/python-packages/dont-talk-about-peps-pyopensci.jpeg delete mode 100644 images/python-packages/lion-meme-pyopensci.jpeg delete mode 100644 images/python-packages/pyOS-package-guide-contributors.png delete mode 100644 images/python-packages/pycon-packaging-review-process.png delete mode 100644 images/python-packages/python-ecosystem-jake-vanderploss-pycon-2017.png diff --git a/images/python-packages/dont-talk-about-peps-pyopensci.jpeg b/images/python-packages/dont-talk-about-peps-pyopensci.jpeg deleted file mode 100644 index 71b6b3b725403104977ec943eab9689bc252561d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91314 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 D+n)Ge diff --git a/images/python-packages/lion-meme-pyopensci.jpeg b/images/python-packages/lion-meme-pyopensci.jpeg deleted file mode 100644 index 52ca365758d66b838705702ebf15a396c6f5bbe0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70545 zcmb4~b8se2wD6xK8{4*R+qS*ov$3s>ZF4u?*nDE!=7t;Fym{-Zuj>AL&s0ry^_iaO zK0Q6%{X1tqS3ds&P~@a!r2t@H007w60r*@8hyx(N|C9gD5MS~Q>f3(;0|f;M1q%ZQ z2MYrW3x|M=00)l*4-1Qkiim`af`Whb_y+S;5Ct9<{ww$Y zD4%@*R2Z;fa3u&ZG5|O#7z8TV=Kz54tDfH={;Tf)mv0b|P|yHy7%~5O~?XIaBqVb|&U+c=%$}LOQr!cVyH|=ys zBG#5Cm{^%>y)=1N1p~k>z?HR}d}Y^NJJ2qwjjL#mvlj9iiZc-sjGeZetE1bD%e-c*W3Gjh99@hl)F4@ZLqa@X+j>0cwVihg!|8|&&^;q zw*pr=<^3Gl(sO!QYXa3p#|YH@yRkDVT~Z~NzbE$v(=T6Tz4vx#y((tNNAOy֗ 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

Y1t8~p5yTP>*xyNO+ztG2Bn=9rC@F3`z+r2cGm zh7~$hvi1+9wDkH5=wT$pJYoIEx!e)A$Jo*HU?|5ALK-?ZtoAqmq1ZLBl~X>Nw_1&} zKQ?rtM)+rCS|8FcRjHnqw!%Tx&Zn}Jrtpns|3%Ig z9m~r8?Uq3Zjc6~l1um`r(s=Q@sadwXF;tiG%OC5Sg$m17&l7(&Rr~CeU@XV;e;yVN~{-t zpMVD!+gqGl3qP<(Qtp7RO>nJDv2|<3tKNj#SFzi2x%z+9aw^L{uodqW3~R4ePTGhT z2wdn!;e8dqL?5g)u6YNPh(F55vkQ(%Ucs|@a`X7b?LRsw$1x(3Tq;Q^YWKeHF9nxPN$oJhD}3IZt&-gm6NhJS*f(T+;^0;NW_3L0S%3RB2t*T#TLo9_ z^l2C<89dFTytwc^oC{!U!p}-}9=3In#`erZDqU2QtiHhSs8u3pZ)c16o%PO@ZcJMG zT}2p(eyG#gh9k>Qn$|)1c9*}^=go@Gz){efZP_^OHE~>^GZ-G{M$8#$?zuCXJOn&? zl2U@gBmbcU2;KNmEI-oHBaqMK zuExv!-4phs%7;4{y+$y$v*-9D5s7ZIA954K?M_$)S8Y;S*_z-fZiP!0BbuR%K(f{U zGMofAECbeStOTMszu7{QZndhEd8t*&2`}59C&ik5u=A{KKA&*!y z&F&4W2mQ-S5dSqsYYiSzsyR=xt3>nLsQp|er%lIgc+2X5a}z&y^^oT|&OekK@WddksaklLQPX`Uy^E3KbklLX+?_|m(~?R9yvqc%{dZ;VY@^fZ z{u5j^ynpk+%c;BQCtHJ1!0kvHJoZ_-YGM+cu<9CQJz0uDF9P+KOeUK-ZX;7`RtCDq z`Z-@$f40`bLcM04lu-L~@-B>RGjURu>B#^3R1!oB)h!bL08%hGIn?NS@(sf6-G&2Q z3f6SWO^6Z=N@(P!S)l9Wc(=EbejM{CH`W(ICm^pCWJx|10bfuuLxZ`>#MmL|hnb|k z;4@94{T`!N^i$kDU;fmG@f@)TWt!zanNu5o{Dd>&!0|FSx>;tuKm9q)2ov zPo2n)-y{zeN4nJhw1yAF{bnA4OU3gA{rX9rW*|jGvv24%aYXnEUT84C(D)Z?;`j3) z<^_VnXpV;RhaHFCql6)b*czhxSB8;CR_9GrLo2*gNg!00jNa$2x5B!0f9@(l_{hubJ0A5~BwHi4VfEsQ z_zzV-PfWcimkQxC^hG;(n-uHFT?^lqLT=5{%F8oV@ef^kQMMJVQoYw43trUTPF)o3 zfg)VVIo&kTVW|Qm;o3RmSk4ZMXF6z zn>D}T6qqfINmzgPWcD0`HwT<n-;&&M~`Z~H4uoZJY#x%De0kqIP7hAt)b$hovx6ckFx`C&Iy z{~#4>q_=+H>*Yci)OdZxvh)*uyt`RTfVKqmi?TQF{r`-(SdFN)@v}y#dg0azLUh(z?sptGY$?-$q%r^?S=XJDWdfv!h?dp~7stOFmhC z{Xhw6jIqYuQpVhPf&aP5{x7B7Q3<%%boq$VZLU(R#gT9FrIDb_ZvGm(e&vs;dym#T zV=$Qh!1vFyfr(PZX5SbNF6JT<4WD(H;8Tm|v5<`H+d9#gT9UqofH*_KYC*Y$#=>&t zQdki&Nkm;u*->3tvKb*^!x8`+zzol=JtdX6KZYB0JpGl~&;3>D_hRDZ+Zd~WrgAMWv-V(L#6VgZx$v5)B-UH!V+e^v z#6!jl3h+gtFxIDNAN1|=7<}G!pSCLbrcQQJ5yLH>&+H4fL9#d2rshA)eS)& zR3G4VNz$1X-&?*ftH_K`=P>8`D6eA6tkr(qt!Q3_FzTSG>_HF=&@_inIdNF;xvxeX z{1(100P=r#+#|l~{Q2P#BzGvhQFk1)`lCby4kayv6MR{K(YDh{6gd-)V?z*gpa|PS zmMv_1zUrUE4$rI|Mo|P~L4_rSk5d`m+%c6&S;wBN-^PpDKSF!{{`@|5{|}|C{n<16 zaHD$B<*VNNkU{Pyo8lqJTi9^jJzc9&OwsqL`at9WvvWRB@Rxh~B5wHZ-s>at^@(4a zTOSKF1!D-6SN%6U#!L^sODKLAsX>$=_XT!-gMK&FS}@#D$V6pvHS<()#m%q!&8vv+ zPc9skbXE>i(i0&=9K|`Jb`hnKj5Flli*Ufk#^4RNr9bm$EgLL~t;baxA#1-Doe>@1 zFDVj^#4NE9P;jjF)9|S{kqe0_04&EUdVnL>@jT0Je=&-N3OJN zNtEH|<18u^yGfQTq2ABnyJ|E}nhh2fn}%OEdJUv!dW^ZS4CD}NMI&GBaJeghod}kO zsE;V#{+eDWhl<2@BaK}4VpW!ERAg`N&(0WikHd<3j@@B?q%CGO2v9;=5oSr-*YG%B z`#pBFIgBHOXXAe6m61)8cvs{xqltLpXlu>K;V-BBv}@2$G2A?BrfPPCzs>HGyUm$? zE|dw+3was?I*3dgbTHQ8N4aa|GDgX?9~s6?xZB;GC}t_ex+DSnAez6tt0cR1r-58{ z443)}hqPoGl2O=^P1dBn7N#D0Xp z{x~v9ltW+)T*6tVTG+WMeDxTepNW{4>3&B8oxI1%Mn%c8di!XNF-(i}atPlyxb0EA zcmW*XUztjr6L|j{_|Cdp+TeY){30ZjL6&-~O`)%Xt%XGwvu{rz&iwpe|`9_B~)mpr*=Ihc!_xRxSO#Seme+(?nAGfREFfswIK z<_3r?srK_1Xis;6o$b73dNint&r=i^ z+GK)n052K;Z<;Opx3PTTo*5dhRaN}}4`|&nPsr&fKV=4WBM5OBmvggO4Q!1|X9-N* zEDvB{GT0xLbOmDaH;0!B>y~4a3OPp5?yrFjA>XD!OgX%Sg~A$N6P6#yv|?h@M8)tv z10&W9_wnLpC7}icVSb_#)KzgQUx)y!9Zf;9c%mk6q-QySFsZY4)Jd<=Q`RqO9LQJ+ zQzVh_%X9qFRh(YoDk$fkBGm0KR}wf;MFO0FqFvQ+PcCaMS) zan-;u)g{@binV{un%uARfD@H<73^M8ShOk(R3k@vDKnI~$orXB?a{Okio%&LGK7U; zC6TDVaZNFNEsOm!;;)NdV6CwZvNM}2Ey_z?>N?h670tasH(Io3c?B0Zg1$CTO)x*GjL(QKMLbI$TP=d%|D`%U*;w#HNKidw> z#h3##9)JW=G2YBQ{zqkZTC=Iai}n|I?1B(={cXU0HrV>BNSI{?G1;4y@!cjRA`p?Q zo?tCduR#Hp^?Gh+Q=joSdUnSv7u5MaN1-Ik>Ph{)fgxg*^v=q(>^Nh6PDU1U5a*tA z%Xbv{Jr;4%UCZw{+f5Y(Ma?FWiCMQ{JFn;1c%k-_b%&yFoKY4k8pK;#rRTHEDUEO^ zjX94LKZEtfl%A7huf_2~oHouJidEeKXtjFB!RM0iultv7U4?Q%qL@Bu2KnXK| zz|33)P+Bi%oHVJ;(tbi+k=B<$VYd<6>9!_jo&aYR+sVG_(HPQak0lM8V3>0!V#y-I z)r7M7qSOJ%hv1Beed5}`MNt>f1gA+9Vb&an=^-uXY(79Y5yVhb;U49Kzd>1Mh%O}Z z(fI|8zjl$u#8fq5|5!s`+a1PV1btiT`%zOV!@b=Q(P3=@H;sJ{i8piw#J*OAmsX2# zy+r?Hg(CSO`{<1*UH7YF9bQ+k6^ZGE(pl9aNOS`4~rR?6g+3oR(Hw zme1SyBF#_#kCrA6+8P|Z@s7igeCj~VXjU-=z=fHSv`lw1uHw6k(^A(6=gBhkHO+Dr z!$Eo4!{?tZ`)!o*TB}MkYdloCkao4d2fRuUB)CO-|>X>>}sd! z%3P@Ii6S$zlmt>aAt=Lv^EEPE6~qxJG@752O9SR$}hcTnW#6%(3Q(Q^3nd z+m*WgRf@$jnnEkAm7jQ9+KTq{gh3p&NS;Yg6q!<7it78Kn&<;c5OvwLGPO?!(KUO6 zX|Xngg1)lmxGam7V!T3Qo@#_+xpLj*7hJ_J9cg9c*-DCO2)~L0XvN(R!8lz82HWOl zGq`DB?KSl-RDBk$$z?n7oA4edVZuw|?GB>tMA&Ppka9wFqN7%@^Td`ILJ8Mp2R^Mm z8WBIAZdTYkxLkcU^m=q#06zhESKugfRU%dFmA4hd+9`sJw?t5uTZb*tl394@e}j4F z44j&21t!gMYNmjYJ#jWwt=8D#3V3V?h%whFdo*6E6ZBPg0z?;hpT&uzuX&OW)IBNI z;AGJZH+Do&B<%Q-KQF_&+IJZWV2hNuUMVHUcKxwU%GRHIO9fC^!@)+?lfYevH#M6( z1X_=!AG(hd4Z1kxPPx8D4;-CIP#SoYbp^kj`0zJK?ZASH9%CMvZY^3fBu^yyF&W{1 zeDjs1;ky6H^RLfs`EY4>Bw8L8-j>7yoZik<^;{ECwX2NSTQnAx3D#b-Xn;4^z8|(D z8==fxWPX@P8;IwIJ%N#v@BlDs6PGAtl2>s+or|&4>$Yos`%8`ZZGt% zKBk|@Q*3)(_t;{?A*<~)qSS*pvJ1|q1jV4jJKx%!KY=q>;B(U{-sdm=yd1jOE$n%C zK@N|$bq2%RN1qm|-jezJL)j1`Vi5LMi`;D4<}hFB!7M-KL3`N*uGT|nI5Y8Nf}!*P zxP5|UN1ry&J4<<;dfhk)KPKQ(yGaPAZZ|Q1EdvIs_k=pMs2~E*v0Yi2b5)z%muio+ z7FYvarLF+M7ThPq6w?4_&n61Y+DzM>T#dpiif1Tg%~B<7Q57kT;epw^B~g~|jXVfs@yss^SVepRX zx9BUv2!24SBf6sJ0D8>WAVy1^7k1U*5{+$E04L#;sR&O~{g{vPY+}4>bSHHpHbj&; z$fa2El1nMojRFOSAbZT%?@h+O$q87wMV%AyN@v$5>}24CM5h_wetE?nS{XD0)0(;# z2!oyCiBq5}KaD^Trrt3BDkutqJcCU>m+e(oDHDj&h=d)d10$VgCQ7h_K_dfa!w*+M zp8`T%0*vTjvB%?6fiP;$hxS}jbhta_Z$#m7)kTcHy)yQ2q7Yd%1Dmn6ig>BXX#cvj za6TEG-LTN)W%Yv&($0@|?T3d~kc#17c7Dv9IF$48co%U`j1$0h72c z4%e(x^L-6Fr@C1c3_E1%n0BqiT0tJAi~yk7odV5{CYesJkw4+VGD|0}UsL7y>&$!Mma7&OicS!af!DPkEr^#eXxnkul1I~Vt9SyK|Qh+#RI>;;Kwu1QD@}h(WcZkAji(x^UXZu2K)iIlAEjlp0n0%i z*=#`=)iD&~qVVDd_+uTok{g_Gr&7l>$Fru>ni8U}sxZ}^vl#u64IQX>gC$1|B#Sc5 zdEm^WgswYGh8pJ&W~x=fjyb*LhMQ7VDS8d+`rtMr&OT)>?rP1RgV#tTQp1e9j0ey^ z>sSk@%-&7R$mO0ZA5u3`zX#h^lk!agoAGKhzWIbW%9bk(dPlN+%b3!Xdqk)ZdrV)hU9)xr|$tMp|+J-Zlz(Rm%b?;OY$6oDLrl+5s=xcVIz}ECN z^XGAou#WSW^~-qY8dJz&nblYdsw77uo%-kWt<4DDIpiCZb5nS;a-U^H#ufX| zIQ`z>ey1_Hj3VsfERs3R6ZnK0!oLXSx55Sdspl|QLbW)hnWh;p%eiHqhJndKtS3AU zhbUBn7=A_88avjI;~t^G7@dm~7%dg>EH8SFutjXjt%8w}h}lT<+k56FOmRceqIpIx>_J6XCMc4xpOUfhVC)J ztQ2C>(m7k3J%8EQsAC9~^CfRt6~-O!SsDt%Pst;F>HgGXXL7W7{U|_UE<;2b* zUDRXLUpCc-Gx;a%*>f_g8|$Mr7`EsGBkQ^{s|S3c#KlIg-roT35gm%zhPaFBTp%*Y zClJPKYfE(seZ>!Bl{t}M<0Rgqk7KhGQIIUaZKt2Y2?dvkI+itFzZfaPxUoVnulAd~ zQ3dFZe3d=DM8X$rSgs}_SZe?iLXx@X9P08gDsvsQm~r<(SRCsBk+nc}Jdi|W3Mez- zzD`V?OBqEH6H{~6;y;|gsHv%eO4Ug(B0tYsI(6W3D*Dhci*CZ5B##=W*-mop1wREm4;jQ$`;31zc@`!uxW+A|x&CC9+#-iWw+LYm7urb&u zx6hs?Gao=#ZN^Il$h;DV7=Ggq_~G?sOom#OqG>WEP*8Ar%S@D6vQ@sW1{e=dVi z8_=uMq_ntKYPf37vJ{F;U+BND2nP~sJgLWu$m2p3I=DcBEj@Rr796a zK|XIbfy!_mW9M0UoJrd4#3GApWry~2%eH2|Ln~QSJ<{)*GK@N!XJ8TBPMqKR?5%N_F$O_;)@EZc59hhF} z++9uF2_Df=ecuV$EQIk?)@4%wd!-_EqWJb5I}fL|I#n&gDFam=LaAG~jubT{Pw1G{ zFve?qr_B!Il-HN2sWPM}R_7)~Oy^AM4*;d>*2m5b%}>E&ZsbJ_W`{=l(eg0gmoFRB zP?b@SP0P`ionyQ>=fF;;^7GYsP3#NrWUFvX`;q*`dtWn(C+4g11!w{DuYrRjDnp}c zkuDZ5ej8T-??YFY$#8X$muZKf>Vy9tGh#YX-p?}%_5=Q~XIy>6AAyJFEc9Tl1L0(~trK>MWW7QCk4J+{>`Ed`*Ndm);OT2cS1%(hjAf%k&X6mAQxo zlGqX1rio}MI@hhy`J#{F@?FQ;tL=69*2HgJ;WzjJ z9AN<#F;@x;6(9?#qXw98)N?EIkWpl^8USyLFF9|e4+G^`()uWGG8-E zjc5wQJ!hjySUbBLRkdiFP1lk#=Wl)!r?T)xs?n%Av$gDx#g6rnh2%u2)yGSWK$zlB z5_PAAN_i69T?x{c_P+Az+h~#Jr-Hp56V$j{&duPBRnsKS_uJA-ny2HG9to!hLB(F^ z=Eu8bctjuCKX2M9b3SO?kURH#lx%f<=+=DaAkEaN>~Wd2XX~94%(Bd*-{>dBhwzexm^r+u=uxxP`P zQEl$o{t42Vd=GI-41dAI}Cm-j~MOI<>nDvz{lZ zb$=Q0y*54a#&wk1>;-Z3#C18Adi zEK&Hg&u`OSGRnsAVSc9;=KtoDX$cIJh(ac1_ffrOe!46?ae zziC2dWijoyZU3Rv{X@Z+_BKh#N>;4Np73|{a(K~YHK7Iv)gkYdggDxhW6v)w6n|2O z3YZ+-E4DIwy5PD2sv#tFT7N@I9|P`FpLEv6k3@Pn5U|r56r#D@Uq-GM@)gebY6Rb+ za4-Vsrd#x=|L2E(Sj**Y<(uPgzC~< zrOh@c<#5CQHRuqW_u)&TFHG7Z?D`+dW=!vDMO$$v9sja#dz-M#{3)j{lVjL(^hk^_ z&8ZL3(v!Ha?Hm%lk3O%^P+J<4#RWh_MdyNpi9>%NjOpV%Pq7xbD}Jzly_Y7Q`p5N(%tjcdVY+`t>)lX zTH5P)pG+2^Abx0SKi@>)QI`C$%?Z{=mex*RdK9ToKITd@66>(pS&Q?|wf>7>Rx z_G3Bkmp}Z(6Wa4YS{+GZd$uw*yCq8}$c(Yu$-%|cQ}1%{M~>@r@mRZZgN?r)2et!+ zIhji$=q>tYK^94yeBrK58Z4rvRpXMF+*8ZxlJybXKBo0|kE5CVu`Z+BEdoV!ImKE` zV>B~cq`1kd5Opyj+?P6aIcrm>CHAgSO%5)4z*&vW{WHP@r-kq&_A?ipmEg#m)G@(w zvBAqZ19EygjmDFKW7Eq$%&sM}EBt#d>ytpYif5rr-1g`xeo`tPiDFUaLfK8~rebf} zrn9wLNsolxuYV{GoX@=-nn(0mxj#bOx~v68V7MEu+q+?2F?un<%0@2NzySa5Q72Nr2_c=HuujbZ4h$u|h^ zBfg9#;x_?{>q)3!Mc{Q6w#+PPAR_9+#|@dHwYRsDKTndr{}er@F0O}Gg>80EJpCPf zdUl~P^f6P3FbB^*9E8B0*Dy67B|!`vlpP&UU_wxCig42gQ{_8g9pL5QnB*Bbt+-}> zqDS(fgb-{b^=b#|(v|b&%~9|Xhb?Rg5-oW?0e6)L9`PrQoU*72go9%3)xq9d5r$4>Z^1%FO;yw(ba@#jIV||XVJ29+M5d=eDm0dB4)K&>OOVl5tZpFZF065~xT_D=T7R#b+LloHWMZ}U< zm{RvY7Zy3JnoGGYR$my|CzRx3#fnF9Q6|<}XE@51CWqrWx|)5IX>B9de(!I2-Q;;fIg@`Y$noeK}~mI zkDBAo!3k|ETy_t6JV{U2rPoqETDdGSY7r)dGhdH%CP9;Qm~JNi9zPZTp;R}R3zm*k zCzKtr4Cudr#;h*jB}wzJ&f2?Kmr$(N374wj#1tZ9yOM3!s=6x(wCyR9r)pvXVwImdr}Aq4t8S=#u+BK>a-rRk?iB`kBfj5j~p5v3oUVh#Eif`TvC{nv^n2`Cru z9>ku_zx`j=^{xkr5k!yJ&?n*tO#E6lt$2^p01KIM+bE3dC8VdwXT=|BeO7jYB}POV zo)nZ$Fn_(<``X=^W3kFDD2+Q5`rrEKee$zflL%wl%-3mY5Luyee(6?!|IA?#Iw?GQ zu3!tFU($9r^WP>_##L%$1vX1D7BA9Jm#RsC*Phwj*Y)?Aivy>Ud=Tqo9}VA|t^erm8SwA#M?ut-R|qd`dWhaP+i|M0&6z(7C0%72^U4F-aA6#GBAeQJ}P{=%o# zyKQ{BzwHXbeu1B5Y%PyRC!_5FiQ`DWVUi$Ce+Zs}uSc{Yli|U2RX4x9qHT(xS$?rWX%VvqQ8b2~}#)!|ePsBl*lF`U`CYongfrK z{{ZZ7yY?)2Y%v#V1 z>WyZ$JtJf1C#m9P`heYtrf}RJnt+_dEXp=|BEMw^n8s zA4TuO)O9MY&)Q>}V1hYlpYCU6;#-KtVu%%uCrG5gWXT-u5$1(4i8s}mW_*)_YQ;8) zf>3Fq@QW&ctvteOYUlivTK?ayInJq+ETTthP=7Je4~8F;&2WV_7Y$Qy+lgFeux8E8 zG(FizK$=)fDl*niHG9WJ6x(roDXJqgXGG^Y*<#@JOvBKq*l6u1P@qfP%c5$NJqp5p zfuCh;Jf=UV{^H=ipuar2EsjCW7`kG8d$!TRzyAQlF%m!GIa1<+9NHBD_HNr}{{XMA z`$Djvpl8`$O}OB3kR~eyiY}> zDd&jI;C~z>GhQ-~d4-R`SJZ7P!K8@H*28D}D-*W87t%c+C&A~-n=`|8gVkX6 zp9_cSbQxPD&RoJ`SGoLUNNqe*aTq5&@^Q*oJ!EdjQf?=W>6qG>zU*bq9iO3XFZe&U zV%YxxAffgG_dD|6-re5mwnNFBF4eD9llZTDtUYZ$)r$QK{-pc{Va35$a4nnVb;0)L z_9~ko;(Z^8<~xa(G(nvd4ohIsbDq%l;aeowFR;O${FfQ4OrBY$SE!$A&3lFof*j<=u;b}6H3+cXK2)}Joz-lxl^Nq2TKi7zBJV0wasy-+IC|C zXH@zxz-+j9Eip=`@uuw!kyNsv5a2|$ZcVaoF1GJ2k6u0 z{wpwf@l_}nu$LAK>d;&UizW|f5FW>n(M!B(>v^(keJ%A`F#``?p9k_u)^xN=r0gS` zhi!35#N~CRuO`{8pjcl-#Tt~cmZsv|hcS;m{q=k8T7kO3ynluN6>Fws4=aXDScMyt{2 z(65*d^S|>N^(H@&>TF$0r5?UC>o7>8>5SEjVf#h5T@*k_lHWeytw{A{fYK5VgaXHc_KrsC)?o>AbvCli^#3ufwx6<+3t zL<7kR^zjCzDs3QVXtE~VIr+pfa3mFS7`~&pxbj<$?Z%*=A?@rypYs%vV$g5Y4Hw2Xl;|20CaUWMbs(= zIK7#>Al!C`(wS0|nC4T=IedQdWAONVg_Q%#-06p9fy(~1P4%2=)2DFI0MHOV(s(ax zU;qaUc0|ph!s(fDOrG3>MY&z1$cQ=xOBdY@G8IU!RINN}6kl2fxfA}$eiO2;wKA;xsJRJXMPNSy+fh5+4s z6S%xUOJ%thQrYoYSmO#!j;k|WE$Fh;d8F~sN~h`9Z#W75kB4 z$VR0h-qEDpGPP0&(AvqE+BsiJKs=&WcGhhsHrev3m1>SAS?vp546MrC6LA5*2H|5X zQ6W8#gV(`j?y%f=ujvkBcv-n1CnTo<+IkJe)p-+O-4LYCBePr&-l|ce+c~D;L8#+- z6VX#GJSMPZJrThG(&2IC)dykf)Xd}DRoPOrXt9p%hJ}`m2RNAj zER9-af~R^5c_G-!^L+f2R?hzbGO{_qNU&_8X|VY(gl?Tttytvb-kSaB_MrS?g!g$K zs94WK3xM;P@V*G&q8eM6P~#p8|HJ?%5CH%J0s;X81Oov9000000096IAu&NwVR3+Vf3-*SpjPtJ|dM^xEP$|AWBS%*)VY!A#5(5Tg~%sz`8Ljnac>Lwr` zFxH=$h87JL#K#eg(3Di7bQ0au<_(E}TH;}0LMFKtGJ!2Fkpu+ZrN9k7W%?#<+%E;x z!vV^{RQaS=iG36XE4upu0Sj3p=t1nl)_QC(YU8K)VfS^lNM4md#P zC67i8Rc6L*Oj;OmRgaB6aS&={jg(h|?=41tWMz3p151GB>{M6TP7O7!i}u-Gg&ree zb9(i$1^QU=GSL}OXf!gb*A_(eJUSK2SXq(IytXf|#1SP?D|4l2%uDVOP$E>bYGQk8db$}Z5}I`5Xnn5ga2;{yDa zndB@Y``a9X)nu$2ZLwr|nikj9ZXwXBvmZ)fqX79T=kDM1oTihx6z0VljYIq5UkbbYcVqkHCN#X{JxB;vL?It zGh-F$3jlRAlpI^~g2)8{!44MFzhvpa3*AlOng?6LhvFjB*og;}O-Q#~e)f~zFm@{d zwSA*tFks;ij6H~#?cNeYB6l18(pA)QtIWoE8}R=CKTv;n+G>z_kp7ka0%H21`%3yM zc0-TyFQo5WT4TSy;+ZPq5XJjS2lFo}U@09xPGT}_7wwN}<~$0j&qWGy=5lwtQB--m zu!H`v`16}`IExZ*o{g4pr8TW94 z%Z!+wu1CRKFSUIa87k_9$T~`oaTG4pbv9mEGboq|TTJ~qpReuuI{m+RN!kGOQ$>Ya zko%nb%n}HAQJ<6VT%fv4hP>&EFD#jddIDC{KTc=s`(-GC0tl`5^eIV)c5h$J^v(TY znL^$RqBU@o*lv3ly#0Sqt#xg(vESyLsLyQ-KeGzyTu|b5U|O^V9)a}MAlKTyP@O3U zhGIgRJ>35Qp=M(O@#HU4q2a8FGgV6IQdn?o@G^3JA9MNwDAxJqOEUieq`}!FzL&;- zcJcoJ(yG1z{oiPSiUTOm1V1T!Y6pZbqk4rre|&upJ7MIyo`>Nq1+e%(z4T{IpRg$U zP^z#C9IR3k|wrW^iC+S`N2oKiRZU)yP*9KZ_$_T z`~6;Pr;?Yd-wzc5hcU%bH~JWtHluYe`7hnjeuuU`M4mKTqTHE*f&2A?(Mf&RK>vmo^f($!%P?nU27| z%jx$&p@-x|oFgP(F7G=py9CT$F2MFaL}ANU&-wbQs^j0-{{Uyy7fbuvdhm@W5Ihn5 zeue)47|mjatkhNM3($-;Zf*cvMw*aL@CvZw=r@HY)vN}kv`QEDv;P2u1b zsIT_#=s|w){GZigcS!r;^A88+GxZ&^+6xB}TU?(_rhfhO zew>J%c_k`Ne-G)HWYP_u7Q>YD|3kR`nC=S_aDl3xO&u)DhFb;n_WS@)}8{{vei)%Lq z3ALA)k%|?f*!M&MaLbT4u(AZMc?I7|q~Q`)sz|0tRolLJH7#3@w}Cm%`UT=6Rx;Qa zW$ix@ewG-Kq3}qFW|`rWpnoEz+OP6B`9&sUm{p{Frj6k|mlFF-^I`UUN(b$D+f=U0 zJ=OPxYJkPCe{b4w3?tBpU;DVsU^HMv_z&7@EAgl9pt&T?rCPGh+Uj02gkPvT%H9-H z6r>gpqKeix)}P#c2E@SiX4qb#q8!01$W!@=Sd%g$#HIw9LX;k9eqf403XcPt9}rpo zl{2!ft+v~~wSD6(F1J)w-}X!6S9%BTeuH9Qdb4aVP|*%xmE#H>k~5n^9YjSHHb z)#=C6m@M|3yiv)l-oBg3Jq?+d3>Qa&4=Ltbjk>%Y_-5$qp{O{{Pa)=1@-VhQRoSk2 zcQh#LgY)Sv8qIGem+wBo3t7`GH1*kqxWNtAs?~ym@H(m<^hx2Pw1~g-RvWM}2$SkdV((@rP_vkj%VX`!B zB&tgjx&3d;a90;|S{4n3C6|@dl~Bl8{hk-iX~b=!ahg2lutv>M4lJ#px-&3F2%IaZ z-L*~}oW&*?Z8y6N3i0@FGp=Q3j%I;Ldi+NdN^RY!TcsBJuhQQ;-tRpEy1c^e#fDTD zz^f26sL_KTEDaYc-awwDqoF(Xz^21o#5!ek4Q7E!di+NchlX3q(6>r0_gIe^b$OCE zqK{^I=9jr^xlA4arFaYjMCJ9x=zcmf2+H@X;~oe-Mym8{G+S0;@eeYp%|8T%Dq_Zb zhIPf-;!;Yeo2JyZGK{7+kTS`L2N0|R0MQv?`g0bH9t^xh>b0WgZ-dv&P@Le{`t|pi ze9T%FeSI3|^9^GG-rr3OqdvJCm=l?&-$`P6_ZGy?y(8BIs8DBHZ%=JWQPt!0bkdfuPJTD1lP*}7oC%UG-v%`gM6 zKeYn|YlB95Y9LW}fV142rDp3=wTV{aoG_^ZV7X02t})VP%k>S`EGGEv`Io>>0^x9s zqsS0v4Q5QEXiPwv=!+4radR7eDKQrn%x?*J5!7uRz}5uu6qgn`!cy3Fisy*Vilna` z^HpA9Tb|3!dPa7b$#)emYQ~~zJt*-v1*1NTFc2u)V70tGkc9=mXz7yebMY0bo^@yS zm{#+{!u-KkJcGKqV!^sje{MKmzXwOG&qIp}-QVJ-e1wK~Sm5sd(wjxLyaZ_t4SQ>F zrELrK=t9!RD}1_@ag|rPVROKI!S2mozsSigh*Z}cVVuA~D#W0Nxz5)yfr1CTbY_e- z0fU$zL5njdFar(>OxbIsq+CMUmaHn}R|x2tU(>o8sIwKgT|?;1$Dr2|^W#ueeYQ7_7xNfJwK=N;bn%$J+hja5_~t6jZc4j@ zD(V+7)M&4Du!ApWJY>4H)y>q?Q;_X@h#vRPef`;%ea@M6jCw$tg~(}aUJ(!>L|M49 z^a&wiQ^Mf!F47QViE~#jW7+|%a{6b|LaY-MN*5U+ZX+ijOvplJ5t$oq5RXo!JB$wV zL=mcs5R)hImDE_&caWpRyB4@x3M;%_KoZrj9{j>_pXApG`&6tE+L3KeTkN8S7E8#W=1{ctw3K@==WZ!CJkmz-M0YHDqs|JHIt3 z)865l`)sW%FJkfHSQ|kjmED)uq8;ah#BgH@?iX_`S%|2(V|Z+0r0WS3Ajxy2b72dk zqqr!?34OyCQJk?tH8BiVUq}_QEC6xz50}$R3{*3Wr;iY{A(AsT#Z=yw#<=kxKXn}t6Qa7V`}u{RDmAc5%ne>%KfhJDwyxs#Ipdh( zlC#4fXqAjE9bZ1sq#7tc8{ed+UN5J~&bJ7=nm^y(J6%@G-(P6DbmP~UQ_=i?*j;R; zY5+QgaI?IjiY^HT1*J1W(76&+M5c2_>W7rVxEh|>S%x`-b0Wsj`eC9iF@i~s66B=D zW;a9G38J7e9%8J}=?@6b4xcjv2Q6yjXzeU_5@%X~vR+x!@{rwe&ktaA4jrXxv2Hvt z4pkj^{A6I&%B^&KiDunY-`5D_*6-#b`qp@kYdIYC7v8P=vbB7e_JC`< zw@0*M)NM~*LwxGtW8I@&zMtGfD3?K#TCVxHGTb9xzq*do!nM5DAGZ&BvaQ@&TwE#q zN`Hj@ShfqUV_U)_a6)0Z6EGS26iadR?vD{>e?_D)&*(M?2qIQoUECyR9yrv){{R_d zd?GU)kEF@8OWZz{)MmyA8i3+pu2Szr`@-jkPYDGAxvJxvnEL*dD^4y~bL@KXw}rS` zR^vPuXIBw3qQ>ak=JWG2l;PvX1_aG_ayK($imqkQ&pm$_zlhR)rQd&w_l43h>&7%{ zGk7+SUZCf%aH~|@!MmAm{U3iF)+CX z@(Qr9+q}F*s+D1x3h(K%qnbAd60+g@{BUp5ABA0WGFMeiqtC`lI?SRthJ^>3&i?>z z0c4|n+#|K%03}TeYld6=2C!zW1{o>u%Rc-61L-7q_?}?l) z_1i3(FsR3OT-{eWd_)zs<*ZK_zqHXX=9nGxXPDYdS{t56kIwwZPuA;M@bTvF)>>V+ zRi--s0A;$NQERV4;>u{n+@lRS*TXc*R`aUXO+UJd-b+z2R4<%7Y8Pn-V>7NR{&fUI zx}3FnJo`dsG+KeaZ}pg3$XW%8u2HE_;#+de@hFBj_1$r5JBt+F0<{%}M$pUjm?KZ1 zVV0juc+H><8k86Q&X>?xn$NMHhX`A!3-^)A;$66azIv8#uW{PC3w3 z-={Uyyj^)ybhydlHLrKeIlg#-jXM!~A9|Enlc{7+;NaXQ@UIv@?7U<@uL}oz|`I)(7GG zJEHw%Bw>cEUXMr^SArSK{{V88z~sjayv61c;L9$OsE}cXNXBT*>0@mKeI?!!tvG>j z<_$+s!=%ke5auH}C74C-H0SRQWJzSI7FfA$z9pey9hGCmq5_Gg7D}uS6%ulF8=!i9 z1_KBKQp5|(d6vS3+o+gZON>VGK$pH@3YK2kSkjrr#apeN&@~*I@6`_ASI;}8opMq0 zn89Y(PD`_%V@CUWYKIRdd}5oQjdizkG}vGsx?1NecmUokO}mVSyz!juxIt{KTcv(BaYk5v;!dBg@AndJ@i2Nu8))%%Tm&gLuVhCF zpbg}_dS!)ivZ-A^w*o^m(>LwuxnN6jBfFV#lU{PLN{p5 zXBme_VOQ-jZwp^}OvP&XiBkODU>SWiM>4u{>l{XnOJQArIB&F7;C466e9z(*7ugFJ z?Uic+jH*-qNF_WK4OCPF(o$uZMbK80)}he27t66q_F%D7TD#KY&P zR|am0b<+s=v^$%1HmGy1eIksC)Hy7Dvklildb+>rS`Zo%yz%o84Rz+@1%RSt_g(rzExEZu0Tw?|^Gfv~4 z`}}4!#ZBAl8ex>5;ZnekG}X=@`u7@p#h0%)h}t;v_DW{8M%VlA5-fb!pzHL6UV@vi zjw{+cY0@TT;dGarJ$3JL*zuMvBTIJyY|ww1_m&Sk!!?|wdU>0{oL66H2t-l38b0?6 zXs*e3uCZR*l_xGz1;+mX>@vEwTSvBHSK6+xR(OPMw>P@+=`sPEqn`Ab=iU|-i^uhb zP4|?%^YNKRbxTFa@c#gCvZ(7?-+jfYI4!4R`P{)-X31L(6NIB?D9a1f5|+*N8p(CN zQ{Q`z1}4huhu1vrT@BSA;#*;+?@_uNGc4F6iX2_k;;gQGmkDpYrRJir7&Y_P&B6OI z=Z{z!&t@3oQkiiq)l&lJcmePOqU)=`A5YGu%FYsoE_Nd2NYH}-%^8-(DJ-{Z!Z zvmSHV9AK!FX7AD~R$awn>k%MDXZ8Q6cwiGQZQ zlMptN8p-yTs~N}|r|~xxb=0NRrUtZn_YS;9u_@^4E^}BbbD%Tx8w*nI7wWo}(8jr^ zqpyj&e`d8+uWj`y0=ejxww&Bu`uPY&jd-(~;vP~Pyl=0WRa1MdGX4d|@Za86mcpOY zjm*&FRPh=gLQxIdnM{zFwb{f7U&S$yr3&pYe>?6w8^^cqbEHSo?ihB~1(z2wXncn< zmU}tIzo_lsD769E%?F8a6*aFP)HA@m^Zaf;AaLhb>!@1QOuo_PzACqTz*HjTWn$ne zD32TlBrJouPVINNFyNeApdfoj?R&s5eqnWD1~O&PEiJP#9kljLmp>CYC7ZKdJ{O|D^;%MXji&tlDLh9_jzCb= z`135C_940RaMNRb$Ee>k7k$>qfu$)H8}-e?Li1?l>3WrCL(pAY#mrB;uNC92VRJsM zL&URVw%iB}LZx$lw}q#1e*e`GjX)*r%Z zwfTW^)x3*CuWRb>&4vduZn4a< zL+$1-S4Q^z;AXLvpIq)91idd|8$)-6lH|Up);tlJi)Ef5U{-G6V@z08V+Z-hb(FY! zgaR(+e2i+KhCjRrMDBK>h?o7G(CxV2B5P9C8kY#j;D(|BV=F{5g(4t|%Tt;f{pJsP z)+)K~C(jY5x4GDn!4VsxYI{_ou({KoAIv&N+kCzY-u<%^2oT4E;P1>;6?>chrEI`5 zz?d^xc$o#kyMQb!w!c~3-vwiFNV+&rlZI9Q02exz`_#RcS@xCpRfye>1RHLOrKN<7 z+vpbc&&*9(tJm=wGqlCqT=ftav`du2MYqrU5uFV8PkDoWa7t3QnQPipdBy(#kWsI1 zl;Sofb#`h9uPZ@S6|};L!Js}T4A{X_uO5D8dsPk%9p5oR&|S@Pe)r;C9F?EiyTwXj zOa?q^CLe0g48D}Ua)~GlKdj38WL5O>DdMyG7yP8Z@mlGP(=ThMqvBEy=&QSyE0t*2 z=HcZ6wlOFO8P4JAcMoTeyckV8m*`msizj=6rKNz%t4z!?kBMbZWJ|XH0Ex+2ZBsji zF2>2N0hOp+0Jt#JIYc#K&0rg$6opxGoCiE~ev!@4xW1vOJN;iUmP|9^XR&YFxa(Zm z!}*n|@ZP<`&uw38^XHF9l_vFd;#G#XU4HiyEj7EUs3#60*?CAZve!G6cD^#^Sqk1N z{dRmF~PwFk;y*c8c8nc5P zM%Zb|<{hXwzn@4->A$d+(2t3S&EfF@6xR_kF!uvGCVUrDl$cSq_lbZ)XUwU7yM?s4 zXB2lRc2qk7ePxSfLAEHsBxXFJA;x}=Y;cyn2zFe-%BtrdZ?qznUGpBWE4Q0nLrp8V z=oK_$?=RZT=Xcb?6*i7Na;Q#f-W}lhjO%8z{Zbi+U4dBjiFUy3yM|aVipC&H)9Y|L z7J5go%>}pLG0Yo56$<`-&~wVbS3Y9r0Yx$Wu>kt!liXYpG4ptD9aE;+-L45< zo|$;PiY2Bx?wtEW=^|v|l(BM8ptHH#dw zvuBEp!avF*OW@ zX6AU-UV8h-pm^Ok5>bxQ>gp0I8NEWL=;u7#9i6Ri{$uAS&v*BQZPMc#f1rRx)&0%& z)JXK+Ki$gER@eKuwjQfR3bDNgFY`WOd{m;5-!6>x4_8fEHvI13Vx~d2%`Nd1xgJC9 zn9!+eV@Iqswoy!;{{YmslH{uW7q`-6?cjA^%q%$TYBv^hP2oJbVqnSPR--|Vp0@~Z z3TR!cF^|gH9z7$X%HtB)z_dql+>5c0{{SF0y6OR=k5Cn`Ky(qy3r^_2Ifc_{H_tP* zvk)AFvo;r5JmmXJbR3lb07PJI950MUz#LZ>?;8u6s?C+ZyAoQ}QQ6ck%+pxG#{H)8 zbH!Z5FWX+Q&?`jq0IZg*HM*L9HO93Ste#@axsI@67}`E%0)k#KE2)}@y+)=dh)Mv2 z6}BV5FGS8P-%)jyGo#*JtUN(6`AoS+0vI`z&g0d5MI$PFTn#zWTb;mRi;YUE+QU+a z+%ox=sn>aR4ljm*#tv=*macn!dW3cE4(yH9=<}%avY#+Fc3N3{L%+1XQ!x7(SziG} zs^n>{_c!=}i*EC;4gPs}3Uh1dyMARo@AJIhVU^cZvQ$~auiX9SMcVV&dUf~jxOlZ_)H`!0#DiF|0`TpFBq*7RMw=#4yWWL* zOJZrS7|+QbUUwz_^(-ktSn2LqzA3)(CHgoDy|I6PSuW~G#2LL zX)Unx<^yoP>_(uEH_HPo7ey!HEN8CaiqyXxXV(7!!!tFY-ZSqlTYD+r7Wn>P&}N*( z@EZ2dv}moH&yF+VU)I}fchSk|h&|@AeeF+si`7nfzWcv;@N1k$ts#StK4mqsH#a+Z ze#Cdxomb}#*PIL(Ceb~y!SJ(AuI@cv`t<}#Y3}Y<*LMTcl@A>Fbzk-fx1|d>t^CK5 zZopT3wTK>OG~XKd+_u5zjQ0rBS9QeUe+5O%yeP|S+<$#ya&6nF^~&KX|ULj#--}p!$}9rPGdILTuV&`?lpnjErPp&ZxrxPGW-O?LRf=L z1{HqMwQ5}wa|9Lf6b=`}W`&uJY~1TYj5&b>TU(jVJfcuHbFjSSRod@yBzkl|+*m1X zo{%;Pc_9U#8#c_U#c}@tWiduRbMtccrtcIJKHA*MOV>@~=DetNa^SZE52WBc1bDz= zyZBwc?9%KgJg>HHSUg(`yjIyv2NdmoxZlsHQEpYWYohYLmn}0J$6a&d#mmW175%S& zs{?Acd!CEi6Gre~d3p8b3OFy#%D3jh_bNQ{k21{Tx;dqNV`7;o7k}TZqJIq)*XCV? zy_N0h0p9tddlUA<_UtXIKa!bRQ~>D ze}Lp0tMT(Malw^uT*RuZ<<)Z%n{I&TJB!d!Z(f~dC^7|@ZxomN#BrRa38(GVi2{f)TB5fv!XRtM_$>N+fh0k{{T;K@hdDd+xHT#Lhlh)na8ec z`Gj6A-PX>&U`1~7ddv6LPZJVq`D!&_^_j5#8|9QrVV+pQa@MbicUVUy9uU@k8O))wg`goRdW+7xfA=ezjiB>fp77RdMru7X)-ODRO zF$TczFc({xs>b6vOMdf?3c7)*v4JWr<`#VuM&>r4ZNXJgmSM9%4IX3CRSG%gV>On` z`Ko*36t1pTEUY$y^9aX!_bE)FTxb5n&t&oyxXg{O5&b2}$y50HM-cSed`j`!`20#Y zO+xQ{zy)eswBGdp08uw=S*%#Pf>m2Z7F0({_5T1PRjPh>aM`x^>k4a~`NXhB{{Wd# z<^KS`6QU9RWl@_e>dlebC(Bn7DUcmbvgtQfz1LyRj#Ql$Ba<|pDJI%{&aD7GDQ5iM&mFd|@~WrGvU z1EmX^WXH5SF&Z%$p{$0uxs7NnK-)2Pyb;=s@ecuV;9FI@oKZ8)Ukp0%Ae)u;t~{g& z&7S#$hpXLmdE?St6873YSRAM9PEX7$6Ew`8okL^2Jp4;C37l;u@9yDP6*cX+sj{

kwCVG20f+PK#Co8JyQl3H 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

Who&)H83DQgB3H8B$sJR3#rH zkY>;XubsGJ)yv)YU@1BEIU5~)4SjiJ|Kayb2LDfDL#8ero8~e87+LeHKULrR1T|KY zG)vI_eXhXHkx6QGKocvCG5@d0_{{<(ZHq2+w`gW*mg@>Id4$!uNpLIoy7DWvGz*$8MA)m z{>bF}iiRfBzkSVdv(>5tKkWU&{kOY6oc;zr4V-T%Q50e- zJn7mp&i!uGA8wvCGrd_QFZr}G;5_)$PZ?8@Xp-+XBEI|6T;*;EIY|4zeV^_+2SJ9G zP7oBY$ywExuZou4A8Zm+P)}J{eY!-H1OX?Qmc8%0rpRukS}oVUY~RPl$?Zz1zeV_6P{PM;x}VXofA8?}e8RxRwcX-ZnDnQ;BxyxMVz z^G2vFj#$zAKOzTwihuZ&g%4_=x~r>qsWLCfBxmPG+W=5?TU+5a{tC)dWb6iebpK5y zDT8*?%WwIvak+s3KiqhPDO-a&rz;0sSija;kdjGX^N+HyJm~&?OzB}W4^bW$v##w- zH$a`ixLfFF7yS{szV$l>uW;sT6^fI$&c^V{Z=E>znok}pMnfAC5jq~kP9h31E6=L& z=5-%czsteiLUH==J7+z+ziGap=GD*b&g%@tI@>B_`@5;Q_O;!->s-nfo7nUIo~9|y zMTl>9TbqC4R`mV7nC@FmopzH-Hog}-d&o=d#o_#}rLFs@I+UcO`qhhHgyhUW-u9UB zGryOR=$a@{F@F{QlKzbm8u-z57Sv464afIHs*E}bk4Gm($MGB+V$ELB=<7}zTq1IJ z84E4iW{EH3An;{&oXp{zPF*poZ&b@0agb#G$>a#_HaMfZvgFUX==|+FA(UKBg(oO? z0FiJqQ#^@TuZ)=lrF9m$=xZG>R=@n|yWW-`t^MH7pAzc~}Y~$bRWcx50JEoCDB)V`0&9J#$4& z`~1b1w6r}_$}$qLAfW}@o#3(98M(EI{JOk|ngA5`SgD@^Kkdeyak{<6*@M?VW%^PQ zQVY8Uumo`5nqktS&9g!MB#jj09$uzWp?naB5%h>X6>sm-r~DaYV^)E!`$F`GPhsrp zz}hG0HBvRalq$UyZtG%pdzci93$W-|`ds z>5DG1jtr}M)oPQ9K6+vA7~vOFgKHzqmb{`ZmB3=J4`t*xz$#-a^j|u-mDCGDg2ODM zO&V()T8z-ny|PsJ>lpuzpk*#yT*q(*B2!QclTlHByG1m!hdFy)}HitU`@$5 zb>=DiA*A$$N63y1e)~d>1!Eo>j3({bIfrKi(c;17@JQGgpD24-{&ukLKX2T*G&dltBS8aP_XDG zUwx5Ml^xC7T*2zf`8wh0I{#;TTOn+nl$7+{>T5VC|NOoqsOSUfAUIw-_D>X30jyD4 zNrj0d!PUl{&4ns7dJ%{9z7lT1m@r%Bj9cIQGit=zLwVwNtXi<&D)lZB#1~A6R`ZbM z{ls>JF#^wB&cKC@%-d=5LE7CF-E~IQ&t++o(PjJx1mXvglN8fHc`zSI5l|rw`su%T zart!CdHEpkMY2|Mw;oCxO05KH9C6dBGT)p&WEArE548V4>vAunZUv5Jsoci?{L}gz z1d1rG^?@Eμf#QzJ{EXXcTV3{6tYXP{EgqM7(@U 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 From b37f7501eac9f7e50823c8110ebb5939859b55ab Mon Sep 17 00:00:00 2001 From: Leah Wasser Date: Thu, 22 Aug 2024 20:59:06 -0600 Subject: [PATCH 2/6] feat(css): pretty css for blog posts and quote --- .pre-commit-config.yaml | 10 +-- _sass/minimal-mistakes/_base.scss | 88 ++++++------------------- _sass/minimal-mistakes/_navigation.scss | 14 ++-- _sass/minimal-mistakes/_page.scss | 66 +------------------ _sass/minimal-mistakes/_variables.scss | 21 +++--- 5 files changed, 43 insertions(+), 156 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d682a068..18b0f92c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -41,8 +41,8 @@ repos: additional_dependencies: - tomli -# - repo: https://github.com/pre-commit/mirrors-prettier -# rev: v3.1.0 -# hooks: -# - id: prettier -# types_or: [yaml] + - repo: https://github.com/pre-commit/mirrors-prettier + rev: v3.1.0 + hooks: + - id: prettier + types_or: [yaml, html, css, scss, javascript, json, toml] diff --git a/_sass/minimal-mistakes/_base.scss b/_sass/minimal-mistakes/_base.scss index 13a55eb0..dea94a90 100644 --- a/_sass/minimal-mistakes/_base.scss +++ b/_sass/minimal-mistakes/_base.scss @@ -15,7 +15,6 @@ body { font-family: $global-font-family; line-height: 1.6; weight: $weight-3; - font-size: 1em; &.overflow--hidden { /* when primary navigation is visible, the content in the background won't scroll */ @@ -132,91 +131,47 @@ blockquote { } } -%quote-style { - font-weight: bold; - font-size: 100px; - color: $pyos-teal; - line-height: 0; -} - /* Block quote with bigger quotes*/ blockquote.highlight-quote { border: none; font-family: Georgia, "Times New Roman", Times, serif; - margin-top: 6rem; - margin-bottom: 4rem; - padding: 0 2rem; - max-width: $medium; - - footer { - font-style: italic; - font-weight: 500; - text-align: right; - } - - &:after{ - @extend %quote-style; - position: absolute; - content: close-quote; - right: 4rem; - margin-top:2rem; - } - & > div.end { - position: relative; - } - - & > div.end:after { - @extend %quote-style; - content: close-quote; - position: absolute; - right: 0; - margin-top:2.8rem; - } + margin-bottom: 90px; + margin-top: 110px; + padding: 0 80px 0 30px; + max-width: 35rem; + //quotes: "\201C""\201D""\2018""\2019"; p { - font-size: 1.3rem; + font-size: 21px; position: relative; - margin-bottom: 0.63rem; + //padding-left: 40px; - &:before { - @extend %quote-style; + &:before, + &:after { position: absolute; + font-weight: bold; + font-size: 100px; + color: $pyos-teal; + line-height: 0; + } + + &:before { content: open-quote; left: 0; top: -20px; } - } - - &.magenta { - & > div.end:after, - p:before, - p:after { - color: $pyos-magenta; - } - } - &.purple { - & > div.end:after, - p:before, - p:after { - color: $pyos-mediumpurple; + &:after { + content: close-quote; + right: 0; + bottom: -20px; } } - - @include breakpoint('max-width: #$mobile') { - padding: 0; - //font-size: 2rem; - } } /* links */ a { - text-underline-offset: .1em; - text-decoration-color: rgba($text-color, 0.7); - text-decoration: underline; - - &:focus { @extend %tab-focus; } @@ -228,9 +183,6 @@ a { &:hover { color: $link-color-hover; outline: 0; - text-decoration: none !important; - text-decoration-line: none !important; - transition: color 0.3s ease, text-decoration-color 0.3s ease; } } diff --git a/_sass/minimal-mistakes/_navigation.scss b/_sass/minimal-mistakes/_navigation.scss index a211dbca..4ea67406 100644 --- a/_sass/minimal-mistakes/_navigation.scss +++ b/_sass/minimal-mistakes/_navigation.scss @@ -514,7 +514,6 @@ border-radius: $border-radius; -webkit-box-shadow: $box-shadow; box-shadow: $box-shadow; - max-width: $medium; .nav__title { color: #fff; @@ -528,13 +527,11 @@ .active a { @include yiq-contrasted($active-color); } - - @include breakpoint($large) { - max-width: $medium; - font-size: $type-size-4; - } } +ul.toc__menu li ul li a { + font-size: 1.2em; +} // Force the sub menu in a toctree to be the same size as the main menu .toc__menu { @@ -542,10 +539,10 @@ padding: 0; width: 100%; list-style: none; - font-size: $type-size-5; + font-size: $type-size-6; @include breakpoint($large) { - font-size: $type-size-6; + font-size: $type-size-7; } a { @@ -568,6 +565,7 @@ li ul li ul > li a { padding-left: 1.75rem; + font-size: 1.2em; } li ul li ul li ul > li a { diff --git a/_sass/minimal-mistakes/_page.scss b/_sass/minimal-mistakes/_page.scss index 3337108f..180c371d 100644 --- a/_sass/minimal-mistakes/_page.scss +++ b/_sass/minimal-mistakes/_page.scss @@ -94,15 +94,13 @@ body { } p, - li, - pre { + li { max-width: $medium; font-weight: $weight-4; } h2 { padding-bottom: 0.2em; - margin-bottom: 0; } h1, @@ -111,7 +109,7 @@ body { h4, h5, h6 { - max-width: $large; + max-width: $medium; .header-link { position: relative; @@ -595,63 +593,3 @@ body { } } } - -/* Media queries */ - -@media screen and (max-width: 768px) { - .page__content, .archive__item { - font-size: 1.1em - } - - .element-item { - width:calc(90% - 10px)!important; - } - - .narrow p { - font-size: 0.9em!important; - } - .narrow { - font-size: 0.9em!important; - } - - .page__meta.contributors { - font-size: .9em !important; - } - - h2.archive__item-title, h3.archive__item-title { - font-size: 1.3em!important; - } - - - .feature__item--center .archive__item-body, .archive__item-body { - width: 100%!important; - padding: 0!important; - } - - .wide #main { - padding-left: 2em; - } - .feature__item { - width: 95%!important; - } - .cards { - margin-right: auto!important; - margin-left: auto!important; - } - - .wide__p_text { - max-width: 90%!important; - } - ol { - font-size: 1em; - } -} - -/* End media query 48em / 768 px */ - -/* max 480 px */ -@media screen and (max-width: 480px) { - body{ - font-size: 1.4em; - } -} diff --git a/_sass/minimal-mistakes/_variables.scss b/_sass/minimal-mistakes/_variables.scss index 66204dbf..75f6d946 100644 --- a/_sass/minimal-mistakes/_variables.scss +++ b/_sass/minimal-mistakes/_variables.scss @@ -57,10 +57,10 @@ $type-size-1: 2.441em !default; // ~39.056px $type-size-2: 1.953em !default; // ~31.248px $type-size-3: 1.563em !default; // ~25.008px $type-size-4: 1.25em !default; // ~20px -$type-size-5: 0.85em !default; // ~13.6px -$type-size-6: 0.75em !default; // ~12px main body font -$type-size-7: 0.64em !default; // ~10.24px -$type-size-8: 0.635em !default; // ~10.16px +$type-size-5: 0.85em !default; // ~16px +$type-size-6: 0.65em !default; // ~12px main body font +$type-size-7: 0.6875em !default; // ~11px +$type-size-8: 0.625em !default; // ~10px /* headline scale */ $h-size-1: 1.563em !default; // ~25.008px @@ -84,7 +84,6 @@ $pyos-lightpurple: #e1dfed; $pyos-teal: #81c0aa; $pyos-magenta: #bb82b0; $pyos-yellow: #f6f0dc; -$pyos-mediumpurple: #735fab; $gray: #24052f !default; $dark-gray: #4c454e !default; @@ -101,11 +100,11 @@ $border-color: $lighter-gray !default; $form-background-color: $lighter-gray !default; $footer-background-color: $lighter-gray !default; -$primary-color: #bab3d4 !default; +$primary-color: #6f777d !default; $success-color: #81c0aa !default; -$warning-color: #e6cb72 !default; -$danger-color: #f9937c !default; -$info-color: #33205c !default; +$warning-color: #d67f05 !default; +$danger-color: #ee5f5b !default; +$info-color: #320e5b !default; $focus-color: $primary-color !default; $active-color: mix(#fff, $primary-color, 80%) !default; @@ -176,9 +175,9 @@ $base0f: #ff5370 !default; /* Breakpoints ========================================================================== */ -$mobile: 480px !default; + $small: 600px !default; -$medium: 768px !default; +$medium: 34rem !default; $medium-wide: 900px !default; $large: 1024px !default; $x-large: 1280px !default; From 0f00947019eaaafeb003ca4ba1df31a525bc1370 Mon Sep 17 00:00:00 2001 From: Leah Wasser Date: Thu, 22 Aug 2024 20:59:40 -0600 Subject: [PATCH 3/6] feat(posts): two new blog posts on pyos --- .../2024-08-19-how-pyopensci-was-started.md | 296 +++++++++++++++ ...-08-21-pyopensci-monumental-growth-2024.md | 354 ++++++++++++++++++ 2 files changed, 650 insertions(+) create mode 100644 _posts/2024-08-19-how-pyopensci-was-started.md create mode 100644 _posts/2024-08-21-pyopensci-monumental-growth-2024.md diff --git a/_posts/2024-08-19-how-pyopensci-was-started.md b/_posts/2024-08-19-how-pyopensci-was-started.md new file mode 100644 index 00000000..b747e550 --- /dev/null +++ b/_posts/2024-08-19-how-pyopensci-was-started.md @@ -0,0 +1,296 @@ +--- +layout: single +title: "Crafting pyOpenSci: creating a vibrant, supportive, and thoughtfully open (science) community" +excerpt: "Dive into my journey of nurturing a vibrant, inclusive, pyOpenSci community. Learn about how things started, how the organization evolved, what we learned, and where we are today. Experience the evolution, challenges, and victories that have shaped **pyOpenSci** into today's thriving community." +author: "Leah Wasser" +permalink: /blog/how-pyopensci-got-started.html +header: + overlay_image: images/headers/scipy-2024-workshop.png + overlay_filter: rgba(20, 13, 36, 0.8) +categories: + - blog-post + - community +classes: wide +toc: true +comments: true +--- + + +

+I founded pyOpenSci in 2018. The idea was born from a fusion of frustration and +inspiration. As someone deeply involved in teaching open science with Python and +who had taught R previously with many more successes, I was surprised by the +challenges I experienced. At the same time, I clearly understood what a powerful +language Python is and how valuable knowing it would be to students' careers. +After all, it's consistently been a top 10 data science favorite (top 1!) language +according to Stack Overflow (link) and other surveys. + +The cohesiveness that I had experienced in the R community wasn't as present in +the scientific Python ecosystem. These experiences sparked a desire in me to +create a more supportive and accessible community for scientists so that they +could be empowered to fully embrace Python as a tool—especially given its use in +the workplace. + +What began as a small initiative, with meetings of 3-4 people in 2018, has since +evolved into a thriving, inclusive community that is: + +* x packages reviewed +* editorial team of XX +* over 250 contributors +* formally partnered with Astropy and the Journal of Open Source Software (JOSS) + +pyOpenSci is a vibrant community that has grown through persistence, collaboration, +and learning from successes and setbacks. + +This blog post will overview how we got to where we are today. + +## The why behind creating pyOpenSci -- Concept and history + +I've taught data science for a long time. When I built the [Data Skills program at NEON](TODO: LINK HERE), I focused on teaching R because it was the go-to language for ecologists. Later, when I created the Earth Analytics education program at CU Boulder, + +I initially taught R but quickly realized that a significant portion of the earth science community used Python. Data I collected from industry and academic sources confirmed that Python was the most in-demand language for scientists seeking professional jobs + +[TODO: add zenodo citation and link to the report and add results plot]. + +### Transitioning from R to Python to teach earth and environmental data science + +Transitioning the Earth Analytics program to Python deepened my understanding of the challenges students face at all levels when learning Python, particularly for open science applications. Though necessary, this shift also revealed new obstacles for me as an educator teaching scientists new to coding and eager to learn open science best practices to overcome. + +### Navigating the Transition to Python + +Transitioning from teaching spatial earth data science with R to Python was difficult. The thousands of packages to select from to teach on PyPI felt overwhelming. I spent significant time deciding which ones to incorporate into our online, open curriculum. Once I found the right package, the next hurdle was learning: + +* how to use these packages effectively +* how to effectively teach them to beginners. + +I selected packages carefully based on the package's: + +* ease of use +* quality of documentaiton +* maintenance + +### Python specific pain points that I experienced + +Unfortunately, I often found the package documentation either too technical or missing, leaving me to figure out how to use the packages on my own. This process usually led to extensive dialogues with package maintainers as I sought to understand and clear up bugs. Learning how to process spatial data in Python made me feel like a beginner again. I could process spatial data with my eyes closed using R, Matlab and even ArcGIS / QGIS. + +What stood out to me during this transition was that I had to write more code using Python to do the same things I could do using less code in R. This was largely because R had a lot of "Wrapper" packages that made normal plotting ana anlayiss operations straight forward. + +Combine the experience of writing more code with bugs and navigating the labyrinth of highly / not beginner-friendly technical package documentation left me frustrated.. This, in turn, resulted in my developing relationships with numerous package maintainers who sometimes even used our online lessons to support their documentation; this was an ideal synergy when it happened. + +Through these experiences, I realized that developing online lessons in Python for spatial earth data science was a continuous learning and adaptation journey. The challenges encountered along the way were not simply obstacles. I saw opportunities to engage with the scientific open-source Python community to enhance the learning experience for my students and any human trying to learn Python to develop open science workflows. + +### Creating my first Python package - EarthPy - to streamline spatial data processing + +To address some of these challenges, I created EarthPy, a package designed to simplify standard spatial data processing and visualization tasks. At the time, creating a Python package seemed amorphous - I didn't know what best practices were and I certainly didn't know how to create a package. It was easy to learn in R as there was one way to do it. + +I learned to build a Python package by mimicking the infrastructure used by GeoPandas, one of my favorite spatial libraries. The clip module from EarthPy was later upstreamed into GeoPandas (link to PR). + +EarthPy's marked the start of my deep dive into open-source software and the scientific Python ecosystem. + +## pyOpenSci's foundation - learning from other communities including rOpenSci, JOSS and the broader scientific Python community + +Based on my own experiences, I saw a demand for a community that could support scientists in both creating better packages with beginner-friendly and accessible documentation and finding high-quality packages that had maintainers committed to maintaining them and were well-built and documented. A modified version of the rOpenSci model would be invaluable to scientists in the vast Python ecosystem. + +### Learning from and leveraging the work rOpenSci has done + +I wanted pyOpenSci to learn from our friends at rOpenSci. After all, the true spirit of open science and open source is about building on each other's work. + +rOpenSci was the first to pioneer software peer review processes, allowing scientists to get academic credit for improving software. Their work inspired me. However, I knew we needed to tailor the rOpenSci processes to support the unique needs of the scientific Python community. + +This was particularly true when it came to packaging - Phew! + +A group even discussed the idea of pyOpenSci at the annual SciPy meeting one year. While I heard there was plenty of enthusiasm in the SciPy meeting room at the time, these ideas never gained traction. I suspect many people were unsure what a Python version of "OpenSci" would look like. + + +### The R and Python communities are fundamentally different + +In my experience, having taught and used both R and Python, this is because the two communities are quite different. The Python community spans numerous applications from web development to xxxxx. Its science part includes many domain-specific sub-communities, with Astropy being the most developed in terms of age and governance / structure. + +Because of this: + +* There are many different ways to do one thing in Python. In fact, even installing Python presents many options (Conda vs python.org vs...). This choice is valued in the Python community, but it's also a challenge for beginners. +* There are thousands of packages on PyPI (the packaging index from which you can get packages). It can be hard to figure out which one is the best, which is why, in part, we started a peer review of Sofwta (more on that below). +* Python is used much more broadly for many different applications beyond + science. +* Python has many more approaches and complexities associated with packaging. +* Python is more often used as a "glue" language, meaning it's common for + scientists to have compiled C and other language extensions in their Python + code and packages. +* The Python community is larger and generally more dispersed. +* There is not a single core decision-making body within the Python ecosystem. Sure, there are core Python developers who work on making Python the awesome language it is, but... + +## Step 1: Early pyOpenSci community meetings - Building pyOpenSci + +To try to build momentum around pyOpenSci, I began by holding community meetings. The first few meetings in 2018 were small and comprised of myself and a few others. Chris Holdgraf, now the Executive Director of [2i2c](https://2i2c.org), was instrumental in the early days and helped me run two community events at meetings (more on that below). We'd also get incredible folks like Filipe Fernandes—a [conda-forge](https://conda-forge.org) maintainer who has since joined our editorial team—and folks from projects like [rOpenSci](https://ropensci.org), who reviews R packages, the [Journal of Open Source Software](https://joss.theoj.org), which reviews and publishes software providing academic credit for any software with a research application, and the [Software Sustainability Institute](https://software.ac.uk). + +As weeks passed and we continued to meet, friends told other friends, and our core crew began +to grow ([link to early meeting notes]()). + + + +We slowly built up momentum. + +Meetings became increasingly productive, discretely focusing on developing a proof-of-concept scientific Python software peer review process. + +Discussions included: + +### 1. Community Building and Governance: +The early discussions focused on establishing the structure of pyOpenSci and its governance. We discussed setting up community guidelines and a code of conduct to ensure a welcoming environment for contributors. Even in the early meetings, we emphasized the importance of inclusivity and diversity within the budding pyOpenSci community of practice. + +What is a community of practice? A community of practice (CoP) is a group of people +with a shared interest who come together to achieve common goals. In +the pyOpenSci community, our focus is on open science and open source. We engage in +joint activities, help each other with challenges, and share information. +{:: .notice } + +### 2. Developing a Python-specific software Peer Review Process: + +In many initial meetings, we discussed ways to create a truly Python-centric pyOpenSci peer review process to better support high-quality scientific Python software. The goal was to create a transparent, constructive, non-adversarial review system and guidelines around creating a package. A community-run peer review process would slowly elevate the quality and standards of Python packages over time while making it easier for scientists to find the quality tools they need. And, of course, it was important that the software that we reviewed would be maintained over time and documented in a way that helped beginners harness the full potential of each tool without too much struggle. + +### 3. Collaborating with Journal of Open Source Software (JOSS) + +Collaboration with the JOSS was a recurring theme too. We wanted to partner with JOSS to allow someone who went through our peer review process to get academic credit for their work. + +Why is academic credit so important? +You see, in academic traditionally you can get credit for writing peer reviewed papers . While i'm a deep advocate of scientifci research, there are a lot of problems with a system that only values highly technical papers that only other scientists can understand. Related to open source software, this means that the scientists don't get actual "credit" for high quality software that is needed to make data processing more efficent and more open. + +Frankly, this lack of credit for important work that is driving open science - system stinks. + +JOSS is a journal that reviews software and when accepted, provides a cross-ref enabled DOI. This is different than a DOI you'd get by linking your GitHub repo to a platform like Zenodo . A cross-ref DOi is connected to a scientist's OrcidID, which is their unique identifier. What does this mean? + +It means actual academic credit as a "publication" for the hard work of creating a research-focused open source software tool. + +However, pyOpenSci reviews software, our goals are different than those of JOSS. + +we care about the python specific packaging painpoints. As such we are developing review guideblines for what makes a sicentific Python software good +we care about long term maintenance of sofwtare. While JOSS will publish a paper, they don't necessarily engage with the maintainer or suppor the maintinaer after. As a community of practice, we do +The partnership aimed to streamline the submission and review process across both organizations so pythonista could harness the python specific review process and also post review support of the communiy while also getting academic credit for their work. + +In short - You can submit a package to pyOpenSci; we will review it, and if it's in scope for JOSS< then you can become accepted by JOSS, too. They take our review and only review your software's paper. + +This partnership is a true win/win for JOSS and us. It provides a structured pathway for scientific software developers to earn academic credit for their work while also gaining visibility and community support from pyOpenSci. + +### 4. Challenges and Strategic Goals + +Some of the biggest challenges in peer review revolved around project maintenance. So many scientific Python tools are maintained by one person. We wanted to ensure that the pyOpenSci software ecosystem represented maintained tools that scientists could trust. This meant thinking hard about what happened to a package after it was reviewed. + +How could we support maintainers in updating their packages over time? + +We knew that this type of effort would require some funding support. Strategic goals included expanding the community's reach, increasing engagement through events, and securing sustainable funding. + +### 5. Holding pyOpenSci events and connecting with the community + +We also wanted to get the word out about pyOpenSci to encourage new package submissions, and to grow our editorial and reviewer base. After all, at the time, we were just a small group of scientists talking about this community. We discussed holding events at meetings such as SciPy and AGU . And we discussed holding maintainer sprints It's funny to look back at those early meetings, now that we are actually doing all of the things we talked about back then and more! + + +Even then, we knew that pyOpenSci was about more than reviewing software. It was about supporting science and getting more scientists involved. + +We launched software peer review formally in 2019. We initially identified a package to review that was internal to our team—as a prototype. We even tested out the peer-mentor review approach, pairing someone newer to peer review with someone more seasoned to see how it would go. + +From there, things took off. Especially as I began to travel to scientific meetings and promote the work. More on that below + +## Understanding the community's needs and interests interest: outreach at conferences 2019-2021 + +Before fully launching pyOpenSci, I trusted my professional instincts that others in the scientific Python ecosystem faced similar challenges to those my students and I encountered. However, I needed evidence from the community to justify pursuing funding for pyOpenSci. I needed the community to tell me what they needed so I strategically build pyOpenSci to file down those pain points. + +To do this, I held several community meetings between 2019 and 2021, including sessions at the SciPy and AGU conferences. + +By holding community events at SciPy and AGU, I was able to reach diverse communities to understand their needs. While both communities shared an interest in scientific Python, their focus areas differed + +* SciPy attendees are more software-centric +* AGU attendees are generally more science focused with deep roots in the earth and environmental sciences. + +Getting input from both the scientific and the scientific Python communities was invaluable in shaping pyOpenSci's direction and ensuring that our efforts aligned with the needs of both software developers and scientists. + +### SciPy Meeting 2019 & 2021: A Filled Room and a Lively Discussion Around Peer Review of Scientific Software + +In 2019, we held our very first pyOpenSci event—a Birds of a Feather (BoF) session at the SciPy meeting in Austin, Texas. It was me, Chris Holdgraf and Jenny Palomino leading the session. The second event was virtual and co-hosted by the wonderful, David Nicholson. + +link - more about scipy - link to 2024 blog + +During these events, the goal was to engage the scientific Python community about pyOpenSci and our peer review process and better understand some of the pain points. We held a followup Bof in 2021 but this time in a virtual space given the COVID-19 pandemic was still in full swing. + +What is a BoF? A bof is an informal meeting where participants with similar interests gather to discuss a specific topic, often leading to valuable insights and collaborations. If you've been to PyCon before, the Open Space structure is similar to SciPy Bof sessions +{: .notice } + +Both SciPy BoFs were well-attended with atleast 30-40 people in the room each time. The discussions centered around pyOpenSci's peer review process and the community's pain points. These sessions helped us gauge the community's needs and interests, which were crucial in shaping our initiatives. + +## 2019 AGU (American Geophysical Union) Town Hall + +In 2019 and again in 2021, I held town halls at the massive AGU meeting. My friend and long time colleage [Chris Holdgraf](https://github.com/choldgraf) + +agreed to co-lead the very first in person town hall with me, which was a lot +of fun! We had well over 60 people in the room. At that time, the incredible organization 2i2c was still just a +vision, with efforts underway to make it a reality. And look where it is now. + +If you haven't been to AGU before, it's a huge (20,000-25.000 person) international conference. Given my background in earth and environmental science +and remote sensing, this meeting had long been my absolute favorite. It was +where "my people" were—where I could talk for days about sensors and remote +sensing. + +The AGU meeting also has a strong bioinformatics track. The town hall +resulted in a full room of geoscientists who cared about Python. + + + +This experience reinforced that pyOpenSci was not only needed but wanted +within the scientific Python community. From there, our peer review process +began to grow. + + +In 2019, I also hosted a town hall at the massive AGU (American Geophysical Union) meeting. My long-time colleague and friend, [Chris Holdgraf](https://github.com/choldgraf), co-led the session with me, which was a lot of fun! At the time, 2i2c, the incredible organization Chris would go on to lead, was still in its early stages of becoming a reality. + +AGU is a huge international conference with a geoscience focus, aligning closely with my earth and environmental science and remote sensing background. The AGU meeting has always been my favorite—I could connect with "my people" and talk for days about sensors and remote sensing. This town hall was important because the audience is quite different from that at sciPy. At SciPy you meet a lot of maintianers and tool developers. While there are beginning pythonistas there, the audience tends to be more technically focused. AGU, on the other hand, is this lovely mixture of earth scientists, geosceintists and also some open source and bioinformatcs folks. + +This can be clearly seen in the data we colected +at scipy over 80% of bof attendees were maintainers or people who had contributed to open source before compared to XX % at agu. + + +The AGU town hall attracted a full room of geoscientists who were passionate about Python, reinforcing that pyOpenSci was not only needed but also wanted within the scientific Python community. The feedback and insights from this event further fueled the growth of our peer review process. + +### Outcomes from the early meetings + +what did people need and want +include quotes and a plto or two. + + +> * clarify python packaging. Too many different mechanisms floating around... +> * What are best practices of sharing the code? +> * Training about developing tools +> * Training for people who can code for themselves, but want to start developing software for others. Style, documentation, testing, got, etc. + + +## Getting funding +* applied to Sloan - etter software for science +* got funding - it was a ahrd time - king soopers shooting... +* decided to leave academia and pursue what makes me happy - community work. + +the rest is history.... + +## **pyOpenSci Today** + +- **Joining pyOpenSci**: A primer on how individuals can contribute to and engage with pyOpenSci, including practical steps for getting involved. + + + +**Community Feedback and Needs**: - Collating a comprehensive summary of community expectations. - Insight into how these expectations steered the project towards its current approach. + + + +*************** + + +I've always trusted by professional gut when it comes to building new programs. Everything inside of me was telling me that if I and my students were encountering these challenges in the scientific python ecosystem - that others were experienceing them too. But i needed that evidence from the community before trying to get funding for pyOpenSci. So in an effort to get the word out and better understand community needs, I held severa + + + +* **Open Licensing Challenges**: These are particularly relevant for those working at agencies or corporations with licensing policies that do not fully embrace open source principles. +* **packaging challenges**: +* **Peer Review Partnership**: Astropy members were present, and they were developing their own peer review process at the time. We spent some time talking about what would happen after the review ends in terms of tracking package maintenance over time. + + + diff --git a/_posts/2024-08-21-pyopensci-monumental-growth-2024.md b/_posts/2024-08-21-pyopensci-monumental-growth-2024.md new file mode 100644 index 00000000..63f80b3c --- /dev/null +++ b/_posts/2024-08-21-pyopensci-monumental-growth-2024.md @@ -0,0 +1,354 @@ +--- +layout: single +title: "It's Been a Long Short Road: The Monumental Past 2 Years of pyOpenSci" +excerpt: "Learn about what pyOpenSci has accomplished in the last two years, including the evolution of our packaging guidebook, the expansion of our peer review process, and the vibrant community we've built." +author: "Leah Wasser" +permalink: /blog/what-pyopensci-accomplished-with-two-years-of-funding.html +header: + overlay_image: images/headers/scipy-2024-workshop.png + overlay_filter: rgba(20, 13, 36, 0.8) +categories: + - blog-post + - community +classes: wide +toc: true +comments: true +--- + +## It's been two years since I started working full-time on pyOpenSci +As of September 1, 2024, I have been working full-time at pyOpenSci for two years, thanks to funding from the [Sloan Foundation](https://sloan.org/) and [CZI (Chan Zuckerberg Initiative)](https://chanzuckerberg.com/). pyOpenSci has come SO FAR in two years. + +It's time to take a breath and celebrate everything that the pyOpenSci community has accomplished in the past two years. + +Before we move on to the next big thing—our pyOpenSci Fall Festival (more on that below)—I want to take a moment to reflect on: + +* where we've been, +* what we've accomplished, +* the incredible community of practice that we've built. + +I'll wrap up by discussing what's next for pyOpenSci. + +## How I created pyOpenSci + +In 2018, I founded pyOpenSci out of a combination of inspiration with a splash +of frustration encountered while teaching open science approaches to scientists in Python. Despite Python's power and popularity, I noticed a gap in community support compared to the R ecosystem. This gap inspired me to think about ways to make the Python ecosystem more accessible to and supportive of scientists trying to share their workflows. + +My experiences teaching and working in the Python ecosystem, +inspired me to establishing a vibrant, inclusive community of practice. This +community would be driven to develop and encourage open science best practices. +And also to fill in knowledge gaps that scientists encounter when trying to make their science open and reproducible. + +From humble beginnings characterized by 3-4 person community meetings, pyOpenSci has grown into a thriving community, marked by a robust editorial team, hundreds of contributors, and numerous valuable community partners and friends. Our peer review process has seen over 50 packages; we've accepted 35 and have 17 packages in [active stages of review](https://github.com/orgs/pyOpenSci/projects/7) as I write this post. + +This evolution underscores my commitment to building this vibrant community of practice and making open science practices and Python more accessible to scientists. + +[ Learn more about how pyOpenSci started ](/blog/how-pyopensci-got-started.html) +{: .button } + +### What is pyOpenSci? + +pyOpenSci's mission is to create a community of practices that helps scientists make their science more open and collaborative. We empower scientists with the skills and knowledge to create efficient open and shared data processing and analysis workflows to process open science best practices. We enable scientists to share and reuse their code through packaging. Our goal is for scientists to spend less time fighting with code and more time tackling the world's most significant challenges. + +We do this by: + +* **Creating online open education resources** that help scientists implement open science best practices. Over the past two years, this work has included helping scientists with the skills needed to package their code in a way that can be shared and reused across workflows. It also includes using Git and GitHub to enhance open, collaborative workflows and ensure versions. +* **Running training events** that help scientists discover new tools for reproducibly sharing their code, workflows, and discoveries; we also teach open science best practices. +* **Running an open software peer review process** that helps scientists make and find better software to support their work. +* **Partnering with other open science and Python communities** to leverage knowledge and effort. + +# TODO: redo this so the third petal says "education & training." modify software peer review to say software peer review & packaging guidelines. Then, update the captions in the other posts that use this image + + + +### pyOpenSci and iterative, data-driven program design + +PyOpenSci's development and design have been data-driven from the start. I started collecting data about community pain points back in 2019. And today I have +quotes and word clouds and other valuable insights collected from community +members at meetings such as: + +* the US Research Software Engineer (USRSE) RSE, +* SciPy, and +* AGU (American Geophysical ophiycail Union). + +
+ + Alt here. + +
Iterative Data driven program design is a fusion of evaluation and program development that utilizes community feedback over time to iteratively build a program. Rather than build the entire thing at once, you build it in pieces and continue to collect data which allows you to be agile in trying things and adjusting program elements to better align with community needs. +
+
+ +The data that I've collected over the years, reveals vital pain points and gaps that scientists face when trying to process analyze and share their workflows. +This data directly informs the successful community that pyOpenSci has become today. + + +
+**Survey question & responses:** +"How could pyOpenSci help you with your science, code, and software?" + +> +> -- 2019 AGU townhall +> What are the best practices for sharing the code? + +> Streamline the development of good quality, socially responsible, and easily shareable software. + +> Bullet-proof, well-documented packages for Earth science. + +Many earth scientists attend AGU. It's a very different crowd then who you meet +at the SciPy meetings. +
+ +### pyOpenSci learned a lot from building a Python software peer review program + +pyOpenSci's design is also based on our experiences developing the software peer review guidelines for Python packages. We [interact with scientific software maintainers](https://pyopensci.discourse.group/t/api-reference-building-locally-but-not-on-rth-missing-path/368/7) - who are often more scientists than developers - +from around often. + +As we developed our [peer review guide]((https://www.pyopensci.org/software-peer-review/)), it became clear that a beginner-friendly packaging guide was essential to support scientists in sharing their code. This is because [our pre-review software checks](https://www.pyopensci.org/software-peer-review/how-to/editor-in-chief-guide.html#editor-checklist-template) require basic package infrastructure. We wanted to set scientists up for success. We want to be clear about what that packaging infrastructure is. + + + +
+**Survey question & responses:** +"How could pyOpenSci help you with your science, code, and software?" + +> +> -- 2019 AGU townhall +> AGU 2019: Training for people who can code for themselves but want to start developing software for others. Topics include style, documentation, testing, git, etc. + +
+ +#### Helping scientists navigate a complex and difficult-to-understand Python packaging ecosystem + +The packaging ecosystem has evolved rapidly. Numerous tools and approaches are available to create Python packages. Further, recent changes to ecosystem standards have led to an explosion of packaging tools like [Hatch](https://hatch.pypa.io/latest/), [Flit](https://flit.pypa.io/en/stable/), [PDM](https://pdm.fming.dev/latest/), and [Poetry](https://python-poetry.org/) with other tools like Pixi and Rye also on the horizon. Scientists often feel overwhelmed by the sheer number of options and have begged for clear guidance for years. + +
+ +QUESTION: "How could pyOpenSci help you with your science, code, and software?" + +> +> -- 2021 SciPy BoF +> **clarify Python packaging. There are too many different mechanisms floating around...** + +
+ +There are some excellent, more advanced guidebooks and tutorials available now, such as [PyPA's packaging tutorial](https://packaging.python.org/tutorials/) and the [scientific Python development guide](add link). However, our resources serve a different audience. + +1. We want to ensure that our resources don't require foundational knowledge that scientists don't usually have. +2. We want to avoid burdening scientists with decisions about packaging concepts they don't fully understand, such as selecting a build backend. + +From a beginner's perspective, every decision point is a potential opportunity to go down the wrong path, adding cognitive load. + + + +I knew that pyOpenSci could make the packaging journey more straightforward for scientists. I also knew there was a strong need to file down packaging and open science thorns. + +If you want to learn more, my [talk at PyCon dove into the challenges of too many options and cognitive overload; I wrote about it here.](/blog/python-packaging-friends-dont-let-friends-package-alone.html) + +### pyOpenSci guided the community towards a single way to create a Python package in under a year + +In just under a year, we created a comprehensive packaging guidebook and a set of end-to-end Python packaging / share your code tutorials that walk scientists through creating a package and publishing it to both [PyPI](https://pypi.org/) and [Conda-Forge](https://conda-forge.org/) using [Hatch](https://hatch.pypa.io/). Together, the pyOpenSci community built consensus around which packaging approaches should be adopted as best practices. + +[Check out the pull requests ](https://github.com/pyOpenSci/python-package-guide/pulls?q=is%3Apr+sort%3Acomments-desc+is%3Aclosed) if you're curious about the discussions. The sheer volume of comments on some of the early PRs associated with packaging build tools speaks to the various issues, complexity, and decisions we needed to make. + +## **Building Python packaging consensus and developing the pyOpenSci Python packaging guidebook** + +The success of our Python packaging guidebook is due to extensive community input, +focusing contributors on the guidebook goals which was to make the Python packaging accessible to beginners and scientists who didn't want to become packaging experts, and our intensive community review process that includes input from: + +* **Packaging tool maintainers:** We asked each maintainer from Flit, PDM, Hatch, and Poetry to provide feedback on our overviews of their tools +* **[PyPA](https://www.pypa.io/en/latest/) members** who have already developed packaging resources that serve the broader Python community +* **Core scientific Python community members** who are maintaining tools like Matplotlib, Numpy, and Pandas that require more technical complex builds +* **Scientists with varying levels of packaging expertise:** This group is most important as packaging beginners provide the lens of what is confusing and ensure that the technical content is more beginner-friendly. +The truly collaborative effort of creating the Python packaging guidebook resulted in a beginner-friendly and accurate guide that the pyOpenSci community now maintains and continuously updates. + +Our packaging guide provides an overview of the Python packaging ecosystem to support scientists who want to understand what all the packaging tools and approaches do; they want to decide on their own which tools best serve their needs. We also include sections that define core terms that most scientists need to learn as they appear often in online documentation, such as: + +* [build backend](https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-build-tools.html#build-back-ends) +* [build frontend](https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-build-tools.html#python-package-build-front-ends) +* [wheel](https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-distribution-files-sdist-wheel.html#wheel-whl-files) +* [sDist](https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-distribution-files-sdist-wheel.html#source-distribution-sdist) + +The goal of the Python Packaging Guide is to translate--to help scientists understand the base language around packaging. Our Python Packaging Guide will clarify and file down the packaging thorns over time. + +
+ Image of the pyOpenSci package guide review process. There are three main boxes on the slide labeled 'expert feedback,' 'community review,' and 'sprints and bug bashes.' The top of the image is titled 'The Power of Community Review.' +
pyOpenSci engages people from all parts of the Python community, with all levels of expertise, in our packaging guide review process. Every page in our Python packaging guide has gone through extensive community review to ensure that it is 1) beginner friendly, 2) accurate and 3) up to date.
+
+ +### Creating opinionated Python packaging tutorials + +More often than not, scientists (and packaging beginners) just want to get the job done. They don't want to become packaging experts. + +They want to create a Python package and do their important work more quickly. A community presenter made this statement directly at the Python packaging summit at PyCon US 2023. He stood up and said: + +> I just want to create a Python package. Where is the tutorial or +> documentation that teaches me how to do that? + +I have heard this statement from dozens of scientists and non-science Pythonistas in the past two years. And because of this sentiment, pyOpenSci created opinionated Python packaging tutorials that guides users through the entire packaging process, from [creating a package](https://www.pyopensci.org/python-package-guide/tutorials/installable-code.html) to publishing it on [PyPI](https://www.pyopensci.org/python-package-guide/tutorials/publish-pypi.html) and [conda-forge](https://www.pyopensci.org/python-package-guide/tutorials/publish-conda-forge.html). +By providing clear, opinionated, step-by-step instructions, pyOpenSci has reduced the cognitive load for scientists who want to share their code. + +
+ +
Our opinionated Python packaging tutorials demonstrate 1 way to create a Python package using modern packaging best practices. This graphic represents the steps that a user needs to understand to make their code installable and create a basic Python package.
+
+ +These tutorials went through the same community development and review process as the rest of our Python packaging guidebook. We have also begun teaching the lessons with high success rates. We taught the lessons several times and plan to continue teaching them, especially as we build out our training sustainability model (more on that below). + +### Teaching online lessons is the best way to ensure they stay current + +I have created hundreds of [open online lessons](https://www.leahwasser.com/my-path-to-open-education-earth-environmental-data-science) both for ecologists [NEON](https://www.neonscience.org/resources/learning-hub/teaching-modules/quantifying-drivers-and-impacts-natural-disturbance-events) and [earth and environmental scientists](https://www/earthdatascience.org). One of the biggest challenges is that it's easy for data science lessons to become dated quickly--especially in the rapidly evolving data science space. By teaching the lessons, we can update them regularly as the ecosystem evolves. We also often have users review the lessons at our [annual sprint events](blog/pyopensci-pyconus-2024-sprints.html) to test them out; more on pyOpenSci beginner-friendly sprints below. + +**TODO:** add quotes from people on the guidebook. +**TODO:** Add two sentences on the growth— both the web growth and maybe a quote from an email I've received. + +### The power of community: Translating the guide & tutorials to other languages + +The success of our packaging guidebook has been remarkable, thanks to the tremendous input and feedback from the community. What began as a simple guide has evolved into a collaborative project, with enthusiastic participation from contributors worldwide. At our last PyCon sprint, [Felipe Moreno](https://www.github.com/flpm), a new contributor at the time, took the initiative to set up the translation infrastructure, sparking significant momentum that has since transformed the guidebook into a truly global resource. + +This translation process has taken on a life of its own, with over XX pull requests already submitted. pyOpenSci community members are now actively translating our Python packaging guide into Spanish and Japanese, with the exciting possibility of pyOpenSci lessons being taught at PyCon Japan next year once the Japanese translation is complete. This entire effort underscores the power of community when guided in the right direction, showcasing how collective effort can drive meaningful progress. + +> This entire effort underscores the power of community when guided in +> the right direction, showcasing how collective effort can drive +> meaningful progress. +{: .highlight-quote } + +## Using Sphinx as a translation tool for our Python packaging guide--Internationalization +Felipe set up flexible ttranslation infrastructure using a Sphinx extension, allowing contributors to translate as much or as little of the guidebook as they wish at any time. The infrastructure also runs so that as we update the English versions of the guidebook, the translation extension will identify new and revised text that needs to be translated. The community's response has been overwhelmingly positive, with about 50% of the Spanish translation already covered (though unpublished) and work on the Japanese translation well underway. Remarkably, this entire translation effort is unfunded and entirely community-led, a testament to the dedication and passion of the pyOpenSci community. + +Translation in our context refers to converting text from one language to another to make the content accessible to a broader audience. Internationalization (i18n) is the process of designing and developing infrastructure to be easily adapted to various languages and regions. Together, these practices enable global accessibility and usability of the pyOpenSci online education resources, including our packaging guide. +{: .notice } + +## pyOpenSci at PyCon and SciPy 2024 -- sprints, talks and new contributors + +Our engagement at SciPy and PyCon this year marked a significant leap forward from last year. We had so much more engagement this year compared to last. + +**What is a community sprint?:** Community sprints are collaborative coding and documentation update sessions where new and experienced contributors work together on open-source projects. These sprints provide a supportive environment with guidance from project maintainers or experienced developers, helping participants contribute effectively. They are an excellent opportunity for learning, networking, and making meaningful contributions to the open-source community. [You can read more about that here.](https://www.pyopensci.org/blog/pyopensci-pyconus-2024-sprints.html) +{: .notice } + +We had many more people engaged and contributing to pyOpenSci this year than last. As I write this, many of our sprint participants have continued to contribute to pyOpenSci after the event—our focus on making sprints beginner-friendly paid off. Many first-time contributors helped pyOpenSci with various open issues on our help-wanted GitHub project board. This surge in participation and continued engagement underscores the growing momentum and impact of pyOpenSci. + +TODO: UPDATE NUMBERS HERE from https://github.com/orgs/pyOpenSci/projects/12 + +| Meeting | total prs & issues submitted | total contributors | +|----------|----------|----------| +| PyCon 2023 | Item 2 | Item 3 | +| PyCon 2024 | Item 2 | Item 3 | +| Scipy 2023 | Item 5 | Item 6 | +| Scipy 2024 | Item 8 | Item 9 | +| pyCascades 2024 (community lead) | 19 | Item 9 | + +## Talks at big Python meetings - PyCon and SciPy + +I wonder if this section could be integrated above somehow? i can link to both blog posts on my talks. + +I also had the opportunity to give two talks this year. +I gave a talk at PyCon about how pyOpenSci is leveraging the community and building consensus around the thorniest topic: Python packaging. + +Link to blog post on the talk. + + + +## Strengthening Scientific Software ecosystem with Peer Review + +While pyOpenSci has run peer review since 2019, funding allowed us to fully document, formalize and set the review process up to be more scalable when I started, I started full-time. The [peer review guidebook](https://www.pyopensci.org/software-peer-review/) was one of the first things I worked on in the fall of 2022. The goal of this guidebook was to +define each role in the software peer review process +define policies around our review package scope, how we review, how we determine what is in scope, and more +The guidebook also guides community partnerships that we have with groups such as Astropy (formalized in in 2024). + +In 4 months, we published a shiny new peer review guide. In January 2023, we started peer review again. The results of both funding, documentation, and building a robust editorial team can be clearly seen in the plot below + + +
+ A cumulative sum plot with months on the x-axis and number of review issues submitted on the Y axis. The curve starts with a small slope in 2019. Then, around January 2023, the slope becomes more steep, indicating a dramatic increase in submissions when we reopened the peer review. At that point in the plot, there is a label that says 'Full-time funding' +
It is clear the impact that 1) working on our peer review guide and peer review governance plus 2) funding which allowed me to devote all of my professional time to pyOpenSci, had on our peer review program. It has been incredibly successful in the past year! And true success lies in the hands of the community that leads the review process.
+
+ + + +You can see more of our [peer review metrics on the myst markdown metrics dashboard here](https://www.pyopensci.org/peer-review-metrics/pyopensci-peer-review-stats) +Our goal for the Sloan Foundation proposal was to review 20 packages in two years. We have almost doubled that goal already. On average, pyOpenSci now has 10-14 packages in our queue. + + +**We greatly value diversity (do we have any metrics from our review data that I can share here??)** + +## A thoughtful, kind, and supportive community is what makes the pyOpenSci special + +Every morning, I wake up and am excited to begin my work. It doesn't matter if I'm working on budgets and other Executive Director-type tasks or developing educational content and teaching (my two favorite things); I can't wait to see what messages pop up in my inbox, be it Slack, email, or others. I love my job so much because the pyOpenSci community is extraordinary. + +This community is extraordinary because: + +People care about our organization's mission to help scientists make their science more open and collaborative. So they can solve the world's greatest challenges. +The community wants to help - be it each other or pyOpenSci as an organization--and people care. +The community is kind. They are kind in their words and kind in how they help each other. + +> I love the friendliness and positive energy around the combination of +> science+computing (in Python, too)! It's a lovely community of practice! +~ Titus Brown, Faculty - University of California, Davis, pyOpenSci community member. + +> As maintainers of the Scientific Python library, we see great potential in > pyOpenSci. Test code, documentation, and internationalization. These +> are things we have gradually accumulated know-how for in order to +> create a robust library on GitHub. Now, these are about to be integrated +> by the pyOpenSci project. +> ~ Tetsuo Koyama - PyVista maintainer + + +> I'm hopeful that the standards established by pyOpenSci will help +> alleviate the reproducibility crisis, increasing public trust in science, +> accelerating progress, and making all our jobs a little bit easier! +> ~Jackson Burns - DM about info + +> I love the educational aspect of pyOpenSci and how it focuses on removing the technical friction that prevents people from contributing to open source and open science. The community makes a conscious effort to create a welcoming culture and provide a safe place to learn for beginners. It helps prepare people for even bigger future contributions to the open science and open source movements. + +> ~Felipe Moreno - Tech Industry Professional + +> As a participant in the first packaging workshop, I found that individual attention and focus on success were outstanding. The organization and approach to teaching a scientist how to create a package helped build skills and ongoing productivity. +> +> Carol Willing, + +## Building a sustainability model for pyOpenSci so we can continue to thrive + +We now have strong evidence of a demand for the on-the-ground community and education work that pyOpenSci is doing. However, every non-profit organization (or fiscally sponsored project) has to ask is: + +How do we sustain this effort over time? + +You see, writing grants, while encouraged at universities, is not a sustainable business model. + +You spend months working on a grant that you have a 15-20% chance of actually getting. This requires time, and time requires money. But you also need money to survive. + +New grants often focus on funding new and innovative ideas rather than sustaining existing work. While innovation is valuable, maintaining open-source tools and educational resources is critical. As organizations and communities grow, the need to hire additional support increases, making sustainability more challenging. Unfortunately, most funding agencies do not prioritize maintenance. However, despite these challenges, pyOpenSci aims to build a sustainable model despite this challenge. + +As part of our sustainability model, we will offer paid online training events. In the same way that NumFocus runs PyData and SciPy meetings, we will run workshops and open science festivals . + +The first paid workshop we ran was an intro to packaging workshop. Our upcoming event is the inaugural pyOpenSci Fall Festival. + +The idea here is that we build and provide free online resources as a community service. We also offer support through our community. But we also offer more hands-on events that include training and, in our first experiment, office hours to troubleshoot outside of the programmed workshop. + +I love experiments, which might be why I've been able to build three programs to date. At home, I experiment with plants, starting seeds and propagating various plants using different methods. At work, I'm experimenting with a business model to see if we can sustain the incredible community effort that pyOpenSci has created. This experiment will show how pyOpenSci can sustain a training model. + +## What's next for pyOpenSci - The Road Ahead +Our upcoming projects and initiatives include launching our inaugural Fall Festival and developing BSSw lessons focused on collaborative Git and GitHub workflows for scientists. We’re also excited to share our visions for the future of pyOpenSci, emphasizing our commitment to fostering a vibrant community. The community has been central to pyOpenSci’s journey, and we are dedicated to continuing our efforts to grow and support it further. + + + - Reiterate the importance of the community in pyOpenSci's journey. + - Mention any planned efforts to grow or support the community further. + + +## Get involved with pyOpenSci + - Invite readers to get involved or support pyOpenSci in various ways. + - Provide links or contacts for further engagement. + +## About Me +My name is Leah, and I'm the executive director and founder of pyOpenSci. With over 20 years of experience in both academic and non-profit spaces, my career is dedicated to helping scientists overcome the challenges of open science. I've built and led two successful data science programs: + +1. **NEON Data Skills Program** at NEON +2. **Earth Analytics Program** at CU Boulder + +And i'm onw building **pyOpenSci** - a vibrant, active and diverse community of practice that supports open science and the open-source software that driving that science. + +The programs i build have consistently stayed at the cutting edge of technology through continual evaluation and a data-driven approach. Throughout my career, I've observed significant gaps between the innovative tools being developed and the training scientists receive, which has driven my work in bridging these gaps. \ No newline at end of file From ab9cfde85e7945fd9daba822cdc6bc2cc33b350e Mon Sep 17 00:00:00 2001 From: Leah Wasser Date: Thu, 22 Aug 2024 21:03:34 -0600 Subject: [PATCH 4/6] feat: 2 new posts --- .../2024-08-19-how-pyopensci-was-started.md | 146 ++++++------- ...-08-21-pyopensci-monumental-growth-2024.md | 192 +++++++++--------- 2 files changed, 169 insertions(+), 169 deletions(-) diff --git a/_posts/2024-08-19-how-pyopensci-was-started.md b/_posts/2024-08-19-how-pyopensci-was-started.md index b747e550..088b520b 100644 --- a/_posts/2024-08-19-how-pyopensci-was-started.md +++ b/_posts/2024-08-19-how-pyopensci-was-started.md @@ -19,7 +19,7 @@ comments: true
## TL;DR -* +*
I founded pyOpenSci in 2018. The idea was born from a fusion of frustration and inspiration. As someone deeply involved in teaching open science with Python and @@ -44,15 +44,15 @@ evolved into a thriving, inclusive community that is: * formally partnered with Astropy and the Journal of Open Source Software (JOSS) pyOpenSci is a vibrant community that has grown through persistence, collaboration, -and learning from successes and setbacks. +and learning from successes and setbacks. This blog post will overview how we got to where we are today. - -## The why behind creating pyOpenSci -- Concept and history -I've taught data science for a long time. When I built the [Data Skills program at NEON](TODO: LINK HERE), I focused on teaching R because it was the go-to language for ecologists. Later, when I created the Earth Analytics education program at CU Boulder, +## The why behind creating pyOpenSci -- Concept and history -I initially taught R but quickly realized that a significant portion of the earth science community used Python. Data I collected from industry and academic sources confirmed that Python was the most in-demand language for scientists seeking professional jobs +I've taught data science for a long time. When I built the [Data Skills program at NEON](TODO: LINK HERE), I focused on teaching R because it was the go-to language for ecologists. Later, when I created the Earth Analytics education program at CU Boulder, + +I initially taught R but quickly realized that a significant portion of the earth science community used Python. Data I collected from industry and academic sources confirmed that Python was the most in-demand language for scientists seeking professional jobs [TODO: add zenodo citation and link to the report and add results plot]. @@ -65,19 +65,19 @@ Transitioning the Earth Analytics program to Python deepened my understanding of Transitioning from teaching spatial earth data science with R to Python was difficult. The thousands of packages to select from to teach on PyPI felt overwhelming. I spent significant time deciding which ones to incorporate into our online, open curriculum. Once I found the right package, the next hurdle was learning: * how to use these packages effectively -* how to effectively teach them to beginners. +* how to effectively teach them to beginners. I selected packages carefully based on the package's: * ease of use -* quality of documentaiton +* quality of documentation * maintenance -### Python specific pain points that I experienced +### Python specific pain points that I experienced -Unfortunately, I often found the package documentation either too technical or missing, leaving me to figure out how to use the packages on my own. This process usually led to extensive dialogues with package maintainers as I sought to understand and clear up bugs. Learning how to process spatial data in Python made me feel like a beginner again. I could process spatial data with my eyes closed using R, Matlab and even ArcGIS / QGIS. +Unfortunately, I often found the package documentation either too technical or missing, leaving me to figure out how to use the packages on my own. This process usually led to extensive dialogues with package maintainers as I sought to understand and clear up bugs. Learning how to process spatial data in Python made me feel like a beginner again. I could process spatial data with my eyes closed using R, Matlab and even ArcGIS / QGIS. -What stood out to me during this transition was that I had to write more code using Python to do the same things I could do using less code in R. This was largely because R had a lot of "Wrapper" packages that made normal plotting ana anlayiss operations straight forward. +What stood out to me during this transition was that I had to write more code using Python to do the same things I could do using less code in R. This was largely because R had a lot of "Wrapper" packages that made normal plotting ana anlayiss operations straight forward. Combine the experience of writing more code with bugs and navigating the labyrinth of highly / not beginner-friendly technical package documentation left me frustrated.. This, in turn, resulted in my developing relationships with numerous package maintainers who sometimes even used our online lessons to support their documentation; this was an ideal synergy when it happened. @@ -85,7 +85,7 @@ Through these experiences, I realized that developing online lessons in Python f ### Creating my first Python package - EarthPy - to streamline spatial data processing -To address some of these challenges, I created EarthPy, a package designed to simplify standard spatial data processing and visualization tasks. At the time, creating a Python package seemed amorphous - I didn't know what best practices were and I certainly didn't know how to create a package. It was easy to learn in R as there was one way to do it. +To address some of these challenges, I created EarthPy, a package designed to simplify standard spatial data processing and visualization tasks. At the time, creating a Python package seemed amorphous - I didn't know what best practices were and I certainly didn't know how to create a package. It was easy to learn in R as there was one way to do it. I learned to build a Python package by mimicking the infrastructure used by GeoPandas, one of my favorite spatial libraries. The clip module from EarthPy was later upstreamed into GeoPandas (link to PR). @@ -95,46 +95,46 @@ EarthPy's marked the start of my deep dive into open-source software and the sci Based on my own experiences, I saw a demand for a community that could support scientists in both creating better packages with beginner-friendly and accessible documentation and finding high-quality packages that had maintainers committed to maintaining them and were well-built and documented. A modified version of the rOpenSci model would be invaluable to scientists in the vast Python ecosystem. -### Learning from and leveraging the work rOpenSci has done +### Learning from and leveraging the work rOpenSci has done I wanted pyOpenSci to learn from our friends at rOpenSci. After all, the true spirit of open science and open source is about building on each other's work. -rOpenSci was the first to pioneer software peer review processes, allowing scientists to get academic credit for improving software. Their work inspired me. However, I knew we needed to tailor the rOpenSci processes to support the unique needs of the scientific Python community. +rOpenSci was the first to pioneer software peer review processes, allowing scientists to get academic credit for improving software. Their work inspired me. However, I knew we needed to tailor the rOpenSci processes to support the unique needs of the scientific Python community. -This was particularly true when it came to packaging - Phew! +This was particularly true when it came to packaging - Phew! -A group even discussed the idea of pyOpenSci at the annual SciPy meeting one year. While I heard there was plenty of enthusiasm in the SciPy meeting room at the time, these ideas never gained traction. I suspect many people were unsure what a Python version of "OpenSci" would look like. +A group even discussed the idea of pyOpenSci at the annual SciPy meeting one year. While I heard there was plenty of enthusiasm in the SciPy meeting room at the time, these ideas never gained traction. I suspect many people were unsure what a Python version of "OpenSci" would look like. -### The R and Python communities are fundamentally different +### The R and Python communities are fundamentally different -In my experience, having taught and used both R and Python, this is because the two communities are quite different. The Python community spans numerous applications from web development to xxxxx. Its science part includes many domain-specific sub-communities, with Astropy being the most developed in terms of age and governance / structure. +In my experience, having taught and used both R and Python, this is because the two communities are quite different. The Python community spans numerous applications from web development to xxxxx. Its science part includes many domain-specific sub-communities, with Astropy being the most developed in terms of age and governance / structure. Because of this: -* There are many different ways to do one thing in Python. In fact, even installing Python presents many options (Conda vs python.org vs...). This choice is valued in the Python community, but it's also a challenge for beginners. +* There are many different ways to do one thing in Python. In fact, even installing Python presents many options (Conda vs python.org vs...). This choice is valued in the Python community, but it's also a challenge for beginners. * There are thousands of packages on PyPI (the packaging index from which you can get packages). It can be hard to figure out which one is the best, which is why, in part, we started a peer review of Sofwta (more on that below). -* Python is used much more broadly for many different applications beyond +* Python is used much more broadly for many different applications beyond science. * Python has many more approaches and complexities associated with packaging. -* Python is more often used as a "glue" language, meaning it's common for - scientists to have compiled C and other language extensions in their Python +* Python is more often used as a "glue" language, meaning it's common for + scientists to have compiled C and other language extensions in their Python code and packages. * The Python community is larger and generally more dispersed. -* There is not a single core decision-making body within the Python ecosystem. Sure, there are core Python developers who work on making Python the awesome language it is, but... +* There is not a single core decision-making body within the Python ecosystem. Sure, there are core Python developers who work on making Python the awesome language it is, but... ## Step 1: Early pyOpenSci community meetings - Building pyOpenSci To try to build momentum around pyOpenSci, I began by holding community meetings. The first few meetings in 2018 were small and comprised of myself and a few others. Chris Holdgraf, now the Executive Director of [2i2c](https://2i2c.org), was instrumental in the early days and helped me run two community events at meetings (more on that below). We'd also get incredible folks like Filipe Fernandes—a [conda-forge](https://conda-forge.org) maintainer who has since joined our editorial team—and folks from projects like [rOpenSci](https://ropensci.org), who reviews R packages, the [Journal of Open Source Software](https://joss.theoj.org), which reviews and publishes software providing academic credit for any software with a research application, and the [Software Sustainability Institute](https://software.ac.uk). -As weeks passed and we continued to meet, friends told other friends, and our core crew began +As weeks passed and we continued to meet, friends told other friends, and our core crew began to grow ([link to early meeting notes]()). - -We slowly built up momentum. -Meetings became increasingly productive, discretely focusing on developing a proof-of-concept scientific Python software peer review process. +We slowly built up momentum. + +Meetings became increasingly productive, discretely focusing on developing a proof-of-concept scientific Python software peer review process. Discussions included: @@ -149,66 +149,66 @@ joint activities, help each other with challenges, and share information. ### 2. Developing a Python-specific software Peer Review Process: -In many initial meetings, we discussed ways to create a truly Python-centric pyOpenSci peer review process to better support high-quality scientific Python software. The goal was to create a transparent, constructive, non-adversarial review system and guidelines around creating a package. A community-run peer review process would slowly elevate the quality and standards of Python packages over time while making it easier for scientists to find the quality tools they need. And, of course, it was important that the software that we reviewed would be maintained over time and documented in a way that helped beginners harness the full potential of each tool without too much struggle. +In many initial meetings, we discussed ways to create a truly Python-centric pyOpenSci peer review process to better support high-quality scientific Python software. The goal was to create a transparent, constructive, non-adversarial review system and guidelines around creating a package. A community-run peer review process would slowly elevate the quality and standards of Python packages over time while making it easier for scientists to find the quality tools they need. And, of course, it was important that the software that we reviewed would be maintained over time and documented in a way that helped beginners harness the full potential of each tool without too much struggle. ### 3. Collaborating with Journal of Open Source Software (JOSS) -Collaboration with the JOSS was a recurring theme too. We wanted to partner with JOSS to allow someone who went through our peer review process to get academic credit for their work. +Collaboration with the JOSS was a recurring theme too. We wanted to partner with JOSS to allow someone who went through our peer review process to get academic credit for their work. Why is academic credit so important? -You see, in academic traditionally you can get credit for writing peer reviewed papers . While i'm a deep advocate of scientifci research, there are a lot of problems with a system that only values highly technical papers that only other scientists can understand. Related to open source software, this means that the scientists don't get actual "credit" for high quality software that is needed to make data processing more efficent and more open. +You see, in academic traditionally you can get credit for writing peer reviewed papers. While I'm a deep advocate of scientific research, there are a lot of problems with a system that only values highly technical papers that only other scientists can understand. Related to open source software, this means that the scientists don't get actual "credit" for high quality software that is needed to make data processing more efficient and more open. -Frankly, this lack of credit for important work that is driving open science - system stinks. +Frankly, this lack of credit for important work that is driving open science - system stinks. JOSS is a journal that reviews software and when accepted, provides a cross-ref enabled DOI. This is different than a DOI you'd get by linking your GitHub repo to a platform like Zenodo . A cross-ref DOi is connected to a scientist's OrcidID, which is their unique identifier. What does this mean? -It means actual academic credit as a "publication" for the hard work of creating a research-focused open source software tool. +It means actual academic credit as a "publication" for the hard work of creating a research-focused open source software tool. -However, pyOpenSci reviews software, our goals are different than those of JOSS. +However, pyOpenSci reviews software, our goals are different than those of JOSS. we care about the python specific packaging painpoints. As such we are developing review guideblines for what makes a sicentific Python software good -we care about long term maintenance of sofwtare. While JOSS will publish a paper, they don't necessarily engage with the maintainer or suppor the maintinaer after. As a community of practice, we do -The partnership aimed to streamline the submission and review process across both organizations so pythonista could harness the python specific review process and also post review support of the communiy while also getting academic credit for their work. +we care about long term maintenance of software. While JOSS will publish a paper, they don't necessarily engage with the maintainer or support the maintainer after. As a community of practice, we do +The partnership aimed to streamline the submission and review process across both organizations so pythonista could harness the python specific review process and also post review support of the community while also getting academic credit for their work. -In short - You can submit a package to pyOpenSci; we will review it, and if it's in scope for JOSS< then you can become accepted by JOSS, too. They take our review and only review your software's paper. +In short - You can submit a package to pyOpenSci; we will review it, and if it's in scope for JOSS< then you can become accepted by JOSS, too. They take our review and only review your software's paper. This partnership is a true win/win for JOSS and us. It provides a structured pathway for scientific software developers to earn academic credit for their work while also gaining visibility and community support from pyOpenSci. ### 4. Challenges and Strategic Goals -Some of the biggest challenges in peer review revolved around project maintenance. So many scientific Python tools are maintained by one person. We wanted to ensure that the pyOpenSci software ecosystem represented maintained tools that scientists could trust. This meant thinking hard about what happened to a package after it was reviewed. +Some of the biggest challenges in peer review revolved around project maintenance. So many scientific Python tools are maintained by one person. We wanted to ensure that the pyOpenSci software ecosystem represented maintained tools that scientists could trust. This meant thinking hard about what happened to a package after it was reviewed. -How could we support maintainers in updating their packages over time? +How could we support maintainers in updating their packages over time? -We knew that this type of effort would require some funding support. Strategic goals included expanding the community's reach, increasing engagement through events, and securing sustainable funding. +We knew that this type of effort would require some funding support. Strategic goals included expanding the community's reach, increasing engagement through events, and securing sustainable funding. ### 5. Holding pyOpenSci events and connecting with the community -We also wanted to get the word out about pyOpenSci to encourage new package submissions, and to grow our editorial and reviewer base. After all, at the time, we were just a small group of scientists talking about this community. We discussed holding events at meetings such as SciPy and AGU . And we discussed holding maintainer sprints It's funny to look back at those early meetings, now that we are actually doing all of the things we talked about back then and more! +We also wanted to get the word out about pyOpenSci to encourage new package submissions, and to grow our editorial and reviewer base. After all, at the time, we were just a small group of scientists talking about this community. We discussed holding events at meetings such as SciPy and AGU . And we discussed holding maintainer sprints It's funny to look back at those early meetings, now that we are actually doing all of the things we talked about back then and more! -Even then, we knew that pyOpenSci was about more than reviewing software. It was about supporting science and getting more scientists involved. +Even then, we knew that pyOpenSci was about more than reviewing software. It was about supporting science and getting more scientists involved. -We launched software peer review formally in 2019. We initially identified a package to review that was internal to our team—as a prototype. We even tested out the peer-mentor review approach, pairing someone newer to peer review with someone more seasoned to see how it would go. +We launched software peer review formally in 2019. We initially identified a package to review that was internal to our team—as a prototype. We even tested out the peer-mentor review approach, pairing someone newer to peer review with someone more seasoned to see how it would go. From there, things took off. Especially as I began to travel to scientific meetings and promote the work. More on that below ## Understanding the community's needs and interests interest: outreach at conferences 2019-2021 -Before fully launching pyOpenSci, I trusted my professional instincts that others in the scientific Python ecosystem faced similar challenges to those my students and I encountered. However, I needed evidence from the community to justify pursuing funding for pyOpenSci. I needed the community to tell me what they needed so I strategically build pyOpenSci to file down those pain points. +Before fully launching pyOpenSci, I trusted my professional instincts that others in the scientific Python ecosystem faced similar challenges to those my students and I encountered. However, I needed evidence from the community to justify pursuing funding for pyOpenSci. I needed the community to tell me what they needed so I strategically build pyOpenSci to file down those pain points. To do this, I held several community meetings between 2019 and 2021, including sessions at the SciPy and AGU conferences. By holding community events at SciPy and AGU, I was able to reach diverse communities to understand their needs. While both communities shared an interest in scientific Python, their focus areas differed * SciPy attendees are more software-centric -* AGU attendees are generally more science focused with deep roots in the earth and environmental sciences. +* AGU attendees are generally more science focused with deep roots in the earth and environmental sciences. Getting input from both the scientific and the scientific Python communities was invaluable in shaping pyOpenSci's direction and ensuring that our efforts aligned with the needs of both software developers and scientists. ### SciPy Meeting 2019 & 2021: A Filled Room and a Lively Discussion Around Peer Review of Scientific Software -In 2019, we held our very first pyOpenSci event—a Birds of a Feather (BoF) session at the SciPy meeting in Austin, Texas. It was me, Chris Holdgraf and Jenny Palomino leading the session. The second event was virtual and co-hosted by the wonderful, David Nicholson. +In 2019, we held our very first pyOpenSci event—a Birds of a Feather (BoF) session at the SciPy meeting in Austin, Texas. It was me, Chris Holdgraf and Jenny Palomino leading the session. The second event was virtual and co-hosted by the wonderful, David Nicholson. link - more about scipy - link to 2024 blog @@ -217,45 +217,45 @@ During these events, the goal was to engage the scientific Python community abou What is a BoF? A bof is an informal meeting where participants with similar interests gather to discuss a specific topic, often leading to valuable insights and collaborations. If you've been to PyCon before, the Open Space structure is similar to SciPy Bof sessions {: .notice } -Both SciPy BoFs were well-attended with atleast 30-40 people in the room each time. The discussions centered around pyOpenSci's peer review process and the community's pain points. These sessions helped us gauge the community's needs and interests, which were crucial in shaping our initiatives. +Both SciPy BoFs were well-attended with at least 30-40 people in the room each time. The discussions centered around pyOpenSci's peer review process and the community's pain points. These sessions helped us gauge the community's needs and interests, which were crucial in shaping our initiatives. ## 2019 AGU (American Geophysical Union) Town Hall -In 2019 and again in 2021, I held town halls at the massive AGU meeting. My friend and long time colleage [Chris Holdgraf](https://github.com/choldgraf) - -agreed to co-lead the very first in person town hall with me, which was a lot -of fun! We had well over 60 people in the room. At that time, the incredible organization 2i2c was still just a -vision, with efforts underway to make it a reality. And look where it is now. +In 2019 and again in 2021, I held town halls at the massive AGU meeting. My friend and long time colleague [Chris Holdgraf](https://github.com/choldgraf) -If you haven't been to AGU before, it's a huge (20,000-25.000 person) international conference. Given my background in earth and environmental science -and remote sensing, this meeting had long been my absolute favorite. It was -where "my people" were—where I could talk for days about sensors and remote +agreed to co-lead the very first in person town hall with me, which was a lot +of fun! We had well over 60 people in the room. At that time, the incredible organization 2i2c was still just a +vision, with efforts underway to make it a reality. And look where it is now. + +If you haven't been to AGU before, it's a huge (20,000-25.000 person) international conference. Given my background in earth and environmental science +and remote sensing, this meeting had long been my absolute favorite. It was +where "my people" were—where I could talk for days about sensors and remote sensing. -The AGU meeting also has a strong bioinformatics track. The town hall -resulted in a full room of geoscientists who cared about Python. +The AGU meeting also has a strong bioinformatics track. The town hall +resulted in a full room of geoscientists who cared about Python. -This experience reinforced that pyOpenSci was not only needed but wanted -within the scientific Python community. From there, our peer review process +This experience reinforced that pyOpenSci was not only needed but wanted +within the scientific Python community. From there, our peer review process began to grow. In 2019, I also hosted a town hall at the massive AGU (American Geophysical Union) meeting. My long-time colleague and friend, [Chris Holdgraf](https://github.com/choldgraf), co-led the session with me, which was a lot of fun! At the time, 2i2c, the incredible organization Chris would go on to lead, was still in its early stages of becoming a reality. -AGU is a huge international conference with a geoscience focus, aligning closely with my earth and environmental science and remote sensing background. The AGU meeting has always been my favorite—I could connect with "my people" and talk for days about sensors and remote sensing. This town hall was important because the audience is quite different from that at sciPy. At SciPy you meet a lot of maintianers and tool developers. While there are beginning pythonistas there, the audience tends to be more technically focused. AGU, on the other hand, is this lovely mixture of earth scientists, geosceintists and also some open source and bioinformatcs folks. +AGU is a huge international conference with a geoscience focus, aligning closely with my earth and environmental science and remote sensing background. The AGU meeting has always been my favorite—-I could connect with "my people" and talk for days about sensors and remote sensing. This town hall was important because the audience is quite different from that at sciPy. At SciPy you meet a lot of maintainers and tool developers. While there are beginning Pythonistas there, the audience tends to be more technically focused. AGU, on the other hand, is this lovely mixture of earth scientists, geosceintists and also some open source and bioinformatcs folks. -This can be clearly seen in the data we colected -at scipy over 80% of bof attendees were maintainers or people who had contributed to open source before compared to XX % at agu. - +This can be clearly seen in the data we collected +at SciPy over 80% of bof attendees were maintainers or people who had contributed to open source before compared to XX % at agu. + The AGU town hall attracted a full room of geoscientists who were passionate about Python, reinforcing that pyOpenSci was not only needed but also wanted within the scientific Python community. The feedback and insights from this event further fueled the growth of our peer review process. -### Outcomes from the early meetings +### Outcomes from the early meetings what did people need and want -include quotes and a plto or two. +include quotes and a plto or two. > * clarify python packaging. Too many different mechanisms floating around... @@ -264,20 +264,20 @@ include quotes and a plto or two. > * Training for people who can code for themselves, but want to start developing software for others. Style, documentation, testing, got, etc. -## Getting funding -* applied to Sloan - etter software for science -* got funding - it was a ahrd time - king soopers shooting... -* decided to leave academia and pursue what makes me happy - community work. +## Getting funding +* applied to Sloan - etter software for science +* got funding - it was a ahrd time - king soopers shooting... +* decided to leave academia and pursue what makes me happy - community work. -the rest is history.... +the rest is history.... -## **pyOpenSci Today** +## **pyOpenSci Today** - **Joining pyOpenSci**: A primer on how individuals can contribute to and engage with pyOpenSci, including practical steps for getting involved. -**Community Feedback and Needs**: - Collating a comprehensive summary of community expectations. - Insight into how these expectations steered the project towards its current approach. +**Community Feedback and Needs**: - Collating a comprehensive summary of community expectations. - Insight into how these expectations steered the project towards its current approach. @@ -290,7 +290,7 @@ I've always trusted by professional gut when it comes to building new programs. * **Open Licensing Challenges**: These are particularly relevant for those working at agencies or corporations with licensing policies that do not fully embrace open source principles. * **packaging challenges**: -* **Peer Review Partnership**: Astropy members were present, and they were developing their own peer review process at the time. We spent some time talking about what would happen after the review ends in terms of tracking package maintenance over time. +* **Peer Review Partnership**: Astropy members were present, and they were developing their own peer review process at the time. We spent some time talking about what would happen after the review ends in terms of tracking package maintenance over time. + - diff --git a/_posts/2024-08-21-pyopensci-monumental-growth-2024.md b/_posts/2024-08-21-pyopensci-monumental-growth-2024.md index 63f80b3c..3c07bd04 100644 --- a/_posts/2024-08-21-pyopensci-monumental-growth-2024.md +++ b/_posts/2024-08-21-pyopensci-monumental-growth-2024.md @@ -16,43 +16,43 @@ comments: true --- ## It's been two years since I started working full-time on pyOpenSci -As of September 1, 2024, I have been working full-time at pyOpenSci for two years, thanks to funding from the [Sloan Foundation](https://sloan.org/) and [CZI (Chan Zuckerberg Initiative)](https://chanzuckerberg.com/). pyOpenSci has come SO FAR in two years. +As of September 1, 2024, I have been working full-time at pyOpenSci for two years, thanks to funding from the [Sloan Foundation](https://sloan.org/) and [CZI (Chan Zuckerberg Initiative)](https://chanzuckerberg.com/). pyOpenSci has come SO FAR in two years. -It's time to take a breath and celebrate everything that the pyOpenSci community has accomplished in the past two years. +It's time to take a breath and celebrate everything that the pyOpenSci community has accomplished in the past two years. -Before we move on to the next big thing—our pyOpenSci Fall Festival (more on that below)—I want to take a moment to reflect on: +Before we move on to the next big thing—our pyOpenSci Fall Festival (more on that below)—I want to take a moment to reflect on: -* where we've been, -* what we've accomplished, +* where we've been, +* what we've accomplished, * the incredible community of practice that we've built. -I'll wrap up by discussing what's next for pyOpenSci. +I'll wrap up by discussing what's next for pyOpenSci. ## How I created pyOpenSci -In 2018, I founded pyOpenSci out of a combination of inspiration with a splash -of frustration encountered while teaching open science approaches to scientists in Python. Despite Python's power and popularity, I noticed a gap in community support compared to the R ecosystem. This gap inspired me to think about ways to make the Python ecosystem more accessible to and supportive of scientists trying to share their workflows. +In 2018, I founded pyOpenSci out of a combination of inspiration with a splash +of frustration encountered while teaching open science approaches to scientists in Python. Despite Python's power and popularity, I noticed a gap in community support compared to the R ecosystem. This gap inspired me to think about ways to make the Python ecosystem more accessible to and supportive of scientists trying to share their workflows. -My experiences teaching and working in the Python ecosystem, -inspired me to establishing a vibrant, inclusive community of practice. This +My experiences teaching and working in the Python ecosystem, +inspired me to establishing a vibrant, inclusive community of practice. This community would be driven to develop and encourage open science best practices. -And also to fill in knowledge gaps that scientists encounter when trying to make their science open and reproducible. +And also to fill in knowledge gaps that scientists encounter when trying to make their science open and reproducible. -From humble beginnings characterized by 3-4 person community meetings, pyOpenSci has grown into a thriving community, marked by a robust editorial team, hundreds of contributors, and numerous valuable community partners and friends. Our peer review process has seen over 50 packages; we've accepted 35 and have 17 packages in [active stages of review](https://github.com/orgs/pyOpenSci/projects/7) as I write this post. +From humble beginnings characterized by 3-4 person community meetings, pyOpenSci has grown into a thriving community, marked by a robust editorial team, hundreds of contributors, and numerous valuable community partners and friends. Our peer review process has seen over 50 packages; we've accepted 35 and have 17 packages in [active stages of review](https://github.com/orgs/pyOpenSci/projects/7) as I write this post. -This evolution underscores my commitment to building this vibrant community of practice and making open science practices and Python more accessible to scientists. +This evolution underscores my commitment to building this vibrant community of practice and making open science practices and Python more accessible to scientists. [ Learn more about how pyOpenSci started ](/blog/how-pyopensci-got-started.html) {: .button } -### What is pyOpenSci? +### What is pyOpenSci? -pyOpenSci's mission is to create a community of practices that helps scientists make their science more open and collaborative. We empower scientists with the skills and knowledge to create efficient open and shared data processing and analysis workflows to process open science best practices. We enable scientists to share and reuse their code through packaging. Our goal is for scientists to spend less time fighting with code and more time tackling the world's most significant challenges. +pyOpenSci's mission is to create a community of practices that helps scientists make their science more open and collaborative. We empower scientists with the skills and knowledge to create efficient open and shared data processing and analysis workflows to process open science best practices. We enable scientists to share and reuse their code through packaging. Our goal is for scientists to spend less time fighting with code and more time tackling the world's most significant challenges. We do this by: -* **Creating online open education resources** that help scientists implement open science best practices. Over the past two years, this work has included helping scientists with the skills needed to package their code in a way that can be shared and reused across workflows. It also includes using Git and GitHub to enhance open, collaborative workflows and ensure versions. -* **Running training events** that help scientists discover new tools for reproducibly sharing their code, workflows, and discoveries; we also teach open science best practices. +* **Creating online open education resources** that help scientists implement open science best practices. Over the past two years, this work has included helping scientists with the skills needed to package their code in a way that can be shared and reused across workflows. It also includes using Git and GitHub to enhance open, collaborative workflows and ensure versions. +* **Running training events** that help scientists discover new tools for reproducibly sharing their code, workflows, and discoveries; we also teach open science best practices. * **Running an open software peer review process** that helps scientists make and find better software to support their work. * **Partnering with other open science and Python communities** to leverage knowledge and effort. @@ -66,15 +66,15 @@ We do this by: -### pyOpenSci and iterative, data-driven program design +### pyOpenSci and iterative, data-driven program design -PyOpenSci's development and design have been data-driven from the start. I started collecting data about community pain points back in 2019. And today I have -quotes and word clouds and other valuable insights collected from community +PyOpenSci's development and design have been data-driven from the start. I started collecting data about community pain points back in 2019. And today I have +quotes and word clouds and other valuable insights collected from community members at meetings such as: -* the US Research Software Engineer (USRSE) RSE, -* SciPy, and -* AGU (American Geophysical ophiycail Union). +* the US Research Software Engineer (USRSE) RSE, +* SciPy, and +* AGU (American Geophysical ophiycail Union).
@@ -84,16 +84,16 @@ members at meetings such as:
-The data that I've collected over the years, reveals vital pain points and gaps that scientists face when trying to process analyze and share their workflows. -This data directly informs the successful community that pyOpenSci has become today. +The data that I've collected over the years, reveals vital pain points and gaps that scientists face when trying to process analyze and share their workflows. +This data directly informs the successful community that pyOpenSci has become today.
**Survey question & responses:** "How could pyOpenSci help you with your science, code, and software?" -> -> -- 2019 AGU townhall +> +> -- 2019 AGU townhall > What are the best practices for sharing the code? > Streamline the development of good quality, socially responsible, and easily shareable software. @@ -101,13 +101,13 @@ This data directly informs the successful community that pyOpenSci has become to > Bullet-proof, well-documented packages for Earth science. Many earth scientists attend AGU. It's a very different crowd then who you meet -at the SciPy meetings. +at the SciPy meetings.
### pyOpenSci learned a lot from building a Python software peer review program -pyOpenSci's design is also based on our experiences developing the software peer review guidelines for Python packages. We [interact with scientific software maintainers](https://pyopensci.discourse.group/t/api-reference-building-locally-but-not-on-rth-missing-path/368/7) - who are often more scientists than developers - -from around often. +pyOpenSci's design is also based on our experiences developing the software peer review guidelines for Python packages. We [interact with scientific software maintainers](https://pyopensci.discourse.group/t/api-reference-building-locally-but-not-on-rth-missing-path/368/7) - who are often more scientists than developers - +from around often. As we developed our [peer review guide]((https://www.pyopensci.org/software-peer-review/)), it became clear that a beginner-friendly packaging guide was essential to support scientists in sharing their code. This is because [our pre-review software checks](https://www.pyopensci.org/software-peer-review/how-to/editor-in-chief-guide.html#editor-checklist-template) require basic package infrastructure. We wanted to set scientists up for success. We want to be clear about what that packaging infrastructure is. @@ -117,13 +117,13 @@ As we developed our [peer review guide]((https://www.pyopensci.org/software-peer **Survey question & responses:** "How could pyOpenSci help you with your science, code, and software?" -> -> -- 2019 AGU townhall +> +> -- 2019 AGU townhall > AGU 2019: Training for people who can code for themselves but want to start developing software for others. Topics include style, documentation, testing, git, etc. -#### Helping scientists navigate a complex and difficult-to-understand Python packaging ecosystem +#### Helping scientists navigate a complex and difficult-to-understand Python packaging ecosystem The packaging ecosystem has evolved rapidly. Numerous tools and approaches are available to create Python packages. Further, recent changes to ecosystem standards have led to an explosion of packaging tools like [Hatch](https://hatch.pypa.io/latest/), [Flit](https://flit.pypa.io/en/stable/), [PDM](https://pdm.fming.dev/latest/), and [Poetry](https://python-poetry.org/) with other tools like Pixi and Rye also on the horizon. Scientists often feel overwhelmed by the sheer number of options and have begged for clear guidance for years. @@ -131,57 +131,57 @@ The packaging ecosystem has evolved rapidly. Numerous tools and approaches are a QUESTION: "How could pyOpenSci help you with your science, code, and software?" -> +> > -- 2021 SciPy BoF > **clarify Python packaging. There are too many different mechanisms floating around...** -There are some excellent, more advanced guidebooks and tutorials available now, such as [PyPA's packaging tutorial](https://packaging.python.org/tutorials/) and the [scientific Python development guide](add link). However, our resources serve a different audience. +There are some excellent, more advanced guidebooks and tutorials available now, such as [PyPA's packaging tutorial](https://packaging.python.org/tutorials/) and the [scientific Python development guide](add link). However, our resources serve a different audience. -1. We want to ensure that our resources don't require foundational knowledge that scientists don't usually have. +1. We want to ensure that our resources don't require foundational knowledge that scientists don't usually have. 2. We want to avoid burdening scientists with decisions about packaging concepts they don't fully understand, such as selecting a build backend. -From a beginner's perspective, every decision point is a potential opportunity to go down the wrong path, adding cognitive load. +From a beginner's perspective, every decision point is a potential opportunity to go down the wrong path, adding cognitive load. - + I knew that pyOpenSci could make the packaging journey more straightforward for scientists. I also knew there was a strong need to file down packaging and open science thorns. -If you want to learn more, my [talk at PyCon dove into the challenges of too many options and cognitive overload; I wrote about it here.](/blog/python-packaging-friends-dont-let-friends-package-alone.html) +If you want to learn more, my [talk at PyCon dove into the challenges of too many options and cognitive overload; I wrote about it here.](/blog/python-packaging-friends-dont-let-friends-package-alone.html) ### pyOpenSci guided the community towards a single way to create a Python package in under a year In just under a year, we created a comprehensive packaging guidebook and a set of end-to-end Python packaging / share your code tutorials that walk scientists through creating a package and publishing it to both [PyPI](https://pypi.org/) and [Conda-Forge](https://conda-forge.org/) using [Hatch](https://hatch.pypa.io/). Together, the pyOpenSci community built consensus around which packaging approaches should be adopted as best practices. -[Check out the pull requests ](https://github.com/pyOpenSci/python-package-guide/pulls?q=is%3Apr+sort%3Acomments-desc+is%3Aclosed) if you're curious about the discussions. The sheer volume of comments on some of the early PRs associated with packaging build tools speaks to the various issues, complexity, and decisions we needed to make. +[Check out the pull requests ](https://github.com/pyOpenSci/python-package-guide/pulls?q=is%3Apr+sort%3Acomments-desc+is%3Aclosed) if you're curious about the discussions. The sheer volume of comments on some of the early PRs associated with packaging build tools speaks to the various issues, complexity, and decisions we needed to make. ## **Building Python packaging consensus and developing the pyOpenSci Python packaging guidebook** -The success of our Python packaging guidebook is due to extensive community input, -focusing contributors on the guidebook goals which was to make the Python packaging accessible to beginners and scientists who didn't want to become packaging experts, and our intensive community review process that includes input from: +The success of our Python packaging guidebook is due to extensive community input, +focusing contributors on the guidebook goals which was to make the Python packaging accessible to beginners and scientists who didn't want to become packaging experts, and our intensive community review process that includes input from: * **Packaging tool maintainers:** We asked each maintainer from Flit, PDM, Hatch, and Poetry to provide feedback on our overviews of their tools * **[PyPA](https://www.pypa.io/en/latest/) members** who have already developed packaging resources that serve the broader Python community * **Core scientific Python community members** who are maintaining tools like Matplotlib, Numpy, and Pandas that require more technical complex builds -* **Scientists with varying levels of packaging expertise:** This group is most important as packaging beginners provide the lens of what is confusing and ensure that the technical content is more beginner-friendly. +* **Scientists with varying levels of packaging expertise:** This group is most important as packaging beginners provide the lens of what is confusing and ensure that the technical content is more beginner-friendly. The truly collaborative effort of creating the Python packaging guidebook resulted in a beginner-friendly and accurate guide that the pyOpenSci community now maintains and continuously updates. -Our packaging guide provides an overview of the Python packaging ecosystem to support scientists who want to understand what all the packaging tools and approaches do; they want to decide on their own which tools best serve their needs. We also include sections that define core terms that most scientists need to learn as they appear often in online documentation, such as: +Our packaging guide provides an overview of the Python packaging ecosystem to support scientists who want to understand what all the packaging tools and approaches do; they want to decide on their own which tools best serve their needs. We also include sections that define core terms that most scientists need to learn as they appear often in online documentation, such as: * [build backend](https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-build-tools.html#build-back-ends) * [build frontend](https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-build-tools.html#python-package-build-front-ends) -* [wheel](https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-distribution-files-sdist-wheel.html#wheel-whl-files) -* [sDist](https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-distribution-files-sdist-wheel.html#source-distribution-sdist) +* [wheel](https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-distribution-files-sdist-wheel.html#wheel-whl-files) +* [sDist](https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-distribution-files-sdist-wheel.html#source-distribution-sdist) -The goal of the Python Packaging Guide is to translate--to help scientists understand the base language around packaging. Our Python Packaging Guide will clarify and file down the packaging thorns over time. +The goal of the Python Packaging Guide is to translate--to help scientists understand the base language around packaging. Our Python Packaging Guide will clarify and file down the packaging thorns over time.
Image of the pyOpenSci package guide review process. There are three main boxes on the slide labeled 'expert feedback,' 'community review,' and 'sprints and bug bashes.' The top of the image is titled 'The Power of Community Review.'
pyOpenSci engages people from all parts of the Python community, with all levels of expertise, in our packaging guide review process. Every page in our Python packaging guide has gone through extensive community review to ensure that it is 1) beginner friendly, 2) accurate and 3) up to date.
-### Creating opinionated Python packaging tutorials +### Creating opinionated Python packaging tutorials More often than not, scientists (and packaging beginners) just want to get the job done. They don't want to become packaging experts. @@ -190,78 +190,78 @@ They want to create a Python package and do their important work more quickly. A > I just want to create a Python package. Where is the tutorial or > documentation that teaches me how to do that? -I have heard this statement from dozens of scientists and non-science Pythonistas in the past two years. And because of this sentiment, pyOpenSci created opinionated Python packaging tutorials that guides users through the entire packaging process, from [creating a package](https://www.pyopensci.org/python-package-guide/tutorials/installable-code.html) to publishing it on [PyPI](https://www.pyopensci.org/python-package-guide/tutorials/publish-pypi.html) and [conda-forge](https://www.pyopensci.org/python-package-guide/tutorials/publish-conda-forge.html). -By providing clear, opinionated, step-by-step instructions, pyOpenSci has reduced the cognitive load for scientists who want to share their code. +I have heard this statement from dozens of scientists and non-science Pythonistas in the past two years. And because of this sentiment, pyOpenSci created opinionated Python packaging tutorials that guides users through the entire packaging process, from [creating a package](https://www.pyopensci.org/python-package-guide/tutorials/installable-code.html) to publishing it on [PyPI](https://www.pyopensci.org/python-package-guide/tutorials/publish-pypi.html) and [conda-forge](https://www.pyopensci.org/python-package-guide/tutorials/publish-conda-forge.html). +By providing clear, opinionated, step-by-step instructions, pyOpenSci has reduced the cognitive load for scientists who want to share their code.
Our opinionated Python packaging tutorials demonstrate 1 way to create a Python package using modern packaging best practices. This graphic represents the steps that a user needs to understand to make their code installable and create a basic Python package.
- -These tutorials went through the same community development and review process as the rest of our Python packaging guidebook. We have also begun teaching the lessons with high success rates. We taught the lessons several times and plan to continue teaching them, especially as we build out our training sustainability model (more on that below). -### Teaching online lessons is the best way to ensure they stay current +These tutorials went through the same community development and review process as the rest of our Python packaging guidebook. We have also begun teaching the lessons with high success rates. We taught the lessons several times and plan to continue teaching them, especially as we build out our training sustainability model (more on that below). + +### Teaching online lessons is the best way to ensure they stay current I have created hundreds of [open online lessons](https://www.leahwasser.com/my-path-to-open-education-earth-environmental-data-science) both for ecologists [NEON](https://www.neonscience.org/resources/learning-hub/teaching-modules/quantifying-drivers-and-impacts-natural-disturbance-events) and [earth and environmental scientists](https://www/earthdatascience.org). One of the biggest challenges is that it's easy for data science lessons to become dated quickly--especially in the rapidly evolving data science space. By teaching the lessons, we can update them regularly as the ecosystem evolves. We also often have users review the lessons at our [annual sprint events](blog/pyopensci-pyconus-2024-sprints.html) to test them out; more on pyOpenSci beginner-friendly sprints below. -**TODO:** add quotes from people on the guidebook. -**TODO:** Add two sentences on the growth— both the web growth and maybe a quote from an email I've received. +**TODO:** add quotes from people on the guidebook. +**TODO:** Add two sentences on the growth— both the web growth and maybe a quote from an email I've received. ### The power of community: Translating the guide & tutorials to other languages -The success of our packaging guidebook has been remarkable, thanks to the tremendous input and feedback from the community. What began as a simple guide has evolved into a collaborative project, with enthusiastic participation from contributors worldwide. At our last PyCon sprint, [Felipe Moreno](https://www.github.com/flpm), a new contributor at the time, took the initiative to set up the translation infrastructure, sparking significant momentum that has since transformed the guidebook into a truly global resource. +The success of our packaging guidebook has been remarkable, thanks to the tremendous input and feedback from the community. What began as a simple guide has evolved into a collaborative project, with enthusiastic participation from contributors worldwide. At our last PyCon sprint, [Felipe Moreno](https://www.github.com/flpm), a new contributor at the time, took the initiative to set up the translation infrastructure, sparking significant momentum that has since transformed the guidebook into a truly global resource. This translation process has taken on a life of its own, with over XX pull requests already submitted. pyOpenSci community members are now actively translating our Python packaging guide into Spanish and Japanese, with the exciting possibility of pyOpenSci lessons being taught at PyCon Japan next year once the Japanese translation is complete. This entire effort underscores the power of community when guided in the right direction, showcasing how collective effort can drive meaningful progress. -> This entire effort underscores the power of community when guided in -> the right direction, showcasing how collective effort can drive +> This entire effort underscores the power of community when guided in +> the right direction, showcasing how collective effort can drive > meaningful progress. {: .highlight-quote } -## Using Sphinx as a translation tool for our Python packaging guide--Internationalization +## Using Sphinx as a translation tool for our Python packaging guide--Internationalization Felipe set up flexible ttranslation infrastructure using a Sphinx extension, allowing contributors to translate as much or as little of the guidebook as they wish at any time. The infrastructure also runs so that as we update the English versions of the guidebook, the translation extension will identify new and revised text that needs to be translated. The community's response has been overwhelmingly positive, with about 50% of the Spanish translation already covered (though unpublished) and work on the Japanese translation well underway. Remarkably, this entire translation effort is unfunded and entirely community-led, a testament to the dedication and passion of the pyOpenSci community. -Translation in our context refers to converting text from one language to another to make the content accessible to a broader audience. Internationalization (i18n) is the process of designing and developing infrastructure to be easily adapted to various languages and regions. Together, these practices enable global accessibility and usability of the pyOpenSci online education resources, including our packaging guide. +Translation in our context refers to converting text from one language to another to make the content accessible to a broader audience. Internationalization (i18n) is the process of designing and developing infrastructure to be easily adapted to various languages and regions. Together, these practices enable global accessibility and usability of the pyOpenSci online education resources, including our packaging guide. {: .notice } -## pyOpenSci at PyCon and SciPy 2024 -- sprints, talks and new contributors +## pyOpenSci at PyCon and SciPy 2024 -- sprints, talks and new contributors -Our engagement at SciPy and PyCon this year marked a significant leap forward from last year. We had so much more engagement this year compared to last. +Our engagement at SciPy and PyCon this year marked a significant leap forward from last year. We had so much more engagement this year compared to last. **What is a community sprint?:** Community sprints are collaborative coding and documentation update sessions where new and experienced contributors work together on open-source projects. These sprints provide a supportive environment with guidance from project maintainers or experienced developers, helping participants contribute effectively. They are an excellent opportunity for learning, networking, and making meaningful contributions to the open-source community. [You can read more about that here.](https://www.pyopensci.org/blog/pyopensci-pyconus-2024-sprints.html) {: .notice } -We had many more people engaged and contributing to pyOpenSci this year than last. As I write this, many of our sprint participants have continued to contribute to pyOpenSci after the event—our focus on making sprints beginner-friendly paid off. Many first-time contributors helped pyOpenSci with various open issues on our help-wanted GitHub project board. This surge in participation and continued engagement underscores the growing momentum and impact of pyOpenSci. +We had many more people engaged and contributing to pyOpenSci this year than last. As I write this, many of our sprint participants have continued to contribute to pyOpenSci after the event—our focus on making sprints beginner-friendly paid off. Many first-time contributors helped pyOpenSci with various open issues on our help-wanted GitHub project board. This surge in participation and continued engagement underscores the growing momentum and impact of pyOpenSci. TODO: UPDATE NUMBERS HERE from https://github.com/orgs/pyOpenSci/projects/12 -| Meeting | total prs & issues submitted | total contributors | -|----------|----------|----------| +| Meeting | total prs & issues submitted | total contributors | +|----------|----------|----------| | PyCon 2023 | Item 2 | Item 3 | -| PyCon 2024 | Item 2 | Item 3 | -| Scipy 2023 | Item 5 | Item 6 | +| PyCon 2024 | Item 2 | Item 3 | +| Scipy 2023 | Item 5 | Item 6 | | Scipy 2024 | Item 8 | Item 9 | | pyCascades 2024 (community lead) | 19 | Item 9 | ## Talks at big Python meetings - PyCon and SciPy -I wonder if this section could be integrated above somehow? i can link to both blog posts on my talks. +I wonder if this section could be integrated above somehow? i can link to both blog posts on my talks. -I also had the opportunity to give two talks this year. -I gave a talk at PyCon about how pyOpenSci is leveraging the community and building consensus around the thorniest topic: Python packaging. +I also had the opportunity to give two talks this year. +I gave a talk at PyCon about how pyOpenSci is leveraging the community and building consensus around the thorniest topic: Python packaging. -Link to blog post on the talk. +Link to blog post on the talk. ## Strengthening Scientific Software ecosystem with Peer Review -While pyOpenSci has run peer review since 2019, funding allowed us to fully document, formalize and set the review process up to be more scalable when I started, I started full-time. The [peer review guidebook](https://www.pyopensci.org/software-peer-review/) was one of the first things I worked on in the fall of 2022. The goal of this guidebook was to +While pyOpenSci has run peer review since 2019, funding allowed us to fully document, formalize and set the review process up to be more scalable when I started, I started full-time. The [peer review guidebook](https://www.pyopensci.org/software-peer-review/) was one of the first things I worked on in the fall of 2022. The goal of this guidebook was to define each role in the software peer review process -define policies around our review package scope, how we review, how we determine what is in scope, and more -The guidebook also guides community partnerships that we have with groups such as Astropy (formalized in in 2024). +define policies around our review package scope, how we review, how we determine what is in scope, and more +The guidebook also guides community partnerships that we have with groups such as Astropy (formalized in in 2024). -In 4 months, we published a shiny new peer review guide. In January 2023, we started peer review again. The results of both funding, documentation, and building a robust editorial team can be clearly seen in the plot below +In 4 months, we published a shiny new peer review guide. In January 2023, we started peer review again. The results of both funding, documentation, and building a robust editorial team can be clearly seen in the plot below
@@ -271,37 +271,37 @@ In 4 months, we published a shiny new peer review guide. In January 2023, we sta -You can see more of our [peer review metrics on the myst markdown metrics dashboard here](https://www.pyopensci.org/peer-review-metrics/pyopensci-peer-review-stats) -Our goal for the Sloan Foundation proposal was to review 20 packages in two years. We have almost doubled that goal already. On average, pyOpenSci now has 10-14 packages in our queue. +You can see more of our [peer review metrics on the myst markdown metrics dashboard here](https://www.pyopensci.org/peer-review-metrics/pyopensci-peer-review-stats) +Our goal for the Sloan Foundation proposal was to review 20 packages in two years. We have almost doubled that goal already. On average, pyOpenSci now has 10-14 packages in our queue. **We greatly value diversity (do we have any metrics from our review data that I can share here??)** -## A thoughtful, kind, and supportive community is what makes the pyOpenSci special +## A thoughtful, kind, and supportive community is what makes the pyOpenSci special -Every morning, I wake up and am excited to begin my work. It doesn't matter if I'm working on budgets and other Executive Director-type tasks or developing educational content and teaching (my two favorite things); I can't wait to see what messages pop up in my inbox, be it Slack, email, or others. I love my job so much because the pyOpenSci community is extraordinary. +Every morning, I wake up and am excited to begin my work. It doesn't matter if I'm working on budgets and other Executive Director-type tasks or developing educational content and teaching (my two favorite things); I can't wait to see what messages pop up in my inbox, be it Slack, email, or others. I love my job so much because the pyOpenSci community is extraordinary. This community is extraordinary because: -People care about our organization's mission to help scientists make their science more open and collaborative. So they can solve the world's greatest challenges. -The community wants to help - be it each other or pyOpenSci as an organization--and people care. -The community is kind. They are kind in their words and kind in how they help each other. +People care about our organization's mission to help scientists make their science more open and collaborative. So they can solve the world's greatest challenges. +The community wants to help - be it each other or pyOpenSci as an organization--and people care. +The community is kind. They are kind in their words and kind in how they help each other. -> I love the friendliness and positive energy around the combination of +> I love the friendliness and positive energy around the combination of > science+computing (in Python, too)! It's a lovely community of practice! ~ Titus Brown, Faculty - University of California, Davis, pyOpenSci community member. -> As maintainers of the Scientific Python library, we see great potential in > pyOpenSci. Test code, documentation, and internationalization. These -> are things we have gradually accumulated know-how for in order to -> create a robust library on GitHub. Now, these are about to be integrated +> As maintainers of the Scientific Python library, we see great potential in > pyOpenSci. Test code, documentation, and internationalization. These +> are things we have gradually accumulated know-how for in order to +> create a robust library on GitHub. Now, these are about to be integrated > by the pyOpenSci project. > ~ Tetsuo Koyama - PyVista maintainer -> I'm hopeful that the standards established by pyOpenSci will help -> alleviate the reproducibility crisis, increasing public trust in science, +> I'm hopeful that the standards established by pyOpenSci will help +> alleviate the reproducibility crisis, increasing public trust in science, > accelerating progress, and making all our jobs a little bit easier! -> ~Jackson Burns - DM about info +> ~Jackson Burns - DM about info > I love the educational aspect of pyOpenSci and how it focuses on removing the technical friction that prevents people from contributing to open source and open science. The community makes a conscious effort to create a welcoming culture and provide a safe place to learn for beginners. It helps prepare people for even bigger future contributions to the open science and open source movements. @@ -309,7 +309,7 @@ The community is kind. They are kind in their words and kind in how they help ea > As a participant in the first packaging workshop, I found that individual attention and focus on success were outstanding. The organization and approach to teaching a scientist how to create a package helped build skills and ongoing productivity. > -> Carol Willing, +> Carol Willing, ## Building a sustainability model for pyOpenSci so we can continue to thrive @@ -319,17 +319,17 @@ How do we sustain this effort over time? You see, writing grants, while encouraged at universities, is not a sustainable business model. -You spend months working on a grant that you have a 15-20% chance of actually getting. This requires time, and time requires money. But you also need money to survive. +You spend months working on a grant that you have a 15-20% chance of actually getting. This requires time, and time requires money. But you also need money to survive. -New grants often focus on funding new and innovative ideas rather than sustaining existing work. While innovation is valuable, maintaining open-source tools and educational resources is critical. As organizations and communities grow, the need to hire additional support increases, making sustainability more challenging. Unfortunately, most funding agencies do not prioritize maintenance. However, despite these challenges, pyOpenSci aims to build a sustainable model despite this challenge. +New grants often focus on funding new and innovative ideas rather than sustaining existing work. While innovation is valuable, maintaining open-source tools and educational resources is critical. As organizations and communities grow, the need to hire additional support increases, making sustainability more challenging. Unfortunately, most funding agencies do not prioritize maintenance. However, despite these challenges, pyOpenSci aims to build a sustainable model despite this challenge. As part of our sustainability model, we will offer paid online training events. In the same way that NumFocus runs PyData and SciPy meetings, we will run workshops and open science festivals . The first paid workshop we ran was an intro to packaging workshop. Our upcoming event is the inaugural pyOpenSci Fall Festival. -The idea here is that we build and provide free online resources as a community service. We also offer support through our community. But we also offer more hands-on events that include training and, in our first experiment, office hours to troubleshoot outside of the programmed workshop. +The idea here is that we build and provide free online resources as a community service. We also offer support through our community. But we also offer more hands-on events that include training and, in our first experiment, office hours to troubleshoot outside of the programmed workshop. -I love experiments, which might be why I've been able to build three programs to date. At home, I experiment with plants, starting seeds and propagating various plants using different methods. At work, I'm experimenting with a business model to see if we can sustain the incredible community effort that pyOpenSci has created. This experiment will show how pyOpenSci can sustain a training model. +I love experiments, which might be why I've been able to build three programs to date. At home, I experiment with plants, starting seeds and propagating various plants using different methods. At work, I'm experimenting with a business model to see if we can sustain the incredible community effort that pyOpenSci has created. This experiment will show how pyOpenSci can sustain a training model. ## What's next for pyOpenSci - The Road Ahead Our upcoming projects and initiatives include launching our inaugural Fall Festival and developing BSSw lessons focused on collaborative Git and GitHub workflows for scientists. We’re also excited to share our visions for the future of pyOpenSci, emphasizing our commitment to fostering a vibrant community. The community has been central to pyOpenSci’s journey, and we are dedicated to continuing our efforts to grow and support it further. @@ -349,6 +349,6 @@ My name is Leah, and I'm the executive director and founder of pyOpenSci. With o 1. **NEON Data Skills Program** at NEON 2. **Earth Analytics Program** at CU Boulder -And i'm onw building **pyOpenSci** - a vibrant, active and diverse community of practice that supports open science and the open-source software that driving that science. +I'm now building **pyOpenSci** - a vibrant, active and diverse community of practice that supports open science and the open-source software that driving that science. -The programs i build have consistently stayed at the cutting edge of technology through continual evaluation and a data-driven approach. Throughout my career, I've observed significant gaps between the innovative tools being developed and the training scientists receive, which has driven my work in bridging these gaps. \ No newline at end of file +The programs i build have consistently stayed at the cutting edge of technology through continual evaluation and a data-driven approach. Throughout my career, I've observed significant gaps between the innovative tools being developed and the training scientists receive, which has driven my work in bridging these gaps. From da4f45d45040470b5bcdd959f280cc111c725e47 Mon Sep 17 00:00:00 2001 From: Leah Wasser Date: Fri, 23 Aug 2024 05:58:05 -0600 Subject: [PATCH 5/6] add: bash script to get modified date --- _posts/2019-10-26-pyos-min-mistakes-theme.md | 202 +++---------------- scripts/date-updated.sh | 5 +- 2 files changed, 29 insertions(+), 178 deletions(-) diff --git a/_posts/2019-10-26-pyos-min-mistakes-theme.md b/_posts/2019-10-26-pyos-min-mistakes-theme.md index 2e30bb95..b3e22292 100644 --- a/_posts/2019-10-26-pyos-min-mistakes-theme.md +++ b/_posts/2019-10-26-pyos-min-mistakes-theme.md @@ -7,14 +7,18 @@ permalink: docs/pyos-website/ header: overlay_filter: 0.6 overlay_color: "#333" -last_modified: 2024-08-28 -toc: true +last_modified: categories: - docs - blog-post --- +Using the Kramdown Markdown renderer with Jekyll allows you to add [block](http://kramdown.gettalong.org/quickref.html#block-attributes) and [inline attributes](http://kramdown.gettalong.org/quickref.html#inline-attributes). This is nice if you want to add custom styling to text and image, and still write in Markdown. + +**Jekyll 3:** Kramdown is the default for `jekyll new` sites and those hosted on GitHub Pages. Not using Kramdown? That's OK. The following classes are still available when used with standard HTML. +{: .notice--warning} + ## Text alignment Align text blocks with the following classes. @@ -71,168 +75,43 @@ No wrap text. Position images with the following classes. - -### Figure -- align center - -
- A timeline showing the growth of pyOpenSci from 2019 to 2024. -
Growth of pyOpenSci from 2019 to 2024. Growth of pyOpenSci from 2019 to 2024. Growth of pyOpenSci from 2019 to 2024. Growth of pyOpenSci from 2019 to 2024.
-
+![image-center]({{ "/assets/images/image-alignment-580x300.jpg" | relative_url }}){: .align-center} The image above happens to be **centered**. -```html -
- A timeline showing the growth of pyOpenSci from 2019 to 2024. -
Growth of pyOpenSci from 2019 to 2024
-
-``` - - -### Figure -- align left - -
- A timeline showing the growth of pyOpenSci from 2019 to 2024. -
Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024
-
- - -The rest of this paragraph is filler for the sake of seeing the text wrap around the 150×150 image, which is **left aligned**. There should be plenty of room above, below, and to the right of the image. Just look at him there --- Hey guy! Way to rock that left side. I don't care what the right aligned image says, you look great. Don't let anyone else tell you differently. - -```html -
- A timeline showing the growth of pyOpenSci from 2019 to 2024. -
Growth of pyOpenSci from 2019 to 2024
-
-``` - -You can also adjust the width inline: - -```html -
- A timeline showing the growth of pyOpenSci from 2019 to 2024. -
Growth of pyOpenSci from 2019 to 2024
-
-``` - -### Figure -- align right - -Below is a right aligned image - -
- A timeline showing the growth of pyOpenSci from 2019 to 2024. -
Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024
-
- - -And now we're going to shift things to the **right align**. Again, there should be plenty of room above, below, and to the left of the image. Just look at him there --- Hey guy! Way to rock that right side. I don't care what the left aligned image says, you look great. Don't let anyone else tell you differently. - -The html looks like this: - - -```html -
- A timeline showing the growth of pyOpenSci from 2019 to 2024. -
Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024
-
-``` - -### Figure -- full extending outside of the current area - -The image below should extend outside of the parent container on right. - - -
- A timeline showing the growth of pyOpenSci from 2019 to 2024. -
Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024
-
- - - - -```html -
- A timeline showing the growth of pyOpenSci from 2019 to 2024. -
Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024
-
-``` - -## Blockquote styles - -### Regular blockquote - ```markdown -> This entire effort underscores the power of community when guided in -> the right direction, showcasing how collective effort can drive -> meaningful progress. -{: .highlight-quote } +![image-center](/assets/images/filename.jpg){: .align-center} ``` -> This entire effort underscores the power of community when guided in -> the right direction, showcasing how collective effort can drive -> meaningful progress. - +--- -### Fancy blockquote +![image-left]({{ "/assets/images/image-alignment-150x150.jpg" | relative_url }}){: .align-left} The rest of this paragraph is filler for the sake of seeing the text wrap around the 150×150 image, which is **left aligned**. There should be plenty of room above, below, and to the right of the image. Just look at him there --- Hey guy! Way to rock that left side. I don't care what the right aligned image says, you look great. Don't let anyone else tell you differently. ```markdown -> This entire effort underscores the power of community when guided in -> the right direction, showcasing how collective effort can drive -> meaningful progress. -{: .highlight-quote } +![image-left](/assets/images/filename.jpg){: .align-left} ``` -> This entire effort underscores the power of community when guided in -> the right direction, showcasing how collective effort can drive -> meaningful progress. -{: .highlight-quote } - - -### Quotes using include files - -You can also create blockquotes using include files. -Below is a green and magenta version of the same quote +--- -````html -{% raw %} -{% include pyos-blockquote.html quote="[*I want to... *] Streamline the development of good quality, socially responsible, and easily shareable software." author="Anonymous" event="AGU 2019 Townhall" class="highlight magenta" %} -{% endraw %} -```` +![image-right]({{ "/assets/images/image-alignment-300x200.jpg" | relative_url }}){: .align-right} -{% include pyos-blockquote.html quote="[*I want to... *] Streamline the development of good quality, socially responsible, and easily shareable software." author="Anonymous" event="AGU 2019 Townhall" class="highlight magenta" %} +And now we're going to shift things to the **right align**. Again, there should be plenty of room above, below, and to the left of the image. Just look at him there --- Hey guy! Way to rock that right side. I don't care what the left aligned image says, you look great. Don't let anyone else tell you differently. ```markdown -{% raw %} -{% include pyos-blockquote.html quote="[*I want to... *] Streamline the development of good quality, socially responsible, and easily shareable software." author="Anonymous" event="AGU 2019 Townhall" class="highlight purple" %} -{% endraw %} +![image-right](/assets/images/filename.jpg){: .align-right} ``` -{% include pyos-blockquote.html quote="[*I want to... *] Streamline the development of good quality, socially responsible, and easily shareable software." author="Anonymous" event="AGU 2019 Townhall" class="highlight purple" %} - -The default color for the quotes is the pyos teal green. - -``` -{% raw %} -{% include pyos-blockquote.html quote="[*I want to... *] Streamline the development of good quality, socially responsible, and easily shareable software." author="Anonymous" event="AGU 2019 Townhall" class="highlight" %} -{% endraw %} -``` +--- -{% include pyos-blockquote.html quote="[*I want to... *] Streamline the development of good quality, socially responsible, and easily shareable software." author="Anonymous" event="AGU 2019 Townhall" class="highlight" %} +![full]({{ "/assets/images/image-alignment-1200x4002.jpg" | relative_url }}) +{: .full} -### Quotes in notice blocks +The image above should extend outside of the parent container on right. +```markdown +![full](/assets/images/filename.jpg) +{: .full} ``` -
-{% raw %} -{% include pyos-blockquote.html quote="[*I want to... *] Streamline the development of good quality, socially responsible, and easily shareable software." author="Anonymous" event="AGU 2019 Townhall" class="highlight" %} -{% endraw %} -
-``` - -
-{% include pyos-blockquote.html quote="[*I want to... *] Streamline the development of good quality, socially responsible, and easily shareable software." author="Anonymous" event="AGU 2019 Townhall" class="highlight" %} - -
## Buttons @@ -273,7 +152,7 @@ Call attention to a block of text. | Success | `.notice--success` | | Danger | `.notice--danger` | -**Watch out!** This paragraph of text has been [emphasized](#) with the `{: .notice}` class. The purpose of this test paragraph is to check how different styles are applied across various sections of text. You can [highlight](#) certain words or phrases, adjust the [font size](#), or change the [text color](#) to see how the styling adapts. Additionally, experimenting with [different classes](#) and observing the effects on alignment, spacing, and other typographic elements will help ensure that your CSS is applied consistently and effectively across your site. +**Watch out!** This paragraph of text has been [emphasized](#) with the `{: .notice}` class. {: .notice} **Watch out!** This paragraph of text has been [emphasized](#) with the `{: .notice--primary}` class. @@ -291,41 +170,14 @@ Call attention to a block of text. **Watch out!** This paragraph of text has been [emphasized](#) with the `{: .notice--danger}` class. {: .notice--danger} -
-You can also add the `.notice` class to a `
` element like this: - -```html -
-You can also add the .notice class to a
element. +{% capture notice-text %} +You can also add the `.notice` class to a `
` element. * Bullet point 1 * Bullet point 2 -
-``` - -
+{% endcapture %} -To add a heading element to a notice block but ignore in the TOC, use `no_toc` as a class like this: - -```html

Notice Headline:

- here is some html text. + {{ notice-text | markdownify }}
-``` - -Which will render like this - -
-

Notice Headline that won't appear in toc

- {{ notice-text | markdownify }}. - You can add more text here too -
- - - - -Using the Kramdown Markdown renderer with Jekyll allows you to add [block](http://kramdown.gettalong.org/quickref.html#block-attributes) and [inline attributes](http://kramdown.gettalong.org/quickref.html#inline-attributes). This is nice if you want to add custom styling to text and image, and still write in Markdown. - -**Jekyll 3:** Kramdown is the default for `jekyll new` sites and those hosted on GitHub Pages. Not using Kramdown? That's OK. The following classes are still available when used with standard HTML. -{: .notice--warning} diff --git a/scripts/date-updated.sh b/scripts/date-updated.sh index ba5057c3..6ad15e39 100755 --- a/scripts/date-updated.sh +++ b/scripts/date-updated.sh @@ -6,11 +6,10 @@ for file in _posts/*.md; do # Check if the file contains last_modified in the front matter if grep -q '^last_modified:' "$file"; then - last_modified=$(git log -1 --format="%ad" --date=short "$file") - + last_modified=$(git log -1 --format="%ad" --date=iso "$file") echo "Processing file: $file" echo "Last modified date: $last_modified" - + # Use awk to update the last_modified in the front matter awk -v date="$last_modified" ' BEGIN { inside_front_matter=0 } From 3b58bcc83536dde226be7c815797373c6e85ebb0 Mon Sep 17 00:00:00 2001 From: Leah Wasser Date: Mon, 26 Aug 2024 16:58:52 -0600 Subject: [PATCH 6/6] fix: prettier and code cleanup --- _posts/2019-10-26-pyos-min-mistakes-theme.md | 152 +++++-- ...-08-21-pyopensci-monumental-growth-2024.md | 400 ++++++++++-------- _sass/minimal-mistakes/_base.scss | 24 +- _sass/minimal-mistakes/_variables.scss | 9 +- scripts/date-updated.sh | 5 +- 5 files changed, 388 insertions(+), 202 deletions(-) diff --git a/_posts/2019-10-26-pyos-min-mistakes-theme.md b/_posts/2019-10-26-pyos-min-mistakes-theme.md index b3e22292..b9b23696 100644 --- a/_posts/2019-10-26-pyos-min-mistakes-theme.md +++ b/_posts/2019-10-26-pyos-min-mistakes-theme.md @@ -7,18 +7,14 @@ permalink: docs/pyos-website/ header: overlay_filter: 0.6 overlay_color: "#333" -last_modified: +last_modified: 2024-08-23 +toc: true categories: - docs - blog-post --- -Using the Kramdown Markdown renderer with Jekyll allows you to add [block](http://kramdown.gettalong.org/quickref.html#block-attributes) and [inline attributes](http://kramdown.gettalong.org/quickref.html#inline-attributes). This is nice if you want to add custom styling to text and image, and still write in Markdown. - -**Jekyll 3:** Kramdown is the default for `jekyll new` sites and those hosted on GitHub Pages. Not using Kramdown? That's OK. The following classes are still available when used with standard HTML. -{: .notice--warning} - ## Text alignment Align text blocks with the following classes. @@ -75,44 +71,119 @@ No wrap text. Position images with the following classes. -![image-center]({{ "/assets/images/image-alignment-580x300.jpg" | relative_url }}){: .align-center} + +### Figure -- align center + +
+ A timeline showing the growth of pyOpenSci from 2019 to 2024. +
Growth of pyOpenSci from 2019 to 2024. Growth of pyOpenSci from 2019 to 2024. Growth of pyOpenSci from 2019 to 2024. Growth of pyOpenSci from 2019 to 2024.
+
The image above happens to be **centered**. -```markdown -![image-center](/assets/images/filename.jpg){: .align-center} +```html +
+ A timeline showing the growth of pyOpenSci from 2019 to 2024. +
Growth of pyOpenSci from 2019 to 2024
+
``` ---- -![image-left]({{ "/assets/images/image-alignment-150x150.jpg" | relative_url }}){: .align-left} The rest of this paragraph is filler for the sake of seeing the text wrap around the 150×150 image, which is **left aligned**. There should be plenty of room above, below, and to the right of the image. Just look at him there --- Hey guy! Way to rock that left side. I don't care what the right aligned image says, you look great. Don't let anyone else tell you differently. +### Figure -- align left -```markdown -![image-left](/assets/images/filename.jpg){: .align-left} +
+ A timeline showing the growth of pyOpenSci from 2019 to 2024. +
Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024
+
+ + +The rest of this paragraph is filler for the sake of seeing the text wrap around the 150×150 image, which is **left aligned**. There should be plenty of room above, below, and to the right of the image. Just look at him there --- Hey guy! Way to rock that left side. I don't care what the right aligned image says, you look great. Don't let anyone else tell you differently. + +```html +
+ A timeline showing the growth of pyOpenSci from 2019 to 2024. +
Growth of pyOpenSci from 2019 to 2024
+
``` ---- +You can also adjust the width inline: + +```html +
+ A timeline showing the growth of pyOpenSci from 2019 to 2024. +
Growth of pyOpenSci from 2019 to 2024
+
+``` -![image-right]({{ "/assets/images/image-alignment-300x200.jpg" | relative_url }}){: .align-right} +### Figure -- align right And now we're going to shift things to the **right align**. Again, there should be plenty of room above, below, and to the left of the image. Just look at him there --- Hey guy! Way to rock that right side. I don't care what the left aligned image says, you look great. Don't let anyone else tell you differently. +
+ A timeline showing the growth of pyOpenSci from 2019 to 2024. +
Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024
+
+ +The html looks like this: + + +```html +
+ A timeline showing the growth of pyOpenSci from 2019 to 2024. +
Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024
+
+``` + +### Figure -- full extending outside of the current area + +The image below should extend outside of the parent container on right. + + +
+ A timeline showing the growth of pyOpenSci from 2019 to 2024. +
Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024
+
+ + + + +```html +
+ A timeline showing the growth of pyOpenSci from 2019 to 2024. +
Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024 Growth of pyOpenSci from 2019 to 2024
+
+``` + +## Blockquote styles + +### Regular blockquote + ```markdown -![image-right](/assets/images/filename.jpg){: .align-right} +> This entire effort underscores the power of community when guided in +> the right direction, showcasing how collective effort can drive +> meaningful progress. +{: .highlight-quote } ``` ---- +> This entire effort underscores the power of community when guided in +> the right direction, showcasing how collective effort can drive +> meaningful progress. -![full]({{ "/assets/images/image-alignment-1200x4002.jpg" | relative_url }}) -{: .full} -The image above should extend outside of the parent container on right. +### Fancy blockquote ```markdown -![full](/assets/images/filename.jpg) -{: .full} +> This entire effort underscores the power of community when guided in +> the right direction, showcasing how collective effort can drive +> meaningful progress. +{: .highlight-quote } ``` +> This entire effort underscores the power of community when guided in +> the right direction, showcasing how collective effort can drive +> meaningful progress. +{: .highlight-quote } + ## Buttons Make any link standout more when applying the `.btn .btn--primary` classes. @@ -152,7 +223,7 @@ Call attention to a block of text. | Success | `.notice--success` | | Danger | `.notice--danger` | -**Watch out!** This paragraph of text has been [emphasized](#) with the `{: .notice}` class. +**Watch out!** This paragraph of text has been [emphasized](#) with the `{: .notice}` class. The purpose of this test paragraph is to check how different styles are applied across various sections of text. You can [highlight](#) certain words or phrases, adjust the [font size](#), or change the [text color](#) to see how the styling adapts. Additionally, experimenting with [different classes](#) and observing the effects on alignment, spacing, and other typographic elements will help ensure that your CSS is applied consistently and effectively across your site. {: .notice} **Watch out!** This paragraph of text has been [emphasized](#) with the `{: .notice--primary}` class. @@ -170,14 +241,41 @@ Call attention to a block of text. **Watch out!** This paragraph of text has been [emphasized](#) with the `{: .notice--danger}` class. {: .notice--danger} -{% capture notice-text %} -You can also add the `.notice` class to a `
` element. +
+You can also add the `.notice` class to a `
` element like this: + +```html +
+You can also add the .notice class to a
element. * Bullet point 1 * Bullet point 2 -{% endcapture %} +
+``` + +
+To add a heading element to a notice block but ignore in the TOC, use `no_toc` as a class like this: + +```html

Notice Headline:

- {{ notice-text | markdownify }} + here is some html text. +
+``` + +Which will render like this + +
+

Notice Headline that won't appear in toc

+ {{ notice-text | markdownify }}. + You can add more text here too
+ + + + +Using the Kramdown Markdown renderer with Jekyll allows you to add [block](http://kramdown.gettalong.org/quickref.html#block-attributes) and [inline attributes](http://kramdown.gettalong.org/quickref.html#inline-attributes). This is nice if you want to add custom styling to text and image, and still write in Markdown. + +**Jekyll 3:** Kramdown is the default for `jekyll new` sites and those hosted on GitHub Pages. Not using Kramdown? That's OK. The following classes are still available when used with standard HTML. +{: .notice--warning} diff --git a/_posts/2024-08-21-pyopensci-monumental-growth-2024.md b/_posts/2024-08-21-pyopensci-monumental-growth-2024.md index 3c07bd04..37e66f6e 100644 --- a/_posts/2024-08-21-pyopensci-monumental-growth-2024.md +++ b/_posts/2024-08-21-pyopensci-monumental-growth-2024.md @@ -1,7 +1,7 @@ --- layout: single title: "It's Been a Long Short Road: The Monumental Past 2 Years of pyOpenSci" -excerpt: "Learn about what pyOpenSci has accomplished in the last two years, including the evolution of our packaging guidebook, the expansion of our peer review process, and the vibrant community we've built." +excerpt: "Learn about what pyOpenSci has accomplished in the last two years, including the evolution of our packaging guide, the expansion of our peer review process, and the vibrant community we've built." author: "Leah Wasser" permalink: /blog/what-pyopensci-accomplished-with-two-years-of-funding.html header: @@ -16,224 +16,259 @@ comments: true --- ## It's been two years since I started working full-time on pyOpenSci -As of September 1, 2024, I have been working full-time at pyOpenSci for two years, thanks to funding from the [Sloan Foundation](https://sloan.org/) and [CZI (Chan Zuckerberg Initiative)](https://chanzuckerberg.com/). pyOpenSci has come SO FAR in two years. -It's time to take a breath and celebrate everything that the pyOpenSci community has accomplished in the past two years. +I have been working full-time building pyOpenSci for two years now, thanks to funding from the [Sloan Foundation](https://sloan.org/) and [CZI (Chan Zuckerberg Initiative)](https://chanzuckerberg.com/). pyOpenSci has come SO FAR in two years. -Before we move on to the next big thing—our pyOpenSci Fall Festival (more on that below)—I want to take a moment to reflect on: +It's time to take a breath and celebrate everything the pyOpenSci community has accomplished. Before we move on to the next big thing—our pyOpenSci Fall Festival (more on that below)—I want to take a moment to reflect on: -* where we've been, -* what we've accomplished, -* the incredible community of practice that we've built. +* Where we've been, +* What we've accomplished, and +* The incredible community of practice that we've built. I'll wrap up by discussing what's next for pyOpenSci. -## How I created pyOpenSci +## A brief history of pyOpenSci -In 2018, I founded pyOpenSci out of a combination of inspiration with a splash -of frustration encountered while teaching open science approaches to scientists in Python. Despite Python's power and popularity, I noticed a gap in community support compared to the R ecosystem. This gap inspired me to think about ways to make the Python ecosystem more accessible to and supportive of scientists trying to share their workflows. +I founded pyOpenSci in 2018 because I saw the pain points that scientists were +facing in creating open, reproducible workflows using Python. My experience +inspired me to establish a vibrant, inclusive pyOpenSci community of practice +fueled by making open science best practices more accessible to scientists. -My experiences teaching and working in the Python ecosystem, -inspired me to establishing a vibrant, inclusive community of practice. This -community would be driven to develop and encourage open science best practices. -And also to fill in knowledge gaps that scientists encounter when trying to make their science open and reproducible. +pyOpenSci makes open science more accessible by [developing education resources](/learn.html), [running training events](/events/index.html), running an [open software peer review process](/about-peer-review/index.html) and [partnering with other communities](/partners.html). From humble beginnings characterized by small community meetings, pyOpenSci has blossomed into a thriving community marked by: -From humble beginnings characterized by 3-4 person community meetings, pyOpenSci has grown into a thriving community, marked by a robust editorial team, hundreds of contributors, and numerous valuable community partners and friends. Our peer review process has seen over 50 packages; we've accepted 35 and have 17 packages in [active stages of review](https://github.com/orgs/pyOpenSci/projects/7) as I write this post. +* a robust editorial team, +* hundreds of contributors, +* numerous valuable community partners and friends -This evolution underscores my commitment to building this vibrant community of practice and making open science practices and Python more accessible to scientists. +Our software peer review program has seen **over 50 packages**; we've [accepted 35 scientific Python packages into our growing library of trusted scientific Python packages](https://www.pyopensci.org/python-packages.html) and have **17 packages** in [active stages of review](https://github.com/orgs/pyOpenSci/projects/7) as I write this post. [ Learn more about how pyOpenSci started ](/blog/how-pyopensci-got-started.html) {: .button } -### What is pyOpenSci? - -pyOpenSci's mission is to create a community of practices that helps scientists make their science more open and collaborative. We empower scientists with the skills and knowledge to create efficient open and shared data processing and analysis workflows to process open science best practices. We enable scientists to share and reuse their code through packaging. Our goal is for scientists to spend less time fighting with code and more time tackling the world's most significant challenges. - -We do this by: - -* **Creating online open education resources** that help scientists implement open science best practices. Over the past two years, this work has included helping scientists with the skills needed to package their code in a way that can be shared and reused across workflows. It also includes using Git and GitHub to enhance open, collaborative workflows and ensure versions. -* **Running training events** that help scientists discover new tools for reproducibly sharing their code, workflows, and discoveries; we also teach open science best practices. -* **Running an open software peer review process** that helps scientists make and find better software to support their work. -* **Partnering with other open science and Python communities** to leverage knowledge and effort. - -# TODO: redo this so the third petal says "education & training." modify software peer review to say software peer review & packaging guidelines. Then, update the captions in the other posts that use this image -
- - A flower petal image with three flower petals and a flower center. In each petal, there is text. The first petal says software peer review; the second says community partnerships; the third says packaging resources and recommendations. The center circle of the flower says diverse, inclusive community. + + A flower petal image with three flower petals and a flower center. In each petal, there is text. The first petal says software peer review; the second says community partnerships; the third says education & training. The center circle of the flower says diverse, inclusive community. -
pyOpenSci supports scientists developing open-source software through three programs: 1) peer review of scientific software, 2) community partnerships, and 3) packaging resources and recommendations. A diverse and inclusive community that cares about the open-source software that drives open science supports all three of these programs. +
pyOpenSci supports scientists developing open-source software through three programs: 1) peer review of scientific software, 2) community partnerships, and 3) education & training. A diverse and inclusive community that cares about the open-source software that drives open science supports all three of these programs.
### pyOpenSci and iterative, data-driven program design -PyOpenSci's development and design have been data-driven from the start. I started collecting data about community pain points back in 2019. And today I have -quotes and word clouds and other valuable insights collected from community -members at meetings such as: +pyOpenSci's development and design is data-driven. I collected survey data +from scientists and Pythonistas at meetings and conferences to identify community pain points and needs. I used this data to inform the iterative development of pyOpenSci programs, events, and resources and to define pyOpenSci's mission, vision, values, and structure. + +The survey data I've collected shows what I've seen in the classroom-- scientists face many challenges when +processing, analyzing, and sharing their workflows. While reproducible +science is critical to accelerating science, sharing and publishing code is hard. -* the US Research Software Engineer (USRSE) RSE, -* SciPy, and -* AGU (American Geophysical ophiycail Union). +This blog post includes quotes and data I've collected over the past 5+ years; these data have shaped the vibrant community of practice that pyOpenSci is today.
- Alt here. + A round graphic that shows the cycle of iterative program development. The pyOpenSci logo is at the top left. The graphic title reads iterative program development. The first step says, 'A good idea gets better and better', the second says  'survey community needs,' the third says, 'evaluation based program design,' and the 4th says, 'evaluate results and make iterative improvements'. In the center is th -
Iterative Data driven program design is a fusion of evaluation and program development that utilizes community feedback over time to iteratively build a program. Rather than build the entire thing at once, you build it in pieces and continue to collect data which allows you to be agile in trying things and adjusting program elements to better align with community needs. +
Iterative data-driven program design is a fusion of evaluation and program development that utilizes community feedback to build a program using an iterative and community-responsive approach. You test approaches and collect data about the program's effectiveness. This type of development allows an organization to grow dynamically, following community needs.
-The data that I've collected over the years, reveals vital pain points and gaps that scientists face when trying to process analyze and share their workflows. -This data directly informs the successful community that pyOpenSci has become today. - -
-**Survey question & responses:** -"How could pyOpenSci help you with your science, code, and software?" -> -> -- 2019 AGU townhall -> What are the best practices for sharing the code? +### Responses to the question: *How could pyOpenSci help you with your science, code, and software?* +{: .not_toc} -> Streamline the development of good quality, socially responsible, and easily shareable software. +{% include pyos-blockquote.html quote="[*I want to know...*] What are the best practices for sharing the code?" author="Anonymous" event="AGU 2019 Townhall" class="highlight" event="2019 AGU Town Hall" %} -> Bullet-proof, well-documented packages for Earth science. +{% include pyos-blockquote.html quote="[*I want to... *] Streamline the development of good quality, socially responsible, and easily shareable software." author="Anonymous" event="AGU 2019 Townhall" class="highlight magenta" %} -Many earth scientists attend AGU. It's a very different crowd then who you meet +{% include pyos-blockquote.html quote="[*I want more *] Bullet-proof, well-documented packages for Earth science." author="Anonymous" event="AGU 2019 Townhall" class="highlight" %} + +Many earth scientists attend AGU. It's a different crowd than who you meet at the SciPy meetings.
-### pyOpenSci learned a lot from building a Python software peer review program - -pyOpenSci's design is also based on our experiences developing the software peer review guidelines for Python packages. We [interact with scientific software maintainers](https://pyopensci.discourse.group/t/api-reference-building-locally-but-not-on-rth-missing-path/368/7) - who are often more scientists than developers - -from around often. +### Why pyOpenSci tackled Python packaging -As we developed our [peer review guide]((https://www.pyopensci.org/software-peer-review/)), it became clear that a beginner-friendly packaging guide was essential to support scientists in sharing their code. This is because [our pre-review software checks](https://www.pyopensci.org/software-peer-review/how-to/editor-in-chief-guide.html#editor-checklist-template) require basic package infrastructure. We wanted to set scientists up for success. We want to be clear about what that packaging infrastructure is. +pyOpenSci's design is also based on our experiences developing software peer review guidelines for Python packages. We [interact daily with scientific software maintainers](https://pyopensci.discourse.group/t/api-reference-building-locally-but-not-on-rth-missing-path/368/7). According to our surveys, 80% of our maintainers and reviewers identify strongly as scientists. +As we developed our [peer review guide]((https://www.pyopensci.org/software-peer-review/)), it became clear that a beginner-friendly packaging guide was essential to support scientists in sharing their code because: +1. [Our pre-review software checks](https://www.pyopensci.org/software-peer-review/how-to/editor-in-chief-guide.html#editor-checklist-template) require basic package infrastructure. Scientists must be clear about the core elements of a Python package. +1. We want to help scientists make their packages more maintainable over time by adding tests and [continuous integration (CI)](https://www.pyopensci.org/python-package-guide/tests/tests-ci.html#run-tests-with-continuous-integration) checks that run when someone submits a suggested change (or a pull request). We want to set scientists up for success. +1. We realize that Python packaging is a thorny ecosystem to navigate. I knew that pyOpenSci could help file down those thorns.
-**Survey question & responses:** -"How could pyOpenSci help you with your science, code, and software?" +### *"How could pyOpenSci help you with your science, code, and software?"* -> -> -- 2019 AGU townhall -> AGU 2019: Training for people who can code for themselves but want to start developing software for others. Topics include style, documentation, testing, git, etc. +{% include pyos-blockquote.html quote="Training for people who can code for themselves but want to start developing software for others. Topics include style, documentation, testing, git, etc." author="Anonymous" event="AGU 2019 Townhall" class="highlight magenta" %}
#### Helping scientists navigate a complex and difficult-to-understand Python packaging ecosystem -The packaging ecosystem has evolved rapidly. Numerous tools and approaches are available to create Python packages. Further, recent changes to ecosystem standards have led to an explosion of packaging tools like [Hatch](https://hatch.pypa.io/latest/), [Flit](https://flit.pypa.io/en/stable/), [PDM](https://pdm.fming.dev/latest/), and [Poetry](https://python-poetry.org/) with other tools like Pixi and Rye also on the horizon. Scientists often feel overwhelmed by the sheer number of options and have begged for clear guidance for years. +The packaging ecosystem has evolved rapidly. Numerous tools and approaches are available to create Python packages. Further, recent changes to ecosystem standards have led to an explosion of packaging tools like [Hatch](https://hatch.pypa.io/latest/), [Flit](https://flit.pypa.io/en/stable/), [PDM](https://pdm.fming.dev/latest/), and [Poetry](https://python-poetry.org/); other tools like Pixi and Rye are also on the horizon. Scientists often feel overwhelmed by the sheer number of options and have begged for clear guidance for years.
-QUESTION: "How could pyOpenSci help you with your science, code, and software?" +

QUESTION: "How could pyOpenSci help you with your science, code, and software?"

-> -> -- 2021 SciPy BoF -> **clarify Python packaging. There are too many different mechanisms floating around...** -
+{% include pyos-blockquote.html quote="[*I want pyOpenSci to*] clarify Python packaging. There are too many different mechanisms floating around..." author="" event="2021 SciPy BoF" class="highlight magenta" %} -There are some excellent, more advanced guidebooks and tutorials available now, such as [PyPA's packaging tutorial](https://packaging.python.org/tutorials/) and the [scientific Python development guide](add link). However, our resources serve a different audience. +
-1. We want to ensure that our resources don't require foundational knowledge that scientists don't usually have. -2. We want to avoid burdening scientists with decisions about packaging concepts they don't fully understand, such as selecting a build backend. +
+ This is a giant word cloud with dozens of words. The biggest words are Build, Poetry, Conda, Setuptools, Sphinx, pip, Hatch, Mamba, Twine PyPI, venv, and GitHub Actions. +
This word cloud represents around 100 responses to the question: What Python packaging tools do you most often use? It demonstrates both 1) how many tools there are to choose from and 2) how divided the ecosystem is in terms of which tools they are using. Yes, a few tools there aren't explicitly Python packaging tools. :)
+
-From a beginner's perspective, every decision point is a potential opportunity to go down the wrong path, adding cognitive load. +There are some excellent, more advanced guides and tutorials available now, such as [PyPA's packaging tutorial](https://packaging.python.org/tutorials/) and the [scientific Python development guide](add link). However, our resources serve a different audience. - +1. The people using our resources are often folks who find the packaging ecosystem to be overwhelming. +1. Scientists are also only sometimes familiar with various terms. For example, it's easy to confuse a build backend with a build frontend, especially when both have the word "hatch" in them (e.g., Hatch vs. Hatchling). +1. Scientists often want to avoid deciding what tools to use. pyOpenSci intends to alleviate this burden and provide a robust and practical approach. -I knew that pyOpenSci could make the packaging journey more straightforward for scientists. I also knew there was a strong need to file down packaging and open science thorns. +From a beginner's perspective, every decision is a potential opportunity to go down the wrong path, adding cognitive load. Armed with a clear understanding of the packaging pain points, I knew that pyOpenSci could simplify the packaging journey for scientists. -If you want to learn more, my [talk at PyCon dove into the challenges of too many options and cognitive overload; I wrote about it here.](/blog/python-packaging-friends-dont-let-friends-package-alone.html) +If you want to learn more, my [talk at PyCon dove into the Python packaging challenges of too many options and cognitive overload.](/blog/python-packaging-friends-dont-let-friends-package-alone.html) ### pyOpenSci guided the community towards a single way to create a Python package in under a year -In just under a year, we created a comprehensive packaging guidebook and a set of end-to-end Python packaging / share your code tutorials that walk scientists through creating a package and publishing it to both [PyPI](https://pypi.org/) and [Conda-Forge](https://conda-forge.org/) using [Hatch](https://hatch.pypa.io/). Together, the pyOpenSci community built consensus around which packaging approaches should be adopted as best practices. +In just under a year, pyOpenSci created a [comprehensive packaging guide](https://www.pyopensci.org/python-package-guide/) that includes an end-to-end Python packaging / share your code tutorial that walks scientists through creating a package and publishing it to both [PyPI](https://www.pyopensci.org/python-package-guide/tutorials/publish-pypi.html) and [Conda-Forge](https://www.pyopensci.org/python-package-guide/tutorials/publish-conda-forge.html) using [Hatch](https://www.pyopensci.org/python-package-guide/tutorials/get-to-know-hatch.html). Together, the pyOpenSci community built consensus around which packaging approaches should be adopted as best practices. Building consensus around packaging decisions was challenging, but we were successful because we focused on our users first. We decided on which tools we thought would create the best packaging experience for scientists creating pure Python packages. -[Check out the pull requests ](https://github.com/pyOpenSci/python-package-guide/pulls?q=is%3Apr+sort%3Acomments-desc+is%3Aclosed) if you're curious about the discussions. The sheer volume of comments on some of the early PRs associated with packaging build tools speaks to the various issues, complexity, and decisions we needed to make. +[Check out the GitHub pull requests for packaging guide pages](https://github.com/pyOpenSci/python-package-guide/pulls?q=is%3Apr+sort%3Acomments-desc+is%3Aclosed) if you're curious about the feedback and discussions that we had when writing the packaging guide. Notice the number of comments on the most popular PRs. The sheer volume of comments on some of the early PRs associated with packaging build tools speaks to the various issues, complexity, and decisions we needed to make. -## **Building Python packaging consensus and developing the pyOpenSci Python packaging guidebook** +## **Building Python packaging consensus and developing the pyOpenSci Python packaging guide** -The success of our Python packaging guidebook is due to extensive community input, -focusing contributors on the guidebook goals which was to make the Python packaging accessible to beginners and scientists who didn't want to become packaging experts, and our intensive community review process that includes input from: +The success of our Python packaging guide is due to extensive community input. +We directed Python Packaging Guide contributors towards the objective of simplifying Python packaging for beginners. Focusing on a specific audience allowed contributors to make decisions about the content in the Guidebook more easily. It also ensured that the outcome text is easy to understand for beginners and for scientists who prefer to avoid delving into packaging nuances. In each review, we made sure to include a diverse group of reviewers, including: * **Packaging tool maintainers:** We asked each maintainer from Flit, PDM, Hatch, and Poetry to provide feedback on our overviews of their tools * **[PyPA](https://www.pypa.io/en/latest/) members** who have already developed packaging resources that serve the broader Python community * **Core scientific Python community members** who are maintaining tools like Matplotlib, Numpy, and Pandas that require more technical complex builds * **Scientists with varying levels of packaging expertise:** This group is most important as packaging beginners provide the lens of what is confusing and ensure that the technical content is more beginner-friendly. -The truly collaborative effort of creating the Python packaging guidebook resulted in a beginner-friendly and accurate guide that the pyOpenSci community now maintains and continuously updates. +The truly collaborative effort of creating the Python packaging guide resulted in a beginner-friendly and accurate guide that the pyOpenSci community now maintains and continuously updates. + +It was essential to have a mix of content reviewers with a range of packaging expertise to make the guide accurate and accessible. Some were packaging experts building packaging tools, and others were beginners, the audience for whom we wrote the guide. -Our packaging guide provides an overview of the Python packaging ecosystem to support scientists who want to understand what all the packaging tools and approaches do; they want to decide on their own which tools best serve their needs. We also include sections that define core terms that most scientists need to learn as they appear often in online documentation, such as: +### What's in the pyOpenSci Python packaging guide? + +The pyOpenSci packaging guide provides an overview of the Python packaging ecosystem to support users who want to understand the packaging landscape. These users may want to decide on their own which tools best serve their needs. The guide also defines core packaging terms that can make the ecosystem seem more complex than it is, such as: * [build backend](https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-build-tools.html#build-back-ends) * [build frontend](https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-build-tools.html#python-package-build-front-ends) * [wheel](https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-distribution-files-sdist-wheel.html#wheel-whl-files) * [sDist](https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-distribution-files-sdist-wheel.html#source-distribution-sdist) -The goal of the Python Packaging Guide is to translate--to help scientists understand the base language around packaging. Our Python Packaging Guide will clarify and file down the packaging thorns over time. +Our Python Packaging Guide aims to translate the technical jargon that gets in the way of new users having a successful packaging experience. Over time, we +hope that this will make packaging less confusing and more accessible to more people. +
- Image of the pyOpenSci package guide review process. There are three main boxes on the slide labeled 'expert feedback,' 'community review,' and 'sprints and bug bashes.' The top of the image is titled 'The Power of Community Review.' -
pyOpenSci engages people from all parts of the Python community, with all levels of expertise, in our packaging guide review process. Every page in our Python packaging guide has gone through extensive community review to ensure that it is 1) beginner friendly, 2) accurate and 3) up to date.
+ Diagram that has the pyOpenSci logo in the upper left-hand corner with the pyOS flower. The diagram has four steps for making a package - create package structure, add code, add metadata to pyproject.toml, and finally, pip install package. The four steps are within arrows that point to two building shapes representing the PyPI and conda-forge warehouses. Below each of those steps, represented as storage houses, the code instructions for installing using a package from that warehouse is written out. +
Our opinionated Python packaging tutorials demonstrate one way to create a Python package using modern packaging best practices. Through these tutorials, pyOpenSci has reduced the cognitive load for scientists who want to share their code. This graphic represents the steps a user needs to understand to make their code installable and create a basic Python package.
+ ### Creating opinionated Python packaging tutorials -More often than not, scientists (and packaging beginners) just want to get the job done. They don't want to become packaging experts. +
+ This is a graphic that shows the results to a survey question. The question is--have you created a Python package before? The three options are Yes (18%), no (59%), and I struggled trying (24%) +
This response ratio of most people either struggling to create a package or never having created a Python package before is common when I ask this questions at events. More often than not, people want help learning packaging.
+
+ +In addition to the ecosystem overview provided in the guide, I knew that we needed to have opinionated, complete Python packaging tutorials that guided users through the entire packaging process from +* [creating a package](https://www.pyopensci.org/python-package-guide/tutorials/installable-code.html) to +* publishing it on [PyPI](https://www.pyopensci.org/python-package-guide/tutorials/publish-pypi.html) and +* [conda-forge](https://www.pyopensci.org/python-package-guide/tutorials/publish-conda-forge.html) -They want to create a Python package and do their important work more quickly. A community presenter made this statement directly at the Python packaging summit at PyCon US 2023. He stood up and said: +Most scientists (and packaging beginners) want to get the job done; they don't want to become packaging experts. A community presenter made this statement directly at the PyCon US 2023 Python packaging summit: > I just want to create a Python package. Where is the tutorial or > documentation that teaches me how to do that? +{: .highlight-quote } -I have heard this statement from dozens of scientists and non-science Pythonistas in the past two years. And because of this sentiment, pyOpenSci created opinionated Python packaging tutorials that guides users through the entire packaging process, from [creating a package](https://www.pyopensci.org/python-package-guide/tutorials/installable-code.html) to publishing it on [PyPI](https://www.pyopensci.org/python-package-guide/tutorials/publish-pypi.html) and [conda-forge](https://www.pyopensci.org/python-package-guide/tutorials/publish-conda-forge.html). -By providing clear, opinionated, step-by-step instructions, pyOpenSci has reduced the cognitive load for scientists who want to share their code. +Our Python packaging tutorials went through the same community development and review process as the rest of our Python packaging guide. We have also begun teaching the lessons; most workshop attendees have successfully created their first Python packages!
- -
Our opinionated Python packaging tutorials demonstrate 1 way to create a Python package using modern packaging best practices. This graphic represents the steps that a user needs to understand to make their code installable and create a basic Python package.
+ Another survey result image. the question is were you able to create a package? 91% responded yes (10 people), 9% (1 person) said no; no one responded--I'm not sure +
It's always hard to collect data at the end of a long workshop. Here, 11 out of 30+ people responded. Most people in our workshop were successful. We worked with the one person who responded "no" after the survey at the end of the workshop. They successfully made their first package with our support! This feedback was similar to the success rates at our first online workshop held in May.
-These tutorials went through the same community development and review process as the rest of our Python packaging guidebook. We have also begun teaching the lessons with high success rates. We taught the lessons several times and plan to continue teaching them, especially as we build out our training sustainability model (more on that below). ### Teaching online lessons is the best way to ensure they stay current -I have created hundreds of [open online lessons](https://www.leahwasser.com/my-path-to-open-education-earth-environmental-data-science) both for ecologists [NEON](https://www.neonscience.org/resources/learning-hub/teaching-modules/quantifying-drivers-and-impacts-natural-disturbance-events) and [earth and environmental scientists](https://www/earthdatascience.org). One of the biggest challenges is that it's easy for data science lessons to become dated quickly--especially in the rapidly evolving data science space. By teaching the lessons, we can update them regularly as the ecosystem evolves. We also often have users review the lessons at our [annual sprint events](blog/pyopensci-pyconus-2024-sprints.html) to test them out; more on pyOpenSci beginner-friendly sprints below. +I have created hundreds of [open online lessons](https://www.leahwasser.com/my-path-to-open-education-earth-environmental-data-science) both for ecologists [NEON](https://www.neonscience.org/resources/learning-hub/teaching-modules/quantifying-drivers-and-impacts-natural-disturbance-events) and [earth and environmental scientists](https://www/earthdatascience.org). One of the biggest challenges is that it's easy for data science lessons to [become dated quickly](https://www.leahwasser.com/open-education-data-science-posting-online-is-not-enough)--especially in the rapidly evolving data science space. By teaching the lessons, we can update them regularly as the ecosystem evolves. We also often have users review the lessons at our [annual sprint events](blog/pyopensci-pyconus-2024-sprints.html) to test them out; more on pyOpenSci beginner-friendly sprints below. -**TODO:** add quotes from people on the guidebook. -**TODO:** Add two sentences on the growth— both the web growth and maybe a quote from an email I've received. + + +> Hi Leah. Thanks for the course today. I really enjoyed it. I heard about it from your post here in the Python channel so I'm glad you shared it here. I'll keep my eye out for more coming up and will be referring to the tutorials and guides on your site. Hopefully you work out the spatial chat because that seemed to have a lot of potential! +I also want to let you know that I got a ton of value out of your materials on the CU Open Earth data analytics site, and it's still my go-to resource to point people to when they ask me how to get started learning the open source spatial stack. So thank you! +> workshop attendee -- Software underground community +{: .highlight-quote } + + -### The power of community: Translating the guide & tutorials to other languages -The success of our packaging guidebook has been remarkable, thanks to the tremendous input and feedback from the community. What began as a simple guide has evolved into a collaborative project, with enthusiastic participation from contributors worldwide. At our last PyCon sprint, [Felipe Moreno](https://www.github.com/flpm), a new contributor at the time, took the initiative to set up the translation infrastructure, sparking significant momentum that has since transformed the guidebook into a truly global resource. + + +In addition to the valuable feedback we receive from our community, the data we collect through Matomo web analytics shows our guide's usage and growth. +I will leave web and social media growth, which have also shown extraordinary growth for future posts! + +### The power of community: Translating the guide & tutorials to other languages -This translation process has taken on a life of its own, with over XX pull requests already submitted. pyOpenSci community members are now actively translating our Python packaging guide into Spanish and Japanese, with the exciting possibility of pyOpenSci lessons being taught at PyCon Japan next year once the Japanese translation is complete. This entire effort underscores the power of community when guided in the right direction, showcasing how collective effort can drive meaningful progress. +The success of our packaging guide has been remarkable, thanks to the tremendous input and feedback from the community. What began as a simple guide has evolved into a collaborative project, with enthusiastic participation from contributors worldwide. -> This entire effort underscores the power of community when guided in -> the right direction, showcasing how collective effort can drive -> meaningful progress. +> @leahawasser @pyOpenSci clicking through and eventually found myself looking at "what is a python package" [www.pyopensci.org] and involuntarily performed a standing ovation. bookmarked it as an example of great docs for an incredibly complex subject with many meanings in many different contexts {: .highlight-quote } -## Using Sphinx as a translation tool for our Python packaging guide--Internationalization -Felipe set up flexible ttranslation infrastructure using a Sphinx extension, allowing contributors to translate as much or as little of the guidebook as they wish at any time. The infrastructure also runs so that as we update the English versions of the guidebook, the translation extension will identify new and revised text that needs to be translated. The community's response has been overwhelmingly positive, with about 50% of the Spanish translation already covered (though unpublished) and work on the Japanese translation well underway. Remarkably, this entire translation effort is unfunded and entirely community-led, a testament to the dedication and passion of the pyOpenSci community. +[View toot on mastodon](https://circumstances.run/@hipsterelectron/112557545629456885) -Translation in our context refers to converting text from one language to another to make the content accessible to a broader audience. Internationalization (i18n) is the process of designing and developing infrastructure to be easily adapted to various languages and regions. Together, these practices enable global accessibility and usability of the pyOpenSci online education resources, including our packaging guide. -{: .notice } +At our last PyCon sprint, a then-new contributor, [Felipe Moreno](https://www.github.com/flpm), set up translation infrastructure for our guide. The translation infrastructure uses a Sphinx extension that allows contributors to translate as much or as little of the guide as they wish. This process supports +small iterative pull requests that any contributor with little time can make. + +```markdown +#: ../../documentation/hosting-tools/intro.md:3 +msgid "" +"The most common tool for building documentation in the Python ecosystem " +"currently is Sphinx. However, some maintainers are using tools like " +"[mkdocs](https://www.mkdocs.org/) for documentation. It is up to you to " +"use the platform that you prefer for your documentation!" +msgstr "" +"Sphinx es la herramienta más común para construir documentación en el " +"ecosistema de Python. Sin embargo, algunos mantenedores están usando " +"herramientas como [mkdocs](https://www.mkdocs.org/) para generar la " +"documentación. ¡Es tu decisión usar la herramienta que prefieras para tu " +"documentación!" +``` + +Felipe's translation infrastructure contribution has sparked significant community momentum. As I write this, pyOpenSci contributors are actively translating our Python packaging guide into Spanish and Japanese; we have had dozens of pull requests. One contributor may even teach the pyOpenSci Python packaging lessons at [PyCon Japan](https://2024.pycon.jp/en) next year! This entire effort underscores the power of community when guided in the right direction. + +Our guide is becoming a global resource! + +You may be wondering where all of these new contributors are +coming from. We get many new active contributors when we lead events at core meetings. + +I'll talk about that next. ## pyOpenSci at PyCon and SciPy 2024 -- sprints, talks and new contributors -Our engagement at SciPy and PyCon this year marked a significant leap forward from last year. We had so much more engagement this year compared to last. +We've held sprints at SciPy and PyCon US in the past two years. +We had significantly more engagement at SciPy and PyCon in 2024 compared to 2023. What is most impressive is many of our sprint participants have continued to contribute to pyOpenSci after our in-person sprint events. + +While pyOpenSci operates mainly as an online community, I find there is no better way to build a core community than by holding in-person events at large meetings. While we get plenty of expert Pythonistas at our sprints, our sprint events are always beginner-friendly. Many first-time contributors help pyOpenSci with various open issues on our help-wanted GitHub project board while submitting their first pull requests and issues to GitHub. + +Beginner-friendly sprints represent a true win-win for both contributors and pyOpenSci.Contributors learn new skills, and pyOpenSci gets help with the vital work that they are doing. -**What is a community sprint?:** Community sprints are collaborative coding and documentation update sessions where new and experienced contributors work together on open-source projects. These sprints provide a supportive environment with guidance from project maintainers or experienced developers, helping participants contribute effectively. They are an excellent opportunity for learning, networking, and making meaningful contributions to the open-source community. [You can read more about that here.](https://www.pyopensci.org/blog/pyopensci-pyconus-2024-sprints.html) -{: .notice } +
-We had many more people engaged and contributing to pyOpenSci this year than last. As I write this, many of our sprint participants have continued to contribute to pyOpenSci after the event—our focus on making sprints beginner-friendly paid off. Many first-time contributors helped pyOpenSci with various open issues on our help-wanted GitHub project board. This surge in participation and continued engagement underscores the growing momentum and impact of pyOpenSci. +### What is a community sprint? +{: .no-toc} -TODO: UPDATE NUMBERS HERE from https://github.com/orgs/pyOpenSci/projects/12 +Community sprints are collaborative coding and documentation update sessions where new and experienced contributors work together on open-source projects. These sprints provide a supportive environment with guidance from project maintainers or experienced developers, helping participants contribute effectively. They are an excellent opportunity for learning, networking, and making meaningful contributions to the open-source community. [You can read more about that here.](https://www.pyopensci.org/blog/pyopensci-pyconus-2024-sprints.html) +
+ + | Meeting | total prs & issues submitted | total contributors | |----------|----------|----------| @@ -243,112 +278,141 @@ TODO: UPDATE NUMBERS HERE from https://github.com/orgs/pyOpenSci/projects/12 | Scipy 2024 | Item 8 | Item 9 | | pyCascades 2024 (community lead) | 19 | Item 9 | -## Talks at big Python meetings - PyCon and SciPy +### My talks at SciPy and PyCon US 2024 -I wonder if this section could be integrated above somehow? i can link to both blog posts on my talks. +Last year, I gave a talk at PyCon US at the [Maintainers Summit](https://www.pyopensci.org/blog/pycon-2023-packaging-presentation-sprints-leah-wasser.html#python-packaging-packaging-packaging). +This year, I gave talks about both [SciPy's Maintainers Summit](https://www.youtube.com/watch?v=uCLlshkTBM0) and at [PyCon US - in the main track](https://www.youtube.com/watch?v=uCLlshkTBM0)! At PyCon, I spoke about how pyOpenSci is leveraging the community and building consensus on the thorniest topic: Python packaging. At SciPy, I focused on bringing the scientific community together to help solve Python packaging. I also overviewed our community-run scientific Python software peer review program and the success that we've +had collaborated with [other partner communities, such as Astropy](https://www.pyopensci.org/software-peer-review/partners/astropy.html). -I also had the opportunity to give two talks this year. -I gave a talk at PyCon about how pyOpenSci is leveraging the community and building consensus around the thorniest topic: Python packaging. +Here is my SciPy video if you want to check it out now. :) -Link to blog post on the talk. +{% include video id="uCLlshkTBM0" provider="youtube" %} - -## Strengthening Scientific Software ecosystem with Peer Review +## pyOpenSci's software peer review program is growing, too -While pyOpenSci has run peer review since 2019, funding allowed us to fully document, formalize and set the review process up to be more scalable when I started, I started full-time. The [peer review guidebook](https://www.pyopensci.org/software-peer-review/) was one of the first things I worked on in the fall of 2022. The goal of this guidebook was to +Funding has propelled pyOpenSci's peer review process forward. While pyOpenSci has run peer review since 2019, funding allowed us to document, formalize, and make the peer review program more sustainable and scalable. The [peer review guide](https://www.pyopensci.org/software-peer-review/) was one of the first things I worked on in the Fall of 2022. The goal of this guide was to define each role in the software peer review process define policies around our review package scope, how we review, how we determine what is in scope, and more -The guidebook also guides community partnerships that we have with groups such as Astropy (formalized in in 2024). - -In 4 months, we published a shiny new peer review guide. In January 2023, we started peer review again. The results of both funding, documentation, and building a robust editorial team can be clearly seen in the plot below +The guide also documents our [community partnership program](https://www.pyopensci.org/partners.html), that pyOpenSci in 2024 through our collaboration with Astropy. +In four months, we published a shiny new peer review guide. In January 2023, we re-launched peer review again. Peer review submissions increased dramatically starting in January 2024 (see below).
- A cumulative sum plot with months on the x-axis and number of review issues submitted on the Y axis. The curve starts with a small slope in 2019. Then, around January 2023, the slope becomes more steep, indicating a dramatic increase in submissions when we reopened the peer review. At that point in the plot, there is a label that says 'Full-time funding' -
It is clear the impact that 1) working on our peer review guide and peer review governance plus 2) funding which allowed me to devote all of my professional time to pyOpenSci, had on our peer review program. It has been incredibly successful in the past year! And true success lies in the hands of the community that leads the review process.
+ A cumulative sum plot with months on the x-axis and number of review issues submitted on the Y axis. The curve starts with a small slope in 2019. Then, around January 2023, the slope becomes significantly steeper, indicating a dramatic increase in submissions when we reopened the peer review. At that point in the plot, there is a label that says 'Full-time funding' +
It is clear the impact that 1) working on our peer review guide and governance plus 2) funding, which allowed me to devote all of my professional time to pyOpenSci, had on our peer review program. It has been incredibly successful in the past year! And true success lies in the hands of the community that leads the review process. Today, on average, pyOpenSci has 10-14 packages in our software review queue. +
- + You can see more of our [peer review metrics on the myst markdown metrics dashboard here](https://www.pyopensci.org/peer-review-metrics/pyopensci-peer-review-stats) -Our goal for the Sloan Foundation proposal was to review 20 packages in two years. We have almost doubled that goal already. On average, pyOpenSci now has 10-14 packages in our queue. +{: .button } -**We greatly value diversity (do we have any metrics from our review data that I can share here??)** +### Is pyOpenSci's peer review program diverse? -## A thoughtful, kind, and supportive community is what makes the pyOpenSci special +Diversity, equity, inclusion, and accessibility (DEIA) are core to everything that pyOpenSci does. But how do we know that we are aligning with that core value? -Every morning, I wake up and am excited to begin my work. It doesn't matter if I'm working on budgets and other Executive Director-type tasks or developing educational content and teaching (my two favorite things); I can't wait to see what messages pop up in my inbox, be it Slack, email, or others. I love my job so much because the pyOpenSci community is extraordinary. +Data can help us here, too. Here are a few insights from 93 people who have participated in our peer review program survey over the past two years. Our peer review participants represent a healthy mix of students, industry professionals, and academics. -This community is extraordinary because: +Almost half of the participants identify as having some computer science application in their work; 80% self-identify as scientists (as mentioned above). -People care about our organization's mission to help scientists make their science more open and collaborative. So they can solve the world's greatest challenges. -The community wants to help - be it each other or pyOpenSci as an organization--and people care. -The community is kind. They are kind in their words and kind in how they help each other. +About 50% of our peer review team self-identifies as white. The other help are from a mix of different backgrounds and ethnicities—about 60% of our audience self-identify as male. -> I love the friendliness and positive energy around the combination of -> science+computing (in Python, too)! It's a lovely community of practice! -~ Titus Brown, Faculty - University of California, Davis, pyOpenSci community member. +#### Open Source metrics -> As maintainers of the Scientific Python library, we see great potential in > pyOpenSci. Test code, documentation, and internationalization. These -> are things we have gradually accumulated know-how for in order to -> create a robust library on GitHub. Now, these are about to be integrated -> by the pyOpenSci project. -> ~ Tetsuo Koyama - PyVista maintainer +Some of the open-source responses surprised me: +* 60% of people maintainers have funding to do their work! (*This number surprised me.*) +* 70% of maintainers report that outside contributors contribute to their projects through issues and pull requests. -> I'm hopeful that the standards established by pyOpenSci will help -> alleviate the reproducibility crisis, increasing public trust in science, -> accelerating progress, and making all our jobs a little bit easier! -> ~Jackson Burns - DM about info +I'll dedicate another blog post to examining this data more thoroughly. Still, you can get the gist from the above summary: We have a strong representation of people from different backgrounds and career stages. However, we still need to do more to support increased gender diversity. -> I love the educational aspect of pyOpenSci and how it focuses on removing the technical friction that prevents people from contributing to open source and open science. The community makes a conscious effort to create a welcoming culture and provide a safe place to learn for beginners. It helps prepare people for even bigger future contributions to the open science and open source movements. +I'm confident that we'll get there. -> ~Felipe Moreno - Tech Industry Professional +## A thoughtful, kind, and supportive community is what makes pyOpenSci special -> As a participant in the first packaging workshop, I found that individual attention and focus on success were outstanding. The organization and approach to teaching a scientist how to create a package helped build skills and ongoing productivity. -> -> Carol Willing, +Every morning, I wake up and am excited to begin my work. It doesn't matter if I'm working on budgets and other Executive Director-type tasks or developing educational content and teaching (my two favorite things); I can't wait to see what messages pop up in my inbox, be it Slack, email, Discord, or GitHub. I love my job because the pyOpenSci community is extraordinary. -## Building a sustainability model for pyOpenSci so we can continue to thrive + People care about our organization's mission to help scientists make their science more open and collaborative. So they can solve the world's greatest challenges. -We now have strong evidence of a demand for the on-the-ground community and education work that pyOpenSci is doing. However, every non-profit organization (or fiscally sponsored project) has to ask is: + The community wants to help--be it each other or pyOpenSci as an organization. -How do we sustain this effort over time? + The community is kind; the discussions are engaging and people help each other. -You see, writing grants, while encouraged at universities, is not a sustainable business model. +{% include pyos-blockquote.html quote="I love the friendliness and positive energy around the combination of science+computing (in Python, too)! It's a lovely community of practice!" author="Titus Brown, Faculty - University of California, Davis, pyOpenSci community member" class="highlight magenta" %} -You spend months working on a grant that you have a 15-20% chance of actually getting. This requires time, and time requires money. But you also need money to survive. +The community also cares a lot about the scientific Python ecosystem and wants to see more robust software. -New grants often focus on funding new and innovative ideas rather than sustaining existing work. While innovation is valuable, maintaining open-source tools and educational resources is critical. As organizations and communities grow, the need to hire additional support increases, making sustainability more challenging. Unfortunately, most funding agencies do not prioritize maintenance. However, despite these challenges, pyOpenSci aims to build a sustainable model despite this challenge. +{% include pyos-blockquote.html quote="As maintainers of the Scientific Python library, we see great potential in pyOpenSci. Test, code, documentation, and internationalization. These are things we have gradually accumulated know-how for in order to create a robust library on GitHub. Now, these are about to be integrated by the pyOpenSci project." author="Tetsuo Koyama - PyVista maintainer" class="highlight" %} -As part of our sustainability model, we will offer paid online training events. In the same way that NumFocus runs PyData and SciPy meetings, we will run workshops and open science festivals . +They care about the packaging guidelines we have worked so hard to co-create and the impact those guidelines and online resources have on scientists who are just trying to get their jobs done. -The first paid workshop we ran was an intro to packaging workshop. Our upcoming event is the inaugural pyOpenSci Fall Festival. +{% include pyos-blockquote.html quote="I'm hopeful that the standards established by pyOpenSci will help alleviate the reproducibility crisis, increasing public trust in science, accelerating progress, and making all our jobs a little bit easier!" author="Jackson Burns, MIT" class="highlight magenta" %} -The idea here is that we build and provide free online resources as a community service. We also offer support through our community. But we also offer more hands-on events that include training and, in our first experiment, office hours to troubleshoot outside of the programmed workshop. +And, like me, the community cares deeply about education. The community wants to help +eliminate the packaging and open science thorns. They want to make packaging (and using Python) more +accessible to more people. -I love experiments, which might be why I've been able to build three programs to date. At home, I experiment with plants, starting seeds and propagating various plants using different methods. At work, I'm experimenting with a business model to see if we can sustain the incredible community effort that pyOpenSci has created. This experiment will show how pyOpenSci can sustain a training model. +{% include pyos-blockquote.html quote="I love the educational aspect of pyOpenSci and how it focuses on removing the technical friction that prevents people from contributing to open source and open science. The community makes a conscious effort to create a welcoming culture and provide a safe place to learn for beginners. It helps prepare people for even bigger future contributions to the open science and open source movements." author="Felipe Moreno - Tech Industry Professional" class="highlight" %} -## What's next for pyOpenSci - The Road Ahead -Our upcoming projects and initiatives include launching our inaugural Fall Festival and developing BSSw lessons focused on collaborative Git and GitHub workflows for scientists. We’re also excited to share our visions for the future of pyOpenSci, emphasizing our commitment to fostering a vibrant community. The community has been central to pyOpenSci’s journey, and we are dedicated to continuing our efforts to grow and support it further. +Carol below was more than just a participant! She also helped many students +in their workshop learning experience. + +{% include pyos-blockquote.html quote="As a participant in the first packaging workshop, I found that individual attention and focus on success were outstanding. The organization and approach to teaching a scientist how to create a package helped build skills and ongoing productivity." author="Carol Willing - Open Source & Open Science Leader, Project Jupyter, Python Core Dev" class="highlight purple" %} + +## Building a sustainability model for pyOpenSci so we can continue to thrive - what's next +There’s a strong demand for the work pyOpenSci is doing. Still, every nonprofit or fiscally sponsored project has to ask: - - Reiterate the importance of the community in pyOpenSci's journey. - - Mention any planned efforts to grow or support the community further. +*How do we keep this going long-term?* +Writing grants to bring in funding is essential, but I need to do more than just write grants. Writing grants takes tremendous energy, with only a ~10-20% chance of success. Also, grant calls usually focus on innovation rather than keeping a project maintenance. + +To ensure that pyOpenSci is sustainable, we’re rolling out paid online training events. Paid events are a revenue model used by other nonprofits in our ecosystem: + +NumFocus runs PyData and SciPy meetings +The Python Software Foundation runs PyCon as a significant fundraising event. +These paid events will support the low-cost training, event scholarships, free online tutorials, and resources we will continue to create and publish online. + +## What's next for pyOpenSci - The Road Ahead +Our next training event is the inaugural pyOpenSci Fall Festival - a week-long event that teaches skills needed to: + +* Write cleaner, more modular code, +* Package and share code, +* Publish and cite code, +* Create reproducible reports that connect code, data, and outputs into a dynamically produced interactive publication + +We also will develop collaborative GitHub lessons following the BSSw fellowship I received this year. ## Get involved with pyOpenSci - - Invite readers to get involved or support pyOpenSci in various ways. - - Provide links or contacts for further engagement. +Congratulations on reading my longest post ever. I hope you are as excited as I am about pyOpenSci's future. + +If you'd like to get involved with pyOpenSci, check out our [volunteer page](/volunteer.html). + +You can also: + +* Keep an eye on our [events page](/events.html) for upcoming training events. + +Follow us on social platforms: + + [ Discourse](https://pyopensci.discourse.group/) ** [ Mastodon](https://fosstodon.org/@pyopensci) +** [ Bluesky](https://bsky.app/profile/pyopensci.bsky.social) +** [ LinkedIn](https://www.linkedin.com/company/pyopensci) +** [ GitHub](https://github.com/pyOpenSci) + +If you are on LinkedIn, you should subscribe to our newsletter too. + +
## About Me -My name is Leah, and I'm the executive director and founder of pyOpenSci. With over 20 years of experience in both academic and non-profit spaces, my career is dedicated to helping scientists overcome the challenges of open science. I've built and led two successful data science programs: +My name is Leah, and I'm the executive director and founder of pyOpenSci. I have over 20 years of experience in both academic and nonprofit spaces and have dedicated my career to helping scientists overcome the challenges of open science. I've built and led two successful data science programs: 1. **NEON Data Skills Program** at NEON 2. **Earth Analytics Program** at CU Boulder -I'm now building **pyOpenSci** - a vibrant, active and diverse community of practice that supports open science and the open-source software that driving that science. +I'm now building **pyOpenSci** - a vibrant, active, and diverse community of practice that supports open science and the open-source software that drives that science. -The programs i build have consistently stayed at the cutting edge of technology through continual evaluation and a data-driven approach. Throughout my career, I've observed significant gaps between the innovative tools being developed and the training scientists receive, which has driven my work in bridging these gaps. +The programs I build have consistently stayed at the cutting edge of technology through continual evaluation and a data-driven approach. Throughout my career, I've observed significant gaps between the innovative tools being developed and the training scientists receive, which has driven my work in bridging these gaps. +
diff --git a/_sass/minimal-mistakes/_base.scss b/_sass/minimal-mistakes/_base.scss index dea94a90..d86e179e 100644 --- a/_sass/minimal-mistakes/_base.scss +++ b/_sass/minimal-mistakes/_base.scss @@ -141,10 +141,19 @@ blockquote.highlight-quote { max-width: 35rem; //quotes: "\201C""\201D""\2018""\2019"; + footer { + text-align: left; + font-style: italic; + font-weight: 500; + // font-size: 18px; + // margin-top: 20px; + //color: #555; // Adjust the color as needed + } + p { font-size: 21px; position: relative; - //padding-left: 40px; + margin-bottom: 10px; &:before, &:after { @@ -167,6 +176,19 @@ blockquote.highlight-quote { bottom: -20px; } } + // Success class (magenta) + &.magenta p { + &:before, + &:after { + color: $pyos-magenta; + } + } + &.purple p { + &:before, + &:after { + color: pyos-mediumpurple; + } + } } /* links */ diff --git a/_sass/minimal-mistakes/_variables.scss b/_sass/minimal-mistakes/_variables.scss index 75f6d946..d0d70f80 100644 --- a/_sass/minimal-mistakes/_variables.scss +++ b/_sass/minimal-mistakes/_variables.scss @@ -84,6 +84,7 @@ $pyos-lightpurple: #e1dfed; $pyos-teal: #81c0aa; $pyos-magenta: #bb82b0; $pyos-yellow: #f6f0dc; +$pyos-mediumpurple: #735fab; $gray: #24052f !default; $dark-gray: #4c454e !default; @@ -100,11 +101,11 @@ $border-color: $lighter-gray !default; $form-background-color: $lighter-gray !default; $footer-background-color: $lighter-gray !default; -$primary-color: #6f777d !default; +$primary-color: #bab3d4 !default; $success-color: #81c0aa !default; -$warning-color: #d67f05 !default; -$danger-color: #ee5f5b !default; -$info-color: #320e5b !default; +$warning-color: #e6cb72 !default; +$danger-color: #f9937c !default; +$info-color: #33205c !default; $focus-color: $primary-color !default; $active-color: mix(#fff, $primary-color, 80%) !default; diff --git a/scripts/date-updated.sh b/scripts/date-updated.sh index 6ad15e39..ba5057c3 100755 --- a/scripts/date-updated.sh +++ b/scripts/date-updated.sh @@ -6,10 +6,11 @@ for file in _posts/*.md; do # Check if the file contains last_modified in the front matter if grep -q '^last_modified:' "$file"; then - last_modified=$(git log -1 --format="%ad" --date=iso "$file") + last_modified=$(git log -1 --format="%ad" --date=short "$file") + echo "Processing file: $file" echo "Last modified date: $last_modified" - + # Use awk to update the last_modified in the front matter awk -v date="$last_modified" ' BEGIN { inside_front_matter=0 }
+ + A flower petal image with three flower petals and a flower center. In each petal, there is text. The first petal says software peer review; the second says community partnerships; the third says packaging resources and recommendations. The center circle of the flower says diverse, inclusive community. + +
pyOpenSci supports scientists developing open-source software through three programs: 1) peer review of scientific software, 2) community partnerships, and 3) packaging resources and recommendations. A diverse and inclusive community that cares about the open-source software that drives open science supports all three of these programs. +
+