Photography with Lumia 1020

Thank for Nokia Connects I had a Lumia 1020 to test for about 2 weeks. Being a phone camera enthusiast I was delighted to try it.

The Lumia 1020′s main attraction is the massive 41 megapixel camera and the design of the phone itself conveys the fact that its a camera with a phone and not the other way. The camera indeed takes awesome pictures – I do however miss the increase in minimum focus distance as compared to 925. Here are some of the oversample (resized / reduced size) saved and synced to SkyDrive – I don’t have full res at hand as they are not synced to SkyDrive (my main issue with the implementation).

WP_20130923_08_36_28_Pro

WP_20130923_08_37_07_Pro

WP_20130923_17_31_40_Pro

WP_20130924_08_10_05_Pro

WP_20130926_08_03_54_Pro

WP_20130926_17_46_39_Pro

WP_20130927_08_34_05_Pro

WP_20130927_08_34_05_Pro (1)

WP_20130929_13_27_32_Pro WP_20130929_13_26_47_Pro

WP_20130929_13_32_10_Pro

WP_20131001_08_47_49_Pro

WP_20131001_08_48_09_Pro (1)

WP_20131001_08_55_21_Pro (1)

WP_20131001_08_56_07_Pro

WP_20131001_08_56_32_Pro (1)

Happy Photography

Lumia 1020 and Pro Cam app

For the last 10 days, I have been trialling the Lumia 1020. It comes in an awesome cylindrical box that looks like a giant zoom lens. Of course they could have packed the whole thing in more compact cylindrical box but that’s a different thing. the box is charcoal grey – again I’d have preferred something deeper darker black.

But the box was opened in no time and the phone was peeled off without second thoughts. You want unboxing videos, go to YouTube.

Two things struck at the first glance…

  1. Camera bump is quiet wide.. 3 cm in diameter. its about a 2 mm or so in thickness..
  2. The body reminds me of Lumia 800 – the tapered edges, curved glass. The feel is very matt – unlike Lumia 920

WP_20130920_18_49_48_Pro

WP_20130920_18_52_14_Pro

As a result of the bump, the positioning of device on horizontal surface leaves much to be desired. I occasionally use the phone while it’s on table or breakfast bar.. nope the circular design of the bump means that it’s not stable and clatters while in use.

Also at work I plug the device for testing whilst I am developing. The device depending upon where you placed it rests on the bump – which can be a good thing depending upon how you see it but it’s still not stable.

Weight wise it is somewhere between Lumia 925 and Lumia 920. You have to remember that 920 has Induction charging circuits which 925 and 1020 lack. 925 is also lighter because of aluminium frame.

Now we know it’s all about the camera with 1020 – it sure is grand. By default pro-cam is now set to be the default lens. Nokia is selling pro-cam and the concept of reframing which isn’t too bad – however I am not a big fan of how low-res + high-res images are managed on 1020. This feels like a hack and it shows. To me it feels a big departure from previous Windows Phone experience.

Additionally the high res CMOS comes with an increased in minimum focus distance. It’s now at least 20+ cm. having done a macro series with 925, I can’t believe how hard it has been to get macro focus without using digital zoom. Sure 1020 can do a 3x digital zoom without loss of quality but that defeats the purpose.

So what is so wrong with Pro-cam? Well Pro-cam takes a 34 / 38 mega pixel picture and save to Camera Roll (with some tweak possibly direct move without photo lib API). It then resizes the image to 5 meg and saves that camera roll as well but this time with knowledge of photo lib.

This just means that there are two files in camera roll when you plug it into a PC – however the photo library has no clue about the high res version. And since it has no clue, the high res image is not synced with skydrive. The low-res image is uploaded to skydrive. Now you could say.. nothing wrong with this!!. Let me tell you this, I have been using 920 / 925 as a point and shoot replacement – skydrive uploads full 8.7 megapixel pic and I hardly ever plug my device to copy pictures out. Most of the times, checking skydrive is a tiny bit easier and faster. 1020′s camera experience spoils that fun.

I was sufficiently annoyed to pen an email to Stephen Elop which he kindly replied to. And having gotten so far, I decided to write my own app that would be like stock app but take high res pictures. In a few mins, I had a sample working and it was copying high res to camera roll using photo lib API.

All this time I had assumed that pro-cam behaviour was purely because WP Dev team couldn’t fix the API. I was so wrong that I penned another email to Stephen Elop. I do not expect an answer for that.

The stock windows phone camera still works however it has no idea about supported high resolutions and will continue shooting at 8.7 megapixels. Do I think stock app will be updated. sure it can be updated and should have been updated by Microsoft, If GDR3 doesn’t fix that, we will have to wait for Windows Phone 8.1

I will be returning the trial 1020. Not sure I want this device right now. Might consider waiting for 1520.

If you really want 34 / 38 megapixel pictures, get used to pro-cam or get a 3rd party app – mine should be out in a few weeks.

Haswell Ultrabook 2 weeks on

