Category Archives: Nerdeprat

Fastmail not taking security seriously?

About three years ago I figured I’d had enough Google-control of my online communication and was looking for an alternative email-provider. A friend of mine recommended Fastmail, which seemed like a good solution: Great web-interface, Android app, and the possibility of using an address from my own domain.

I signed up and have been using Fastmail since (with a redirect from my Gmail-address). The service has had some small issues (mainly the Android app being anything but “fast”), but overall I’ve been a happy customer.

Yesterday I figured out that I wanted to test 1password, moving away from LastPass after the recent security issues. In this process I decided to use the “generate password” functionality in 1password to set a new, strong password for my Fastmail account. Before I did that I made sure to set the “Account Recovery” email and phone number, so that if I made en error I would still be able to access my email.

And I was right. Indeed I made an error. I copied the generated password from 1password and pasted it into the change password dialog on fastmail. This logged me out, and then I managed to copy something else, removing the password from my clipboard. Then I managed to do something stupid in the 1password app, and my generated, 30-character, completely random, password was lost. I had managed to lock myself out of my email-account! Stupid! But hey, I have a recovery-email, right?

So I headed to the “Lost password screen” and typed in my gmail.address (to which I 10 minutes before had recieved a confirmation mail from fastmail).

Then I got the message:

The existing email address you entered was not for an existing user, or was for an account that has been disabled. Please try again

What?! Ok, after re-trying 5-6 times i had to open a ticket and provide a lot of information to regain-access by a manual process. In the ticket I wrote:

Thanks for the verification details.
I have now set your backup email address to:
*****@gmail.com

And I’m back in. Hooray! But I’m still wondering why the recovery email I entered did not work, so I’m asking:

Wasn’t my backup email set, or was there some problems regarding this feature? I am quite sure that I set my backup email yesterday.

The reply to this confused me:

Looks like the backup email address was not set. We then set it from our end and it worked for you. Please let me know if you need any further assistance.

After some back and forth I find out why:

Did you set this address from the Password & Security screen? If that is the case, you had set the “Recovery email address”. This is currently different from the backup email. Backup email can be set from the backend only.

And the password reset can be done using the backup email address only. The recovery process through recovery email address is not yet released into production. So I am afraid it will not work as of now.

What the actual, flying, fuck? The “Password & Security screen” is a frontend for some code that does not work? It presents itself as a way of setting a recovery mail, while it actually does nothing? The situation seems to have been like this for about 8 months, as this page from july 2016 clearly states:

Add your mobile phone number(s) and backup email address to the recovery options on the Password & Security screen. If you get locked out, we can use this to help verify your identity and restore access to your account.

I did express these concerns, and the reply I got was:

I really understand your frustration. I am sorry about that. I will pass your feedback to our supervisors.

We hope to implement the recovery procedure very soon.

But who knows? If they’ve been delaying this for 8 months now, I’m not confident that this will be fixed anytime soon, and that the “Password & Security screen” will continue to be a non-functioning, misleading page that does nothing but confuse the users. If the information isn’t used, don’t give the user the impression that it will. I can understand that not everything can be implemented at once, but have the balls to admit it, don’t lie to me. And about security issues? This is talentless!

So, to recap: The “Password & Security screen” of Fastmail is a sham. The information used there is not used. In order to regain access to your account if if loose your password you have to have a “backup email”. This backup email is not the same as the “recovery email”. The backup email has to be set by Fastmail staff.

Verktøyene dine former deg

Ja, “our tools shapes us” er ikke noe nytt utsagn, og det er en lite orginal påstand. Men, må merker jeg effektene av dette så på kroppen at jeg har tid til å blogge litt, så da gjør jeg jo det.

