FOSSASIA aims to participate in the Google Summer of Code 2014. We are working together with a number of Open Source developers in the region and function as an umbrella for different projects. If FOSSASIA gets accepted, you will find more information about the application procedure for students on this page.
The ideas list below gets updated continuously as students also submit ideas in the process. So, please check back again later. If you have your own idea or small project, please apply for FOSSASIA on the Google Summer of Code website!
If you have questions or feedback, please write to us on the mailing list: http://groups.google.com/group/fossasia
We have four areas for our GSoC projects 2014:
- Open Design Projects, Garments, Knitting
- Web and Mobile Development
- Network and Mesh Technologies
- Peer to Peer Technologies
Open Design Projects, Garments, Knitting
Develop 2D Body Measurement App
The goal of this project is to provide users with an Android app that assists them in measuring their body data for generating customized patterns. The measurements are taken according to standardized measure points which are usually used by tailors. The student needs to propose a design and step by step guide to collect the measurements of the user. The data will be saved to the app or as a file, with additional options to export data as a Google spreadsheet and submit data to a web service.
A draft of a file format has been developed. A sample part below:
<document-info>
<personal>
<family-name></family-name>
<given-name></given-name>
<birth-date></birth-date>
<sex>female</sex>
</personal>
<body-measurements>
<unit>cm</unit>
<head_and_neck>
<head_girth></head_girth>
<mid_neck_girth></mid_neck_girth>
<neck_base_girth></neck_base_girth>
<head_and_neck_length></head_and_neck_length>
</head_and_neck>
<torso>
<center_front_waist_length></center_front_waist_length>
<center_back_waist_length></center_back_waist_length>
<shoulder_length></shoulder_length>
<side_waist_length></side_waist_length>
<trunk_girth></trunk_girth>
<shoulder_girth></shoulder_girth>
<upper_chest_girth></upper_chest_girth>
<bust__girth></bust__girth>
<under_bust_girth></under_bust_girth>
<waist_girth></waist_girth>
<high_hip_girth></high_hip_girth>
<hip_girth></hip_girth>
<upper_front_chest_width></upper_front_chest_width>
<front_chest_width></front_chest_width>
<across_front_shoulder_width></across_front_shoulder_width>
<across_back_shoulder_width></across_back_shoulder_width>
<upper_back_width></upper_back_width>
<back_width></back_width>
<bustpoint_to_bustpoint></bustpoint_to_bustpoint>
<halter_bustpoint_to_bustpoint></halter_bustpoint_to_bustpoint>
<neck_to_bustpoint></neck_to_bustpoint>
<crotch_length></crotch_length>
<rise_height></rise_height>
<shoulder_drop></shoulder_drop>
<shoulder_slope_degrees></shoulder_slope_degree>
<front_shoulder_slope_length>
<back_shoulder_slope_length>
<front_shoulder_to_waist_length>
<back_shoulder_to_waist_length>
</torso>
<arm>
<armscye_girth></armscye_girth>
<elbow_girth></elbow_girth>
<upper_arm_girth></upper_arm_girth>
<wrist_girth></wrist_girth>
<scye_depth></scye_depth>
<shoulder_and_arm_length></shoulder_and_arm_length>
<underarm_length></underarm_length>
<cervical_to_wrist_length></cervical_to_wrist_length>
<shoulder_to_elbow_length></shoulder_to_elbow_length>
<arm_length></arm_length>
</arm>
<hand>
<hand_width></hand_width>
<hand_length></hand_length>
<hand_girth></hand_girth>
</hand>
<leg>
<thigh_girth></thigh_girth>
<mid_thigh_girth></mid_thigh_girth>
<knee_girth></knee_girth>
<calf_girth></calf_girth>
<ankle_girth></ankle_girth>
<knee_height></knee_height>
<ankle_height></ankle_height>
</leg>
<foot>
<foot_width></foot_width>
<foot_length></foot_length>
<foot_girth>
</foot>
<heights>
<height></height>
<cervical_height></cervical_height>
<cervical_to_knee_height></cervical_to_knee_height>
<waist_height></waist_height>
<high_hip_height></high_hip_height>
<hip_height></hip_height>
<waist_to_hip_height></waist_to_hip_height>
<waist_to_knee_height></waist_to_knee_height>
<crotch_height></crotch_height>
</heights>
</body-measurements>
</body-measurements>
</hdf>
Project: Valentina Patternmaking Project
Website: http://www.valentina-project.org
Skill Level: Medium
Usefull skills: Android development, UI design, Java, formats, CSS, Phonegap or other framework
Mentors: Mario Behling [http://mariobehling.de], Hong Phuc Dang
Develop a GUI for the Adafruit Knitting Machine Project
The goal of this student project is to facilitate the production process with the Brother KH-930e Knitting Machine, that can be controlled by Open Source software as below. Parts of the process require commandline experience and Python knowledge. In order to enable more knitting enthusiasts to use Open Source knitting machines, we hope to find a student that takes on the challenge and comes up with ideas to make this process easier. Below a video of the current work process and step by step descriptions.
Disk Drive/Computer Connection Notes
The external floppy drive for this machine was the same as a Tandy PDD1 (Portable Disk Drive 1). This drive is connected using a serial port. There is documentation on the internet about how to connect these drives to computers, but the connector pinout on the knitting machine is different than the drive, and I didn’t find that documentation to be helpful. I was able to figure out the connector pinout by examining the knitting machine PCB.
Knitting Machine/Computer Connection Notes
The knitting machine drive connection uses CMOS voltage levels, not RS-232. Here is the pinout of the drive connector on the knitting machine:
_____ | | ______|___|______ | | | | | | 7 | 5 | 3 | 1 | |___|___|___|___| | | | | | | 8 | 6 | 4 | 2 | |___|___|___|___|
The pin numbering is shown as they are labeled on the knitting machine PCB, and does not agree with other documents I found on the web.
Connector Pinout | |||
Pin | Signal | I/O | Notes |
---|---|---|---|
1 | Ground | ||
2 | Out | Tied to 5, Pulled up through 1K resistor | |
3 | CTS? | In | (Tie to pin 2) |
4 | No Connection | ||
5 | Out | Tied to 2, Pulled up through 1K resistor | |
6 | RXD | In | |
7 | TXD | Out | |
8 | RTS? | Out | Follows state of Pin 3 (buffered) |
Methods of connecting the knitting machine to a computer
Using a FTDI serial adapter cable (RECOMMENDED)
Using an FTDI adapter is the best way to assure that you are interfacing with the machine using the same signal voltages as the original external floppy drives. This is documented on this wiki page, which will someday be merged with this one.MProg only runs under windows.
Using a USB serial adapter WITH flow control
This is a method I have used extensively with one model of knitting machine, but I no longer recommend it. Although it does not require any additional hardware like a FTDI adapter, this method does not present the exact same voltage levels to the knitting machine as the external drives which were designed to work with the machine. Although I have not had any reports of problems, it is possible that this method could stress the knitting machine input circuitry, and therefore I think it is safest not to use it.
Cable connections with flow control | |
Knitter | 9 pin connector |
---|---|
1 | 5 |
6 | 3 |
7 | 2 |
8 | 4 |
Using a USB serial adapter WITHOUT flow control
I have pulled pin 3 high, and am not using flow control in my software. I have not had problems with data loss while sending to the knitting machine, and the machine I am using is fast enough to always keep up with data received from the knitting machine. The data rate is 9600 bps, and the largest amount of data sent at once is 1024 bytes. Here is the cable I am using to connect the knitter with a USB 9 pin serial port:
Cable connections without flow control | |
Knitter | 9 pin connector |
---|---|
1 | 5 |
2 tie to 3 | |
6 | 3 |
7 | 2 |
Software Interface Information
There are a number of documents on the web about the Tandy PDD1 and the serial API for it, Most of them are incomplete. The knitter places the drive into a mode called “FDC emulation Mode”, which allows access to raw sectors. This document is the most complete documentation I was able to find: Media:Tandy-Disk-Reference.pdf
External Disk Drive Emulator
I have written software that emulates the external disk. It runs under Linux and keeps the data as files on the linux file system. This allows knitting designs to be saved and restored using the emulation computer. I am using these files to reverse-engineer the knitting machine file format. The emulator is written in Python, and released under the GPL. It has been tested most extensively under Ubuntu Linux. I have reports that it does not work on windows due to problems with the serial library. It has been successfully run under OSX. If you have any information to add about platforms that it does or doesn’t work on, let me know and I will update this informationI am happy to work with people who are trying to use the emulator with different models of knitting machine, and hoep to improve compatibility with other machines. The source code is available in the git repository listed above. Software for manipulating Brother data file: I have begun a python class which will provide an API to the brother data files. Source code is in the git repo. Knitting Machine File Format: A lot of the file format is now understood. Documentation is in the git repo.Work on this continues.This work was greatly helped by prior work performed by John R. Hogerhuis and posted on the kminternals yahoo group.
Links
Media:Portable_Disk_Drive_Operation_Manual.pdf
BL5 Brotherlink 5 serial or USB cable Brotherlink information
Yahoo group dedicated to hacking brother machines
Brother Liberation Front is working on open source interfaces
Info and protocols for the FB-100 interface
KE-100 motor drive (not sure that this is the right model drive for the KH-930E)
Project: https://github.com/adafruit/knitting_machine
More info: http://mariobehling.de/brother-kh-930-knitting-machine-hacking-and-knitting-tutorial
Skill Level: Medium to High
Useful skills: Python, Knitting Patterns, Image design
Mentor: Mentors to be announced
Create search functions and import pattern functions for Valentina
Valentina is a development project to edit pattern files for garments and textiles. The goal of the student project is to implement a method to choose additional design items, e.g. different collar styles, and to add them into a pattern during development. In addition, the user should have the capability to organize their created patterns into categories, and conduct searches of patterns based on this organization.
The student would develop user functions to add search tags to patterns, search for patterns, and select patterns from search results to load into the currently open pattern.
Background: One of the main ideas of Valentina is to enable users to create custom sized patterns based on applying an individual’s measurement data to pattern formulas, independent of industry sizing standards. Similar industry software packages include Assyst (www.assyst-intl.com), Lektra (www.lectra.com), Grafis (http://www.grafis.com), plus others. Grafis in particular enables users to generate patterns based on formulas derived from pattern descriptions from standard books (e.g. books published by Mueller und Sohn.) Currently available industry software, however, does not aim at the DIY/maker or SME markets.
Project: Valentina Patternmaking Project
Website: http://www.valentina-project.org
Skill Level: Medium
Usefull skills: Vector graphics, C++, Qt5, basic knowledge of garment patterns, basic knowledge of generating patterns from formulas
Mentors: Hong Phuc Dang to be announced
Port Valentina to different platforms, build packages and refactor code
Currently the installation process of Valentina is only semi-automatic on Linux and Windows. For MacOSX there is no port yet available. The goal of this project is to automate the build process for the major operating systems. Create a standard workflow for Windows .exe builds, create a MacOSX port and provide packages for the major Linux distributions. The challenge of this project is to work with a number of projects and partners. For example, it is possible to create .deb packages for Debian. In order to get the package accepted in the Debian repository, it is necessary to get approval of established Debian developers who verify that the package build was done according to best practices. Similar procedures are required for other distributions. The second part of this project is to refactor code and replace deprecated code including if constructions with switch. Please see below.
Many if constructions replace with switch.
Methods:
VDomDocument::ParsePointElement VDomDocument::ParseSplineElement VDomDocument::ParseArcElement VDomDocument::ParseToolsElement
For example:
QStringList
arcs
;
arcs <<
VToolArc
::
ToolType
<<
VNodeArc
::
ToolType
;
switch
(
arcs
.
indexOf
(
type
)){
case
0
:
// parse arc tag
break
;
case
1
;
// parse node arc tag
break
;
default
:
// print warning
break
;
}
Project: https://bitbucket.org/dismine/valentina/overview
Mailing List: https://groups.google.com/forum/#!forum/valentina-project-list
Skill Level: Medium
Usefull skills: C++, Qt , Windows exe build, MacOSX, Linux packaging
Mentors: to be announced
Add Design items and Measurement Tables for Patternshare
Patternshare is a development project of a web application to edit pattern files for garments and textiles. The goal of the student project is to implement the choice of additional design items, e.g. different collar styles, and to add them to the patterns. Patternshare users should be able to generate non-custom sizes on the fly and add their own measurements table in the app. Another required feature is to add specific design items or changes, e.g. starting from size 36 up to 42. In order to establish a suitable way to allow the sharing of patterns in an industry quality, patternshare needs to support these features and be able to import and export CAD files.
Background: One of the main ideas of patternshare is to offer a web service that enables people to edit patterns independently from standard sizes. Similar industry software packages including Assyst (www.assyst-intl.com), Lektra (www.lectra.com), Grafis (http://www.grafis.com) and other exist. Grafis in particular seems to generate patterns in the same way, that we do it in patternshare – based on formulars which are defined from pattern descriptions from standard books. Many standards defined in books from Mueller und Sohn for example. The current players do not aim at the maker and SME market.
Project: https://github.com/sconklin/tmtp-patternshare
Website: http://www.taumeta.org
Skill Level: Medium
Usefull skills: Implementation of Mathematical Algorithms, Javascript, Fabric,js, Rafael.js, HTML, vector graphics
Mentors: Hong Phuc Dang to be announced
Web and Mobile Development
Implement Post to Github in NGO photo app and develop a Jekyll/Markdown Website
The goal of this GsoC project is to develop functions, that allow users of the phimpme photo app to upload images to their gallery that uses Jekyll, Javascript and Markdown. The most well-known one sites using these technologies are github pages. The phimpme photo app connects to “any social service” and Open Source CMS. It was developed for development projects in South East Asia and Open Sourced recently. Phimpme is a beautiful photo app that already works with any web systems based on Drupal, Joomla and WordPress. Android and iOS versions exist.
Project: https://github.com/phimpme
Skill Level: Medium
Useful skills: Web Api, Android Development, HTML, Jekyll, Markdown, Knowledge of CMS
Mentor: Hon Nguyen [Vanhonit], Mentor 2 to be announced
Anonymous mode and autosharing for phimpme Android app
Implement an anonymous photo sharing mode with auto-connect options to nearby phone , computers and wifi nodes with public sharing capability. Bluetooth connectivity was already implemented in the app to support this future feature. The implementation of Wi-Fi direct would require to change the minimum required version for Android to version 4.1 (Jellybean). Some functions and libraries that are required for this project are already implemented partly for other services. The goal of this project is also to use existing libraries and extend or change them where necessary to keep the code base clean and small. To make full use of an anonymous sharing mode as many systems as possible should be supported, e.g. shared folders on PCs, public ftp and other phones. The requirements include that sharing works without an Internet connection (local networks without Internet and other devices are available to connect). At the beginning of the project we require the student to define a list of features he/she plans to develop during GSoC and a timeline.
Project: https://github.com/phimpme
Skill Level: Medium to High
Useful skills: Nearfield Communication, Wifi, Wi-Fi Direct, Bluetooth, ftp, avahi, Android Development, Java
Mentor: Mario Behling [http://mariobehling.de], Andre Rebentisch [http://wikical.com]
Network and Mesh Technologies
Develop Web Interface Administration tool for large numbers of Nodes (routers) for OpenWrt based on kalua
Kalua is a hardware-independent OpenWRT-extension (using busybox-ash as main-language) for setting up, monitore and manage many, large wifi-mesh-networks for different locations including billing, captive portal / splash screen / weblogin, accounting, data retention and layer7/8-QoS. OpenWrt is a widely used Linux distribution for embedded devices and specifically routers. Large networks consist of hundreds and even thousand of nodes. Administration of routers, e.g. ESSID setting is a long process.
The goal of the project is to develop a new web interface to show the status of routers and enable mass administration of devices.
configure the builtin-packages
# the fast and easy automatic way:
kalua/openwrt-build/mybuild.sh set_build standard
make defconfig
# the way to understand what you are doing here:
make kernel_menuconfig # will safe in 'build_dir/linux-${platform}/linux-${kernelversion}/.config'
General setup ---> [*] Support for paging of anonymous memory (swap)
Device Drivers ---> Staging drivers ---> [*] Compressed RAM block device support
make menuconfig # will safe in '.config'
Global build settings ---> [*] Compile the kernel with symbol table information
Base system ---> busybox ---> Linux System Utilities ---> [*] mkswap
[*] swaponoff
Base system ---> [ ] firewall
Network ---> Firewall ---> [*] iptables ---> [*] iptables-mod-ipopt
[*] iptables-mod-nat-extra
Network ---> Routing and Redirection ---> [*] ip
Network ---> Routing and Redirection ---> [*] olsrd ---> [*] olsrd-mod-arprefresh
[*] olsrd-mod-jsoninfo
[*] olsrd-mod-nameservice
[*] olsrd-mod-txtinfo
[*] olsrd-mod-watchdog
Network ---> Web Servers/Proxies ---> [*] uhttpd
[*] uhttpd-mod-tls
[*] Build with debug messages
Network ---> [*] ethtool # if needed, e.g. 'Dell Truemobile 2300'
Network ---> [*] mii-tool # if needed, e.g. 'Ubiquiti Bullet M5'
Network ---> [*] netperf
Network ---> [*] ulogd ---> [*] ulogd-mod-extra # if data retention needed
Utilities ---> [*] px5g
[*] rbcfg # if needed, e.g. 'Linksys WRT54G/GS/GL'
- usage
- login via ssh
- prepare the router by calling firmwarewget_prepare_for_lowmem_devices
- fetch/copy firmware image to /tmp/fw
- call firmwareburn
Useful Skills: Linux development, OpenWrt, Embedded devices, Web UI design, Gimp, Inkscape, Lua, Scripting
Skill Level: High
Project: https://github.com/bittorf/kalua
Mentor: Bastian Bittorf [http://bittorf-wireless.de], Mentor 2 – to be announced
Peer to Peer Technologies and Cryptography
OpenCoin Digital Cash App
OpenCoin is a true digital cash system, similar to the former DigiCash/eCash based on tokens and providing real anonymity. A prototype wallet app is already available and has been written in JavaScript. Project scope is to implement a mature wallet with additional features (e.g. p2p transactions, encrypted wallet, QR codes), better look and feel and plattform independent (e.g. C, JavaScript+PhoneGap) Make yourself familiar with the OpenCoin protocol Agree the feature set Develop and test the wallet
Project: http://opencoin.org , https://github.com/OpenCoin
Skill Level: Medium
Usefull skills: Scala programming language, Twitter’s Finagle server, SBT build tool, Optional: Eclipse IDE is recommended, Optional: Coins are stored in a SQL database via squeryl library
Getting Started:
* Make yourself familiar with the OpenCoin protocol
* Agree the feature set
* Develop and test the wallet
Mentors: Jan Suhr [http://suhr.info], Joerg Baach [https://github.com/jhb]