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