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

Microsoft has published a SKU Matrix for Windows Mobile 6.1, and there is also an older one for Windows Mobile 5.0.

imageWindows Mobile 6.1 makes it easier to stay connected and manage your busy life—from just about anywhere. Windows Mobile 6.1 is full of enhancements, made with your needs in mind. Think about this: When you text with a friend, the messages thread together, just like instant messaging—no more confusion about what you’re talking about. Connecting to a Wi-Fi network is now simpler—no more scrolling through multiple pages; a single click and you’re connected. And Windows Mobile 6.1 runs on a growing variety of phones, including touch screen devices with slide-out keyboards, sleek full-keyboard smartphones, and compact flip phones.


Tuesday, June 10, 2008 9:46:43 AM (Eastern Standard Time, UTC-05:00)  #    Comments [2]  |  Trackback

Today's application is meant to be a simple, yet useful, application for people to use out on the town. This is an application that a couple of my friends recommended as a good beginner's introduction application to programming for the .NET Compact Framework. One thing I really like about it is that there is nothing to get in the way of a new developer's understanding of what is going on in this application. Everything is direct and straight-forward.

If you have ever eaten out with a large group of friends and wanted to split the tip, then you probably know how much of a challenge this can be. It seems trivial at first glance, but there is a decent set of variable inputs, and another good size set of outputs. All of which are interrelated. But that is the past, now you have Mobile Tipper to take care of the hard work for you.

 

image

Mobile Tipper

There's not a whole lot going on with the UI. It is still clean and simple. I have colored the output fields in a light yellow color, and I have added an icon to the top right of the screen for decoration. Also, notice we are formatting our outputs, and allowing users to enter '%' and '$' characters in the inputs. This is a nice touch of polish that users appreciate. The icon in the top right is also the icon for the applications and the forms themselves. (I couldn't take it; I decided to give the application, a famous light blue color to give it a little life.)

 

There's a lot of fields, and this is technically a mobile data entry application. So we want to enable our users to enter data as easily as possible. That's why we are using editable comboboxes, and allowing users to enter '%' and '&' characters. The comboboxes are pre-populated with a likely set of inputs users will want to use.

imageOne thing I did also to help with data entry is I assign tab orders to all my input controls, and marked all my output controls TabStop properties as false so they would be skipped over.

I implemented a Tip class that handles all the math calculations, and so on. And I created NumericTextBoxes and NumericComboBoxes that only allow numeric data to be entered. Again try to make end users lives easier.

You might be wondering what my secret is to handling the character's '%' and '$', it is the trusty String.Replace() method. I replace both of those characters with String.Empty's. :D

     return Decimal.Parse(this.Text.Replace("$", string.Empty).Replace("%", string.Empty));

I came close to skinning this application with some kind of butler them skin. Basically a white and black theme with a little bowtie band somewhere across the top, or middle with a watermarked jacket front in the application form's background. But decided it probably wouldn't end up looking like it does in my head.

 

 

 

 

Download executable: mobileTipper.cab

Download Source Code: mobileTipper.zip

Feedback

Tomorrow will be our tenth application, and mark us at 1/3 complete. So far I have managed to design, create, publish, and explain a new and different .NET Compact Framework application everyday. My goal is to do it everyday this month. Your support really makes a difference so keep it coming!


Tuesday, June 10, 2008 12:18:51 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

We have discussed the ability to assign an Windows Mobile application we have created to a device's hardware button. Once with our day two application, Bluetooth Manager, and once again with our day eight application, Rotate Me.

By default my device's buttons are configured as follows: "Button 1" starts "Internet Explorer", "Button 2" starts "Messaging", "Button 3" starts the "<Start Menu>", "Button 4" starts "<OK/Close>", and finally "Button 5" starts the "<Camera>". If you look at the screenshots below, you'll noticed I changed "Button 2" to start the "Rotate Me" application instead. This is the "as good as it gets" way to start an application; doesn't get better than one button press access.

Just in case everyone isn't aware of the feature in Windows Mobile, I've posted the steps here:

First click the "<Start Menu>", now click on "Settings" menu item, next click on the "Buttons" icon under the "Personal" tab, finally select a button and assign it a program. It's that easy.

image image image image


Monday, June 09, 2008 1:41:21 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
Saturday, June 07, 2008

I had a couple submissions for ideas to use in today's application, but decided I would use one of my own. Friday night and all: girlfriends like to go out on Friday evenings, we need to go shopping, and later we want to watch a little TV together, so I didn't feel tonight was the best night for a big project.

My idea is a simple yet very useful application for generating random passwords.

image

Pocket PasswordGen

Nothing too fancy here. It's a good looking application, but it didn't take much to make it so. Just clean layout and simple design. I did add a horizontal ruler line between the inputs and the outputs. It is actually two panels set to 1 pixel high each with ones back color set to light blue and the other pure white. The form's background is just a little off-white to add some warmth, but it is hard to tell directly.

The application engine is also clean and simple. There is a password class that has properties for each of the options, and there are two methods: Generate, and ConvertToPhonetic.

I have four character groups:

     static string  lowerCase = @"abcdefghijklmnopqrstuvwyxz";
     static string upperCase = @"ABCDEFGHIJKLMNOPQRSTUVWYXZ";
     static string numbers = @"0123456789";
     static string punctuation = @"~!@#$%^&*()-+='"",.?";

Based on options the user chooses a character list is created with all possible characters for the user's password.

Next I Generate PasswordLength worth's of characters for the password.

This is very important. I use RNGCryptoServiceProvider to generate a random seed number for the random number generator. We want real random numbers, not wishy-washy random numbers. This is a good source for how to use Crypto providers to make a password generator.

Pretty cool code, so check it out if you haven't ever generated random numbers before.

I pulled the Phonetic Alphabet off Wikipedia and made it into a generic dictionary object.

Lastly, I added a menu item that allow users to copy the password to their clipboard. I had to write some code to copy text into the clipboard. This is the best code I could find for doing so.

BTW, there is a bug in the above screenshot. Fixed in the current release. Can you see it? It's subtle. It has to do with the handle the last character. Good luck finding it.

Download executable: passwordGen.cab

Download Source Code: passwordGen.zip

Feedback

Nothing but positive feedback so far. I really appreciate. It seems we are off to a good start. Still I have another 24 days left, and only a handful of ideas I really like. So don't keep that good idea to yourself. One comment on the blog and you might have yourself your first Windows Mobile custom application.


Saturday, June 07, 2008 1:35:45 AM (Eastern Standard Time, UTC-05:00)  #    Comments [5]  |  Trackback

Theme design by Jelle Druyts

Pick a theme: