World of Julia

First published: 2014-06-30

Updated: 2016-03-16

Jiahao Chen, MIT

Have you ever wondered who contributes to Julia? This notebook explores basic facets of the Julia community.

(Note: For best results, make sure you have an ImageMagick build with OpenMP support enabled.)

First, load up a bunch of packages written by the Julia community.

In [1]:
using Compat
using Compose
using Gadfly
using GitHub
using HDF5, JLD
using Interact
using MetadataTools
using JSON
using ProgressMeter
using Requests
using Shapefile
using URIParser

Next, authenticate a GitHub access token for reading data from GitHub.

Substitute your own token by following these instructions.

In [60]:
auth_token="" #to access Github API
my_auth = authenticate(auth_token)
Out[60]:
GitHub.OAuth2(171263**********************************)

Some parts of this notebook take awhile to run because of multiple HTTP requests to various websites. Here we see if data from a previous run were stored, and load it into working memory if it does.

The storage format is JLD, which is a HDF5 file with a particular way to describe arbitrary Julia types.

In [3]:
try if isfile("worldofjulia.jld")
    A = JLD.load("worldofjulia.jld")
    locations = A["locations"]
    juliastargazers = A["juliastargazers"]
    juliawatchers = A["juliawatchers"]
    juliacontributors = A["juliacontributors"]
    allcontributors = A["allcontributors"]
end end

The main Julia repository

Let's start with the main repository.

In [4]:
authors=contributors("JuliaLang/julia", auth=my_auth)[1]
println("$(length(authors)) contributors found for JuliaLang/julia")
445 contributors found for JuliaLang/julia

An avatar montage

GitHub provides detailed information about user profiles.

One fun thing to do is to download everyone's profile pictures and turn them into a montage using ImageMagick.

Julia provides a native download function, which is convenient but forks an external command such as curl or wget each time it is run. To download many small files, it is more convient to use Requests.jl.

dl below is a basic working replacement for download.

In [5]:
dl(url::Nullable{URI}, filename, tries = 3) = 
    if isnull(url)
        throw(ArgumentError("Cannot dl($url)"))
    else
        dl(get(url), filename, tries)
    end

dl(url, filename, tries=3) = dl(URI(url), filename, tries)

#Download data from a given URL to a file.
function dl(url::URI, filename, tries = 3)
    isfile(filename) && return #Don't overwrite existing files
    r = nothing
    for i=1:tries
        try
            r = get(url)
            
            r.status == 200 && break

            if contains(r.headers["Content-Type"], "text/html")
                display("text/html", r.data)
            end
            r.status == 302 && break #Redirection
        catch e
            warn(e)
        end
        sleep(3)
    end
    if r!=nothing && r.status == 200
        open(filename, "w") do f
            write(f, r.data)
        end
    else
        warn("Could not download $url\nStatus: $(r.status)")
    end
end
Out[5]:
dl (generic function with 6 methods)

Next, use dl to download the avatars associated with an iterable collection of authors. We also use ImageMagick's mogrify command to automatically resize each avatar file to 64x64 pixels.

getavatars can take awhile, so we use [email protected] to show a progress bar for the main loop over the authors.

In [6]:
#Download everyone's avatars
function getavatars(authors; verbose::Bool=false)
    const mogrify = `/usr/local/bin/mogrify`
    
    avatarfiles = Dict()
    @showprogress for author in authors
        login = get(author["contributor"].login)
        avatarfilename = string(login, ".png")
        if !isfile(avatarfilename)
            url = author["contributor"].avatar_url
            verbose && info("Downloading avatar for $login")
            dl(url, avatarfilename)
            run(`$mogrify -resize 64x64 $avatarfilename`)
        else
            verbose && info("Avatar for $login already downloaded")
        end
        avatarfiles[login] = avatarfilename
    end
    avatarfiles
end
avatarfiles = getavatars(authors)
Out[6]:
Dict{Any,Any} with 445 entries:
  "agoddard"        => "agoddard.png"
  "davidkh"         => "davidkh.png"
  "cameyo42"        => "cameyo42.png"
  "JeffBezanson"    => "JeffBezanson.png"
  "btracey"         => "btracey.png"
  "rmyorston"       => "rmyorston.png"
  "dancasimiro"     => "dancasimiro.png"
  "schenker"        => "schenker.png"
  "julian-gehring"  => "julian-gehring.png"
  "cicku"           => "cicku.png"
  "catawbasam"      => "catawbasam.png"
  "GunnarFarneback" => "GunnarFarneback.png"
  "autozimu"        => "autozimu.png"
  "goretkin"        => "goretkin.png"
  "doomsplayer"     => "doomsplayer.png"
  "PallHaraldsson"  => "PallHaraldsson.png"
  "garrison"        => "garrison.png"
  "randyzwitch"     => "randyzwitch.png"
  "peterdn"         => "peterdn.png"
  "doowttam"        => "doowttam.png"
  "cbecker"         => "cbecker.png"
  "patrickyevsukov" => "patrickyevsukov.png"
  "jgoldfar"        => "jgoldfar.png"
  "shashi"          => "shashi.png"
  "dcampbell24"     => "dcampbell24.png"
  ⋮                 => ⋮

Finally, use ImageMagick's montage to create a montage of contributors to the main julia repository using their GitHub avatars. Each avatar can also be sorted and annotated by the number of commits to the repository.

In [7]:
function makemontage(filename, authors, avatarfiles; layout=nothing)
    cmd = `montage`
    layout==nothing || (cmd = `$cmd -tile $(layout[1])x$(layout[2])`)
    σ = sortperm([author["contributions"] for author in authors], rev=true)
    for idx in σ
        author = authors[idx]
        login, contribs = get(author["contributor"].login), author["contributions"]
        if !haskey(avatarfiles, login)
            warn("Skipping user $login: no associated entry in avatarfiles")
            continue
        end

        avatarfile = avatarfiles[login]
        if !isfile(avatarfile)
            warn("Skipping user $login: no file $avatarfile")
            continue
        end
        cmd = `$cmd -label "$login\n($contribs)" $avatarfile`
    end
    cmd = `$cmd -geometry 64x64+16+16 -font Helvetica $filename`
end
Out[7]:
makemontage (generic function with 1 method)
In [8]:
#Compute montage layout
aspectratio = φ #Golden ratio
ntiles=√(length(authors)/aspectratio)
ntilesx, ntilesy = ceil(Int, aspectratio*ntiles), ceil(Int, ntiles)
Out[8]:
(27,17)
In [9]:
cmd = makemontage("montage_juliaonly.jpg", authors, avatarfiles, layout = (ntilesx, ntilesy));
In [10]:
#@time run(cmd)

Including Julia packages

Julia has a rapidly growing list of registered packages which represent the efforts of yet more developers. We can make another montage of contributors, this time including all package authors also.

Use the built-in Pkg module to get a list of available packages, then use MetadataTools.get_pkg to retrieve all the associated package metadata and retrieve the GitHub owners and repository names using URIParser.parse_url.

In [11]:
#Scan package metadata and get URLs for all registered packages
Packages = Any[]
@showprogress for pkg in Pkg.available()
    url = URIParser.parse_url(get_pkg(pkg).url)
    if url.host == "github.com"
        _, owner, repo = try
            split(url.path, '/')
        catch exc
            println(STDERR, "Error parsing $(url.path) from $url")
            rethrow(exc)
        end
        repo = split(repo, ".git")[1]
        push!(Packages, (owner, repo))
    else
        warn("Skipping non-GitHub repo $url")
    end
end
println("$(length(Packages)) packages found.")
Progress:  61%  ETA: 0:00:00
WARNING: Skipping non-GitHub repo git://git.colberg.org/OnlineMoments.jl.git
Progress: 100% Time: 0:00:01

Now we can query each package's GitHub repository for its corresponding list of contributors and commit counts, merging the contribution counts back into authors for a total count across all the repositories.

In [12]:
#Update authors with package contributors
#Collates all the contribution counts also
function addpkgcounts!(authors, Packages)
    @showprogress for (owner, repo) in Packages
        thispkg_contributors = try
            contributors(owner*"/"*repo, auth=my_auth)[1]
        catch
            warn("Skipping $owner/$repo")
            continue
        end

        isnew = true
        #Merge global statistics
        for entry in thispkg_contributors
            contributor = entry["contributor"]
            for (i, authordata) in enumerate(authors)
                if get(authordata["contributor"].login) == get(contributor.login)
                    isnew = false
                    authors[i]["contributions"] += entry["contributions"]
                    break
                end
            end
            isnew && push!(authors, entry)
        end
    end
end
    
juliacontributors = copy(authors)
addpkgcounts!(authors, Packages)
878 packages found.
Progress: 100% Time: 0:06:58

As before, grab everyone's avatars.

In [13]:
avatarfiles = getavatars(authors)
Out[13]:
Dict{Any,Any} with 727 entries:
  "btracey"         => "btracey.png"
  "benhamner"       => "benhamner.png"
  "schenker"        => "schenker.png"
  "nstiurca"        => "nstiurca.png"
  "pearlzli"        => "pearlzli.png"
  "GunnarFarneback" => "GunnarFarneback.png"
  "njwilson23"      => "njwilson23.png"
  "garrison"        => "garrison.png"
  "randyzwitch"     => "randyzwitch.png"
  "jdrugo"          => "jdrugo.png"
  "lvnguyen"        => "lvnguyen.png"
  "jcorbin"         => "jcorbin.png"
  "yipihey"         => "yipihey.png"
  "jey"             => "jey.png"
  "davidlizeng"     => "davidlizeng.png"
  "cstjean"         => "cstjean.png"
  "goedman"         => "goedman.png"
  "charlesll"       => "charlesll.png"
  "fhs"             => "fhs.png"
  "mpf"             => "mpf.png"
  "mcprentiss"      => "mcprentiss.png"
  "jayschwa"        => "jayschwa.png"
  "domenzain"       => "domenzain.png"
  "LeoK987"         => "LeoK987.png"
  "mdavezac"        => "mdavezac.png"
  ⋮                 => ⋮

And now we can make a new montage.

In [14]:
#Compute montage layout
aspectratio = φ
ntiles=√(length(authors)/aspectratio)
ntilesx, ntilesy = ceil(Int, aspectratio*ntiles), ceil(Int, ntiles)
Out[14]:
(35,22)
In [15]:
cmd = makemontage("montage_julia.jpg", authors, avatarfiles, layout = (ntilesx, ntilesy));
In [16]:
@time run(cmd)
LoadError: could not spawn `montage -tile 35x22 -label 'JeffBezanson\n(7584)' JeffBezanson.png -label 'timholy\n(4428)' timholy.png -label 'StefanKarpinski\n(3684)' StefanKarpinski.png -label 'ViralBShah\n(2840)' ViralBShah.png -label 'lindahua\n(2749)' lindahua.png -label 'jakebolewski\n(2539)' jakebolewski.png -label 'dlfivefifty\n(2299)' dlfivefifty.png -label 'mlubin\n(2164)' mlubin.png -label 'SimonDanisch\n(2131)' SimonDanisch.png -label 'vtjnash\n(1979)' vtjnash.png -label 'MikeInnes\n(1878)' MikeInnes.png -label 'simonster\n(1775)' simonster.png -label 'dcjones\n(1752)' dcjones.png -label 'tkelman\n(1747)' tkelman.png -label 'Keno\n(1711)' Keno.png -label 'stevengj\n(1667)' stevengj.png -label 'IainNZ\n(1578)' IainNZ.png -label 'jiahao\n(1447)' jiahao.png -label 'johnmyleswhite\n(1373)' johnmyleswhite.png -label 'nolta\n(1278)' nolta.png -label 'rgiordan\n(1233)' rgiordan.png -label 'shashi\n(1186)' shashi.png -label 'pluskid\n(1131)' pluskid.png -label 'ChrisTimperley\n(1078)' ChrisTimperley.png -label 'weijianzhang\n(1042)' weijianzhang.png -label 'dmbates\n(989)' dmbates.png -label 'andreasnoack\n(984)' andreasnoack.png -label 'joshday\n(951)' joshday.png -label 'carlobaldassi\n(921)' carlobaldassi.png -label 'andrewcooke\n(917)' andrewcooke.png -label 'joehuchette\n(882)' joehuchette.png -label 'brian-j-smith\n(878)' brian-j-smith.png -label 'codles\n(840)' codles.png -label 'staticfloat\n(839)' staticfloat.png -label 'yuyichao\n(835)' yuyichao.png -label 'quinnj\n(815)' quinnj.png -label 'kmsquire\n(775)' kmsquire.png -label 'tbreloff\n(751)' tbreloff.png -label 'wbhart\n(706)' wbhart.png -label 'tanmaykm\n(697)' tanmaykm.png -label 'ihnorton\n(694)' ihnorton.png -label 'r9y9\n(681)' r9y9.png -label 'jverzani\n(668)' jverzani.png -label 'davidavdav\n(653)' davidavdav.png -label 'ehsantn\n(642)' ehsantn.png -label 'sbromberger\n(640)' sbromberger.png -label 'MichaelHatherly\n(638)' MichaelHatherly.png -label 'amitmurthy\n(616)' amitmurthy.png -label 'tonyhffong\n(569)' tonyhffong.png -label 'scidom\n(561)' scidom.png -label 'MikaelSlevinsky\n(537)' MikaelSlevinsky.png -label 'sjkelly\n(528)' sjkelly.png -label 'simonbyrne\n(522)' simonbyrne.png -label 'WestleyArgentum\n(519)' WestleyArgentum.png -label 'madeleineudell\n(514)' madeleineudell.png -label 'aviks\n(492)' aviks.png -label 'Luthaf\n(492)' Luthaf.png -label 'samoconnor\n(469)' samoconnor.png -label 'dpsanders\n(456)' dpsanders.png -label 'montyvesselinov\n(450)' montyvesselinov.png -label 'jzuhone\n(446)' jzuhone.png -label 'diegozea\n(445)' diegozea.png -label 'robertfeldt\n(443)' robertfeldt.png -label 'bicycle1885\n(442)' bicycle1885.png -label 'spencerlyon2\n(440)' spencerlyon2.png -label 'jeff-regier\n(435)' jeff-regier.png -label 'trthatcher\n(434)' trthatcher.png -label 'goedman\n(422)' goedman.png -label 'kshyatt\n(420)' kshyatt.png -label 'jrevels\n(413)' jrevels.png -label 'powerdistribution\n(409)' powerdistribution.png -label 'DrTodd13\n(400)' DrTodd13.png -label 'KristofferC\n(395)' KristofferC.png -label 'cgroll\n(392)' cgroll.png -label 'malmaud\n(387)' malmaud.png -label 'zenna\n(381)' zenna.png -label 'tshort\n(377)' tshort.png -label 'randyzwitch\n(376)' randyzwitch.png -label 'benhamner\n(374)' benhamner.png -label 'garborg\n(363)' garborg.png -label 'eschnett\n(359)' eschnett.png -label 'tlycken\n(359)' tlycken.png -label 'macrintr\n(359)' macrintr.png -label 'toivoh\n(356)' toivoh.png -label 'jumutc\n(347)' jumutc.png -label 'tpoisot\n(325)' tpoisot.png -label 'thofma\n(321)' thofma.png -label 'mbauman\n(319)' mbauman.png -label 'tinybike\n(317)' tinybike.png -label 'Evizero\n(317)' Evizero.png -label 'ninegua\n(313)' ninegua.png -label 'fredo-dedup\n(312)' fredo-dedup.png -label 'samuel-massinon-invenia\n(307)' samuel-massinon-invenia.png -label 'alyst\n(305)' alyst.png -label 'kbarbary\n(303)' kbarbary.png -label 'mweastwood\n(298)' mweastwood.png -label 'omus\n(291)' omus.png -label 'jaak-s\n(285)' jaak-s.png -label 'astrieanna\n(284)' astrieanna.png -label 'lbenet\n(284)' lbenet.png -label 'emoszkowski\n(284)' emoszkowski.png -label 'julian-gehring\n(281)' julian-gehring.png -label 'autozimu\n(280)' autozimu.png -label 'karanveerm\n(275)' karanveerm.png -label 'pao\n(267)' pao.png -label 'mschauer\n(267)' mschauer.png -label 'imanuelcostigan\n(257)' imanuelcostigan.png -label 'dodamih\n(249)' dodamih.png -label 'micahjsmith\n(248)' micahjsmith.png -label 'rennis250\n(246)' rennis250.png -label 'dfdx\n(244)' dfdx.png -label 'zachallaun\n(242)' zachallaun.png -label 'juliohm\n(242)' juliohm.png -label 'zyedidia\n(241)' zyedidia.png -label 'wildart\n(239)' wildart.png -label 'matthieugomez\n(233)' matthieugomez.png -label 'sfchen\n(227)' sfchen.png -label 'nalimilan\n(226)' nalimilan.png -label 'ivarne\n(223)' ivarne.png -label 'nassarhuda\n(223)' nassarhuda.png -label 'JayKickliter\n(217)' JayKickliter.png -label 'fairbrot\n(216)' fairbrot.png -label 'ovainola\n(213)' ovainola.png -label 'lkuper\n(208)' lkuper.png -label 'BenLauwens\n(202)' BenLauwens.png -label 'omalled\n(201)' omalled.png -label 'boyers\n(200)' boyers.png -label 'gp0\n(200)' gp0.png -label 'ahojukka5\n(200)' ahojukka5.png -label 'pearlzli\n(199)' pearlzli.png -label 'ssfrr\n(198)' ssfrr.png -label 'Michael-Klassen\n(194)' Michael-Klassen.png -label 'HarlanH\n(191)' HarlanH.png -label 'tawheeler\n(181)' tawheeler.png -label 'davidagold\n(178)' davidagold.png -label 'richardreeve\n(178)' richardreeve.png -label 'jayschwa\n(176)' jayschwa.png -label 'meggart\n(173)' meggart.png -label 'mykelk\n(173)' mykelk.png -label 'nkottary\n(172)' nkottary.png -label 'svs14\n(172)' svs14.png -label 'phrb\n(172)' phrb.png -label 'gummif\n(171)' gummif.png -label 'ulfworsoe\n(171)' ulfworsoe.png -label 'jpata\n(162)' jpata.png -label 'blakejohnson\n(161)' blakejohnson.png -label 'zhmz90\n(160)' zhmz90.png -label 'andrioni\n(159)' andrioni.png -label 'yeesian\n(157)' yeesian.png -label 'garrison\n(151)' garrison.png -label 'jheinen\n(151)' jheinen.png -label 'davidlizeng\n(150)' davidlizeng.png -label 'vchuravy\n(143)' vchuravy.png -label 'jhlq\n(143)' jhlq.png -label 'jdtuck\n(142)' jdtuck.png -label 'tedsteiner\n(140)' tedsteiner.png -label 'rsrock\n(139)' rsrock.png -label 'yurivish\n(139)' yurivish.png -label 'ScottPJones\n(135)' ScottPJones.png -label 'emmt\n(135)' emmt.png -label 'felipenoris\n(134)' felipenoris.png -label 'mpastell\n(133)' mpastell.png -label 'chkwon\n(133)' chkwon.png -label 'dancasimiro\n(132)' dancasimiro.png -label 'rollingthunder\n(130)' rollingthunder.png -label 'TeroFrondelius\n(129)' TeroFrondelius.png -label 'Jutho\n(128)' Jutho.png -label 'tknopp\n(128)' tknopp.png -label 'panlanfeng\n(128)' panlanfeng.png -label 'andferrari\n(127)' andferrari.png -label 'davidanthoff\n(126)' davidanthoff.png -label 'samuelcolvin\n(126)' samuelcolvin.png -label 'hayd\n(124)' hayd.png -label 'dhoegh\n(124)' dhoegh.png -label 'JackDunnNZ\n(124)' JackDunnNZ.png -label 'lgautier\n(124)' lgautier.png -label 'phobon\n(122)' phobon.png -label 'gragusa\n(122)' gragusa.png -label 'helgee\n(118)' helgee.png -label 'jbn\n(116)' jbn.png -label 'reworkhow\n(114)' reworkhow.png -label 'hng\n(113)' hng.png -label 'keithseahus\n(113)' keithseahus.png -label 'randy3k\n(112)' randy3k.png -label 'dirkschumacher\n(111)' dirkschumacher.png -label 'jipolanco\n(110)' jipolanco.png -label 'pzion\n(109)' pzion.png -label 'null-a\n(109)' null-a.png -label 'TotalVerb\n(108)' TotalVerb.png -label 'Rory-Finnegan\n(108)' Rory-Finnegan.png -label 'chezou\n(105)' chezou.png -label 'aaronstanton\n(105)' aaronstanton.png -label 'burrowsa\n(104)' burrowsa.png -label 'rohitvarkey\n(104)' rohitvarkey.png -label 'jlapeyre\n(103)' jlapeyre.png -label 'fhs\n(103)' fhs.png -label 'cstjean\n(103)' cstjean.png -label 'skariel\n(102)' skariel.png -label 'jgoldfar\n(102)' jgoldfar.png -label 'porterjamesj\n(101)' porterjamesj.png -label 'denizyuret\n(99)' denizyuret.png -label 'darwindarak\n(98)' darwindarak.png -label 'LaurenceA\n(97)' LaurenceA.png -label 'glesica\n(97)' glesica.png -label 'jpfairbanks\n(95)' jpfairbanks.png -label 'Sean1708\n(93)' Sean1708.png -label 'prcastro\n(92)' prcastro.png -label 'oheil\n(92)' oheil.png -label 'ReidAtcheson\n(92)' ReidAtcheson.png -label 'codeneomatrix\n(91)' codeneomatrix.png -label 'mfalt\n(90)' mfalt.png -label 'catawbasam\n(89)' catawbasam.png -label 'rened\n(89)' rened.png -label 'carnaval\n(88)' carnaval.png -label 'daviddelaat\n(87)' daviddelaat.png -label 'damiendr\n(87)' damiendr.png -label 'ahwillia\n(87)' ahwillia.png -label 'quxiaofeng\n(87)' quxiaofeng.png -label 'twadleigh\n(86)' twadleigh.png -label 'ajt60gaibb\n(85)' ajt60gaibb.png -label 'iamed2\n(84)' iamed2.png -label 'davidssmith\n(82)' davidssmith.png -label 'phaverty\n(82)' phaverty.png -label 'abeschneider\n(82)' abeschneider.png -label 'rtrochet\n(82)' rtrochet.png -label 'rfourquet\n(81)' rfourquet.png -label 'bjarthur\n(81)' bjarthur.png -label 'blegat\n(81)' blegat.png -label 'GeorgeXing\n(79)' GeorgeXing.png -label 'ArchRobison\n(79)' ArchRobison.png -label 'bardwell\n(79)' bardwell.png -label 'ivanslapnicar\n(78)' ivanslapnicar.png -label 'danielmendel\n(76)' danielmendel.png -label 'christianpeel\n(75)' christianpeel.png -label 'eraviart\n(75)' eraviart.png -label 'JoelHobson\n(73)' JoelHobson.png -label 'GordStephen\n(71)' GordStephen.png -label 'swadey\n(70)' swadey.png -label 'nwh\n(70)' nwh.png -label 'snotskie\n(70)' snotskie.png -label 'latticetower\n(69)' latticetower.png -label 'DANA-Laboratory\n(68)' DANA-Laboratory.png -label 'bfredl\n(68)' bfredl.png -label 'leonardt\n(68)' leonardt.png -label 'dahlend\n(67)' dahlend.png -label 'robertdj\n(67)' robertdj.png -label 'mauro3\n(66)' mauro3.png -label 'danielsuo\n(66)' danielsuo.png -label 'waldyrious\n(65)' waldyrious.png -label 'shangmu\n(65)' shangmu.png -label 'danspielman\n(65)' danspielman.png -label 'Tao-Hu\n(65)' Tao-Hu.png -label 'pygy\n(64)' pygy.png -label 'bdeonovic\n(64)' bdeonovic.png -label 'lcw\n(63)' lcw.png -label 'simulkade\n(63)' simulkade.png -label 'lruthotto\n(61)' lruthotto.png -label 'magistere\n(60)' magistere.png -label 'rawls238\n(60)' rawls238.png -label 'lucasb-eyer\n(59)' lucasb-eyer.png -label 'dls\n(59)' dls.png -label 'IshitaTakeshi\n(59)' IshitaTakeshi.png -label 'scheinerman\n(57)' scheinerman.png -label 'jwmerrill\n(57)' jwmerrill.png -label 'lendle\n(56)' lendle.png -label 'sam81\n(56)' sam81.png -label 'greenflash1357\n(55)' greenflash1357.png -label 'charlesll\n(54)' charlesll.png -label 'odow\n(53)' odow.png -label 'innerlee\n(53)' innerlee.png -label 'acroy\n(52)' acroy.png -label 'Wilfred\n(51)' Wilfred.png -label 'wavexx\n(51)' wavexx.png -label 'rdeits\n(51)' rdeits.png -label 'pjabardo\n(51)' pjabardo.png -label 'yarlett\n(51)' yarlett.png -label 'kersulis\n(50)' kersulis.png -label 'dpo\n(50)' dpo.png -label 'sawcordwell\n(49)' sawcordwell.png -label 'sebastien-villemot\n(48)' sebastien-villemot.png -label 'bensadeghi\n(47)' bensadeghi.png -label 'TheBB\n(47)' TheBB.png -label 'Ward9250\n(47)' Ward9250.png -label 'maleadt\n(46)' maleadt.png -label 'cc7768\n(46)' cc7768.png -label 'giordano\n(46)' giordano.png -label 'rjagerman\n(46)' rjagerman.png -label 'antinucleon\n(46)' antinucleon.png -label 'cormullion\n(44)' cormullion.png -label 'kzahedi\n(44)' kzahedi.png -label 'sbos\n(43)' sbos.png -label 'natj\n(43)' natj.png -label 'Smaug123\n(43)' Smaug123.png -label 'Azzaare\n(43)' Azzaare.png -label 'zingales\n(42)' zingales.png -label 'stefan-k\n(42)' stefan-k.png -label 'vonDonnerstein\n(42)' vonDonnerstein.png -label 'yunjhongwu\n(42)' yunjhongwu.png -label 'sunetos\n(42)' sunetos.png -label 'jhasse\n(41)' jhasse.png -label 'milktrader\n(41)' milktrader.png -label 'KDr2\n(40)' KDr2.png -label 'ggggggggg\n(40)' ggggggggg.png -label 'mbaz\n(40)' mbaz.png -label 'ayakimovich\n(39)' ayakimovich.png -label 'pozorvlak\n(37)' pozorvlak.png -label 'compressed\n(36)' compressed.png -label 'spurll\n(36)' spurll.png -label 'BigCrunsh\n(36)' BigCrunsh.png -label 'mrxiaohe\n(36)' mrxiaohe.png -label 'Aerlinger\n(34)' Aerlinger.png -label 'benmoran\n(34)' benmoran.png -label 'bass3m\n(34)' bass3m.png -label 'pkofod\n(33)' pkofod.png -label 'anthonyclays\n(33)' anthonyclays.png -label 'rawrgrr\n(32)' rawrgrr.png -label 'ekobir\n(32)' ekobir.png -label 'nirinA\n(32)' nirinA.png -label 'JockLawrie\n(32)' JockLawrie.png -label 'danluu\n(31)' danluu.png -label 'ninjin\n(31)' ninjin.png -label 'mkriele\n(31)' mkriele.png -label 'cyrusmaher\n(31)' cyrusmaher.png -label 'jonasrauber\n(30)' jonasrauber.png -label 'c42f\n(29)' c42f.png -label 'jennyhong\n(29)' jennyhong.png -label 'billmclean\n(29)' billmclean.png -label 'RJDennis\n(29)' RJDennis.png -label 'tqchen\n(29)' tqchen.png -label 'jcorbin\n(28)' jcorbin.png -label 'waTeim\n(28)' waTeim.png -label 'dirk\n(28)' dirk.png -label 'pwl\n(28)' pwl.png -label 'DeVerMyst\n(28)' DeVerMyst.png -label '4gh\n(28)' 4gh.png -label 'slyrz\n(27)' slyrz.png -label 'ranjanan\n(27)' ranjanan.png -label 'serbanstan\n(27)' serbanstan.png -label 'BRONSOLO\n(27)' BRONSOLO.png -label 'crayxt\n(26)' crayxt.png -label 'crbinz\n(26)' crbinz.png -label 'pfitzseb\n(25)' pfitzseb.png -label 'Betawolf\n(25)' Betawolf.png -label 'PhillP\n(25)' PhillP.png -label 'marcusps\n(24)' marcusps.png -label 'tmlbl\n(24)' tmlbl.png -label 'timothyrenner\n(24)' timothyrenner.png -label 'jcrist\n(24)' jcrist.png -label 'KayleaHaynes\n(23)' KayleaHaynes.png -label 'njwilson23\n(23)' njwilson23.png -label 'wookay\n(23)' wookay.png -label 'Pbellive\n(23)' Pbellive.png -label 'pabloferz\n(22)' pabloferz.png -label 'nlhepler\n(22)' nlhepler.png -label 'aaalexandrov\n(22)' aaalexandrov.png -label 'joidegn\n(22)' joidegn.png -label 'DrKrar\n(22)' DrKrar.png -label 'klpn\n(22)' klpn.png -label 'wesbarnett\n(22)' wesbarnett.png -label 'tchajed\n(22)' tchajed.png -label 'Ismael-VC\n(21)' Ismael-VC.png -label 'gajomi\n(21)' gajomi.png -label 'SamChill\n(21)' SamChill.png -label 'amellnik\n(21)' amellnik.png -label 'arypurnomoz\n(21)' arypurnomoz.png -label 'mguzmann\n(21)' mguzmann.png -label 'nstiurca\n(21)' nstiurca.png -label 'rsofaer\n(20)' rsofaer.png -label 'goretkin\n(20)' goretkin.png -label 'fundamental\n(20)' fundamental.png -label 'oschulz\n(20)' oschulz.png -label 'gerhardtulzer\n(20)' gerhardtulzer.png -label 'jacksonthea\n(20)' jacksonthea.png -label 'ararslan\n(20)' ararslan.png -label 'kpamnany\n(19)' kpamnany.png -label 'GlenHertz\n(19)' GlenHertz.png -label 'cbecker\n(19)' cbecker.png -label 'AndyGreenwell\n(19)' AndyGreenwell.png -label 'schmrlng\n(19)' schmrlng.png -label 'baggepinnen\n(19)' baggepinnen.png -label 'droidicus\n(19)' droidicus.png -label 'oxinabox\n(19)' oxinabox.png -label 'nanosec\n(18)' nanosec.png -label 'GunnarFarneback\n(18)' GunnarFarneback.png -label 'rickhg12hs\n(18)' rickhg12hs.png -label 'wsliang\n(18)' wsliang.png -label 'marcusdavidwebb\n(18)' marcusdavidwebb.png -label 'LMescheder\n(18)' LMescheder.png -label 'stokasto\n(18)' stokasto.png -label 'invalid-email-address\n(18)' invalid-email-address.png -label 'mfasi\n(17)' mfasi.png -label 'StephenVavasis\n(17)' StephenVavasis.png -label 'chuckha\n(17)' chuckha.png -label 'scheidan\n(17)' scheidan.png -label 'swt30\n(17)' swt30.png -label 'joshuamiller\n(17)' joshuamiller.png -label 'caryan\n(17)' caryan.png -label 'baruchel\n(17)' baruchel.png -label 'GDPlumb\n(17)' GDPlumb.png -label 'adambom\n(16)' adambom.png -label 'jtravs\n(16)' jtravs.png -label 'mpf\n(16)' mpf.png -label 'ntessore\n(16)' ntessore.png -label 's2maki\n(16)' s2maki.png -label 'slundberg\n(16)' slundberg.png -label 'gusl\n(16)' gusl.png -label 'indiedotkim\n(16)' indiedotkim.png -label 'jkaye2012\n(16)' jkaye2012.png -label 'maxvoxel8\n(16)' maxvoxel8.png -label 'VHaravy\n(15)' VHaravy.png -label 'Sacha0\n(15)' Sacha0.png -label 'PallHaraldsson\n(15)' PallHaraldsson.png -label 'elehcim\n(15)' elehcim.png -label 'petercolberg\n(15)' petercolberg.png -label 'jdrugo\n(15)' jdrugo.png -label 'visr\n(15)' visr.png -label 'AndreyKolev\n(15)' AndreyKolev.png -label 'rickedanielson\n(15)' rickedanielson.png -label 'mdavezac\n(15)' mdavezac.png -label 'fabianlischka\n(14)' fabianlischka.png -label 'Elzair\n(14)' Elzair.png -label 'bramtayl\n(14)' bramtayl.png -label 'evanfields\n(14)' evanfields.png -label 'stemann\n(14)' stemann.png -label 'DanielArndt\n(13)' DanielArndt.png -label 'cdsousa\n(13)' cdsousa.png -label 'nowozin\n(13)' nowozin.png -label 'tcfuji\n(13)' tcfuji.png -label 'reallyasi9\n(13)' reallyasi9.png -label 'fcard\n(12)' fcard.png -label 'calder\n(12)' calder.png -label 'binarybana\n(12)' binarybana.png -label 'mdpradeep\n(12)' mdpradeep.png -label 'dgleich\n(12)' dgleich.png -label 'afternone\n(12)' afternone.png -label 'dcampbell24\n(11)' dcampbell24.png -label 'drepper\n(11)' drepper.png -label 'brendano\n(11)' brendano.png -label 'samuelpowell\n(11)' samuelpowell.png -label 'boydgreenfield\n(11)' boydgreenfield.png -label 'mweiden\n(11)' mweiden.png -label 'ahalwright\n(11)' ahalwright.png -label 'Daagr\n(11)' Daagr.png -label 'dslate\n(10)' dslate.png -label 'xhochy\n(10)' xhochy.png -label 'Cody-G\n(10)' Cody-G.png -label 'sbebo\n(10)' sbebo.png -label 'micklat\n(10)' micklat.png -label 'mlewe\n(10)' mlewe.png -label 'Lanzafame\n(10)' Lanzafame.png -label 'luchr\n(10)' luchr.png -label 'jrising\n(10)' jrising.png -label 'christophfeinauer\n(10)' christophfeinauer.png -label 'keesvp\n(10)' keesvp.png -label 'mcprentiss\n(9)' mcprentiss.png -label 'martinholters\n(9)' martinholters.png -label 'yomichi\n(9)' yomichi.png -label 'mzaffalon\n(9)' mzaffalon.png -label 'lostanlen\n(9)' lostanlen.png -label 'Dawny33\n(9)' Dawny33.png -label 'bcj\n(9)' bcj.png -label 'srp\n(9)' srp.png -label 'dioptre\n(9)' dioptre.png -label 'PaulBellette\n(9)' PaulBellette.png -label 'Lightjohn\n(9)' Lightjohn.png -label 'nutsiepully\n(8)' nutsiepully.png -label 'peerst\n(8)' peerst.png -label 'simonp0420\n(8)' simonp0420.png -label 'dronir\n(8)' dronir.png -label 'cbenz\n(8)' cbenz.png -label 'r2dbg\n(8)' r2dbg.png -label 'BenConnault\n(8)' BenConnault.png -label 'acrosby\n(8)' acrosby.png -label 'shixiao\n(8)' shixiao.png -label 'jerryzhenleicai\n(8)' jerryzhenleicai.png -label 'mdcfrancis\n(8)' mdcfrancis.png -label 'eleuven\n(7)' eleuven.png -label 'LachlanGunn\n(7)' LachlanGunn.png -label 'justbur\n(7)' justbur.png -label 'cmundi\n(7)' cmundi.png -label 'dfannius\n(7)' dfannius.png -label 'tautologico\n(7)' tautologico.png -label 'jabl\n(7)' jabl.png -label 'dreiss-isb\n(7)' dreiss-isb.png -label 'axsk\n(7)' axsk.png -label 'sachdevasushant\n(7)' sachdevasushant.png -label 'andyreagan\n(7)' andyreagan.png -label 'gganssle\n(7)' gganssle.png -label 'maximsch2\n(7)' maximsch2.png -label 'lstagner\n(6)' lstagner.png -label 'aiorla\n(6)' aiorla.png -label 'artkuo\n(6)' artkuo.png -label 'kofron\n(6)' kofron.png -label 'ikirill\n(6)' ikirill.png -label 'sbcd90\n(6)' sbcd90.png -label 'LeoK987\n(6)' LeoK987.png -label 'MurrayT\n(6)' MurrayT.png -label 'fdabl\n(6)' fdabl.png -label 'mikebryniarski\n(5)' mikebryniarski.png -label 'i2000s\n(5)' i2000s.png -label 'mariushoch\n(5)' mariushoch.png -label 'zgimbutas\n(5)' zgimbutas.png -label 'ypeels\n(5)' ypeels.png -label 'chiraganand\n(5)' chiraganand.png -label 'drrobots\n(5)' drrobots.png -label 'samuela\n(5)' samuela.png -label 'hammer\n(5)' hammer.png -label 'daanhb\n(5)' daanhb.png -label 'grayclhn\n(5)' grayclhn.png -label 'wkearn\n(5)' wkearn.png -label 'mbeltagy\n(5)' mbeltagy.png -label 'ajtulloch\n(5)' ajtulloch.png -label 'ivirshup\n(5)' ivirshup.png -label 'alanedelman\n(5)' alanedelman.png -label 'joeykrug\n(5)' joeykrug.png -label 'ermueller2000\n(5)' ermueller2000.png -label 'hongborong\n(5)' hongborong.png -label 'huwenshuo\n(5)' huwenshuo.png -label 'jerry-cai-chanjet\n(5)' jerry-cai-chanjet.png -label 'iizukak\n(5)' iizukak.png -label 'bisraelsen\n(5)' bisraelsen.png -label 'mhvannier\n(5)' mhvannier.png -label 'peterkovesi\n(5)' peterkovesi.png -label 'dreammaker\n(5)' dreammaker.png -label 'sarvjeetsinghghotra\n(4)' sarvjeetsinghghotra.png -label 'Oddan\n(4)' Oddan.png -label 'certik\n(4)' certik.png -label 'yledu\n(4)' yledu.png -label 'zygmuntszpak\n(4)' zygmuntszpak.png -label 'binnisb\n(4)' binnisb.png -label 'btracey\n(4)' btracey.png -label 'avibryant\n(4)' avibryant.png -label 'MichaeLeroy\n(4)' MichaeLeroy.png -label 'RichMorin\n(4)' RichMorin.png -label 'scw\n(4)' scw.png -label 'armgong\n(4)' armgong.png -label 'adrianlzt\n(4)' adrianlzt.png -label 'NPalopoli\n(4)' NPalopoli.png -label 'skumagai\n(4)' skumagai.png -label 'yipihey\n(4)' yipihey.png -label 'jiyinyiyong\n(4)' jiyinyiyong.png -label 'leakyMirror\n(4)' leakyMirror.png -label 'dchudz\n(4)' dchudz.png -label 'EricForgy\n(4)' EricForgy.png -label 'jasonmorton\n(4)' jasonmorton.png -label 'ginggs\n(3)' ginggs.png -label 'hessammehr\n(3)' hessammehr.png -label 'jey\n(3)' jey.png -label 'gajjanag\n(3)' gajjanag.png -label 'JonasRauch\n(3)' JonasRauch.png -label 'kevinbache\n(3)' kevinbache.png -label 'markun\n(3)' markun.png -label 'cqql\n(3)' cqql.png -label 'gitfoxi\n(3)' gitfoxi.png -label 'mmaxs\n(3)' mmaxs.png -label 'muratg\n(3)' muratg.png -label 'remusao\n(3)' remusao.png -label 'morris25\n(3)' morris25.png -label 'testurser\n(3)' testurser.png -label 'cicku\n(3)' cicku.png -label 'barche\n(3)' barche.png -label 'stevenhao\n(3)' stevenhao.png -label 'tpapp\n(3)' tpapp.png -label 'qbit\n(3)' qbit.png -label 'xanderdunn\n(3)' xanderdunn.png -label 'bnels\n(3)' bnels.png -label 'gasagna\n(3)' gasagna.png -label 'doomsplayer\n(3)' doomsplayer.png -label 'sje30\n(3)' sje30.png -label 'cfbaptista\n(3)' cfbaptista.png -label 'macd\n(3)' macd.png -label 'EQt\n(3)' EQt.png -label 'yebai\n(3)' yebai.png -label 'tlnagy\n(3)' tlnagy.png -label 'simon1103\n(3)' simon1103.png -label 'DanielHoffmann32\n(3)' DanielHoffmann32.png -label 'georgelesica-wf\n(3)' georgelesica-wf.png -label 'apeyser\n(2)' apeyser.png -label 'grinsted\n(2)' grinsted.png -label 'fjarri\n(2)' fjarri.png -label 'bkalpert\n(2)' bkalpert.png -label 'notthetup\n(2)' notthetup.png -label 'exaos\n(2)' exaos.png -label 'fpepin\n(2)' fpepin.png -label 'nzmsv\n(2)' nzmsv.png -label 'HomerReid\n(2)' HomerReid.png -label 'gloine\n(2)' gloine.png -label 'JeffreySarnoff\n(2)' JeffreySarnoff.png -label 'joachimdahl\n(2)' joachimdahl.png -label 'kk49\n(2)' kk49.png -label 'larsmans\n(2)' larsmans.png -label 'lvnguyen\n(2)' lvnguyen.png -label 'lvirgili\n(2)' lvirgili.png -label 'lbenitesanchez\n(2)' lbenitesanchez.png -label 'abhijithanilkumar\n(2)' abhijithanilkumar.png -label 'lorrden\n(2)' lorrden.png -label 'krislock\n(2)' krislock.png -label 'patrickyevsukov\n(2)' patrickyevsukov.png -label 'JosephLenton\n(2)' JosephLenton.png -label 'thepulkitagarwal\n(2)' thepulkitagarwal.png -label 'RhysU\n(2)' RhysU.png -label 'ronisbr\n(2)' ronisbr.png -label 'odysseus9672\n(2)' odysseus9672.png -label 'few\n(2)' few.png -label 'stepelu\n(2)' stepelu.png -label 'stev47\n(2)' stev47.png -label 'cameyo42\n(2)' cameyo42.png -label 'cpk26\n(2)' cpk26.png -label 'lifeissweetgood\n(2)' lifeissweetgood.png -label 'matrixmorpheus\n(2)' matrixmorpheus.png -label 'polarke\n(2)' polarke.png -label 'yui-knk\n(2)' yui-knk.png -label 'heptal\n(2)' heptal.png -label 'levskaya\n(2)' levskaya.png -label 'gideonite\n(2)' gideonite.png -label 'domenzain\n(2)' domenzain.png -label 'palango\n(2)' palango.png -label 'c-s\n(2)' c-s.png -label 'tartavull\n(2)' tartavull.png -label 'hsseung\n(2)' hsseung.png -label 'vandriasyan\n(2)' vandriasyan.png -label 'mjs2600\n(2)' mjs2600.png -label 'maartenheremans\n(2)' maartenheremans.png -label 'WneleiGao\n(2)' WneleiGao.png -label 'apleonhardt\n(1)' apleonhardt.png -label 'atlytle\n(1)' atlytle.png -label 'agoddard\n(1)' agoddard.png -label 'aytekinar\n(1)' aytekinar.png -label 'arlolra\n(1)' arlolra.png -label 'artnez\n(1)' artnez.png -label 'aplund\n(1)' aplund.png -label 'bartolsthoorn\n(1)' bartolsthoorn.png -label 'bsilbaugh\n(1)' bsilbaugh.png -label 'benyang\n(1)' benyang.png -label 'BenoitKnecht\n(1)' BenoitKnecht.png -label 'BobPortmann\n(1)' BobPortmann.png -label 'bkamins\n(1)' bkamins.png -label 'contra\n(1)' contra.png -label 'dcarrera\n(1)' dcarrera.png -label 'davidkh\n(1)' davidkh.png -label 'unsignedzero\n(1)' unsignedzero.png -label 'parpwhick\n(1)' parpwhick.png -label 'rdmitry\n(1)' rdmitry.png -label 'ohspite\n(1)' ohspite.png -label 'dphildebrandt\n(1)' dphildebrandt.png -label 'edsfocci\n(1)' edsfocci.png -label 'lightcatcher\n(1)' lightcatcher.png -label 'felipecruz\n(1)' felipecruz.png -label 'EconometricsBySimulation\n(1)' EconometricsBySimulation.png -label 'oggy\n(1)' oggy.png -label 'gvnn3\n(1)' gvnn3.png -label 'gdevanla\n(1)' gdevanla.png -label 'harikb\n(1)' harikb.png -label 'iblis17\n(1)' iblis17.png -label 'ivanmantova\n(1)' ivanmantova.png -label 'raggi\n(1)' raggi.png -label 'drjdn\n(1)' drjdn.png -label 'jimberlage\n(1)' jimberlage.png -label 'radford\n(1)' radford.png -label 'johnmcdonnell\n(1)' johnmcdonnell.png -label 'jjh42\n(1)' jjh42.png -label 'josefsachsconning\n(1)' josefsachsconning.png -label 'julienr\n(1)' julienr.png -label 'jtriley\n(1)' jtriley.png -label 'miau\n(1)' miau.png -label 'kyonifer\n(1)' kyonifer.png -label 'mlhetland\n(1)' mlhetland.png -label 'mathpup\n(1)' mathpup.png -label 'markdewing\n(1)' markdewing.png -label 'mbuettner\n(1)' mbuettner.png -label 'mason-bially\n(1)' mason-bially.png -label 'doowttam\n(1)' doowttam.png -label 'meetmauro\n(1)' meetmauro.png -label 'ajdecon\n(1)' ajdecon.png -label 'zaeleus\n(1)' zaeleus.png -label 'mpeteuil\n(1)' mpeteuil.png -label 'meggermo\n(1)' meggermo.png -label 'fivebats\n(1)' fivebats.png -label 'Mike43110\n(1)' Mike43110.png -label 'nabilhassein\n(1)' nabilhassein.png -label 'nsaphra\n(1)' nsaphra.png -label 'ncnc\n(1)' ncnc.png -label 'octoploid\n(1)' octoploid.png -label 'knizkar\n(1)' knizkar.png -label 'ozancaglayan\n(1)' ozancaglayan.png -label 'patrickeganfoley\n(1)' patrickeganfoley.png -label 'pridkett\n(1)' pridkett.png -label 'Quantisan\n(1)' Quantisan.png -label 'peterdn\n(1)' peterdn.png -label 'pjgaudre\n(1)' pjgaudre.png -label 'pra85\n(1)' pra85.png -label 'PythonNut\n(1)' PythonNut.png -label 'purzelrakete\n(1)' purzelrakete.png -label 'goriccardo\n(1)' goriccardo.png -label 'rlane\n(1)' rlane.png -label 'robert-chiniquy\n(1)' robert-chiniquy.png -label 'rmyorston\n(1)' rmyorston.png -label 'rwgardner2\n(1)' rwgardner2.png -label 'samkohn\n(1)' samkohn.png -label 'knarz\n(1)' knarz.png -label 'Peenrose\n(1)' Peenrose.png -label 'srikumarks\n(1)' srikumarks.png -label 'fehrenbach\n(1)' fehrenbach.png -label 'AaronWilhelm\n(1)' AaronWilhelm.png -label 'shabbychef\n(1)' shabbychef.png -label 'schenker\n(1)' schenker.png -label 'tobig\n(1)' tobig.png -label 'to-mi\n(1)' to-mi.png -label 'TravisBarryDick\n(1)' TravisBarryDick.png -label 'trevor\n(1)' trevor.png -label 'Triiistan\n(1)' Triiistan.png -label 'uraimo\n(1)' uraimo.png -label 'vitaut\n(1)' vitaut.png -label 'radioflash\n(1)' radioflash.png -label 'ygrange\n(1)' ygrange.png -label 'GaZ3ll3\n(1)' GaZ3ll3.png -label 'HenkPoley\n(1)' HenkPoley.png -label 'jleny\n(1)' jleny.png -label 'wlbksy\n(1)' wlbksy.png -label 'ewiger\n(1)' ewiger.png -label 'vglazer\n(1)' vglazer.png -label 'mattharper\n(1)' mattharper.png -label 'dmed256\n(1)' dmed256.png -label 'pagnani\n(1)' pagnani.png -label 'bitdeli-chef\n(1)' bitdeli-chef.png -label 'msacchi\n(1)' msacchi.png -label 'nasser00\n(1)' nasser00.png -geometry 64x64+16+16 -font Helvetica montage_julia.jpg`: no such file or directory (ENOENT)
while loading In[16], in expression starting on line 155

 in _jl_spawn at process.jl:262
 in anonymous at process.jl:415
 in setup_stdio at ./process.jl:403
 in __spawn#58__ at ./process.jl:414
 in run at ./process.jl:530

