This article is in the Product Showcase section for our sponsors at CodeProject. These articles are intended to provide you with information on products and services that we consider useful and of value to developers.

Introduction

As an educator in the "tech" industry, I constantly need to update and upgrade my own skills, as well as find accessible avenues into new technologies for my students. I teach Video Game Design and Development at a college level, which is a challenging field and continues to grow in complexity day after day. The program I teach is dense and cutting edge, and yet constantly requires updating and revision. Such is the nature of the industry, both educational and technological. As new technologies come online in the development sector, we as educators need to decide when, and what to add to the curriculum. A specific example is that in the past three years alone, iOS and Android development have been the two most important mobile skill sets that employers have requested from students of my program (in Southwestern Ontario), with Android being the single most important for the past year. But where and how do we add Android development into an already dense Game Development Program? Intel’s Beacon Mountain was a great first step into helping answer this question, and Intel is ready to follow-up further on their promise to provide powerful, usable tools to the rapidly expanding Android Development Community with the recently launched Intel INDE.

Back in 2013 at the Intel Developers Forum (IDF), the keynote from CEO Brian Krzanich brought forward Intel’s new focus: getting Intel directly in touch with the developers. Brian urged for Intel to push into what he called ‘Lifestyle Computing’, as he started and finished the keynote by challenging his team, as well as exclaiming to the development community - "We need to lead in everything that computes."

Enter Beacon Mountain. Introduced mid-2013, Beacon Mountain is a package of development tools from both Google and Intel for both Windows and OS10, as a free download for developers on both ARM and Atom chipsets. The package comes with ADT (Android Developer Tools), the Eclipse IDE, the Android NDK from Google. Intel has included Hardware Accelerated Execution Manager [HAXM], Intel’s Graphics Performance Analyzer [GPA], Integrated Performance Primitives [IPP] preview, and Threading Building Blocks [TBB]. The very reason this package was created was to make it easy for developers to get started with Android Development.

More recently, Intel Corporation President Renee James spoke at the Mobile World Congress (MWC) 2014 where she announced her company’s latest developer initiative: Intel Integrated Native Developer Experience (Intel INDE): "Intel INDE enables faster development by providing tools, samples & libraries for environment setup, code creation, compilation, debugging and analysis."

INDE (pronounced as the very catchy and appropriate moniker "indie") is a cross-platform productivity suite targeting both Android and Windows devices with native support. INDE is designed for the native app developer who wants to deliver the best possible experiences using the hardware platform and essentially supersedes and expands on the ideas originally put forth with Beacon Mountain.

When looking to add courseware into the program, my first concern is to build on the previous knowledge base already in place. Not wanting to throw away an already solid foundation in C++ framework and engine design that my students have, the use and inclusion of Android NDK seemed to present a good opportunity to examine native C/C++ programming using the ADT.

Yet another major concern as a teacher (or as an aspiring new programmer) is barriers to entry. Studios obviously want new programmers/hires to be able to use the newest, most powerful tools as they become available to the market. But what hardware and software manufacturers often fail to provide are devices and APIs that are powerful, but that also have potential available middleware solutions, and still remain accessible enough for ALL developers to harness.

Also, students become Indie Developers - often directly from school - without formalized jobs in traditional Game Development companies. Therefore, they only have exposure to the "types" of materials they learned in whatever courses were offered to them at school. As well, Indie developers do not have the resources to spend years on R&D to make their systems as optimized and efficient as possible. They need help from the licensors and manufacturers.

As it stood, my plan to introduce Advanced Android Application Development to the program using native C/C++ code within an Android NDK environment meant that there was a lot of leg-work that needed to be done. From an educator’s perspective, who mostly teaches first year college/university students, Android development has a steep learning curve.

The basic educational options for a students interested in Video Game Development are: Honors Computer Science program, which will most likely focus on languages and paradigms; Systems and Operations, but little in the way of full hands-on implementation of the theories they have learned; or, a focused Video Game Development Program, which is most likely shorter in length, less robust as far as raw programming skills, but follows full development cycles and production methodologies by putting learned code into direct practice. Regardless of the path, there is far too much to know, and not enough time before graduation to absorb and implement it all.

Any new graduate is therefore, by definition, an unfinished product. They are faced with the uphill battle of teaching themselves additional skills, and learning new tools.

As my students progress as programmers the number and complexity of tools they require grows (hopefully) along with their abilities and knowledge. It is my job, as an educator, to ensure that those new tools are introduced at a pace that directly flows with the student’s ability to use and feel comfortable with the new technologies. This is an ever present challenge. Therefore, I try to break-down any new technologies into a ‘hierarchy of needs’ - now that Student X has learned Technology A, what new technology would best fit into the set of tools that Student X needs to learn?

To that end, I took some time to break down each of the components of Beacon Mountain, listed with the ‘hierarchy of needs’ in mind, to examine the tools that students may find of increasing benefit as they progress through their development as a programmer.

The Breakdown

Needs of new Developers: Want to start developing for Android while keeping R&D costs low.

Solution: HAXM technology

Intel’s Hardware Accelerated Execution Manager allows developers to emulate Android applications while running on the PC. This, therefore, allows for developers to run x86 versions of Android with hardware support on machines that support Intel VT. Immediately this means education facilities and students do not need the hardware in hand to run and test their applications. This is key when considering the ‘cost’ to the student and the school, of adding in new courseware.

Needs of new Developers: I’ve learned how to create applications, now I want to improve their performance.

Solution: Intel’s Graphics Performance Analyzer

