Presenting

Illustration

I occasionally do small presentations. Most of them are inside jobs, but sometimes I do find myself in front of unknown people. Here are some tips that I found useful.

Rehearse

Nothing is more important than rehearsing your speech before giving it. You don’t need to do it dozen of times, one or two times is enough. Just make sure that you rehearse it as you will give it. Go through all samples and use a clock. Timing is of essence here.

Check a room

Be sure to get overview of room at least few hours (minutes in worst case) before giving a speech. Check everything that you need: power, network, telephone… If you need it for presentations, make sure it is there or that you are aware of problem. Do not allow yourself to do network troubleshooting in front of audience.

Tea

Drink tea, not coffee. I personally tend to be quite speedy presenter and if you combine that with coffee you get really quick talk that nobody can follow. Give people enough time to absorb information as they get it. However, remember that some enthusiasm is quite a good thing.

I know few presenters that have beer before presentation (or even during) but I must confess that it does not work for me. If I want to give presentation it has to be alcohol-free.

Don’t be late

Don’t be an asshole. Be in room as people pour in. Wait if you think that some more people will come in, but be there.

Going Down

I am currently experiencing major technical difficulties for both my e-mail and web site.

My mail domain had non-default MX record settings (Google Apps) and that was not updated with move to new server. Without noticing, my e-mail account was gone since 2009-06-19. MX records are now corrected, but it will probably be few more hours until DNS gets new data. And then again, I will be e-mailable.

My web site is also down since transfer to new server broke some settings and I broke rest of it.

Long night awaits…

[2009-06-22 02:00: Web site is finally up but not with full functionality. I still need to restore 404 functionality (in case of non-existent file, I used to redirect it to newest version).]

[2009-06-22 03:00: DotNetPanel was a problem. If you don’t put * into sub-code text field it will not warn you, but it will just start displaying “The data is invalid.” page for all http requests. It seems that error checking is unknown discipline in this product. In any case, web page is back up.]

[2009-06-22 03:00: My e-mail is up, but in very weird and uncomfortable setup. Hopefully normal access will be restored soon.]

[2009-06-22 12:00: I also need to thank to my web provider. While this was caused by them while moving me to another server, I must commend their availability in middle of night and during non-working days. I will most definitely stay with them.]

[2009-06-23 08:30: I got first e-mail to my server! It is sent from my web provider so it should take some more time for it to propagate through all DNS caches.]

[2009-06-23 23:30: I finally got my error reporting system back on-line. Some servers send me e-mail to correct address, but big part of them still hasn’t updated their DNS records.]

[2009-06-25: Finally everything works. :)]

Windows 7 SE

Illustration

It seems that Microsoft decided that those who wish to have Windows 7 Starter edition will need to forget everything about customization.

Not only that you will not be able to change sounds and cursors, but not being able to change wallpaper? C’mon Microsoft, is this really necessary?

Only hope is in independent wallpaper changing programs (I always recommend Wallpaper Cycler). I surely hope that they will have some workaround available.

Reordering TabPages Inside TabControl

When using TabControl in my programs, usually there is one thing users always ask for - “let me reorder those tabs”. Since reordering tabs is such a logical operation, one would think that the mighty .NET 2.0 Framework has one. But no luck there. Visual Studio 2008 does have that feature, but framework mortals are not blessed with it.

Since Visual Basic programmers waited for inheritance for far too long, they tend to use it for solving every possible problem (when you have a hammer, all problems look like nails). May I say that here, the same inheritance approach will be used. :)

What we want to do here is to extend the standard TabControl. Inside of it, we are interested in MouseDown, MouseMove and MouseUp events. Some people like to use drag and drop here, but that seems to me like using a bomb to kill a fly.

MouseDown

Upon receiving a MouseDown event, we check if the Left button is used and if TabControl has tab selected. If those requirements are fulfilled, we initialize the SourceTabPage variable. With that, we are ready for further events.

MouseMove

When the mouse is moved, one must check if reordering is in progress. If that is true, we look at what TabPage is under it. If it is not starting one - we have a show.

One of the things we must discover is which TabPage we are hovering over. Since unfortunately, we cannot use some sort of HitText, we must iterate through all TabPages and select one with our coordinates.

After that, we check which side we are hovering. It is only important if you wish to display a different cursor for each side. These two are the ones I use, but you can think of your own schema.

MouseUp

Here, we must know on which side we are since the new location (before or after hovering TabPage) depends on this information. This code is basically the same as the one we use for determining the cursor type. After clearing is done, so is our function.

Conclusion

This extended control offers a good solution to reordering TabPages inside a TabControl. I think that the only thing one may hold against it is updating the order on MouseUp but that decision is made for the sake of speed and code clarity. This way, it is very easy to implement changes through further extending since it uses protected OnMouseX procedures.

There is source code available in both VB.NET and C#. Hope you like it.

P.S.

This is redoing of my Code Project article.

Intellisense 10-4

Illustration

While C#'s IntelliSense was always good, in Visual Studio 2010 they enhanced it even more. When one writes e.g. “reason”, it will also match CloseReason. While this may not seem much, it is gem if you do not remember exact property name.

Small feature that helps a lot.