Achievo and ATK Moving to Community Governance

The process has started to move the ATK Framework and Achievo projects to community governance from corporate governance.

Update 2012/07/19 – the GitHub organization created for the ATK Framework, ATK Demo and Achievo repositories is the ATK PHP Framework – https://www.github.com/atkphpframework (the code will be there soon!).

The ATK Framework is an open-source object-oriented full-stack PHP web application framework that enables rapid development of business-oriented web applications, such as HRM, CRM, data management and CMS. iBuildings created the ATK Framework in ~2000 and have closely managed its development project and project infrastructure, including a public web site, forum, wiki, bug tracker and code repository (although only iBuildings has commit access to the repository). iBuildings also controls the development projects of two closely related applications:

  • ATK Demo – a tutorial application demonstrating basic ATK Framework concepts, and
  • Achievo – a fully-featured and extensible resource management application based on ATK (iBuildings had used Achievo internally for managing development projects) .

I became involved in 2004 when I implemented Achievo 1.0RC1 as part of an engineering portfolio project management initiative for a high-tech product development team. Support from iBuildings was excellent, with senior developers responding to my forum posts and the lead developer even logging into my server at one point to help debug an issue related to hosting on Windows. More recently, I have selected Achievo (and the ATK Framework) for prototyping an open-source business support system for the fictional Swift Construction Company.

Over the past few years though, iBuildings’ involvement in the ATK Framework and Achievo projects has seemed to be declining, while community involvement has been growing. After a number of recent pleas from the community for iBuildings to make their intentions public, Tom Schenkenberg (iBuildings co-founder) confirmed our suspicions, but also graciously committed support for moving the ATK Framework, ATK Demo, and Achievo projects to community governance.

“… we took the business decision to no longer participate in active development and stop using this framework for our commercial application development work.”

“I’d like to offer anything and everything belonging to ATK/Achievo to you guys, the true maintainers of these projects. I’m happy to hand over the servers/domains/applications/websites/repositories/etc. to the community. Please help me to get ATK/Achievo in the right hands and in the right place.”

So how does a loose collection of independent developers scattered across the globe turn themselves into an efficient project team? Tom may have offered up the reins, but it’s up to us to decide where we’re going.

Since Tom’s announcement, an informal leadership team has been formed from community members, a GitHub organization has been created for the project code repositories, and documentation is starting to be written on the GitHub ATK project wiki. Once it has been decided how to best migrate the iBuildings svn repos to GitHub, the real fun will begin!

Adding to the excitement is a recent announcement from Ivo Jansch (former iBuildings CTO and now Eugeniq founder) that he was creating a “second incarnation of ATK” called Adapto, to be released under the business-friendly BSD license. Ivo originally conceived ATK, was its lead developer and power user within iBuildings, and is a copyright holder for much of its source. Here’s how Ivo describes Adapto.

Adapto will not be “focusing on anything that is already provided by common frameworks. So I would like to leave caching, view rendering, database connectivity etc. to an existing framework (Zend Framework) and have Adapto … just contain the code that makes it great. I also have ideas to extend the UI beyond just websites (think mobile/tablet apps).

… Another point is that the codebase is quite complex and one reason for that is the 12 years of legacy. By starting fresh and not worrying so much initially about backwards compatibility, we can leave some of that baggage behind.

So while the ATK Framework has a new team who will be focusing on maintenance and feature updates to ATK and Achievo (and documentation), Adapto will be under development as a future solution for concepts proven by ATK.  However, simply from its existence, Adapto also adds to the complexity of the ATK ecosystem. Not only will developers be considering the future of ATK and Achievo, they will also be considering the future of Adapto on ATK.

To provide some possible clarity into the situation, I’d like to offer this roadmap proposal for consideration (and hopefully some spirited debate). Comments are encouraged (but be warned, I will be re-posting relevant comments made here to the ATK forum and/or Adapto mail list).

Image of AtkAchievoAdapto Integration Roadmap (proposal)

Watch out for more news, it’s going to be a fun year!

Dale

Hard Drive Upgrade on Windows 7 and Fedora 17 Laptops

