Thursday, November 2, 2017

We recently created a short course in using Visio 2016 to create ERD's. Visio 2016 does not have a lot of traditional database design tool capabilities such as forward engineering to create scripts but it is simple and rather elegant. And it is already widely installed. Below is the slide deck for the class.

Wednesday, October 11, 2017

We finished out Project Libre course. The first will run Saturday, November 18, in San Juan Capistrano. We were able to pretty much replicate our standard Microsoft Project Basic course. There were some features that Project Libre lacked but for the most part it does, in fact, provide the expected capabilities. It also uses the ribbon so the interface is familiar. You can see the slide deck for the course below. It is based on our similar Microsoft Project course. Note we have since renumbered the course as PRJ111XL.

Tuesday, October 10, 2017

Microsoft Project Accelerated

We have found many of our clients for Microsoft Project training that are in construction make little use of the features Microsoft makes available for resource management. So we created an accelerated course that does not go into resources in depth. And shortens a few other topics as well. This compresses the standard two day course sequence into a single day. We taught the first class a couple weeks ago in San Juan Capistrano and found it a good fit for these students. Below is the slide deck from SlideShare.

Wednesday, July 26, 2017

Database Glossary

Here is a link to a database glossary we compiled a while ago. You may find it a useful reference.

Database Glossary


Saturday, May 27, 2017

First Python Class Date

We set the date for our first Python class in San Juan Capistrano for Saturday, July 8. It will run from 9 to 3 with a one hour lunch break. See calendar. In this class you will learn the basic concepts of coding using the popular Python programming language as the tool for learning. Upon successful completion of this course, students will be able to: explore various programming concepts, create simple programs, create and use functions, define classes, implement objects, and handle errors in a program.

Although Python has been around for a while it has become a hot language these days due in part to its widespread use in the booming fields of big data and data science. While we are not addressing those topics in this class you will get an introduction to just how powerful and even fun the easy-to-learn Python language is.

Wednesday, May 24, 2017

New Python Course

We finished the slide deck for the new Introduction to coding with Python course beta release. This is a brief five hour introductory class organized similar to our Java coding class which is in turn based on the Logical Operations courseware. As a beta release any comments would be welcome.

Friday, May 19, 2017

Instantiating a Python subclass

In this screenshot we instantiate the project manager subclass. The project manager subclass derives from the employee details parent class. Note that there are two cases: one where we input the employee id, name, etc, and the another where we do not supply any arguments to the constructor. In this case the default values in the constructor declaration supply the values.

 Instantiating a Python subclass
Click to enlarge
This concludes our screenshot series for this course. We will be offering it in our studio in the coming weeks.

Thursday, May 18, 2017

Python Subclasses

As with  any typical object-oriented language it is possible in Python to create a subclass that inherits properties and methods from a parent or superclass. This is shown in our attached screenshots. The subclass (or child class) can inherit the methods as is or it can override them. This means they are redefined in the subclass. When an object is instantiated from the child class the methods not overridden will work just as they do in the parent class. The overridden methods will work as defined in the subclass.

Our little example shows a project manager subclass created based on the parent employee class. It overrides the salary computation to give a bonus rather than deduct an allowance. It also extends the class by adding a method to return the number of subordinates. Note also the use of the keyword super in the subclass to invoke a method in the superclass.

Subclasses in Java and Python
Click to enlarge view

Monday, May 15, 2017

Constructors (Initializers) in Python

When you define a class in Python you can include constructor functions (actually initializers in Python) to initialize the instance variables. You can define them to accept arguments when the class is instantiated or to accept no arguments. This accomplishes more or less the same thing as overloaded constructors in Java. In this latter case in Python you would initialize the parameter variables to a desired default value in the constructor declaration. You would not write a separate constructor. Here is the code...

 Expanded image of constructors
Click for enlarged view

Friday, May 12, 2017

Python Object Instantiation

Once a class has been created you can instantiate an object from it. In my example the class is in a different file and an import is used in the file that instantiates the class. In this case an employee object is instantiated in a payroll program. The screenshots show the parallel code and execution results in Python and Java.

 Screenshot on
Click to see enlarged image on

Thursday, May 11, 2017

Creating a Python Class

