Photos on Android

Why does the Photos app take so much time to delete a photo?

Sometimes it literally takes over a minute. What’s worse it takes an indeterminate period of time. Sometimes seconds, sometimes minute .

It seems worse when there are Internet connection issue. All Google apps seem to be in the same boat – without Internet they suck big time.

Screenshot_2014-10-10-19-10-54 576w, 588w, 1080w" sizes="(max-width: 168px) 100vw, 168px" />

The other thing is it’s unreliable. Sometimes it says the photo has been deleted then a minute later there it is again seemingly resurrected from the dead. I’ve occasionally deleted them multiple time .

Here’s another example – this time Google Docs . Why does it take so long to load a document?!

Screenshot_2014-10-11-21-28-24 576w, 588w, 1080w" sizes="(max-width: 168px) 100vw, 168px" />


Sender Signatures – DKIM and SPF

Sender Signatures are used to avoid spam.

If you’re using a service like Outlook or Gmail you won’t even be aware of this.

However, if you send an email programmatically then you need to say who the Sender is. You usually do that using a Reply-To header. Unfortunately spammers have being doing this forever so, to avoid an email being labelled as spam, you’ll need to sign your email.

There are two main methods of creating Sender Signatures: DKIM and SPF.

DKIM (DomainKeys Identified Mail) has emerged from IETF (one of the Internet governing bodies) specifications and uses a signer’s public key which is published in the DNS. More here:

SPF (Sender Policy Framework) adds the list of authorized sending hosts for a domain in a TXT record. More here:

For other methods see:

Reset the Linksys WRT54GL Wireless Router

1. Press the reset button for 30 seconds.

(The reset button is a small rounded button right next to Internet jack on the back of the router) After reset, the router settings will now return to the factory default settings. Any changes you had made would be deleted.

2. Open up your Web browser and enter “″ in the address bar.

3. For the login, leave a blank ID and enter “admin” as the password.

4. You now can start reconfiguring your router.

WWDC 2013 101: Platforms State of the Union




New UI

3 big ideas: Clarity, Deference (getting the chrome out of the way of the content), Depth (parallax, blurs, sophisticated animations) 

4 things to pay attention to: Content (shows through the bars) , Metrics (cells are going edge to edge), Buttons (using coloured text more than buttons, don’t have borders), Pickers (pops in inline with content)

Text Kit: complement to WebKit

Animations: dynamics, transitions (e.g. View Controller transitions), motion effects (UIMotionEffects – e.g. for parallax effect), UIKit Dynamics (physics engine)

Multitasking: new multitasking interface, background fetch and transfers; 

For more info read:

iOS7 Transition Guide 

OS X Mavericks

Battery Life – some major updates such as listing power hungry apps;

Centralized Memory Management – Low memory notifications, Purgeable memory, Compressed memory; 

Responsive Scrolling – rendered on the main thread in small tiles, automatic for OS X 10.8; 

App Nap – Timer Rate Limiting (i.e. apps perform CPU work together); 

Multi Monitors;


Xcode 5.0

For iOS7 and OS X Mavericks.

Asset catalogs: naming convention of @2x etc is deprecated (more here:; slice images in Xcode; 

Auto Layout workflow – set constraints and get immediate feedback in Xcode via the Assistant

Debug Gauges – also iCloud debugging; Quicklook for variables;

Testing Tools – Test Navigator (e.g. Unit Tests), can now run just one test or at class or bundle level. XCTest – not much on the internet about all this yet but an interesting article in Chinese here:

Source Control – Top Level source control menu (Checkout, commit, merge, see history)

Continuous Integration – merging many code updates from many developers and constantly integrating them into the code base. Bots – CI tasks that run on OS X Server (Xcode > Product > Create Bot).

Sprite Kit

Available for iOS and OS X.

Physics Engine; Particles; CIFilters; Video so Masking can be added inline over video

See the Adventure Game source code.

Game Controllers

Defining a standard software interface.

1. a hardware standard

2. a software interface

When to use self.myInstanceVariable and when to use _myInstanceVariable

Here’s a question I’ve had a few times so here are some simple rules. But, first a quick explanation.

self.myTitle means you’re accessing an instance variable that has been created using an @property such as:

@property (nonatomic, copy) NSString *myTitle;

Unless you’re doing something special (see an earlier post) what @property does is create getters / setters and an instance variable. Xcode prefixes the instance variable with an underscore.

Note that if you needed this to be differently named you would need to use @synthesize to manually set it however, you need a very good reason. By auto-generating instance variables with a leading underscore (now the convention for instance variable naming), Xcode makes @synthesize unnecessary.

So, if you don’t have any requirements for getters/setters (and have therefore not used @property) then you don’t have the option of using self.myTitle. You would simply access it using:

myTitle = @”some title”;

Typically you would do this when you just want to create a local variable.

However, if you are using an @property then you would access this instance variable using getters:

someLabel.text = self.myTitle;

If you had to access the instance variable directly then you would use the underscore prefix to access it:

someLabel.text = _myTitle;

However, you need to have a good reason to use an instance variable this way. An example would be in a dealloc method when you don’t know the state of your object and so getters/setters would work in unknown ways. However, with the introduction of ARC much of the code in books and on the internet with the dealloc method becomes defunct.

More info here:

and here: