Author: Kuba

Interview with Drew Bollinger from developmentSEED on Machine Learning.


Artificial Intelligence (AI) and Machine Learning(ML) are one of those buzzwords that became really popular in recent years. How much hype vs. substance is behind them? Are they practical? How can you use them to solve your specific GIS problems?

Those were just a few questions that had in mind and wanted to answer.

Fortunately, I found devlopmentSEED which specialise in using Machine Learning to solve important problems and ask them to help me out.

I had privilege to talk to Drew who works there and he was eager to answer all of my questions:)
If you’re interested in AI/ML and especially how you can use it in your GIS work, this interview is a great way to start!

00:00   Short intro: what’s this interview is all about?
00:53   How Developmentseed makes Machine Learning more accessible for everyone?
02:06   What’s Machine Learning anyway and how it relates to Artificial Intelligence and GIS?
03:50   How much data do you need to make Machine Learning practical?
05:29   What we can do with Machine Learning that we can’t actually do without it? Drew tells a story about how ML helped        mappers with mapping Energy infrastructure in developing countries.
09:32  Why IA makes more sense that AI right now?
10:20   What’s Developmentseed’s Skynet? (and why you don’t need to fear the evil AI)
11:47   Should GIS Professional learn Machie Learning?
13:35   What would be the very first step for GIS Professionals to start learning Machine Learning?
16:04   What’s LabelMaker and why should you try it?
18:53   When will Machine Learning be integrated into popular GIS desktop software?
20:18   Any ML use cases not based on OSM?
22:05   What’s the main chellange in “training” your own ML algorithms and how to overcome them?
25:21   Question to you dear GIS Professional: How do you think ML would help you with your GIS workflow?

You can also listen to the interview on youtube:

Additional resources:
developmentSEED projects:
Machine Learning resources:

Question of the day: How do you think Machine Learning would help you with your GIS workflow?

Leave me a comment below, thank you!


Interview with Silas Toms – the Python Expert who brought GIS to the Super Bowl


I wanted to interview Silas for quite some time because his Python books are well know in GIS community.

My main goal with this interview was to dig deep into Silas’s experience and mine his insights mainly about learning programming.

But, we’ve had such a good time that we went way beyond that!

There are a lot of valuable insights in this interview but I especially like:

  • The story about his career path and how he managed to “bridge” his interests in Geography with technology.
  • His practical insights about learning and teaching programming and what really works when it comes to both.
  • Ok, the story behind the Super Bowl GIS project and how it keeps a lot of people safe (plus how it all started with Taylor Swift:)

There’s much more inside, so I highly recommend the whole interview!

And don’t forget to leave me a comment down below and answer the question (actually there are two) of the week:

How do you describe your GIS work to others?

Where’s GIS tech in your everyday life?


Also available on youtube:

The Interview notes:

00:00 Starting with Super Bowl tease:)

00:21 About Silas’s latest book.What’s new in ArcPy and ArcGIS Second Edition?

01:43 What does the trickster god Loki has to do with GIS and Business?

03:41 How Silas’s personal experience inspired him to help others with programming,  what’s the most satisfying about teaching.

05:43 How the economy crisis took Silas’s career in the direction of the technology even though he wasn’t expected it.

08:11 How he then was able to “bride the gap” between his interests in geography and technology.

08:47 How Python improved the analysis process from week long “button pushing” to one hour in only one month.

09:29 Why automating yourself “out of doing the boring stuff” can be a good thing.

11:56 Why you don’t have to fear automation? Important “tasks” that you can’t actually automate.

13:42 How to convince someone to automate…

16:35 The “traps” of trying to teach yourself programming. The best way to learn when you’re beginner and why this “method” is particularly effective?

19:25 The most difficult thing to learn for beginners and the most difficult thing to teach for teachers.

20:14 The challenges and delights of teaching programming.

21:42 Silas’s reveals some details about his next book project.

24:50 What’s the best way to get started programming?

27:09 How Silas was the key person in bringing GIS to the Super Bowl and helped with security of 75k fans. (tip: it all started with Taylor Swift!)

33:03 Questions for you, dear GIS Professional: How do you describe your GIS work to others? Where’s GIS tech in your everyday life?

35:11 What’s good balance between technology skills and geography skills? Why geography matters?

Additional resources/informations:

Loki Intelligent Corporation:
ArcPy and ArcGIS Second Edition:
ArcPy and ArcGIS: Geospatial analysis with Python:
(Both are available through Amazon as well).
The new book will be out in late February/early March.
Connect with Silas:
And don’t forget to answer our key question below:

How do you describe your GIS work to others?

Where’s GIS tech in your everyday life?


Programming jargon crusher: functions,methods and complex objects.


