Besut Kode - Workshop 1

Embed Size (px)

Citation preview

Besut Kode

Workshop 1Google Code-in

John VandenbergMentor Wikimedia

Welcome

Do you want to become a programmer?

It is frequently said that learning to code is as important as learning language and maths.

While everyone should be able to read code, writing good software is hard, and needs people who are dedicated to improving software development.http://www.wired.com/insights/2015/02/should-we-really-try-to-teach-everyone-to-code/

But...

Even weak programmers can make a good living in the United States. - Forbes

https://www.forbes.com/sites/quora/2012/06/21/why-is-being-a-programmer-a-good-career-choice/

Do you like mathematics or science?

Then Besut Kode & CGI is for you.

Google Code-in (GCI)

Google Code-in is extreme programming.

Six weeks (December January)

Many open source projects

Thousands of 13-17 year old, across the globe

Tasks of varying difficulty and typeCoding

Documentation/Training, including creating videos

Outreach/Research

Quality Assurance (testing)

User Interface

Wikimedia has participated since 2013

Wikimedia includes hundreds of projects, but is premoninately Php and Python. I organise the Python component of Wikimedia.

https://commons.wikimedia.org/wiki/File:Extreme_programming_in_action.jpg

Google Code-in (GCI) outcomes

GCI participants are challenged every day, from the best mentors, and learn _a lot_ if they stick with the program until the end.

https://www.mediawiki.org/wiki/Google_Code-in_2015#Wrap-up_blog_posts

Participants get better each year they are involved.

GCI winners go to Google Plex, meet other winners and meet the mentors.

https://commons.wikimedia.org/wiki/File:Android_building_in_Googleplex_with_sculptures.jpg

https://commons.wikimedia.org/wiki/File:Google_Conference_Bike.jpg

Github your portfolio

Who are you, really??

Most importantly, GCI participants build their online portfolio on Github.

Github has more than 14 million users and more than 35 million repositories. 125,000 LOC added per day.

It the largest host of source code in the world.

It also host websites.

Github is the 61st most visited site on the Internet.

Github your profile

But, Github is not a hosting company.

It is a social network and job recruitment company.

Your Github profile is your most important CV.It doesnt lie.

Github Archive

https://www.githubarchive.org/

And Github publishes their prime asset; thier metadata .

You can download it on Github Archive.

Github - statistics

http://octoboard.com/ (Defunct) on March 11, 2012

Which other companies than use, and sometimes publish new information

Such as http://octoboard.com/ (Defunct) showing statistics as of March 11, 2012

https://web.archive.org/web/20150801193208/http://octoboard.com/

Github Awards - Indonesia

http://github-awards.com/users?type=country&language=c%2B%2B&country=Indonesia

Another tool shows the most starred developers, per country

Github Awards - bsdnoobz

http://github-awards.com/users/bsdnoobz

And per city.

If you are a startup company in Surabuya, and you need a good developer, who are you going to call

Github Awards - yukiisbored

http://github-awards.com/users/yukiisbored

Github Awards is biased somehow this chap is5th Go user in Jakarta, and 25th in Indonesia

Github not just software

Sharing anything

Open Data

Writing

Translation

Open Company

Open house

Github - sharing

https://github.com/CMAA/nova-organi-harmonia - Music

Github open data

https://github.com/arkka/data-jakarta

https://github.com/cstrzadala/ballarat-town-planning

(and not so open data ...)

https://github.com/jayvdb/era_data

http://radar.oreilly.com/2013/03/github-government-bureaucat-open-source.html

Github - writing

http://kylerush.net/blog/meet-the-obama-campaigns-250-million-fundraising-platform/

http://jj.github.io/hoborg/ - Novel

http://forkthecookbook.com/

https://github.com/dylanegan/travel - Travel logging

https://github.com/progit/progit

http://prose.io/

Github - translation

https://www.transifex.com/

https://github.com/integrations/phraseapp

Github project management

https://waffle.io/

https://huboard.com/

https://www.zenhub.com/

Irony alert Github does not use Github for issue management

Github open company

Open Company pledgeWe who belong to the Open Company Initiative commit to openness as a defining element in how we create value.

https://github.com/opencompany/www.opencompany.org/issues

http://www.opencompany.org/https://gratipay.com/about/http://inside.gratipay.com/

https://wiki.p2pfoundation.net/Open_Company

Github open house

https://github.com/frabcus/house/labels/building

Github open house

https://github.com/frabcus/house/labels/building

Github open house

Git what is it

https://en.wikipedia.org/wiki/File:Git_operations.svg - GFDL (c) Duesentrieb

Github is website built around Git.Every programmer must know git.

Git is the canvas on which you work.

Git is an open source distributed version control system (VCS).

It manages files that are being edited by people all over the world, giving each copy its own version identifier. So each person knows which version they have, and how to merge their changes with other peoples changes, to the same file.

Git was created by Linus Torvalds, to help him build an operating system that you may have heard of, called Linux.

Git is replacing all other version control systems used previously.

Git what it is not

