Open Source Developer Guide and Best Practices at FOSSASIA

I would request you to please guide me as to how can I collaborate with you and also how can I contribute effectively to the organization.

At times I might get up to 20 private mails per day about “How to contribute to Open Source”. Usually I will direct developers to our mailing list or chat channels if they are asking about a specific project. But, how do contributions work at FOSSASIA? How can new developers join projects effectively? We have tried many different ways and spent a lot of time communicating with newcomers, many of them new to Git and Open Source development.

Over the years we have gotten better at helping new developers, designers and other contributors to join up. We have more than 1300 registered developers in our GitHub organization today. Not all of them can contribute every day, but we do have thousands of commits every year.

So, how are we able to scale up? I believe one reason are our Best Practices. We didn’t have a document “FOSSASIA Best Practices” yet, but in our daily work we have established excellent (mostly unwritten) best practices, that I would like to share in a concise form here now as a reference for new developers.

Happy to get your feedback and comments.

Development Best Practices at FOSSASIA

Culture and Communication

  • Please adapt your language to non-native English speakers and be super friendly. Remember we are an international community with contributors mainly from Asia and Europe. We are not used to swearing and will mostly understand words literally. At all times ensure your tone stays appropriate and friendly in the FOSSASIA community.
  • Stay modest. Sometimes newcomers already have an amazing knowledge in some areas. Still remember, it is no reason to be arrogant. Even the best developer does not know everything.
  • Be nice and welcoming. Why not add “please” in an issue or a comment “Thank you” in a pull request if someone did a good job? Show your appreciation for the good work of your co-developers.
  • If you are involved in a topic you don’t understand yet, try to learn yourself as much as possible from public channels (wikipedia, stackoverflow) but also do not hesitate to ask questions to other developers.

Communication Channels

Every project at FOSSASIA has its own channels. Many projects use Gitter, some Slack or IRC. Usually you will find information of the main communication channels of a project in the Readme.md.

While we are a community of Open Source and Free Software developers we still reserve our right to use whatever tools we deem necessary to help us to achieve our goal of developing the best possible Open Technologies – software and hardware. It is one step at a time 🙂

Private and Public Chat or Issue Tracker

Chat is a great way to connect with other contributors, but not all contributors are there all the time (consider time difference and personal schedules) and they are not always available to chat. Chat tends to be unstructured and with lots of people in a room there are often a number of threads. Therefore chat is great for help on setup issues and things where you got stuck.

Do not use chat for feature requests and detailed discussions on issues. These things are best for the issue tracker, where people from different timezones can join and where a focused conversation on one specific topic can happen.

Some people try to overcome the unstructured chats by switching to private communication. This shuts out other contributors who might have similar issues. A result I often observed is also, that contributors will bring up arguments in discussions like “I have discussed this already with xyz privately and he agrees”. Other contributors have not seen this discussion if it has not been taken place in public and we haven’t seen the arguments. We don’t know if xyz really agrees or if it was misunderstood. Private conversations are not transparent. Surely, there are cases where private chat is needed, e.g. for specific deployment questions of projects, but whenever you talk about development, please switch to public chat or open an issue.

Feature Requests and Bug Reports

  • Some newcomers are not accustomed to issue trackers and might try to inform developers on the mailing list, chat or even write private emails about bugs and features, but the right place to do this is: The issue tracker of a project.
  • Any bug or feature, please open an issue in the issue tracker right away and indicate if you want to work on it yourself.
  • Please include all relevant information when you submit an issue and wherever possible a link, information about the code that has issues and a screenshot.
  • When you file a bug report on the issue tracker, make sure you add steps to reproduce it. Especially if that bug is some weird/rare one.

Join Development

  • Before you join development, please set up the project on your local machine, run it and go through the application completely. Press on any button you can find and see where it leads to. Explore. (Don’t worry. Nothing will happen to the app or to you due to the exploring. Only thing that will happen is, you’ll be more familiar with what is where and might even get some cool ideas on how to improve various aspects of the app.).
  • If you would like to work on an issue, drop in a comment at the issue. If it is already assigned to someone, but there is no sign of any work being done, please free to drop in a comment so that the issue can be assigned to you if the previous assignee has dropped it entirely.