Distribution of commits

In [17]:
spacing=10
rawcounts = Int[author["contributions"] for author in authors]
uppercount=spacing*ceil(Int, maximum(rawcounts)/spacing)
grid = logspace(0, log10(uppercount), 22)
_, counts = hist(rawcounts, grid)
Out[17]:
([1.0,1.53029,2.34178,3.58361,5.48395,8.39203,12.8422,19.6523,30.0737,46.0215  …  164.923,252.38,386.214,591.019,904.429,1384.04,2117.98,3241.12,4959.85,7590.0],[0,47,32,47,33,36,55,51,40,46  …  46,37,32,27,18,12,9,6,2,1])
In [18]:
plot(Geom.bar, Guide.xlabel("Commits"), Guide.ylabel("Number of contributors"),
    y=counts, x=midpoints(grid))
Out[18]:
Commits -1.0×10⁴ -8.0×10³ -6.0×10³ -4.0×10³ -2.0×10³ 0 2.0×10³ 4.0×10³ 6.0×10³ 8.0×10³ 1.0×10⁴ 1.2×10⁴ 1.4×10⁴ 1.6×10⁴ 1.8×10⁴ -8.00×10³ -7.50×10³ -7.00×10³ -6.50×10³ -6.00×10³ -5.50×10³ -5.00×10³ -4.50×10³ -4.00×10³ -3.50×10³ -3.00×10³ -2.50×10³ -2.00×10³ -1.50×10³ -1.00×10³ -5.00×10² 0 5.00×10² 1.00×10³ 1.50×10³ 2.00×10³ 2.50×10³ 3.00×10³ 3.50×10³ 4.00×10³ 4.50×10³ 5.00×10³ 5.50×10³ 6.00×10³ 6.50×10³ 7.00×10³ 7.50×10³ 8.00×10³ 8.50×10³ 9.00×10³ 9.50×10³ 1.00×10⁴ 1.05×10⁴ 1.10×10⁴ 1.15×10⁴ 1.20×10⁴ 1.25×10⁴ 1.30×10⁴ 1.35×10⁴ 1.40×10⁴ 1.45×10⁴ 1.50×10⁴ 1.55×10⁴ 1.60×10⁴ -1×10⁴ 0 1×10⁴ 2×10⁴ -8.00×10³ -7.50×10³ -7.00×10³ -6.50×10³ -6.00×10³ -5.50×10³ -5.00×10³ -4.50×10³ -4.00×10³ -3.50×10³ -3.00×10³ -2.50×10³ -2.00×10³ -1.50×10³ -1.00×10³ -5.00×10² 0 5.00×10² 1.00×10³ 1.50×10³ 2.00×10³ 2.50×10³ 3.00×10³ 3.50×10³ 4.00×10³ 4.50×10³ 5.00×10³ 5.50×10³ 6.00×10³ 6.50×10³ 7.00×10³ 7.50×10³ 8.00×10³ 8.50×10³ 9.00×10³ 9.50×10³ 1.00×10⁴ 1.05×10⁴ 1.10×10⁴ 1.15×10⁴ 1.20×10⁴ 1.25×10⁴ 1.30×10⁴ 1.35×10⁴ 1.40×10⁴ 1.45×10⁴ 1.50×10⁴ 1.55×10⁴ 1.60×10⁴ -70 -60 -50 -40 -30 -20 -10 0 10 20 30 40 50 60 70 80 90 100 110 120 130 -60 -58 -56 -54 -52 -50 -48 -46 -44 -42 -40 -38 -36 -34 -32 -30 -28 -26 -24 -22 -20 -18 -16 -14 -12 -10 -8 -6 -4 -2 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100 102 104 106 108 110 112 114 116 118 120 -100 0 100 200 -60 -55 -50 -45 -40 -35 -30 -25 -20 -15 -10 -5 0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 Number of contributors