I have been using the Intel Haswell Ultrabook for 2 weeks now. Most of my usage is either during train commute or late in the evening.

I could look at hardware specs but I already did some of it in previous post and this is an extract from Jessie Liberty’s recent post http://jesseliberty.com/2013/07/25/intel-haswell-ultrabook-pre-release-first-look/

“The computer came with 4GB of memory and a 180GB SSD with an Intel Core i5-435OU Processor (formerly code-named Haswell). “

So lets start with what I have installed on it so far.

  1. came with Windows 8 Pro – with a shiny Intel logo on boot screen. Used MSDN key :)
  2. Visual Studio 2012
  3. Windows Phone 8 SDK
  4. Paint.net
  5. tweet deck

I am a light user of apps.. Mostly have only the app I develop installed as they are deployed during testing :)

So how has it been during the 2 weeks I have used it ? Well I have so far had about 4 solutions open at once in addition to  two emulators – WP7 and WP8. Have had azure compute emulator running as well.

Its managed to do it all just fine – bearing in mind that it only has 4GB RAM and I have seen about 80 mem usage without any slow down. If I am doing too many things, the fan eventually comes on for a bit.

The full HD screen is awesome in terms of being able to squeeze in more on the screen – especially for VS.

So far I only noticed one thing – it doesn’t have a Wacom / EM digitizer. I tried a capacitive stylus but the experience wasn’t particularly good so I took to drawing pad out earlier.

I could always buy a cheap Wacom addon – or just carry drawing pads – not like I design UX every day.

BTW the backlit keyboard is awesome.. I no longer need to strain my eyes or keep the lights on when coding late at nights :) Its still one of the best things personally :) the screen brightness control is also excellent

Lastly everyone wants to know about Haswells battery life.  I only use it for a few hours like I said before – commute and evening work – the few times I have left it unplugged, it never dropped below 75% which even for a 3 hour usage isn’t too shabby

Positive changes to Windows Azure Mobile Services coming our way

Over the last few weeks, I have hassled / lobbied twitter for votes (for my uservoice) on recently announced changes to Windows Azure Mobile Services. I doubled / triple tweeted two contacts – neither where amused :(

I mentioned in past that I have been in conversation with Josh Twist. He turned out to be very patient and our conversations included what I think are acceptable limits for free tier. Having replied and not having heard back , I was kinda losing hope of anything happening on that front until earlier this morning.

Josh forwarded my conversation to the mobile services team and I spoke to Kirill Gavrylyuk. Based on our conversation, free tier will get some changes – 100 device limit will be replaced. I know with what – however I will let Kirill and Windows Azure team send out the email notification :)

One thing to note is that Free tier doesn’t have SLA and wont have SLA. I think that’s perfectly acceptable. I am very happy about upcoming changes.

I would like to thank both Josh and Kirill for kind consideration. I would like to thank all those who got hassled by me.

Here’s to Windows Phone and Windows 8 development!! Happy coding

Converter to toggle visibility when content is empty #wpdev #wp8dev #wp7dev #win8dev

Recently Gustavo Guerra posted a question on StackOverflow.com stating that behaviour of TextBlock was different on Windows Phone 7 and Windows Phone 8. If the Text is empty, WP7 renders TextBlock with Height set to 0. On WP8, it occupies full height.

I replied back stating that he should consider using a Converter for the same. Of course I had a similar issue with Cineworld app. The screenshot shows ratings & review screen I implemented – its almost a copy of Windows Phone Store ratings & review.
wp_ss_20130704_0002[1]

what I noticed was that if user chose to not review it, the textbox would be fully render. So I did what I suggested Gustavo do. Created two converters – StringLengthInvisibilityConverter and StringLengthVisibilityConverter. Almost identical but doing the opposite thing.

 

public class StringLengthInvisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string itemVal = value as String;
        if (String.IsNullOrWhiteSpace(itemVal))
            return Visibility.Collapsed;
        else
            return Visibility.Visible;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

public class StringLengthVisibilityConverter : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string itemVal = value as String;
        if (String.IsNullOrWhiteSpace(itemVal))
            return Visibility.Visible;
        else
            return Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
<TextBlock Text="{Binding Review}" Visibility="{Binding Review, Converter={StaticResource InvisibilityConverter}}" TextWrapping="Wrap" Style="{StaticResource PhoneTextNormalStyle}" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2"/>
<TextBlock Text="(rating only)" Visibility="{Binding Review, Converter={StaticResource VisibilityConverter}}" Foreground="{StaticResource PhoneSubtleBrush}" TextWrapping="Wrap" Style="{StaticResource PhoneTextNormalStyle}" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2"/>

 

Now I know one of you clever person is going to tell me I could have just used one :P Let me tell you this:

  1. I thought of it
  2. I could have searched around
  3. Realised no one really cares
  4. Created two converters and got the job done :)
  5. Submitted update and nap time

.

Customising Panorama control #wpdev #wp7dev #wp8dev