We are back to creating the Python coding course based on the same outline we used for Java coding. We are going to continue the parallel screenshots showing the code in pseudocode, Java and Python. This step shows how to create a simple employee details class. Just define a class and inside the class define your methods (functions). Later steps will instantiate the class,add a constructor, etc.

 Enlarged image on
Click to view enlarged image on

JavaScript Fiddle

Does everyone know about the JavaScript fiddle? I was working on some CSS snippets from McGrath's book and wanted an easy way to experiment. I found it in the online JavaScript fiddle. It has four panes: JavaScript code, HTML, CSS and results of running same. I think you'll find it pretty neat. It is web based and runs from anywhere in your browser. Try it!

JavaScript Fiddles

There are several other sites out there of this type.  Ideone  seemed very interesting as it features some 60 different languages.

Sunday, May 7, 2017

Project Libre Tutorial

The following is a simple little Project Libre tutorial you may find useful. It has 5 parts. It just takes a few minutes per part.

Project Libre Tutorial

Tuesday, May 2, 2017

Project Libre Resource View

Below is a screenshot of the of the resource sheet views in both Microsoft Project and Project Libre. As can be seen they are virtually identical. We will cover the Project Libre resource sheet in more detail in later posts in this series. The green shading in the Libre view means that the resources have been assigned in this project. Note that the screenshots are both of the same  ".mpp" file. Project Libre can read and write Microsoft Project files.

 Expand view on
Click to expand view on

Monday, May 1, 2017

Here is a summary of the years that various programming languages appeared. Again drawn from Wikipedia. I was looking for the release dates for R and other languages and software packages used in Data Science and decided to generalize the searches.

Sunday, April 30, 2017

Popularity of Programming Languages for Data Science

Below is a link to a study I found on This is a useful website if you are interested in data science. The study is from October, 2016 so is fairly current. It is based on data from as my earlier post was. It shows once again that Python, Java and R are the most popular programming languages for data science. Keep in mind , however, that R is a domain specific language for statistical computing. Unfortunately this study did not include commercial software, only open source. Thus SAS, etc. are not included.

KDNuggets - most popular languages for data science

Saturday, April 29, 2017

Project Libre

We are preparing a new Project course based on Project Libre. This is free, open-source project management software that can read and write Microsoft Project files. Our course will parallel our Microsoft Project courses as much as possible. I will try to post our slides and/or comparison slides as we go along. This should prove interesting to those interested to see how compatible they are. Click the image below to see an expanded version on It shows the basic Gantt Chart view of Project Libre compared to Microsoft Project.

 Click for expanded view on

Using Microsoft Project for Agile Projects

You CAN use use Microsoft Project for Agile projects. While it may not be the ideal tool it can be done if you use custom fields and filters, etc. Below is a link from that shows how. also has a video by Bonnie Biafore that shows how. Again making use of custom fields.

Anna Forss has a different take. Check out the link below. She works with the calendars and options.

Please note this is not an argument for or against the Agile methodology versus waterfall. I am just pointing out a couple of useful links. Most of our Microsoft Project clients have been in the construction industry which uses waterfall. On the other hand we see little interest in waterfall from software development, especially web, groups. They much prefer Agile methodologies, with Scrum seeming the most popular. In my opinion the choice of a methodology depends on the project and the domain. There is no one answer as to which is "best".

Friday, April 28, 2017

Popularity of some programming languages/IT skills

What follows is a little survey I did on on 4/28/17. I started off just looking for the popularity of the R language for data science but wound up broadening the search terms. I limited the search to my home state of California. It is not in  any way a scientific survey but it did prove interesting as far as it went. R ranked pretty high. Right behind Python and ahead of C++. C and SQL were the top two languages. Java was 3rd. We already offer a short coding class in Java and are developing one in Python. Perhaps we will do R next. A couple other observations are that the open languages are firmly in the lead. SAS had the most mentions of the commercial statistical packages.

I often say that SQL is a foundation skill for data analysis. This survey seems to bear that out. To that I would add Python and/or R for those interested in a data science career.

skill/termindeed mentions
microsoft excel28,420
microsoft access8,199
business intelligence3,390

Thursday, April 27, 2017

