Toledo Code | Coffee

Code_monkey_mug

I am an independent consultant and I miss working with creative people that I was doing during my tenure in the corporate world. Several surrounding areas have implemented a weekly "code & coffee" group which I would like to bring to the Toledo and surrounding areas.

The concept is simple, nerds show up early in the morning and pair with each other to work on projects, play with a new technology, and learn from each other.

So if you are a developer, designer, or want to learn any of these skills, lets all meet up and push some bits around.

I think the location + days may get moved around a bit based on what the community says but let's make it Wednesdays at 6:00 am. I was thinking the best location for now would be Panera in Maumee (http://bit.ly/do2MRq).

Hopefully I will see a lot of creatives at Panera in Maumee on Wednesday, October 13 at 6 am....

A new home

I have moved my old Typepad blog over to Posterous. Sorry if you see old RSS feeds in your feedreader but I guess that is how Posterous rolls. The feed should of stayed the same thanks to FeedBurner.

Why the move?

  1. It will save me money. I was paying $15/month for a Typepad account. Posterous is free.
  2. I like the interface and functionality of Posterous better for administration and the readers
  3. Posterous has an easier and better API. I am going to use the API to get blog posts for http://brilliantfantastic.com.

What's next?

Look for new blog posts coming soon. I will mostly be posting for Brilliant Fantastic's new blog but for the time being, I will be duplicating the posts at http://wrightin.gs. My plan is one post per week. I have a lot building up that I can keep that up for a while.

Stay tuned.

Your ASP.NET Web Forms can have a cool 3 letter design pattern too

I just gave a talk on using the Model View Presenter pattern with ASP.NET web forms. The first third of the talk goes into a deep discussion about the pattern and why it is important and how it fits into ASP.NET web forms applications. The second third demonstrates how to implement the pattern within an existing ASP.NET web forms application. The last third demostrates how to implement the pattern using the WebFormsMVP.

I have attached the code and the database for the demo that I give in the talk and the slides in pdf format.

If you have any issues or questions with the code or the demo, or if you would like to hear this talk at your user group or meeting, please email me at jamie AT brilliantfantastic DOT com.

Abstract

ASP.NET Web Forms have been getting the short end of the stick lately with the introduction of ASP.NET MVC. We will take a look at how you can implement the Model View Presenter (MVP) pattern with your web forms projects. This will make for a better testable, more organized and maintainable Web Forms application. 

We will first look at what the MVP pattern is, why it is useful, how we can implement the MVP pattern in Web Forms manually and then take a look at the WebForms MVP library and how the MVP concepts are implemented into a great set of libraries.

Bio

Jamie Wright is president of Brilliant Fantastic, a software development consulting service provider and ISV for software management applications. He has over ten years software development experience in Microsoft technologies and has developing in .NET since the first beta release. He specializes in application architecture, design patterns, object-oriented design, and business objects using the .NET framework. He loves spending time with his family, blogging at http://ww.wrightin.gs and he is currently getting therapy for his gadget addiction.

Download ASP.NET MVP Demo Application MVP

Download ASP.NET MVP Database Backup

Download Slides MVP

Intro to ASP.NET MVC with a splash of jQuery Presentation

One of the talks I give is an introduction to ASP.NET MVC with a splash of jQuery. The first 3/4 of the talk is an introduction to ASP.NET MVC and the last 1/4 is an introduction to jQuery and how the 2 technologies can be used together to create current web applications.

I have attached the code for both demos that I give in the talk, the database used for the demo ASP.NET MVC application, and the slides in pdf format.

If you have any issues or questions with the code or the demo, or if you would like to hear this talk at your user group or meeting, please email me at jamie AT brilliantfantastic DOT com.

Abstract

The ASP.NET MVC framework and the jQuery javascript framework work very well together in order to build up to date, rich client web applications with no need for silly plugins.


