Android vs iOS – de små ting, der gør forskellen

Dette indlæg er ikke tænkt som en mudderkamp, men mere som mine personlige betragtninger af forskellen mellem de to styresystemer.  Måske er jeg farvet af den grønne robot, måske ikke!

Den spæde start

Hele mit smartphone-eventyr startede på et hotelværelse nær Cincinnati, Ohio i det tidlige forår 2008. Jeg havde været ude at købe en underlig dims kaldet iPhone. Den havde 4gb plads og en stor touch-skærm. Touch havde for mig indtil det tidspunkt været noget værre skrammel, hvor man nærmest skulle trykke sin finger igennem skærmen for at få skidtet til at reagere, men denne skærm var anderledes. Jeg havde forberedt mig hjemmefra og læst om iPhonen, samt hvad der skulle til for at få mit danske simkort til at virke. Man skulle have den rigtige version af iPhone OS (dengang var iOS navnet på firmwaren i Cisco-udstyr) for at kunne udnytte exploits, der kunne lave noget sort “magi” i bootloaderen, der gjorde det muligt at bruge andet end AT&T simkort. Da iPhone endelig kom til Danmark i sommeren 2008, måtte jeg med på iPhone 3G-vognen. Det var en utrolig fed oplevelse.

Opensource-ideologien

Under min tid med iPhonen blev jeg mere og mere grebet af opensource-ideologien. Brugen af opensource-software indtog mine computere, og rygtet om Googles Android fik mig til at fjerne blikket fra iPhonen. HTC Magic blev min første Android-telefon i den tidlige sommer 2009. Bedre end iPhonen var den ikke, må jeg indrømme, men hele ideen omkring operativsystemet og integrationen med Googles produkter fik mig til at blive, måske fordi den tætte integration mellem iTunes og iPhone ikke var noget, jeg brød mig om.
Jeg har prøvet rigtig, rigtig mange Android-telefoner/tablets gennem tiden – specielt Nexus-produkterne fra Google har jeg været stor tilhænger af – men på en eller anden måde fik Apple fat i mig igen med iPad. Jeg kan ikke beskrive, hvad det er, men på en tablet føler jeg, at iOS gør det langt bedre end Android.

Tilbage til iPhone

Her i det tidlige 2015 besluttede jeg mig at give iPhonen en chance til. Nu havde Apple med iOS 8 tilføjet mange af de ting, jeg synes var geniale i Android, såsom tredjeparts-keyboards, deling af indhold mellem apps og en større skærm i iPhone 6+. Derudover havde Apple masser at lokke med, og jeg har alligevel en Macbook og en iPad Air, så hvorfor ikke give hele pakken en chance. Jeg blev positivt overrasket over funktioner som TouchID, Handoff og Messages. At kunne sende sms fra sin pc var noget, jeg virkelig havde savnet ved Android. Jeg ved godt, der findes apps, som kan tilbyde lignende funktionalitet, men de har bare ikke kunnet opfylde mine behov. Kamera-oplevelsen er også virkelig enkel og god, og billederne står skarpt hver gang – der er ingen pause mellem trykket på udløseren og til billedet tages. Alle de ting, jeg havde set frem til, virker også bare, og det er dejligt, men Apples Elysium er dog ikke fejlfri.

Ram

iPhone 6+ har 1GB ram, og det betyder, at apps tit og ofte åbner forfra, i stedet for der, hvor jeg var, sidst jeg brugte app’en. Dette har aldrig været et problem for mig på Android, hvor jeg de sidste par år har haft henholdsvis 2 og 3GB ram at gøre godt med, når der skulle multitaskes.

Signal og standby

Apple har fået optimeret iOS godt og grundigt i forhold til standby – jeg gider ikke engang at slå Bluetooth fra. Det samme gælder WiFi-radioen og radioen til selve telefonsignalet. På Android slog jeg bevidst 4G fra pga dårligt signal, som i sidste ende koster på batteriet. Dette har jeg ikke gjort på iPhonen, og alligevel bruger den næsten ingen energi i standby. I forbindelse med Bluetooth skal det lige nævnes, at Apple har valgt at vise batteriniveauet for den tilkoblede Bluetooth-enhed, og dette er en for mig lækker lille feature og noget, jeg ville ønske også var muligt på Android.

iOS viser batteriniveauet for forbundne bluetooth enheder
iOS viser batteriniveauet for forbundne bluetooth enheder