Plotting activity on a world map

Another thing we can do with the data is to place everyone on a world map. One way to plot a world map in Julia is to use Shapefile.jl to read in a shape file of the world, and render the result in Compose.jl.

There are two wrinkles to deal with:

  1. Compose.rectangle uses different data to describe rectangles than Shapefile.Rect. The former uses (left, top, width, height) whereas the latter uses (left, right, top, bottom). We can handle the change in data by defining a new Compose.rectangle constructor which takes a Shapefile.Rect as input.

  2. A Shapefile.Polygon can be disjoint while a Compose.polygon cannot. The distinction is important when reading in shapefiles with disjoint polygons, e.g. to describe noncontiguous country borders. Here, we define a new convert method from the former to a Vector of Compose.polygons. We also define our own Polygons function to generate a Vector of polygons from either a Polygon or a Vector of Polygons. In the latter case we convert each Polygon to a Vector of polygons, then flatten the resulting Vector of Vectors after iterating through all the Polygons.

In [19]:
#Convert Shapefile rectangle to Compose rectangle
Compose.rectangle{T<:Real}(R::Shapefile.Rect{T}) = rectangle(R.left,R.top,R.right-R.left,R.bottom-R.top)

#Compose polygons cannot be disjoint but Shapefile.Polygons can
#Need to convert Shapefile.Polygon to list of Compose polygons
function Base.convert(::Type{Vector{Compose.Form{Compose.PolygonPrimitive}}},
        shape::Shapefile.Polygon)
    points = Any[]
    polygons=Any[]
    currentpart=2
    for (i,p) in enumerate(shape.points)
        push!(points, p)
        if i==length(shape.points) || (currentpart≤length(shape.parts) && i==shape.parts[currentpart])
            push!(polygons, polygon([(p.x,p.y) for p in points]))
            currentpart += 1
            points = Any[]
        end
    end
    polygons
