This blog is now obsolete. Go to scott.arbeitman.id.au for all new content.

Showing posts with label software. Show all posts
Showing posts with label software. Show all posts
1

Great Post About IT Restrictions in the Workplace

| Saturday, September 5, 2009

My friend, former coworkers and MBS alum has a thoughtful post following on some of the themes from a previous post. In it, he sites a great Slate article which argues for a loosening of IT restrictions:

…The restrictions infantilize workers—they foster resentment, reduce morale, lock people into inefficient routines, and, worst of all, they kill our incentives to work productively. In the information age, most companies’ success depends entirely on the creativity and drive of their workers. IT restrictions are corrosive to that creativity—they keep everyone under the thumb of people who have no idea which tools we need to do our jobs but who are charged with deciding anyway.

Ameel thoughtfully concludes that IT departments would be wise to add their own in-house analysts to match IT tools available to those in the company who might need to use them, lest services be blocked somewhat arbitrarily.

What is often missing is…:

  • In-house IT Consulting: the people who liaise directly with different parts of the business and use the latest technologies to improve the way those people work
Without that fourth part, IT departments have a hard time keeping up with what people in the organization believe are the most effective and efficient ways of doing their work. They also don’t keep up with the latest technological solutions for various business problems.

I couldn't agree more. I'd like to think that my former team in Melbourne Business School performed that function admirably. Often, we would just connect business users with simple off-the-shelf services that would dramatically effect productivity. Three examples would be Confluence, Google Groups, and Google Desktop, but there are many more.


0

Minor Thesis: Inference of Enumerated Types In Java

| Wednesday, September 2, 2009

If you're not from the Computer Science discipline, you can safely skip this post.

After doing some hard drive spring-cleaning, I came across the Latex files relating to my master's thesis at the University of Melbourne. Although I undertook a Masters of Software Systems Engineering by coursework, I was able to write a minor thesis in lieu of 2 subjects.

At the time, compilers and type analysis were of particular interest to me, having thoroughly enjoyed the Compiler Design class at McGill several months earlier. In that class, we wrote a compiler for a toy language called WIG and added features to an existing compiler for the JOOS language, a subset of Java. We used the SableCC lexer/parser, an open source compiler compiler written by another McGill student. I remember staying up several late nights before the project was due. It was great fun.

The forthcoming language enhancements in Java 5 provided a good platform for static code analysis and enhancement; a similar paper inferred generic types, for example. I had also competed a survey of programming languages class which compared functional, logic and imperative language (Haskell, Prolog and Java respectively) taught by Peter Schachte. Peter was kind enough to supervise.

With that background, I thought I would post the PDF of the paper I wrote. I'm not sure if this is the exact paper I submitted, and it certainly includes some typos and, having reread it recently, I can see that my writing needed a bit of work. It is very difficult to decipher some of the content. I suspect I used the most complex symbols and wording possible, but I had slaved through reading similar papers during my research so I must of thought that was the best way to do things.

Without any further ado, please find my paper, Inference of Enumerated Types In Java in PDF format. Note that this paper has not been published in any journal, and has had minimal peer review. It is presented for educational purposes only. However, if you'd like to chat about it, do get in touch.


0

Microsoft and Google Compete To Supply E-mail to America's Universities

| Tuesday, August 18, 2009

From Time:

Students have been howling that school e-mail accounts are too small to handle their daily deluge of mail and attachments.

This is the same technology gap I blogged about the other day. Most universities are taking note:

In the 2008 national Campus Computing Project (CCP) survey, 42% of schools reported that they had already migrated or were about to migrate to an outsourced student e-mail service. Another 28% said they were considering switching.

This can only translate into corporate adoption of similar practices. Google hopes this leads to mainstream (read: corporate) adoption of web e-mail.

Even if it doesn't boost short-term profits, Google hopes serving schools for free will help broaden acceptance for Web-based e-mail and software services, says Jeff Keltner, who heads Google's Apps for Education team.

I hope he is right.


3

The Technology Gap: The Street vs. The Enterprise

| Monday, August 17, 2009

I remember reading an article in a men's fashion magazine a few years ago. It said that because the "street" trend was to wear pants lower and lower, this caused the style of "corporate" pants to also have a low waste.

First of all, thank God for that. It was have been difficult transitioning from student clothes to corporate attire had that attire being up to my navel.

Second, this highlights the natural trend that things happen "on the street" before corporations adopt it. This is an interesting phenomenon by itself, and it is interesting how it applies to technology.

Here's a typical scenario.

At work, you probably use Windows XP. Your e-mail experience is either Outlook, which crashes often, or Outlook Web Mail. No doubt, you have mastered the art of sorting your e-mails by date then recipient to track conversations. At home, you probably use GMail. You're conversations are nicely clustered together, and when you can't find something, a quick search is all it takes.

At work, you might even be using Internet Explorer 6. At home, you might be using Firefox, Safari, Internet Explorer 8 or Chrome. All of these things have the killer web browser feature: tabs. Tabs, of course, have been around for nearly 10 years. However, you likely have several windows of IE 6 open, and naturally, because you are using Windows XP, this slows down your system considerably.

Even at Melbourne Business School, I'm somewhat appalled that my Data and Decision class is designed for those running Windows XP and Office 2003. These are technologies from 2001 and 2002 respectively. I use a Mac, but the class relies on a plugin (StatPro) that only works on Windows. I refuse to buy a Windows license, so I'm running a VM with Windows 7 RC and Office 2007.

If the technology and ease-of-use gap between your corporate (and study) technology life and your home life frustrates you, you're certainly not alone. Gen Y and beyond are going to start demanding that their technology experience is not degraded when going to the office. Employers would be wise to take note; the productivity savings could be enormous.

Upgrading Internet Explorer 6 would be a good place to start.


0

Learning Tip: Speed it Up!

| Friday, August 14, 2009

I have recently come of a contract at Tricycle Developments, and one of the projects I was working on was a site called Podshifter. The concept is simple: take a podcast URL, look at the MP3 enclosures, and speed them up. The new iPhone OS likewise has a feature that will play back your normal podcasts at so-called 2× their normal speed (I think it is actually 1.5×).

The revelation here is that we can process audio much faster than we hear it. This is often why we tune people out, even when they are right in front of us. They are simply speaking too slooooooowly. [We sometimes hear tips when presenting to talk slowly. I find this to be a bad idea.]

So, for audio, check out Podshifter or upgrade your iPhone/iPod Touch if you've got one. If you have existing audio files that you'd like sped up, you might give Huffduffer a try to create Podcast with audio enclosures. Then, feed that podcast to Podshifter.

For video, things aren't as straightforward. If you're taking video podcasts on the go, you're probably out of luck. However, if you have a PC or Mac handy, VLC does a good job of speeding up videos. Just press + when your movie is playing. Each time you press it, your movie will play faster. Unfortunately, there isn't an easy way that I know of to export the faster video. If you know, do leave a comment.


1

Moving to Ruby Full Time

| Thursday, May 14, 2009

I recently started new job, which has involved near full time Ruby on Rails development. I have previously done some minor projects in Ruby and Rails, but for the most part, I have been using some combination of ColdFusion, Java and PHP for most of my professional career. I thought I would note some of my observations about using Ruby as compared with some of the other languages.

Readability: Ruby is well known as the "glue that doesn't set" meaning that Ruby code remains easy to read, even after a leaving it for a significant amount of time. This is hard to argue with. Anyone who has ever explored a Rails model or read an RSpec test can easily see some of the virtues of Ruby. Compared to most language, Ruby wins hands-down. But, the problem arises when it comes to

What-the-hell-is-going-on-ity: The readability of Ruby comes from its many metaprogramming features. RSpec does a great job of adding the right methods to Ruby classes, as does Rails. But this means that a lot of code or methods are added for you. Control flow and the definitions of methods become difficult to pinpoint. The more simultaneous frameworks you use, the greater chance of confusion. All this while your code remains quite easy to read. But what about trying to debug or add new features. This is where the problems start to creep in. By using the much more verbose Java, we can still have our dependancies documented and explicitly referenced in our code. Yes, this creates noise which makes our code harder to read, but it also leaves breadcrumbs as to what is happening.

Community: This is sometimes overlooked when considering which language to learn. It doesn't just matter the size of a community, but the quality of it. ColdFusion has a relatively small community, but is active and friendly. I can easily name the hot-shots of ColdFusion and I can subscribe to their blogs with too much information overload. In contrast, the Java community is probably too big. Frankly, I wouldn't know where to start when looking for blogs to subscribe to.

Ruby is a funny creature. The Ruby community seems small. On the other hand, the Ruby on Rails community is large. It's rare to find a Ruby programmer who doesn't use Rails. And Rails certainly has its "key people" and finding Rails tutorials and podcasts is pretty easy. You're not likely to find such a wealth of knowledge for most other frameworks like Model-Glue or Spring. But if you're interested in Ruby qua a programming language, you can get a great start here, but good luck after that. This can keep you from writing really excellent Rails code for quite some time, somewhat delaying superior readability of your Rails code.

Perception: Justified or not, ColdFusion gets a bad rap as dying and/or expensive platform. I've been hesitant to dive head first into the world of ColdFusion since I'm unsure of its future. Ruby, by all accounts, is, has been and will continue to be on its way up in the world. Rails too. With its adoption on the JVM and .NET, its attraction will only grow. Java, in comparison, seems stale and while its probably not going anywhere, it's best days are probably behind it.

Employability: Most Ruby jobs are Rails jobs. Knowledge of other frameworks are usually not required. Although Rails incorporates features from a number of frameworks in the Java world (Hibernate plus Spring MVC, for example), it is still a single framework. You either know Rails or you don't, and it is rare you will receive a Ruby language exam when applying for a Rails job. In contrast, Java jobs often require in depth knowledge of Java (garbage collection, intricacies on serializability, the Liskov Substitution Principle, etc) and knowledge of several Java frameworks (Java EE, Spring, Hibernate, Axis or whatever). This is a lot know, and it forces Java programmers to pick their niches early in their career and makes it hard to break out of it. For example, can you really go from being a Spring middleware guy to write UIs using the Google Web Toolkit? Not easy, to be sure.

ColdFusion has the opposite problem: if you know the language, that is usually sufficient. Sometimes, experience with an [any?] MVC framework is desired. Of course, if you know Rails, for example, then you do know an MVC framework and really shouldn't hesitate to apply.

Sum it All Up

So what does this all mean for you? Well, if you're interested in the web space and you don't mind somewhat limiting yourself there for the time being, Rails is a good place to start. But because you probably don't know Ruby of Rails, there is going to be a steep learning curve.

If you have confidence in ColdFusion and its future, I have certainly enjoyed my team in that space, but you should really force yourself to understand and integrate with the Java world that powers it. That should cushion you, just in case pessimists like me are right. Learning an MVC framework like Model-Glue, or learning to integrate with Flex front-ends would be time well spent too.

If you've just finished university, chances are you already speak Java. This is great, but is really just the beginning of the skills you'll need to work in the Java world. Learning a couple of Java frameworks (Spring and Hibernate go well together) should help you find that first good job.

If you are otherwise an experienced Java guru, look at Rails with JRuby. You might realize you have been writing way too much code that nobody else can read.


1

Tools of the Trade

| Wednesday, April 1, 2009

When at work, many of us are using Windows when are hearts might be elsewhere. As I wind down work with my current employer, I'm taking not of the tools I installed over the past 18 months which has significantly boosted my productivity. Here they are in no particular order.

Confluence

An enterprise wiki developed by a very switched on Australia company, company has been a great tool to share knowledge. Since we adopted it, I don't believe there has been a single file stored on the shared drive. Everything in Confluence is searchable, taggable and can be edited without opening Word.

Mingle

I've blogged about Mingle before, but its worth repeating: Mingle is a great tool. Its easy to use and does a very small amount of things reasonably well. Unfortunately, it was introduced into a team which wasn't very disciplined with project management (and our one project manager left several months ago) or time tracking so it didn't transform the way we work as much as I would have liked. However, if anything was going to work, Mingle was it.

ObjectDock Plus

