Showing posts with label technologies. Show all posts
Showing posts with label technologies. Show all posts

Thursday, March 5, 2015

Build API documentation with Sandcastle Help File Builder

Summary: How to build awesome API documentation using Visual Studio, XML code comments, Microsoft Markup Assistance Language (MAML), and Sandcastle Help File Builder (SHFB).
A couple of weeks ago, I gave this presentation to the Sacramento .NET User Group:


The presentation explains how to build first-class API documentation using Visual Studio, Sandcastle, and other tools and technologies. The goal of the presentation is to show how to build documentation with less effort and more fun.

The PowerPoint file (with links and notes) and the demo project can be found here: The demo project page outlines the dependencies and requirements for building the solution and using the assemblies.

If you run into any issues or have questions, please post a comment below or contact me directly.

Thursday, March 27, 2014

Build responsive websites with Visual Studio 2013 and Bootstrap 3.0

Summary: Materials for the Sacramento .NET User Group presentation.
Thanks a lot to everyone who attended my presentation yesterday. You have been an awesome audience. Also, many thanks to Josh Gurin (TEKsystems) for the pizzas and wings and Jason Singh (Microsoft) for the excellent meeting space. I was a bit concerned about parking, but there were lots of free after 6 PM parking spaces around the building.

Here are the materials I promised: In case you don't want to bother downloading the files, here is the presentation:


The PowerPoint slides provide the same information as the web application built by the demo project. If you only want to check references and resources mentioned at the session, just use the slides. If you intend to see how the concepts were applied in the actual application, get the project. When you run the demo app, you will see the same content available in the presentation, although in a slightly different format. Links should work from both the presentation and the demo app.

If you run into any issues or have questions, please post a comment below or contact me directly.

See also:
The ultimate guide to Bootstrap by By Cameron Chapman
25 Free & Premium Bootstrap Admin Templates

Wednesday, June 16, 2010

Introduction to jQuery

Summary: My latest jQuery presentation.
Here is my latest jQuery presentation:


I hope you find the links helpful.

You can download the demo projects from the ASP.NET AJAX and jQuery Presentation post.

See also:
Great Ways to Learn jQuery (nice collection of tutorials, presentations, books, and resources)
Debugging Tools by Remi Sharp

Tuesday, June 1, 2010

ASP.NET AJAX and jQuery Presentation

Summary: Follow-up to my ASP.NET AJAX and jQuery presentation in Reno, NV.
Many thanks to all who attended my ASP.NET AJAX and jQuery presentation at Northern Nevada Software Developers Group last week. Here are the slides:


You can download the following demo Visual Studio 2008 projects:
  • ASP.NET AJAX and jQuery Demo
    • Illustrates how to use ASP.NET AJAX (ScriptManager, UpdatePanel, UpdateProgress controls) with data-bound controls (Repeater) and jQuery.
    • Uses a local copy of an older version of jQuery (1.3.2).
  • User Search Demo
    • Illustrates how to use the jQuery Autocomplete (by Jörn Zaefferer) and Watermark (by Todd Northrop) plugins.
    • Uses the Google-hosted version of jQuery (1.4.2).
    • Performs user search by name, employee ID, login ID, or e-mail address.
    • Code auto-detects the type of search to perform based on user input (or tries the best guess).
    • The autocomplete (drop-down) box is customized to show text along with image.
    • Data comes from an XML file and retrieved using LINQ-to-XML.
    • Backend user search logic is implemented as a generic HTTP handler.
    • Data returned from HTTP handler to the Autocomplete plugin is serialized with the help of JSON.NET library (by James Newton-King).
    • .NET user objects are automatically converted to JavaScript objects.
If you have questions, feel free to post comments.

See also:
Introduction to jQuery (my newer post focusing purely on jQuery)
ASP.NET AJAX and jQuery (my older post on the same topic that contains a few additional references)
jQuery for the ASP.NET Developer (Dave Ward summarizes various options of incorporating jQuery into an ASP.NET project)

Tuesday, February 24, 2009

ASP.NET AJAX and jQuery

Summary: Brief of the talk and presentation given to Sacramento .NET User Group, plus links to shared resources.

