Buying a new smartphone… how priorities shift

My first impressions of the Huawei Nexus 6p

A little history

My glimpse into the smartphone world came with my Nokia E71 (around 2010) – with internet access and a full fledged hardware keyboard I was able to type full length mails not even looking on my phone. Sometimes even while riding my bike. That was really important to me, certainly more important than having some obscure apps or a fast experience. Nevertheless the E71 had Nokia Here (which was not that bad compared to the features that Google Maps offered back then) and had a good Browser (used Opera Mobile that time). Of course the Android world was very intriguing to me, so I made the switch in 2011 and bought the HTC Desire Z, a slider but not a conventional one. That experience began really great and ended with me being totally frustrated, the hardware keyboard was great – but the complete phone was so buggy and slow that it was almost impossible to use it for an extended period of time. And the battery life – what battery life?! After a year or so I was glad to be able to last a few hours on a full charge. As HTC wouldn’t update the Desire Z, I started installing modified Android versions, like CyanogenMod or AOSP. They helped soften the pain in using the device, but the reboots continued. So in the end of 2012 I was completely fed up with the Desire Z. I gave HTC another chance and went with the HTC One X+ – not knowing that the HTC One M7 was right around the corner (released in March 2013). The One X+ was again alright in the beginning, after a few months I again reverted back to custom ROMs as the bugs got more annoying, the restarts occurred more often and the battery life got shorter and shorter. The One X+ was then at the time the first of my stint at trying a high-end phone to meet my needs – after a year and a half, I got an invite to buy a OnePlus One. A high-end “flagship” phone that only costs 300 EUR? Count me in! So in October 2014 I switched my then dreaded HTC One X+ with the OnePlus One.

The OnePlus One

When the phone arrived I was totally amazed. It was big, like really big! With 5.5 inch and a size of 152.9 x 75.9 x 8.9 mm it was a lot bigger than the HTC One X+ – it barely fitted in my jeans pockets.

But the phone was made beautifully – the rough back, the full glass front made it feel very high end, and the rough back also meant that in over one and a half years I have never once dropped it. It just really hard for the phone to slip out of your hands. So I loved the exterior!

The battery life was for the first time “sufficient” for most of my use cases, it did let me down a few times but not that often. The included charger was immensely fast. I got used to the size of the phone really quick accompanied by the sandstone back it was a dream to get out of the pockets and start using / typing – never fearing it to fly out of your hands.

Typically for Android and phones on Android 4.4 there were always some minor glitches and performance issues – tapping on an icon wouldn’t work immediately and randomly there were just some delays. Mostly restarting the device helped bring it back to normal – which means sufficient – speed.

As I was really familiar with CyanogenMod from my past phones, I loved the OS too…. but suddenly in the summer the touchscreen went really strange – there are hundreds of posts in OnePlus’ message boards about ghost touches. It was so bad that I couldn’t use the touchscreen anymore… anybody want to guess how useful a smartphone is without the touchscreen? As I learned that it must be a software glitch, I went back into installing custom ROMs.

What I really learned over the last six months then is that custom ROMs are really nice if you want to fiddle around and have fun with your phone – but they are (mostly) really not for use in a productive environment. After testing dozens of custom Roms for the OnePlus One every one introduced different problems (but all fixed the touchscreen issue)! Sometimes I wasn’t able to answer a phone call because the screen just froze, more often than not the SIM was not recognized and I had to restart the phone several times – or no cellular connection could be established… then in December 2015 the phone started to just restart every hour or so… every time eating into the remaining battery life and also made me miss phone calls, meetings and important mails, as I might not look on my phone all the time and realize it restarted and is waiting for me to enter the PIN. It got so annoying in December 22nd that I searched for a new phone online and thanks to Amazon Prime ordered the Nexus 6p for Christmas Eve (Dec 24)!

Huawei Nexus 6p

I read a ton of reviews about the new flagship device, I honestly for the first time also considered a Samsung S6 and an iPhone 6s Plus. Both devices were roughly 100 – 200 Euros more expensive and I still have some aversion against the iPhone (porting all my apps, don’t like the Apple world per se) and the Samsung (changing the user experience and for trying to be like Apple – at least the S6 has a nice metal body now).

So what are my experiences spending the last few weeks with the 6p?

The greatest thing first: The fingerprint reader is a dream to use. It is really lightning fast, it is amazingly good integrated with Android and also works with LastPass (big win for me!) and the position on the back is also really clever. Sometimes it would be great to turn it one while it sits on the table or so, but it didn’t hurt the experience that far.

The cellular connection on the 6p is amazingly good, compared even to a 6s that a friend bought a few weeks ago. It can and will pick up a strong signal nearly everywhere!

It is really big though! And slippery, already twice it nearly fell out of my hands. Currently I have to consciously think about slowly get the phone out of my pockets, but if I only once forget and am in a hurry I already see this phone going to hit the floor hard. Not sure how it will end up then.

