Thursday, December 06, 2007

GTalk + AIM = a kind of love


A new feature for Google Talk popped out today. You can now chat withAIM friends..What? From GTalk? So now you can talk with AIMfriends from Google`s browser interface which is quite good too...butthere are already a lot of other web interfaces for AIM Google? ...why use this one? When will the same features be integrated in the Google Talk program? And another big question...why did Google choose AIM?

Tuesday, November 20, 2007

.Net 3.5 Training kit

Microsoft just launched the .net 3.5 framework and announced the launch of Visual Studio 2008 RTM that is available to developers that are subscribed to MSDN. In order to help developers they have also shipped out a training kit that contains materials that should get most developers up to speed on .net 3.5 .
Have fun!

Saturday, November 17, 2007

Are you an IT consultant?

Have fun watching this :)

Sunday, October 14, 2007

Serializable dictionary in C#

Did you ever need to serialize a generic key-value dictionary like the Dictionary class? Well in .Net that class is not serializable, in fact the interface IDictionary is not serializable for some unknown reason so all the classes that implement the IDictionary interface (SortedDictionary , Dictionary ) can not be serialized unless you specify some custom code.
The best code I have found online is written by Paul Welter and you can see it here. I needed to implement a SortedDictionary so the only change I made to that code is implement the SortedDictionary instead of the Dictionary.

Thursday, September 13, 2007

Yahoo! in ads by Google?

Microsoft is next?

Saturday, September 08, 2007

www.audi.com vs audi.com

So...why the difference? Did the webmaster never think that someone might waht to see audi.com and not www.adudi.com

Friday, August 24, 2007

The sky is not the limit

Google added a new feature to their Google Earth project. Now you can explore the sky using the old tool that used to explore "only" the Earth and the Moon.
Happy Exploring!

Saturday, July 28, 2007

VS 2008 Beta 2 is out!

I`ve been using the beta for a while and it behaved very well(a big improvement over the VS2005 beta 1 which was not polished at all). The beta 2 also has a Go Live! license that you can use. Can`t wait for the final edition :).

Monday, July 23, 2007

What if?

What if you were in the year 1995 a year when the internet was just about to start the big bang...what if you had to plan it all again...what would you keep...what would you do to keep the internet an entertaining yet full of information place? Would you still build MIRC and stay on the chat all night long? Would you still think that instant messaging in the future? Would you still but a copy of Windows 95? Would you still encourage the creation of Google(and if so would you let it change the way the web works forever). Would you still put Google`s adsense on your web page just to get that 5C/click?
Or would you just keep it clean...the old fashion way..with a few tables here and there but with no real disrespect to the user...with real information on a page and not with lots and lots of ads about the searched topic...
In real life we have the garbage man to take the garbage to the garbage container...in the virtual world there has never been someone to do some cleaning...
What if?

Thursday, July 19, 2007

Tuesday, July 17, 2007

3D rendering using javascript, dom and CSS

UselessPickles.com offers a nice example of building 3D models in using javascript and dom which is kind of cool. Also has a nice way of creating triangles using just plain html.

When LINQ meets the UI

Scott Guthrie has a nice set of tutorials on his page and the latest tutorial explains the link between linq and the User Interface. Nice reading.

Sunday, July 15, 2007

Learn Silverlight and Blend

Nibbles offers some quick tutorials for Silverlight and Blend. Quite a nice reading.

Always on top

I've always wanted to be able to control which window is on top but as most programs do not have this option getting one window to stay on top can prove difficult. I've now found a nice tool that lets you do just that. It just adds a pushpin to the window and it will stay on top. Quite a nice tool.

Saturday, July 14, 2007

Saving the planet comedy central style



Let`s grab some icecream...So true...

Read a book

Probably the most educative hip-hop out there..

Microsoft vs Google

Did you know that you could download the Google toolbar for IE from a Microsoft site?

Sunday, July 01, 2007

Silverlight vs Flash

This game got famous today on digg.com. It`s a really nice flash game which requires logic. Loved the game but..when I read a MS blog I got to another Silverlight sample game. If you take a closer look at things you can see that the concept of the game is the same. I wonder how much time was needed to create the game in Flash and Silverlight. Until we find that out..enjoy the games.

Silverlight samples and code

