Monday, December 19, 2005

Alpha Testing now going

We opened alpha testing of the system today. So far we have about 20 users signed up and testing the system. There is still a lot of polishing left to do on the UI, and I'm sure I'll have to do some tweaking of the core algorithm, but now I'll actually have some data to use during the tweaking.

If you are intested in helping with the alpha test, drop me an e-mail at: alphatest.zifus@recursor.net

Friday, December 16, 2005

Avoiding the temptation to gold plate

Developers are notorious for wanting to build every feature possible into their software, particularly features that people don't want or need, but that seem cool to the developer. I am trying very hard to avoid this particular temptation, even as my list of tickets grows. Initially I'm trying to focus on building the main components of the core system, and avoid things that I don't view as essential. Of course there are some things that I think need to be in the software that probably don't *have* to be there. One example is the community ranking system I am incorporating in. The system doesn't have to have it, but in the end, for the site to be successful we need as much community participation as we can possibly get, so I feel like that subsystem needs to be there even to launch an alpha test.

It's interesting because as I initially started building this system, I didn't think it would take this long. If I were going to build a site like digg or reddit I could've had the system done in a matter of days rather than weeks. However my main goal with this system is to build something that will ultimately be more useful than either, and doing that has been both interesting and challenging. To change a phrase from the Princess Bride. Our ranking system will be terribly useful, I think everyone will do it this way in the future.

We are nearing the time where I will be ready for some alpha testers, and my key focus will be how the social algorithm works. Is it useful? Are the news items important and relevant? There are a million digg and reddit clones popping up, but I'm aiming for Zifus to be an evolutionary step beyond those system. Hopefully with the help of the community we'll be able to build a system that bring useful and relevant information to your fingertips.

Thursday, December 08, 2005

Ruby on Rails vs Python Web Frameworks

O'Reilly has posted an interesting factoid. For the first time ever, Ruby book sales have surpassed Python book sales. In the article he also names Rails as the primary catalyst for Ruby's massive growth in popularity. Then he briefly discusses Python's attempt to respond to Rails.

I don't believe Python will be able to catch up to let alone surpass Rails in terms of popularity for a few reasons. By way of background, I have programmed professionally in Python for 3 years, and have been programming as a career for about 13 years now. I have tried a great number of the various web frameworks ASP, ASP/MTS/COM (ugh!), PHP, J2EE, ASP.NET (C#), Cold Fusion, Zope, mod_python, Twisted, Ruby on Rails. I spent significantly more time in some frameworks than others, but I never really *loved* any of them until Rails. In fact J2EE and ASP.NET were so bad in my opinion that I gave up entirely on web programming for a few years and just wrote python scripts to crunch data.

After working with Python for a few years I felt like I was ready to venture back into the world of Web Systems. I thought Python would be the ideal language to use because of it's flexibility and general cleanliness. I thought because Python had a relatively active community I would be able to find a really nice Web Framework to use. However after trying numerous frameworks, I came away with the following conclusion: Python sucks for the web.

The biggest problem for Python on the web is the same thing that makes Python so clean in the first place, significant whitespace. The second biggest problem Python programmers face is the mindset of the Python community, which is that there should be only one way to do things. The "one way to do things" mantra certainly seems nice to someone coming from Perl, but the general inflexibility of this rule began to wear on me after a while. It started to feel like I was using tools that didn't quite match the job. The quintessential example of this inflexibility is the refusal of the python core team to add a case statement to the language. There are numerous cited reasons, but the net effect is you have to use rather ugly nested if / else statements in the place of a well designed case statement. While that mindset may be good for a niche group, most mainstream programmers tend to prefer practical flexibility to dogmatic adherence to aesthetics.

Significant whitespace in your code can be a beautiful and readable thing if you work in a relatively homogenous environment. It's definitely a pain if you have to merge code written by someone else, in a different environment, into yours (especially when they use tabs, or 3 space indents instead of 4). That problem is severely compounded when it comes to web programming. It's so serious in fact, that when it comes to templating, virtually all python web frameworks use some other language to do the templating. Primarily they use Kid and CherryPy. Both of those templating languages grated on me. I wanted something more consistent, more elegantly designed, and definitely something that was better integrated.

