<![CDATA[Akbar Gumbira]]>http://www.akbargumbira.com/Ghost 0.7Tue, 07 Feb 2017 09:22:37 GMT60<![CDATA[Semester I: Review CS MSc in Warsaw University of Technology]]>Finally I finished semester I doing CS master's degree in Warsaw University of Technology (or known as Politechnika Warszawska for Poles) and I am quite satisfied with this semester result: 4.8/5. Not bad after 4 years off from academics.

Perhaps I need to tell a few stories why

]]>
http://www.akbargumbira.com/review-msc-computer-science-in-warsaw-university-of-technology-semester-i/bb0361d8-3bba-49ef-8d94-ad38a28c76b7Mon, 06 Feb 2017 20:46:22 GMTFinally I finished semester I doing CS master's degree in Warsaw University of Technology (or known as Politechnika Warszawska for Poles) and I am quite satisfied with this semester result: 4.8/5. Not bad after 4 years off from academics.

Perhaps I need to tell a few stories why I ended up here first. Since 2014, I was actively looking for an opportunity to continue my studies. In late 2014, I was accepted in TU Delft, but until May 2015, I didn't secure any scholarships. There were some other options such as loans or doing a contract with company, but after some considerations I decided to let it go.

A few days after accepting the fact that I am not continuing studies that year, a friend of mine told me about a scholarship from Poland's government. I checked the requirement of the scholarship and I didn't really need to prepare anything tedious. The only thing I wasn't sure is which university I want to go to (this was asked in the application form). At that time, I knew nothing about universities in Poland. Most of my friends usually go to UK, Australia, The Netherlands (TU Delft is somehow like a sister university with my almamater. It's so common for ITB graduates to go there that in an interview for a scholarship I was asked if I was just following others), or US for those who want to give some more efforts preparing GRE/GMAT. Needless to say, I had no one to ask how good the universities in Poland are. The only thing I know is that they are good in competitive programming. That reason was enough for me to check the universities in Poland offering Computer Science/Informatics.

Checking solely based on the rank and the courses that they offer, my options were between PW and PWr (Politechnika Wrocławska). After some thought I decided to choose PW since the courses are more theoretical than those offered in PWr. I have never had problem learning new languages or stacks by myself, so learning practical things in university would not be the most effective way to learn something new. It would also be easier if I am interested to get PhD later. So I applied for this scholarship and chose PW. It was 3 months later if I remember correctly that I got an email saying that I was selected as an awardee. I resigned from my job and decided to take the scholarship.

But before I went to PW, I had to take Polish course for a year in PWr. Besides learning Polish, I also got Math, Physics, and Informatics. Other than Polish, the courses were pretty much useless. We were taught high school level Math and Physics. I never had to study to get perfect score in every Math's exam. I even got 5.5/5 for Physics. I didn't understand why they make this preparatory year as an obligation. During that time I often asked myself if I was wasting my time. But finally one year passed and I could start the master's degree itself. Exciting!

It was hard for me to find a personal review of the CS MSc programme in PW and as we know that an institute might have a very different system than the others, so after each semester, I will write a review with hope that it could be of any use for others. I will describe it into 3 aspects: course activities, grading system, and the courses itself.

Course Activities

In general, there are 4 activities in a course: lectures, lab, project, and exercise. Lecture is the obligatory part and the other 3 depend on the lecturer itself. For example in Pattern Recognition there are only lectures and labs. In Evolutionary Algorithm course, there are lectures, labs, and projects. For Image and Speech Recognition, there are lectures, project, and exercise.

I think it's common everywhere for lectures, labs, and projects. But for exercise, it is the part where the lecturer will solve a theoretical problem. To give you a clear picture, this is the exercise for Image and Speech Recognition. In my bachelor, this kind of problems is usually a homework. Oh right, there is no homework here! But you should really pay attention to exercise. The lecturer with a very high chance (I am talking about 90%-ish chance) will use it as exam questions.

Grading System

In Poland, grades are scaled from 2-5 with < 3 considered as not passed and 5 is the highest grade we usually could earn. In some cases, a lecturer might give you 5.5. The grades are converted from the final marks that you earn over the semester.

In CS, usually most courses require > 90% to get a 5 with strict ranges (not distributional). But don't worry. I was surprised at first to know that I need at least 91 to get a 5 in Pattern Recognition. I had Machine Learning and Artificial Intelligence in Bachelor's and I know how hard the exams could be. You need to understand every bits of the course AND really good in problem solving to be able to get > 90%. So at the first lecture, I was like "is everyone here a genius?", but hey I scored 98. The exams were mostly the same from last year and quite obvious. For Evolutionary Algorithm, my final score was also 98.5.

With strict ranges (e.g 81-90: 4.5, and 91-100: 5), I think the lecturer couldn't throw some "interesting" problems on exams, otherwise many students will fail. So that's why they just give exercise or last year's problems as the exam questions. I was surprised that some Polish students are still able to work. But knowing how it really works, it is usually enough to be able to solve last year problems/exercises and pass the course. So they could just skip the class and study one week before the exam.

I personally prefer distributional score. That way, the lecturer could give some interesting problems. And I actually hate converting final score to a grade. For example, my final score for Image and Speech Recognition was 80 (4.5), and you know how many points I need to get a 5? Just 1. I am not sure why I very often become a victim of this conversion. As you see that 1/100 is not fairly translated into 0.5/5. I have been watching a Youtube channel Cambridge Compsci lately and just knew that in Cambridge, they don't convert the final score into grades, but rather use it to rank and classify the degree: "first", "upper second" (2.i), "lower second" (2.ii), "third", "pass" or "fail". This is what makes Cambridge a very competitive environment.

Courses

