Excel 2007 for prior users (Hate the Ribbon?)

Share
imageFrustrated with the Ribbon bar in MS Office?  Here are several solutions.
 
 
As we all found out the hard way, Microsoft completely redesigned the user interface in Office 2007. For some reason, they felt it necessary to do away with the tried and true and standard and universally understood user interface elements such as menu bars. In their place, are what they now call “ribbon bars”. They don’t even give you the option of turning on the old menu bars. I’ve been using Office 2007 for a few months now and I’m still struggling. I’m not seeing any benefit to this new UI at all. Don’t misunderstand… I’m all for constant improvement and have been accused, on multiple occasions of pushing the envelope too far… heck, constant improvement is nearly a religion of mine, but Microsoft has gone not just a few steps further outside the envelope than I have, but they’ve ripped it to shreds. At the very least, they should have provided a way for us that already knew our way around the software a way to turn it back on.

And, before you say that the old keystrokes work, they do NOT. One of many examples that don’t work: Alt+T would open the Tools menu. There IS NO tools menu now!!! Ugh! Anyway, where was I?

Ah yes! I did find a nice piece of work that someone put together for us that would actually like to get some work done (albeit, very slowly now). This document is organized by the old menu bar interface and shows you where each old menu command’s capabilities can be found on the new unicorn and raindbows, phisher-price user interface.

http://transition.gmu.edu/crosswalk/Excel%202007%20Crosswalk.pdf

[Update 2011-08-31]
An even better solution:  UbiMenu, gives you a custom tab that has the old menus and button bar!
 
An even BETTER solution:  LibreOffice (formerly OpenOffice)
 
LibreOffice is a replacement for MicrosoftOffice.  It’s a FREE office (source code included, if you want it) that completely replaces Microsoft Office.  You can install it on as many computers as you like.  It’s available for Windows, Mac, & Linux.
 
LibreOffice is a spinoff from OpenOffice.  OpenOffice was created by Sun and provided a completely free Office Suite that was compatible with Microsoft Office Word, Excel, PowerPoint, etc….  Unfortunately, Oracle bought Sun and now owns OpenOffice and few people trust Oracle.  As a matter of fact, they trust them so little that many of the OpenOffice developers spun off their own branch copy, now called “LibreOffice”.  All future development is now continuing with LibreOffice.  If you have OpenOffice, dump it and install LibreOffice (it’s built from the same source code as OpenOffice, so you’re not losing anything at all, but gaining everything).
 
Hope this helps relieve some of your frustrations.
 

BTW, if you want an invite to Google Plus, e-mail me at image. That’s not a clickable e-mail address… It’s a picture to prevent spammers from easily scraping it. You’ll need to type that address, exactly as you see it, including the G and the + in front of the word “Invite”.

See this image? image
You’ll find an actual working version of it at the bottom of this article. Please click the appropriate buttons in it to let your friends know about this article so they too can get their UI configured appropriately.

Check back later for updates too!

Click here to follow me on Google+.

Good Luck and Enjoy your new Google+ account!

Share

Visual Studio 2008 SP1 – First Looks

Share
I downloaded and installed Visual Studio 2008 SP1 on Tuesday, 2008-08-12.

If you want to download it, you can get it here (this will download a very small EXE, which will then download the rest during install):

  • Small SP1 EXE
  • http://www.microsoft.com/downloads/details.aspx?FamilyID=fbee1648-7106-44a7-9649-6d9f6d58056e&DisplayLang;=en

If you want the ISO, get it here:

  • VS2K8 SP1 ISO
  • http://www.microsoft.com/downloads/info.aspx?na=47&p;=3&SrcDisplayLang;=en&SrcCategoryId;=&SrcFamilyId;=fbee1648-7106-44a7-9649-6d9f6d58056e&u;=details.aspx%3ffamilyid%3d27673C47-B3B5-4C67-BD99-84E525B5CE61%26displaylang%3den

If you don’t want to burn the ISO, you can mount it as a virtual drive. If you have VMWare, you can mount an ISO so that the VM sees the ISO as an actual CD/DVD. If you want to install it on your host, you can share the virtual disc from within your VM and share it on the network, then access it over the virtual network from your host (works great). Of course, this is using a sledge hammer to swat a fly, so I wouldn’t recommend this unless you already have VMWare. But if you DON’T have VMWare, you should get it (not just for the ISO mounting support, of course).

