Chrome OS - first impressions

I downloaded the new Google Chrome OS and ran it on Sun’sVirtualBox VM software.

My first impressions...

It was only an 8 second start up time to the login screen. Awesome! Then a single sign-on to your computer with your Gmail account. Another 8 seconds and the Chrome browser was open with my Gmail account and Google Calander. Now that was impressive! Within 25 seconds of me turning on my computer I was reading my email.

What else is there to Chrome OS? It doesnt seem like there is anything else. I couldn't find anywhere to configure system preferences or anything. Do you want to open other programs or windows, or install other software (like Firefox)? Unfortunately you can't! It felt like I was in an internet cafe with a computer that is so locked down that all I can do is surf the web. A note to all internet cafe's around the world...None of the big players online support IE6 anymore. Please upgrade to anything else!

Anyway, Chrome OS is aimed at netbooks (at least initially). A netbook user would typically like to turn on their computer, have it quickly boot, have their browser immediately open, check their mail and calendar, and then continue surfing. That is what Chrome OS allows them to do, but thats it. The OS is merely a portal to the internet. You can't run anything locally. 

But I guess that over the years Google has been introducing online services and applications so the average consumer doesn't really need local applications. With Chrome OS, Google can encourage the use of online applications such as Google Documents, and (when it gets a lot better) it might actually start to rival MS Office, because it is free and online. After all, who needs local storage when there is cloud computing?

Conclusion... Google Chrome OS boots damn fast! It allows you to quickly get on the interweb. It's not exciting from an OS perspective as far as user experience goes, but damn it's fast!

If you want to try out, navigate your interweb browser to this hyperlink: http://www.techcrunch.com/2009/11/19/guide-install-google-chrome-os/

 

P.s. Google seems to be putting all types of applications online. What is next? Is Google going to make an online Pro Tools? Now that would be impressive!

 

 

 

Posted on 11/21/2009 2:15:00 PM by AnthonyDang

Permalink | Comments (0) | Post RSSRSS comment feed |

Categories:

Tags:

 

Selection Problem with Custom Media Type Content in Umbraco 4

The Problem

You have a custom media type. You want to add a link to it in the WYSIWYG editor. 

You go to add a link as normal, except in the "Insert/Edit Link" pop up, you click on the "Media" tab. You notice that when you click on it, no url is inserted in the Url field. 

 

The problem is due to this method in the Umbraco source:

        private static string findMediaLink(Media dd, string nodeLink)
        {
            Guid uploadGuid = new Guid("5032a6e6-69e3-491d-bb28-cd31cd11086c");
            foreach (Property p in dd.getProperties)
            {
                if (p.PropertyType.DataTypeDefinition.DataType.Id == uploadGuid && !String.IsNullOrEmpty(p.Value.ToString()))
                {
                    return p.Value.ToString();
                }
            }
            return "";
        }

 

This method is called from the overrided Render(ref XmlTree tree) method in Umbraco's loadMedia class. Here is the code block:

        string nodeLink = findMediaLink(dd, dd.Id.ToString());
        if (!String.IsNullOrEmpty(nodeLink))
        {
            xNode.Action = "javascript:openMedia('" + nodeLink + "');";
        }
        else
        {
            xNode.Action = null;
            xNode.DimNode();
         }

 

Notice that when findMediaLink() is called, your custom media type is never going to return  "5032a6e6-69e3-491d-bb28-cd31cd11086c" as a Guid. So your media type never gets assiged it's openMedia action, and xNode.DimNode() will always be called.

 

The Work Around

You must replace the Umbraco media tree handler with your own one. We called ours "MediaTree".

Here's how:

  • Create a class (eg. MediaTree) that inherits from loadMedia (see code below)
  • Copy and paste the Render(ref XmlTree tree), and findMediaLink(Media dd, string nodeLink) methods from loadMedia.cs into your new class
  • Modify the findMediaLink(Media dd, string nodeLink) method to get the Guid from your custom media type, and check if it is equal to p.PropertyType.DataTypeDefinition.DataType.Id (see code below)

 