I recently upgraded the system drive in my Windows7 HP dv9000 laptop from its original 160G drive to a 500G drive using Clonezilla on a USB flash drive. I then used the 160G drive to upgrade my Fedora 17 T61 ThinkPad from its original 80G drive using using Clonezilla and System Rescue CD (also installed on a USB flash drive).

Step 1 – Windows 7 HP dv9000 Drive Upgrade

The first step was to clone my old system drive to the new one. I’d never used Clonezilla before, but installing it to a bootable USB drive was the hardest part of the exercise (download Clonezilla zip distribution, expand to a USB drive, execute Makeboot.bat – it’s all described under “USB setup with MS Windows – Method B: Manual” on the Clonezilla Live on USB flash drive or USB hard drive page). The dv9000 has two drive bays, so I moved the system drive to the secondary drive bay, put the new 500G drive in the primary drive bay, booted the laptop from the new Clonezilla USB drive, and accepted all the defaults for a disk to disk clone (including using novice mode). There was a confusing bit was when the screen text implied I needed to select an option with the space bar, but simply hitting Enter was what worked.

After cloning the drive, I removed the Clonezilla USB drive and the old system drive from the secondary drive bay, and rebooted. Woo hoo! Everything looks good, except I’ve got the same partitions on the new system drive that were on the old system drive (a ~159G “main” partition with Windows, my programs and my data, and a ~1G system restore partition where HP had put the WinXP install disks), and ~360G of unused space. The main partition needed to be grown to include the unused space.

Windows 7 Home Premium includes the capability to extend a disk partition, so I opened the Windows Disk Management tool (Control Panel / System and Security / Create and format hard disk partitions), but unfortunately found that partitions can only be extended into empty space on their right in the allocation display, and that’s where the system restore partition was. Hmmm….

The simplest solution was to delete the system restore partition, so everthing to the right of the 159G main partition was unused space. I rationalizing doing this as the system restore partition has the original 32-bit Windows Vista install, and since I was now using 64-bit Windows 7 from a DVD, and with no extra drivers needed, I didn’t think I would ever need the Vista install again. OK, right-click to delete the system restore partition, and another right-click to extend the (now only) partition. Easy peasy! I’ve now got lots more drive space for programs, pictures and video.

Step 2 – Fedora 17 ThinkPad T61 Drive Upgrade

Upgrading the drive in the Fedora T61 ThinkPad turned out to be a bit more complicated, partially because Fedora uses LVM  (Logical Volume Manager) and partially because the only USB flash drive the T61 would boot from (out of a half-dozen 1G to 8G drives) was the 1G drive I had installed Clonezilla on. Go figure, there must be magic involved in booting from USB drives (“Any technology sufficiently advanced is indisguishable from magic.”)

The T61 doesn’t have a 2nd internal drive bay like the dv9000, so instead of using Clonezilla to do a disk to disk clone, I cloned the T61′s 80G internal drive to an image file on an external USB drive (which was formatted with NTFS by the way), then replaced the old system drive with the “new” 160G drive from the dv9000, and cloned the image file to the new system drive (if I was more concerned about security, I should have wiped the drive first to eradicate its Windows data, but I didn’t).

Next I needed to extend the file system to make use of the 80G of unused space on the drive after cloning. Googling, I learned that Fedora 17 (and at least Fedora 16) by default creates partitions based on LVM (Logical Volume Manager), rather than a more simple system, which meant that extending a partition wasn’t going to be as easy as simply growing it into the unused space.

I had already assumed I was going to use GParted to grow an existing partition before I found out about LVM, and had gone ahead and installed System Rescue CD on a USB flash drive (because it includes GParted, and because I’d heard about it and had been waiting for a reason to try it out). Even though I now couldn’t use GParted, I still needed to boot the T61 with a live environment to work with the disk unmounted, so System Rescue CD still got a workout

I could probably have used the Fedora 17 live system I installed Fedora 17 with in the first place, except that the flash drive I had used had already been overwritten with Clonezilla, and then the System Rescue CD.

