Everything and the Mobile Software Universe…

  • rss
  • Home
  • About

Must Read: Sender 11 on Mobile Application Development Fragmentation

Thomas Menguy | January 21, 2009

As I’ve advocated not so long ago in those 2 posts about capuchin and what it means to fragmentation and the Adobe packager and the trend it shows toward runtimes (cross posted to VisionMobile here for capuchin and here for Adobe packager).

But Sender 11 really have for me the best argument about it:

But the strange thing is I don’t hear developers complaining much about fragmentation any more. They may be too busy creating apps for the iPhone and Android. A straightforward, low barrier way to monetize your app apparently trumps standardization any day. A way to make money is more important than a way to save money.

Morten Hjerde, What’s your developer story?

Well what else to add? Adapting a software to platform is only a 2nd order issue if you can monetize it. Thanks to all the AppStores.

Anyway really take the time to read the whole article, very good analysis about fragmentation, maximized with those “open-but-proprietary-platform-with-my-very-own-apis-and-my-very-own-store”  where there is 0 compatibility between an Android application and an iPhone one…but who cares?

Anyway I think the fragmentation issue will pop back with the explosion of different AppStores and new platforms (perhaps an actor has something to do here :-) ), and I’m not convinced the browser will be the right way to do it.

Thanks Morten for this insightful article, hope to meet you in Barcelona!

Comments
No Comments »
Categories
Mobile Industry, development process
Tags
adobe, apis, apps, barcelona, capuchin, compatibility, developers, explosion, fragmentation, insightful article, iphone, packager, platforms, proprietary platform, trumps
Comments rss Comments rss
Trackback Trackback

Execution engines : How to cleanly run code? ARM, .NET (now for s60!) , Java, Flash …

Thomas Menguy | November 18, 2007

Found at All About Symbian:

Red Five Labs has just announced that their Net60 product, which enables .NET applications from the Windows world to run unchanged under S60, is now available for beta testing.

.NET on S60 3rd Edition now a reality?

This is really interesting: even the battle for languages/execution environment is not settled.

For years Mobility coding was tightly coupled with assembly code, then C and in lesser extent C++. The processor of choice is the ARM family (ok some others exist, but no more in the phone industry)…this was before Java.
Basically Java (the language) is no more than a virtual processor with its own instruction set, and this virtual processor, also called a Virtual Machine, or JVM in the case of java, simply do what every processor do: it processes some assembly code describing the low level actions to be performed by the processor to execute a given program/application.

On the PC other execution engines have been developed: the first obvious one, the native one is the venerable x86 instruction set: thanks to it all the PC applications are “binary compatible”. Then Java also, and more recently … the Macromedia/Flash runtime (yes Flash is compiled in a Byte Code which defines its own instruction set). An other big contender is the .NET runtime…with you guessed what, its own instruction set.

At the end it is easy to categorized the executions engines:

  • The “native” ones: the hardware executes directly the actions described in a program, compiled from source code to a machine dependent format. A native ARM application running on a ARM processor is an example, or partially for a Java program that is running on an ARM with Jazelle (some Java byte code are directly implemented in hardware)
  • The “virtual” ones: Java, .NET, JavaScript/Flash (or ActionScript, not so far from JavaScript: the two languages will be merged with the next version: ActionScript 3 == JavaScript 2 == ECMAScript 4) where the source code is compiled in a machine independent binary format (often called byte code)…But how an ARM emulator running on an x86 PC may be called? you guessed, virtual.

So why bother with virtual execution engines?
Java has been built with the premise of the now famous (and defunct :) ) write once run everywhere, because at that time (and I really don’t know why) people were thinking that it was enough to reduce the “cross platform development issue” to the low level binary compatibility, simply allowing the code to be executed. And we know now it is not enough!

Once the binary issue was fixed, the really big next one were APIs (and to be complete the programming model) … and the nightmare begins. When we say Java we only name the Language, but not the available services, same for JavaScript, C# or ActionScript. So development platforms started to emerge CDLC J2ME .NET framework, Flash, Adobe Flex, Silverlight, Javascript+Ajax, Yahoo widgets … but after all what are GNOME, KDE, Windows, MacOS, S60, WinMob ?…yes development platforms.

