<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.sugarlabs.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rishabhnambia</id>
	<title>Sugar Labs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sugarlabs.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rishabhnambia"/>
	<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/go/Special:Contributions/Rishabhnambia"/>
	<updated>2026-06-07T03:26:21Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101613</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101613"/>
		<updated>2018-03-27T15:15:30Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: /* Timeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Github:&#039;&#039;&#039; https://github.com/rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located in Mumbai, India (UTC +05:30).&lt;br /&gt;
: Work Hours: 5:00 AM to 1:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017 as a part of their Developer Operations team.&lt;br /&gt;
 &lt;br /&gt;
::* I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
::* https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
::* Here’s a PR I made that has some Ansible:&lt;br /&gt;
::* https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
::*https://github.com/frappe/bench/pull/473 [Ansible]&lt;br /&gt;
::*https://github.com/coding-blocks/content-downloader/pull/7 [Python]&lt;br /&gt;
::*https://github.com/fossasia/meilix-generator/pull/110 [HTML, CSS, JavaScript]&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running Sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Collaboration &amp;amp; Testing&#039;&#039;&#039;&lt;br /&gt;
:Sugarizer already works really well when deployed locally on a Raspberry Pi and Neighbourhood view is also functional. &lt;br /&gt;
:*On completion of Goal #1, the image build will be tested at real Sugarizer deployments with the help of the community.&lt;br /&gt;
&lt;br /&gt;
====Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:::::::::::::::::::&#039;&#039;&amp;lt;small&amp;gt;Fig. mockup for a Heroku Button in README.md&amp;lt;/small&amp;gt;&#039;&#039;&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server and Ansible installer for IIAB already exist, this will not take long.&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
*Discuss and reshape the Timeline after discussion with my mentor(s).&lt;br /&gt;
*Investigate the causes of MongoDB crashes faced by Sugarizer users and formulate a solution.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Analyze Sugarizer performance on the Raspberry Pi using parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use &#039;&#039;&#039;hostapd&#039;&#039;&#039; and &#039;&#039;&#039;dnsmasq&#039;&#039;&#039; to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on the Raspberry Pi image and the build scripts and publish them.&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android and iOS apps.&lt;br /&gt;
*Implement and test on multiple Android devices/tablets.&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|Phase I Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*The aim is to remove the possibility of data loss during after updates.&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
*The project should ideally be 90% complete by the end of June. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test Heroku Button deployment.&lt;br /&gt;
*Test the Sugarizer School Box Raspberry Pi image at real Sugarizer deployments with the help of the community.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|Phase II Evaluation&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue working on the Bash + Docker script.&lt;br /&gt;
*Use Packer or Terraform on the script to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Take help from the community for testing the scripts on a larger scale.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|Final Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Keep a final buffer week for added tasks.&lt;br /&gt;
*Prepare final submissions.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon&#039;&#039;&#039; - mohayon75@gmail.com (Potential GSoC Mentor)&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). &lt;br /&gt;
:::&#039;&#039;&#039;This is the killer feature we should definitely have.&#039;&#039;&#039;&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson&#039;&#039;&#039; - tony_anderson@usa.net - http://schoolserver.org/&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody&#039;&#039;&#039; - tim@timmoody.com - http://internet-in-a-box.org/&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences, progress and plans for the next week through it.&lt;br /&gt;
:During the coding period, I&#039;ll attend the Development Team Meetings and will also be available on IRC (#sugar) when I&#039;m working.&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Desktop projects or the Sugar Web projects so for a relevant screening task, you can check a Sugarizer deployment I’ve done at http://rishabhn.xyz:8080/&lt;br /&gt;
&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
====Tell us something about yourself that will make us like you more.====&lt;br /&gt;
:*I believe I’m a good candidate for this project because I’m an avid distro-hopper. The process of merely installing new Linux distributions and setting them up the way I like takes a large chunk of my time. So, the Sugarizer School Box isn’t just some project I’d like to do for GSoC, it’s something I’ll actually enjoy building!&lt;br /&gt;
:*I come from a family of musicians so I’ve turned into an amateur singer and guitar player as I’ve grown up. I also know my way around recording instruments and vocals. If the Sugarizer School Box project didn’t exist, I would have picked a Music Blocks project for sure. Maybe I can work on it sometime in the future! &lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:Well, the most significant learning experience I can recollect is when I learned how to “learn”.&lt;br /&gt;
:This is something entirely personal as different individuals require different learning methods.&lt;br /&gt;
:I don’t remember exactly when or how I found out but I finally realized that I can learn only by “doing” and not by reading or writing about concepts.&lt;br /&gt;
&lt;br /&gt;
:Now, I just use that concept to try learning whatever I need to. It’s all about getting your hands dirty and putting in the work.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101612</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101612"/>
		<updated>2018-03-27T15:12:44Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: /* Timeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Github:&#039;&#039;&#039; https://github.com/rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located in Mumbai, India (UTC +05:30).&lt;br /&gt;
: Work Hours: 5:00 AM to 1:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017 as a part of their Developer Operations team.&lt;br /&gt;
 &lt;br /&gt;
::* I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
::* https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
::* Here’s a PR I made that has some Ansible:&lt;br /&gt;
::* https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
::*https://github.com/frappe/bench/pull/473 [Ansible]&lt;br /&gt;
::*https://github.com/coding-blocks/content-downloader/pull/7 [Python]&lt;br /&gt;
::*https://github.com/fossasia/meilix-generator/pull/110 [HTML, CSS, JavaScript]&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running Sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Collaboration &amp;amp; Testing&#039;&#039;&#039;&lt;br /&gt;
:Sugarizer already works really well when deployed locally on a Raspberry Pi and Neighbourhood view is also functional. &lt;br /&gt;
:*On completion of Goal #1, the image build will be tested at real Sugarizer deployments with the help of the community.&lt;br /&gt;
&lt;br /&gt;
====Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:::::::::::::::::::&#039;&#039;&amp;lt;small&amp;gt;Fig. mockup for a Heroku Button in README.md&amp;lt;/small&amp;gt;&#039;&#039;&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server and Ansible installer for IIAB already exist, this will not take long.&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
*Discuss and reshape the Timeline after discussion with my mentor(s).&lt;br /&gt;
*Investigate the causes of MongoDB crashes faced by Sugarizer users and formulate a solution.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Analyze Sugarizer performance on the Raspberry Pi using parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use &#039;&#039;&#039;hostapd&#039;&#039;&#039; and &#039;&#039;&#039;dnsmasq&#039;&#039;&#039; to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on the Raspberry Pi image and the build scripts and publish them.&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android and iOS apps.&lt;br /&gt;
*Implement and test on multiple Android devices/tablets.&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|Phase I Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*The aim is to remove the possibility of data loss during after updates.&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
*The project should ideally be 90% complete by the end of June. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test Heroku Button deployment.&lt;br /&gt;
*Test the Sugarizer School Box Raspberry Pi image at real Sugarizer deployments with the help of the community.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|Phase II Evaluation&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue working on the Bash + Docker script.&lt;br /&gt;
*Use Packer or Terraform on the script to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Take help from the community for testing the scripts on a larger scale.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|Final Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Keep a final buffer week for added tasks.&lt;br /&gt;
*Prepare final submissions.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon&#039;&#039;&#039; - mohayon75@gmail.com (Potential GSoC Mentor)&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). &lt;br /&gt;
:::&#039;&#039;&#039;This is the killer feature we should definitely have.&#039;&#039;&#039;&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson&#039;&#039;&#039; - tony_anderson@usa.net - http://schoolserver.org/&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody&#039;&#039;&#039; - tim@timmoody.com - http://internet-in-a-box.org/&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences, progress and plans for the next week through it.&lt;br /&gt;
:During the coding period, I&#039;ll attend the Development Team Meetings and will also be available on IRC (#sugar) when I&#039;m working.&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Desktop projects or the Sugar Web projects so for a relevant screening task, you can check a Sugarizer deployment I’ve done at http://rishabhn.xyz:8080/&lt;br /&gt;
&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
====Tell us something about yourself that will make us like you more.====&lt;br /&gt;
:*I believe I’m a good candidate for this project because I’m an avid distro-hopper. The process of merely installing new Linux distributions and setting them up the way I like takes a large chunk of my time. So, the Sugarizer School Box isn’t just some project I’d like to do for GSoC, it’s something I’ll actually enjoy building!&lt;br /&gt;
:*I come from a family of musicians so I’ve turned into an amateur singer and guitar player as I’ve grown up. I also know my way around recording instruments and vocals. If the Sugarizer School Box project didn’t exist, I would have picked a Music Blocks project for sure. Maybe I can work on it sometime in the future! &lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:Well, the most significant learning experience I can recollect is when I learned how to “learn”.&lt;br /&gt;
:This is something entirely personal as different individuals require different learning methods.&lt;br /&gt;
:I don’t remember exactly when or how I found out but I finally realized that I can learn only by “doing” and not by reading or writing about concepts.&lt;br /&gt;
&lt;br /&gt;
:Now, I just use that concept to try learning whatever I need to. It’s all about getting your hands dirty and putting in the work.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101611</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101611"/>
		<updated>2018-03-27T15:10:25Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: /* Miscellaneous */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Github:&#039;&#039;&#039; https://github.com/rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located in Mumbai, India (UTC +05:30).&lt;br /&gt;
: Work Hours: 5:00 AM to 1:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017 as a part of their Developer Operations team.&lt;br /&gt;
 &lt;br /&gt;
::* I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
::* https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
::* Here’s a PR I made that has some Ansible:&lt;br /&gt;
::* https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
::*https://github.com/frappe/bench/pull/473 [Ansible]&lt;br /&gt;
::*https://github.com/coding-blocks/content-downloader/pull/7 [Python]&lt;br /&gt;
::*https://github.com/fossasia/meilix-generator/pull/110 [HTML, CSS, JavaScript]&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running Sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Collaboration &amp;amp; Testing&#039;&#039;&#039;&lt;br /&gt;
:Sugarizer already works really well when deployed locally on a Raspberry Pi and Neighbourhood view is also functional. &lt;br /&gt;
:*On completion of Goal #1, the image build will be tested at real Sugarizer deployments with the help of the community.&lt;br /&gt;
&lt;br /&gt;
====Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:::::::::::::::::::&#039;&#039;&amp;lt;small&amp;gt;Fig. mockup for a Heroku Button in README.md&amp;lt;/small&amp;gt;&#039;&#039;&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server and Ansible installer for IIAB already exist, this will not take long.&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
*Discuss and reshape the Timeline after discussion with my mentor(s).&lt;br /&gt;
*Investigate the causes of MongoDB crashes faced by Sugarizer users and formulate a solution.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Analyze Sugarizer performance on the Raspberry Pi using parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use &#039;&#039;&#039;hostapd&#039;&#039;&#039; and &#039;&#039;&#039;dnsmasq&#039;&#039;&#039; to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on the Raspberry Pi image and the build scripts and publish them.&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android and iOS apps.&lt;br /&gt;
*Implement and test on multiple Android devices/tablets.&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*The aim is to remove the possibility of data loss during after updates.&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
*The project should ideally be 90% complete by the end of June. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test Heroku Button deployment.&lt;br /&gt;
*Test the Sugarizer School Box Raspberry Pi image at real Sugarizer deployments with the help of the community.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue working on the Bash + Docker script.&lt;br /&gt;
*Use Packer or Terraform on the script to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Take help from the community for testing the scripts on a larger scale.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Keep a final buffer week for added tasks.&lt;br /&gt;
*Prepare final submissions.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon&#039;&#039;&#039; - mohayon75@gmail.com (Potential GSoC Mentor)&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). &lt;br /&gt;
:::&#039;&#039;&#039;This is the killer feature we should definitely have.&#039;&#039;&#039;&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson&#039;&#039;&#039; - tony_anderson@usa.net - http://schoolserver.org/&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody&#039;&#039;&#039; - tim@timmoody.com - http://internet-in-a-box.org/&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences, progress and plans for the next week through it.&lt;br /&gt;
:During the coding period, I&#039;ll attend the Development Team Meetings and will also be available on IRC (#sugar) when I&#039;m working.&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Desktop projects or the Sugar Web projects so for a relevant screening task, you can check a Sugarizer deployment I’ve done at http://rishabhn.xyz:8080/&lt;br /&gt;
&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
====Tell us something about yourself that will make us like you more.====&lt;br /&gt;
:*I believe I’m a good candidate for this project because I’m an avid distro-hopper. The process of merely installing new Linux distributions and setting them up the way I like takes a large chunk of my time. So, the Sugarizer School Box isn’t just some project I’d like to do for GSoC, it’s something I’ll actually enjoy building!&lt;br /&gt;
:*I come from a family of musicians so I’ve turned into an amateur singer and guitar player as I’ve grown up. I also know my way around recording instruments and vocals. If the Sugarizer School Box project didn’t exist, I would have picked a Music Blocks project for sure. Maybe I can work on it sometime in the future! &lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:Well, the most significant learning experience I can recollect is when I learned how to “learn”.&lt;br /&gt;
:This is something entirely personal as different individuals require different learning methods.&lt;br /&gt;
:I don’t remember exactly when or how I found out but I finally realized that I can learn only by “doing” and not by reading or writing about concepts.&lt;br /&gt;
&lt;br /&gt;
:Now, I just use that concept to try learning whatever I need to. It’s all about getting your hands dirty and putting in the work.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101610</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101610"/>
		<updated>2018-03-27T15:09:23Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: /* Answers from the Community */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Github:&#039;&#039;&#039; https://github.com/rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located in Mumbai, India (UTC +05:30).&lt;br /&gt;
: Work Hours: 5:00 AM to 1:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017 as a part of their Developer Operations team.&lt;br /&gt;
 &lt;br /&gt;