If you enjoyed Richard Zadorozny`s bar chart, pie char or the graph you can now download the source code. This is the best way you can learn Silverlight programming.

(source)

Old News

I know it`s old but it`s a new Opera Mini. And I love it. It even features a mouse which is really great when navigating(you can see a video of all the features here). I have had some problems with it when the EDGE connection was bit slow(actually the app crashed) but overall it`s superb.
I also enjoyed the Opera Mini vs IPhone video

Friday, June 29, 2007

ReSharper

If you are using ReSharper then you have to check out this tutorials. Will be worth your time.

Sunday, June 24, 2007

Are you a good programmer?

A language that doesn't affect the way you think about programming, is not worth knowing


Learning programming in 10 years..just so so true..

Monday, June 11, 2007

Draw it like you mean it...

It`s been a long time since the first FREDO&PID`JIN comic and now it`s your turn to draw...and win stuff..Click here for more details

Sunday, June 10, 2007

The Start Function(Part 4)

This is part of a series of articles that shows the creation of a Silverlight game. Please read part 1,part 2 or part 3 if you haven`t done so yet.


   1:  void Start(int size,double blockProbability,Point StartPosition,Point EndPosition)


The Start function receives 4 parameters:

  • size - the width and the height of the board.

  • blockProbability - the probability of a blocking block to appear. Should increase as the level gets higher.

  • StartPosition - the point of origin for the red rectangle

  • EndPosition - the point where the red rectangle needs to get(yellow rectangle)



   2:          {

   3:              startPoint = new Point(StartPosition.X * multiplier, StartPosition.Y * multiplier);

   4:              endPoint = new Point(EndPosition.X * multiplier, EndPosition.Y * multiplier);

   5:   


We use the multiplier in order to transform from logical points to real pixels and we initialize the startPoint and the endPoint variable.

   6:              NextLevel.Visibility = Visibility.Collapsed;

   7:              NextLevelText.Visibility = Visibility.Collapsed;

   8:              Congratulations.Visibility = Visibility.Collapsed;


Here we just hide the Congratulations text(should only be visible when the user wins), the next level button which should also be visible only when the user wins and the text on top of the next level button.

   9:              steps = 0;

  10:              isMoving = false;

  11:              map = new int[size, size];

  12:              int unpassable = 0;


Here we initialize some counters. First the number of steps that the user has made must be 0. Then we say that the red rectangle is not moving. Also we initialize the map that will be composed of 0s and 1s and we initialize the variable that counts the number of unpassable regions.

  13:              for (int i = 0; i < size; i++)

  14:              {

  15:                  for (int j = 0; j < size; j++)

  16:                  {

  17:                      map[i, j] = (r.NextDouble() < blockProbability) ? 1 : 0;

  18:                      map[(int)StartPosition.X, (int)StartPosition.Y] = 0;

  19:                      map[(int)EndPosition.X, (int)EndPosition.Y] = 0;

  20:                      if (map[i, j] == 0)

  21:                      {

  22:                          AddNewRectangle(new Point(i , j ), Colors.Green);

  23:                      }

  24:                      if (map[i, j] == 1)

  25:                      {

  26:                          unpassable++;

  27:                          AddNewRectangle(new Point(i , j ), Colors.Black);

  28:                      }

  29:                  }

  30:              }


Setups the map that will be displayed. The map will be completely random and will display in avarage (blockProbability*100)% unpassable blocks. We also increase the counter of unpassable blocks each time we generate one. The function AddNewRectangle just adds a new rectangle to the board and will be discussed later.

  31:              Unpassable.Text = unpassable.ToString();

  32:              CurrentLevel.Text = level.ToString();


We display the number of unpassable blocks and the current level on the screen.

  33:              //setup visibility and location of helper objects

  34:   

  35:              Congratulations.SetValue(Canvas.TopProperty, size * multiplier + 5);

  36:              NumberOfSteps.SetValue(Canvas.TopProperty, size * multiplier + 5);

  37:              NumberOfStepsText.SetValue(Canvas.TopProperty, size * multiplier + 5);

  38:              NextLevelText.SetValue(Canvas.LeftProperty, size * multiplier + 40);

  39:              NextLevel.SetValue(Canvas.LeftProperty, size * multiplier + 5);

  40:              Restart.SetValue(Canvas.LeftProperty, size * multiplier + 5);

  41:              RestartText.SetValue(Canvas.LeftProperty, size * multiplier + 30);

  42:              UnpassableText.SetValue(Canvas.LeftProperty, size * multiplier + 19);

  43:              Unpassable.SetValue(Canvas.LeftProperty, size * multiplier + 107);

  44:              CurrentLevelText.SetValue(Canvas.LeftProperty, size * multiplier + 5);

  45:              CurrentLevel.SetValue(Canvas.LeftProperty, size * multiplier + 107);

  46:   

  47:   


Because the board of the game si expandable we need to keep the buttons out of the board region so we move them dinamically.

  48:              //setup the main objects:the start and the end(start is the moving object)

  49:              end = CreateSpecialRectangle(EndPosition, Colors.Yellow);

  50:              start = CreateSpecialRectangle(StartPosition, Colors.Red);

  51:              //setup event handler for the end object

  52:              end.MouseLeftButtonDown += new MouseEventHandler(r_MouseLeftButtonDown);

  53:          }