Ok, tools, verktøy. Det er så klart snakk om utviklingsverktøy her. Jeg har lenge jobbet med språk som JavaScript og Python (og gjør det fortsatt), men har i den senere tid begynnt å jobbe en del i .NET-verdenen. Og jeg merker forskjeller. MANGE forskjeller. En ting er språkene, det er forskjell på utypa, ukompilerte språk som JavaScript og komplierte, typa, objektorienterte språk som C#. Absolutt. Men, C# er igrunn ikke så værst som språk, jeg synes det er mer fornuftig enn Java (selv om det er noen år siden jeg drev med det), og Linq er ganske stilig.

Men, det var ikke språket som verktøy jeg tenkte mest på, det var verktøyene rundt.

  • Editor eller IDE
  • Pakkehåndteringssystem
  • Kildekontrollsystem

Jeg tenkte på.

Først av alt Visual Studio. En mastodont uten like som prøver å gjøre ALT. Det første som møter deg er en innlogging til noe Microsoft-fjas. Så må du ha ReSharper (fordi Visual Studio ikke klarer å gjøre alt).

Visual studio er tungt, veldig tungt. Jeg vet ikke hva jeg gjør, men jeg har gjerne 4-5 instanser oppe samtidig fordi jeg jobber med mye. Da skjer det gjerne 1-2 ganger om dagen at VS tryner, og 7-8 ganger at det er “unresponsive” i 1-2 minutter. Frustrerende. Så henger drit seg opp, og du må restarte. Dette er bortkasta tid. Det fører ofte til at jeg ikke tester like ofte, det er ikke bare å endre ei linje, trykke crtl+s, alt+tab, ctrl+r. Neida, det er “begynn å endre linje, få beskjed om ikke lov”, så klikke på rød firkant, så endre, så lagre så grønn play, så vente 20 sek, så alt+tab så ctrl-r. Jeg utsetter, eller dropper å perfeksjonere ting fordi verktøyet mitt jobber mot meg. Verktøyet mitt gjør meg til en lat utvikler.

En annen ting er feedback-loopen. Om du lager en webapp med MVC må du starte og stoppe debug-instansen hver gang du gjør en endring. Pain. Much pain. Ok, så er det noen fine sider med dette også: debugging-verktøyene er gode, og det å kunne navigere rundt i koden uten å søke er fint. Men hvis du skal søke: ja da er du fucked. Min løsning er å ha prosjektet mitt åpent i Sublime Text også, for å enkelt kunne søke i det.

Så har vi pakkesystemet, nuGet. Æsj. For det første har det kommandoer på formen “Update-Package”, hvorfor ikke bare “update”, hva ellers oppdaterer du i et pakkesystem? Så klarer ikke nuGet å søke i flere pakkekilder samtidig, så du må huske å velge dette i en dropdown over “terminalen” hver gang du skal gjøre noe. Samme med target-prosjekt, jeg vet ikke hvor mange ganger jeg har lagt til ei pakke i feil prosjekt og tenkt: “jaja, det tok meg 4 minutter, jeg orker ikke å gjøre noe med det”. Det blir rot, men verktøyet mitt gjør at jeg ikke orker å rydde. Verktøyet mitt gjør meg sløv.

Og kildekontroll da. TFS. Ikke TFS med Git, men TFS med TFS. Ja, jeg vet du kan få TFS med Git og jeg skulle ønske jeg hadde det, men det har jeg ikke enda. Og da sitter jeg der med TFS i visual studio da. Og høyreklikker og høyreklikker og excluder packages (har du prøvd å .tfsignore packages/??) skriver commit-meldinger og ser at det tar 30 jævla sekunder å sjekke inn 4 linjer endra i 2 filer. Fytti! Og alle checkins går såklart rett til serveren. Hva gjør jeg da? Jo jeg blir lat. Jeg har en commit om dagen med meldinga “lots of stuff, cannot remember” etterfulgt av en ny en “add missing files, FFS TFS”!. Igjen, verktøyet mitt gjør at jeg fraviker best practices. Jeg committer ikke ofte, jeg brancher aldri og å stashe noe har jeg aldri turt å prøve på.