The rest of my experience in bullet points:

  • Lags still do occur despite the power house under neath it, but they are really really rare (twice in 3 weeks)
  • Android Doze feature is really amazing – leaving your phone untouched for a few hours and it will only loose a few percentage points
  • normal usage does drain the battery fairly quick (commuting to work for an hour a day with less than good cellular connectivity (underground train) while reading, listening to music and answering some mails, chatting and some light gaming) – this will roughly cost the battery around 20 – 30 %. With some calls and mails at work and some light gaming in the evening it will certainly hit the 15 % wall. So if I want to go somewhere after work I definitively need to recharge it during work.
  • Battery Safer in Android is pretty good as it seems to throttle the CPU but that means lags occur more often (which is fine because you want the battery to last longer) and you can turn it off at any time.
  • One the OnePlus One for some weird reason the microphone of my headphones did not work – they do now!
  • The camera takes very good pictures – according to the reviews still not as good as the Samsung or iPhones of this world, but still a massive improvement in comparison with the OnePlus One.
  • The power button with the double tap feature to launch into the camera works really well, for my hands it wouldn’t hurt to move it a little more up to the top. The volume buttons are on the opposite side on the OnePlus One and on the Nexus 6p they are on the same side… I do find it very confusing and often press them completely unintentionally as they are really in the middle of the device. And because of the slipperiness I need to hold the device pretty tight, so I always press the volume rocker one way or another.
  • What’s weird is that the phone gets really hot when using, even light writing makes it go really hot – i hope this won’t yield some ugly bugs in summer when the temperature outside is hot too.
  • Front facing speakers are okay for the sound they make. Design-wise I cannot understand why one would but speakers on the back of a phone – it makes so much sense to make the speakers face the user!
  • USB C is really good and I am looking forward for more devices to have it!

So how to sum it up?

My early smartphones were really buggy and I spent a lot of time installing different Mods and fiddling with settings, now that I have a demanding job and need the phone to just work – flawlessly the priorities have shifted dramatically. I need the phone to work reliably and if there is an incoming phone call I do need the option to answer it. That was not that important when I was a student, mostly using the phone to arrange meetings or calling for fun. The Nexus 6p seems to tick all the boxes I need. It carries the Nexus brand meaning the Android experience is unchanged, Huawei as a more or a less new player wants to establish itself as a premium smartphone maker – just like HTC it doesn’t have the media budget like Apple or Samsung so it needs to make amazing devices for people to give credit and buy its phones. It probably learned a lot while designing this phone – also Google seemed to have learned a lot from the earlier Nexus versions (see Camera).

I really hope that Google will update the device with the latest Android updates for the next two years. That means the software finally can match the hardware in terms of quality. I do hope that Google can squeeze some more battery life out of the device and my main hope is that I can finally live with a device for at least two years now.

So let’s see whether this will come true…

Magento 1.6.0.1 – editing address in admin leads to memory exhaustion

After a while when your magento shop is running for a few months or years suddenly a few weird issues start… one of them is that changing the address by clicking edit in the order leads to an ugly fatal:

Something like

Fatal Error: Allowed memory size of x bytes exhausted (tried to allocate y bytes) in …

I have tried to debug this line today and it seems turns out the action is actually pretty simple:

/**
 * Edit order address form
 */
public function addressAction()
{
    $addressId = $this->getRequest()->getParam('address_id');
    $address = Mage::getModel('sales/order_address')
        ->getCollection()
        ->getItemById($addressId);
    if ($address) {
        Mage::register('order_address', $address);
        $this->loadLayout();
        $this->renderLayout();
    } else {
        $this->_redirect('*/*/');
    }
}

see app/code/core/Mage/Adminhtml/controllers/Sales/OrderController.php – line 716

It seems that Magento is trying to load the whole collection first and then get the item (line $address = …), which when the collection is big, fails and though exhausts the memory. (getItemById is not a filter but just looking for a key in the items data collection)

Anyway to fix this we need to change how the collection is loaded and apply a filter before that, luckily Magento seems to have realized that, because if you look at the newer versions the method now reads:

/**
 * Edit order address form
 */
public function addressAction()
{
    $addressId = $this->getRequest()->getParam('address_id');
    $address = Mage::getModel('sales/order_address')
        ->getCollection()
        ->addFilter('entity_id', $addressId)
        ->getItemById($addressId);
    if ($address) {
        Mage::register('order_address', $address);
        $this->loadLayout();
        // Do not display VAT validation button on edit order address form
        $addressFormContainer = $this->getLayout()->getBlock('sales_order_address.form.container');
        if ($addressFormContainer) {
            $addressFormContainer->getChild('form')->setDisplayVatValidationButton(false);
        }

        $this->renderLayout();
    } else {
        $this->_redirect('*/*/');
    }
}

if you now look at the same line, they have now fitted an addFilter(‘entity_id’, $addressId), this changes the sql and only retrieves the correct row, which prevents it to load all of it and only using one row. So there’s the solution, now we only need to create a local module, overwrite the controller action and we’re done!

 

Configuring Xdebug to work with NetBeans on Windows 7 and 8 with XAMPP

I’ve been fiddling with Xdebug for a long time now. Especially for the two bigger projects that I’m currently working on that are based Magento (which is again based on Zend) it’s really useful to debug them on the fly. After a lot of tiresome debugging today which could probably be avoided if I just had xdebug working, I tried to find the problem on my local machine.

Continue reading Configuring Xdebug to work with NetBeans on Windows 7 and 8 with XAMPP

Passing through external DNS towards DHCP Clients using LinkSys WRT54G

It’s been years since I’ve flashed my LinkSys WRT54G router with a custom firmware: dd-wrt v24-sp2! This custom firmware opens up a lot of new features and especially let’s you customize these the way you want to.

Somehow my router started acting up and after a reset I needed to reconfigure the settings. The thing is, that I’m living in a student dorm and every room ought to have one static IP address, with DNS and Gateway settings. Now the problem was that I need to pass-through these DNS settings to my laptop and other devices, so the DHCP clients need to get the DNS settings.

After a lot of searching for an answer I finally remembered that it was a setting within DNSMasq!

Continue reading Passing through external DNS towards DHCP Clients using LinkSys WRT54G

Windows 8 – Apps

After a few days of trying Windows 8, I want to give a quick overview over the OS. To make long things short: It’s really good. I think for the price of 30 – 40 EUR everyone should update immediately. Especially if you come from Windows 7, since it’s just soooo easy. It took me three hours – and that’s only because of the shitty internet connection in my dorm room.

So what has changed?

Continue reading Windows 8 – Apps