ASP.NET MVC is a alternative to the traditional ASP.NET web forms from Microsoft. They both use ASP.NET as the mechanism to talk between a web browser and IIS but the patterns they implement are far different.


ASP.NET MVC is modeled after popular model-view-controller web frameworks such as Ruby on Rails. It was not built to replace ASP.NET web forms but rather as an alternative to the viewstate/post back model of web forms.


We will look at the patterns of the ASP.NET MVC framework and explore the work flow of requests and responses to and from a server as well as how it differs from the traditional web forms applications.


jQuery is a javascript framework that is designed to make cross-browser DOM programming easier and make developing with javascript suck less. In this presentation, we will go over the basics of jQuery which will allow you to go home and get started right away. We will cover concepts such as DOM manipulation, CSS manipulation, ajax requests, and user interface effects. jQuery makes performing these tasks trivial and allows you to add ajax calls and Flash-like effects to your web site easily.

Bio

Jamie Wright is president of Brilliant Fantastic, a software development consulting service provider and ISV for software management applications. He has over ten years software development experience in Microsoft technologies and has developing in .NET since the first beta release. He specializes in application architecture, design patterns, object-oriented design, and business objects using the .NET framework. He loves spending time with his family, blogging at http://wrightin.gs and he is currently getting therapy for his gadget addiction.

Download ASP.NET MVC Demo Application

Download ASP.NET MVC Database Backup

Download JQuery Demo Application

Download Slides

Living with your Microsoft VMs "in the cloud" on a Mac

Some Background

So I am a software development consultant. This often requires me to have several different environments setup for several different customers. The best way to accomplish this that I have found is to have a virtual machine setup for each customer. This also requires that I have a copy of that vm on a laptop and at my home setup since sometimes I travel to the customer's office with my laptop.

Old Environment

Apple FanBoy is another adjective that describes who I am. I make money writing code in Microsoft .NET and in the Windows environment but I use the Mac side for everything else. I use a 13" Macbook for client visits and a MacPro beast at home. I placed each client's Windows environment in a VMWare VM with the necessary tools like Visual Studio, Subversion, Git, SQL Server, etc. I would then keep the VM on an external drive and run he VM from my MacPro at home or my MacBook on the road. If I knew that I was going to be at a client for a long time, I would copy that VM locally to my MacBook since it would run faster from my laptops SSD drive. Once I worked at the client site a couple of days, I would copy that VM back to my external drive to run from both at home and at a client site.

Some Issues with Old Environment

There were a lot of issues that I did not like with this setup of copying vms. The first issue was that this was substantially inefficient. Copying 30 gig vm files from external drive to internal drive on various computers took around 20 minutes a piece. This made it hard to quickly get out to a client site for a meeting or to quickly copy the VM back for a "quick fix".

Another issue related to copying vms was that Windows Software Authentication which makes sure you're not using the latest China build is horrible. When copying the vm from one machine to another and/or running the vm on an external drive from different host machines, the horrible satanic "Genuine Advantage" would get confused and de-authenticate your OS since the hardware is changing so much.

The New Environment

The new environment eliminates the issues with the old environment. With the new environment, I still run all of my customer setups in separate VMs. The difference is that these VMs are always run from home on my MacPro. This 8-core, 16G Ram machine is perfectly fine with running multiple (anywhere from 5 - 8) VMs at a time. When I bounce to a client site I still run these VMs from my home computer and I connect to them over Windows Remote Desktop Connection for the Mac.

You really do not see any difference with running this way. The advantage is that I do not need to copy the VMs onto my laptop anymore and I do not get bothered with the software authentication anymore. I don't have to worry about having multiple copies of the same VM on different machines and a portable drive. The biggest advantage is the state of the VM is always constant. I can close my laptop at anytime and know that when I get home, the VM will be in the exact state as I have left it when I closed my laptop. This is especially useful with long running scripts or builds that need to be run and you have to split.

There are a few disadvantages that mostly deal with connection issues. You may have spotty Wifi coverage that causes some lag but the Windows Remote Desktop software is really well written for those scenarios. I have used a VM over a Sprint 3G connection many-o-times without any issues. 

Another issue is that I cannot get any Windows Aero features since Windows does not like you to use those features over RDC. This is not a big deal for me but it may be for you.

I still carry a portable VM with me just in case of an emergency. If I can't connect for some reason, I still have VMWare installed on my laptop and I can get some version of the customer VM from the local drive.

How to setup the New Environment

There are 3 steps to getting this new environment setup on your VM.

 

  1. Setup your guest virtual machine
  2. Setup your host machine & router
  3. Create a dynamic DNS to connect over the internet

Setup your guest virtual machine

I am using VMWare Fusion on my Mac and the screenshots below are from that application. I am sure all virtual machine software apps have these features so use what you like such as Parallels or Virtual Box.

 

  • Change wireless settings on VM to use a bridged connection

In order for your host machine to pass the connection on from the internet to your VM, your VM must have it's network settings on Bridged. I believe the default for Fusion is NAT and so you to change this to Bridged. 

[DISCLAIMER: I am horrible at network administration and so some of this may not be needed or wrong. Please check with a certified network person thingy. I am not responsible for you fucking your stuff up.]

From Fusion, select your VM from you want to make available from the interwebs and select Virtual Machine -> Settings (CMD+E). Select Network and make sure your settings are like the following:


 

  • Change Remote Settings on your Windows VM

On your guest machine, you need to setup Windows to allow for remote connections for remote desktop.

From the Control Panel, browse to System and Maintenance -> System. On the left hand side, select Remote settings.


 

On the Remote settings screen, check "Allow Remote Assistance connections to this computer" and check "Allow connections from computers running any version of Remote Desktop (less secure)."


 

  • Turn off IPv6 [if needed] on your Windows VM

OK, I am unsure why you need to do this but I did in my case. You may not need to do this or you may have to change other settings. Again, I am an idiot when it comes to network administration.

From the Control Panel, browse to Network and Internet -> Network and Sharing Center. On the lef hand side, select Manage network connections.


 

Right-click on your active network connection, and select Properties. Uncheck "Internet Protocol Version 6 (TCP/IPv6)".


 

  • Set static IP address on your Windows VM

You need to setup a static IP address for your VM instead of using a DHCP server which is normally the default. This is an internal static IP address for your internal network. These usually start with 10.0.1.XX. I make sure that the XX will be the same number as the port that I am going to be using to identify the VM later. I start with port 85 and go up from there (skipping 89). You can use any number for XX as long as it does not conflict with other devices in your house such as a Slingbox or another FileServer, etc.

From the Control Panel, browse to Network and Internet -> Network and Sharing Center. On the right hand side, select Manage network connections (same as above).

Right-click on your active network connection, and select Properties (same as above).

Click on "Internet Protocol Version 4 (TCP/IPv4)" and click Properties. In the following window, click on "Use the following IP address" and set your IP address according to the recommendations above.

In this instance, I used 10.0.1.90 to identify this machine since I will connect to it over port 3390. Make sure you remember what this is as you will need it in a little bit.


 

 

You should now be able to ping your VM from another computer in your house and from your host machine. Try to ping your static IP address that you set. If you are unsuccessful, carefully follow the steps above again.

 

 

  • Update Registry settings on your Windows VM

In order to connect to your multiple VMs from the internet, you need to change the port number that they are connecting to. By default, Remote Desktop connections occur over port 3389 and we will change this default port since we will have multiple VMs. Another advantage of doing this is that if you are a customer site, some customer sites block outgoing port 3389 requests and this will get around that.

 

Start the Registry Editor by going to Start -> and type regedit and click enter.

Browse to HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp\PortNumber.

Change the value to the port number you want to use. In this instance, I used 3390 as the port number.


 

Here is another article on changing your RD listening port: http://support.microsoft.com/kb/306759.

  • Add Firewall port exceptions on your Windows VM

You need to add TCP and UDP exceptions to the Windows Firewall in order to connect to your VM over RD for the port that you specified above. 

From the Control Panel, browse to Network and Internet -> Windows Firewall. On the left hand side, select "Allow a program through Windows Firewall".


 

Click on the Exceptions tab and then click the "Add port..." button. On the following window, set the name to "Remote Desktop TCP (3390)" (or the port number you used), set Port number to the one you specified above, and set the Protocol to TCP. Here is what it should look like in this instance:


 

You will want to do the same thing for UDP. Here is what that should look like in this instance:


 

 

Setup your host machine / router

OK, the hard part is done. Now in order to connect to your VM from the internets, you need to be able to route your request in your router for the specified port number to the appropriate VM. To do this, you need to map your port to the appropriate VM. I will show you how to do this for the Apple Airport Extreme / Time Capsule since that is what I am using. I am sure it is easy to find information on port mapping for your specific router on the internet, just Google it.

Open up your Airport Utility and click on Manual Setup for your router.


 

Click on the Advanced tab and click on Port Mapping (it may take a few seconds to be enabled).



  

Click on the small + at the bottom of the Allow list.

Enter your port number (3390 in this case) in the public and private UDP ports and the public and private TCP ports. Enter your internal static IP address (10.0.1.90 in this case).


 

Click Continue.

Enter a description here and click done. I usually use the name of my client followed by " Windows VM" as the name.

That is it for the port mapping. Continue adding all the VMs you want to allow with different ports and IP addresses. Make sure that they do not collide with other devices and services on your network.

The next step is to download the Remote Desktop Client for the Mac on your laptop or other device where you want to access these VMs remotely. You can get the software here. The Remote Desktop client is at the bottom listed under products (horrible page, I know). You then want the latest version.


 