Commits/Pull Requests

  • All pull requests need to be associated to an issue.
  • All PRs need to be assigned to the person working on it.
  • If an issue cannot be completed in less than a day, it should be broken up into multiple issues.
  • Make pull requests from your own forks (even if you have write rights to the repository, do not create new branches, develop on your own branches).
  • State the actual change or enhancement in the commit message of PRs (do not just state “Fixes issue #123”).
  • Add the issue number into the description (this helps to speed up reviews as reviewers can simply click to get more info in the issue itself).
  • Write clear meaningful git commit messages (Do read http://chris.beams.io/posts/git-commit/).
  • Match pull requests with issues and make sure your pull requests description contains GitHub’s special keyword references that automatically close the related issue when the pull request is merged. (More info at https://github.com/blog/1506-closing-issues-via-pull-requests).
  • When you make very minor changes to a pull request of yours (like for example fixing a failing travis build or some small style corrections or minor changes requested by reviewers) make sure you squash your commits afterwards so that you don’t have an absurd number of commits for a very small fix (Learn how to squash at https://davidwalsh.name/squash-commits-git).
  • Add a screenshot if you changed anything in the UI of a project. When you’re submitting a pull request for a UI-related issue, please add a screenshot of your change or a link to a deployment where it can be tested out along with your pull request. It makes it much easier for the reviewers and helps to speed up the process. You’ll also get reviews quicker.
  • Add a link to your deployment of the project, where reviewers can check out what you have changed (especially for smaller changes this is very helpful as the reviewer might not even need to set up the system itself and test it. Again this speeds up the review process a lot).
  • Always ensure CI and tests are successful.
  • Help to resolve merge conflicts (especially if there are several PRs at the same time, merge conflicts are common. Help the reviewers and solve merge conflicts to speed up the process.).

Scope of Issues and Commits

  • Stay focused on the issue and its specifics: Sometimes it is tempting to do more changes in a pull request and simply add a nice little feature after mentioning it in the issue tracker. Please do not do this. Contributors will look at the title of issues usually to check if it is relevant for them. For example, if an issue is about changing a font, do not also change the color even if this seems like small change to you. Many projects have a design template and standard colors etc. that they want to achieve. So your changes might need to be discussed in a bigger setting even if they seem small to you. Same applies to many other areas.
  • Do only the changes in a pull request that are mentioned in the issue. Do not change anything else without ever mentioning it (remember match issues with pull requests).

Branch Policies

Most FOSSASIA Projects have:

  • a development branch (which is the working branch. Please commit to this branch.) and
  • a master branch (which is the stable branch).

Some projects also keep additional branches e.g.:

  • gh-pages for documentation purposes (often autogenerated from md-files in docs folder)
  • apk branches for Android apps (often autogenerated with travis).

Getting Started

  • Newcomers are sometimes afraid to make a pull request. Don’t be! It is the responsibility of reviewers to review them. And Git is a beautiful tool when it comes to reverting pull requests with errors.
  • In simple issues keep it simple and “simply” contribute, e.g. in an issue “change the color of the button from green to red”, there is no need to mention and ask “here is a screenshot where I changed the color to red. Should I make a PR now?”. Just make the pull request and wait for the feedback of the reviewer.
  • Take on responsibility early and help to review other contributions. Even though you do not have write access in a repository you can already help to review other commits.

Documentation

  • Please ensure you provide information about your code and the functioning of your app as part of every code contribution.
  • Add information on technologies and the code into the code itself and into documentation files e.g. into the Readme.md or /docs folder. Documentation is not a thing that should be done at the end after a few weeks or months of coding! Documentation is a continuous effort at every step of software development.
  • If you add new libraries or technologies add information about them into the Readme file.
  • If you implement a different design or change the css in a web project, please add information to the design specifications/template. If there are not any design specifications in the project yet, why not start them and add a section into the Readme.md to start with?
  • Always help to keep documentation up to date and make it easy for new contributors to join the project.

 

Thank you for helping to define many of the practices while working on the Open Event project to the developer team and for additional input and links to Niranjan Rajendran.

Links to Other Resources

Code Heat Coding Contest

In the Heat of the Code is a coding contest supported by the UNESCO to involve new contributors in Open Source projects. Participating projects are:

1. The Open Event Orga Server using Python/flask.
2. The AskSusi repositories with a focus on the Susi Android App and Susi Messenger Bots, and
3. The loklak repositories with a focus on loklak search with AngularJS.

The contest runs until 3rd February 2017. Grand prize winners will be invited to present their work at the FOSSASIA Summit at the Science Centre Singapore from March 17th -19th 2017 and will get up to 450 USD in travel funding to attend, plus a free speaker ticket.

codeheat-logo

Our jury will choose three winners from the top 10 contributors according to code quality and relevance of commits for the project. The jury also takes other contributions like submitted scrum reports and technical blog posts into account, but of course awesome code is the most important item on the list. Other participants will have the chance to win vouchers to attend Open Tech events in the region and will get certificates of participation. Sign up here now.

A team of over 30 mentors and jury members from 10 different countries supports participants of the contest.

Participants should take the time to read through the contest FAQ and familiarize themselves with the introductory information and Readme.md of each project before starting work on an issue.

The website codeheat.org has a list of questions and answers. Developers interested in the contest can also contact mentors on our Slack channel [Get a Slack Invite].

If you make at least four commits labeled “hacktoberfest” before 31st October you can also win a Hacktoberfest T-shirt (additional sign up required here).

FOSSASIA Hack Trip to 32C3 Chaos Communication Congress

From December 27-30 the 32C3 Chaos Communication Congress took place in Hamburg, Germany. Members of the FOSSASIA community met at the event to learn about the latest OpenTech hacks. We used the opportunity to work with mentors on our coding program for kids. See photos from our gathering here.


Get together at 32C3 Hamburg

Mitch Altman at Chaos Communication Congress 32C3 with Hong Phuc Dang from FOSSASIAHong Phuc Dang meeting Mitch Altman (Twitter)

FOSSASIA Mentors Michael Christen (Yacy), Jan Suhr (Nitrokey), Hong Phuc DangMeetup with FOSSASIA mentors and supporters from Europe Michael Christen (Yacy.net/loklak), Jan Suhr (Nitrokey), Hong Phuc Dang (FOSSASIA), Anna (Mozilla)

Kids Coding with FOSSASIA and Google Code-In

After the successful Google Summer of Code we are very happy and honored to participate for the second year in Google Code-In. The contest introduces pre-university students (ages 13-17) to open source software development and runs from December 7 2015 until January 25, 2016. Learn more here.

Because Google Code-in is often the first experience many students have with open source, the contest is designed to make it easy for students to jump right in. Open source organizations chosen by Google provide a list of tasks for students to work on during the seven week contest period. A unique part of the contest is that each task has mentors from the organization assigned should students have questions or need help along the way.

Google Code-In FOSSASIA

How to join the FOSSASIA Community

We often get the question, how can I join the community. There is no official membership form to fill out in order to participate in the Open Tech Community. You simply start to contribute and you are already a member. So, let’s work together to develop to develop social software for everyone!

The FOSSASIA team welcomes contributors and supporters to Free and Open Source Software. Become a developer, a documentation writer, packaging maintainer, tester, user supporter, blogger, journalist writing about FOSSASIA or organize events and present Free and Open Source Software projects in Asia.

Women in IT discussion in the community

Here are some ideas how we can collaborate:

Read the blogs and support users in the mailing list

Many FOSS blogs are written by developers, contributors, volunteers, and staff of companies supporting the FOSSASIA network – stay up on free software related progress and news and start to get involved. Sign up for the FOSSASIA Mailing List http://groups.google.com/group/fossasia and keep reading our Blog at: http://blog.fossasia.org

FOSSASIA Twitter

Follow FOSSASIA on Twitter and retweet important updates: https://twitter.com/fossasia

FOSSASIA at Google+ and Facebook

Become a member on social networks:

* https://plus.google.com/108920596016838318216
* http://www.facebook.com/fossasia/

Add your community in Asia to the FOSSASIA community network list

FOSSASIA is connecting communities throughout Asia and around the world. Please add communities in Asia to the community network list here: github.com/fossasia/fossasia-communities

Support the FOSSASIA network at Community Events

Set up a booth or a table about FOSSASIA at open source community events! There are many events of the open source community all over the world. The core team of FOSSASIA is simply not able to attend all events. You can support the cause by making the project visible. Register as a member of the FOSSASIA community at events, set up an info point and showcase Free and Open Source projects. Check out for example our meetup group in Singapore: meetup.com/FOSSASIA-Singapore-Open-Technology-Meetup/

Download Open Source Software from the FOSSASIA Github repo, join as a developer or tester:

The first step of joining a project is always to download the software and try it out: http://github.com/fossasia and our project for big data: http://github.com/loklak

Translate FOSS projects and their documentation

Do you speak more than one language? Most FOSS projects are 100% volunteer translated, which means you can be part of a translation team translating software and documentation thousands of people will use. The point to start is also our GitHub repo.

Mini Debconf Participants in Saigon

Richard Stallman from the Free Software Foundation and Hong Phuc Dang at the 31c3 Chaos Communication Congress in Hamburg

Richard Stallman FOSSASIA's Hong Phuc Dang, Free Software and Open SourceRichard Stallman (Free Software Foundation) and FOSSASIA‘s Hong Phuc Dang,

Richard Stallman and Hong Phuc Dang met at the 31c3 Chaos Communication Congress in Hamburg. Richard Matthew Stallman (RMS) is the founder of the GNU Project and the Free Software Foundation. Hong Phuc started the FOSSASIA community in 2009. The meeting during the “Congress” was a unique chance to discuss the progress of freedom and software in Asia.

“It is great to get Richard’s views on the development of software in Asia and learn about his ideas about Open Source and Free Software. I hope we will follow up soon about new projects and see more cooperation between the Free Software Foundation and the FOSSASIA community.”

A focus that is becoming more and more interesting is hardware and FashionTec development. One of the exciting projects taking place are knitting machines with a completely open design that are freely licensed. Richard advised to use the label “Free Hardware Design” modeled after “Free Software” for such projects.

Links:

Richard Stallman in the Wikipedia: http://en.wikipedia.org/wiki/Richard_Stallman

Personal Website: https://www.stallman.org

Blog on the FSF: http://www.fsf.org/blogs/rms/

Free Software Foundation: http://www.fsf.org

FOSSASIA: http://fossasia.org

FashionTec: http://fashiontec.org

Meetup of Beijing Linux User Group with Dang Hong Phuc from FOSSASIA

Hong Phuc Dang FOSSASIA, Women in IT Asia

Please join our FOSSASIA Bejinglug meetup with Dang Hong Phuc in Bejing, China on December 6, 2015. Hong Phuc will give insights about the FOSSASIA network, the programs of FOSSASIA and the FOSSASIA summit 2015 in Singapore.

FOSSASIA runs contributors, Open Source developers and hardware maker programs in cooperations with companies and communities such as Google Summer of Code and Google Code-In (current Code-In program until January 19).

For our programs in 2015 we are looking for mentors and students of Open Technology projects who would like to join us and register their groups on the FOSSASIA community network.

The FOSSASIA summit will take place from March 13-15 in Singapore. The call for papers is open until December 20. If you are interested to present at the event, please register here: fossasia.org/speaker-registration/

Time: 18:00
Date: Saturday, December 6, 2014
Location: Jazz Island Coffee (爵士岛咖啡二楼)
Address (Chinese): 东城区东直门内大街东扬威街11号楼(来福士大厦对面北侧)
Map: mapbar (via dianping)
Subway: Dongzhimen Exit A
Phone: 010-8406-1040

Links:

Beijinglug Announcement: http://beijinglug.org/…

FOSSASIA Community Network: http://fossasia.net

FOSSASIA Summit Speaker Registration: http://fossasia.org/speaker-registration/

FOSSASIA Code-In: http://www.google-melange.com/gci/org/google/gci2014/fossasia

Join the FOSSASIA Community Network

The FOSSASIA.net project is an initiative to bring the Asian Free and Open Source Software and OpenTech community together and foster cooperation. We make it easy to find communities and projects on a map with links to the websites, social media channels, and automatically updated info from community blogs.

Communities store their information decentrally anywhere on the web – on their server, a blog, or git service. FOSSASIA.net collects information through a stardardized API file on the web. You can generate the API file with the FOSSASIA API generator on our website. Then you add your community to the FOSSASIA network website. Simply add the link of your API file to our list of communities on github.

FAQ

How does it work?
You need to provide a file for our API and add the file to our communities repository. Then fill in the link to your API on our directory on github. That is it!

Where can I store my file?
We prefer that you store your file in our github repository of communities: https://github.com/fossasia/fossasia-communities. It is also possible to store it anywhere on the web, where it is publicly available, e.g. in a blog or CMS page as an attachment. However the github repo is the preferred method currently.

How about updating my file?
If you need to update your links, just upload a new file in the same location.

How do I start?
To make it easier, we created a FOSSASIA API Generator, where you can simply fill in your data here: http://api.fossasia.org/generator When you are finished copy the info from the form on the top right into an empty file or use the download button.

How do I find Geolocation data of my community?
You can find this data from OpenStreetmap. OpenStreetmap shows maps using a URL of the form: www.openstreetmap.org/#map=[Zoom Level]/[Latitude]/[Longitude] So go to www.openstreetmap.org and zoom to the area of your community. For example, if you are zoom into Mumbai, you will get the URL http://www.openstreetmap.org/#map=11/19.0715/72.9499 Then 19.0715 will be the latitude and 72.9499 the longitude.

What is an API?
In computer programming, an application programming interface (API) is a set of routines, protocols, and tools for building software applications. An API expresses a software component in terms of its operations, inputs, outputs, and underlying types. An API defines functionalities that are independent of their respective implementations (e.g. It does not matter what CMS is used), which allows definitions and implementations to vary without compromising each other. Compare: en.wikipedia.org/wiki/Application_programming_interface

Links

* Website http://fossasia.net

* Map http://fossasia.net/map/map.html

* FOSSASIA Community Network Tweets https://twitter.com/fantwk

FOSSASIA Summit 2015 Call for Speakers and Projects

FOSSASIA is the leading Free and Open Source technology organization in Asia organizing the annual FOSSASIA OpenTechSummit for developers, startups, and contributors. In 2015 the event takes place from March 13-15 for the first time in Singapore. Talks, workshops and projects at FOSSASIA range from Open Hardware, to design, Libre Graphics, Maker projects and Open Source Software.

For our 2015 feature event we are looking for speakers that share our passion about code and community. We are interested in topics including:

  • Big data and Open data

  • Javascript, Mobile and Mozilla Open Web

  • Geolocation software, maps and mesh ups

  • Lightweight technologies

  • Maker projects, 3D technologies

  • Open design software, open manufacturing, wearables

  • Cloud solutions

  • Dev-Ops

Participants from Asia and the world are expected to join a three day event. FOSSASIA was established in 2009. Previous events took place in Cambodia and Vietnam.

We are looking forward to your proposals. Submission deadline is 23rd December 2014.

Website

FOSSASIA Community: http://fossasia.org

Event Site: http://2015.fossasia.org

Proposals

Please submit your talk and workshop proposals or projects at site at http://2015.fossasia.org/speaker-registration/

Deadline

Submission deadline is: December 23, 2014.

Speakers and Projects will be accepted until January 5, 2015.

GSoC Ideas 2014

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


 

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]