This semester I had 5 core courses: Pattern Recognition, Evolutionary Algorithm, Image and Speech Recognition, Discrete Random Processes, and Digital Signal Processing. I will explain one by one below.

Pattern Recognition

In this course, I learned about nearest neighbour, bayes, linear classification, dimensionality reduction, clustering, ANN, HMM, string matching, decision trees, recognition quality enhancement (mostly meta-classifiers), and some pattern transformations (e.g PCA). I am not sure why the string matching is taught in this course. In my bachelor's, I had that topic in Algorithmic Strategy.

I actually could transfer this course from my bachelor's. But taking this course just reminds me how much I love this kind of topics related to AI and Machine Learning. And the lecturer is super cool. He is really articulate and structured when explaining things. Most of the time I only studied for 15 minutes/week (when I was in the metro on the way to the class). He also likes to ask the students to ensure that we understand what he explained. I remembered one funny occasion in a lab session. He asked a question (I was busy with something else) and no one answered him. The whole lab was in silence for quite long and I was curious what we're doing and asked him "Are you waiting for answer?" I thought it was a hypothetical question :)

Another cool thing with this course is that, for the labs you will implement some classification algorithms from scratch using Octave (kNN, bayes, linear classification, ANN, and improving a meta-classifier). The lab is 4 hours and single-handedly run by the lecturer himself. I really enjoyed every labs taught by him. I couldn't remember any other lecturers that would run the labs and code in front of their students. For that reason, I asked the lecturer if he has some topics for my thesis. He gave me some papers about Probabilistic Topic Models. I haven't finished reading it yet, but I think it will be fun working with him. After the labs, we were only asked to do a few tasks and write the report. I usually finished it in a few hours on weekend except for a lab about linear classification. I tried many things until I finally found a way to improve the recognition result.

For the exam part, if you know how to solve last year's problems, you'll be fine. But, the lecturer provides some questions called "problems to think through before the exam". The questions are much more interesting there. It will make you open some books.

This course is the best course that I had this semester. If you're an Erasmus student, I would really suggest you taking this. Usually Image and Speech Recognition is more famous for Erasmus students. But trust me, you will learn much more from this course.

Evolutionary Algorithm

In this course, I learned about global and local optimizations (unconstrained or constrained), ANN, and genetic algorithms. Each topic has one lecturer. One for global and local optimizations, one for ANN, and one for genetic algorithms. There are also labs and projects for this course.

For the labs and projects, we used Matlab. The labs were very easy since most of the things we needed are already implemented in Matlab. For each lab, we probably were asked to write 5-10 lines of code. There were 3 projects, one for each topic. It's also pretty simple. I finished each project in just one weekend.

I would say this is the 2nd best course for this semester. Everything is run well. Two things that I would complain is how the courses activities were organized and the exam. The main lecturer decided for this semester that we would finish all the lectures in 2 months, and after finishing all the lectures, the labs and projects would be given. This is not good at all. All the workloads were done in December. It would be better if after finishing one topic, we do the lab and the project related to that topic (like Pattern Recognition).

The exam was quite disappointing. It was only 45 minutes with 10 questions that need us to summarize the whole topic. An example of the question is something like this: "Formulate general non-constraint optimization task. Give definition of the f(x) function gradient in the point x. Describe a chosen algorithm of gradient minimization and draw its flow diagram." I complained at first that it would be impossible to answer all of them within 45 minutes. But the Professor answered with a smile and said "It's a natural selection". I remember what I was thinking at that time: "OK. It's his game. There's nothing I could do except to play his game." I answered as fast as I can writing all the things that I know. The last 4 questions about ANN were multiple choice and made much more sense. I answered 4 of them in just the last 1 minute. I had no time at all to check my answer. I was surprised that I got 33.5/40 (it was the highest score).

Image and Speech Recognition

In general, the lectures contain topics related to image recognition (including preprocessing, iconic processing, and object recognition), speech recognition, pattern recognition (yes, you will learn again all the classification/clustering algorithm here. But not as much as in the Pattern Recognition course), and HMM (again).

There is no labs for this course. But in the beginning of the semester, I got a project that I need to finish in one semester. The project part is something that I was struggling in this course. I got a project to recognize a palm with iterative map estimation and the iterative map estimation was explained at the very end of the lectures. I asked the assistant many times if he has some other material about this, but he always pointed me to the lectures slide (I read the lectures slide many times and could not understand how to apply it). I understand the iterative map estimation, but I couldn't understand how it could solve the problem. Since projects or labs from other courses are fairly easy (except for Discrete Random Processes), and I always do something easier first, I abandoned this project until I realized that it was already December. So I implemented it with other methods. On Christmas holiday, I locked myself working 16 hours/day for a week on this project. I also missed prototype day because there was no written announcement that it was moved. I had a feeling that the lecturer announced it on the retake days (for those who were not doing well on the first exam, they needed to attend the class and finish some tasks from the lecturer). I didn't have to go to those 2 days, so I probably missed the information. It was also moved quite far from January to December. When I emailed the assistant if I could show the prototype on another day, the answer was that there's nothing I could do. So I just let it go. But in the end, I actually got 36/40 for the project. I guess the assistant is kind when it comes to giving marks.

My final score for this course was 80 (4.5). Since the lecturer lowered the grades, to get 5, we need to get at least 81. So close! I asked the lecturer if I can retake test 1, but the answer was that it's not possible for me to improve my grade. I messed up on test 1 and only got 14/30 (with that score, it was already considered OK by the lecturer - the mean was 7/30). My thought was that, even if I got 5/30 if I retake test 1, I would still get the same 4.5 for the final grade. But there is nothing I could do. If only I could transfer 20.5 points that I earned more from Pattern Recognition and Evolutionary Algorithm :)

Compared to Pattern Recognition, I am quite disappointed with this course. I think giving labs every 2 weeks would be much better than giving a project for one semester. With labs, we would learn to implement more stuffs than just those that were asked in the project.

Digital Signal Processor

I have zero interest on this course. The lectures contain a bunch of information that we could google. There is nothing to 'learn' there. This course is pretty much useless for me (I still attended every single lecture though). But to be fair, it's organized very well. The labs are easy to follow and the instructions are clear. The exams questions were just trivias with only short answers. And 90% of the questions are the same with last year's exam. I got the lowest score actually (26/30), but in the end I still got 5. Yes, everyone gets a 5 :)

Discrete Random Processes

This course is really interesting but at the same time the most demotivating and time consuming one for me. The main topics of this course are branching process, poisson process, queue theory (M/M/C blocking and delay), and renewal theory. There is one exam and 5 labs.

The lab is the hardest part and it made me stressful. Every week, I spent my time mostly finishing the labs for this course (See here for an example of the lab). I used Pomodoro Timer to keep me focused on doing just one thing. For one lab, I spent 10-15 hours to finish it despite the fact that the lab slot is only 2 hours. It requires you to understand the theory, write the code, run the simulation, and write the report. The lecturer will also find every single mistake that you do. On the first and second lab, I only got 3 out of 4. After that, before submitting the report, I always asked the Professor to confirm my solution.

How the lab is run is like this: The lecturer will come to the lab but won't explain anything, but he will answer anyone who asks. In the first lab most of the students came to the lab. The lab tasks have been the same for years and we could get easily reports from students who already took this course. Knowing how it works, by the 3rd lab, there were only 3 students. On the 4th lab, there were only 2 students. On the last lab, I was the only one coming to the lab. No one really cares! I am not religious person at all, but cheating is something immoral for me and I know that it would destroy my confidence. When I finished the last lab, I was really glad that I could go through all the labs by myself (even when someone already sent me some reports from previous year).

But in the end I got 4.5, which I am quite satisfied considering that I didn't write strong solution on the exam. This is probably the first Math-related subject ever that I don't get an A over the course of my life :)

At one time, I hated the Professor. But realizing that he still came to the lab knowing that I would be the only one coming, I started to respect him. He is also very responsive and always answers my email (in every lab, I always asked him questions. Only math genius who are able to solve all the tasks without asking or confirming :p). I am sure that he is a well-respected mathematician in Poland. He's been a professor since 70's. I once came to his room and there are so many awards on the wall!

Overall, I am satisfied with this semester. Now, I could also see myself taking PhD. That was something that I never considered.

I think I have written a very long blog post. If you make it to this sentence, I assume that you are interested on this MSc programme? :)

]]>
<![CDATA[Random Events Might Not As Random As You Think]]>This semester, I have a course named Discrete Random Processes. In one of the labs, the students are asked to generate sequences of independent observation of random variables following some true distributions. An example of the tasks is generating sequences uniformly within unit circle and plot the marginal distribution f(

]]>
http://www.akbargumbira.com/random-events-might-not-as-random-as-you-think/990d4000-b1bd-4707-8465-394be533b251Wed, 16 Nov 2016 20:21:14 GMTThis semester, I have a course named Discrete Random Processes. In one of the labs, the students are asked to generate sequences of independent observation of random variables following some true distributions. An example of the tasks is generating sequences uniformly within unit circle and plot the marginal distribution f(x). Here is the plot of the true distribution (the plot on top of the screenshot below) compared to the 1000 randomly generated samples (the plot at the bottom):

It's so satisfying for me to see that all those generated samples follow the distribution asked. I know that it's quite naive, I draw samples from the defined distribution itself using some methods (Inverse CDF, Rejection Method, or Box Muller Transforms). So, if the generated samples don't follow the distribution from which the samples are obtained, there must be something wrong with my work :)

But, think of it this way: Have you ever heard that the number of goals in football match follows Poisson Distribution? How the hell do people conclude this? The answer is to reverse what I did on my lab: People observed over time and treated it as independent observations. Of course in one match, we can't really predict the number of goals, but we can say some numbers are more likely to happen than the other numbers. That is what "stochastic" really is.

So next time you are intrigued by one event, take observations of the event and see if you can really see the patterns. Random events might not as random as you think.

]]>
<![CDATA[Releasing QGIS Resource Sharing Plugin]]>Finally, Google Summer of Code coding period has ended last week. My project is under OSGeo organization working on QGIS. The proposal is to make a tool that allows QGIS users to share SVG, symbols and colorramps, and styles easily. Just a few days ago I released the plugin with

]]>
http://www.akbargumbira.com/releasing-qgis-resource-sharing-plugin/4fecd7f2-9dc0-4abc-b2d5-2f5ca9326e2bThu, 18 Aug 2016 11:35:14 GMTFinally, Google Summer of Code coding period has ended last week. My project is under OSGeo organization working on QGIS. The proposal is to make a tool that allows QGIS users to share SVG, symbols and colorramps, and styles easily. Just a few days ago I released the plugin with version 0.5. So please, go ahead open your QGIS and install the plugin!

Background

In the beginning, I proposed a rather conventional system: web service based architecture and implementing the client in the QGIS. In the community bonding period, we did some brainstorming and decided to go with a directory based repository where users can put the repository basically everywhere rather than putting the resources on our server.

If you want to know the project in a 5-minutes presentation, please read this slide here: Final Report - Presentation (don't worry, it's a webpage for your convenience)

So, what can I do with the plugin?

As I mentioned earlier that with this plugins, users should be able to download collections available from the repositories. The list of repositories is registered in the Settings tab. There are only 7 collections available now, which is not that great :)

I have resources I want to share, how can I share mine?

I have made the documentation on how to create a repository and publish it. Please read here QGIS Resource Sharing - Documentation. Please check that page and read the 'For Authors' section. Contact me (by email or even create an issue in the github repository) if there is anything unclear.

