Future of Web Applications, Miami

Tuesday, cloudy day in Miami, not really good weather for the beach, but who cares. Today is FOWA day!

Check in was within 08-09AM in beautiful Adrienne Arsht arena. Checked location on Google maps, it’s just nearby my hotel so no need to deal with car. Arrived just few minutes before 09AM, so after they checked my data they gave me blank pass and pen to write down my name/company on it. As every proud Serb I took the chance to draw Serbian flag there so my geek colleagues knows exactly from where I am :)

Inside of hall there was bunch of geeks from all colors and ages … but most of them have one thing in common. They were all armed with a Macbook. I counted like 50 Macbook (Pro) laptops, with only one sad PC guy. I joined the mass with my Macbook Pro and started with some kind of live broadcasting to well known Serbian Development Forum.

Fowa, Miami

Before he started his intro speech, Ryan Carson asked from us to meet and shake hands with each others. Most of us were doing that … “Hey bro, how yo doin’ …” and suddenly robots becomes a man. Well done Ryan.

First guy on the stage was Jason Fried who were talking about their Getting Real philosophy, without much noise and any presentation screen behind. He mentioned plenty of good advices regarding productivity, sales, future prediction etc. Jason complained about giving away software for free, because food is not free, our cloth is not free, our car is not free … so why in the world software you made should be free?

Jason (37signals)

After Jason Ajaxian guys (Dion Almaer from Google and Ben Galbraith from Mozilla) took the stage. Their speech was much more interesting to me, with plenty of effective screens behind, describing what is going to happen with browsers in the near future. In one word - revolution, which is going to get current Ajax based applications even more usable with usability closer with those that we have on OS X (they used Mac examples frequently).

Ajaxian guys

After Ajaxian guys, Dan Theurer from Yahoo took the scene. Unfortunately his presentation file was corrupted so somehow he did his speech too fast. Also without presentation slides behind it was really hard to track his speech so many developers took the chance to play with wireless and at the end it seamed that Dan couldn’t wait to move away from the stage which was kind of shame.

After the morning break there was probably the most effective talk made by Joe Stump, lead developer of Digg-a.

Joe Stump

Joe used ingenious slides with his and his brother pics from their childhood in attempt to present developers as lazy, moody and egocentric guys (come on, we all know that it is completely the true), and how to make compact and productive team from them.

My favorite quotes:

Developers are EXTREMELY lazy.

Jedi are rare guys

(finding senior programmers is not easy - demonstrated by picture of kid with light Jedi like sward in hand).

After Joe there was totally different story by Kristine Halvorson, related to Web Content. Although I don’t think many guys from audience found her speech really interesting (I don’t think developers really care about content), her speech was really original and effective. Kristine also had problems with her presentation, but unlike Yahoo guy she didn’t want to continue till backed guys didn’t fix the problem (meanwhile she made them look really funny). After her speech Kristine asked audience why do we have so little females in hall, which was introduction to their talk about that “issue”.

After they ended Aza Raskin from Mozilla took the stage to tell us about all those great little things Mozilla Lab is preparing for us. He was talking about Ubiquity, kind of Firefox add on which would allow you to do many things, like changing content on pages you’re visiting often (like you could easily replace Google logo with your own ad), and many other things. Unfortunately backed guys screwed it again so Aza also stayed without his presentation and had to leave the stage and finish it at the end of show.

Aza Raskin(Mozilla)

After lunch break Joel Spolsky made an interesting and funny talk, where he talked about programmer’s efficiency, setting working environment, office stuff etc. Like Jason he also mentioned interruption as one of the biggest enemies of programmer’s productivity. He claim (and I totally agree) that every developer during his working day usually has about 2 or 3 hours of “total focus” in which time he is 100% focused on problems he is solving. During that period developer usually don’t feel a time (2 or 3 hours pass like a snap). Noisy environment, phone ringing, even going to toilet are the worst enemies of every programmer. That’s why big companies that are paying attention to those stuff (like Google) are trying to keep developer’s focus as long as possible with ie. keeping his snack near by, the same with toilet and even shower booth :)

Talent

