Tagg arkiv: applikationer


Kan man undvika förgreningsträsket?

När man utvecklar system så hamnar man ofta i dilemmat att man måste vidareutveckla och samtidigt underhålla koden i produktion. Det finns många olika alternativ man kan använda för att lösa detta. Jag förutsätter att man använder någon form av versionshanteringssystem för att ha en chans att klara av detta överhuvudtaget.

Ett populärt sätt är att använda grenar (branches) för att arbeta med koden i produktion och nyutveckling parallellt. I praktiken upptäcker man snabbt att detta medför ett antal problem att ta ställning till. Här är några exempel:

  • När ska man mergea ner koden till trunken? Ska man göra en ny gren när det är dags för produktionssättning? Eller ska man kanske bara göra nya grenar baserat på den senaste utvecklingsgrenen?
  • Ska man systemtesta applikationen i utvecklingsgrenen eller bara i produktionssättningsgrenen när man är klar med utvecklingen? Både och är förstås att föredra men om det inte finns resurser till detta?
  • Hur gör man om beställaren ångrar sig och vill ta bort vissa funktioner och samtidigt vill lägga till andra helt nya mitt under utvecklingen i grenen?
  • Vad gör man om det dyker upp akuta buggar i produktion?
  • Hur hanterar man beställarens krav på täta releaser när de inte riktigt passar ihop med tiden det tar att utveckla vissa delar av applikationen?
  • Hur hanterar man automatiska byggen när man använder flera grenar?
  • Vilken gren ska man utveckla i? Är det trunken eller någon annan obskyr gren som ingen längre har någon koll på?

Optimalt vore ju om man kunde hantera samtliga problem på bästa möjliga sätt för samtliga parter i projektet vilket ofta kan vara komplicerat.

Jag läste nyligen om ett sätt att komma en bit på vägen genom att använda förgrening genom abstraktion (branch by abstraction) tillsammans med omkopplingsbara egenskaper (feature toggles).

Förgrening genom abstraktion

Man kan abstrahera bort problemet genom att göra två implementationer, dels den gamla befintliga och dels den nya som ska ta över.  Dessa implementationer kan finnas parallellt och man ser till att gå över till den nya koden så snart denna är på plats, testad och klar. Därefter kan man ta bort den befintliga legacy koden och saken är klar. Det bästa är att de automatiska byggena alltid bygger och att man inte begränsar produktionssättningarna då koden alltid är i fungerande skick.

Omkopplingsbara egenskaper

Med omkopplingsbara egenskaper kan man enkelt konfigurera sin applikation vilka egenskaper denna ska ha. Detta gör att man kan slå av och gömma de funktioner som ännu inte är klara och därmed inte ska ut i nästa produktionssättning.

Genom att använda dessa tekniker kan man komma ganska långt och troligtvis slippa behovet av att skapa en massa nya grenar.

Jag rekommenderar att läsa de ursprungliga artiklarna för en djupare förståelse.

Lycka till!

Källor
http://continuousdelivery.com/2011/05/make-large-scale-changes-incrementally-with-branch-by-abstraction/
http://paulhammant.com/blog/branch_by_abstraction.html
http://martinfowler.com/bliki/FeatureToggle.html

Tar du död på dina Android applikationer?

Det är många som tror att man måste ta död på applikationerna man är färdig med i sina Android-telefoner. Därav uppstod det snabbt ett antal applikationsdödare, eller task killers om man pratar engelska, som man kan använda för att manuellt eller automatiskt döda applikationer som körs i minnet. Faktum är dock att detta inte alls är nödvändigt och till och med skadligt för telefonen att själv döda applikationerna! Jag ska försöka att förklara varför, så häng med!

Det finns en anledning till att man från början inte byggde in en applikationsdödare i operativsystemet. Eftersom Android är ett multitaskande operativsystem, dvs man att man kan köra flera processer samtidigt, så finns det inget behov av att själv döda applikationerna. Istället hanterar Android detta automatiskt vid behov.

En hel del av applikationerna använder man flera gånger under dagen och för att starta snabbt, smidigt och därmed inte belasta telefonen så låter man dessa vara igång. En del applikationer har tjänster som någon gång i bland frågar efter data från Internet och behöver därmed också finnas tillgängliga i minnet.

Tyvärr misstolkar de flesta att om applikationen är igång så drar den en massa batteri och är i vägen för andra applikationer som man vill starta. Detta är inte sant då en applikation är vilande och i stort sett inte belastar processorn alls när den inte används.

Om operativsystemet exempelvis upptäcker att mer minne behövs så stängs de applikationer som inte använts på ett tag ner på ett säkert sätt.

Några myter om applikationsdödare (task killers) att ta död på

  • De förlänger min batteritid – Felaktigt!
    Minnet som används drar ingen ström så det spelar ingen roll om det finns en applikation eller data där eller om det är tomt. I stället går det åt mer batteri till att starta upp applikationen från noll igen.
  • De gör så att min telefon går fortare – Felaktigt!
    Telefonen kan istället bli instabil. Processer kan delas mellan applikationer vilket gör Android instabilt när den ska öppna dödade applikationer som har delade processer.
  • De används eftersom det inte går att avsluta en applikation – Felaktigt!
    Systemet har avsiktligt designats utan några avsluta-knappar eftersom Android hanterar detta automatiskt.

De enda gångerna när det är aktuellt att själv ta död på en applikation är om den är dåligt programmerad och använder mer och mer minne eller kraschar ofta. Då bör man avinstallera applikationen och höra av sig till utvecklaren och höra om han eller hon kan göra något åt saken. Får man inte det svar från utvecklaren man är nöjd med finns det oftast andra applikationer som gör samma saker som man kan prova istället.

Så undvik att använda applikationsdödare på din telefon och börja använda ”Hem”-knappen som ser ut som ett litet hus istället så får du en snabbare, mer energisnål och mycket stabilare Android telefon.

Källor
http://android-developers.blogspot.com/2010/04/multitasking-android-way.html
http://www.droid-den.com/android-guides/android-guide-should-i-use-a-task-killer
http://www.howtogeek.com/howto/28496/how-to-force-kill-android-applications-without-a-task-manager

Powered by WordPress