{"id":6127,"date":"2026-08-08T20:07:54","date_gmt":"2026-08-08T20:07:54","guid":{"rendered":"https:\/\/dalelane.co.uk\/blog\/?p=6127"},"modified":"2026-08-08T20:07:55","modified_gmt":"2026-08-08T20:07:55","slug":"importing-and-exporting-projects-in-machine-learning-for-kids","status":"publish","type":"post","link":"https:\/\/dalelane.co.uk\/blog\/?p=6127","title":{"rendered":"Importing and exporting projects in Machine Learning for Kids"},"content":{"rendered":"<p><strong>I&#8217;ve added new features to <a href=\"https:\/\/machinelearningforkids.co.uk\/\">Machine Learning for Kids<\/a> to give students more options about where they store their projects.<\/strong><\/p>\n<h3>Limits<\/h3>\n<p>In Machine Learning for Kids, students create projects where they collect training examples to train their own custom machine learning models. I don&#8217;t limit the number of projects students can create. I want students to create as many projects as they&#8217;d like. But for projects stored on my server, I&#8217;ve nudged students to delete projects once they are no longer working on them. This is intentional, as a way of helping me keep the running costs for the site under control.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2026-08-08-mlforkids\/limits.png\" style=\"width: 100%; max-width: 600px; border: thin black solid;\"\/><\/p>\n<p><!--more-->(<em>I do allow more than one current project at a time, but that is only there to allow for a little overlap as students move from one project to the next, not a way to store many projects for long periods of time.<\/em>)<\/p>\n<h3>Storage costs<\/h3>\n<p>The motivation for this is to help me manage the hosting costs for the site &#8211; it helps make it affordable for me to make the site available for free and without any adverts. I&#8217;ve <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=6019\">mentioned before<\/a> that there are many hundreds-of-thousands of projects created each month. The storage costs for this on aggregate is significant. If I didn&#8217;t have an incentive for people to delete projects once they&#8217;ve finished working on them, the resulting storage costs in keeping the training data around would increase exponentially.<\/p>\n<p>I&#8217;ve <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5042\">written about the complaints I get about this<\/a>. I get a lot of them. <\/p>\n<h3>IndexedDB as an alternative<\/h3>\n<p>My first approach to dealing with this was to <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5042\">add an option for &#8220;local projects&#8221;<\/a> &#8211; projects stored in the web browser using IndexedDB. My thinking was that if users could still use the site in the same way, but without storing anything in the cloud, I would have no need to limit them at all, as it is your own storage you\u2019re using.<\/p>\n<p>But&#8230; this is incomplete as a solution. It doesn&#8217;t work for students who can&#8217;t guarantee that they will use the same computer every time they work on their project. And very occasionally, browsers on computers with constrained storage will just clear data from IndexedDB without warnings, so there is a degree of risk associated with storing student&#8217;s data there. <\/p>\n<h3>Adding files as another alternative<\/h3>\n<p>I&#8217;ve added some more options.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2026-08-08-mlforkids\/dialog.png\" style=\"width: 100%; max-width: 600px; border: thin black solid;\"\/><\/p>\n<p><strong>Copy project to this computer<\/strong><\/p>\n<p>If you start out with a project stored in the cloud, accessing it from multiple computers, you can later move it to local browser storage, importing it into your local IndexedDB. <\/p>\n<p>This frees you up to delete the cloud project, without having to lose all your work<\/p>\n<p><strong>Save project to a file<\/strong><\/p>\n<p>This option exports your project to a zip file. Unlike using IndexedDB, a zip file is easier to transfer to another browser on another computer. <\/p>\n<p>(Plus you can keep that zip file as a backup of your project in storage that doesn&#8217;t come with the same automatically-silently-deleting-itself risks that IndexedDB has.)<\/p>\n<p>These zip files can now be imported back into the site to create new restored projects. <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2026-08-08-mlforkids\/import.png\" style=\"width: 100%; max-width: 600px; border: thin black solid;\"\/><\/p>\n<h3>Better late than never?<\/h3>\n<p>I&#8217;ve been meaning to release these features <a href=\"https:\/\/github.com\/IBM\/taxinomitis\/issues\/432\">for years<\/a>, but this weekend I finally finished them. <\/p>\n<p>Hopefully these features help give students a bit more flexibility. Please <a href=\"https:\/\/groups.google.com\/g\/mlforkids\">let me know<\/a> how you get on with them. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve added new features to Machine Learning for Kids to give students more options about where they store their projects. Limits In Machine Learning for Kids, students create projects where they collect training examples to train their own custom machine learning models. I don&#8217;t limit the number of projects students can create. I want students [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[587],"class_list":["post-6127","post","type-post","status-publish","format-standard","hentry","category-misc","tag-mlforkids-tech"],"_links":{"self":[{"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/posts\/6127","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6127"}],"version-history":[{"count":1,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/posts\/6127\/revisions"}],"predecessor-version":[{"id":6128,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/posts\/6127\/revisions\/6128"}],"wp:attachment":[{"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6127"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6127"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6127"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}