Tuesday, October 29, 2013

Alan Kay, Pioneer of GUI's, Graphics and Object-Oriented Programming, 1987 Video

Alan Kay, 1987
While I was watching Berkeley Professor Brian Harvey's Computer Science 61A: Structure and Interpretation of Computer Programs lectures, I came across an included video during the 2010 lectures #5 and #6 featuring rare footage of Alan Kay giving a talk in 1987 on object-oriented programming and the history of early computing milestones as pertains GUIs, graphics, interactivity, networking and code.

An excerpt from Alan Kay's Wikipedia article offers the following relevant info:
"In 1966, Alan began graduate school at the University of Utah College of Engineering, earning a Master's degree and a Ph.D. degree. There, he worked with Ivan Sutherland, who had done pioneering graphics programs including Sketchpad. This greatly inspired Kay's evolving views on objects and programming."
...
"Kay is one of the fathers of the idea of object-oriented programming, which he named, along with some colleagues at PARC and predecessors at the Norwegian Computing Center. He conceived the Dynabook concept which defined the conceptual basics for laptop and tablet computers and E-books, and is the architect of the modern overlapping windowing graphical user interface (GUI)."
Relive some exciting moments in computing history with these videos!!
(FYI: Alan starts talking at 2:38 minutes into the video after Brian Harvey's introduction.)


 Along with Alan's presentation are excerpts of a demo for the "Sketch Pad" given by Ivan Sutherland from 1962.

Ivan Sutherland, Sketch Pad demo, 1962

You'll also see parts of Douglas Engelbart's 1968 amazing Mother of All Demos. An excerpt from Wikipedia describes more on the demo:
"The Mother of All Demos is a name given retrospectively to Douglas Engelbart's December 9, 1968 demonstration of experimental computer technologies that are now commonplace. The live demonstration featured the introduction of a system called NLS which included one of[1][2] the earliest computer mouses as well as of video conferencing, teleconferencing, hypertext, word processing, hypermedia, object addressing and dynamic file linking, revision control, and a collaborative real-time editor."

Douglas Engelbart, Mother of All Demos, 1968


Sunday, October 27, 2013

CloudBees Palo Alto 2013 Jenkins User Conference (JUC)

The 2013 Jenkins User Conference (JUC) held in Palo Alto last week was both educational and inspirational. Kohsuke, creator of Jenkins, gave the keynote speech and two tracks for presentations followed, affording a variety of content to choose from. I was fortunate to meet attendees from Netflix, Evernote, VMware, Tesla as well as others in the DevOps community using Jenkins and find out what they were up to with regards to Continuous Integration and Delivery (CI/CD).

Kohsuke's keynote speech

This is the JUC description from the CloudBees site:
The Jenkins User Conference focuses on Continuous Integration (CI) as the fundamental best practice for enterprise software development. Our presenters are experienced Jenkins open source developers, executives, business managers, architects and authors who are luminaries within the Jenkins community. They represent the many organizations around the world who are leveraging the use of Jenkins within the application development lifecycle.

Stas Zvinyatskovsky
(Presenter from Yahoo!)
My favorite session was presented by Stas Zvinyatskovsky from Yahoo! titled, "Implementing Continuous Delivery at Yahoo!" From what I've heard some or all of the talks will be posted online in the near future. Once they are posted I will update this article with a link.






A couple plugins and tools I learned about at the conference, which I'd like to check out included:

A delicious Jenkins cupcake
  • DSL plugin - The job-dsl-plugin allows the programmatic creation of projects using a DSL. Pushing job creation into a script allows you to automate and standardize your Jenkins installation, unlike anything possible before. 
  • Audit Trail plugin - Keep a log of who performed particular Jenkins operations, such as configuring jobs. 
  • Sonar plugin - SonarQube is an open platform to manage code quality.
  • Folders plugin - This plugin allows users to create "folders" to organize jobs. Users can define custom taxonomies (like by project type, organization type etc). Folders are nestable and you can define views within folders 
  • Monitoring plugin - Monitoring of Jenkins / Hudson itself with JavaMelody. Open the report (or [http://yourhost/monitoring]) after installation. 
  • Xcode plugin - This plugin adds the ability to call Xcode command line tools to automate build and packaging iOS applications (iPhone, iPad, ...). 
  • Liquibase - Source control for your DB

Saturday, October 26, 2013

Passing Jenkins Build Variables Using PowerShell's "invoke-command" Cmdlet

Sometimes it is the small things that can take up most of the time when I'm working with PowerShell scripts in Jenkins. I call this the PowerShell Pareto Principle! Usually it is a syntax issue that bites me, but recently I had trouble passing in build variables using the invoke-command cmdlet. This example should clear things up if you encounter the same perplexities which stumped me.

invoke-command your_remote_servername {param(
   [String]$BUILDID,
   [String]$BUILDNUM
   )
   write-host JENKINS-$BUILDID-BUILD$BUILDNUM} -ArgumentList $env:BUILD_ID,$env:BUILD_NUMBER

By using the ArgumentList argument of invoke-command you can pass in outside variables into the Jenkins PowerShell plugin, executing code targeted for a remote server running the WinRM service. That's Hot!™

Wednesday, October 16, 2013

HELP! : The Biggest Thing Missing From The Jenkins Continuous Integration System

Recently I've been doing a lot of automation work using Jenkins - so much that I haven't written much online for the past year. My biggest Jenkins complaint is the sparse documentation of the many features and plugins as well as finding articles which put build tasks together to create a "Rube Goldberg machine" of automated bliss.

For starters I recommend reading "The Jenkins Definitive Guide" O'Reilly book. (I'm guilty of not having finished the text myself and ought to heed my own advice!) While the book covers a breadth of topics, it is the little things (e.g. the syntax of calling a Powershell one-liner with spaces and quotes) that often take up a good chunk of time during the initial configuration of jobs and can frustrate even the most patient of implementors.

What I have found using continuous integration automation systems (cruise control, hudson/jenkins) over several years is that art can emerge amid a string of hacked together disparate processes. Yes, no doubt, sometimes a Jenkins job really is just a hodgepodge, ragtag group of mishmash scripts glued together to form a solution. However, every now and again great things develop, with the shifting and shuffling of build jobs, a beautiful process is born from the thickets. These elevated build chains can become a pragmatic example of CI and agile programming fundamentals put into practice, placing theory at the tip of a button push. What great satisfaction!

As I begin to journal on my Jenkins experiences, it is my hope that my whimsical writings may help others save time and frustrations in learning to use a wonderful automation framework, which may very well become the corner stone to your continuous integration automated processes, whether planned for or not! That is just how it goes sometimes when you combine automation with an open source executor in a suit willing to do your scripted bidding . (As an added bonus Jenkins will also do your job for you, take out the garbage and walk the dog - simultaneously.)