If you’d prefer to not go the VMWare route (or if you don’t have VMWare), here’s a list of ISO mounting drivers:

OK, so these are my first impressions of VS2K8 SP1:

  • It takes waaaaaaaaaaaay too long to install (2-3 hours or so on a 2.4Ghz Dual Core PC w/ 7GB RAM and Windows XP 64bit).
    • I don’t know if it was slow in downloading while installing or if the install was just slow, but I recommend downloading the ISO and mounting that to install from it (or if you have an MSDN sub, just wait for the DVDs to arrive in the mail and install from there).
  • I didn’t have any problems installing (other than the really slow install time). Everything works.
  • Compiles now take about 20-30 seconds LONGER!!! (correction 2008-08-27: It takes 40 seconds longer!!! It just sits there, doing nothing for 40 seconds.)
    • This is VERY frustrating! Most people don’t realize this, but this is actually a game changer! Making a quick change, then running to test, then going back and doing another quick nudge, then run, is no longer a viable possibility since it takes so freaking long to wait on the compiler. I now need to spend more time batching up changes. This is going to seriously impact some parts of my development. Back when I was programming in Delphi, it was always super fast. Compiling was almost instantaneous. When I had to use a much slower compiler at work, the people there who hadn’t experienced such fast compiling couldn’t understand what it was they were missing, as I suspect many readers here will not realize what a difference quick compiling makes in your development efforts… and I know that Microsoft doesn’t.
  • Stepping through code gives you the option of NOT stepping into getter and setter methods on properties.
    • This is a HUGE help! Since I use properties a LOT, stepping through code is a major pain when calling a method that takes several parameters, and each one is a property that I’m passing in… I used to be forced into each and every freaking property getter. Now, I just get sent straight into the method I’m calling.

So, that’s all I’ve seen so far. The MUCH slower compiling is a huge disappointment, but possibly the newly added benefit of skipping over property getters and setters might offset the extra wasted time. Time will tell.

Share

CodeStock 2008 ASP.NET MVC

Share

August 9th, 2008 was the 1st annual CodeStock convention. For a rundown of the events, click here. Telerik’s main evangelist, Todd Anglin gave a great presentation on Microsoft’s still beta ASP.NET MVC product. If you’ve never heard of it, first, let me explain what MVC is:

MVC is an acronym for Model, View, Controller. It is a design pattern, not a product. But, Microsoft has created a product based on this design pattern. The design pattern stresses separation of concerns, meaning, your code and your user interface are completely decoupled and unaware of each other. In other words, your user interface layer has zero code that talks to your “model” (or business logic) and your business logic (model) has no code that interacts with the user interface. This provides many advantage, including, but not limited to:

  • True reusability of your business logic. Can be used in multiple projects with no modification.
  • TDD – Automatically makes your business logic (your model) testable by common test utilities like NUnit.


Now, to define the three words in the acronym:

  • Model – This is your business layer. It is code only. You can easily make this as a DLL or a class library all by itself.
  • View – This is your presentation or your HTML.
  • Controller – This is the plumbing that sits between your Model and your View. This is really where most of Microsoft’s new ASP.NET MVC framework comes into play.


That’s MVC in a nutshell. Now, for Microsoft’s implementation of it: Normally, a design pattern is not a product, but a concept or practice, but Microsoft has provided a new framework (several DLLs with new classes and some Visual Studio project templates… packaged as a single download) specifically to support this design pattern. It should be pointed out and made very clear that ASP.NET MVC is an alternative to WebForms. This means that you use either ASP.NET MVC or WebForms. If you use ASP.NET MVC, you will throw out EVERYTHING you’ve learned about writing web apps with .NET WebForms. ASP.NET MVC does not have visual controls that you can drag and drop onto a form. It does not have events on those controls (because there are no controls).

If you think that without the visual controls, you’d be writing a heck of a lot more HTML, you’re right, unfortunately. As a side note, Telerik has begun work on this. They will be creating a control set for ASP.NET MVC. I believe as of this writing (2008-08-13), they are still in the “how are we going to do this” stage, which means you have an opportunity to give them suggestions. I would encourage you to go to www.telerik.com and provide some feedback for them.