end

Polygons(shape::Shapefile.Polygon) = convert(Vector{Compose.Form{Compose.PolygonPrimitive}}, shape)

#Technically correct only for S=Shapefile.ESRIShape
Polygons{S<:Shapefile.ESRIShape}(shapes::Vector{S}) = [[convert(Vector{Compose.Form{Compose.PolygonPrimitive}},
    shape) for shape in shapes]...]
Out[19]:
Polygons (generic function with 2 methods)

Now we are ready to download a map of the world, read it in with Shapefile.jl, and draw it in Compose.jl.

In [20]:
#Load some data about the world's countries
worldshapefile="ne_110m_admin_0_countries.shp"
dl("https://raw.githubusercontent.com/nvkelso/natural-earth-vector/master/110m_cultural/ne_110m_admin_0_countries.shp", worldshapefile)
worldshape = open(worldshapefile) do f
      read(f, Handle)
end
world=compose(context(), fill(nothing), stroke("black"), Polygons(worldshape.shapes)...)
draw(SVG(8inch, 4inch), compose(context(units=UnitBox(-180, 90, 360, -180)), world))
WARNING: [a,b,...] concatenation is deprecated; use [a;b;...] instead

Next, let's place everyone on the map.

For a given user, we retrieve their reported location on GitHub using GitHub.user and look it up on a geocoding service. Here we use OpenStreetMap's Nominatim service to look up a list of candidate locations, and return the first location as a tuple of latitude, longitude and location name. If there are no candidate locations, return nothing.

Since we don't have a nice wrapper around Nominatim like we do for GitHub, we have to do all the error handling ourselves. (Note: There is currently a bug in Julia's web stack which makes this code not work for querying locations with non-ASCII characters in them.)

In [87]:
getlatlon(user::AbstractString, my_auth=my_auth) = getlatlon(owner(user, auth=my_auth))

