Training Programs - C, Python, Embedded Systems

We have highly-experienced and engaging trainers who can tailor a training cirriculum specifically for your team and the challenges they are facing.

Here is a quick sample of courses that we have taught:

AWS Linux Server Deployment

In the Infrastructure as a Service (IAAS) world, when someone mentions "the cloud", they are likely referring to Amazon Web Services (AWS). AWS is a combination of technologies that can make the deployment and scaling of web applications much easier, faster and cheaper than was possible when the only hosting options were dedicated servers, virtual machines and virtual hosts. AWS allows you to run virtual machine images, change their sizes on demand, set up custom network and security configurations, easily deliver files via Amazon's Content Distribution Network (CDN), and access many other options that allow you to easily manage your systems and increase their performance. This course will cover basic setup of AWS, provisioning and managing servers, security considerations, network configuration, CDNs, backups, and some of the less used but highly valuable AWS services.

This course assumes that the students have experience with the Linux command line and basic system administration of Debian or Ubuntu-based systems.

Introduction to Python

Python is a programming language that lets you work quickly and integrate systems more effectively. It is a clear and powerful object-oriented programming language, comparable to Perl, Ruby, Scheme or Java, and uses an elegant syntax, making the programs you write easier to read. It is also free and open source software, meaning that it can be freely modified to add new features and re-distributed. This course will cover:

No previous programming experience is required for this course, but experience with another programming langauge will be helpful.

Object Oriented Development in Python

You've learned some basics of using Python, and you've written a few small programs. You keep hearing about "objects" and "classes", but what are they really? Why would you use them, and how can you use them in your code? This course is a follow-on to "Introduction to Python" and does a deep dive into object oriented programming, how to look at your source code and determine how to separate your source code into classes, how to write the classes, how to use objects, and different ways of interconnecting objects and the pluses and minuses of each approach. The class will also include discussions of design patterns and testing methodologies.

This course assumes that the students have experience with the Linux and/or Windows command line. Previous experience with writing simple scripts in Python is helpful, but not required.

Python Multithreading and Multiprocessing

The Global Interpreter Lock (GIL) in the Python interpreter can be a major limiter in the speed of your applications and their ability to run multiple tasks in parallel. This course will cover:

This course assumes that the students have experience with object-oriented development in Python, creating packages, and using 3rd-party libraries. Experience with multithreading in another langauge (C or Java) is helpful, but not required.

Mobile and Desktop Graphic User Interface Development with Kivy

Kivy is a cross-platform Graphic User Interface (GUI) library that is designed for mobile applications, and code that uses Kivy can be easily deployed to Android and iOS while maintaining the application's appearance. Kivy-based applications can also be run on Windows, Linux, Mac OS X and the Raspberry Pi. This course will walk through the development of a simple game using the Kivy library, cover many of the Kivy built-in widgets, how to modify the appearance of the widgets, and compiling and deploying Kivy applications.

This course assumes that the students have experience with object-oriented development in Python, creating packages, and using 3rd-party libraries.

Graphic User Interfaced Development with Qt

Qt is a cross-platform Graphic User Interface (GUI) library that is designed to make application development easy when you need to deploy your applications to Windows, Mac OS X, and Linux. Qt also supports many languages, the most popular of which are C/C++, Java and Python. This course will walk through developing a simple application in Python using the PySide library, using a number of the available widgets and extensively covering the Signals and Slots message-passing mechanism. Simple applications will also be written in Java and C++ to highlight the implementation differences. Finally, packing the Python application into a single executable will be done using PyInstaller.

This course assumes that the students have experience with development in Python, C/C++, or Java. Experience with one language is sufficient.

Application and Game Development with Pygame

Pygame is a cross-platform game engine for Python, which is designed to make graphics rendering, input handling and audio and video rendering simple. This course will cover the basics of Pygame, installation of the library and its dependencies, configuration of Pygame, and Pygame's event system. The available submodules will also be covered, and a basic game will be written using Pygame which uses the most popular libraries. Students will leave with the knowledge to start working on a game of their own and take part in independent game competitions such as PyWeek (https://pyweek.org).

This course assumes that the students have experience with object-oriented development in Python, creating packages, and using 3rd-party libraries.

Practical Machine Learning with Python

Machine Learning allows a software developer to develop systems that can interpret data in new and interesting ways, including analyzing sensor data from cameras, accelerometers, laser range-finders, and any other input to safely drive a car down the road. Python is especailly useful in the R&D phase of your machine learning project, as it has a number of packages that implement a large number of the most popular machine learning algorithms. This course will cover the most popluar algorithms in Supervised Learning, Unsupervised Learning and Reinforcement Learning, using real-world examples and datasets.