ObjectDock is a Windows utility which mimics the dock on Mac OS X. Aside from the nice looks (it does suprisingly well, even with very low quality icons), it definitely increases your productivity. I have basically eliminated using the Start menu and can quickly open documents with specific applications just by dragging them to the dock. I use the Plus version and it money worth spending. I am able to move my system tray to the top of the screen (like the Mac menu bar) which makes a bigger difference than you would otherwise expect.

Google Chrome

The early adopter that I am, I quickly tried out Google Chrome when it was released. It turns out the speed is the killer browser feature. I've strayed to other browsers on occasion (Safari 4 Beta isn't bad) but I keep coming back to the Chrome. Lots of you out there rely on Firefox and her extensions. I hear you, but that's just not me.

Excel 2007

Nothing has improved my ability to analyse data more than Excel 2007. It seems to crash less than most Office applications, and the way it handles pivot tables is surely the way nature intended. The is extended to how it works with OLAP cubes; Excel is definitely my preferred OLAP client. For added value, impress your boss by using the data mining plug-in to do some incredibly useful tasks.

E

E is a text editor for Windows based on Textmate for Mac. I still prefer Textmate, but E comes close. I was never able to get the Cygwin integration working, but then again, I'm not as big a Unix geek as some. Still, e is a great lightweight text editor that gets out of your way, quickly opens files as text (even if they're not) and is always a right click away.

Jing

Jing is a very lightweight tool that allows you to quickly take screenshots or screencasts. It is free and has almost no features, but I wouldn't use anything else. It sits on the edge of your screen as a translucent sun, waiting for you to click it. When you do, you decide, image or movie, and off you go. You can't edit videos, but you can draw, highlight and annotate screenshots. Its always available, doesn't consume many resources and "just works". Combining Jing and Confluence can create a very simple but powerful platform to document your software systems and create how-to guides for your users.

This is an image taken using Jing that brings it all together: Chrome + Confluence + Jing + ObjectDock.

image
0

Dynamics CRM 4: Discovering the SQL behind an "Advanced Find"

| Wednesday, November 26, 2008

Have you ever wanted to know exactly what SQL was generated by the advanced find? This question might just be because of shear curiosity, but the results of this query by also be the starting point for most sophisticated reports using SQL Server Reporting Services.

The process is straightforward. All you need is Dynamics CRM 4 and Excel 2007 (2003 should work similarly). [See update below for doing this without Excel]

Perform an advanced find  
Run the query, and export the results to Excel. Make sure you select "Dynamic Worksheet" although I'm pretty sure "Dynamic Pivot Table" will work image
In Excel, once you have data displayed (which might mean enabling data connections), go to the Data tab, and click "Connections" image
You should have a single connection called "Connection". Look the properties for this connection. image
Go to the definition tab. The command text contains the SQL behind the advanced find. image

This approach works with SharePoint lists as well. Using this technique with SharePoint list data helps you quickly determine the GUID of the list and the view you are using.

Update: Dynamics exports the data as an XML file, not a binary XSL file. Therefore, you can simply open the downloaded "Excel" file with a standard text editor and view the SQL within. 

3

Reflections on Marketing Class: Using Apple as a Case Study in Marketing Channels

| Monday, October 27, 2008

Today in my marketing class at Melbourne Business School, we examined distribution channels vis-à-vis marketing. Not surprising, we examined the distribution of music, tracing it from a technological standpoint (vinyl to MP3) and its channels (independent shops to iTunes).

The lecturer's main point with regards to Apple's success was the control over the hardware, software, and content of their "ecosystem" which allows them to control the channels of music distribution. While I don't disagree with Apple's dominant position, I take issue with some of comments and perceptions with regard to Apple's technology approach that were made in passing.

Primarily, the point was made that Apple is successful because their system is "closed", as compared with Microsoft that must struggle to handle software from a multitude of vendors. In fact, the underlying assumption, it seems, was that you simply could not develop any custom software for a Mac. Of course, this is simply not true.

Let me briefly explore the development options for both systems.

Unlike Windows where developers need to spend hundreds of dollars on software development products like Visual Studio, all Macs come bundled with X-Code, their development environment for building Mac software. One could argue that this alone makes it easier for a developer to create software for a Mac compared to a Windows PC.