The Open Source community has quickly demonstrated that binary compatibility was not that important for portability: once you have the C/C++ source code and the needed libraries plus a way to link everything, you can simply recompile for ARM/x86 or any other platform. Hum I’ve made a big assumption here: you have “a way to link everything”. And this is really a big assumption: on many platforms you don’t have any dynamic link, nor library repository or dynamic service discovery…so how to expose cleanly your beloved APIs?
This is why OSGI has been made, like COM, Corba, some .NET mechanisms, etc : all is around component based programming, encapsulating a code around what it offers (an API, some resources) and what it uses (API and resources).

Basically an execution engine has to:

  • Allow Binary Compatibility: Abstracting the raw hardware, ie the processor, either using a virtual machine or a clean build environment
  • Allow clean binary packaging
  • Allow easy use and exposition of services/APIs

But it seems impossible for virtual engines to dissociate the language(s) and the engine: Java …well for Java, ActionScript for Flash, all the # languages for .NET. An execution engine is nothing without the associated build chain and development chain around the supported languages.
In fact this is key as all those modern languages have a strong common point: developers do not have to bother with memory handling, and as all the C/C++ coders will tell you it means around 80% less bugs, so a BIG productivity boost, but also and it is something a tier one OEM told us: it is way more easy to train and find “low cost” coders for those high level languages compared to C/C++ experts!… another development cost gain.

A virtual execution engine basically brings productivity gain and lower development cost thanks to modern languages ….. we are far far away from “write once run everywhere” :-)

But as we have seen before it is really not enough and here comes the real development environments based on virtual execution engines :

  • .NET framework platform : an .NET VM at hearth, with a big big set of APIs, this is what I would like to know what are the APIs exposed in this s60 .NET port
  • Silverlight : also a .NET VM at hearth + some APIs and a nice UI framework
  • J2ME: a JVM + JSR + …well different APIs for each platform :-)
  • J2SE: a JVM + a lot of APIs
  • J2EE: a JVM + “server side” frameworks
  • Flex : Adobe Action Script Tamarin VM + Flex APIs
  • Google Android: Java VM + Google APIs,… but more interestingly also C++: as android use Interface IDL description C++/Java interworking will work (I have some posts to do about it)
  • …and the list goes on

So at the end what really matters is the development environment as a whole, not simply a language (for me this is where android may be interesting). For example the Mono project (that aims to bring .NET execution with Linux) was of few interest before they ported the Windows Forms (Big set of APIs to make graphical stuff in .NET framework) and made them available in their .NET execution engine.

What I haven’t mentioned is that the development costs gain allowed by modern languages comes at a cost: Performance.
Even if Java/.NET/ActionScript JIT helped partially for CPU (Just in Time compilers: VM technology that translates virtual byte code to real machine code before execution), it is still not the case for the RAM used, and in the embedded world the Moore law doesn’t help you, it only helps to reduce silicon die size, to reduce chipset cost, so using a virtual engine actually will force you to … upsize your hardware, increasing the BOM of your phone.
And it isn’t a vague assumption: when your phone has to be produced in the 10 millions units range, using 2MB of RAM, 4MB of flash and an ARM7 based chipset helps a lot let you make money selling at low cost….we’ve spent some nights/days optimizing stuff to make it happen smoothly very recently :-)

At OpenPlug we have built a nice execution engine, not virtual, running “native code” on ARM and x86, with an easy to use service discovery mechanism: a component platform for low cost phones. Then we have added a development environment with tools and middle to high services….we have learned big time and sometime with pain all the bricks needed for such an environment! :-) …

A key value may be around one framework and multiple execution engine for easy adaptation with legacy software and productivity boost for certain projects/hardware, or some parts of the software.

Because once you know how to cleanly make some code running independently from the hardware, you have to offer a programming model! Implying how to share resources between your modularized pieces of code…and in that respect execution engines are of no help, you need an application framework (like OpenPlug ELIPS, or Hiker from access, Android is about that, but also S60 and Windows Mobile): it will abstract the notion of resources for your code : Screen, Keypad, Network, CPU, memory, … this is another story, for another post!

