Name: Varun Gupta
Gitter Nickname: tech4gt
Location: New Delhi, India
Affiliation: BE Information Technology at Netaji Subhash Institute of Technology(NSIT) (Batch of 2020)
Goal of the project is enhancing Image-Sequencer for both users and contributors by adding more modules, enhancing existing ones, improvisations on demo, an even better CLI and an a plugins system to make module contribution easier and independent.
- The current module contribution system needs for you to clone the code and make changes to it and generate a pull request, this is not a solution viable for ling term because the source code size would keep on increasing, also if a user does not wish to use all the modules he/she would have to download all of them, this also makes debugging difficult.
- Current demo is not very feature rich and needs improvements in various areas, for instance it doeas not support caching of files for offline use, sharing directly from the demo and the UI can use some improvements as well
- The current CLI syntax is long and tedious, does not support naming of the output image and hence chainability is not very effective. For instance currently to chain the cli with moving the final image to a new location looks like this
sequencer -i "image path" -o "path to output directory" -s "steps" && mv "output path/sequencer
- Some modules need very high computational power and the CPU is falling short, Edge Detection for instance takes incredibly long times to process for higher resolution images and hence these calculations should be GPU accelerated
- The project is not setup with stuff like codecov, codeclimate and others
- Mobile browsers and lower grade hardware have a hard time processing images due to limited processing power and thermal limitations, also long processing times give an unsatisfactory user experience especially on mobile devices.
According to statistics a considerable amount of users are using devices with low processing power, especially in under privileged communities and developing countries. This hardware can simply not run heavy modules locally.(in many cases mobile devices is the only device people own)
Adding a plugin system (Issue 190)
Making it easier for people to develop modules independently, the modules will be divided into 2 categories, Core Modules and Plugin Modules
- Core modules would be bundled with the source code and they would provide a basic set of functions
- Plugin modules would be more complex and would not be bundled with the source code but would be installed via NPM and then can be binded with the main project to customize Image Sequencer according to needs
Currently the modules are hardcoded into the modules.js file but by having a modules.json file which will contain the details for all the modules currently bound to the system and modules.js will load its modules based on the information from this file and being a json file more modules can be dynamically added and removed
Building a CLI Around the new architecture so that non technical users can directly add modules from the CLI, after completion this will be the workflow
npm i image-sequencer
npm i sequencer-blur
sequencer --bind-module sequencer-blur
sequencer -i "
Adding a one line module building option using the dynamic module
RESTful API (Issue 198)
An express server and a RESTful api for clients with low processing power. This expands the reach of the project to a much wider audience particularly people who cannot afford higher tier hardware to run complex modules like Edge Detection.This also provides a new way of using image sequencer and opens the project up for future clients such as native apps. Also the user will have an option in the UI to use local machine or remote server for processing and a time threshold in which if the processing does not complete the code will fallback to using API. Images will be uploaded to imgur api and link will be sent to the api. API structure is listed below:
steps : [String],
images : [String]
Refactor the cli and add
-n --out-name option to name the final output image, by default this will be set to the name of the input image. Extension detection and conversion to seamlessly convert between file formats without even specifying the convert step. The syntax for the above example will look like
sequencer -i "photo.jpg" -s "steps" -o "out dir" && mv "outdir/photo.jpg" "target dir"
A conflict of name will be resolved by prompting the user for a new name and by default adding appropriate number to the name of the image
Also using the
-n option for automatic extension detection the following command will invoke the proposed jpg to png module on the final image and export it as a png image
sequencer -i "photo.jpg" -n "photo.png -s "steps""
- Setup the project with CodeCov, bithound,codefactor, codeclimate and codebeat to increase code maintainability and quality. A deploy to heroku button for quickly deploying and testing our newly created server on heroku Documentaion should look something like this
- A list of module ideas(non-exhaustive):
Current issues on github which will be closed: #177,#178,#176,#172,#159,#158,#157#138,#130,#119,#116,#112
Since linting is a very important part of development workflow and ensuring code quality, the code written would be properly linted in order to be less bug prone and better readability. Also I would add proper comments so as to make the code easier to understand for new contributors
Timeline/milestones (May 14 - Aug 6)
My semester exams end around 30 May and hence I would not be able to do very significant contributions in the first one-two weeks but I will make up for it in the following weeks(Link to my academic calendar : http://www.nsit.ac.in/static/documents/calender/UG/calender_B.E. even semester 2018.pdf
Weeks 1,2 (May 14 - May 27)
CLI syntax refactoring and addons like adding the final name parameter and implementing extension detection for a new and supercharged CLI which is chainable.
Week 3 (May 28 - June 3)
Implementing the conversion module which converts images into different formats to integrate with the CLI extension detection also implementing one line module genaration with the CLI using dynamic module. Peer and mentor review for the new CLI.
Week 4,5 (June 4 - June 17)
Implementing the new module system and make separate existing modules into core and plugins, publish the plugin modules as npm packages, building the CLI for it.
Week 6 (June 18 - June 24)Fixing bugs or delays encountered, adding unit tests for the features implemented and incorporate the suggestions from the community into the codebase
Week 7,8 (June 25 - July 8)
GPU accelaration for heavy calculations with GPU.js. Adding support for CodeCov, Bithound, Codefactor, Codeclimate and Codebeat to increase code maintainability and quality and updating the documentation with the badges plus a deploy to heroku button so that new contributors can easlily deploy the API. Peer and mentor review for the new module system.
Week 9,10 (July 9 - July 22)
Implementing finalized module ideas. Writing unit tests for the new modules. Peer review for gpu accelaration.
Week 11,12 (July 23 - August 6)
Feedback and bug fixes. Final submissions and completion. Start with the RESTful API work on which will continue after summer
I would be implementing all the code i have mentioned above but help from other contributors in always appreciated ;-).
We will eventually need to deploy our API to a server with decent processing capabilities.(Can also be done later at anytime)
I have been actively contributing to the Image Sequencer project since quite a while now and recently I have been accepted into the Public Lab reviewers team.
This is my fork of the project: https://github.com/tech4gt/image-sequencer
Below is a non-exhaustive list of my most notable contributions to the project
- Added Basic Mode to only output final image (Merged PR #154)
- Added Progress Bar for syncronus operation (Built PR #180)
- Added Config parameter to pass the details of the steps (Merged PR #171)
- Create Output Directory immediately before image processing (Merged PR #167)
- Inform The user of the async operation(Merged PR #152)
- Added Canny Edge Detection Module for detecting edges from a png image (Merged PR #168)
- Added Brightness Module for manipulating percentage brightness(Merged PR #161)
Documentation and bug fixes
- Added bookmarklet to replace all images in a page (Merged PR #164)
- Created documentation for the added features and bug fixes (Merged PRs #174, #162, #160 ...)
**Full List of all PRs and Issues submitted **https://github.com/publiclab/image-sequencer/issues?utf8=%E2%9C%93&q=author%3Atech4GT+
I interned at open source organization Coding Blocks for the better part of 2 years where I helped with open source development of Node and Android projects and acted as a teaching assistant for the bootcamps. Below is a list of my most notable projects
1. Passport-Oneauth :
2. Shortlr :
A custom URL shortening service written in node.js inspired by google's goo.gl adding features like custom shorturls and login with OAuth2 (Contributed)
live demo: https://cb.lk/admin
3. Hacker-Blocks Extended :
A Node.js based portal for submission and evaluation of static websites and android apps (Co-Authored)
Hacker-Blocks-Extended/dev-submit is a complete backend built on an express.js and potgreSQL based stack which has a RESTful API for submissions and testing using phantomjs and Appetize.io . Our vision for this project is to build a portal for practicing development like there exist for competitive programming. (Co-Authored) (Ongoing)
4. Chrome Extension for shortlr :
A chrome extension that shorts a url using the shortlr API and copies it to user's clipboard (Authored)
I was a part of the coding blocks organization where we teach students how to code. All the code written here is open source and i worked with the team of interns on many open source projects some of which are mentioned above. Apart from that I also helped students learn as teaching assistant in the bootcamps "Data structures and algorithms in java" and "Android App Development". I cleared doubts and helped people debug their code and hence I have complete understanding of working in a team, respecting other members' opinions and maintaining protocol. I understand the importance of team work in any great project.
Outreach_I strongly believe in sharing knowledge and collective growth, I have tried to encourage other contributors and newcomers to contribute to the project through opening FTO(First Timers Only) issues(List Here) and I would continue to do so. I will allow for newcomers to contribute to the project by breaking up tasks into smaller pieces and opening FTO issues for easier tasks. Also a part of my proposal is to allow for independent module development so that developers can make modules for image-sequencer without going through the process of getting it approved, also they would be able to publish their modules separately if they want to. I would love to work with other people on the project and i will try to make the project as developer friendly as possible.
I believe this project can be helpful to small scale farmers and peasants where the health of their crops and soil can be analyzed and especially in a country like india where majority of the people cannot afford to buy expensive equipment and pay loads of money for analysis.
I completely understand the commitment here and I would love to commit myself to this project and grow as a programmer, I currently spend almost 6 hours a day on open source development I am willing to devote any amount of time required for the program and since the program overlaps with my semester break it would be possible to do so.