This control is deemed like the showcase control in windows phone. Its simple, its elegant and non of the other platforms have anything similar. Its been described as being synonymous to a magazine cover. Dave Crawford’s design talk is a great intro to this

Most Modern UI stock templates use a very typographical layout. Its all textual with no branding samples in sight – unlike real life where branding is a foremost part of the experience. Here is link to dev center’s article http://msdn.microsoft.com/library/windowsphone/design/hh202892(v=vs.105).aspx This article talks about various aspects of using panorama control etc.

For myself, the first time I was tempted into using Panorama was after playing with the new Facebook Beta app. This app divided windows phone community by marking a significant departure from textual nature of panorama. So far in Cineworld app, I had restricted myself to Pivot but I could see myself using panorama..

Branding:If an app requires specific branding, its best to create a user control that provides the option to set Brand logo and optional text messages. One isn’t restricted to a two line header on each page :)

wp_ss_20130619_0003  wp_ss_20130619_0004

As you can see, instead of excessively large page header, the customised header is very compact and since its a user control, we can consume it across other pages within the app. So what can we do with Panorama, well it exposes a TitleTemplate. We take the UC and we shove that in TitleTemplate. You can further customise the HeaderTemplate to change how panel headers look like.

Film

I am definitely not saying you should do what I did. However what I will state is that Metro or Modern Design is really just about good design. Just because stock templates do it one way doesn’t mean no one should do otherwise. Kudos the designers of the new Facebook BETA app for doing something different.

MVVM and me – Part 4

Its taken me ages to get things done. I am now at the last xaml screen and I am so tired. Last week I spent a bit of time going through AppBar.

I keep whining that Microsoft built this great Binding and Command mechanism in XAML however it was only a half hearted attempt and that they don’t really care whether you use MVVM or not.

AppBar is the perfect example of that. It does not support either.  So the MVVM and XAML community (actually a few developers) have taken the task to themselves. They have created custom AppBar controls that support  Binding and Commanding infrastructure.

So what controls did I find ? there’s

  1. http://appbarutils.codeplex.com/
  2. https://github.com/PedroLamas/Cimbalino-Phone-Toolkit
  3. http://bindableapplicationb.codeplex.com/

 
So what is the experience using them. The first two require you to set the appbar within Behaviours. The 3rd one is the closest to the native AppBar in terms of XAML and simplicity.

The stock WP7 xaml AppBar needs to be set list this.

<phone:PhoneApplicationPage.ApplicationBar>
    <shell:ApplicationBar>
        <shell:ApplicationBarIconButton x:Name="btnLast" IconUri="/Images/appbar.image.png" Text="test" Click="btbTest_Click"></shell:ApplicationBarIconButton>
    </shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar>

AppBarUtils and Cimbalino require something like this

<i:Interaction.Behaviors>
    <cimbalinoBehaviors:MultiApplicationBarBehavior SelectedIndex="{Binding ApplicationBarSelectedIndex}">
        <cimbalinoBehaviors:ApplicationBar>
            <cimbalinoBehaviors:ApplicationBarIconButton Command="{Binding AddItemCommand, Mode=OneTime}" IconUri="/Images/appbar.add.rest.png" Text="add" />
        </cimbalinoBehaviors:ApplicationBar>
    </cimbalinoBehaviors:MultiApplicationBarBehavior>
</i:Interaction.Behaviors>

The Bindable AppBar

<bar:Bindable.ApplicationBar>
    <bar:BindableApplicationBar IsVisible="{Binding BarIsVisible}"
        <bar:BindableApplicationBarButton Text="{Binding IconButtonText}" IconUri="{Binding IconUri, FallbackValue=/Icons/Dark/appbar.add.rest.png}" IsEnabled="{Binding ButtonIsEnabled}" />
    </bar:BindableApplicationBar>
</bar:Bindable.ApplicationBar>

The biggest downside is that they do not render at design time. The single biggest advantage of MVVM goes out of the window. You need to use standard appbar in design more and them once you are happy with it, comment it out and replace it with Bindable / Commandable AppBar of your choice.

The whole experience has been such joy that instead of coding till the middle of the night, I switch the laptop off after about 30 – 45 mins of mucking about.

MVVM and me – Part 3

Today is continuation of yesterday’s post.

Yesterday my goal was to find out how one goes about setting static page strings in MVVM. There are many ways.

  1. Hard code it directly in xaml
  2. Define resources in App.xaml
  3. Use Resource Dictionary

I have used ResourceDictionary a lot in past when dealing with Localization and I think that is the only right way to set xaml strings. That takes care of present and future need without being too bulky

By default my WP8 project added support for Localisation, It created Resource folder with AppResources.resx, LocalizedString class that exposes the resources and finally set it as a resource in App.xaml.

proj-localization
AppResources

All you then do is set the strings like this

<TextBlock Text="{Binding LocalizedResources.MainViewChoiceText, Source={StaticResource LocalizedStrings}}" Margin="12, 0"/>

All sorted. And in case you decide to localise your apps, all you need to do is add more resx files.