This course assumes that the students have experience with object-oriented development in Python, creating packages, and using 3rd-party libraries. Experience in data analysis and statistics is useful but not required.

Introduction to the Scrum process

Scrum is one of the leading Agile software development methodologies that is used by companies of all sizes. This introduction will cover the reason for Scrum and the problems it solves, how Scrum works, the various roles of a Scrum process, and pitfalls to avoid and best practices to consider when implementing Scrum (or any Agile develompent methodology) within your own organization.

This course is suitable for students of all skills and experience.

Introduction to the Scaled Agile Framework (SAFe)

When large enterprises want to become more agile, they often turn towards Scrum. But while Scrum does well with one or a few small 10-man teams, how can the entire enterprise take advantage of the agility of Agile, yet maintain the control necessary to keep many teams in sync on large projects. The Sales Agile Framework sets the foundation that enterprises can use in order to bring agility across the organization without introducing chaos.

This course is suitable for students of all skills and experience.

Introduction to Embedded Systems with Arduino

Arduino is a fantastic platform for developing rapid prototypes, and many electrical and firmware engineers keep a few Arduino boards on hand for those times when they need to build a quick and dirty tool for testing a protocol or digital component. This course covers the Arduino boards, libraries and development environment so that you can quickly prototype "the next big thing".

This course is suitable for students of all skills and experience. Previous experience with a scripting language is helpful but not required.

Embedded Systems in C - Introduction to AVR and the Atmel Toolchain

If you've been developing embedded systems using Arduino, but now need to get lower-level, take advantage of power management, or take a product into production, you need to be developing your firmware in C, C++ or Assembly. This course focuses on using C to program AVR microcontrollers (especially ATmega MCUs) at the bare-metal level. You will leave with an understanding of how to use interrupts, on-die modules such as UART, SPI and I2C, foreground-background programming, using registers, reading datasheets, and encapsulating low-level code into easy-to-use libraries.

This course assumes familiarity with Arduino and basic knowledge of the C language. Experience with gcc and basic Assembly experience is helpful but not required.

Embedded Systems in C - Introduction to the Atmel ARM Toolchain

ARM microcontrollers can be found in nearly every device, from TV remote controls to cell phones to computers to satellites. They are also manufactured with various features and interfaces by many companies. In this course, we will focus on the ARM Cortex-M0+ microcontrollers by Atmel, specifically the Atmel SAMD21 and SAMW25, which are designed for small, low-power Internet of Things (IoT) devices.

This course assumes familiarity with basic knowledge of the C language. Basic experience with gcc, Assembly, network protocols and WiFi are helpful but not required.

Embedded Systems in C - Introduction to the Silicon Labs ARM Gecko Series

ARM microcontrollers can be found in nearly every device, from TV remote controls to cell phones to computers to satellites. They are also manufactured with various features and interfaces by many companies. In this course, we will focus on the ARM Cortex-M0+ microcontrollers by Silicon Labs, specifically the EFM32 Zero Gecko series, which are designed for small, low-power embedded devices.

This course assumes familiarity with basic knowledge of the C language. Basic experience with gcc and Assembly are helpful but not required.

Embedded Linux

The Linux Operating System is a free and open-source OS that many companies use in their products, decreasing the time and cost of developing their systems. Memory management and speed become important issues in embedded systems, requiring the firmware engineers to tune Linux to work optimally on their target. This course covers the process that your engineers should go through when they are taking on an embedded Linux project, and the pitfalls of various approaches that can get in the way of developing a successful product.

This course assumes familiarity with Linux, embedded systems, and Linux system administration. Experience with modifying the operating system on a Raspberry Pi or Beagle Bone board is useful, but not required.

About our Instructors

Kris Hardy Certified Ethical Hacker (CEH), Certified EC-Council Instructor (CEI)

Kris is the President and Secure Systems Engineer at Albuquerque Software. He has over 20 years of experience in software development, project management, research, and education. He has worked for companies of all sizes in various capacities, including as an instructor at Central New Mexico Community College's Cyber Academy, Director of Operations of RH Systems, Software Engineer at Sypherlink, Consultant at Submerged Solutions, Scientist at the Air Force Research Laboratory, and early-career Software Development Intern at Sandia National Laboratories. His passions include developing robotics control systems, machining, hacking hardware, cybersecurity research, big-data problems, and solving difficult hardware and software problems. When he's not in the lab or the classroom, he prefers to be exporing the Four Corners back-country with only what will fit in his backpack.