Here's the class:

    public class MediaTree : loadMedia
    {

        public MediaTree(string application) : base(application) { }

        public override void Render(ref XmlTree tree)
        {
            Media[] docs;

            if (m_id == -1)
                docs = Media.GetRootMedias();
            else
                docs = new Media(m_id).Children;

            foreach (Media dd in docs)
            {
                XmlTreeNode xNode = XmlTreeNode.Create(this);
                xNode.NodeID = dd.Id.ToString();
                xNode.Text = dd.Text;

                // Check for dialog behaviour
                if (!this.IsDialog)
                {
                    if (!this.ShowContextMenu)
                        xNode.Menu = null;
                    xNode.Action = "javascript:openMedia(" + dd.Id + ");";
                }
                else
                {
                    if (this.ShowContextMenu)
                        xNode.Menu = new List<IAction>(new IAction[] { ActionRefresh.Instance });
                    else
                        xNode.Menu = null;
                    if (this.DialogMode == TreeDialogModes.fulllink)
                    {
                        string nodeLink = findMediaLink(dd, dd.Id.ToString());
                        if (!String.IsNullOrEmpty(nodeLink))
                        {
                            xNode.Action = "javascript:openMedia('" + nodeLink + "');";
                        }
                        else
                        {
                            xNode.Action = null;
                            xNode.DimNode();
                        }
                    }
                    else
                    {
                        xNode.Action = "javascript:openMedia('" + dd.Id.ToString() + "');";
                    }
                }
                xNode.HasChildren = dd.HasChildren;

                if (this.IsDialog)
                    xNode.Source = GetTreeDialogUrl(dd.Id);
                else
                    xNode.Source = GetTreeServiceUrl(dd.Id);

                if (dd.ContentType != null)
                {
                    xNode.Icon = dd.ContentType.IconUrl;
                    xNode.OpenIcon = dd.ContentType.IconUrl;
                }

                tree.Add(xNode);
            }
        }

        private static string findMediaLink(Media dd, string nodeLink)
        {
            TheFarm.Umbraco.Controls.MultiMediaUploadDT mmDT = new TheFarm.Umbraco.Controls.MultiMediaUploadDT();
            Guid farmUpload = mmDT.Id;

            Guid uploadGuid = new Guid("5032a6e6-69e3-491d-bb28-cd31cd11086c");
            foreach (Property p in dd.getProperties)
            {
                if ((p.PropertyType.DataTypeDefinition.DataType.Id == uploadGuid || p.PropertyType.DataTypeDefinition.DataType.Id == farmUpload) && !String.IsNullOrEmpty(p.Value.ToString()))
                {
                    return p.Value.ToString();
                }
            }
            return "";
        }

    }

 

 

Note: For this to work your custom media class must contain a Guid.

eg.

        public override Guid Id
        {
            get { return new Guid("{12345678-ABCD-EFGH-IJKLM-NOPQRSTUVWX}"); }
        }

 

Now go to the database and edit the umbracoAppTree table.

UPDATE umbracoAppTree
SET treeHandlerAssembly = '<your assembly>',
treeHandlerType = 'Umbraco.MediaTree' /* We called ours MediaTree */
WHERE treeAlias LIKE 'media'

 

That's it.

 

 

 

Posted on 3/4/2009 7:41:00 PM by AnthonyDang

Permalink | Comments (2) | Post RSSRSS comment feed |

Categories: Technology

Tags: , ,

 

The Farm Internet Failover Plan

It came to our attention yesterday that our building had lost all data access to the outside world. AAPT was blaming Optus and there was no telling what day we would have our data access back. Lucky we have a separate data center for our web servers.

Being a digital agency we needed to stay connected to be able to update our sites and to contact our clients. And since our phones run on VoIP we were between a rock and a hard place. So I did the obvious thing. I tried to teach this hamster to both modulate and demodulate digital signals on this tin can telephone line.

 

   

 