Like any system that relies on its data, this tool would be useless if there's nothing interesting there for users to install. Hopefully QGIS users will start to use this tool to share resources among users. So please, encourage your friends who make cool maps to make a repository for the betterment of QGIS! :)

Acknowledgments

I know that I say thanks a lot, but to show that I really appreciate their helps, I will just say it here again :)

Thanks to my mentors (Alessandro Pasotti and Anita Graser) for their constant helps on giving me feedback. Richard Duivenvoorde for the idea with the directory-based repository and involve himself into this project in many ways. Also for showing me his cool hackerspace in Den Haag and taking me to an Indonesian restaurant there. After one year living in Poland, I was so excited to see so many tasteful Indonesian dishes that I couldn't decide which one to choose. Tim Sutton for his feedbacks and comments from the beginning. Martin Dobias and Nyall Dawson for their technical input.

]]>
<![CDATA[GSOC #1: Defining Scope and Hackfest]]>GSoC coding period has started since last week. During the community bonding period and coding period last week, I spent my time to define the specification for the project. At the beginning of the community period, I posted a QEP (QGIS Enhancement Proposal) here to get feedback from the community.

]]>
http://www.akbargumbira.com/gsoc-1-defining-use-cases-and-hackfest/907b1008-40fa-4c99-b3e9-dbc9d531ab63Sun, 29 May 2016 14:22:37 GMTGSoC coding period has started since last week. During the community bonding period and coding period last week, I spent my time to define the specification for the project. At the beginning of the community period, I posted a QEP (QGIS Enhancement Proposal) here to get feedback from the community. The idea of sharing resources was to have a symbology store (symbology being symbol, style, and SVG). So user should be able to browse those resources in QGIS and download it as an item. Having thought that the idea won't change that much, I started to work a bit on the server side on the deployment stuffs with docker and authentication part. This was not a good idea though as later we decided to change the concept.

Richard and Tim came up with an idea to use git as the platform for the repositories as we already have resources lying around in github repositories and Richard thinks that it's too much for a GSoC job to implement the backend stuffs and the tool itself in QGIS. We had a skype chat and I spent a day to just think about it and started to make a new documentation to put my thoughts about it.

We discussed about the concept and the more we discussed the bigger the scope of the project is. Until just tomorrow, we haven't really decided on the scope that I should implement. Lucky for me that QGIS hackfest also started last week. I attended the hackfest to discuss this with my mentors (Ale, Anita), Richard, Tim, and others as well who are interested on this project. These are general scope of the project:

Retrieving Collections

The tool should be able to retrieve collections from the remote repository. Collection is a set of resources (SVGs, Symbols, styles, colorramps, etc) that belongs together that can be used to create a coherent map design. We also define that one collection should be self-sufficient, meaning that the collection contains all the resources needed and doesn't use resources from other collections. This is the highest priority of the GSoC. We will also create an official collections repository as a default.

Importing Collections

After downloading collections, the tool should import the downloaded collections based on its type so that QGIS users can use the collections right away (for now Symbol and SVG are the priority)

Discovering Available Repositories

So as users can make their collection repositories on their own, there needs to be a way for the tools to know the available repositories out there to suggest users when they register a repository source in their QGIS. The simplest way is that we make a text file in the official repository and ask people to make a PR if they want their collections suggested on the tools. A better one is to make a web service so users can register their repositories there.

Managing Metadata

It's nice for users if they can manage the metadata easily before they share the repository so the metadata is defined correctly. But this is not a high priority as users can define the metadata manually.

Sharing Repository

It would be nice for users to be able to share their local repository to the git platform from the tools. This is not a high priority as we think that it would take time as we don't want to restrict ourselves only to Github.

Managing Local Repository

Before sharing repositories, it would be cool if users can add stuffs (reminding the dependencies if it's not there) or remove stuffs (again telling the users if it's used by other resources). We agreed that this is not a high priority during this GSoC.

If you want to know more details, you can see the doc here

Hackfest

This is my first hackfest experience. There are a lot of interesting stuffs the developers are working on (Martin creating a debugging plugin for plugin, Matthias' work on testing framework so that plugin developers don't need to mock things up for their tests, Sandro Mani developing a 'version' of QGIS with super nice UI/UX, and so on so forth). Ale and I also managed to deploy the plugin site with the new user map that had been in the PR lists for quite some time. I didn't manage to look at my PR again for dockerizing the deployment though so that Ale or Tim can deploy it.

These are some photos taken from the hackfest

]]>
<![CDATA[Google Summer of Code 2016]]>Last month, I submitted a proposal for Google Summer of Code 2016 (one of the perks when you're a student), and after one month review, my proposal is accepted. The proposal is for QGIS (under OSGEO organization) to make symbols, style, and SVG markers sharing possible through web service.

alt

Someone

]]>
http://www.akbargumbira.com/google-summer-of-code-2016/2c05610e-ae03-4888-8965-1a3d049dcc82Sat, 23 Apr 2016 07:16:59 GMTLast month, I submitted a proposal for Google Summer of Code 2016 (one of the perks when you're a student), and after one month review, my proposal is accepted. The proposal is for QGIS (under OSGEO organization) to make symbols, style, and SVG markers sharing possible through web service.

alt

Someone actually did that for GSoC 2013, but it was not merged into production. Last year, Tim told me about this work and asked me if perhaps I would be interested to continue the work. So, I started to hack around QGIS Django project. As an attempt to familiarize myself with the code base, I actually worked on other stuffs instead of that sharing feature :) I made PR to dockerize deployment, went to each issues in Redmine, and replaced the user map with my Django User Map. About two months ago, Tim poked me again about this and told me that if I need help, ideas, and suggestions, Anita and Richard are happy to help. I started to dig around the work again.