You’re with me so far?

I hope so!

Let’s talk about functions.

So, what’s a function in programming?

It’s just a piece of code that does a specific task
and return a specific value.

Easy, right?

Let me give you an example.

Let’s use a standard Javascript function called round
that will round it’s argument to the nearest integer number.

An argument is just a value that we pass into a function.

A function can have many arguments, in our case we have only one.

So, to use or run this function you need to write something like that in your code:


Let’s ignore for a moment the fact that there’s Math. before our function’s name. I will
explain that in the moment.

So, this function will return 1, right? This is the nearest integer for our first argument which is

Here’s the thing:
when you actually put this function into your code like that, you won’t see a thing.

Why is that?

Well, we didn’t actually save a return value anywhere. Right?

And, what do we use to store values? Do you remember?

I’m sure you do:) A variable, right?

So, if you want to actually use a value or a result of this function you would have to write
something like that:
var myroundnumber = Math.round(1.2);

Then our newly created variable called myroundnumber will store a number 1 which is the result
of our round function.

When you look at our first web mapping application will see plenty of functions like that
and variables that store their results, in our code example map_app7.html we have:
In line 14:
var mymap =‘mapid’);

It looks quite similar, right?

We have a different function, in this case it’s called map (again we’re ignoring L. for now)
and instead of having a number as a first argument we now have a text.

And if you have a look at the rest of the code, you will see that we’re using function all the time
in that way.

Of course, we have different kinds and numbers of arguments,but basically it’s all the same.

Ok, let’s clarify this Math. and L. confusion. What’s that about?

So, those are objects. Our function belong,so to speak, to two different objects.

As you remember an object is a way to group values using keys. Like an index at the back of a book.

Math and L objects are more complex in a way that instead of storing values they store functions.

The only thing that you need to know is that a function that belongs to an object is called its method.

So, Math.round is really a function that belongs to a Math object.

What about L object?

As you probably remember from our second class in L object we have most of the Leaflet’s web mapping
library functionality.

So, what you’re mostly do when you’re building a web mapping application is you use L’s functions (methods)
to create a web map, center it etc.

Ok, let’s recap:
A function is just a container for a piece code.

When you run a function,it’s like you would run a code that is inside it.

A function can have arguments which are basically values that we can pass inside a function.

After function runs it will return a value. To save it you need to store it in a variable.

Functions that belongs to an object are called methods.

Objects can store simple keys and values (numbers or text) or functions.

Ok, that’s it for now:)

Let me know if you have any questions!


Programming jargon crusher: grouped values.


In the last post I’ve told you
everything you need to know about
values and variables.

And I hope you’ve enjoyed it!

Those two concepts are really a fundamental
parts of programming.

Now, let’s move to learning about grouping values.

So, a lot of times in programming there a lot of single
values relate to each other.

The perfect example is latitude and longitude values.

They often are used together ,so it’s logical that we will
group them together.

The most basic way to do that is to use an array.

Array is just a list of single values grouped together in sequence.

Let’s see some examples:

If you look at code examples from our last class (it’s class no.2):
And specifically example from map_app7.html line 17 you will see something like that:
mymap.setView([51.505, -0.09], 12);

And here’s the bit we’re most interested in:

[51.505, -0.09]

This is our array of latitude and longitude.

Easy, right?

Another way to group values is to create an object also called a dictionary.

When you look at line 26 of our example you will see something like that:
var osm = new L.TileLayer(osmUrl, {minZoom: 8, maxZoom: 13, attribution: osmAttrib});

You can identify the object by curly brackets:
{minZoom: 8, maxZoom: 13, attribution: osmAttrib}

So, this kind of grouping is a little bit different since we’re grouping
values using keys. Here we don’t care about the order of values. As long
as you define your keys and corresponding values to those keys you’re golden:)

Let’s break it down:
Our keys are: minZoom, maxZoom, attribution
Our values are: 8, 13, osmAttrib

An object is just like an index at the back of a book. You have words or phrases
as keys and page numbers as values.

When you should use an array and when an object?

Well, a lot of times an APIs like Leaflet’s API that we’re using in our example will tell you what to
use when.

In our first example Leaflet’s setView requires you to use an array as first argument. If you use an
object you will get an error.

Same goes for L.TileLayer in our second example, the second argument has to be an object with
specific keys. Otherwise you won’t be able to create a raster layer.

Ok, so let’s recap:

There are two most popular way to group single values in programming.

Using an array or an object.

And array is an ordered  list of single values.

An object is an unordered dictionary of keys and values.

Different parts of an API will require you to use arrays or object in different situations.

That’s it!

If you have any questions about what we’ve covered so far leave me a comment down below:)