Og så begynner jeg å lure: Liker folk dette? Er det jeg som ikke skjønner hvordan jeg bruker disse verktøyene? Ser jeg ut som en eskimo som har forvilla seg inn blant Aboriginere? Gjør jeg alt feil? Eller stiller jeg feil krav?

Jeg vil ikke tro det er slik. Jeg har jobbet med prosjekter der jeg brukte Java, IntelliJ Idea, Maven og SVN, jeg har brukt Mercurial på samme stacken. Jeg har jobbet med JavaScript i både Ideda, Webstorm, Sublime text og såvidt Emacs. Jeg har brukt Git, og begynnt å elske git. Jeg har forholdt meg til Bower og NPM. Jeg har skrevet Python-kode og forholdt meg til pip, jeg kjører ubuntu og bruker apt. Kildekontroll, editorer og pakkesystemer er ikke noe nytt for meg. Jeg klarer bare ikke å forholde meg til dem slik Microsoft mener jeg skal.

Jeg vil ikke ha et IDE som gjør alt. I editoren min vil jeg editere kode. Kode er tekst. Litt shortcuts er fint, code-completion og intellisense er ikke dumt, og å kunne navigere seg rundt i koden og få vist testdekning og sånne ting er fine tanker. MEN NÅR ALT ER JÆVLA SIRUP blir det for mye. Jeg vil ikke ha kildekontrollsystemet mitt innbakt i IDEet, jeg vil ha det på kommandolinja. Jeg vil ikke ha et eget vindu (som plutselig er på øvre del av VS, plutselig på nedre) for å installere pakker. Med unntak av Maven (og XML-helvete) har alle andre pakkesystemer jeg har brukt fungert fint fra kommandolinja (en skikkelig kommandolinja altså. Ikke en boks i visual studio, ikke en link til “Visual Studio Developer Console”, ikke fuckings CMS eller PowerShell).

Jeg vil komme i flytsonen, jeg kommer ikke i flytsonen hvis jeg tester noe, støter på en obskur feil, kjører “Update-package” og rekker å skrive en rant på godt over 1000 ord før det forbanna systemet er ferdig med å oppdatere 20 pakker. Selv NPM som laster ned hele jævla internett 5 ganger ved update går raskere enn dette her. Dette er tregere enn å kjøre pip install scipy ffs! Og jeg tror ikke nuGet komplierer Fortran-kode!

Og så er det alle disse småtingene: “Build Action”, og jeg veit ikke hva. Ånei, fila mi ble ikke deploya nei, greit. Eller at visual studio ikke har forstått at det filsystem holder rede på filer, at man ikke trenger ei forbanna XML-fil for dette og en “show all files”-knapp.

Jeg ber ikke om mye: jeg vil ha raske verktøy som gjør det de skal, som ikke henger seg, som ikke har flere knapper enn en brusautomat i USA, som ikke skal gjøre alt samtidig. Emacs er raskt, men du kan spille tetris der. Visual studio føles som å svømme i sirup selv uten teris.

Og der var faenmen nuGet ferdig med oppdateringa si.. Trykke grønn knapp, og så launcha du enda et nytt nettleservindu på en obskur port jeg aldri husker ja, fint! Takk.

“Cannot resolve symbol” ja, jeg ba deg oppdatere pakker, ikke knekke alt!

Jaja, sånn går nå dagene. Jeg skriver i det minste Enterprise-ready-kode da! Det er rock solid og fungerer mye bedre enn tullespråk som JavaScript.

Ok, ikke blogge mens du krangler med verktøyene dine. Hadde dette verktøyet vært fysisk tror jeg det hadde hatt massevis av skader etter å ha blitt slått. Hardt.

Uanset: poenget er at verktøyene, selv de digitale, former oss.

Ølkart på #hack4no

Jeg var med på #hack4no hos Kartverket på Hønefoss i helga. Da jeg satt på toget til Drammen fikk jeg en Twitter-melding:

Det viste seg at mitt bidrag: Ølkart, vant i kategorien “Beste løsning med geografiske data”, noe som jo er veldig gøy! Jeg tenkte jeg her skulle gå litt igjennom løsningen, hvordan den er blitt til og litt tanker videre.

Men, først av alt: Løsningen finner du på http://beermap.atlefren.net. Det er, som jeg skriver på siden, en: “Visualisering og søk i norske bryggerier, barer og polutsalg.” Koden ligger (så klart) på GitHub

Jeg meldte meg på hack4no mest fordi jeg tenkte det var et bra sted å møte kjente i #geomatikk-miljøet, samt at Kulturdirektoratet, som jeg jobber for for tiden er med på organisator-siden.

Jeg holdt et foredrag på formiddagen fredag om prosjektet jeg gjør for kulturrådet, med fokus på koden du finner på GitHub. Jeg hadde igrunn tenkt at jeg skulle bruke mye av tiden min på å hjelpe andre med å bruke Norvegiana-data, samt å bruke API-wrapper-prosjektet vårt, og hadde tenkt fint lite på selve konkurransen. Folk spurte meg om hva jeg skulle jobbe med, og jeg svarte at “jeg må vel gjøre noe med øl”, mest på spøk.

Dog, jeg satt meg ned i fem minutter, og tenkte litt og kom opp med en tankeskisse som inneholdt følgende: https://github.com/atlefren/norwegian-breweries. Det var vel igrunn det eneste som sto på lista da jeg gikk i gang. Så det første jeg gjorde var jo å lage et kart som viste disse bryggeriene. Ikke veldig spennende, ei heller noe vinneroppskrift. Så fant jeg ut at jeg kunne legge inn mer, Vinmonopolet har jo et “API” med butikkene sine, riktignok på et CSV-format fra helvette, men det fungerte, og jeg fikk også disse inn i kartet. Så hentet jeg puber fra OSM, jeg prøvde først med overpass APIet, men det var så komplekst at jeg valgte å bruke en nedlastet shapefil fra geofabrik, der jeg filtrerte ut puber.

Dette tok vel en god del av ettermiddagen fredag, ispedd en del spørsmål om KNreise og mye CSS-dilling. Etterhvert innså jeg at jeg burde kanskje få inn noe offentlige data ut over bakgrunnskart fra Kartverket, og bestemte meg for å legge inn addresesøket til Kartverket, noe som igrunn var en smal sak. Dette kom på plass i kartet, og jeg funderte litt på hva jeg skulle gjøre videre. Svaret ble å fokusere på lokasjon, dvs å finne nærmeste pol/pub/bryggeri. Geolocation i HTML5, kombinert med addressesøk, ble svaret her, og jeg hadde etterhvert en fin visning av 10 nærmeste. En utfordring var at jeg ikke hadde noen database i bak-kant, alle dataene ble lest inn i minnet i flask/Python-appen min fra GeoJSON. Dog, det finnes bibliotek for Haversine-avstandsberegning.

Det neste ble veldig naturlig å ruteberegne fra din posisjon til bryggeriene, og jeg lurte litt på om jeg skulle bruke Norkarts ruteberegner Ferd, Mapbox sin, eller kanskje Google sin. Jeg snakket med noen som nevnte at Vegvesenet stilte sin ruteberegner til disposisjon under hacket, noe jeg tenkte at var mest i ånden å bruke da. Denne hadde dog sine utfordringer: Mangel på CORS-støtte, krøkkete autentisering, kun UTM33, samt Esri JSON-format. Alt lot seg løse, men det hadde vært penere med GeoJSON i latLon!

Da denne biten var på plass hadde klokka nærmet seg ett på natta, men jeg var inne i en god flyt. Jeg brukte noe tid på å refaktorere det som hadde blitt ei jQuery-suppe, men gav fort opp det. Så ble det brukt noe tid på stiling av kart og markører, men heller ikke dette er noe jeg synes er dritgøy.