After a bit more research, making use of the unused space on the drive turned out to be a multiple step process:

  • Note the starting and ending cluster numbers of the LVM partition on the drive, and also the very last cluster number on the drive.
  • Use fdisk to delete the LVM partition (which removes the partition reference from the drive index structure, but doesn’t affect the data), and then create a new LVM partition starting at the same cluster as the original one, but ending with the last cluster on the drive (get what’s happening?)
  • Use pvresize to expand the physical volume used by the LVM, so that it occupies the entire partition (as extended by fdisk).
  • Use lvextend to extend the /home logical volume by the free space now available in the expanded physical volume (I could also have extended /root and /swap by giving up some /home space, but they seemed adequate already – /root was 45G and /swap was 6G).

The details are in the LVM Partition Resizing thread on LinuxQuestions.org (and a big thank you to mpdavig for a very clear and concise article!). I simply followed mpdavig’s instructions in a terminal shell from the System Rescue CD.

Dale

Using “new” PHP with “old” MySQL passwords

I recently encountered this error trying to connect Achievo to an existing corporate project-tracking database:

Critical: Unknown error: 2000 (mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD(‘your_existing_password’). This will store a new, and more secure, hash value in mysql.user. If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file).

To understand what’s going on, you need to understand a couple not-so-recent developments in PHP and MySQL:

  • MySQL version 4.0 and earlier used a 16-byte password hash, but starting with version 4.1+ uses a more secure password algorithm and 41 byte hash (although still supporting the older less secure password hash if needed).
  • The original external PHP module for accessing MySQL was mysql, but the current preferred module is mysqli (MySQL Improved).
  • The original low-level c-library that mysql (and mysqli) used to actually interface to a MySQL server was libmysql (included with MySQL), but starting with PHP 5.3 they are typically compiled with mysqlnd (a seperate project). mysqlnd has many advantages compared to libmysql, but it doesn’t support the old 16-byte MySQL password hash.

The database server I needed to connect to was running MySQL v5.0, and was configured with “old_passwords” set to On, which sets password operations to use the older 16-byte password hash (possibly because the original client/server application had been developed with MySQL 4.0 or earlier).

The simplest solution would have been to turn old_passwords Off and reset my password as the error message said (assuming the password column in the mysql.usr table would hold a 41-byte hash, otherwise its width would have to be increased first). However, the dba was loath to change the server configuration in case it broke existing mission critical enterprise applications, so I needed a different solution.

Since mysql and mysqli are compiled seperately, they can use different underlying c-libraries. In other words, mysql can be compiled to use libmysql – which supports the old 16-byte password hash. That would allow using mysql to connect to the corporate project-tracking database, without any effect on using mysqli to connect to other databases.

On a FreeBSD server, it was as easy as:

# pkg_delete php5-mysql
# cd /usr/ports/databases/php5-mysql
# make config  (uncheck support for mysqlnd)
# make install clean

and then edited the Achievo config.inc.php file to use mysql for the corporate database instead of mysqli.

Google Maps Experiment

I’ve been trying to spend a day a week of focused quality time at the keyboard working on Achievo, combined with a long weekly bike ride for thinking. Last Friday, I spent the day with my laptop in a quiet corner of the Mount Royal University library (my first alma mater). Although thunderstorms were in the forecast, I was feeling lucky and set out by bicycle (with a heavy-duty garbage bag for my laptop just in case). I made it to MRU without getting wet, enjoying beautiful but ominous thunderheads overhead, and was safe and sound by the time the rain started. Two thunderstorms later the weather cleared and I was able to ride home (steering clear of some major puddles!).

So here’s to the point of this post, my first embedded Google Map. It was pretty easy to create, but for some reason I can’t get the zoom level right in the image here (the top and bottom are always cropped). Oh well, you can always open the map by clicking the link.


View Calgary SW Bicycle Loop 1 (FCPP, MRU, Weaselhead) in a larger map

Ride on!

Fedora 17 on my T61 ThinkPad