You should be able to connect to your VMs over the internet now. Using your current outside IP address (you can find out what it is by going to http://checkip.dyndns.com/) and the port number, you can connect via Remote Desktop Client. Just use the format XX.XXX.XX.X:3390 (or your port number) and click connect. It will then ask you for your Windows username and password. Bam! Your living in the cloud man.

You can save each connection via the RD Client. I do this by saving via customer name and then use the Recent Connections menu item to switch back and forth.

Create a dynamic DNS to connect over the internet

The final thing you need is a static IP address if you do not already have one through your ISP. The good news is that there is a free service which allows you to use your dynamic IP address that is usually what your ISP will give you for free. They usually don't change this often but when they do, you will not be able to connect to your VMs anymore.

DynDNS allows you to specify a domain name and you can use this domain name to link to your dynamic ip address. The trick is that you download a small application on your host machine which notifies DynDNS when your IP address has changed so that it can update where it points the domain to. The free account is pretty easy to use. The only catch is that DynDNS will send you an email once a month with a link that you need to verify that you are still using the service. If that is too much trouble for you, feel free to pay for it using their pricing services.

The signup is pretty self explanatory. You can download the client at https://www.dyndns.com/support/clients. The client is not needed as they have a web interface as well if you don't want to clutter up your system. I did not install it as the dynamic IP address does not change at all for me.


I know this was long but I wanted to make it detailed enough to follow pretty easy. It's really nice to work this way once it is set up properly. Happy living...

 

CodeRush Template for CSLA Properties [Updated]

[Update: Thanks to Mark Miller's comments below, I have changed the templates and added a link to the new ones below marked as version 2. The new templates fix some bugs and add some additional functionality. You can now use nullables and generics in your type definition without issue. I changed the shortcuts as well as added additional shortcuts. I have outlined these below:

  1. krp -> [Rocky Lhotka Register Property] Registers a CSLA property
  2. kdp -> [Rocky Lhotka Declare Property] Declares a CSLA property
  3. krdp -> [Rocky Lhotka Register and Declare Property] Declare and Register a CSLA property
  4. krp<Type> -> Registers a CSLA property with a specified type where you only have to fill in the property name. For example krpi will create a registered property of type int. There are a lot of type shortcuts that ship with CodeRush.
  5. kdp<Type> -> Declares a CSLA property with a specified type. Works similar to#4 above except it declares the property.

]

Version 3.0 of CSLA.NET brought a new way of declaring fields and properties within business objects. This was done in order to reduce the amount of code that needed to be written and to reduce the possibility of creating runtime exceptions.

Before version 3.0 of CSLA.NET, the business object developer would have to ensure that certain lines of code were present in order for state tracking and validation to work correctly. The following lines of code are an example of how business object properties were written previous to version 3.0.

 

1: [Serializable()]
2: public class Customer : Csla.BusinessBase<Customer>
3: {
4:  private string _firstName;
5:  
6:  public string FirstName
7:  {
8:  get
9:  {
10:  CanReadProperty(true);
11:  return _firstName;
12:  }
13:  set
14:  {
15:  CanWriteProperty(true);
16:  if (_firstName != value)
17:  {
18:  _firstName = value;
19:  PropertyHasChanged();
20:  }
21:  }
22:  }
23:  
24:  private Customer()
25:  {
26:  }
27: }

 

You can see this is pretty standard property/field declaration that you would see in any object (before Auto-Implemented properties). Let me explain what the various CSLA.NET specific calls do.

In line 10, there is a call to a base class method CanReadProperty. This method checks the current roles that are assigned to the user that is logged and makes sure that the current user has the rights to read this specific property. Property level authorization is another feature of CSLA.NET which I will explain at a later date. The parameter of true that is passed to the call specifies that the application should throw an exception at this point if the user is not authorized to read the property.

Similar functionality for authorizing a property setter is found in line 15 with a call to the base method of CanWriteProperty. 

The last bit of functionality that this code sample demonstrates is the ability for CSLA to perform state tracking and validation. Business objects in CSLA have the ability to let the client of the business layer to determine if an object is dirty, new, or saved to the data store. A key piece of this functionality is implemented with a call to the PropertyHasChanged method as shown in line 19 above. This call does 2 things. First it marks the object as being dirty. Therefore, when the client application calls Save, the business object knows that it needs to perform an update or an insert into the data store. Second, the business object performs validation for all the validation rules based on that property. For example, if the Customer object contained a business rule stating that the FirstName property needed to have a non null or empty value and the client application assigned a string.Empty, the object would then be marked as invalid. If the user then tried to save the object, a ValidationException would be thrown by the business object.

As you can see, these steps of simply retrieving and setting property values have a large impact on how the CSLA business object operates. Skipping one of these steps or performing one of these steps at the wrong time can easily lead to logical errors. Because of this, Rocky Lhotka introduced the concept of registering properties in CSLA version 3, a la Windows Workflow properties.

Here is an example of the how a business object developer would write the same functionality in CSLA version 3.0 and above:

 

1: [Serializable()]
2: public class Customer : Csla.BusinessBase<Customer>
3: {
4:  private static PropertyInfo<string> FirstNameProperty = RegisterProperty<string>(typeof(Customer), new PropertyInfo<string>("FirstName"));
5:  
6:  public string FirstName
7:  {
8:  get
9:  {
10:  return GetProperty<string>(FirstNameProperty);
11:  }
12:  set
13:  {
14:  SetProperty<string>(FirstNameProperty, value);
15:  }
16:  }
17:  
18:  private Customer()
19:  {
20:  }
21: }

 

As you can see, this is a lot less code and it performs the same amount of functionality as the code listed above. The code at line 10 makes a call to a base class GetProperty method. This method internally makes a call to CanReadProperty just as above. The code at line 14 makes a call to SetProperty. This methon internally makes a call to CanWriteProperty and PropertyHasChanged respectively.

Although the latter implementation requires less code and is less error prone, it is still very verbose and it requires a lot of typing. Since declaring properties is what a business object developer does a lot of, I decided that a code template would be great to implement. I am a huge fan of CodeRush and Refactor as I have been using those productivity tools for a while now. I decided to write a custom CodeRush template for declaring properties in CSLA.

Creating a field, or in this case, registering a property on a class, only requires a user to type RP (Register Property), followed by the type and name of the property. Creating a property only requires a user to type DRP (Declare Registered Property), followed by the type and name of the property.

I demonstrate their use in the video below. [NOTE: In the video, I make reference to generics when I really meant nullable types. I was obviously on something.].

 

 

If you use CodeRush and you would like to install these templates, I outlined the steps below.

  1. Download the attached xml file
  2. Open Visual Studio
  3. Browse to DevExpress -> Options
  4. On the left hand, find Editor -> Templates
  5. Create a folder called Custom Templates if it is not already created
    1. Right-click on the folder structure and click New Root Category...
    2. Name the folder Custom Templates
  • Import attached template (xml file)
    1. Right click on Custom Templates and click Import Templates...
  • You will now be able to use the RP and DRP custom templates as shown above. You may need to restart Visual Studio for these templates to take effect.

    There are also Codesmith templates available if you would rather use Codesmith templates as there are a lot of these available for CSLA. You can check the templates out here.

    Download CodeRush Template (XML file)

    Download CodeRush Template Version 2 (see update above) (XML file)

    Nerd Crib

    I wanted to test out the video on my iPhone 3GS when I got it and so here is a quick tour of my nerd crib, a.k.a., my home office.

    Here are some of the items from the tour:

    Desktop Computer: Mac Pro

    Laptop Computer: MacBook 13"

    30" Monitor: Dell 30" Flat Panel

    (2) 20" Monitor: Dell 20" Flat Panel

    Printer: Epson Workforce 600

    Keyboard: Apple Keyboard

    Mouse: Logitech MX Revolution

    Speakers: Bose Companion 3

    Microphone: Blue Bluebird

    External Drive: Western Digital My Book Mac Edition

    USB Hub: Belkin USB Hub

    Label maker: Brother P-Touch

    Laptop stand: Rain Design mStand

    Desks: Room and Board Parsons Workdesk

    Chair: Herman Miller Aeron

    Wall Cabinet: IKEA BESTA

    LED lights: IKEA DIODER

    Mini-refrigerator: GE Spacemaker Compact

    City Photography Picture: IKEA PREMIAR (by Angelo Cavalli)

    Fake plant thingy: IKEA KARENS VaseIKEA TORKA

    Laptop bag: Timbuk2 Small Messenger

    Skateboard Art Book: Disposable : A History of Skateboard Art

    Web Designers Idea Book: Web Designers IDEA Book

    Dynamic HTML book: O'Reilly Dynamic HTML

    Best drink in America: Redbull

    Do you want your nerd crib featured? Let me know, I would be happy to come by and talk nerd with you. If you have already toured your nerd crib, link it up on the comments.

    Social Media Breakfast Thoughts

    I recently attended the Social Media Breakfast Toledo meeting on the morning of Friday, June 5th. The Social Media Breakfast is a national group. The local Toledo group holds monthly events that consist of 45 minutes of networking time, a half hour talk, and fifteen minutes of Q & A. The topic for this particular day was the "Do's and Dont's of Business Blogging" by Dave Rigotti.

    I have to admit that I expected a lot from this session since it does require a payment of $15 to attend. I think that is a lot to pay for a half hour talk, especially when I am used to attending excellent programming conferences for free. Even though I expected a lot, I was a little skeptical. I'm always skeptical with "social media" events. I knew that the networking would be worth the price of admission though and I was right as I met some great people (@mikebrice, @scottradcliff, @8thLopez, @7son75, @kfish29).

    After the talk by Dave Rigotti was over, my suspicions were correct, I was afraid. The talk was good, well prepared, and well presented. My issue was with the content. The content was accurate and very clear but my issue was that it was focused on the HOW of blogging instead of the WHY. I thought that the audience would of benefited more from a talk on the why rather then the how. The how can be found on the internet within a few hours of some searches.

    At one point, someone asked, "If my company started blogging, what should I expect my ROI to be?". It was at this point that I was sure some of the audience members did not grasp why blogging was important and could of benefited more from a talk on why you should be blogging. Dave answered this question well but it was very political in my opinion. I don't think that got the point across to the person that asked the question. That person needed to be told that hustle gives you return on investment. Don't expect more customers cause you put out a 300 word blog post one afternoon. You need to put a lot of work into the post, create great content, and listen to the feedback and respond to your audience. I think that there should of been at least 10 minutes of time spent to answer that question. The answer should not of been "it depends".

    I feel a lot of companies, especially local companies, do not get the reason why they blog. I think they just do it because they see their competitors doing it. Dave gave some great case studies of blogs that work. He gave the examples of Freshbooks and 37 Signals, both of which I have been following for a long time. His points about why these companies have great blogs was a little misleading in my opinion though. He gave examples about layout and other extraneous reasons on why the blog is great. The only reason I follow their blogs is not because of their layout, or anything else on their physical site (I just get their content via RSS). I follow them because of their content. They have excellent content which showcases their beliefs and their work. Dave did touch a bit on their content but I think it should of been the focus of the case studies. Your content showcases your company beliefs, what is important to you, and what type of customers you want to serve. If you agree with your vendor views, you will likely turn into customers.

    I hope that the SMB Toledo gives us attendees a little more advanced topics for future events for our money. I think this event was well prepared for but I feel it was a starter topic and I was expecting something more advanced. I would like to see more opinionated topics covered. I would like to hear from people who have strong opinions on various topics. I find the opinioned talks are a lot more engaging, even if I don't agree with the speakers.

    Dave will be joining Microsoft on the Bing team in the near future. With the recent success that the Bing search engine has been having, I look forward to hearing what he has to say about Microsoft and the service in the future. It's going to be hard work when you are a competitor to Google.

    Demo Code from NWNUG May 19th Meeting

    Last Tuesday, I presented on jQuery at the Northwest Ohio .NET User Group meeting. There was a large turnout (more then usual) due to some people Tweeting about the meeting and that was a very good surprise.

    I have attached the sides and demo application from the meeting at the bottom of the post. If anyone who attended has any questions from the demonstration or if you did not attend and want to know more about jQuery, please hit me up at jamie AT brilliantfantastic DOT com. If you just want to talk or get in touch, you can email me as well or @reply me on Twitter at @jwright.

    Download Slides [PDF]
    Download Demo Code [ZIP]

    Demo Code from West Michigan .NET University

    [Update: Added backup of database below that is needed to run the application.]

    Last Saturday, I drove up to Grand Rapids, Michigan and spoke on "Intermediate Web Development" with Cary Payette. This was a one day event put on by Chris Woodruff and others from the West Michigan .NET Users group and they did a fantastical job. They did a lot of work and I heard great comments from a bunch of attendees.

    The event was geared towards students and people who did not have a lot of experience with .NET in general. I think the event was effective and we may have added some head count to our community as a result.

    I have attached the code for our demo applications from the event. There are three projects contained within the zip file. There is one each for the ASP.NET Web Forms demo, the jquery demo, and the ASP.NET MVC demo. A lot of people asked me for the code from the jquery demo and you can find it attached. It is a web application that embeds html and jquery code that the user enters and then allows you to run the jquery script against the html. It is an excellent way to test your jquery.

    Feel free to contact me at jamie AT brilliantfantastic DOT com if you have any issues or questions.

    See everyone at the Central Ohio Day of .NET....

    Download West Michigan .NET University Demo Code

    Download Database Backup file