{"kind":"Notebook","sha256":"74313549c0dfdcc67774eb27db07cba1be6a6b655a7c3c635f446608eefe6280","slug":"course-materials","location":"/release/Lab0/Course_Materials.ipynb","dependencies":[],"frontmatter":{"title":"Course Materials","kernelspec":{"name":"python3","display_name":"Python 3 (ipykernel)","language":"python"},"authors":[{"nameParsed":{"literal":"Chung Chan","given":"Chung","family":"Chan"},"name":"Chung Chan","affiliations":["City University of Hong Kong"],"id":"contributors-myst-generated-uid-0"}],"github":"https://github.com/dive4dec/cs1302_24a","keywords":[],"affiliations":[{"id":"City University of Hong Kong","name":"City University of Hong Kong"}],"exports":[{"format":"ipynb","filename":"Course_Materials.ipynb","url":"/~ccha23/cs1302_24a/build/Course_Materials-5d131317fffd60c1299f1078fab06de6.ipynb"}]},"mdast":{"type":"root","children":[{"type":"block","kind":"notebook-content","data":{"editable":true,"slideshow":{"slide_type":""}},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"To access the course homepage, visit:","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"shbfSzBm2R"}],"key":"ESteJMjZKA"},{"type":"admonition","kind":"attention","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"Course homepage for registered students","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"EGlTBTc5Jd"}],"key":"b4Iu46q2Sg"},{"type":"paragraph","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"children":[{"type":"link","url":"https://canvas.cityu.edu.hk/courses/60298","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"children":[{"type":"text","value":"https://​canvas​.cityu​.edu​.hk​/courses​/60298","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"nAWyWzuvX0"}],"urlSource":"https://canvas.cityu.edu.hk/courses/60298","key":"u0FYosVG6r"}],"key":"mqBic3o5VR"}],"key":"ZOwJsoGSob"},{"type":"paragraph","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"children":[{"type":"text","value":"If you have not yet registered the course, visit the static site:","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"key":"kppZI9rc7Q"}],"key":"XWi2fDEobR"},{"type":"admonition","kind":"attention","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"Static Jupyter book","position":{"start":{"line":11,"column":1},"end":{"line":11,"column":1}},"key":"VEFoea5kaR"}],"key":"B0nP9MH6Fy"},{"type":"paragraph","position":{"start":{"line":13,"column":1},"end":{"line":13,"column":1}},"children":[{"type":"link","url":"https://www.cs.cityu.edu.hk/~ccha23/cs1302_24a/","position":{"start":{"line":13,"column":1},"end":{"line":13,"column":1}},"children":[{"type":"text","value":"https://​www​.cs​.cityu​.edu​.hk​/​~ccha23​/cs1302​_24a​/","position":{"start":{"line":13,"column":1},"end":{"line":13,"column":1}},"key":"kbbzsSISFV"}],"urlSource":"https://www.cs.cityu.edu.hk/~ccha23/cs1302_24a/","key":"K08t0pTO3B"}],"key":"LtLi4PxDf5"}],"key":"VJZmMOhBIu"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":17,"column":1},"end":{"line":18,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":17,"column":1},"end":{"line":17,"column":1}},"children":[{"type":"text","value":"For your first lab session, access ","position":{"start":{"line":17,"column":1},"end":{"line":17,"column":1}},"key":"HQznasi8HK"},{"type":"link","url":"https://www.cs.cityu.edu.hk/~ccha23/cs1302_24a/course-materials","position":{"start":{"line":17,"column":1},"end":{"line":17,"column":1}},"children":[{"type":"inlineCode","value":"Lab0","position":{"start":{"line":17,"column":1},"end":{"line":17,"column":1}},"key":"gQt9OgKEFh"},{"type":"inlineMath","value":"\\to","position":{"start":{"line":17,"column":1},"end":{"line":17,"column":1}},"html":"<span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mo>→</mo></mrow><annotation encoding=\"application/x-tex\">\\to</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.3669em;\"></span><span class=\"mrel\">→</span></span></span></span>","key":"zNbCulG2bt"},{"type":"inlineCode","value":"Course Materials","position":{"start":{"line":17,"column":1},"end":{"line":17,"column":1}},"key":"UdhAoMvD0f"}],"urlSource":"https://www.cs.cityu.edu.hk/~ccha23/cs1302_24a/course-materials","key":"nT2rTGU7lD"}],"key":"KpvXo90yG7"},{"type":"listItem","spread":true,"position":{"start":{"line":18,"column":1},"end":{"line":18,"column":1}},"children":[{"type":"text","value":"For your first lecture session, access ","position":{"start":{"line":18,"column":1},"end":{"line":18,"column":1}},"key":"OaCFgSgdLu"},{"type":"link","url":"https://www.cs.cityu.edu.hk/~ccha23/cs1302_24a/introduction-to-computer-programming","position":{"start":{"line":18,"column":1},"end":{"line":18,"column":1}},"children":[{"type":"inlineCode","value":"Lecture1","position":{"start":{"line":18,"column":1},"end":{"line":18,"column":1}},"key":"GXwxWH1sSG"},{"type":"inlineMath","value":"\\to","position":{"start":{"line":18,"column":1},"end":{"line":18,"column":1}},"html":"<span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mo>→</mo></mrow><annotation encoding=\"application/x-tex\">\\to</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.3669em;\"></span><span class=\"mrel\">→</span></span></span></span>","key":"GdUx3HJG5o"},{"type":"inlineCode","value":"Introduction to Computer Programming","position":{"start":{"line":18,"column":1},"end":{"line":18,"column":1}},"key":"Xo9DW2Y8o0"}],"urlSource":"https://www.cs.cityu.edu.hk/~ccha23/cs1302_24a/introduction-to-computer-programming","key":"Ilug36qtCO"}],"key":"GfZoahGDfV"}],"key":"IEe7m7g7b0"}],"key":"t3UpJa3HqI"},{"type":"block","kind":"notebook-content","data":{"editable":true,"slideshow":{"slide_type":""}},"children":[{"type":"container","kind":"table","children":[{"type":"caption","children":[{"type":"paragraph","children":[{"type":"captionNumber","kind":"table","label":"tbl:notebook-link","identifier":"tbl:notebook-link","html_id":"tbl-notebook-link","enumerator":"1","children":[{"type":"text","value":"Table ","key":"PnnZvMvgFL"},{"type":"text","value":"1","key":"b9i5QcCIfV"},{"type":"text","value":":","key":"ABQhjwzB2q"}],"template":"Table %s:","key":"g2VQfuRoCV"},{"type":"text","value":"An example of a notebook link on the course homepage.","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"OMZLtwyyVZ"}],"key":"sRcXbNf2U0"}],"key":"vQZAf8iE8i"},{"type":"table","children":[],"key":"BE10Xaz3ak"},{"type":"legend","children":[{"type":"div","style":{"border":"1px solid black","padding":"10px"},"children":[{"type":"heading","depth":4,"children":[{"type":"text","value":"Lab0","key":"QCwVXvJ9wB"}],"identifier":"lab0","label":"Lab0","html_id":"lab0","implicit":true,"key":"OcySAtaCWq"},{"type":"list","ordered":false,"start":null,"spread":false,"children":[{"type":"listItem","spread":false,"checked":null,"children":[{"type":"paragraph","children":[{"type":"link","url":"https://canvas.cityu.edu.hk/courses/60298/external_tools/retrieve?display=borderless&url=https%3A//dive.cs.cityu.edu.hk/cs1302_24a/hub/lti/launch%3Fcustom_next%3Dhttps%253A//dive.cs.cityu.edu.hk/cs1302_24a/hub/user-redirect/git-pull%253Frepo%253Dhttps%25253A//github.com/dive4dec/cs1302_24a%2526urlpath%253Dlab/tree/cs1302_24a/Lab0/Course_Materials.ipynb","title":"Subtitle: Notebook link","children":[{"type":"text","value":"Course Materials","key":"Uv4v8BR2dc"}],"urlSource":"https://canvas.cityu.edu.hk/courses/60298/external_tools/retrieve?display=borderless&url=https%3A//dive.cs.cityu.edu.hk/cs1302_24a/hub/lti/launch%3Fcustom_next%3Dhttps%253A//dive.cs.cityu.edu.hk/cs1302_24a/hub/user-redirect/git-pull%253Frepo%253Dhttps%25253A//github.com/dive4dec/cs1302_24a%2526urlpath%253Dlab/tree/cs1302_24a/Lab0/Course_Materials.ipynb","key":"FkJqUq7RDQ"}],"key":"g8tmfuUFg3"}],"key":"R5GHghxNqX"}],"key":"xAo8266qiK"}],"key":"u3SgSwzEem"}],"key":"AX4KWPqskE"}],"label":"tbl:notebook-link","identifier":"tbl:notebook-link","enumerator":"1","html_id":"tbl-notebook-link","key":"wN7GsFdQ9g"}],"key":"LUCBqTeZFj"},{"type":"block","kind":"notebook-content","data":{"editable":true,"slideshow":{"slide_type":"slide"}},"children":[{"type":"heading","depth":2,"position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"Notebooks","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"eEXFwE5hT9"}],"identifier":"notebooks","label":"Notebooks","html_id":"notebooks","implicit":true,"key":"MPT17HsClN"}],"key":"zmfKGobDcC"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"Lecture and lab materials are written in the form of ","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"Z2dQEq93V7"},{"type":"link","url":"https://jupyter.org/","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"Jupyter notebooks","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"mOWMvpxvky"}],"urlSource":"https://jupyter.org/","key":"Eb9cENmDjO"},{"type":"text","value":", which provide an interactive ","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"S70aRQf8sa"},{"type":"link","url":"https://en.wikipedia.org/wiki/literate_programming","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"literate programming","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"UZiE8jLVYj"}],"urlSource":"https://en.wikipedia.org/wiki/literate_programming","data":{"page":"literate_programming","wiki":"https://en.wikipedia.org/","lang":"en"},"internal":false,"protocol":"wiki","key":"zTkI5bYLnZ"},{"type":"text","value":" experience, which is a significant benefit in making programs easy to understand:","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"n3JwClxvnB"}],"key":"eGFctNpuNC"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":3,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"text","value":"Jupyter notebooks allow programs to be mixed with other contents, including figures, videos, and formatted textual explanations.","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"y2UEz8Bnvv"}],"key":"JfkoD1uUYN"},{"type":"listItem","spread":true,"position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"text","value":"The notebooks can also be opened in a Jupyter server, which enables users to edit and run the programs in addition to other contents.","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"vBEBttbBuU"}],"key":"TBM8B5bocb"}],"key":"KHsSg4DuT8"}],"key":"Y2APNuDwi5"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"heading","depth":3,"position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"How to run notebook cells?","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"mjupdtqW1R"}],"identifier":"how-to-run-notebook-cells","label":"How to run notebook cells?","html_id":"how-to-run-notebook-cells","implicit":true,"key":"vRP3Xn7Ijj"}],"key":"nqLPA9FllL"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"If you already have your notebook opened in a Jupyter server, let’s run some code. Otherwise, jump to the ","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"A8VvuR7zTZ"},{"type":"crossReference","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"next section","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"MLr13hQYUO"}],"identifier":"sec:fetch","label":"sec:fetch","kind":"heading","template":"{name}","resolved":true,"html_id":"sec-fetch","key":"Ilumm9anQU"},{"type":"text","value":" to learn how to fetch and open notebooks.","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"ErES1lOFPr"}],"key":"eUwH2VJ457"},{"type":"paragraph","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"text","value":"To run a cell, select the cell and press ","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"V0nEfPW7Di"},{"type":"keyboard","children":[{"type":"text","value":"Shift + Enter","key":"vR0va1B6wf"}],"key":"ohSH1mm6L5"},{"type":"text","value":". The cell prompt with change from ","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"Vj0molwaR4"},{"type":"inlineCode","value":"[ ]","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"rE2SrIGwos"},{"type":"text","value":" to ","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"kQ1pIHlEIs"},{"type":"inlineCode","value":"[*]","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"LbzCVp3j9V"},{"type":"text","value":". When the run completes, the asterisk will be changed to a number like ","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"OfLZSHcTES"},{"type":"inlineCode","value":"[1]","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"QGG6Je8AZp"},{"type":"text","value":". Try running the following cell to import the ","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"Hzw5caoFtS"},{"type":"link","url":"https://docs.manim.community/","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"text","value":"Mathematical Animation Engine (Manim)","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"UgoHUuaQZ2"}],"urlSource":"https://docs.manim.community/","key":"ti4yB1OuEX"},{"type":"text","value":".","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"hM7gJ8m0fz"},{"type":"footnoteReference","identifier":"import","label":"import","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"number":2,"enumerator":"2","key":"GBF0augB7u"}],"key":"ZDAvZhRUl4"},{"type":"footnoteDefinition","identifier":"import","label":"import","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"paragraph","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"children":[{"type":"text","value":"Importing a library in programming is like bringing a toolbox into your workshop, giving you access to all the tools you need to complete your tasks.","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"OA0zNON5PS"}],"key":"alojpNtcup"}],"number":2,"enumerator":"2","key":"PIcLNYhvfV"}],"key":"EiEJluJUuF"},{"type":"block","kind":"notebook-code","data":{"editable":true,"slideshow":{"slide_type":""}},"children":[{"type":"code","lang":"python","executable":true,"value":"import os\n\nif not os.getenv(\n    \"NBGRADER_EXECUTION\"\n):  # Skip the code or auto-grading may take too long to complete.\n    import manim","key":"ZJONW7bUIa"},{"type":"output","id":"Qq7NFWvzmXgEyTEzosHu0","data":[],"key":"vSC1Awly1L"}],"key":"bW4Fd0a0Uc"},{"type":"block","kind":"notebook-content","data":{"editable":true,"slideshow":{"slide_type":""}},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"After the import is complete,  run the following cell to create an animation:","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"jrZvOKBQBC"}],"key":"MI4J8h6cG3"}],"key":"N2LE3FyMEM"},{"type":"block","kind":"notebook-code","data":{"editable":true,"slideshow":{"slide_type":""}},"children":[{"type":"code","lang":"python","executable":true,"value":"%%manim -qm --progress_bar=none --disable_caching --flush_cache -v ERROR Welcome\nclass Welcome(manim.Scene):\n    def construct(self):\n        self.play(manim.Write(manim.Text(\"Welcome to CS1302!\")))","key":"FpuNbYk8RQ"},{"type":"output","id":"B6pyTKHaWhT4Hr2sUi5BT","data":[],"key":"bVVVjsmhSy"}],"key":"IXjj1RwT8K"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"As you can see, the code creates a scene that displays the message ","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"fd79xalRat"},{"type":"inlineCode","value":"Welcome to CS1302!","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"O1YyAJZWm7"},{"type":"text","value":" with a writing animation.","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"ymnA27nRTv"},{"type":"footnoteReference","identifier":"manim-magic","label":"manim-magic","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"number":3,"enumerator":"3","key":"pRy5TSyNYr"},{"type":"text","value":" To verify that the program runs live, feel free to modify the message to anything you want.","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"dLXcH92rGq"}],"key":"B5l5iDSls8"},{"type":"footnoteDefinition","identifier":"manim-magic","label":"manim-magic","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"paragraph","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"text","value":"If you are interested in what the first line does, it sets the video quality to medium while disabling caching and progress bars, and setting the verbosity to reporting only ERROR but not other critical information.","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"foJMf8aUM3"}],"key":"PRqTgpJUCv"}],"number":3,"enumerator":"3","key":"zxS0Zlclis"}],"key":"emFResCZBN"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"heading","depth":3,"position":{"start":{"line":2,"column":1},"end":{"line":2,"column":1}},"children":[{"type":"text","value":"How to fetch and open notebooks?","position":{"start":{"line":2,"column":1},"end":{"line":2,"column":1}},"key":"iA4P1m0W6O"}],"label":"sec:fetch","identifier":"sec:fetch","html_id":"sec-fetch","key":"M7ag025b7B"}],"key":"NCRRm853HZ"},{"type":"block","kind":"notebook-content","data":{"editable":true,"slideshow":{"slide_type":""}},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"To fetch the notebooks, follow the links to the notebooks on the course homepage such as the one in ","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"B6tMnBOlEA"},{"type":"crossReference","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"Table ","key":"IYNiEUBVkl"},{"type":"text","value":"1","key":"zbnvXr7pFa"}],"identifier":"tbl:notebook-link","label":"tbl:notebook-link","kind":"table","template":"Table %s","enumerator":"1","resolved":true,"html_id":"tbl-notebook-link","key":"Is5k1rBGzj"},{"type":"text","value":".","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"sru443jlw7"}],"key":"EpJ4IjzwuM"}],"key":"CFCu7wDuoC"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"After clicking a notebook link, you may be asked to","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"GHcNe23fgw"}],"key":"et2gXDnKUU"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":3,"column":1},"end":{"line":5,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"text","value":"login with your CityU account if you are not yet logged into Canvas, and","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"mg28RgXEAG"}],"key":"DnKHqjL9Uk"},{"type":"listItem","spread":true,"position":{"start":{"line":4,"column":1},"end":{"line":5,"column":1}},"children":[{"type":"text","value":"specify a server option if you do not yet have a running Jupyter server.","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"aKj1Yx50om"}],"key":"VXW913cp3j"}],"key":"OLbOij1Md7"},{"type":"paragraph","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"text","value":"Select the ","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"pCGf9i0x6p"},{"type":"inlineCode","value":"Default","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"uErpAym0sK"},{"type":"text","value":" option from the list of available Jupyter servers, and click ","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"DyR6GHapyd"},{"type":"keyboard","children":[{"type":"text","value":"Start","key":"KIgsY4M1ky"}],"key":"X87SyiTMzd"},{"type":"text","value":" to begin your session.","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"nbW8hQdOVT"}],"key":"DHbtxVaIjP"}],"key":"HYPOWC04fZ"},{"type":"block","kind":"notebook-content","data":{"editable":true,"slideshow":{"slide_type":""}},"children":[{"type":"admonition","kind":"note","class":"dropdown","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"What are the other server options?","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"tIfix3I8I7"}],"key":"yHdob8DuIo"},{"type":"paragraph","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"text","value":"The course’s programming environment is conveniently accessible via a ","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"GmhEBk3fH2"},{"type":"link","url":"https://jupyterhub.readthedocs.io/en/stable/","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"text","value":"JupyterHub","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"mEawc6dpc3"}],"urlSource":"https://jupyterhub.readthedocs.io/en/stable/","key":"i2TQFGEzT9"},{"type":"text","value":" server, allowing remote access without the need to install any special software, thanks to ","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"YlVx4hL5s4"},{"type":"link","url":"https://en.wikipedia.org/wiki/Project_Jupyter","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"text","value":"Project Jupyter","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"D6kg2TZA9k"}],"urlSource":"https://en.wikipedia.org/wiki/Project_Jupyter","data":{"page":"Project_Jupyter","wiki":"https://en.wikipedia.org/","lang":"en"},"internal":false,"protocol":"wiki","key":"O0c7AhEtKy"},{"type":"text","value":". This means you can easily write and run programs on your mobile devices using just a web browser. Each student will have their own ","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"rYNIKroNpl"},{"type":"link","url":"https://jupyter-server.readthedocs.io/en/latest/","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"text","value":"Jupyter server","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"vmWdcZBJYC"}],"urlSource":"https://jupyter-server.readthedocs.io/en/latest/","key":"uUXcZUxq4k"},{"type":"text","value":" with individual computing resources including CPU, memory, and GPU.","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"qKlS3AlT6X"}],"key":"YUYK95GmS4"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":6,"column":1},"end":{"line":10,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"text","value":"Each server runs the ","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"LJRPQ6N6eR"},{"type":"link","url":"https://en.wikipedia.org/wiki/Ubuntu","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"text","value":"Ubuntu","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"XDhYXs3LzF"}],"urlSource":"https://en.wikipedia.org/wiki/Ubuntu","data":{"page":"Ubuntu","wiki":"https://en.wikipedia.org/","lang":"en"},"internal":false,"protocol":"wiki","key":"XsuqKfZT1T"},{"type":"text","value":" operating system in a ","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"QC4O0Y1kXO"},{"type":"link","url":"https://en.wikipedia.org/wiki/Containerization_(computing)","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"text","value":"container","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"jOhCylVVSe"}],"urlSource":"https://en.wikipedia.org/wiki/Containerization_(computing)","data":{"page":"Containerization_(computing)","wiki":"https://en.wikipedia.org/","lang":"en"},"internal":false,"protocol":"wiki","key":"uLfFkjQbRd"},{"type":"text","value":". See the ","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"TFkbzy9IWY"},{"type":"link","url":"https://github.com/dive4dec/jupyter/blob/main/cs1302nb/Dockerfile","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"text","value":"Dockerfile","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"Vq6jNcNJEp"}],"urlSource":"https://github.com/dive4dec/jupyter/blob/main/cs1302nb/Dockerfile","data":{"kind":"file","org":"dive4dec","repo":"jupyter","reference":"main","file":"cs1302nb/Dockerfile","raw":"https://raw.githubusercontent.com/dive4dec/jupyter/main/cs1302nb/Dockerfile"},"internal":false,"protocol":"github","key":"dZMUT2P59R"},{"type":"text","value":" for details.","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"KmUiMrlhAi"}],"key":"ptLuHuEX10"},{"type":"listItem","spread":true,"position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"children":[{"type":"text","value":"The GPU resources are useful for customized AI applications.","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"key":"tSYQF7fV0R"}],"key":"tUSPWgiS4b"},{"type":"listItem","spread":true,"position":{"start":{"line":8,"column":1},"end":{"line":10,"column":1}},"children":[{"type":"text","value":"You can switch between the ","position":{"start":{"line":8,"column":1},"end":{"line":8,"column":1}},"key":"mRAaX69E8D"},{"type":"inlineCode","value":"Default","position":{"start":{"line":8,"column":1},"end":{"line":8,"column":1}},"key":"xRCICiqtFK"},{"type":"text","value":" and other server options at any time by restarting your server and selecting the desired option. Restarting the server is simple and can be done by","position":{"start":{"line":8,"column":1},"end":{"line":8,"column":1}},"key":"ekjndDHi3Y"},{"type":"list","ordered":true,"start":1,"spread":false,"position":{"start":{"line":9,"column":1},"end":{"line":10,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"children":[{"type":"text","value":"selecting ","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"key":"CunZIgGxXX"},{"type":"inlineCode","value":"Hub Control Panel","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"key":"LoSpW3Kr7F"},{"type":"text","value":" under the ","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"key":"QZyCrhLCl5"},{"type":"inlineCode","value":"File","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"key":"Mu5A0fgFeX"},{"type":"text","value":" menu, and","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"key":"TNGIF2ilUi"}],"key":"lxM4NEGtUp"},{"type":"listItem","spread":true,"position":{"start":{"line":10,"column":1},"end":{"line":10,"column":1}},"children":[{"type":"text","value":"click ","position":{"start":{"line":10,"column":1},"end":{"line":10,"column":1}},"key":"PxBmy7kOst"},{"type":"inlineCode","value":"Stop My Server","position":{"start":{"line":10,"column":1},"end":{"line":10,"column":1}},"key":"t5IQ6ZPKhA"},{"type":"text","value":" and then ","position":{"start":{"line":10,"column":1},"end":{"line":10,"column":1}},"key":"GKrGsysYLO"},{"type":"inlineCode","value":"Start My Server","position":{"start":{"line":10,"column":1},"end":{"line":10,"column":1}},"key":"vqo7wkKhZy"},{"type":"text","value":".","position":{"start":{"line":10,"column":1},"end":{"line":10,"column":1}},"key":"sUHYHkIXzh"}],"key":"ZMxwf9f6xq"}],"key":"NXC8lQnd5j"}],"key":"GFeB7SoTT0"}],"key":"YrO341RUaj"}],"key":"bCD7NDKRFc"}],"key":"c7iStimcbE"},{"type":"block","kind":"notebook-content","data":{"editable":true,"slideshow":{"slide_type":""}},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"If the server is spawned successfully, the ","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"sPXpCVH8tv"},{"type":"link","url":"https://jupyterlab.readthedocs.io","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"JupyterLab","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"lmchxhcxBn"}],"urlSource":"https://jupyterlab.readthedocs.io","key":"HuaS83n4TF"},{"type":"text","value":" interface should appear.","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"MaRUwUwqaC"}],"key":"aLKmRzNPbb"},{"type":"admonition","kind":"tip","class":"dropdown","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"Troubleshooting","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"nTWb1Mx4j9"}],"key":"jQIs4mZ6vy"},{"type":"paragraph","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"text","value":"In case the jupyterlab interface fails to show, refresh the page or restart your browser for the javascript to load completely in your browser. If the server fails to spawn, which is very likely if you try to spawn a GPU server, you can restart after clicking the ","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"uPHGlKtkgY"},{"type":"inlineCode","value":"Home","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"sGBH9Ll5zM"},{"type":"text","value":" link.","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"epnXIvR0rC"}],"key":"MGJXXuvDXf"},{"type":"paragraph","position":{"start":{"line":8,"column":1},"end":{"line":8,"column":1}},"children":[{"type":"text","value":"You may occasionally run into issues. There are thousands of open issues reported to the JupyterLab repository, where you may find related issues and a kludge (temporary workaround):","position":{"start":{"line":8,"column":1},"end":{"line":8,"column":1}},"key":"TjHwpABWfo"}],"key":"J3v3ZrSFtT"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":10,"column":1},"end":{"line":10,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":10,"column":1},"end":{"line":10,"column":1}},"children":[{"type":"link","url":"https://github.com/jupyterlab/jupyterlab/issues","position":{"start":{"line":10,"column":1},"end":{"line":10,"column":1}},"children":[{"type":"text","value":"https://​github​.com​/jupyterlab​/jupyterlab​/issues","position":{"start":{"line":10,"column":1},"end":{"line":10,"column":1}},"key":"DCYXEOtBSr"}],"urlSource":"https://github.com/jupyterlab/jupyterlab/issues","error":true,"key":"KZsR3YV9ld"}],"key":"nGdKNoVsxR"}],"key":"Aq6OSAHZje"}],"key":"gmg3FZbjpU"}],"key":"HuJVYF6IuA"},{"type":"block","kind":"notebook-content","data":{"editable":true,"slideshow":{"slide_type":""}},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"As you start your programming journey, you will inevitably encounter ","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"ORpkhKML6Z"},{"type":"link","url":"https://en.wikipedia.org/wiki/Software_bug","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"software bugs","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"kGBu3WHMy6"}],"urlSource":"https://en.wikipedia.org/wiki/Software_bug","data":{"page":"Software_bug","wiki":"https://en.wikipedia.org/","lang":"en"},"internal":false,"protocol":"wiki","key":"Aw8CRG1UBy"},{"type":"text","value":", especially in highly sophisticated software such as JupyterLab. Be aware of their existence, and develop a positive attitude towards bugs, as well as cultivate a proper skill set to inspect and debug them effectively.","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"oLqT711336"}],"key":"CD8ENPWhUq"}],"key":"EBD4WKMs0A"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"As an example to inspect a computer program, we will explain how the notebook link works. First, run the following code to start the notebook link generator app.","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"UFGzHFHlqZ"}],"key":"qpZF7xcn2W"}],"key":"eMCoQkr14w"},{"type":"block","kind":"notebook-code","data":{},"children":[{"type":"code","lang":"python","executable":true,"value":"from notebook_link_generator import setup_notebook_link_widget\n\ndisplay_widget = setup_notebook_link_widget(canvas_id=\"60298\")\ndisplay(display_widget)","key":"RAfakOWHd0"},{"type":"output","id":"GE_tS3hdMFWVBomgx2ZSd","data":[],"key":"Y8LtYT36O4"}],"key":"FRkyxV10Xg"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"Change the ","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"zwYfaLEhiQ"},{"type":"inlineCode","value":"Notebook path","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"OX61jDMRIe"},{"type":"text","value":" above to ","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"khpB7b2vmt"},{"type":"inlineCode","value":"Lecture1/Introduction_to_Computer_Programming.ipynb","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"WAXKDODfcU"},{"type":"text","value":" and observe the live update to the generated link.","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"XJRpopt8cD"}],"key":"Wsm2D4dqQ0"}],"key":"qFJaeqR3jW"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"Now, run the following two cells to see how a notebook link is generated stey-by-step:","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"oMjHqHkKNU"}],"key":"j2uY1tDUPy"}],"key":"uwu2g86Ect"},{"type":"block","kind":"notebook-code","data":{},"children":[{"type":"code","lang":"python","executable":true,"value":"%load_ext divewidgets","key":"OPi1V34H8A"},{"type":"output","id":"OePR0cI7W6kDqNQsqjit3","data":[],"key":"P1sHKNDJFa"}],"key":"y3HBkjS9yC"},{"type":"block","kind":"notebook-code","data":{},"children":[{"type":"code","lang":"python","executable":true,"value":"%%optlite -r\nfrom urllib.parse import quote\n\n# Course parameters\ncourse_id = \"cs1302_24a\"\nnotebook_path = \"Lecture1/Introduction_to_Computer_Programming.ipynb\"\ncanvas_id = \"60298\"\n\n# Base URLs\nnotebook_repo = f\"https://github.com/dive4dec/{course_id}\"\ncourse_server = \"https://dive.cs.cityu.edu.hk\"\ncourse_homepage = f\"https://canvas.cityu.edu.hk/courses/{canvas_id}\"\n\n# Notebook URL generation\n# 1. Construct the URL for git-pull service to clone or pull the notebook repository\ngitpull_url = (\n    f\"{course_server}/{course_id}/hub/user-redirect/git-pull?\"\n    + f\"repo={quote(notebook_repo)}\"\n    + f\"&urlpath={quote(f'lab/tree/{course_id}/{notebook_path}')}\"\n)\n# Construct the LTI (Learning Tools Interoperability) launch URL for JupyterHub\nlti_url = (\n    f\"{course_server}/{course_id}/hub/lti/launch?\" + f\"custom_next={quote(gitpull_url)}\"\n)\n# Construct the LTI external tool URL to open the notebook\nnotebook_url = (\n    f\"{course_homepage}/external_tools/retrieve?display=borderless&\"\n    + f\"url={quote(lti_url)}\"\n)\nnotebook_url","key":"pz9RxXr6gS"},{"type":"output","id":"poHuV6_a4CqbCTnnuMAWT","data":[],"key":"g1eAOJR33T"}],"key":"rii9ndjKtk"},{"type":"block","kind":"notebook-content","data":{"slideshow":{"slide_type":"subslide"}},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"After running the code, you can:","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"jUQzRM3gBO"}],"key":"tn4wefhlco"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":2,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":2,"column":1},"end":{"line":2,"column":1}},"children":[{"type":"text","value":"see the generated notebook link for ","position":{"start":{"line":2,"column":1},"end":{"line":2,"column":1}},"key":"UhZYIbQTr9"},{"type":"inlineCode","value":"Lecture1/Introduction_to_Computer_Programming.ipynb","position":{"start":{"line":2,"column":1},"end":{"line":2,"column":1}},"key":"v2kBD0AseM"},{"type":"text","value":" in the output cell;","position":{"start":{"line":2,"column":1},"end":{"line":2,"column":1}},"key":"GlCidu7aZ8"}],"key":"H8voOaIsjK"},{"type":"listItem","spread":true,"position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"text","value":"inspect parts of the code in the input cell by placing the cursor there and press ","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"R4nSq6yjBa"},{"type":"keyboard","children":[{"type":"text","value":"Shift + Tab","key":"lWOMfhlZwg"}],"key":"Xs8BL7GkZk"},{"type":"text","value":"; and","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"Wu14qLk9tL"}],"key":"e89cuoo4U1"},{"type":"listItem","spread":true,"position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"text","value":"visualize the execution step-by-step by clicking ","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"kolpXdf20X"},{"type":"keyboard","children":[{"type":"text","value":"Next >","key":"Q08ZLBitZQ"}],"key":"yXYJoIEbl8"},{"type":"text","value":" (","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"mbo5CokqLx"},{"type":"keyboard","children":[{"type":"text","value":"< Prev","key":"pPTsUKqcPh"}],"key":"zMCw0r5PW8"},{"type":"text","value":") to go the the next (previous) line.","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"N3BGMIUFbO"}],"key":"YS2z2u9s7t"}],"key":"hHHwWzHXLA"}],"key":"jD2uF5kZjU"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"admonition","kind":"note","class":"dropdown","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"What does the notebook link do?","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"PRyhOPcyqI"}],"key":"XbFBimQZ6J"},{"type":"paragraph","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"text","value":"The notebooks reside in a ","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"hqxPCYVpTj"},{"type":"link","url":"https://github.com/dive4dec/cs1302_24a/blob/main/README.md","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"text","value":"GitHub repository","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"aKFw64Ctkt"}],"urlSource":"https://github.com/dive4dec/cs1302_24a/blob/main/README.md","data":{"kind":"file","org":"dive4dec","repo":"cs1302_24a","reference":"main","file":"README.md","raw":"https://raw.githubusercontent.com/dive4dec/cs1302_24a/main/README.md"},"internal":false,"protocol":"github","key":"M37XxXMYHq"},{"type":"text","value":". Accessing a notebook link will","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"L9xNViPduS"}],"key":"fnI2ZiZmk6"},{"type":"list","ordered":true,"start":1,"spread":false,"position":{"start":{"line":6,"column":1},"end":{"line":7,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"text","value":"use ","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"BztCjG4RtW"},{"type":"link","url":"https://ltiauthenticator.readthedocs.io","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"text","value":"LTI Authenticator","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"nmrIdkD8IH"}],"urlSource":"https://ltiauthenticator.readthedocs.io","key":"lvXdv9YjbX"},{"type":"text","value":" to launch the JupyterHub as an LTI external tool from the course homepage, and","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"z7k1JzmnwP"}],"key":"zghgNDIzhO"},{"type":"listItem","spread":true,"position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"children":[{"type":"text","value":"use ","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"key":"POi8q1PNQy"},{"type":"link","url":"https://jupyterhub.github.io/nbgitpuller/index.html","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"children":[{"type":"text","value":"NbGitPuller","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"key":"AvCKYjjHQA"}],"urlSource":"https://jupyterhub.github.io/nbgitpuller/index.html","key":"shLsIcGOBy"},{"type":"text","value":" to ","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"key":"hRsxEI08TH"},{"type":"link","url":"https://git-scm.com/docs/git-pull","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"children":[{"type":"text","value":"git-pull","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"key":"Xo4fhLAojJ"}],"urlSource":"https://git-scm.com/docs/git-pull","key":"NfKQHKP4CM"},{"type":"text","value":"s all the files in the repository, merge them with any existing files stored under the course folder ","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"key":"aOBNrEWOMa"},{"type":"inlineCode","value":"cs1302_24a","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"key":"oHqGqGir9o"},{"type":"text","value":" in your home directory without overwriting your changes, and open the notebook path specified in the JupyterLab interface.","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"key":"c8WNLXMzZK"}],"key":"JlTGi9dn4f"}],"key":"lqLm7nBg4y"}],"key":"m6gRvqU3aJ"}],"key":"ac8j3A1WLy"},{"type":"block","kind":"notebook-content","data":{"slideshow":{"slide_type":"subslide"}},"children":[{"type":"heading","depth":2,"position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"Assignments","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"jWKw4hJYAs"}],"identifier":"assignments","label":"Assignments","html_id":"assignments","implicit":true,"key":"hfP4RMfrV4"}],"key":"mOLvoUtkp9"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"heading","depth":3,"position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"How to complete an assignment?","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"uH4DSVTCOH"}],"identifier":"how-to-complete-an-assignment","label":"How to complete an assignment?","html_id":"how-to-complete-an-assignment","implicit":true,"key":"WQ0WyyDtLD"}],"key":"HOa5mXC0rd"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"The notebooks can be edited in JupyterLab to include your answers for submission. If this is your first time using JupyterLab, take a look at the ","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"gEb9bZyQoW"},{"type":"link","url":"https://www.youtube.com/embed/A5YyoCKxEOU","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"official video tutorial","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"UXibHoW53M"}],"urlSource":"https://www.youtube.com/embed/A5YyoCKxEOU","key":"dS50WytJAL"},{"type":"text","value":":","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"OmVzTZsJfl"}],"key":"NDdOGlpoxP"},{"type":"admonition","kind":"seealso","class":"dropdown","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"How to use JupyterLab?","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"fDQXXPGzoI"}],"key":"p6hSGIWKxr"},{"type":"container","kind":"figure","children":[{"type":"iframe","src":"https://www.youtube.com/embed/A5YyoCKxEOU","width":"100%","align":"left","key":"rZg5e6ZzK4"},{"type":"caption","children":[{"type":"paragraph","position":{"start":{"line":11,"column":1},"end":{"line":11,"column":1}},"children":[{"type":"text","value":"Official video tutorial on Jupyter","position":{"start":{"line":11,"column":1},"end":{"line":11,"column":1}},"key":"N72DbohLPG"}],"key":"JfZEFwvF8C"}],"key":"D6xMC7pHbb"}],"enumerator":"1","key":"iMtfNKfkcF"}],"key":"yOVy9tArLs"}],"key":"VjKarWU0hH"},{"type":"block","kind":"notebook-content","data":{"editable":true,"slideshow":{"slide_type":"fragment"}},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"For more advanced features:","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"pHF5Ubz0GD"}],"key":"QzPco6Oiqg"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":3,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":3,"column":1},"end":{"line":5,"column":1}},"children":[{"type":"text","value":"Checkout the ","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"KchIPaDf43"},{"type":"inlineCode","value":"Help","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"CgvfJPvTxF"},{"type":"text","value":" menu items","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"JAfC1P6p9T"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":4,"column":1},"end":{"line":5,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"inlineCode","value":"Show Keyboard Shortcuts","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"gdjJHeP5WE"},{"type":"text","value":" to try some of the shortcuts to see their effect, and","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"usONrEqJ2O"}],"key":"TG6J1gP7aw"},{"type":"listItem","spread":true,"position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"children":[{"type":"inlineCode","value":"Jupyter Reference","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"tK5UdVbsaZ"},{"type":"text","value":" to open the ","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"Cr93vsNi0q"},{"type":"link","url":"https://jupyterlab.readthedocs.io/en/latest/user/interface.html","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"children":[{"type":"text","value":"user guide","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"raR3OYpxeI"}],"urlSource":"https://jupyterlab.readthedocs.io/en/latest/user/interface.html","key":"hmffs2j56g"},{"type":"text","value":" in a new tab.","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"z13Oe11IAc"}],"key":"hNZNL10IdM"}],"key":"TxwKYu0bfm"}],"key":"sLdctm65BO"},{"type":"listItem","spread":true,"position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"text","value":"Try also the ","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"NhduCHqvHz"},{"type":"link","url":"https://mystmd.org/guide/typography","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"text","value":"MyST Markdown","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"fIiHLZxcH8"}],"urlSource":"https://mystmd.org/guide/typography","key":"ebyZIqzjVH"},{"type":"text","value":" syntax to format your notes.","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"NuDH4oz724"}],"key":"upufLbORMe"}],"key":"adsWfe7sSa"}],"key":"j1gaaqma70"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"admonition","kind":"seealso","class":"dropdown","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"An alternative interface: VSCode","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"MVGU6SCcWf"}],"key":"OxyRON98n4"},{"type":"paragraph","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"text","value":"You may also use a highly customizable editor Visual Studio Code (VS Code) to open a notebook:","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"VS9vKsfBO6"}],"key":"TTnMCPj51A"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":6,"column":1},"end":{"line":8,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"text","value":"Click ","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"XS5EEiDPxk"},{"type":"inlineCode","value":"File","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"LF2m4EBNkZ"},{"type":"text","value":"->","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"CYg7zqXXOO"},{"type":"inlineCode","value":"New Launcher","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"SNimT7OVfh"},{"type":"text","value":"->","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"A0lFTcU4f8"},{"type":"inlineCode","value":"VS Code","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"hWjSfJkpbx"},{"type":"text","value":".","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"SnfENPV9X8"}],"key":"ezTTRCkPHx"},{"type":"listItem","spread":true,"position":{"start":{"line":7,"column":1},"end":{"line":8,"column":1}},"children":[{"type":"text","value":"Click the menu icon on the left and select ","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"key":"uziXeLbJCW"},{"type":"inlineCode","value":"Open Folder","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"key":"mPZr45bTzf"},{"type":"text","value":" and select ","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"key":"OT6nOL42UR"},{"type":"inlineCode","value":"cs1302_24a","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"key":"E6tZdehKgs"},{"type":"text","value":".","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"key":"Lu3H0Cayga"}],"key":"QbYw1kgY4b"}],"key":"HskKGIqmUr"},{"type":"paragraph","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"children":[{"type":"text","value":"In the file explorer, you can navigate to a notebook to open it. However, to properly run the notebook, you would also need to start the Kernel by choosing an appropriate Python environment such as ","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"key":"bAJca23Qgn"},{"type":"inlineCode","value":"base","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"key":"nFiZauzJfH"},{"type":"text","value":", which is the default ","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"key":"M9UHzMn2pY"},{"type":"link","url":"https://conda.io/projects/conda/en/latest/dev-guide/api/conda/base/index.html","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"children":[{"type":"text","value":"(conda) environment","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"key":"tYMT1p6Pr8"}],"urlSource":"https://conda.io/projects/conda/en/latest/dev-guide/api/conda/base/index.html","key":"HRofMuVyEo"},{"type":"text","value":" for our JupyterLab setup. Unlike JupyterLab, you may install additional extensions yourself to enrich the interface.","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"key":"XBuO1EbOzd"},{"type":"footnoteReference","identifier":"vscode","label":"vscode","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"number":4,"enumerator":"4","key":"lGEYrWOAXS"}],"key":"uT2eLJtcwR"}],"key":"DxGzzQNTzq"},{"type":"footnoteDefinition","identifier":"vscode","label":"vscode","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"children":[{"type":"paragraph","position":{"start":{"line":13,"column":1},"end":{"line":13,"column":1}},"children":[{"type":"text","value":"The VSCode interface is actually ","position":{"start":{"line":13,"column":1},"end":{"line":13,"column":1}},"key":"ESDWL1r8uE"},{"type":"link","url":"https://github.com/coder/code-server","position":{"start":{"line":13,"column":1},"end":{"line":13,"column":1}},"children":[{"type":"text","value":"code-server","position":{"start":{"line":13,"column":1},"end":{"line":13,"column":1}},"key":"CarIjsj7Ev"}],"urlSource":"https://github.com/coder/code-server","error":true,"key":"tWZJNHfkoF"},{"type":"text","value":", so some VSCode extensions may not be listed under the extension panel. You may still try to install them using the command ","position":{"start":{"line":13,"column":1},"end":{"line":13,"column":1}},"key":"egVTkXMUry"},{"type":"inlineCode","value":"install-vscode-extension","position":{"start":{"line":13,"column":1},"end":{"line":13,"column":1}},"key":"jzveStgnLQ"},{"type":"text","value":" in a terminal. This is only for advanced users who know what they are doing, or the risk of breaking things can be rather high...","position":{"start":{"line":13,"column":1},"end":{"line":13,"column":1}},"key":"DnTe5O2OWv"}],"key":"PSchJZWzEG"}],"number":4,"enumerator":"4","key":"EfBO1MSaNf"}],"key":"mR7WfGPTLQ"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"In learning a new programming language, the first program to write is often the ","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"Cr5WpUdRVJ"},{"type":"link","url":"https://en.wikipedia.org/wiki/%22Hello,_World!%22_program","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"“Hello, World!”","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"pmIjlUOH0Y"}],"urlSource":"https://en.wikipedia.org/wiki/%22Hello,_World!%22_program","data":{"page":"%22Hello,_World!%22_program","wiki":"https://en.wikipedia.org/","lang":"en"},"internal":false,"protocol":"wiki","key":"lLL3K4IHnV"},{"type":"text","value":" program, which says Hello to the world. As your first lab exercise, you will write such a program in python.","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"S4RXpCCeo6"}],"key":"LMfPejYXUp"}],"key":"ST7T3oD4lY"},{"type":"block","kind":"notebook-content","data":{"deletable":false,"editable":false,"nbgrader":{"cell_type":"markdown","checksum":"47a95295c28992482f5a59d874dc70f6","grade":false,"grade_id":"qHelloWorld","locked":true,"schema_version":3,"solution":false,"task":false},"slideshow":{"slide_type":"subslide"}},"children":[{"type":"exercise","label":"ex:Hello-World","identifier":"ex:hello-world","enumerated":true,"children":[{"type":"admonitionTitle","children":[{"type":"text","value":"Hello World","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"ONuprXjW41"}],"key":"VF4oVAxfDH"},{"type":"paragraph","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"text","value":"Complete the program to print the message ","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"LQtzpRqQrS"},{"type":"inlineCode","value":"Hello, World!","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"jt6iByajvx"},{"type":"text","value":".","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"oBO15D5s6t"}],"key":"pk0OeBTUXd"},{"type":"admonition","kind":"hint","class":"dropdown","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"Hint","key":"O3gyZxW236"}],"key":"Tx0KMS7Xfm"},{"type":"paragraph","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"children":[{"type":"text","value":"One possible solution is:","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"key":"dX2Nk62kEL"}],"key":"E9CVbINqgf"},{"type":"container","kind":"code","children":[{"type":"code","lang":"python","value":"def say_hello():\n    print(\"Hello, World!\")\n    \nsay_hello()","key":"h6AteBRGKc"},{"type":"caption","children":[{"type":"paragraph","children":[{"type":"captionNumber","kind":"code","label":"code:Hello-World","identifier":"code:hello-world","html_id":"code-hello-world","enumerator":"1","children":[{"type":"text","value":"Program ","key":"s9GqNSAS2A"},{"type":"text","value":"1","key":"Wi5tJROCeL"},{"type":"text","value":":","key":"d9Xwa9BEq7"}],"template":"Program %s:","key":"ErREaL0TjO"},{"type":"text","value":"Python, “Hello, World!”","position":{"start":{"line":13,"column":1},"end":{"line":13,"column":1}},"key":"y4aAJfe0E5"}],"key":"YrUTIhnSyB"}],"key":"sNMWMKJ8Do"}],"label":"code:Hello-World","identifier":"code:hello-world","enumerator":"1","html_id":"code-hello-world","key":"UGiQ78OuuP"},{"type":"admonition","kind":"caution","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"Caution","key":"LIerEZwDGQ"}],"key":"rV7kknFK88"},{"type":"paragraph","position":{"start":{"line":22,"column":1},"end":{"line":22,"column":1}},"children":[{"type":"text","value":"You must use a tab or 4 spaces to indent the second line of code ","position":{"start":{"line":22,"column":1},"end":{"line":22,"column":1}},"key":"zXql1lOqKi"},{"type":"inlineCode","value":"print(...)","position":{"start":{"line":22,"column":1},"end":{"line":22,"column":1}},"key":"c2BSZIbhPf"},{"type":"text","value":".","position":{"start":{"line":22,"column":1},"end":{"line":22,"column":1}},"key":"rLPFdxyzmH"}],"key":"oSDt1R2FXw"}],"key":"akhgSBIhzn"}],"key":"tmbenFlvEU"}],"enumerator":"1","html_id":"ex-hello-world","key":"Sm8jsctkE7"}],"key":"mfqXgHcZ5D"},{"type":"block","kind":"notebook-content","data":{"editable":true,"slideshow":{"slide_type":""}},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"The following code cell is a ","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"n4KriERJ9l"},{"type":"link","url":"https://nbgrader.readthedocs.io/en/stable/configuration/student_version.html#default-behavior","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"solution cell","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"VLwLEAt5I5"}],"urlSource":"https://nbgrader.readthedocs.io/en/stable/configuration/student_version.html#default-behavior","key":"C9Gkb2dzRJ"},{"type":"text","value":". Since you are not expected to know python yet, you can simply expand the hint above and copy the answer to the solution cell instead.","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"uKr3IjGgyU"}],"key":"ket5stHOoB"}],"key":"Oo8y94lbEm"},{"type":"block","kind":"notebook-code","data":{"code_folding":[],"deletable":false,"editable":true,"nbgrader":{"cell_type":"code","checksum":"d37eb0558681f76fcb1f2574c53655ac","grade":false,"grade_id":"helloworld","locked":false,"schema_version":3,"solution":true,"task":false},"slideshow":{"slide_type":"-"},"tags":[]},"children":[{"type":"code","lang":"python","executable":true,"value":"def say_hello():\n    # YOUR CODE HERE\n    raise NotImplementedError()\n\nsay_hello()","visibility":"show","key":"A39kRQLmJ0"},{"type":"output","id":"wjV9xtvGSSMxNVzUwt50I","data":[],"visibility":"remove","key":"y9ZoWNHRw9"}],"visibility":"show","key":"N84oDOxBJa"},{"type":"block","kind":"notebook-content","data":{"editable":true,"slideshow":{"slide_type":"subslide"}},"children":[{"type":"admonition","kind":"attention","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"Attention","key":"UYoN3dvUFF"}],"key":"PFTciIB5oD"},{"type":"paragraph","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"text","value":"It’s important to follow certain guidelines when writing your answers or code in the notebooks:","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"qWPA7yyoHh"}],"key":"e1L5Ifm7UF"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":5,"column":1},"end":{"line":7,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"children":[{"type":"text","value":"Only provide your answers in the cells that are designated for this purpose, which are usually labeled with ","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"MnCkKUABE6"},{"type":"inlineCode","value":"YOUR CODE HERE","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"j5NWEIvZnG"},{"type":"text","value":" or ","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"BokkBA2s4i"},{"type":"inlineCode","value":"YOUR ANSWER HERE","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"L6TN6QMQ0R"},{"type":"text","value":".","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"z7fFEmPncQ"}],"key":"O1LPEJUiQ7"},{"type":"listItem","spread":true,"position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"text","value":"For coding exercises, be sure to remove the line ","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"VphZlMkW9X"},{"type":"inlineCode","value":"raise NotImplementedError()","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"JeNB2w6FgJ"},{"type":"text","value":" from the cell before submitting your work.","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"iXAj6qI0Tv"}],"key":"sW4dVApCLb"},{"type":"listItem","spread":true,"position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"children":[{"type":"text","value":"Do not clone or duplicate the answer cells, as this can cause issues with version control and grading.","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"key":"o5MzgstY8w"}],"key":"zTYfJ1E8zb"}],"key":"zRXiRsA1k9"}],"key":"x5sZkNknUq"}],"key":"dVsRfI56it"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"To test your program:","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"RxeUvNjEfs"}],"key":"iTSgcsv358"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":3,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"text","value":"Run your program by selecting the solution cell and press ","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"Swkcm8Tv6p"},{"type":"keyboard","children":[{"type":"text","value":"Shift + Enter","key":"HUhi0b2Vlu"}],"key":"ky8mRrEeyJ"},{"type":"text","value":".","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"sr8KyoGA8p"}],"key":"ZrxWeZxL4c"},{"type":"listItem","spread":true,"position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"text","value":"Then, run the following visible test to check whether your program prints the correct message.","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"h9QvUGSDiS"}],"key":"WMlfMn0hzP"}],"key":"fywKwnhqPN"}],"key":"t4eti30aS9"},{"type":"block","kind":"notebook-code","data":{"deletable":false,"editable":false,"nbgrader":{"cell_type":"code","checksum":"4068a56e65aec0123a06748ff5b6586b","grade":true,"grade_id":"test-helloworld","locked":true,"points":1,"schema_version":3,"solution":false,"task":false},"slideshow":{"slide_type":"-"},"tags":[]},"children":[{"type":"code","lang":"python","executable":true,"value":"# Run this test cell right after running your \"Hello, World!\" program.\nimport io\nimport sys\n\nold_stdout, sys.stdout = sys.stdout, io.StringIO()\nsay_hello()\nprinted = sys.stdout.getvalue()\nsys.stdout = old_stdout\nassert printed == \"Hello, World!\\n\"","visibility":"show","key":"RmMA89BmE9"},{"type":"output","id":"1pgZ7cIEK0KyDrnzyGPXf","data":[],"visibility":"remove","key":"KUg3fZLYEl"}],"visibility":"show","key":"Z7JmoQL5hB"},{"type":"block","kind":"notebook-content","data":{"editable":true,"slideshow":{"slide_type":""}},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"The test returns an assertion error if your program does not print the correct message.","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"D7VDrReAX1"}],"key":"goQQIHQX8D"}],"key":"Ie6eYPxF19"},{"type":"block","kind":"notebook-content","data":{"editable":true,"slideshow":{"slide_type":""}},"children":[{"type":"admonition","kind":"tip","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"Tip","key":"AfOImqAiJQ"}],"key":"eFj59AjZqz"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":3,"column":1},"end":{"line":7,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"text","value":"You can repeatedly modify your solution and run the test cell until your solution passes the test. There is no mark penalty in failing the test before submission.","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"CXZ8GWDZuP"}],"key":"czlMY0tYvF"},{"type":"listItem","spread":true,"position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"text","value":"You should try to understand the error messages from a failed test.","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"UGj8prYccW"}],"key":"yVqnD9dto2"},{"type":"listItem","spread":true,"position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"children":[{"type":"text","value":"To assess your solution thoroughly, we will run new tests hidden from you after you have submitted your notebook. Therefore, ","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"pDDFrx0Gqx"},{"type":"emphasis","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"children":[{"type":"text","value":"you should ensure your solution works in general rather than just the visible tests","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"VB1HzbRKQA"}],"key":"oaIVphaYo9"},{"type":"text","value":".","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"vaUw2f3EXM"}],"key":"mnniMAeeVD"},{"type":"listItem","spread":true,"position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"text","value":"If you open the same notebook multiple times in different browser windows, be careful in making changes in different windows as you may overwrite your own changes.","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"GCgLsdYT6o"}],"key":"MUPBRPsSsW"},{"type":"listItem","spread":true,"position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"children":[{"type":"text","value":"If your notebook fails to run any code, the kernel might have died. You can restart the kernel with ","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"key":"MzBF5vynWP"},{"type":"inlineCode","value":"Kernel","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"key":"zRainGtYLE"},{"type":"inlineMath","value":"\\to","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"html":"<span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mo>→</mo></mrow><annotation encoding=\"application/x-tex\">\\to</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.3669em;\"></span><span class=\"mrel\">→</span></span></span></span>","key":"PiKt9p3Qwd"},{"type":"text","value":" ","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"key":"xYi6V3RB1c"},{"type":"inlineCode","value":"Restart","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"key":"yK2do3DDfh"},{"type":"text","value":". If restarting fails, check your code cells to see if there is anything that breaks the kernel.","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"key":"w1qsiay3HX"}],"key":"o2nfvaQRfl"}],"key":"kxPvV8ubIY"}],"key":"rp0UICV9CT"}],"key":"XW2QKrLmTc"},{"type":"block","kind":"notebook-content","data":{"editable":true,"slideshow":{"slide_type":"slide"}},"children":[{"type":"heading","depth":3,"position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"How to submit?","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"tvNY48xdiG"}],"identifier":"how-to-submit","label":"How to submit?","html_id":"how-to-submit","implicit":true,"key":"GU7YO0KXnm"}],"key":"cMkjcb253i"},{"type":"block","kind":"notebook-content","data":{"editable":true,"slideshow":{"slide_type":""}},"children":[{"type":"admonition","kind":"important","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"Grading policies","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"IouamvSYFD"}],"key":"xLaqgGzsb8"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":3,"column":1},"end":{"line":5,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"text","value":"Late submissions will not be accepted without valid justifications.","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"RJFmpHpivW"}],"key":"E7KtbmRzDJ"},{"type":"listItem","spread":true,"position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"text","value":"You can submit your assignment repeatedly before the deadline without penalty, so it is recommended to submit your assignment in advance. Please note that you are responsible for any issues related to failed submissions due to network outages that occur too close to the deadline.","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"zE9oEALiA7"}],"key":"Li9FPAXpV8"},{"type":"listItem","spread":true,"position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"children":[{"type":"text","value":"It is also important to make a record or backup of your submission that includes the submission timestamp. Double check to ensure that you have submitted the correct lab assignment, since multiple lab assignments may be open for submission at the same time.","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"bHLAsS84CG"}],"key":"C0S4OEHiou"}],"key":"RpNwxm79ny"}],"key":"pkbckGhrGY"}],"key":"rERFDIfhLF"},{"type":"block","kind":"notebook-content","data":{"editable":true,"slideshow":{"slide_type":""}},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"You normally have at least 5 days to work on the lab after your lab session.","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"BfvRSvhGF6"}],"key":"CL5N7LNXL7"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":3,"column":1},"end":{"line":8,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"text","value":"You can check the due dates of all the labs from the course homepage.","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"JjHGqvZj58"}],"key":"E9r7y8v3QP"},{"type":"listItem","spread":true,"position":{"start":{"line":4,"column":1},"end":{"line":8,"column":1}},"children":[{"type":"text","value":"You may seek help from us or your classmates. However, you must write your own solution and indicate who your collaborators are by including their fullnames or EIDs such as","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"VKt1amt8qe"},{"type":"code","lang":"","value":"COLLABORATORS: xfwong2, mklee3, GPT-4o","position":{"start":{"line":5,"column":1},"end":{"line":7,"column":1}},"key":"JtObqH4XEA"},{"type":"text","value":"The policy applies to LLM as well.","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"bCbHtq2YUq"}],"key":"PL8I6bpjdf"}],"key":"in9nHD8qpC"}],"key":"z7nmDJaQ6P"},{"type":"block","kind":"notebook-content","data":{"editable":true,"slideshow":{"slide_type":""}},"children":[{"type":"admonition","kind":"attention","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"Attention","key":"VLP3KqzUUE"}],"key":"cplraWWGg8"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"text","value":"Lecture notebooks under the subfolders ","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"UuvF7kEQzQ"},{"type":"inlineCode","value":"Lecture*\\","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"xIpwCXrriK"},{"type":"text","value":" need NOT be submitted. You only need to submit the lab notebooks under ","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"of8gp9UsSu"},{"type":"inlineCode","value":"Lab*\\","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"oxpfg7ybe2"},{"type":"text","value":".","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"kw81I5h4oW"}],"key":"KJlBofBLVb"}],"key":"WtOAybVdbv"}],"key":"CXe91H95P8"}],"key":"IhlvinH3Et"},{"type":"block","kind":"notebook-content","data":{"deletable":false,"editable":false,"nbgrader":{"cell_type":"markdown","checksum":"3235a5584c82b3dbef41cf3fab3ceaf7","grade":false,"grade_id":"Check","locked":true,"schema_version":3,"solution":false,"task":false},"slideshow":{"slide_type":"fragment"}},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"Before you submit, it is a good idea to make sure everything runs as expected:","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"z4h7Niw8Y8"}],"key":"TJLCYJ4S8j"},{"type":"list","ordered":true,"start":1,"spread":false,"position":{"start":{"line":3,"column":1},"end":{"line":7,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"strong","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"text","value":"Git-pull the notebooks","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"ZtDd6eVZx4"}],"key":"UjMCzYTUij"},{"type":"text","value":": Follow any one of the link on the course homepage to a notebook, which will git-pull any updates/corrections to (all) your notebooks.","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"KRyNCtZwIb"}],"key":"RWgeIrAG4D"},{"type":"listItem","spread":true,"position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"strong","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"text","value":"Save the notebook","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"MMy8UIuwaY"}],"key":"mbPwanpB1G"},{"type":"text","value":": Unsaved changes are not submitted, even though they are in the memory.","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"piop5ceLQb"}],"key":"Y0Qu6JXL1m"},{"type":"listItem","spread":true,"position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"children":[{"type":"strong","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"children":[{"type":"text","value":"Restart the kernel","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"etjn3Nsh2K"}],"key":"VXDmigZta8"},{"type":"text","value":": ","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"BymZ69TT6j"},{"type":"inlineCode","value":"Kernel","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"wG0I9T3jME"},{"type":"inlineMath","value":"\\to","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"html":"<span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mo>→</mo></mrow><annotation encoding=\"application/x-tex\">\\to</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.3669em;\"></span><span class=\"mrel\">→</span></span></span></span>","key":"hryb4XLbyw"},{"type":"text","value":" ","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"Q0POuQS0Dd"},{"type":"inlineCode","value":"Restart Kernel...","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"AtSbE6wPWi"},{"type":"text","value":" to have a clean state before running visible tests.","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"ZwMkxRppJW"}],"key":"WXZp21xZ62"},{"type":"listItem","spread":true,"position":{"start":{"line":6,"column":1},"end":{"line":7,"column":1}},"children":[{"type":"strong","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"text","value":"run all cells","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"ebSiJ5Rlmd"}],"key":"bRjf6XTChN"},{"type":"text","value":": ","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"bFS8TRqRFH"},{"type":"inlineCode","value":"Run","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"xQ6WzhZlH0"},{"type":"inlineMath","value":"\\to","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"html":"<span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mo>→</mo></mrow><annotation encoding=\"application/x-tex\">\\to</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.3669em;\"></span><span class=\"mrel\">→</span></span></span></span>","key":"p7NmFJZUvm"},{"type":"text","value":" ","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"vjWYIYLHF9"},{"type":"inlineCode","value":"Run All Cells","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"PlPZJZo3ii"},{"type":"text","value":" to double check the results of the visible tests are as expected.","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"eaXAq3vo7X"}],"key":"kiTXmg84ii"}],"key":"F5CMfHFkZY"},{"type":"paragraph","position":{"start":{"line":8,"column":1},"end":{"line":8,"column":1}},"children":[{"type":"text","value":"Re-executing cells in order in a Jupyter Notebook ensures that all dependencies and state changes are correctly applied, preventing misleading results from out-of-order execution.","position":{"start":{"line":8,"column":1},"end":{"line":8,"column":1}},"key":"cpnFLLRhPF"}],"key":"HAjrYRqDTh"}],"key":"j0sKJCTpn6"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"admonition","kind":"tip","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"Tip","key":"gTz1kWD3mW"}],"key":"DI4vP0bQ7C"},{"type":"list","ordered":true,"start":1,"spread":false,"position":{"start":{"line":3,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"text","value":"By default, JupyterLab autosaves an opened notebook every 120 seconds. This configuration can be changed at ","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"nuPRgRrrWp"},{"type":"inlineCode","value":"Settings","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"BdxHyVvOdE"},{"type":"inlineMath","value":"\\to","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"html":"<span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mo>→</mo></mrow><annotation encoding=\"application/x-tex\">\\to</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.3669em;\"></span><span class=\"mrel\">→</span></span></span></span>","key":"wicXdje2Ky"},{"type":"inlineCode","value":"Settings Editor","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"aKioMhSMok"},{"type":"inlineMath","value":"\\to","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"html":"<span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mo>→</mo></mrow><annotation encoding=\"application/x-tex\">\\to</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.3669em;\"></span><span class=\"mrel\">→</span></span></span></span>","key":"ukBslRtIdO"},{"type":"inlineCode","value":"Document Manager","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"sgssvxAuCS"},{"type":"inlineMath","value":"\\to","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"html":"<span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mo>→</mo></mrow><annotation encoding=\"application/x-tex\">\\to</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.3669em;\"></span><span class=\"mrel\">→</span></span></span></span>","key":"uAsoHIKwhr"},{"type":"inlineCode","value":"Autosave Interval","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"lZ1BScMCGv"},{"type":"text","value":".","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"iqaZLmg1Yp"}],"key":"mkpxKeT1us"},{"type":"listItem","spread":true,"position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"text","value":"An opened file with unsaved changes has a solid circle next to its tab label. You can manually save the file using the save button in the toolbar.","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"kgbHlOGX22"}],"key":"gyyMws6IFu"}],"key":"OeXta1Ngc1"}],"key":"VihAO1aklo"}],"key":"e8LqDKXyEV"},{"type":"block","kind":"notebook-content","data":{"editable":true,"slideshow":{"slide_type":"subslide"}},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"To submit your notebook:","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"hcBgl9bz7q"}],"key":"WYb17SJoO4"},{"type":"list","ordered":true,"start":1,"spread":false,"position":{"start":{"line":3,"column":1},"end":{"line":5,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"text","value":"Select the menu item ","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"W9h46aUkrQ"},{"type":"inlineCode","value":"Nbgrader","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"RQ5OZiCpE5"},{"type":"inlineMath","value":"\\to","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"html":"<span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mo>→</mo></mrow><annotation encoding=\"application/x-tex\">\\to</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.3669em;\"></span><span class=\"mrel\">→</span></span></span></span>","key":"Fxu9etMbHK"},{"type":"inlineCode","value":"Assignment List","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"frFgOFPMa4"},{"type":"text","value":".","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"qtBR5LYoo7"}],"key":"XDXmuCIqqR"},{"type":"listItem","spread":true,"position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"text","value":"Expand the Lab folder and click the ","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"r3IvrnI5hb"},{"type":"inlineCode","value":"validate","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"POgWxL4WQ3"},{"type":"text","value":" button next to the notebook(s) to check if all the visible tests pass.","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"go7ae75jTi"}],"key":"YfcKVFyUuQ"},{"type":"listItem","spread":true,"position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"children":[{"type":"text","value":"Click ","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"voBgWf7BXX"},{"type":"inlineCode","value":"Submit","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"IHeQfinj3T"},{"type":"text","value":" to submit your notebook.","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"F064PNpl9l"}],"key":"SbIV2Wj2a1"}],"key":"bgJUNIVExQ"}],"key":"YBqigd6T9z"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"admonition","kind":"seealso","class":"dropdown","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"What is Nbgrader?","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"hvRXz5W5CY"}],"key":"zIwn9QujYD"},{"type":"paragraph","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"link","url":"https://nbgrader.readthedocs.io/en/stable/","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"text","value":"Nbgrader","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"rjvH7dWbOC"}],"urlSource":"https://nbgrader.readthedocs.io/en/stable/","key":"g58ejfcPc9"},{"type":"text","value":" is a package for grading notebook assignments. It allows students to submit their notebooks directly through the JupyterHub server. Submitted notebooks can be both auto-graded with pre-defined test cases and manually graded with custom feedback. After grading is complete, you can check your scores and access the feedback using the same interface.","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"G9PReYUTmH"}],"key":"qyrDz2K2gN"}],"key":"LNkh1GEKzP"}],"key":"DmBZWtEZY9"},{"type":"block","kind":"notebook-content","data":{"editable":true,"slideshow":{"slide_type":""}},"children":[{"type":"admonition","kind":"caution","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"Caution","key":"N1pdDWsShR"}],"key":"F876YI5fM7"},{"type":"paragraph","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"text","value":"Your submission may not be graded under the following circumstances:","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"QSjsUKGQkf"}],"key":"qqg5PiLtgy"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":5,"column":1},"end":{"line":9,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"children":[{"type":"text","value":"The notebook files have been renamed, for example, ","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"hN7JoLCvM4"},{"type":"inlineCode","value":"Setup.ipynb","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"UUvc9v4BqG"},{"type":"text","value":" being changed or copied to ","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"AM9JUbHC8U"},{"type":"inlineCode","value":"Setup (Copy).ipynb","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"iwVdazW8QY"},{"type":"text","value":".","position":{"start":{"line":5,"column":1},"end":{"line":5,"column":1}},"key":"VrFmfGSyxC"}],"key":"hoYBBIRg5v"},{"type":"listItem","spread":true,"position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"text","value":"An HTML file exists with the same name as a notebook, for example, ","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"aFOpNgXq3i"},{"type":"inlineCode","value":"Setup.html","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"RQeLRVKXuf"},{"type":"text","value":".","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"Vsgw26dvOn"}],"key":"PLoQU4eZDD"},{"type":"listItem","spread":true,"position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"children":[{"type":"text","value":"The file size is too large, e.g., exceeds ","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"key":"FljfOdYwu4"},{"type":"inlineCode","value":"100MB","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"key":"NrbVX2MLhO"},{"type":"text","value":".","position":{"start":{"line":7,"column":1},"end":{"line":7,"column":1}},"key":"Pc5bH21E6E"}],"key":"Eyepek9890"},{"type":"listItem","spread":true,"position":{"start":{"line":8,"column":1},"end":{"line":9,"column":1}},"children":[{"type":"text","value":"The code takes too long to run or requires an excessive amount of memory.","position":{"start":{"line":8,"column":1},"end":{"line":8,"column":1}},"key":"zHBwWhqx6x"}],"key":"faPZs6ZCLF"}],"key":"eRVLRrxwfD"},{"type":"paragraph","position":{"start":{"line":10,"column":1},"end":{"line":10,"column":1}},"children":[{"type":"text","value":"It is essential to ensure that your submission meets these guidelines to avoid any issues with grading.","position":{"start":{"line":10,"column":1},"end":{"line":10,"column":1}},"key":"v0aCBtQFHj"}],"key":"lqtnLKCYhG"},{"type":"admonition","kind":"tip","class":"dropdown","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"Troubleshooting","position":{"start":{"line":12,"column":1},"end":{"line":12,"column":1}},"key":"xAnPyAkrbI"}],"key":"eXl6mOBAat"},{"type":"paragraph","position":{"start":{"line":15,"column":1},"end":{"line":15,"column":1}},"children":[{"type":"text","value":"If you believe your notebooks are corrupted,","position":{"start":{"line":15,"column":1},"end":{"line":15,"column":1}},"key":"hVmYTQIm0h"}],"key":"gIHyHItaCx"},{"type":"list","ordered":true,"start":1,"spread":false,"position":{"start":{"line":16,"column":1},"end":{"line":20,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":16,"column":1},"end":{"line":16,"column":1}},"children":[{"type":"text","value":"download/backup your existing notebooks,","position":{"start":{"line":16,"column":1},"end":{"line":16,"column":1}},"key":"oFwCFCjzx6"}],"key":"TogJ7R9G65"},{"type":"listItem","spread":true,"position":{"start":{"line":17,"column":1},"end":{"line":17,"column":1}},"children":[{"type":"text","value":"remove them from the ","position":{"start":{"line":17,"column":1},"end":{"line":17,"column":1}},"key":"BISQvL8SNQ"},{"type":"inlineCode","value":"Lab*/","position":{"start":{"line":17,"column":1},"end":{"line":17,"column":1}},"key":"EOCnJjgNIn"},{"type":"text","value":" folder,","position":{"start":{"line":17,"column":1},"end":{"line":17,"column":1}},"key":"vey2C6vnPZ"}],"key":"ek461UY4c8"},{"type":"listItem","spread":true,"position":{"start":{"line":18,"column":1},"end":{"line":18,"column":1}},"children":[{"type":"text","value":"click the git-pull links from the course homepage to re-pull the notebooks, and","position":{"start":{"line":18,"column":1},"end":{"line":18,"column":1}},"key":"IMT7CcM9AJ"}],"key":"hUopEftGsY"},{"type":"listItem","spread":true,"position":{"start":{"line":19,"column":1},"end":{"line":20,"column":1}},"children":[{"type":"text","value":"copy your solutions to the new notebooks.","position":{"start":{"line":19,"column":1},"end":{"line":19,"column":1}},"key":"onJwrdRoM6"}],"key":"YkJwScchLw"}],"key":"L7QURyjSKo"},{"type":"paragraph","position":{"start":{"line":21,"column":1},"end":{"line":21,"column":1}},"children":[{"type":"text","value":"You may also run the course notebooks outside the jupyterhub server and locally on your computer. For more details, see the course homepage.","position":{"start":{"line":21,"column":1},"end":{"line":21,"column":1}},"key":"uYxKWftCvh"}],"key":"DoWtzPLl80"}],"key":"cHfSK7N5AT"}],"key":"edaaqpaBWt"}],"key":"u7ONhzkQ2s"},{"type":"block","kind":"notebook-content","data":{"editable":true,"slideshow":{"slide_type":""}},"children":[{"type":"heading","depth":2,"position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"References","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"o8W06sTPUO"}],"identifier":"references","label":"References","html_id":"references","implicit":true,"key":"GwfLCi0CWE"}],"key":"XPn3tLIqnA"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"Reading is important in learning a new language. This is especially so for learning a programming language, whose syntax has a very precise structure and interpretation. Each topic will have some required readings listed on the course homepage.","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"sG5g0o2q1m"}],"key":"bC3nMxwMXW"},{"type":"container","kind":"table","children":[{"type":"caption","children":[{"type":"paragraph","children":[{"type":"captionNumber","kind":"table","label":"tbl:reading","identifier":"tbl:reading","html_id":"tbl-reading","enumerator":"2","children":[{"type":"text","value":"Table ","key":"DdB7JImhPE"},{"type":"text","value":"2","key":"Prif3qA0Bb"},{"type":"text","value":":","key":"TLubbM2Zet"}],"template":"Table %s:","key":"MJyE2CjT3R"},{"type":"text","value":"An example of required readings on the course homepage.","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"BEVoHmPWSQ"}],"key":"ewr5K4EZSj"}],"key":"n0HgQ9AMLp"},{"type":"table","children":[],"key":"T4rxA7aMYn"},{"type":"legend","children":[{"type":"div","style":{"border":"1px solid black","padding":"10px"},"children":[{"type":"heading","depth":4,"children":[{"type":"text","value":"Reading","key":"et5CAFJ3wL"}],"identifier":"reading","label":"Reading","html_id":"reading","implicit":true,"key":"ARzDEHB5gV"},{"type":"list","ordered":false,"start":null,"spread":false,"children":[{"type":"listItem","spread":false,"checked":null,"children":[{"type":"paragraph","children":[{"type":"link","url":"https://archive.org/stream/2018Fundamentals.ofPython?ref=ol#page/n11/mode/1up","children":[{"type":"text","value":"[Halterman17] 1.1-1.3","key":"So8nxmBQmE"}],"urlSource":"https://archive.org/stream/2018Fundamentals.ofPython?ref=ol#page/n11/mode/1up","key":"KEOgZE1qoX"}],"key":"cjBmmZrjRk"}],"key":"X28Llgk7y0"}],"key":"Sle5EIF6NM"}],"key":"D4LI3CcpyO"}],"key":"xMkJuUUHFf"}],"label":"tbl:reading","identifier":"tbl:reading","enumerator":"2","html_id":"tbl-reading","key":"X4Plrvh1Sf"}],"key":"G3d0br2SZN"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"The textbook by Halterman in ","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"ckPKbNJocT"},{"type":"crossReference","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"Table ","key":"NmcHbB1EXb"},{"type":"text","value":"2","key":"MAtwIMmQmf"}],"identifier":"tbl:reading","label":"tbl:reading","kind":"table","template":"Table %s","enumerator":"2","resolved":true,"html_id":"tbl-reading","key":"YJI4pMRU9w"},{"type":"text","value":" teaches Python programming using Python version 3.4.","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"jlakZTBIpx"},{"type":"footnoteReference","identifier":"version","label":"version","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"number":5,"enumerator":"5","key":"syRYWuIWWq"},{"type":"text","value":" As a programming language can evolve quickly over times, especially for a popular language like Python, it is important to be aware of the version you are using, and supplement your readings with the documentations of the newer versions. In particular, check out the documentations for:","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"DWRhSoyQGP"}],"key":"ikG2t0vXqk"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":3,"column":1},"end":{"line":5,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"link","url":"https://docs.python.org/3.12/","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"text","value":"Python 3.12","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"betLT4bTmF"}],"urlSource":"https://docs.python.org/3.12/","key":"DODpzwTOkX"},{"type":"text","value":", which is used for quiz and exam.","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"jdIRcZfPBV"}],"key":"nM4g16Obka"},{"type":"listItem","spread":true,"position":{"start":{"line":4,"column":1},"end":{"line":5,"column":1}},"children":[{"type":"link","url":"https://docs.python.org/3.11/","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"text","value":"Python 3.11","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"uAiJkAY9CZ"}],"urlSource":"https://docs.python.org/3.11/","key":"rNdZ4D3oWu"},{"type":"text","value":", which is used for lab assignents.","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"oraq5vM3oT"}],"key":"kTf7dUBpmB"}],"key":"S9fAjthJU3"},{"type":"footnoteDefinition","identifier":"version","label":"version","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"paragraph","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"text","value":"See the list of python versions at ","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"lEXUJLf1aV"},{"type":"link","url":"https://www.python.org/doc/versions/","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"text","value":"https://​www​.python​.org​/doc​/versions​/","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"w4uaRgmqOA"}],"urlSource":"https://www.python.org/doc/versions/","key":"d7hvdl9NTH"}],"key":"WRl6voljEN"}],"number":5,"enumerator":"5","key":"DDWlvAfJnT"}],"key":"NTuUr7I7bD"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"admonition","kind":"caution","class":"dropdown","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"Is it okay to learn and use different versions of Python?","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"OJgnVbwhE5"}],"key":"MG9vGZdnvD"},{"type":"paragraph","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"text","value":"The version such as ","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"Yo0a5b0E2c"},{"type":"inlineCode","value":"3.12","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"J4gzcQ8v5p"},{"type":"text","value":" consists of the major version number ","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"tMvX7eaWkN"},{"type":"inlineCode","value":"3","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"mX0PlmnCRu"},{"type":"text","value":" followed by the minor version number ","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"PepvQdnSez"},{"type":"inlineCode","value":"12","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"WIY2WYdwlL"},{"type":"text","value":".","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"UMsJJdfXq2"}],"key":"XJ52Zih3hs"},{"type":"paragraph","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"text","value":"New features introduced in later versions may not work in earlier versions, and old features in earlier versions may be removed in newer versions. As an analogy, the prior is like trying to play VCD in a CD drive, and the latter is like imposing region restriction on VCD like the way we do for DVD. Both fails due to compatibility issues.","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"rlyte5SQJy"}],"key":"Y1euSooQww"},{"type":"paragraph","position":{"start":{"line":8,"column":1},"end":{"line":8,"column":1}},"children":[{"type":"text","value":"Nevertheless, it is generally okay to learn and use different minor versions of Python under the same major version, such as Python ","position":{"start":{"line":8,"column":1},"end":{"line":8,"column":1}},"key":"j5XDutHzxC"},{"type":"inlineCode","value":"3.*","position":{"start":{"line":8,"column":1},"end":{"line":8,"column":1}},"key":"k2siI2VM6b"},{"type":"text","value":", where","position":{"start":{"line":8,"column":1},"end":{"line":8,"column":1}},"key":"m58kHa3XOS"}],"key":"hZJhS7Aw1q"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":9,"column":1},"end":{"line":11,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"children":[{"type":"inlineCode","value":"3","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"key":"QnG3hMDrJY"},{"type":"text","value":" is the major ","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"key":"mALbs2IyAi"},{"type":"link","url":"https://en.wikipedia.org/wiki/Software_versioning","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"children":[{"type":"text","value":"version number","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"key":"PoGlb0448H"}],"urlSource":"https://en.wikipedia.org/wiki/Software_versioning","data":{"page":"Software_versioning","wiki":"https://en.wikipedia.org/","lang":"en"},"internal":false,"protocol":"wiki","key":"XWOcsbGJxz"},{"type":"text","value":", and","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"key":"Xs44XCfGJD"}],"key":"nGo3DbJsDo"},{"type":"listItem","spread":true,"position":{"start":{"line":10,"column":1},"end":{"line":11,"column":1}},"children":[{"type":"inlineCode","value":"*","position":{"start":{"line":10,"column":1},"end":{"line":10,"column":1}},"key":"aK2Vsvc2vT"},{"type":"text","value":" is a wilcard matching any number called the minor version number.","position":{"start":{"line":10,"column":1},"end":{"line":10,"column":1}},"key":"EYobpIuXkK"}],"key":"Yz6emBNXU2"}],"key":"nCQwg1FjIO"},{"type":"paragraph","position":{"start":{"line":12,"column":1},"end":{"line":12,"column":1}},"children":[{"type":"text","value":"This is because Python’s design has made a conscious effort to maintain backwards compatibility for the minor versions, which mean that code written in an earlier minor version runs in a later minor version.","position":{"start":{"line":12,"column":1},"end":{"line":12,"column":1}},"key":"PhrchZmKid"}],"key":"J9lGrorAYq"}],"key":"SxNl8k95tc"}],"key":"NQEZRYVmWV"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"If you have more time, further supplement your learning with materials from similar introductory python programming courses at other universities:","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"M8OVl296Wu"},{"type":"footnoteReference","identifier":"1","label":"1","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"number":1,"enumerator":"1","key":"FJH7lPOESm"}],"key":"RL4keik5e0"},{"type":"footnoteDefinition","identifier":"1","label":"1","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"paragraph","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"text","value":"Note that these assume students have no prior programming experience but they may different topics than our course does.","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"G1n37hHt1K"}],"key":"GthUyE8u8S"}],"number":1,"enumerator":"1","key":"rVrdMPv8Jc"}],"key":"fDT6Ut7upk"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"admonition","kind":"seealso","class":"dropdown","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"MIT Open Courseware","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"vWvksrbEk2"}],"key":"Ea3UfEnig3"},{"type":"paragraph","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"text","value":"An introductory programming course using Python:","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"BC0Vt7qeTb"}],"key":"bfPDXdSF81"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":6,"column":1},"end":{"line":9,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":6,"column":1},"end":{"line":9,"column":1}},"children":[{"type":"text","value":"Course homepage: ","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"Vux1VmE4b4"},{"type":"link","url":"https://ocw.mit.edu/courses/6-0001-introduction-to-computer-science-and-programming-in-python-fall-2016/pages/readings/","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"text","value":"6.0001\nIntroduction To Computer Science And Programming In Python","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"Ed3PlwlUgu"}],"urlSource":"https://ocw.mit.edu/courses/6-0001-introduction-to-computer-science-and-programming-in-python-fall-2016/pages/readings/","key":"EqbI6am723"},{"type":"break","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"Nz0vIwsEBM"},{"type":"text","value":"Textbook: ","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"ZEKFB91DrB"},{"type":"link","url":"https://julac-cuh.primo.exlibrisgroup.com/permalink/852JULAC_CUH/vit3jk/alma991029721214003408","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"text","value":"Guttag, John V. Introduction to computation and programming using Python: with application to computational modeling and understanding data. Mit Press, 2021.","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"BBlSCVWt9C"}],"urlSource":"https://julac-cuh.primo.exlibrisgroup.com/permalink/852JULAC_CUH/vit3jk/alma991029721214003408","key":"kaACpsiege"},{"type":"footnoteReference","identifier":"guttag","label":"guttag","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"number":6,"enumerator":"6","key":"sWQ10gi3UG"}],"key":"uz4PhfrKap"}],"key":"fyT1dfyXaQ"},{"type":"paragraph","position":{"start":{"line":10,"column":1},"end":{"line":10,"column":1}},"children":[{"type":"text","value":"An introductory programming course using Scheme:","position":{"start":{"line":10,"column":1},"end":{"line":10,"column":1}},"key":"A6CZVGQb0h"}],"key":"ba2U8sFAOb"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":12,"column":1},"end":{"line":13,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":12,"column":1},"end":{"line":13,"column":1}},"children":[{"type":"text","value":"Course homepage: ","position":{"start":{"line":12,"column":1},"end":{"line":12,"column":1}},"key":"R2Yhy9z738"},{"type":"link","url":"https://ocw.mit.edu/courses/6-001-structure-and-interpretation-of-computer-programs-spring-2005/","position":{"start":{"line":12,"column":1},"end":{"line":12,"column":1}},"children":[{"type":"text","value":"6.001 Structure And Interpretation Of Computer Programs","position":{"start":{"line":12,"column":1},"end":{"line":12,"column":1}},"key":"DLc5OFGXib"}],"urlSource":"https://ocw.mit.edu/courses/6-001-structure-and-interpretation-of-computer-programs-spring-2005/","key":"CHdIuvyiO0"},{"type":"text","value":"\nTextbook: ","position":{"start":{"line":12,"column":1},"end":{"line":12,"column":1}},"key":"xKoBw8nNYy"},{"type":"link","url":"https://web.mit.edu/6.001/6.037/sicp.pdf","position":{"start":{"line":12,"column":1},"end":{"line":12,"column":1}},"children":[{"type":"text","value":"Abelson, Harold, and Gerald Jay Sussman. Structure and interpretation of computer programs. The MIT Press, 1996.","position":{"start":{"line":12,"column":1},"end":{"line":12,"column":1}},"key":"sE7ARbvpt4"}],"urlSource":"https://web.mit.edu/6.001/6.037/sicp.pdf","key":"Pu8pelnqeO"}],"key":"cqH9xRYzzu"}],"key":"WqheBeZ1QY"}],"key":"UVD8vNLph9"},{"type":"footnoteDefinition","identifier":"guttag","label":"guttag","position":{"start":{"line":12,"column":1},"end":{"line":12,"column":1}},"children":[{"type":"paragraph","position":{"start":{"line":18,"column":1},"end":{"line":18,"column":1}},"children":[{"type":"text","value":"After clicking the link, CityU students can further link to the full text from the ","position":{"start":{"line":18,"column":1},"end":{"line":18,"column":1}},"key":"vcuMNgAVPw"},{"type":"inlineCode","value":"View Online","position":{"start":{"line":18,"column":1},"end":{"line":18,"column":1}},"key":"r4iOq9xNcE"},{"type":"text","value":" section of the opened CityU library page.","position":{"start":{"line":18,"column":1},"end":{"line":18,"column":1}},"key":"S5MssDxLZs"}],"key":"xVcXhzvn0t"}],"number":6,"enumerator":"6","key":"R1P5dT2OIr"}],"key":"fiMh57mUJp"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"admonition","kind":"seealso","class":"dropdown","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"UC Berkeley Course","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"VLumux4VnA"}],"key":"zHR1dqqD9L"},{"type":"paragraph","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"text","value":"An introductory programming course using Python:","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"eDmvaoeV8f"}],"key":"uAjE41uslj"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":6,"column":1},"end":{"line":7,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":6,"column":1},"end":{"line":7,"column":1}},"children":[{"type":"text","value":"Course homepage: ","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"Hv8g9fwWgU"},{"type":"link","url":"https://cs61a.org","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"text","value":"CS 61A Structure And Interpretation Of Computer Programs","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"U4CxeDl8vp"}],"urlSource":"https://cs61a.org","key":"S3jXydZzzn"},{"type":"break","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"r5b3RZU5j7"},{"type":"text","value":"Textbook: ","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"dplVnqGMLS"},{"type":"link","url":"https://www.composingprograms.com/","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"text","value":"John DeNero. Composing Programs.","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"GurWVrCNGe"}],"urlSource":"https://www.composingprograms.com/","key":"cEqMSYJTI6"}],"key":"C7ba7V54nT"}],"key":"hnvTdNfSaO"}],"key":"cDUVXQ0ROc"}],"key":"pbLM1xjXSq"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"As a student at CityU, you also have access to a wide range of library resources. A useful e-learning resource to help you dive deeper into the cutting-edge computing technologies is LinkedIn Learning:","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"WAe5ZhLlUz"}],"key":"wcCeq5Q635"},{"type":"list","ordered":true,"start":1,"spread":false,"position":{"start":{"line":3,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"text","value":"Open the ","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"RIXssA0rcn"},{"type":"link","url":"https://www.cityu.edu.hk/its/services-facilities/online-courses-linkedin-learning","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"children":[{"type":"text","value":"LinkedIn Learning","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"qiZxxLVAuz"}],"urlSource":"https://www.cityu.edu.hk/its/services-facilities/online-courses-linkedin-learning","key":"ENV51Ta2rn"},{"type":"text","value":" page.","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"LVwN0V1z2t"}],"key":"YlTAfy4SNC"},{"type":"listItem","spread":true,"position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"children":[{"type":"text","value":"Click ","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"CIcB4qZVHW"},{"type":"keyboard","children":[{"type":"text","value":"LinkedIn Learning Login","key":"QnVSSK0LA5"}],"key":"xnmkZRyKeU"},{"type":"text","value":" to login with your CityU account.","position":{"start":{"line":4,"column":1},"end":{"line":4,"column":1}},"key":"GtnKY3h2uW"}],"key":"CAGICfawkA"}],"key":"WVP7S1iAgW"}],"key":"sDPkGUAukV"},{"type":"block","kind":"notebook-content","data":{},"children":[{"type":"paragraph","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"children":[{"type":"text","value":"After logging in, take a look at the following relevant online courses:","position":{"start":{"line":1,"column":1},"end":{"line":1,"column":1}},"key":"P24BSkuSJu"}],"key":"tO5p0rA1zr"},{"type":"admonition","kind":"seealso","class":"dropdown","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"LinkedIn Learning","position":{"start":{"line":3,"column":1},"end":{"line":3,"column":1}},"key":"vwQhwJG9Z9"}],"key":"uORKERWtQl"},{"type":"paragraph","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"children":[{"type":"text","value":"Some courses on introductory python programming:","position":{"start":{"line":6,"column":1},"end":{"line":6,"column":1}},"key":"pha2KcvvPv"}],"key":"mti4GAGP0t"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":8,"column":1},"end":{"line":11,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":8,"column":1},"end":{"line":8,"column":1}},"children":[{"type":"link","url":"https://www.linkedin.com/learning-login/share?account=76816450&forceAccount=false&redirect=https%3A%2F%2Fwww.linkedin.com%2Flearning%2Fpython-essential-training-18764650%3Ftrk%3Dshare_ent_url%26shareId%3DaXCm1ZkcTTCExEgNCUlh%252Bw%253D%253D","position":{"start":{"line":8,"column":1},"end":{"line":8,"column":1}},"children":[{"type":"text","value":"Python Essential Training","position":{"start":{"line":8,"column":1},"end":{"line":8,"column":1}},"key":"r37VtRz9Db"}],"urlSource":"https://www.linkedin.com/learning-login/share?account=76816450&forceAccount=false&redirect=https%3A%2F%2Fwww.linkedin.com%2Flearning%2Fpython-essential-training-18764650%3Ftrk%3Dshare_ent_url%26shareId%3DaXCm1ZkcTTCExEgNCUlh%252Bw%253D%253D","key":"e0eYle22WO"}],"key":"BEudDBfYsJ"},{"type":"listItem","spread":true,"position":{"start":{"line":9,"column":1},"end":{"line":11,"column":1}},"children":[{"type":"link","url":"https://www.linkedin.com/learning-login/share?account=76816450&forceAccount=false&redirect=https%3A%2F%2Fwww.linkedin.com%2Flearning%2Flearning-the-python-3-standard-library%3Ftrk%3Dshare_ent_url%26shareId%3DGcv4DyTKSuWBBsKpEmIamQ%253D%253D","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"children":[{"type":"text","value":"Learning the Python 3 Standard Library","position":{"start":{"line":9,"column":1},"end":{"line":9,"column":1}},"key":"C21fqPNPn7"}],"urlSource":"https://www.linkedin.com/learning-login/share?account=76816450&forceAccount=false&redirect=https%3A%2F%2Fwww.linkedin.com%2Flearning%2Flearning-the-python-3-standard-library%3Ftrk%3Dshare_ent_url%26shareId%3DGcv4DyTKSuWBBsKpEmIamQ%253D%253D","key":"slAjNXN5oQ"}],"key":"PbXMYTaKpm"}],"key":"HBa4ivaIy3"},{"type":"paragraph","position":{"start":{"line":12,"column":1},"end":{"line":12,"column":1}},"children":[{"type":"text","value":"A course on how to use LinkedIn Learning:","position":{"start":{"line":12,"column":1},"end":{"line":12,"column":1}},"key":"muQADEA9mk"}],"key":"O1nwi9sYWg"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":14,"column":1},"end":{"line":14,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":14,"column":1},"end":{"line":14,"column":1}},"children":[{"type":"link","url":"https://www.linkedin.com/learning-login/share?account=76816450&forceAccount=false&redirect=https%3A%2F%2Fwww.linkedin.com%2Flearning%2Fhow-to-use-linkedin-learning%3Ftrk%3Dshare_ent_url%26shareId%3DT0Oya4yGTOGygXyXbWpMCQ%253D%253D","position":{"start":{"line":14,"column":1},"end":{"line":14,"column":1}},"children":[{"type":"text","value":"How to Use LinkedIn Learning","position":{"start":{"line":14,"column":1},"end":{"line":14,"column":1}},"key":"rSDzihD5Rx"}],"urlSource":"https://www.linkedin.com/learning-login/share?account=76816450&forceAccount=false&redirect=https%3A%2F%2Fwww.linkedin.com%2Flearning%2Fhow-to-use-linkedin-learning%3Ftrk%3Dshare_ent_url%26shareId%3DT0Oya4yGTOGygXyXbWpMCQ%253D%253D","key":"zmCZsPVhz3"}],"key":"ygHgH1w2pp"}],"key":"PS4OdDqIFj"}],"key":"a5VUNtquog"}],"key":"keCtqMi0Ag"}],"key":"t15vmJM2pd"},"references":{"cite":{"order":[],"data":{}}},"footer":{"navigation":{"prev":{"title":"CS1302 Introduction to Computer Programming","short_title":"CS1302","url":"/","group":"CS1302"},"next":{"title":"LLM","url":"/llm","group":"Lab 0"}}},"domain":"http://localhost:3000"}