Then I came to Rails and my first serious introduction to Ruby. Let me tell you, both Ruby and Rails knocked my socks off. The beauty, simplicity, and power of Rails is rooted in something deep within Ruby itself. Despite the claim that Ruby has weird syntax, I found it's syntax to be very clean and straightforward. As far as languages with syntax go, I would say Ruby has just the right operators in just the right places, which in my opinion make programs very readable.

Something that definitely struck me while using Rails was just how much Ruby is used. It is used absolutely everywhere, to a degree that I have never seen in any other language. Whereas with Python you have to learn another entire mini-language to do web programming, with Ruby I could use the full power and expressiveness inside the .rthml file just as well as I could within the .rb files. Instead of finding some obscure tool and trying to get it setup and installed and working with my Python Web Framework, with Ruby I could just use RubyGems to automatically download and install the latest version of whatever item I needed. It's literally as easy as gem install rails to download and install Ruby on Rails. When it comes to testing my application, Ruby comes with an incredibly powerful tool called Rake. Rake is essentially a build tool similar in concept to Make, but it allows you to express everything in Ruby. Rake is so powerful in fact that deploying to your production server has been canonized into a set of Rake tasks known as SwitchTower (once again included with Rails). With SwitchTower you can deploy effortlessly with rake deploy.

There are numerous things that I could mention about Ruby on Rails that are better than what I've seen in other frameworks. But instead of a laundry list of things that you may or may not like I'll leave you with this comparison. In terms of design, Windows is to the Mac as Python Frameworks are to Ruby on Rails. Windows is a powerful operating system, and you can kind of get it working most of the time. But if you use it a lot, there are things you will find frustrating and poorly designed. Whereas the Mac is a beautifully designed and tremendously well thought out system. The most common description is that it just works. So too with Ruby on Rails, from top to bottom, it just works.

On his blog, Aaron Schwartz, while discussing the Reddit re-write, said he created web.py because all of the other Python web frameworks suck. I agree with his assessment, if not with his conclusion. The Python frameworks don't suck because the people who wrote them are bad programmers. They suck because they are trying to build a framework to solve a problem in an environment that Python is fundamentally not suited for.

Python is a great language in and of itself, and there are numerous things it is well suited to, web programming just isn't one of them. If you are serious about building web applications, I strongly suggest you take a good look at the benefits and productivity offered by Ruby on Rails, I can almost guarantee your competitors will.

Saturday, December 03, 2005

Power vs Popularity

Well I didn't expect to jump right into a vigorous discussion about language, but I'll give it a stab. I came across the following article Why Ruby is an acceptable Lisp. As expected the Lisp guys jumped up and shouted "Ruby is NOT a Lisp" with their typical disdain for anything not Lisp. Then followed the expected obscure examples of what Lisp can do and why the Ruby version is *obviously* inferior.

Don't get me wrong, Lisp is by far my favorite language. I am completely sold that technically Lisp is much better than any other language out there, including Ruby. Despite Lisp's technical superiority it remains a small community while other languages flourish and prosper as they pillage features out of Lisp.

What interests me are a couple of things:
1 - Why is a language like Ruby taking off while Lisp continues to languish in relative obscurity?
2- What is the appropriate trade off between populariy and power?

First, why is Ruby flourishing instead of Lisp? To answer that we have to look at what is fueling Ruby's growth. Ruby On Rails seems to be the primary motivator, Ruby was around for years before Rails was born but it remained a very small community until Rails came along. It's interesting to note then the primary catalyst for Ruby's increase in popularity was a framework written in Ruby, and not the core syntax of Ruby itself. What initially attracted me to Ruby was definitely Rails and it's promised increase in productivity. Perhaps part of the problem Lisp has always had is that "you can do that in Lisp too". Many people can and do write similar frameworks to Rails in Lisp and other languages. While Rails brought me to Ruby it was the power, expressiveness and general clean feel of the language that kept me, instead of defecting back to Python when TurboGears was released.