Of course, it doesn't stop there. There was many who would argue that the Mac development environment is superior to Windows in other respects. The Cocoa framework seems to be a very elegant paradigm for developing applications, and Mac applications can often be created without writing any code. This doesn't mean anyone can create software for a Mac, but it does mean that more software can be created faster with fewer defects. (As an aside, Automator for Mac does mean that some tasks can be automated by someone without any development knowledge, and there simply isn't anything like it on Windows).

Steve Jobs understood the benefits of having a superior development environment (as well as other marketing principles such as segmentation, targeting and positioning) as demonstrated on this now-famous video from when he was at Next:

This philosophy was brought to Apple when they purchased Next, and brought Jobs back into the fold. Mac OS X is based on Next technology.

In class, it was also mentioned that the iPhone is Apple's first device which supports third-party applications. This, too, is not true (although it is the first iPod which can supports third-party applications). The Newton supported application development,although I don't know if it was a good environment or not.

Finally, Apple has success not just on Macs, but also on PCs with their iTunes software, showing they can success even when they don't control the hardware. Microsoft, too, has had success on Macs. Internet Explorer was highly regarded, and Office for Mac is sometimes regarded as superior to its Windows counterpart.

In summary, I'm making the point that Apple computers and devices are not closed systems; they do support software development, and provide a robust environment at that. Steve Jobs not doubt continues to realize the contribution that software developers make to the value proposition of a computing platform.

0

The End of ColdFusion

| Thursday, September 18, 2008

The marketing gurus at Adobe have just released an Evangelism Kit for ColdFusion [via Damon Cooper's Blog].

For as long as I've been using ColdFusion (over 3 years), I always heard detractors saying it was a dead or dying product. We never got much help from Adobe (or Macromedia) in justifying ColdFusion; we were forced to speculate on the future of the product, and the number of customers using it. I suspect that Adobe never had the need to justify CF; sales were fine, and so too, most likely, were revenues from the product.

So now I am going to become one of those detractors. Let's just say that this kit hasn't inspired me. On the contrary... I can't but feel that this Evangelism Kit spells the decline of ColdFusion. Here are few things to consider:

  • Why now? 10+ years without such an offering. Why create this document now? I suspect that some of the major clients listed are actually migrating away from CF, so better to indicate that these companies are using CF while it is still technically true.
  • Where are the exciting new features? I mean, look at the roadmap. Sully features "enhancements". I'm surprised "bug fixes" didn't make it onto that list.
  • Open source competition: Blue Dragon, Railo and more
  • Leveraging other products and scripting languages as middleware in the RIA stack: Groovy (the boys at Broadchoice, filled with names synonymous with ColdFusion, are using Groovy more and more these days: 9 posts tagged with "Groovy", zero posts tagged with "ColdFusion"), PHP, and Ruby.

I like ColdFusion, so I hope Adobe can keep it alive and keep its developers highly productive, but just when I think Adobe will push to make CF mainstream, I feel they took at least one step backwards, and may not have any more momentum to move forward.


1

When Projects Go Wrong: Scrum vs. Waterfall

| Tuesday, April 22, 2008
I was thinking of the comparison between a traditional IT project going over budget or late vs. a Scrum project. In Scrum, we reduce scope instead of moving milestone dates. So whereas a project manager might tell the business sponsors
I need another 3 months and $250,000 to finish this project

a Scrum-master might say
As the product stands right now, a few minor features have yet to be implemented. The software is documented, tested and ready for use. For another $250,000 we could get the other features done.

I know which one I would prefer to say, and which one I would prefer to hear. Luckily, they are the same.

Update: As a I get a lot of traffic to this page, I thought of the problems mentioned in CIO magazine about when Agile projects go wrong is also important. What resonates with me is the tendency to avoid getting into too much detail with the client, even though you probably should.

Still, we just deployed a new CRM system over 1 year in the making, and I think an iterative, agile approach would have been much better (and yes, the project was late and over budget).
0

Microsoft versus Thoughtworks. SharePoint versus Mingle

| Wednesday, February 20, 2008
This past week has been dominated by our portal project. SharePoint is our platform of choice for the portal, and Mingle is the documentation and project management tool that I'm using for this project. As a business analyst (my job title), it makes sense to use tools like SharePoint where I can address business requirements without relying on developers; I can often gather requirements and configure the system in real time if required. This is a tremendous asset.

So yes, SharePoint is a nice tool insofar as it satisfies the 80-20 rule for off-the-shelf-software: 80% of what you need is available out of the box, and 20% is missing and requires customization. Luckily, it seems SharePoint doesn't suck too much at customization, so we are not stuck trying to reinvent the wheel and hack into areas where we shouldn't. Still, there isn't much of an open-source community around this project as I would like to see, and it's difficult to get a grasp of what is an easy customization, and what is nearly impossible. The amount of blog posting from non-Microsoft employees regarding SharePoint, for example, is lacking.

Aside from poor community support and documentation, the other gripe I have is that finding out how do the 80% out-of-the-box functionality very time consuming. SharePoint doesn't actually do much, but finding out what it does and how to do it is quite challenging. Things that would seem natural to be able to do (reference the Now() function in calculated columns, have global lists, changing the link to text for document library items) are nearly impossible. Since you can't easily determine what's possible and the system is so unintuitive, a lot of time is spent searching for options which do not exist but presumably should.

Contrast this with Mingle.

Granted, Mingle does a lot less than SharePoint, although one could argue that there is much overlap. But the learning curve is negligible and the user interface, despite feeling less like a real desktop application than SharePoint, is actually a pleasure to use. Mingles features are easy to find and configure, the documentation and screencasts are well though-out so it's easy to see what Mingle can -- and more importantly -- cannot do, so little time is wasted searching for ways to do the impossible. Mingle comes with meaningful templates that actually show off "advanced" features like card transitions, graphing, and well constructed card properties.

(As a side point, the Mingle concept of "cards" is really not all the different from the SharePoint concept of lists. The both offer custom, typed columns and they both offer different views.)

There are a few lessons here for me:
  • ship your application with meaningful out-of-the-box samples. Even better if some sample content could actually be applied to whatever project you're about to begin. (The SharePoint logo as an image web part is not really helpful)
  • web applications should not try to feel like desktop applications; the should feel like web applications. This way, when I want to move the location of something on a page, I'll be pleasantly surprised that it drags instead of frustrated I have to click the "Move Up" button on a "toolbar" 30 times
  • product marketing pages should actually show how to use the product, and relevant scenarios. Otherwise, I can't get started quickly, and I'm not sure what's possible.
Are you using Mingle or SharePoint (or both)? I'd love to hear about your experiences.
0

Building a Better CFLOOP

| Saturday, June 23, 2007
ColdFusion 8 introduces slightly improved looping for arrays, as well a new way to loop over the contents of the file. Unfortunately, I don't believe these changes go far enough and, as I'll demonstrate, even better results can be accomplished even with older versions of ColdFusion.

My improved looping tag uses a little known ColdFusion feature, the <cfexit method="loop" /> tag. When used inside a custom tag, this returns control to the top the tag's "end" execution mode. This is ColdFusion's way of allowing custom iterators.

Here's what the syntax of my array looping tag:


<cfimport taglib="/custom-tags/loop/" prefix="loop" />

<loop:array array="#myArray#" index="i" element="e" cycle:shading="light,dark" cycle:odd="true,false" cleanup="true">

</loop:array>


Let me break it down:

  • array: this is the array you want to loop through, just like a regular CFLOOP

  • index: again, just like in CFLOOP, except this attribute is not required and has no defaults. it simply is not set.

  • element: the current item in the array. By default this a variable called element

  • cycle:variableName: the tag sets variableName to one of the values based on current index. This is inspired by a similar function in Rails. For example, in the above example, the variable odd will either have the value of true or false depending on the iteration number.

  • cleanup: This is perhaps the nicest feature. cleanup will remove references to all variables created during the iteration of the tag. This eliminates the need to var-scope lots of variables inside a CFC. By default, this is true.

Update
I've posted the code on github.