We then create the special rectangles that will move and will represent the end point. We also wire up an event that fires when the yellow rectangle is pressed.

The rest of the functions will be discussed in part 5.

To download the entire project just click here

Starting the C# code(Part 3)

So with the static part in place we need to get the game moving...But first we need some class variables that will help within the project:


   1:          //the level

   2:          static int level = 1;

   3:          //the number of times that the user moved the rectangle in this round

   4:          static int steps = 0;

   5:          //the probability that the block generated is a blocking block(cannot pass through it)

   6:          static double blockingProbability = 0.03;

   7:          //the current destination point of the moving rectangle

   8:          Point toMove;

   9:          //the start point of the round

  10:          Point startPoint;

  11:          //the end point of the round

  12:          Point endPoint;

  13:          //true if the user rectangle is moving

  14:          bool isMoving;

  15:          //keeps the map

  16:          int[,] map;

  17:          Random r;

  18:          //the height of the generated rectangles

  19:          const int height = 19;

  20:          //the width of the generated rectangles

  21:          const  int width = 19;

  22:          //the multiplier by which the matrix location is multiplied (Ex if multiplier is 

  23:          //20 than the location (1,2) on the map will actually be shown at

  24:          //(20,40)

  25:          const int multiplier = 20;

  26:          //the start rectangle

  27:          Rectangle start;

  28:          //the end rectangle

  29:          Rectangle end;

  30:          //the board size

  31:          static int boardSize = 10;


This variables are all straight forward and are explained through comments. They will be explained in more detail later on when we get to the functions implemented.


Now that we have the variables in place we need something to initialize them. This is where the Page_Loaded function comes into place:

   1:          public void Page_Loaded(object o, EventArgs e)

   2:          {

   3:              // Required to initialize variables

   4:              InitializeComponent();

   5:              r = new Random();

   6:              timer.Completed += new EventHandler(timer_Completed);

   7:              Restart.MouseLeftButtonDown += new MouseEventHandler(Restart_MouseLeftButtonDown);

   8:              RestartText.MouseLeftButtonDown += new MouseEventHandler(Restart_MouseLeftButtonDown);

   9:              NextLevel.MouseLeftButtonDown += new MouseEventHandler(NextLevel_MouseLeftButtonDown);

  10:              NextLevelText.MouseLeftButtonDown += new MouseEventHandler(NextLevel_MouseLeftButtonDown);

  11:              

  12:              Start(boardSize, blockingProbability, new Point(r.Next() % boardSize, r.Next() % boardSize), new Point(r.Next() % boardSize, r.Next() % boardSize));

  13:          }


This function initializes the random number generator on line 6. Then we use some event-handlers. The objects timer,Restart,RestartText,NextLevel,NextLevelText are all decalred in the XAML file.

  • The timer is a storyboard variable that is used in order to create the animation for the movement of the red rectangle.

  • The restart object is a rectangle used as a button.

  • The RestartText object is just the text that is displayed on the Restart rectangle.

  • The NextLevel object is a rectangle used as a button.

  • The NextLevelText object is the text displayed on the NextLevel rectangle.


All the events that were wired here will be explained later on.

Next we call the Start function that is the core function of the game as it creates a new level and initializes the gameplay. It will be explained in the next post.

(See part 4)

XAML Code for the Silverlight game(Part 2)