Further I didn't stumble on to Rails, it came roaring onto the scene. I came across a bold, audacious claim that got posted to Slashdot. David Heinemeier Hansson made the in your face claim that you could improve your productivity by 10 times if you switched to Rails for your database development work. It wasn't just this one article either, Hansson was a wonderful and provacative evangalist for Rails and Curt Hibbs wrote several great introductory articles. Most programmers weren't sitting around going "I am so sick of Java, I need to find a better way to do this..maybe I'll try Ruby" Rather when Rails was released Hansson practically hit them upside the head with the superiority of Rails. Now I'm not claiming most Lispers aren't touting the superiority of their language (I'd wager they have that part down pat), instead I'm saying Lisp needs a better coordinated and more concerted marketing campaign and a product to sell to people beyond core language features. Additionally Lispers would do well to offer a warm and welcoming environment to newcomers.

Now to the second question, what is the proper trade of between popularity and power? I'm going to let you in on a little secret, when I first came to Ruby On Rails the framework wasn't that great. The idea behind it was fantastic, but the implementation was far from complete and it definitely lacked consistency. Of course this is to be expected, it was a very early release and I didn't expect it to be a polished completed framework. What it did have though was momentum. To me this is the key issue. When it comes to core language features you want to have the most powerful language you can get. However when it comes to frameworks and libraries, popularity definitely matters.

It's not so much that I mind writing certain features in Lisp, it's that I don't want to have to write those features at all. For an entrepreneur trying to get a product out the door it seems like a mistake to start in a position where you have to implement a major framework in order to be able to compete effectively. If you enjoy that type of thing, why the crap aren't you writing the full stack Lisp On Rails equivalent? Instead, Lisp has the same problem that Python did before Rails came out, it's not the lack of frameworks, it's the lack of a good integrated framework that is easy to setup and get running.

Something I have learned from books about positioning your product is that you can typically only occupy one place in the consumers mind. You must occupy a niche if you will. The best way to invade a fortified position is through a concentrated attack on a weak part, rather than a generalized attack at all points. If you can do that you will be successful at driving adoption. This advice seems to hold up to real world observation as well. How does this apply to programming languages? Let's see:

Fortran: scientific and mathematical programming
C: Operating System programming
C++: Object Oriented C
Java: Safer and more object oriented version of C++
C#: cheap knockoff of Java (sorry couldn't resist ;) )
Visual Basic: A Beginners Language
JavaScript: scripting language for the web
Php: dynamic web programming language
Ruby: (with Rails) powerful database backended website language
Lisp: AI?
Scheme: Teaching language

Of course this list may not be fully accurate, and I could've gone on much longer, but I think you get the point. Those are the positions those languages seem to take in most people's mind. If Lispers want to drive adoption, they need to build good complete frameworks and I suspect they really need to address the issue of positioning in the mind of the consumer. On the other hand, it's also possible that many Lisp programmers enjoy the position of martyr for a tragically misunderstood language.

Zifus Development Blog

Welcome to the Zifus development blog

What is Zifus?
Zifus is a personalized content aggregator.

Another News Site?
Yes, Zifus is essentially a news system, however I believe our solution to this problem is vastly superior to anything currently available. Our goal is to help you quickly find the most important and most relevant news and content on the web. The entire system is designed to deliver only items that are of interest to you.

What are you writing it in?
For those that are interested, we are building the system in the very powerful Ruby On Rails framework. Rails has been a huge win that has allowed us to focus on our core algorithms instead of fighting the framework at every step. If you are interested in building web applications, I highly recommend Rails.

Who are you?
Doug (Beowulf)
I am a professional software developer that has specialized in building large database applications for 13 years.

When will it be available?
Zifus is currently under very active development. Our plan is for an initial alpha release on January 1, 2006. If you are interested in testing our software please send an email to alphatest.zifus@recursor.net. Let us know if you would like to beta test the software, or if you would just like to be notified when we release the software publicly.