I øvrigt afspilles ens ringetone i headsættet, hvilket kan virke irriterende, når man som mig har valgt en ringetone, der larmer for at kunne fange min opmærksomhed, når telefonen er i lommen.

Kameraet

Apple har valgt ikke at deltage i megapixel-ræset og benytter en 8MP kamerasensor fra Sony. Dette er et godt valg, idet det betyder, at hver enkelt pixel er større og dermed kan fange mere lys end en sensor med flere pixels. Funktioner som Slowmotion med 240bps er super fede, og jeg håber, at vi ser mere af den slags med det nye kamera-api i Lollipop.

Privacy

I disse tider med masseovervågning har Apple gjort det muligt at sætte rettigheder op pr. app. Det er virkelig noget, jeg savner på Android, hvor det er alt eller intet.

Derudover er jeg stor tilhænger af, at enheden kommer krypteret fra start af. Dette er Google også begyndt på med Lollipop. Apple har en funktion kaldet “Find min iPhone”, og har man slået den til, kan man spore telefonen i tilfælde af tyveri. Google har en tilsvarende funktion, men Apple har taget skridtet videre og da en tyv, selvom han gætter koden på telefonen og nulstiller den, stadig intet har at bruge telefonen til, fordi den skal bruges med det Apple-ID, som var brugt på telefonen til at sætte Find min iPhone op med.

Alarmer og Ringetoner

Noget af det første jeg oplevede på iPhone, er den mystiske sammenhæng, der er mellem lydstyrken for alarmer og ringetoner ved opkald. Jeg bruger min smartphone som vækkeur, og det er jeg åbenbart den eneste uden for Cupertino, der gør. På Android har jeg mulighed for – uafhængigt af alt andet – at bestemme, om mit vækkeur skal ringe højt eller lavt og vibrere eller ikke vibrere. Det har jeg ikke på iPhone. Skal alarmen ikke vibrere, så er der heller ingen vibration ved opkald. Det samme gælder for lydstyrken, som også er afhængig af lydstyrken ved opkald. Dette er fuldstændig tåbeligt og har givet en del klager på hjemmefronten over en alarm, der bliver blæst af med 80db, et par timer inden hun skal op.

Kalenderen

I tillæg til afsnittet om ringetoner og alarmer har jeg endnu et irritationsmoment vedrørende alarmer. Denne gang er det dog i kalenderen. Min kæreste og jeg har delt vores Google-kalendre med hinanden for at undgå at skulle have både separate og fælles kalender. Dette har indtil videre fungeret rigtig godt og kørt uden problemer. På min iPhone har jeg tilføjet min Google-konto og valgt at vise begge vores kalendre i den indbyggede kalender-app. So far, so good!
Det er så her, filmen knækker… Hvorfor begynder min iPhone at spille alarmer for aftaler, der står i hendes kalender? Det er okay med aftaler, vi har delt med hinanden, men alarmer for aftaler, der kun vedkommer hende, skal altså ikke begynde at forstyrre mig.

iOS8 – Indholdsdeling mellem apps

Som noget nyt i iOS 8 har Apple introduceret Share-Sheets, som en del af deres Extensions i iOS. Denne funktion gør det muligt at dele indhold mellem apps – noget, som jeg havde set meget frem til, fordi det var en af de nøglefunktioner, der holdt mig hos Android, hvor Google havde bygget funktionen ind i systemet fra starten. Denne funktion er op til den enkelte app-udvikler at benytte, men alligevel synes jeg, det står meget sløjt til med apps der udnytter funktionen, her 5 måneder efter lanceringen af iOS8.

iOS8 – tredjeparts-keyboards

En af de andre nye funktioner fra Extensions i iOS8 er, at man for første gang kan installere keyboards fra App Store. Swiftkey, som jeg plejer at benytte på Android, findes eksempelvis også til iPhone nu. Dog er det meget langt fra lige så velfungerende, som jeg er vant til. Det er svært at beskrive, hvad det præcis er, men det virker bare ikke ligeså godt og flydende og er i nogle få tilfælde crashet for mig. Derudover har jeg oplevet, at mit standard-keyboard har været sat tilbage til Apples, selvom jeg har haft brugt Swiftkey, sidste gang jeg brugte keyboardet. Til keyboards skal det lige nævnes, at det er totalt irriterende, at man skal vælge et andet “keyboard” for at få smileys frem. Og hvorfor kan man ikke vælge tal ved at trykke længe på et af de øverste bogstaver på standard-keyboardet? Derudover virker quick-type kun med et engelsksproget keyboard. Quick-type er Apples navn for funktionen, der forudsiger ord, ud fra hvad man skriver om.