My plan for summer break was to work here (as a student in Poland, I'm allowed to work full time in the summer break). Until one day I had a thought: "Why didn't I apply for GSoC and submit the proposal for that QGIS work?". I checked the website and luckily the registration was still open. A few days after the registration, Ale (Alessandro Pasotti) contacted me if I would like to have him as a mentor along with Anita (of course I said yes). So, now I have 2 official mentors and 1 unofficial one that I keep poking around (Tim) and use his server for staging :)

Official coding time starts on May 23rd, because apparently most of the universities out there have summer break started around that date, except for Poland. Poland academic calendar is one-month late. Winter semester starts in October and summer break starts around the end of June. I think I will stay here in Poland until August to work for GSoC, and back to Indonesia in September. I am not sure if I can focus to work on the project if I stay in Indonesia.

It's a great chance for me to learn and contribute for QGIS. I hope I can do this project well :)

]]>
<![CDATA[Releasing Django User Map v1.0.0]]>Wohoo, finally I just released Django User Map v.1.0.0 after some work since 2 or 3 weeks ago! Click documentation to read the docs.

What have been changed from the previous one?

Removing Custom User Model

A bit of history, at first Tim Sutton and I created

]]>
http://www.akbargumbira.com/releasing-django-user-map-v1-0-0/d186e306-4f17-4620-9927-87a6f52cb9ddSun, 06 Mar 2016 23:04:35 GMTWohoo, finally I just released Django User Map v.1.0.0 after some work since 2 or 3 weeks ago! Click documentation to read the docs.

What have been changed from the previous one?

Removing Custom User Model

A bit of history, at first Tim Sutton and I created the Flask version here. It was a simple flask app with only sqlite to save users. For the online version of it, Python Indonesia is using this project here Python Indonesia User Map. As we needed some more features and wanted to make InaSAFE Realtime more like a web app, we created django project for all InaSAFE web related project. So the first thing I did was to re-implement the User Map with Django.

We wanted to still keep the users from the Flask User Map and migrate them to the new Django one. The Flask User Map is using an email for user to register themselves. That's why I created a custom user model with its own authentication backend. Actually in the end, we didn't migrate the users and only e-mail the old users to register on the new site :) There were other fields (InaSAFE, OSM roles, password) that weren't available from the previous one. So, instead of migrating them with a lot of default values, we decided to just mass email them.

But, the custom user model has made this apps not reusable for others to plug the apps on their existing django projects. So, after some thoughts, I decided to get rid of that and make Django User Map extend the auth user model defined for the project. This is making Django User Map really simple now as it doesn't care what the user model looks like, or how the authentication backend works. As the users need to log in before adding/updating themselves on the user map, the only thing I need to know is the login view of the project. This must be defined in the user map setting. Read here Login View

Using REST API

I was just thinking that this resource could be useful for others to use. Right now GET is the only operation allowed, returning geojson of the users.

New marker filter control

Users can select multiple roles for themselves. Therefore, I couldn't cheat filtering user based on roles using Leaflet overlay control. So, I made a custom filter control for that.

Make settings more compliant with Leaflet

For the basemap and marker icon, users (I meant, who plug Django User Map on their Django project), can pass options using the exact same L.tiles and L.icon options. You can just pass any valid options of them in the setting. Read here for marker and here for basemap

Allow users to override data privacy content and add navigation menu

This is made possible through the Django template loading mechanism. You can override the data privacy content (read here) or add navigation menu (read here)

See below how Django User map looks like when we add navigation menu:
With Navigation

For the navigation, unfortunately I am not quite satisfied with it. There are some matters that I was not quite sure. One of them is whether to have the base template of User Map extend the base template of the django project or not. With this option, there are a lot of other variables unknown, such as the name of the blocks to put User Map components.

So what I did right now is to use include. So the navigation defined in project's template will be included to the template in user map. As the user map uses Bootstrap 3, users can just use style classes or other component from Bootstrap 3. This is also a drawback for example when users already have their own template for navigation menu, and they use Bootstrap 2. This is the problem I found when I tried to plug Django User Map in to QGIS Django. I tried using scoped styling, but it apparently does not work for all browsers. And it was actually hard to use Bootstrap 3 and make it look like as if it uses Boostrap 2. So, users who have this problem perhaps could just not use the navigation menu. Drop me some comments if you have suggestion!

Made popup content dynamically generated

Basically what you defined on the setting for api_user_field will be shown on the popup content and on the API. You pick what you want to show yourself!

Some other stuffs

Small stuffs but taking quite an effort, like:

  • Utilising class based views. The first time I worked back on the code, I was embarassed by myself reading my own code :)
  • Having a nice documentation: This is a cool docs
  • Rendering popup content in client side using jsRender. Yeah users nowadays have abundant resources of their computers. So why should we render for them on the server side? :)

What is the next plan?

I want to let users who don't use spatial backend on their django project to be able to plug this apps as well. I need to look first at some options like django-geojson.

So, if you have Django project, try to plug this Django User Map, and let me know if you have some problems or patches! #ShamelessPlug

]]>
<![CDATA[DocumentUp: Generate docs from your markdown file(s)]]>While at the lab in a class this afternoon, I was looking for a simple way to document my side project, Django User Map. I am about to release the v.1 of it, I hope, in a few weeks. After comparing some options, I decided to use DocumentUp.

It's

]]>
http://www.akbargumbira.com/documentup-generate-docs-from-your-markdown-file-s/a12aaec3-1b46-43f9-9411-c226e65eb0feFri, 26 Feb 2016 21:42:48 GMTWhile at the lab in a class this afternoon, I was looking for a simple way to document my side project, Django User Map. I am about to release the v.1 of it, I hope, in a few weeks. After comparing some options, I decided to use DocumentUp.