After Joel, some very effective (but personally not so interesting) talks was made by Dave McClure and Alex Hunter from Virgin. And after pause there was another one “talk show” with Joel, Jason and Caron, after which Francisco Tolmasky from company 280 North took the stage.

Francisco made great workshop with Cappuccino and Atlas tool. By using Atlas - kind of point and click tool started from the browser on local host, he used point and click interface to create an feed reader application in like 3 minutes! After that he did the same for iPhone platform. I liked whole thing except the fact that you don’t have ability to do kind of “synchronization” between iPhone and Web project (things are kept in separate files). I even took a chance to talk with Francisco after the show about that, who was BTW the only speaker I had a chance to meet personally.

Francisco Tolmasky

At the end there was Gary Vaynerchuk’s talk who somehow acted like a Eminem, he talked loud and fast, sometimes cursing, screaming … I could say almost crying :) Don’t have time to repeat here everything Gary said, so if you have a time, here’s video :)


Gary Vaynerchuk at FOWA Miami 09 from DamianVoltes.com on Vimeo.

At the end we were invited to visit the party on Nikki Beach which as far as I can tell many developers did. Free beer provided by Microsoft … you could hardly find something more attractive :)

Me on Nikky Beachu

My Personal pics from FOWA conference

P.S. This is English translation of FOWA Conference report made originally in Serbian. Now when I got back to my sucky homeland, I managed to translate it completely. Hopefully you enjoyed.

Browser Detection Update

Long time ago I developed Browser Detection Class which is able to recognize most of popular browser/OS’s used today.

For example FF on my macbook pro would be recognized like this:
Mozilla Firefox 3.0.4 / Mac OS X

Very useful stuff in case you have to redirect your users to different pages depending of browser version or to maintain your own site browser/os usage statistics.

Today I had a chance to update it with support for Windows Vista, Google Chrome and iPhone.

You can download complete code with usage examples by following this link.

Barače Obama budi uvek s nama

Or translated in Serbian “Barak Obama be always with us”. That was the title of the poster that young people in Belgrade/Serbia put on “Kosovo is Serbia” billboard (the one with Kennedy). That happened in January, much before this election, even before Obama won election in his own party.

Obama

Today after news that Obama actually won this elections it is hard to say anything… frankly I didn’t believe that USA will get black president during my lifetime, but it is great feeling that it actually happened. It is like today actually started 21st century.

Of course Obama victory doesn’t mean any change in USA politics regarding Serbia, but it will be interesting to watch how Obama will deal with chaos left after George Bush.

Good luck Mr. President. You’ll need it.

Crossover Lame Duck Challenge

Crossover (previously known as Crossover Office) is bunch of applications that allows you to run native Windows applications on Linux, Mac OS X and Solaris without need of purchasing Microsoft Windows. Really great bunch of tools that allow you to run applications like Microsoft Office or Dreamweaver on Linux easily without hasle of setting up Wine.

Today guys from CodeWeavers have decided to make CrossOver FREE, you can get registration key and it will act in a same way like you purchased application. But even more interesting than giving it for free is reason why they are doing that.

Read more info here :)

Global crisis and dollar rate!?

Just a 3 months after dollar went to lowest rate since 2001 (on 07/15 USD vs. EUR rate was only 0.62), dollar is growing rapidly and it is already on rate from October 2005!

usdrate.png

Somehow global financial problems is doing good for USD grow, so whole thing looks kind of weird to me since crisis actually started in USA. I wish there is some logical explanation from economist but I doubt.

Whatever, if you ask me I don’t care for cause, just please keep USD growing :)

Back to english

This is my first post in English after very long time. If I don’t count the one related to curl http client class update, I haven’t written anything on my English Blog since august 2007!

Unfortunately I had very good reason for doing that. My daughter got sick, very sick. She have Leukemia (ALL), so since October 2007 my life was twisted upside down. We had to move to Belgrade where she started with chemotherapy treatments which was really hard with plenty of complications and life treating conditions. With so much time spent in hospital and other related obligations, I really didn’t have spare time to deal with my Blog, neither to be honest i felt like writing anything about programming etc. I wrote few post on Serbian since than, but most of them were not related to programming or anything Web Dev alike.

