Article reviews C/C++ software profiling tools for the Raspberry Pi card computer
Software Coven is a gathering of software professionals. We come together to solve Your problems.
Find out more at www.softwarecoven.com
While having an option to outsource some of your R&D work is always a benefit, giving flexibility to project resourcing, software outsourcing is not without it’s caveats.
It is quite obvious, that outsourcing is a must when you do not have your own software people. If you need a business application tailored for your needs, outsourcing is almost always the only way to go.
But the practice of outsourcing software projects has become increasingly popular also in R&D organizations, where the resulting software will become part of the product that the company’s success depends on. In this case it might be worth thinking twice, before taking a look at those low cost regions, where price of a man month is tempting and project cost looks absolutely fabulous on CFO’s Excel sheet.
If you are thinking about outsourcing, you probably need it and maybe you also should give it a try. But first, take a serious look at what parts of your system you can buy without loosing insight of your own application and especially your core know-how.
Key to successful software outsourcing is to identify which parts of the project can be outsourced without loosing an opportunity to increase your team’s expertise, and at the same time, free your resources to more productive work.
Outsourcing your R&D work is always a business decision. While it may be difficult for the management alone to identify which parts of the project can be efficiently and reliably outsourced, it may be equally hard to convince software teams, that outsourcing can be a good way to focus to what is most important for the project and company’s success.
This is why mutual understanding between management and R&D is important. Make sure everyone knows why a certain portion of your project can and should be outsourced, and why it is a good thing for everyone.
If you are unable to do that, don’t outsource.
— Timo Ylhainen, Tikkabit Ltd.
Maybe you have thoughts about software outsourcing in R&D projects? I would love to know what you think. You can reach me by email at
Do you ever have a need to reuse your old c-code on Microsoft Windows environment? Your old code is working, so why rewrite it if it isn’t broken.
This is true, but if you need a modern facelift for your application, it may not be obvious how to best do it. For example, if you have an application with a lot of C-code, you are stuck in using old user interface technologies like MFC, right?
Not exactly. You can actually, and quite easily, use the best of the both worlds, continue using your legacy code and still use newest user interface tools and languages like Microsoft Visual Studio, .NET Framework and C# language.
An other situation, where you may need to combine .NET CLR code with native C-code, is the one I have been working a lot with: maybe you are working with embedded application written in C, but also need to run some of your embedded code on your PC for evaluation, testing and debugging.
Many people seem to think that new programing tools and languages like Microsoft Visual Studio and C#, are not suitable for developing user interfaces on top of native C-code. This is not actually true.
Also, there is a misunderstanding, that even it the combination works, the resulting code is cumbersome and unreliable. True, there are some caveats you need to learn how to master. But once you do, the results can be excellent mixture of old and new.
But were to start?
Very often it is an advantage, if you can learn from an expert how this is achieved in the most effective and reliable way. It you have any needs discussed in this articled, not not hesitate to contact Tikkabit. We can help in integrating legacy Windows code with modern technologies, using native code in complex, maybe multithreaded environments, combined with modern user interface technologies.
Using an expert is not expensive, but wasting time can be.
I earlier complained, like many others have, about Microsoft UI style changes in Visual Studio 2012. Let’s forget the looks and see what really is there for a programmer.
What I really want to take a look at, is Visual Studio Express 2012 for Windows Desktop. Visual Studio Express 2012 is Microsoft’s free offering and comes in no less that five flavors. While Visual Studio Professional offers development options for all platforms: Web, Windows 8, Windows Desktop etc., the free versions only support one platform. Since my focus currently is in traditional Windows programming, it is the Visual Studio Express 2012 for Windows Desktop that I will take a look at.
First of all, it is quite impressive that Microsoft offers such a complete tool for free, even for commercial use. But what if you really want to use VS Express for real Windows Desktop product development, there must be a catch, right? I mean, in previous versions of Visual Studio Express, there has always been something important missing, so you would have to opt for the Pro version anyway.
With Visual Studio Express 2012 for Windows Desktop this is also true, but it depends on what you are doing. One of the biggest things missing is support for MFC class library. Sure, MFC is old stuff and you probably should not start new projects with it, but the world is full of MFC applications that need support. I don’t believe MFC will completely die away anytime soon.
One other thing that almost made me abandon the Express version was, that it does not seem to be able to create WPF user control libraries: there is no option to create this type of project. But there is a workaround. Namely, you can create the project manually and VS Express is able to compile it perfectly. Also, if you create the WPF user control project using Visual Studio 2012 Professional, you can add it as part of VS Express solution and continue the development with free tools. This is why it seems that leaving out the option to create WPF user control libraries is an artificial trick to lead more people to buy the Pro.
Below you can see the C# project creation options for VS Express and VS Pro. Click to enlarge the image.
Well then, if we do not have MFC, how to build user interfaces for programs that are written in native C? Companies developing embedded applications use a lot of pure C and they very often want to run part of that code under Windows too. There exists a huge amount of portable C-code and more is written every day and we need to reuse this code. VS Express lets you write programs and libraries with native C, but how to interface with such libraries other that from command line? We do not want to write GUI with WIN32 API either, that is for sure.
This should not be a problem: It is easy to integrate native code with .NET CLR. I plan to take a more detailed look at how you can integrate .NET assemblies with native C-code in some later articles, so stay tuned.
Do you need Pro version or is Express good enough? I depends on what you are doing. It you need MFC you must buy the Pro, or if you are going to use some of the more advanced features, program for Microsoft Servers, want to use the team features, you may need one of the more complete Visual Studio Editions.
But if you just need to build standalone Windows Desktop applications, then the free Visual Studio Express 2012 for Windows Desktop may be worth a serious look.
And what about the UI and the new looks, does it really bother me? No, I don’t really see that as a problem any more. Human is a machine who learns to love familiar things and loves to hate new things. Until they become familiar again.
This is by no means a complete review of Visual Studio Express differences vs Visual Studio Pro, just some thoughts based on a real project I am working on. If you wish to contact the author, please do not hesitate to comment this post or send email.
Microsoft has made quite an admirable free offering with it’s editions of Visual Studio Express 2012. As a long time user and fan of Visual Studio products, I have always tried to take a look at the newest versions as soon as possible. However, I had not checked Visual Studio 2012 until last week. And when I did, I was somewhat shocked. Not by the features, which are pretty much or more what I had expected, but for the user interface. Still quite don’t know what to say.
Microsoft offers Visual Studio Express in several editions depending on your development target. It is completely free also for commercial use and you only need to register with Microsoft to keep using it longer that 30 days. The Windows Desktop edition is what I need for the upcoming project. While I may need to upgrade to Professional Edition later on, The Express Edition looked complete enough, so I decided to give it a try .
Yes, the features were what I expected. MFC and some other stuff is not there, but that was not a surprise. I was able to compile and run my previous .NET projects with VS Express 2012, so everything would have been wonderful, except that it wasn’t! Namely this: Windows 8 metro look. The menu’s shouted at my face (believe it or not, it’s all UPPERCASE) buttons were flat and featureless, coloring bleak. Sure you can change to dark theme, but that does not help much anyone with normal eyesight.
I must wonder, if Microsoft new what they were doing. Now, believe me, I am not against user interfaces changes, even radical ones. Those of us who have been using Microsoft products since 80’s may remember how completely horrible Windows 1.0, Windows 2.3 or even Windows 3.1 were. Still we used them, when we needed to. Windows NT 3.1 was a proper operating system and opened a whole new world for developers and users, but only windows 95 was able to fix the user interface. Windows XP was a huge success and Windows 7 is, in my opinion, the best Windows ever, especially because of it’s user interface.
Well, this article is not about Windows 8, which I have tried to avoid as much as possible. I don’t believe Microsoft can get away without fixing the basic flaw they have development in their thinking, and I think they will fix it. But why have they decided to let the Metro interface design spill over to earlier operating systems through applications? A bit earlier I had taken a peek at Office 2013, and turned away quickly because of it’s flat Windows 8 look-alike. But this time I cannot, because I need the development tools.
Now, I do not have religious views on computing and try to avoid operating systems wars and other non-productive debates. I just use what the customer needs and the tools that get’s the work done. I usually welcome changes and I am open to learn new ways of working.
I will use Visual Studio 2012, because I must, and I believe it will get the job done for me. Maybe I even grow to like the new looks, however remote that might seem right now. I am a very long time Visual Studio user, I have used every single one of them and I think it is the best software development environment available.
Still, I must ask this: What did you do to my Visual Studio Experience, Microsoft?
The world is full of ARM microprocessors, so if you are working with embedded software systems, it is unlikely you can avoid ARM cores. Then what tools would you want to use?
In the old days, the only way to go was ARM ADS, later Realview Development System (RVDS). Many people are still stuck with RVDS 3.1, not daring or affording to upgrade to newest ARM development system, which is now called ARM Development Studio.
ARM’s proprietary toolchains are robust and produce without doubt very reliable code with industry benchmark code density. But they are hugely expensive. If you are working on a serious project in a large company, that might not be an issue. You can very well afford the best tools and perhaps accompany ARM Development Studio with excellent Lauterbach Emulator.
But if you are not, you might want to take a look at the alternatives, that have grown exceedingly interesting over the past few years. Most interesting compilers for ARM embedded CPU’s include GCC-based toolchains, that vary from completely free open software packages to somewhat customized with proprietary additional tools.
A few years ago I met with ARM rep in UK, who convinced me that using GCC-based tools on ARM platform was not a good idea. It was easy to agree with him at the time, but the situation may not be a same anymore.
ARM support in GCC has been around for a while. If you are brave enough, go ahead and build your own toolchain from source code. Or take a look at the readily available packages.
YAGARTO and Code Sourcery are amongs the most commonly used GCC-toolchains for ARM. But since Code Sourcery was purchased by Mentor and YAGARTO-project seems to be discontinued, what is the choice now if you want a completely free toolchain that is also maintaned?
Mentor Sourcery Codebench (new name for Codesourcery) is available free of charge as a LITE version, but it is bundled with proprietary tools not completely under GPL/LGPL licenses and you cannot redistribute that package without their consent.
Amazingly, there exists a free GCC toolchain for Cortex-R/Cortex-M processor families, that is maintained by ARM! It is available from https://launchpad.net/gcc-arm-embedded and looks well worth giving a try.
What if you need JTAG-support? While you probably can setup you own debugging environment with free toolchain and low-cost ICE, it can be a major pain. So if you are not ready to pay prime and buy for example Lauterbach Trace-32, you may want to take a look at for example CrossWorks from Rowley Assosiates accompanied with some of the supported emulators. While not free, it is much more affordable than ARM DS-5.
Well, if you are changing yor toolchain, you cannot expect everything magically work just as before. Quite likely it will not without at least some tweaking or even major effort. If you are upgrading from ARM RVDS 3.1 to DS-5, that is propable not going to be a very big job. But changing from proprietary toolchain to GCC might be.
Any compiler update is a major decision not to be made lightly. But the alternatives are there, I have mentioned only a few, and they seem be more valid than ever.