Please comment!
Thomas

Comments
3 Comments »
Categories
Mobile Industry, OpenPlug, Software, development process
Tags
.NET, actionscript, ARM, arm processor, assembly code, ecmascript, execution engine, execution environment, flash, Flex, instruction set, Java, java byte code, java program, Javascript, javascript flash, jazelle, just announced that, jvm, languages, mobile phone, pc applications, phone industry, program application, tamarin, virtual processor, x86, x86 instruction
Comments rss Comments rss
Trackback Trackback

Microsoft Surface Video: Touchscreen, Multi Touch Coffee Table…and parallel programming!

Thomas Menguy | June 6, 2007

Checkout this amazing Video from : Microsoft Surface Video – Touchscreen, Multi Touch Coffee Table – Behind the Scenes – Popular Mechanics

Official Microsoft web site


Ok, it not new, but really not so far from production

Diagram by Intoaroute

(1) Screen: A diffuser turns the Surface’s acrylic tabletop into a large horizontal “multitouch” screen, capable of processing multiple inputs from multiple users. The Surface can also recognize objects by their shapes or by reading coded “domino” tags. (2) Infrared: Surface’s “machine vision” operates in the near-infrared spectrum, using an 850-nanometer-wavelength LED light source aimed at the screen. When objects touch the tabletop, the light reflects back and is picked up by multiple infrared cameras with a net resolution of 1280 x 960.
(3) CPU: Surface uses many of the same components found in everyday desktop computers : a Core 2 Duo processor, 2GB of RAM and a 256MB graphics card. Wireless communication with devices on the surface is handled using WiFi and Bluetooth antennas (future versions may incorporate RFID or Near Field Communications). The underlying operating system is a modified version of Microsoft Vista. (4) Projector: Microsoft’s Surface uses the same DLP light engine found in many rear-projection HDTVs. The footprint of the visible light screen, at 1024 x 768 pixels, is actually smaller than the invisible overlapping infrared projection to allow for better recognition at the edges of the screen.

Something that really buzz me about those new kind of interfaces is obviously the “home” and “personal” application and services, but I see also some possible tremendous change for the software development : with the raise of multi-core, parallel programming will be mandatory, and to leverage this horsepower, a paradigm shift is needed, to break the C/C++/C#/php/ruby, etc sequential view. And this new paradigm may be graphical programming. See this LabView/QNX article or this one at DevX:

The U.S. government, through DARPA, had previously awarded contracts to proposals for High-Productivity Computing Systems. A major premise of this thrust is that the performance of computers is outstripping our ability to harness the power through programming. It is logical to conclude that we need better methods to program them, and DARPA had funded three research languages. All three programming languages are textual X10, Chapel, and Fortress. It seems that the research has run its course, and the answer is that the breakthrough opportunities fall short of the grand hope of catching up with computers. This just makes me wonder all the more if a graphical approach will ultimately be an avenue for a programming breakthrough.

Technologies like those multi-touch screen may bring a lot to the developer ability to dig and build his system….and it is needed: look how poor are the current graphical languages in the “graphical” and above all the user interaction aspect: (below a LabView screenshot)

qnxlabviewfig1.jpg

Comments
No Comments »
Categories
Design, Hardware, Software, User Interface, development process
Tags
Design, development process, Hardware, labview, parallel-programming, Software, User Interface
Comments rss Comments rss
Trackback Trackback

Designing the Windows Vista Shut down menu…Do yourself a favor and read!

Thomas Menguy | November 27, 2006

Here is a “Joel on Software” analysis of the MS Vista menu .. and its, hum how to not say something rude, surprising number of available user choices :-) .

The real fun comes just after, when Moishe Lettvin, that was in charge of the developpement of this feature
gives its explanations!…Lenifiant, and “ubuesque”,

…24 people involved in this feature. Also each team of 8 was separated by 6 layers of management from the leads, so let’s add them in too, giving us 24 + (6 * 3) + 1 (the shared manager) 43 total people with a voice in this feature. Twenty-four of them were connected sorta closely to the code, and of those twenty four there were exactly zero with final say in how the feature worked. Somewhere in those other 17 was somebody who did have final say but who that was I have no idea since when I left the team — after a year — there was still no decision about exactly how this feature would work.

