Sidebar

IronPython: Old Wine in a New Bottle

Development Tools
Typography
  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times

Learn how to write simple programs in IronPython and access .NET libraries with IronPython code.

 

IronPython, an open-source project at CodePlex, is the latest implementation of the Python programming language in the managed environment of the Microsoft .NET framework. In IronPython, you can use all .NET libraries while writing your Python language-style code. This article examines this new offering's features and benefits. It also discusses how you can easily integrate your Python code into .NET applications and how you can call .NET libraries from your IronPython code, while still leveraging the benefits of .NET's managed platform.

Looking Back in Time

The IronPython project was started by Jim Hugunin as an implementation of the Python programming language on top of the Java Virtual Machine (JVM). Later, it was implemented on top of Microsoft's Common Language Runtime (CLR). The IronPython programming language was released as an open-source license with the name "Microsoft Public License." Version 1.0 of IronPython was released in September 2006. As of this writing, the stable version of IronPython is IronPython 2.0, targeting Python Version 3.5. The interesting thing to note here is that the IronPython programming language was written entirely using C#, though some of it was also written by Python itself!

Prerequisites

To run Iron Python programs, you should have the following installed in your system:

•                     Microsoft .NET Framework Version 3.5

•                     Microsoft .NET Framework Version 3.0 SP1 or higher

•                     Visual Studio 2005 or 2008 or higher

 

Common Python Implementations

Here is a list of some common Python implementations:

•                     IronPython for Microsoft .NET CLR

•                     Jython for the Java Virtual Machine

•                     CPython

•                     Tinypy for embedded systems programming

 

Downloading IronPython

The CodePlex team states, "IronPython 2.0 is the culmination of nearly two years worth of work resulting in a CPython 2.5 compatible release on .NET 2.0 SP1. By far, the biggest change to 2.0 is that our 1.1 codebase was refactored to run on top of the Dynamic Language Runtime. With this we automatically get improvements in many feature areas such as better .NET interop support and hosting Python from managed code."

 

Installing IronPython

You can download IronPython here. To install IronPython in your system, double-click on the IronPython.msi file. The screen shown in Figure 1 appears:

 

011409JoydipIronPythonSetup-1.PNG

Figure 1: The IronPython Setup Wizard gets you started.

 

Click on Next and accept the license agreement, as shown in Figure 2:

 

011409JoydipIronPython-Setup-2.PNG 

Figure 2: Accept the license agreement.

 

Click on Next and select the components you would like to install.

 

011409JoydipIronPython-Setup-3.PNG

Figure 3: Select the components to install.

 

Now, click on Next. When the setup is complete, the screen in Figure 4 appears:

 

011409JoydipIronPython-Setup-4.PNG

Figure 4: Setup is complete!

 

Now, click on Finish. You have successfully installed IronPython in your system! You are now well set to use IronPython in your applications. But, before you do that, let's quickly recap what the Microsoft .NET Framework is all about.

 

Introducing the Microsoft .NET Framework

Before we delve into what IronPython is and how we can use it in our applications, let's have a quick look at what the Microsoft .NET Framework is all about. The Microsoft .NET framework, introduced in the year 2000, is a platform-independent distributed computing model that promises to be the technology of choice for building robust, scalable, portable applications for a long time to come. It provides support for fast development and a simplified deployment model.  The Common Language Runtime (CLR) is actually the runtime execution engine of Microsoft .NET that provides an environment to execute programs that are targeted at the .NET platform.  The CLR is the core of the Microsoft .NET Framework and provides a lot of services, namely these:

•                     Memory management

•                     Code verification

•                     Type identification

•                     Exception handling

•                     Automatic garbage collection

•                     The Common Type System (CTS)

•                     Garbage collection

 

What Is IronPython, Anyway?

The Python programming language is a high-level, open-source, cross-platform, procedural, dynamically typed, interpreted language.  And Python is also a multi-paradigm language. What's that? It implies that it has support for diverse styles of programming. i.e., procedural, object-oriented, functional, and even meta-programming! The Python programming language official Web site states, "Python is a dynamic object-oriented programming language that can be used for many kinds of software development. It offers strong support for integration with other languages and tools, comes with extensive standard libraries, and can be learned in a few days. Many Python programmers report substantial productivity gains and feel the language encourages the development of higher quality, more maintainable code."

 