Thanks to all who attended my talk at Sacramento .NET User Group on Tuesday. In case you did not attend the event, the discussion focused on developing intranet applications using ASP.NET AJAX and jQuery. We covered the following topics:
  • Pros and cons of different technologies for building rich internet applications (RIA)
  • Introduction to ASP.NET AJAX and jQuery
  • ASP.NET UpdatePanel and UpdateProgress controls
  • Using UpdatePanel with data-bound controls (such as Repeater)
  • Pros and cons of using UpdatePanel with jQuery (and other alternatives)
  • Adding AJAX and jQuery to an ASP.NET applications (walkthrough)
  • Common problems and solutions for applications using ASP.NET AJAX, UpdatePanels, and jQuery
  • Demos and references (tools, tutorials, videos, and more)
I uploaded the presentation to SlideShare:


You can also download the original PowerPoint slides from Box.net.

To run the demo project, download the ZIP file containing the Visual Studio 2008 solution, extract the files, and open the solution (you will be prompted to create a virtual directory for the project).

UPDATE: The following article by Dave Ward explains the idiosyncrasy that I mentioned in the presentation (firing multiple events after partial postback) and offers ways to mitigate the problem (I will update the presentation and sample):Thanks, Dave!

Here are some additional references that did not make into presentation but you may find useful:

Friday, September 19, 2008

More fun with Yahoo! Pipes

Summary: A few advanced techniques for building Yahoo! Pipes.

In the previous post, I explained how to use Yahoo! Pipes for monitoring hot deals. In this post, I'll cover several techniques which can help you get the best out of your pipes.

Before I get to the the good parts, let me share a couple of problems, which I discovered. Understanding these issues can help you avoid some frustration.

Problem #1: Changes appear not to be saved.
If you create a new pipe (or make changes to the existing pipe), save the pipe, and then try to run it (or open it for edit), you may get an error saying that the pipe was deleted. If you re-open the My Pipes page, the new pipes may be missing, and if you open a modified pipe in the editor, you may not see the changes you just made. Don't panic, yet: your new pipes (or modifications) are there. Just refresh the page until the error message goes away (you will need to refresh the page a few times). I'm not sure what causes the problem, but to me it looks like there is a synchronization issue on the Yahoo! side (maybe your changes are saved in one database, but when you switch a page, you hit a different server to which your changes have not been replicated). After a couple of hours the problem will go away and you will not see the errors. I reported this problem to Yahoo! (and others did too), so hopefully, it will be fixed (no word on this, yet).

Problem #2: RSS reader is slow to report new posts.
I do not know if it affects all RSS readers, but I saw this problem on Bloglines, as well as Google Reader: matching posts returned by your pipes may appear in the RSS reader several hours after they have been posted in the original feed. This is not a big deal for regular posts (like your favorite blog subscriptions), but if you want to be notified about a product returned by your pipe faster, you may want to use the pipes' built-in notification mechanisms instead of relying on the RSS reader.

Update: A few weeks ago, Bloglines stopped retrieving RSS posts from almost all of my Yahoo! Pipes. Due to multiple issues with Bloglines (also reported by others), I no longer recommend using it (I switched to Google Reader).
And now, the good stuff.

Hint #1: Reuse your pipes.
Say, you want to build several pipes with something in common. Instead of duplicating the common functionality in every pipe, you can build a special pipe containing the shared logic, and then pick this pipe as any other module from the module library (you will find your pipe under the My pipes heading in the library panel of the editor). For example, I created the following pipe defining the input sources and transformation rules for all of my shopping-related pipes:


My other pipes use this pipe as input, and apply additional filters to specify pipe-specific conditions. Now, if I find a better way to define input sources and transformation rules, I just need to change one pipe and all pipes that use it will pick up the modifications automatically.

Hint #2: Use regular expressions for more precise matches.
Say, you are shopping for a ring, so you define a filter with the following rule:
item.title contains ring
What you may not realize is that this pipe will return posts with titles containing the following words: spring, boring, ringtones, and so on. To make sure that your filter finds exact matches of the whole word ring, instead of the Contains condition, use Matches regex.

Tips: For non-programmers: Regex stands for regular expression, which is a sophisticated mechanism for finding (and replacing) more complex matches. For programmers: In case you wonder, Yahoo! Pipes use the Perl-like regular expression syntax with certain caveats. For example, to look for case-insensitive matches, you need to prefix the search string with (?i) (I thought it would be /text/i). For all: Here are some great resources for learning, building, and testing regular expressions:And this is some informations specific to Yahoo! Pipes:
To search for the exact word match, you need to use the following pattern:
(?i)\Wtext\W
As you may have noticed the \W tokens surrounding the search string specify the word boundaries, while (?i) indicates case-insensitive search. Here is an example of the search filter one may use for baby-related products (notice that it uses another pipe as input):