As I always like seeing the final product first...here is the whole XAML code needed for the game:


   1:  <Canvas xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="parentCanvas" Loaded="Page_Loaded" x:Class="PathFinder.Page;assembly=ClientBin/PathFinder.dll" Width="709" Height="558" Background="White">

   2:    <Canvas.Resources>

   3:      <Storyboard x:Name="timer">

   4:        <DoubleAnimation Duration="00:00:0.01" />

   5:      </Storyboard>

   6:    </Canvas.Resources>

   7:    <!--The restart rectangle with a gradient fill-->

   8:    <Rectangle Stroke="#FF000000" x:Name="Restart" Width="149" Height="40" Canvas.Left="550" Canvas.Top="13" RadiusX="15" RadiusY="15" Cursor="Hand">

   9:      <Rectangle.Fill>

  10:        <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">

  11:          <GradientStop Color="#FF3E9E35" Offset="0"/>

  12:          <GradientStop Color="#FF51FF40" Offset="1"/>

  13:        </LinearGradientBrush>

  14:      </Rectangle.Fill>

  15:    </Rectangle>

  16:    <!--The restart text-->

  17:    <TextBlock Cursor="Hand" Width="97" Height="20" Canvas.Left="581" Canvas.Top="23" TextWrapping="Wrap" x:Name="RestartText" Text="Restart Level"/>

  18:    <!--The congratulations text - Collapsed at first as it should only be visible when the user completes a level-->

  19:    <TextBlock x:Name="Congratulations" Width="303" Visibility="Collapsed" Height="26" Canvas.Left="189" Canvas.Top="529" Foreground="#FFC43E3E" Text="Congratulations you reached your target!" TextWrapping="Wrap"/>

  20:    <!--Static text-->

  21:    <TextBlock x:Name="NumberOfStepsText" RenderTransformOrigin="0.492,-1.333" Width="124" Height="21" Canvas.Left="8" Canvas.Top="529" Text="Number of steps" TextWrapping="Wrap"/>

  22:    <!--The number of moves that the user made-->

  23:    <TextBlock x:Name="NumberOfSteps" Width="49" Height="21" Canvas.Left="136" Canvas.Top="529" Text="0" TextWrapping="Wrap"/>

  24:    <!--The next level rectangle with a gradient fill-->

  25:    <Rectangle x:Name="NextLevel" Visibility="Visible" Stroke="#FF000000" RadiusX="15" RadiusY="15" Width="149" Height="40" Canvas.Left="550" Canvas.Top="77" Cursor="Hand">

  26:      <Rectangle.Fill>

  27:        <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">

  28:          <GradientStop Color="#FFF48F40" Offset="0"/>

  29:          <GradientStop Color="#FFDBF65C" Offset="1"/>

  30:        </LinearGradientBrush>

  31:      </Rectangle.Fill>

  32:    </Rectangle>

  33:    <!--The next level text-->

  34:    <TextBlock x:Name="NextLevelText" Visibility="Collapsed" Width="94" Height="21" Canvas.Left="584" Canvas.Top="87" Text="Next Level" TextWrapping="Wrap" Cursor="Hand"/>

  35:    <!--Static text-->

  36:    <TextBlock x:Name="UnpassableText" Width="89" Height="21" Canvas.Left="564" Canvas.Top="129" Text="Unpassable:" TextWrapping="Wrap"/>

  37:    <!--The number of unpaassable blocks-->

  38:    <TextBlock x:Name="Unpassable" Width="39" Height="21" Canvas.Left="650" Canvas.Top="130" Text="12" TextWrapping="Wrap"/>

  39:    <!--Static text-->

  40:    <TextBlock x:Name="CurrentLevelText" Width="103" Height="19" Canvas.Left="550" Canvas.Top="154" Text="Current Level:" TextWrapping="Wrap"/>

  41:    <!--The current level-->

  42:    <TextBlock x:Name="CurrentLevel" Width="28" Height="18" Canvas.Left="650" Canvas.Top="155" Text="12" TextWrapping="Wrap"/>

  43:  </Canvas>



The code by itself does absolutly nothing but display some button-like controls. The actual magic occurs behind the scene using C# but that`s another post.
This xaml was generated using Expression Blend May Preview. The file in this form looks like this:



(See Part 3 to see the C# code)

Creating a simple game in Silverlight 1.1 (Alpha)


I`ve always been interested in new technology so getting a quick understanding of how Silverlight(the flash killer) works was quite a challenge. I`ve worked on previous projects in Flash. Since I like C# a lot more than I like ActionScript I could say that Silverlight development is a lot better but that is something that you should decide.

The aim of the game: To get a red rectangle over the yellow rectangle. The red rectangle can only pass over green rectangles and not over black rectangles. As tou can see this is a primitive example of a map with a single moving object. Since the red rectangle can only move one step at a time (N - NE - E - SE - S - SW -W - NW) it should be very easy to get it on the required spot.

To see the game at work just go here


So this is what it will look like...


(See part 2 to start coding)

Saturday, June 09, 2007

Hacking DesktopTD

As I am a big fan of DTD...hacking it is not that appealing to me but...there might be someone out there that thinks having 9999 gold is fun..

Friday, June 08, 2007

Thursday, June 07, 2007

Youtube is using a new interface

Youtube is now testing a new interface. I saw it on many websites but I also saw the old interface on a lot of videos...take a look:




Wednesday, June 06, 2007

...and the oponent

The smart-phone market is getting crowded..

IPhone

The IPhone is coming...the IPhone is coming...

Wednesday, May 30, 2007

Silverlight

...is cool...
If you want to learn a bit about it try this

Google Maps upgrade.

After a big hit from Microsoft`s bird`s eye view and the 3D maps...Google comes back with a 360 street side view. Pictures speak for themselves.

Microsoft IE and Google Reader just don`t mix..

I opened the Microsoft.com page today and did a search on blogs. The search gave me 1000+ blogs nicely categorized and an opml file that contained all those blogs...Hmm...1000+ blogs...let`s see how Google Reader handles it.
Opened Internet Explorer. Google Reader. Import...Imported the file with no errors and then...a sudden stop. Google Reader just got my processor up to 100% and stood there. Tried to tag some of the blogs...no response..Hmm...
Opened Firefox. Google Reader. Import...Imported the file with no errors and then..hmm..I can still do my work...I can still tag every entry...I can still read the latest posts..
Is it that Firefox is simply better or is it Google`s use of Ajax not well supported on IE?

Wednesday, May 23, 2007

Killer App

Gmail Upgrade

I`ve been using Gmail for a while now and whenever I needed to send a big attachment I just used a dedicated service like yousendit.com . Now with a 20 MB limit I will probably still use the same service as it allows me to transfer a lot more...and also the fact that other e-mail users might not get my e-mail because of the attachment size...
Overall a good upgrade but not such a big help..

Saturday, May 19, 2007

Thursday, April 19, 2007

Avira Antivir Personal Classic Edition now for Vista


I've used Avira antivir personal classic edition on Windows XP and had no problem with it....installing it on the Vista operating system proved to be a problem...


But now with the update they fixed this! (all the release intormation here)

I had a really hard time downloading the files from the http://www.free-av.com/ website(since all the other mirror sites did not have the latest version) but it was totally worth the time..


The install was short as usual and occurred with no problems...On the other side..updates did not work because the update server did not respond due to the huge number of downloads..probably that will be fixed in the next days .


Finally (almost) safe again!

Friday, April 13, 2007

Total Commander


Total Commander 7 release candidate 2 for Windows was released today. The performance of this software has improved and also I love the new thumbnails feature that they added.(though it was added in the previous release candidate). A nice piece of software!

Sunday, April 01, 2007

April Fools #5

CNET has a whole page

April Fools #4

Via Slashdot

#1 Total Recall

#2 Wireless Power Now A Reality

April Fools #3





Engadget...but they got a bit scared...they actually thought someone might actualy put his fingers in..

April Fools #2


Still Google


April Fools


First up...Google :) Project Teaspoon (TiSP)

Saturday, March 31, 2007

Web UI for the TFS

Microsoft has acquired TeamPlain, a web UI for the Team Foundation Server and now the product is being distributed as a free download for the owners of TFS. You can download it here

Sunday, March 25, 2007

Cool Phone