It's so simple to set up that you can just try it right away right now! Pick one of your public Github repository and go to http://documentup.com/your-username/the-repository to see how your docs look like.

We can also use Github Pages for our repository and get the docs rendered at http://your-username.github.io/the-repository. To get this working, you need to create gh-pages branch in your repository first and create index.html (See here) and documentup.min.js (See here). You might need to wait a few minutes until you can see your docs in your Github pages URL.

And since I redirect my github profile page (from http://akbargumbira.github.io to http://www.akbargumbira.com), I can see my Django User Map docs at http://www.akbargumbira.com/django-user-map. Wspaniały, as Polish people say. Well, as long as I don't create a blog post with title 'Django User Map', it will be fine :)

So, if you have a project and want to make a simple docs out of the the repo's markdown file, this is a great choice. For now, it doesn't support private repository, multiple pages, or versioning. But if you go the DocumentUp issues list, the author is working on some of those already!

]]>
<![CDATA[#Bragging: Polish Golden Owl on Duolingo]]>So, as you can see the title of this post, I just finished the Polish tree on Duolingo! Here is the screenie of the beautiful golden owl wearing a Poland's flag scarf :)

How many lessons needed to finish the Polish tree?
From the screenie above, I now have 2990 XP.

]]>
http://www.akbargumbira.com/bragging-polish-golden-owl/cb51aaea-70d9-4322-b938-e754c9281806Tue, 26 Jan 2016 23:15:01 GMTSo, as you can see the title of this post, I just finished the Polish tree on Duolingo! Here is the screenie of the beautiful golden owl wearing a Poland's flag scarf :)

How many lessons needed to finish the Polish tree?
From the screenie above, I now have 2990 XP. It means that to finish the tree (without repeating any lesson), you need to finish 299 lessons, which I did in 26 days. I am not sure how much time it took me, but more or less I spent at least an hour in the morning and an hour at night every day.

I would say that it might be frustrating for someone who has no idea with Polish grammar. Well, bear in mind that even if you know the grammar, you will still get a headache when applying them. If you get the wrong case for noun, for example (In Polish there are 7 cases), Duolingo will not accept your answer. However, if you are keen enough, you can always find the resources related to the grammar online.

But anyway, the tree is perfect for someone like me. I am taking an intensive Polish course (click here if you are interested with the programme) in Politechnika Wrocławska for a year (Hey PWr, I just endorsed you!). In 4 months, I think more or less the grammar aspects have been explained already (I just checked the tree, actually not all. I have not been explained these in the class and you'll find them in the tree: verbal objects, gerund, participle, adverb comparison). And since last month, I really wanted to 'exercise' my grammar. I went to book store to check some Polish novels and books, and it demotivated me. So I realized that it's not the time yet to read a full Polish novel :)

And I guess I will stick to Duolingo still for the next one month and start to subscribe to some Polish podcasts. I think I tend to rush in when it comes to learning. But learning a new language is different. I need to be patient and persistent, and make the right pace that does not demotivate or too slow for me.

So that's that, I hope I can make a good progress for the next 4 months and nail the B2 level test in June! :)

]]>
<![CDATA[Race with me on Duolingo!]]>When I was on the bus from Bratislava to Wrocław, one of my friend was playing Duolingo learning Polish. I was quite surprised to know Duolingo has it. Turns out that Duolingo has released its phase 2 of Polish course just 4 weeks ago (read here). It's not stable yet,

]]>
http://www.akbargumbira.com/follow-me-on-duolingo/9ad42e3e-060c-4882-affe-bddd43c04fb0Fri, 08 Jan 2016 18:22:56 GMTWhen I was on the bus from Bratislava to Wrocław, one of my friend was playing Duolingo learning Polish. I was quite surprised to know Duolingo has it. Turns out that Duolingo has released its phase 2 of Polish course just 4 weeks ago (read here). It's not stable yet, but it's playable. I immediately grabbed my phone and started to play with the course.

After playing with it for a while and reading happy ending stories about people using Duolingo (read here for one), I decided to be more ambitious with it, taking it up as this year's resolution. To finish a course and get to level 25, apparently it needs 30k points. With one course worth 10 points, I estimated that if I am ambitious enough and persistent, I could finish it in 6 to 9 months. If I could finish it in 6 months, it would be perfect, as I will also finish my Polish course in Wrocław and take official Polish certification in June. And enjoy 3 months summer holiday afterwards :)

So if you have a goal to learn new languages too, follow me on Duolingo and I'll follow you back. Seeing something like this motivates you (to know that someone is learning harder than you), no?

]]>
<![CDATA[Random Polish Thought: Illogical Part #1]]>Now I hate when people say that Polish is very logical like math when in fact there are so many rules and so many exception. That's like mocking the beauty of math you know! In math, you can just understand one or two basic rules and from those rules, you

]]>
http://www.akbargumbira.com/random-polish-thought-illogical-part-1/303b4e6e-6594-41d2-84d7-5eb474685912Tue, 15 Dec 2015 08:02:06 GMTNow I hate when people say that Polish is very logical like math when in fact there are so many rules and so many exception. That's like mocking the beauty of math you know! In math, you can just understand one or two basic rules and from those rules, you can pretty much get anything by yourself. That's also one of the mistakes most people make when learning math. They just memorize things, "fast" methods, etc.

Last friday, I learned quantifier in Polish. Consider you want to say this (in present tense): "Some students read", in Polish it would be "Paru/parę studentów/studentek czyta". So, we need to apply Dopełniacz case to the student and always the third person singular for the verb. So, that's when I asked my teacher why it's using the third person singular verb while it's clear that the number of students there is plural. Why don't just use the verb based on the quantifier itself? Aaand she just said that most Poles also make that mistake. Yeaah sure, the only thing I could do now is to "memorize" this. Polish is just like math! #sarcasm

]]>
<![CDATA[Moving out to a private room]]>Hmm, why did I want to move out from student dormitory in the first place?