Anyway few weeks ago she is done with intensive phase of chemotherapy, we’ve back home to our home town and it seams like things are moving back to normal. She is not done with therapy thought since Leukemia treatments last several years, but she have good chances to fully recover so we are trying to be positive and act like everything is completely normal.

Speaking of that after really hard year for us I decided to do something for myself and finally get one Apple :). I spent some considerably big amount of money to get one MacBook Pro. I even made unboxing gallery on Flickr, I guess after you drop like $2k USD for something you really want to save that moment for later. Now when I have it for a month almost I think it is worth the money. As a matter of fact I think it’s price in Europe (which is at least 33% bigger than in USA) is appropriate for what you get, while in USA I would consider it cheap ;)

Anyway, in next months other than usual LAMP stuff you can expect even text about Mac OS X applications, Darwin etc. For example my company use some socks5 proxy/public key setup to access to servers, which was pain in the ass to setup on Mac. I plan to write about things like that. And last but not least, I’ve already booked conference pass on FOWA conference, so I really feel my English should be improved to higher level. Maintaining English Blog should help I guess :)

Curl HTTP Client 1.2

Just put online new version of my Curl_HTTP_Client class. New version 1.2 is release with few bug fixes. New features are ability to send post string as string argument in send_post_data method, ability to accept gzipped content, close curl session etc.

You can download new version from here. For detailed list of features with some usefull examples please visit this blog entry.

PHP: Callback functions and OOP

Recently, I had to change default behavior of storing session data into files and use MySQL DB instead. In practice, that means writing whole bunch of callback functions and setting callbacks with session_set_save_handler function. Since I use OOP, what really bothered me was the fact that (according to my PHP CHM Manual sitting on my desktop) for session_set_save_handler, all functions has to exist in global scope, since all callback arguments are strings?

bool session_set_save_handler ( string open, string close, string read, string write, string destroy, string gc )

Doing that in non OOP way with 6 functions on global scope is not something I really liked, so I googled for solution and found that you can easily assign an array like array(’class_name’, ‘method’) for all callbacks in PHP. Cool stuff which allows you to create session handler class with bunch of static methods for those callbacks, but why the hell that is not documented in PHP Manual???

I went to online manual at least to see if someone submitted comment about this, and find out that session_set_save_handler definition there is completely different:

bool session_set_save_handler ( callback $open, callback $close, callback $read, callback $write, callback $destroy, callback $gc )

Obviously, since last time I browsed online manual, a lot of thing has changed, one among them is introducing “callback” type in those “pseudo types” used only for documentation purposes. And there, manual for callback says following:

callback

Some functions like call_user_func() or usort() accept user defined callback functions as a parameter. Callback functions can not only be simple functions but also object methods including static class methods.

A method of an instantiated object is passed as an array containing an object as the element with index 0 and a method name as the element with index 1.

Static class methods can also be passed without instantiating an object of that class by passing the class name instead of an object as the element with index 0.

which basically allows you to pass an array with class name and method as callback, and that method will be called.

Let me give you and example with sessions:

<?php

/**
 * Sessin_Handlers class
 * contains dummy methods needed for session stuff
 * Replace content with some real stuff like db conn etc.
 *
 */
class Session_Handlers
{
	function open($save_path, $session_name)
	{
		echo "Open Method Called<br>";
		return true;
	}

	function close()
	{
		echo "Close Method Called<br>";
		return true;
	}

	function read($id)
	{
		echo "Read Method Called<br>";
		return true;
	}

	function write($id, $sess_data)
	{
		echo "Write Method Called<br>";
		return true;

	}

	function destroy($id)
	{
		echo "Destroy Method Called<br>";
		return true;
	}

	function gc($maxlifetime)
	{
		echo "GC Method Called<br>";
		return true;
	}
}

//call all method from Session_Handlers statically
session_set_save_handler(array('Session_Handlers', 'open'), array('Session_Handlers', 'close'), array('Session_Handlers', 'read'), array('Session_Handlers', 'write'), array('Session_Handlers', 'destroy'), array('Session_Handlers', 'gc'));

