Archive for September, 2007

The weakest link

“Phishing is a major problem because there really is no patch for human stupidity” (Mike Danseglio - MS)

Ah! On this matter… I sent an email (from my gmail account since the webmail was dead) to my ISP the other day reporting that I could access the traffic page (yes, there are traffic limits in Portugal :)) because of some aspx problem. No biggie… just a minor glitch in service. I signed and added my ISP’s username just for the record.

The funny part comes 4 days later when I get their reply telling me the steps I need to take to access the traffic page (duh…) and surprise! They were kind enough to share with me my username and… password! How nice of them! Especially considering that my gmail account isn’t related in any way with my ISP’s account.

Indeed, I have to agree with the quoted Mike. :)

Guerrilla Platform Tactics

Humm… I should be doing a trackback on this, but I’m not really sure this blog is ready for prime time. :P

The smoothspan blog is one of favourite reads in that it provides some very deep insights into “what’s up”.  Today’s copy-paste ;) focus on ways to succeed on this technological jungle.

Summary of Guerrilla Platform Tactics

1. Launch a Great Application that has a thinly concealed platform attached.  Defer announcement of the platform until the Great Application is well established.
2. Give away a distributed open protocol that’s suitable to create a platform around.
3. Be the middleman that matches disparate protocols between services to create a Bridge Architecture.
4. Talk down your platform.  Focus on solving a few key problems and helping others out.  Give away those first couple of keys to prime the pump.
5. Minimize the friction to enter and maximize lock-in to create a Slippery Slope.
6. Offer Quid pro quo.  Give away something to platform participants that enrolls them as unwitting platform supporters.
7. Use Widgets or other bread crumbs to pull people off another platform and onto your own.

From the top of my head here are some companies/apps that lead the way in each of these tactics:

1. Facebook
3. Meebo
4. 37signals
5. jottit (in the entry friction at least :))

I never really thought about the remaining points but I think they should be considered while creating the basis for any wannabe 2.0 app.

One for the way

Breaking the rules is hard. I mean… really hard!

The “regular folks” just don’t get it. “When are you getting a job?”, “I think you would better off working in a big company!” are some of the things one has to hear along the way.

Today I’m dedicating this post to all the people that might have ever said something like this to someone trying to get by on his own:

FUCK OFF!!!

Ah… that felt good! :)

Now that I’ve cleared that off my chest I’d like to share a nice and thought provocative quote:

“Here’s to the crazy ones. The misfits. The rebels. The trouble-makers. The round pegs in the square holes. The ones who see things differently. They’re not fond of rules, and they have no respect for the status-quo. You can quote them, disagree with them, glorify, or vilify them. But the only thing you can’t do is ignore them. Because they change things. They push the human race forward. And while some may see them as the crazy ones, we see genius. Because the people who are crazy enough to think they can change the world, are the ones who do.”

~ Apple Computers

My two cents on Erlang

Today I spent some time getting started slowly with Erlang and I must say I didn’t expect to finish the tutorial with a distributed message server (with built in error recovery). Nice!

Focus, Davide! Focus! :)

So… I was reading a great text on Function Languages by Slava Akhmechet when I came across a description of Pattern Matching which seemed to provide what was my first step in understanding Erlang.

The following is the normal way we’re used to look at the Fibonacci function:

int fib(int n) {
    if(n == 0) return 1;
    if(n == 1) return 1;

    return fib(n - 2) + fib(n - 1);
}

And here we have it in a pattern matching functional way:

int fib(0) {
    return 1;
}
int fib(1) {
    return 1;
}
int fib(int n) {
    return fib(n - 2) + fib(n - 1);
}

The underlying (made up) language tries to match the calling arguments with the various function definitions (somewhat like overloading does) but choosing the more specific version.

Erlang makes extensive use of mattern matching and understanding the first Erlang programs you come across is mainly an exercise of pattern matching. ;) After that the learning curve goes down as apparently complex functions are partioned into the various function definitions. A simple way to look at it might be thinking of mathematical branch functions. :)