Once you get a grip on regular expressions (if you are so inclined), you will be able to build more efficient filters, but in the meantime, the information I provided should get you one step past the novice. If you stumble upon a problem you cannot solve, check the Message Boards for Pipes (this is where I found how to implement case-insensitive search).

Additional references:
Yahoo! Pipes Documentation
Yahoo! Pipes Tutorials

Sunday, August 31, 2008

RSS tools for smart shoppers

Summary: How technology can help frugal shoppers find good bargains.

Today's bargain hunters have many tools at their disposal:Unfortunately, these services are not very helpful when you're (a) looking for the best bargain (or, at least, a good one) on a particular product and (b) not in a rush to buy.

Ideally, the above-mentioned scenario should be addressed by a service, which would let you enter the product (either the exact model, such as Garmin Nuvi 360, or a range of products meeting certain criteria, such as GPS device), and notify you when this product becomes available at the price you set (or at a significant discount). Alas, this service does not exist, so while waiting for geeks and venture capitalists to get their act together [and if someone is interested, please give me a call], let me explain how to achieve similar results with the help of already available tools.

When hunting for bargains on a particular product or type of product (laptop, printer cartridge, HDTV, diapers, baby products, or whatever), the following services will let you save time, effort, and money (if you're not familiar with these, don't worry: I'll explain what they do and how to use them shortly):
  1. RSS reader
  2. RSS feed from you favorite deals alert aggregator and/or discount shopping site
  3. Yahoo! Pipes
Before I show how to put these services together, let me briefly explain what each of them does (if you already know this, skip the next two sections).

RSS feeds allow you to easily access frequently changing contents of the web sites, such as blogs, forums, news, and, in our case, shopping-specific posts. [In addition to RSS, you may also encounter subscriptions to Atom feeds. Atom is a subscription format similar to RSS, so I use the term RSS to refer to both.] RSS feeds are available via subscription links most often marked with the RSS icon, such as this one: RSS/Atom feed. To get a better understanding of RSS, watch this short (less than 4 min) video:


As the video explains, to access the contents of a web site via an RSS feed, you should use an RSS reader (or RSS aggregator). Bloglines Google Reader Feedly is my favorite web-based RSS reader, but you may prefer a desktop-based FeedDemon (for a very brief overview of Google Reader, watch this one-minute video [UPDATE: Google Reader is dead, but the idea can be applied to any RSS reader]):


For a list of other RSS readers see Wikipedia.

Now, that you know how to read RSS feeds in the RSS reader of your choice (I assume that by this point you've picked one), you can subscribe to RSS feeds from your favorite shopping sites (see links above), but don't do this, yet (or you will risk spending most of your day catching up with the subscription posts). To save time and effort, you should filter posts returned from these feeds by the type of product you're interested in, and this is where Yahoo! Pipes comes in.

Yahoo! Pipes is a free service, which lets you combine and apply filters to one or more RSS feeds. The resulting feed will return only posts matching your criteria. Once you define a pipe, you can receive notifications of the new posts via an RSS reader, e-mail, or phone. To understand the basics of Yahoo! Pipes, see this four-minute Yahoo! video:


So how do you use Yahoo! Pipes to search for bargains? You have a couple of options: you can use a pipe built by someone else, or you can build your own.

Option 1. Use someone else's pipe.
While writing this post, I discovered that other people already built shopping-oriented pipes. For example, Shiva Hothu made two pipes to search for hot deals. Both pipes let you specify up to three search filters, and each filter accepts one or more words. The pipe will scan the most popular hot deals sites looking for the posts matching your criteria (it will look for the exact match of all text entries defined in each filter). There is one difference between these pipes: the first pipe will scan the complete posts' descriptions, while the second pipe will only look at the posts' titles. You can access these pipes here:When you open the pipe's page, enter the search filters, and run the pipe. For example, if you are shopping for a 46-inch LCD HDTV, you can define the following search criteria:
Filter 1: 46
Filter 2: LCD
Filter 3: HDTV
After running the pipe, you will see the list of matching hot deals. At this point, you can do various things with the customized pipe. You can generate a widget (Yahoo! calls it badge) for the pipe results to be displayed in your web site or blog. You can retrieve the URL of the RSS feed of the pipe and subscribe to this RSS feed via one of the supported RSS readers (use the More Options menu). Or you can set up an e-mail or phone-based notification, so that you will be informed immediately once the pipe detects new posts matching you criteria (via the Results by Email or Phone menu).

A limitation of the existing pipe approach is that it does not allow you to define the more precise search criteria. Say, you're only interested in TVs supporting the 1080p display resolution, and you don't care about the ViewSonic models (Note: I'm using ViewSonic here only as an example; ViewSonic TVs are actually pretty decent). Since you cannot add the fourth search filter (1080p) and an exclude criterion (ViewSonic) to these pipes, you can consider building your own as described in option 2.

Option 2. Build your own pipe.
When building a new pipe, you can clone and modify an existing one, such as one of the pipes mentioned in option 1, or create one from scratch.

To build a pipe from another pipe's clone, use the Clone menu option to make your own copy of the original pipe, and then make your modifications. Before doing this, check the source of the original pipe to see if you can figure out how to change it. To view the pipe's source, use the View Source menu option (Note: Do not confuse the pipe's View Source menu with the web browser's View Source menu).

I can't show you how to create a complex pipe, like one of the pipes built by Shiva Hothu, from scratch, but this is how you can build a simple pipe to search for hot deals on 46-inch LCD HDTVs with the 1080p display resolution, which excludes ViewSonic models (again, no offense to ViewSonic; this is just an example):
  1. Create a pipe.
    Sign in to the Yahoo! Pipes web site using your Yahoo! user ID and password (if you do not have Yahoo! credentials, you will need to register; registration is free). After signing in, click the Create a pipe link.
  2. Add RSS feed(s) to the pipe.
    In the pipe editor, expand the Sources group (in the left pane) and drag the Fetch Feed module to the editor window. In the URL field of the Fetch Field module, enter the URL of the RSS feed of your favorite hot deals site. In this example, I will use FreshBargains' feed (http://rss.freshbargains.net/rss.xml) because it already aggregates feeds from multiple hot deals sites. [If you think that FreshBargains feed fetches too many results, many of which are not really hot deals, you can use a more restrictive alternative. For example, you can use SlickDeal's feed (http://feeds.feedburner.com/SlickdealsnetForums-9) or something else.] To add more feeds, click the plus sign on the right side of the URL label and fill enter the URLs off additional feeds.
  3. Add inclusive filters.
    Expand the Operators group (in the left pane) and drag the Filter module to the editor window. Click on the dot at the bottom of the Fetch Feed module (Fetch Feed output) and drag the edge of the appearing line to the dot at the top of the Filter module (Filter input) to connect them. In the Filter module, make sure that the top-most text reads: Permit items that match all of the following. Click the plus signs next to the Rules label repeatedly to create four rows of rules. Make the first two columns of all four rules read: item.title contains. [This pipe will only search for matches in titles; to search complete posts, instead of item.title, select item.description.] Enter the following values in the third column of the four rules: 46, LCD, HDTV, and 1080p (order is not important).

    Tip: To see the output of each module, use the Debugger tab at the bottom of the screen. The Debugger tab displays the output of the currently selected module, so you can immediately see the effects of your filter settings. You can also use the Debugger tab to vie the elements of the feed (you need to click the arrow next to each feed entry to view its contents).
  4. Add exclusive filter.
    Add one more Filter module (as you did in previous step), and connect the output of the previous Filter module to the input of the new Filter module. In the new Filter module, make sure that the top-most text reads: Block items that match any of the following. Make the rule read: item.title contains ViewSonic.
  5. Complete the pipe.
    Finally, connect the output of the last Filter module to the Pipe Output module (this module was auto-generated when you added the first module to the pipe), so your pipe will look like this:
    Click the Save button. When saving the pipe, give it a meaningful name, such as Yahoo! Pipe (46", LCD, HDTV, 1080p, no-ViewSonic). You can also define other properties, such as description and tags, but these are only necessary if you want to publish your pipe in the Yahoo! directory to make it visible to general public.
  6. Use the pipe.
    When your pipe is ready, run it and use the Use this Pipe menu options to retrieve the URL of its RSS feed, subscribe to it in your favorite RSS reader, or register for the e-mail or phone notifications when the pipe detects new posts.
For other examples of using Yahoo! Pipes, see the following articles (although these are not related to shopping, they can give you a better understanding of Yahoo! Pipes):Once you get a grip on the basics, you can build more complicated and useful pipes, but in the meantime, even the most simple pipes should be able to help you find the best deals, and save time and money.

Additional references:
More fun with Yahoo! Pipes
Blogging and podcasting: personal syndication for fun and profit

Friday, June 13, 2008

Google I/O 2008 presents

Summary: Recommended videos and presentations from the Google I/O 2008 developer conference in San Francisco.

Videos from the Google I/O 2008 sessions (and events) are finally available. If you are interested in subjects such as Google (in general), Ajax, Google APIs, Gears, OpenID, OAuth, and other developer-centric topics, here are some videos, which I would recommend (this list includes sessions which I attended, as well as sessions which I'm planning to watch, so I don't guarantee all of them to be interesting; I'll mark the ones that I haven't seen, yet, as such):

Keynotes
  • Client, Connectivity, and the Cloud
    by Vic Gundotra, VP of Engineering (1 hr 30 min)
    Vic is responsible for developer evangelism and open source programs at Google. He also oversees applications development. Previously, Vic spent 15 years at Microsoft, where he worked on a variety of products and operating systems, including Windows 3.0, NT, Windows XP, and Vista. This keynote offers a brief overview of technologies discussed at the conference and features several speakers including Allen Hurff (MySpace), Steve Horowitz, Kevin Gibbs, Mark Lucovsky, Bruce Johnson, David Glazer, and Nat Brown (iLike).
  • Imagination, Immediacy, and Innovation... and a little glimpse under the hood at Google
    by Marissa Mayer, VP of Search and User Experience (1 hr)
    Marissa leads Google's product management efforts on search products – web search, images, news, books, products, maps, Google Earth, the Google Toolbar, Google Desktop, Google Health, Google Labs, and more. This talk is a glimpse from inside the trenches of how Google builds products (including practical insights on how to build the best products), how to prioritize your efforts especially under resource constraints, and how to think about strategy.
AJAX & JavaScript
  • Spice up Your Web Apps with AJAX APIs
    by Mark Lucovsky (Google) (57 min)
    Mark is an engineering director at Google and Google API lead. He previously worked for Microsoft, where he was part of the team that designed and built the Windows NT operating system. In this presentation, Mark shows how to use Google AJAX APIs to perform such tasks as downloading Atom and RSS feeds, search and display videos, images, news, maps, local business data, and do other things.
  • Can We Get There From Here?
    by Alex Russell (SitePen) (1 hr 2 min)
    Alex is Project Lead for the Dojo Toolkit and Director of R&D at SitePen. He discusses the goods and bads of various Web technologies: HTML, HTTP, JavaScript, CSS, GWT (Google Web Toolkit), Flex, Silverlight, HTML 5, Gears, Ajax libraries, and more.
  • State of Ajax: The Universe is Expanding
    by Dion Almaer (Google) and Ben Galbraith (Ajaxian.com) (56 min)
    Dion and Ben are the founders of Ajaxian.com. In this presentation, they discuss the latest Ajax developments, including multithreaded JavaScript technology-powered UIs, robust offline storage, choosing the right Ajax/JavaScript technology framework, Ajax outside of the browser, and more.
  • HTML5, Brought to You by Gears*
    by Aaron Boodman (Google) (36 min)
    In addition to his daytime job at Google, where Aaron works with JavaScript, DHTML, and Ajax, he is also the author of youngpup.net, a weblog about web development; numerous open-source JavaScript libraries; and Greasemonkey, a popular user script manager for Firefox. In this talk, Aaron explains the purpose and mission of Gears.
  • Even Faster Web Sites
    by Steve Souders (Google) (59 min)
    Steve is the author of High Performance Web Sites. At Google, he works on web performance and open source initiatives. In this talk, Steve discusses the best practices he's discovered, including the impact of iframes and where to place (and where not to place) inline script blocks.
  • Improving Browsers in New Ways: Gears++
    by Chris Prince (Google) (49 min)
    Chris, who is a tech lead of the Google Gears development team, explains what the Gears technology is good for.
SocialIf you can recommend other sessions, please add a comment.

Additional references:
Videos from all Google I/O 2008 sessions
Description of all Google I/O 2008 sessions
Google I/O 2008

Friday, May 30, 2008

Google I/O 2008

Summary: Impressions from the Google I/O 2008 developer conference.

I've just returned from the two-day Google I/O 2008 conference in San Francisco. Overall, I have enjoyed the event. Here are some impressions, thoughts, quotes, and references I brought back.

Logistics worked well with one exception: there were no dedicated lunch breaks, so the choice was either to go hungry or miss the beginning (or end) of some sessions. I chose food and feel bad for missing the beginning of Mark Lukovsky's "Spice up Your Web Apps with Google AJAX APIs" presentation; I'll watch it when the videos get released (by the end of next week).

It would've been helpful to have an agenda for each session; the provided summaries did not sufficiently explain the scope of the talks. The difference between tech talks and regular sessions is still not clear to me. I attended regular sessions, but will review tech talk videos (when they are available) to see if they would've been more appropriate.

The negotiated hotel rates ($209 for San Francisco Marriott and $189 for InterContinental San Francisco) seemed a bit overpriced; you could've booked Parc Fifty Five Hotel via hotels.com for $119. I stayed at Sir Francis Drake, which is an approved hotel at my company; it was okay (good location and not too shabby).

[I'm not sure if it's appropriate to mention in a techno blog, but someone must say it, so what a heck... here is goes: men's bathrooms at Moscone Center seem to have been designed for Sen. Larry Craig (R). Missing partitions between the, pardon me, urinals, can make a simple guy rather uncomfortable. It's not a Google issue, though; just something Moscone Center should've improved.]

Getting back to the event... First impression: I haven't seen so many MacBooks (including MacBook Air) in a single place at a given time. Almost all speakers used MacBooks, and many attendees did too, although Dells were also popular among attendees.

It seemed to me that Google I/O had less hype than Microsoft events. At Microsoft events, I often feel as if I'm being told:
"Remember the Old Stuff we showed you four years ago? The stuff we raved about at a similar conference? Forget about it! It's garbage! Here is the New Stuff which will solve all of your problems."
At Google I/O, the message was more down to Earth. On the other hand, the conference could've benefited from recognizing the existence of Google's two primary competitors: Microsoft and Yahoo! (mentioning Microsoft in the context of "Vista Sucks" does not count). For example, why in their otherwise excellent "State of AJAX: The Universe Is Expanding" presentation, along with Dojo, script.aculo.us, jQuery, Prototype, and Google Web Toolkit, Dion Almaer and Ben Galbraith did not mention Microsoft's ASP.NET AJAX Control Toolkit or Yahoo's User Interface Library?

Some of the demonstrated technologies looked promising, although I'm not sure if they bring value to the enterprise any time soon. For example, Google Visualization API, the API which simplifies development of graphs, charts, diagrams, and other visual elements, has great potential; unfortunately, at this time it works only with Google spreadsheets (see "Visualize your data: Google Visualization API" presented by Yoah Bar-David, Nir Bar-Lev, Yariv Ben-Tovim, and Kris Nye).

Google Gears (or, as they are currently called, just Gears) -- a plug-in for Firefox and Internet Explorer (and Opera support is coming soon), which offers a richer user experience -- is gaining momentum. It was interesting to see how applications such as Zoho -- Zoho is believed to offer the most advanced online office suite -- use Gears (see "Gears Case Studies: Zoho offline on Gears, Buxfer secure and offline finance with Gears" presented by Raju Vegesna, Ashwin Bharambe, Shashank Pandit).

"OpenSocial, OpenID, and OAuth: Oh, My!" by Joseph Smarr of Plaxo was another insightful talk. It was not as technical as I had expected, and Joseph kinda rushed through the OpenID and OAuth parts (the main areas of my interest in this session), but still the overview and examples of using OpenID and OAuth to address the online identity crisis were very informational.

Wednesday's quote of the day came from the Dojo toolkit's creator Alex Russell, who presented "Can We Get There From Here?" (he was discussing the limitations of current Web technologies):
"There is a whole lot of suckage on this spectrum of suck."
I missed Wednesday's keynote (one more video to watch), but Marissa Mayer's presentation on Thursday was lovely. The keynote was both informational and entertaining. Good job, Marissa.

Thursday's quote of the day came from Sergey Brin, per Marissa Mayer's story. When she asked Sergey what had inspired him and Larry Page to come up with such a simple, yet functional design of the home page, Sergey said:
"We did not have a Web master, and I don't do HTML."
In addition to the general sessions and tech talks, some of the most interesting things were discussed offline. For example, here is a quote (with minor grammar corrections) from my fellow colleagues Karun and Andy, who published a more detailed account of the conference:
"We had a chance to talk to a tech lead on Google Gears about how they develop and elevate application efficiently. His answer is simple - they do not follow any software development methodology or approach. They have [best coding] practices. On the top of it, the hiring bar is so high, the engineers generate good quality code and constantly find ways to improve it by peer reviews. Some parts of the organization follow SCRUM, but they are not crazy about it. What they believe is: less process more room for innovation."
To learn about Google I/O from people who documented there experiences at the conference better than me, check out these blogs:I'll update this post and add links to videos and presentations when they become available; if you are interested, please come back in a week or so.

UPDATE: Videos and presentations are now available. I've listed my recommendations in a separate posts.