Students are often confused by the MPx and xPM Extreme Project management approaches. The following two links may shed some light on this. The first is a link to an article by Wysocki on the Extreme and Emertxe Project Management Models. These are two models used when solution paths are unclear. The second is a good blog post which summarizes the 5 life cycle approaches. It is based on experiences in the construction industry. As such the Extreme models are not used but the article does discuss them including the xPM and MPx approaches.

xPM and MPx Project Management Models

Blog Summary of 5 Project Management Life Cycles

Wednesday, April 26, 2017

La Palma STEM Symposium

Here are the slides for a presentation I gave on Big Data and Data Science at the La Palma, California STEM Symposium. This is a booming field for people interested in data analysis.

Wednesday, April 19, 2017

La Palma STEM Symposium

FYI - I will be presenting a brief talk on Big Data and Data Science at this symposium. It is mainly aimed at Community college students and the local community. See link below.

La Palma STEM Symposium


Monday, April 17, 2017

jGrasp IDE

We used jGRASP in a recent Introduction to Coding with Java class. It is not a production type IDE such as Netbeans or Eclipse but we have found it a good tool for introductory classes aimed more at casual users, beginning computer science students, etc. It has a lot of interesting features such as generation of UML diagrams, an interactions pane like the Visual Basic immediate window, object viewers, side by side columns for editing multiple class files, etc. It is lightweight and very quick to load. It will also handle Python, C, etc. But we have not yet explored that in any depth. Although we have used it for simple Python scripts.

On the downside it does not have a "smart editor" with intellisense type capabilities beyond simple syntax highlighting.

Friday, April 14, 2017

Instantiate a subclass in Java

The following code actually instantiates the project manager subclass of the employee detail superclass. It inputs the manager's id, name, etc. and then instantiates a project manager passing the variables just input to the subclass constructor which in turn invokes the superclass constructor.

This concludes the initial version of the programs and screenshots for the JVA101 Introduction to coding class. There is another lesson dealing with error handling (exceptions) which we may add in the future.

 View expanded image on
 Click to view expanded image on

Java subclasses

A class can inherit from a parent or superclass. This is done in Java with the extends keyword. The following snippets create a ProjectManager subclass from the EmployeeDetails superclass. Note that the subclass invokes code from the superclass using the super keyword. It also overrides the compute salary method.

 View expanded image on
Click image to view expanded image on

Using Java Constructors

Here is the code that instantiates an object form the prior EmployeeDetail2 class. It inputs an employee id. If the id is 0 it invokes the no argument constructor, otherwise it inputs the name and salary and invokes the constructor that takes arguments. On another note I forgot to mention that having multiple constructor with the same name is called overloading. We will see this same term later with methods.

 View expanded image on

Java constructor

This is the Java EmployeeDetails class with a constructor, Constructors are used to initialize the instance variables in an object when an object is instantiated form a class. If no arguments are passed in to the constructor then a no args constructor is applied. If the programmer does not supply a no args constructor then Java initializes the instance variables to default settings defined by their data type. You can have multiple constructors with the same name but their signatures must differ in the number of arguments passed.

 View expanded image on
Click on the image for an expanded view on

Java Object

Here is the code that instantiates an employee detail object and uses it to compute the employee's net salary.  Click on the image for an expanded view.

 View expanded image on

Java Classes and Objects

Here is the code for creating a Java class. This will create an employee detail class. Note the class has a private method which computes the allowance. This is used by the method which computes and returns the salary. There are also two methods to set and retrieve instance variables. These are sometimes called setters and getters.

In a later post we will instantiate an object from this class. We will resume our parallel Python files when we return to working on the Python course. Click on the image for an expanded view of the Java class on

 View expanded image on

Monday, April 10, 2017


Just finished the section on using builtins. I fudged a little as in Python I used string slicing instead of a substring function as in Java. This is kind of a cool feature in Python array handling. For example to pickup the first character in a person's name in Java I used

      String empEMail = empFName.substring(0,1);

Whereas in Python the code was

       empEMail = empFName[:1]

Which means everything before the character at index 1.

Click on the image below to see an expanded view of the three columns on with pseudocode, Java and Python.

 View expanded code blocks on

Saturday, April 8, 2017

JAV101 Java Course Link

Here is the link to our Java course. I should have posted it before,

JVA101 Introduction to Programming using Java