More on the language if I end up using it. ;)

Ditto!

The route to success is to build something valuable, and you don’t have to be working for an existing company to do that. Indeed, you can often do it better if you’re not.

by Paul Graham

MapReduce

This wasn’t a very good day production wise, but on the learning aspect I couldn’t be happier. :)

I found this article explaining the MapReduce algorithm used by google in the massive computations they have to do every day to give us all that google goodiness.

Not many firefox tabs latter I found Hadoop, an open source implementation of the same algorithm, and another tab later here’s Johnny!: a tutorial on setting up Hadoop on EC2.

To harness this kind of large scale computing power the algorithms must fall within the MapReduce constraints. Argh… f*ck. Can’t spell out the idea that’s brewing in my head. Bah… no biggie. More ideas will come. ;)

Update: Me again! In yet another tab I found Starfish! A ruby MapReduce implementation that can work with the Rails Active Record ORM or plain files. Sweeet! :)

Hosting Plans

For future reference:

CacheFly (http://cachefly.com/plans.html)

FlexiScale (http://www.flexiscale.com/prices.html)

3tera (http://www.3tera.com/utility-computing-plans.html)

Amazon S3 + EC2 (http://calculator.s3.amazonaws.com/calc5.html?)

Process One (http://www.process-one.net/) - They offer erlang hosting if you ask nicely. :)

And… (http://www.zone.net/)

More later on!

Update: “later on” as arrived and brought with it the following host:

http://www.hostgator.com/dedicated.shtml

Er.. lang?

I’ve come across the Erlang name quite a few times now.

In all those times I’ve disregarded looking it up because my readings lead me to think it was a low level language, only interesting to the “hardware guys”.

Today, while reading an article on “the 5 nines” of availability Erlang name popped up again. Time to check it!

From the Erlang Community site:

What is Erlang and OTP?

Erlang is a programming language and a runtime system with strong built-in support for concurrency, distribution and fault tolerance. Originally developed at Ericsson, Erlang was released as open source in 1998.

The Open Telecom Platform (OTP) is set of Erlang libraries and design principles providing middle-ware to develop distributed, fault tolerant, massively concurrent soft real-time systems.

Apparently, Erlang is really well adapted to work on multi-processors since it follows a “share-nothing” idea. Read more about it on this interview with its creator, Joe Armstrong: Programming Erlang in Dr. Dobb’s Portal.

Ah! I have to write this down for future reference:

ejabberd is a free and open source instant messaging server written in Erlang. ejabberd is cross-platform, distributed, fault-tolerant, and based on open standards to achieve real-time communication (Jabber/XMPP).

Update: Mnesia + Yaws + Erlang = Webapps! Things just got more interesting! :D

Update: Ahahah! This new blog usage is working great. A more fresher link to creating webapps in Erlang: ErlyWeb!

Update:  I really can’t believe how lucky I am to be “working for myself”. Holy shit guys!!! Erlang is the new Web 2.0 enabler!

Back again! :)

Hi there!

I finally decided what to do with this blog. I’ve spent the last few months recovering from a year of a job in Configuration Management (= no programming)… I don’t know how I managed that! Programming rocks! :D

In these silent times I’ve relearned javacript, I went deeper in my css knowledge, got kind of a javascript framework going on and produced www.mypilim.com (more on that in a next post), had to fight of all the people that just asked: “So… when are you getting a job?”, learned Joomla! and created www.apregatas.pt, said”No” to 5 sweet job offers, went on holidays with my sisters, learned a lot of stuff about Ruby on Rails, and had A LOT of new IDEAS to cool sites and stuff like that.

About the blog: I’ve realized that I’m learning new stuff every day, and instead of bugging my friends with all I’ve learned I’m gonna write some mega cool (geek) posts and make them come here and read them! Muhahaha! (this normally sounds better when I’m writing in Portuguese :)).

Feel free to drop in as I write on the stuff I’ve learned and keep on learning.

Yours truly (not!),

Davide :)