https://commons.wikimedia.org/wiki/File:Port_of_Shanghai,_2004.jpg CC-BY (c) Tibor Vgh

Well, not all VCS are being replaced.

Git is not industrial quality.

Git what it is not

Git is not good at:

Binary files

Large files

Large repositories

Access control

Mecurial is also common, but has the same problems above. Try it on https://bitbucket.org

Perforce is the answer for the above problems.

There are some weaknesses in Git.

The only other common open source DVCS is mecurial, and most developers are migrating from mecurial with git. If you want to try mecurial, create an account on Bit Bucket.

To solve the problems of git, use Perforce, but is not open source, and it is not cheap.

https://www.quora.com/What-are-some-advantages-of-Perforce-over-githttps://bitbucket.org/mats_ekberg/boar/wiki/Rationalehttps://en.wikipedia.org/wiki/Comparison_of_version_control_software

Google coding programs - participating organisations

Universities

Programming languages

Operating systems

Open content

Web Application frameworks

Applications

other!

Projects - Universities

Berkman Center for Internet and Society, Harvard University - JavaScript, Ruby, Go

Australian National University

Boston University - C

Biomedical Informatics, Emory University - Java, Python

Canadian Centre for Computational Genomics (C3G), McGill University - Python, R, JavaScript

SFT (Software for Experiments), CERN - C++, Python, JavaScript

Computational Science and Engineering at TU Wien, JavaScript, Java, C++

McGill Space Institute - Python

MIT Media Lab - Java

Portland State University

Stony Brook University Biomedical Informatics

Would you like to study at one of these universities?

Or, would one of these look good one your resume..?

Projects - Languages

Python - Python, C/C++

SageMath - Python, C/C++

SymPy - Python, C/C++

R - R, C/C++, Fortran

Ruby - Ruby

SciRuby - Ruby, Java

Chapel - Chapel, C/C++, Python

D Foundation - D, C++

GNU Octave - C++

Scala - Scala, Java

Julia - Julia, C++

You want to a Python job, fixing bugs in Python will look good on your resume.

You want to prove you are good at mathematics to potential employers, get involved in SageMath.

Etc.

Projects Operating Systems

Linux - C/C++, Python

Debian - Python, C/C++

Gentoo - bash, C++, Python, Perl, SQL

Ubuntu

SUSE

FreeBSD - C/C++, bash, make

NetBSD - C

ReactOS - C/C++

WINE - C

What to be an Operating System expert You can participate in building an Operating System.

Projects Open content

Wikimedia - PHP and Python

OpenStreetMap - Java, Ruby, JavaScript

DBPedia - Java, Scala, Python

Or do you like large knowledge foundaries?

Projects
Web Application Frameworks

Drupal - PHP

jQuery - JavaScript

Django Python

Apache Foundation - Java, JavaScript, Python

Or building websites...

Projects - Applications

Gnome

KDE

Mozilla

Eclipse - Java, C/C++

Blender Foundation - C/C++, Python

Or building applications ...

Projects specialist tools

CVXPY (modeling language for convex optimization problems) - Python

DUNE (Distributed and Unified Numerics Environment) - C++, Python

Gambit - Software Tools for Game Theory - JavaScript

Git - bash, C

Github - JavaScript, Ruby, C#

Copyleft Games Group/PySoy Python

Classical Language Toolkit - Python, JavaScript, Java

Or you want to do specific types of mathematics, like- writing computer games, or- solve network theory problems (git), or- natural language theory

GCI winning tips

Be ready to start on Day 1.

Choose a project, now

Learn about the project, now

Become part of the project team, now

Read the GCI tasks before Day 1

Or ... write your own GCI tasks! ... now

GCI choose a project

Find a project that best suits you

You will do it for 6 weeks non-stop.

Choose something that is fun!

Find a project that best suits you.Either something you are good at, or something you are excited about learning.

There is a possibility that your first choice isnt part of GCI 2016.

So, pick a second/fallback project, just in case.

------

2015- : https://developers.google.com/open-source/ https://codein.withgoogle.com/archive/ https://summerofcode.withgoogle.com/

2009-2015: https://www.google-melange.com/archive/

https://developers.google.com/open-source/gci/resources/example-tasks

2015 tasks:

https://codein.withgoogle.com/archive/2015/organization/

Project specific documentation

https://www.mediawiki.org/wiki/Google_Code-in_2015https://phabricator.wikimedia.org/project/view/1587/

https://groups.drupal.org/google-code-inhttps://www.google-melange.com/archive/gci/2014/orgs/drupal

GCI choose a project

Copyleft Games 2015 GCI tasks
https://codein.withgoogle.com/archive/2015/organization/4935850504749056/task

Everything about the previous CGI tasks is public, so read the archives.

GCI choose a project

Copyleft Games 2015 GCI task
https://codein.withgoogle.com/archive/2015/organization/4935850504749056/task/4622918113820672/

Check their GCI tasks from previous years, to ensure the tasks in GCI are what you want to work on.

You can write up GCI tasks, which will help the project become eligible for the next GCI.