function getlatlon(user::GitHub.Owner, my_auth=my_auth)
    username = get(user.login)
    location = if !isnull(user.location)
        get(user.location) #Read from GitHub.Owner
    else
        try #Work around https://github.com/JuliaWeb/GitHub.jl/issues/51
            #Get user location from GitHub
            user2 = owner(username, auth=my_auth)
            if !isnull(user2.location)
                get(user2.location)
            else
                "" #No location data
            end
        catch
            ""
        end
    end
    strip(location) == "" && return nothing  #Location was missing

    #If user-reported location is already coordinates, then return them
    try
        #test if location is a string of all digits, punctuation or whitespace
        if all(map(x->isdigit(x)|ispunct(x)|isspace(x), collect(location))
            coords = eval(parse(location))
            if typeof(coords) == Tuple{Float64,Float64}
                return (coords[1], coords[2], location)
            end
        end
    end

    #Some simple hacks to normalize locations for Nominatim
    location = replace(location, "U.S.A.", "USA")
    
    #Take location and look up on geocoding service
    try
        responseosm = get(URI("http://nominatim.openstreetmap.org/search"),
        query=@compat Dict("format"=>"json", "q"=>location))
        
        responseosmstr = bytestring(responseosm.data)
        
        if responseosm.status!=200 && contains(responseosm.headers["Content-Type"], "text/html")
            display("text/html", responseosmstr)
        end
        meosm = JSON.parse(responseosmstr)
        if length(meosm)<1
            warn("OpenStreetMaps did not know the location of user $username with reported location \"$location\"")
            return (Inf, Inf, location) #Geocoder doesn't know where this is
        end
        #Return the first hit
        return (float(meosm[1]["lat"]), float(meosm[1]["lon"]), location)
    catch e
        warn("Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=$location")
        println("Error caught: ", e)
        if isdefined(:responseosm)
            if contains(responseosm.headers["Content-Type"], "text/html")
                display("text/html", responseosmstr)
            else
                println(responseosmstr)
            end
        end
        return nothing
    end
end

getlatlon("jiahao", my_auth)
Out[87]:
(42.3750997,-71.1056156,"Cambridge, MA")

Now define a function to iterate over a list of authors and add their locations to a locations dictionary.

In [105]:
function adduserlocations!(locations::Dict, contributors::Vector{GitHub.Owner})
    @showprogress for user in contributors
        adduserlocation!(locations, user)
    end
end

function adduserlocations!(locations::Dict, contributors::Vector{Any})
    @showprogress for user in contributors
        adduserlocation!(locations, user["contributor"])
    end
end

function adduserlocation!(locations::Dict, user::GitHub.Owner)
    username = get(user.login)
    haskey(locations, username) && return #Don't look up existing data again
    location = getlatlon(user, my_auth)
    location==nothing && return
    locations[username] = location
end
Out[105]:
adduserlocation! (generic function with 1 method)
In [ ]:
isdefined(:locations) || (locations=Dict())
adduserlocations!(locations, authors)

Finally we have all the data necessary to render user locations as dots on the world map. We use here a dot size that grows slowly with the number of contributions.

In [165]:
#Render developers
function placeauthors(authors, locations)
    xs = Float64[]; ys=Float64[]; rs=Any[]
    @showprogress for user in authors
        username, n = if isa(user, Dict)
            get(user["contributor"].login), user["contributions"]
        elseif isa(user, GitHub.Owner)
            get(user.login), 1
        end

        haskey(locations, username) || continue
        push!(xs, locations[username][2])
        push!(ys, locations[username][1])
        push!(rs, (1+√log(n))*0.3mm)
    end
    circle(xs, ys, rs)
end

function drawmap(left::Real=-180, right::Real=180, up::Real=90, down::Real=-90,
    composeobjs...; target = SVG(4inch*(right-left)/(up-down),4inch))
    draw(target,
    compose(context(units=UnitBox(left,up,right-left,down-up)), world, composeobjs...))

    #Print users in the box
    #for (user, loc) in locations
    #    if down<loc[1]<up && left<loc[2]<right
    #        println(user, ":", loc)
    #    end
    #end
end
Out[165]:
drawmap (generic function with 5 methods)

Finally, we are ready to plot all the Julia contributors on a world map!

In [92]:
devs=compose(context(), fill("#d66661"), stroke("#c93d39"), linewidth(0.3mm),
        placeauthors(authors, locations))

drawmap(-180, 180, 90, -90, devs)

Using [email protected], we can make a simple zoomable map with very little effort:

In [ ]:
@manipulate for limit_east=-180:180, limit_west=limit_east.value:180, limit_north=-90:90, limit_south=-90:limit_north.value
    left = limit_east
    right = limit_west
    up = limit_north
    down = limit_south
    box = UnitBox(left, up, right-left, down-up)
    compose(context(units=box), world, devs)
end
In [109]:
adduserlocations!(locations, juliastargazers)
Progress:   0%  ETA: 1:18:00
WARNING: deprecated syntax "Paris (" at In[109]:1.
Use "Paris(" instead.
WARNING: OpenStreetMaps did not know the location of user sbusso with reported location "Paris (France), Chiang Mai (Thailand)"
Progress:   1%  ETA: 1:10:42
WARNING: OpenStreetMaps did not know the location of user indexzero with reported location "NY, NY && Santa Cruz, CA"
Progress:   1%  ETA: 1:07:21
WARNING: deprecated syntax "MA (" at In[109]:1.
Use "MA(" instead.
Progress:   1%  ETA: 1:07:50
WARNING: OpenStreetMaps did not know the location of user zipme with reported location "Amoy / Nederlands"
Progress:   1%  ETA: 1:07:18
WARNING: OpenStreetMaps did not know the location of user arden with reported location "深圳市龙华新区民治天虹商场恒润小居726"
Progress:   3%  ETA: 1:05:02
WARNING: OpenStreetMaps did not know the location of user mkhDev with reported location "Makkah, Saudi Arabia - Waterloo, Canada"
Progress:   5%  ETA: 1:01:41
WARNING: OpenStreetMaps did not know the location of user mrt with reported location "Wild West on the Left Coast"
Progress:   6%  ETA: 1:00:44
WARNING: OpenStreetMaps did not know the location of user calvinchengx with reported location "World Wide Web"
Progress:   6%  ETA: 0:59:55
WARNING: OpenStreetMaps did not know the location of user zamiang with reported location "Brookyln, NY"
Progress:   6%  ETA: 0:59:33
WARNING: OpenStreetMaps did not know the location of user joestein with reported location "I am where I is"
Progress:   7%  ETA: 0:59:00
WARNING: deprecated syntax "{a,b, ...}" at In[109]:1.
Use "Any[a,b, ...]" instead.
Progress:   7%  ETA: 0:58:48
WARNING: OpenStreetMaps did not know the location of user smorin with reported location "San Francisco/New York City - BigData"
Progress:   7%  ETA: 0:58:44
WARNING: OpenStreetMaps did not know the location of user jimcaruso with reported location "Atlanta - and other spots on planet Earth"
Progress:   7%  ETA: 0:58:49
WARNING: OpenStreetMaps did not know the location of user ybenjo with reported location "voice-statistics"
Progress:   7%  ETA: 0:58:19
WARNING: OpenStreetMaps did not know the location of user mihahribar with reported location "ZZ9 Plural Z Alpha"
Progress:   9%  ETA: 0:56:56
WARNING: deprecated syntax "Basel (" at In[109]:1.
Use "Basel(" instead.
Progress:   9%  ETA: 0:56:43
WARNING: OpenStreetMaps did not know the location of user non with reported location "Providence / Philly"
Progress:  10%  ETA: 0:56:30
WARNING: OpenStreetMaps did not know the location of user mt3 with reported location "vancity/detroit"
Progress:  11%  ETA: 0:55:54
WARNING: OpenStreetMaps did not know the location of user lepture with reported location "Everywhere, China"
Progress:  12%  ETA: 0:55:25
WARNING: OpenStreetMaps did not know the location of user vizZ with reported location "Cracov"
Progress:  13%  ETA: 0:54:29
WARNING: deprecated syntax "CT (" at In[109]:1.
Use "CT(" instead.
Progress:  13%  ETA: 0:54:23
WARNING: deprecated syntax "Русь (" at In[109]:1.
Use "Русь(" instead.
Progress:  13%  ETA: 0:53:56
WARNING: OpenStreetMaps did not know the location of user mattstep with reported location "SF Bay Area, CA"
Progress:  13%  ETA: 0:53:28
WARNING: OpenStreetMaps did not know the location of user wemakeweb with reported location "Worldwide / Remote"
Progress:  13%  ETA: 0:53:26
WARNING: OpenStreetMaps did not know the location of user tedlee with reported location "San Francisco, Californa"
Progress:  14%  ETA: 0:52:33
WARNING: OpenStreetMaps did not know the location of user edwindj with reported location "@edwindjonge"
Progress:  17%  ETA: 0:50:29
WARNING: OpenStreetMaps did not know the location of user ghosthamlet with reported location "The Rest Is Silence of Code"
Progress:  18%  ETA: 0:49:56
WARNING: OpenStreetMaps did not know the location of user hgilani with reported location "San Fancisco, CA"
Progress:  19%  ETA: 0:48:48
WARNING: OpenStreetMaps did not know the location of user luoq with reported location "Shanghai PRC"
Progress:  20%  ETA: 0:48:08
WARNING: deprecated syntax "China (" at In[109]:1.
Use "China(" instead.
WARNING: OpenStreetMaps did not know the location of user liuyxpp with reported location "Shanghai, China (permanent), Santa Barbara, CA, US (current)"
Progress:  20%  ETA: 0:47:42
WARNING: OpenStreetMaps did not know the location of user kachick with reported location "そのへん"
Progress:  21%  ETA: 0:47:25
WARNING: OpenStreetMaps did not know the location of user kmanley with reported location "Greater New York City area"
Progress:  21%  ETA: 0:47:25
WARNING: OpenStreetMaps did not know the location of user unbuilt with reported location "Ah, Hf"
Progress:  22%  ETA: 0:46:37
WARNING: deprecated syntax "Korea (" at In[109]:1.
Use "Korea(" instead.
Progress:  23%  ETA: 0:45:53
WARNING: OpenStreetMaps did not know the location of user tbs1980 with reported location "London, United Kingdon"
Progress:  24%  ETA: 0:45:03
WARNING: OpenStreetMaps did not know the location of user fsiler with reported location "Lawrence, KS, USA, Earth, Sol System"
Progress:  24%  ETA: 0:44:49
WARNING: OpenStreetMaps did not know the location of user dnmiller with reported location "a parking lot with a mayor"
Progress:  25%  ETA: 0:43:52
WARNING: OpenStreetMaps did not know the location of user rt77789 with reported location "ShenZhen | Hefei"
Progress:  25%  ETA: 0:43:53
WARNING: OpenStreetMaps did not know the location of user ziyasal with reported location "Earth ┏(-_-)┛┗(-_-)┓┗(-_-)┛"
Progress:  25%  ETA: 0:43:51
WARNING: OpenStreetMaps did not know the location of user hyamamoto with reported location "Tokyo, Alderaan"
Progress:  26%  ETA: 0:43:34
WARNING: OpenStreetMaps did not know the location of user floere with reported location "Zürich / Melbourne"
Progress:  26%  ETA: 0:43:33
WARNING: OpenStreetMaps did not know the location of user Kalep with reported location "No.6 Kexueyuan South Road Zhongguancun,Haidian District Beijing,China"
Progress:  26%  ETA: 0:43:34
WARNING: OpenStreetMaps did not know the location of user jbsilva with reported location "São Carlos / Aachen"
Progress:  26%  ETA: 0:43:34
WARNING: OpenStreetMaps did not know the location of user jtoy with reported location "San Francisco / China / Boston"
Progress:  26%  ETA: 0:43:25
WARNING: OpenStreetMaps did not know the location of user monodeldiablo with reported location "Right over here"
Progress:  28%  ETA: 0:42:17
WARNING: OpenStreetMaps did not know the location of user azet with reported location "*"
Progress:  29%  ETA: 0:41:47
WARNING: deprecated syntax "Madrid (" at In[109]:1.
Use "Madrid(" instead.
Progress:  29%  ETA: 0:41:37
WARNING: OpenStreetMaps did not know the location of user nathantippy with reported location "@nathantippy on twitter"
Progress:  29%  ETA: 0:41:34
WARNING: OpenStreetMaps did not know the location of user wojtha with reported location "Prague, The Heart of Europe ;-)"
Progress:  31%  ETA: 0:40:37
WARNING: OpenStreetMaps did not know the location of user thehydroimpulse with reported location "In a dream; flying the skies"
Progress:  31%  ETA: 0:40:34
WARNING: OpenStreetMaps did not know the location of user cooljeanius with reported location "DC for school, NH for home"
Progress:  35%  ETA: 0:38:27
WARNING: deprecated syntax "Grans (" at In[109]:1.
Use "Grans(" instead.
Progress:  35%  ETA: 0:38:24
WARNING: OpenStreetMaps did not know the location of user aaronlifton with reported location "LA"
Progress:  36%  ETA: 0:37:47
WARNING: OpenStreetMaps did not know the location of user mhaidarh with reported location "Milky Way Galaxy"
Progress:  37%  ETA: 0:37:19
WARNING: deprecated syntax "Ouagadougou (" at In[109]:1.
Use "Ouagadougou(" instead.
Progress:  37%  ETA: 0:37:08
WARNING: OpenStreetMaps did not know the location of user gg7 with reported location "London, UK ✈ Anywhere, Earth"
Progress:  37%  ETA: 0:36:56
WARNING: OpenStreetMaps did not know the location of user rockymadden with reported location "Pale Blue Dot"
Progress:  38%  ETA: 0:36:17
WARNING: OpenStreetMaps did not know the location of user junjiemao with reported location "SooChou.Jiangsu"
Progress:  40%  ETA: 0:35:21
WARNING: OpenStreetMaps did not know the location of user juandesant with reported location "Jodrell Bank Observatory, SK11 9DL, UK; before Instituto de Astrofísica de Andalucía, Granada, E-18008; European Southern Observatory, Munich, D-80805"
Progress:  40%  ETA: 0:35:16
WARNING: OpenStreetMaps did not know the location of user lyfeyaj with reported location "......"
Progress:  42%  ETA: 0:33:47
WARNING: OpenStreetMaps did not know the location of user rccompton with reported location "Angeles City,  Philippines | Winchester, KY "
Progress:  44%  ETA: 0:33:14
WARNING: deprecated syntax "GA (" at In[109]:1.
Use "GA(" instead.
Progress:  44%  ETA: 0:33:05
WARNING: OpenStreetMaps did not know the location of user jcla1 with reported location "A tiny world in the milkyway"
Progress:  44%  ETA: 0:33:03
WARNING: OpenStreetMaps did not know the location of user rogervezaro with reported location "SJP - Russia brasileira - Brazil "
Progress:  44%  ETA: 0:33:02
WARNING: deprecated syntax "Eindhoven (" at In[109]:1.
Use "Eindhoven(" instead.
Progress:  44%  ETA: 0:33:00
WARNING: OpenStreetMaps did not know the location of user neiesc with reported location "/usr/bin/python"
Progress:  46%  ETA: 0:31:54
WARNING: OpenStreetMaps did not know the location of user somenxavier with reported location "http://www.openstreetmap.org/node/663358886 ;-)"
Progress:  46%  ETA: 0:31:30
WARNING: OpenStreetMaps did not know the location of user tiredpixel with reported location "The Moon. Also Europe."
Progress:  47%  ETA: 0:31:23
WARNING: OpenStreetMaps did not know the location of user ceslami with reported location "New York x Chicago"
Progress:  47%  ETA: 0:31:17
WARNING: OpenStreetMaps did not know the location of user tfawcett with reported location "Silicon Valley, CA, USA"
Progress:  47%  ETA: 0:30:47
WARNING: OpenStreetMaps did not know the location of user neiljdo with reported location "Quezon City, Philippines 1105"
Progress:  49%  ETA: 0:29:34
WARNING: OpenStreetMaps did not know the location of user jlidder with reported location "Montreal <-> Seattle"
Progress:  50%  ETA: 0:29:08
WARNING: OpenStreetMaps did not know the location of user Y-- with reported location "New York City - Palo Alto - Paris"
Progress:  51%  ETA: 0:28:16
WARNING: OpenStreetMaps did not know the location of user Maple-Wang with reported location "BeijingChina"
Progress:  52%  ETA: 0:27:43
WARNING: OpenStreetMaps did not know the location of user abhik137 with reported location "BITS Pilani K K Birla Goa Campus"
Progress:  53%  ETA: 0:27:29
WARNING: deprecated syntax "XiaMen (" at In[109]:1.
Use "XiaMen(" instead.
Progress:  53%  ETA: 0:27:26
WARNING: OpenStreetMaps did not know the location of user Jsvcycling with reported location "Greater New York City Area"
Progress:  54%  ETA: 0:27:06
WARNING: OpenStreetMaps did not know the location of user plurch with reported location "Silicon Valley, CA"
Progress:  54%  ETA: 0:26:51
WARNING: OpenStreetMaps did not know the location of user Kyokou with reported location "Can read code, can't write."
Progress:  55%  ETA: 0:26:23
WARNING: OpenStreetMaps did not know the location of user abhshkdz with reported location "Machine Learning Lab, Virginia Tech"
Progress:  57%  ETA: 0:24:55
WARNING: OpenStreetMaps did not know the location of user landlaborcapital with reported location "Cambridge, MA/Stockholm, SE"
Progress:  60%  ETA: 0:23:28
WARNING: OpenStreetMaps did not know the location of user carlmartus with reported location "Lund/Ängelholm, Sweden"
Progress:  60%  ETA: 0:23:07
WARNING: OpenStreetMaps did not know the location of user delta4d with reported location "/dev/null"
Progress:  61%  ETA: 0:22:58
WARNING: OpenStreetMaps did not know the location of user peterkingalex with reported location "Ejido sta Ursula 89 san  fco culhuacan"
Progress:  63%  ETA: 0:21:48
WARNING: OpenStreetMaps did not know the location of user nylen with reported location "UTC-5 or -6 maybe"
Progress:  64%  ETA: 0:21:08
WARNING: OpenStreetMaps did not know the location of user mcollina with reported location "In the clouds above Italy"
Progress:  64%  ETA: 0:20:46
WARNING: OpenStreetMaps did not know the location of user VitHub with reported location "NoLocation"
Progress:  65%  ETA: 0:20:16
WARNING: OpenStreetMaps did not know the location of user kub4 with reported location "Morgentau, Lusatia"
Progress:  66%  ETA: 0:19:40
WARNING: OpenStreetMaps did not know the location of user harryprince with reported location "Jilin University of Finance and Economics"
Progress:  67%  ETA: 0:19:27
WARNING: OpenStreetMaps did not know the location of user forgottenleaf with reported location "In a long forgotten land"
Progress:  67%  ETA: 0:19:17
WARNING: deprecated syntax "Grenoble (" at In[109]:1.
Use "Grenoble(" instead.
Progress:  68%  ETA: 0:18:33
WARNING: OpenStreetMaps did not know the location of user tmaone with reported location "◎"
Progress:  69%  ETA: 0:18:04
WARNING: OpenStreetMaps did not know the location of user mmuurr with reported location "Earth(ish)"
Progress:  70%  ETA: 0:17:37
WARNING: OpenStreetMaps did not know the location of user master-zhuang with reported location "Shanghai City. PRC"
Progress:  70%  ETA: 0:17:24
WARNING: OpenStreetMaps did not know the location of user uzuro with reported location "uzuro @ rizon + freenode"
Progress:  70%  ETA: 0:17:23
WARNING: OpenStreetMaps did not know the location of user NicolasCARPi with reported location "World Wild Web"
Progress:  71%  ETA: 0:17:06
WARNING: OpenStreetMaps did not know the location of user netspencer with reported location "Palo Alto, CA / Boston, MA / Los Angeles, CA / New York, NY"
Progress:  71%  ETA: 0:17:06
WARNING: deprecated syntax "Lausanne (" at In[109]:1.
Use "Lausanne(" instead.

WARNING: deprecated syntax "Annecy (" at In[109]:1.
Use "Annecy(" instead.
WARNING: OpenStreetMaps did not know the location of user perfaram with reported location "Lausanne (CH), Annecy (FR)"
Progress:  71%  ETA: 0:16:48
WARNING: OpenStreetMaps did not know the location of user Hunter-Github with reported location "The Pillars of Creation, NGC 6611"
Progress:  71%  ETA: 0:16:44
WARNING: OpenStreetMaps did not know the location of user egbutter with reported location "New York, Oakland, Durham"
Progress:  71%  ETA: 0:16:43
WARNING: deprecated syntax "London (" at In[109]:1.
Use "London(" instead.
Progress:  74%  ETA: 0:15:20
WARNING: OpenStreetMaps did not know the location of user den-mentiei with reported location "Kiyv, Ukraine"
Progress:  74%  ETA: 0:15:16
WARNING: OpenStreetMaps did not know the location of user yangjie6020 with reported location "shenzheng"
Progress:  74%  ETA: 0:15:14
WARNING: OpenStreetMaps did not know the location of user Salada with reported location "Suwon. Kyong-Ki. Republic of Korea."
Progress:  77%  ETA: 0:13:33
WARNING: OpenStreetMaps did not know the location of user jingpengwu with reported location "Princeton Neuroscience Institute 192G"
Progress:  77%  ETA: 0:13:26
WARNING: OpenStreetMaps did not know the location of user piti118 with reported location "Nakorn Pathom, Thailand"
Progress:  77%  ETA: 0:13:05
WARNING: OpenStreetMaps did not know the location of user pbdr with reported location "A City That Never Sleeps"
Progress:  78%  ETA: 0:12:59
WARNING: OpenStreetMaps did not know the location of user gosick with reported location "Twaiwan"
Progress:  79%  ETA: 0:12:16
WARNING: OpenStreetMaps did not know the location of user jushaox with reported location "Vertis Microsystem LLP"
Progress:  81%  ETA: 0:11:11
WARNING: OpenStreetMaps did not know the location of user LeoAdamek with reported location "(near) Guildford, Surrey, United Kingdom"
Progress:  82%  ETA: 0:10:38
WARNING: OpenStreetMaps did not know the location of user unisolate with reported location "Orion Arm, Milky Way"
Progress:  82%  ETA: 0:10:21
WARNING: OpenStreetMaps did not know the location of user RuslanIsrafilov with reported location "Nizhniy Novgorod, Russia"
Progress:  82%  ETA: 0:10:09
WARNING: OpenStreetMaps did not know the location of user lolow with reported location "Switzerland/Luxembourg/France/Italy"
Progress:  83%  ETA: 0:10:06
WARNING: OpenStreetMaps did not know the location of user nashuiliang with reported location "<div id="contributions-calendar" class="boxed-group-inner"></div>"
Progress:  83%  ETA: 0:10:01
WARNING: OpenStreetMaps did not know the location of user VladVin with reported location "Nizhniy Novgorod, Russia"
Progress:  84%  ETA: 0:09:25
WARNING: OpenStreetMaps did not know the location of user niukey with reported location "中国,海南,乐东,九所"
Progress:  85%  ETA: 0:08:40
WARNING: OpenStreetMaps did not know the location of user andersonguarnier with reported location "Piracicana, SP, Brasil"
Progress:  86%  ETA: 0:07:49
WARNING: OpenStreetMaps did not know the location of user MarkBruns with reported location "RockRapids, Iowa"
Progress:  87%  ETA: 0:07:38
WARNING: OpenStreetMaps did not know the location of user zhuxueling with reported location "No.16 Shiji Road, Hunnan New District, ShenyangChina"
Progress:  87%  ETA: 0:07:36
WARNING: OpenStreetMaps did not know the location of user passiweinberger with reported location "Sometimes here, Sometimes there..."
Progress:  87%  ETA: 0:07:27
WARNING: OpenStreetMaps did not know the location of user taeold with reported location "San Fransico, CA"
Progress:  88%  ETA: 0:07:05
WARNING: OpenStreetMaps did not know the location of user iemanatemire with reported location "Greater Denver Area, CO"
Progress:  89%  ETA: 0:06:15
WARNING: OpenStreetMaps did not know the location of user polyglotCipher with reported location "Austin, Texas, United States of America, Earth, Sol, Milky Way, The Observable Universe"
Progress:  89%  ETA: 0:06:12
WARNING: OpenStreetMaps did not know the location of user thelambdaparty with reported location "@thelambdaparty"
Progress:  90%  ETA: 0:05:57
WARNING: OpenStreetMaps did not know the location of user anqurvanillapy with reported location "Jinan University, Zhuhai, China"
Progress:  90%  ETA: 0:05:40
WARNING: OpenStreetMaps did not know the location of user anirban09 with reported location "Mumbai/Roorkee, India"
Progress:  90%  ETA: 0:05:34
WARNING: OpenStreetMaps did not know the location of user GinRyan with reported location "Qingdao,Shandong,PRC"
Progress:  91%  ETA: 0:05:15
WARNING: OpenStreetMaps did not know the location of user weibangtuo with reported location "progrape.net"
Progress:  92%  ETA: 0:04:43
WARNING: OpenStreetMaps did not know the location of user logindave41 with reported location "xupt"
Progress:  93%  ETA: 0:04:16
WARNING: OpenStreetMaps did not know the location of user metawake with reported location "http://ua.linkedin.com/pub/alex-alexapolsky/4/a61/181"
Progress:  93%  ETA: 0:04:03
WARNING: deprecated syntax "Warsaw (" at In[109]:1.
Use "Warsaw(" instead.
Progress:  94%  ETA: 0:03:22
WARNING: OpenStreetMaps did not know the location of user satnami with reported location "Syria, Malaysia"
Progress:  94%  ETA: 0:03:14
WARNING: OpenStreetMaps did not know the location of user hustanhuang with reported location "1037 Luoyu Road, Wuhan 430074, P.R. China"
Progress:  95%  ETA: 0:02:54
WARNING: OpenStreetMaps did not know the location of user narenaryan with reported location "Banglaore"
Progress:  97%  ETA: 0:01:40
WARNING: OpenStreetMaps did not know the location of user MogeiWang with reported location "財壓奴婢藝壓當行"
Progress:  99%  ETA: 0:00:44
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=China - Zhuhai
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  99%  ETA: 0:00:43
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Moron, Buenos Aires, Argentina
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  99%  ETA: 0:00:43
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=New York City
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  99%  ETA: 0:00:42
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Russia, Saint-Petersburg
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  99%  ETA: 0:00:42
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Berlin, Germany
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  99%  ETA: 0:00:41
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Kiyv, Ukraine
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  99%  ETA: 0:00:39
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=San Francisco, California
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  99%  ETA: 0:00:38
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Rochester, NY
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  99%  ETA: 0:00:37
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Austin, TX
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  99%  ETA: 0:00:36
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Guangzhou, China
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  99%  ETA: 0:00:32
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Helsinki, Finland
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  99%  ETA: 0:00:31
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Corsica Island
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  99%  ETA: 0:00:31
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=China
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  99%  ETA: 0:00:29
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Nanjing
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  99%  ETA: 0:00:27
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=La Rochelle, France
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  99%  ETA: 0:00:26
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Russia, Moscow
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  99%  ETA: 0:00:25
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=CA
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  99%  ETA: 0:00:22
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Warsaw, Poland
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  99%  ETA: 0:00:21
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Moscow, Russia
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  99%  ETA: 0:00:20
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Recife, PE
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  99%  ETA: 0:00:20
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Palo Alto, CA
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  99%  ETA: 0:00:19
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=United States
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  99%  ETA: 0:00:18
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=UK
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress: 100%  ETA: 0:00:17
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Xiamen, Fujian, China
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress: 100%  ETA: 0:00:16
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Guangzhou, Guangdong, China
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress: 100%  ETA: 0:00:16
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Hangzhou
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress: 100%  ETA: 0:00:15
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Istanbul
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress: 100%  ETA: 0:00:13
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=MA / NY, USA
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress: 100%  ETA: 0:00:13
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Russia, Khakass, Abakan
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress: 100%  ETA: 0:00:12
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Halifax, Nova Scotia, Canada, Earth
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress: 100%  ETA: 0:00:12
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Shanghai, China
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress: 100%  ETA: 0:00:09
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Detmold, Germany
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress: 100%  ETA: 0:00:08
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Shenzhen, Guangdong, China
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress: 100%  ETA: 0:00:08
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Little Red Dot
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress: 100%  ETA: 0:00:07
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Eindhoven
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress: 100%  ETA: 0:00:07
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Tiantong road 17,Hefei,China.
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress: 100%  ETA: 0:00:06
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Berlin, Germany
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress: 100%  ETA: 0:00:04
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Cambridge, MA
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress: 100%  ETA: 0:00:03
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Mesa, AZ
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress: 100%  ETA: 0:00:03
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Taipei, Taiwan
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress: 100%  ETA: 0:00:02
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Manhattan, NY
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress: 100%  ETA: 0:00:02
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Tokyo
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress: 100%  ETA: 0:00:01
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Wuhan,China
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress: 100%  ETA: 0:00:01
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Chicago, IL
Error caught: ErrorException

Stargazers and watchers

We can also retrieve similar data for stargazers and watchers.

In [ ]:
# Get stargazers
juliastargazers = stargazers("JuliaLang/julia", auth=my_auth)[1]
adduserlocations!(locations, juliastargazers)
In [110]:
# Get watchers
juliawatchers = watchers("JuliaLang/julia", auth=my_auth)[1]
adduserlocations!(locations, juliawatchers)
("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress: 100% Time: 0:58:35
Progress:   2%  ETA: 0:00:58
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Espoo, Finland
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:   2%  ETA: 0:01:16
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Rio de Janeiro, Brazil
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:   3%  ETA: 0:01:34
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Boston, MA
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:   3%  ETA: 0:01:48
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Kiev, Ukraine
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:   4%  ETA: 0:01:51
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=London
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:   4%  ETA: 0:02:00
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Málaga, Spain
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:   6%  ETA: 0:01:43
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Taipei, Taiwan
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:   6%  ETA: 0:01:54
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Rochester, NY
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:   7%  ETA: 0:02:02
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=NL:010
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  12%  ETA: 0:01:39
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Somerville, MA
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  12%  ETA: 0:01:42
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Shanghai
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  13%  ETA: 0:01:43
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Seattle
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  13%  ETA: 0:01:44
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=France
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  13%  ETA: 0:01:45
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=guangzhou
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  14%  ETA: 0:01:42
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Genk, Belgium
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  15%  ETA: 0:01:44
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Monheim am Rhein
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  16%  ETA: 0:01:42
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Chennai, India
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  18%  ETA: 0:01:39
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Ville d'Avray, France
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  19%  ETA: 0:01:35
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=NYC
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  20%  ETA: 0:01:33
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=GZ
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  22%  ETA: 0:01:30
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Seattle, Washington, USA
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  22%  ETA: 0:01:31
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Campinas - SP - Brasil
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  23%  ETA: 0:01:32
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Shenzhen
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  24%  ETA: 0:01:31
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Halifax NS
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  24%  ETA: 0:01:30
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Austin, TX
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  26%  ETA: 0:01:28
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Budapest
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  28%  ETA: 0:01:27
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Beijing, China
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  29%  ETA: 0:01:27
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Austin, TX
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  29%  ETA: 0:01:27
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Pilani,Rajasthan
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  30%  ETA: 0:01:28
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Cambridge, MA
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  31%  ETA: 0:01:26
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Paris FRANCE
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  32%  ETA: 0:01:24
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=San Jose-CA, USA
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  33%  ETA: 0:01:23
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Vancouver, BC
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  34%  ETA: 0:01:23
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=China.Shenzhen
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  34%  ETA: 0:01:23
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=San Francisco, CA
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  36%  ETA: 0:01:22
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Shanghai, China
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  39%  ETA: 0:01:19
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=San Francisco Bay Area, CA
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  41%  ETA: 0:01:16
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=beijing, China
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  41%  ETA: 0:01:15
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Dublin
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  44%  ETA: 0:01:10
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Portland
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  45%  ETA: 0:01:10
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Belo Horizonte
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  47%  ETA: 0:01:06
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Mexico
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  49%  ETA: 0:01:03
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Montclair, NJ
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  52%  ETA: 0:00:58
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Florida
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  53%  ETA: 0:00:57
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Des Plaines
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  54%  ETA: 0:00:57
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=China
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  55%  ETA: 0:00:55
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Troy, NY
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  57%  ETA: 0:00:52
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Virginia
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  59%  ETA: 0:00:50
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Vancouver, Canada
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  59%  ETA: 0:00:50
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Jena
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  61%  ETA: 0:00:47
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Singapre
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  62%  ETA: 0:00:47
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Taipei
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  62%  ETA: 0:00:46
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=San Diego
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  63%  ETA: 0:00:46
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Lyon, France
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  63%  ETA: 0:00:46
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Chicago, IL
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  64%  ETA: 0:00:45
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=ShenZhen
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  65%  ETA: 0:00:44
Bandwidth limit exceeded

Bandwidth limit exceeded

You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.

For more information, consult the usage policy for the OSM Nominatim server.

WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Oxford, UK
Error caught: ErrorException("Unknown value\nLine: 0\nAround: ...<html> <head> <title>...\n           ^\n")
Progress:  69%  ETA: 0:00:38
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=São Paulo, Brazil
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  71%  ETA: 0:00:35
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Hello World
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  71%  ETA: 0:00:35
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=India
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  72%  ETA: 0:00:34
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Zhuhai
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  73%  ETA: 0:00:33
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Santa Cruz, CA
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  75%  ETA: 0:00:30
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Cambridge, MA
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  76%  ETA: 0:00:29
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Brasil
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  76%  ETA: 0:00:29
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=India
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  78%  ETA: 0:00:26
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Singapore
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  79%  ETA: 0:00:26
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Hong Kong
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  81%  ETA: 0:00:23
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Taipei, Taiwan
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  85%  ETA: 0:00:18
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=ShenZhen, China
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  87%  ETA: 0:00:16
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Brasil, Rio de Janeiro
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  88%  ETA: 0:00:15
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Manchester, UK
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  89%  ETA: 0:00:13
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Santa Marta de Tormes, Salamanca, España
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  90%  ETA: 0:00:13
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=BeiJing China
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  90%  ETA: 0:00:12
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=York, United Kingdom 
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  92%  ETA: 0:00:10
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Bangalore, India
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  93%  ETA: 0:00:09
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=South Korea
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  93%  ETA: 0:00:09
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=China
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  95%  ETA: 0:00:06
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Ireland
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  96%  ETA: 0:00:04
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=France
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  98%  ETA: 0:00:03
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Japan
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  98%  ETA: 0:00:02
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Corsica Island
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  99%  ETA: 0:00:01
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Recife, PE - Brasil
Error caught: connect: connection refused (ECONNREFUSED)
Progress:  99%  ETA: 0:00:01
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Berlin, Germany
Error caught: connect: connection refused (ECONNREFUSED)
Progress: 100%  ETA: 0:00:00
WARNING: Ignoring bad response from URL: http://nominatim.openstreetmap.org/search?format=json&q=Denmark
Error caught: connect: connection refused (ECONNREFUSED)
In [118]:
#Render stargazers and watches
stars=compose(context(), fill(nothing), stroke("#945bb0"),
    placeauthors(juliastargazers, locations))

watches=compose(context(), fill("#6bab5b"),
    placeauthors(juliawatchers, locations));

drawmap(-180, 180, 90, -90, devs, stars, watches)