Many software developers are looking to develop mobile apps and companies want to jump on the mobile phone bandwagon.

I do not want to debate the reasons; that is a business decision of companies. I want to help fellow developers by talking about the various possibilities; of course the ultimate choice is the developers; only they know the situation they are in.

Unless you live under a rock, the 2 growing platforms out there are iOS and Android. The Windows Phone is the dark horse, but it is a target as of today.

So, here are the possibilities:
In the past, there were only native apps, so a company made 2 or 3 identical version, 1 for Android, 1 for i OS and maybe 1 for Windows.
Companies like Apple, Google, etc. had SDKs, but then you also had to know Java, Objective-C (how quaint) and maybe C#.

Then, along came a company called Xamarin, which enabled to write in C# and output binaries for all major platforms.
This was good because now you did not need to know multiple languages.
But, Xamarin was not cheap.

Then a company introduced Phone Gap as an option, which essentially separated the UI layer from the lower layers. The UI was in HTML, one could use various native clients (that the company provided) that understood HTML. This later became Apache Cordova, and it is offered by the Apache foundation.

So, the first option is Native or HTML?
If Native then should one torture oneself and write in Java, Objective-C, etc?
Or use Xamarin, if the budget allows.

If HTML, then currently Cordova is the only option. Remember, there are some native things of your phone that cannot be accessed via HTML, but these are rare and it finally depends on your app.

 

It might help the community, that if you have developed a mobile app, to state its name, provide links to it and briefly state the technology you used, in the comments.

Thanks from all of us!

What seems like a simple thing may not be so.

This happened to me, and the whole process got so frustrating that I decided it warranted a post, so I could help you folks too.

For some reason, my Windows system got reset and I started experiencing erratic behavior whenever I typed, and I realized it was because my Dell Touchpad settings went back to the default (I normally disable the pad selection and the pad click).

But a search in Google gave me links that mentioned a Dell Touchpad tab in my mouse settings in the control panel (in windows 7)  and I had none.

I then went to c:\program files and located the Dell folder, which in my case was “DellTPad”. I ran the touchpad exe, which for me was DellTPad.exe,  and it started the touchpad settings application, and I was able to set my settings again.

I run Windows 7 on a Latitude e6510, but this method of mine should work on many Windows versions and on many Dell computer models.

To repeat…

You can first go to Control panel >Mouse.

If that has no Dell Touchpad tab, then go to File Explorer, and navigate to C:\Program Files\DellTPad. once there, run delltpad.exe and set your settings for the touchpad.

There is a design shift as software starts moving to the cloud, from an in-prem situation.

There are a few changes  that you have to make in your design. e. g. the database may not always be available at all times, so retrying a connection makes sense.

One of the side-effects of this is that we can use some design patterns from nature, or the hardware world.
Using Hadoop or (as it it is called) HDInsight in Azure, we can have very simple functional blocks perform very complex things.
This is kinda why Map/Reduce was invented in the first place by Google.

Anyway, what this means for our software design, is to have more modular blocks (or classes and methods), and they should perform a set of tasks very well. They won’t even know of the big picture, and don’t need to.
Any good software design more or less is designed this way but try to make the units kind of self-contained, rather than always having a master-controller somewhere.
Not having a master-controller is the ultimate path to infinite growth, because then each unit does not have to come back to the master.
Only some factory method needs to be able to be called and produce these identical worker units.

More and more, this kind of system resembles of the best examples in nature viz. ants.

Take a look at this article and video here.

I talked earlier about Cloud Services, and many vendors like Amazon, RackSpace, etc. are used more for consumer services and enterprises are generally weary of clouds – part of it being paranoia and might be baseless (because of coming up with a process of doing things differently) and a valid reason being security (authenticating with Active Directory) and not wanting to part with services that are not totally in a business’s control, because this could be a business’s core or its IP.
But, the result is that there big  savings, so it is worth looking into.
So, understand and address all the inhibitions to move to a cloud.

Now, the solutions for these are quite vendor-specific (Azure might have them, while Amazon may not), so I’ll mainly talk about Azure.
I mainly see 2 hurdles in using Azure viz.
1. Authentication
2. Proprietary (in-house) Services