Dermed fant jeg ut at jeg måtte ha inn PostGIS, så jeg brukte noe tid på å få på plass dette. Det gikk overaskende smertefritt, men tok jo noe tid. En naturlig følge av å ha en romlig database var jo å kjøre noe spørringer, så jeg fikk inn kommunepolygoner og begynnte å aggregere. Da fant jeg fort ut at jeg skulle lære meg litt D3, så jeg fant en tutorial og gikk i gang. Fikk etter relativt kort tid spytta ut noe grafer, og sa meg fornøyd.

Jeg følte fortsatt at det var litt lite geohipster-preg over løsninga mi, men da klokka nærma seg seks på mårran og jeg innså at det nok ikke ble noe søvn, kom jeg på at Alex hadde blogga om hexagoner i POstGIS, heldigvis med kode. Litt tweaking senere hadde jeg et hexmap! Det gir kanskje ikke så mye innsikt, men det er kult!. Innen dette var på plass nærma det seg frokost, samt at jeg var ute en gåtur i drittværet for å bunkre snus. Timene etterpå ble brukt til å snekre sammen en presentasjon, samt å være litt i koma. Etter presentasjonen min fant jeg ut at grafene mine kunne bli bedre hvis jeg fikk inn befolkningsdata, og jeg rota meg inn på SSB sine sider. Mye data, men mye tullete formater, og mer CSV-krangling med Python. Vel, fikk det jo dataene på plass etterhvert, men det ble mye jobb.

Da grafene mine begynte å bli presentable la jeg ut et screenshot av dem på en ølnerdeside på Facebook, og fikk litt tilbakemelding på at bryggerilista jeg baserte meg på var rimelig utdatert. Det førte til at jeg innså at jeg måtte ha en funksjon for å opprette, endre og slette bryggerier. Dette tok en del tid, og ikke før i halv-fire-tida hadde jeg i det minste oppretting på plass. Det betød at jeg hadde en halvtime på meg for å lage en presentasjon eller “Pitch”. Heldigvis er Big veldig raskt å lage presentasjoner i, og jeg fikk bare 3 minutter.

Klokka fire var det tid for presentasjon, og jeg var førstemann ut. Det gikk rimelig greit synes jeg, men etter å ha sett alle de andre gruppene presentere (jeg var tydeligvis den eneste som jobbet alene), tenkte jeg at “dette vinner jeg ikke, jeg er for useriøs”. Jeg sjekket togtider til Drammen, og så at det gikk et tog 18.00, og neste 21.00. Foreldrene mine fristet med øl og spekemat, så det ble 18.00-toget! Dermed fikk jeg ikke med meg kåringen, men fikk beskjed via Twitter. Kjempekult! Jeg hadde omtrent ikke fått med meg hva premien var, og hadde nesten ikke tenkt å presentere noe, så det var kult.

Ikke bare var det kult å vinne, men det var kult å være med også! Mye flinke folk, mye gode inspill og mye spørsmål. Jeg hjalp folk med alt fra Python-kode til KNreise-apier, og fikk innspill på både datasett, løsninger og rammeverk. I tillegg fikk jeg snakket med mye folk, og ikke minst fikk jeg sitti i nærmere 24 timer og skrevet kode! Knall helg, knall arrangement. Jeg blir gjerne med til neste år.

Men, hva har jeg lært etter mitt første hackaton? Jeg kan vel ikke påstå at jeg har noen fasit, men min oppskrift på seier var vel følgende:

  • Jobb med noe du kan fra før, hvis ikke bruker du mye tid på elementære ting (ref D3)
  • Jobb med noe du synes er gøy
  • Drit i å tenke: Gjør noe!
  • Aksepter at du kommer til å lage spaghetti-kode!
  • YAGNI for alle penga
  • Lag en god presentasjon/pitch.
  • Fokuser på å ha det gøy, ikke på seier
  • For meg funka det bra å jobbe aleine, mye koordinering man slipper
  • Bruk open source bibliotek der du kan, det sparer mye tid
  • Snakk med folk, få innspill