moblog: The Windows Shutdown crapfest

Really really something to go through…cause it seems that all kind of organizations may tend to those limits. And it is a good list of what NOT to do, or try to not do when your business is growing bigger….

But things can be different, look a little at Google:

From a high level, Google’s process probably does look like chaos to someone from a more traditional software development company. As a newcomer, some of the things that leap out at you include:

- there are managers, sort of, but most of them code at least half-time, making them more like tech leads.

- developers can switch teams and/or projects any time they want, no questions asked; just say the word and the movers will show up the next day to put you in your new office with your new team.

- Google has a philosophy of not ever telling developers what to work on, and they take it pretty seriously.

- developers are strongly encouraged to spend 20% of their time (and I mean their M-F, 8-5 time, not weekends or personal time) working on whatever they want, as long as it’s not their main project.

- there aren’t very many meetings. I’d say an average developer attends perhaps 3 meetings a week, including their 1:1 with their lead. – it’s quiet. Engineers are quietly focused on their work, as individuals or sometimes in little groups or 2 to 5.

- there aren’t Gantt charts or date-task-owner spreadsheets or any other visible project-management artifacts in evidence, not that I’ve ever seen.

- even during the relatively rare crunch periods, people still go get lunch and dinner, which are (famously) always free and tasty, and they don’t work insane hours unless they want to.

These are generalizations, sure. Old-timers will no doubt have a slightly different view, just as my view of Amazon is slightly biased by having been there in 1998 when it was a pretty crazy place. But I think most Googlers would agree that my generalizations here are pretty accurate.

How could this ever work?

Stevey’s Blog Rants: Good Agile, Bad Agile

And read the whole article also cause it is a refreshing rant about Agile … and a good insight at Google success…and why everyone wants to work there!

Comments
No Comments »
Categories
Information Management, Mobile Industry, Software, development process, project management, team management, team work
Tags
development process, Information Management, Mobile Industry, project management, Software, team management, team work
Comments rss Comments rss
Trackback Trackback

The real life of a project (or a project in real life)…GREAT!

Thomas Menguy | October 31, 2006

cimg1528.JPG

Thanks a lot Mag ;-) this is now my bible, and it should be on every project manager desk!

Comments
No Comments »
Categories
Uncategorized, development process, project management
Tags
development process, project management, Uncategorized
Comments rss Comments rss
Trackback Trackback

Agile and Gantt chart : Agile Chronicles: Can Gantt Charts be Agile?

Thomas Menguy | September 28, 2006

Interesting read :
Agile Chronicles: Can Gantt Charts be Agile?

We try to put in place Agile methods here, but even if as software developpers we strongly believe in the iteration process and so one : we have traditional clients that need to know Date/Schedule/What is in a release/Is the project going late? by how?. And for me, and for now, even if Task/user story are “agile” in our process, I need a Gantt Chart to give DATES/DEADLINES/SCHEDULE to my hierarchy, taking into account my team holidays, the impact of bug fixes vs features coming from different clients.
I’m incomfortable in respect to Agile methods because of this deadline thing:

  • Either client/management has to adapt and forget the deadline stuff, accepting many incremental changes and releases….hum forget the incremental release stuff in the embedded space, with those awfull build systems.
  • Agile has to be adapted to present a Schedule and Deadline frontend … because it is what PEOPLE understand, forget team velocity, % completion, etc, the only things clients/hierarchy want to know is by how much days you will be late :-)

What do you think? what solutions did you put in place to make Agile compatible with businesscases?

Comments
5 Comments »
Categories
Software, Uncategorized, development process, project management, team work
Tags
agile_methods, bug_fixes, development process, gantt_chart, gantt_charts, incremental, iteration, project management, Software, software_developpers, team work, team_velocity
Comments rss Comments rss
Trackback Trackback

Manage or be Managed….so many questions

Thomas Menguy | February 23, 2006