In the case of authentication, IT cannot really move the entire Active Directory to the Cloud (and should not), which means that we need a third-party authentication with Azure (that’s what its called, because Azure does not authenticate you then) and our company.
That is, a user uses Azure, but has to authenticate first and this is done externally on- premises of the company (known as on-prem).
This is known as an on-prem/ off-prem solution in industry parlance.

For this, we can use WCF with the Azure Service Bus.
From the Azure website:

Think of the Service Bus as a way to communicate with Azure, and the communication happens between Azure and your company.
So, via this mechanism, Azure can callback into your company, which addresses both authentication and the services issue.

This also means that you need modular services that can be called by someone, which is anyway a good goal to have.

To inform your IT, Azure also provides the following features:

Virtual Machines— Allows you to move your virtual hard disks (VHDs) back and forth between on-premises and the cloud.
Existing workloads such as Microsoft SQL Server or Microsoft SharePoint can be migrated to the Cloud.
Use your own customized Windows Server or Linux images, or select from a gallery.

Windows Azure Virtual Network— Lets you provision and manage virtual private networks (VPNs) in Windows Azure, as well as securely extend on-premises networks into the cloud.
It provides control over network topology, including configuration of IP addresses, routing tables and security policies and uses the industry-standard IPSEC protocol to provide a secure connection between your corporate VPN gateway and Windows Azure.

Availability in New Countries— As of now (May 2013), availability is expanded to 48 new countries, including Russia, South Korea, Taiwan, Turkey, Egypt, South Africa, and Ukraine, making Windows Azure one of the most widely available cloud platforms in the industry with offerings in 89 countries and in 19 local currencies.

Here are details, and an example for you as a developer – http://www.windowsazure.com/en-us/develop/net/tutorials/hybrid-solution/

So, the Cloud is not only for consumer services, and with a little planning, Enterprises can use it as well.

For many years, I have wanted to move on from Microsoft technologies and do a mix and match where I have the choice of which platform I target or what phone I develop for.
This was hard to do in the old days where one was stuck in the ecosystem one chose from the start, but I see it is much more possible nowadays to go across platforms and you do not have to choose your poison from the start, but you have more flexibility in what you want to target later in the game.
As software developers, the concepts and what you have learnt is pretty much the same across all platforms, so your knowledge is not lost at all and only the tools change.

2 things kept me in the Microsoft ecosystem…the Windows Phone and Visual Studio, which is the best IDE out there (even now). Also, the tools make it easy to deploy to the cloud or Microsoft Azure, so that is my cloud of choice for now.

But now I see the Windows Phone is not going anywhere (for a while, at least) although it was a wait and watch game for a while, and I was hoping that it would catch on.
It is ironic because the Windows Phone has the best interface, but the iPhone and Android phones far outweigh its popularity and use.

With tools like Xamarin Studio and PhoneGap, it becomes easier to target other platforms and so one is not stuck with only developing for the Windows Phone in C#.

So, lets analyze and breakdown things and understand where we are as developers.

As an architect, it is my responsibility to not be biased towards one platform but to provide the solution and platform which has the best bang for the buck.
Of course, the solutions and platforms run a whole gamut from open-source software to the paid, more proprietary stuff.

There is no general answer but it is subject to the needs and the circumstances of the client and the answer is similar to what most Architects will give you…”It depends”.

Let me list the various features of every platform (of the big players out there), so as developers, we know what choices there are, and where to go from here…

Common, across all platforms and companies
————————————————————

Client-side technologies – jQuery, Javascript, CSS, Knockout, Modernizr, etc.

 

Microsoft
————–

IDE – Visual Studio

Platform – .NET

Languages – C#, F#, Visual Basic, Typescript, etc.

Technologies – WP8, Kinect, Windows 8, Microsoft Azure

Client-side technologies – SignalR, Knockout (in the box), Modernizr (in the box), LeSS, TypeScript, etc.

 

Google

———–

IDE – Eclipse, NetBeans, etc.