Nokia N95 Videoscreen
Originally uploaded by Jay16K.
Seems that this year is going to be the year of mobile devices. The first cool device was the Apple iPhone,then it was the Google Phone...and finally...it`s a Nokia...so we`re not talking about beginners...this is a really cool phone...and It`s coming out in April....The commercial looks great...and the technical details speak for themselves .. 5Mp Camera(Carl Zeiss lenses) and the possibility to upload pics to Flickr, Gps, Wireless LAN, 2.6" display...

RTFM

Why oh why didn`t I read the manual before I pushed the Build button from Visual Studio?..
I actually pushed it just to see what happens without actually adding all the components that I needed for the Windows CE...
And this is what the manual stated:Depending on the speed of the development system, the build process may take approximately 15~20 minutes..
..Why oh Why?
Luckily there is a Cancel button :P

Building a new Windows CE

...with the platform builder...but it`s the same thing...:P
So..I have in my possession the ebox 2300 and I need to get a new Windows CE on it.
Installed the windows Embedded CE 6.0 software...but not on the default drive(C) but on the second drive...and here is where all the problems started..
Installation went OK...I installed BSP,CoreCon the SDK...everything went fine...but...when I tried to build the new OS using the Platform Builder...Visual Studio 2005 didn`t see the BSP for the ICOP Vortex86 60B BSP...tried in various ways to get past this...but with no luck...so I had to uninstall everything I installed until now and start over...but now I installed Windows CE on the C drive as it was by default...and...surprise...it all worked fine....did no one test this?
Now it`s time to get the image to the eBox...I hope this works..

Wednesday, March 21, 2007

Kill -9

It`s not Eminem...but it`s still white rap..Nerd rap...and it`s really cool...

Tuesday, March 20, 2007

Coding for kids

Just found this page from Microsoft that offers C# tutorials to kids.
The tutorial look cute and intuitive...

Monday, March 19, 2007

Apollo

The new framework from Adobe looks great...and will really help speed up presentation-oriented application development. The application that they showed at DEMO 07 looks nice and provides lots and lots of effects that will catch the eye...but will this ever compare to development on the .net framework or Java? Probably not but will surely hook a lot of web developers(at least they will take a look at it).

Tuesday, March 13, 2007

Link dump

I love the new Puki 3D game...Evil Puki :P

The solar eclipse from a space station...someday I hope we will all get to see this for real not just in pictures(or motion pictures)...

Thursday, February 22, 2007

Problems with SQL Server 2005?

I had a big problem with SQL server 2005 logins and ASP.net and the only tutorial that really helped was this one.
I hope it will help you too. Good luck!

Monday, February 05, 2007

Got to love the wii

This a new ad made by someone that has no(apparent) relation with nintendo...but the ad looks great and funny..should have been official..

Thursday, February 01, 2007

Google Checkout

If you have a store and you considered using Google checkout but on your dev team you only have .Net programmers...Don`t worry :)...Here is a nice tutorial that might help you integrate with this service.

Friday, January 26, 2007

ASP.Net Ajax is out

So...ASP.net Ajax is an ajax technology created by Micorosft in order to be used along with ASP.net...but not only with asp.net as you can easily use it with php or other scripting languages.This is the official data:

ASP.NET AJAX is a free framework
for quickly creating a new generation of more efficient, more interactive and highly-personalized Web experiences that work across all the most popular browsers

Thursday, January 25, 2007

Nice ideea

Quite a cool phone ideea....but we`ll just have to wait and see if we will ever have such a slim smart phone..

Monday, January 22, 2007

Windows Piracy

Microsoft announced that they will add Windows Vista to the online marketplace and that anyone can download a copy(but it won`t work unless you have a genuine key that can be bought online too)...In the same time they added a new anti-piracy comic..now that`s funny..

Friday, January 12, 2007

HD Vs Blue Ray..

So the porn industry has decided that HD-DVD is the winner...will that mean that the format war is over? That decided the Betamax vs VHS war...so..

Thursday, January 11, 2007

8 Million..

11 January...Good day for Blizzard...
North America - 2 million
Europe - 1.5 million
China - 3.5 million
And a new update for World of Warcraft...and that will attract more users...Blizzard really has a good business running.
Data from this press release

Wednesday, January 10, 2007

I want one!

The all new iPhone..

Google is number 1

Checklist for google:
Best company to work for - check
Best search engine - check
Best e-mail - check(this is my opinion...although it had a big bug)
Promote open source - check
Be evil - never check
:)

Friday, January 05, 2007

Do you blog?

If you see this post and you are a blogger please reply with your blog`s address. Just trying to find more about this blog`s readers.
Happy surfing.