::* I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
::* https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
::* Here’s a PR I made that has some Ansible:&lt;br /&gt;
::* https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
::*https://github.com/frappe/bench/pull/473 [Ansible]&lt;br /&gt;
::*https://github.com/coding-blocks/content-downloader/pull/7 [Python]&lt;br /&gt;
::*https://github.com/fossasia/meilix-generator/pull/110 [HTML, CSS, JavaScript]&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running Sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Collaboration &amp;amp; Testing&#039;&#039;&#039;&lt;br /&gt;
:Sugarizer already works really well when deployed locally on a Raspberry Pi and Neighbourhood view is also functional. &lt;br /&gt;
:*On completion of Goal #1, the image build will be tested at real Sugarizer deployments with the help of the community.&lt;br /&gt;
&lt;br /&gt;
====Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:::::::::::::::::::&#039;&#039;&amp;lt;small&amp;gt;Fig. mockup for a Heroku Button in README.md&amp;lt;/small&amp;gt;&#039;&#039;&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server and Ansible installer for IIAB already exist, this will not take long.&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
*Discuss and reshape the Timeline after discussion with my mentor(s).&lt;br /&gt;
*Investigate the causes of MongoDB crashes faced by Sugarizer users and formulate a solution.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Analyze Sugarizer performance on the Raspberry Pi using parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use &#039;&#039;&#039;hostapd&#039;&#039;&#039; and &#039;&#039;&#039;dnsmasq&#039;&#039;&#039; to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on the Raspberry Pi image and the build scripts and publish them.&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android and iOS apps.&lt;br /&gt;
*Implement and test on multiple Android devices/tablets.&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*The aim is to remove the possibility of data loss during after updates.&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
*The project should ideally be 90% complete by the end of June. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test Heroku Button deployment.&lt;br /&gt;
*Test the Sugarizer School Box Raspberry Pi image at real Sugarizer deployments with the help of the community.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue working on the Bash + Docker script.&lt;br /&gt;
*Use Packer or Terraform on the script to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Take help from the community for testing the scripts on a larger scale.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Keep a final buffer week for added tasks.&lt;br /&gt;
*Prepare final submissions.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon&#039;&#039;&#039; - mohayon75@gmail.com (Potential GSoC Mentor)&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). &lt;br /&gt;
:::&#039;&#039;&#039;This is the killer feature we should definitely have.&#039;&#039;&#039;&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson&#039;&#039;&#039; - tony_anderson@usa.net - http://schoolserver.org/&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody&#039;&#039;&#039; - tim@timmoody.com - http://internet-in-a-box.org/&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences, progress and plans for the next week through it.&lt;br /&gt;
:During the coding period, I&#039;ll attend the Development Team Meetings and will also be available on IRC (#sugar) when I&#039;m working.&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Desktop projects or the Sugar Web projects so for a relevant screening task, you can check a Sugarizer deployment I’ve done at http://rishabhn.xyz:8080/&lt;br /&gt;
&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:Well, the most significant learning experience I can recollect is when I learned how to “learn”.&lt;br /&gt;
:This is something entirely personal as different individuals require different learning methods.&lt;br /&gt;
:I don’t remember exactly when or how I found out but I finally realized that I can learn only by “doing” and not by reading or writing about concepts.&lt;br /&gt;
&lt;br /&gt;
:Now, I just use that concept to try learning whatever I need to. It’s all about getting your hands dirty and putting in the work.&lt;br /&gt;
&lt;br /&gt;
====Tell us something about yourself that will make us like you more.====&lt;br /&gt;
:*I believe I’m a good candidate for this project because I’m an avid distro-hopper. The process of merely installing new Linux distributions and setting them up the way I like takes a large chunk of my time. So, the Sugarizer School Box isn’t just some project I’d like to do for GSoC, it’s something I’ll actually enjoy building!&lt;br /&gt;
:*I come from a family of musicians so I’ve turned into an amateur singer and guitar player as I’ve grown up. I also know my way around recording instruments and vocals. If the Sugarizer School Box project didn’t exist, I would have picked a Music Blocks project for sure. Maybe I can work on it sometime in the future! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101609</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101609"/>
		<updated>2018-03-27T15:08:18Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: /* Timeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Github:&#039;&#039;&#039; https://github.com/rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located in Mumbai, India (UTC +05:30).&lt;br /&gt;
: Work Hours: 5:00 AM to 1:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017 as a part of their Developer Operations team.&lt;br /&gt;
 &lt;br /&gt;
::* I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
::* https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
::* Here’s a PR I made that has some Ansible:&lt;br /&gt;
::* https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
::*https://github.com/frappe/bench/pull/473 [Ansible]&lt;br /&gt;
::*https://github.com/coding-blocks/content-downloader/pull/7 [Python]&lt;br /&gt;
::*https://github.com/fossasia/meilix-generator/pull/110 [HTML, CSS, JavaScript]&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running Sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Collaboration &amp;amp; Testing&#039;&#039;&#039;&lt;br /&gt;
:Sugarizer already works really well when deployed locally on a Raspberry Pi and Neighbourhood view is also functional. &lt;br /&gt;
:*On completion of Goal #1, the image build will be tested at real Sugarizer deployments with the help of the community.&lt;br /&gt;
&lt;br /&gt;
====Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:::::::::::::::::::&#039;&#039;&amp;lt;small&amp;gt;Fig. mockup for a Heroku Button in README.md&amp;lt;/small&amp;gt;&#039;&#039;&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server and Ansible installer for IIAB already exist, this will not take long.&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
*Discuss and reshape the Timeline after discussion with my mentor(s).&lt;br /&gt;
*Investigate the causes of MongoDB crashes faced by Sugarizer users and formulate a solution.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Analyze Sugarizer performance on the Raspberry Pi using parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use &#039;&#039;&#039;hostapd&#039;&#039;&#039; and &#039;&#039;&#039;dnsmasq&#039;&#039;&#039; to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on the Raspberry Pi image and the build scripts and publish them.&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android and iOS apps.&lt;br /&gt;
*Implement and test on multiple Android devices/tablets.&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*The aim is to remove the possibility of data loss during after updates.&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
*The project should ideally be 90% complete by the end of June. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test Heroku Button deployment.&lt;br /&gt;
*Test the Sugarizer School Box Raspberry Pi image at real Sugarizer deployments with the help of the community.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue working on the Bash + Docker script.&lt;br /&gt;
*Use Packer or Terraform on the script to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Take help from the community for testing the scripts on a larger scale.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Keep a final buffer week for added tasks.&lt;br /&gt;
*Prepare final submissions.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon&#039;&#039;&#039; - mohayon75@gmail.com (Potential GSoC Mentor)&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson&#039;&#039;&#039; - tony_anderson@usa.net - http://schoolserver.org/&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody&#039;&#039;&#039; - tim@timmoody.com - http://internet-in-a-box.org/&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences, progress and plans for the next week through it.&lt;br /&gt;
:During the coding period, I&#039;ll attend the Development Team Meetings and will also be available on IRC (#sugar) when I&#039;m working.&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Desktop projects or the Sugar Web projects so for a relevant screening task, you can check a Sugarizer deployment I’ve done at http://rishabhn.xyz:8080/&lt;br /&gt;
&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:Well, the most significant learning experience I can recollect is when I learned how to “learn”.&lt;br /&gt;
:This is something entirely personal as different individuals require different learning methods.&lt;br /&gt;
:I don’t remember exactly when or how I found out but I finally realized that I can learn only by “doing” and not by reading or writing about concepts.&lt;br /&gt;
&lt;br /&gt;
:Now, I just use that concept to try learning whatever I need to. It’s all about getting your hands dirty and putting in the work.&lt;br /&gt;
&lt;br /&gt;
====Tell us something about yourself that will make us like you more.====&lt;br /&gt;
:*I believe I’m a good candidate for this project because I’m an avid distro-hopper. The process of merely installing new Linux distributions and setting them up the way I like takes a large chunk of my time. So, the Sugarizer School Box isn’t just some project I’d like to do for GSoC, it’s something I’ll actually enjoy building!&lt;br /&gt;
:*I come from a family of musicians so I’ve turned into an amateur singer and guitar player as I’ve grown up. I also know my way around recording instruments and vocals. If the Sugarizer School Box project didn’t exist, I would have picked a Music Blocks project for sure. Maybe I can work on it sometime in the future! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101608</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101608"/>
		<updated>2018-03-27T15:01:47Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: /* Goal #2: Heroku Button */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Github:&#039;&#039;&#039; https://github.com/rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located in Mumbai, India (UTC +05:30).&lt;br /&gt;
: Work Hours: 5:00 AM to 1:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017 as a part of their Developer Operations team.&lt;br /&gt;
 &lt;br /&gt;
::* I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
::* https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
::* Here’s a PR I made that has some Ansible:&lt;br /&gt;
::* https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
::*https://github.com/frappe/bench/pull/473 [Ansible]&lt;br /&gt;
::*https://github.com/coding-blocks/content-downloader/pull/7 [Python]&lt;br /&gt;
::*https://github.com/fossasia/meilix-generator/pull/110 [HTML, CSS, JavaScript]&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running Sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Collaboration &amp;amp; Testing&#039;&#039;&#039;&lt;br /&gt;
:Sugarizer already works really well when deployed locally on a Raspberry Pi and Neighbourhood view is also functional. &lt;br /&gt;
:*On completion of Goal #1, the image build will be tested at real Sugarizer deployments with the help of the community.&lt;br /&gt;
&lt;br /&gt;
====Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:::::::::::::::::::&#039;&#039;&amp;lt;small&amp;gt;Fig. mockup for a Heroku Button in README.md&amp;lt;/small&amp;gt;&#039;&#039;&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server and Ansible installer for IIAB already exist, this will not take long.&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
*Discuss and reshape the Timeline after discussion with my mentor(s).&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Analyze Sugarizer performance on the Raspberry Pi using parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use &#039;&#039;&#039;hostapd&#039;&#039;&#039; and &#039;&#039;&#039;dnsmasq&#039;&#039;&#039; to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on the Raspberry Pi image and the build scripts and publish them.&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android and iOS apps.&lt;br /&gt;
*Implement and test on multiple Android devices/tablets.&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*The aim is to remove the possibility of data loss during after updates.&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test Heroku Button deployment.&lt;br /&gt;
*Test the Sugarizer School Box Raspberry Pi image at real &#039;&#039;&#039;Sugarizer deployments&#039;&#039;&#039; with the help of the community.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue working on the Bash + Docker script.&lt;br /&gt;
*Use Packer or Terraform on the script to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Take help from the community for testing the scripts on a larger scale.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Keep a final buffer week for added tasks.&lt;br /&gt;
*Prepare final submissions.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon&#039;&#039;&#039; - mohayon75@gmail.com (Potential GSoC Mentor)&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson&#039;&#039;&#039; - tony_anderson@usa.net - http://schoolserver.org/&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody&#039;&#039;&#039; - tim@timmoody.com - http://internet-in-a-box.org/&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences, progress and plans for the next week through it.&lt;br /&gt;
:During the coding period, I&#039;ll attend the Development Team Meetings and will also be available on IRC (#sugar) when I&#039;m working.&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Desktop projects or the Sugar Web projects so for a relevant screening task, you can check a Sugarizer deployment I’ve done at http://rishabhn.xyz:8080/&lt;br /&gt;
&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:Well, the most significant learning experience I can recollect is when I learned how to “learn”.&lt;br /&gt;
:This is something entirely personal as different individuals require different learning methods.&lt;br /&gt;
:I don’t remember exactly when or how I found out but I finally realized that I can learn only by “doing” and not by reading or writing about concepts.&lt;br /&gt;
&lt;br /&gt;
:Now, I just use that concept to try learning whatever I need to. It’s all about getting your hands dirty and putting in the work.&lt;br /&gt;
&lt;br /&gt;
====Tell us something about yourself that will make us like you more.====&lt;br /&gt;
:*I believe I’m a good candidate for this project because I’m an avid distro-hopper. The process of merely installing new Linux distributions and setting them up the way I like takes a large chunk of my time. So, the Sugarizer School Box isn’t just some project I’d like to do for GSoC, it’s something I’ll actually enjoy building!&lt;br /&gt;
:*I come from a family of musicians so I’ve turned into an amateur singer and guitar player as I’ve grown up. I also know my way around recording instruments and vocals. If the Sugarizer School Box project didn’t exist, I would have picked a Music Blocks project for sure. Maybe I can work on it sometime in the future! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101607</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101607"/>
		<updated>2018-03-27T14:59:16Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: /* About Me */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Github:&#039;&#039;&#039; https://github.com/rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located in Mumbai, India (UTC +05:30).&lt;br /&gt;
: Work Hours: 5:00 AM to 1:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017 as a part of their Developer Operations team.&lt;br /&gt;
 &lt;br /&gt;
::* I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
::* https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
::* Here’s a PR I made that has some Ansible:&lt;br /&gt;
::* https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
::*https://github.com/frappe/bench/pull/473 [Ansible]&lt;br /&gt;
::*https://github.com/coding-blocks/content-downloader/pull/7 [Python]&lt;br /&gt;
::*https://github.com/fossasia/meilix-generator/pull/110 [HTML, CSS, JavaScript]&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running Sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Collaboration &amp;amp; Testing&#039;&#039;&#039;&lt;br /&gt;
:Sugarizer already works really well when deployed locally on a Raspberry Pi and Neighbourhood view is also functional. &lt;br /&gt;
:*On completion of Goal #1, the image build will be tested at real Sugarizer deployments with the help of the community.&lt;br /&gt;
&lt;br /&gt;
====Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server and Ansible installer for IIAB already exist, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
*Discuss and reshape the Timeline after discussion with my mentor(s).&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Analyze Sugarizer performance on the Raspberry Pi using parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use &#039;&#039;&#039;hostapd&#039;&#039;&#039; and &#039;&#039;&#039;dnsmasq&#039;&#039;&#039; to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on the Raspberry Pi image and the build scripts and publish them.&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android and iOS apps.&lt;br /&gt;
*Implement and test on multiple Android devices/tablets.&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*The aim is to remove the possibility of data loss during after updates.&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test Heroku Button deployment.&lt;br /&gt;
*Test the Sugarizer School Box Raspberry Pi image at real &#039;&#039;&#039;Sugarizer deployments&#039;&#039;&#039; with the help of the community.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue working on the Bash + Docker script.&lt;br /&gt;
*Use Packer or Terraform on the script to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Take help from the community for testing the scripts on a larger scale.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Keep a final buffer week for added tasks.&lt;br /&gt;
*Prepare final submissions.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon&#039;&#039;&#039; - mohayon75@gmail.com (Potential GSoC Mentor)&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson&#039;&#039;&#039; - tony_anderson@usa.net - http://schoolserver.org/&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody&#039;&#039;&#039; - tim@timmoody.com - http://internet-in-a-box.org/&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences, progress and plans for the next week through it.&lt;br /&gt;
:During the coding period, I&#039;ll attend the Development Team Meetings and will also be available on IRC (#sugar) when I&#039;m working.&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Desktop projects or the Sugar Web projects so for a relevant screening task, you can check a Sugarizer deployment I’ve done at http://rishabhn.xyz:8080/&lt;br /&gt;
&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:Well, the most significant learning experience I can recollect is when I learned how to “learn”.&lt;br /&gt;
:This is something entirely personal as different individuals require different learning methods.&lt;br /&gt;
:I don’t remember exactly when or how I found out but I finally realized that I can learn only by “doing” and not by reading or writing about concepts.&lt;br /&gt;
&lt;br /&gt;
:Now, I just use that concept to try learning whatever I need to. It’s all about getting your hands dirty and putting in the work.&lt;br /&gt;
&lt;br /&gt;
====Tell us something about yourself that will make us like you more.====&lt;br /&gt;
:*I believe I’m a good candidate for this project because I’m an avid distro-hopper. The process of merely installing new Linux distributions and setting them up the way I like takes a large chunk of my time. So, the Sugarizer School Box isn’t just some project I’d like to do for GSoC, it’s something I’ll actually enjoy building!&lt;br /&gt;
:*I come from a family of musicians so I’ve turned into an amateur singer and guitar player as I’ve grown up. I also know my way around recording instruments and vocals. If the Sugarizer School Box project didn’t exist, I would have picked a Music Blocks project for sure. Maybe I can work on it sometime in the future! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101582</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101582"/>
		<updated>2018-03-23T15:42:18Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: /* Miscellaneous */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located in Mumbai, India (UTC +05:30).&lt;br /&gt;
: Work Hours: 5:00 AM to 1:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017 as a part of their Developer Operations team.&lt;br /&gt;
 &lt;br /&gt;
::* I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
::* https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
::* Here’s a PR I made that has some Ansible:&lt;br /&gt;
::* https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running Sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Collaboration &amp;amp; Testing&#039;&#039;&#039;&lt;br /&gt;
:Sugarizer already works really well when deployed locally on a Raspberry Pi and Neighbourhood view is also functional. &lt;br /&gt;
:*On completion of Goal #1, the image build will be tested at real Sugarizer deployments with the help of the community.&lt;br /&gt;
&lt;br /&gt;
====Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server and Ansible installer for IIAB already exist, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
*Discuss and reshape the Timeline after discussion with my mentor(s).&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Analyze Sugarizer performance on the Raspberry Pi using parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use &#039;&#039;&#039;hostapd&#039;&#039;&#039; and &#039;&#039;&#039;dnsmasq&#039;&#039;&#039; to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on the Raspberry Pi image and the build scripts and publish them.&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android and iOS apps.&lt;br /&gt;
*Implement and test on multiple Android devices/tablets.&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*The aim is to remove the possibility of data loss during after updates.&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test Heroku Button deployment.&lt;br /&gt;
*Test the Sugarizer School Box Raspberry Pi image at real &#039;&#039;&#039;Sugarizer deployments&#039;&#039;&#039; with the help of the community.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue working on the Bash + Docker script.&lt;br /&gt;
*Use Packer or Terraform on the script to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Take help from the community for testing the scripts on a larger scale.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Keep a final buffer week for added tasks.&lt;br /&gt;
*Prepare final submissions.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon&#039;&#039;&#039; - mohayon75@gmail.com (Potential GSoC Mentor)&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson&#039;&#039;&#039; - tony_anderson@usa.net - http://schoolserver.org/&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody&#039;&#039;&#039; - tim@timmoody.com - http://internet-in-a-box.org/&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences, progress and plans for the next week through it.&lt;br /&gt;
:During the coding period, I&#039;ll attend the Development Team Meetings and will also be available on IRC (#sugar) when I&#039;m working.&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Desktop projects or the Sugar Web projects so for a relevant screening task, you can check a Sugarizer deployment I’ve done at http://rishabhn.xyz:8080/&lt;br /&gt;
&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:Well, the most significant learning experience I can recollect is when I learned how to “learn”.&lt;br /&gt;
:This is something entirely personal as different individuals require different learning methods.&lt;br /&gt;
:I don’t remember exactly when or how I found out but I finally realized that I can learn only by “doing” and not by reading or writing about concepts.&lt;br /&gt;
&lt;br /&gt;
:Now, I just use that concept to try learning whatever I need to. It’s all about getting your hands dirty and putting in the work.&lt;br /&gt;
&lt;br /&gt;
====Tell us something about yourself that will make us like you more.====&lt;br /&gt;
:*I believe I’m a good candidate for this project because I’m an avid distro-hopper. The process of merely installing new Linux distributions and setting them up the way I like takes a large chunk of my time. So, the Sugarizer School Box isn’t just some project I’d like to do for GSoC, it’s something I’ll actually enjoy building!&lt;br /&gt;
:*I come from a family of musicians so I’ve turned into an amateur singer and guitar player as I’ve grown up. I also know my way around recording instruments and vocals. If the Sugarizer School Box project didn’t exist, I would have picked a Music Blocks project for sure. Maybe I can work on it sometime in the future! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101581</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101581"/>
		<updated>2018-03-22T19:05:44Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: /* About Me */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located in Mumbai, India (UTC +05:30).&lt;br /&gt;
: Work Hours: 5:00 AM to 1:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017 as a part of their Developer Operations team.&lt;br /&gt;
 &lt;br /&gt;