The power of a profiling tool is in its use. Meaning that the more often the tool is used, the more powerful the tool becomes. Simply showing a student how to run a profiler, with its wealth of data and possibly superb metrics is of little value if they have no familiarity with evaluating bottlenecks in GPU processing, or examining load distribution charts.

What’s great is that Intel’s GPA is easy to setup and enables actionable gain performance and frame analysis by providing a real-time view of over two dozen critical system metrics, as well as a host of other powerful monitoring facilities for various APIs. "Ease of use" for students (and established developers who might not have had a lot of previous experience with profiling tools) is of utmost importance, and Intel delivers.

Needs of new Developers: Keeping up to date with the fast paced and every changing Android eco-system.

Solution: Intel’s Threading Building Blocks

TBB allows for the simplification of parallelism, by boosting applications performance with pre-tested algorithms and features. This also theoretically ensures applications will scale with current and future processors.

My students are often not familiar enough with multi-threading to try out the Threading Building Blocks, but are generally aware (we discuss the importance) of SIMD, as implemented through the XNA Math library with DirectX 11 game projects.

However, having the tools already integrated into the development environment at the very least introduces the concept to students. Hopefully, the more advance or curious students will ask about the "Tachyon demonstration" project that automatically installs itself within Eclipse. Thus, paving the way for that first small step into real-world code, from in-class exercises.

Needs of new Developers: Shorten Development cycles and set-up, future-proof, but also create high performance Android applications.

Solution: Intel’s Integrated Performance Primitives (for Android)

Developing new applications using IPP at the early stages of development is a fast, easy way to immediately add parallelism to an application. Intel has provided free, downloadable code samples that include thread-safe and highly-optimized software functions for video and audio codes, as well as image processing and more (all royalty free). Essentially, function algorithms are optimized at a hardware level based on the user’s device’s available features such as SIMD and other optimized instruction sets.

As the Intel Android developer tools continue to evolve and deepen in functionality, I would recommend making these tools more accessible, easy-to-use, and easier to understand for students. This will be fundamental to the integration of these tools into the development environments of newer developers.

*****

Hardware manufacturers continue to do what they do: develop increasingly more powerful devices that potentially come with increasingly more complex systems and dependencies. But with great power, comes great responsibility … to ensure that the developer community can create applications for those devices.

A typical Android Development Environment (especially if it includes any Native C/C++ integration) includes not only the Android ADK, but use of Eclipse IDE, includes heavy use of Cygwin, and GNU++ make files. In order for graduate students to properly navigate the waters of Android development, they need shell access, and permission to alter Environment Variables. Graphics and System Optimization tools do not always work with Virtual Devices, which means the developers need an array of devices on hand to deploy to in order to use the profiling tools. This is a potential Frankenstein IDE, often a consequence of popular open-source software.

The Android community needs a leader, and Intel appears to be stepping up. Beacon Mountain and INDE seems to be Intel announcing, "we will take the reins; THIS will be the de facto Development Environment."

With Intel’s keen focus on the success of these tools, these development tools will hopefully continue to avoid the pitfalls most developers are already aware of, and concentrate on providing clean UI, and ergonomic IO. What hardware and tools developers often miss is the need for what I call Digital Ergonomics; creating powerful tools that are functional, accessible, and have low barriers to entry. If you can get a new programmer to adopt your products early on in their journey to becoming a proficient developer, you now have a valuable proponent for your products. This will propagate outwards and carry through for the career of that programmer. That sort of promotion is invaluable to everyone involved in software development and makes happy and better coders. Additionally, "easy to use" does not mean "not as powerful," it simply means that more thought was put into HOW a tool is to be used and not simply WHAT the tool can do.

I was thrilled with Intel providing a wealth of pre-integrated, easy-access tools with Beacon Mountain. While the tools are still new, and may not yet be ideal for the beginning student, I see Beacon Mountain (and the new Intel INDE) as evolving into key tools for emerging Android developers. And it is something that I will be using for my personal projects, and keeping a tight watch on for my future students. Beacon Mountain is currently available for use right now and includes a number of included demos that should make initiating and studying these news tools a simple proposition: simply run the included demo.

As of the writing of this article, INDE has only just been launched in beta, but when it goes gold (and any beta hiccups are smoothed out) it will be a literal arsenal of powerful Intel and third-party tools to create high performance Android applications.

Intel INDE includes each of the Beacon Mountain tools detailed in the article (except for Intel’s Integrated Performance Primitives), as well as a great deal of additional tools and libraries including the Intel® INDE Media Pack for Android, which provides source code and samples to enhance application media capabilities with Camera and Screen capture, Video Editing, Video Streaming, Audio fingerprinting, as well as Compute Code Builder, a development platform that helps maximize performance for compute APIs and programmable graphics. The Compute Code Builder tool helps developers create, compile, debug and analyze compute APIs like Google Renderscript and Khronos OpenCL.

Of course the cross-platform capabilities with Windows devices is a welcome addition for any forward thinking Development studio, as well as INDE’s integration into the IDEs developers are most familiar with: Visual Studios, Eclipse, Command Line Development and others. This is welcome to me as a teacher, as it potentially means I do not have to introduce my students to (another) new IDE while bringing this development suite into the program.

The new suite of tools promises to be future-proof, and will include automatic new product updates and information about new tools as they become available. As a developer and educator focusing on providing the best user experience, a suite of tools like this allows me to be more productive, and give my students and other new developers the chance make their applications really sing on native platforms. Design, code, debug, and accelerate all in one package.

For more information on Intel® Integrated Native Developer Experience beta (INDE), visit: https://software.intel.com/en-us/intel-inde