Platform – Java runtime, ChromeOS, etc.

Languages –  Java, etc.

Technologies – Maps, G+, BigQuery, Glass.

Client-side technologies – JavaScript, etc.

 

Apple
———

IDE – XCode

Platform – OS X, Linux

Languages – Objective C, C++

Technologies – iPad, iCloud, iPhone, etc.

Client-side technologies – etc.

Let’s all agree to one fact: There’s no such thing as a free lunch.

Similarly, it takes money to generate any type of content.

Many websites offer free content, relying on ad revenue and other means to pay for their costs and make their content free to the user.
But unless done well, this leads to bad design and is a failing model for many. Search for the numbers and you will see.
The ads are ugly pieces floating here and there and do not fit in well with the content and design.

Sites have lesser content now and more material for ads and other links. They opt for spreading their content across pages, so that they can increase the number of hits, and show more ads.
As a user, you are forced to wade through all this broken glass but, hey, the content is free.
The overall content is what neither of us would like to see, and some users pay a premium so that only the subject matter is shown to them, and not the rubbish.

So as a free user, you are paying a price, in terms of time and bad design and this actually means money. You would pay if you had the money.
So, websites are offloading their costs of hosting, etc. on to you, in a way.

The ultimate price is paid by the user in terms of bad design, security (many websites sell your email address or profile), etc.

The next time you use a free website, notice how they could improve their design, and they make users like you pay for their crap, and how much better the design would be if you paid for it.
But, of course this business model is here to stay, and people want this but I’d like to make you aware that you are paying a price without knowing it, unfortunately.

A freemium model aims to give users the required content or functionality for free, with ads or other means to pay for things, and if they pay a premium, they will only be shown the required content or have that functionality.

Many businesses have adopted this so-called called the freemium model now, but that leads to a compromise in design.

In the past, we had advertisements (ads) that were written in Flash and corporations disabled the Flash plug-in in the browser, with the side-effect of not loading Flash sites properly, but most business sites did not use Flash, so that was ok.
This worked to reduce distractions and users could no longer punch a chimp or shoot someone.

But then gif ads were still prevalent and a few people wrote plugins for the browser that would avoid these too.

These can be avoided too, on a Windows machine:
Get a program called Fiddler (it’s free; do a search for it) that shows requests made from the browser .
See what domains the ads come from (they usually be a different address than you typed/went to).
Locate the hosts file (usually in /windows/system32/drivers/etc).
Open notepad.exe and drag-n-drop this file into it.
Add the offending ad domains in here.
Map them to 127.0.0.1.
Save the hosts file (remember where you store it because in Windows 7, etc., you may not be able to save it in the system folder)
Overwrite the original hosts file with the new one
Load your web-page and you should not see ads from the domains you added.

For doing away with most ads completely, go tohttp://winhelp2002.mvps.org/hosts.htm and basically they provide you with a hosts file and a batch file to put the hosts file in the right location (it did not work for me, but I was able to use their exhaustive list of domains).

Hope that helps…

For those of you following Microsoft and Windows 8 might have noticed a shift in the way that the company does things. Microsoft has moved from the “Ship it and Forget it” model to one of continuous iteration, online or or out-of-band releases.
This is more like what Google does since most of its products are online anyway.
This is more evident in the Office365 products, where the releases are hidden from the user, and new functions and features can be updated on the website and Visual Studio with NuGet being the main vehicle of delivery (especially for MVC). Windows 8 has the app store where an application can be updated through the common Marketplace mechanism rather than each app having an update button.
This implies that Microsoft has moved away from its traditional model of software products in a box or online to a pay a subscription for a service model, and that is a bold move for a company that has relied on traditional products.

Expect this to be more evident in Windows 9, and the OS is slowly evolving from a traditional installed piece of desktop software (ala Windows 8 Pro) to a more open and dynamic system (ala Windows 8 RT that relies on Javascript), and this also be the case for the products from them. It will be interesting how vendors of audio products like Ableton or FL studio will work and play ball with the concept. They already have the concept of VST plug-ins, so this is nothing new to them.

Follow

Get every new post delivered to your Inbox.