Sunday, March 29, 2009

Here are the slide decks from my recent presentations. There were a few requests for theses so I wanted to make them available publically.

Learn how to program and sell Windows Mobile applications online. The first part of presentation will be an overview of Windows Mobile programming, focused on making developers aware of the capabilities of modern Windows Mobile devices and the latest version of the .NET Compact Framework to created advanced mobile user experiences. The second part of the presentation will be focused on different approaches to publish and distribute our creations online to the world.

Windows Mobile Marketplace

image

Creating Advanced Mobile User Experiences

image


Sunday, March 29, 2009 4:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
image

Many of us love programming innately. It’s almost in our DNA. Some of my first programming experiences were on a used Commodore 64 that we picked up at a local garage sale. It didn’t come with any software, so if I wanted it to do anything it was up to me to make that happen. It was a lot of work, but it really was a lot of fun for me too. Later I move to QuickBasic, then to Visual Basic, and on and on from there.

I was the only developer who got his start with the Commodore 64. I guess you could consider the Commodore 64 to have used a “Rapid Application Development” programming language, but really it was a “Fun Application Development” language, and I think that went a long way to winning me over.

Most modern programming languages today are about rapid application development, this might help to keep current developers productive, but what will bring in tomorrow’s developers? What is today’s “Fun Application Development” language?

I think Microsoft’s Small Basic is a great answer to that question.

image

Small Basic

Small Basic Blog

Small Basic is a simple and easy programming language with a friendly environment that provides a cool and fun way of learning programming. From making turtles animations to running a slide show on the desktop, Small Basic makes programming natural and effortless.

  • Small Basic derives its inspiration from the original BASIC programming language, and is based on the Microsoft .NET platform. It is really small with just 15 keywords and uses minimal concepts to keep the barrier to entry as low as possible.
  • The Small Basic development environment is simple, yet provides powerful modern environment features like Intellisense™ and instant context sensitive help.
  • Small Basic allows third-party libraries to be plugged in with ease, making it possible for the community to extend the experience in fun and interesting ways.

Sunday, March 29, 2009 3:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
Monday, March 09, 2009

What do you do when you have over 863 seriously advanced stored procedures you need to update as soon as possible?

I don’t know about you but here is what I would do. I would download Redgate’s SQL Refactor.

Working with legacy SQL code means untangling someone else's coding format and quickly interpreting the purpose of the script. SQL Refactor provides a range of one-click features that instantly make legacy code as easy to work with as your own, including Layout SQL, Summarize Script, Encapsulate as a New Stored Procedure, and many more.