Kvaliteten af apps

Det har før været sådan, at kvaliteten på apps generelt virkede til at være højere i Apples økosystem, men den tid oplever jeg, er ovre. Jeg har mange apps, som ikke er optimeret til den større opløsning på iPhone 6+, og når man browser rundt i App Store, får man indtryk af, at apps udvikles og bliver glemt. Mange apps er ikke optimeret til nyeste iPhone-generation, på trods af at de har været ude siden midt i september, og at udviklerne fik adgang til de første iOS8-betaer forrige sommer. Derudover er der langt mellem apps, der benytter det nye design, som blev introduceret med iOS7.
Til slut vil jeg sige, at jeg har oplevet flere apps, der pludseligt lukker ned, end jeg hidtil har gjort på Android.

Handoff – Messages

Som en del af Handoff funktionerne er det nu muligt at sende iMessages/SMS fra OSX med messages programmet. Hver ny besked der kommer ind på iPhone dukker også op på Mac’en. Dette er super smart, men det virker halvfærdigt. Hvorfor sletter den ikke en tråd på computeren hvis man sletter den på telefonen? Det ville være rart hvis man også kunne organisere sine beskeder på computeren og have det synkroniseret over på telefonen.

TouchID

TouchID er noget, jeg virkelig har fundet brugbart, og det er en funktion, jeg virkelig håber, vil komme på andre systemer. Det er utrolig nemt og bekvemt at låse telefon og apps op med sit fingeraftryk, og jeg har på intet tidspunkt haft problemer med det.

 

I sidste ende er begge operativsystemer utrolig modne og stabile. Netop derfor er noget af min kritik også nede i petitesse-niveau, for det er bare nødvendigt for at kunne sætte en finger på iPhonens rygte “Det virker bare!”. Bliver jeg på iOS platformen fremover? Det må tiden vise. Lige nu begynder mine abstinenser så småt at melde sig.

Python – NCP Mount, Rsync

[code]
#!/usr/bin/python
# Kenneth Holmqvist 2014
# [email protected]
# Use this script to rsync folders from source to destination
# and receive an email with the output.
# Version 0.1
##########################
import smtplib, subprocess, argparse, time;

class Email(object):
def __init__(self, smtp_server, port, ssl, username, password, to, subject, message):
self.smtp_server = smtp_server;
self.port = int(port);
self.ssl = ssl;
self.username = username;
self.password = password;
self.to = to;
self.subject = subject;
header = ‘To: ‘ + self.to + ‘\n’ + ‘From: ‘ + self.username + ‘\n’ + ‘Subject: ‘ + self.subject;
message = header + ‘\n’ + message;
self.message = str(message);

def Send(self):
try:
server = smtplib.SMTP(self.smtp_server, self.port);
except smtplib.socket.gaierror:
return False;

if self.ssl==”ssl”:
try:
server.ehlo_or_helo_if_needed();
except smtplib.SMTPHeloError:
return False;
try:
server.starttls();
except smtplib.SMTPExeception:
return False;

if self.ssl==”none” or self.ssl==”ssl”:
try:
server.login(self.username, self.password);
except smtplib.SMTPAuthenticationError:
return False;

try:
server.sendmail(self.username, self.to, self.message);
return True;
except smtplib.SMTPDataError:
return False;
finally:
server.quit();

class Rsync(object):
def __init__(self, source, destination, options):
self.source = source;
self.destination = destination;
self.options = options;

def Backup(self):
command = [“rsync”, self.options, self.source, self.destination];
rsync = subprocess.check_output(command);
return rsync;

class Novell(object):
def __init__(self, server, server_name, username, password, volume, mount_point):
self.server = server;
self.server_name = server_name;
self.username = username;
self.password = password;
self.volume = volume;
self.mount_point = mount_point;

def Connect(self):
command = [“ncpmount”, “-A”, self.server, “-S”, self.server_name, “-U”, self.username, “-P”, self.password, “-V”, self.volume, self.mount_point];
ncpmount = subprocess.call(command);
return ncpmount;

def Disconnect(self):
command = [“ncpunmount”, self.mount_point];
ncpunmount = subprocess.call(command);
return ncpunmount;