Python Course Development

As some of you know we are developing an Introduction to Programming with Python course. It will more or less parallel our similar class based on Java. Below is the outline as we have it so far. We just finished topic 3A and will be starting 3B shortly. Our first version is being built using Python 3.5.

Lesson 1: Introduction to Programming

Topic 1A: Overview of Programming
Topic 1B: Introduction to the Software Development Life Cycle

Lesson 2: Creating Simple Programs

Topic 2A: Work with Variables
Topic 2B: Work with Operators
Topic 2C: Control Program Execution
Topic 2D: Work with Lists

Lesson 3: Creating Programs Using Functions

Topic 3A: Create Functions
==>Topic 3B: Work with Built-ins

Lesson 4: Implementing the Object-Oriented Methodology

Topic 4A: Create a Class
Topic 4B: Create an Object
Topic 4C: Create a Constructor
Topic 4D: Create a Subclass

Lesson 5: Handling Programming Errors

Topic 5A: Fix Syntax Errors
Topic 5B: Fix Logical Errors
Topic 5C: Fix Runtime Errors

Java Programming Courseware

Below is the outline for our Introduction to Programming with Java Course (JVA101). This is a one day class designed to give the student an introduction to programming concepts using the Java language as the teaching vehicle. The courseware is from Logical Operations. Each student in our classes will receive one of these manuals.

Lesson 1: Introduction to Programming

Topic 1A: Overview of Programming
Topic 1B: Introduction to the Software Development Life Cycle
Lesson 2: Creating Simple Programs

Topic 2A: Work with Variables
Topic 2B: Work with Operators
Topic 2C: Control Program Execution
Topic 2D: Work with Arrays
Lesson 3: Creating Programs Using Methods

Topic 3A: Create Methods
Topic 3B: Work with Built-in Methods
Lesson 4: Implementing the Object-Oriented Methodology

Topic 4A: Create a Class
Topic 4B: Create an Object
Topic 4C: Create a Constructor
Topic 4D: Create a Subclass
Lesson 5: Handling Programming Errors

Topic 5A: Fix Syntax Errors
Topic 5B: Fix Logical Errors
Topic 5C: Fix Runtime Errors

The following is the link to the manual in their course catalog.

Friday, April 7, 2017

Links to IT Certifications

Here is an excellent link I received form the University that lists many certifications available. It is a good summary so I thought I would pass it along.

Tom's IT Pro Certification Links

Methods in Java and functions in Python