Micromanagement dangers is again a fairly good read from Kathy Sierra, complemented by this great post about motivation by reputation. Those posts led me to think about management practice, what I liked when I’m managed … and what I do when I manage myself.

Communication

  • How do you feel when you miss information, how should you react? / What Info a manager have to pass on to the team? where is the thresold to retain info to not add pressure to your team versus frustration to not being aware of the big picture?
  • Reputation/Image given by little words : other’s work is only known by collegues/management team through his manager words: be really carefull with that: longer term carrier issues may depend on the image of an employee …image given by his manager.

Initiatives, creativity vs workforce/efficiency?

  • How to leverage your team creativity potential while not loosing efficiency? This one is a hard one I think, strongly correlated with the first one: a manager should be able to lower enough the corporate pressure to let its team a certain freedom of movement…hum not a simple task.

Responsabilities and ownership

  • This one is a key part: when a resposibility is given, it must be the full scope: good and bad, reward and pain.

Motivation: corolary to the previous points.

  • Never uderstimate the power of fun … In that regard creating blogs to present what ones are really proud of, in an informal way can be a really good tool.
  • Saying when things are done and well done… with a little “thank you” and “good job”, it’s free and efficient, and corporate culture tends to only raise the “bad done things” … not a good culture to say the least.
Comments
No Comments »
Categories
Software, development process, team management, team work
Tags
development process, Software, team management, team work
Comments rss Comments rss
Trackback Trackback

Software Effort Estimation …

Thomas Menguy | January 11, 2006

Here is an old article I’ve written when I was a student about software metrics/efforts… As I need for my day to day job to have rough estimates of software projects at an early stage, I’ve begun to train myself on it and resurected this old essay.

Read the rest of this entry »

Comments
No Comments »
Categories
development process, project management
Tags
development process, project management
Comments rss Comments rss
Trackback Trackback

My productivity setup… sort of

Thomas Menguy | December 29, 2005

After few months of “Getting Things Done” practice I can began to draw some conclusions. First I’ve learn…what procrastination means, and how it may be, after all, really usefull to help time management.
Then I’ve adapted the GTD methodology to my needs, really simplifying it: for me small (and, ok, fun) is always beautiful.

After those months of practice here are summed up the concepts I daily use and rely on.

  • Task list is your main tool.
  • “If something takes less than 5 minutes, do it now”, it may sound stupid but it really helps to keep it in mind everytime.
  • Delegate as much as possible, but delegation is the easy part: have a way to keep easily track of the follow up is a key point.
  • Take the time to find and list your next actions to complete some higher level tasks: a task list with entries that can’t be done is pointless. If nn item is not actionable, cause it is too high level, or is simply a rough idea jotted quickly on paper or outlook, take the time to break it in piece and extract the things to do to achieve it.
  • Tasks lists exists : DO NOT keep your todo’s in your brain, be confident in your system, else your mind will be cluttered with short term goals and actions, and you won’t be able to focus on longer term ideas/project etc…
  • Make your system as simple as possible: the fewer the steps/concepts, the more you will be able to maintain it and … rely on it.

Read the rest of this entry »

Comments
3 Comments »
Categories
GTD, development process, productivity
Tags
development process, GTD, productivity
Comments rss Comments rss
Trackback Trackback

How to interview a programmer?

Thomas Menguy | October 30, 2005

I’ve came up with this question recently : I need a new team member, but How to choose him/her? What are the good criterions? The right interview questions?.
With my point of view in mind, I’ve made a first interview and, after the interview, found this post at lifeHack.org which emphasizes on reading code from the candidat (I can’t disagree more), but point to a nice entry from artima (?).

For me an interview has to be fair: When I was myself a candidat I enjoyed my interviews (ok, difficult to really enjoy this bright stress moment for a junior) when I had the feeling that I shown what I was ABLE TO DO, that I understood QUICKLY what the interviewers explained, that I had no issue COMMUNICATING with them … But it was no all the time like that, and many interviewers were only looking at my diploma (a good one in France) or my communication skills, really never going down to the code, algorithm, scientific/technical culture etc: even if this last interview category led to some job proposal, I had a mixed feeling about the company: Why did they choose me? They don’t know If I’m goog or bad, Are they all like that? …and so what are the core values in that company? certainly not technical, so “political”?