## Variables
smtp_server=”smtp.gmail.com”;
smtp_port=”587″;
smtp_ssl=”ssl”
smtp_username=”[email protected]”;
smtp_password=””;
email_to=”[email protected]”;
subject=”This is a test”;
rsync_options=”-avhPn”;

parser = argparse.ArgumentParser();
parser.add_argument(“-A”,”–address”,help=”IP or FQDN for Novell Server”);
parser.add_argument(“-S”,”–server”,help=”Server name to be used for Novell Server”);
parser.add_argument(“-U”,”–username”,help=”Novell Username”);
parser.add_argument(“-P”,”–password”,help=”Novell Password”);
parser.add_argument(“-V”,”–volume”,help=”Novell Volume”);
parser.add_argument(“-M”,”–mountpoint”,help=”Local mount point for Novell share”);
parser.add_argument(“-s”,”–source”,help=”Rsync source folder”);
parser.add_argument(“-d”,”–destination”,help=”Rsync destination folder”);
arg = parser.parse_args();

def main(novell_server,novell_server_name,novell_username,novell_password,novell_volume,novell_mountpoint,rsync_source,rsync_destination,rsync_options):
novell = Novell(novell_server,novell_server_name,novell_username,novell_password,novell_volume,novell_mountpoint);
novell.Connect();
#time.sleep(10);
rsync = Rsync(rsync_source,rsync_destination,rsync_options);
output = rsync.Backup();
mail = Email(smtp_server,smtp_port,smtp_ssl,smtp_username,smtp_password,email_to, subject, output);
mail.Send();
novell.Disconnect();

main(arg.address,arg.server,arg.username,arg.password,arg.volume,arg.mountpoint,arg.source,arg.destination,rsync_options);
[/code]

Nikon D3s

Der er sket rigtig meget i det forgangne år. Jeg kan ligeså godt tilstå og indrømme at jeg har solgt mit D800. Det er som sådan ikke fordi at jeg ikke var glad for D800, men mit brugsmønster har ændret sig og dette har betydet at jeg har brug for noget andet grej. Havde jeg haft pengene ville jeg hellere end gerne have haft beholdt D800, men sådan er situationen bare ikke lige nu.

D800 er et kamera med 36.3 megapixels på billedsensoren og selvom det er en Full Frame sensor betyder det at hver enkelt pixel ikke er ret stort fordi, at man har skulle klemme så mange ned på så lidt plads. Mit største problem ved D800 var ikke filstørrelsen på ca 80mb for en ikke komprimeret raw fil (ca 40mb for en lossless komprimeret raw fil), men derimod at jeg syntes min lukketid skulle være 1 stop hurtigere end hvad jeg var vant til på D7000 for ikke at få bevægelsesslør. Billedkvaliteten begynder at falde allerede fra iso 1600 og det sammen med hurtigere lukketid og mit stigende behov for at kunne fotografere i lavbelysning gjorde bare at jeg måtte begynde at se mig om efter noget andet. For mig er D800 rigtig fint på en tripod til landskab eller studiefotografering.

Jeg ville rigtig gerne have et Nikon D4, men det er langt over hvad mit budget kan klare så derfor begyndte jeg at søge efter et brugt Nikon D3s og fandt så endelig et i god stand og med en fornuftig shuttercount. Yderligere har D3s en bedre iso ydelse en D4 ifølge DxOMark

Nikon D3s er Nikons tidligere professionelle topmodel og kan levere fornuftige billeder skudt med iso 12.800 så dette giver mig meget større muligheder. Det integrerede  batterigreb er en kæmpe bonus og giver en rigtig fin balance når man monterer fx en 70-200 2.8.

Sensoren i D3s er produceret af Sony og er på 12mp dette giver nogle meget større pixels i forhold til D800 og dermed en mere lysstærk sensor. Bevares man får heller ikke ligeså mange pixel og ligeså gode muligheder for at croppe i billedet, men jeg vil hellere tage billedet rigtig første gang. Mit behov for print er ikke særlig stort og til en almindelig A4 side er 6mp nok. Man kunne tro at sensoren i D3s er den sammen som i D700/D3, men det er det ikke. Nikon har opdateret sensoren og gjort den mere lysstærk end D3/D700. En anden ting Nikon har gjort ved D3s er at give den en større buffer, dette var noget som D3 ejere kunne vælge at købe som en valgfri opgradering fordi bufferen på D3 simpelthen ikke var stor nok.