Back to writing more HTML: This, is of course, a VERY BAD thing. I hate having to get down and dirty with HTML and I do it as little as possible. I like to drag, drop, select an event and write my handler. I come from a non-web programming background and don’t much care for having to tinker with HTML… but enough about my personal opinions… Since your view (UI) and your model (business logic) are completely separated, your view is simply nothing more than just plain old presentation, which means HTML. The way you connect your UI clicks and such to your code is via URLs. Nothing has an .aspx extension. You have complete control over your URLs. You don’t have pages, per se, like you do with .aspx pages. All of your UI actions are directed to a URL and your URLs don’t necessarily have any real correlation to folders in your project.

You controller code is what links your URLs to classes and methods in your model. I won’t get into code samples here, but that’s the gist of it.

Now, on to my session notes from Todd’s presentation at CodeStock 2008. These notes were taken while he was speaking and are in outline form. They are for my personal use, but I’m including them here in case they may be of use to you:

  • Separation of concerns.
  • Alternative, not a replacement for ASP.NET web forms.
  • More control over HTML and URLs
  • Easier Testing
  • No unexpected rendering
    • HTML is 100% by you (nothing rendered by the framework).
      • No automatic fluff like ViewState (There is NO VIEWSTATE!!! (good or bad))
  • No file extensions (no .aspx)
    • URL -> Controller -> Model -> View Data (ie. display.aspx, edit.aspx)
    • Request -> HTTP Routing -> Route -> Route Handler -> …
  • Map URLs to class.
  • Classes handle processing of actions (decide which view to render).
  • Everything is interface based (as opposed to class).
  • Everything is extensible – read up on C# extension methods
  • Everything is testable
  • Microsoft.Web.Mvc.dll
  • Define your routes in global.asax.
  • Define controller, views
    • User HTML Helpers to render HTML (html helpers are new classes in the ASP.NET MVC framework). Don’t waste time manually writing C# code that generates HTML… use the helper classes.
  • Define Model (Lina to Sql, for example)
  • Key differences from webforms (didn’t write any down)
  • You Must target .NET Framework v3.5.
  • Will eventually support NUnit.
    • When you make a new ASP.NET MVC project in Visual Studio, it will prompt you, immediately, for the test framework you want to use to make your test classes. THIS IS VERY VERY IMPORTANT! YOU SHOULD DEFINITELY DO THIS!!!!
  • You maintain state… There are no session variables or view state or application variables or server variables… you do this on your own. (great! Now every code monkey is going to have their own, custom, proprietary, and buggy state management system!!!)
  • View
    • Can be anything, not just HTML… you could generate SQL or C# or XML or some binary stream… anything.
    • Controller creates (key, value) dictionary “ViewData” and gives to view. View uses it to render output.
  • HTML Helper
    • is a shortcut to rendering html.
    • HTML.ActionLink
  • Controller folder has a file per controller (the ASP.NET MVC project template creates several folders in your project… Controller is one of them).
  • Views folder has a view for each controller.
  • Routes are matched by order defined… In other words, if you’ve defined multiple routes that can all handle a single URL, the first one defined is the one that gets it.
  • You should make mock classes to help with your unit testing. Some mock tools are:
    • RhinoMocks
    • Moq
    • TypeMocks


________________________
notes to myself:

Those were my quick and dirty notes. I took them for myself, but I posted them anyway, because they could potentially have some use to others.

If you’re interested in attending CodeStock 2009, contact http://codestock.org/.

Share

CodeStock 2008 XNA

Share

Today (August 9th, 2008) was the 1st annual CodeStock convention. For a rundown of the events, click here. By far, the coolest event was the one on XNA… Microsoft’s free game development SDK for Windows, XBox 360, and Zune (yah, Zune… for all 4 of you that have one). It was presented by Chris Williams from Magenic. Chris definitely looks the part of a game developer… young guy, goti (?SP?), bald head, heavily tattooed, and a true hacker (and one of the 4 Zune owners)… well, almost a true hacker. I had to revoke that label when he started promoting VB 😉

I’ve been following (I use the term loosely) the development of the XNA platform since it came out over a year or so ago… don’t recall exactly when it came out now. I’ve been intending to get into it, but it’s hard for me to justify my time on writing games when I’ve got a list of things that need to get done that’s a mile long. Now that my 8 year old son is interested in it (being a HUGE XBox gamer himself), this may be a good excuse for me to dive into it. My short and limited exposure to it tells me it looks like it’ll be exceptionally easy to write a game with this platform. It’s essentially a new class library that sits on top of the .NET framework. You write your game once and with little or no modification, it can work on Windows, XBox 360, and Zune (and potentially other platforms in the future… like Linux with Mono??).

