Octopress, a nice blogging platform for semi-static content publishing for geeks

Octopress is a good solution for semi-static web publishing, aimed at technical people who prefer a command line interface CMS solution. Content is semi-static if it becomes static once it is published to the web site. I think this type of software is going to get increasingly more exposure because they fill a niche that people may be slowly waking up to. As usual, it starts with a few alpha geeks then increasingly make it to the general public as the tools get better.

I am calling semic-static, content that becomes static once it is published to a web site. Such content supports categories, permalinks and other modern blogging capabilities, but it rarely (if ever) changes after publishing. So there is really no good reason to have an entire database engine powering a semi-static web site area. Aside from some metering, a lot of technical blog sites provide semi-static content, revisions don’t even need to be preserved since the latest edit is always good enough for the purpose. Wiki software function this way, my only issue is that wikis need modernising and many of them frankly look ugly.

I’ve already been using WordPress to power my blog for some years now, but it runs on MySQL. As I looked a little further I came across Octopress. Lots of sites probably publish semi-static content, but Octopress is really for developers as advertised. If you are looking for a command line interface to maintain your blog then it has plenty to like.

Octopress web site is well documented, I won’t reproduce that here. I think this type of software will get increasing exposure because they fill a niche that people may be slowly waking up to. As usual, it starts with a few alpha geeks then increasingly make it to the general public as the tools get better.

A good example of hands-on Architecture work

A good example of hands-on architecture work is given by the Microsoft Patterns & Practice group in the article titled CQRS Journey. If the architect isn’t hands-on, he/she is not well equipped to perform assessments thoroughly, he/she would need to go by what is being told in blind faith. Architecting a software solution in blind faith implies that one of the main objectives of architecting a software solution, risk management, becomes weak.

This article by Microsoft Patterns and Practice people is a good example of what I often talk about, that a software architect needs to be hands-on. The credits here show a large number of people, that isn’t necessarily needed to architect a solution properly, this is probably just how they collaboratively put it all together.

Not understanding enough about all aspects of the architecture is often the cause for things going wrong down the road. Such risk is mitigated if teams dive into all corners of the problem and solution domain. As an architect, if folks try to take your ideas in unintended directions you would at least be able to spot that and assess any potential issues or risks that may result.

If the architect isn’t hands-on, he/she is not well equipped to perform such assessment adequately, he/she would have to go by what is being told in blind faith. When that happens then one of the main objectives of architecting a software solution, risk management, becomes weak.

Conservative innovation as a path to better user experience. Avoid Feature Debt.

Designing sustainable user interface is a very hard task that could take a large number of retries. The wider an established user group is, the more conservative user interface design changes should be. If a complete user interface overhaul is required it may work out much better to present an entirely new product to users. Doing that sets an expectation of a new experience, this gives an adequate cognitive comfort to users.

Designing sustainable user interface (UI) is a very hard task that could take a large number of retries to get right. A technology powered solution that spares its users tedious learning will fare better than those who simply skim over such issues in favour of other agendas. Realising this makes me respect even more people who invented some of our everyday tools such as drinking glass, the pen and paper, and so on. This post is about highlighting some aspects of UI design decisions and why that is where conservatism should be preferred.

I always push hard to find out every detail I could about the problem domain that I am dealing with, preferring to postpone technology concerns until I know enough about everything else. Incidentally, this way of working tend to ruffle the feathers of those who prefer to skim over details, the manager looking for quick way out and avoiding any potential blame. I digress there a bit. In essence, looking to get more than one perspective of a problem domain makes me spend hours exploring wide ranging concepts, business and technical blueprints, various vendor solutions, looking to debunk blind-spots from the endeavour. Ultimately I found out that UI design decisions where happening everywhere even though people weren’t looking at things that way. In this post I’d like to highlight some of the learning points on user interface issues:

  • A stable UI design will sustain several product revisions without requiring that users learn and adopt new behaviours. Designing and rolling out a stable user interface seems to be an extremely difficult task, partially because the UI scope is often hamstrung by blind-spots.
  • Technology vendors that tend to frequently overhaul their UIs will upset users, cause people to scramble to adapt, disrupt well honed user productivity work flows, distract people from doing their real job.
  • In software development texts you often read about “Technical Debt”, meaning that some corners were cut for technical reasons with the intention to make amend at some (often unspecified) time in the future. In a similar vein I also frequently noticed what I would call “Feature Debt”, which has a broader meaning than its technical counterpart and is mostly about adding clutter. I’ve not heard of this term before, so I am creating it to make my point. An example of Feature Debt is when people sneak in requirements that only reflect their own personal preferences far removed from the actual problems at hand. Another example of Feature Debt is when designers don’t envision the user’s daily activities while designing a solution. Feature Debts stemming from a technical way of thinking tend to result in cognitive tax on the UI experience. I will write a dedicated post on Feature Debt when I get a chance. The point here is that Feature Debt is really hard to fight, it goes against conservative UI innovation and coud cost dearly.