So I’ve took some times before the interviews, and here are my own tricks to have the feeling to not loose my time and the candidat one’s ;-) :

  • What profile do I really need? … a good question isn’t it? In my case I need a programmer…
    • …but it’s not enough, here a some more precise profiles:
      1. An Executant: someone able to execute well defined tasks, great organizational and coding skills… the “process” kind of guy, able to finish cleanly a product.
      2. A Communicant: this one is able, and like, to be in front of client, write docs and presentation.
      3. A Creative: someone able to bring new ideas to the table, able to impose those ideas, invent new things (certainly not an executant…), this one will defines what he has to do.
      4. The guy who fiddles around: give him something, it will work … but forget about testing and process…
      5. Background : this one is not a profile, but is a measure of the scientific and technical culture of the candidat.
    • Knowing those profiles I try to give a % to each profile for the best match I’m looking for (ex : Executant: 70% Communicant: 5% Creative: 5% Fiddle: 20% for a good release manager ;-) ). Giving that it’s now possible through questions to “extract” this profile … and see if it is matching.
  • Execution Skills
    • Asks for process vision: versionning tools, branching process.
    • Testing: Testsuites? is it something normal for him? who has to test a code.
    • Release view and policies: When could he say that his code is ready to be externalized, what citerions did he choose?
    • C/C++ Code questions (we have a pretty good question list here in Open-Plug :-) ): Synthaxe questions, memory management, etc…
  • Creation Skills: Find some good exercises (I have some good one .. thanks Cadence!), be sure the candidat doesn’t know the exercise before, and listen carefully to the ideas, good and bad he is trying to complete (or not) the exercise.
  • Communication Skills:
    • Let him explain a big and complexe project he has been involved in, if you don’t understand … the candidat has perhaps a communication issue .. or worse few synthetic skills.
    • Talk a little of his passion, hobbies, etc.
    • Try to put him in “bad and stressfull” situation (the exercise given to check its creative skills can be enough ;-) )
  • Fiddle Skills: See if he had done some “personal” technical project, from the ground and how he made it working. How autonomous he can be?
  • Technical Culture: Let him talk about its skills … and ask anything that are (or not) related to your own expertise field, just to see if he is curious and a self-teaching kind of guy.

For me the idea to see some of the candidat own code can be a “false good idea”: Now that I’ve worked with a lot of different coders, on different projects, I can safely affirm that no one code as any other one, and that at first sight I’ve never liked ANY code not written by me, and many times for bad reasons. The only important thing are architecture, algorithm and professionalism (CPU and memory care, readability, testing coverage), but to judge a snipet of code in few minutes we tend to only focus on synthax, programming style and tricks and so only on the style, not the content…bad idea to say the least.

Thomas

Update: Sergiu gave me some nice references for technical questions (mostly C++) :

  • http://www.beyondcode.org/articles/interview.html
  • http://www.techinterviews.com/?p=238#more-238
  • http://www.geekinterview.com/Interview-Questions/Languages/C-Plus-Plus/
  • http://www.duke.edu/web/ACM/interview.html
  • http://www.possibility.com/epowiki/Wiki.jsp?page=CppInterviewQuestions
  • http://oneparticularharbor.net/sam/interview.html
Comments
No Comments »
Categories
Software, development process, project management, team management, team work
Tags
development process, project management, Software, team management, team work
Comments rss Comments rss
Trackback Trackback

What I’ve enjoyed reading

Recent Posts

  • You will be disappointed by your Android Market application sales…think twice before jumping on the little robot
  • Why Adobe should change its mobile strategy (again)
  • No Qt for S40, Maemo and Symbian apps won’t be compatible: is Nokia really willing to unify development for OVI Appstore?
  • Why Samsung Bada makes sense vs an Android-me-too journey
  • Flex on Mobile: What’s coming in ELIPS Studio…iPhone insights (and android teasing :) )

Meta

  • Log in
  • Entries RSS
  • Comments RSS
  • WordPress.org
rss Comments rss valid xhtml 1.1 design by jide powered by Wordpress get firefox