GCI starting on Day 1

Install all of the tools

Be familiar with their coding guidelines

Watch them work

To really start on Day 1, you need to be prepared before Day 1

People participating in GCI for their second year, are already prepared. You can be too.

Install and use all of the tools

Be familiar with their coding guidelines

Watch their code reviewsSometimes parts of their coding guidelines are not formally written down *anywhere*, but are communicated during code reviews.

Understand which problems are HARD. Some of the GCI tasks may be labelled easy, but intersect with unsolved HARD problems, and youll waste a lot of time on the task.

If you were prepared, your first task will be approved immediately

GCI become part of the team

Learn how they communicate

Dont worry about your bad English

Dont use Sir

Learn who are the most helpful mentors

Become part of the project team, today.

Join their live discussions. Typically IRC.

Today.

During GCI, check in every day.

If you have prepared, you will be more advanced than other GCI participants. Help them.

Your mentor will love you!

GCI practise communicating

No more Sir!

When you are part of a group working closely together, informal English is used to communicate.

Learn appropriate communication in software projects.

Dont use "Sir" !

If you commit good code, and you will, you are not lower value than the mentor.

When you are part of a group working closely together, informal English is used to communicate.

Dont be shy of your English skills. Dont let it stop you from getting help.

Open source projects have many people where English is their second language, just like you.

Dont say sorry for my bad English every sentence.They know your English is bad. They only care about your code.

Static analysis
programming languages

https://www.amazon.com/Electric-Cordless-Clothes-sweater-Shaver/dp/B00F3C3I7W

How can I do all of these things, today

The easiest approach is carefully cleaning existing code.

Lint is the rubbish that sticks on clothing.Lint is also the bad code that sticks to good code.

De-linting, if done carefully, can provide endless number of tasksthat do not involve changing functionality, or require understanding the code.It allows you to be productive while familiarising yourself with the code.

https://github.com/mcandre/lintershttps://github.com/mre/awesome-static-analysis

Build and use new linting tools. They improve your understanding of the language itself,and common problems with using the language and its standard libraries.

Static analysis
natural languages

https://commons.wikimedia.org/wiki/File:Misspelling_In_The_Tower_Of_London.jpg
CC-BY (c) Onofre Bouvila

Misspellings are another easy way to contribute to a project.

In this image, the Spanish word -- Gua - has a grave accent on the "i", which does not exist in Spanish. Immediately obvious to the Spanish.

Misspellings are a very hard problem to solve beyond simple cases like incorrect glyphs.

Practise using tools to identify misspellings.

http://jwilk.net/software/mwichttps://pypi.python.org/pypi/misspellingshttps://github.com/mcandre/aspelllint

Improve misspellings tools.

Also be familiar with grammar checkers.

https://www.languagetool.org/

http://gci15.fossasia.org/

FOSSASIA as an umbrella organization for projects and developers in Asia.

FOSSASIA is a GCI participating organisation, and here are a few of their 2015 mentors

Your first Besut Kode challenge was a Wikimedia project.

Your second Besut Kode challenge will be a FOSSASIA project....

loklak social harvester

loklak is one of the FOSSASIA projects.

loklak is a server that provides untracked use of twitter data, and other social media.

----https://github.com/loklak

http://asksusi.com/

https://github.com/loklak/GCI2015

http://loklak.org/images/loklak_collect.png

loklak social harvester

https://github.com/loklak

The project includes- server- wordpress- android apps- javascript, java, go, python, php, and C# client libraries- Github Pages websites

----https://github.com/loklak

http://asksusi.com/

https://github.com/loklak/GCI2015

http://loklak.org/images/loklak_collect.png

loklak - open issues

https://github.com/issues?q=is%3Aopen+user%3Aloklak

https://github.com/issues?q=is%3Aopen+user%3Aloklak

189 issues; languages

82 Java 62 JavaScript 30 PHP 4 Python 4 CSS 2 C# 1 Shell 1 Objective-C

Loklak - Challenge 2

A private repository will be created, and all participants who have finished Challenge 1 will have access.

1. Create five new "GCI sized" task/issues in the Besut Kode loklak repository.The mentors will mark them as easy, medium or hard

2. Solve issues created by someone else. To pass this challenge you must solve one medium or hard difficulty task, or three easy tasks.

Warning: DO NOT COMMUNICATE with the loklak project during Challenge 2. Besut Kode participants who successfully finish Challenge 2 will be mentored on how to interact publicly with loklak project.

Note: a more formal description of Challenge 2 will be provided before you when Challenge 2 starts.

Challenge 2 example tasks

https://github.com/loklak/loklak_api_go

It has a .travis.yml, but does not have Go linting.Create a task to implement Go linting, suggesting the linter to use.

Another participant can then solve the task.

Challenge 2 example tasks

http://loklak.github.io/ webpage improvements

http://loklak.github.io/

"*We never share your email with 3rd parties"

should be

"* We never share your email with 3rd parties"

" 2015"

should be

" 2016"

or

" 2015-2016"

or ...?