On the encouragement of Victor, a low-level embedded ‘nix developer I had the pleasure of working with a few years back, I loaded Fedora 17 onto a T61 ThinkPad dev laptop (a recent glowing review on the Linux Action Show was added encouragement). I had avoided Fedora primarily due to its relatively short support period, but then thought “Hey, I’m not using it for my server,” (FreeBSD 8.3 has security support to June 2014) , “and I like the Fedora/REL relationship.” (REL seems to be the only ‘nix in local use that’s “corporately-approved” and even though I have no intention to leave FreeBSD, a greater familiarity wouldn’t be a bad thing).

Install was a breeze. I downloaded the F17 ISO and dd’d it onto a 1G usb key, configured the T61′s BIOS for USB boot, and backed up my OpenSuse ~/ directory. The T61 booted from the live F17 system on the USB key without issue and let me do some basic experimenting – configuring ‘net access through my WAP and a bit of repo browsing to make sure KeePassX was available. After seeing everything was OK, it was a couple clicks to install F17 onto the hard drive (the install even copied my WEP key from the live environment!).

The only issue so far is that I can’t shutdown directly from the desktop, first having to log out, and then shutdown (i.e., 2 steps). Could I be missing something? Meanwhile, I’m going to just suspend for now on and see how long I can go without a crash. Maybe it’s like a tablet, and Fedora is basically saying in normal operation you never actually shutdown.

Dale

P.S. I have put new howto in the knowledgebase for creating a PhpStorm / XAMPP/LAMPP / XDebug with Fedora 17. See How to install XAMPP and PhpStorm on Fedora 17.

 

Task Management – ToDoList vs TaskCoach

If you’re looking for free task management software, I’ve got a couple suggestions. If you’re managing tasks for a group of people and don’t mind Windows-only software, take a look at ToDoList. If you’re managing tasks for yourself only but need something cross-platform, then take a look at TaskCoach.

Task management is a level down from project management. I’m sure everyone is familiar with Microsoft Project, but there are actually more than a few enterprise-type applications available that would rival SAP in complexity. I needed a tool for my team that was less about calculating critical paths, resource loading, and slack time, and more about keeping track of the teams’ s multiple conflicting priorities so I could step in and lend guidance towards a bigger picture when necessary.

First, I tried FreeMind for several months. I liked the “everything draws from something else” nature of mind-mapping, and the team liked the graphical view of our collective tasks and how they related. On the downside though, it was hard to review tasks in a linear fashion in a meeting, so next I tried the Windows-only ToDoList.

I’ve been using ToDoList for almost two years now. It has a clean user interface, tasks are easily assigned, categorized and sorted, it supports hierarchical tasks (or sub-projects), and has a good selection of built-in filters and attributes.

However, recently I’ve started alternating between Windows and Unix laptops for Achievo development, and needed a cross-platform task manager (I should also say I’m currently the only developer working on this new Achievo functionality). After some research, I settled on TaskCoach for Achievo tasks. The user interface works well, and it’s similar enough to ToDoList that I didn’t need a neural reboot when switching between the two. So far so good for another month or two.

But then one day I found myself asking “Why exactly am I using two different task management tools?”. ToDoList and TaskCoach seemed relatively interchangeable, ToDoList has CSV export while TaskCoach has CSV import, and so I started on migrating my ToDoList tasks to TaskCoach without giving it a further thought. First came a minor irritation that ToDoList wouldn’t export the ‘Assigned-To’ for a task, but then I thought “No problem, I’ll just assign them later manually”, but then after another hour found it didn’t matter – because TaskCoach doesn’t support assigning tasks!

Note to self: Never dive in without giving something a further thought – especially when you’re absolutely sure you don’t need to!

I love PortableApps!

I was telling a colleague about the virtues of KeePassX and how it’s part of the PortableApps suite,  when I realized just how much I’ve come to rely on my PortableApps USB flash drive. Switching between various Windows desktops and laptops, it’s been convenient to have the same apps available on each system – but especially to have the same config settings and user profiles. The apps are all free, and almost all of them are open source. The convenience of the new PortableApps Platform is also really great, with automatic checking of apps for updating, and then downloading and installing.