Ok so the hampster (we'll call him Freddie) was not really up to the task with his Monday-itis. So I devised an engenious plan. What if I could run our entire network through a computer connected to one of the spare iBurst wireless modems in storage? So I called Chilli Internet to set up an account.

 

Before I knew it I had a working data connection on my laptop, sharing the connection to 28 computers through its ethernet port. All that was left was to point the DNS servers to the laptop's IP and then run ipconfig /release and ipconfig /renew on all the PC's in the office.

This was the end result: 

 


 

Macgyver would be proud :o)

 


ps. The catch was that our email could not work. We could send emails to the outside world but not receive them. This was because our email gets forwarded to our office's static IP address. I could have changed our mail forwarding IP with our provider, however it would have taken up to 24hours to change, and then I'd have to change it back once the building's data connection was fixed. If we were given a timeframe of a week then it might have been worth it. 


 

Posted on 10/14/2008 10:32:00 AM by AnthonyDang

Permalink | Comments (15) | Post RSSRSS comment feed |

Categories:

Tags:

 

Matsuri - Sushi in Surry Hills

I just found a great sushi place on Crown St. It is awesome. I liken it to a sushi deli. Choose from the already made boxes, or choose which pieces you want. It is opposite the Commonwealth bank on Crown St.

 

Here's how to get to it from The Farm

Click here


The only down side is that credit card purchases must be over $20. So even though I only wanted the $11 lunch pack, I was stuck having to get the really expensive (but very tasty) sushi.

   

 

Posted on 9/15/2008 3:56:00 PM by AnthonyDang

Permalink | Comments (8) | Post RSSRSS comment feed |

Categories: The Farm

Tags:

 

Steamed Pork Buns at Central Station

I just had 2 pork buns. I found a place that sells them at Central Station. The wooden steamers are directly at the door. They sell the buns right there.

$1.20 per bun. So damn good. SO DAMN GOOD!

 

This is how easy it is to get there from The Farm: Click here

 

Note: You can actually walk through the tunnel and get out on the other side of George st. Google Maps doesnt have that information though. Hence the zig zag.

 

I have the feeling there might be regular trips for Farm Buns now.

 

Posted on 8/20/2008 4:31:00 PM by AnthonyDang

Permalink | Comments (11) | Post RSSRSS comment feed |

Categories:

Tags: , ,

 

Farm Cha

Eat as fast as you can, for as long as you can. Ready, set, go! 

The Farm racked up $420 worth of Yum Cha over lunch.

Zilver (www.zilver.com.au) in the City. Great food.

 

Posted on 6/27/2008 3:46:00 PM by AnthonyDang

Permalink | Comments (8) | Post RSSRSS comment feed |

Categories: The Farm

Tags:

 

Macgyver

 

I did a presentation on Macgyver at our fortnightly breakfast meeting. How does Macgyver relate to The Farm?

Macgyver used objects and tools around him to get himself out of a jam. When a tool was not present or there was nothing immediately useful around, he used what was available and improvised. 

As programmers, we are often presented with tasks that involve a bit of lateral thinking. Gone are the days of casual R&D. These days we must often (and quickly) survey what tools are available to us, and then MacGyver together a solution (even if it means making the tools ourselves).

Here are some of the technologies we have MacGyvered together at the The Farm (used in various combinations)

- .Net 1, 2, 3, 3.5

- CSS/ HTML

- AJAX

- Lytebox

- PHP

- LINQ

- Entity Spaces

- Umbraco

- Flash/Flex 

- Silverlight

- Wordpress

- .Net Blog Engine

- After Effects

- Haymail / MailBuild API's

  

 

Posted on 3/26/2008 11:09:00 AM by AnthonyDang

Permalink | Comments (23) | Post RSSRSS comment feed |

Categories: Morning tea | The Farm

Tags:

 
Copyright © 2010 TheFARM