In the next part, we will talk about functions, methods and objects (yes, I know we’ve already
covered objects,but next we will talk about more complex objects).

Stay tuned:)


Programming jargon crusher – Variables and Values.


In the previous post I’ve told you how
lack of jargon understanding can hold us
all back from learning new things.

Here I would like to explain and clarity for you
those few fundamental programming
concepts that you will be using all the time when you’re
working on your own programming project.

Ok, so let’s get moving:)

Let’s starts with a value.

What’s a value in programming?

It’s simply some kind of data.

If you think about what’s in the core of every web mapping applications it all boils down to showing
spatial data on a map.

And guess what – a map is a data too:)

So, in programming we have a few fundamental data types that we’re working with.

In web mapping applications the main piece of data are coordinates.

Latitude and longitude are pretty much everywhere.

So, our first data type we work with when programming is a number.

In programming you can use numbers directly, so every time you put a number like 2.22
into your code it will mean exactly that.

In a web mapping application we usually have a lot of text associated with latitude and longitude.

To use a text when programming you need to specifically put it into apostrophes. This for one simple
reason, source code is text too, so a text that you will be using in your application has to be somehow
distinguished from a source code.

So, those two types of values are by far the most commonly used in web mapping applications.

Since programming is all about working with data you also have to have some way to store it.

This is where variables come in.

A variable is a container that store values. When you create a variable you will also name it. Then
every time you use this variable’s name in your code it’s just like you would use its value.

You can change a value of a variable any time you want, you just assign different value to it.

Ok, so let’s recap what you’ve learned:
The two most fundamental values we’re working with in web mapping application are
numbers and text.

In programming, we use numbers directly. Every time you use a number a programming language
sees it as a number.

Text is different. You need to put a text into apostrophes.

A variable is just a way to store numbers and text. A variable has a unique name.
You can use variables just as you would use values.

Ok, that’s it for now:)

Next, I will tell you all about working with more that one value at the time.

I hope that was simple enough!

Feel free to leave me a comment and let me know what you think:)


Why learn programming jargon?


Have you ever read, listen or watch someone
talking about programming and after a few
seconds realise that you’re far,far away,
thinking about totally different things?

It’s almost like our minds shut down when
we hear something we don’t quite understand.

It’s funny because, I do programming for a really
long time and there are still times when my mind
do this from time to time.

It’s because there are always those niches within
every field where experts develop their own lingo
and when you’re not inside their world, it like listening
to an alien species talking in their own language.

Years ago, I went to a Python  conference in Wilnius.

And one of the hot topics back then was a Python version
written in Python itself.

So, I decided to go to one of the lectures to educate myself
on the subject.

After about 10 minutes, I almost fell asleep.

What happened?

Well, right from the beginning, speakers delved deeply into technical details
of their project.

It was full of jargon I didn’t understand, so I wasn’t able to actually
grasp most of the concepts presented there.

I’m sure it sounds familiar.

It happens to all of us, because we’re simply not experts in everything.

Even if what you’re learning something that is not complicated in itself, when you don’t know
the terminology, your mind will assume that this subject matter is indeed very difficult to learn.

Programming is a great example.

There’s nothing special about doing programming.

It’s similar to learning how to use a complex piece of software.

But, there’s this intimidation that every beginner feels.

Some time ago when I was preparing my web mapping course, I had to
refresh my memory on some parts of Javascript syntax.

So, I’ve opened a kindle version of one of Javascript books that I like
and started to go trough one of the chapters.

Then, it hit me.

It sounded so complicated!

I haven’t heard this precise terminology or use it for a really long time.

It became obvious to me why beginners think that programming is complicated.

It’s because it sounds complicated and hard;)

I’ve recently got an idea to explain programming terminology/concepts
only using spatial and GIS terms.

That way you can grasp programming essentials in no time and spend more
time building stuff:)

I don’t know if it’s possible or how far can I actually stretch this,but in the next
post I will explain most import programming concepts in a language that you
can easily understand!


How to program smarter, not harder…


When you’re starting to write code that actually works, it’s natural for you to want to write more code.

Soon, you’re getting rush out of this creative process. In fact I love this about programming.

But, sometimes in all this excitement you will be doing way too much work that is needed.

Here, I’m explaining how you can avoid this mistake and create a code you will be able to use in the future.


The best programming advice ever!


When I started to build software I also started to look for an advice from more experienced programmers.

I wanted to learn how to build software faster and how to write robust and bug-free code.
So, over the years I came across lots of programming “wisdom” from different programming cultures. And there’s one principle in particular that stayed with me and really helped me over the years.

In this video you will learn what this principle is all about and how to apply it to both building software and learning programming.