Here are the PortableApps I’ve been using on a fairly regular basis:

  • 7-ZipPortable – zip and tar archive file utility (I use the extremely efficient 7zip native format as well, but not as often).
  • FirefoxPortable – as a consumer I tend to stick with IE, but as a developer it’s FireFox with plugins: Web Developer, Developer Assistant, PHP Developer Toolbar – and especially Pencil for wireframing.
  • FreeCommanderPortable – a nice dual-pane file explorer with lots of goodies, and supports remote file systems using FTP.
  • GIMPPortable – for advanced bitmap graphics editing (no way can I justify PhotoShop for the occasional use I need).
  • WinHTTrack – for cloning websites locally for offline browsing or easy local inspection of HTML/images/content (WinHTTrack isn’t actually a PortableApp, extract the portable version from the Httrack project to the PortableApps directory, then refresh the men app icons).
  •  IcoFXPortable – for editing application icons.
  • InkscapePortable – for creating and editing vector graphics drawings (an alternative to Adobe Illustrator or CorelDraw – which I also can’t justify for only occasional use).
  • InfraRecorderPortable – a basic CD/DVD recorder (it’s nice to have the same recorder handy, regardless of what might be installed locally on a system).
  • IrfanViewPortable – my Goto graphics file utility for viewing and simple manipulation (cropping, scaling, filtering, converting between file types, etc.).
  • LibreOfficePortable – Fully-featured office suite for when MS Office isn’t available (maybe one day LibreOffice will merge back into OpenOffice, but I’m not holding my breath).
  • LightScreenPortable – an easy to use simple screen shot grabber.
  • Notepad++Portable – my Goto text editor for simple text and source code with syntax highlighting when an IDE is too much.
  • PDFTKBuilderPortable – Basic PDF manipulation such as compiling multiple documents into a single document, extracting one or more pages from a document, rotating a page in a PDF document, etc.
  • PuTTYPortable – the defacto ssh client (I especially like right-clicking to paste highlighted text at the cursor).
  • SumatraPDFPortable – in case Acrobat Reader isn’t installed (which is rare), but also as an alternative – sometimes it will render a not-quite-standard PDF when Acrobat Reader refuses to.
  • SynkronPortable – for synchronizing directories (e.g. between a local directory and one on my PortableApps USB flash drive).
  • TaskCoachPortable – TaskCoach is a cross-platform task manager I’ve started using for personal web app projects so it doesn’t matter whether I’m currently on a Windows or a Linux laptop.
  • ToDoListPortable – is another task manager, but Windows only. I started using this one first, and I’m still using it (as well as TaskCoach) because it supports assigning tasks to different users and then filtering on assignee (whereas TaskCoach is pretty much for one user’s personal tasks only).
  • VirtuaWinPortable – provides multiple virtual desktops for making sense out of too many open windows (although unless you have a fast processor and lots of RAM, you’re probably better off closing windows instead).
  • WinDirStatPortable – for understanding where all my drive space has gone.
  • winMd5SumPortable – for calculating and verifing md5 file checksums.
  • WinMergePortable – for three-way code merging, although mostly I’m using it with only two files for a nice graphical comparison of differences.
  • WinSCPPortable – another dual-pane file explorer, but with one of the panes being a remote Unix file system accessed via scp.
  • XAMPP – a Windows Apache/MySQL/PHP stack for web app development, plus a few extra goodies (you have to download XAMPP separately and extract to the root of your USB flash drive, and then use the XAMPP Control Panel PortableApp for easy access).

 

Adding Up SaaS Applications

Incorporating SaaS applications into an enterprise’s business processes can offer a number of advantages, including:

  • focusing internal resources on core strategic strengths instead of infrastructure services
  • being able to pick the best fit from a variety of mature low-risk best-of-breed applications
  • lowered internal IT hardware and support costs
  • well-defined costs

