Alla inlägg av Patrik Lundgren

Någon som känner igen sig?

A wife asks her husband, a software engineer…
”Could you please go shopping for me and buy one carton of milk, and if they have eggs, get 6!” A short time later the husband comes back with 6 cartons of milk. The wife asks him, ”Why the hell did you buy 6 cartons of milk?” He replied, ”They had eggs.”

Reflektion

Vad har jag lärt mig / blivit bättre på / gjort det senaste året?

  • Ett nytt verktyg Flyway för databasdeploy
  • Att kommunicera både muntligt och skriftligt på både svenska och framförallt engelska
  • Sätta upp mysql med replikering i samma maskin, på kuppen lärde jag mig att sätta upp två mysql-servrar i samma maskin.
  • Arbeta i grupp
  • Smakat lite på Kanban
  • Skrivit ett superhäftigt deploy-verktyg för att installera körbar kod i Oracle. Verktyget är skrivet i en kombination av Perl och PL/SQL. De viktigaste lärdomarna härifrån är hantering av beroenden i Oracle och bättre felhantering i Perl
  • Skrivit ett program för att skapa baselines över ett schemas alla tabeller (inkl index, constraints, kommentarer) och sekvenser allt i PL/SQL. Lärdomar: hantera en collection som en tabell, lite mer om beroenden i Oracle. Den häftigaste koden i programmet: parsning av en tabell definition framtagen med dbms_metadata. Orsaken till att jag gjorde detta är att jag var tvungen att kunna skriva ut en definition på ett normaliserat/standardiserat sätt oberoende av instans.
  • Skrivit ett program för att skapa om ett schema i Oracle. Det samlar information om grants, droppar schemat och skapar ett nytt tomt schema med samma namn, lösenord och rättigheter.
  • Massor om Oracles klusterhantering, ASM.
  • Förstått en hel del om vad det som kallas devops innebär.
  • Subversion
  • Redigering av wikisidor
  • Blivit en bättre Mysql-DBA.

Det finns massor att bli bättre på. Några viktiga puckar är:

  • Kommunikation
  • Oracle RAC, Exadata, ODI, ETL. RMAN
  • Mysql replikering
  • Perl test och objektorientering

Dags för ett nytt programmeringsspråk?

Tänker lägga några timmar på att skriva några enkla program i go Documentation – The Go Programming Language. Det känns som om det är dags för något nytt hobbyprojekt att suga tag i.  Det borde gå att få en känsla för språket om man lägger 6-7 kvällar på det. En enkel plan blir

  1. Impl en enkel ls
  2. Databasanrop, koppling till sql, dokumentdatabaser
  3. Lite beräkningar och stränghantering
  4. Moduler, större program

 

Högskolan som förberedelse till livslångt lärande?

Flera utmaningar för svenska högskolan | Inrikes | SvD.

Jag ser högskoleutbildningen som en liten del av mitt lärande. Jag har förmodligen läst in mer litteratur efter att jag avslutade studierna än under dem.  Fördelen med skolan var att det fanns en färdig plan för vad man skulle lära sig. Nu har jag istället fördelen att om jag hittar något roligt, intressant eller nödvändigt så kan jag skaffa hem litteratur och börja läsa in mig på det. Är det väldigt intressant så fördjupar jag mig, annars brukar jag hitta angränsande områden som jag kan sätta mig in i.

Tyvärr känner jag många som inte vill lära sig nya saker om inte någon (deras chef) leder in dem på det spåret och sedan jagar dem med blåslampa.

Hör, hör (Att programmera i par är förmodligen inget för den duktige utvecklaren)

Pair Programming (give it a rest) | Peniwize’s Weblog.

De flesta som jobbar med utveckling är förmodligen introverter. Att tvinga introverten att jobba tillsammans med någon är ett bra sätt att bränna ut introverten. Förmodligen kommer den introverte utvecklaren att byta jobb innan du hunnit ropa ”Hello world!” om du tvingar henne att programmera i par.

Parprogrammering är som jag ser det ett amerikanskt påfund påkommet av extroverta chefer som ser med misstänksamhet på utvecklarna introverthet.