XNA games utilize your hardware GPU (if you have one), otherwise, software rendering is performed.

Anyway, here’s my quick and dirty note taking during Chris’ presentation (which, turns out to be my largest set of notes I took during all of CodeStock).

  • Use XNA to develop games for:
    • Windows
    • XBox 360
    • Zune (3.0 XNA SDK needed)
  • 2D and 3D graphics supported.
  • Works with any Visual Studio SKU (Update 2008-12-17: for XNA 2.0, but XNA 3.0 requires any Visual Studio 2008 SKU).
  • http://creators.xna.com/resources/essentials.aspx
  • XNA Game Studio 2.0 – Needed if you’re not using Visual Studio 2008.
  • Current version is 3.0 CTP (pre-beta). (Update 2008-12-17: 3.0 has been RTM for several months now)
  • Drivers for wired XBox controller (driver not needed if using Vista)
  • “Game Loop”
    • XNA games have a “game loop” that continuously runs. Each iteration calls your code for updating object positions and drawing.
    • LoadGraphicsContent()
      • load sound, images, from folder.
      • makes objects out of them.
    • Update()
      • Called by framework, you handle.
      • You check state, update, then call Draw()
    • Draw()
      • You read state and draw your scene for that time slice.
  • 2D objects.
    • Sprite batch
      • Bundles up multiple sprites to send to the GPU for one quick render.
      • There’s a start, a bundling, and an end.
    • Content Manager
      • Manages life of objects (sprites, sounds, images, etc…)
    • Game Time
      • Important concept. Provides timing information for:
        • how many milliseconds since last update, etc…
        • helps games run the same on different speed hardware.
    • Content Pipeline
      • Processes art assets at build time.
      • Creates names for assets to use in code.
      • Uses content subproject in your game.
    • Sprites
      • There’s no “sprite” class, but there is a Texture2D class.
        • example: Ball.BallTexture = content.Load… (didn’t have time to write down the whole line)
        • Update 2008-12-17: Ball.BallTexture = content.Load(“Ball”);
      • Shaders (.x files) – information to send to GPU.
        • HLSL (High Level Shader Language)… not available on Zune (Zune has no GPU).
          • GPU effects.
        • There’s no intellisense for this.
      • Purple ($FF00FF) is transparent, unless your sprite files are in a format that supports transparency (alpha channels are supported!!!) (Update 2008-12-17: PNG and JPG images with transparancy work wonderfully! No need for purple.)
      • Background image (in 2D games) is considered a sprite.
      • Vector2 (point?)
      • Origin is 0,0
      • When a sprite is rotated, it’s rotated around the origin.
      • When scaling a sprite, the origin doesn’t scale with the image.
  • GamePad object/class is the controller.
  • Sounds
    • XACT is a tool in XNA 2.0 & 3.0. BTW, no XBox 360 support in XNA 3.0 (will be in final release… they just don’t do it until final release because of complex restrictions/paperwork to get it certified). (Update 2008-12-17: 3.0 has been RTM for several months now. You can currently run your game on XBox 360 after a $99 fee.)
      • XACT is a GUI app.
      • Can create banks of sounds (.XSB files).
    • Zune doesn’t support XACT, so use the Audio API.
  • Development
    • You can step through your code, directly into the XBox 360.
    • XBox 360 uses a modified version of the compact framework.
    • To put your own games on your own XBox, you must subscribe to the $99/year ($50/3 months) service.
      • With this service, you can also publish your games for peer review and eventually sell them on XBox Live for REAL money. M$ keeps about 1/2. (Update 2008-12-17: You keep 70%!!!)
      • With $99 sub, you get TorqueX framework… normally $150 or so just by itself. Apparently you get lots of cool stuff for game dev with TorqueX.
  • Zune
    • Screen res = 320×240
    • No shaders
    • No GPU
    • No XACT
    • WiFi support
    • No emulator available – must deploy to Zune during development
    • 16MB max for game.
    • no data transfer to PC (to prevent copying MP3s… stupid DRM crapola)
  • XNA community games
    • Make an installer, then enter “rating” information, then publish.
    • Peers review your game, then pass (or fail) for whether it works, not whether they like it.
    • You get paid when people buy through XBox Live. You keep 70%.
    • Game size determines sell price (yah, I know… really poor formula… I can add 20MB of random data too!) (Update 2008-12-17: You set your price. If your game size is too big, there’s a MINIMUM amount you’re allowed to charge. You can charge more though.)
    • I need to find the creators club web site… sounds like cool stuff on there. (Update 2008-12-17: http://creators.xna.com)
    • Starter kit content is all free to use in your own games.
      • Takes about 45 minutes to compile and deploy to XBox 360 on the first compile.
  • Text in games
    • No font system… must make text sprites in content folder.
  • Resources
    • http://msdn.microsoft.com/en-us/xna/default.aspx
    • xnadevelopment.com
    • ziggyware.com
    • creators.xna.com
    • thezbuffer.com
    • blogs.msdn.com/shawnhar
    • blogs.msdn.com/xna
    • ILoveVB.net/web/blogs/vbxma (if you really want to punish yourself). I wouldn’t have posted this link, but it’s Chris’ own blog, so he deserves his link here.
    • twincitiesxnausersgroup.com
    • igda.org/wiki/index.php/igm (what’s up with PHP on this site???)


If you’re interested in attending CodeStock 2009, contact http://codestock.org/.

Share

CodeStock 2008 WCF

Share

Today (August 9th, 2008) was the 1st annual CodeStock convention. For a rundown of the events, click here. The 2nd event I attended was an intro to WCF (Windows Communication Foundation). It was presented by James Bender. Here’s a quick and dirty synopsis of his talk:

  • WCF puts all kinds of network resources in a “mesh”.
  • Visual Studio 2008 (VS2K8) has a WCF project template.
    • The generated .cs files are garbage, just delete them.
    • The generated config is very useful… keep it.
  • Services can be exposed as HTTP, Named Pipes, MSMQ, or TCP chatter.
  • Hosting your services
    • IIS6 – HTTP only.
    • IIS7
      • WAS (Windows Activation Services), to any endpoint.
    • Can be self-hosted (no IIS needed).
    • Windows Service.
    • Windows application.
  • Out of the box…

    • Basic security is provided.
    • Logging – produces a massive amount of data.
    • Tracing – produces a massive amount of data.
    • Communication editor.
    • Test client app.
  • “ABC’s” of WCF endpoint:
    • Address
    • Binding (HTTP, TCP, etc…)
    • Contract
      • defines services & I/O expectations.
      • Data Contract (Body of message) – defines the data structures used.

        • Attributes on class members.
      • Message Contract – defines the methods (I think… someone correct me on this).
      • Fault Contract – defines exceptions to be thrown / data to be returned on errors.
        • basically, better exceptions.
  • Channel Stack – As data flows from one end to the other, it can pass through any number of filters that receive the data, process it, and output something, all the way through.
    • Each channel is a software layer that sits in the communication line & receives, processes, and outputs to the next channel.
    • types:

      • Datagram
      • Request Reply
      • Duplex – 2 way
  • Behaviors & Dispatchers
    • Custom – to preprocess messages.
  • Security – lots of built in & easier than prior technologies.
    • 3 modes:
      1. Transport based – secure only over ONE hop.
      2. Message Based – secure over all hops.
      3. ummm… I don’t have the 3rd one (sorry).

Those were my quick and dirty notes. I took them for myself, but I posted them anyway, because they could potentially have some use to others.

If you’re interested in attending CodeStock 2009, contact http://codestock.org/.

Share

CodeStock 2008 SilverLight

Share

Today (August 9th, 2008) was the 1st annual CodeStock convention. For a rundown of the events, click here. The first event was the opening keynote address by Jeff Prosise. He spoke mostly about SilverLight. Here’s a quick and dirty synopsis of his address:

  • Microsoft no longer uses the term “UI (User Interface)”. It’s now “UX (User eXperience)”.
  • The Core BCL (Base Class Library) is composed of 6 DLLs (I don’t have them listed here):
  • There’s an extended BCL
    • Assemblies not included in the browser add on
      • Microsoft will be reviewing usability and deciding which, if any, will be added to the core SilverLight BCL.
      • Add references to these DLLs in your project and they’ll automatically get downloaded to the client’s PC when they use your SilverLight app.
      • The browser will cache these DLLs so they will not be re-downloaded every time.
  • Networking
    • Silverlight apps can cross domains (They can access servers outside of the server they were downloaded from).
    • Can open sockets.
    • Some features require user permission.
    • I/O is always asynchronous. There is no option for synchronous I/O.
    • There’s a webclient class for controlling the client.
      • background threads can’t directly touch the UI (without marshaling)
      • But the webclient can? (someone correct me on this).
  • Controls
    • The looks of the controls are completely customizable.
      • Example: Listbox – item content can be any XAML.
  • Multi-threading

    • Thread, ThreadPool, Monitor, etc…
    • Timers can fire events at given intervals, so handlers run on the UI thread.
  • General File I/O.
    • Not permitted unless an open file dialog is presented to the user and the user manually selects a file.
    • “Isolated storage” is permitted and files are persisted.
  • Silverlight can call JavaScriptC# can call JavaScript.
  • JavaScript can call C#.
  • Events can be fired in C# and handled in JavaScript.

If you’re interested in attending CodeStock 2009, contact http://codestock.org/

Share

CodeStock 2008

Share

CodeStock 2008, for those of you that don’t know, is a new (and hopefully annual) event for .NET developers. Today was the 1st event. I attended today and here’s the low down of what went down:

  • 7:30 am: Registration.
  • 8:00 am: Jeff Prosise gave the keynote address and gave a really good and informative discussion of SilverLight. I’ll post a separate blog post about this.
  • 9:00 am: There were 5 or 6 separate seminars going on that you could freely choose from. I went to one on WCF (Windows Communication Foundation) presented by James Bender (who had previously been a lighting engineer for Slayer… unless he was joking! :). Was pretty good. I learned some useful stuff that applies to what I’m currently working on. I’ll write separate post about this.
  • 10:50 am: Again, 5 or 6 separate seminars… I chose to attend an XNA game development conference, hosted by Chris Williams from Magenic. Was pretty cool. It’s really easy to make games for XBox 360, Windows, and now Zune. I plan on playing with this a lot. My son (8) is really interested in this too, but I doubt his 8 year old brain has the attention span to do it just yet. I’ll do a separate blog post on this.
  • 12:00 pm: Lunch. Had lunch with a prior colleague from Chattanooga and an old friend from Chattanooga and several new friends. Apparently, none of them like cookies for desert. Luckily, as it turns out, I do.
  • 1:00 pm: Again, each time slot had 5 or 6 separate seminars. I went to an ASP.NET MVC class. I’ve been reading a lot about this and it looks cool, but not quite ready for prime time. Anyway, it was presented by some dude from Telerik (I’ll post his name once I find it in my bag of goodies).
  • 2:20 pm: LINQ to SQL – CRUD was the class I attended. I’ve never actually used LINQ to SQL yet, but I’ve read bunches and bunches about it. I’ve been using LLBLGen Pro, which is way more powerful, but not quite as small a learning curve. I figured, one more tech speech on it would be useful. It was only the guy’s 2nd time presenting it, so he fumbled some, but seemed to know his stuff… mostly. The dude in the far back left corner made sure that everyone knew that he knew it more (and well, he did).
  • 3:40 pm: WPF (Windows Presentation Foundation) presented by Philip Japiksi from Pinnacle Solutions. And yes, I’ll provide a separate post about this.
  • 5:00 pm: Everyone meets in the auditorium for prizes. There were about 200-300 people there. They drew names and I was the 4th winner. The 1st prize was an $11,000 MSDN full sub (wow!) Freakin’ Philip from Pinnacle won that!!! (Update:  I was the grand prize winner for CodeStock 2009 and I went hone with that same $15,000 prize this year! :)) 2nd was an XBox 360, 3rd was Halo commemorative set (with the funky helmet). 4th, was me and I chose a $1299 license of the full Telerik Web and WinForms controls with a bonus set of SilverLight controls (wooohooo!). Biggest prize I’ve ever won!
  • 6:00-8:00 pm: Hanover Fist is playing (local band)… still going on. I skipped it… needed to get home. They’re probably still playing as I write thie (It’s only 7:32 pm now).


All in all, it was a very successful day.

If you’re interested in attending CodeStock 2009, contact http://codestock.org/.

Share