image
  • Update all dependant objects when you rename tables, views, and procedures
  • Expand wildcards and qualifying object names to improve quality and performance
  • Summarize complex SQL scripts
  • 11 refactorings in total
  • Smart column rename for views and tables
  • Smart parameter rename for procedures and functions
  • Split Table, can also create referential integrity tables
  • Uppercase Keywords
  • Summarize Script
  • Expand Wildcards in SELECT statements
  • Qualify Object Names
  • Find Unused Variables and Parameters
  • Encapsulate As New Stored Procedure
  • Smart Rename, for objects

  • Monday, March 09, 2009 3:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Wednesday, November 12, 2008

    image The Raleigh Code Camp is coming this weekend and you don’t want to miss out.

    Details:

    ECPI College of Technology
    4101 Doie Cope Rd.
    Raleigh, NC 27613-7387

    Directions:

    Http://maps.google.com/....

    Information Link:

    http://www.ecpi.edu/

    Location: ECPI

    image

    Here are just some of the great sessions you can see there:

    Session Titles

    • Ocean
    • Introduction to Entity Framework
    • Wildcard Searches in SharePoint
    • SSIS
    • Much Ado About the DLR
    • Essential Web Services
    • LINQ to SQL
    • Getting Down and Dirty with SharePoint Branding
    • Building Reports in SQL Server Reporting Services 2008
    • An Introduction to Castle ActiveRecord, or Stop Writing CRUD
    • Design Principles
    • Something Silverlight
    • Automation with MSBuild 3.5 and Team Build 2008
    • Spice Up User Experience With Silverlight 2.0
    • HttpRuntime.Cache Management and Thread Safety
    • Back to the Basics: Developing SharePoint Features
    • Care and Feeding of TempDB
    • Bending the Asp.Net MVC to do Your Bidding, the Virtues of Extensibility 
    • Creating Custom Templatable Controls in Silverlight
    • 0wn Your Phone
    • Integration SQL Server 2005 Reporting Services with SharePoint
    • Turning the Ship: Getting a Traditional Organization to Adopt Agile Practices
    • SOA: Building the Arch
    • Introduction to the Microsoft Synchronization Services for ADO.NET
    • Extending the mobile experience for your existing website
    • Integrating ASP.NET Dynamic Data into Existing Web Applications & Websites
    • Using WaTiN for GUI based testing in Visual Studio
    • Implementing Microsoft Virtual Earth in Your ASP.NET Applications
    • Mixing Static and Dynamic .NET Languages
    • XNA Game Studio 3.0
    • Microsoft and Ruby Sittin' In a Tree
    • Integrate ASP.NET 2.0 application (FBA Management) with SharePoint 2007

    Wednesday, November 12, 2008 2:50:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Saturday, August 09, 2008

    image_thumb14

    I wanted to add an application I was working on to my Windows Vista’s System Tray. This is one of those things that is completely trivial once you already know how to do it. It’s actually easy enough that most people find their way thorough it on their own, eventually.

    Here’s a quick cheat sheet, if you will, that will show you everything you need to know so you can “knock em out da box”, Luke. Smile

    First, you’ll need to add a NotifyIcon to the form.

    image

    Here are the key parts of the NotifyIcon we will be concerned with:

    NotifyIcon.Text: Gets or sets the ToolTip text displayed when the mouse pointer rests on a notification area icon.

    NotifyIcon.Icon: Gets or sets the current icon.

    NotifyIcon.DoubleClick: Occurs when the user double-clicks the icon in the notification area of the taskbar.

    NotifyIcon.ContextMenu: Gets or sets the shortcut menu for the icon.

    The DoubleClick event is a good place to add logic to open a main form, and the ContextMenu allows the NotifyIcon to almost be an application on its own.

    Note:

    You can change the NotifyIcon’s Icon at runtime as a way to alert users to various things happening.

    It’s good to set any forms in the application to ShowInTaskbar = false. This helps keep clutter out of the user’s taskbar.


    Saturday, August 09, 2008 4:43:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Friday, August 01, 2008

    I thought it would be useful if I did a recap of all of the 31 tips and tricks from the 31 Days of Visual Studio Tips & Tricks. I hope it helps. I’ll post a follow up with all the user submitted tips soon!

    Here’s the download link for the for the complete PowerPoint:

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx

     

    PowerPoint Slide

    Keyboard Shortcut

    image

    Day 1

     

    Show Shortcut Keys

    image

    Day 2

    Open Smart Tag

    Ctrl + .

    Open Smart Tag

    Ctrl + Shift + F10

    image

    Day 3

    Navigate Forwards

    Ctrl + –

    Navigate Backwards

    Ctrl + Shift + -

    image

    Day 4

     

    Tools, Options…, Display Line Numbers

    image

    Day 5

     

    Cycle Clipboard Ring

    Ctrl + Shift + V

    image

    Day 6

     

    Go to Definition

    F12

    image

    Day 7

     

    Go to Line

    Ctrl + G

    image

    Day 8

    Vertical Block Selection

    Alt + Mouse

    Shift + Alt + Right Arrow

    image

    Day 9

    View Properties Window

    F4

    View Properties Window

    Alt + Enter

    image

    Day 10

    Comment Selection

    Ctrl + K, Ctrl + C

    Uncomment Selection

    Ctrl + K, Ctrl + U

    image

    Day 11

     

    Toggle Code / Design Views

    F7

    image

    Day 12

    Make Lowercase

    Ctrl + U

    Make Uppercase

    Ctrl + Shift + U

    image

    Day 13

     

    Incremental Search

    Ctrl + I

    image

    Day 14

     

    Ctrl + Tab Navigator Window

    Ctrl + Tab

    image

    Day 15

     

    View Object Browser

    Ctrl + Alt + J

    image

    Day 16

     

    Delete Line

    Ctrl + L

    Shift + Delete

    image

    Day 17

     

    Add New Item to Project

    Ctrl + Shift + A

    image

    Day 18

     

    Close Current Document

    Ctrl + F4

    image

    Day 19

     

    Toggle Breakpoint

    F9

    image

    Day 20

     

    Find All References

    Shift + F12

    image

    Day 21

    Move Cursor One Word Right

    Ctrl + Right Arrow

    Move Cursor One Word Left

    Ctrl + Left Arrow

    image

    Day 22

     

    The Rename Refactor

    Ctrl + R, R

    image

    Day 23

     

    Find All References

    Shift + F12

    image

    Day 24

     

    Format Document

    Ctrl + K, Ctrl + D

    image

    Day 25

     

    View Task List

    Ctrl + \, Ctrl + T

    image

    Day 26

     

    Find in Files

    Ctrl + Shift + F

    image

    Day 27

     

    Toggle Outlining Expansion

    Ctrl + M, Ctrl + M

    image

    Day 28

     

    Close All Documents

    Alt + W, L

    image

    Day 29

     

    Save Any Output Window

    Ctrl + S

    image

    Day 30

     

    Build Solution

    Ctrl + Shift + B

    image

    Day 31

     

    Reset Window Layout

    Alt, W, R


    Friday, August 01, 2008 4:15:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [2]  |  Trackback
    Thursday, July 31, 2008

    image

    image

     A place for everything, everything in its place.
    Benjamin Franklin

     

     

     

     

     

     

    Many times I find that throughout my word day I have move and resized many of the various elements in the Visual Studio IDE. I might have expanded my properties windows, in order to see more of the property name. And I might have end up needing to shrink my toolbox window so I could see more of my code on the screen at one time. But sometimes you just want to hit reset and have everything go back to where it belongs.

    Reset Window Layout

    Alt, W, R

    Note: The preceding image will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Thursday, July 31, 2008 4:25:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Wednesday, July 30, 2008
    image

    I came, I coded, I compiled. If only Julius Caesar had been a developer, maybe Duke Nukem Forever would be released by now. So you made a quick change and need to build the solution as fast as possible and get it to the QA department now. What is the fastest way to do this?

    Build Solution

    Ctrl + Shift + B

    Note: The preceding image will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Wednesday, July 30, 2008 4:48:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [2]  |  Trackback
    Tuesday, July 29, 2008

    image

    Output is pretty much the bread and butter of any application. Visual Studio has a whole window that is dedicated to dealing with various trace information. Sometime we would like to be able to save and view this information later or in another utility. But it is a real pain to do this process manually. There has to be an easier way…

    Save Any Output Window

    Ctrl + S

    Note: The preceding image will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Tuesday, July 29, 2008 4:16:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Monday, July 28, 2008

    imageSo you have all kinds of windows and documents open in Visual Studio, everything from form designers to XML editors. Now you want to close everything and start something else, and you’re in a big hurry. What do you do?

    Close All Documents

    Alt + W, L

    Note: The preceding image will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Monday, July 28, 2008 4:06:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Sunday, July 27, 2008
    image

    Visual Studio allows developers to collapse code into regions, and so on. Sometimes this is helpful, sometimes not so much. But with the power of Visual Studio keyboard shortcuts we can make it less troublesome to manage this feature.

    Here’s how:

    Toggle Outlining Expansion

    Ctrl + M, Ctrl + M

    Note: The preceding image will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Sunday, July 27, 2008 3:55:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Saturday, July 26, 2008

    imageIt does take long to have a ton of code on your hands, especially when you need to find something in a hurry. What can we do? Do we have a chance? How can we best find something in all of our solutions files?

    Here’s how:

    Find in Files

    Ctrl + Shift + F

    Note: The image above will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Saturday, July 26, 2008 4:36:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Friday, July 25, 2008

    image

    So, how long is your task list? Do you have a ton of TODO’s? Did you know you can use Visual Studio to track your TODO’s in a task list? All you have to do is mark each TODO as follows:

    // TODO: this is an example of something I really need to do

    If you do this you can see your TODO’s in Visual Studio Task List dialog, which you can always pull up with the following keyboard shortcut:

    View Task List

    Ctrl + \, Ctrl + T

    Note: The image above will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Friday, July 25, 2008 4:33:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [2]  |  Trackback
    Thursday, July 24, 2008

    Have you ever gotten code from someone or somewhere and you were not “thrilled” with how it was formatted. Was it just formatted wrong? Then the “Format Document” keyboard shortcut is for you! It will take the file you have open and format all the code until it is valid. Personally I wish their was a “Format Document for Chris Craft” keyboard shortcut because Visual Studio is a lot more forgiving than I am. But that’s okay it is still a life saver and you will love it one day when it just make the code better, all in one simple keyboard shortcut.

    Format Document

    Ctrl + K, Ctrl + D

    Note: The image above will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)

    image


    Thursday, July 24, 2008 4:36:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Wednesday, July 23, 2008
    image

    Screen real estate is always in short demand. Give us more monitors, give us bigger monitors. What would you say if you could have more screen real estate for coding with a single keyboard shortcut? You can, it is easy. All you have to do is the following:

    Toggle Full Screen Mode

    Shift + Alt + Enter

    Note: The image above will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Wednesday, July 23, 2008 6:17:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [2]  |  Trackback
    Tuesday, July 22, 2008
    image

    So is the event’s status Status.Cancelled or Status.Canceled? It is very possible one person will ask that it be changed to “Canceled” only to have another person ask to change it back to “Cancelled”. Instead of wrestling with the code or wearing our your “Find and Replace” feature, take advantage of one of Visual Studio’s features: The Rename Refactor. All you have to do is select an object and use its keyboard shortcut:

    The Rename Refactor

    Ctrl + R, R

    Note: The image above will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Tuesday, July 22, 2008 4:21:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Monday, July 21, 2008
    image

    How often do you want to move across one of your lines of code? Every day? Every hour? More? I’m sure it is often. And I hope you know and use this shortcut since it will save you lots of effort ever time you use it. Try it today, I bet you’ll love it.

    Move Cursor One Word Right

    Ctrl + Right Arrow

    Move Cursor One Word Left

    Ctrl + Left Arrow

    Note: The image above will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Monday, July 21, 2008 6:38:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Sunday, July 20, 2008

    image

    Let’s say you have a customer class. You know this class is used throughout your solution, but you aren’t sure exactly where it is being used. How can you quickly and easily find out this information?

    All you have to do is use “Find All References”, either use the right-click menu item or even better use this keyboard shortcut:

    Find All References

    Shift + F12

    Note: The image above will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Sunday, July 20, 2008 12:30:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Saturday, July 19, 2008

    image If you ever find yourself debugging a program by stepping through various classes, methods, and lines of code, the toggle breakpoint keyboard shortcut will be there to assist you. As you are stepping through the code and hit various breakpoints or potential breakpoints a simple single key press is all it takes to either add or remove that line of code from your list of breakpoints.

    Toggle Breakpoint

    F9

    Note: The image above will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Saturday, July 19, 2008 6:24:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Friday, July 18, 2008
    image

    Today’s tip is an interesting one. Do you know how to close an application window in Windows? Usually you can press Alt + F4. Visual Studio has similar feature, that comes in handy. The close current document keyboard shortcut works on most documents irregardless of whether they are in code view or design view. Quite useful and allows yours hands to spend more time on the keyboard and less time moving the mouse around everywhere.

    Close Current Document

    Ctrl + F4

    Note: The image above will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Friday, July 18, 2008 6:13:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Thursday, July 17, 2008
    image

    Solutions have more and more projects these days, and projects have more and more files. If you are working on a large enterprise level line of business application then you really might want to consider today’s Visual Studio keyboard shortcut. Admit it, you’ve probably added hundreds of file using the mouse and massaging various Visual Studio menus and toolbars. But after today you will probably have a new, better way of doing the same thing. How cool is that?

    Add New Item to Project

    Ctrl + Shift + A

    Note: The image above will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Thursday, July 17, 2008 6:46:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Wednesday, July 16, 2008
    image

    So everyday you possibly write hundreds, maybe thousands, of lines of code. Some of them are perfect, and will continue on to have a long productive life. Others however will be found wanting.

    It it for these inadequate lines of code that the delete line keyboard shortcut was designed to deal with. And deal with it does. Instead of having to select a line, or multiple lines, you can simple use the delete line shortcut and wipe away the current line, or the currently selected lines.

    Delete Line

    Ctrl + L

    Note: The image above will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Wednesday, July 16, 2008 3:46:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [4]  |  Trackback
    Tuesday, July 15, 2008

    image

    Visual Studio’s Object Browser is a powerful tool that can help developers to better “see” and understand their projects, and projects they may be working with.

    Here’s what Visual Studio’s help says about it:

    The Object Browser lets you select and examine the symbols available for use in projects. You can open the Object Browser from the View menu, or by clicking the Object Browser button on the main toolbar.

    There are three panes: an Objects pane on the left, a Members pane on the upper right, and a Description pane on the lower right. If you resize the Object Browser into a single column, the Objects pane moves to the top, the Members pane to the middle, and the Description pane to the bottom.

    View Object Browser

    Ctrl + Alt + J

    Note: The image above will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Tuesday, July 15, 2008 11:21:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Monday, July 14, 2008
    image

    A great feature of Windows is the Alt + Tab navigator window. It allows user to quickly toggle between running applications. And Visual Studio has it’s equivalent of this Windows feature. This allows you to see and to navigate Active Tool Windows and Active Files. And you can see a thumbnail of the selected item.

     

    Ctrl + Tab Navigator Window

    Ctrl + Tab

    Note: The image above will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Monday, July 14, 2008 6:48:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [2]  |  Trackback
    Sunday, July 13, 2008

    image

    There is search, and then there is search. So in the beginning we had Quick Find: Ctrl + F. Quick Find worked fine, but wasn’t perfect. For one thing, Quick Find bring up a dialog that always automagically end up covering the most critical sections of your code, always. It has a LOT of options: where to look, match case, match whole word, search up, search hidden text, use regular expressions, and more. In other words, it is a bit unwieldy to use in simple day-to-day searches. I’m sure there are situations where people really need to have two-handed swords, but most of us are happy to make dinner with a simple kitchen knife.

    That’s where the keyboard shortcut for incremental search comes in. It is great. No massive dialogs to get in the way. If you have already used Firefox’s incremental search feature then you are familiar with how easy and powerful this method is. If not, fire up Visual Studio now and give it a try. You have a real treat in store for you.

    Incremental Search

    Ctrl + I

    Note: The image above will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Sunday, July 13, 2008 6:39:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Saturday, July 12, 2008

    imageIt is kind of funny how a feature that is easily argued as unnecessary and  superfluous can be a feature you find yourself using over and over. That’s exactly the kind of feature the Make Lowercase and Make Uppercase keyboard shortcuts are for Visual Studio. It might not be a feature you even use every day, but when you do finally end up needing this one it is such an incredibly useful feature.

    Don’t believe me? How long would the following have taken to do by hand?

    it is kind of funny how a feature that is easily argued as unnecessary and  superfluous can be a feature you find yourself using over and over. that’s exactly the kind of feature the make lowercase and make uppercase keyboard shortcuts are for visual studio. it might not be a feature you even use every day, but when you do finally end up needing this one it is such an incredibly useful feature.

    IT IS KIND OF FUNNY HOW A FEATURE THAT IS EASILY ARGUED AS UNNECESSARY AND  SUPERFLUOUS CAN BE A FEATURE YOU FIND YOURSELF USING OVER AND OVER. THAT’S EXACTLY THE KIND OF FEATURE THE MAKE LOWERCASE AND MAKE UPPERCASE KEYBOARD SHORTCUTS ARE FOR VISUAL STUDIO. IT MIGHT NOT BE A FEATURE YOU EVEN USE EVERY DAY, BUT WHEN YOU DO FINALLY END UP NEEDING THIS ONE IT IS SUCH AN INCREDIBLY USEFUL FEATURE.

    That’s the power of a good shortcut. Quick, simple, and powerful!

    Make Lowercase

    Ctrl + U

    Make Uppercase

    Ctrl + Shift + U

    Note: The image above will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Saturday, July 12, 2008 4:19:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Friday, July 11, 2008

    image

    Here’s another powerful tip. Almost every application has a UI, and these days most applications have a rich UI. Its a lot easier to work with an advanced UI in an UI design editor. But it’s a lot easier to do something in a code editor. So what’s a developer to do?

    You can always tell a keyboard shortcut is powerful and important when it is given a single key.

    Toggle Code / Design Views

    F7

    Note: The image above will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Friday, July 11, 2008 4:28:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback

    image

    This one is huge. You really need to learn this one, if you don’t already know and use it. Anytime you are working with code you, you will need to comment parts of and uncomment parts of it. It is just a part of a developer’s life. The mechanic will get his hands dirty, the carpenter will get splinters, and the developer will comment and uncomment code.

    I guess the worst way you could comment and uncomment your code is to type it all by hand. Next worse would be to use the mouse and go to Edit menu, Advance menu item, then click Comment Selection or Uncomment Selection. Another option that is to use the Text Editor Toolbar (see below).

    image

     

     

    A little better I guess is to use the keyboard accelerator shortcut: Alt, then E, then V, then M for (Comment Selection), or E for (Uncomment Selection).

    That’s four okay ways of comment and uncommenting your code, but what is the best way?

    Comment Selection

    Ctrl + K, Ctrl + C

    Uncomment Selection

    Ctrl + K, Ctrl + U

    Note: The image above will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Friday, July 11, 2008 1:52:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Wednesday, July 09, 2008
    image

    This Visual Studio window is so import it has two keyboard shortcuts. Can you guess what window it is? That’s right: it’s the Visual Studio Properties window.

    So how many different ways can you come up with to open this window?

    View Properties Window

      • Use the mouse and show / hide the window
      • Use the keyboard accelerators: Alt, then V, then W
      • Use the Design View keyboard shortcut: Alt + Enter
      • Use the keyboard shortcut: F4

    Note: The image above will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Wednesday, July 09, 2008 7:20:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback

    imageMicrosoft Word has two “interesting” features. One feature is you can generate random text, for example, =rand(3) will generate three random paragraphs of text. The other feature is that Word allows you to make what I like to call “Vertical Block Selections”. See the following picture for an example of both.

    Pretty cool, huh? And did you know you can make vertical block selections in Visual Studio? Here’s how:

    Vertical Block Selection

    Alt + Mouse

    image

    Note: The images above and to the right will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Wednesday, July 09, 2008 12:34:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [2]  |  Trackback
    Monday, July 07, 2008

    image So a couple days ago we covered how to display line numbers:

    31 Days of Visual Studio Tips & Tricks – Day 4: Display Line Numbers”.

    So now how can we take this one step further. How about an easy way to go to a specific line of code? Think about how often as a developer you need to find a line in a large file of code. Sometimes you find out there is an error on a certain line of code and instead of scrolling down to this line manually you could use a special keyboard shortcut.

    Go to Line

    Ctrl + G

    Definitely one of my favorite keyboard shortcuts for Visual Studio.

    Note: The image to the right will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Monday, July 07, 2008 4:59:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Sunday, July 06, 2008

    image Many times developers will find themselves working with an object, and wanting to know more information about how it is defined and designed.

    For example, you are working with a Customer object and you want to look at the Customer.cs file and find out what the Customer object has to offer. What methods, properties, and events does it have for you to work with?

    There are several ways for learn more about our Customer class. One you could use the Solution Explorer and manually locate the wanted Customer.cs file. This is a slow process and requires you to already know name and location of the class you want to review. Sometimes it may not be as simple as added a .cs extension the object.

    Another approach would be to right click on Customer object and choose Go to Definition. This will take you there automatically, so it is much quicker. But there is an even faster way, and this is the way you wan to use:

    Go to Definition
    F12

    This keyboard shortcut is so important that it is assigned to a function key. This requires only one key press.

    Note: The image to the right will take you to a full size image if you want to see this in more detail.

    Feedback:

    If you have a favorite Visual Studio Tip or Trick be sure to share it in the comments. I’ll compile a list and post it for everyone once there are enough.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Sunday, July 06, 2008 1:51:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Saturday, July 05, 2008

    image If you have used many Microsoft Office products you are probably familiar with the Clipboard Ring concept. Basically it allows the clipboard to contain multiple items, and when you use the keyboard shortcut you cycle back through previous items.

    The Clipboard Ring is to a developer’s code what a Painter’s Palette is to the painter’s paint. It is a any easy way to access recently used items. This is a common need when writing code for any application. There are lots of times you are juggling two or three key pieces of code, and it is very nice to have quick access to them. It’s almost like having real-time IntelliSense.

    Cycle Clipboard Ring

    Cltr – Shift - V

    Note: The image to the right will take you to a full size image if you want to see this in more detail.

    Feedback:

    Alright, we’ve a lot of new reader submitted tips! Thanks guys. I quite a bit behind in score now. I’ll have to come up with a way to weight the scores to give me a chance now.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Saturday, July 05, 2008 3:00:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Friday, July 04, 2008

    It is Independence Day today in the US, and we’re in Washington, D.C. imageto see us some awesome fireworks!

    Since today is July, 4th, and we are on Day 4 I figured it would be good to do a VSTT that dealt with numbers. The best one I know is how to display line numbers in Visual Studio:

    Display Line Numbers:

    Go to the Tools menu, then click on the Options… menu item. Find the Text Editor item in the list on the left. Then I recommend choosing All Languages. Next find and check the Line Numbers checkbox in the Display section on the right.

    The image to the right will take you to a full size image if you want to see this in more detail.

    Feedback:

    Alright, we’ve more reader submitted tips.  Thanks guys. Yeah, we are now tied. score: Me 4 / Readers 4.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Friday, July 04, 2008 10:18:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [2]  |  Trackback
    Thursday, July 03, 2008

    imageOne of the best features most Internet browsers have is the ability to navigate backwards, and forwards, through your history of Web site pages you have visited. Don’t you wish you had this feature in Visual Studio? Well, you do. Here’s how you do it.

    One option is to go to Visual Studio’s View menu and choose either Navigate Forward or Navigate Backward. An even more handy method is to use the following keyboard shortcuts:

    Ctrl + – and Ctrl + Shift + –.

    One cool thing about the way Visual Studio does this is that it will navigate backwards through different parts of Visual Studio, everything from forms you’ve open to code you’ve worked, and more.

    Feedback:

    Alright, we’ve had one reader submitted tip.  Thanks D1eg0. So far I still have the lead. score: Me 3 / Readers 1.

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Thursday, July 03, 2008 3:34:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [4]  |  Trackback

    imageIt happens all the time. You’re working in Visual Studio, and you need to work with an object that is in a namespace you haven’t declared yet. For example, you need to create a WebRequest in the System.Net namespace.

    You have a few choices, some easy and some hard: You could add a using or import statement at the top of the class file as in “using System.NET”. You could fully qualify the object as in “System.Net.WebRequest”. You could try to click that tiny, tiny little red rectangle that will open the Smart Tag. You could type “CTRL + SHIFT + F10”. Or you could take the easy road and simply enter “Ctrl + .”.

    “Ctrl + .” Rocks! Try it, you’ll love it!

     

    Feedback:

    What is your favorite Visual Studio 2008 tip or trick? Tell us all about it in the comments section. I’m keeping score: Me 2 / Readers 0.

     

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Thursday, July 03, 2008 1:59:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [1]  |  Trackback
    Tuesday, July 01, 2008

    image

    With most things there are two ways to learn them: the easy way, and the hard way. Visual Studio 2008 is know exception. One option, the hard way, is to spend all of your precious time learning and memorizing hundreds of Visual Studio shortcut key combinations.

    Quick, what is the shortcut to perform an incremental search, or to convert selected text to lower case, or to comment a selection of code? Everyone one of these has a handy shortcut key combination. Do you know them all? If not, did you know Visual Studio has a feature you can enable so that it will show you, or maybe I should say teach you, the shortcut keys for most commonly accessed menu and toolbar items?

    It is called “Show shortcut keys in Screen Tips”. You have to enable “Show Screen Tips on toolbars” for this feature to work. Both items are located on the same screen for easy access.

    Here’s what you need to do:

    • In Visual Studio go to Tools, and then Customize….
    • This will open the Customize dialog where you will now need to check both the “Show shortcut keys in Screen Tips” and “Show Screen Tips on toolbars” checkboxes.

    From now on when you use Visual Studio it will display shortcut key combinations on menus and toolbar tooltips whenever you use them.

    If you’ll click on the included image, you will see a larger more detailed screenshot of the areas discussed.

     

    Feedback:

    Do you have a favorite Visual Studio 2008 tip or trick? Then tell us all about it in the comments section. I’m keeping score: Me 1 / Readers 0. Don’t let your teammates down. :D

     

    PowerPoint: 31 Days of Visual Studio 2008 Tips & Tricks.pptx (Note: PowerPoint is updated daily to include new items.)


    Tuesday, July 01, 2008 10:42:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [1]  |  Trackback

    imageI’ve committed myself to taking the knowledge I have learned, over the years, and sharing it more with others. Last month I did 30 Days of .NET Windows Mobile Applications, and this month I intend to do 31 Days of Visual Studio 2008 Tips & Tricks.

    The material will come from a presentation I have given many times at different code camps and user groups. One of the goals of the series is to start a “conversation” with my readers. I want to share some of my best tips and tricks for Visual Studio, and in return I hope you’ll share some of yours with us as well.

    Another goal I have is for the information to be quick and easy to “digest” and as worthwhile as possible. Give me a few minutes every day this month, and I bet I’ll make a difference in how productive you are every day.

     

    Here’s the introduction from my Visual Studio 2008 Tips & Tricks presentation to set the stage:

    “Visual Studio .NET is filled with hundreds of features that make our lives as developers more efficient. The number of features that Visual Studio .NET contains is immense. The Visual Studio .NET Tips and Tricks presentation is a compilation of my favorite, and most popular, tips and tricks for this great IDE. Developers who are unaware of these timesaving features miss out on opportunities to increase their programming productivity and effectiveness. This Visual Studio .NET Tips and Tricks presentation is meant to explain how to use Visual Studio .NET more effectively.”


    Tuesday, July 01, 2008 10:40:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Monday, June 30, 2008

    image And there you have it: 30 .NET Windows Mobile Applications in 30 Days!

    I really liked yesterday’s application, Community Megaphone Reader. I think it was because it was a Windows Mobile mashup application. And we can look forward to many more of these types of applications to come our way.

     

    image

    Trippr

    You’ve probably already figured out what this application does. That’s right it takes your current GPS position and pulls back pictures that are geotagged for the area you are in. So while you are riding down the road you can flickrscan for photos taken near you, possibly as close as the block you are on.

    Really cool idea I think. I’ll probably hook this up to the dashboard of my car and just let it run while I drive around. It should be lots of fun to just see what I see.

    The UI is basic sterile white, but I wanted the photos to be the star of the show so I went with the one uber true neutral color.

    Control are very simple: Update, Menu, GPS, GPS Start, GPS Stop, About, and Exit. Update is the main feature. Any time it is pressed new photos are downloaded.

    Again for this project we looked to the GPS Intermediate Driver Reference, it has served us well these 30 days and I really highly recommend it. If you need to do a Windows Mobile GPS application use this and you are almost done.

    Another great API I found is the Flickr.Net API. If you need to connect to Flickr in .NET or .NET Compact Framework this is great. It does all the heavy lifting for you! I was up and running in minutes!

    “The Flickr.Net API is a .Net Library for accessing the Flickr API. Written entirely in C# it can be accessed from with any .Net language in .Net Framework 1.1, .Net Framework 2.0, .Net Compact Framework 2.0 and Mono.”

    Update Method

       1: if (gpsPosition == null || !gpsPosition.LatitudeValid || !gpsPosition.LongitudeValid)
       2:      return;
       3:  
       4:  double minimumLongitude = gpsPosition.Longitude - 1;
       5:  double minimumLatitude = gpsPosition.Latitude - 1;
       6:  double maximumLongitude = gpsPosition.Longitude + 1;
       7:  double maximumLatitude = gpsPosition.Latitude + 1;
       8:  
       9:  string apikey = "get_your_own_flickr_key";
      10:  Flickr flickr = new Flickr(apikey);
      11:  
      12:  PhotoSearchOptions options = new PhotoSearchOptions();
      13:  options.BoundaryBox = new BoundaryBox(minimumLongitude, minimumLatitude, maximumLongitude, maximumLatitude);
      14:  options.Extras |= PhotoSearchExtras.Geo;
      15:  options.PerPage = 10;
      16:  options.SortOrder = PhotoSearchSortOrder.InterestingnessAsc;
      17:  
      18:  Photos photos = flickr.PhotosSearch(options); 
      19:  StringBuilder stringBuilder = new StringBuilder();
      20:  
      21:  foreach(Photo photo in photos.PhotoCollection)
      22:      stringBuilder.AppendFormat(@"<img src=""{0}"" style=""border: 1px black solid; padding: 0px; margin: 1px"" />", photo.ThumbnailUrl);
      23:  
      24:  webBrowser.DocumentText = stringBuilder.ToString();

    Possibilities:

    Obviously this needs an auto-update feature and settings for those of use who will use it on the road. If I click on a picture I’d love to see a larger view of it as well. and a details listing telling me more about the photo would be great.

    Download executable: trippr.cab

    Download Source Code: trippr.zip

    Thank You:

    I appreciate everyone’s encouragement and feedback. This project would not have been a success without all of you. Keep an out there’s more to come in the future. Wink


    Monday, June 30, 2008 10:24:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback

    imageWe only have one more day left in our 30 days of .NET [Windows Mobile Applications]. Where do we go from here?

    I’m really happy with the 30 Days of .NET so I do think I will continue that in one format or another for some time. It’s been a blast. And everyone knows my passion for Windows Mobile programming so we keep finding way to work that in there as well.

    I haven’t quite decided what I’ll do for next month but I’m sure it’ll only get better as we move forward.

    There have been a lot of request for applications that haven’t made it on deck yet, and obviously they aren’t all going to get done tomorrow. But I think I’ll be able to throw in some Bonus Day of .NET or Return of Day of .NET and knock some of them out over time.

    My goal is to take all the existing content and clean it up some and make more through and detailed learning materials to really help beginners take off with Windows Mobile.

    Hope you’ll join me on the road ahead…


    Monday, June 30, 2008 1:10:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [1]  |  Trackback

    Wow, it’s hard to believe the month is almost over already. So far we have 29 applications done in 29 days! Thank you for all your encouragement.

    If you missed the week one recap here it is: 30 Days of .NET [Windows Mobile Applications] - Week One.

    If you missed the week two recap here it is: 30 Days of .NET [Windows Mobile Applications] - Week Two.

    If you missed the week three recap here it is: 30 Days of .NET [Windows Mobile Applications] - Week Three.

    What’s your favorite?

    image image  image image
    GPS Clock MobileInfo Mobile Flashlight SmartDial

    Let see we have a time utility, and device information, call blocker, and lots more!

    image image image image_thumb15[4]
    GeoCash Repeatr CallBlocker What will be next?

    Feedback:

    Got an idea? Got some feedback? Share it? Thanks!


    Monday, June 30, 2008 12:06:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [1]  |  Trackback

     imageA friend, a coworker, and an all-around great guy, Page Brooks, has created a contest for building controls for Silverlight.

    Here’s the highlights:

    "Welcome to the Silverlight Control Builder Contest! With this contest, we hope to incite the development of many open and free Silverlight Controls that all developers can use in their applications, and what better way to do this than through a friendly contest! This contest is your chance to demonstrate your control building skills to the Silverlight community and win some pretty cool prizes at the same time!"

    Check out the prizes:

    1st Place

    • 1-Year MSDN Premium Subscription (Not for Resale)
    • Your choice of one book from the entire O'Reilly catalog

    2nd Place

    • Microsoft Visual Studio 2008 Standard Edition
    • Your choice of one book from the entire O'Reilly catalog

    3rd Place

    • Essential Silverlight 2 Up-to-Date from O'Reilly
    • Your choice of one book from the entire O'Reilly catalog

    Great opportunity to build a little fame and win some great prizes. Find out more after the jump: http://gosilverlight.org/


    Sunday, June 29, 2008 11:52:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback

    Only One Day Left…

    Not too long ago Page Brooks and myself made the three and a half hour drive from Florence, SC to Greensboro, NC to attend the Ineta Carolina Community Leadership Summit '08. This was a great event and there we meet a lot of the local Ineta user group leaders. We also meet Andrew Duthie, aka DEvHammer. One issue that rose to the top of things we wanted to work on improving at the leadership summit was awareness of events that are occurring in the local regional area. That’s when Andrew told everyone about the project he has been working on: Community Megaphone.

    I love have information at my fingertips, so I decided to write a tie-in application:

    image

    image

    Community Megaphone Reader

    Basically, this application connects to the Community Megaphone RSS feed and pulls down event data. Then it takes your current GPS position and calculates your distance from each event. Finally, it takes all the events and sorts then so you can find the event that is the closest to you. This is a great application for the traveling .NET geek. Where ever you are you can find great .NET events to attend.

    The UI is paying homage to Andrew’s Community Megaphone site. I tried to match the basic colors to keep it familiar. The hyperlinks are active and will take you the event’s page on Community Megaphone. The menu only has a few options: Refresh, About, and Exit.

    An application like this is really exciting, because it is tying the world of mobile together with the world wide web.

    These types of mashup applications will contitue to take of for years.

    LoadRss Method

       1: public static DataSet LoadRss(string requestUriString)
       2: {
       3:     HttpWebRequest feed = HttpWebRequest.Create(requestUriString) as HttpWebRequest;
       4:     StreamReader streamReader = new StreamReader(feed.GetResponse().GetResponseStream());
       5:  
       6:     string rssXml = streamReader.ReadToEnd();
       7:     rssXml = rssXml.Replace(@"<?xml version=""1.0"" encoding=""utf-8""?>", string.Empty);
       8:  
       9:     StringReader stringReader = new StringReader(rssXml);
      10:  
      11:     DataSet dataSet = new DataSet();
      12:     dataSet.ReadXml(stringReader);
      13:  
      14:     return dataSet;
      15: }

     

    GetEvents Method

       1: public static List<Item> GetEvents(DataSet dataSet, GpsPosition gpsPosition)
       2: {
       3:     List<Item> items = new List<Item>();
       4:  
       5:     foreach (DataRow dataRow in dataSet.Tables["item"].Rows)
       6:     {
       7:         Item item = new Item();
       8:         item.Title = (string)dataRow["title"];
       9:         item.Description = (string)dataRow["description"];
      10:         item.Link = (string)dataRow["link"];
      11:         item.PublishDate = DateTime.Parse((string)dataRow["pubDate"]);
      12:         item.Latitude = Double.Parse((string)dataRow["lat"]);
      13:         item.Longitude = Double.Parse((string)dataRow["long"]);
      14:  
      15:         if(gpsPosition.LatitudeValid && gpsPosition.LongitudeValid)
      16:             item.Distance = GeoCodeCalc.CalcDistance(gpsPosition.Latitude, gpsPosition.Longitude, item.Latitude, item.Longitude);
      17:  
      18:         items.Add(item);
      19:     }
      20:  
      21:     items.Sort(delegate(Item item1, Item item2)
      22:     {
      23:         return item1.Distance.CompareTo(item2.Distance);
      24:     });
      25:  
      26:     return items;
      27: }

    Display Events Method

       1: public static string DisplayEvents(List<Item> events)
       2: {
       3:     StringBuilder stringBuilder = new StringBuilder();
       4:  
       5:     foreach (Item item in events)
       6:     {
       7:         stringBuilder.Append(@"<span style=""color: #FFFFFF;font-weight:bold;"">");
       8:         stringBuilder.AppendFormat(@"<a href=""{0}"" style=""color: #DBB94F;"">{1}</a><br/><br/>", item.Link, item.Title);
       9:         stringBuilder.AppendFormat(@"{0}<br/><br/>", item.Description);
      10:         stringBuilder.AppendFormat(@"<b>Distance: <span style=""color: #DBB94F;"">{0} miles</span></b><br/>", item.Distance.ToString("0.00"));
      11:         // stringBuilder.AppendFormat(@"<b>{0}</b><br/>", item.PublishDate);
      12:         // stringBuilder.AppendFormat(@"{0}<br/>", item.Latitude);
      13:         // stringBuilder.AppendFormat(@"{0}<br/>", item.Longitude);
      14:         stringBuilder.AppendFormat(@"<br/><br/>");
      15:         stringBuilder.Append(@"</span>");
      16:     }
      17:  
      18:     return stringBuilder.ToString();
      19: }

    Possibilities:

    Andrew recently added iCalendar file support to Community Megaphone. This would be a great feature to add to a Windows Mobile application, and it is totally doable. The HTML could be a little more fancy maybe even use a few 16x16 fonts for a little personality.

    Download executable: communityMegaphoneReader.cab

    Download Source Code: communityMegaphoneReader.zip

    Feedback:

    Want more? What else would you like to see? Time’s running out only one more day. Be sure to get your ideas in soon!


    Sunday, June 29, 2008 11:31:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Saturday, June 28, 2008

    Only 2 Days Left…

    Today’s application is CallBlock. It is designed to watch incoming calls, and check and see if they match any on the block phone numbers list. If they do match then the phone is “blocked”.

     

    image

    CallBlock

    The first thing you should notice is the flashy logo at the top of the form. I create this logo with an online 3D logo generator. The one simple touch adds a lot of professional polish to the application. I really like red and white so I didn’t change the background color this time. But I am starting to wish I had. It seems a little “blah” to me now.

    Next we have our phone number input text box. The user enters the phone number here, and presses the Block menu item to add it to the block number list below. On the main menu we also have options to Unblock, and Unblock All. And we have our almost universal About and Exit menu items.

    There are two main pieces to this application. One part is the State and Notification Broker code to give us an event to catch incoming phone calls.

    I actually got myself painted into a corner, I assumed you could just programmatically ignore of phone call but it isn’t that simple. Fortunately, a good friend of mine, Lou Vega, came up with a very slick workaround for this. And that is the second part which is the keybd_event method that allows us to send keypresses to the OS to Ignore the phone call.

    CallBlock Core Code

       1: const int KEYEVENTF_KEYDOWN = 0x0;
       2: const int KEYEVENTF_KEYUP = 0x2;
       3:  
       4: [DllImport("coredll.dll", EntryPoint = "keybd_event", SetLastError = true)]
       5: internal static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
       6:  
       7: SystemState phoneIncomingCall = new SystemState(SystemProperty.PhoneIncomingCall);
       8: private void frmMain_Load(object sender, EventArgs e)
       9: {
      10:     phoneIncomingCall.Changed += new ChangeEventHandler(phoneIncomingCall_Changed);
      11: }
      12:  
      13: void phoneIncomingCall_Changed(object sender, ChangeEventArgs args)
      14: {
      15:     string phoneNumber = RemoveText(SystemState.PhoneIncomingCallerNumber);
      16:  
      17:     if(listBoxBlockedNumbers.Items.Contains(phoneNumber))
      18:     {
      19:         keybd_event(115, 0, KEYEVENTF_KEYDOWN, 0);
      20:         keybd_event(115, 0, KEYEVENTF_KEYUP, 0);
      21:     }
      22: }

     

    Possibilities:

    It would be easy to add support for blocking SMS text messages as well. We’ve done all the code for this already in previous applications. Also the application could really use a persistent data store to remember number to block in case the user closes the application. It would be nice to allow user formatting of entered phone numbers for increased readability.

    Download executable: callBlock.cab

    Download Source Code: callBlock.zip

    Feedback:

    Want more? What else would you like to see? Time’s running out on submitting ideas. Be sure to get yours in soon!


    Saturday, June 28, 2008 4:07:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [2]  |  Trackback

    So Page Brooks was talking with me earlier this week and he had a great idea for another Windows Mobile application. He wants an application that will repeat alerts for missed phones and text messages. I have to admit this is something I could use myself. So I figured I take a crack at it today, since it would make for a fun, simple, Friday app.

     

    image

    Repeatr

    I decided to change up the naming format and play of the popular Web 2.0 naming conventions giving us the name: Repeatr. I have to admit, it is kind of catchy.

    I searched for “Web 2.0 Logo Creator” and pretty much went with the first one I saw. This gave me a pretty slick logo in less than 5 minutes. I also decided to make the background a “tooltip” yellow, which I think looks really good.

    Other than that everything is rather straight forward. We have checkboxes allowing the user to choose what events we will monitor. And we have a menu with a couple options, namely About and Exit. There is a “Clear Alerts” menu item, as well, that allows users to acknowledge they have responded to the alert(s).

    The application allows user to select the number of minutes between alerts up to 60 minutes.

    Of course we are using the State and Notification Broker to make all this happen. Using it means we hardly have to write any code ourselves!

    State and Notification Broker setup code

       1: SystemState phoneMissedCalls = new SystemState(SystemProperty.PhoneMissedCalls);
       2: SystemState messagingSmsUnread = new SystemState(SystemProperty.MessagingSmsUnread);
       3: SystemState messagingTotalEmailUnread = new SystemState(SystemProperty.MessagingTotalEmailUnread);
       4: SystemState messagingVoiceMailTotalUnread = new SystemState(SystemProperty.MessagingVoiceMailTotalUnread);
       5:  
       6: private void frmMain_Load(object sender, EventArgs e)
       7: {
       8:     phoneMissedCalls.Changed += new ChangeEventHandler(phoneMissedCalls_Changed);
       9:     messagingSmsUnread.Changed += new ChangeEventHandler(messagingSmsUnread_Changed);
      10:     messagingTotalEmailUnread.Changed += new ChangeEventHandler(messagingTotalEmailUnread_Changed);
      11:     messagingVoiceMailTotalUnread.Changed += new ChangeEventHandler(messagingVoiceMailTotalUnread_Changed);
      12: }

     

    The way we alert a user to having missed a monitored event is by playing a sounds which is easy to do.

       1: [DllImport("aygshell.dll")]
       2: static extern uint SndPlaySync(string pszSoundFile, uint dwFlags);
       3:  
       4: void PlaySound()
       5: {
       6:     string path;
       7:     path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
       8:  
       9:     SndPlaySync(Path.Combine(path, "alert.wma"), 0);
      10: }

    Other than a little plumbing to make everything work together that is basically the entire app in a nutshell.

    Possibilities:

    This is a pretty spiffy application. But software can always be better. An option to allow the phone to vibrate would be great. Another option to allow the user to select the alert sound would be nice too.

    Download executable: repeatr.cab

    Download Source Code: repeatr.zip

    Feedback:

    Want more? What else would you like to see? Time’s running out on submitting ideas. Be sure to get yours in soon!


    Saturday, June 28, 2008 2:30:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Friday, June 27, 2008

    4 Days left…

    Today on twitter, Glen Gordon was telling me that Brendon Schwartz had an idea for today’s application:

    glengordon @cjcraft here's an idea for a mobile app that @brendonschwartz will like - record $ spent during the day and where it was spent (with GPS) about 13 hours ago from Witty in reply to CJCraft

    It’s a really good idea. Probably a better idea than we will be able to do it tonight, but we are all about taking the first small steps to accomplishing great things.

     

    image

    GeoCash

    I love the name, it is a play on GeoCaching. Somehow it adds a lot of “buzz” to the application already.

    The application is designed to be easy for the user to use and understand. The user only needs to enter the amount they spent along with a note, and then simply press log and it will be added to the GeoCash log.

    We are using our own NumericTextBox to be sure the user doesn’t enter in any invalid amounts spent. We have another standard TextBox for the note input. Below this we have the log information. This is done using a WebBrowser control, and setting its DocumentText property.

    The main reason to use the WebBrowser control is to be able to do a little better text formatting. This allowed us to easily markup our text in bold and color.

     

    HTML formatted output:

       1: sb.AppendFormat(@"<b>Date:</b> {0}", DateTime.Now).Append("<br/>");
       2: sb.AppendFormat(@"<b>Amount:</b> <span style=""color:red"">{0:c}</span>", decimal.Parse(textBoxAmountSpent.Text)).Append("<br/>");
       3: sb.AppendFormat(@"<b>Note:</b> {0}", textBoxNote.Text).Append("<br/>");
       4: sb.AppendFormat(@"<b>Latitude:</b> {0}", position.Latitude).Append("<br/>");
       5: sb.AppendFormat(@"<b>Longitude:</b> {0}", position.Longitude).Append("<br/>");
       6: sb.Append("<br/>");
       7:  
       8: documentText += sb.ToString();
       9: webBrowser.DocumentText = documentText;

     

    Possibilities:

    I love this app. It has so many cool possibilities. You could easily save this information to a text file or sent it as an email. I think this is perfect data to do a mashup on for example create a heatmap etc for it so you can see the “dangerous” side of town you need to avoid taking your money into from now on. Open-mouthed

    Download executable: geoCash.cab

    Download Source Code: geoCash.zip

    Feedback:

    Want more? What else would you like to see? Time’s running out on submitting ideas. Be sure to get yours in soon!


    Friday, June 27, 2008 1:59:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [1]  |  Trackback
    Thursday, June 26, 2008

    5 Days Left…

    So when you are talking Windows Mobile Applications you are usually talking about a cell phone device. We have looked at text messages using SMS, but one thing we haven’t look at so far is programmatically making phone calls. Today we will take a look at creating our own phone dialer application. It’s easier than you think!

     

    image

    SmartDial

    I think the UI is pretty nice, not the best, but good overall. It is bright and clean. I found a web site that allowed me to create buttons in a snap and used it for the numbers. At the top of the screen, I added a label to display the number to dial. The menu only has a few options: Dial, Menu, Clear, About, and Exit.

    Since we only allow users to enter numbers using our custom buttons, we don’t have to worry about anyone entering invalid characters.

    So how much code did we as Windows Mobile application developers have to write to actually dial a number? See for yourself.

       1: private void Dial()
       2: {
       3:     new Phone().Talk(labelPhoneNumber.Text);
       4: }

    Possibilities:

    I think this has the potential to be an absolutely great application. One thing I think would be cool is if the application supported skinning. In a way it does, since I decided to leave the image resources as external files to the executable. So a user could edit any of the files themselves. Another great enhancement would be to have mousedown images for each button to give a nice “animated” touch to the application. What about quick soft sounds for when each button is pressed?

    Download executable: smartDial.cab

    Download Source Code: smartDial.zip

    Feedback:

    Want more? What else would you like to see? Time’s running out on submitting ideas. Be sure to get yours in soon!


    Wednesday, June 25, 2008 11:12:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [1]  |  Trackback
    Tuesday, June 24, 2008

    Today I am in Atlanta, GA with Brian Hitney and Glen Gordon. We are presenting Mobility Roadshow: Programming for Windows Mobile. We had a long drive last night, and will have another long drive back to Florence, SC tonight. So I choose not bite off anything too intense today.

    Many people today carry mini-flashlights on the end of their key chain. Apparently there is a need for this type of device because many stores sell them near the cash registers in the checkout lines. I wonder why these mini-flashlights are so popular when almost everyone has a mobile phone today. Maybe it is because the phone’s back light is not bright enough.

    Hmm, this got me thinking. Most Windows Mobile devices have large powerful screens, maybe there is a way we could reuse our device as both a mobile phone and a mini-flashlight.

    image

    imageMobile Flashlight

    The UI is simple but the task is simple. I considered using a watermark image for the background or add a gradient to the background. With a goal of having as much of the screen as bright as possible I think the simple solid color background was the choice to make.

    We only have a few menu options: Burn, Menu, Settings, About, and Exit. I decided to use the term “Burn” like you see on road sign saying “Motorcycles must burn lights”. We only have a few screens: Main, Settings, About. The settings screen you should see to the left, and the main screen should be to the right of this text.

    On the about screen we let the user choose the color they would like the screen to “burn” at. By default we have chosen white to maximize brightness.

    We used NumericUpDown controls to maximize usability, this allows user to choose the soft input panel or the control directly to set the color amounts.

    Save Color Values

       1: int red = (int) numericUpDownRed.Value;
       2: int green = (int) numericUpDownGreen.Value;
       3: int blue = (int) numericUpDownBlue.Value;

     

    Get Color Values

       1: numericUpDownRed.Value = (int) Global.Color.R;
       2: numericUpDownGreen.Value = (int) Global.Color.G;
       3: numericUpDownBlue.Value = (int) Global.Color.B;

    Possibilities:

    The biggest need this application has is a way for the user to save their color preference. Right now if the application is closed the color will go back to the default color of white. Another great feature would be to make the application to go full screen and hide both the title bar and the menu. One last addition would be code to maximize the screen brightness setting in Control Panel.

    Download executable: mobileFlashlight.cab

    Download Source Code: mobileFlashlight.zip

    Feedback:

    Want more? What else would you like to see? Time’s running out on submitting ideas. Be sure to get yours in soon!


    Tuesday, June 24, 2008 2:46:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback

    Information is power. And with the .NET Compact Framework we can have all the information we want. Windows Mobile has many ways to get details about the device our application is running on. Hands down my favorite is the State and Notification Broker. In a word it ROCKS! You can use it to find out any number of things and you can use it to notify us when information we care about change state.

    There are pieces of information that are so important in their own right, they could be used to create an application just to monitor and read that one detail. The first one that comes to mind is battery state.

    image

    MobileInfo

    I thought of a few ways I could make this application flashy, but decided that might get in the way of the facts. Sometimes a simple notepad like application is the most beautiful application. Form and function were meant to be together, but sometimes forms steals the show, and function is what everyone came to see.

    So instead we have a WebBrowser control with a simple text listing of the device’s most important details. I decided to use a WebBrowser control in case I ever did want to use more advanced text format.

    We stick to our guns about keeping control simple and intuitive. We have a great menu with only a few options: Refresh, About, and Exit.

    RefreshData Method

       1: private void RefreshData()
       2: {
       3:     StringBuilder sb = new StringBuilder();
       4:  
       5:     sb.Append("<b>Active Application:</b>").Append("<br/>");
       6:     sb.AppendFormat("'{0}'", SystemState.ActiveApplication).Append("<br/>").Append("<br/>").Append("<br/>");
       7:  
       8:     ...
       9: }

    Possibilities:

    You can never have too much of a good thing. We have twenty pieces of information here for users to enjoy. How about a hundred? Or how about a quick and easy search bar? And the UI needs to be simple but it could be better.

    Download executable: mobileInfo.cab

    Download Source Code: mobileInfo.zip

    Feedback:

    Want more? What else would you like to see? Time’s running out on submitting ideas. Be sure to get yours in soon!


    Tuesday, June 24, 2008 2:11:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Monday, June 23, 2008

    I have put together a calendar of applications for the 30 Days of .NET [Windows Mobile Applications]. Here you can get a quick feel for all the applications we’ve created so far, and will write in the coming days.

    30 Days of .NET Windows Mobile Applications

      image_thumb[37] image_thumb[38] image_thumb[39] image_thumb[40] image_thumb[41] image_thumb[42] image_thumb[43]
    image[141] image[134] image[135] image[136] image[137] image[138] image[139] image[140]
    image[150] image[142] image[143] image[144] image[145] image[146] image[147] image[149]
    image[151] image[152] image[153] image[154] image[155] image[156] image[157] image[158]
    image[166] image[159] image[160] image[161] image[162] image[163] image[164] image[165]
    image[167] image[168] image[169]          

     

    Day 1 Minutes to Midnight Countdown
       Countdown timer until midnight.
    Day 2 Bluetooth Manager
       Utility to programmatically control Bluetooth status.
    Day 3 GPS Compass
       GPS tools to read device’s heading from device GPS.
    Day 4 Mileage Tracker
       Application that will track vehicles mileage statistics.
    Day 5 Mobile Capture
       Screenshot utility that will programmatically take screenshots on device.
    Day 6 Pocket PasswordGen
       Program generates secure random passwords.
    Day 7 Mobile FX
       Fun application that allows user to play various “situation” sounds.
    Day 8 Rotate Me
       Utility to programmatically control the device’s orientation.
    Day 9

    Mobile Tipper

       Allows users to calculate tips quickly and easily.
    Day 10 What is My IP?
       Find out the IP addresses a device has in a snap.
    Day 11 Mobile Signature
       Program that will capture signature from people in the field.
    Day 12 Mobile Quiz
       Application that is designed to display created quizzes and polls to users.
    Day 13 Pocket Death Calculator
       Fun program that will calculate how long until a user has left to live.
    Day 14 Mobile SMS Contact
       Utility to allow sending of SMS text messages to groups.
    Day 15 Mobile SMS Remote
       SMS framework and application for sending SMS commands to devices.
    Day 16 SMS Logger
       Record and log all SMS text messages received by device.
    Day 17 Lunch-O-Matic
      Take the chore out of deciding where to eat lunch today.
    Day 18 Mobile Weather
       What will the weather be like today?
    Day 19 Mobile Speedometer
       GPS utility that will obtain current speed from the device’s GPS.
    Day 20 Mobile Altimeter
       GPS utility that will read the current altitude from GPS.
    Day 21 Mobile Sketcher
       Simple but powerful drawing application for Windows Mobile.
    Day 22 GPS Clock
      GPS application that can update the device’s time from GPS information.
    Day 23 MobileInfo
      Program that will read and display device related information
    Day 24 Mobile Flashlight
      In the dark? Mobile Flashlight is here to help.
    Day 25

    SmartDial

      Want to create your phone dialing interface? Start with SmartDial.
    Day 26 GeoCash
      This application will log and track where you spend all your money.
    Day 27 Repeatr
       Miss a phone call, text message, or email. This application will remind you.
    Day 28 CallBlocker
       Tired of that annoying automated marketing call? Let CallBlocker block it.
    Day 29 Community Megaphone Reader
       Wondering where the closest developer event is to you? CMR can tell you.
    Day 30 Trippr
       Let Tripper find geotagged photos from your location on Flickr.

    Monday, June 23, 2008 12:25:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Sunday, June 22, 2008

    Yeah, we have made it through week three of my 30 Days of .NET challenge. So far, we have 22 applications for 22 days. Thanks for your support!

    If you missed the week one recap here it is: 30 Days of .NET [Windows Mobile Applications] - Week One.

    If you missed the week two recap here it is: 30 Days of .NET [Windows Mobile Applications] - Week Two.

    What’s your favorite?

    image image image image
    Mobile SMS Remote SMS Logger Lunch-O-Matic Mobile Weather

    We get around, don’t we? SMS, RSS, GPS, Camera API, and more!

    image image image image
    Mobile Speedometer Mobile Altimeter Mobile Sketcher What will be next?

    Feedback:

    Got an idea? Got some feedback? Share it? Thanks!


    Sunday, June 22, 2008 6:31:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [1]  |  Trackback

    I couldn’t resist creating another GPS related mobile application. One of the neat pieces of data you get from your GPS device is time. This is great. It is like having one of the clocks that can update itself over the air by reading data transmitted from various atomic clocks throughout the world. Many phones today have the ability to update their time by connecting to the OEM’s time servers, but not all. And there are still lots of Windows Mobile classic devices in the world that do not have cellular capabilities.

    Vista has the ability to update its time by using a feature called Internet Time. Basically Vista connects to time.windows.com and reads a Network Time Protocol server.

     

    image

    GPS Clock

    Our user interface is simple and direct. We are using a nice graphic to adds some visual zing to the application. At the top of the screen we show the user their current device time and their current GPS time.

    This allows the user to tell at a glance if they need to update their device’s time using the Update menu option.

    On the menu we have added some simple settings features: GPS Start, GPS Stop, About, and Exit.

    This is one of those Web 2.0 ideas where an application does one thing but does it very well. Sometimes these are the best apps. In this case, our application provides a bride for GPS time data to become device time data.

    Somtimes that’s all it takes to make a user happy.

    UpdateData Method:

       1: void UpdateData(object sender, System.EventArgs args)
       2: {
       3:     if (gps.Opened)
       4:     {
       5:         if (position != null)
       6:         {
       7:             if (position.TimeValid)
       8:             {
       9:                 gpsTime = position.Time;
      10:  
      11:                 labelCurrentGpsDate.Text = gpsTime.ToLongDateString();
      12:                 labelCurrentGpsTime.Text = gpsTime.ToLongTimeString();
      13:             }
      14:         }
      15:     }
      16: }

     

    UpdateTime Method:

       1: private struct SYSTEMTIME
       2: {
       3:     public short Year;
       4:     public short Month;
       5:     public short DayOfWeek;
       6:     public short Day;
       7:     public short Hour;
       8:     public short Minute;
       9:     public short Second;
      10:     public short Milliseconds;
      11: }
      12:  
      13: [DllImport("coredll.dll")]
      14: private static extern bool SetSystemTime(ref SYSTEMTIME time);
      15:  
      16: private void UpdateTime()
      17: {
      18:     DateTime idag = gpsTime.ToUniversalTime();
      19:  
      20:     SYSTEMTIME s = new SYSTEMTIME();
      21:     s.Year = (short) idag.Year;
      22:     s.Month = (short) idag.Month;
      23:     s.DayOfWeek = (short) idag.DayOfWeek;
      24:     s.Day = (short) idag.Day;
      25:     s.Hour = (short) idag.Hour;
      26:     s.Minute = (short) idag.Minute;
      27:     s.Second = (short) idag.Second;
      28:     s.Milliseconds = (short) idag.Millisecond;
      29:  
      30:     SetSystemTime(ref s);
      31: }

    Possibilities:

    How about changing the color of the date and time if they are more than five minutes off? Simple feature to add but really helps the user. And that’s what matters.

    Download executable: gpsClock.cab

    Download Source Code: gpsClock.zip

    Feedback:

    Want more? What else would you like to see? Time’s running out on submitting ideas. Be sure to get yours in soon!


    Sunday, June 22, 2008 6:16:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback

    The main goal of 30 Days of .NET was to create a series of applications, any of which, a reader could take and use as a springboard to creating their first application. Well that, and to have some fun along the way and get more people excited about mobile development. A secondary goal of mine has been to show off various capabilities of mobile devices like GPS, Bluetooth, and multimedia features. One feature we haven’t covered so far is using a built-in camera.

    Today we will mark that item off our list…

    image

    Mobile Sketcher

    The goal is to create a basic drawing application, but add a mobile twist to it. On the menu, I have added a menu item for selecting a picture using the select picture dialog. The nice thing about the select picture dialog is it allows you to use your camera to take a picture and then select it as your picture.

    In a way this application is a lot like the mobile signature capture application we did a while back, but there are some important differences: picture selection support, camera support, save file dialog support, and more. The business case for this application is something like the following: an insurance agent arrives on the scene of an automotive accident, she takes a picture using Mobile Sketcher and then adds notes and sketches to the picture for claims processing.

    So users can select a picture from their device or take a picture and use it for their background. And then they can draw and edit the picture using Mobile Sketcher. At the bottom of the screen we allow user to select different colors for the pen’s ink: red, orange, yellow, green, blue, brown, white, and black. Well okay, white is really a light gray since white on white is hard to see.

    SelectPicture Method:

       1: private void SelectPicture()
       2: {
       3:     SelectPictureDialog selectPictureDialog = new SelectPictureDialog();
       4:     DialogResult dialogResult = selectPictureDialog.ShowDialog();
       5:  
       6:     if (dialogResult != DialogResult.OK)
       7:         return;
       8:  
       9:     pictureBox.Image = new Bitmap(selectPictureDialog.FileName);
      10: }

    Possibilities:

    There is lots of room for improvement with this application. Just think of all the features most drawing programs have and there’s your list for improvements.

    Download executable: mobileSketcher.cab

    Download Source Code: mobileSketcher.zip

    Feedback:

    Want more? What else would you like to see? The managed API for using a Window Mobile camera is a great feature that is very powerful and very easy. Use it in your next mobile application or your first.


    Sunday, June 22, 2008 1:17:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Saturday, June 21, 2008

    Yesterday, I had a really hard time between choosing to do a Mobile Speedometer or a Mobile Altimeter. But another day gives us another opportunity, and today we shall create the Mobile Altimeter.

    image

    Mobile Altimeter

    This will make the third application in the 30 Days of .NET series that has had targeted GPS capabilities. We have created a compass, a speedometer, and now a altimeter. And there are still dozens of applications we could create with the GPS capabilities of Windows Mobile.

    This time I decided to a little more with the UI. We have a background that symbolizes “altitude” which is appealing to end users. Plus it gives the program a lot of style and class. On the left side of the screen if you look carefully, you will notice we have an attitude ruler, which has a marker that rises one pixel for every foot higher the device travels up to 180 feet.

    This simple feature really takes our application up to the next level. :D (Yeah, I know: I’m terrible.)

    At the bottom of the screen we are allowing the user to read all the main stats off the GPS so the application is even more useful. We show altitude in a large bold font in the middle of the screen for impact.

    The main event: UpdateData

       1: void UpdateData(object sender, System.EventArgs args)
       2: {
       3:     if (gps.Opened)
       4:     {
       5:         if (position != null)
       6:         {
       7:             if (position.SeaLevelAltitudeValid)
       8:             {
       9:                 labelAltitude.Text = position.SeaLevelAltitude.ToString("0.00ft");
      10:                 if (position.SeaLevelAltitude >= 0 && position.SeaLevelAltitude <= 180)
      11:                     pictureBoxArrow.Top = 173 - (int) position.SeaLevelAltitude;
      12:                 else
      13:                     pictureBoxArrow.Top = 173;
      14:             }
      15:         }
      16:     }
      17: }

    Possibilities:

    I think a more realistic UI would be a great improvement. And the ability to switch from miles to kilometers would be good too. If the odometer would track miles traveled that would be an awesome enhancement.

    Download executable: mobileAltimeter.cab

    Download Source Code: mobileAltimeter.zip

    Feedback:

    Want more? What else would you like to see? There’s been a lot of demand for GPS related applications. Does that help?


    Saturday, June 21, 2008 2:07:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [2]  |  Trackback
    Friday, June 20, 2008

    After the last GPS related application, GPS Compass, I’ve been wanting to do another GPS focused application. This time I figured we’d get in the driver’s seat with our friend: SPEED.

    Gentlemen, start your engines…

    image

    Mobile Speedometer

    The application is built off of  Windows Mobile 6 SDK included a GPS Application in the samples folder, C:\Program Files\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS.

    This uses the GPS Intermediate Driver. If you are writing a location aware application for Windows Mobile this is definitely the way to go. ;)

    The main UI is located at the top of the screen. We have a simple speedometer graphic in the background to add some flair to the application. On top of this we overlay the current speed based off of information returned from the GPS device. We can also use Fake GPS to simulate a GPS device.

    Below this we have a readout of various GPS statistics that are updated continuously.

    One thing to note is Speed may be return in knots which you will likely want to convert to either miles or kilometers.

     

     

     

     

    We just need to create a method something like UpdateData below.

       1: void UpdateData(object sender, System.EventArgs args)
       2: {
       3:     if (gps.Opened)
       4:     {
       5:         if (position != null)
       6:         {
       7:             if (position.SpeedValid)
       8:             {
       9:                 labelSpeed.Text = (position.Speed/1.15077945).ToString("0.00");
      10:             }
      11:          }
      12:      }
      13: }

    Possibilities:

    I think a more realistic UI would be a great improvement. And the ability to switch from miles to kilometers would be good too. If the odometer would track miles traveled that would be an awesome enhancement.

    Download executable: mobileSpeedometer.cab

    Download Source Code: mobileSpeedometer.zip

    Feedback:

    Want more? What else would you like to see?


    Friday, June 20, 2008 12:53:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [2]  |  Trackback
    Thursday, June 19, 2008

    How'd we make it this far without a weather application? I must admit its hard to buy anything these days that doesn’t have a weather feature built in. But does everyone understand the basic of writing such an application? That’s what we will explore today.

     

    image

    Mobile Weather

    UI is a little plain. I really think a weather application needs to have a top notch exciting UI, but we’ll keep it simple this time. We have an input section at the top that takes the user’s ZIP Code, and we have an output section at the bottom.

    In the output section we have some basic factoids like current conditions and temperature. We also have a forecast for the next day showing date, description, with high and low temperature. And finally we have a graphic to add a little something to an otherwise drab application.

    How did we mine this information. Basically I connected to a public weather RSS feed that takes zip code as an URL parameter, using an HttpWebRespone object. I then parsed out the data I need using regular expressions.

    There are other ways of doing this type of thing, but I thought this would allow us to use a lot of neat Window Mobile technologies we haven’t explorer before.

    Our friend the HttpWebResponse:

       1: private void RefreshData()
       2: {
       3:     string lcUrl = "http://weather.yahooapis.com/forecastrss?p=" + textBoxZipCode.Text.TrimEnd();
       4:  
       5:     // *** Establish the request 
       6:     HttpWebRequest loHttp = (HttpWebRequest)WebRequest.Create(lcUrl);
       7:  
       8:     // *** Set properties
       9:     loHttp.Timeout = 10000;     // 10 secs
      10:  
      11:     // *** Retrieve request info headers
      12:     HttpWebResponse loWebResponse = (HttpWebResponse)loHttp.GetResponse();
      13:  
      14:     Encoding enc = Encoding.GetEncoding(1252);  // Windows default Code Page
      15:  
      16:     StreamReader loResponseStream = new StreamReader(loWebResponse.GetResponseStream(), enc);
      17:  
      18:     string lcHtml = loResponseStream.ReadToEnd();
      19:  
      20:     RefreshScreen(lcHtml);
      21:  
      22:     loWebResponse.Close();
      23:     loResponseStream.Close();
      24: }

     

    Last but not least the Regex object:

       1: string conditionsEx = @"<yweather:condition  text=""(?<desc>[^@]+)""  code=""(?<code>[^@]+)""  temp=""(?<temp>[^@]+)""  date=""(?<junk>[^@]+)"" ";
       2:  
       3: Regex regEx = new Regex(conditionsEx);
       4:  
       5: Match m = regEx.Match(input);
       6:  
       7: if(m.Success)
       8: {
       9:     desc = m.Groups["desc"].Value;
      10:     temp = m.Groups["temp"].Value;
      11: }

    Possibilities:

    The UI needs more polish, but it is useable. There is even more data in this RSS feed than I’m exposing so that is another way to expand on this project and make something awesome.

    Download executable: mobileWeather.cab

    Download Source Code: mobileWeather.zip

    Feedback:

    How could we make this application even better? Share your ideas with the community.


    Thursday, June 19, 2008 1:59:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Wednesday, June 18, 2008

    Being a geek, I have a lot of geek friends. Being friends, we tend to eat lunch together. The only problem is sometimes we have a hard time deciding where to go to eat lunch. This invariably leads to the “Where do you wanna eat?”, “I dunno, where do you wanna eat go?”, “It doesn’t matter to me, you decide.” Well here is a simple solution to this daily dilemma:

     

    image

    Lunch-O-Matic

    Our UI has just enough class to be exciting and interesting, yet simple enough not to cause us too much grief. Seek balance in all things. The concept: restaurant logos flash across the screen, eventually stopping on the chosen food establishment. The application is visual, which is appealing. The application is clear. The user can easily tell which restaurant is chosen by following the ginormous arrow. A light blue background give the app a little warm and the arrow adds character.

    We have a folder called LunchLogos. Any png file found is the folder is added to an generic image list at the start of the program. When the user clicks Spin, the logos are randomly displayed on the screen for a random number of times before stopping on a chosen eatery.

    If you don’t like a restaurant all you have to do is remove the logo from the folder. If you have a restaurant you like that isn’t in the list all you have to do is add the logo to the same folder, simple, simple.

    Again for this application we used the RNGCryptoServiceProvider class to generate a statistically sound random number.

       1: private int GetRandomNumber(int minValue, int maxValue)
       2: {
       3:     // Use a 4-byte array to fill it with random bytes and convert it then
       4:     // to an integer value.
       5:     byte[] randomBytes = new byte[4];
       6:  
       7:     // Generate 4 random bytes.
       8:     RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
       9:     rng.GetBytes(randomBytes);
      10:  
      11:     // Convert 4 bytes into a 32-bit integer value.
      12:     int seed = (randomBytes[0] & 0x7f) << 24 |
      13:                 randomBytes[1] << 16 |
      14:                 randomBytes[2] << 8 |
      15:                 randomBytes[3];
      16:  
      17:     // Now, this is real randomization.
      18:     Random random = new Random(seed);
      19:  
      20:     return random.Next(minValue, maxValue);
      21: }

    And we have created a simple randomize list function to mix things up a bit.

       1: public void RandomizeList(List<string> arrayList)
       2: {
       3:  
       4:     if (arrayList == null) { return; }
       5:     int count = arrayList.Count;
       6:     for (int i = 0; i < count; i++)
       7:     {
       8:         string tmp = arrayList[i];
       9:         arrayList.RemoveAt(i);
      10:         arrayList.Insert(GetRandomNumber(0, count), tmp);
      11:     }
      12: }

    Last but not least, we use the Mod function to make sure we can loop around the list when picking images.

       1: private void Spin()
       2: {
       3:     int index1 = GetRandomNumber(0, logos.Count);
       4:     int index2 = (index1 + 1) % logos.Count;
       5:     int index3 = (index2 + 1) % logos.Count;
       6:  
       7:     pictureBoxTop.Image = logos[index1];
       8:     pictureBox.Image = logos[index2];
       9:     pictureBoxBottom.Image = logos[index3];
      10: }

    Possibilities:

    Well, I think it would be cool if there was a background sound to go along with the spin. I also think a UI for adding and deleting logos would be great. It would be nice to be able to assign weights to each restaurant, and to favor new choices over previously selected places.

    Download executable: lunchomatic.cab

    Download Source Code: lunchomatic.zip

    Feedback:

    How could we make this application even better? Share your ideas with the community.


    Wednesday, June 18, 2008 12:11:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Monday, June 16, 2008

    I’ve had a lot of requests for SMS related applications. So today we will create a SMS logger application. This application will allow users to scroll through a listing of all the SMS / text messages they have received while the application has been running.

     

    image

    SMS Logger

    This is a great application for a beginner to create. It has a very simple UI, the main component is the WebBrowser. The way we can have nicely formatted text easily.

    The key piece of code here is the MessageRecieved event off of the SmsIntercepter object.

       1: private StringBuilder documentText = new StringBuilder();
       2: void SmsInterceptor_MessageReceived(object sender, MessageInterceptorEventArgs e)
       3: {
       4:     if (enableInterceptor == false)
       5:         return;
       6:  
       7:     // Cast to SmsMessage to access message body
       8:     // Not expecting to receive any non-SMS messages but use "as" to
       9:     // cast to be extra safe
      10:     SmsMessage newMessage = e.Message as SmsMessage;
      11:     if (newMessage != null)
      12:     {
      13:         documentText.AppendFormat(@"<b>Body:</b> {0}<br/>", newMessage.Body);
      14:         documentText.AppendFormat(@"<b>Name:</b> {0}<br/>", newMessage.From.Name);
      15:         documentText.AppendFormat(@"<b>Address:</b> {0}<br/>", newMessage.From.Address);
      16:         documentText.AppendFormat(@"<b>Last Modified:</b> {0}<br/>", newMessage.LastModified);
      17:         documentText.AppendFormat(@"<b>Received:</b> {0}<br/>", newMessage.Received);
      18:         documentText.Append(@"<br/>");
      19:  
      20:         webBrowser.DocumentText = documentText.ToString();
      21:     }
      22: }

    We have a few actions the user do: Start, Stop, Clear, About, and Exit.

    Possibilities:

    This application logs incoming SMS messages, but it doesn’t do several thing that were requested from our reader. It doesn’t log outgoing messages. It doesn’t save to a text file. And it doesn’t clear out data from Outlook Mobile when the users runs SMS Logger.

    I also think there is room to improve the UI. I think some small 16x16 pixel graphic files could really add some life to the application. Maybe one icon for incoming messages, and one for outgoing messages.

    So who’s up to it? Anyone want to take this application to the next level? Just let me know.

     

    Download executable: smsLogger.cab

    Download Source Code: smsLogger.zip

    Feedback:

    So what possibilities do you see for this type of application? for business? for entertainment?


    Monday, June 16, 2008 10:30:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [1]  |  Trackback

    Today, is day 15 of my 30 Days of .NET challenge. That marks the 50% point, and we have 15 applications for 15 days. Thanks for your support!

    And we have made it through another week. If you missed the week one recap here it is: 30 Days of .NET [Windows Mobile Applications] - Week One.

    What’s your favorite?

     

    image image image image
    Rotate Me Mobile Tipper What is My IP? Mobile Signature

    Lots of variety, everything from network utilities, to graphics, to humor, to SMS text messaging. Great ideas, guys!

     

    image image image image_thumb14
    Mobile Quiz Pocket Death Calculator Mobile SMS Contact What will be next?

     

    Feedback:

    Got an idea? Got some feedback? Share it? Thanks!


    Monday, June 16, 2008 2:48:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [7]  |  Trackback

    Today’s application is about possibilities. It’s a new area we will explore in our future applications. It’s important to learn how to development applications, but it is also important to learn what kind of applications you can develop. Your goal is always to reach just a little further, and grow from the experience.

     

    The important thing here isn’t what this application does with these ideas, but what you could do with these ideas.

     

    People can use SMS to send and receive information through text messages, but with the power of Windows Mobile it is easy for application to send and receive commands and data. There is a big movement for software to expose its features and functions to other programs. But image a world, that probably isn’t too far, where your mobile device has it’s own API that you and others can use to access its data and functions.

    Where could this be useful? Well many companies need the ability to send “Alerts” of some kind to their workers. It is easy to use the Windows Mobile SMS API to have a custom written application that check for specially “tagged” SMS messages.

     

    image

    Mobile SMS Remote

    SMS Remote is an application that could run on two or more Windows Mobile device and allow each of the phones run to support “commands” on the phones. For example, a user could get the date and time of another device running SMS Remote. Or the user could run a command to get the other phone’s current GPS location information. The possibilities are limitless. Both devices are both servers and both clients in other words a very simple peer-to-peer network using SMS technology. How cool is that?

    What if sometimes we don’t want others to be able to run commands on our device remotely? First of all we could always exit the application. The application must be running in other to execute remote commands. Be I have also added an “Allow Remote Commands” feature.

    How can we send SMS remote commands? Use the SMS command ComboBox and choose a command, and enter the remote device’s phone number. Then just click “Send”.

    How can we tell what commands have been remotely run on our device? There is a received commands listing at the bottom the screen. It shows the phone number of the device that send the command, the time the command arrive, and which command was requested.

    This is a rough prototype of an idea that has HUGE potential. Some point in the next ten years this concept will take off and become something along the lines of Mobile 2.0.

    The trick to this application is using the very cooly named Windows Mobile 6.0 SDK MessageInterceptor class. We can use it to have any SMS that begins with “30days:” fire an event in our application that we will then handle. This is very, very, very simple for something so powerful. Use it!

       1: MessageInterceptor _smsInterceptor = null;
       2: private void LoadSmsIntercepter()
       3: {
       4:     _smsInterceptor = new MessageInterceptor(InterceptionAction.NotifyAndDelete);
       5:  
       6:     _smsInterceptor.MessageCondition =
       7:         new MessageCondition(MessageProperty.Subject,
       8:         MessagePropertyComparisonType.StartsWith, "30days:", true);
       9:     _smsInterceptor.MessageReceived += SmsInterceptor_MessageReceived;
      10: }

    The rest is simple. Was the SMS a “command” or a “result”? If command we need to run and return a result. If result we need to act on or display to device user.

    Possibilities:

    I implemented the get date and time function, but not the GPS function. This would be a very useful addition to the application that I would love to say a reader did. Or how about a way to add Internet Explorer Mobile favorites? Or how about something more Web 2.0 like what song is currently playing.

    Download executable: mobileSMSRemote.cab

    Download Source Code: mobileSMSRemote.zip

    Feedback:

    So what possibilities do you see for this type of application? for business? for entertainment?


    Monday, June 16, 2008 1:58:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [2]  |  Trackback
    Sunday, June 15, 2008

    Today one of my readers, Paul Diston, made the following request.

    Hi,
    I have another idea you might be interested in. I would like to be able to type in a single SMS message and then hit the send button which would then send the same message to all my contacts that have a mobile number specified.


    Thanks
    Paul Diston

    The thing that I really liked about Paul’s suggestion is that is cover two very important mobile development topics: one is working with contacts stored in Outlook Mobile, and the other is working with SMS messaging.

    image

    image Mobile SMS Contact

    I changed it a little bit from Paul’s original request. I decided to incorporate a filter into the application. This way you can send SMS messages to your personal contacts, or your business contacts. You could even create a custom category. I didn’t include an option to select contacts that do not have a category assigned to them. This would be a great modification for a reader to implement. Simply add a ‘<none>’ item to the list, and if that item is selected add any contact that doesn’t have a category.

    I added a ListView so that users could see the contacts they were about to text message. Another great enhancement, would be the ability to modify this listing. Just a remove option would be a great addition in functionality.

    One feature I added as a polishing touch, was the live character count feature. This feature lets users know how much more text they can send. And we have found another opportunity for improvement here. I limit the text to 160 characters, but if someone entered in more text we could send X number of text messages until the complete message was delivered.

    Next with have our SMS Message TextBox where we can type the message we will send. Nothing special here, but I didn’t set a MaxLength of 160 characters.

    At the bottom I exposed the RequestDeliveryReport property of the SmsMessage class. What ever the user picks here will be assigned to that property.

    One feature that I really love about Windows Mobile programming, that especially came in useful for this application was the Cellular Emulator.

    GetContacts Code:

       1: private List<Contact> GetContacts(string category)
       2: {
       3:     List<Contact> contacts = new List<Contact>();
       4:  
       5:     ContactCollection contactsCollection = outlookSession.Contacts.Items;
       6:  
       7:     foreach (Contact contact in contactsCollection)
       8:     {
       9:         if (contact.Categories.Contains(category))
      10:         {
      11:             contacts.Add(contact);
      12:         }
      13:     }
      14:  
      15:     return contacts;
      16: }

    SendSMS Code:

       1: private void SendSMS()
       2: {
       3:     List<Contact> contacts = GetContacts(comboBoxCategories.SelectedItem.ToString());
       4:  
       5:     SmsMessage smsMessage = new SmsMessage();
       6:     //Set the message body.
       7:     smsMessage.Body = textBoxSMSMessage.Text;
       8:  
       9:     foreach (Contact contact in contacts)
      10:     {
      11:         string name = string.Format("{0} {1}", contact.FirstName, contact.LastName).Trim();
      12:         string address = contact.MobileTelephoneNumber;
      13:  
      14:         if (address.Length == 0) break;
      15:  
      16:         //Add recipients.
      17:         smsMessage.Body = textBoxSMSMessage.Text;
      18:         if (name.Length == 0)
      19:             smsMessage.To.Add(new Recipient(address));
      20:         else
      21:             smsMessage.To.Add(new Recipient(name, address));
      22:         smsMessage.RequestDeliveryReport = checkBoxRequestDeliveryReport.Checked;
      23:     }
      24:  
      25:     if(smsMessage.To.Count == 0) return;
      26:  
      27:     //Send the SMS message.
      28:     smsMessage.Send();
      29: }

    Download executable: mobileSMSContact.cab

    Download Source Code: mobileSMSContact.zip

    Feedback

    One thing I decided not to do with this application is spend any time on the UI. I wanted readers to see one application that was plain Jane vanilla. Consider what you could do to this application to make it appealing to end users. Share your ideas, and maybe I’ll do them, or even better try taking the code and making the changes yourself. If you do this for the application or any other I will link to back to you so everyone can “see” and “learn” for your efforts.


    Sunday, June 15, 2008 2:10:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [2]  |  Trackback
    Saturday, June 14, 2008

    Let’s have some fun today. And do an application that is just for kicks. I had a really hard time coming up with a Friday the 13th themed mobile application. I finally thought of one: The Pocket Death Calculator. Yeah, it’s a bit crazy, but it’s good not to take yourself too seriously. There are lots of these Death Clocks on the Internet, here’s a famous one: The Death Clock.

     

    image

    image

    Pocket Death Clock

    This application is about how many lines of code you can write. It shows how a simple idea in a good looking package can really charm a lot of people. Most people enjoy a surprise, or something unexpected, something to break the day from being ordinary and routine. Sure you can write the next great mobile financial planner package, or you could write a quick “fun” app to put a smile on someone you know’s face.

    The UI is really simple just a background image file, but it is a good looking background image file. And that is pretty much what is pulling off the application. I thought about putting glowing red eyes on a timer and having their visibility randomly change, but decided to leave it as an exercise for my readers. Try it you’ll be surprised how much it really sets off the application. And makes it stand out.

    The death calculation engine is straight forward: we take the user’s age and gender and modify the average human life span appropriately. Then we subtract the users present age from their expected life span. Next we calculate the number of seconds in a year. We use our cryptographically strong random function to pick a random second in that year for the user to “die” on. Now we have our death date. It’s a simple matter to calculate the number of seconds the user has left. We put everything on the screen and update on a timer.

    There you have it.

    Possibilties:

    Simple applications always have the best possibilities. We talked about adding glowing eyes. But you could also add random death quotes. You could also ask the user more questions and better guesstimate their death date. You could also “guesstimate” where and how they would die using data easily found on the Internet.

    Always good to know you have less than a million seconds before you are going to die from a shark attack in Quebec. Plenty of time to pick up some shark repellent.

     

     

     

     

    Download executable: pocketDeathClock.cab

    Download Source Code: pocketDeathClock.zip

    Feedback:

    I think this is our first humorous application, not counting Mobile FX, what did you think of it? Would you like to see more of these types of applications, that are creative idea based, or more of the technically focused applications? I like to keep a good bit of variety to show all the possibilities, so I hope that is working for everyone.

    If not, share your idea for tomorrows application.


    Saturday, June 14, 2008 12:14:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [5]  |  Trackback
    Friday, June 13, 2008

    Today we are going to look at another classic goal in Mobile development, data collection. You might need it for a line of business application, for example a field service application where workers need to inspection equipment and fill out a questionnaire. Or you might need it in a mobile poll taker application. You could even use it in a trivia game. There are few applications actually that couldn’t take advantage of a question and answer system like the Mobile Quiz.

     

    image

    imageMobile Quiz

    There is so much potential with this application. I hope you can see the concept and see the potential here. There are a world of possibilities here. Hopefully this application will help you get ever so slightly closer to realizing some of them.

    The UI is a straight-forward and clean design, which was easy to make but should appeal to users. Everything is meant to be intuitive and self explanatory. Users should simple be able to look at the screen and get it.

    The first screen is an quiz introduction form. All we have here is some eye candy, the name of the quiz, and some basic menu options: Start, About, and Exit.

    After this the user is presented with the questions screen. This is the main meat of the application.

    Questions are pulled from an XML file which could be retrieved from a remote server.

     

       1: <?xml version="1.0" encoding="utf-8" ?>
       2: <quiz name ="Family Guy Quiz">
       3:   <question>
       4:     <text>In what state do the Griffins live?</text>
       5:     <correct>2</correct>
       6:     <answer>Connecticuit</answer>
       7:     <answer>Rhode Island</answer>
       8:     <answer>Massachusetts</answer>
       9:     <answer>Deleware</answer>
      10:     <answer>South Carolina</answer>
      11:   </question>
      12:   <question>
      13:     <text>What television actor is the mayor of the town?</text>
      14:     <correct>1</correct>
      15:     <answer>Adam West</answer>
      16:     <answer>David Hasselhoff</answer>
      17:     <answer>Leonard Nimoy</answer>
      18:     <answer>William Shatner</answer>
      19:     <answer>Harrison Ford</answer>
      20:   </question>
      21:   <question>
      22:     <text>What is Cleveland's last name?</text>
      23:     <correct>1</correct>
      24:     <answer>Brown</answer>
      25:     <answer>Smith</answer>
      26:     <answer>Craft</answer>
      27:     <answer>Cub</answer>
      28:     <answer>Jones</answer>
      29:   </question>
      30:   <question>
      31:     <text>What is the name of Stewie's stuffed bear?</text>
      32:     <correct>3</correct>
      33:     <answer>Barry</answer>
      34:     <answer>Chris</answer>
      35:     <answer>Rubert</answer>
      36:     <answer>Edward</answer>
      37:     <answer>Paddy</answer>
      38:   </question>
      39:   <question>
      40:     <text>What is Quagmire's profession?</text>
      41:     <correct>4</correct>
      42:     <answer>Developer</answer>
      43:     <answer>Police Office</answer>
      44:     <answer>Barber</answer>
      45:     <answer>Pilot</answer>
      46:     <answer>Teacher</answer>
      47:   </question>
      48: </quiz>

     

    It’s a snap to open the XML file and read in all of our data.

       1: DataSet dataSet = new DataSet();
       2: // read quiz data file
       3: dataSet.ReadXml(@"\Program Files\MobileQuiz\quiz.xml");

    One thing that I decided was important was to avoid showing modal MessageBox dialogs often. Sick Instead I choose to use a label, place it at the top, set it’s background color to Info, and use it accordingly. This works out great and I think is a much better user experience. Data entry on a mobile device is a huge pain, and if you can take a dialog out of the equation that’s a good thing.

    Download executable: mobileQuiz.cab

    Download Source Code: mobileQuiz.zip

    Feedback

    There’s a lot here for a little effort, a couple hours, and there is a huge potential for this type of application. This would be a great project for someone to expand on and create something really special from. Consider it if you are looking for your first mobile project.


    Friday, June 13, 2008 2:49:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Thursday, June 12, 2008

    image

    You know sometime someone tells you about something, and you can tell there is a whole lot more to it than they are telling you about. Well, signature capture for Windows Mobile is one of those things. It’s really not bad today and you can do it in one sitting easily now. But there was a time, when if your life depending on it you might be able to get it right. At least we have managed code now. A few of us attempted to do this feat in embedded Visual Basic years ago and I’m surprised it didn’t cost us our sanity. Oh the humanity…

    You could do it you just had to copy each color pixel by pixel and save it into a bitmap, and that was a challenge too. And GetPixel() had to be the slowest function call ever. It took at least a second. No way, you were going to give someone a full screen to put there signature.

    That was then, this is now…

    image

    Mobile Signature

    Office 2007 might have 2007 features in it. And it works for Office 2007, well to a point. But with Windows Mobile applications less is more. Don’t get me wrong I really do think Mobile Signature would make a great feature in a more complete application. But as far as the feature of taking a signature on a mobile device this is a great approach.

    Also note that Mobile Signature could be easily adapted into a drawing application, and so on, especially for kids.

    Let’s talk about UI first. Notice how much space is dedicated to taking the user’s signature. This is important; I’ve seen almost the reverse before and that just isn’t very usable. I took a little extra time and care to make sure all control had a black border around them,expect the black color square. It has a gray border.

    One thing to note is a wanted the user to be able to tell what color they would be writing in without having to draw on the screen. This is accomplished by having the borders around the active color flash on and off. This is a great visual effect that was easy to implement with a timer. We track the currently active color in a form level variable, and on the timer tick event, which happens every 500 ms, we toggle the visibility of the border around the active color. Works great! Check it out!

    The menu is another area that is simple but you can learn from it. Save is very important to us, so it is prominent and has it own hardware button that can cause it to occur. On the menu we have an option for clearing the screen, showing the about form, and exiting the application. But we also have a menu option to change the size of the line we are drawing with. It can be set from any of the following: 1 pixel, 3 pixels, 5 pixels.

    The core of the application is the code that actually draws the lines on the screen. Here it is:

       1: private void pictureBox_MouseMove(object sender, MouseEventArgs e)
       2: {
       3:     if (pen.Color != signatureColor)
       4:         pen = new Pen(signatureColor);
       5:  
       6:     if (pen.Width != width)
       7:         pen.Width = width;
       8:  
       9:     x1 = x2;
      10:     y1 = y2;
      11:     x2 = e.X;
      12:     y2 = e.Y;
      13:  
      14:     if (x1 == -1 && y1 == -1)
      15:         return;
      16:  
      17:     pictureBoxSignature.CreateGraphics().DrawLine(pen, x1, y1, x2, y2);
      18: }

     

    One area of code that is worth checking out is the code to save the bitmap of the signature. It’s pretty advanced and powerful.

       1: // P/Invoke declaration
       2: [DllImport("coredll.dll")]
       3: public static extern int BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, uint dwRop);
       4:  
       5: const int SRCCOPY = 0x00CC0020;
       6:  
       7: private void Save(string filename, Graphics gx, Rectangle rect)
       8: {
       9:     Bitmap bmp = new Bitmap(rect.Width, rect.Height);
      10:     // Create compatible graphics
      11:     Graphics gxComp = Graphics.FromImage(bmp);
      12:     // Blit the image data
      13:     BitBlt(gxComp.GetHdc(), 0, 0, rect.Width, rect.Height, gx.GetHdc(), rect.Left, rect.Top, SRCCOPY);
      14:     bmp.Save(filename, System.Drawing.Imaging.ImageFormat.Bmp);
      15:     // Cleanup
      16:     bmp.Dispose();
      17:     gxComp.Dispose();
      18: }

    Everything else is pretty straight forward, but check it out and see what you think!

    Download executable: mobileSignature.cab

    Download Source Code: mobileSignature.zip

    Feedback

    So, how do you guys feel about line of business applications? Do you want more days that focus on line of business application topics? or less? Let me know! :D Tomorrow will be here before you know it.


    Thursday, June 12, 2008 2:48:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [2]  |  Trackback
    Wednesday, June 11, 2008

    I mentioned to the group that I would post the Prize Picker application we wrote together on my blog as part of my 30 Days of .NET series. I think this was an awesome idea, and it looked like everyone really enjoyed themselves. Hopefully, a few of them will see this post and share their thoughts as well. It was very nice to have a hands on type presentation that everyone got to participate in together. And since only one person was “driving” we didn’t have to stop and fix a disconnected monitor. Ok, we did one time, but just one time. Open-mouthed 

    Big thanks to everyone that came out and participated! Page Brooks, Donny Craft, Benton Little, , Jamey McElveen , Shawn Morris, and Thad Smith. It was a lot of fun!

     

    PrizePicker

    Prize Picker

    There is probably someone out there who doesn’t think this is the best looking application ever. Well, you’re right! It’s not, but we didn’t really focus on that any until we had a fully functional application. At that point it was time to pick prizes for the lucky hopefuls that became winners at the event.

    The only big item we didn’t implement, was an item that came up right at the end, we wanted to show the last winner in the area down at the bottom of the screen in big blog letters. And we wanted to rotate through remaining hopefuls and then finally pick a winner moving them to the winners table.

    The application is a firm believer of the KISS principle. We did the entire application in about an hour and a half. And that is including some refactorings, and changes we made along the way. I’m pretty happy with the application, and will love it once we have the “Jackpot” style UI element added.

    We added validation as we needed it, and decided to keep the applications logic in the UI, as hard as it was for us to do, to in this case to follow our KISS guidelines.

    We have used RNGCryptoServiceProvider class already in the Pocket PasswordGen application on day six. This class makes sure that our random numbers are statistically random and not pretend watered down random.

       1: Byte[] randomBytes = new byte[4];
       2:  
       3: RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
       4: rng.GetBytes(randomBytes);
       5:  
       6: // Convert 4 bytes into a 32-bit integer value.
       7: int seed = (randomBytes[0] & 0x7f) << 24 |
       8:             randomBytes[1] << 16 |
       9:             randomBytes[2] << 8 |
      10:             randomBytes[3];
      11:  
      12: int pick = seed % listViewHopefuls.Items.Count;

     

    Download executable: prizePicker.cab

    Download Source Code: prizePicker.zip

    Feedback

    The cool thing is we used this application to actually pick the winners for the prizes, and everything went great. So our intention is to keep using it from now. We are also going to post it on CodePlex soon and allow others to work on it as well.


    Wednesday, June 11, 2008 2:55:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback

    Wow, today was a busy day. I gave a Windows Mobile Programming presentation today at a .NET user group I help run, PDANUG. I changed it up at the very last minute, and instead of doing the presentation I was planing on doing we wrote a Windows Mobile application together. It was great. I think everyone contributed, and got something out of it. In the end we had a very nice Prize Picker application that we will be able to use again and again in the future. And I have a new talk that I can present. Any takers?

     

    image

    What is My IP?

    You may have seen sites like WhatIsMyIP.com, IPChicken.com, and my favorite IPCow.com. Most people prefer command prompt and good ole IPConfig. But sometimes when you are troubleshooting an issue with a friend of family member over the phone that’s not always the best idea. Usually in those kind of situations it is easier to send someone to a Web site and just have them read the value to you. I think some of the sites above will render appropriately on a mobile device, pretty sure IPCow.com does.

    But what if you can’t connect to the Internet, and you need to see your Intranet IP address. In this case, and many others, one wants something a little more direct, and clear.

    For this reason, “What is My IP?” exists. It couldn’t be simpler. Run the program, then see your IP address, or IP addresses in case you have multiple connections open. Which is very possible with today’s devices, with everything from Bluetooth, cellular connections, wireless connections, and more.

    This application only does one thing, so it needs to do it very well. And it needs to be appealing in how it looks and how it does it.

    Since the application has minimal features, it has a minimalist style to it. There is only one focus point of attention and that is the large network icon in the center of the screen. Everything else is clean and simple.

    There’s only one method of note in this application: RefreshData()

       1: private void RefreshData()
       2: {
       3:     string deviceName = System.Net.Dns.GetHostName();
       4:  
       5:     textBoxDeviceName.Text = deviceName;
       6:  
       7:     IPAddress[] addresses = Dns.GetHostEntry(deviceName).AddressList;
       8:  
       9:     comboBoxDeviceIP.Items.Clear();
      10:     for (int i = 0; i < addresses.Length; i++)
      11:         comboBoxDeviceIP.Items.Add(addresses[i].ToString());
      12:  
      13:     if (comboBoxDeviceIP.Items.Count > 0)
      14:         comboBoxDeviceIP.SelectedIndex = 0;
      15: }

    Download executable: whatIsMyIP.cab

    Download Source Code: whatIsMyIP.zip

    Feedback

    Not bad 10 applications in 10 days. Won’t be long before we’re at 20 applications in 20 days, and then 30 applications in 30 days. Keep the feedback coming.


    Wednesday, June 11, 2008 2:14:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [1]  |  Trackback
    Tuesday, June 10, 2008

    Tuesday, June 10th, 2008image
    Chris Craft

    Topic: Windows Mobile Programming

    Tuesday, June 10th, 2008, is the next meeting of the Pee Dee Area .NET User Group.

    Chris Craft will be presenting at Microsoft Mobility Roadshow alongside Brian Hitney, Glen Gordon, and Lou Vega in Charlotte - June 18, 2008 and Atlanta (Alpharetta) - June 24, 2008. These are full day Windows Mobile device application development events.  PDANUG will be hosting our own special "Welcome to the World of Windows Mobile" event to keep in theme these two MSDN events.
    Focus will be Windows Mobile 6.x and using Visual Studio 2008 to developer mobile applications.
    Topics to be covered:

    •       Intro to Windows Mobile
    •       Data Guidance (some discussion of line of business applications)
    •       Whole New Level
    Speaker Bio
    Chris Craft
    Pee Dee Area .NET User Group
    Florence, SC      
    •    Microsoft Windows Mobile Device Application Development MVP
    •    Cofounder and regular speaker of Pee Dee Area .NET User Group.
    •    Frequent CodeProject.com article author.
    •    Expert's Exchange Windows Mobile Programming Master.
    Email: ccraft@pdanug.net
    Web: http://pdanug.net/
    Blog: http://cjcraft.com/blog/


    Here is the tentative schedule:
    6:00 PM - 6:20 PM Socializing / Free Dinner
    6:20 PM - 6:30 PM Introduction, Sponsor Time, and News.
    6:30 PM - 8:00 PM Presentations


    Tuesday, June 10, 2008 11:52:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Monday, June 09, 2008

    Wow, time sure does fly when you're having fun. Since the beginning of the June, we have already knocked out over a half-a-dozen applications. It's hard for me to choose a favorite, as there is such variety, and many of you submitted great application ideas. If I had to pick a favorite, I think I would pick Mobile FX, since it is just fun.

    What's your favorite?

     

    image image image image
    Minutes to Midnight Countdown Bluetooth Manager GPS Compass Mileage Tracker

    Look at the variety: a countdown time, a Bluetooth control panel type application, a GPS application, and a work utility.

     

    image image image image
    Mobile Capture Pocket PasswordGen Mobile FX What will be next?

     

    Again, we get around as far as application topics: screen shot utility, password generator, a sound FX app, and who know's what we'll do next...

    Looking forward to this week's applications? Let's see where we'll go next.


    Monday, June 09, 2008 10:08:06 AM (Eastern Standard Time, UTC-05:00)  #    Comments [4]  |  Trackback

    image Wow, things are really moving around here. First Lou Vega offers to help with 30 Days of .NET as the VB .NET Editor. And now Christopher Fairbairn has offered to help as the C++ Editor.

    A little about Christopher:

    Christopher is the leader of the Christchurch .NET User Group. In case you didn't already know, Christchurch is in New Zealand. (Pretty cool reading about their climate, and I didn't realize they are know as the "Gateway to the Antarctic"). Christopher has a great blog mostly focused on Windows Mobile C++ development, which can be hard to find good information on when you are first starting out. Be sure to take a moment and read Christopher's "About Me" page. I think you'll agree that we are lucky to have him on the team, and that we are looking forward to seeing take on device application development for Windows Mobile.

     

    So far, Christopher is off to a great start having already reproduced two of the applications I have written. One of the thing I really enjoy is reading the blog post Christopher does for application he translates. He a great job of explaining the nuts and bolts of everything that he is doing. He is very detailed and very thorough, you can learn a lot simply following along with him

    Day 01 - 30 Days of .NET [Windows Mobile Applications]: Minutes to Midnight Countdown: C# Edition / C++ Edition

    Day 02 - 30 Days of .NET [Windows Mobile Applications]: Bluetooth Manager: C# Edition / C++ Edition


    Monday, June 09, 2008 2:44:39 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback

    Yesterday, I read the following suggestion for the 30 Days of .NET series.

    "How about a program to manually rotate from portrait to landscape, the millions of new HTC Diamond owners would love that :-)"

    - Alex

    Lucky guy, the HTC Diamond is a gorgeous device. I mean really, really good looking device - if Scarlett Johansson were a phone good looking here.

    Don't take my word for it. See for yourself:

    image

    image

     

     

     

     

     

     

     

     

     

    image

    image On my HTC device there is an today plug-in named "HTC Home", that gives me an icon I can click on my today screen which will rotate my device's screen. See screen capture, I've converted everything else to grayscale.

    This is a great little app, that does everything it claims it will do. Only thing is I hate it. I hate it because it doesn't do what I want it to do. It rotates through all four combinations of screen directions: top (0 degrees), left (90 degrees), bottom (180 degrees), and right (270 degrees). See that's the rub, never want to see my device upside down.

    So basically, every time you click this icon the screen rotates 90 degrees, which means I have to go through what I consider two junk orientations, bleh.

    I think we can do better.

    This is probably going to be the easiest application we write. Thanks, Alex! ;D

    I considered a few approaches to this application. I thought about following the same model as HTC and placing the application somewhere on the Today screen. Basically there are three ways to accomplish this. One we could write a today screen plug-in, but this isn't straight-forward in an managed application. There is a way to do it however: Creating a Pocket PC Today Screen Plug-in with the .NET Compact Framework.

    Or we could create a task tray icon for our application. If you look right about the Contacts menu item in the bottom right of my screen, you can see three application task tray icons. Again, I felt this was more work than worth. But here how you could do it: Using the Microsoft .NET Compact Framework MessageWindow Class.

    Finally, I though we could add an icon to the notification area at the top-right of the screen. If you'll look at my screenshot again you'll see where I have 6, count them 6, notification icons on my device. Everyone is doing this lately, and it starting to get out of hand lately. But if you like here's the information you'll need to accomplish this: Programmatically create and display Notifications.

    So what was my solution? Well, I decided to leave well enough alone. This leaves the end user three choices, one assign the application to hardware button, to assign the application to a today screen plug-in that can launch other applications, and three to simply run the application manually. A lot of today screen plugs-ins have application launchers capabilities. Back to my screenshots, the today screen plug-in at the top of the screen allows for nine applications to be started from it. I've highlight the icon for Rotate Me, and made the rest the screen grayscale.

    So how hard is it to check the screen orientation and change it? You tell me.

    using Microsoft.WindowsCE.Forms;

    if (SystemSettings.ScreenOrientation == ScreenOrientation.Angle0)
        SystemSettings.ScreenOrientation = ScreenOrientation.Angle90;
    else
        SystemSettings.ScreenOrientation = ScreenOrientation.Angle0;

    Here's a link to a blog post I did on How To: Assign an Application to a Windows Mobile Device's Hardware Button in case you need it.

    Sometimes it is surprising just how much you can get for such little time and effort. That's the power of the .NET Compact Framework.

    Well, that does it for today. Here are the binaries. Hope you enjoy them.

    Download executable: rotateMe.cab

    Download Source Code: rotateMe.zip

    Feedback:

    Thanks guys, it's been fun. Keep the ideas coming. Don't wait until the last minute. I hope these applications are helping you realize the raw rapid application development power of the .NET Compact Framework.


    Sunday, June 08, 2008 11:00:25 PM (Eastern Standard Time, UTC-05:00)  #    Comments [4]  |  Trackback
    Sunday, June 08, 2008

    This is my favorite application so far. The concept is awesome. It takes the idea of a "sound effect keychain", and make it into a fully open and extensible mobile application.

    image

    Mobile FX

    So if you are following me, then you know that if you press the birds button you'll hear a birds sound effect, and if you press the bomb button your hear a bomb sound effect, and son on down the list.

    This application tries to be as much about form as it is function. All of the icon graphics are created with Axialis IconWorkshop. (Thanks for the heads up, Jamey!) It makes making really great icons a snap using its Image Object Packs. (See the image to the right for a small sample.)

    image

    What I really like about this application is there is the possibility of creating add-in sound packages. I'll discuss this more in a follow up blog posting to come soon. [If there is interest? Let me know.]

    The way the application works is it looks for an XML file that tells it where each of its possible icons are and where the sound files for each icon are located as well. If you want to change the order of the icons on the screen just change the order of the "buttons" in the XML configuration file.

    I haven't completed the extensibility point for others to add there own icons and sounds but that is a small enhancement which I'll do shortly.

     

     

     

     

     

     

     

     

    Download executable: mobileFX.cab

    Download Source Code: passwordGen.zip

    Feedback:

    How interested are you guys in the follow up article? Is this something you would enjoy? Would you like a second pack of sounds? Is this application something you would use? Would you create a sound pack of your own?


    Sunday, June 08, 2008 2:52:33 AM (Eastern Standard Time, UTC-05:00)  #    Comments [2]  |  Trackback
    Friday, June 06, 2008

    Today was a day I get to pick what I was going to write. One thing I've been doing a lot of lately is taking screenshot captures of either my emulator or my device. I don't know if there is a perfect solution for this, but I figured this would be a great "pain" to try to overcome.

    Also, I just think this is a great utility to learn from and to use.

    image

    Mobile Capture

    As always, let's look at how the application looks. Noticed I had more controls than I could put on one screen. Or if I could put all the controls on one screen it was going to look like a train wreck. I really try to make it so that if the user has to do something "tedious" like data entry, especially on a mobile device, that there is some sort of "cool" factor for the user to "experience".

    In this case, I decided to make 3 sections to the form and have each fill the screen in response to the user clicking either the light blue "Capture", "Activation", or "Option" buttons. Notice how I disguised the buttons to look like section headers.

    With a little effort each section could expand open as a visual effect, I choose to have the section just instantly pop to their minimized or maximized states. This would be a great feature enhancement for an enterprising reader to tackle. Just a matter of fine tuning it.

    As far as features go, we have a lot happening there as well. Full Screen mode, Area mode, Hardware Key support, Time support, and the ability to take multiple pictures in a row.

    That's a lot of application to take on in one day, and really only a couple of hours, but that's how we do it around here.

    One issue I ran into was I managed to confuse myself. I though when I called Form.Hide() that is wasn't hiding the form's menu bar in time before the screenshot was taken. So I went and found the following blog article: Christian Helle's Blog: Programmatically Minimize an Application in .NET CF 2.0. Work's fine, but so does Form.Hide() just didn't figure it out for a while. Figured I'd leave imageChristian's code in for while since it is more interesting, P/Invoke and everything.

    I wasn't quite sure the best way to take a screenshot anymore in .NET Compact Framework, so I looked that up to find a better way. I found this: Alex Yakhnin - Creating a screen snapshot in CF v2. And I decided it would do lovely, and it has so far. I haven't had the first problem with it.

    Does anyone recognize where the feature set of this application is based on? It is a very famous Windows graphics program that was really popular a few years back now. Give it a guess.

    The .NET Compact Framework HardwareButton device component made working with the device's hardware buttons a snap.

    The way the application figures out what it needs to do between on the various combinations, and there are a lot of them, is pretty cool to check. Notices I didn't say clean and slick, just pretty cool. It could use some clean up.

    I'm really happy with the UI; it was a simple trick to pull off the effect but I think it works great. Try it out see what you think! Alright well I think that wraps up day 05, I hope you like the

    application.

     image

     

     

     

    Download executable: mobileCapture.cab

    Download Source Code: mobileCapture.zip

     

    Feedback

    I'm looking forward to seeing where we go next. I hope you are too. There hasn't been a lot of comments yet but I know word hasn't really gotten out yet either. But feel free to post your comments and ideas.


    Friday, June 06, 2008 2:46:56 AM (Eastern Standard Time, UTC-05:00)  #    Comments [3]  |  Trackback
    Wednesday, June 04, 2008

    For day three, I  had already decided to write a GPS Compass application, short and sweet. It just so happens I received a comment from Paul Diston today (see below) asking for that very thing. It's a small world.

    Hi,
    I may have an idea that you might be interested in. I have a GPS receiver in my device and use the GPS Sample as provided with the Windows Mobile 5 SDK. I would be interested in a 'snail trail' kind of application which would draw your current location and keep track of your movements, a simple line showing your movements would be great. Also maybe a compass type application which would calculate your bearing.
    I have had some success with these ideas however I just don't get the time to explore them further.
    Thanks
    Paul Diston

    image

    GPS Compass

    Again we have another 30 Days of .NET application that was at least in part due to a reader's request. So keep them coming gang.

    I'm not a graphics designer, but as I've mentioned before I believe it is important for a program to have some eye candy. It needs to look good and professional. Now beauty is in the eye of the beholder and you may be thinking GPS Compass is ugly, but the point is I tried, and IMHO I think it looks decent.

    Now did I draw the compass rose you see to the right? No. I went to Wikipedia and found one in the public domain here. But that's my point it is important to make best use of all the resources you have at hand. Notice I didn't spend hours trying to do it myself only to end up with a nonprofessional looking graphic.

    Once I had the base I need for the aesthetic design of GPS Compass, it was time to decide how to design the GPS engine. I narrowed the possibilities down to the following: access the GPS as a serial device, use the OpenNETCF GPS Library, or use the GPS Intermediate Driver.

    I decided to use the GPS Intermediate Driver since it is fairly new, and it as the documentation says, "It is useful because it provides an intermediate layer that abstracts the actual GPS device from developers and manufacturers."

    One thing about hardware nobody builds anything the same way. There are always like quirks and variations. If somebody else volunteers to let that be there problem you'd be wise to take them up on the offer.

    Next I needed a way to test the application. I have an AT&T Tilt, that I love, and it does have built-in GPS but it isn't going to work from almost the dead center of my house. Fortunately Microsoft loves their developers and have included a Fake GPS utility for this very purpose. "FakeGPS uses text files containing GPS data to simulate the functionality of a GPS receiver." I really like this tool it just works.

    I read through the GPS Intermediate Driver reference material and found the object I was interested in: GPS_POSITION. For this simple application all I really needed was access to flHeading: Heading, in degrees. A heading of zero is true north.

    At this point I discovered that the Windows Mobile 6 SDK included a GPS Application in the samples folder, C:\Program Files\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS.

    I checked it out and realized it would be a snap for me to take the sample and convert it over to what I needed. Sure I could have duplicated the effort, but everything I needed was right there waiting for me to take advantage of it. Again, always remember to make the best use of all the resources you have available.

    The GPS Application has a nice status screen which I moved to a menu item option. I mean the main event here is obviously the sexy screen you see above. A few nips here, and a few tucks there, and I was done.

    One thing to be aware of is the sample, and the GPS Application it stands on top of are great base applications to build almost any GPS application you can think of.

    There is nothing stopping any of you from taking this and creating your own .NET Application of the Day. And if you do let me know and I'll mention your application.

    Download executable: gpsCompass.cab

    Download Source Code: gpsCompass.zip

    Feedback

    We only have 27 days left for you to submit your idea, or even your .NET [Windows Mobile] Application of the day.


    Wednesday, June 04, 2008 12:06:44 AM (Eastern Standard Time, UTC-05:00)  #    Comments [6]  |  Trackback
    Tuesday, June 03, 2008

    image Lou Vega, leader of the Charleston, SC .NET User's Group, asked me if he could be the VB .NET Editor for 30 Days of .NET. Again my goal is to make this as much of an open forum as possible. Since its hard to do that with one person, and Lou totally rocks, I said of course, thank you!

    Basically Lou is going to take up the task of converting each of the applications to VB .NET. This is a huge boon for the community. If you are a VB .NET programmer and you want to do Windows Mobile development you will quickly discover that only something like 1 in 10 examples are done in VB .NET, if that many. And outside of Microsoft almost all content is done in C#.

    I understand the decision Microsoft made. Basically most Windows Mobile developers, at least in the early days, had a background in C++ and usually Win32 programming. Microsoft wanted to cater to these developers, and win them over for the success of the platform. Also, with a new platform guidance is very important. If there was a budget for 10 tutorials that year, then if they were split between C# and VB .NET, there would only be about half as many such examples.

    The choice was made to make more examples that could help beginner developers all the way to advance developers, versus having to cut out a lot of material. And trust me in the early days you needed as much help as possible because if you were doing any out of the norm it could be just a little rough. Today things are so much better, if you want to do something it is usually simple and direct.

    So with that out of the way let me officially welcome Lou Vega into his new position, and offer him my sincerest thanks. Great idea Lou!


    Tuesday, June 03, 2008 3:00:47 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback

    Today, Page Brooks was telling to me about a limitation with his Windows Mobile device. His device's battery isn't powerful enough for him to be able to leave his Bluetooth radio on all day. But he really wants to be able to use his Bluetooth headset while he is driving to work in the morning, and on the way back home in the afternoon. One requirement he has is he doesn't want to have to look at the screen to accomplish this.

    It would have been real easy to create a Bluetooth Toggle application that simply takes the current state of the Bluetooth radio and toggles it from on to off, and vice versa. Instead, I've decided to build a simple Bluetooth Manager application that will provide our readers with the code needed to create the Bluetooth Toggle application. My hope is that someone from the community will take this code and help Page out.

    Technically I make some special "modifications" to the application that should help Page get by for the time being. When the application first starts, it toggles the Bluetooth radio mode. And I added a timer that will begin an auto shutdown after the program has been running for 1 minute. All Page needs to do is assign the application to a spare hardware key and then when he press that key it will toggle the Bluetooth radio on and off, and after 1 minute it will auto shutdown.

    So according to Minutes to Midnight I have 2 hours, 21 minutes, and 6 seconds left to make today's application. So let's get on with the show.

     

    image

    Bluetooth Manager

    This application came about due to a reader's request. So be sure to submit your ideas for applications. I strongly favor working on user submitted ideas over my own.

    I always like an application to have a little eye candy, and that explains the interactive Bluetooth logo at the top of the screen. It is in color when the Bluetooth is enabled, and grayscale when Bluetooth is off. Clicking the Bluetooth logo toggles the Bluetooth radio from on to off.

    I added a multiline textbox so users could see a history of Bluetooth radio state changes. There are buttons to allow users to directly turn the Bluetooth radio on and off.

    One caveat is that this uses P/Invoke to access the Microsoft Bluetooth stack dlls.

    Here are the calls:

       [DllImport("BthUtil.dll")]
       private static extern int BthGetMode(out RadioMode dwMode);

       [DllImport("BthUtil.dll")]
       private static extern int BthSetMode(RadioMode dwMode);

    Also, we had to take advantage of State and Notification Broker API. Here's why: if the state of the Bluetooth radio were to change due to an action outside of our program we wouldn't know about it. That's where SNB API comes in. It allows us to subscribe to notifications for almost any event that we are interested in. The code is below.

       SystemState bluetoothStatePowerOn = new SystemState(SystemProperty.BluetoothStatePowerOn);
       bluetoothStatePowerOn.Changed += new ChangeEventHandler(bluetoothStatePowerOn_Changed);

       void bluetoothStatePowerOn_Changed(object sender, ChangeEventArgs args)
       {
           UpdateScreen();
       }

     

    The last thing to check out is the auto shutdown code: it's simple but works great. There is a timer that waits for 1 minute to pass, and then there is a loop for the count of ten, which uses a Thread.Sleep(1000) to pause the application for 1 second each iteration of the loop. This creates a great effect that keeps the user from thinking the application has crashed.

    Download executable: bluetoothManager.cab

    Download Source Code: bluetoothManager.zip

    [Be sure to check out the C++ Edition of 30 Days of Windows Mobile Applications]

    Feedback

    28 days left to go, and so far we had one idea submitted for an application. Keep them coming. So what do you guys think? Is the format working for you? Any ideas on what we can improve?

     


    Tuesday, June 03, 2008 1:01:13 AM (Eastern Standard Time, UTC-05:00)  #    Comments [6]  |  Trackback
    Monday, June 02, 2008

    One goal I have for the "30 Days of .NET" series is that I write each application on the day I publish it. That really doesn't leave me any room to spare. I'm not sure I can do it, but that's part of the fun and challenge. I do have a life. And between family, friends, career, hobbies, and dreams, there isn't as much time in day as I would like sometimes. One thing that would be useful for me is to know how much time left I have in day to complete that day's application.

    “When you can measure what you are speaking about, and express it in numbers, you know something about it; but when you cannot express it in numbers, your knowledge is of a meager and unsatisfactory kind; it may be the beginning of knowledge, but you have scarcely in your thoughts advanced to the state of science.“
    - Lord Kelvin (William Thomson)

     

    image

    Minutes to Midnight 

    Simple, simple application, but I would say it is useful. At first I just had it say 2 hours, 45 minutes, and 38 seconds remaining. But I decided that was too simple. I decided to use progress bars, because it adds a visual element that gives the application a little, let's call it, "weight".

    Then I looked at the application and felt it looked a little sterile, aka dull, dull, dull. I decided the answer was to add some color. I did this by going to http://www.colourlovers.com/ and browsing their color palettes. I was even able to search color palettes by using the color of the progress bar, which I got by doing a screen capture and getting the hex color from Paint .NET.

    I didn't take me long to notice I had an issue. From my point of view, it's subjective, the progress bar wasn't right. progressBarHours.Value = timeSpan.Hours; needed to be progressBarHours.Value = 24 - timeSpan.Hours;. Once I did this it was working like I wanted it to.

    I wasn't thrilled with the top progress bar. It was meant to show the total remaining time left in the day, but I didn't have room for another label. But there is a saying, "The perfect is the enemy of the good." I think of this as, if you follow the road to Perfect forever, you may never get to Good. If Another reason to use the color scheme to help break the form into logical sections: yes, there is method to my madness, well, at least sometimes.

    The only other thing I had to handle was total minutes left. Depending on the math, it would sometimes display "X.666666666 of 1440 total minutes left". Fortunately, there is an easy fix for this, custom numeric format strings: timeSpan.TotalMinutes.ToString("#.0").

    Download Executable: minutes2Midnight.cab

    Download Source Code: minuates2Midnight.zip

    [Be sure to check out the C++ Edition of 30 Days of Windows Mobile Applications]

     

     

     

    Feedback

    Ok guys, I really need everyone's help here. I need some ideas for applications to write for the next 29 days. I have some, but I could use more. Also I'd love to hear your thoughts on how we make this series even better. I always open to ideas, and suggestions so please feel free to let me know what you think, because if I think it is a good idea I will do it.


    Monday, June 02, 2008 12:48:15 AM (Eastern Standard Time, UTC-05:00)  #    Comments [3]  |  Trackback
    Sunday, June 01, 2008

    image Over the years, I have given many presentations on developing Windows Mobile applications. One thing that I have heard time and time again is that people have a hard time writing their first mobile application. I think sometimes people have a hard time taking those first steps. It is easy to think that it will take too much time, and that it will be too hard. But that is simply not the case.

    But instead of telling people, I'm going to show them how easy it really is. The key here is simple: "Taking baby steps is better than taking no steps at all!"

    I plan on writing 30 mobile applications in the next 30 days. I will publish both the executable and the source code for each application.

    My goal is for each of these applications to be useful, interesting, and straight-forward. Someone considering writing their first Windows Mobile application should be able to look at these applications and "get it".

    If you search, you can find tons of simple code to do specific tasks, like playing a message beep. You can even search and find code for fully developed applications, but these are too advanced for many developers, first starting out. What you'll have a harder time finding are simple applications, with source code, that can be the building blocks for new developer's understanding of mobile development. It's my hope that in the next 30 days I can do something to help with that.

    Feedback

    Please consider this entire series an open forum. I'd love to hear what you think, and what you want. Do you think this will help new mobile developers? Are you a new to mobile development? If so, what would most help you "get it"?


    Sunday, June 01, 2008 3:00:35 AM (Eastern Standard Time, UTC-05:00)  #    Comments [7]  |  Trackback
    Tuesday, May 20, 2008

    imageRecently the Live Search Team released a new version of Live Search for Windows Mobile.

    Pros:

    • Great features: categories, maps, directions, traffic, movies, gas prices, collections, web, weather
    • GPS support
    • Search Near Here
    • Speech Recognition
    • Works for Windows Mobile, BlackBerry, and any mobile phone
    • Bluetooth headset support
    • Map a contact
    • And much more...

    Cons:

    • Wish we had access to the source code, controls, etc.
    • Great opportunity for guidance, documentation, and reference as model application

    Several of the MVP's and Developer Evangelists at the Charlotte Code Camp 2008 said they used and loved Live Search Mobile so that should give you a feel for just how good this product is. It is good stuff. If you haven't tried it yet, what are you waiting for?

    Download Live Search for Windows Mobile 3.0


    Tuesday, May 20, 2008 3:00:11 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Thursday, April 10, 2008

    image

    Heroes Happen {Here}: Hands On Lab Manuals [Source: Paulo's Blog]
    Windows Server 2008
    Download All (zipped file: 7.32 MB)
    Visual Studio 2008
    Download All (zipped file: 13.2 MB)
    SQL Server 2008
    Download All (zipped file: 20.5 MB)

    Hands On Lab Manuals

    Windows Server 2008
    Download All (zipped file: 7.32 MB)
    Visual Studio 2008
    Download All (zipped file: 13.2 MB)
    SQL Server 2008
    Download All (zipped file: 20.5 MB)
    Thursday, April 10, 2008 3:00:25 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Monday, April 07, 2008

    Due to the scheduling conflict with the Heroes Happen Here Event in Charlotte, the April PDANUG Event has been moved to April 29th, 2008.  More details to follow.  See you all in Charlotte tomorrow!


    imageTuesday, April 29th, 2008
    Chris Reeder, Chris Craft, and Page Brooks

    Topic:
    SQL Server 2008, Windows Server 2008, and Visual Studio 2008 (Respectively)

    Tuesday, April 29th, 2008, is the next meeting of the Pee Dee Area .NET User Group.

    Chris Reeder, Chris Craft, and Page Brooks will be presenting on the latest exciting new products from Microsoft.  First, Chris Reeder will give us a run down on a few cool features in SQL Server 2008.  Next, Chris Craft will take us on a tour of some excellent new features in Internet Information Services 7 (IIS7).  Page Brooks will finish off the presentation with a few cool tips and tricks in Visual Studio 2008.

    Please click the link below to register.  We use this information to determine how much food to buy!

    Here is the tentative schedule:
    6:00 PM - 6:20 PM Socializing / Free Dinner
    6:20 PM - 6:30 PM Introduction, Sponsor Time, and News.
    6:30 PM - 8:00 PM Presentations


    Monday, April 07, 2008 3:00:08 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Sunday, April 06, 2008
    image
    Sunday, April 06, 2008 3:00:17 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Wednesday, April 02, 2008

    image You can download the Windows Mobile 6.1 emulator images here.

    Download Size:
    184.9 MB - 457.1 MB*

    *Download size depends on selected download components.

    Overview

    The Windows Mobile 6.1 Emulator Images package adds emulator images to Visual Studio 2005 or Visual Studio 2008 that let you test applications for Windows Mobile 6.1. For general information about writing software for Windows Mobile, please see the Windows Mobile Developer Center.
    The emulator images can also be used as standalone without Visual Studio. They can be accessed through the Start Menu shortcuts.


    Available locale:
    0409 USA English
    New emulator image resolutions:

    • Windows Mobile 6.1 Standard
      DPI: 131 - Resolution: 320 x 320 pixels
      DPI: 131 - Resolution: 400 x 240 pixels
      DPI: 131 - Resolution: 440 x 240 pixels
    • Windows Mobile 6.1 Professional
      DPI: 96 - Resolution: 240 x 400 pixels
      DPI: 192 - Resolution 480 x 800 pixels

    Wednesday, April 02, 2008 3:00:49 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Tuesday, April 01, 2008

    imageOf course, I would get this on April Fools Day, but I've verified it and it is for real!
    Dear Chris Craft,

    Congratulations! We are pleased to present you with the 2008 Microsoft® MVP Award! The MVP Award is our way to say thank you for promoting the spirit of community and improving people’s lives and the industry’s success every day. We appreciate your extraordinary efforts in Device Application Development technical communities during the past year.

    This is a great honor and privilege for me to have received. Thank you Microsoft, it means a lot to me!

    What is a Microsoft Most Valuable Professional, MVP?

    http://mvp.support.microsoft.com/

    Microsoft Most Valuable Professionals (MVPs) are exceptional technical community leaders from around the world who are awarded for voluntarily sharing their high quality, real world expertise in offline and online technical communities. Microsoft MVPs are a highly select group of experts that represents the technical community's best and brightest, and they share a deep commitment to community and a willingness to help others.

    Tuesday, April 01, 2008 11:52:53 AM (Eastern Standard Time, UTC-05:00)  #    Comments [3]  |  Trackback
    Saturday, January 05, 2008
    Saturday, January 05, 2008 5:00:07 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Thursday, January 03, 2008

    imageToday a friend of mine called me, and asked me to help him with a problem he was having.

    I soon learned that he has an ASP.NET application set up on Windows Server 2003, but he couldn't get the application to load in the browser. Anytime he tried it would always give him a "404 File Not Found" error.

    We checked all the usual suspects: IIS running, ASP.NET installed, Web site and virtual directory set up and configured correctly, permissions, checked for a App_Offline.htm file, and so on.

    Everything looked good, and we still couldn't see the page. I thought this was odd, we should be seeing something. I then decided to try viewing some static items like images, and some html pages that we in the Web site as well. Wow, these would actually come through fine every time. For some reason, ASP.NET just didn't like us.

    I have to admit, I didn't see the answer at this point and I turned to the Web. It took some considerable search-fu, but after a little while I was able to find the source of our troubles.

    By default Windows Server 2003 has a security policy enabled that prevents Active Server Pages from running.

    Here's all you need to do if you ever run into this:

    Open IIS manager, and check Web Service Extension folder, make sure ASP.NET extension is listed and marked as "Allowed".


    Thursday, January 03, 2008 5:00:06 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Monday, December 17, 2007

    journal14.png

    Hehe, for a moment there, I thought I might actually get the scoop on this one. Right up until I read Neil Cowburn's blog.

    Anyway, The Architecture Journal has put out a special edition on Mobile Architecture.

    There's one article in particular that stands out as a definite must read:

    Test-Driven Development and Continuous Integration for Mobile Applications

    Learn how test-driven development and continuous integration can help increase the reliability of applications, and how both approaches work for mobile applications

    Technorati Tags: ,

    Monday, December 17, 2007 5:00:40 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Sunday, December 16, 2007

    Daniel Moth mentioned Chris William's post "my 21 thoughts on starting a user group".

    Chris did an excellent job listing what it takes to start a user group.

    I wish Page Brooks, Chris Reeder, and I had this list when we decided to start PDANUG. Fortunately, I think we were able to learn the ropes quickly.

     

    Here are a few tips and tricks we have learned over the years that I think have made all the difference:

    1. Check Lists:
      • There are a ton of things to track, remember, and jungle to make each and every user group event a success.
      • It's a good idea to have a To Bring Check List and a To Do Check List.
      • To Bring Check List covers things like plates, napkins, ice, cups, sign in sheets, evaluations, related SWAG, and so on...
      • To Do Check List handles the details like reminders, announcements, notifications, Web site updates, and so on...
      • Without the check list, inevitably when the user group event rolls around everyone will be busy and someone will forget something.
    2. Online Community:
      • Have a Web site for the user group. I recommend keeping it simple and using something like DotNetNuke here. Sure, you could code it yourself, or you could "stand on the shoulders of giants".
      • Have a Blog for the user group, and take advantage of RSS feeds for group notification of events. We like DasBlog.
      • Send Email Notifications and Reminders. It is easy for members to lose track of when events are happening. We try to remind a week in advance and either the day before of the day of the event.
      • Event Registration. There are a lot of great sites that both promote local events and help manage them. We are big fans of Eventbrite.
    3. Local Community:
      • Recruit: Get together with all your friends and invite them to your user group. Also make sure they invite all their friends as well.
      • Geek Lunches: Low commitment opportunities for people to have a "taste" of what the user group meetings will be like.
      • Colleges and Universities: Tons of possible members, but if events are held off campus it will really effect student turnout.
        • Build relationships with the professors and the university itself. Great opportunity for everyone to work together.
      • Local Media. Sometimes local newspapers will list events for non-profits, and local public access stations may as well.
      • Speakers Wanted: Make sure to encourage members to present. Also, consider having "Open Mic Nights" where anyone can speak on anything for 5-15 minutes. Lots of fun and low commitment.
    4. Local User Groups:
      • Build relationships with all the local user groups and user group leaders in your area. We have bunch in our area and you probably do as well. They can help you, and I'm sure they will.
      • Inform local user groups of your user group's events and activities. If your user group is have the right event or a special speaker there is a good chance people want mind making a trip out to see you.
      • Also educate your members about local events from other user groups, but also include any MSDN events, developer conferences, and related opportunities to your group.
      • If you are creating flyers for your user group consider sharing them with other groups to help busy user group leaders to promote your group's events.
      • Speaker Exchange: Instead of speaking at your user group for the Nth time consider agreeing to speak at another user group's event in exchange for someone coming and speaking at your next event.
      • Code Camps: Attend code camps and present if possible great opportunity to spread the word and recruit speakers as well.
      • Speaker Awareness: We learned there were people traveling from south of us to present in user groups north of us, and vice versa. Once we knew this we knew we had found some potential speakers.
    5. Sponsorship:
      • User groups do take some small amount of money to keep going. This is just a fact of life, and at least for a while there will be the times when you just have to "eat" the costs of the pizza and soda.
      • Contact local developer shops and companies and ask them to sponsor meetings. Pizza and soda are not expensive and it is a great way for companies to get their names in front of passionate developers.
      • Donation Jar: Donations will never cover all the costs of user group events, but they can help.
      • Paid Membership: Some groups have optional paid membership that includes extra benefits.
      • Book publishers, magazine publishers, and many software companies will donate books, magazines, and software to user groups. You just have to take a few minutes and let them know you exist.

     

    At first starting a user group may appear a little intimidating but really it is a lot more fun than work. You get to meet a ton of great people and learn so much more than you would on your own.

    What do you think? Did I leave anything off? Do you have an idea that might help someone start a user group? Please share it with us all. Feel free to post a comment or even better blog about it yourself.

     

    Technorati Tags: , ,

    Sunday, December 16, 2007 5:00:59 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Saturday, December 15, 2007

    If you have Windows Vista Ultimate, then maybe you have experienced Windows DreamScene.

    If you want to learn more about Windows DreamScenes check out my earlier article, What is a Dream? Or watch the video I made below for a taste of the feature.

    Many newer Windows Mobile devices have powerful graphics capabilities. Most now have some support for Mobile DirectX.

    I think the Windows Mobile user interface and user experience would be greatly enhanced by the addition of a DreamScene for Windows Mobile feature.

    Right now UI and UX is one of the key purchase decisions points. The hardware is there, the software is ready, and the market is here.

    This is a great feature for Windows Mobile 7, or Windows Mobile 8.

     

    If you agree you can vote or replay on my post on the Windows Mobile Owners Circle Suggestion Box.

     

     


    Saturday, December 15, 2007 5:00:50 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback

    IMG_3862I couldn't resist making the trip down to Columbia, SC to experience the Columbia Enterprise Developers Guild's Visual Studio 2008 Install Fest.

    Glen Gordon and Chris Eargle did a great job hosting this event.

    There were a little over 25 attend, and everyone walked away with a copy of Visual Studio 2008 Professional.

    During the event everyone had an opportunity to experience Halo 3 and Rock Band for the XBox 360.

    And there was a special appearance by Halo's Master Chief himself. I don't have any actual pictures, but the image below is close to the experience.

    Technorati Tags: , ,

    Saturday, December 15, 2007 5:00:01 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Thursday, December 13, 2007

    Microsoft has created another awesome resource for Windows Mobile developers!

    INNOVATE ON Windows Mobile located at http://www.innovateonwindowsmobile.com/.

    Learn

    Designed for Windows Mobile Version 5   Designed for Windows Mobile Version 6

    Develop

    Test

    • Certify and sign your application now, and Microsoft will pay for it—up to US$800.
    • Guarantee compatibility. Receive complimentary testing—worth US$400.
    • Ensure authenticity. Receive complimentary code signing—worth US$400.

    Verisign

    Market

     


    Thursday, December 13, 2007 5:00:18 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Saturday, December 01, 2007
    messenger_scary

    Ars Technica has a good write up of Windows Live Messenger 9 Beta.

    Windows Live Messenger 9 Features

    • Multiple Points of Presence Support: Ever been annoyed by the fact that logging onto Messenger from another computer logs you out of the first one? If so, you'll be glad to be able to log on from multiple locations at once. And so will you.
    • Signature sounds: Find new and creative ways to annoy your coworkers with personalized sound signatures.
    • Per-contact sounds: That one friend who keeps annoying you with constant IM's? Give them a rude sound.
    • Animated .GIF display pictures: Now your friends can be forced to look at your baby while he's making silly faces.
    • Links in status messages: As if there wasn't enough to click on, now URLs in the status bar can be clicked.
    • Anti-spam filter: You can now report users who spam you via IM, which should do absolutely nothing to stop them in future.

    Get the new Windows Live Messenger 9 Beta


    Saturday, December 01, 2007 5:00:55 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Sunday, October 21, 2007

    image

    Yesterday, Saturday, October 20, 2007, I did a presentation at the Fall 2007 Charlotte Code Camp. I actually ended up doing an encore presentation due to the overwhelming number of people who showed up. My presentation was titled "Visual Studio 2005 Tips & Tricks".

    Presentation Highlights:

    • Tons and tons of Visual Studio 2005 keyboard shortcuts
    • Windows keyboard shortcuts
    • Internet Web browser shortcuts
    • Many developer utilities and tools for Visual Studio 2005
    • and more..

    If you attended the event, or are just curious, and would like to have the slide deck I presented just use the link below:

    Visual Studio 2005 Tips & Tricks Presentation PowerPoint

    Technorati Tags: ,


    Sunday, October 21, 2007 3:00:15 AM (Eastern Standard Time, UTC-05:00)  #    Comments [1]  |  Trackback
    Saturday, October 20, 2007

    image Last week I did a presentation at our South Carolina Code Camp 2.0. It was a great event, and I think the presentation went very well. My presentation was titled "A Lap around Windows Mobile", and I showed it during my Welcome to the World of Windows Mobile Development session.

    Presentation Highlights:

    • What's new in Windows Mobile 6
    • Demonstration of AT&T Tilt 8925
    • Overview of Compact Framework .NET
    • Overview of SQL Server 2005 Compact Edition
    • Overview of OpenNETCF's Smart Device Framework
    • Demos
    • Silverlight Mobile
    • And more...

    If you attended the event, or are just curious, and would like to have the slide deck I presented just use the link below:

    Welcome to the World of Windows Mobile Development: A Lap around Windows Mobile Presentation PowerPoint

    Technorati Tags: ,


    Saturday, October 20, 2007 3:00:56 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Thursday, September 13, 2007

    image I was reading Casey Chestnut's Blog post, "Silverlight isnt everywhere", and once again I agree with Casey.

    It wasn't too long ago that Casey and I were both hoping Microsoft would take advantage of the Compact Framework and move it onto the XBox 360. In this case, Microsoft recognized the same possibilities as us, and the XNA platform was created.

    Microsoft Silverlight is a web-based subset of WPF. During development it was named WPF/E, which stood for "Windows Presentation Foundation Everywhere".

    It reminds me of the joke, "Friendly fire isn't." And now we have, "Windows Presentation Foundation Everywhere" isn't.

    Casey's right: It would be a brilliant move on Microsoft's part to port Silverlight to every platform they can including Windows Mobile, XBox 360, and MCE.

    • Windows Mobile has a tough fight on its hands with the iPhone. And it does look like Silverlight will be coming to Windows Mobile in some format or another.

    Silverlight for Windows Mobile YouTube video

    • XBox 360 has a tough fight on its hands with the Wii. The XBox 360 does not even have a Web browse r. What gives? Wii can play Flash games. Now imagine if the XBox 360 could play Silverlight games!

    imageNow Microsoft will use Silverlight to advertise the XBox 360 on Microsoft.com, and that is great and all, but it is so short sighted. We can do better. We are so close.

    Heck, I even think Silverlight is a great opportunity for Microsoft to bring back the AutoPC platform.


    Thursday, September 13, 2007 3:00:29 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Monday, September 10, 2007

    image A while back, I came across 20 Tips to Improve ASP.net Application Performance.

    It's a great list of tips and tricks you can take advantage of increase ASP.net performance.

    One little gem I discovered in the list is the App_Offline.htm file.

    It's a cool feature of ASP.NET 2.0 that allows you to quickly and easily take a site down for maintenance while sending users a friendly message. Just drop a file called app_offline.htm in the root of your site.

    NOTE: There is one caveat that you should be aware of if you App_Offline.htm is less than 512 bytes, and Internet Explorer's "Show Friendly Http Errors" is enabled those users will see the generic status code message. See Scott Guthrie's post here to learn more about this, and a quick and easy workaround here.

    Technorati Tags: , ,

    Monday, September 10, 2007 3:00:31 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Thursday, September 06, 2007
    image Tuesday, September 11, 2007
    Topic: Visual Studio .NET Tips and Tricks - Part II

    Tuesday, September 11, 2007, is our next meeting of  Pee Dee Area .NET User's Group.

    Chris Craft, from ACS Technologies, will be presenting Visual Studio .NET Tips and Tricks - Part II.

    Material from Part I will be recovered for any of those who may have missed it, and new tips and tricks will be presented.

    Visual Studio .NET is filled with thousands of features and capabilities that make our lives as developers more efficient. The number of features that Visual Studio .NET contains is immense. The Visual Studio .NET Tips and Tricks presentation is a compilation of my favorite, and most popular, tips and tricks for this great IDE. Developers who are unaware of these timesaving features miss out on opportunities to increase their programming productivity and effectiveness. This Visual Studio .NET Tips and Tricks presentation is meant to explain how to use Visual Studio .NET more effectively.

    See you there!

    Here is the tentative schedule:
    6:00 PM - 6:20 PM Socializing / Dinner
    6:20 PM - 6:30 PM Introduction, Sponsor Time, and News.image
    6:30 PM - 7:45 PM Presentation
    7:45 PM - 8:00 PM Drawing and Wrap Up
    Please subscribe to the PDANUG Upcoming Events and News Feed here.

    Technorati Tags: , ,

    Thursday, September 06, 2007 3:00:06 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Sunday, September 02, 2007

    Today I was greeted by the following dialog box:image

    image 

    I immediately thought, "Hmm, that's strange. Why is my C:\ drive not trusted all of a sudden? It's works fine for all my other existing projects. What's special about this new one?"

    I had the answer, but I didn't realize it at the time. After reading Scott Hanselman's Sharpen the Saw for Developers article, I had wanted to check out the source code for DotNetKicks. So I had downloaded the source code, and extracted it to my C:\Projects\ folder.

    I started to search for more information about this "The project location is not trusted" error message I was getting, and I found out the following:

     

    First, I found this on MSDN

    The Project Location is Not Trusted Dialog Box

    This dialog box appears if you attempt to open or create a client project on a Universal Naming Convention (UNC) path. By default, a UNC path is not a trusted location for a project. Your project might not run correctly when you attempt to debug or run from this location.

     That is definitely the dialog box I was getting. Now I was concerned. One thing I am sure of, is that if my computer thinks my C:\ driver is an untrusted UNC path, I was going to be in a world of hurt, if I didn't find and fix the fundamental issue.

    This information also concerned me because I was using a Virtual PC to try and open this project with. And I started to wondering if this was somehow playing a part in the issue.

    Next, I found the same issue on Dave's Tech Shop

    Dave didn't have the answer to my problem, but he did discuss how to give FullTrust permission to a UNC path.

    Finally, I discovered Stephen Cawood's Geek Literature blog, and his article .Net project location is not trusted.

    Stephen explains that there is a new security feature that applies to downloaded zip files. What I learned completely surprised me, since I've downloaded countless projects before and had never seen nor heard of this before.

    Here's what I had to do to unblock the project I had extracted from a zip I had downloaded off the Internet.

    image 

    Right-click the Zip file, choose Properties, click Unblock, click Apply and then unzip.

    Technorati Tags: , ,

    Sunday, September 02, 2007 4:46:49 PM (Eastern Standard Time, UTC-05:00)  #    Comments [1]  |  Trackback
    Thursday, August 23, 2007

    df-LegionWhy does it have to be so hard to simply install SQL Server 2005? Why can't I simply load a DVD into my computer, see a well designed and thought out install dashboard, make a few choices and click install?

    The installation adventure for SQL Server 2005 is some kind of man versus machine epic battle. In one corner you have some poor soul who would like to get some work done today, in the other corner you have Legion. Legion is comprised of many souls including but most certainly not limited to the following: SQL Server Itanium, SQL Server x64, SQL Server x86, 32 bit, 64 bit, Developer Edition, SP1, and so on. Individually all of these things are great. Once you manage to extract the piece you are seeking all is good in the world.  But as long as they are combined into one mindless mob and you have trouble.

    Why did the SQL Server 2005 setup application have to be written as a Web application? Was this the best choice for a setup application that runs off of a DVD? Were there any pros to a pseudo Web deployment package? Well, here are some cons:

    SQL Pain 1 

    Scary dialog, that warns me about potential security and privacy issues I should be aware of and avoid.

    sqlpain02

    See, if this wasn't a Web page it could probably detect what Platform I was on and everything.

    I'll go ahead and help it out, and choose SQL Server 2005 Developer Edition (English). Too bad I can't give any extra point for getting language right, since English was the only language on the DVD.

    sqlpain03

    Now what should I do? Hmm, autorun.inf says run the HTML application "splash.hta", but this is Web application isn't it? so shouldn't I choose the HTML Document "default.htm"?
    Is this background information I know fair to expect of all users? What about new developers? Does this create an artificial learning curve up front? Nobody can use it, until they figure out how to install it.

    sqlpain04 diedofdysentery

    If you choose default.htm, which I still maintain is a reasonable choice, you will see the above, which reminds me of seeing "You Have Died of Dysentery" message in the old Oregon Trail game you may have played as a kid. At this point you can once again click and "Allow Blocked Content...". Well forcing me to confirm twice is okay because it is just Microsoft left hand watching out for Microsoft's right hand. I can understand that. Open-mouthed

    sqlpain05

    Hey where do you think you are going? Don't you know about allowing active content? Are you sure you want to let this file run active content?

    sqlpain06

    Oh, you are. Well, too bad because you have an "Error on page." and nothing is going to happen. So ha. See what I mean about dying of dysentery? Sucks doesn't it?

    sqlpain07

    Alright, some how or another you manage to recover from your dysentery, and make it back to the earlier step and choose "splash.hta". After realizing, that it followed that something named splash must be the installation executable.
    Oh look, it needs us to tell it what Platform we are using, AGAIN. Not only can it not determine this on it own, which I'll admit maybe I do want to install the 32-bit (x86) version on my 64-bit OS, but at least remember once I tell you.

    sqlpain08

    Oh boy, looks like we are getting close now. One problem I have with this screen is that nothing is selected by default. I would have one option, probably the "Install Server components, tools, Books Online, and samples" already selected in some manner, even if the text were only marked as bold.
    Keep in mind all of the dialogs and forms are building up on our desktop. We now have at least three or four different active dialogs open right now.
    If we were to choose an item in the above dialog it would open yet another dialog. One final usability treat is that once you pick a main option of this dialog, it will close itself and only itself. So if you wanted to do more than one thing it has listed, which it looks like it is encouraging then you can either sort through all the open dialogs you have already, or even more fun if you closed any of them, start all over again.
    One more thing to note is this screen is labeled as SQL Server 2005 (Disc 1 of 2) is there another dialog for SQL Server (Disc 2 of 2)? One can only wonder considering this DVD is Disc 1 of 1.

    sqlpain09

    Oh yeah! We are about half way through our adventure at this point, but the worst is behind us. From here most hardy adventurers make it to the promised land of our forefathers, and I have confidence you will too.

    Take note, that it is after this point that Microsoft ask for your permission to log errors and issues, and track usage to help them improve Microsoft SQL Server, maybe it should be at the beginning of the setup application and not the end?

     

    Technorati Tags: ,

    Wednesday, August 22, 2007 11:32:47 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Sunday, June 03, 2007

    I've post an article about Microsoft Popfly on CodeProject.com.

    CodeProject.com: Meet Microsoft Popfly: Part I - Mashup App Creator Built On Silverlight

    It covers the following areas:

    image image 
    Popfly Space Popfly Web Page Creator
    image image
    Popfly Mashup Creator Popfly Block Creator

    If there is enough interest, then I'll do a part two on building mashups, and a part three on creating Popfly blocks.


    Sunday, June 03, 2007 6:44:59 PM (Eastern Standard Time, UTC-05:00)  #    Comments [1]  |  Trackback
    Tuesday, May 29, 2007

    CodeProject.com: Sierpinski Triangle - An Introduction into Silverlight by Example I've put together a beginner's introduction into Silverlight on CodeProject.com. The article covers how to use Silverlight to create the famous Sierpinki Triangle fractal. It's really meant to help someone who wants to create their first Silverlight experience, but then again maybe that's you?

    Sierpinski Triangle - An Introduction into Silverlight by Example


    Tuesday, May 29, 2007 7:06:13 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]  |  Trackback
    Saturday, May 26, 2007

    I've been using Popfly for just a short while now, and while I do enjoy the drag and drop visual design surface, it doesn't lend itself to text lists very well. Sometimes I just want a text list of all my possibilities in one place.

    This "Cheat Sheet" covers the top 50 official Popfly blocks, and not any end user created blocks. There's almost another 50 of those as well.

    I figured I'm probably not the only one so here's my list. I created the list using the Block Inspector Block's getOperations method.

    Overtime I'll probably spruce this up some and add more detailed information. Hope it helps!

     BLaugh - drag this to the editor to add it BLaugh Block

    • getRandomComics
    • getComic

     Block Inspector Block

    • getOperations
    • getAllowedValues

     Calculator Block

    • getRandomWholeNumber
    • getRandomNumber
    • getMaximum
    • getMinimum
    • round
    • add
    • subtract
    • multiply
    • divide

     Carousel Block

    • addImage
    • setFrameColor
    • setAttribution

     Combine Block

    • combineTwoLists
    • combineThreeLists

     Conversation Block

    • addMessage

    Digg - drag this to the editor to add it Digg Block

    • GetStories
    • GetPopularStories
    • GetUpcomingStories
    • GetStoriesByContainer
    • GetPopularStoriesByContainer
    • GetUpcomingStoriesByContainer
    • GetStoriesByTopic
    • GetPopularStoriesByTopic
    • GetUpcomingStoriesByTopic
    • GetStoryByStoryId
    • GetStoriesByUser
    • GetTopics
    • GetTopicByName
    • GetUsers
    • GetUser
    • GetUserFriends
    • GetUserFans

    Digital Podcast - drag this to the editor to add it Digital Podcast Block

    • Search

    Facebook - drag this to the editor to add it Facebook Block

    • getFriends
    • getUserInfo
    • getPhotosOfMe
    • getPhotos
    • getPhotoAlbums
    • getGroups

     Filter Block

    • filter
    • truncate

    flickr - drag this to the editor to add it flickr Block

    • getGeotaggedPhotos
    • getPhotos
    • getTags
    • getUserPhotos
    • getPhotoset

    Gauge - drag this to the editor to add it Gauge Block

    • setValue
    • increaseValue

    GameTrailers - drag this to the editor to add it GameTrailers Block

    • getFeeds
    • getTrailers

    GeoNames - drag this to the editor to add it GeoNames Block

    • getLatitudeAndLongitude
    • lookupOnPlaceName
    • lookupOnLatitudeLongitude
    • lookupOnZipCode
    • lookupOnCityState

     Image Scaper Block

    • getImages
    • getUniqueImages

     Image Comment Block

    • comment

    Indeed Jobs - drag this to the editor to add it Indeed Jobs Block

    • search

    Live Spaces - drag this to the editor to add it Live Spaces Block

    • getPhotos
    • getFriends
    • getLists

    MSN Horoscopes - drag this to the editor to add it MSN Horoscopes

    • getMonthlyHoroscope
    • getWeeklyHoroscope
    • getDailyHoroscope

    MSN Horoscopes - drag this to the editor to add it MSN News Feeds

    • TopBoxOffice
    • JimJubekMoneyCentralColumn
    • LizPulliamMoneyCentralColumn
    • InCarNation
    • TopCelebrities
    • TopMovieRentals
    • InTheaters
    • ComingSoon
    • TopStories

    My Live Contacts - drag this to the editor to add it My Live Contacts Block

    • getContacts

     News Reader Block

    • addNewsItem

    PageTurner - drag this to the editor to add it Page Turner Block

    • addNewsItem

     PhotoFlip Block

    • addImage

     PhotoSphere Block

    • addImage

     PhotoStack Block

    • addImage

    PhotoTiles Block

    • addImage

    RegExp Block

    • getMatches
    • isMatch
    • isWholeNumber

    RSS - drag this to the editor to add it RSS Block

    • getItems
    • getFeed

    SeattlePublicLibr - drag this to the editor to add it SeattlePublicLibrary Block

    • getBooks

     Slideshow Block

    • addImage

    Snipshot - drag this to the editor to add it Snipshot Block

    • editImage

    SoapBox - drag this to the editor to add it SoapBox Block

    • search
    • getFeaturedVideos

     Sort Block

    • sort

    Stock Quotes - drag this to the editor to add it Stock Quotes

    • getStockGraph
    • getQuote

     Text Helper Block

    • getSubstring
    • append
    • skipFirstCharacters
    • split

    Timer - drag this to the editor to add it Timer Block

    • tick

    Trynt - drag this to the editor to add it Trynt Block

    • calculateLoveFactor

    Twitter - drag this to the editor to add it Twitter Block

    • getLatestPosts
    • getFriendsPosts

     Upcoming Block

    • findEvents

    User Input - drag this to the editor to add it User Input Block

    • getText
    • getTwoTextValues
    • getThreeTextValues
    • getChoiceFromDropdown
    • getTwoChoicesFromDropdowns
    • getThreeChoicesFromDropdowns
    • getTextAndChoice

    Video Player - drag this to the editor to add it Video Player Block

    • findEvents

    Virtual Earth - drag this to the editor to add it Virtual Earth Block

    • addPushpin
    • setMapView
    • drawLine
    • deleteAllPushpins

     Whack-A-Mole Block

    • addImage

     Yahoo! Answers Block

    • getAnswers

     Yahoo! Images Block

    • search

     Yahoo! News Block

    • search

     Yahoo! Term Extraction Block

    • getTerm

     Yahoo! Traffic Block

    • getTrafficForAddress
    • getTrafficForZipCode
    • getTrafficForCoordinates

     Yahoo! Video Block

    • search

    Xbox Live - drag this to the editor to add it XBox Live Block

    • getGamerCard
    • getLastPlayedGames
    • getPlayerPresence