Changing the UI of a well established technology should not be taken lightly, because of the unnecessary upset it might cause. A symptom of Feature Debt is when a solution is deployed then outsiders react in bewilderment, wondering how such product release came to be. Another sign of this is when folks have to scramble to learn new habits for things that are otherwise plain and simple normal activities.

With this way of thinking in mind, I try to analyse new technology product releases that hit the market, sometimes you expect to see revolutionary new interfaces and may be disappointed not to find that. Sometimes new products receive negative media or user reactions, you wonder how that could happen when the organisations behind them clearly had all the resources they needed to get things right. It is always too easy to shout at bad decision making with hindsight, especially from an armchair executive perspective, but it is very difficult to spot issues as they are happening. People often seek prescriptions as an easy way out, some of shortcoming of such prescriptions is that  they make our minds lazy and could be giving us an excuse to blame someone else if things don’t work out. To illustrate the effect of the mind laziness, imagine a situation where someone could perform a mental mathematic calculation but they stop trying if a calculator is at hand, over time they lose the ability to perform any mental calculation at all. That is also what happens if we keep looking for prescriptions and stop thinking things through by ourselves.

One thing that could help in IT driven initiatives is to look out for Feature Debt, they typically won’t survive proper user testing, won’t make it through the “five whys”. Feature Debt has a snowball effect, everything that trickles down from it will amplify its negative impact. When a group or organisation is caught in Feature Debt, very smart people might totally overlook obvious faults simply because they would imagine that fellow smart people must have vetted things and nobody wants to look bad or sound like they are obstructing. Such invisible pressure would nurture Feature Debt, people would start rationalising them and after a while feature debts become indistinguishable from real user wants, that’s when the damage potential is maximal.

Conservative Innovation is about looking for those precious UI experiences that must be preserved as one innovate, actively looking for Feature Debt and removing them from the picture before they grow and become ingrained. The conservative part is really about avoiding changes in what is already working well. When considered this way, examples can be found in a lot of successful products out there. This is also what drives copy-cats because they don’t risk trying something new, they try to follow what appears to be working and accepted by communities.

This post isn’t asking to avoid change, that wouldn’t make sense. But rather, this is about ensuring that user comfort is sought and protected very early on and often as you go about innovating.

Plagiarism: copy/paste considered harmful to the source. Learn by copying effectively.

Copying may be a natural act, inherent or induced. Copying starts to become reprehensible if it would seem to giving an unfair advantage to an undeserving someone. If you are aware that you are copying someone’s work and you’re not giving appropriate credits, then you’re doing it wrong. If you’re learning from someone and using that learning to come up with something original, you are doing it right.

We learn by copying, we routinely copy nature and our fellow creatures and brag about it with great fanfare. Education systems around the world are institutionalised way of teaching people how to systematically copy someone or something. We buy books in order to copy what is written inside of them. I can go on, but I am just trying to understand something here. We copy without us even noticing it, anything that leaves a lasting impression on us might automatically be copied by our brains without us consciously trying. If we weren’t allowed to copy, learning would practically become impossible.

The act of copying starts to become reprehensible if it would seem to be giving an unfair advantage to an undeserving someone. There are acceptable ways of copying others, and the rest is unacceptable.

Considering the well published cases out there, one wonders where the society at large is going. If you sell fruits on a stall right in front of your house and people seem to be buying them, soon a neighbour will setup a stall in front of their doors and put up fruits for sale. This has been going on for a very long time and the society usually accepts it within some bounds. But we have evolved, become sophisticated at making the most of our ideas, denying that fact is myopic if not naive.

Open source developers and people who blog about programming actively encourage copying their work, they usually ask for some small contribution, attribution is a minimum. I am sure there are tens of thousands of commercial work which have open source material included in them, you usually see in software “About” window how the authors give credit where due. In some instances, when people copy snippets of program from blog posts or derive algorithms from techniques described on web sites, credit may not be prominently visible. What I often see is that somewhere, an acknowledgement is made available. Open source and technical blogging are amongst the most potent advocate of learn-by-copying, in fact the participants wish for network effect to lift their work to higher levels. In this way, you must copy to be part of the game, but as ever, it is really about give and take. So copying is part of the learning.