::* I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
::* https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
::* Here’s a PR I made that has some Ansible:&lt;br /&gt;
::* https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running Sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Collaboration &amp;amp; Testing&#039;&#039;&#039;&lt;br /&gt;
:Sugarizer already works really well when deployed locally on a Raspberry Pi and Neighbourhood view is also functional. &lt;br /&gt;
:*On completion of Goal #1, the image build will be tested at real Sugarizer deployments with the help of the community.&lt;br /&gt;
&lt;br /&gt;
====Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server and Ansible installer for IIAB already exist, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
*Discuss and reshape the Timeline after discussion with my mentor(s).&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Analyze Sugarizer performance on the Raspberry Pi using parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use &#039;&#039;&#039;hostapd&#039;&#039;&#039; and &#039;&#039;&#039;dnsmasq&#039;&#039;&#039; to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on the Raspberry Pi image and the build scripts and publish them.&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android and iOS apps.&lt;br /&gt;
*Implement and test on multiple Android devices/tablets.&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*The aim is to remove the possibility of data loss during after updates.&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test Heroku Button deployment.&lt;br /&gt;
*Test the Sugarizer School Box Raspberry Pi image at real &#039;&#039;&#039;Sugarizer deployments&#039;&#039;&#039; with the help of the community.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue working on the Bash + Docker script.&lt;br /&gt;
*Use Packer or Terraform on the script to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Take help from the community for testing the scripts on a larger scale.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Keep a final buffer week for added tasks.&lt;br /&gt;
*Prepare final submissions.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon&#039;&#039;&#039; - mohayon75@gmail.com (Potential GSoC Mentor)&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson&#039;&#039;&#039; - tony_anderson@usa.net - http://schoolserver.org/&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody&#039;&#039;&#039; - tim@timmoody.com - http://internet-in-a-box.org/&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences, progress and plans for the next week through it.&lt;br /&gt;
:During the coding period, I&#039;ll attend the Development Team Meetings and will also be available on IRC (#sugar) when I&#039;m working.&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Desktop projects or the Sugar Web projects so for a relevant screening task, you can check a Sugarizer deployment I’ve done at http://rishabhn.xyz:8080/&lt;br /&gt;
&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:Well, the most significant learning experience I can recollect is when I learned how to “learn”.&lt;br /&gt;
:This is something entirely personal as different individuals require different learning methods.&lt;br /&gt;
:I don’t remember exactly when or how I found out but I finally realized that I can learn only by “doing” and not by reading or writing about concepts.&lt;br /&gt;
&lt;br /&gt;
:Now, I just use that concept to try learning whatever I need to. It’s all about getting your hands dirty and putting in the work.&lt;br /&gt;
&lt;br /&gt;
====More questions I&#039;d like to ask====&lt;br /&gt;
&lt;br /&gt;
:*I&#039;ve taken a lot of freedom in making the timeline and I&#039;m not sure if I&#039;ve given enough time to the important things.&lt;br /&gt;
:*If something I&#039;ve given time to isn&#039;t very important then we could replace that something else.&lt;br /&gt;
:*Would you like to see even more implementation details? (I&#039;ve added some in the Timeline).&lt;br /&gt;
:*I&#039;d love to receive any feedback from the community!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101580</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101580"/>
		<updated>2018-03-22T19:04:32Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: /* Miscellaneous */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located in Mumbai, India (UTC +05:30).&lt;br /&gt;
: Work Hours: 5:00 AM to 1:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
::* I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
::* https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
::* Here’s a PR I made that has some Ansible:&lt;br /&gt;
::* https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running Sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Collaboration &amp;amp; Testing&#039;&#039;&#039;&lt;br /&gt;
:Sugarizer already works really well when deployed locally on a Raspberry Pi and Neighbourhood view is also functional. &lt;br /&gt;
:*On completion of Goal #1, the image build will be tested at real Sugarizer deployments with the help of the community.&lt;br /&gt;
&lt;br /&gt;
====Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server and Ansible installer for IIAB already exist, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
*Discuss and reshape the Timeline after discussion with my mentor(s).&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Analyze Sugarizer performance on the Raspberry Pi using parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use &#039;&#039;&#039;hostapd&#039;&#039;&#039; and &#039;&#039;&#039;dnsmasq&#039;&#039;&#039; to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on the Raspberry Pi image and the build scripts and publish them.&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android and iOS apps.&lt;br /&gt;
*Implement and test on multiple Android devices/tablets.&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*The aim is to remove the possibility of data loss during after updates.&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test Heroku Button deployment.&lt;br /&gt;
*Test the Sugarizer School Box Raspberry Pi image at real &#039;&#039;&#039;Sugarizer deployments&#039;&#039;&#039; with the help of the community.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue working on the Bash + Docker script.&lt;br /&gt;
*Use Packer or Terraform on the script to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Take help from the community for testing the scripts on a larger scale.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Keep a final buffer week for added tasks.&lt;br /&gt;
*Prepare final submissions.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon&#039;&#039;&#039; - mohayon75@gmail.com (Potential GSoC Mentor)&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson&#039;&#039;&#039; - tony_anderson@usa.net - http://schoolserver.org/&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody&#039;&#039;&#039; - tim@timmoody.com - http://internet-in-a-box.org/&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences, progress and plans for the next week through it.&lt;br /&gt;
:During the coding period, I&#039;ll attend the Development Team Meetings and will also be available on IRC (#sugar) when I&#039;m working.&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Desktop projects or the Sugar Web projects so for a relevant screening task, you can check a Sugarizer deployment I’ve done at http://rishabhn.xyz:8080/&lt;br /&gt;
&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:Well, the most significant learning experience I can recollect is when I learned how to “learn”.&lt;br /&gt;
:This is something entirely personal as different individuals require different learning methods.&lt;br /&gt;
:I don’t remember exactly when or how I found out but I finally realized that I can learn only by “doing” and not by reading or writing about concepts.&lt;br /&gt;
&lt;br /&gt;
:Now, I just use that concept to try learning whatever I need to. It’s all about getting your hands dirty and putting in the work.&lt;br /&gt;
&lt;br /&gt;
====More questions I&#039;d like to ask====&lt;br /&gt;
&lt;br /&gt;
:*I&#039;ve taken a lot of freedom in making the timeline and I&#039;m not sure if I&#039;ve given enough time to the important things.&lt;br /&gt;
:*If something I&#039;ve given time to isn&#039;t very important then we could replace that something else.&lt;br /&gt;
:*Would you like to see even more implementation details? (I&#039;ve added some in the Timeline).&lt;br /&gt;
:*I&#039;d love to receive any feedback from the community!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101575</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101575"/>
		<updated>2018-03-21T16:49:38Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: /* Workload Analysis for sugarizer-server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located in Mumbai, India (UTC +05:30).&lt;br /&gt;
: Work Hours: 5:00 AM to 1:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
::* I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
::* https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
::* Here’s a PR I made that has some Ansible:&lt;br /&gt;
::* https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running Sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Collaboration &amp;amp; Testing&#039;&#039;&#039;&lt;br /&gt;
:Sugarizer already works really well when deployed locally on a Raspberry Pi and Neighbourhood view is also functional. &lt;br /&gt;
:*On completion of Goal #1, the image build will be tested at real Sugarizer deployments with the help of the community.&lt;br /&gt;
&lt;br /&gt;
====Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server and Ansible installer for IIAB already exist, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
*Discuss and reshape the Timeline after discussion with my mentor(s).&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Analyze Sugarizer performance on the Raspberry Pi using parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use &#039;&#039;&#039;hostapd&#039;&#039;&#039; and &#039;&#039;&#039;dnsmasq&#039;&#039;&#039; to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on the Raspberry Pi image and the build scripts and publish them.&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android and iOS apps.&lt;br /&gt;
*Implement and test on multiple Android devices/tablets.&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*The aim is to remove the possibility of data loss during after updates.&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test Heroku Button deployment.&lt;br /&gt;
*Test the Sugarizer School Box Raspberry Pi image at real &#039;&#039;&#039;Sugarizer deployments&#039;&#039;&#039; with the help of the community.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue working on the Bash + Docker script.&lt;br /&gt;
*Use Packer or Terraform on the script to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Take help from the community for testing the scripts on a larger scale.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Keep a final buffer week for added tasks.&lt;br /&gt;
*Prepare final submissions.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon&#039;&#039;&#039; - mohayon75@gmail.com (Potential GSoC Mentor)&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson&#039;&#039;&#039; - tony_anderson@usa.net - http://schoolserver.org/&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody&#039;&#039;&#039; - tim@timmoody.com - http://internet-in-a-box.org/&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences, progress and plans for the next week through it.&lt;br /&gt;
:During the coding period, I&#039;ll attend the Development Team Meetings and will also be available on IRC (#sugar) when I&#039;m working.&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Web projects or the Sugar projects.&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Locustsugarizersmaller.png|center]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Workload Analysis for sugarizer-server====&lt;br /&gt;
:I&#039;ve been testing the page load times for some activities using Locust, a user load testing tool written in Python that lets you test site performance by swarming it with users. &lt;br /&gt;
:This will fulfill one of the tasks in the node.js performance analysis of sugarizer-server which lets us know the size of the file download per page/activity and response times as the number of users increases.This analysis will be important when I run them on the Raspberry Pi WiFi AP along with the other tasks in parallel. I will try to replace this section with a more complete analysis as soon as possible. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;PS:&#039;&#039; &#039;&#039;This screenshot is not a good indicator of real-world performance because:&#039;&#039;&lt;br /&gt;
::* 300 users&lt;br /&gt;
::* 30 requests/second&lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:Well, the most significant learning experience I can recollect is when I learned how to “learn”.&lt;br /&gt;
:This is something entirely personal as different individuals require different learning methods.&lt;br /&gt;
:I don’t remember exactly when or how I found out but I finally realized that I can learn only by “doing” and not by reading or writing about concepts.&lt;br /&gt;
&lt;br /&gt;
:Now, I just use that concept to try learning whatever I need to. It’s all about getting your hands dirty and putting in the work.&lt;br /&gt;
&lt;br /&gt;
====More questions I&#039;d like to ask====&lt;br /&gt;
&lt;br /&gt;
:*I&#039;ve taken a lot of freedom in making the timeline and I&#039;m not sure if I&#039;ve given enough time to the important things.&lt;br /&gt;
:*If something I&#039;ve given time to isn&#039;t very important then we could replace that something else.&lt;br /&gt;
:*Would you like to see even more implementation details? (I&#039;ve added some in the Timeline).&lt;br /&gt;
:*I&#039;d love to receive any feedback from the community!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101574</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101574"/>
		<updated>2018-03-21T11:58:58Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: /* Answers from the Community */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located in Mumbai, India (UTC +05:30).&lt;br /&gt;
: Work Hours: 5:00 AM to 1:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
::* I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
::* https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
::* Here’s a PR I made that has some Ansible:&lt;br /&gt;
::* https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running Sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Collaboration &amp;amp; Testing&#039;&#039;&#039;&lt;br /&gt;
:Sugarizer already works really well when deployed locally on a Raspberry Pi and Neighbourhood view is also functional. &lt;br /&gt;
:*On completion of Goal #1, the image build will be tested at real Sugarizer deployments with the help of the community.&lt;br /&gt;
&lt;br /&gt;
====Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server and Ansible installer for IIAB already exist, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
*Discuss and reshape the Timeline after discussion with my mentor(s).&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Analyze Sugarizer performance on the Raspberry Pi using parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use &#039;&#039;&#039;hostapd&#039;&#039;&#039; and &#039;&#039;&#039;dnsmasq&#039;&#039;&#039; to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on the Raspberry Pi image and the build scripts and publish them.&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android and iOS apps.&lt;br /&gt;
*Implement and test on multiple Android devices/tablets.&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*The aim is to remove the possibility of data loss during after updates.&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test Heroku Button deployment.&lt;br /&gt;
*Test the Sugarizer School Box Raspberry Pi image at real &#039;&#039;&#039;Sugarizer deployments&#039;&#039;&#039; with the help of the community.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue working on the Bash + Docker script.&lt;br /&gt;
*Use Packer or Terraform on the script to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Take help from the community for testing the scripts on a larger scale.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Keep a final buffer week for added tasks.&lt;br /&gt;
*Prepare final submissions.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon&#039;&#039;&#039; - mohayon75@gmail.com (Potential GSoC Mentor)&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson&#039;&#039;&#039; - tony_anderson@usa.net - http://schoolserver.org/&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody&#039;&#039;&#039; - tim@timmoody.com - http://internet-in-a-box.org/&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences, progress and plans for the next week through it.&lt;br /&gt;
:During the coding period, I&#039;ll attend the Development Team Meetings and will also be available on IRC (#sugar) when I&#039;m working.&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Web projects or the Sugar projects.&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Locustsugarizersmaller.png|center]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Workload Analysis for sugarizer-server====&lt;br /&gt;
:I&#039;ve been testing the page load times for some activities using Locust, a user load testing tool written in Python that lets you test site performance by swarming it with users. &lt;br /&gt;
:This will fulfill one of the tasks in the node.js performance analysis of sugarizer-server which lets us know the size of the file download per page/activity and response times as the number of users increases.This analysis will be important when I run them on the Raspberry Pi WiFi AP along with the other tasks in parallel. I will try to replace this section with a more complete analysis before the final proposal. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;PS:&#039;&#039; &#039;&#039;This screenshot is not a good indicator of real-world performance because:&#039;&#039;&lt;br /&gt;
::* 300 users&lt;br /&gt;
::* 30 requests/second&lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:Well, the most significant learning experience I can recollect is when I learned how to “learn”.&lt;br /&gt;
:This is something entirely personal as different individuals require different learning methods.&lt;br /&gt;
:I don’t remember exactly when or how I found out but I finally realized that I can learn only by “doing” and not by reading or writing about concepts.&lt;br /&gt;
&lt;br /&gt;
:Now, I just use that concept to try learning whatever I need to. It’s all about getting your hands dirty and putting in the work.&lt;br /&gt;
&lt;br /&gt;
====More questions I&#039;d like to ask====&lt;br /&gt;
&lt;br /&gt;
:*I&#039;ve taken a lot of freedom in making the timeline and I&#039;m not sure if I&#039;ve given enough time to the important things.&lt;br /&gt;
:*If something I&#039;ve given time to isn&#039;t very important then we could replace that something else.&lt;br /&gt;
:*Would you like to see even more implementation details? (I&#039;ve added some in the Timeline).&lt;br /&gt;
:*I&#039;d love to receive any feedback from the community!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101573</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101573"/>
		<updated>2018-03-21T11:49:26Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: /* Timeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located in Mumbai, India (UTC +05:30).&lt;br /&gt;
: Work Hours: 5:00 AM to 1:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
::* I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
::* https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
::* Here’s a PR I made that has some Ansible:&lt;br /&gt;
::* https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running Sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Collaboration &amp;amp; Testing&#039;&#039;&#039;&lt;br /&gt;
:Sugarizer already works really well when deployed locally on a Raspberry Pi and Neighbourhood view is also functional. &lt;br /&gt;
:*On completion of Goal #1, the image build will be tested at real Sugarizer deployments with the help of the community.&lt;br /&gt;
&lt;br /&gt;
====Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server and Ansible installer for IIAB already exist, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
*Discuss and reshape the Timeline after discussion with my mentor(s).&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Analyze Sugarizer performance on the Raspberry Pi using parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use &#039;&#039;&#039;hostapd&#039;&#039;&#039; and &#039;&#039;&#039;dnsmasq&#039;&#039;&#039; to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on the Raspberry Pi image and the build scripts and publish them.&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android and iOS apps.&lt;br /&gt;
*Implement and test on multiple Android devices/tablets.&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*The aim is to remove the possibility of data loss during after updates.&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test Heroku Button deployment.&lt;br /&gt;
*Test the Sugarizer School Box Raspberry Pi image at real &#039;&#039;&#039;Sugarizer deployments&#039;&#039;&#039; with the help of the community.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue working on the Bash + Docker script.&lt;br /&gt;
*Use Packer or Terraform on the script to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Take help from the community for testing the scripts on a larger scale.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Keep a final buffer week for added tasks.&lt;br /&gt;
*Prepare final submissions.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon&#039;&#039;&#039; - mohayon75@gmail.com (Potential GSoC Mentor)&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson&#039;&#039;&#039; - tony_anderson@usa.net - http://schoolserver.org/&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody&#039;&#039;&#039; - tim@timmoody.com - http://internet-in-a-box.org/&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences, progress and plans for the next week through it.&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Web projects or the Sugar projects.&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Locustsugarizersmaller.png|center]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Workload Analysis for sugarizer-server====&lt;br /&gt;
:I&#039;ve been testing the page load times for some activities using Locust, a user load testing tool written in Python that lets you test site performance by swarming it with users. &lt;br /&gt;
:This will fulfill one of the tasks in the node.js performance analysis of sugarizer-server which lets us know the size of the file download per page/activity and response times as the number of users increases.This analysis will be important when I run them on the Raspberry Pi WiFi AP along with the other tasks in parallel. I will try to replace this section with a more complete analysis before the final proposal. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;PS:&#039;&#039; &#039;&#039;This screenshot is not a good indicator of real-world performance because:&#039;&#039;&lt;br /&gt;
::* 300 users&lt;br /&gt;
::* 30 requests/second&lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:Well, the most significant learning experience I can recollect is when I learned how to “learn”.&lt;br /&gt;
:This is something entirely personal as different individuals require different learning methods.&lt;br /&gt;
:I don’t remember exactly when or how I found out but I finally realized that I can learn only by “doing” and not by reading or writing about concepts.&lt;br /&gt;
&lt;br /&gt;
:Now, I just use that concept to try learning whatever I need to. It’s all about getting your hands dirty and putting in the work.&lt;br /&gt;
&lt;br /&gt;
====More questions I&#039;d like to ask====&lt;br /&gt;
&lt;br /&gt;
:*I&#039;ve taken a lot of freedom in making the timeline and I&#039;m not sure if I&#039;ve given enough time to the important things.&lt;br /&gt;
:*If something I&#039;ve given time to isn&#039;t very important then we could replace that something else.&lt;br /&gt;
:*Would you like to see even more implementation details? (I&#039;ve added some in the Timeline).&lt;br /&gt;
:*I&#039;d love to receive any feedback from the community!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101572</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101572"/>
		<updated>2018-03-21T11:44:18Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: /* Timeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located in Mumbai, India (UTC +05:30).&lt;br /&gt;
: Work Hours: 5:00 AM to 1:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
::* I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
::* https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
::* Here’s a PR I made that has some Ansible:&lt;br /&gt;
::* https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running Sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Collaboration &amp;amp; Testing&#039;&#039;&#039;&lt;br /&gt;
:Sugarizer already works really well when deployed locally on a Raspberry Pi and Neighbourhood view is also functional. &lt;br /&gt;
:*On completion of Goal #1, the image build will be tested at real Sugarizer deployments with the help of the community.&lt;br /&gt;
&lt;br /&gt;
====Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server and Ansible installer for IIAB already exist, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
*Discuss and reshape the Timeline after discussion with my mentor(s).&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Analyze Sugarizer performance on the Raspberry Pi using parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use &#039;&#039;&#039;hostapd&#039;&#039;&#039; and &#039;&#039;&#039;dnsmasq&#039;&#039;&#039; to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on the Raspberry Pi image and the build scripts and publish them.&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android and iOS apps.&lt;br /&gt;
*Implement and test on multiple Android devices/tablets.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*The aim is to remove the possibility of data loss during after updates.&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test Heroku Button deployment.&lt;br /&gt;
*Test the Sugarizer School Box Raspberry Pi image at real &#039;&#039;&#039;Sugarizer deployments&#039;&#039;&#039; with the help of the community.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue working on the Bash + Docker script.&lt;br /&gt;
*Use Packer or Terraform on the script to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Take help from the community for testing the scripts on a larger scale.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Keep a final buffer week for added tasks.&lt;br /&gt;
*Prepare final submissions.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon&#039;&#039;&#039; - mohayon75@gmail.com (Potential GSoC Mentor)&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson&#039;&#039;&#039; - tony_anderson@usa.net - http://schoolserver.org/&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody&#039;&#039;&#039; - tim@timmoody.com - http://internet-in-a-box.org/&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences, progress and plans for the next week through it.&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Web projects or the Sugar projects.&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Locustsugarizersmaller.png|center]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Workload Analysis for sugarizer-server====&lt;br /&gt;
:I&#039;ve been testing the page load times for some activities using Locust, a user load testing tool written in Python that lets you test site performance by swarming it with users. &lt;br /&gt;
:This will fulfill one of the tasks in the node.js performance analysis of sugarizer-server which lets us know the size of the file download per page/activity and response times as the number of users increases.This analysis will be important when I run them on the Raspberry Pi WiFi AP along with the other tasks in parallel. I will try to replace this section with a more complete analysis before the final proposal. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;PS:&#039;&#039; &#039;&#039;This screenshot is not a good indicator of real-world performance because:&#039;&#039;&lt;br /&gt;
::* 300 users&lt;br /&gt;
::* 30 requests/second&lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:Well, the most significant learning experience I can recollect is when I learned how to “learn”.&lt;br /&gt;
:This is something entirely personal as different individuals require different learning methods.&lt;br /&gt;
:I don’t remember exactly when or how I found out but I finally realized that I can learn only by “doing” and not by reading or writing about concepts.&lt;br /&gt;
&lt;br /&gt;
:Now, I just use that concept to try learning whatever I need to. It’s all about getting your hands dirty and putting in the work.&lt;br /&gt;
&lt;br /&gt;
====More questions I&#039;d like to ask====&lt;br /&gt;
&lt;br /&gt;
:*I&#039;ve taken a lot of freedom in making the timeline and I&#039;m not sure if I&#039;ve given enough time to the important things.&lt;br /&gt;
:*If something I&#039;ve given time to isn&#039;t very important then we could replace that something else.&lt;br /&gt;
:*Would you like to see even more implementation details? (I&#039;ve added some in the Timeline).&lt;br /&gt;
:*I&#039;d love to receive any feedback from the community!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101571</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101571"/>
		<updated>2018-03-21T11:28:50Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: /* Answers from the Community */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located in Mumbai, India (UTC +05:30).&lt;br /&gt;
: Work Hours: 5:00 AM to 1:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
::* I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
::* https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
::* Here’s a PR I made that has some Ansible:&lt;br /&gt;
::* https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running Sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Collaboration &amp;amp; Testing&#039;&#039;&#039;&lt;br /&gt;
:Sugarizer already works really well when deployed locally on a Raspberry Pi and Neighbourhood view is also functional. &lt;br /&gt;
:*On completion of Goal #1, the image build will be tested at real Sugarizer deployments with the help of the community.&lt;br /&gt;
&lt;br /&gt;
====Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server and Ansible installer for IIAB already exist, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
*Finish node.js performance analysis for Sugarizer-server and post the results for the community. &lt;br /&gt;
*The analysis includes parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use &#039;&#039;&#039;hostapd&#039;&#039;&#039; and &#039;&#039;&#039;dnsmasq&#039;&#039;&#039; to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*Images should be available to the community and for testing.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on the Raspberry Pi image and the build scripts and publish them.&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android and iOS apps.&lt;br /&gt;
*Implement and test on multiple Android devices/tablets.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*The aim is to remove the possibility of data loss during after updates.&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test Heroku Button deployment.&lt;br /&gt;
*Test the Sugarizer School Box Raspberry Pi image at real &#039;&#039;&#039;Sugarizer deployments&#039;&#039;&#039; with the help of the community.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Use Packer or Terraform on the Bash + Docker script written in Week 9 to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Take help from the community for testing the scripts on a larger scale.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Keep a final buffer week for added tasks.&lt;br /&gt;
*Prepare final submissions.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon&#039;&#039;&#039; - mohayon75@gmail.com (Potential GSoC Mentor)&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson&#039;&#039;&#039; - tony_anderson@usa.net - http://schoolserver.org/&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody&#039;&#039;&#039; - tim@timmoody.com - http://internet-in-a-box.org/&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences, progress and plans for the next week through it.&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Web projects or the Sugar projects.&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Locustsugarizersmaller.png|center]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Workload Analysis for sugarizer-server====&lt;br /&gt;
:I&#039;ve been testing the page load times for some activities using Locust, a user load testing tool written in Python that lets you test site performance by swarming it with users. &lt;br /&gt;
:This will fulfill one of the tasks in the node.js performance analysis of sugarizer-server which lets us know the size of the file download per page/activity and response times as the number of users increases.This analysis will be important when I run them on the Raspberry Pi WiFi AP along with the other tasks in parallel. I will try to replace this section with a more complete analysis before the final proposal. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;PS:&#039;&#039; &#039;&#039;This screenshot is not a good indicator of real-world performance because:&#039;&#039;&lt;br /&gt;
::* 300 users&lt;br /&gt;
::* 30 requests/second&lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:Well, the most significant learning experience I can recollect is when I learned how to “learn”.&lt;br /&gt;
:This is something entirely personal as different individuals require different learning methods.&lt;br /&gt;
:I don’t remember exactly when or how I found out but I finally realized that I can learn only by “doing” and not by reading or writing about concepts.&lt;br /&gt;
&lt;br /&gt;
:Now, I just use that concept to try learning whatever I need to. It’s all about getting your hands dirty and putting in the work.&lt;br /&gt;
&lt;br /&gt;
====More questions I&#039;d like to ask====&lt;br /&gt;
&lt;br /&gt;
:*I&#039;ve taken a lot of freedom in making the timeline and I&#039;m not sure if I&#039;ve given enough time to the important things.&lt;br /&gt;
:*If something I&#039;ve given time to isn&#039;t very important then we could replace that something else.&lt;br /&gt;
:*Would you like to see even more implementation details? (I&#039;ve added some in the Timeline).&lt;br /&gt;
:*I&#039;d love to receive any feedback from the community!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101570</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101570"/>
		<updated>2018-03-21T10:35:18Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: /* About Me */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located in Mumbai, India (UTC +05:30).&lt;br /&gt;
: Work Hours: 5:00 AM to 1:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
::* I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
::* https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
::* Here’s a PR I made that has some Ansible:&lt;br /&gt;
::* https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running Sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Collaboration &amp;amp; Testing&#039;&#039;&#039;&lt;br /&gt;
:Sugarizer already works really well when deployed locally on a Raspberry Pi and Neighbourhood view is also functional. &lt;br /&gt;
:*On completion of Goal #1, the image build will be tested at real Sugarizer deployments with the help of the community.&lt;br /&gt;
&lt;br /&gt;
====Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server and Ansible installer for IIAB already exist, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
*Finish node.js performance analysis for Sugarizer-server and post the results for the community. &lt;br /&gt;
*The analysis includes parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use &#039;&#039;&#039;hostapd&#039;&#039;&#039; and &#039;&#039;&#039;dnsmasq&#039;&#039;&#039; to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*Images should be available to the community and for testing.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on the Raspberry Pi image and the build scripts and publish them.&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android and iOS apps.&lt;br /&gt;
*Implement and test on multiple Android devices/tablets.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*The aim is to remove the possibility of data loss during after updates.&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test Heroku Button deployment.&lt;br /&gt;
*Test the Sugarizer School Box Raspberry Pi image at real &#039;&#039;&#039;Sugarizer deployments&#039;&#039;&#039; with the help of the community.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Use Packer or Terraform on the Bash + Docker script written in Week 9 to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Take help from the community for testing the scripts on a larger scale.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Keep a final buffer week for added tasks.&lt;br /&gt;
*Prepare final submissions.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon&#039;&#039;&#039; - mohayon75@gmail.com (Potential GSoC Mentor)&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson&#039;&#039;&#039; - tony_anderson@usa.net - http://schoolserver.org/&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody&#039;&#039;&#039; - tim@timmoody.com - http://internet-in-a-box.org/&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences and progress through it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Web projects or the Sugar projects.&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Locustsugarizersmaller.png|center]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Workload Analysis for sugarizer-server====&lt;br /&gt;
:I&#039;ve been testing the page load times for some activities using Locust, a user load testing tool written in Python that lets you test site performance by swarming it with users. &lt;br /&gt;
:This will fulfill one of the tasks in the node.js performance analysis of sugarizer-server which lets us know the size of the file download per page/activity and response times as the number of users increases.This analysis will be important when I run them on the Raspberry Pi WiFi AP along with the other tasks in parallel. I will try to replace this section with a more complete analysis before the final proposal. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;PS:&#039;&#039; &#039;&#039;This screenshot is not a good indicator of real-world performance because:&#039;&#039;&lt;br /&gt;
::* 300 users&lt;br /&gt;
::* 30 requests/second&lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:Well, the most significant learning experience I can recollect is when I learned how to “learn”.&lt;br /&gt;
:This is something entirely personal as different individuals require different learning methods.&lt;br /&gt;
:I don’t remember exactly when or how I found out but I finally realized that I can learn only by “doing” and not by reading or writing about concepts.&lt;br /&gt;
&lt;br /&gt;
:Now, I just use that concept to try learning whatever I need to. It’s all about getting your hands dirty and putting in the work.&lt;br /&gt;
&lt;br /&gt;
====More questions I&#039;d like to ask====&lt;br /&gt;
&lt;br /&gt;
:*I&#039;ve taken a lot of freedom in making the timeline and I&#039;m not sure if I&#039;ve given enough time to the important things.&lt;br /&gt;
:*If something I&#039;ve given time to isn&#039;t very important then we could replace that something else.&lt;br /&gt;
:*Would you like to see even more implementation details? (I&#039;ve added some in the Timeline).&lt;br /&gt;
:*I&#039;d love to receive any feedback from the community!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101539</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101539"/>
		<updated>2018-03-19T12:06:49Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: /* About Me */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located in Mumbai, India (UTC +05:30).&lt;br /&gt;
: Work Hours: 5:00 AM to 1:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:* I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
:* I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
:* https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
:* Here’s a PR I made that has some Ansible:&lt;br /&gt;
:* https://github.com/frappe/bench/pull/473/&lt;br /&gt;
:* I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running Sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Collaboration &amp;amp; Testing&#039;&#039;&#039;&lt;br /&gt;
:Sugarizer already works really well when deployed locally on a Raspberry Pi and Neighbourhood view is also functional. &lt;br /&gt;
:*On completion of Goal #1, the image build will be tested at real Sugarizer deployments with the help of the community.&lt;br /&gt;
&lt;br /&gt;
====Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server and Ansible installer for IIAB already exist, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
*Finish node.js performance analysis for Sugarizer-server and post the results for the community. &lt;br /&gt;
*The analysis includes parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use &#039;&#039;&#039;hostapd&#039;&#039;&#039; and &#039;&#039;&#039;dnsmasq&#039;&#039;&#039; to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*Images should be available to the community and for testing.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on the Raspberry Pi image and the build scripts and publish them.&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android and iOS apps.&lt;br /&gt;
*Implement and test on multiple Android devices/tablets.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*The aim is to remove the possibility of data loss during after updates.&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test Heroku Button deployment.&lt;br /&gt;
*Test the Sugarizer School Box Raspberry Pi image at real &#039;&#039;&#039;Sugarizer deployments&#039;&#039;&#039; with the help of the community.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Use Packer or Terraform on the Bash + Docker script written in Week 9 to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Take help from the community for testing the scripts on a larger scale.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Keep a final buffer week for added tasks.&lt;br /&gt;
*Prepare final submissions.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon&#039;&#039;&#039; - mohayon75@gmail.com (Potential GSoC Mentor)&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson&#039;&#039;&#039; - tony_anderson@usa.net - http://schoolserver.org/&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody&#039;&#039;&#039; - tim@timmoody.com - http://internet-in-a-box.org/&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences and progress through it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Web projects or the Sugar projects.&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Locustsugarizersmaller.png|center]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Workload Analysis for sugarizer-server====&lt;br /&gt;
:I&#039;ve been testing the page load times for some activities using Locust, a user load testing tool written in Python that lets you test site performance by swarming it with users. &lt;br /&gt;
:This will fulfill one of the tasks in the node.js performance analysis of sugarizer-server which lets us know the size of the file download per page/activity and response times as the number of users increases.This analysis will be important when I run them on the Raspberry Pi WiFi AP along with the other tasks in parallel. I will try to replace this section with a more complete analysis before the final proposal. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;PS:&#039;&#039; &#039;&#039;This screenshot is not a good indicator of real-world performance because:&#039;&#039;&lt;br /&gt;
::* 300 users&lt;br /&gt;
::* 30 requests/second&lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:Well, the most significant learning experience I can recollect is when I learned how to “learn”.&lt;br /&gt;
:This is something entirely personal as different individuals require different learning methods.&lt;br /&gt;
:I don’t remember exactly when or how I found out but I finally realized that I can learn only by “doing” and not by reading or writing about concepts.&lt;br /&gt;
&lt;br /&gt;
:Now, I just use that concept to try learning whatever I need to. It’s all about getting your hands dirty and putting in the work.&lt;br /&gt;
&lt;br /&gt;
====More questions I&#039;d like to ask====&lt;br /&gt;
&lt;br /&gt;
:*I&#039;ve taken a lot of freedom in making the timeline and I&#039;m not sure if I&#039;ve given enough time to the important things.&lt;br /&gt;
:*If something I&#039;ve given time to isn&#039;t very important then we could replace that something else.&lt;br /&gt;
:*Would you like to see even more implementation details? (I&#039;ve added some in the Timeline).&lt;br /&gt;
:*I&#039;d love to receive any feedback from the community!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101527</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101527"/>
		<updated>2018-03-18T10:22:56Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located in Mumbai, India (UTC +05:30).&lt;br /&gt;
: Work Hours: 5:00 AM to 2:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:* I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
:* I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
:* https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
:* Here’s a PR I made that has some Ansible:&lt;br /&gt;
:* https://github.com/frappe/bench/pull/473/&lt;br /&gt;
:* I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running Sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Collaboration &amp;amp; Testing&#039;&#039;&#039;&lt;br /&gt;
:Sugarizer already works really well when deployed locally on a Raspberry Pi and Neighbourhood view is also functional. &lt;br /&gt;
:*On completion of Goal #1, the image build will be tested at real Sugarizer deployments with the help of the community.&lt;br /&gt;
&lt;br /&gt;
====Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server and Ansible installer for IIAB already exist, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
*Finish node.js performance analysis for Sugarizer-server and post the results for the community. &lt;br /&gt;
*The analysis includes parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use &#039;&#039;&#039;hostapd&#039;&#039;&#039; and &#039;&#039;&#039;dnsmasq&#039;&#039;&#039; to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*Images should be available to the community and for testing.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on the Raspberry Pi image and the build scripts and publish them.&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android and iOS apps.&lt;br /&gt;
*Implement and test on multiple Android devices/tablets.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*The aim is to remove the possibility of data loss during after updates.&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test Heroku Button deployment.&lt;br /&gt;
*Test the Sugarizer School Box Raspberry Pi image at real &#039;&#039;&#039;Sugarizer deployments&#039;&#039;&#039; with the help of the community.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Use Packer or Terraform on the Bash + Docker script written in Week 9 to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Take help from the community for testing the scripts on a larger scale.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Keep a final buffer week for added tasks.&lt;br /&gt;
*Prepare final submissions.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon&#039;&#039;&#039; - mohayon75@gmail.com (Potential GSoC Mentor)&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson&#039;&#039;&#039; - tony_anderson@usa.net - http://schoolserver.org/&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody&#039;&#039;&#039; - tim@timmoody.com - http://internet-in-a-box.org/&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences and progress through it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Web projects or the Sugar projects.&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Locustsugarizersmaller.png|center]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Workload Analysis for sugarizer-server====&lt;br /&gt;
:I&#039;ve been testing the page load times for some activities using Locust, a user load testing tool written in Python that lets you test site performance by swarming it with users. &lt;br /&gt;
:This will fulfill one of the tasks in the node.js performance analysis of sugarizer-server which lets us know the size of the file download per page/activity and response times as the number of users increases.This analysis will be important when I run them on the Raspberry Pi WiFi AP along with the other tasks in parallel. I will try to replace this section with a more complete analysis before the final proposal. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;PS:&#039;&#039; &#039;&#039;This screenshot is not a good indicator of real-world performance because:&#039;&#039;&lt;br /&gt;
::* 300 users&lt;br /&gt;
::* 30 requests/second&lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:Well, the most significant learning experience I can recollect is when I learned how to “learn”.&lt;br /&gt;
:This is something entirely personal as different individuals require different learning methods.&lt;br /&gt;
:I don’t remember exactly when or how I found out but I finally realized that I can learn only by “doing” and not by reading or writing about concepts.&lt;br /&gt;
&lt;br /&gt;
:Now, I just use that concept to try learning whatever I need to. It’s all about getting your hands dirty and putting in the work.&lt;br /&gt;
&lt;br /&gt;
====More questions I&#039;d like to ask====&lt;br /&gt;
&lt;br /&gt;
:*I&#039;ve taken a lot of freedom in making the timeline and I&#039;m not sure if I&#039;ve given enough time to the important things.&lt;br /&gt;
:*If something I&#039;ve given time to isn&#039;t very important then we could replace that something else.&lt;br /&gt;
:*Would you like to see even more implementation details? (I&#039;ve added some in the Timeline).&lt;br /&gt;
:*I&#039;d love to receive any feedback from the community!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101525</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101525"/>
		<updated>2018-03-18T04:47:36Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located in Mumbai, India (UTC +05:30).&lt;br /&gt;
: Work Hours: 5:00 AM to 2:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:* I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
:* I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
:* https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
:* Here’s a PR I made that has some Ansible:&lt;br /&gt;
:* https://github.com/frappe/bench/pull/473/&lt;br /&gt;
:* I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running Sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Collaboration &amp;amp; Testing&#039;&#039;&#039;&lt;br /&gt;
:Sugarizer already works really well when deployed locally on a Raspberry Pi and Neighbourhood view is also functional. &lt;br /&gt;
:*On completion of Goal #1, the image build will be tested at real Sugarizer deployments with the help of the community.&lt;br /&gt;
&lt;br /&gt;
====Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server and Ansible installer for IIAB already exist, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Finish node.js performance analysis for Sugarizer-server and post the results for the community. &lt;br /&gt;
*The analysis includes parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use &#039;&#039;&#039;hostapd&#039;&#039;&#039; and &#039;&#039;&#039;dnsmasq&#039;&#039;&#039; to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*Images should be available to the community and for testing.&lt;br /&gt;
*Publish the Raspberry Pi image and the build scripts.&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
*Use the remaining week to make other improvements and fix issues that crop up during Week 3.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*Monitoring&lt;br /&gt;
:*Development Workflow with CI&lt;br /&gt;
:*Run updates using pm2&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
&lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android/iOS client apps.&lt;br /&gt;
*Test the working of the Sugarizer School Box with every possible type of client.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test the Sugarizer School Box Raspberry Pi image at real &#039;&#039;&#039;Sugarizer deployments&#039;&#039;&#039; with the help of the community.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Use Packer or Terraform on the Bash + Docker script written in Week 8 to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* Buffer week for finding more issues and preparing the final submission.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon&#039;&#039;&#039; - mohayon75@gmail.com (Potential GSoC Mentor)&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson&#039;&#039;&#039; - tony_anderson@usa.net - http://schoolserver.org/&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody&#039;&#039;&#039; - tim@timmoody.com - http://internet-in-a-box.org/&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences and progress through it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Web projects or the Sugar projects.&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Locustsugarizersmaller.png|center]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Workload Analysis for sugarizer-server====&lt;br /&gt;
:I&#039;ve been testing the page load times for some activities using Locust, a user load testing tool written in Python that lets you test site performance by swarming it with users. &lt;br /&gt;
:This will fulfill one of the tasks in the node.js performance analysis of sugarizer-server which lets us know the size of the file download per page/activity and response times as the number of users increases.This analysis will be important when I run them on the Raspberry Pi WiFi AP along with the other tasks in parallel. I will try to replace this section with a more complete analysis before the final proposal. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;PS:&#039;&#039; &#039;&#039;This screenshot is not a good indicator of real-world performance because:&#039;&#039;&lt;br /&gt;
::* 300 users&lt;br /&gt;
::* 30 requests/second&lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:in-progress&lt;br /&gt;
&lt;br /&gt;
====More questions I&#039;d like to ask====&lt;br /&gt;
&lt;br /&gt;
:*I&#039;ve taken a lot of freedom in making the timeline and I&#039;m not sure if I&#039;ve given enough time to the important things.&lt;br /&gt;
:*If something I&#039;ve given time to isn&#039;t very important then we could replace that something else.&lt;br /&gt;
:*Would you like to see even more implementation details? (I&#039;ve added some in the Timeline).&lt;br /&gt;
:*I&#039;d love to receive any feedback from the community!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101515</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101515"/>
		<updated>2018-03-17T06:23:43Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located in Mumbai, India (UTC +05:30).&lt;br /&gt;
: Work Hours: 5:00 AM to 2:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:* I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
:* I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
:* https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
:* Here’s a PR I made that has some Ansible:&lt;br /&gt;
:* https://github.com/frappe/bench/pull/473/&lt;br /&gt;
:* I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running Sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Collaboration &amp;amp; Testing&#039;&#039;&#039;&lt;br /&gt;
:Sugarizer already works really well when deployed locally on a Raspberry Pi and Neighbourhood view is also functional. &lt;br /&gt;
:*On completion of Goal #1, the image build will be tested at real Sugarizer deployments with the help of the community.&lt;br /&gt;
&lt;br /&gt;
====Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server and Ansible installer for IIAB already exist, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Finish node.js performance analysis for Sugarizer-server and post the results for the community. &lt;br /&gt;
*The analysis includes parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use hostapd and dnsmasq to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*Images should be available to the community and for testing.&lt;br /&gt;
*Publish the Raspberry Pi image and the build scripts.&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
*Use the remaining week to make other improvements and fix issues that crop up during Week 3.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*Monitoring&lt;br /&gt;
:*Development Workflow with CI&lt;br /&gt;
:*Run updates using pm2&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
&lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android/iOS client apps.&lt;br /&gt;
*Test the working of the Sugarizer School Box with every possible type of client.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test the Sugarizer School Box Raspberry Pi image at real Sugarizer deployments with the help of the community.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Use Packer or Terraform on the Bash + Docker script written in Week 8 to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* Buffer week for finding more issues and preparing the final submission.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon&#039;&#039;&#039; - mohayon75@gmail.com (Potential GSoC Mentor)&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson&#039;&#039;&#039; - tony_anderson@usa.net - http://schoolserver.org/&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody&#039;&#039;&#039; - tim@timmoody.com - http://internet-in-a-box.org/&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences and progress through it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Web projects or the Sugar projects.&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Locustsugarizersmaller.png|center]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Workload Analysis for sugarizer-server====&lt;br /&gt;
:I&#039;ve been testing the page load times for some activities using Locust, a user load testing tool written in Python that lets you test site performance by swarming it with users. &lt;br /&gt;
:This will fulfill one of the tasks in the node.js performance analysis of sugarizer-server which lets us know the size of the file download per page/activity and response times as the number of users increases.This analysis will be important when I run them on the Raspberry Pi WiFi AP along with the other tasks in parallel. I will try to replace this section with a more complete analysis before the final proposal. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;PS:&#039;&#039; &#039;&#039;This screenshot is not a good indicator of real-world performance because:&#039;&#039;&lt;br /&gt;
::* 300 users&lt;br /&gt;
::* 30 requests/second&lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:in-progress&lt;br /&gt;
&lt;br /&gt;
====More questions I&#039;d like to ask====&lt;br /&gt;
&lt;br /&gt;
:*I&#039;ve taken a lot of freedom in making the timeline and I&#039;m not sure if I&#039;ve given enough time to the important things.&lt;br /&gt;
:*If something I&#039;ve given time to isn&#039;t very important then we could replace that something else.&lt;br /&gt;
:*Would you like to see even more implementation details? (I&#039;ve added some in the Timeline).&lt;br /&gt;
:*I&#039;d love to receive any feedback from the community!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101514</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101514"/>
		<updated>2018-03-17T05:59:06Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: minor timeline edits&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located in Mumbai, India (UTC +05:30).&lt;br /&gt;
: Work Hours: 5:00 AM to 2:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:* I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
:* I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
:* https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
:* Here’s a PR I made that has some Ansible:&lt;br /&gt;
:* https://github.com/frappe/bench/pull/473/&lt;br /&gt;
:* I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running Sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Collaboration&#039;&#039;&#039;&lt;br /&gt;
:Sugarizer already works really well when deployed locally on a Raspberry Pi and Neighbourhood view is also functional. &lt;br /&gt;
&lt;br /&gt;
====Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server and Ansible installer for IIAB already exist, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Finish node.js performance analysis for Sugarizer-server and post the results for the community. &lt;br /&gt;
*The analysis includes parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use hostapd and dnsmasq to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*Images should be available to the community and for testing.&lt;br /&gt;
*Publish the Raspberry Pi image and the build scripts.&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
*Use the remaining week to make other improvements and fix issues that crop up during Week 3.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*Monitoring&lt;br /&gt;
:*Development Workflow with CI&lt;br /&gt;
:*Run updates using pm2&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
&lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android/iOS client apps.&lt;br /&gt;
*Test the working of the Sugarizer School Box with every possible type of client.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test the Sugarizer School Box Raspberry Pi image at real Sugarizer deployments with the help of the community.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Use Packer or Terraform on the Bash + Docker script written in Week 8 to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* Buffer week for finding more issues and preparing the final submission.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon&#039;&#039;&#039; - mohayon75@gmail.com (Potential GSoC Mentor)&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson&#039;&#039;&#039; - tony_anderson@usa.net - http://schoolserver.org/&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody&#039;&#039;&#039; - tim@timmoody.com - http://internet-in-a-box.org/&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences and progress through it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Web projects or the Sugar projects.&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Locustsugarizersmaller.png|center]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Workload Analysis for sugarizer-server====&lt;br /&gt;
:I&#039;ve been testing the page load times for some activities using Locust, a user load testing tool written in Python that lets you test site performance by swarming it with users. &lt;br /&gt;
:This will fulfill one of the tasks in the node.js performance analysis of sugarizer-server which lets us know the size of the file download per page/activity and response times as the number of users increases.This analysis will be important when I run them on the Raspberry Pi WiFi AP along with the other tasks in parallel. I will try to replace this section with a more complete analysis before the final proposal. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;PS:&#039;&#039; &#039;&#039;This screenshot is not a good indicator of real-world performance because:&#039;&#039;&lt;br /&gt;
::* 300 users&lt;br /&gt;
::* 30 requests/second&lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:in-progress&lt;br /&gt;
&lt;br /&gt;
====More questions I&#039;d like to ask====&lt;br /&gt;
&lt;br /&gt;
:*I&#039;ve taken a lot of freedom in making the timeline and I&#039;m not sure if I&#039;ve given enough time to the important things.&lt;br /&gt;
:*If something I&#039;ve given time to isn&#039;t very important then we could replace that something else.&lt;br /&gt;
:*Would you like to see even more implementation details? (I&#039;ve added some in the Timeline).&lt;br /&gt;
:*I&#039;d love to receive any feedback from the community!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101493</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101493"/>
		<updated>2018-03-16T17:21:49Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: minor edit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located in Mumbai, India (UTC +05:30).&lt;br /&gt;
: Work Hours: 5:00 AM to 2:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:* I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
:* I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
:* https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
:* Here’s a PR I made that has some Ansible:&lt;br /&gt;
:* https://github.com/frappe/bench/pull/473/&lt;br /&gt;
:* I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running Sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Collaboration&#039;&#039;&#039;&lt;br /&gt;
:Sugarizer already works really well when deployed locally on a Raspberry Pi and Neighbourhood view is also functional. &lt;br /&gt;
&lt;br /&gt;
====Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server and Ansible installer for IIAB already exist, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Finish node.js performance analysis for Sugarizer-server and post the results for the community. &lt;br /&gt;
*The analysis includes parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use hostapd and dnsmasq to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*Images should be available to the community and for testing.&lt;br /&gt;
*Publish the Raspberry Pi image and the build scripts.&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
*Use the remaining week to make other improvements and fix issues that crop up during Week 3.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*Monitoring&lt;br /&gt;
:*Development Workflow with CI&lt;br /&gt;
:*Run updates using pm2&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
&lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android/iOS client apps.&lt;br /&gt;
*Test the working of the Sugarizer School Box with every possible type of client.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Use Packer or Terraform on the Bash + Docker script written in Week 8 to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If all previous objectives are achieved, explore setting up a CI tool to improve the project and look for avenues where CI can help.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* Buffer week for finding more issues and preparing the final submission.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon&#039;&#039;&#039; - mohayon75@gmail.com (Potential GSoC Mentor)&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson&#039;&#039;&#039; - tony_anderson@usa.net - http://schoolserver.org/&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody&#039;&#039;&#039; - tim@timmoody.com - http://internet-in-a-box.org/&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences and progress through it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Web projects or the Sugar projects.&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Locustsugarizersmaller.png|center]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Workload Analysis for sugarizer-server====&lt;br /&gt;
:I&#039;ve been testing the page load times for some activities using Locust, a user load testing tool written in Python that lets you test site performance by swarming it with users. &lt;br /&gt;
:This will fulfill one of the tasks in the node.js performance analysis of sugarizer-server which lets us know the size of the file download per page/activity and response times as the number of users increases.This analysis will be important when I run them on the Raspberry Pi WiFi AP along with the other tasks in parallel. I will try to replace this section with a more complete analysis before the final proposal. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;PS:&#039;&#039; &#039;&#039;This screenshot is not a good indicator of real-world performance because:&#039;&#039;&lt;br /&gt;
::* 300 users&lt;br /&gt;
::* 30 requests/second&lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:in-progress&lt;br /&gt;
&lt;br /&gt;
====More questions I&#039;d like to ask====&lt;br /&gt;
&lt;br /&gt;
:*I&#039;ve taken a lot of freedom in making the timeline and I&#039;m not sure if I&#039;ve given enough time to the important things.&lt;br /&gt;
:*If something I&#039;ve given time to isn&#039;t very important then we could replace that something else.&lt;br /&gt;
:*Would you like to see even more implementation details? (I&#039;ve added some in the Timeline).&lt;br /&gt;
:*I&#039;d love to receive any feedback from the community!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101463</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101463"/>
		<updated>2018-03-15T13:20:42Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: minor formatting edits&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located in Mumbai, India (UTC +05:30).&lt;br /&gt;
: Work Hours: 5:00 AM to 2:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:* I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
:* I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
:* https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
:* Here’s a PR I made that has some Ansible:&lt;br /&gt;
:* https://github.com/frappe/bench/pull/473/&lt;br /&gt;
:* I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running Sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
====Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server and Ansible installer for IIAB already exist, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Finish node.js performance analysis for Sugarizer-server and post the results for the community. &lt;br /&gt;
*The analysis includes parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use hostapd and dnsmasq to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*Images should be available to the community and for testing.&lt;br /&gt;
*Publish the Raspberry Pi image and the build scripts.&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
*Use the remaining week to make other improvements and fix issues that crop up during Week 3.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*Monitoring&lt;br /&gt;
:*Development Workflow with CI&lt;br /&gt;
:*Run updates using pm2&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
&lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android/iOS client apps.&lt;br /&gt;
*Test the working of the Sugarizer School Box with every possible type of client.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Use Packer or Terraform on the Bash + Docker script written in Week 8 to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If all previous objectives are achieved, explore setting up a CI tool to improve the project and look for avenues where CI can help.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* Buffer week for finding more issues and preparing the final submission.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon&#039;&#039;&#039; - mohayon75@gmail.com (Potential GSoC Mentor)&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson&#039;&#039;&#039; - tony_anderson@usa.net - http://schoolserver.org/&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody&#039;&#039;&#039; - tim@timmoody.com - http://internet-in-a-box.org/&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences and progress through it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Web projects or the Sugar projects.&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Locustsugarizersmaller.png|center]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Workload Analysis for sugarizer-server====&lt;br /&gt;
:I&#039;ve been testing the page load times for some activities using Locust, a user load testing tool written in Python that lets you test site performance by swarming it with users. &lt;br /&gt;
:This will fulfill one of the tasks in the node.js performance analysis of sugarizer-server which lets us know the size of the file download per page/activity and response times as the number of users increases.This analysis will be important when I run them on the Raspberry Pi WiFi AP along with the other tasks in parallel. I will try to replace this section with a more complete analysis before the final proposal. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;PS:&#039;&#039; &#039;&#039;This screenshot is not a good indicator of real-world performance because:&#039;&#039;&lt;br /&gt;
::* 300 users&lt;br /&gt;
::* 30 requests/second&lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:in-progress&lt;br /&gt;
&lt;br /&gt;
====More questions I&#039;d like to ask====&lt;br /&gt;
&lt;br /&gt;
:*I&#039;ve taken a lot of freedom in making the timeline and I&#039;m not sure if I&#039;ve given enough time to the important things.&lt;br /&gt;
:*If something I&#039;ve given time to isn&#039;t very important then we could replace that something else.&lt;br /&gt;
:*Would you like to see even more implementation details? (I&#039;ve added some in the Timeline).&lt;br /&gt;
:*I&#039;d love to receive any feedback from the community!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101460</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101460"/>
		<updated>2018-03-15T09:13:38Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located at Mumbai, India (UTC +05:30)&lt;br /&gt;
: Work Hours: 5:00 AM to 2:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
: I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
: https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
: Here’s a PR I made that has some Ansible:&lt;br /&gt;
: https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
==== Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server already exists, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Finish node.js performance analysis for Sugarizer-server and post the results for the community. &lt;br /&gt;
*The analysis includes parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use hostapd and dnsmasq to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*Images should be available to the community and for testing.&lt;br /&gt;
*Publish the Raspberry Pi image and the build scripts.&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
*Use the remaining week to make other improvements and fix issues that crop up during Week 3.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*Monitoring&lt;br /&gt;
:*Development Workflow with CI&lt;br /&gt;
:*Run updates using pm2&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
&lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android/iOS client apps.&lt;br /&gt;
*Test the working of the Sugarizer School Box with every possible type of client.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Use Packer or Terraform on the Bash + Docker script written in Week 8 to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If all previous objectives are achieved, explore setting up a CI tool to improve the project and look for avenues where CI can help.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* Buffer week for finding more issues and preparing the final submission.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
===If the project is successfully completed, what will be its impact on the Sugar Labs community?===&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon - mohayon75@gmail.com (Potential GSoC Mentor)&#039;&#039;&#039;&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson - tony_anderson@usa.net http://schoolserver.org/&#039;&#039;&#039;&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody - tim@timmoody.com - http://internet-in-a-box.org/&#039;&#039;&#039;&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences and progress through it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Web projects or the Sugar projects.&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Locustsugarizersmaller.png|center]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Workload Analysis for sugarizer-server====&lt;br /&gt;
:I&#039;ve been testing the page load times for some activities using Locust, a user load testing tool written in Python that lets you test site performance by swarming it with users. &lt;br /&gt;
:This will fulfill one of the tasks in the node.js performance analysis of sugarizer-server which lets us know the size of the file download per page/activity and response times as the number of users increases.This analysis will be important when I run them on the Raspberry Pi WiFi AP along with the other tasks in parallel. I will try to replace this section with a more complete analysis before the final proposal. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;PS:&#039;&#039; &#039;&#039;This screenshot is not a good indicator of real-world performance because:&#039;&#039;&lt;br /&gt;
::* 300 users&lt;br /&gt;
::* 30 requests/second&lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:working-on-it&lt;br /&gt;
&lt;br /&gt;
====More questions I&#039;d like to ask====&lt;br /&gt;
&lt;br /&gt;
:I&#039;ve taken a lot of freedom in making the timeline and I&#039;m not sure if I&#039;ve given enough time to the important things.&lt;br /&gt;
:If something I&#039;ve given time to isn&#039;t very important then we could replace that with setting up CI wherever it&#039;s required.&lt;br /&gt;
:I&#039;d love to receive feedback from the community!&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101459</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101459"/>
		<updated>2018-03-15T09:08:14Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: minor edit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sugarizer School Box - GSoC &#039;18  =&lt;br /&gt;
&lt;br /&gt;
=== About Me ===&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located at Mumbai, India (UTC +05:30)&lt;br /&gt;
: Work Hours: 5:00 AM to 2:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
: I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
: https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
: Here’s a PR I made that has some Ansible:&lt;br /&gt;
: https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Project Description =&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
==== Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server already exists, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Finish node.js performance analysis for Sugarizer-server and post the results for the community. &lt;br /&gt;
*The analysis includes parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use hostapd and dnsmasq to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*Images should be available to the community and for testing.&lt;br /&gt;
*Publish the Raspberry Pi image and the build scripts.&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
*Use the remaining week to make other improvements and fix issues that crop up during Week 3.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*Monitoring&lt;br /&gt;
:*Development Workflow with CI&lt;br /&gt;
:*Run updates using pm2&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
&lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android/iOS client apps.&lt;br /&gt;
*Test the working of the Sugarizer School Box with every possible type of client.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Use Packer or Terraform on the Bash + Docker script written in Week 8 to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If all previous objectives are achieved, explore setting up a CI tool to improve the project and look for avenues where CI can help.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* Buffer week for finding more issues and preparing the final submission.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
:*I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:*This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:*Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:*In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
= The Project and the Community =&lt;br /&gt;
&lt;br /&gt;
===If the project is successfully completed, what will be its impact on the Sugar Labs community?===&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon - mohayon75@gmail.com (Potential GSoC Mentor)&#039;&#039;&#039;&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson - tony_anderson@usa.net http://schoolserver.org/&#039;&#039;&#039;&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody - tim@timmoody.com - http://internet-in-a-box.org/&#039;&#039;&#039;&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences and progress through it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous =&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Web projects or the Sugar projects.&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Locustsugarizersmaller.png|center]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Workload Analysis for sugarizer-server====&lt;br /&gt;
:I&#039;ve been testing the page load times for some activities using Locust, a user load testing tool written in Python that lets you test site performance by swarming it with users. &lt;br /&gt;
:This will fulfill one of the tasks in the node.js performance analysis of sugarizer-server which lets us know the size of the file download per page/activity and response times as the number of users increases.This analysis will be important when I run them on the Raspberry Pi WiFi AP along with the other tasks in parallel. I will try to replace this section with a more complete analysis before the final proposal. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;PS:&#039;&#039; &#039;&#039;This screenshot is not a good indicator of real-world performance because:&#039;&#039;&lt;br /&gt;
::* 300 users&lt;br /&gt;
::* 30 requests/second&lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:working-on-it&lt;br /&gt;
&lt;br /&gt;
====More questions I&#039;d like to ask====&lt;br /&gt;
&lt;br /&gt;
:I&#039;ve taken a lot of freedom in making the timeline and I&#039;m not sure if I&#039;ve given enough time to the important things.&lt;br /&gt;
:If something I&#039;ve given time to isn&#039;t very important then we could replace that with setting up CI wherever it&#039;s required.&lt;br /&gt;
:I&#039;d love to receive feedback from the community!&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101454</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101454"/>
		<updated>2018-03-15T05:10:28Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: minor edits&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC &#039;18 =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Name: Sugarizer School Box ==&lt;br /&gt;
&lt;br /&gt;
=== About Me ===&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located at Mumbai, India (UTC +05:30)&lt;br /&gt;
: Work Hours: 5:00 AM to 2:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
: I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
: https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
: Here’s a PR I made that has some Ansible:&lt;br /&gt;
: https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sugarizer School Box ===&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images with build scripts ====&lt;br /&gt;
:&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
:Improvements to the Internet-In-A-Box [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for Sugarizer will also be made in this section. &lt;br /&gt;
:This will include making sure that the IIAB playbook uses the latest version of sugarizer with all available functionality and ensuring that it works.&lt;br /&gt;
&lt;br /&gt;
==== Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server already exists, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Timeline===&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Finish node.js performance analysis for Sugarizer-server and post the results for the community. &lt;br /&gt;
*The analysis includes parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. &lt;br /&gt;
*Use hostapd and dnsmasq to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*Images should be available to the community and for testing.&lt;br /&gt;
*Publish the Raspberry Pi image and the build scripts.&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensuring that it works. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
*Use the remaining week to make other improvements and fix issues that crop up during Week 3.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability.&lt;br /&gt;
:*Monitoring&lt;br /&gt;
:*Development Workflow with CI&lt;br /&gt;
:*Run updates using pm2&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
&lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android/iOS client apps.&lt;br /&gt;
*Test the working of the Sugarizer School Box with every possible type of client.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. &lt;br /&gt;
*Use Packer or Terraform on the Bash + Docker script written in Week 8 to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If all previous objectives are achieved, explore setting up a CI tool to improve the project and look for avenues where CI can help.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* Buffer week for finding more issues and preparing the final submission.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, [https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
:Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
=== Project and the Community ===&lt;br /&gt;
&lt;br /&gt;
===If the project is successfully completed, what will be its impact on the Sugar Labs community?===&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=== Answers from the Community ===&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon - mohayon75@gmail.com (Potential GSoC Mentor)&#039;&#039;&#039;&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson - tony_anderson@usa.net http://schoolserver.org/&#039;&#039;&#039;&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody - tim@timmoody.com - http://internet-in-a-box.org/&#039;&#039;&#039;&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences and progress through it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous ===&lt;br /&gt;
&lt;br /&gt;
====Setting up a Development Environment====&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Web projects or the Sugar projects.&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Locustsugarizersmaller.png|center]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Workload Analysis for sugarizer-server====&lt;br /&gt;
:I&#039;ve been testing the page load times for some activities using Locust, a user load testing tool written in Python that lets you test site performance by swarming it with users. &lt;br /&gt;
:This will fulfill one of the tasks in the node.js performance analysis of sugarizer-server which lets us know the size of the file download per page/activity and response times as the number of users increases.This analysis will be important when I run them on the Raspberry Pi WiFi AP along with the other tasks in parallel. I will try to replace this section with a more complete analysis before the final proposal. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;PS:&#039;&#039; &#039;&#039;This screenshot is not a good indicator of real-world performance because:&#039;&#039;&lt;br /&gt;
::* 300 users&lt;br /&gt;
::* 30 requests/second&lt;br /&gt;
&lt;br /&gt;
====Describe a great learning experience you had as a child.====&lt;br /&gt;
&lt;br /&gt;
:working-on-it&lt;br /&gt;
&lt;br /&gt;
====More questions I&#039;d like to ask====&lt;br /&gt;
&lt;br /&gt;
:I&#039;ve taken a lot of freedom in making the timeline and I&#039;m not sure if I&#039;ve given enough time to the important things.&lt;br /&gt;
:If something I&#039;ve given time to isn&#039;t very important then we could replace that with setting up CI wherever it&#039;s required.&lt;br /&gt;
:I&#039;d love to receive feedback from the community!&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101449</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101449"/>
		<updated>2018-03-14T19:44:24Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC &#039;18 =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Name: Sugarizer School Box ==&lt;br /&gt;
&lt;br /&gt;
=== About Me ===&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located at Mumbai, India (UTC +05:30)&lt;br /&gt;
: Work Hours: 5:00 AM to 2:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
: I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
: https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
: Here’s a PR I made that has some Ansible:&lt;br /&gt;
: https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sugarizer School Box ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images and Improving the Internet-In-A-Box Ansible Installer for Sugarizer ====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server already exists, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Timeline===&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Finish node.js performance analysis for Sugarizer-server and post the results for the community. The analysis includes parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. I will use hostapd and dnsmasq to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*Images should be available to the community and for testing.&lt;br /&gt;
*Publish the Raspberry Pi image and the build scripts.&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensure that it works. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
*Use the remaining week to make other improvements and fix issues that crop up during Week 3.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability. &lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
&lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android/iOS client apps.&lt;br /&gt;
*Test the working of the Sugarizer School Box with every possible type of client.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. *Try to use Packer or Terraform on the Bash + Docker script written in Week 8 to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If all previous objectives are achieved, explore setting up a CI tool to improve the project and look for avenues where CI can help.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* Buffer week for finding more issues and preparing the final submission.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, &lt;br /&gt;
:[https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
&lt;br /&gt;
:Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
=== Project and the Community ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If the project is successfully completed, what will be its impact on the Sugar Labs community?&#039;&#039;&#039;&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===== Answers from the Community=====&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon - mohayon75@gmail.com (Potential GSoC Mentor)&#039;&#039;&#039;&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson - tony_anderson@usa.net http://schoolserver.org/&#039;&#039;&#039;&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody - tim@timmoody.com - http://internet-in-a-box.org/&#039;&#039;&#039;&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences and progress through it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous ===&lt;br /&gt;
&lt;br /&gt;
=====Setting Up a Development Environment=====&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Web projects or the Sugar projects.&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Locustsugarizersmaller.png|center]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Workload analysis for sugarizer-server=====&lt;br /&gt;
:I&#039;ve been testing the page load times for some activities using Locust, a user load testing tool written in Python that lets you test site performance by swarming it with users. &lt;br /&gt;
:This will fulfill one of the tasks in the node.js performance analysis of sugarizer-server which lets us know the size of the file download per page/activity and response times as the number of users increases.This analysis will be important when I run them on the Raspberry Pi WiFi AP along with the other tasks in parallel. I will try to replace this section with a more complete analysis before the final proposal. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;PS:&#039;&#039; &#039;&#039;This screenshot is not a good indicator of real-world performance because:&#039;&#039;&lt;br /&gt;
::* 300 users&lt;br /&gt;
::* 30 requests/second&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:working-on-it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More questions I&#039;d like to ask&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:I wanted to know if I should add more details about the implementation of the tasks in the proposal and I would also love to recieve any kind of feedback from the community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101448</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101448"/>
		<updated>2018-03-14T19:34:32Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC &#039;18 =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Name: Sugarizer School Box ==&lt;br /&gt;
&lt;br /&gt;
=== About Me ===&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located at Mumbai, India (UTC +05:30)&lt;br /&gt;
: Work Hours: 5:00 AM to 2:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
: I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
: https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
: Here’s a PR I made that has some Ansible:&lt;br /&gt;
: https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016 and here are some major PR&#039;s:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sugarizer School Box ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images and Improving the Internet-In-A-Box Ansible Installer for Sugarizer ====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server already exists, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Timeline===&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Finish node.js performance analysis for Sugarizer-server and post the results for the community. The analysis includes parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. I will use hostapd and dnsmasq to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*Images should be available to the community and for testing.&lt;br /&gt;
*Publish the Raspberry Pi image and the build scripts.&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensure that it works. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
*Use the remaining week to make other improvements and fix issues that crop up during Week 3.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability. &lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
&lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android/iOS client apps.&lt;br /&gt;
*Test the working of the Sugarizer School Box with every possible type of client.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. *Try to use Packer or Terraform on the Bash + Docker script written in Week 8 to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If all previous objectives are achieved, explore setting up a CI tool to improve the project and look for avenues where CI can help.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* Buffer week for finding more issues and preparing the final submission.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, &lt;br /&gt;
:[https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
&lt;br /&gt;
:Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
=== Project and the Community ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If the project is successfully completed, what will be its impact on the Sugar Labs community?&#039;&#039;&#039;&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===== Answers from the Community=====&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon - mohayon75@gmail.com (Potential GSoC Mentor)&#039;&#039;&#039;&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson - tony_anderson@usa.net http://schoolserver.org/&#039;&#039;&#039;&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody - tim@timmoody.com - http://internet-in-a-box.org/&#039;&#039;&#039;&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences and progress through it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous ===&lt;br /&gt;
&lt;br /&gt;
=====Setting Up a Development Environment=====&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Web projects or the Sugar projects.&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Locustsugarizersmaller.png|center]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Workload analysis for sugarizer-server=====&lt;br /&gt;
:I&#039;ve been testing the page load times for some activities using Locust, a user load testing tool written in Python that lets you test site performance by swarming it with users. &lt;br /&gt;
:This will fulfill one of the tasks in the node.js performance analysis of sugarizer-server which lets us know the size of the file download per page/activity and response times as the number of users increases.This analysis will be important when I run them on the Raspberry Pi WiFi AP along with the other tasks in parallel. I will try to replace this section with a more complete analysis before the final proposal. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;PS:&#039;&#039; &#039;&#039;This screenshot is not a good indicator of real-world performance because:&#039;&#039;&lt;br /&gt;
::* 300 users&lt;br /&gt;
::* 30 requests/second&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:working-on-it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More questions I&#039;d like to ask&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:I wanted to know if I should add more details about the implementation of the tasks in the proposal and I would also love to recieve any kind of feedback from the community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=File:Locustsugarizersmaller.png&amp;diff=101447</id>
		<title>File:Locustsugarizersmaller.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=File:Locustsugarizersmaller.png&amp;diff=101447"/>
		<updated>2018-03-14T19:34:09Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;locust for sugarizer&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101446</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101446"/>
		<updated>2018-03-14T19:22:02Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: minor edit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC &#039;18 =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Name: Sugarizer School Box ==&lt;br /&gt;
&lt;br /&gt;
=== About Me ===&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located at Mumbai, India (UTC +05:30)&lt;br /&gt;
: Work Hours: 5:00 AM to 2:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
: I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
: https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
: Here’s a PR I made that has some Ansible:&lt;br /&gt;
: https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016 and here are some major PR&#039;s:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sugarizer School Box ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images and Improving the Internet-In-A-Box Ansible Installer for Sugarizer ====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server already exists, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Timeline===&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Finish node.js performance analysis for Sugarizer-server and post the results for the community. The analysis includes parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. I will use hostapd and dnsmasq to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*Images should be available to the community and for testing.&lt;br /&gt;
*Publish the Raspberry Pi image and the build scripts.&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensure that it works. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
*Use the remaining week to make other improvements and fix issues that crop up during Week 3.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability. &lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
&lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android/iOS client apps.&lt;br /&gt;
*Test the working of the Sugarizer School Box with every possible type of client.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. *Try to use Packer or Terraform on the Bash + Docker script written in Week 8 to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If all previous objectives are achieved, explore setting up a CI tool to improve the project and look for avenues where CI can help.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* Buffer week for finding more issues and preparing the final submission.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, &lt;br /&gt;
:[https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
&lt;br /&gt;
:Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
=== Project and the Community ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If the project is successfully completed, what will be its impact on the Sugar Labs community?&#039;&#039;&#039;&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===== Answers from the Community=====&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon - mohayon75@gmail.com (Potential GSoC Mentor)&#039;&#039;&#039;&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson - tony_anderson@usa.net http://schoolserver.org/&#039;&#039;&#039;&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
:&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody - tim@timmoody.com - http://internet-in-a-box.org/&#039;&#039;&#039;&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
:If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
:In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences and progress through it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous ===&lt;br /&gt;
&lt;br /&gt;
=====Setting Up a Development Environment=====&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Web projects or the Sugar projects.&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Locustsugarizer.png|center|locust]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Workload analysis for sugarizer-server=====&lt;br /&gt;
:I&#039;ve been testing the page load times for some activities using Locust, a user load testing tool written in Python that lets you test site performance by swarming it with users. &lt;br /&gt;
:This will fulfill one of the tasks in the node.js performance analysis of sugarizer-server which lets us know the size of the file download per page/activity and response times as the number of users increases.This analysis will be important when I run them on the Raspberry Pi WiFi AP along with the other tasks in parallel. I will try to replace this section with a more complete analysis before the final proposal. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:working-on-it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More questions I&#039;d like to ask&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:I wanted to know if I should add more details about the implementation of the tasks in the proposal and I would also love to recieve any kind of feedback from the community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101445</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101445"/>
		<updated>2018-03-14T19:08:45Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: added heroku button link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC &#039;18 =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Name: Sugarizer School Box ==&lt;br /&gt;
&lt;br /&gt;
=== About Me ===&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located at Mumbai, India (UTC +05:30)&lt;br /&gt;
: Work Hours: 5:00 AM to 2:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
: I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
: https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
: Here’s a PR I made that has some Ansible:&lt;br /&gt;
: https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016 and here are some major PR&#039;s:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sugarizer School Box ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images and Improving the Internet-In-A-Box Ansible Installer for Sugarizer ====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a [https://blog.heroku.com/heroku-button Heroku Button] for sugarizer up and running.&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server already exists, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Timeline===&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Finish node.js performance analysis for Sugarizer-server and post the results for the community. The analysis includes parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. I will use hostapd and dnsmasq to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*Images should be available to the community and for testing.&lt;br /&gt;
*Publish the Raspberry Pi image and the build scripts.&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensure that it works. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
*Use the remaining week to make other improvements and fix issues that crop up during Week 3.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability. &lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
&lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android/iOS client apps.&lt;br /&gt;
*Test the working of the Sugarizer School Box with every possible type of client.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. *Try to use Packer or Terraform on the Bash + Docker script written in Week 8 to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If all previous objectives are achieved, explore setting up a CI tool to improve the project and look for avenues where CI can help.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* Buffer week for finding more issues and preparing the final submission.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
*Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, &lt;br /&gt;
:[https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
&lt;br /&gt;
:Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
=== Project and the Community ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If the project is successfully completed, what will be its impact on the Sugar Labs community?&#039;&#039;&#039;&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
 &lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon - mohayon75@gmail.com (Potential GSoC Mentor)&#039;&#039;&#039;&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson - tony_anderson@usa.net http://schoolserver.org/&#039;&#039;&#039;&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody - tim@timmoody.com - http://internet-in-a-box.org/&#039;&#039;&#039;&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences and progress through it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous ===&lt;br /&gt;
&lt;br /&gt;
=====Setting Up a Development Environment=====&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Web projects or the Sugar projects.&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Locustsugarizer.png|center|locust]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Workload analysis for sugarizer-server=====&lt;br /&gt;
:I&#039;ve been testing the page load times for some activities using Locust, a user load testing tool written in Python that lets you test site performance by swarming it with users. &lt;br /&gt;
:This will fulfill one of the tasks in the node.js performance analysis of sugarizer-server which lets us know the size of the file download per page/activity and response times as the number of users increases.This analysis will be important when I run them on the Raspberry Pi WiFi AP along with the other tasks in parallel. I will try to replace this section with a more complete analysis before the final proposal. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:working-on-it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More questions I&#039;d like to ask&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:I wanted to know if I should add more details about the implementation of the tasks in the proposal and I would also love to recieve any kind of feedback from the community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101444</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101444"/>
		<updated>2018-03-14T19:06:48Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: added more links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC &#039;18 =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Name: Sugarizer School Box ==&lt;br /&gt;
&lt;br /&gt;
=== About Me ===&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located at Mumbai, India (UTC +05:30)&lt;br /&gt;
: Work Hours: 5:00 AM to 2:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called [https://github.com/frappe ERPNext] sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
: I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
: https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
: Here’s a PR I made that has some Ansible:&lt;br /&gt;
: https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016 and here are some major PR&#039;s:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sugarizer School Box ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images and Improving the Internet-In-A-Box Ansible Installer for Sugarizer ====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a Heroku Button for sugarizer up and running. (https://blog.heroku.com/heroku-button).&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server already exists, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Timeline===&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Finish node.js performance analysis for Sugarizer-server and post the results for the community. The analysis includes parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. I will use hostapd and dnsmasq to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*Images should be available to the community and for testing.&lt;br /&gt;
*Publish the Raspberry Pi image and the build scripts.&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensure that it works. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
*Use the remaining week to make other improvements and fix issues that crop up during Week 3.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability. &lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
&lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android/iOS client apps.&lt;br /&gt;
*Test the working of the Sugarizer School Box with every possible type of client.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. *Try to use Packer or Terraform on the Bash + Docker script written in Week 8 to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If all previous objectives are achieved, explore setting up a CI tool to improve the project and look for avenues where CI can help.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* Buffer week for finding more issues and preparing the final submission.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
*Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I mentioned my experience with an open-source organization called [https://github.com/frappe ERPNext] above.  &lt;br /&gt;
&lt;br /&gt;
:In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, &lt;br /&gt;
:[https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
&lt;br /&gt;
:Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:In the summer of 2017, I was at [https://angel.co/cube-consumer-services-1 Cube] as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
=== Project and the Community ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If the project is successfully completed, what will be its impact on the Sugar Labs community?&#039;&#039;&#039;&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com, [https://twitter.com/rish4bhn Twitter]&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
 &lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon - mohayon75@gmail.com (Potential GSoC Mentor)&#039;&#039;&#039;&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson - tony_anderson@usa.net http://schoolserver.org/&#039;&#039;&#039;&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody - tim@timmoody.com - http://internet-in-a-box.org/&#039;&#039;&#039;&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences and progress through it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous ===&lt;br /&gt;
&lt;br /&gt;
=====Setting Up a Development Environment=====&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Web projects or the Sugar projects.&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Locustsugarizer.png|center|locust]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Workload analysis for sugarizer-server=====&lt;br /&gt;
:I&#039;ve been testing the page load times for some activities using Locust, a user load testing tool written in Python that lets you test site performance by swarming it with users. &lt;br /&gt;
:This will fulfill one of the tasks in the node.js performance analysis of sugarizer-server which lets us know the size of the file download per page/activity and response times as the number of users increases.This analysis will be important when I run them on the Raspberry Pi WiFi AP along with the other tasks in parallel. I will try to replace this section with a more complete analysis before the final proposal. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:working-on-it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More questions I&#039;d like to ask&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:I wanted to know if I should add more details about the implementation of the tasks in the proposal and I would also love to recieve any kind of feedback from the community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101443</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101443"/>
		<updated>2018-03-14T19:02:17Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC &#039;18 =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Name: Sugarizer School Box ==&lt;br /&gt;
&lt;br /&gt;
=== About Me ===&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located at Mumbai, India (UTC +05:30)&lt;br /&gt;
: Work Hours: 5:00 AM to 2:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called ERPNext (https://github.com/frappe) sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
: I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
: https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
: Here’s a PR I made that has some Ansible:&lt;br /&gt;
: https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016 and here are some major PR&#039;s:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sugarizer School Box ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images and Improving the Internet-In-A-Box Ansible Installer for Sugarizer ====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a Heroku Button for sugarizer up and running. (https://blog.heroku.com/heroku-button).&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server already exists, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Timeline===&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Finish node.js performance analysis for Sugarizer-server and post the results for the community. The analysis includes parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. I will use hostapd and dnsmasq to create an access point as shown in this [https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md article].&lt;br /&gt;
*This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
:*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
:*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*Images should be available to the community and for testing.&lt;br /&gt;
*Publish the Raspberry Pi image and the build scripts.&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Improve the [https://github.com/iiab/iiab/tree/master/roles/sugarizer Ansible playbook] for installing Sugarizer on the Internet-In-A-Box installer. This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensure that it works. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
*Use the remaining week to make other improvements and fix issues that crop up during Week 3.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore [https://github.com/Unitech/pm2 pm2] as a solution to do solve this or use other features of pm2 to enhance reliability. &lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
&lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
*So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android/iOS client apps.&lt;br /&gt;
*Test the working of the Sugarizer School Box with every possible type of client.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS.This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written [https://github.com/iiab/iiab/tree/master/roles/sugarizer here]. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. *Try to use Packer or Terraform on the Bash + Docker script written in Week 8 to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If all previous objectives are achieved, explore setting up a CI tool to improve the project and look for avenues where CI can help.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* Buffer week for finding more issues and preparing the final submission.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
*Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I mentioned my experience with an open-source organization called ERPNext (https://github.com/frappe) above.  &lt;br /&gt;
&lt;br /&gt;
:In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, &lt;br /&gt;
:[https://frappe.io/blog/development/deployment-for-everyone. Central]. &lt;br /&gt;
:This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
&lt;br /&gt;
:Some presentations depicting my work at ERPNext can be viewed [https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
:In the summer of 2017, I was at Cube (https://angel.co/cube-consumer-services-1) as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
=== Project and the Community ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If the project is successfully completed, what will be its impact on the Sugar Labs community?&#039;&#039;&#039;&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com,  https://twitter.com/rish4bhn&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
 &lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon - mohayon75@gmail.com (Potential GSoC Mentor)&#039;&#039;&#039;&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson - tony_anderson@usa.net http://schoolserver.org/&#039;&#039;&#039;&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody - tim@timmoody.com - http://internet-in-a-box.org/&#039;&#039;&#039;&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
If I get stuck, I will first try my best to find a solution myself (Web Search, StackOverflow). I can ask for help on #sugar or from some friends and ex-colleagues who are Open Source enthusiasts.&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences and progress through it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous ===&lt;br /&gt;
&lt;br /&gt;
=====Setting Up a Development Environment=====&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Web projects or the Sugar projects.&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Locustsugarizer.png|center|locust]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Workload analysis for sugarizer-server=====&lt;br /&gt;
:I&#039;ve been testing the page load times for some activities using Locust, a user load testing tool written in Python that lets you test site performance by swarming it with users. &lt;br /&gt;
:This will fulfill one of the tasks in the node.js performance analysis of sugarizer-server which lets us know the size of the file download per page/activity and response times as the number of users increases.This analysis will be important when I run them on the Raspberry Pi WiFi AP along with the other tasks in parallel. I will try to replace this section with a more complete analysis before the final proposal. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:working-on-it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More questions I&#039;d like to ask&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:I wanted to know if I should add more details about the implementation of the tasks in the proposal and I would also love to recieve any kind of feedback from the community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101442</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101442"/>
		<updated>2018-03-14T18:53:31Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: Added images and small edits&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC &#039;18 =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Name: Sugarizer School Box ==&lt;br /&gt;
&lt;br /&gt;
=== About Me ===&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located at Mumbai, India (UTC +05:30)&lt;br /&gt;
: Work Hours: 5:00 AM to 2:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called ERPNext (https://github.com/frappe) sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
: I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
: https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
: Here’s a PR I made that has some Ansible:&lt;br /&gt;
: https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016 and here are some major PR&#039;s:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sugarizer School Box ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images and Improving the Internet-In-A-Box Ansible Installer for Sugarizer ====&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Sugarizerschoolbox diagram.png|center|flow]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. This is being created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a Heroku Button for sugarizer up and running. (https://blog.heroku.com/heroku-button).&lt;br /&gt;
:&lt;br /&gt;
[[File:Herokubuttonreadmeexample.png|center]]&lt;br /&gt;
:&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server already exists, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Timeline===&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Finish node.js performance analysis for Sugarizer-server and post the results for the community. The analysis includes parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. I will use hostapd and dnsmasq to create an access point as shown here:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md&lt;br /&gt;
&lt;br /&gt;
This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*Images should be available to the community and for testing.&lt;br /&gt;
*Publish the Raspberry Pi image and the build scripts.&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Improve the Ansible playbook for installing Sugarizer on the Internet-In-A-Box installer (https://github.com/iiab/iiab/tree/master/roles/sugarizer). &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensure that it works. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
*Use the remaining week to make other improvements and fix issues that crop up during Week 3.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore pm2 (https://github.com/Unitech/pm2) as a solution to do solve this or use other features of pm2 to enhance reliability. &lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
&lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android/iOS client apps.&lt;br /&gt;
*Test the working of the Sugarizer School Box with every possible type of client.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS. &lt;br /&gt;
This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written here: https://github.com/iiab/iiab/tree/master/roles/sugarizer &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. *Try to use Packer or Terraform on the Bash + Docker script written in Week 8 to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If all previous objectives are achieved, explore setting up a CI tool to improve the project and look for avenues where CI can help.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* Buffer week for finding more issues and preparing the final submission.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
*Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Convince us why you can finish this project ===&lt;br /&gt;
&lt;br /&gt;
:I mentioned my experience with an open-source organization called ERPNext (https://github.com/frappe) above.  &lt;br /&gt;
&lt;br /&gt;
:In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, &lt;br /&gt;
:Central (https://frappe.io/blog/development/deployment-for-everyone). &lt;br /&gt;
&lt;br /&gt;
:This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
&lt;br /&gt;
:Some presentations depicting my work: https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing&lt;br /&gt;
&lt;br /&gt;
:In the summer of 2017, I was at Cube (https://angel.co/cube-consumer-services-1) as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
=== Project and the Community ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If the project is successfully completed, what will be its impact on the Sugar Labs community?&#039;&#039;&#039;&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com,  https://twitter.com/rish4bhn&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
 &lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon - mohayon75@gmail.com (Potential GSoC Mentor)&#039;&#039;&#039;&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson - tony_anderson@usa.net http://schoolserver.org/&#039;&#039;&#039;&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody - tim@timmoody.com - http://internet-in-a-box.org/&#039;&#039;&#039;&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&lt;br /&gt;
&#039;&#039;&#039;If I get stuck on my project, I will first try my best to find a solution myself (Web Search, StackOverflow). I have some friends and ex-colleagues who are Open Source enthusiasts so I can ask them for guidance if I need help.&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the Community Bonding period, I will create a blog for myself and I will share my weekly experiences and progress through it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous ===&lt;br /&gt;
&lt;br /&gt;
=====Setting Up a Development Environment=====&lt;br /&gt;
:I wasn’t sure if this project falls under the Sugar-Web projects or the Sugar projects.&lt;br /&gt;
:I&#039;ve deployed Sugarizer on my Raspberry Pi 3 and a VPS with Docker and without it.&lt;br /&gt;
:It works really well and I haven’t run into any major issues.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
[[File:Locustsugarizer.png|center|locust]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Workload analysis for sugarizer-server=====&lt;br /&gt;
:I&#039;ve been testing the page load times for some activities using Locust, a user load testing tool written in Python that lets you test site performance by swarming it with users. &lt;br /&gt;
:This will fulfill one of the tasks in the node.js performance analysis of sugarizer-server which lets us know the size of the file download per page/activity and response times as the number of users increases.This analysis will be important when I run them on the Raspberry Pi WiFi AP along with the other tasks in parallel. I will try to replace this section with a more complete analysis before the final proposal. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
working-on-it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More questions I&#039;d like to ask&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I wanted to know if I should add more details about the implementation of the tasks in the proposal and I would also love to recieve any kind of feedback from the community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=File:Locustsugarizer.png&amp;diff=101441</id>
		<title>File:Locustsugarizer.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=File:Locustsugarizer.png&amp;diff=101441"/>
		<updated>2018-03-14T18:48:31Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;page load testing for sugarizer with locust&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=File:Herokubuttonreadmeexample.png&amp;diff=101440</id>
		<title>File:Herokubuttonreadmeexample.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=File:Herokubuttonreadmeexample.png&amp;diff=101440"/>
		<updated>2018-03-14T18:46:48Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;herokubuttonreadmeexample&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=File:Sugarizerschoolbox_diagram.png&amp;diff=101439</id>
		<title>File:Sugarizerschoolbox diagram.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=File:Sugarizerschoolbox_diagram.png&amp;diff=101439"/>
		<updated>2018-03-14T18:38:13Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Flow diagram for Raspberry Pi Sugarizer School Box - Sugar Labs.&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101438</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101438"/>
		<updated>2018-03-14T18:23:38Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC &#039;18 =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Name: Sugarizer School Box ==&lt;br /&gt;
&lt;br /&gt;
=== About Me ===&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located at Mumbai, India (UTC +05:30)&lt;br /&gt;
: Work Hours: 5:00 AM to 2:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called ERPNext (https://github.com/frappe) sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
: I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
: https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
: Here’s a PR I made that has some Ansible:&lt;br /&gt;
: https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016 and here are some major PR&#039;s:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sugarizer School Box ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images and Improving the Internet-In-A-Box Ansible Installer for Sugarizer ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. This is being :created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to :more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a Heroku Button for sugarizer up and running. (https://blog.heroku.com/heroku-button).&lt;br /&gt;
&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&amp;lt;br&amp;gt;As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then.&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server already exists, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Timeline===&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Finish node.js performance analysis for Sugarizer-server and post the results for the community. The analysis includes parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. I will use hostapd and dnsmasq to create an access point as shown here:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md&lt;br /&gt;
&lt;br /&gt;
This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*Images should be available to the community and for testing.&lt;br /&gt;
*Publish the Raspberry Pi image and the build scripts.&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Improve the Ansible playbook for installing Sugarizer on the Internet-In-A-Box installer (https://github.com/iiab/iiab/tree/master/roles/sugarizer). &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensure that it works. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
*Use the remaining week to make other improvements and fix issues that crop up during Week 3.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore pm2 (https://github.com/Unitech/pm2) as a solution to do solve this or use other features of pm2 to enhance reliability. &lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
&lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android/iOS client apps.&lt;br /&gt;
*Test the working of the Sugarizer School Box with every possible type of client.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS. &lt;br /&gt;
This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written here: https://github.com/iiab/iiab/tree/master/roles/sugarizer &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. *Try to use Packer or Terraform on the Bash + Docker script written in Week 8 to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If all previous objectives are achieved, explore setting up a CI tool to improve the project and look for avenues where CI can help.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* Buffer week for finding more issues and preparing the final submission.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
*Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Why I can finish this Project ===&lt;br /&gt;
&lt;br /&gt;
:I mentioned my experience with an open-source organization called ERPNext (https://github.com/frappe) above.  &lt;br /&gt;
&lt;br /&gt;
:In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, &lt;br /&gt;
:Central (https://frappe.io/blog/development/deployment-for-everyone). &lt;br /&gt;
&lt;br /&gt;
:This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
&lt;br /&gt;
:Some presentations depicting my work: https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing&lt;br /&gt;
&lt;br /&gt;
:In the summer of 2017, I was at Cube (https://angel.co/cube-consumer-services-1) as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
=== Project and the Community ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If the project is successfully completed, what will be its impact on the Sugar Labs community?&#039;&#039;&#039;&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com,  https://twitter.com/rish4bhn&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
 &lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon - mohayon75@gmail.com (Potential GSoC Mentor)&#039;&#039;&#039;&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson - tony_anderson@usa.net http://schoolserver.org/&#039;&#039;&#039;&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody - tim@timmoody.com - http://internet-in-a-box.org/&#039;&#039;&#039;&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101437</id>
		<title>User:Rishabhnambia</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Rishabhnambia&amp;diff=101437"/>
		<updated>2018-03-14T18:20:12Z</updated>

		<summary type="html">&lt;p&gt;Rishabhnambia: Created page with &amp;quot;= GSoC &amp;#039;18 =   == Project Name: Sugarizer School Box ==  === About Me ===  :&amp;#039;&amp;#039;&amp;#039;Name:&amp;#039;&amp;#039;&amp;#039; Rishabh Nambiar :&amp;#039;&amp;#039;&amp;#039;Email:&amp;#039;&amp;#039;&amp;#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC &#039;18 =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Name: Sugarizer School Box ==&lt;br /&gt;
&lt;br /&gt;
=== About Me ===&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Name:&#039;&#039;&#039; Rishabh Nambiar&lt;br /&gt;
:&#039;&#039;&#039;Email:&#039;&#039;&#039; [mailto:rishabhn@protonmail.com rishabhn@protonmail.com]&lt;br /&gt;
:&#039;&#039;&#039;Sugar Labs wiki username:&#039;&#039;&#039; Rishabhnambia&lt;br /&gt;
:&#039;&#039;&#039;IRC nickname:&#039;&#039;&#039; rishabhnambiar&lt;br /&gt;
:&#039;&#039;&#039;Languages:&#039;&#039;&#039; English&lt;br /&gt;
:&#039;&#039;&#039;Where am I located? and what hours(UTC) do I tend to work?&#039;&#039;&#039;&lt;br /&gt;
: I&#039;m located at Mumbai, India (UTC +05:30)&lt;br /&gt;
: Work Hours: 5:00 AM to 2:00 PM UTC&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Past experiences with Open-Source projects:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: I have worked with an open-source organization called ERPNext (https://github.com/frappe) sporadically between 2016 and 2017.&lt;br /&gt;
 &lt;br /&gt;
: I added an AWS S3 Integration to Frappe, a Python framework that powers ERPNext.&lt;br /&gt;
: https://github.com/frappe/frappe/pull/4272&lt;br /&gt;
: Here’s a PR I made that has some Ansible:&lt;br /&gt;
: https://github.com/frappe/bench/pull/473/&lt;br /&gt;
: I&#039;ve been making minor contributions since May 2016 and here are some major PR&#039;s:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sugarizer School Box ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Goal #1: Sugarizer Raspberry Pi Images and Improving the Internet-In-A-Box Ansible Installer for Sugarizer ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:The first goal is to create a Raspberry Pi image and build scripts based on Raspbian that can serve Sugarizer to a classroom full of students. This is being :created because the Raspberry Pi is inexpensive, widely available and many such Sugarizer School Boxes can provide a cost-effective way of reaching out to :more students and communities through Sugar. &lt;br /&gt;
&lt;br /&gt;
:On booting, the Raspberry Pi will:&lt;br /&gt;
:*act as a WiFi AP that clients(browsers, sugarizer apps) can connect to.&lt;br /&gt;
:*serve Sugarizer using Sugarizer-server on the local WiFi so there will be no requirement for Internet connectivity for now.&lt;br /&gt;
:*start a browser session running sugarizer client so a single user/instructor can use it by connecting a display to the Pi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Goal #2: Heroku Button====&lt;br /&gt;
&lt;br /&gt;
:The second goal is to simplify the way to deploy Sugarizer in the cloud. The priority in this section is get a Heroku Button for sugarizer up and running. (https://blog.heroku.com/heroku-button).&lt;br /&gt;
&lt;br /&gt;
:A Heroku Button is a simple HTML or Markdown snippet that can be added to READMEs. Clicking a Heroku Button will take you through a guided process to configure and deploy an app running the source code referenced by the button.&lt;br /&gt;
&lt;br /&gt;
:This is being done to provide users a simple, one-click and hassle-free deployment method that will let anyone set up their own instance of Sugarizer without opening a terminal window.&lt;br /&gt;
&lt;br /&gt;
=====Minimum Deliverables=====&lt;br /&gt;
&lt;br /&gt;
:The community has suggested that I should treat improving the Sugarizer School Box as Goal #1 and the deployment scripts as Goal #2. I will start working on the deployment scripts only when Goal #1 is complete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:As 90% of the project should ideally be complete by the 2nd Evaluation phase, the Raspberry Pi build, the improved IIAB installer and the Heroku Button script will be ready by then. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Best Case Scenario=====&lt;br /&gt;
&lt;br /&gt;
:If things go as per the timeline till the 2nd evaluation phase, I will also be making a Bash + Docker script for sugarizer deployment. Ansible, Terraform or Packer can be added to the script to allow compatibility for different VPS providers. As the Docker build for Sugarizer-server already exists, this will not take long.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Timeline===&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Week&lt;br /&gt;
|Date(2018)&lt;br /&gt;
|Period&lt;br /&gt;
|Task&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 23 - May 13&lt;br /&gt;
|Community Bonding&lt;br /&gt;
|&lt;br /&gt;
*Finish node.js performance analysis for Sugarizer-server and post the results for the community. The analysis includes parameters like file download size for every page/activity, frequency of page visits, processing required per request and seeing how the Pi server behaves in different conditions. &lt;br /&gt;
*Set up a blog for posting my weekly progress. &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|May 14 - May 21&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Create a Raspbian Image build for the Pi3 that has an Access Point and Sugarizer-Server running on boot. I will use hostapd and dnsmasq to create an access point as shown here:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md&lt;br /&gt;
&lt;br /&gt;
This project will involve writing some bash for the build and I’ll use these resources for inspiration:&lt;br /&gt;
&lt;br /&gt;
*https://github.com/sugarlabs/rpi23-gen-image&lt;br /&gt;
*https://github.com/iiab/iiab-factory/tree/master/box/rpi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|May 21 - May 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Continue to work on Raspbian Image build and test on my Raspberry Pi 3. &lt;br /&gt;
*Images should be available to the community and for testing.&lt;br /&gt;
*Publish the Raspberry Pi image and the build scripts.&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|May 29 - June 04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Improve the Ansible playbook for installing Sugarizer on the Internet-In-A-Box installer (https://github.com/iiab/iiab/tree/master/roles/sugarizer). &lt;br /&gt;
*This will include making sure that the IIAB play uses the latest version of sugarizer with all available functionality and ensure that it works. &lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|June 05 - June 11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*On the IIAB Sugarizer install, add safeguards and checks to reduce MongoDB corruption issues caused by incorrect shutdown methods. &lt;br /&gt;
*Use the remaining week to make other improvements and fix issues that crop up during Week 3.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|June 12 - June 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Formulate a robust upgrade process to ensure that Sugarizer updates are installed successfully without losing any data to instances that have been deployed.&lt;br /&gt;
*Explore pm2 (https://github.com/Unitech/pm2) as a solution to do solve this or use other features of pm2 to enhance reliability. &lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|June 21 - June 29 &lt;br /&gt;
|Midterm Evaluation&lt;br /&gt;
|&lt;br /&gt;
*Generate a Heroku Button for one-click Sugarizer-server deployment. &lt;br /&gt;
&lt;br /&gt;
*The project should ideally be 90% complete by the midterm evaluation phase. &lt;br /&gt;
So my goal at this stage is to have a functional Raspberry Pi image build for Sugarizer, significantly improved IIAB Ansible install script and the Heroku Button. &lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|June 30 - July 08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Study how to make the Sugarizer School Box communicate with the Android/iOS client apps.&lt;br /&gt;
*Test the working of the Sugarizer School Box with every possible type of client.&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|July 09 - July 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Write a Bash + Docker script to deploy Sugarizer-server on a VPS. &lt;br /&gt;
This will be done the traditional DevOps way using Ansible.&lt;br /&gt;
*The Ansible component will not take much time because a similar play has already been written here: https://github.com/iiab/iiab/tree/master/roles/sugarizer &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|July 14 - July 20&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If the Turtle/Music Blocks release is on schedule, I will add it to the Sugarizer Pi Image build.&lt;br /&gt;
*We can use this release as a test for the upgrade processes created in Week 5.&lt;br /&gt;
*Improvements to the upgrade process will be made. &lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|July 21 - July 28&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Test deployment options thoroughly on different VPS providers. *Try to use Packer or Terraform on the Bash + Docker script written in Week 8 to improve compatibility between VPS providers.&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|July 29 - Aug 5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*If all previous objectives are achieved, explore setting up a CI tool to improve the project and look for avenues where CI can help.&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|6 Aug - August 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* Buffer week for finding more issues and preparing the final submission.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|August 06 - August 14&lt;br /&gt;
|Final Evaluations&lt;br /&gt;
|&lt;br /&gt;
*Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Why I can finish this Project ===&lt;br /&gt;
&lt;br /&gt;
:I mentioned my experience with an open-source organization called ERPNext (https://github.com/frappe) above.  &lt;br /&gt;
&lt;br /&gt;
:In the summer of 2016, I worked as a full-time intern for the same organization. I added automated AWS S3 Backups to their in-house deployment tool, &lt;br /&gt;
:Central (https://frappe.io/blog/development/deployment-for-everyone). &lt;br /&gt;
&lt;br /&gt;
:This included writing Ansible playbooks and Python that would set up automated backups for all their production servers for their enterprise clients. This was NOT an open source contribution but I’m mentioning this here because it is a major reason for my familiarity with Linux and Deployment. &lt;br /&gt;
&lt;br /&gt;
:Some presentations depicting my work: https://drive.google.com/drive/folders/0B70J3r6c_RnCdUp5MmNPQWlmV00?usp=sharing&lt;br /&gt;
&lt;br /&gt;
:In the summer of 2017, I was at Cube (https://angel.co/cube-consumer-services-1) as a  Full-Stack Development Intern. Over the summer, I built a Python based (bottle.py) web application that automated a lot of maintenance tasks for the Operations team that included web scraping and API Development. I also containerized the application using Docker and Docker-Compose.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:I believe I can complete this project because of my love and fascination for Linux and my previous work experience with Ansible, Docker and Python.&lt;br /&gt;
:This is the first time I’m applying for GSoC and Sugar Labs is the only organization I’m applying to because this project is a really good fit for my skill-set.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Project and the Community ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If the project is successfully completed, what will be its impact on the Sugar Labs community?&#039;&#039;&#039;&lt;br /&gt;
*:&#039;&#039;&#039;Rishabh Nambiar&#039;&#039;&#039;&lt;br /&gt;
:: rishabhn@protonmail.com,  https://twitter.com/rish4bhn&lt;br /&gt;
&lt;br /&gt;
::If the project is successfully completed, it will provide Sugar Labs a more portable and inexpensive way of deploying Sugarizer. The Raspberry Pi is inexpensive, widely available and Sugarizer School Boxes can provide a cost-effective way of reaching out to more students and communities through Sugar. This method of deployment requires only one Raspberry Pi 3. &lt;br /&gt;
&lt;br /&gt;
::The convenience of using one-click deployment scripts can be instrumental in getting non-developers to using a project and using a Heroku Button is even better when you don’t have to use to a terminal to have your own instance of Sugarizer.&lt;br /&gt;
 &lt;br /&gt;
*:&#039;&#039;&#039;Michaël Ohayon - mohayon75@gmail.com (Potential GSoC Mentor)&#039;&#039;&#039;&lt;br /&gt;
:: 1) I think that the Pi will be able to handle the load, we won’t have that much kids connected to the same Pi and the networking process is not that heavy.&lt;br /&gt;
::We should try to launch the server in background and display a web browser in foreground. If the load is too high we will see it quickly.&lt;br /&gt;
::2) Yes, you’re right, the Pi should provide a Wifi AP to allow devices to connect. This AP should bring routing from Ethernet if connected.&lt;br /&gt;
::3) Everything is possible, Ansible is a great tool. Combined with Terraform and Packer we should be allowed to deploy things without having troubles handling multiple cloud providers.&lt;br /&gt;
::The installation script could be performed using simple bash and docker.&lt;br /&gt;
::4) I think you can start thinking on your proposal. You can continue to discuss with us to talk about the project but also the community and the impact of that project.&lt;br /&gt;
::5) For the deployment part we have two options that would be nice to have.&lt;br /&gt;
::* a really simple automation like heroku single click deploy (https://blog.heroku.com/heroku-button). This is the killer feature we should definitely have.&lt;br /&gt;
::* the devops way using tools like Ansible and Terraform and Packer.&lt;br /&gt;
::&#039;&#039;&#039;One major thing for all platforms is to think about the upgrade processes, how can we update the devices/server without losing data.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Tony Anderson - tony_anderson@usa.net http://schoolserver.org/&#039;&#039;&#039;&lt;br /&gt;
:: This is exactly how the xsce server works so you may get valuable help from that community (xsce or iiab).&lt;br /&gt;
::A continuing issue is performance of the server in a classroom or school. One metric is the number of simultaneous connections the device can support (a classroom of 40-60 is not uncommon). Response time to requests to the server can be limited by the size of memory, the speed of access to the sd card, or the processor speed. I would be very interested in the methodology you propose since that process would apply equally to the schoolserver.&lt;br /&gt;
::One issue is to characterize the workload - how often does a user request a transaction from the server, what is the time between requests (when the user is reading the response to the previous request), how much processing is required for a request (e.g. a text search), how much information is required to satisfy a request (e.g. size of file download). So far as I know no one has attempted this characterization for a classroom. This load could be different for Sugarizer than for Sugar, but the effort would be valuable in any case)&lt;br /&gt;
&lt;br /&gt;
*:&#039;&#039;&#039;Tim Moody - tim@timmoody.com - http://internet-in-a-box.org/&#039;&#039;&#039;&lt;br /&gt;
::Speaking of reliability, we have experienced a number of occasions when mongodb was corrupt on the rpi, perhaps through disorderly shutdown. Perhaps you can sort that out.&lt;br /&gt;
::I would also recommend focusing on the rpi install before turning to Heroku or AWS as most users are without an internet connection. All I&#039;m suggesting is that you start with Sugarizer School Box item 1 and then proceed to item 2 when it is complete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:2018 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Rishabhnambia</name></author>
	</entry>
</feed>