You can just imagine how noisy and crowded it is from this arrangement in T3, one of the student dorms owned by Politechnika Wrocławska:
In one hall there are 8 rooms, 1 kitchen, 2 showers,

]]>
http://www.akbargumbira.com/moving-out-to-a-private-room/62df1f1c-94e1-4cc7-9cdf-ec2b21d236d3Tue, 08 Dec 2015 17:09:39 GMTHmm, why did I want to move out from student dormitory in the first place?

You can just imagine how noisy and crowded it is from this arrangement in T3, one of the student dorms owned by Politechnika Wrocławska:
In one hall there are 8 rooms, 1 kitchen, 2 showers, 3 toilets, and some bathroom sinks. One room is filled with 3 people. The room is about 5 meters long and 3 meters wide (and filled already with 2 wardrobes, 3 beds, a refrigerator, 3 tables, and 3 chairs)

It was super noisy in a way that my ears were constantly buzzing. I couldn't have 1 or 2 hours quiet time to think, except for a night when I started to create this website. That was from 1am - 3am in the morning. The question is, don't the university think that we need some time for ourselves to think or work? We are all engineers and scientists. It's impossible to ask the students to be quiet all the time when it's that crowded already. I asked to move out to a double room several times without any result.

When I came here, I had some plans to work on some projects and join some online courses to prepare my 2nd year here. But that was only a plan when I was in the dorm. I couldn't even wake up in the morning for 7 minutes workout, listen to podcasts, or read some books. I always felt sleepy in the class, came late to the class, and felt really really bad about myself. So, I was in desperate mode to get myself back and to look for a better environment.

Since the beginning of this month, I now live in single room in a shared apartment. Bear in mind that I am not exaggerating here. It's super hard to find a private room in Wrocław. I probably had contacted more than 50 people from the ads (from various websites: olx.pl, gumtree.pl, instancje.pl, etc). The rate the owner texted me back was perhaps around 1 every 10 texts. And most of them just told me that it's not available anymore. I was quite pessimistic.

Lucky me I got help from my language tandem friend (I teach her Bahasa Indonesia, she teaches me Polish). We just looked at 1 or 2-hour-old ads and phoned the owner directly. It turns out that looking for a single room here is really competitive. When I was looking around at the room, some people calling the owner and even there's one lady who came to see the room too. I decided to pay it right away. Or perhaps it's just an old school psychology trick? :)

So a tip for you when you want to rent a private room in Wrocław: You need to be able to speak Polish and call the owner right away. Or ask someone who can speak Polish to do it so. Oh another bummer is, even some owners only want someone who can speak Polish to rent their room.

So far, I've been enjoying my new environment. I start to wake up early again, do 7 minutes workout (and started doing 30 days Livit abs challenge - today is the 7th day), listen to podcasts before sleeping, and just started to read a novel again. The apartment is a 6-floors-building, so I can run up and down the stairs too now. I'm back!

]]>
<![CDATA[Random Polish Thought: I see what you did there]]>Languages are more or less 'defined' nowadays. Some are evolving and some perhaps will remain the same for some centuries. But if you think about it, how does one language begin to exist?

That is one hell of a question right? Hmm, I start to think that Philology is one

]]>
http://www.akbargumbira.com/random-polish-thought-i-see-what-you-did-there/567d7f51-9258-42f8-bb56-f4249e22e4f7Mon, 07 Dec 2015 23:15:36 GMTLanguages are more or less 'defined' nowadays. Some are evolving and some perhaps will remain the same for some centuries. But if you think about it, how does one language begin to exist?

That is one hell of a question right? Hmm, I start to think that Philology is one interesting study. Now, Let's talk about Polish.

I would say that Polish is one unique language. One of my lecturer said that it is very logical, another said that it's just like math. Yes, compared to other languages I know (Bahasa Indonesia, English, and Sundanese - I could read Arabic, but I don't understand it, so goes off the list), Polish is very grammatical; there are a lot of rules, and to speak it you really need to think. When one wants to say "I had bread with jam in the cafe", this is what happens in their mind more or less:

I am a man, so I need to use jeść with Ja and masculine case, so it's jadłem. Oh wait, I don't do this regularly, so I need to use dokonane case for that verb, zjadłem it is! Bread is chleb, easy peasy. Hmm, but I eat it with the jam. I need to apply narzędnik (instrumental) case for the jam. Jam in Polish is dzem, it's masculine, the narzednik case is dzemem. So bread with jam is chleb z dzemem. Cafe is kawiarnia in Polish. But it's locative case, I need to apply miejscownik. Hmm, it ends with n, that's a relief! There's no need to think if it's masculine, feminine, or neutral! So, in cafe is w kawiarnie! Let's recap, zjadłem chleb z dzemem w kawiarnie. Hmm, I hope this is correct. Let's tell the mouth to say it!

And finally you got that sentence out of your mouth. I don't know how much time I need to be able to speak it without thinking like that and let my mouth do the work :)

And you should know that Poles are really proud of the complexity of the Polish grammar. If they learn Bahasa Indonesia, they will probably raise their eyebrows knowing how simple it is (They probably find it hard to apply though as we don't really use formal language in everyday conversation). And I am really proud of Bahasa Indonesia too. It's so simple and yet we never feel that we're out of words or way to tell something. Well, I am talking about the general aspect of a language. Of course there are some words in other languages that would need a lot of explanation in other languages. Such example is with Sundanese, e.g there are some different single words to describe how you fall down - based on your position, how you fall, from where you fall, or how you sound when you fall (tijengkang, tigebruk, tikusruk, tikosewad, tijalikeuh, tigulitik, tigebrus, etc). Beautiful, no?

As we were talking about grammar, I believe that the ancient Poles don't really 'define' it. It's just how they sound. And then some Vikings wanted to learn it and they forced the ancient Poles to define the rules for them or else they will take the Poles to Uppsala and forced them to convert their faith. Sorry, I watched The Vikings too much! :)