If you blog or that you write thoughts on any medium that is publicly accessible, there is a high chance that someone may copy you and not consider any form of attribution, because ego or possible financial advantages might be motivating them. In social media, ego also plays out in a somewhat subtle way, individuals with a bit of fame of their own may not want to acknowledge people who aren’t famous, possibly because they may not feel a strong kinship with less famous people. Plagiarism perpetrated by a famous person in this situation might be, if caught, denounced by the community at large, showing their indignation. Such form of copying isn’t also about learning, it may be seen as a form of immoral exploitation of less well-off people.

Copying is often a natural act, inherent to our nature or induced via Learning (capital ‘L’). Intentionally copying others, as you do when you lift material from someone else’s work, will lead to the sort of dispute we see happening now. For example, the person robbing someone else’s property is aware of the prejudice being caused to the subject. The many forms of plagiarism feel that way, that is why plagiarism has nothing to do with learning.

I set out to write my own thoughts here, but I also read a lot of people, so I’m sure I may be copying someone’s ideas in some ways, but I don’t intentionally try to copy material without attribution. It would be flat out wrong if I would copy/paste material from someone else’s medium without acknowledging the source, this is why I sometimes drop a draft If I come across prior work that resembles it too much. I remember a case when a (not brilliant) former colleague of mine asked my thoughts on a subject, then copied and pasted my entire response email content in their blog post without giving me any credit. The guy didn’t think much of it and actually walked around bragging about ‘his great idea’, given how he was presenting himself I knew he just a poor sod to be ignored. You routinely see more prominent bloggers sticking it up to folks who copy them without attribution, Marco Arment was effective doing this on Twitter a short while back. Those are instances where copying have nothing to do with learning.

PS: This post was initially inspired by the current Apple vs. Samsung legal dispute, with no intention to take sides. But, just as I was drafting this post, I saw in my twitter stream, several posts by Matt Gemmell, which seem to be a related case. I would normally withhold publishing this post for fear it’d be seen as link baiting, but I won’t mind because that wasn’t (and isn’t) my intention. I’ll wait a couple of ways before tweeting it, however.

I wish some thoughts leaders would tackle this theme, we have much to learn from discussing the issue.

My MacBook Pro Late 2008 humming with Mountain Lion, smooth as silk

My MacBook Pro Late 2008 is shining ever more with OS X Mountain Lion. With this setup, unless there would be a serious hardware failure, this MBP can go a few years without needing any upgrade, though I am pretty confident Apple might drop support for it after 1 or 2 OS releases from now.

I’ve upgraded my MacBook Pro Late 2008 to Mountain Lion. The process was flawless and quick. My mac runs noticeably faster than it did with Lion. All apps start up and close faster than they did before, Omnigraffle Pro in particular loads up stencils much faster than it used to.

As happened when I upgraded to Lion, I had to fix issues with some developer tools. Apple removed  the (Unix) X11 server package from OS X Mountain Lion distribution, they recommend installing the open source package called XQuartz in replacement. This is automatically suggested, I can’t even remember the dialog as I wasn’t thinking about blogging when I started the upgrade process. OS X Mountain Lion also features an automatic dependency software discovery, it kicked in as I launched a Java app that required JVM 1.6.

Open source brew and rvm

The first thing to do is run “brew doctor” on a terminal window, this will point to any issues it finds and there were a half dozen in my case. The biggest issue was with X11 server. Once I was done resolving brew reported issues, I run “brew upgrade”, then “rvm upgrade” shortly after, to ensure that all native package dependencies were recompiled and linked with the new OS libraries. At the end of it all, brew doctor warned me that XQuatz wasn’t known to work well with brew packages, but I haven’t run into any problems yet. This was all I needed to do to be completely up to date with OS X Mountain Lion.

FileVault Legacy encryption

Apple shipped Lion with FileVault2, which obsoleted FileVault I had in place earlier on. Nothing breaks, it just feels untidy to be constantly remminded about this legacy. When I upgraded to Lion I didn’t have enough space to turn off FileVault and redo the encryption. The same thing happened again with Mountain Lion, not enough space. So I did one simple radical thing, used Carbon Copy Cloner to backup my user home folder, deleted and recreated the user account, this removed FileVault. This whole thing wasn’t necessary as I said, but I like to tidy up sometimes and remove legacy software.

Now I am enjoying OS X Mountain Lion, the only thing that took time was the backup prior to upgrading. Backing up my MBP to Time Capsule over wi-fi was excruciating slow. I had two false starts because I would accidentally hit a key and stop it after a couple of hours. It took nearly a day to backup about 280 GB. I just left it running and went about other business.

My MacBook Pro Late 2008 is shining ever more with OS X Mountain Lion. With this setup, unless there would be a serious hardware failure, this MBP can go a few years without needing any upgrade, though I am pretty confident Apple might drop support for it after 1 or 2 OS releases from now.