session_start();

// proceed to use sessions normally
?>

As you see, we’ve created simple methods which only echo when they are called (in real life, you should either save session data into file or db). As you can see, we simple passed arrays to session_set_save_handler, which served us to connect class methods with session callbacks.

Method Overloading in PHP5

Although with release of PHP5 we finaly got some long awaited OOP features, sometimes I really miss overloading capability which exists in languages like Java. I am talking about something like this:

class Overloading_Test
{
  public void hello()
  {
    System.out.println("Hello Anonymous");
  }

  public void hello(String name)
  {
    System.out.println("Hello " + name);
  }

  public void hello(String firstName, String lastName)
  {
    System.out.println("Hello " + firstName + " " + lastName);
  }
}

This way you can call either hello with no arguments at all, or with one or two arguments, and proper method would always be called. Unfortunately, if you try something like this in PHP, it would give you fatal error, because basically, methods cannot be redeclared, since support for overloading is not part of core language like in Java.

However, there is still a way to achieve this Java like overloading functionality by using “magic” methods that are described in PHP Manual. Although it is not clear from manual how could you achieve exact functionality like in Java, I played a little bit with __call function, and get interesting workaround.

<?php

class Overloading_Test
{
  function __call($method_name, $arguments)
  {
    //list of supported methods
    //only 'hello' for this test
    $accepted_methods = array("hello");

    //in case of unexistant method we trigger fatal error
    if(!in_array($method_name, $accepted_methods))
    {
      trigger_error("Method <strong>$method_name</strong> doesn't exist", E_USER_ERROR);
    }

    //we inspect number of arguments
    if(count($arguments) == 0)
    {
      $this->hello1();
    }
    elseif(count($arguments) == 1)
    {
      $this->hello2($arguments[0]);
    }
    elseif(count($arguments) == 2)
    {
      $this->hello3($arguments[0], $arguments[1]);
    }
    else
    {
      return false;
    }
  }

  function hello1()
  {
    echo "Hello Anonymous<br>";
  }

  function hello2($name)
  {
    echo "Hello $name<br>";
  }

  function hello3($first_name, $last_name)
  {
    echo "Hello $first_name, $last_name<br>";
  }
}

$ot = new Overloading_Test();
$ot->hello();
$ot->hello("John");
$ot->hello("John", "Smith");
//this one will produce fatal error
//$ot->test();
?>

If you run this code, you will get something like:

Hello Anonymous
Hello John
Hello John, Smith

So, what is going on here? Whenever we call some undeclared method (which is the case with ‘hello’ method here), magic method __call is called, and two arguments (method name and arguments) are passed to it. For this simple test, we only support overloading of ‘hello’ method, so in case you try any other, we trigger fatal error.

What’s going on further is, we simple check number of argumens passed (by counting $arguments array), and call proper method. For the sake of clarity, I only used simple overloading based on number of arguments, but you could also check for argument type (ie string, integer etc.) and call proper method.

So, as you see, method overloading in PHP5 is not as elegant as in Java, but you can still make it. For more information about ‘magic’ fucntions (there are quite a few for member overloading as well), please visit PHP Manual.

PHP 4 End of Life Announcement

From php.net

[13-Jul-2007]

Today it is exactly three years ago since PHP 5 has been released. In those three years it has seen many improvements over PHP 4. PHP 5 is fast, stable & production-ready and as PHP 6 is on the way, PHP 4 will be discontinued.

The PHP development team hereby announces that support for PHP 4 will continue until the end of this year only. After 2007-12-31 there will be no more releases of PHP 4.4. We will continue to make critical security fixes available on a case-by-case basis until 2008-08-08. Please use the rest of this year to make your application suitable to run on PHP 5.

For documentation on migration for PHP 4 to PHP 5, we would like to point you to our migration guide. There is additional information available in the PHP 5.0 to PHP 5.1 and PHP 5.1 to PHP 5.2 migration guides as well.

Amen to that. Finally this will move the rest of people to PHP5, so we can finally start using all those great PHP5 features without worrying that such code cannot be used on most of client servers. Looking forward to PHP6 now :)

« Older Entries