Men något som är utvecklande för den nye utvecklaren lika mycket som för den gamla räven är ett mentorsförhållande. Att lära ut något är bästa sättet att lära sig något nytt. Om man lär ut något man är expert på kommer man åtminstone att tvingas reflektera över varför man gör saker på ett visst sätt.

Lite om schemalösa databaser

Mixing databases usually not optimal | Open Query blog.

Rubriken är lite missvisande tycker jag, men artikeln är intressant nog att länka till här. Och jag kommer att återkomma i ämnet hoppas jag.

En schemalös databas behöver ändå någon form av schema även om det ligger i applikationen. Hm är det inte lika bra att försöka ha schemat i databasen och låta applikationen hantera det den ska vara bra på? Frågan är ärlig och svaret är jag vet inte… Detta kräver reflektion och kontemplation, jag kan tänka mig att svara som Tom Kyte ”Det beror på”

En fördel med MySQL statement-based replication (Litet specialfall)

Mechanics of Flite – One advantage of MySQL statement-based replication.

Jag ser ett par fall där jag kunde haft nytta av detta. Ledsen jag kan inte skriva mer specifikt om dem eftersom det berör en gammal arbetsgivare.

Det kan också vara något att experimentera med om man har en stage-miljö eller testmiljö som direkt laddas med produktionsdata. Man kan experimentera med testmiljön och se att allt fungerar som tänkt innan man släpper på ändringarna i produktion. Och utan att behöva ta hand om replikeringsfel i testmiljön.

Labserver

Håller på och sätter upp en labbmaskin hemma. Målet är att jag ska kunna kasta upp en 3-6 virtuella maskiner och jobba mot. Normalt kanske det är en eller två som är uppe, men jag vill kunna köra lite parallella tester i den.

8 kärnor på 2,5Ghz och 32 GB RAM ska räcka ett tag. Köpte en av intels 45W CPUer i förhoppningen att det ska gå att köra fläktarna på lägre hastighet. För tillfället sitter det 8Tb lagring i maskinen. Det ska utökas till 12. Varav 4 kan användas till de virtuella maskinerna. Resten används som lager av mina rippade skivor och alla bilder.

Jag har valt att köra på konsumentprylar av flera skäl, de viktigaste är kassan och hörseln. Maskinen ska stå i sovrummet tills vidare och då är det naturligtvis bra om den inte väsnas allt för mycket 🙂

Analytiska funktioner

Några ord om analytiska funktioner efter Tim Halls presentation på Ace Director Tour 2013. Jag tänker försöka sammanfatta det han sa på svenska (blandat med lite SQL och engelska).

  • Trots att analytiska funktioner baseras på grupper av data (group by) så reduceras inte antalet rader i resultatet.
  • De analytiska funktionerna processas efter att datat är hämtat, men före en eventuell sortering av det.

En analytisk funktion har några olika delar

analytic_function([ arguments ]) OVER (analytic_clause)

Där ”analytic clause” består av

[ query_partition_clause ] [ order_by_clause [  windowing_clause ] ]

query_partition delen, delar upp datat i grupper (partitioner – tänk GROUP BY), den analytiska funktionen begränsas av av gränserna som den här delen av frågan sätter upp. Saknas den så används hela resultatet.

order_by delen sorterar datat i varje partition, men inte i resultatet av hela frågan. Använd alltid en ORDER BY på frågan för att få önskad sortering. (Förväxla ej Order by för en analytisk funktion med en vanlig ORDER BY.

windowing delen förfinar resultatet av order by om man behöver. Defaultvärdet är inte vad man räknar med. Det logiska vore hela partitionen, men default är ”Range between unbounded preceding and current row” dvs från första raden i partitionen till och med raden man står på.

Läs Tims presentation och kolla på demot för fördjupning.

Tips till alla utvecklare

Om du någonsin skriver kod mot en databashanterare som följer relationsmodellen (Oracle, MS SQL Server, Sybase, DB2, Sqllite, Mysql, MariaDB, PostgreSQL) så läs första kapitlet i Tom Kytes ”Expert Oracle Database Architecture”.  ISBN: 9781430229469. Kapitlet är namnsatt ”Developing Successful Oracle Applications”, men låt inte det hindra dig även om du aldrig utvecklar mot Oracle. Tom belyser många myter om databaser på ett fascinerande och lärorikt sätt.