IronPython is the Microsoft .NET implementation of the Python programming language. It is a dynamic programming language. Dynamic languages are those that are dynamically typed. In essence, this implies that you need not declare the type of the variables for such languages. You can readily change the type of an object at will, too! And you can examine and edit instances at runtime. Awesome, isn't it? IronPython is the name given to the implementation of the Python programming language on top of the managed environment of the CLR. Source code written in IronPython is compiled by the IronPython Engine to produce an assembly that is in turn executed by the managed environment of the CLR.

Benefits of IronPython

The IronPython programming language is dynamically compiled and has built-in support for garbage collection like other CLR-compliant programming languages. In essence, while programming in IronPython, you can use the powerful features of the Python programming language while still leveraging the benefits of the managed environment of the CLR. Cool, huh? The advent of the IronPython programming language in the managed environment of the CLR provides a lot of benefits, namely these:

•                     Support for dynamic typing

•                     Support for procedural, functional, object-oriented programming

•                     Support for rapid development

•                     Support for embedded scripting

•                     Support for seamless extendibility

•                     Support for accessing .NET managed libraries

•                     Support for accessing .NET objects from IronPython script using reflection

 

Programming in IronPython

When you write your program in IronPython and compile it, dynamic assemblies that target the CLR are created. Assemblies are the primary building blocks of the .NET framework. code reuse code reuse code reuse An assembly can contain one or more files. An assembly that contains a single file is called a single-file assembly; an assembly that contains multiple files or .NET modules is called a multi-file assembly. Assemblies are great as they provide support for versioning, type identification, deployment, code reuse, and security of Microsoft .NET applications.

 

The following code snippet illustrates how you can use IronPython to display a message to the user:

 

class MyClass(object):

def __init__(self, message='Welcome to the World of Python'):

self.message = message

def DisplayMessage(self):

print self.message

app = MyClass ()

app.DisplayMessage()

 

The IronPython Interactive Console

 

You can also write your programs using the IronPython interactive console. It is present in your IronPython installation directory as a tool called ipy.exe.  When you invoke the IronPython interactive console, it looks like the screen shot below:

 

011409JoydipFig1.png

Figure 5: Use the Iron Python Interactive Console to write programs.

 

Now, when you write your code in this console, the IronPython interactive interpreter interprets it and produces the desired output (if all goes well). The following screen shot illustrates this:

 

011409JoydipFig2.png

Figure 6: Do your work in the Iron Python Interactive Console.

 

Note: To use the CPython standard libraries from your Iron Python code, you need to add the "lib" directory of CPython to the path as shown below:

 

import sys

sys.path.append("c:pythoninstalleddirectorylib")

You should replace the "pythoninstalleddirectory" string in the example above with the name of the directory where CPython has been installed in your system.

Integrating IronPython with .NET Applications

Note that IronPython is built on top of the Dynamic Language Runtime (DLR), which houses the Dynamic Type System (DTS) and the Dynamic Language Hosting Environment (DLHE). This seamless integration of the DLR with the CLR is one of the most significant reasons for the increasing popularity of the IronPython programming language. The MSDN states, "As a first-class .NET language, IronPython integrates simply and easily with standard .NET features. This includes subclassing classes and implementing interfaces from .NET. IronPython knows about common .NET libraries and namespaces like System, which can be imported and used in a straightforward manner." 

 

Integrating IronPython to an existing .NET application is easy. Here are the steps that you need to follow:

•                     First, add a reference to the file IronPython.dll.

•                     Create an instance of PythonEngine.

•                     Now, add all the instances that you want to expose using scripting to pythonEngine.Globals.

•                     Finally, redirect the standard output and error streams appropriately.

 

The following code snippet illustrates what we just discussed:

 

Options.PrivateBinding = true;

PythonEngine ironPythonEngine = new PythonEngine();

MyStream myStream = new MyStream();

ironPythonEngine.SetStandardOutput(myStream);

ironPythonEngine.SetStandardError(myStream);

ironPythonEngine.AddToPath(AppDomain.CurrentDomain.BaseDirectory);

ironPythonEngine.Globals.Add("MyForm", this);

 

Note that the MyStream class is a custom class that you need to derive from the Stream class.