10 Open-Source Projects Every JavaScript Geo Dev Should Know About

That is not tied to a proprietary platform

An article flew by in my Twitter stream, with the title “10 Open-Source Projects Every #JavaScript Geo Dev Should Know About”. As I consider myself a Javascript Geo Dev i thought that there might be som OpenSource gems I’ve missed and clicked the link. The link brought me to esri.com and what I was presented with was this article, listing 10 open source javascripts projects that I’ve never heard of.

Why? Most of them (or all, no links, and I can’t bother to google them all) are ESRIs own libraries, and although OpenSource they are tied to the ESRI platform. In fact, from what I understand, 4 or 5 of them are directly tied to ArcGIS Online.

This made me feel a bit tricked. Not that there are anything wrong with ESRI releasing OpenSource code, but where there is an implicit requirement that you use their paid services, what is the use for others?

But, instead of complaining I’ll present a list of my own, that should be of a wider use to all Javascript Geo devs (although I’m rather certain that most of you’ve heard about most of them already!)

1. OpenLayers 3

We all know OpenLayers 2 (don’t we?) and most of you probably know that the brand new OpenLayers 3 is in the making (beta 4 now!). Lots of features, a complete rewrite and heavy use of the Closure compiler.

2. Leaflet

The web-friendly, lightweight, hipster no-frills mapping library that excels in beeing un-bloated and easy to use. Just try it, seriously!

3. Proj4js

A JavaScript port of proj.4, meaning that you can do all your coordinate re-projections right in the browser!

4. jsts

A JavaScript port of JTS Topology Suite, a library of spatial predicates and functions for processing geometry objects. It works, but is a rather straight Java-port, which leads me to the next entry:

5. Njord.js

Njord.js is a vanilla JS, client side lib for lightweight geoprocessing, envisioned to compete with jsts and heavily inspired by Shapely. It’s written by yours truly and is under development.

6. D3

A JavaScript visualization library for HTML and SVG. I personally know next to nothing about it and haven’t used it, but if you need to add some visualisations to your map app D3 seems to be the way to go.

7. Three.js

Three.js simplifies the task of working with WebGL from Javascript. We all know that 3d is the future, so why not start learning it. If you don’t think that mapping and 3d can be united, take a look at this lib.

8. KuGIS

KuGIS is a browser-driven GIS-application with support for a lot of spatial analysis. Driven by Leaflet and JSTS. Really shows what you can do in the browser these days.

9. Bootleaf

Although I haven’t used it myself I’ve heard some good things about this lib, actually just a “simple, responsive template for building web mapping applications with Bootstrap 3, Leaflet and typeahead.js”.

10. SpatialBB

Also written by yours truly, SpatialBB (or “spatially enabeled Backbone”) is an attempt to merge the MVC-capabilities of Backbone.js with the spatial capabilities of Leaflet. Also a work in (some state of) progress, but I kinda like the idea.

So, that was my list. What did I forget? Are there any gems that’s useful? Please point me in their direction!

Nerdebøker

Etter at jeg fikk meg en Kindle (for en stund siden) og virkelig har tatt den i bruk (ikke fullt så lenge siden) har Amazon sine algoritmer begynnt å kjenne meg. Det er alltid litt skummelt med den ensrettingen man får av slike algoritmer, men nå har jeg vært gjennom endel bøker som dreier seg om tidlig IT-utvikling på en eller annen måte.

Tenkte jeg skulle dele lista her hvis andre skulle være interesserte.

Noen bøker du føler burde vært med på lista? Amazon tar jo ikke alt, så jeg tar gjerne imot tips (gjerne med en begrunnelse).