{"id":525,"date":"2024-10-13T15:55:00","date_gmt":"2024-10-13T14:55:00","guid":{"rendered":"https:\/\/noiseonthenet.space\/noise\/?p=525"},"modified":"2024-10-13T18:26:10","modified_gmt":"2024-10-13T17:26:10","slug":"amazing-learning","status":"publish","type":"post","link":"https:\/\/noiseonthenet.space\/noise\/2024\/10\/amazing-learning\/","title":{"rendered":"Amazing Learning"},"content":{"rendered":"<div id=\"table-of-contents\" role=\"doc-toc\">\n<h2><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/noiseonthenet.space\/noise\/wp-content\/uploads\/2024\/10\/krakenimages-Br-ayoAxFuQ-unsplash.jpg?ssl=1\" alt=\"krakenimages-Br-ayoAxFuQ-unsplash.jpg\" \/><\/h2>\n<div id=\"orgd3d6013\" class=\"figure\">\n\n<\/div>\nPhoto by <a href=\"https:\/\/unsplash.com\/@krakenimages?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash\" data-bcup-haslogintext=\"no\">krakenimages<\/a> on <a href=\"https:\/\/unsplash.com\/photos\/girl-in-blue-denim-dungaree-pants-holding-blue-and-white-polka-dot-handbag-Br-ayoAxFuQ?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash\" data-bcup-haslogintext=\"no\">Unsplash<\/a>\n\nLearning should be fun.\n\nFor this reason I created this toy game to challenge students at my courses.\n\nWhile it starts as a simple visual game it can be run headless to develop an intelligent algorithm autonomously.\n\nHelp your poor robot escape the maze!\n<h2>Table of Contents<\/h2>\n<div id=\"text-table-of-contents\" role=\"doc-toc\">\n<ul>\n \t<li><a href=\"#org2662e8e\" data-bcup-haslogintext=\"no\">The Challenge<\/a><\/li>\n \t<li><a href=\"#org7fbba55\" data-bcup-haslogintext=\"no\">The implementation<\/a><\/li>\n \t<li><a href=\"#orgffbfcc5\" data-bcup-haslogintext=\"no\">Installation<\/a><\/li>\n \t<li><a href=\"#org3b63ebb\" data-bcup-haslogintext=\"no\">Basic Usage<\/a>\n<ul>\n \t<li><a href=\"#orge272827\" data-bcup-haslogintext=\"no\">Moving around the maze<\/a><\/li>\n \t<li><a href=\"#org833b62c\" data-bcup-haslogintext=\"no\">Escaping the maze<\/a><\/li>\n \t<li><a href=\"#org6dd8195\" data-bcup-haslogintext=\"no\">Leaving a trace<\/a><\/li>\n<\/ul>\n<\/li>\n \t<li><a href=\"#orga388723\" data-bcup-haslogintext=\"no\">Advanced Usage<\/a>\n<ul>\n \t<li><a href=\"#orgef46df8\" data-bcup-haslogintext=\"no\">Changing Maze size<\/a><\/li>\n \t<li><a href=\"#orgafab2bc\" data-bcup-haslogintext=\"no\">Deterministic Random Maze Creation<\/a><\/li>\n<\/ul>\n<\/li>\n \t<li><a href=\"#orgdbfd0d6\" data-bcup-haslogintext=\"no\">Conclusions<\/a><\/li>\n<\/ul>\n<\/div>\n<\/div>\n<div id=\"orgd3d6013\" class=\"figure\"><\/div>\n<div id=\"outline-container-org2662e8e\" class=\"outline-2\">\n<h2 id=\"org2662e8e\">The Challenge<\/h2>\n<div id=\"text-org2662e8e\" class=\"outline-text-2\">\n<div id=\"org4e246e8\" class=\"figure\">\n\n<img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/noiseonthenet.space\/noise\/wp-content\/uploads\/2024\/10\/mika-baumeister-HUyICL8qbEE-unsplash.jpg?ssl=1\" alt=\"mika-baumeister-HUyICL8qbEE-unsplash.jpg\" \/>\n\n<\/div>\nPhoto by <a href=\"https:\/\/unsplash.com\/@kommumikation?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash\" data-bcup-haslogintext=\"no\">Mika Baumeister<\/a> on <a href=\"https:\/\/unsplash.com\/photos\/a-toy-figure-of-mario-on-top-of-a-blue-object-HUyICL8qbEE?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash\" data-bcup-haslogintext=\"no\">Unsplash<\/a>\n\nCan you find your way out when you only can see the walls near to you and your coordinates?\n\nThis is a typical robot challenge: organize your activity when you only know your environment.\n\nThere are some questions that may lead you to the solution:\n<ul class=\"org-ul\">\n \t<li>can I model this environment effectively?<\/li>\n \t<li>how can I use my model to plan a strategy?<\/li>\n \t<li>how can I translate my strategy into code?<\/li>\n<\/ul>\nThere may be many correct answers to these question.\n\nThis also opens up a possible second challenge: which solution performs best?\n\n<\/div>\n<\/div>\n<div id=\"outline-container-org7fbba55\" class=\"outline-2\">\n<h2 id=\"org7fbba55\">The implementation<\/h2>\n<div id=\"text-org7fbba55\" class=\"outline-text-2\">\n\nFirst I chose the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Maze_generation_algorithm\" data-bcup-haslogintext=\"no\">Kruskal algorithm<\/a> to generate a maze, with no particular reason, but with the intention of implementing also other algorithms: the same escape strategy may perform differently with different maze kind.\n\nThe maze will be defined within a rectangular grid of square cells which may be limited by walls; while the Kruskal algorithm may be used on any graph this will simplify the design of the game\n<div id=\"org51c3c80\" class=\"figure\">\n\n<img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/noiseonthenet.space\/noise\/wp-content\/uploads\/2024\/10\/maze_plan.png?ssl=1\" alt=\"maze_plan.png\" \/>\n\n<\/div>\nI searched for a simple visualization solution which would allow:\n<ul class=\"org-ul\">\n \t<li>interaction from a python CLI<\/li>\n \t<li>the smallest list of dependencies<\/li>\n<\/ul>\nTkinter turned out to satisfy both. I would warmly recommend the <a href=\"https:\/\/dafarry.github.io\/tkinterbook\/\" data-bcup-haslogintext=\"no\">Effbot<\/a> documentation site to learn about it.\n\nThe next step was to choose a single compact data structure to represent both the concept of a grid cell and of the walls (partially) surrounding it.\n\nI choose to represent\n\n<\/div>\n<\/div>\n<div id=\"outline-container-orgffbfcc5\" class=\"outline-2\">\n<h2 id=\"orgffbfcc5\">Installation<\/h2>\n<div id=\"text-orgffbfcc5\" class=\"outline-text-2\">\n\nThis game is designed to use only packages from standard python library; this installation procedure does just install one package\n\nI assume there is already a python installation.\n<div class=\"org-src-container\"><label class=\"org-src-name\"><\/label>\n<pre id=\"nil\" class=\"src src-bash\">pip install git+https:\/\/github.com\/noiseOnTheNet\/maze_robot.git\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"outline-container-org3b63ebb\" class=\"outline-2\">\n<h2 id=\"org3b63ebb\">Basic Usage<\/h2>\n<div id=\"text-org3b63ebb\" class=\"outline-text-2\">\n\nLaunch a command python command line then type the following\n<div class=\"org-src-container\"><label class=\"org-src-name\"><\/label>\n<pre id=\"nil\" class=\"src src-python\"><span style=\"color: #6c7086;\"># <\/span><span style=\"color: #6c7086;\">imports the robot object and 4 directions<\/span>\n<span style=\"color: #cba6f7;\">from<\/span> maze_robot <span style=\"color: #cba6f7;\">import<\/span> Robot, N, S, E, W\n<span style=\"color: #6c7086;\"># <\/span><span style=\"color: #6c7086;\">create a new robot instance<\/span>\n<span style=\"color: #cdd6f4;\">r<\/span> <span style=\"color: #89dceb;\">=<\/span> Robot()\n<span style=\"color: #6c7086;\"># <\/span><span style=\"color: #6c7086;\">shows the maze<\/span>\nr.view()\n<\/pre>\n<\/div>\nA tk window with a 10&#215;10 random maze appears: the maze is all connected.\n<div id=\"org2bb2f12\" class=\"figure\">\n\n<img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/noiseonthenet.space\/noise\/wp-content\/uploads\/2024\/10\/maze0.png?ssl=1\" alt=\"maze0.png\" \/>\n\n<\/div>\nThe robot is represented by a circle while the exit is represented by a square\n\nCoordinates start from 0,0 in the top left corner and grow moving right (x coordinate) or down (y coordinate)\n\nThe robot will always start at 0,0 while the exit is put randomly somewhere\n\nIn case you want to launch it within an ipython shell please execute the following command in advance:\n<div class=\"org-src-container\"><label class=\"org-src-name\"><\/label>\n<pre id=\"nil\" class=\"src src-ipython\">%gui tk\n<\/pre>\n<\/div>\n<\/div>\n<div id=\"outline-container-orge272827\" class=\"outline-3\">\n<h3 id=\"orge272827\">Moving around the maze<\/h3>\n<div id=\"text-orge272827\" class=\"outline-text-3\">\n\nYou can move around your robot by using the move method, passing one direction (N, S, W, E) enumeration object\n<div class=\"org-src-container\"><label class=\"org-src-name\"><\/label>\n<pre id=\"nil\" class=\"src src-python\">r.move(N)\n<\/pre>\n<\/div>\nif there is no wall in that direction the operation succeeds returning a true value, otherwise a false value is returned\n\nThe robot has a \u201cgeolocation\u201d functionality: it knows where it is in the grid. To get its position you can look at the \u201cposition\u201d read-only attribute\n<div class=\"org-src-container\"><label class=\"org-src-name\"><\/label>\n<pre id=\"nil\" class=\"src src-python\">r.position\n<span style=\"color: #6c7086;\"># <\/span><span style=\"color: #6c7086;\">it returns a tuple of integers e.g. (1, 2)<\/span>\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"outline-container-org833b62c\" class=\"outline-3\">\n<h3 id=\"org833b62c\">Escaping the maze<\/h3>\n<div id=\"text-org833b62c\" class=\"outline-text-3\">\n\nYou can guide the robot to the exit by moving it around until you reach the exit. The exit is sensed by the robot using the exit method\n<div class=\"org-src-container\"><label class=\"org-src-name\"><\/label>\n<pre id=\"nil\" class=\"src src-python\">r.<span style=\"color: #fab387;\">exit<\/span>()\n<\/pre>\n<\/div>\nthis method returns true if the robot is in the same grid cell as the exit.\n\nBut this is not the funniest way to use the robot: I think the funniest way is to see the robot find the exit by itself.\n\nWhile you can see the whole maze, the robot does not. It just see the walls around its position.\n<div class=\"org-src-container\"><label class=\"org-src-name\"><\/label>\n<pre id=\"nil\" class=\"src src-python\">r.walls\n<span style=\"color: #6c7086;\"># <\/span><span style=\"color: #6c7086;\">returns a tuple of directions where walls are e.g.(N, W, S)<\/span>\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"outline-container-org6dd8195\" class=\"outline-3\">\n<h3 id=\"org6dd8195\">Leaving a trace<\/h3>\n<div id=\"text-org6dd8195\" class=\"outline-text-3\">\n\nIf you want to see where your robot moves you can leave a graphical trace on the maze floor by using the <code>down_pen()<\/code> method.\n<div class=\"org-src-container\"><label class=\"org-src-name\"><\/label>\n<pre id=\"nil\" class=\"src src-python\">r.down_pen()\n<\/pre>\n<\/div>\nNow the robot will leave a red track behind. The robot cannot sense this track so it is only for you to see\n<div id=\"orgcd1e57a\" class=\"figure\">\n\n<img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/noiseonthenet.space\/noise\/wp-content\/uploads\/2024\/10\/maze1.png?ssl=1\" alt=\"maze1.png\" \/>\n\n<\/div>\nWhen you want to stop littering the maze you can use <code>up_pen()<\/code>\n<div class=\"org-src-container\"><label class=\"org-src-name\"><\/label>\n<pre id=\"nil\" class=\"src src-python\">r.up_pen()\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"outline-container-orga388723\" class=\"outline-2\">\n<h2 id=\"orga388723\">Advanced Usage<\/h2>\n<div id=\"text-orga388723\" class=\"outline-text-2\">\n\nAs the main goal is to create algorithms it may be convenient to have a finer control on the environment\n\n<\/div>\n<div id=\"outline-container-orgef46df8\" class=\"outline-3\">\n<h3 id=\"orgef46df8\">Changing Maze size<\/h3>\n<div id=\"text-orgef46df8\" class=\"outline-text-3\">\n\nyou can provide your own maze by using the <code>Maze<\/code> class\n<div class=\"org-src-container\"><label class=\"org-src-name\"><\/label>\n<pre id=\"nil\" class=\"src src-python\"><span style=\"color: #cba6f7;\">from<\/span> maze_robot.robot <span style=\"color: #cba6f7;\">import<\/span> Maze\n<span style=\"color: #cdd6f4;\">maze<\/span> <span style=\"color: #89dceb;\">=<\/span> Maze.kruskal(cols<span style=\"color: #89dceb;\">=<\/span><span style=\"color: #fab387;\">20<\/span>,rows<span style=\"color: #89dceb;\">=<\/span><span style=\"color: #fab387;\">10<\/span>)\n<span style=\"color: #cdd6f4;\">r<\/span> <span style=\"color: #89dceb;\">=<\/span> Robot(maze)\nr.view()\n<\/pre>\n<\/div>\n<div id=\"orgd6dc0fa\" class=\"figure\">\n\n<img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/noiseonthenet.space\/noise\/wp-content\/uploads\/2024\/10\/maze2.png?ssl=1\" alt=\"maze2.png\" \/>\n\n<\/div>\nHave fun with larger mazes!\n\nWarning: the current implementation of the maze generation is not the most efficient, larger mazes may be slow to create.\n\n<\/div>\n<\/div>\n<div id=\"outline-container-orgafab2bc\" class=\"outline-3\">\n<h3 id=\"orgafab2bc\">Deterministic Random Maze Creation<\/h3>\n<div id=\"text-orgafab2bc\" class=\"outline-text-3\">\n\nIf you want to test your algorithm on a specific maze you can provide a seed which will generate always the same maze.\n<div class=\"org-src-container\"><label class=\"org-src-name\"><\/label>\n<pre id=\"nil\" class=\"src src-python\"><span style=\"color: #cba6f7;\">from<\/span> maze_robot.robot <span style=\"color: #cba6f7;\">import<\/span> Maze\n<span style=\"color: #cdd6f4;\">maze<\/span> <span style=\"color: #89dceb;\">=<\/span> Maze.kruskal(cols<span style=\"color: #89dceb;\">=<\/span><span style=\"color: #fab387;\">20<\/span>,rows<span style=\"color: #89dceb;\">=<\/span><span style=\"color: #fab387;\">10<\/span>, seed<span style=\"color: #89dceb;\">=<\/span><span style=\"color: #fab387;\">0<\/span>)\n<span style=\"color: #cdd6f4;\">r<\/span> <span style=\"color: #89dceb;\">=<\/span> Robot(maze)\nr.view()\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"outline-container-orgdbfd0d6\" class=\"outline-2\">\n<h2 id=\"orgdbfd0d6\">Conclusions<\/h2>\n<div id=\"text-orgdbfd0d6\" class=\"outline-text-2\">\n\nSo far student\u2019s response looks positive: I will update this post when I collect more feedbacks\n\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"Learning should be fun: sharing an experience teaching python","protected":false},"author":1,"featured_media":519,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","inline_featured_image":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4],"tags":[7],"class_list":["post-525","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-language-learning","tag-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Amazing Learning - Noise On The Net<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/noiseonthenet.space\/noise\/2024\/10\/amazing-learning\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Amazing Learning - Noise On The Net\" \/>\n<meta property=\"og:description\" content=\"Learning should be fun: sharing an experience teaching python\" \/>\n<meta property=\"og:url\" content=\"https:\/\/noiseonthenet.space\/noise\/2024\/10\/amazing-learning\/\" \/>\n<meta property=\"og:site_name\" content=\"Noise On The Net\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-13T14:55:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-13T17:26:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/noiseonthenet.space\/noise\/wp-content\/uploads\/2024\/10\/krakenimages-Br-ayoAxFuQ-unsplash.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"1200\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"marco.p.v.vezzoli\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"marco.p.v.vezzoli\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/2024\\\/10\\\/amazing-learning\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/2024\\\/10\\\/amazing-learning\\\/\"},\"author\":{\"name\":\"marco.p.v.vezzoli\",\"@id\":\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/#\\\/schema\\\/person\\\/88c3a70f2b23480197bc61d6e1e2e982\"},\"headline\":\"Amazing Learning\",\"datePublished\":\"2024-10-13T14:55:00+00:00\",\"dateModified\":\"2024-10-13T17:26:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/2024\\\/10\\\/amazing-learning\\\/\"},\"wordCount\":767,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/#\\\/schema\\\/person\\\/88c3a70f2b23480197bc61d6e1e2e982\"},\"image\":{\"@id\":\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/2024\\\/10\\\/amazing-learning\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/noiseonthenet.space\\\/noise\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/krakenimages-Br-ayoAxFuQ-unsplash.jpg?fit=800%2C1200&ssl=1\",\"keywords\":[\"Python\"],\"articleSection\":[\"Language learning\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/2024\\\/10\\\/amazing-learning\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/2024\\\/10\\\/amazing-learning\\\/\",\"url\":\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/2024\\\/10\\\/amazing-learning\\\/\",\"name\":\"Amazing Learning - Noise On The Net\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/2024\\\/10\\\/amazing-learning\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/2024\\\/10\\\/amazing-learning\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/noiseonthenet.space\\\/noise\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/krakenimages-Br-ayoAxFuQ-unsplash.jpg?fit=800%2C1200&ssl=1\",\"datePublished\":\"2024-10-13T14:55:00+00:00\",\"dateModified\":\"2024-10-13T17:26:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/2024\\\/10\\\/amazing-learning\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/2024\\\/10\\\/amazing-learning\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/2024\\\/10\\\/amazing-learning\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/noiseonthenet.space\\\/noise\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/krakenimages-Br-ayoAxFuQ-unsplash.jpg?fit=800%2C1200&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/noiseonthenet.space\\\/noise\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/krakenimages-Br-ayoAxFuQ-unsplash.jpg?fit=800%2C1200&ssl=1\",\"width\":800,\"height\":1200},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/2024\\\/10\\\/amazing-learning\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Amazing Learning\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/#website\",\"url\":\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/\",\"name\":\"Noise On The Net\",\"description\":\"Sharing adventures in code\",\"publisher\":{\"@id\":\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/#\\\/schema\\\/person\\\/88c3a70f2b23480197bc61d6e1e2e982\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/#\\\/schema\\\/person\\\/88c3a70f2b23480197bc61d6e1e2e982\",\"name\":\"marco.p.v.vezzoli\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b9d9aab1df560bc14d73b0b442198f196ce39e7c7a38df1dc22fec0b97f17da9?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b9d9aab1df560bc14d73b0b442198f196ce39e7c7a38df1dc22fec0b97f17da9?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b9d9aab1df560bc14d73b0b442198f196ce39e7c7a38df1dc22fec0b97f17da9?s=96&d=mm&r=g\",\"caption\":\"marco.p.v.vezzoli\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b9d9aab1df560bc14d73b0b442198f196ce39e7c7a38df1dc22fec0b97f17da9?s=96&d=mm&r=g\"},\"description\":\"Self taught assembler programming at 11 on my C64 (1983). Never stopped since then -- always looking up for curious things in the software development, data science and AI. Linux and FOSS user since 1994. MSc in physics in 1996. Working in large semiconductor companies since 1997 (STM, Micron) developing analytics and full stack web infrastructures, microservices, ML solutions\",\"sameAs\":[\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/marco-paolo-valerio-vezzoli-0663835\\\/\"],\"url\":\"https:\\\/\\\/noiseonthenet.space\\\/noise\\\/author\\\/marco-p-v-vezzoli\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Amazing Learning - Noise On The Net","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/noiseonthenet.space\/noise\/2024\/10\/amazing-learning\/","og_locale":"en_US","og_type":"article","og_title":"Amazing Learning - Noise On The Net","og_description":"Learning should be fun: sharing an experience teaching python","og_url":"https:\/\/noiseonthenet.space\/noise\/2024\/10\/amazing-learning\/","og_site_name":"Noise On The Net","article_published_time":"2024-10-13T14:55:00+00:00","article_modified_time":"2024-10-13T17:26:10+00:00","og_image":[{"width":800,"height":1200,"url":"https:\/\/noiseonthenet.space\/noise\/wp-content\/uploads\/2024\/10\/krakenimages-Br-ayoAxFuQ-unsplash.jpg","type":"image\/jpeg"}],"author":"marco.p.v.vezzoli","twitter_card":"summary_large_image","twitter_misc":{"Written by":"marco.p.v.vezzoli","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/noiseonthenet.space\/noise\/2024\/10\/amazing-learning\/#article","isPartOf":{"@id":"https:\/\/noiseonthenet.space\/noise\/2024\/10\/amazing-learning\/"},"author":{"name":"marco.p.v.vezzoli","@id":"https:\/\/noiseonthenet.space\/noise\/#\/schema\/person\/88c3a70f2b23480197bc61d6e1e2e982"},"headline":"Amazing Learning","datePublished":"2024-10-13T14:55:00+00:00","dateModified":"2024-10-13T17:26:10+00:00","mainEntityOfPage":{"@id":"https:\/\/noiseonthenet.space\/noise\/2024\/10\/amazing-learning\/"},"wordCount":767,"commentCount":0,"publisher":{"@id":"https:\/\/noiseonthenet.space\/noise\/#\/schema\/person\/88c3a70f2b23480197bc61d6e1e2e982"},"image":{"@id":"https:\/\/noiseonthenet.space\/noise\/2024\/10\/amazing-learning\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/noiseonthenet.space\/noise\/wp-content\/uploads\/2024\/10\/krakenimages-Br-ayoAxFuQ-unsplash.jpg?fit=800%2C1200&ssl=1","keywords":["Python"],"articleSection":["Language learning"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/noiseonthenet.space\/noise\/2024\/10\/amazing-learning\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/noiseonthenet.space\/noise\/2024\/10\/amazing-learning\/","url":"https:\/\/noiseonthenet.space\/noise\/2024\/10\/amazing-learning\/","name":"Amazing Learning - Noise On The Net","isPartOf":{"@id":"https:\/\/noiseonthenet.space\/noise\/#website"},"primaryImageOfPage":{"@id":"https:\/\/noiseonthenet.space\/noise\/2024\/10\/amazing-learning\/#primaryimage"},"image":{"@id":"https:\/\/noiseonthenet.space\/noise\/2024\/10\/amazing-learning\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/noiseonthenet.space\/noise\/wp-content\/uploads\/2024\/10\/krakenimages-Br-ayoAxFuQ-unsplash.jpg?fit=800%2C1200&ssl=1","datePublished":"2024-10-13T14:55:00+00:00","dateModified":"2024-10-13T17:26:10+00:00","breadcrumb":{"@id":"https:\/\/noiseonthenet.space\/noise\/2024\/10\/amazing-learning\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/noiseonthenet.space\/noise\/2024\/10\/amazing-learning\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/noiseonthenet.space\/noise\/2024\/10\/amazing-learning\/#primaryimage","url":"https:\/\/i0.wp.com\/noiseonthenet.space\/noise\/wp-content\/uploads\/2024\/10\/krakenimages-Br-ayoAxFuQ-unsplash.jpg?fit=800%2C1200&ssl=1","contentUrl":"https:\/\/i0.wp.com\/noiseonthenet.space\/noise\/wp-content\/uploads\/2024\/10\/krakenimages-Br-ayoAxFuQ-unsplash.jpg?fit=800%2C1200&ssl=1","width":800,"height":1200},{"@type":"BreadcrumbList","@id":"https:\/\/noiseonthenet.space\/noise\/2024\/10\/amazing-learning\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/noiseonthenet.space\/noise\/"},{"@type":"ListItem","position":2,"name":"Amazing Learning"}]},{"@type":"WebSite","@id":"https:\/\/noiseonthenet.space\/noise\/#website","url":"https:\/\/noiseonthenet.space\/noise\/","name":"Noise On The Net","description":"Sharing adventures in code","publisher":{"@id":"https:\/\/noiseonthenet.space\/noise\/#\/schema\/person\/88c3a70f2b23480197bc61d6e1e2e982"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/noiseonthenet.space\/noise\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/noiseonthenet.space\/noise\/#\/schema\/person\/88c3a70f2b23480197bc61d6e1e2e982","name":"marco.p.v.vezzoli","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/b9d9aab1df560bc14d73b0b442198f196ce39e7c7a38df1dc22fec0b97f17da9?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/b9d9aab1df560bc14d73b0b442198f196ce39e7c7a38df1dc22fec0b97f17da9?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b9d9aab1df560bc14d73b0b442198f196ce39e7c7a38df1dc22fec0b97f17da9?s=96&d=mm&r=g","caption":"marco.p.v.vezzoli"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/b9d9aab1df560bc14d73b0b442198f196ce39e7c7a38df1dc22fec0b97f17da9?s=96&d=mm&r=g"},"description":"Self taught assembler programming at 11 on my C64 (1983). Never stopped since then -- always looking up for curious things in the software development, data science and AI. Linux and FOSS user since 1994. MSc in physics in 1996. Working in large semiconductor companies since 1997 (STM, Micron) developing analytics and full stack web infrastructures, microservices, ML solutions","sameAs":["https:\/\/noiseonthenet.space\/noise\/","https:\/\/www.linkedin.com\/in\/marco-paolo-valerio-vezzoli-0663835\/"],"url":"https:\/\/noiseonthenet.space\/noise\/author\/marco-p-v-vezzoli\/"}]}},"jetpack_featured_media_url":"https:\/\/i0.wp.com\/noiseonthenet.space\/noise\/wp-content\/uploads\/2024\/10\/krakenimages-Br-ayoAxFuQ-unsplash.jpg?fit=800%2C1200&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pdDUZ5-8t","jetpack-related-posts":[],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/noiseonthenet.space\/noise\/wp-json\/wp\/v2\/posts\/525","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/noiseonthenet.space\/noise\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/noiseonthenet.space\/noise\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/noiseonthenet.space\/noise\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/noiseonthenet.space\/noise\/wp-json\/wp\/v2\/comments?post=525"}],"version-history":[{"count":5,"href":"https:\/\/noiseonthenet.space\/noise\/wp-json\/wp\/v2\/posts\/525\/revisions"}],"predecessor-version":[{"id":531,"href":"https:\/\/noiseonthenet.space\/noise\/wp-json\/wp\/v2\/posts\/525\/revisions\/531"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/noiseonthenet.space\/noise\/wp-json\/wp\/v2\/media\/519"}],"wp:attachment":[{"href":"https:\/\/noiseonthenet.space\/noise\/wp-json\/wp\/v2\/media?parent=525"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/noiseonthenet.space\/noise\/wp-json\/wp\/v2\/categories?post=525"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/noiseonthenet.space\/noise\/wp-json\/wp\/v2\/tags?post=525"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}