From 3d4764b93a4721a98a49ebf6c75d099995db3c92 Mon Sep 17 00:00:00 2001 From: Victoria Phelps Date: Fri, 8 Nov 2024 10:11:46 -0800 Subject: [PATCH] making format updates --- .github/workflows/deploy.yml | 2 +- .github/workflows/static.yml | 43 ---------- _build/.doctrees/content/C1-S1.doctree | Bin 22829 -> 28054 bytes _build/.doctrees/content/C1-S12.doctree | Bin 16329 -> 17600 bytes _build/.doctrees/content/C1-S17.doctree | Bin 41175 -> 41189 bytes _build/.doctrees/content/C1-S2.doctree | Bin 9088 -> 11967 bytes _build/.doctrees/content/C1-S3.doctree | Bin 8533 -> 11086 bytes _build/.doctrees/content/C1-S4.doctree | Bin 10300 -> 12820 bytes _build/.doctrees/content/C1-S5.doctree | Bin 8355 -> 8664 bytes _build/.doctrees/content/C1-S6.doctree | Bin 10040 -> 10557 bytes _build/.doctrees/content/C1-S7.doctree | Bin 11229 -> 11425 bytes _build/.doctrees/content/C1-S8.doctree | Bin 6274 -> 7142 bytes _build/.doctrees/content/Chapter1.doctree | Bin 19832 -> 21836 bytes _build/.doctrees/content/Chapter2.doctree | Bin 6378 -> 7046 bytes _build/.doctrees/environment.pickle | Bin 73742 -> 72943 bytes _build/html/README.html | 7 +- _build/html/_sources/content/C1-S1.md | 60 +++++--------- _build/html/_sources/content/C1-S12.md | 70 ++++------------ _build/html/_sources/content/C1-S17.md | 2 +- _build/html/_sources/content/C1-S2.md | 34 ++++---- _build/html/_sources/content/C1-S3.md | 49 ++++------- _build/html/_sources/content/C1-S4.md | 50 +++++------- _build/html/_sources/content/C1-S5.md | 16 ++-- _build/html/_sources/content/C1-S6.md | 28 +++---- _build/html/_sources/content/C1-S7.md | 49 ++++------- _build/html/_sources/content/C1-S8.md | 17 +--- _build/html/_sources/content/Chapter1.md | 40 +++------ _build/html/_sources/content/Chapter2.md | 6 +- _build/html/chapter1 copy.html | 7 +- _build/html/chapter1.html | 7 +- _build/html/content/C1-S1.html | 76 ++++++------------ _build/html/content/C1-S12.html | 76 +++--------------- _build/html/content/C1-S13.html | 33 ++------ _build/html/content/C1-S15.html | 33 ++------ _build/html/content/C1-S16.html | 33 ++------ _build/html/content/C1-S17.html | 15 ++-- _build/html/content/C1-S18.html | 7 +- _build/html/content/C1-S2.html | 40 +++++---- _build/html/content/C1-S3.html | 52 +++--------- _build/html/content/C1-S4.html | 52 ++++-------- _build/html/content/C1-S5.html | 18 +---- _build/html/content/C1-S6.html | 28 ++----- _build/html/content/C1-S7.html | 54 +++---------- _build/html/content/C1-S8.html | 22 +---- _build/html/content/Chapter1.html | 45 +++-------- _build/html/content/Chapter2.html | 13 +-- _build/html/genindex.html | 7 +- _build/html/intro.html | 7 +- _build/html/markdown-notebooks.html | 7 +- _build/html/notebooks.html | 7 +- _build/html/search.html | 7 +- _build/html/searchindex.js | 2 +- .../jupyter_execute/markdown-notebooks.ipynb | 6 +- _toc.yml | 5 -- content/C1-S1.md | 60 +++++--------- content/C1-S12.md | 70 ++++------------ content/C1-S17.md | 2 +- content/C1-S2.md | 34 ++++---- content/C1-S3.md | 49 ++++------- content/C1-S4.md | 50 +++++------- content/C1-S5.md | 16 ++-- content/C1-S6.md | 28 +++---- content/C1-S7.md | 49 ++++------- content/C1-S8.md | 17 +--- content/Chapter1.md | 40 +++------ content/Chapter2.md | 6 +- content/assets/images/image102.png | Bin 1444 -> 490763 bytes content/assets/images/image124.png | Bin 34941 -> 350270 bytes content/assets/images/image35.png | Bin 0 -> 1756 bytes content/assets/images/image49.png | Bin 0 -> 7823 bytes content/assets/images/image50.png | Bin 0 -> 7649 bytes content/assets/images/image51.png | Bin 0 -> 11339 bytes content/assets/images/image58.png | Bin 0 -> 6776 bytes content/assets/images/image59.png | Bin 0 -> 6790 bytes content/assets/images/image60.png | Bin 0 -> 6633 bytes content/assets/images/image61.png | Bin 0 -> 6703 bytes content/assets/images/image62.png | Bin 0 -> 6776 bytes content/assets/images/image63.png | Bin 0 -> 6604 bytes content/assets/images/image68.png | Bin 0 -> 8295 bytes content/assets/images/image73.png | Bin 0 -> 289068 bytes content/assets/images/image75.png | Bin 0 -> 12572 bytes content/assets/images/image76.png | Bin 8400 -> 300518 bytes 82 files changed, 447 insertions(+), 1106 deletions(-) delete mode 100644 .github/workflows/static.yml create mode 100644 content/assets/images/image35.png create mode 100644 content/assets/images/image49.png create mode 100644 content/assets/images/image50.png create mode 100644 content/assets/images/image51.png create mode 100644 content/assets/images/image58.png create mode 100644 content/assets/images/image59.png create mode 100644 content/assets/images/image60.png create mode 100644 content/assets/images/image61.png create mode 100644 content/assets/images/image62.png create mode 100644 content/assets/images/image63.png create mode 100644 content/assets/images/image68.png create mode 100644 content/assets/images/image73.png create mode 100644 content/assets/images/image75.png diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index c07e0e5..98ba84f 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -38,7 +38,7 @@ jobs: # Build the book - name: Build the book run: | - jupyter-book build snap-manual + jupyter-book build . # Upload the book's HTML as an artifact - name: Upload artifact diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml deleted file mode 100644 index 3e2d865..0000000 --- a/.github/workflows/static.yml +++ /dev/null @@ -1,43 +0,0 @@ -# Simple workflow for deploying static content to GitHub Pages -name: Deploy static content to Pages - -on: - # Runs on pushes targeting the default branch - push: - branches: ["jupyterbook"] - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages -permissions: - contents: read - pages: write - id-token: write - -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. -concurrency: - group: "pages" - cancel-in-progress: false - -jobs: - # Single deploy job since we're just deploying - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup Pages - uses: actions/configure-pages@v5 - - name: Upload artifact - uses: actions/upload-pages-artifact@v3 - with: - # Upload entire repository - path: '.' - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 diff --git a/_build/.doctrees/content/C1-S1.doctree b/_build/.doctrees/content/C1-S1.doctree index a53f3b9a0c302e4358a7f07cf08a329e60f5ad4f..d4912de0af2165945b25d4a13f8402c80c3f3b09 100644 GIT binary patch delta 4902 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 diff --git a/_build/.doctrees/content/C1-S12.doctree b/_build/.doctrees/content/C1-S12.doctree index becf4094fde37d48e5a40a372d7d2a2cd10991bb..c3f1b6787dfae8d27bdf3cd28abc54d20ac72ae4 100644 GIT binary patch delta 3222 zcmb7HZERCz6yEK}wr;a!?5ohVyZ3gb-ACIE1`Jj=kPU_yCNjffMCjnc+qmE$)Lg zSkezGTHPq|!<$gnUZ&s74MkVp((DY=xM-xJmdB0pdh$BP@rK!eW`&Go(?LrQppi}^aMTc4B2c-Ww=O& zeo=OXyMYXe4ycrJRe!yJsSadnue}MfK4b5N^?Q4NIX_4wet0yoZ)Bd8PP?B9j&9i9 z>(~VAr;aVK-f{G~`7~Hc6BCIEo(YWMU@&u&hL-w( z4rk?NSoc(7bInzTb=XhXXM=D<5JCE)#o}6$S13k4c0gb4(48t$xtd1el3VC_eN$~g z)h>k;T&IIoy8+Y5nlSyjY8kves=^}bsm6k8sPoa2)oysZRNYt4r=nxYQHh^SNqph} zA4{*-s%a=f4^(Xfvy(MAD;`yO>DF2i-ZVGiDtSGmIJc1KYjvwk@^cto3zkOpe0aL0 zQXMkSR2d(Q??)^f>0W0sxSw;ntcp3ZP^q3L8VjA-f1N2a_sYW2*DBGUsZVg_ly~pp z(tx8~@TeHZRkVP?7@YU99WM(w1n&x%rFIcp?U0DAd0un@34ZzyAD};oX!E$CRnZ(5 z0yONcDdkh6vHj8ncCDYj0LpFNE--uF+q+y#WajbC#F&(hjY%o~P+}4qlV0&4D|ZE_ z8Kq*e8KicxR+0L}Hjv={0MoDXTLqccTegl~5bN|hQ6#q1W{`_b$c3QhLGz_>Vd4Wu zZx&u-lp_vxB@_Bpx`w^(I9&IH_7tFObM78AlImX!2uOY&2+*(~PA>w48+i+HzIXezzXWl!6@%O?J`kxe`86#{9;8)YG07mtRvi=t6so_&;DVdDL z4~ClcM!vV8ZRc)=uM!w1xf4dX+|Bo(SwycpHT-fslW_n?{s`);=ame*WNNOU$c6hmJKt$ z>x}+IPj{{19?)O9Jib4{tDa46m39E$bn_B3J=0Z3H$-?i6OF94{DDY*@2W8so9Wp| zlXL`Rc^VdSja-%Ez`s0#%R8t)49jH37LUTXK9rPF_+LQA6Vv3{v|>E17*0;qs7%ZU2_F^BRSR?O2gX zN2i_KbDGH`gS$e)jkpy%M$9n9li7-U%th*=yAsB%`kWmvWL=f>E(UTgs+H8SM^#>s zcQ*}ytf?Gk*>Q}xa6*hskr%D|VNkR7gZ#ld1d^*A)$@PA@E z@BXEn`)tdb_$_=sjazUo2Ad%Ug}&}&vgw?v^O3u?P2j@)&Ch{!*=YJ++uXjAtaa(; zv0Tk#u@zu(QY_?QT?n@5si&-%t*0^krk=*r+|UQ|g@(bctjs4<3B;vk#EFw!ObP15 z@nD-eOg?QGwrH8{JYetodqH~*zD~1=8%MEY6zEIUdg|MWXG_Cc)!Lk@PLL8^c@SW1 zBWR0zJ<9tj+Vvp^r0F=^@S*AGy-93q1Lyg~nsLjm9Io;xcZ`02TLr=1@7PueM#y*sIVr(=)PC&z@73B<|@N~NIb z_vO#N^{jUkTc0~q;$y{mc!(liy4bmBFoYS>+wGvA@j&>Q9^Y*xj|1bYMkZJFtmMz` z)$_GvcK6XWIu(14tQjGDdg+K5+-W|NV?DXnZYA!$_YIdbaNy$z9;Q92_DWvua&T-o zTPoO+zj93xF_{w6Q0y!BE;i~nW{Fy^h!I6Xs9=s1?=_s0vB{JsXKLRD<52*MF1e#V&N&ZX} zr4+0k`U`$)d4x|XF;ReBSa?a~df2FLIGGT`+PrGSv1k+t+MHUEHJ=@rS4~1X8AcL{ zY9l2otHc!8RumFvwK=%h;@`rKdL$hq3=rTpboZshJa*EDiVL0>+d`UJnGILlX^CFN zlE&jEm}-W6QBUsE%7Y=QI7wp6?C3j^a``o3qm)ZW>(H~UOcOKCgL!V?CvSZ5>4 zz0QGSaFkID>9AUTT9l#@NSo4@j0tH4A{0Lk)46Ab%5>z+K`U=8l`%Ha=VFeLbA17O z2-XxeCK|}yJ}-I-c;kOi&=>Gr+(mm1D!!uPCWy3Z7WgDm&ZYnY#3D{t%;O95y7IiP zIG@HYI;GpO;5p3eM(~1e0g7p&-_11#~7RD{wY&Q8AKE0zJ9qnGaUcb{AY$A6 diff --git a/_build/.doctrees/content/C1-S17.doctree b/_build/.doctrees/content/C1-S17.doctree index 930c30e46b79acf2ae97ea5921e11dbdb7103a00..194d866d000cffa47c12e77b92b4683e3af7c81b 100644 GIT binary patch delta 71 zcmcb9km>0`CYA=)skb(=^jk1KoxCtZck*hh9b7i4xps;+`ap7XjU^)^R+-5)mcKS9 I*p#OL01|o}F8}}l delta 56 zcmaEQkm>qCCYA=)sb@B_^jk3Ao19p#J9(4U4rVPyt;r?Uzb4mOv7?G^F0n351puXM B7P{Q&}=JJP>Dl(sB&m4gDUmXR0tuVwtql-0tpGJ2OvidsPop|%_19+uUuwl z=FR-(b~hum}RSC*#a{kxHtHw3rnb}=Qf5TzfhiDf7{ zd*5=F#BAcc2HM+SXzN;t*-FjaMPv4PjdfK7*xND!5h>g=%ls_D0*6KBW4l=&6AMYS zAu>k-x6?&!dL+ZSDt)C@pnYr+4zvs)l2c}3eTa}8k?M=VEulD3`n7F@CSku7-U=q9t=$7$53OIFio7*($?P+Ok|d$v{SnF7;x ze{cvJ>CqeNV^X!5W~OuJnwy#+?HM2xu6W`||M48;{0`24+REvT))}NvTR$MQ{C?Xt z!DG}i_b+MEo!_7dHMNw;EA+tGjJle+U;GxXdnVBf(Hu0-lohVp)w<7(-yBV57FHrP z@FBY0jr0zL=E*YuQ5HCg_rGQ~Hwe>hL9;o!)MoMY@ucuB53OS1-b&#noc@p~O{qL7 zn$IlLY-*9^>FG>XRkBffNTsQK&Vt7Cz>D#9nh<72U8OjD*%r6PHmtiX*7{3s(gVlg zuZHYn(B+LafFFbThU}-|d+&4u_%rapJJXPTxV;hkIGk&5q@ObU)-KoNlW|1@)q6J| z{4wM8%-s_4LN{Hz;JVZy4v+4EU!@6QY!aSGorDXMNS{c@$S~55jdnYV-9D7z6=ddpZ6vkg3P#7P1h5sl&r}a{*&XL!=^kCi6 zEAy54(rf%j_DcOjwIkDqBeP~QmWq5o!B0Ig_^*5To$ZAaV&-G2v%@T-<8oyX>4Tcq zMh#(7m(Zj#l3}Cg6PqscX;b9_y&qONTnam1zVy;RTEf-Yd(Vf{SA&hOhEVx#uPBno z<-hyxi~iBkabxRin?u0B05dqfaF<%&Ub@AR4;7>W!e;W%-Zz9Q+oN8i8$*(M9v~?}b Q4=(1IjO=E)H@Hat2V9n5c_ZsVM#kvL#~B|oYbk0?=4IF3e3$6~6Q4y!YGR6>LU3MU0Ytop zF>rFAs1~FDiGx(a2!!nK#*=$DfgFG9!;FkUYnu&c!t)gFSXih8U(4 zFV~dTDIkp*(itaLF9gZS0LFb;=;tGHCaJaX>+bXB@@tD5Es+OE_e{!1_gnt=8cS-8MjI^ zv@>AgAczzWda!WlsnnW0Q`v3uJtadSEr@#q;Bw_KDK@Z-#^kBWAxs(XCNuKNFut42 zr{V?TL`iA!`U8Vm4IJFk8LuX9R8^SVAjQF`wwY6vnVHdMGq1)YW;sJ6OIQptgV-?l zW>qmVFo2vaJXt|Uo~eRyvZIcyMkP=X?hZynm`)%IuCEKOZ>EkSNZ%eE6X|lGV2@yV zeo;zteraBbZf<5?X-R7Fl&nt1$=tdcs)9iIEFO@~9?rbP+|-iF0-$W|lq`@$XK{ui Mkjb+-LN}ce07??|%K!iX diff --git a/_build/.doctrees/content/C1-S3.doctree b/_build/.doctrees/content/C1-S3.doctree index b894e97cc17fcb0abb9ff28e1d84235f07af3efc..9a295f2fb4cb8cfdefd8073846006d44d6e82f9b 100644 GIT binary patch delta 3156 zcma)8O>7%Q6t3+$iPuS;q_)$hi9Jq`9Ve-qx=l&aKSZjuC~X?4Qq=<~+St>KjkCMm zU6Zs>VGbZ68L8^H2P!IYX-^cX3Ks-KfH-ghRVr|zhe(J+5mFBvkT~#W_Sdn~<}&vD zz4yKEeeccw^6F0){T2W1>5+&2dmegUi1;u4=h?A?E_kyZL~nX$I*|O9SV9^R6+DIL zF7F&Y?mq^5$afk>;+ux?Gv6r~pZR)wYNU0cHbkP;g$pveBC4Zk1#eV7ro@|q6F0p> z7i;g=-mBe!GyBK^(noxxe~!fF%8MjWZNtk75w(I=qqVeg$X{(!u_CKFR=H`g>?}Bz zCh7Ig;rz=aHtQ$-WYn?^R-@GfS}e)AHvtJLNR;ZLdJZI?Dz3QE%rOQ678E{f zcU?aRIFj_EmXSARISz)$jFVxxGzQ#e&}%wSqM@8vD&ag5(MIJHE69z?U9^aEVp+q0 z7fYyMoK?%xC@M&rj>SBZuWUj8UKf-)axpy_?2qqv@zc(@2TW&eqUY(lXWkBt&w{2s zh@n75A=&*pSs<6oWQ17ZwbHARh-aM+w+=#n=USN#K5skKYjCb1U0%XE!RnMn*$?dK zS;&CQmW^Yaje?|u>bu zh+~zBg9jfl#nBl2rx1LK_O*p0+3_)D^(Z2^utfB!$*i(Ea6(|a*@=uIEe#+|zgEJ> z2UZGsolG@7ZN<6`qldR|)CdSt@j>%c1bHe}Xhs;KPXgyVISN*au~V|dYVcuT&qAQlYD_p>?rlu&3@240QTnw|_Wa1;^W|=H+4Gpb9n5+JaGDxE^uqie zJao{I!`~f8ll7@Lw`|f6pTR2ce3f8^J`D;-eyyW>6C3rL4jc0fSa#dMthDiK2iQLru*Sr@fbql! zSmMJ>p!BkQr9*-h_s9f8@Su7q$5FP}&pI{+hnu$#5#N4sbG zpmSoRiOU!%VhQUyHaauw6TgF{Sa73qAG$U=G(PIK`BH>8X%UrJTZG1)lS{J7{hW5H zx;PGa>U8c%c_)Ko3DlT4q#ZX1N>ZrocN>%!Bl~R2hWHZO^Xcc&TTacH&M?C<_+lLIIK*a}5bJo_%nR2kS3|6c8rJ>A0wbhp;t_B2&**Ov$oj45G)sNY zUU;CA^g$#|7ovRv513_i08R}oxVT!~6ftqye&{-0R7E4N1!*Z`vDUEeL{%}eHr&fz zgh3;aqUC}o>H-y_lLo@n^I$kKId4VcdIQYZLM{up4A)x-W)K8Zha&_ZPtFIIgj|-a zbM|+rLrD;?Dk|2rf-Ko|)U6p*w86J*@t(;=PjfDu#>9DA`?BX>ufO;dF0Fmh`@|RX zWhcfg#`%B4G#E~MK?zq|!u0!Cd?p1G#&dbG+O;C9`5b%<>HC)pQd!4ZtvCeR_B-x5 zXc>fmwz)~m+|hW#oAT1j@x%L)u-4SxgqJ>ur_#l50cY_m7_@3Yg5IHDQ^4Jg8sGR( PBMJD+w%4A;^Pc|!D$@z7 delta 1317 zcmb_cOH30{6y?pNQik#g{ZOFu>4#;|ea$_*PNCT@vqT^bjx^u5AN8?1>WZthIpymQ_?=bkrPSH7Hg z+;u#<5Pau&i9BpxyKRE0u9!=vf*n^cGBq_2Ywdz=XBa%qU65lG#KA`tC-oPrfXE09 zTy|c|NCm9r^g#(8GpES6%#krtd3Jx zxG88jr1St@?mFXdOELh@PVhd_<`64GeUr~MpOK!?Uh&aef7h8 zH(msH83yleJnP(H15A9tiZp$-M9!R~wx^sPc&ms^KZ0$A51k-uc0y6q!jU%{HfF&T xHArDewU6mTu%fmy2?T3uh{s!avrw#?B||dqaAtWH?ql^JXYD*9tKtj+EsV7uXE}%+CaN&v){sPJgaR_f_XLrZ3t@g57znS;u z_wnYff4ErBi0k6Vw#jXA+l0Sydc~K%G#xsGe>ErYG20M+!93(opkf)NkRq)rsG^i} zh06)Fl6zG`bjK+nhQAdi@vd;nq(-tGF?(I^c%>ebeYFHB<*UC{f1~~y1cLIo9Fom) z-+~-oz}u#7p|+qMWTQ!tqel*Nc{BLDKZ^IQHhjnO`18|ppPZ1x=gnHh>M|s@hsqV= z06^05VHKEITh!?2IP?gQW0B#oPn?y{$@5~fTy$})ooEQ3VvNJDu;*A}$ElLNFM!qd8{(F(Mug)an=ZB)aA zcP(DaEz&F>bljlY`8r~F#CptrLb`Ht;KVpQ@sf4b=!I$6Ipx}0-&8nRHgK^w)V0xo z-d9WF-^3)3k8bm@ZPfZhRE$Avw+2Q@O;ky(@q#p#Jm@oEJs=1~_yfPt1VK%Lh+qe; z&Jc`P2l-42HPsCDNGX?As%2>yT`HtXyaWy84Wt$#q}C?t52HiwYWOk_!DkwHgrh`i zmv$EWWgPaqcG$zjm;lEon#5?~+dTfzI^Vc)%pLD1-6hhy9h46fS(Uk6CaJY;V+L5-loJI=@A2B-ih}kJ$NbXb~mAPswlHK?T7)&nq$tmII|=up`21dxk9N5t)4FDN($HQ z`7pq2Xrr_~*z9GgB*DPRtgLB_`H(?1%BTj&-04!O>V;{qBmA`kIgNgzt5`FRrL-_k z)#9_xgX%zpQ|DxRbv&v%b^J@`1gP_G=QHq}bB67+8l_M4rO9qO4z8sN3Q~$FTP$Ce z6uR3r%R#@u8|!Ur>~qxEh0eHctRCT@zuX>r4}p&FInMxMtLrp87hJ=pPw}cNsYc=` zohqPeMM8=!@t)?JJjGvijf(j)L+&Cz`I%2-GwyVU#XNn}JYmaiJc;5hw?T}!L?axr zciR&S0x_=zk#q06qrl~F_dGmjJZIs#-%Z}{dyvt^|B!8dbTze7g@FkbDPi_ z#mfmf_|Rix>k1!Nn?;$)zM@9u1I{5!Q!~5ujjf}jIz&|eL|6&N} zEa+!?kOSCI_SNR_P2U_p3l1Frz@IgaVsF<1Qd8`|z!?^Uo~3^;=yB?Wzm3O3L(oVs zhDcLwg`PCp$qP%~MNV~(&~^k`)5StXfq|ekfe|oTAPD(n(hm~RV~ny^l(xWi#N6Wm z@d}X5`ZQz}THL%Xde6jA9RC>{!gqqkRBT$&zL3xpQ^H44U+Zs2eCN&ZV`f1Sb~Xlf z&B3Y3;~Gyhc~>byiSMCA555%%3%3P)H_{i`2Eh7VF->Y&@TTYd1Ub`W|4j4=;X45r uqdmes0lyuMMbANYJ_(OX%|`C5vR0BR@HanC7T&4I1Mr#@cK(QFP5%QOcK6u; delta 1471 zcmbtUOH30{6lG>8(xC_~rKKP0w3JReEwmL`8Ks7gBt)b;j4{xb!Pg3{v>l)(fGkV| zyW)=VgNbpe3lnUjF>z56apgi6CYrdArTE*pHStaV35^onyu6!x=A84+yYs}U7h|%k zvYTG}mTZfF9jZw-K2Frsz+3|hzbF=7vMfB3IS3lw5H6jIiN%=!o#YpjOd=T%M=!dV zneZi^fhXiqjQLULYotYV=z@qe|H-4E#cSfKxFjM2a>KT|6Q0&uhhbUnr8qMO&*h6{M+d`KDxbp2Hq}YghkOEZqN2PU%d5$B zHW$-+lN}nGtytXCJlISp;{xAZ451oCRfLqzH&$ImnOAw1Q+cg)fL~?DDpyn|=n{XG zW~Kj$>dcy4e7(hsHfTB6VQt`1bI{c4!5Y5Seiyxf_&Cob5uaj${7g)`>{Lu(LV+lg z2&9S@#{W#?{3}fuNru-m2~F-u>a6jR;hjN^ zdwT|^JedE=P2eY3;LF9gjv=Wi=H|@h<}c>I<3dMwIvTHUR6_R{HjI86fLwcs{NR}o_WO!Gi+LWliyUpYp z0ZPv?!*%>gRj#`POnU4#3+_kS@sdc(qk&mInYxUXmc)qESW6%?-nJ8&$DV28H(3A9 AwEzGB diff --git a/_build/.doctrees/content/C1-S5.doctree b/_build/.doctrees/content/C1-S5.doctree index 82504a3294320c1d9386ea837ca6d87d519fadcb..0ba42434eeda3f14623054bca65fdbd8c66f9fda 100644 GIT binary patch delta 1090 zcmZ4Nc*B{sfpzLx#f_|$jFZ=~h?@5ZgcMaOlw@QUD-Av3 zMR0NtlajnGNEc8yD^P|fLnec{G$}(*6Jk1RPtjyKW>ZFm$%-sCaPvywV#?}|8fF$N z6eJdvDCDOBot~*I zAh|sr>UJSHzYPD3fYJ=@444PFkUg+@H%k&TW8P#r4sXT^knOx>K-+nsw&zV=$YBMP zP2iFNl0P|;;Ot7y6gc}g61$cQq2@1FDqKwicQTyK$P)u+SMwmu`OA|I7jNQ4=w;<| z0E#P!i%pK<6Hx+%4$OTR@erZG$iOf;Q@{)u6$=Dhfn)-|8<5l$^Z=3{_@#NEksYCf ztWcX77(bKG2uN}(ROXi|q~zy;`0oVlP_-fw(+hY+NfC%Bdja%_0*W9-)HmD_C4&-C z4+WPnvSzV@oSncW4P`A6PQnmV6-mYrTP_lXA*LW|1r>t^Eu-$_cF_ymZa^!tJV1ok zlvz+>#Wf{^ zJ$6clSPxu@45pISDUDNVr({TH=uf`L-<77itH6gnU`wWND4DAe-G9leo^rn7Ua_`Vq6Np@j)7T`_~$un5mu3<{i!Od^vl<>eU{ zPL7n9V_Y=3LSBhwGfZNWydqHIioB`R0-#WjV0nH~N^*W_UWsmQW?pGYYVnk;O_P-s qG*zvD(pjcJqPT}MFEKZ@q_O}gSvw^QB+*%%p$KG}ZZ1?vX9NHvHRe|U diff --git a/_build/.doctrees/content/C1-S6.doctree b/_build/.doctrees/content/C1-S6.doctree index 89a9108b14630913ff1aa55aeabfad2110c187ac..74d54b9fae14710285123e4d6b9a1d4cf827e9fc 100644 GIT binary patch delta 1641 zcmah}O>7fK6wa)@GA}8Q?_X$sxzA{;*N`-&Hifl=haTt-~M1#}rgb3I9 zV5PYSK2oA^HR4vAX@sVzN_{j;U5nH7Nb=L_g=&Jz9Pl;x(KR42*e|%pSN*KY(y(r} z48zd~v;>003&(?9>yP9s5?O+4-Y}jwnsdUAd!~hb-7|{zU!ENK297BMyT7K<_k6WZ zmSDx(D>65{Q^G#bVhH=E7G2nfeB1V2-yZZwfXni{ zXFOQ_7N%N995M-HbB}eybx~fT%kI|abwQ5-kWY@0rY1PpwhzbB(|!cc zT>B`VPuq^-`FHzUaX!ZcRZeCw^FwMZV1H|6tz<20x`rJeHj0J~noIGgG`*D9Y?1Oj z;EGnTdF>1}X3iM-ly=@)L`Six>BX|8l??+SYa?W=pRn1}$T*FT;|5$78{l8k7Yh1x z(a@H48^IQwU26<%?E?dQO5t54nPw9W)imVzh^$mvHLJur*UGj&Yh>$tU^7#lipFg` z&Uf#QKPhG@JZ)kd%>ZgAgePHK$N*gGxGkG8CjT|BTC+axOi5-8LcuhN@-@jov@1D* z(%9N`(V97vb;eO~kKqKi8#S|t^a8!4yyYmwOreQ63eVKR5R;^DOA>*?RY^gAS8sRy z&$mmntVy+2_JUj55C3%T5xTHj$~|?uoZ6vFjO&sOY<8N31~#B71LQ1g*v}g7uQkjP zVO2RQ^O7wox$mKpYw+c}4@zc%bq<@|f4bLLEs8IhYw%moJ7f(bZ@27xY5HC1ku?0^ z@AYR!=FjyV@;XX#I!;h=g3kM6-rT`#kTD~(a6ic2zg?lRm{M`$WvUJvXjVXlz>OUZp8d9tadno?JEPngcIZ*L*P%DK!BmhVY0#ZYxOs|TEy?^%kc?@2tnk?`|nf9XjczrWIOa2E) C5)|10 delta 1448 zcma)6-D?zA6yLia(VgAkirL-lCi@kd>}KL_v(@;qCE~|c18T6PLW4*$*^GNNQa#fLAw_%<{CH>xf*|?_XdmoL!G}U^3wzjMxg`q|@A-@Na;e0I@y-9wh)##1dWAcP`dx0E%z@zJ+t1VF(Ev@*?X-)I!Ehks zcwP)lIQl;U(a{@0!O{P1(dXI+(0)5yAOZN+7b6c=bK1hg+xD@wEY_KWocXnR*=(2? z{RvF8?T&|03({`tnVF=A``K2G`o6eDTrRxs1O!4uNXvoHVU$-x2T{HV9YMKm>;86| zsQ2=2jr^QNhUG0`FgqT(=_`xESD=Kqvjxj2Wo7gYLg<52(Sgk)>TH^yQh8X6WWt;# z>gma8wQ{y(LohaWjjnTbGJnJ3lOCAw2*bynKZWQDBY-AGX>t^4xB#gb?`>lg*cIz* zR%`{X#E!V>iiLOu{*H~WEoS4xY=Q9M&-fpt054-Hlz(*{LOIxd0DcK`mtJR19TzH+ zqN^GmDVI)aVqGgu(o$K}&gyEdgjosG`7ecfp{7(%=cIE&RV)q`*{XkTR+`f3aL-_2 z*U+9Ft)Hayq^T%Xsm^wbJBz#4eYoA=(w|c?4ObEwtlquENZD`rtlLd6?XnyE`(v|) z1eT-mOP-m!WEve6RnbL7|F9LZX?TQb-IR|Zmj+i6lqqRS&_xZq%pklepG3Q61l77! zl@wum+`1{a?uHpUAdjFMj!k~G2y&S%S35RheDZ0Nmfz;T--sAA+tgSd8<2zcMsqB3 zv`a3t!VTF$oUVu%UdCXnV-tttask50f|sJ1HBOw3`i7XJa3c{7w%)`-9$E{DuS4>v z3tKT_glaQNT2<0QTC3G1UCg&0dl$gVWX}6l6M*&BH~?Trs!Yn*h((fLx}W;h?f#K0 z89lE(@sEl-?I+K}bbC%@?q;?VZuce0W_Z?@{J`&axtvxZMf(hD&WZTV>>l*qn;jyX sK+SfN7+lTv_ufH7@&XFY@GHVOQ9oa^nm}e7*EE`GnDWBX&)F*Z4^B+nN!v?Yx2Ef|KaQ^5{GeMmS7VD5hgI3+(q4Tprn!>j zR?4WW4w15evL_ojolN~U(J=}th)j^7AaiV=1|rUW@Xwd|X$XFpzR%^}_tLcc@^JUQ z&-;6R&+m87%l-1gM=!dU+~+S0TywuIz#UJ>Jt>I|4RE}1kD$Q2jUzN>MT}R)r)m60 zJVfIG*LRyL#CyEbN96MNb;)tp>e72q785Tk^F*H_imFuJs=QHIq}frjlf;ONbd8hl zaWg}F#lT~`nmn+B;B_nVH;X!v$|&<`TRAD)p7wuc21B?}=FpDh`K z%)p<%>%tjYc57>a6iLY>+X<`fhkKh|5zf=YsbIi9c#d;9?H_OB0`F%Xjl*yL5xHjF zG42y&5kM9#3=FPF&j=}aAf-b}LQg1qUYRipDF${7{*xYqg+L;PzUk;9%Wz=7M%Y$_ zZM9*)vN%F8*#;;4QtuZvTPrsGFWL7-s@kQ%Xda_te$%`~q(aU&AGTf;zfE$XNt*LUWU&*lJv;k4&>4m?sP7TG~bGkI%AiWDKNtDi(!a^xy_d1_quK|#@J&9he8m~r>>&IU zNp4>^J25)943euec@`NzjG;jHJKv%4^(bonunWcV#f~^)4Px3$j%#|c<|fS^eza!Z zX>CT&Ytu|M{_f~DX6vS)Zi=lNgGAjXPtXjdPlemA4(N(b`suA+R5GTXD-`o`U0w{;zHfZD!Fwhz{K*jqPJ^?kMU)b~YKYWjK;`;yo7wGI1%pX1L9ft6i} zd!q2;O0aj;6@7eon6=`<=jzu%qFJ8^w<0oZN%o9*>E8gdGBf4iyiu5*GR%Bw$E=<= zOIop#ZKB(JScE+cjy`d)NEPf-GA?>W_%^vW>Y;}=L<@_sxj%X6GSwveK86bzfCjVd k!;h-8Fh{G>KZz{nEL;1_CW+$;9w3sHP0p>H>dy%O16q&n5C8xG delta 2015 zcmbtVTS${(7~cP{O*eN)xBarsxw$mAe>O3@s7P%GtrSO4kX@8*vG``DF;ff)4T>18 zgx+-%9T=1#UW9lR1zm(7h|uA(f{N$>K@?roRekTj|1i{~@aE;)_rLG+Jn!Lqmp}aa zkY+-2{dr(kbBO_GiCNRr%c@lHw$capOL%ys-pc6Vt2#<;HH-E*yNB8tHiGx;6Qe#y zN{-|R_y2JhbLVsCa>Pj*hahiuUMmggwh$L-Ak|%J7-zh&w-gDlly*@2N{7~|Yu5M( zmkmQ_Y1oh}AowUm1cdZ0V~|Q{EGy=H zspV}UD%mJVcM=0?prApxsejC-#ME>a(n{LM?qL!jQj!&rE9+&(pvlDB%oM>YB8-X% zVQ4nQtoo67Iu%d!CwB^k#_XfeVu%*2&0zMMGt08qDUpic3{b&F6kI9ML7lOa3Bze) z7pM28yq?s6=fq$-DATpWQ)7EE-89lQOfRD|zni$3dN*-Pj#o&hWm1PoIt5GS+Pb?` zhIEq`v%crYsqhgE(F%hVhFMcLZT)Xkt#_h}iGYFW;Ve(mp3WDc$E^B0Vwx3Uiw zEc@1t(oQoEK#SF}Zln-aZ`~+itp2)DOz_%jXSDE*+v3GH=9S)p{!X`GMyewL%z;3_q}dj?P%J* zRs5gJs_|UdZM4>(DQYEr^1IoO4Cr`Q?I#*8bves4Nm2A9$NUmv;(QIpT;R8D_<)I) z^EUP;121@gWP<+g8$&aKW{8^MtZpEFDtYGY>EsaZ$3FDQ2;Vcqqy}#=fEWaCGCJ25 HNHBi@G8A;4 diff --git a/_build/.doctrees/content/C1-S8.doctree b/_build/.doctrees/content/C1-S8.doctree index 4131a027b5942c7e8d9416a9a1bc33d70c3b8312..a2bfd7ddb5988b5268de56a0ade2071bf34a9677 100644 GIT binary patch delta 1320 zcma)+-Afcv6u@`B{FrpNKt|Ga_70J)X_^IzWr9X!SRz^`p~aZjj>~?zvztkT7W5!& z^l&Gz7aw{ks32tjg8q&|N-(eoAG4RBb7yyUHrCXaGv}Op&pE$)?z!`<^GBDmq`dml zxTd@i*s7|@e#hN-RnVB<4vv zK{6I4_H+BG{RFEtLI(svf~FzRhcZ)8ovos=B$(E$Wiz`aze&j|(OD~PIb;Y{u)G}I zZVpi&Vyl6mo`F{A0)0@1CTMeuV0vx5R`B`QSFr)lvLm)?WppWOPM0-xbPrxBWzLtP z%Dl}kY2NTaZ@8cir_S!FEp*Uf`cu8F!nt1!*Ynl{UCNbJl>-|=)>L|`1s3S<;;``AwF-$qz%W|$G~B1 zePwtbj`5c`EM#M8g-ys8aA0^)R9xCUmz%@5ld+vj}E(mKZ;18mFS2I=APt?+){=Rm)sJHn&|0n-x^dqRkL923s zz^14~j^a^szmBX+x^(7jw~OcK`GJDQ$Zh_1`qVlmXu1-)#Vtc?2uH?HE6$|Q=?0@# z41M5+&S|6&%Ct@;a+CY#v^pg+!?mwkb8s8BtZX&^zoZwE)WY8cY%g12;CCyh*G~(7 E0W7hp{Qv*} delta 559 zcmaE6-ekzyz&f>DVk2uWqX=_RV)>NGQ#2c=)K1aJV2yBMVPKg2lP75M8b%F9uF3aU zttRs`@c>yeOddcomB|%Iu4b|WlCPK?fus&INW7F;jaf@kYjPc@Jdih!(}RO6I4`jP zBqYOP3lxfC0V$iu?G7Ygvp4}sJ=SVot|=Mpu~Ra{=xZ$x*Ob;NAP;9qXXsDf$g4Ve zBZm^FZiZ}zPKKN}^W;`W<<0+iuQD<^Prf5410+B4C&Af;0;zEJ7l9NwyG#%v{!`EZ zD87M5i`5Zmpz!8Mp{Gnt8LKxti{4|FWHK{_`nm_iguCP=&?O?1gC*tcGM$lAK?fSE8GnnO9npT0AA=1uUw17!6?N09kNjeu9lTBdNfY@qF?}NkfT@XIRbo oG1);%O{O8Ey10ikFEKZ@q_O~LJTOceI*T(DfpqoeCaDxg0P7vGiU0rr diff --git a/_build/.doctrees/content/Chapter1.doctree b/_build/.doctrees/content/Chapter1.doctree index 17e37ef7adc4c8a081bc5629feef12cc6ce51c7b..73a7263f77252c3eb68a8a43bce650bfc0f734e8 100644 GIT binary patch delta 2641 zcma)8ZERCz6yAGpE8W&@EvvWt=(@M;s~fQOV}lI_Zo(#^Z1N@41SOa4%57OcT)O}g zk}bv#h-v*1D(+0ZnWB! zi?cR?ut7SP2;k696^2G zSuD+(vt=fxW9e*WjpB}I4TWBR{2*2q6kKwXyhd)+qbbETz(RGy_Q%V$;?PuT;z*`j zOQoNUOfR!co0iSgNViGT(&FrU87k83@pNoLoT5ea8_fBUogi_kTwW)qz~SD|AYilX zYDc=Y;-jB&Wo59#cn0MI!DTQW zH-eP#e(ryGPm5DhHY;T`GHklSVB;cVqrP6{U5mzek2*0leCgVVP)gyBng%O=4nD1F zc4>}!`-NN*5-VAeb%H-?BJUwfV^FG#RL7EssW>f(8tkQN1N`RzYcn3Y^dHSjUM6BJO)+ff0amcilKj z7O5F-*BvK+BDl3xHL^FdN@cf@f4#nf=WHB+rb}WoA;R&wa`dQENbBrT@s_qw?vWmjah7LesOj9G@u1_ z;BZ8YDVKS)a<}(lyLYs+38pQb3X%8Q{P0D)2Q@#mv-$RQu*r^fY(;rh`JQWKn$7;- zj9Fiep;nt8d>TPKV!5oCNF@?ta#HJ-em17$7$e#pP>I%JDXS%8!dqh+Qf9;!G8xyZ z(8od7m?!8BOrfmol>wZNk`%qH{ugner&C8|NyJ|SSxiebRh-TxIUiA^HIo$&OInHQ z$tdswE6}rCfzfBNTU5-#*#-g5x6~lhS_fKq+;i||2Q7BOK{M&;SXQEwDJhd=S7%x` z?4}~ygpUW(Hj&C?XA+XWdkuvF^%DkFSPp8gAIALsW>VAaEx0r?O`9bG&bI#M#o6=9 zvR|CNKqsYSiY+=Lk>bpyIap|_B_r^yf8?Ri+N}pZX!AVOeVqAn4QC;LqO;aYIB>cL ztbN$wLjG3wNus>f`y3nzY{t7Qfe}_*#gIB^c+nLMYBmT1-U{w9AB9j4x{Zc55*{7| z0%pe>p>|$I zc5kbttW5j0&XKU@gkQSLiK0tiWEHwZBYh~(MCwppj&wQDJ^l~F_B9h<@vsnac~N;v YQJk8QefSTaVj(?;z)z7M*R?Af?(B}nM z4+*dl7l;YAZn4ARw{LQ00)eoTm|@rwL)`7?hHDn9-1(~9d19Lgw=F)x!#|eMS1tX| zq2?~hLtr%?CXFy?wiymh>UBCS_BH%v_hO;#O)_U2o>fm-mwJW8777kDPDL#w6doFfVgmLS;$Imc=80jyX%%@*oRc&UT> zsUS_ja-Xf%?|j4&3TLe?Fyc@W@q#q*X+)D zrZv0mZCd4}Htm_XOPg2w&o0`26q`f;+-ge`M5m)WsJ?WJhJ0)Wywq^$#HJPPaHoS= zkrF$2aVnR|q_Wc@56%wu>X~-am^M%#H zm2S(!Wawp1)DCnv8ptLwEECIpWr9Q?yc2OxXh1gTe8?}`vtP02PXf4~%w4pyxJUX!#GX=iV0RH+Gg7+GVoc-WAXC*xtn2BzqS!o9C@wSnD#5QUsn zNjS47s_zYkU@n%0j@Ymgf2`;}tm~qKsO#;A`N7M|Is=~%@rv%4tXuADgx`mr!JKC& zx4^+$Bga`t7T^ny4VFiCpm@L$FwUqmTzfpS#wisf0>93&Eb4U81131W_>+Qq~MNA$Hb z`|s&ndV&GE!oXD1n=|WZdL=W>xaR`s4e_7i%7_1_cD#mOolP;dlqYS?fi9^kz Ve7;zsZpN?#YLeABe7`2sBdL!#8M#c-1FEEyK*`(&$Dca}*$;n7Hs%@6>KZa1Sqd{3dDTrjBt>~3|YSnIlt1$hCC{=837rA z89}8P+8J2PpZtYYZE_4N-{ha{ii{qUXR&$!UBe9%nS6>(9K<$8*pBJ^DG0l((Ck*i zYd6Smij)7cOB3(8UNj3730Yt{c_)+Q<~VjwW=4n28@TEj8Lv$?;8Ep9(l@z+N0#xy z9 z#lXnGfMjn{Vum~@`6&WZ-DF!H2`u4;>IPY0001#BH{;XEbJ%2n@5qO&+d5y%8dZ*CJ$VFUn* CcP9h@ delta 362 zcmZoOe`Uzpz&iE5#75RrjEsjSUtla})>71(9LSUdrdM)UZeliIV$_>#$g0Dnr8qf} zOHzWfha)w&AS1Cjvv|tnDVmK_YNu#qu=eDDbg@mzV2_=mF?k-F8l&Un0!|rj#|)Va z<_uZC3^~8a@7N+CqChg0T?0tI<<^q4&ye#5s>smEkj~HtsV+^*5bLp4)Y`m~qluZ5 zvxm7Tu^edAW*we-MyA=tlQ*)uG0vQPhgX*I=Hy?zYG9XY@$F=EL*mI!_7~u0Tnlmn zkgO0$hO>VP#KPGnf~r9FTW-D0Cj_~f8Cf@95&6x`=sfv?gc;Cr?2>YfPLtInl^BD8 zA`+7mB^7|8O_HW84vY*8lLaJ28G|NYl+=*TxRr6WxQ8<@F*miOvLLk>7$OV9|05;}wk^lez diff --git a/_build/.doctrees/environment.pickle b/_build/.doctrees/environment.pickle index 5f7366bb0c5e316d9992f945f30dbc21563dc320..0ef5b25a18c5078302aa9bbc7cee34b41cb329fb 100644 GIT binary patch literal 72943 zcmeIb37lM4btY~}y-RBC@{0W|d1=Yr)#}z_TgKS!mTcKAwS{D3gIg|YdEM{5uBunA zSEW{47TbVPiwBsv!Xy(Q5FiOVVM#~`S;$O=tjv(i07I4uAxuIb$%KJ~A;5g!x%Vx# zbhlL9ZTSCx^iO(q_vM^(&pr3tbMJjc`%kuAw(2te`J26>Wf#sQ%))8Ahs;1wSOBJRnsVS7a+C-IW zb8aS;Gm`*3!Q^);zgJD6dv2waF_UH?<7S!L@2-?52W}fcV*!f-2*XS2u8jM=Wiwx7 z3p^nX0r@$QgV4f+P{PDWv3Mv|PE8zTofF4P?o=t2_a=_dmMyoSfA$UyPaL(=6P{f* z2a2i8G}`J-=q^QonGo2cNR;o zV`ebow*umH8HH5dGzxCnz*xb!OH}}W4Dl=PDcPxlaU@kbZO$4u84qCi7{}ZK(Y;BR zlH@=s*;5uWwhiwY-V3UTf~*(#ou@(H7<5(tGEh^=%$X_AtXd;}d)dvVX6fn{S8_66 z29vo0!@5#3lL1{OC+(cc24dWtExB&_T;gmHckV2P(7CE_OqpendO4ZO<=mO%WaY^x zXOrbps^EbDWx&t**TnouG=8dNdR{Vy; z#e%l(-mTIkGnSc|F1n}|T%$X2=p@*vTSA|^AF?o7y+jt}^qT%gyU49|60 zb25b?o-DaJlYmTRvj9aQLkOVW62^dKva{#?jf~5?*$PHFVau@1WDRbb1c4zA<|3ij zHHIcV3qV!{qO~1aH=nYB-{&DuJ~;^#ft1W-$(%G%Cm4o@VQT`!>m;M1E`q$bI6Ebb zGU=6P(PnUbnU|{mW(yRRBUOcT0LbbNg7~6nx2O;dD%cQkoMgIWXTj0N{q@tPSxnBP zN(JyMR=LTm6pMoSFc3^`9T_}kANGTsZnHF0r%0A(i$WpW0WiCeHP3+N^LfG)T?AF2 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 variables -
  • Debugging
    -
  • +
  • Debugging
  • Etcetera
  • Libraries
  • diff --git a/_build/html/_sources/content/C1-S1.md b/_build/html/_sources/content/C1-S1.md index 349e51d..ef95034 100644 --- a/_build/html/_sources/content/C1-S1.md +++ b/_build/html/_sources/content/C1-S1.md @@ -32,52 +32,41 @@ the program, click the red stop sign at the right end of the tool bar.) ## Costumes and Sounds - - - -To change the appearance of a sprite, -paint or import a new *costume* for it. To paint a costume, click on the -Costumes tab above the scripting area, and click the paint button . The -*Paint Editor* that appears is explained on page 128. There are three -ways to import a costume. First select the desired sprite in the sprite -corral. Then, one way is to click on the file icon in the tool bar , -then choose the "Costumes..."menu item. You will see a list of costumes -from the public media library, and can choose one. The second way, for a +To change the appearance of a sprite, paint or import a new *costume* for it. To paint a costume, click on the Costumes tab above the scripting area, and click the paint button. The *Paint Editor* that appears is explained on page 128. There are three ways to import a costume. First select the desired sprite in the sprite corral. Then, one way is to click on the file icon in the tool bar, then choose the "Costumes..."menu item. You will see a list of costumes from the public media library, and can choose one. The second way, for a costume stored on your own computer, is to click on the file icon and choose the "Import..." menu item. You can then select a file in any picture format (PNG, JPEG, etc.) supported by your browser. The third way is quicker if the file you want is visible on the desktop: Just drag -the file onto the Snap*!* window. In any of these cases, the scripting +the file onto the Snap! window. In any of these cases, the scripting area will be replaced by something like this: + + Just above this part of the window is a set of three tabs: Scripts, Costumes, and Sounds. You'll see that the Costumes tab is now selected. In this view, the sprite's *wardrobe,* you can choose whether the sprite should wear its Turtle costume or its Alonzo costume. (Alonzo, the -Snap*!* mascot, is named after Alonzo Church, a mathematician who +Snap! mascot, is named after Alonzo Church, a mathematician who invented the idea of procedures as data, the most important way in which -Snap*!* is different from Scratch.) You can give a sprite as many +Snap! is different from Scratch.) You can give a sprite as many costumes as you like, and then choose which it will wear either by -clicking in its wardrobe or by using the or block in a script. (Every +clicking in its wardrobe or by using the or block in a script. (Every costume has a number as well as a name. The next costume block selects the next costume by number; after the highest-numbered costume it switches to costume 1. The Turtle, costume 0, is never chosen by next costume.) The Turtle costume is the only one that changes color to match -a change in the sprite's pen color. Protip: switches to the *previous* +a change in the sprite's pen color. Protip: switches to the *previous* costume, wrapping like next costume. - - - - + In addition to its costumes, a sprite can have *sounds;* the equivalent for sounds of the sprite's wardrobe is called its *jukebox.* Sound files can be imported in any format (WAV, -OGG, MP3, etc.) supported by your browser. *Two blocks accomplish the +OGG, MP3, etc.) supported by your browser. Two blocks accomplish the task of playing sounds. If you would like a script to continue running -while the sound is playing, use the block . In contrast, you can use the -block to wait for the sound\'s completion before continuing the rest of -the script.* +while the sound is playing, use the block . In contrast, you can use the +block to wait for the sound's completion before continuing the rest of +the script. ## Inter-Sprite Communication with Broadcast @@ -86,34 +75,25 @@ more interesting program, though, the sprites on stage will *interact* to tell a story, play a game, etc. Often one sprite will have to tell another sprite to run a script. Here's a simple example: - + - + - - -In the block, the word "bark" is just an -arbitrary name I made up. When you click on the downward arrowhead in -that input slot, one of the choices (the only choice, the first time) is -"new," which then prompts you to enter a name for the new broadcast. -When this block is run, the chosen message is sent to *every* sprite, -which is why the block is called "broadcast." (But if you click the -right arrow after the message name, the block becomes , and you can -change it to  to send the message just to one sprite.) In this program, + + +In the block , the word "bark" is just an arbitrary name I made up. When you click on the downward arrowhead in that input slot, one of the choices (the only choice, the first time) is "new," which then prompts you to enter a name for the new broadcast. When this block is run, the chosen message is sent to *every* sprite, which is why the block is called "broadcast." (But if you click the +right arrow after the message name, the block becomes , and you can change it to  to send the message just to one sprite.) In this program, though, only one sprite has a script to run when that broadcast is sent, namely the dog. Because the boy's script uses broadcast and wait rather than just broadcast, the boy doesn't go on to his next say block until the dog's script finishes. That's why the two sprites take turns -talking, instead of both talking at once. In Chapter VII, -"Object-Oriented Programming with Sprites," you'll see a more flexible -way to send a message to a specific sprite using the tell and ask -blocks. +talking, instead of both talking at once. In Chapter VII, "Object-Oriented Programming with Sprites," you'll see a more flexible way to send a message to a specific sprite using the tell and ask blocks. Notice, by the way, that the say block's first input slot is rectangular rather than oval. This means the input can be any text string, not only diff --git a/_build/html/_sources/content/C1-S12.md b/_build/html/_sources/content/C1-S12.md index 062ea15..bf765cf 100644 --- a/_build/html/_sources/content/C1-S12.md +++ b/_build/html/_sources/content/C1-S12.md @@ -1,46 +1,23 @@ # Debugging -Snap*!* provides several tools to help you debug a program. They center +Snap! provides several tools to help you debug a program. They center around the idea of *pausing* the running of a script partway through, so that you can examine the values of variables. ## The pause button - - -The simplest way to pause a program is -manually, by clicking the pause button in the top right corner of the -window. While the program is paused, you can run other scripts by -clicking on them, show variables on stage with the checkbox next to the variable in the Variables palette or with the show variable block, and -do all the other things you can generally do, including modifying the -paused scripts by adding or removing blocks. The button changes shape to -and clicking it again resumes the paused scripts. +The simplest way to pause a program is manually, by clicking the pause button in the top right corner of the window. While the program is paused, you can run other scripts by clicking on them, show variables on stage with the checkbox next to the variable in the Variables palette or with the show variable block, and do all the other things you can generally do, including modifying the paused scripts by adding or removing blocks. The button changes shape to and clicking it again resumes the paused scripts. ## Breakpoints: the pause all block - -The pause button is great if your program -seems to be in an infinite loop, but more often you'll want to set a -*breakpoint,* a particular point in a script at which you want to pause. -The block, near the bottom of the Control palette, can be inserted in a -script to pause when it is run. So, for example, if your program is -getting an error message in a particular block, you could use pause all -just before that block to look at the values of variables just before -the error happens. + +The pause button is great if your program seems to be in an infinite loop, but more often you'll want to set a *breakpoint,* a particular point in a script at which you want to pause. The block , near the bottom of the Control palette, can be inserted in a script to pause when it is run. So, for example, if your program is getting an error message in a particular block, you could use pause all just before that block to look at the values of variables just before the error happens. + +The pause all block turns bright cyan while paused. Also, during the pause, you can right-click on a running script and the menu that appears will give you the option to show watchers for temporary variables of the script: -The pause all block turns bright cyan -while paused. Also, during the pause, you can right-click on a running -script and the menu that appears will give you the option to show -watchers for temporary variables of the script: - -But what if the block with the error is run many times in a loop, and it -only errors when a particular condition is true---say, the value of some -variable is negative, which shouldn't ever happen. In the iteration -library (see page 25 for more about how to use libraries) is a -breakpoint block that lets you set a *conditional* breakpoint, and -automatically display the relevant variables before pausing. Here's a -sample use of it: + +But what if the block with the error is run many times in a loop, and it only errors when a particular condition is true---say, the value of some variable is negative, which shouldn't ever happen. In the iteration library (see page 25 for more about how to use libraries) is a breakpoint block that lets you set a *conditional* breakpoint, and automatically display the relevant variables before pausing. Here's a sample use of it: (In this contrived example, variable zot @@ -52,31 +29,16 @@ all inside an if.[^2] ## Visible stepping - - - -Sometimes you're not exactly sure where -the error is, or you don't understand how the program got there. To -understand better, you'd like to watch the program as it runs, at human -speed rather than at computer speed. You can do this by clicking the -*visible stepping button* ( ), before running a script or while the -script is paused. The button will light up ( ) and a speed control -slider will appear in the toolbar. When you start or continue the -script, its blocks and input slots will light up cyan one at a time: + +Sometimes you're not exactly sure where the error is, or you don't understand how the program got there. To understand better, you'd like to watch the program as it runs, at human speed rather than at computer speed. You can do this by clicking the *visible stepping button* (), before running a script or while the script is paused. The button will light up () and a speed control slider will appear in the toolbar. When you start or continue the script, its blocks and input slots will light up cyan one at a time: -In this simple example, the inputs to the blocks are -constant values, but if an input were a more complicated expression -involving several reporter blocks, each of those would light up as they -are called. Note that the input to a block is evaluated before the block -itself is called, so, for example, the 100 lights up before the move. - - -The speed of stepping is controlled by -the slider. If you move the slider all the way to the left, the speed is -zero, the pause button turns into a step button , and the script takes a -single step each time you push it. The name for this is *single -stepping.* + +In this simple example, the inputs to the blocks are constant values, but if an input were a more complicated expression involving several reporter blocks, each of those would light up as they are called. Note that the input to a block is evaluated before the block itself is called, so, for example, the 100 lights up before the move. + + + +The speed of stepping is controlled by the slider. If you move the slider all the way to the left, the speed is zero, the pause button turns into a step button , and the script takes a single step each time you push it. The name for this is *single stepping.* If several scripts that are visible in the scripting area are running at the same time, all of them are stepped in parallel. However, consider diff --git a/_build/html/_sources/content/C1-S17.md b/_build/html/_sources/content/C1-S17.md index 5982cb7..4be6e25 100644 --- a/_build/html/_sources/content/C1-S17.md +++ b/_build/html/_sources/content/C1-S17.md @@ -109,7 +109,7 @@ case-independent. These *hidden* blocks can be found with the relabel option of any dyadic arithmetic block. They're hidden partly -because writing them in Snap*!* is a good, pretty easy programming +because writing them in Snap! is a good, pretty easy programming exercise. Note: the two inputs to atan2 are Δ*x* and Δ*y* in that order, because we measure angles clockwise from north. Max and min are *variadic;* by clicking the arrowhead, you can provide additional diff --git a/_build/html/_sources/content/C1-S2.md b/_build/html/_sources/content/C1-S2.md index 7d3bd5a..8059c5e 100644 --- a/_build/html/_sources/content/C1-S2.md +++ b/_build/html/_sources/content/C1-S2.md @@ -3,28 +3,17 @@ Sometimes it's desirable to make a sort of "super-sprite" composed of pieces that can move together but can also be separately articulated. The classic example is a person's body made up of a torso, limbs, and a -head. Snap*!* allows one sprite to be designated as the *anchor* of the +head. Snap! allows one sprite to be designated as the *anchor* of the combined shape, with other sprites as its *parts.* To set up sprite nesting, drag the sprite corral icon of a *part* sprite onto the stage display (not the sprite corral icon!) of the desired *anchor* sprite. The precise place where you let go of the mouse button will be the attachment point of the part on the anchor. +Sprite nesting is shown in the sprite corral icons of both anchors and parts: -Sprite nesting is shown in the sprite -corral icons of both anchors and parts: - - - -In this illustration, it is desired to -animate Alonzo's arm. (The arm has been colored green in this picture to -make the relationship of the two sprites clearer, but in a real project -they'd be the same color, probably.) Sprite, representing Alonzo's body, -is the anchor; Sprite(2) is the arm. The icon for the anchor shows small -images of up to three attached parts at the bottom. The icon for each -part shows a small image of the anchor in its top left corner, and a -*synchronous/dangling rotation flag* in the top right corner. In its +In this illustration, it is desired to animate Alonzo's arm. (The arm has been colored green in this picture to make the relationship of the two sprites clearer, but in a real project they'd be the same color, probably.) Sprite, representing Alonzo's body, is the anchor; Sprite(2) is the arm. The icon for the anchor shows small images of up to three attached parts at the bottom. The icon for each part shows a small image of the anchor in its top left corner, and a *synchronous/dangling rotation flag* in the top right corner. In its initial, synchronous setting, as shown above, it means that the when the anchor sprite rotates, the part sprite also rotates as well as revolving around the anchor. When clicked, it changes from a circular arrow to a @@ -35,6 +24,19 @@ its turn blocks.) Any change in the position or size of the anchor is always extended to its parts. Also, cloning the anchor (see Section VII. B) will also clone all its parts. -*Top: turning the part: the green arm. Bottom: turning the anchor, with -the arm synchronous (left) and dangling (right).* + + + + + + + + + + + + + +Top: turning the part: the green arm. Bottom: turning the anchor, with +the arm synchronous (left) and dangling (right). diff --git a/_build/html/_sources/content/C1-S3.md b/_build/html/_sources/content/C1-S3.md index fcad7f2..50bc5f8 100644 --- a/_build/html/_sources/content/C1-S3.md +++ b/_build/html/_sources/content/C1-S3.md @@ -1,51 +1,36 @@ # Reporter Blocks and Expressions + + +So far, we've used two kinds of blocks: hat blocks and command blocks. Another kind is the *reporter* block, which has an oval shape: . It's called a "reporter" because when it's run, instead of carrying out an action, it reports a value that can be used as an input to another block. If you drag a reporter into the scripting area by itself and click on it, the value it reports will appear in a speech balloon next to the block: + - -So far, we've used two kinds of blocks: hat blocks -and command blocks. Another kind is the *reporter* block, which has an -oval shape: . It's called a "reporter" because when it's run, instead of -carrying out an action, it reports a value that can be used as an input -to another block. If you drag a reporter into the scripting area by -itself and click on it, the value it reports will appear in a speech -balloon next to the block: - - -When you drag a reporter block over -another block's input slot, a white "halo" appears around that input -slot, analogous to the white line that appears when snapping command -blocks together: - +When you drag a reporter block over another block's input slot, a white "halo" appears around that input slot, analogous to the white line that appears when snapping command blocks together: + + + + + Don't drop the input over a *red* halo: + That's used for a purpose explained on page 68. Here's a simple script that uses a reporter block: + + - -Here the x position reporter provides the -first input to the say block. (The sprite's X position is its horizontal -position, how far left (negative values) or right (positive values) it -is compared to the center of the stage. Similarly, the Y position is -measured vertically, in steps above (positive) or below (negative) the -center.) +Here the x position reporter provides the first input to the say block. (The sprite's X position is its horizontal position, how far left (negative values) or right (positive values) it is compared to the center of the stage. Similarly, the Y position is measured vertically, in steps above (positive) or below (negative) the center.) You can do arithmetic using reporters in the Operators palette: -The round block rounds 35.3905... to 35, -and the + block adds 100 to that. (By the way, the round block is in the -Operators palette, just like +, but in this script it's a lighter color -with black lettering because Snap*!* alternates light and dark versions -of the palette colors when a block is nested inside another block from -the same palette: + +The round block rounds 35.3905... to 35, and the + block adds 100 to that. (By the way, the round block is in the Operators palette, just like +, but in this script it's a lighter color with black lettering because Snap! alternates light and dark versions of the palette colors when a block is nested inside another block from the same palette: - -This aid to readability is called *zebra -coloring.*) A reporter block with its inputs, maybe including other -reporter blocks, such as , is called an *expression.* +This aid to readability is called *zebra coloring.*) A reporter block with its inputs, maybe including other reporter blocks, such as , is called an *expression.* diff --git a/_build/html/_sources/content/C1-S4.md b/_build/html/_sources/content/C1-S4.md index 4ed2507..ccdf707 100644 --- a/_build/html/_sources/content/C1-S4.md +++ b/_build/html/_sources/content/C1-S4.md @@ -1,44 +1,32 @@ # Predicates and Conditional Evaluation - - -Most reporters report either a number, like , or a -text string, like . A *predicate* is a special kind of reporter that -always reports true or false. Predicates have a hexagonal shape: - - - +Most reporters report either a number, like , or a text string, like . A *predicate* is a special kind of reporter thatalways reports true or false. Predicates have a hexagonal shape: + The special shape is a reminder that predicates don't generally make sense in an input slot of blocks that are expecting a -number or text. You wouldn't say , although (as you can see from the -picture) Snap*!* lets you do it if you really want. Instead, you +number or text. You wouldn't say , although (as you can see from the +picture) Snap! lets you do it if you really want. Instead, you normally use predicates in special hexagonal input slots like this one: -The C-shaped if block runs its input -script if (and only if) the expression in its hexagonal input reports -true. + +The C-shaped if block runs its input script if (and only if) the expression in its hexagonal input reports true. -A really useful block in animations runs -its input script *repeatedly* until a predicate is satisfied: - +A really useful block in animations runs its input script *repeatedly* until a predicate is satisfied: + -If, while working on a project, you want to omit -temporarily some commands in a script, but you don't want to forget -where they belong, you can say -Sometimes you want to take the same action whether some condition is -true or false, but with a different input value. For this purpose you -can use the *reporter* if block: +If, while working on a project, you want to omit temporarily some commands in a script, but you don't want to forget where they belong, you can say: + + + +Sometimes you want to take the same action whether some condition is true or false, but with a different input value. For this purpose you can use the *reporter* if block: -The technical term for a true or false -value is a "Boolean" value; it has a capital B because it's named after -a person, George Boole, who developed the mathematical theory of Boolean -values. Don't get confused; a hexagonal block is a *predicate,* but the -value it reports is a *Boolean.* + +The technical term for a true or false value is a "Boolean" value; it has a capital B because it's named after a person, George Boole, who developed the mathematical theory of Boolean values. Don't get confused; a hexagonal block is a *predicate,* but the value it reports is a *Boolean.* Another quibble about vocabulary: Many programming languages reserve the name "procedure" for Commands (that carry out an action) and use the @@ -48,9 +36,9 @@ values and those that don't. Commands, Reporters, and Predicates are all procedures. The words "a Procedure type" are shorthand for "Command type, Reporter type, or Predicate type." - + +If you want to put a *constant* Boolean value in a hexagonal slot instead of a predicate-based expression, hover the mouse over the block and click on the control that appears: + -If you want to put a *constant* Boolean -value in a hexagonal slot instead of a predicate-based expression, hover -the mouse over the block and click on the control that appears: + diff --git a/_build/html/_sources/content/C1-S5.md b/_build/html/_sources/content/C1-S5.md index 2a320e5..89e8bf6 100644 --- a/_build/html/_sources/content/C1-S5.md +++ b/_build/html/_sources/content/C1-S5.md @@ -1,11 +1,13 @@ # Variables - Try this script: + + + +The input to the move block is an orange oval. To get it there, drag the orange oval that's part of the for block: + -The input to the move block is an orange oval. To get -it there, drag the orange oval that's part of the for block: The orange oval is a *variable:* a symbol that represents a value. (I took this screenshot before changing the second number input to the for @@ -20,12 +22,10 @@ segment, and that's why the picture you see is a kind of spiral. (If you try again with a turn of 90 degrees instead of 92, you'll see why this picture is called a "squiral.") + +The variable i is created by the for block, and it can only be used in the script inside the block's C-slot. (By the way, if you don't like the name i, you can change it by clicking on the orange oval without dragging it, which will pop up a dialog window in which you can enter a different name: + -The variable i is created by the for block, and it can -only be used in the script inside the block's C-slot. (By the way, if -you don't like the name i, you can change it by clicking on the orange -oval without dragging it, which will pop up a dialog window in which you -can enter a different name: "I" isn't a very descriptive name; you might prefer "length" to indicate its purpose in the script. "I" is traditional because mathematicians diff --git a/_build/html/_sources/content/C1-S6.md b/_build/html/_sources/content/C1-S6.md index 11982da..bc09f37 100644 --- a/_build/html/_sources/content/C1-S6.md +++ b/_build/html/_sources/content/C1-S6.md @@ -3,10 +3,11 @@ You can create variables "by hand" that aren't limited to being used within a single block. At the top of the Variables palette, click the "Make a variable" button: - -This will bring up a dialog window in -which you can give your variable a name: + +This will bring up a dialog window in which you can give your variable a name: + + The dialog also gives you a choice to make the variable available to all sprites (which is almost always what you want) or to make it visible @@ -18,22 +19,21 @@ corral), and the different sprites will do slightly different things when running that script because each has a different value for that variable name. - If you give your variable the name "name" then the Variables palette will look like this: + + +There's now a "Delete a variable" button, and there's an orange oval with the variable name in it, just like the orange oval in the for block. You can drag the variable into any script in the scripting area. Next to the oval is a checkbox, initially checked. When it's checked, you'll also see a *variable watcher* on the stage: + -There's now a "Delete a variable" button, and there's -an orange oval with the variable name in it, just like the orange oval -in the for block. You can drag the variable into any script in the -scripting area. Next to the oval is a checkbox, initially checked. When -it's checked, you'll also see a *variable watcher* on the stage: When you give the variable a value, the orange box in its watcher will display the value. + +How *do* you give it a value? You use the set block: + -How *do* you give it a value? You use the -set block: Note that you *don't* drag the variable's oval into the set block! You click on the downarrow in the first input slot, and you get a menu of @@ -42,8 +42,8 @@ all the available variable names. If you do choose "For this sprite only" when creating a variable, its block in the palette looks like this: -![MacintoshHD:Users:bh:Desktop:local-var.png](image101.png){width="0.6583333333333333in" height="0.14166666666666666in"} - The *location*-pin icon is a bit of a -pun on a sprite-*local* variable. It's shown only in the palette. + + +The *location*-pin icon is a bit of a pun on a sprite-*local* variable. It's shown only in the palette. diff --git a/_build/html/_sources/content/C1-S7.md b/_build/html/_sources/content/C1-S7.md index e465d9f..f933e52 100644 --- a/_build/html/_sources/content/C1-S7.md +++ b/_build/html/_sources/content/C1-S7.md @@ -1,62 +1,41 @@ # Script Variables - -In the name example above, our project is going to -carry on an interaction with the user, and we want to remember their -name throughout the project. That's a good example of a situation in -which a *global* variable (the kind you make with the "Make a variable" -button) is appropriate. Another common example is a variable called -"score" in a game project. But sometimes you only need a variable +In the name example above, our project is going to carry on an interaction with the user, and we want to remember their name throughout the project. That's a good example of a situation in which a *global* variable (the kind you make with the "Make a variable" button) is appropriate. Another common example is a variable called "score" in a game project. But sometimes you only need a variable temporarily, during the running of a particular script. In that case you can use the script variables block to make the variable: -As in the for block, you can click on an orange oval in the script -variables block without dragging to change its name. You can also make -more than one temporary variable by clicking on the right arrow at the -end of the block to add another variable oval: + + +As in the for block, you can click on an orange oval in the script variables block without dragging to change its name. You can also make more than one temporary variable by clicking on the right arrow at the end of the block to add another variable oval: ## Renaming variables -There are several reasons why you might want to change the name of a -variable: +There are several reasons why you might want to change the name of a variable: -1. It has a default name, such as the "a" in script variables or the - "i" in for. +1. It has a default name, such as the "a" in script variables or the "i" in for. -2. It conflicts with another name, such as a global variable, that you - want to use in the same script. +2. It conflicts with another name, such as a global variable, that you want to use in the same script. 3. You just decide a different name would be more self-documenting. -In the first and third case, you probably want to change the name -everywhere it appears in that script, or even in all scripts. In the -second case, if you've already used both variables in the script before -realizing that they have the same name, you'll want to look at each -instance separately to decide which ones to rename. Both of these -operations are possible by right-clicking or control-clicking on a -variable oval. +In the first and third case, you probably want to change the name everywhere it appears in that script, or even in all scripts. In the second case, if you've already used both variables in the script before realizing that they have the same name, you'll want to look at each instance separately to decide which ones to rename. Both of these operations are possible by right-clicking or control-clicking on a variable oval. + +If you right-click on an orange oval in a context in which the variable is *used,* then you are able to rename just that one orange oval: -If you right-click on an orange oval in a -context in which the variable is *used,* then you are able to rename -just that one orange oval: + +If you right-click on the place where the variable is *defined* (a script variables block, the orange oval for a global variable in the Variables palette, or an orange oval that's built into a block such as the "i" in for), then you are given two renaming options, "rename" and "rename all." If you choose "rename," then the name is changed only in that one orange oval, as in the previous case: -If you right-click on the place where the -variable is *defined* (a script variables block, the orange oval for a global variable in the Variables palette, or an orange oval that's built -into a block such as the "i" in for), then you are given two renaming -options, "rename" and "rename all." If you choose "rename," then the -name is changed only in that one orange oval, as in the previous case: + +But if you choose "rename all," then the name will be changed throughout the scope of the variable (the script for a script variable, or everywhere for a global variable): -But if you choose "rename all," then the -name will be changed throughout the scope of the variable (the script -for a script variable, or everywhere for a global variable): diff --git a/_build/html/_sources/content/C1-S8.md b/_build/html/_sources/content/C1-S8.md index 21f0afb..8e2b5d2 100644 --- a/_build/html/_sources/content/C1-S8.md +++ b/_build/html/_sources/content/C1-S8.md @@ -1,20 +1,9 @@ # Transient variables + +So far we've talked about variables with numeric values, or with short text strings such as someone's name. But there's no limit to the amount of information you can put in a variable; in Chapter IV you'll see how to use *lists* to collect many values in one data structure, and in Chapter VIII you'll see how to read information from web sites. When you use these capabilities, your project may take up a lot of memory in the computer. If you get close to the amount of memory available to Snap!, then it may become impossible to save your project. (Extra space is needed temporarily to convert from Snap! 's internal representation to the form in which projects are exported or saved.) If your program reads a lot of data from the outside world that will still be available when you use it next, you might want to have values containing a lot of data removed from memory before saving the project. To do this, right-click or control-click on the orange oval in the Variables palette, to see this menu: + -So far we've talked about variables with -numeric values, or with short text strings such as someone's name. But -there's no limit to the amount of information you can put in a variable; -in Chapter IV you'll see how to use *lists* to collect many values in -one data structure, and in Chapter VIII you'll see how to read -information from web sites. When you use these capabilities, your -project may take up a lot of memory in the computer. If you get close to -the amount of memory available to Snap*!*, then it may become impossible -to save your project. (Extra space is needed temporarily to convert from -Snap*!* 's internal representation to the form in which projects are -exported or saved.) If your program reads a lot of data from the outside -world that will still be available when you use it next, you might want -to have values containing a lot of data removed from memory before -saving the project. To do this, right-click or control-click on the orange oval in the Variables palette, to see this menu: You already know about the rename options, and help... displays a help screen about variables in general. Here we're interested in the check diff --git a/_build/html/_sources/content/Chapter1.md b/_build/html/_sources/content/Chapter1.md index e106035..fb86929 100644 --- a/_build/html/_sources/content/Chapter1.md +++ b/_build/html/_sources/content/Chapter1.md @@ -9,30 +9,24 @@ though, Snap! is a *visual* language; instead of writing a program using the keyboard, the Snap*!* programmer uses the same drag-and-drop interface familiar to computer users. +Start Snap!. You should see the following arrangement of regions in the window: + -Start Snap*!*[.]{.smallcaps} You should see -the following arrangement of regions in the window: (The proportions of these areas may be different, depending on the size and shape of your browser window.) + +A Snap*!* program consists of one or more *scripts,* each of which is made of *blocks.* Here's a typical script: + -A Snap*!* program consists of one or more -*scripts,* each of which is made of *blocks.* Here's a typical script: + + +The five blocks that make up this script have three different colors, corresponding to three of the eight *palettes* in which blocks can be found. The palette area at the left edge of the window shows one palette at a time, chosen with the eight buttons just above the palette area. In this script, the gold blocks are from the Control palette; the green block is from the Pen palette; and +the blue blocks are from the Motion palette. A script is assembled by dragging blocks from a palette into the *scripting area* in the middle part of the window. Blocks snap together (hence the name Snap*!* for the language) when you drag a block so that its indentation is near the tab of the one above it: -The five blocks that make up this script -have three different colors, corresponding to three of the eight -*palettes* in which blocks can be found. The palette area at the left -edge of the window shows one palette at a time, chosen with the eight -buttons just above the palette area. In this script, the gold blocks are -from the Control palette; the green block is from the Pen palette; and -the blue blocks are from the Motion palette. A script is assembled by -dragging blocks from a palette into the *scripting area* in the middle -part of the window. Blocks snap together (hence the name Snap*!* for the -language) when you drag a block so that its indentation is near the tab -of the one above it: The white horizontal line is a signal that if you let go of the green block it will snap into the tab of the gold one. @@ -50,16 +44,8 @@ only if the user clicks on the script itself. A script can't have more than one hat block, and the hat block can be used only at the top of the script; its distinctive shape is meant to remind you of that.[^1] - -The other blocks in our example script are *command* -blocks. Each command block corresponds to an action that Snap*!* already -knows how to carry out. For example, the block tells the sprite (the -arrowhead shape on the *stage* at the right end of the window) to move -ten steps (a step is a very small unit of distance) in the direction in -which the arrowhead is pointing. We'll see shortly that there can be -more than one sprite, and that each sprite has its own scripts. Also, a -sprite doesn't have to look like an arrowhead, but can have any picture -as a *costume.* The shape of the move block is meant to remind you of a + +The other blocks in our example script are *command* blocks. Each command block corresponds to an action that Snap*!* already knows how to carry out. For example, the block tells the sprite (the arrowhead shape on the *stage* at the right end of the window) to move ten steps (a step is a very small unit of distance) in the direction in which the arrowhead is pointing. We'll see shortly that there can be more than one sprite, and that each sprite has its own scripts. Also, a sprite doesn't have to look like an arrowhead, but can have any picture as a *costume.* The shape of the move block is meant to remind you of a Lego™ brick; a script is a stack of blocks. (The word "block" denotes both the graphical shape on the screen and the procedure, the action, that the block carries out.) @@ -91,11 +77,11 @@ C-shaped blocks can be put in a script in two ways. If you see a white line and let go, the block will be inserted into the script like any command block: - + But if you see an orange halo and let go, the block will *wrap* around the haloed blocks: - + The halo will always extend from the cursor position to the bottom of the script: diff --git a/_build/html/_sources/content/Chapter2.md b/_build/html/_sources/content/Chapter2.md index bb56742..be51e4c 100644 --- a/_build/html/_sources/content/Chapter2.md +++ b/_build/html/_sources/content/Chapter2.md @@ -1,9 +1,9 @@ # Saving and Loading Projects and Media After you've created a project, you'll want to save it, so that you can -have access to it the next time you use Snap*!*. There are two ways to +have access to it the next time you use Snap!. There are two ways to do that. You can save a project on your own computer, or you can save it -at the Snap*!* web site. The advantage of saving on the net is that you +at the Snap! web site. The advantage of saving on the net is that you have access to your project even if you are using a different computer, or a mobile device such as a tablet or smartphone. The advantage of saving on your computer is that you have access to the saved project @@ -15,7 +15,7 @@ like if you save locally. This is why we have multiple ways to save. In either case, if you choose "Save as..." from the File menu. You'll see something like this: -(If you are not logged in to your Snap*!* cloud account, Computer will +(If you are not logged in to your Snap! cloud account, Computer will be the only usable option.) The text box at the bottom right of the Save dialog allows you to enter project notes that are saved with the project. diff --git a/_build/html/chapter1 copy.html b/_build/html/chapter1 copy.html index 7ee5c08..6c8f36e 100644 --- a/_build/html/chapter1 copy.html +++ b/_build/html/chapter1 copy.html @@ -180,12 +180,7 @@
  • Transient variables
  • -
  • Debugging
    -
  • +
  • Debugging
  • Etcetera
  • Libraries
  • diff --git a/_build/html/chapter1.html b/_build/html/chapter1.html index bac4d4e..d8bdd23 100644 --- a/_build/html/chapter1.html +++ b/_build/html/chapter1.html @@ -180,12 +180,7 @@
  • Transient variables
  • -
  • Debugging
    -
  • +
  • Debugging
  • Etcetera
  • Libraries
  • diff --git a/_build/html/content/C1-S1.html b/_build/html/content/C1-S1.html index 2c9e54d..13d4823 100644 --- a/_build/html/content/C1-S1.html +++ b/_build/html/content/C1-S1.html @@ -180,12 +180,7 @@
  • Transient variables
  • -
  • Debugging
    -
  • +
  • Debugging
  • Etcetera
  • Libraries
  • @@ -415,50 +410,37 @@

    Sprites and Parallelism

    Costumes and Sounds#

    - - - -To change the appearance of a sprite, -paint or import a new *costume* for it. To paint a costume, click on the -Costumes tab above the scripting area, and click the paint button . The -*Paint Editor* that appears is explained on page 128. There are three -ways to import a costume. First select the desired sprite in the sprite -corral. Then, one way is to click on the file icon in the tool bar , -then choose the "Costumes..."menu item. You will see a list of costumes -from the public media library, and can choose one. The second way, for a +

    To change the appearance of a sprite, paint or import a new costume for it. To paint a costume, click on the Costumes tab above the scripting area, and click the paint button. The Paint Editor that appears is explained on page 128. There are three ways to import a costume. First select the desired sprite in the sprite corral. Then, one way is to click on the file icon in the tool bar, then choose the “Costumes…”menu item. You will see a list of costumes from the public media library, and can choose one. The second way, for a costume stored on your own computer, is to click on the file icon and -choose the "Import..." menu item. You can then select a file in any +choose the “Import…” menu item. You can then select a file in any picture format (PNG, JPEG, etc.) supported by your browser. The third way is quicker if the file you want is visible on the desktop: Just drag -the file onto the Snap*!* window. In any of these cases, the scripting -area will be replaced by something like this: +the file onto the Snap! window. In any of these cases, the scripting +area will be replaced by something like this:

    +

    Just above this part of the window is a set of three tabs: Scripts, Costumes, and Sounds. You’ll see that the Costumes tab is now selected. In this view, the sprite’s wardrobe, you can choose whether the sprite should wear its Turtle costume or its Alonzo costume. (Alonzo, the -Snap*!* mascot, is named after Alonzo Church, a mathematician who +Snap! mascot, is named after Alonzo Church, a mathematician who invented the idea of procedures as data, the most important way in which -Snap*!* is different from Scratch.) You can give a sprite as many +Snap! is different from Scratch.) You can give a sprite as many costumes as you like, and then choose which it will wear either by -clicking in its wardrobe or by using the or block in a script. (Every +clicking in its wardrobe or by using the or block in a script. (Every costume has a number as well as a name. The next costume block selects the next costume by number; after the highest-numbered costume it switches to costume 1. The Turtle, costume 0, is never chosen by next costume.) The Turtle costume is the only one that changes color to match -a change in the sprite’s pen color. Protip: switches to the previous +a change in the sprite’s pen color. Protip: switches to the previous costume, wrapping like next costume.

    - - - - -In addition to its costumes, a sprite can -have *sounds;* the equivalent for sounds of the sprite's wardrobe is -called its *jukebox.* Sound files can be imported in any format (WAV, -OGG, MP3, etc.) supported by your browser. *Two blocks accomplish the +

    In addition to its costumes, a sprite can +have sounds; the equivalent for sounds of the sprite’s wardrobe is +called its jukebox. Sound files can be imported in any format (WAV, +OGG, MP3, etc.) supported by your browser. Two blocks accomplish the task of playing sounds. If you would like a script to continue running -while the sound is playing, use the block . In contrast, you can use the -block to wait for the sound\'s completion before continuing the rest of -the script.* +while the sound is playing, use the block . In contrast, you can use the +block to wait for the sound’s completion before continuing the rest of +the script.

    Inter-Sprite Communication with Broadcast#

    @@ -466,29 +448,17 @@

    Inter-Sprite Communication with Broadcast - - -In the block, the word "bark" is just an -arbitrary name I made up. When you click on the downward arrowhead in -that input slot, one of the choices (the only choice, the first time) is -"new," which then prompts you to enter a name for the new broadcast. -When this block is run, the chosen message is sent to *every* sprite, -which is why the block is called "broadcast." (But if you click the -right arrow after the message name, the block becomes , and you can -change it to  to send the message just to one sprite.) In this program, +

    In the block , the word “bark” is just an arbitrary name I made up. When you click on the downward arrowhead in that input slot, one of the choices (the only choice, the first time) is “new,” which then prompts you to enter a name for the new broadcast. When this block is run, the chosen message is sent to every sprite, which is why the block is called “broadcast.” (But if you click the +right arrow after the message name, the block becomes , and you can change it to  to send the message just to one sprite.) In this program, though, only one sprite has a script to run when that broadcast is sent, -namely the dog. Because the boy's script uses broadcast and wait rather -than just broadcast, the boy doesn't go on to his next say block until -the dog's script finishes. That's why the two sprites take turns -talking, instead of both talking at once. In Chapter VII, -"Object-Oriented Programming with Sprites," you'll see a more flexible -way to send a message to a specific sprite using the tell and ask -blocks. +namely the dog. Because the boy’s script uses broadcast and wait rather +than just broadcast, the boy doesn’t go on to his next say block until +the dog’s script finishes. That’s why the two sprites take turns +talking, instead of both talking at once. In Chapter VII, “Object-Oriented Programming with Sprites,” you’ll see a more flexible way to send a message to a specific sprite using the tell and ask blocks.

    Notice, by the way, that the say block’s first input slot is rectangular rather than oval. This means the input can be any text string, not only a number. In text input slots, a space character is shown as a brown diff --git a/_build/html/content/C1-S12.html b/_build/html/content/C1-S12.html index dd457cd..77d0c82 100644 --- a/_build/html/content/C1-S12.html +++ b/_build/html/content/C1-S12.html @@ -63,7 +63,7 @@ - + @@ -180,12 +180,7 @@

  • Transient variables
  • -
  • Debugging
    -
  • +
  • Debugging
  • Etcetera
  • Libraries
  • @@ -394,44 +389,19 @@

    Contents

    Debugging#

    -

    Snap*!* provides several tools to help you debug a program. They center +

    Snap! provides several tools to help you debug a program. They center around the idea of pausing the running of a script partway through, so that you can examine the values of variables.

    The pause button#

    - - -The simplest way to pause a program is -manually, by clicking the pause button in the top right corner of the -window. While the program is paused, you can run other scripts by -clicking on them, show variables on stage with the checkbox next to the variable in the Variables palette or with the show variable block, and -do all the other things you can generally do, including modifying the -paused scripts by adding or removing blocks. The button changes shape to -and clicking it again resumes the paused scripts. +

    The simplest way to pause a program is manually, by clicking the pause button in the top right corner of the window. While the program is paused, you can run other scripts by clicking on them, show variables on stage with the checkbox next to the variable in the Variables palette or with the show variable block, and do all the other things you can generally do, including modifying the paused scripts by adding or removing blocks. The button changes shape to and clicking it again resumes the paused scripts.

    Breakpoints: the pause all block#

    - -The pause button is great if your program -seems to be in an infinite loop, but more often you'll want to set a -*breakpoint,* a particular point in a script at which you want to pause. -The block, near the bottom of the Control palette, can be inserted in a -script to pause when it is run. So, for example, if your program is -getting an error message in a particular block, you could use pause all -just before that block to look at the values of variables just before -the error happens. +

    The pause button is great if your program seems to be in an infinite loop, but more often you’ll want to set a breakpoint, a particular point in a script at which you want to pause. The block , near the bottom of the Control palette, can be inserted in a script to pause when it is run. So, for example, if your program is getting an error message in a particular block, you could use pause all just before that block to look at the values of variables just before the error happens.

    +

    The pause all block turns bright cyan while paused. Also, during the pause, you can right-click on a running script and the menu that appears will give you the option to show watchers for temporary variables of the script:

    -The pause all block turns bright cyan -while paused. Also, during the pause, you can right-click on a running -script and the menu that appears will give you the option to show -watchers for temporary variables of the script: -

    But what if the block with the error is run many times in a loop, and it -only errors when a particular condition is true—say, the value of some -variable is negative, which shouldn’t ever happen. In the iteration -library (see page 25 for more about how to use libraries) is a -breakpoint block that lets you set a conditional breakpoint, and -automatically display the relevant variables before pausing. Here’s a -sample use of it:

    +

    But what if the block with the error is run many times in a loop, and it only errors when a particular condition is true—say, the value of some variable is negative, which shouldn’t ever happen. In the iteration library (see page 25 for more about how to use libraries) is a breakpoint block that lets you set a conditional breakpoint, and automatically display the relevant variables before pausing. Here’s a sample use of it:

    (In this contrived example, variable zot comes from outside the script but is relevant to its behavior.) When you @@ -442,29 +412,11 @@

    Breakpoints: the pause all block

    Visible stepping#

    - - - -Sometimes you're not exactly sure where -the error is, or you don't understand how the program got there. To -understand better, you'd like to watch the program as it runs, at human -speed rather than at computer speed. You can do this by clicking the -*visible stepping button* ( ), before running a script or while the -script is paused. The button will light up ( ) and a speed control -slider will appear in the toolbar. When you start or continue the -script, its blocks and input slots will light up cyan one at a time: +

    Sometimes you’re not exactly sure where the error is, or you don’t understand how the program got there. To understand better, you’d like to watch the program as it runs, at human speed rather than at computer speed. You can do this by clicking the visible stepping button (), before running a script or while the script is paused. The button will light up () and a speed control slider will appear in the toolbar. When you start or continue the script, its blocks and input slots will light up cyan one at a time:

    -In this simple example, the inputs to the blocks are -constant values, but if an input were a more complicated expression -involving several reporter blocks, each of those would light up as they -are called. Note that the input to a block is evaluated before the block -itself is called, so, for example, the 100 lights up before the move. - -The speed of stepping is controlled by -the slider. If you move the slider all the way to the left, the speed is -zero, the pause button turns into a step button , and the script takes a -single step each time you push it. The name for this is *single -stepping.* +

    In this simple example, the inputs to the blocks are constant values, but if an input were a more complicated expression involving several reporter blocks, each of those would light up as they are called. Note that the input to a block is evaluated before the block itself is called, so, for example, the 100 lights up before the move.

    + +

    The speed of stepping is controlled by the slider. If you move the slider all the way to the left, the speed is zero, the pause button turns into a step button , and the script takes a single step each time you push it. The name for this is single stepping.

    If several scripts that are visible in the scripting area are running at the same time, all of them are stepped in parallel. However, consider the case of two repeat loops with different numbers of blocks. While not @@ -476,8 +428,6 @@

    Visible stepping -

    - - @@ -116,6 +114,8 @@ + +
    @@ -168,8 +168,8 @@ - diff --git a/_build/html/content/C1-S2.html b/_build/html/content/C1-S2.html index 2f58c47..73b637c 100644 --- a/_build/html/content/C1-S2.html +++ b/_build/html/content/C1-S2.html @@ -180,12 +180,7 @@
  • Transient variables
  • -
  • Debugging
    -
  • +
  • Debugging
  • Etcetera
  • Libraries
  • @@ -385,26 +380,15 @@

    Nesting Sprites: Anchors and Parts -Sprite nesting is shown in the sprite -corral icons of both anchors and parts: - - - -In this illustration, it is desired to -animate Alonzo's arm. (The arm has been colored green in this picture to -make the relationship of the two sprites clearer, but in a real project -they'd be the same color, probably.) Sprite, representing Alonzo's body, -is the anchor; Sprite(2) is the arm. The icon for the anchor shows small -images of up to three attached parts at the bottom. The icon for each -part shows a small image of the anchor in its top left corner, and a -*synchronous/dangling rotation flag* in the top right corner. In its +

    Sprite nesting is shown in the sprite corral icons of both anchors and parts: +

    +

    In this illustration, it is desired to animate Alonzo’s arm. (The arm has been colored green in this picture to make the relationship of the two sprites clearer, but in a real project they’d be the same color, probably.) Sprite, representing Alonzo’s body, is the anchor; Sprite(2) is the arm. The icon for the anchor shows small images of up to three attached parts at the bottom. The icon for each part shows a small image of the anchor in its top left corner, and a synchronous/dangling rotation flag in the top right corner. In its initial, synchronous setting, as shown above, it means that the when the anchor sprite rotates, the part sprite also rotates as well as revolving around the anchor. When clicked, it changes from a circular arrow to a @@ -413,7 +397,19 @@

    Nesting Sprites: Anchors and Parts + + + + + + + + + + +

    Top: turning the part: the green arm. Bottom: turning the anchor, with the arm synchronous (left) and dangling (right).

    diff --git a/_build/html/content/C1-S3.html b/_build/html/content/C1-S3.html index ed84ccd..8148a44 100644 --- a/_build/html/content/C1-S3.html +++ b/_build/html/content/C1-S3.html @@ -180,12 +180,7 @@
  • Transient variables
  • -
  • Debugging
    -
  • +
  • Debugging
  • Etcetera
  • Libraries
  • @@ -382,44 +377,23 @@

    Reporter Blocks and Expressions

    Reporter Blocks and Expressions#

    +

    So far, we’ve used two kinds of blocks: hat blocks and command blocks. Another kind is the reporter block, which has an oval shape: . It’s called a “reporter” because when it’s run, instead of carrying out an action, it reports a value that can be used as an input to another block. If you drag a reporter into the scripting area by itself and click on it, the value it reports will appear in a speech balloon next to the block:

    - -So far, we've used two kinds of blocks: hat blocks -and command blocks. Another kind is the *reporter* block, which has an -oval shape: . It's called a "reporter" because when it's run, instead of -carrying out an action, it reports a value that can be used as an input -to another block. If you drag a reporter into the scripting area by -itself and click on it, the value it reports will appear in a speech -balloon next to the block: - -When you drag a reporter block over -another block's input slot, a white "halo" appears around that input -slot, analogous to the white line that appears when snapping command -blocks together: - -Don't drop the input over a *red* halo: +

    When you drag a reporter block over another block’s input slot, a white “halo” appears around that input slot, analogous to the white line that appears when snapping command blocks together:

    + + +

    Don’t drop the input over a red halo: +

    That’s used for a purpose explained on page 68.

    -

    Here’s a simple script that uses a reporter block:

    - -Here the x position reporter provides the -first input to the say block. (The sprite's X position is its horizontal -position, how far left (negative values) or right (positive values) it -is compared to the center of the stage. Similarly, the Y position is -measured vertically, in steps above (positive) or below (negative) the -center.) +

    Here’s a simple script that uses a reporter block: + +

    +

    Here the x position reporter provides the first input to the say block. (The sprite’s X position is its horizontal position, how far left (negative values) or right (positive values) it is compared to the center of the stage. Similarly, the Y position is measured vertically, in steps above (positive) or below (negative) the center.)

    You can do arithmetic using reporters in the Operators palette:

    -The round block rounds 35.3905... to 35, -and the + block adds 100 to that. (By the way, the round block is in the -Operators palette, just like +, but in this script it's a lighter color -with black lettering because Snap*!* alternates light and dark versions -of the palette colors when a block is nested inside another block from -the same palette: +

    The round block rounds 35.3905… to 35, and the + block adds 100 to that. (By the way, the round block is in the Operators palette, just like +, but in this script it’s a lighter color with black lettering because Snap! alternates light and dark versions of the palette colors when a block is nested inside another block from the same palette:

    - -This aid to readability is called *zebra -coloring.*) A reporter block with its inputs, maybe including other -reporter blocks, such as , is called an *expression.* +

    This aid to readability is called zebra coloring.) A reporter block with its inputs, maybe including other reporter blocks, such as , is called an expression.