But as always, nothing comes for free and the cost of individual applications adds up quickly. For example, assuming a sales and development SME on a growth track with 100 employees, including a 10-person sales team, a couple senior admin/HR roles, consolidated project management across the organization and a product engineering team who working with part numbers and bills of materials, and using the following SaaS applications:

  • Taleo Recruit for talent recruiting – $500/month (Taleo Business Edition Recruit module, 5 users)
  • Saba People Cloud for basic talent management – $500/month (based on competitor Kapta pricing of $5/person/month)
  • Salesforce for customer relationship management – $1250/month (Enterprise version, 10 users)
  • KnowledgeTree for document management (engineering, legal, administration, etc.) – $2000/month (100 users)
  • Basecamp for project management – $99/month (100 projects, 40 GB storage)
  • Aligni for engineering to manage parts and bills of materials – $199/month (< 10,000 parts)

The total is $4,548/month, and doesn’t include an ERP system for managing financials – which could add another $3,330/month (for either a basic system with limited extensibilty, or the base price for an extensible system before add-ons and customization).

Now, I’m not saying this isn’t money well spent, and for many organizations it is. But bear in mind it’s cash off the bottom line and attention (a rare and precious commodity) taken away from something else in order to learn something new. Carefully consider the complete value – and the complete cost – before signing up for another monthly payment on a credit card, because that’s the easy part.

SourceForge, Encryption, and U.S. Export Control Restrictions

I was registering the Adapto project on SourceForge today, and when I got to the Export Control question, ended up spending more than few minutes researching U.S. export regulations relating to software and cryptography. Be warned though, I am not a lawyer and the following is not legal advice. I urge you to consult a professional for advice specific to your situation.

SourceForge is operated by Geeknet, Inc., a publicly traded US-based company. When someone outside the U.S. downloads code from a SourceForge project, SourceForge is actually exporting the code from the U.S.

Export of software including cryptography functions from the U.S. is controlled by the Bureau of Industry and Security (BIS) according to the Export Administration Regulations (EAR) and the Commerce Control List (CCL). This includes software that only calls encryption functions in an external library, such as the PHP openssl_public_encrypt and openssl_public_decrypt functions.

In 2010, the BIS amended the EAR by excluding software products where the use of encryption is ancillary to its primary function and the primary function is not information security or the sending, receiving or storing of information, where the cryptographic functionality is limited to supporting the primary function of the software product, and when details will be provided upon request to a U.S. authority (see EAR Controls for Items that Use Encryption on the U.S. BIS website).

Adapto is a small PHP framework targeted at creating data management applications with minimal code. Although Adapto includes cryptographic functions (implemented through PHP library functions), they are provided only for potential use by an application program and are not used in the normal operation of the framework. They are also not used in the tutorial demo application included with Adapto, and so it appears export of Adapto from the U.S. is not controlled.

Since Adapto does incorporate encryption, it has been noted in the SourceForge project Metadata, but since it is not controlled based on the above analysis, the project does not require reporting to the U.S. government as noted by SourceForge.

 

Git on Windows

Update 2012-09-14. Install Git-Extensions – nothing else needed! (msysgit and kdiff3 are included in the install).

I’ve been happily using Mercurial for personal projects (the cli on Unix and TortoiseHg on Windows), but avoiding Git has been like holding back the sea. The dike finally broke on Saturday, when Ivo Jansch announced he was forking ATK (the incredibly efficient PHP web app RAD framework he had created while at iBuildings), and I could see Git was going to become a much more significant part of my development flow (more on this to come I hope).

Refreshing my memory of Windows Git clients, it seem the main choices are:

Git for Windows (aka git-gui) is the official Windows client. I’ve tried it before and it works, although not as polished as TortoiseHg.

SmartGit, although commercial software, is interesting because it supports both Git and Mercurial, and a review recommended SmartGit for new Git users. The review also said SmartGit is “free for personal use”, but my interpretation of the free non-commercial license is that including SmartGit in any revenue-generating activity is not allowed. In other words, I don’t believe the license permits you to use SmartGit for managing your open-source project if you are also selling services related to the project. That said, I’m going to try out SmartGit first – if only to get my Git-legs back.

TortoiseGit is a port of TortoiseSVN for Git, and I suspect what I will eventually be using -  unless SmartGit is so impressive that I’m willing to part with $80 for a single-user commercial license.

I’ll update you after spending a couple weeks with SmartGit and TortoiseGit.

Dale