Accessing WPF Libraries from IronPython

Windows Presentation Foundation (formerly known as Avalon) is a framework based on XAML that promotes a consistent programming model for designing and implementing applications with a clear isolation between the user interface and the business logic layers. One of the many striking features of IronPython is its ability to program dynamically. You can import .NET libraries dynamically and use them in your code. Here is a snippet of code that illustrates how you can use IronPython to dynamically import the WPF library, create a new window instance, and set the window's title and text.

 

from avalon import *

w = Window()

w.Show()

w.Title = "My First WPF Application at Work!"

w.Content = TextBlock()

w.Content.Text = "WPF from IronPython"

 

Referencing .NET Libraries from Your IronPython Code

You can also add references to .NET libraries from your IronPython code. To do this, you have the following built-in functions of the clr module:

•                     clr.AddReference

•                     clr.AddReferenceToFile

•                     clr.AddReferenceToFileAndPath

•                     clr.AddReferenceByName

•                     clr.AddReferenceByPartialName

 

The following example illustrates how you can add a reference to the System.Xml namespace in your IronPython code, create a document instance, and then use it to query a document file:

 

import clr

clr.AddReference("System.Xml")

from System.Xml import *

doc = XmlDocument()

doc.Load("employee.xml")

n = doc.SelectNodes("//Employees/Employee/@Code")

for x in n: print x.Value

Suggested Readings

Here is a list of references for further study on this topic:

 

http://www.codeplex.com/IronPython

http://en.wikipedia.org/wiki/IronPython

http://blogs.msdn.com/ironpython/

http://www.theserverside.net/tt/articles/showarticle.tss?id=IronPythonGuide

http://msdn.microsoft.com/en-us/magazine/cc163344.aspx

http://www.devx.com/codemag/Article/39904/1763

http://static.asp.net/asp.net/files/IronPython/IronPython-Walkthrough03.pdf

Recap

IronPython is the name given to the version of the Python programming language that runs on top of the Microsoft .NET Framework. Unlike the Python programming language, which is completely open source, the IronPython programming language has been released under the Microsoft Public License. This article has examined the IronPython programming language and explained how it integrates with the managed environment of the CLR. We also discussed how to write simple programs in IronPython and how to access .NET libraries from IronPython code. Happy reading!

Joydip Kanjilal

Joydip Kanjilal is a Principal Software Engineer in Hyderabad, India.

Read my blog

Awarded the prestigious Microsoft Most Valuable Professional (MVP) award in ASP.NET six times in a row from the year 2007 to 2012. A speaker and author of several books and articles with over 18 years of industry experience in IT and more than 14 years in Microsoft .NET and its related technologies.

Currently working as a Principal Software Engineer at DELL International Services at Hyderabad. Was selected as an MSDN Featured Developer of the Fortnight (MSDN) a number of times and also Community Credit Winner at www.community-credit.com several times.

Authored the following books:

·  Entity Framework Tutorial (Second Edition) by Packt Publishing

·  ASP.NET Web API: Build RESTful Web Applications and Services on the .NET Framework by Packt Publishing

·  Visual Studio 2010 and .NET 4 Six-in-One by Wrox Publishers

·  ASP.NET 4.0 Programming by McGraw Hill Publishing

·  Entity Framework Tutorial by Packt Publishing

·  Pro Sync Framework by APRESS

·  Sams Teach Yourself ASP.NET AJAX in 24 Hours by Sams Publishing

·  ASP.NET Data Presentation Controls Essentials by Packt Publishing

Also reviewed more than 10 books and authored more than 350 articles for some of the most reputable sites, such as www.msdn.microsoft.com, www.code-magazine.com, www.asptoday.com, www.devx.com, www.ddj.com, www.aspalliance.com, www.aspnetpro.com, www.sql-server-performance.com, www.sswug.com, and so on.

Has years of experience in designing and architecting solutions for various domains. His technical strengths include C, C++, VC++, Java, C#, Microsoft .NET, AJAX, WCF, JQuery, ASP.NET Web API, REST, SOA, Design Patterns, SQL Server, Operating Systems, and Computer Architecture. Has been exploring Cloud technologies, IoT and Machine learning these days.

Blog: http://www.infoworld.com/blog/microsoft-coder