Enough with grammar, let's talk about Polish vocabularies.

I couldn't remember how many times I said "Aaah, I see what you did there!" when I learned some new words. See how some Polish words are derived.

Days in Polish

Monday - Poniedziałek (Po = after)
Tuesday - Wtorek (Wtóry = the second)
Thursday - Środa (Srodek = middle)
Friday - Piątek (Pięc = Five)
Saturday - Sobota
Sunday - Niedziela (Nie dzialać. Nie = No, dzialać = to work)

Sobota is very obvious from the sabbath jewish day and many languages use it too.

Now some random words

Blue and Heaven

Blue is Niebieski and Heaven is Niebie, what?? Let's assume that Poles 'invented' the color first before religion or faith. This is probably how they invented it:

A: "Hey you know what would happen after we die?"

B: "We probably go to that blue sky if we do good in this land (yes they probably only refer to what they live as land). That blue sky looks peaceful!"

C: "Taak, bardzo niebieski"

A: "Niebie!"

B and C: "Haaa niebie"

D: "Hey what's up? What are you guys talking about, niebie?"

Sunrise and Sunset

West is Zachód, East is Wschód, and Sun is słońce. Guess what sunrise and sunset are in Polish? Sunrise is Wschód Słońca and Sunset is Zachód Słońca. I bet they are too lazy to define new words ah?

Tree and Door

Tree is Drzewo and Door is Drzwy. Yeah I guess no one used plastic doors back in the old days here.

Room and Peace

Pokój in Polish could mean 2 things: Room and Peace. Yeah makes sense, we're looking for some peace when we go back to our room.

This is TLDR already. The list could go on and on. What I could say is, Poles really like to play with prefixes, suffixes, literal meaning, or some associations. So far, it's fun to learn it!

]]>
<![CDATA[Cool Github is Cool: Embedding JSON Files Map]]>It's nothing new that Github could render geojson files in our repository. So, I was thinking to make some maps in json files on Github, use iframe, and show just the map part from that page.

But Github doesn't just stop there to please developers. They make many stuffs embeddable.

]]>
http://www.akbargumbira.com/cool-github-is-cool-embedding-json-files-map/57529d12-b531-48f6-a469-0759c3529ab7Wed, 11 Nov 2015 18:02:18 GMTIt's nothing new that Github could render geojson files in our repository. So, I was thinking to make some maps in json files on Github, use iframe, and show just the map part from that page.

But Github doesn't just stop there to please developers. They make many stuffs embeddable. I don't want to explain how to do that, you can just read it here. No, it's not only map that you can embed in your website, 3D files too! Probably there are other stuffs too that we can embed from github :)

Here is the example, a map of QGIS Contributors from the JSON files in its repository.

]]>
<![CDATA[Happy Independence Day, Poland!]]>Today marks the independence day of Poland. This day 1918, Poland was proclaimed as an independent country, after some series of partitions with Russia, Prussia, and Austria.

I would really like the idea to see and enjoy the festive celebrations and marches. But it seems that Poland is not really

]]>
http://www.akbargumbira.com/happy-independence-day-poland/11b50b74-aa29-498d-9d9c-53e874ea2068Wed, 11 Nov 2015 10:48:24 GMTToday marks the independence day of Poland. This day 1918, Poland was proclaimed as an independent country, after some series of partitions with Russia, Prussia, and Austria.

I would really like the idea to see and enjoy the festive celebrations and marches. But it seems that Poland is not really welcoming foreigners to enjoy today's celebration with them. Expats group and many people told me not to go outside especially when the so called 'Patriotic March' begins. Yeah, it's quite sad, compared to Independence day in Indonesia. We do a lot of fun things (balap karung, panjat pinang, makan kerupuk, etc) and we really welcome foreigners to see and enjoy those fun things.

It's kind of true that Poland is not welcoming foreigners as much as I thought. Foreigner was getting bullied in the tram (which has become a hot topic in Wrocław Expats group). Or as happened to me or my Indonesian friends, I couldn't remember how many times people 'scanned' me (you know when people 'really' look at your face), or people intentionally body-crashed my friend while walking, or how hard it is for me to find a private room because I don't speak Polish (yet). I am just a bit disappointed considering how rich and mixed European culture is, meanwhile some people can't just accept diversity.

But that's fine, I hope over time I can enjoy Poland more and for now I'll just enjoy Poland's Independence day by posing with its flag :)

]]>
<![CDATA[InaSAFE Lolcommits Video]]>Months ago, I found an intriguing repository on Github, lolcommits, and I started to use it for InaSAFE repository (Here is my old post about that: Taking commit selfie using lolcommits)

Just 2 hours ago, I stumbled upon that lolcommits directory in my mindpalace (red: my laptop). The images were

]]>
http://www.akbargumbira.com/inasafe-lolcommits-video/e8ad59c1-a41e-4736-9e33-503ef126a3f3Mon, 09 Nov 2015 23:47:59 GMTMonths ago, I found an intriguing repository on Github, lolcommits, and I started to use it for InaSAFE repository (Here is my old post about that: Taking commit selfie using lolcommits)

Just 2 hours ago, I stumbled upon that lolcommits directory in my mindpalace (red: my laptop). The images were captured for almost 3 months, from March 18th until June 9th. And I should've activated lolcommits for my work in Labster (activating lolcommits for this web now :) )

I was thinking that it might be fun to make a video out of it. I found a handy bash script and just use it. Works like a charm. So, here is the video.

]]>