Sunday, October 5, 2008

TX Unconference 2008

I just got back from the Texas Python Unconference 2008. It was alot of fun, great people to meet. Enthought is a really interesting company.

Texas Unconference 2008

You can find my presentation here:
Slides

Wednesday, August 20, 2008

Open Source LabVIEW Functions and Controls

I've started putting up some basic VIs for LabVIEW into the open source domain. Currently there are some functions for multi-needle guages (based off an array) as well as a function for quadrature decoding. The quadrature decoder can be used to decode a quadrature signal from an analog measurement by first converting it into a digital waveform. If you have any further questions, need help, or wish to further develop these VIs, please email me.

Here's the controls repository
http://github.com/xkenneth/lvcontrols/tree/master

Here's the VIs repository.
http://github.com/xkenneth/xlv/tree/master

Saturday, August 9, 2008

Building lxml on OS X

These instructions will get you up and running on either the system python, macpython (i'm fairly sure) or the macports python.

Install libxml2 and libxlst through MacPorts

In bash:
export CFLAGS=-flat_namespace
python setup.py bdist_egg --with-xslt-config=/opt/local/bin/xslt-config
easy_install theegg.egg

Thursday, July 31, 2008

How do you know when a piece of software is doing it's job well?

When you completely forget what it's called.


I had our IT staff install this a few months ago, on a generic HP stuffed with gigabit cards. Hasn't gone down since, and does an excellent job.

Friday, June 20, 2008

Disconnected - Cached Read/Write - Striped - Failsafe - Distributed File System

I'd like to push forward a distributed file system that follows all of the ideas below.

Striped - Fail-safe:
Striped for performance, and fail-safe up to N nodes, depending on the configuration. Something similar to RAID 6.

Disconnected - Cached Read/Write:
     Local processes would write locally to the disks and the DFS would cache the data, intelligently distributing it to the filesystem as need be. If the node becomes disconnected, the DFS will cache the data until the node becomes connected again.

The applications of this are extremely wide. The striping would allow for applications in high performance clusters. The the cached read/write would allow for "traveling" nodes, similar to version control systems such as Git/Mercurial/Bizaar, that become disconnected for periods of time.

My intended application would be to deploy the DFS nodes as cheap virtual private servers from a multitude of companies in order to attain reliability and not have to worry about an IT department and hardware costs. Even over the internet the striping from multiple nodes should allow for "torrential" throughput.

If you're interested in discussing this more thoroughly, drop me a line.

Tuesday, June 17, 2008

Awesome (OS X Server Slices)

A company has finally started slicing OS X Server

http://www.mediatemple.net/labs/xv/

Goodbye SVN Hello GIT

So I've given up subversion for git lately, and I'm not looking back. Git, gets out of my way, is easier to use, saves tons of disk space, is distributed, and generally not as big of a headache as svn is.

Migrating from SVN to GIT was easy (~10mins to migrate a grok and python project)

Some good resources:
Tutorial: 
Another: 
GIT vs SVN Command Comparison: 
A great git repository (not that it's needed): 
Migration guide: 
Linus addressing googlers: 
Syncing with subversion: 
Best Practices:

Monday, June 16, 2008

Annoying Grok Problem

When creating a grokproject for the first time or running it's buildout, have you ever encountered this?
Develop: '/home/xkenneth/bb/work/buildoutbuilder/src/buildoutbuilder.grokapp/trunk/.' Develop: '/home/xkenneth/bb/work/buildoutbuilder/src/buildoutbuilder.grokapp/trunk/../../buildoutbuilder.managers/trunk/' 
While:   
Installing.   Getting section app.   Initializing section app.   
Loading zc.buildout recipe entry zc.zope3recipes>=0.5.3:application.  
An internal error occured due to a bug in either zc.buildout or in a recipe being used:  ImportError: 
No module named schemaless

Well there's an easy solution.
Create a new virtual environment with the --no-site-packages option, and rerun the buildout/grokproject script from there.
Don't know what virtual environment is?
http://pypi.python.org/pypi/virtualenv
Don't know what buildout is?
http://pypi.python.org/pypi/zc.buildout
An excellent video introduction to buildout:
http://rhodesmill.org/brandon/buildout/

Sunday, June 8, 2008

OpenWITSML

I've created yet another project on openplans.org, OpenWITSML. WITSML is an XML schema defined by Energistics for transferring information in the drilling/energy industry. After attending the public seminar here in Houston, I've decided that an open source implementation of the client and server might be a worthwhile venture. If you're interested in the project, please sign up, the more people that get involved, the quicker this will become a reality.

OpenSurfaceSystem

I've just created a new project on openplans.org called OpenSurfaceSystem. This is an idea I've had for a while now, and I'd like to see if anyone else has interest in it.

Google Summer of Code Project Accepted!

My proposal for the Google Summer of Code was accepted! This post is a bit late as I've already been coding for a few weeks now. If you're interested in the Buildout Builder, feel free to check it out. 

Monday, April 7, 2008

Google Summer of Code - Schedule of Deliverables

Schedule of Deliverables

May 26th: Discuss and finalize options for hosting the Buildout Builder. Begin initial code work. Phase one begins.

Week One (May 26th to June 1st): Familiarization with buildout system. Hand pick selected stack configurations and test buildouts.

Week Two (June 2nd to June 8th): Begin grok development, initiate website design.

Week Three (June 9th to June 15th): Develop a backend to the buildout system inside of grok, complete with unit tests. Populate the site with selected stack configurations in an automated, extensible manner.

June 16th: Phase Two Begins

Week Four (June 16th to June 22nd): Allow the first phase of the Buildout Builder to be previewed by the community, receive feedback, remove bugs. Hand pick recipe and product configurations. Test initial build outs.

Week Five (June 23rd to June 29th): Extend website to present users with forms for selected buildout options.

Week Six (June 30th to July 6th): Further develop the back to allow users to custom recipes and products.

Week Seven (July 7th to July 13th): Allow the second phase of the Buildout Builder to be previewed by the community, receive feedback, remove bugs.

July 14th: Phase Three Begins

Week Eight (July 14th to July 20th): Extend the buildout system backend to accept arbitrary eggs, recipes, and Plone products.

Week Nine (July 21st to July 27th): Work expected to continue from previous week.

Week Ten (July 28th to August 3rd): Allow the third phase of the Buildout Builder to be previewed by the community, receive feedback, removes bugs.

Week Eleven (August 3rd to August 10th): Assess current project status and final deliverables. Stop major development and move to testing, bug-fixes, and documentation.

August 11th: Suggested "Pencils Down" Date.

Week Twelve (August 11th to August 18th) Continue minor development, testing, bug-fixes, community feedback, and documentation. Deliver project in final deliverable state.

August 18th: Firm "Pencils Down" Date.

Google Summer of Code Terminology

Here's a list of the various technologies I've discussed in my application.


Python code is generally distributed in packages. These packages generally contain classes and functions relevant to each other, and are generally used in conjunction. A standard way exists of distributing these packages in the form of distutils.

Distutils
handles automatic installation python modules, in a simple, organized fashion.

Python eggs take the distutils concept a step further by allowing python packages to include metadata such as version indication and dependencies among many other options.

Zope
is a state of the art web application framework written entirely in python, it servers as building blocks for building rich web based applications. Zope is extensible by the creation or "products" based on it's framework. Zope 3 is the most current version at the time of this writing.

The Zope Object DataBase is an object oriented database written in python that handles the pickling of objects and is the underlying core of Zope.

Plone is a content management framework written on top of Zope that allows even further extension through Plone products.

Grok is a much simpler web-application framework built on top of Zope, with aims to be much simpler and more elegant, while preserving the power and robustness of Zope.

LabVIEW is a graphical programming language that excels in the lab environment. It is especially suited for test, measurement, design and validation of any type of electro-mechanical devices and systems.

Google Summer of Code Application

Buildout Builder - An automated buildout configuration system.

Kenneth Miller
xkenneth@gmail.com
713-562-4315

Abstract

The buildout system has become an extremely useful tool for python developers and has become the de-facto method of deploying Plone configurations. For development buildout allows sand-boxing of python packages, enabling a developer to experiment with different configurations without modifying the underlying python installation and as a distribution mechanism it is useful to manage and deploy multiple configurations of Plone sites for either development or production.

A major drawback is that the underlying architecture relies on setup file based configuration, and can prove daunting to inexperienced users. In order to ease development, save time, and attract new developer's to the system I propose the development of the Buildout Builder. In it's most generic form the Buildout Builder will be a web-based graphical user interface to the buildout system and while in it's most refined form the Buildout Builder will provide pre-configured or user customizable buildout configurations of Plone.

With automatically generated buildout configurations, users can deploy software in a few commands or less. The application will target experienced developers and non-technical users alike, aiming for ease of use while maintaining the granularity of the buildout system. The Buildout Builder will exist as a web-app written in Grok. With it's simplicity, power, and active development and user base, Grok should prove to be an excellent framework for quickly deploying a rugged, easy to maintain application. The Buildout Builder will facilitate Plone deployment and ease buildout development creating an influx of new users to both technologies.

Phases of Development

Phase 1

The Buildout Builder will in it's first form exist as a way to distribute pre-selected buildout configurations for Plone. The pre-existing Plone configurations will have product software stacks tailored for different applications, such as E-Commerce, Wikis, Social Networking, Blogging and anything else that's possible with Plone. The system will draw upon the latest versions of popular recipes and products dynamically to generate configurations. All configurations will be critically selected, with user feedback generating the creation of new and fine tuning of current configurations.

Phase 2

The second phase will improve functionality to allow users more granular control over what's included in a particular Plone buildout, allowing users to assemble configurations based from selected products and recipes. The Buildout Builder will allow users to upload and use a previous configuration as a starting point.

Phase 3

The third phase of development will move away from pre-selected configurations, products, and recipes. The user will be able to include any combination of publicly available recipes and python eggs, truly exposing the full functionality of the buildout system. The Buildout Builder will interface directly to the Python Package Index, allowing users to select hand-pick eggs and recipes. If time allows, the buildout system will be extended to auto-generate installers for Plone configurations. Documentation will also be developed during this phase. Documentation will provide information for maintenance and future development.

Deliverables, Development Schedule, and Definition of Success

Success is measured by the completion of phases one and two, complete documentation, and the amount of work done towards the third phase. The time allotted should be ample to completely develop and implement all phases. The final deliverable will be a buildout configuration, accompanying recipes and eggs that compose the application. The final state of the code will be sufficient for installation in a hosting environment with little or no modification. A main goal of the project is to have an existing installation hosted, and available to the public.

A detailed schedule of deliverables is available. http://xkenneth.blogspot.com/2008/04/google-summer-of-code-schedule-of.html

Biography

Interest
Over the past year I have become more involved in developing software based on Zope and Plone related technologies and I hope to gain a very in depth understanding Zope, Plone and Grok.

Education
I'm currently a student at the University of Houston working towards a Bachelors of Science in Computer Engineering Technology. My main area of interest is digital signal processing and embedded systems design. Although my discipline is not computer science, I have always had a strong interest in the field. I have a very strong background in very low level programming with C and assembly, as well as much higher level languages such as PHP, C++, and Python. I've taken courses in subjects such as objected oriented design and data structures and hope to broaden my knowledge this summer with a course in automata theory.

Industry Experience.

Texas Instruments

I spent four years working at Texas Instruments as an applications engineer. I developed a web-based competitive analysis tool in PHP with a MySQL back-end. The tool encompassed user management, profiles, and user generated content, all written from the ground up. I developed a tool for quality and spectral analysis of analog to digital converters embedded in micro-controllers. The tool consisted of a hand written bare bones OS running on the ARM architecture that interfaced to a LabVIEW based control system and allowed users to analyze results and generate reports. I developed an application in LabVIEW for automatic detection of device validation requirements, selection, compilation and execution of pertaining test-cases, and automatic generation of results.

Teledrill

I currently work as a system design engineer for an oilfield start-up. Teledrill's primary goal is to develop a state of the art measurement while drilling tool. My projects include a python driven surface system, a web-based user driven interface that serves a number of purposes. It is used to configure the device, to receive, decode, display, and catalog the data the device transmits to it, as well as to provide the data to both other machines and humans in a number of various formats. The system relies completely on python technologies for analog data acquisition, web-based data display, protocol demodulation, data storage, and data relay. I've also taken on the task of managing our infrastructure including networking, software deployment, configuration and deployment of desktop and server systems.

Open Source Development Experience

I'm currently spear-heading an open source project titled "Python XML Serial Architecture." This is an effort to create a standard XML and Python driven interface to micro controllers and devices that use a proprietary or non-standard serial based communications protocol.

Conclusion

I've learned from my experience that I have a strong passion for automation and embedded design. The experience I have gained in the automation of complex processes allows me to have a clear view of what is required to complete this application. At its most basic level this project is the automation of time consuming repetitive tasks. An easy to use, web-based graphical user interface, will save users time, attract new developers, and spur the growth of the community surrounding these technologies.

Terminology: http://xkenneth.blogspot.com/2008/04/google-summer-of-code-terminology.html