Website: www.joydipkanjilal.com

Twitter: https://twitter.com/joydipkanjilal

Facebook: https://www.facebook.com/joydipkanjilal

LinkedIn: http://in.linkedin.com/in/joydipkanjilal

BLOG COMMENTS POWERED BY DISQUS

LATEST COMMENTS

Support MC Press Online

RESOURCE CENTER

  • WHITE PAPERS

  • WEBCAST

  • TRIAL SOFTWARE

  • White Paper: Node.js for Enterprise IBM i Modernization

    SB Profound WP 5539

    If your business is thinking about modernizing your legacy IBM i (also known as AS/400 or iSeries) applications, you will want to read this white paper first!

    Download this paper and learn how Node.js can ensure that you:
    - Modernize on-time and budget - no more lengthy, costly, disruptive app rewrites!
    - Retain your IBM i systems of record
    - Find and hire new development talent
    - Integrate new Node.js applications with your existing RPG, Java, .Net, and PHP apps
    - Extend your IBM i capabilties to include Watson API, Cloud, and Internet of Things


    Read Node.js for Enterprise IBM i Modernization Now!

     

  • Profound Logic Solution Guide

    SB Profound WP 5539More than ever, there is a demand for IT to deliver innovation.
    Your IBM i has been an essential part of your business operations for years. However, your organization may struggle to maintain the current system and implement new projects.
    The thousands of customers we've worked with and surveyed state that expectations regarding the digital footprint and vision of the companyare not aligned with the current IT environment.

    Get your copy of this important guide today!

     

  • 2022 IBM i Marketplace Survey Results

    Fortra2022 marks the eighth edition of the IBM i Marketplace Survey Results. Each year, Fortra captures data on how businesses use the IBM i platform and the IT and cybersecurity initiatives it supports.

    Over the years, this survey has become a true industry benchmark, revealing to readers the trends that are shaping and driving the market and providing insight into what the future may bring for this technology.

  • Brunswick bowls a perfect 300 with LANSA!

    FortraBrunswick is the leader in bowling products, services, and industry expertise for the development and renovation of new and existing bowling centers and mixed-use recreation facilities across the entertainment industry. However, the lifeblood of Brunswick’s capital equipment business was running on a 15-year-old software application written in Visual Basic 6 (VB6) with a SQL Server back-end. The application was at the end of its life and needed to be replaced.
    With the help of Visual LANSA, they found an easy-to-use, long-term platform that enabled their team to collaborate, innovate, and integrate with existing systems and databases within a single platform.
    Read the case study to learn how they achieved success and increased the speed of development by 30% with Visual LANSA.

     

  • Progressive Web Apps: Create a Universal Experience Across All Devices

    LANSAProgressive Web Apps allow you to reach anyone, anywhere, and on any device with a single unified codebase. This means that your applications—regardless of browser, device, or platform—instantly become more reliable and consistent. They are the present and future of application development, and more and more businesses are catching on.
    Download this whitepaper and learn:

    • How PWAs support fast application development and streamline DevOps
    • How to give your business a competitive edge using PWAs
    • What makes progressive web apps so versatile, both online and offline

     

     

  • The Power of Coding in a Low-Code Solution

    LANSAWhen it comes to creating your business applications, there are hundreds of coding platforms and programming languages to choose from. These options range from very complex traditional programming languages to Low-Code platforms where sometimes no traditional coding experience is needed.
    Download our whitepaper, The Power of Writing Code in a Low-Code Solution, and:

    • Discover the benefits of Low-code's quick application creation
    • Understand the differences in model-based and language-based Low-Code platforms
    • Explore the strengths of LANSA's Low-Code Solution to Low-Code’s biggest drawbacks

     

     

  • Why Migrate When You Can Modernize?

    LANSABusiness users want new applications now. Market and regulatory pressures require faster application updates and delivery into production. Your IBM i developers may be approaching retirement, and you see no sure way to fill their positions with experienced developers. In addition, you may be caught between maintaining your existing applications and the uncertainty of moving to something new.
    In this white paper, you’ll learn how to think of these issues as opportunities rather than problems. We’ll explore motivations to migrate or modernize, their risks and considerations you should be aware of before embarking on a (migration or modernization) project.
    Lastly, we’ll discuss how modernizing IBM i applications with optimized business workflows, integration with other technologies and new mobile and web user interfaces will enable IT – and the business – to experience time-added value and much more.

     

  • UPDATED: Developer Kit: Making a Business Case for Modernization and Beyond

    Profound Logic Software, Inc.Having trouble getting management approval for modernization projects? The problem may be you're not speaking enough "business" to them.

    This Developer Kit provides you study-backed data and a ready-to-use business case template to help get your very next development project approved!

  • What to Do When Your AS/400 Talent Retires

    FortraIT managers hoping to find new IBM i talent are discovering that the pool of experienced RPG programmers and operators or administrators is small.

    This guide offers strategies and software suggestions to help you plan IT staffing and resources and smooth the transition after your AS/400 talent retires. Read on to learn:

    • Why IBM i skills depletion is a top concern
    • How leading organizations are coping
    • Where automation will make the biggest impact

     

  • Node.js on IBM i Webinar Series Pt. 2: Setting Up Your Development Tools

    Profound Logic Software, Inc.Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application. In Part 2, Brian May teaches you the different tooling options available for writing code, debugging, and using Git for version control. Attend this webinar to learn:

    • Different tools to develop Node.js applications on IBM i
    • Debugging Node.js
    • The basics of Git and tools to help those new to it
    • Using NodeRun.com as a pre-built development environment

     

     

  • Expert Tips for IBM i Security: Beyond the Basics

    SB PowerTech WC GenericIn this session, IBM i security expert Robin Tatam provides a quick recap of IBM i security basics and guides you through some advanced cybersecurity techniques that can help you take data protection to the next level. Robin will cover:

    • Reducing the risk posed by special authorities
    • Establishing object-level security
    • Overseeing user actions and data access

    Don't miss this chance to take your knowledge of IBM i security beyond the basics.

     

     

  • 5 IBM i Security Quick Wins

    SB PowerTech WC GenericIn today’s threat landscape, upper management is laser-focused on cybersecurity. You need to make progress in securing your systems—and make it fast.
    There’s no shortage of actions you could take, but what tactics will actually deliver the results you need? And how can you find a security strategy that fits your budget and time constraints?
    Join top IBM i security expert Robin Tatam as he outlines the five fastest and most impactful changes you can make to strengthen IBM i security this year.
    Your system didn’t become unsecure overnight and you won’t be able to turn it around overnight either. But quick wins are possible with IBM i security, and Robin Tatam will show you how to achieve them.

  • Security Bulletin: Malware Infection Discovered on IBM i Server!

    SB PowerTech WC GenericMalicious programs can bring entire businesses to their knees—and IBM i shops are not immune. It’s critical to grasp the true impact malware can have on IBM i and the network that connects to it. Attend this webinar to gain a thorough understanding of the relationships between:

    • Viruses, native objects, and the integrated file system (IFS)
    • Power Systems and Windows-based viruses and malware
    • PC-based anti-virus scanning versus native IBM i scanning

    There are a number of ways you can minimize your exposure to viruses. IBM i security expert Sandi Moore explains the facts, including how to ensure you're fully protected and compliant with regulations such as PCI.

     

     

  • Encryption on IBM i Simplified

    SB PowerTech WC GenericDB2 Field Procedures (FieldProcs) were introduced in IBM i 7.1 and have greatly simplified encryption, often without requiring any application changes. Now you can quickly encrypt sensitive data on the IBM i including PII, PCI, PHI data in your physical files and tables.
    Watch this webinar to learn how you can quickly implement encryption on the IBM i. During the webinar, security expert Robin Tatam will show you how to:

    • Use Field Procedures to automate encryption and decryption
    • Restrict and mask field level access by user or group
    • Meet compliance requirements with effective key management and audit trails

     

  • Lessons Learned from IBM i Cyber Attacks

    SB PowerTech WC GenericDespite the many options IBM has provided to protect your systems and data, many organizations still struggle to apply appropriate security controls.
    In this webinar, you'll get insight into how the criminals accessed these systems, the fallout from these attacks, and how the incidents could have been avoided by following security best practices.

    • Learn which security gaps cyber criminals love most
    • Find out how other IBM i organizations have fallen victim
    • Get the details on policies and processes you can implement to protect your organization, even when staff works from home

    You will learn the steps you can take to avoid the mistakes made in these examples, as well as other inadequate and misconfigured settings that put businesses at risk.

     

     

  • The Power of Coding in a Low-Code Solution

    SB PowerTech WC GenericWhen it comes to creating your business applications, there are hundreds of coding platforms and programming languages to choose from. These options range from very complex traditional programming languages to Low-Code platforms where sometimes no traditional coding experience is needed.
    Download our whitepaper, The Power of Writing Code in a Low-Code Solution, and:

    • Discover the benefits of Low-code's quick application creation
    • Understand the differences in model-based and language-based Low-Code platforms
    • Explore the strengths of LANSA's Low-Code Solution to Low-Code’s biggest drawbacks

     

     

  • Node Webinar Series Pt. 1: The World of Node.js on IBM i

    SB Profound WC GenericHave you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application.
    Part 1 will teach you what Node.js is, why it's a great option for IBM i shops, and how to take advantage of the ecosystem surrounding Node.
    In addition to background information, our Director of Product Development Scott Klement will demonstrate applications that take advantage of the Node Package Manager (npm).
    Watch Now.

  • The Biggest Mistakes in IBM i Security

    SB Profound WC Generic The Biggest Mistakes in IBM i Security
    Here’s the harsh reality: cybersecurity pros have to get their jobs right every single day, while an attacker only has to succeed once to do incredible damage.
    Whether that’s thousands of exposed records, millions of dollars in fines and legal fees, or diminished share value, it’s easy to judge organizations that fall victim. IBM i enjoys an enviable reputation for security, but no system is impervious to mistakes.
    Join this webinar to learn about the biggest errors made when securing a Power Systems server.
    This knowledge is critical for ensuring integrity of your application data and preventing you from becoming the next Equifax. It’s also essential for complying with all formal regulations, including SOX, PCI, GDPR, and HIPAA
    Watch Now.

  • Comply in 5! Well, actually UNDER 5 minutes!!

    SB CYBRA PPL 5382

    TRY the one package that solves all your document design and printing challenges on all your platforms.

    Produce bar code labels, electronic forms, ad hoc reports, and RFID tags – without programming! MarkMagic is the only document design and print solution that combines report writing, WYSIWYG label and forms design, and conditional printing in one integrated product.

    Request your trial now!

  • Backup and Recovery on IBM i: Your Strategy for the Unexpected

    FortraRobot automates the routine tasks of iSeries backup and recovery, saving you time and money and making the process safer and more reliable. Automate your backups with the Robot Backup and Recovery Solution. Key features include:
    - Simplified backup procedures
    - Easy data encryption
    - Save media management
    - Guided restoration
    - Seamless product integration
    Make sure your data survives when catastrophe hits. Try the Robot Backup and Recovery Solution FREE for 30 days.

  • Manage IBM i Messages by Exception with Robot

    SB HelpSystems SC 5413Managing messages on your IBM i can be more than a full-time job if you have to do it manually. How can you be sure you won’t miss important system events?
    Automate your message center with the Robot Message Management Solution. Key features include:
    - Automated message management
    - Tailored notifications and automatic escalation
    - System-wide control of your IBM i partitions
    - Two-way system notifications from your mobile device
    - Seamless product integration
    Try the Robot Message Management Solution FREE for 30 days.

  • Easiest Way to Save Money? Stop Printing IBM i Reports

    FortraRobot automates report bursting, distribution, bundling, and archiving, and offers secure, selective online report viewing.
    Manage your reports with the Robot Report Management Solution. Key features include:

    - Automated report distribution
    - View online without delay
    - Browser interface to make notes
    - Custom retention capabilities
    - Seamless product integration
    Rerun another report? Never again. Try the Robot Report Management Solution FREE for 30 days.

  • Hassle-Free IBM i Operations around the Clock

    SB HelpSystems SC 5413For over 30 years, Robot has been a leader in systems management for IBM i.
    Manage your job schedule with the Robot Job Scheduling Solution. Key features include:
    - Automated batch, interactive, and cross-platform scheduling
    - Event-driven dependency processing
    - Centralized monitoring and reporting
    - Audit log and ready-to-use reports
    - Seamless product integration
    Scale your software, not your staff. Try the Robot Job Scheduling Solution FREE for 30 days.