We were bound to hit a few bumps in the road in developing our Python class using the Java manual as an outline. We are at the start of chapter three. There are five chapters in all. At this point the Java manual discusses using methods. Since we have not yet gotten to classes (which aren't formally discussed until chapter 4) we are substituting functions in our Python material at this point. We can discuss methods later when we get to chapter four. Below is the thumbnail of the three column (pseudocode, java, python) screenshot on

 View enlarged image on

Changing Timescale in Project Libre

We are going to develop a new Project course based on the open source Project Libre. As with Python we did not find any suitable courseware manuals so we are developing our own. I downloaded Libre the other day and opened up one of our little Microsoft Project exercise files. As advertised it opened perfectly in Project Libre. Right away I noticed little differences: no auto-schedule/manual schedule, no dropdowns for duration, no question mark in the duration column, etc. The one that that was a little annoying was the lack of an obvious way to change the timescale in the Gantt chart. After a little searching on the internet I found one way is to use the zoom in and out commands on the resource tab. By the way, notice I said tab. Project Libre uses the same now familiar Icon Bar user interface that Microsoft Office uses. Below is a screenshot for changing the timescale.

Wednesday, April 5, 2017

Python Tutorial

Below is the link to a Python tutorial we have found useful. There are others we have used for matplotlib and numpy which we can post later.

Tuesday, April 4, 2017

Java arrays and Python lists

We used lists for our Python class to correspond to Java arrays. Python does have arrays but lists are actually closer to Java arrays. Our examples show both single dimensional and two dimensional arrays and lists. We processed the arrays using for loops to compute sums. Again, note that the Python syntax iterates over a range. Click on the image below to see an expanded image on

 View on

Monday, April 3, 2017

matplotlib tutorial

We are using a lot of tutorials to help us prepare our Python materials. I'll post some here in case others are interested. Below is a simple starter one for matplotlib, the Python plotting library.


Recently installed the Anaconda Python IDE. I was pleasantly surprised to find that it does, indeed, install many of the libraries such as pandas for data manipulation, numpy for arrays and matplotlib for plotting.  These are available from the regular command line as well iPython and Jupyter.The install went smoothly and only took a few minutes on my Windows 10 computer. The distribution was about 420 MB. This is what it installed. More about these in later posts.

Sunday, April 2, 2017

Loops in Java and Python

Below are the basic looping statements in Java and Python. Java has three: while, do...while and for, Python has two: while and for. But not do...while, although there are ways to accomplish the same thing. Also Python has an interesting approach to the for statement, sometimes called a for each. It iterates over a sequence selecting each element in turn. In the example below if counter is 15 it will iterate over i from 1 through 15.

   for i in range(1,counter+1):
      sum = sum + i;

On another note I decided I would I put the code for the Python scripts in a function and then called the function. This is more similar to Java which requires the existence of a class with a main() method. See the example below. It basically checks to see if the script being run is the main program, not an import.

def Loops():
   counter = 10
   i = 1
   while i <= counter:
      print("i = {}".format(i))
      i = i + 1

if __name__ == "__main__":


Click on the image below to see the code for the various loops.

 View loops in Java and Python

Saturday, April 1, 2017

Switch statement in Java and equivalent in Python

Here is another Java/Python comparison. This one for the switch statement in Java. I used elif in Python to keep it simple for beginners. Click on the image to see an expanded version on

Java and Python if statements comparison

Here is a comparison of Java and Python for the if statement. We are preparing our Python scripts to parallel (at least as much as possible) the Java class from Logical Operations. So we may as well publish them for our reference as well as anyone else who might be interested. It also includes the pseudocode. See screenshots on

jGrasp and Python

In the course of working on our new Python class we discovered you can run Python as well as Java from jGrasp. While I am not recommending this one way or another it did have a nice side effect. You can develop and test Java programs in parallel with their Python versions right in the same session. By the time we are done developing our new Python training material we should have a lot of side-by-side comparisons of the code for the same tasks. So far it has been running about 1/2 the code in Python vs. Java. While that is a substantial reduction it is not as dramatic as I thought it would be. I may do another parallel stream in pseudocode, mostly for use in college classes.

Thursday, March 30, 2017

New Python Course

I have been looking into Python lately, mostly with an interest in Data Science and Data Analytics. Python is a lot of fun and very powerful with access to a huge library. It has a very clean syntax which may be one of the reasons it has been gaining favor for beginning courses in computer science. So far I have not found any commercial courseware like the type available from Logical Operations and other vendors. So we are going to develop our own course! It will be based on our Introduction to Programming with Java course. We will loosely follow that topic outline using examples and practice files from Python. We will probably just use IDLE but could go with PyCharm or Anaconda or an equivalent IDE. Maybe down the road we can get into some of the neater stuff like numpy amd matplotlib, too.

Monday, February 6, 2017

Price Calculator

We added a nice little feature to our request information page. It will calculate and display the total price for a class. It automatically takes into account the appropriate discount level based on the number of students. Our clients often want to know the price for a group class. This should help them quickly get a rough estimate of what their price would be.

It was programmed by our new web development firm ChawTech Solutions. We have been very pleased with their work. At this time we are mainly having them work on behind-the-scenes PHP/MySQL scripting. Most of the course content for our web site is stored in a MySQL database and retrieved via PHP. ChawTech is helping us expand the modules that we use to create, update and display course content. Once complete the catalog pages will be automatically generated just as the course description pages are now.


Saturday, February 4, 2017

New Training Room

We moved our training room into a new suite (B-4) last week. We are back in the "B" suite where we were a few years back, but in a larger room. There is plenty of room both for our 4 desktop computers and the conference table with laptops. The server closet and office is attached with a door between the training room and the office.

This time we are going to have the projector ceiling mounted and all computer cabling hidden via cable runs or under table mounts. Coupled with our use of wireless keyboards and mice this should make the environment much less cluttered. With the extra room we also plan to add two more desktop computers. It would be nice if they were Mac's (or maybe one Mac, one Linux) but no promises.