Monday, November 25, 2013

WebcamStudio 0.64 B516

Let's see what is happening with WebcamStudio...

Sharewares are not dead

Remember the time when you downloaded a software labeled as a Shareware over the internet and could enjoy a limited version of the app?

Basically you could find commercial products, sharewares and freewares. The commercial ones were often referred as the "Full Version" and could be pricy. Sharewares were good enough to enjoy for a while, especially games, and could give you a good idea of the product before buying it. Freewares were often copies of already known softwares but offered a great alternative to the real stuff.

With the arrival of the Apple Store and Google Play, everything changed. An app is now labeled as "Free", meaning it is limited and contains ads. A regular paid app can be limited in some way and includes some in-app purchases to extend the features. A "Pro" app is normally the complete solution but can still have some optional features that you can buy. Basically, a lot of apps are sharewares disguised a "Full Version".

Games do implements the new "Shareware Model" more than anything else. It's getting harder to buy a complete game that does not need some kind of currency to get to the next level.

Real money has been converted into virtual currencies to hide the simple fact that it costs more dough to play. Gems, gold coins, rubies, diamonds and other elegant and shiny tokens are required to get to the next level, acquire more advanced items or to unlock some cheats.

If you want to be #1 at any game, just buy some diamonds and you'll be the most famous guy on the planet, for a few minutes... No need to practice, no need to start over. Just buy some power-ups.

Is it annoying me? Not that much. But I do get annoyed when I discover that I need to buy coins just to complete a level in today. Waiting 24 hours to grow a more productive crop or to build a new bridge just drives me nut. I want to play now because I have the time NOW!

Ads can be annoying and distracting. Limited features are understandable as the devs do need to eat too. The "Waiting-Game-Or-Spend-To-Play-Now" feature is more than annoying and will result into uninstalling the game, or the app.

Sharewares are definitively not dead...

Patrick Balleux

Saturday, November 16, 2013

Computer requirement: Humans

Believe it or not, computers have requirements.  The most important one is humans... Us!

It may sound strange to state that, but often, developers will forget that the main goal of any software is to help a fellow earthling.  It does not matter if your code is clean, advanced or even revolutionary.  What ever you are developing will eventually be seen and used by someone, somewhere and somehow.

The time when a user had to comply by the limitation of a software is gone.  20 years ago, we had to manage with whatever the display would show us in a fully glorified 16 colors.  If we were lucky enough, the video card would be able to display 256 colors brining a life like image to our eyes.  Technically, developers could not do more than what the machine could do.  Time has passed and technology has evolved to a point where a simple smartphone can predict our schedule for the day.  Machines are faster, storage is almost infinite and connectivity is almost granted.  That's why I can say that there is nothing that would require a user to comply by some technical limitation.  If a user complains, it's probably because there is something wrong in your design.

The only limitation of any software is mind reading.  We are still bound by the physical input like a keyboard or a touchscreen.  Some breakthroughs were achieved in the last years like voice recognition and visual recognition but that's just a cooler way of typing on a keyboard.  Technically, it's almost impossible to guess what a user really wants just by having him sitting in front of the device.

What can be done then?  You have to think, listen and propose to find the best way to solve the problems that users are facing in their tasks.  As an example, let's consider that you want to create an app that will monitor the current temperature in your house.  Basically, it's a weather app for indoor.  Easy to do, easy to code...  Maybe not!

First, we have to assume that we have some kind of devices that will report the current temperature of the room.  We need to interface the devices and be able to convert the raw data into a human readable format.  Great, we are in business and ready to take over the world of apps.  Get your favorite IDE to create your software, display the current room temperature on the display, package your apps and publish it on your preferred online store. 

After a while and a few downloads, users will start to comment your app and rate it.  Some will be nice, some will be bad...  I mean really bad.  What is the problem with those bad reviews?  The app does show the current room temperature, it does not crash, the job's done.

With this simple scenario, it's easy to guess what users will be expecting:

- Good looking, according to their preferences
- Able to support multiple devices in the same house
- Able to identify the current room of the displayed temperature
- Keep a history of the readings and display some kind of stats and histograms
- Support both metric and imperial system
- Export the data to spreadsheets, on the cloud, via emails...
- Associate the energy efficiency of your electric consumption
- Trigger notifications based on some rules
- Interact and control each device
- Support remote access over the internet or cellular data
- Support data encryption, user access level, etc...

And the list could go on and on.

The basic idea was to display the current room temperature by interacting with some kind of device able to report the data.  From that simple concept, a whole new list of "requirements" can be triggered by your users.  Some may even ask for impossible things to do.  Whatever the app and it's purpose, you will face new requirements, new preferences or new functionalities expected by the end users.  Are you prepared to meet the demands?

It's up to you to set the limitation of your software for your users.  Don't be surprised the some of them become angry and even hostile with those limitations.  Logic and facts does not apply with the human factor.

If you take time to understand what your users really want, you may create the best app in the world!

Sunday, November 10, 2013

Android: Removing an app is a pain!

I've been playing around with Android since the start of the year.  Overall, the Google ecosystem is rather good, even for a hard core Apple user like me.
But there is still one gripe I have with Android...  App management is bit awkward.  It's not about updating, finding apps or organizing them on the home screen.  Removing an app is just annoying!
In iOS, an app is mainly on the home screen.  Press and hold until it's start wiggling and press the small 'X' to uninstall the app.  In Android, you have to go to the App list from the middle lower icon, find the app by it's name, press and hold, drag to the home screen to the upper left and release...  Quite a few steps to achieve a simple operation.
Three thing are wring with Android:
1- Apps should be removable from the home screen
2- Apps can be hard to find if you have many apps as you have to find them by their name, ordered alphabetically.  Specifically when you forgot the precise name when navigating the screens.
3- Apps should be directly removable from that app list.  Why drag them to the home screen?
Some apps have a generic name like 'Movie editor', relying on the icon to properly identify the right app. If you've installed a few movie editors, chances are that you will have to double-check to make sure that you are removing the right app.
It's really not a big issue as you can manage your apps many other ways, like on iOS.  But for such a basic and quite common function, the process should be simpler.

Thursday, November 7, 2013

VB.Net, for the less gifted?

I had a talk with a colleague about languages used to create softwares. In my career, I mostly worked with C#, Java, PHP and and of course, SQL when interacting with databases.

Lately, I've dived into as my current job is using that language for the internal software we are developing. My old VB6.0 from 10 years ago just got useful again in my toolbox knowledge.

Basically, all major projects I've worked on were using Java or C#. Both are elegant and pretty object oriented. That' what I like: semi-columns and curly brackets... This is where the talk started between my colleague and I as he has more experiences with VB.Net than any other language.

It all started with a simple question: why does VB.Net is seen as a "cheap-for-beginner" language? As I can remember, it all started with VB 6.0 that was quite limited at the time compared to C++ or Java. Many times I had to figure out a work-around in VB 6.0 to accomplish some more advanced tasks that could be easily done in other languages. Should I say threads?

Anyway, time passed and VB 6.0 evolved into VB.Net as Microsoft established .Net as the main developpement framework for Windows. Ten years ago, we wanted to evolve technically and moved into some more serious stuff like C#, Java and C++. Silly rabbit, VB is for kids!

My colleague was a bit surprised as, being (cough cough) younger than me, he learned VB.Net at school and almost never heard of Visual Basic 6.0... He mentioned that over his young career, he always faced the silent stare of others when saying that he has much experience with VB.Net...

Is VB.Net really for kids? I've been resurrecting my old knowledges of that language back to life in the last few weeks combined with my skills in C# to master the beast. Beside a few "bad" habits of putting a semi-column at then end of each line, I've discovered how good has become. It may not be my preferred language, but it's as powerful as C# or Java if you know how to handle it.

Maybe it's time for old-timers to stop thinking that Visual Basic is not good enough and embrace a different approach of the language paradigm. You'll get a few surprises like not triggering an exception when executing a division by zero (try it, you'll see...) but threading and delegates are definitely there.

No, it's not just for kid, silly rabbit!

Patrick Balleux