Will you be around Orlando, FL this Weekend?
06 June 08 02:43 PM | dsamuilov | with no comments

If you are in any way interested in Development for Windows and Windows Mobile devices then you are invited to attend a FREE event Saturday and Sunday.

The weekend event is called Microsoft Community Summit 2008 or ]InBetween[ or Tweener (?!?!). imageThe whole event is FREE. This event involves several minor events held during the weekend in between the TechEd Developer (happening this coming week) and the TechEd IT Professionals (the following week). It is a group of events organized by the Florida user group communities in the Orlando Convention Center.  It will have Sessions, .Net University, Open Space, Certification, Exam Cram, Train The Trainer, SQL University, SQL Saturday, Visual Studio U events.

Code Camp: (Saturday) Sessions that are part of the Code Camp will be held in the conventional way: one speaker, one subject, one hour. I will participate with a presentation in the Code Camp about "Intro to Windows Mobile  Development for Programmers". I will also be available for any questions during Saturday around the OpenSpace area. You can register for the code camp here. The Code Camp schedule can be accessed here.

SQL Saturday: (Saturday) Andy Warren is putting together some of his very best training on SQL Server to get you up to speed quick. If you've been to a SQL Saturday, you know they are good. So here's an opportunity to learn from some of the best. Register here.

.Net University: (Sunday) Will be a series of structured courses geared to bring you up to speed on a particular topic. There will be several "U courses":

  • .NET U Presents .Net 3.5 Services: Register here.
  • .NET U presents BizTalk Basics: Register here.
  • .NET U presents SharePoint Fundamentals: Register here.
  • .NET U presents Service Oriented Development in .NET 3.5: Register here.

VSTS University: (Sunday) An almost full day on a variety of Visual Studio topics. Register here.

SQL University: (Sunday) Another event lead by Andy Warren. Great SQL training. Register here.

Train the Trainer (MCT): (Saturday and Sunday) Bill Chapman returns to Florida, bringing us some MCT sessions for developers, IT professionals, and DBAs. Register here.

Open Space: (Saturday and Sunday) Four corners of a room with whiteboards. Sign up for a 30 minute talk on whatever topic you want. Click here for more info.

If you think this is your cup of tea, don't miss this opportunity. See you there!

How to Trigger the Use of Mobile Devices at Work
03 June 08 10:48 AM | dsamuilov | with no comments

We all agree that Mobile Devices are a great tool, there is no question about that. Regardless of your platform of preference, they all facilitate a multitude of tasks that used to require of us doing work at the office/home office. From email to remote access to administer a server, mobile tools are a great solution.

However; not every company has a mobility strategy, some will just purchase cell phones to some of their key employees and management, some only management, some have no strategy at all. If your company falls under any of these scenarios, here are some ideas to turn your company into a mobile device user:

If you see yourself in the first or second scenarios you will probably have an easier task convincing your management to turn into mobile devices. If not, you may have to do a little bit more work. In any case it is very likely that you will be successful.

We will assume that you are working for a relatively intelligent individual and that he/she will be likely to hear what you have to propose. This person will be your "partner" once you sold the idea to him/her in selling the idea to the rest of the company key players. The secret here is to be very open about what you are using your device of choice (yes, you may have to purchase one - see this as an investment). Spend as much time as you can explaining what you are doing on your device. It will show what a great tool it is.

The easiest thing to begin with is to use your device to access your email account. Connect to your exchange server with a little help from your admin or research into what parameters you need for the connection. Use a POP/SMTP connection if that is what you can use from outside the company, or simply access webmail if that's what you have. In any case, doing any of these helps you get your corporate email into your personal device.

If you have a VPN from work, have in mind that you could connect to any resource available as soon as you get past VPN validation. Need to write a Word/Excel document? no problem, you could do that and save into the appropriate share. Need to reply with that document as an attachment? yep, you could do that. Need to access a remote server to test, admin, upgrade? yes, yes and yes... just when you do that, make sure your manager knows how you are doing it. It will make the convincing much easier.

Having said all this, once you show how useful it is, there is probably no turning back... any smart manager will know that what makes you more productive will make the whole area look much better (even if the area already has a great track record).

Florida Code Camp 2008
30 May 08 11:00 AM | dsamuilov | with no comments

No, this is no repeat of the Code Camp we did back in February; that one was the South Florida Code Camp, and it isn't a repeat of the Orlando Code Camp we did in March, although this one will be held in Orlando.

The Florida Code Camp will be one of the events held during the weekend in between the TechEd Developer (happening this coming week) and the TechEd IT Professionals (the following week). It is a group of events organized by the Florida user group communities in the Orlando Convention Center. The weekend event is called Microsoft Community Summit 2008 or ]InBetween[. The whole event id FREE. It will have Sessions, Open Space, Certification, Exam Cram, Train The Trainer events, etc...

I will participate with a presentation in the Code Camp, but I encourage all of you to be there if you can.

See you there!

Mobility Opposing Forces - Be Prepared!
25 April 08 01:12 PM | dsamuilov | with no comments

No matter how prepared you are or how well laid out is your project, you could find some opposing forces to progress. This is something you may encounter in some though not all "old-school-type" businesses. Change, specifically aimed at progress is always something that might be feared by some people. Just be prepared to hold hands and guide through the process and get armed with a killer training program so that changes are well received.

Some of the opposing forces to mobility could be counted as concerns which might as well be perfectly reasonable, just have in mind that a good implementation will address all concerns with smart and appropriately budgeted solutions.

Some of these concerns include:

  • User Adoption
  • Total Cost of Ownership
  • Common IT Infrastructure
  • Network Concerns
  • Security

User Adoption

This is the most common concern when you are implementing a new solution. You will find that there are certain company members that will find the most bizarre excuses not to implement a new solution. While this is a very strong force to be opposed by, you already have the tools to beat it outright. Expose the logical process by which you came to the conclusion why this (and not other solutions) happen to be the best one available. The training materials, could explain why it is convenient to jump into this solution as opposed to any other or even remain with status quo. With tougher crowds, you may want to implement presentations that show the benefits of using this solution. These presentations are usually a good warm-up session to the actual implementation because they highlight incredible features along with what it means to the business in terms of revenue, profit and cost reduction.

Total Cost of Ownership

Concerns regarding TCO are usually centered in lack of experience with the platform. While it is true that the first time implementers will incur into a much higher cost than the experienced implementing teams. On the other hand, TCO with Windows Devices remains more flat than an equivalent implementation with laptop computers. Not even to mention that TCO with Windows Mobile has a much, much shorter implementation span, a more extended life span and simpler applications to develop.

Common IT Infrastructure

Windows Mobile devices can be administered remotely, they can access the same infrastructure as networked computers. Servers, services and applications only need to be slightly tweaked to support these devices on top of the existing computers they currently support. Worst case scenario, a new service and administration application may need to be implemented. Such as the tools for remotely administering WM devices. Best case scenario a website or an intranet application does not even need to be tweaked because Pocket Internet Explorer already can browse any website and intranet available through its network.

Network Concerns

Windows Mobile devices can access the same networks that laptops can. They both can use WiFi at any hotspot when equipped with WiFi connectivity and they both can access Internet through cell phone specific connections (laptops would require a carrier-provided USB dongle). On top of those physical connections, VPN's can be easily configured so that devices can access all internal resources that will be made available to them with the security added by the appropriate encryption.

Security

Finally, security concerns can certainly be addressed by encrypting the connection (VPN, encrypted protocols such as HTTPS, etc) or using encrypted data when data is stored in the device. There is a complete selection of encryption standards that I have addressed in a previous post that you can read by clicking here.

 

All in all, opposing forces to a mobile implementation can always be contained, just have your training, presentations and one-on-one explanations that would justify going one way instead of the other. A well though out mobile system should find its way to production easily if the strategy to create it is sound.

Is Your Company Thinking About Mobile Solutions?
21 April 08 03:59 PM | dsamuilov | with no comments

If it's not, then it should. Let me explain why. Every company wants at least their executives to have work email access on-the-go. They may not have it already but if they don't they are certainly craving for it. We live in a business world that is globally managed 24/7/365. A good and timely decision right now can save millions. Smart business requires companies to take a similar approach with other groups such as the sales force to what they do with their executives. Sales force team members could make that extra sale a day just by having access to the information needed whenever and wherever they need it.

Most companies don't really have specific mobile needs as long as their people have mobile email access. That is why most companies out there have email capable devices that can be configured to their corporate email system. Some companies even have a mix of Treos with Palm OS, Blackberries, Windows Mobile Standard, Windows Mobile Professional, etc. This can turn out to be a mess to manage, deploy and maintain. Turning the seemingly simple idea of providing email access into a self-defeating process.

Why would an IT department choose to have multiple OS's to manage, configure and deploy? Analyzing the economics of mobile devices in general we will end up getting to the conclusion that regardless of the platform of choice: Palm OS, Blackberry OS, or Windows Mobile; having a single platform would definitely increase the IT department's productivity and provide better support to their internal clients. The cost would be greatly reduced as well because their server-side-software would have to be purchased for a single platform as opposed to multiple platforms. A single platform would make so much more sense for a company. Additionally, we could also conclude that having a single platform would help develop any mobile applications in the future if they were ever needed. Multiple platforms would force a single application to be developed in multiple languages increasing time to project completion and adding unnecessary deployment complications. Not to mention the madness of maintaining not one, but multiple executable versions, bug fixes and costs.

Hopefully you will agree with me on these issues, if your company already has Visual Studio know-how or at least one of the VS programming languages know-how, it would certainly make sense to take advantage of it. And while it may be true that you may not need any mobile applications in the immediate future, in the longer term there might be a need for such applications. If that happens to be the case, you should not tie yourself down by having the wrong platform. If you find yourself having to implement a solution with multiple hardware platforms and mobile OS's, you would have to have multiple development groups with very different skill sets in order to achieve the same/similar goal than on your desktop corporate applications. You would most definitely be better off leveraging the know-how your teams already have for the desktop and using it all to power a Windows Mobile development team that can do desktop and mobile development tasks interchangeably and in the same language.

If you are looking at potential for growth and you have a large warehouse, traveling sales team members, distribution and delivery and even administrative employees; then this should be the best way at looking into potential ways to increase returns by optimizing the current business process.

...Is Your Company Thinking About Mobile Solutions Now?

Who Should Decide on Implementation Details?
16 April 08 06:40 PM | dsamuilov | with no comments

There seems to be different positions in this matter. There are people that think that IT Management should have final say in these matters and people that are convinced that once the general specifications for the architecture and methodology are laid out, the development team (or the development leadership) should follow with the decision on how to implement the solution. While some people will argue to death one way there are people who will argue to death the other way. I say: It depends!

According to SDLC methodology; the feasibility study/discovery phase/analysis will tell us "what" needs to be done. The "what" is comprised of all business requirements gathered in this phase; the scope of the project and any constraints that we may find as determined by the business areas and listed by the Analysts.

The design phase will determine high level "how", or the technical architecture, the system model, and the test conditions. This is where the second group of people mentioned above decide to stop making decisions. The reason they claim for this is well founded and refers to the fact that they may not know the technical details of how to move forward with the next phase or that they will leave the decisions of the next phase to the people that know them much better than them: the development team leads or even the developers. This is a reasonable stopping point for IT management, but sometimes there will be conflicts.

The development phase is where all the programming happens. The final "how" to implement a solution happens at this point. All the technical details and minutiae are implemented here. Unfortunately this is the exact point of disagreement between both groups of people and the first one will suggest that because they are well versed in technical matters and they have seniority, they should have final say in the details being implemented in this phase. While the most novice developers would appreciate some direction from their management/mentors, the most experienced would prefer to be allowed to make those decisions themselves.

While both positions seem to make sense; it is my opinion that each case would be appropriate if certain conditions are met. The obvious examples are:

  • For IT management with technical expertise; novice development teams require more leadership participation if they are well versed in technical matters.
  • For IT management with technical expertise; experienced development teams and experienced development leaders can be left to operate under their own judgment with little supervision if they show good judgment. Experienced developers that show good judgment will know when to ask for clarification to their management.
  • Non-technical management should try not to get involved with the detailed technical decisions.

So far it can be seen that both positions seem to be correct and could coexist without problems. However; not all IT managers are conscious of their technical limitations, and some are even convinced that they are just as good a developer as anyone in their development team. While most IT managers have a strong technical background, not all have been keeping up with the latest technologies and methodologies. Having a strong technical background creates a false sense of security regarding one's technical skills. Managers who are no longer keeping up with technical issues may fall prey to this false sense of security and may not even be conscious of their situation. On the other hand; a technically savvy manager would keep up with technical expertise and would participate as part of the development team. An IT manager would know how much participation he should provide as part of the development team. Too much and the administrative portion of the management duties will be left unattended. IT managers participation in the development team's duties is a double edged sword: while technically savvy IT managers may gain their developers respect by doing this; technically challenged IT managers may lose the respect of their development team if they make too many bad technical decisions.

Suggesting and ordering to make a particular technical decision are two completely different things. Managers who are not conscious of how up to par they are will create conflicts if they force developers to implement the wrong technical decision into code or to implement their code in a way that is not technically correct.

Developers may know what and how it needs to be done, they may even raise the issue to their managers; but some IT managers, too mistrusting of their team or not fully aware of all the technical implications may choose the wrong option which unfortunately makes them bad managers no matter how they see it.

I am not saying that all developers should have a confrontational attitude. But if you feel that the wrong technical decision is made, it is the developer's responsibility to raise the issue and get the technical issue resolved before it becomes too costly to fix. By the same token; I am not saying that all managers should stay out of the developers way, quite the contrary, their suggestion will most likely be received with gratitude when given as a solution to resolve the right technical issue. Even if an IT manager is technically savvy, they should still know when to stand on the sidelines and let their team shine by letting them make those decisions. The result will shine back on the manager. As mentioned above, these two positions can coexist depending on when it is appropriate to take one stance or the other.

There are several morals to this story:

  • IT managers should keep up with technical developments.
  • IT managers should keep an open mind and at the very least research appropriately when their senior developers raise a question on their technical decisions. These situations should also be used as a flag for the manager to get the appropriate technical update.
  • There is nothing wrong when a developer knows more than an IT manager about a subject, use this as an opportunity for learning from the developer.
  • Developers should try to raise the technical issue in the appropriate manner, otherwise they may not be taken seriously.
  • Last and foremost: IT managers should be open-minded and humble enough to know that there is always something new to learn from someone else, even if they are the new guy with little or no experience at all.
How Secure Is Your Mobile Application Data?
09 April 08 09:13 PM | dsamuilov | 1 comment(s)

When developing mobile applications we usually think in terms of a single user; doing only a few tasks in a small device. However, this may no longer be true. We are now faced with devices that have large screens (for a smartphone, that is) such as the HTC Advantage 7501 with a 5" screen and a decent size keyboard. Some of them are quite frankly borderline-UMPC sized. This means that not only the usage paradigm will shift into more desktop-like functions while keeping the mobile form factor.

For corporations, this could mean that there is a higher risk of exposing sensitive data or even trade secrets. Even with precautions and OS-security features as advanced as they are today such as Compact Framework provided encryption APIs and the ability to wipe a whole device from the Admin's desk by using Exchange 2003 SP2 and SMS Device Management Feature Pack a user could take a while to report the loss of a device. This could potentially open a window of opportunity for someone looking for a security gap. So, having said that; your application's security setup is now more than critical. You application could be quite at risk of exposing secure data if not handled adequately.

So what can be done to secure an application? Well, the amount of security is a function of how much time, resources and budget you have on top of making the application user-friendly enough. Basically, the more money, time and effort you put into security the safer/more secure it could potentially be. However, because of the human factor involved in usage and programming (yes, developers are included in this equation) there is no such thing as an absolutely secure application, it is always a matter of risk, and how much the business is willing to risk/invest into securing the data. On top of all that there is a matter of meeting the appropriate user-friendliness for your application to be adopted easily.

Visual Studio comes with some pretty cool security features; but again; it depends on the developer to implement, the analysts to design into the application and the business areas to budget their needs accordingly.

Windows Mobile and Compact Framework already come with the following features that you can take advantage of:

Crypto API - Encryption: any piece of data can be encrypted by using some simple calls to the System.Security.Cryptography API or Crypto API for short. There are several different types of encryption you can use such as Symmetric vs. Asymmetric encryption Algorithmic vs. Hashed data. The ones that are included in the Compact Framework are:

  • Digital Signature Algorithm (DSA)
  • MD5 hash algorithm
  • RC2 and RC4 algorithm
  • Cryptographic Random Number Generator (RNG) algorithm
  • RSA algorithm
  • SHA1 hash algorithm
  • Data Encryption Standard (DES) algorithm
  • Triple Data Encryption Standard (TripleDES or 3DES) algorithm
  • Rijndael (AES) algorithm

All these different algorithms cover a pretty wide range of security levels and process complexities. With all these choices, you are definitely bound to find the one algorithm you like, that fits your requirements and your compliance needs. For example: Rijndael (AES) is used as a US Federal Government Advanced Encryption Standard.

Let's say you have to store data in the registry, you could make your application safer and more secure just by storing its data encrypted so that anyone snooping around the device registry would not be able to figure out what you stored under those registry keys.

The same example is valid for storing data in plain text or under an XML file which is nothing but a plain text file with tag formatting. If you encrypt the data before you store it, then you would be protecting the data from any curious user or unauthorized access.

SQL CE Encryption: One common method of storing information in Windows Mobile is SQL Server CE. Even though SQL Server CE does not support logins and their respective passwords, it does support 128-bit encryption of the data in the SQL Server CE database with a password that only your application would know or even better the user would know; therefore giving you a secure way to store information in it.

Access to Networked Data: You can also access services over secured networks. If you do not want to store information in your mobile devices, you can use a web service-like application. You could secure your communication channels to the target service. Your application could be using tools such as:

  • Network Authentication
    • NTLM versions 1 and 2
    • SSL Basic and TLS Client Authentication
  • Wireless LAN Security
    • WiFi 802.1x user authentication using
      • Protected EAP (PEAP)
      • EAP/TLS (certificate-based)
      • WPA
  • Native VPN support
    • PPTP
    • L2TP
    • IPSec

You may establish a secure connection between your device and the target by using any of the mentioned tools and protocols.

Encrypting Data Streams: There might be a similar way of implementing your encrypted security if you access a web service by encrypting only selective pieces of critical data that you send or receive and not using the encrypted protocols that may pose a larger overhead for performance when everything going back and forth is encrypted.

Finally remember that too much security may also work against you degrading performance or extending your development time frame. Also have in mind that applying one encryption method and then another on top of the first one does not necessarily make your application more secure and it will surely add more overhead to your application.

No matter what your needs are and even though not perfect; the tools provided by the Compact Framework are great for establishing a custom cryptographic solution for your applications needs. So take your time learning them and using them to your favor.

Windows Mobile 6.1 Emulators Out
08 April 08 10:19 AM | dsamuilov | with no comments

With the release of Windows Mobile 6.1 and some models already announced, it was only logical that we would see the WM 6.1 emulators out for Visual Studio 2005 and Visual Studio 2008.

Just like their predecessors, the emulators are stand alone and can be used outside of Visual Studio. They seem to work like a charm (so far no bugs to report).

One new feature to report is that since there have been a few devices with new resolution screens, the emulator now supports those as well.

 

Windows Mobile 6.1 Standard

  • 131 DPI - 320 x 320 px
  • 131 DPI - 400 x 240 px
  • 131 DPI - 440 x 240 px

 

Windows Mobile 6.1 Professional

  •   96 DPI - 240 x 400 px
  • 192 DPI - 480 x 800 px

 

Download them and see for yourself here:

http://www.microsoft.com/downloads/details.aspx?FamilyId=3D6F581E-C093-4B15-AB0C-A2CE5BFFDB47&displaylang=en

Webcast: Creating Location-Aware Applications for Windows Mobile
28 March 08 04:26 PM | dsamuilov | with no comments

Maarten Struys will be presenting a webcast on April 9th. He is going to talk about how incorporate GPS functionality to your applications and how to build "location awareness" by using the GPS API and the "Fake GPS" GPS Emulator for testing.

Please register here to attend:  

http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032374410&Culture=en-US

Orlando Code Camp a Success
23 March 08 10:09 PM | dsamuilov | with no comments

Another successful Code Camp organized by .Net User Groups from Orlando, Lakeland and the Space Coast!

SSPX0036_DetShawn did a great job and had pretty much everything under control. Attendance was full, and everyone was happy about the presentations. Here is a picture of him with Master Chief working some overtime as a bodyguard. He was making the keynote opening to the atrium that can be seen in the next picture.

The facilities were great, Seminole Community College was a great SSPX0038environment for the event. Their classrooms were large enough for the groups we had and the projectors handled the presentations seamlessly. The atrium was spacious and allowed for some interesting conversations: technical, business and personal with everyone.

As for my presentations, there were two of them, one was an introduction to programming for Windows Mobile that went great. A lot of people were interested in starting development for the Windows Mobile environment. The other presentation was turned into a great Q&A session where everyone got answers to very specific questions. The reason why it turned into a Q&A session was that I had some issues on my laptop coming back from hibernate mode and it was simply dragging; taking too much time in between slides. That's when I asked the audience if they would go for a Q&A session on the subject. A great thank you goes to my audience that allowed me to go for that Q&A session and the day was saved... and a decision to finally retire my trusty old Dell Inspiron 9100. I love its screen (1920x1200) but at 4 years old it's getting flaky and I want to make sure I have no more issues with these presentations. On the other hand, it is about time I migrate all my stuff out of this old XP and into Windows Vista already. No point in delaying the inevitable any more.

If you attended and want to get a download of the presentations (both of them, with their corresponding code samples), please go to the "Links" "SkyDrive (Downloads)" on the right column of this blog.

How to Associate the Device Emulator with the Cellular Emulator
20 March 08 10:21 AM | dsamuilov | with no comments

When working with Windows Mobile these days it is very common to have to do work with the cellular connection. Either programming the phone dialing out, receiving calls or testing any other cell-related functionality is very important to make sure that your application behaves appropriately. Hence, the need for the Cellular Emulator to create a "virtual call": incoming, outgoing, SMS message, and even network events allowing your Windows Mobile emulator and your application to behave as programmed with the event being tested.

This functionality is no secret and it only takes a few steps in associating one emulator with the other. However, some people take a longer route by getting to associate these two tools by taking too many steps. The shortest way to associate the, is by following these quick six steps:

  • Open the Device Emulator Configuration app.
  • Click on the Peripherals tab
  • Enter the Cellular Emulator COM# port into the Serial Port 0 field
  • Dismiss Configuration dialog
  • Reset the Device Emulator (File => Reset => Soft)
  • Click OK to confirm soft reset
Orlando Code Camp 2008 - Preparing presentations
17 March 08 09:31 AM | dsamuilov | with no comments

Today I am starting to prepare my presentations for this coming Saturday's Orlando Code Camp 2008 (http://www.orlandocodecamp.com). There are no more spaces available, but if you want to attend, there is a waiting list in case some people cancel. My recommendation: if you are interested, still attend to check-in and if there are any openings, you may be able to get in.

And if you want to attend to my presentations we'll make you a spot! I will give two presentations:

  • Introduction to Windows Mobile Development for Programmers: aimed at people that know how to program in C# and VB for the desktop and want to leverage their skills in a new and exciting field. You'll be surprised how easy it is to transition!
  • .Net Compact Framework 3.5 – The Benefits of Using Managed Code: The next logical step for right after an intro to the environment. Details, do's and don'ts on the platform.

This is a great opportunity for learning, networking or getting involved with your area's user group. Lots of events every month, with cool subjects you may be interested in learning for work or personal betterment.

I will be posting the presentation materials soon for download. BTW, the event, attendance, and materials are 100% free!

BlueKatana Tool-Applications for Windows Mobile 2
14 March 08 04:13 PM | dsamuilov | with no comments

Continuing with our release of tool-applications completed by out team, we are releasing today a very cool application that we all started using right away. It is a MPG calculator and Vehicle Maintenance log, that everyone can have in their Windows Mobile. A very good alternative to calculating every time you fill-up your gas tank.

Here it is:

Car Maintenance and Fuel Economy v2.3: Keep track of your car's fuel economy and maintenance in general. Maintain records for multiple vehicles. Create reports that will show maintenance, fuel economy, and cost of ownership to-date.

Download it from:

Enjoy!

Silverlight for Windows Mobile to be launched in Q2
08 March 08 11:59 AM | dsamuilov | with no comments

SilverlightLogo Microsoft has announced that Silverlight for Windows Mobile will be available during Q2 2008. It will be launched as a browser plug-in and it will support Silverlight 1.0 only (Silverlight 2 is currently in Beta). Unfortunately, the announcement indicates that Windows Mobile 6 will be supported and not previous versions. This is probably because of limitations in Pocket IE in older Windows Mobile versions.

At Mix08, there was a Weatherbug being demoed as a proof of concept that worked like a charm. Now, I am not a big fun of Weatherbug, but it certainly shows potential for Silverlight apps running in Windows Mobile devices.

Having trouble creating an MSI for Windows Mobile apps?
26 February 08 12:16 PM | dsamuilov | with no comments

Well, you are not the only one... Creating an MSI file for application distribution is really simple, but when you want to distribute an application that runs on the Windows Mobile environment, it is not that simple any more. This is especially true if you are new to Windows Mobile development.

Why a CAB if I want an MSI?

The answer is "multiple hardware platforms", you obviously want to deliver a well developed solution, and your application will probably be rolled out to different hardware. What you want to do is create a CAB file containing the application as compiled for that particular platform (Windows Mobile Professional vs. Windows Mobile Standard). You may be even looking at releasing the application to different OS versions and even different processors. Well, that might require some tweaking on your part to deliver the best performing application for each platform, OS, and processor... bummer.

So the best approach is to create multiple CAB files, each one with all the corresponding application requirements. and finally create the MSI file that contains all of them. Easy, right? not so fast...

Once you have all the CAB files you need, you can create an INI file that lists all the mutually exclusive CAB files in the package. For example DotNetCF would be one package, SQL2k5 would be another and the third one would be your application. Each of those packages would be a set of CAB files of which only one would be installed to the mobile device. In other words, you would be installing 3 CAB files, one from each package. However, each package will have many files; as many as different platforms you are deploying to. You will create an INI file for each package you want to create. This INI file will have the list of all mutually exclusive CAB files in that package.

While you can create an MSI project pretty quick, the MSI projects are targeted at delivering the application to a PC and not a mobile device. So you need to "trick" the MSI installer into not only copying the cab file into a PC folder, but also running the application installer provided with ActiveSync (yes, the one that runs when you add/remove programs in ActiveSync). Coupled to that, you may need to distribute several other packaged CAB files such as the .Net Compact Framework, SQL Server Compact, etc. The default project for creating MSIs only has automation to copy files in certain folders, so you can use code in a custom installer class where you can specify to run CEAppMgr.exe for as many CAB packages as you want.

To make things short, you would be running a call to unpack the right CAB file from each INI file you created. CEAppMgr will take care of deciding which one is right for your device, out of all the options you list in the INI file, so all you need to do is make the right call in that custom installer.

Now, out on the web I have noticed that people are having trouble making the right call. This is because they are not allowing the process to wait enough time to call it again for unpacking the next set of CAB files listed in the next INI file... that is because in the call, they need to use .WaitForExit() at the end of the call. The call in the custom installer should look like this:

System.Diagnostics.Process.Start(appMgrPath, "\"" + Path.Combine(installPath, CEAPPMGR_NETCFXv2_INI_FILE) + "\"").WaitForExit();

System.Diagnostics.Process.Start(appMgrPath, "\"" + Path.Combine(installPath, CEAPPMGR_SQLCE2K5_INI_FILE) + "\"").WaitForExit();

System.Diagnostics.Process.Start(appMgrPath, "\"" + Path.Combine(installPath, CEAPPMGR_INI_FILE) + "\"").WaitForExit();

If you have to make several calls, and you don't use "wait for exit", then the process may overlap and fail from time to time. It will not fail every single time, but it will not work correctly every single time.

Got the MSI... but need to rebuild my projects: how?

This is the really easy part. If you have all projects as part of a solution, then it will be easy to rebuild each project (application, then CAB, then MSI) and just pick up the MSI file from the Release folder under the MSI project folder.

Now that you have the basics, lets get to build that MSI!

Don't hesitate to post your comments here or even better: go to our forums for posting specific help with your project's MSI package.

BlueKatana Tool-Applications for Windows Mobile 1
25 February 08 04:10 PM | dsamuilov | with no comments

Our team has re-released some of the applications created recently. They were created as a training exercise by our team members. Each team member has chosen a pet project and executed the training to completion by creating their application. All proceeds go directly to the developers.

Please be on the lookout for more small tool-applications from our team. It is our intention to keep posting more applications as we move forward.

So far we have posted:

Tip Calc v2.0: Enter your meal total, the percentage you want to pay for the tip and how many people will pay for the meal. The application calculates the total and the amount to be paid by each one.

 

Password Generator v1.5: Generate random passwords with or without additional characters such as numbers and punctuation signs. Passwords are created and available to be copy-pasted to your favorite applications.

 

Mortgage Calculator v1.2: Calculate your monthly payments throughout the life of your mortgage (interest, principal and monthly payment). Displays balances, subtotals for the interest and principal for each year and totals to have paid at the end of the mortgage.

Why you need to know about SQL Server Compact Edition (SQL CE)?
14 February 08 09:01 AM | dsamuilov | with no comments

So you are a developer who works on applications that run on the desktop; or you are a project manager who has only heard of SQL Server Compact Edition... In any case, if you have hardly heard of SQL Server CE, or you are assuming that SQL Server CE runs only on portable devices, then you should read on to learn about some new powerful options available for your environment of choice.

Well, SQL Server CE in not only intended for devices who run on the Windows CE platform (Windows Mobile, Xbox 360 and many others among then) but also for PCs running XP and Vista:

WHAT? You didn't know? Never mind, keep reading then...

While SQL Server comes in many flavors, SQL Server Express is not the smallest of them all. Yes, it's free and it can run in your desktop if you want it... but do you really want to run a SQL Server on your desktop? Is that the smallest you can go?

While you should use a service whenever appropriate, common sense will indicate you to use something even smaller if the application only requires a store for data that can be easily accessed. Yes, you could access that application data if you store it in plain (or custom) data files, or you could build your own XML data structures, but those are plain ASCII file with either little or no security. If you secure them with encryption services, one of the many available APIs, accessing those files will happen at a much higher cost than your plain ASCII counterparts.

So, This is where SQL Server CE comes along to the rescue. SQL Server CE keeps the name "SQL Server" for consistency's sake but is smaller than a server. In fact, it does not even run as a standalone service, it runs in-proc with your application only when instantiated and provides many of the existing features in SQL Server while keeping execution cost at a minimum. There are versions of SQL Server CE available for the PC and Windows CE (where it originated), but Microsoft saw a strong potential in this tool for the desktop and pushed for its further development as a clear alternative to a full blown service.

SQL Server CE has a smaller footprint than a regular SQL Server service by having some limitations such as running in-proc with your application, not having stored procedures or views. However, running in-proc could be seen as a powerful feature instead of a limitation, because you don't really need to have your server running and eating precious CPU cycles off your desktop/mobile device all the time. Instead your SQL CE will behave as if it "wakes up when needed" creating the illusion of an always available, but not always eating processor cycles. Additionally; even though it runs in-proc; you could still have multiple applications within a single computer/device accessing the same SQL CE database, or you could have multiple clients accessing a shared database. Again, please have in mind that this version is intended for use where you would have not used SQL Server and would have used a different type of data store. It can be taken to extremes, but at those extremes, the functionality needed may overlap with other SQL Server flavors and you may want to choose those. In summary: choose wisely.

Many features can be brought up as being pretty cool in SQL Server Compact Edition, however; in my opinion, one of the most important strengths of this tool is the ability to synch back to any other SQL Server. This would enable you to store only the part of the corporate data that is needed as a distributed portion right where your application resides and only on scheduled intervals or whenever triggered have the databases synch up for replicating the data in, out or both ways. You could have a complex merge replication scheme to help your different locations see only what pertains to their location without having to distribute a server to them. This would allow for distributed applications with smartly-distributed databases without the need for server distribution... in corporate terms that could amount to an amazing amount in savings!

If that wasn't enough; here's the best part: IT'S FREE! Yes, you read it right, you can download SQL Server Compact Edition for free from right here:

Inyeccion de SQL Server
12 February 08 07:21 AM | dsamuilov | with no comments

Una amiga mia ha experimentado algunos problemas en su sitio web. Alguien le ha estado haciendo un lio terrible con el uso de Inyeccion de SQL Server... Por favor lean el articulo que escribi al respecto en el foro de bases de datos si se encuentran en una situacion similar. La solucion no es 100% a prueba de hackers, pero al menos va a hacer que la implementacion de inyeccion de SQL sea mas dificil para la gran mayoria de los hackers.

SQL Server Injection
11 February 08 03:16 AM | dsamuilov | with no comments

A friend of mine has been experiencing some trouble with her websites. Someone has been making a mess off of her websites by doing SQL injection... Please read the post I submitted to the Database forum if you are faced with similar behavior from one of your websites into your database(s). The solution will not make your website absolutely 100% hacker proof, but it will make things pretty difficult for using SQL injection in it.

Innovate ON Windows Mobile
07 February 08 03:11 AM | dsamuilov | with no comments

Independent Software Vendors (ISVs) have built somewhere around 19,000 applications for Windows Mobile. Microsoft has built a website called Innovate ON Windows Mobile. This portal is designed as part of the Microsoft Partner Program. It is meant for helping ISVs in the development, testing and marketing processes required for creating software. It covers from the very basic resources such as what tools to use and how to install them to access to mobile webcasts, events, etc.

InnovateONWindowsMobileThe website comes really handy if you are serious about building software for Windows Mobile because it also provides information on testing resources and how to obtain the "Designed for Windows Mobile" certification. On the marketing side, it also helps out by providing access to the Microsoft Certified Software Catalog (to which your software has access after getting the Windows Mobile certification) and tools to sell your application online with the help of Software Distribution Partners such as Handango, MobiHand, Motricity, etc.

To participate in this program all you need to do is enroll. Becoming a member will qualify you for additional exclusive benefits such as Free Test Vouchers and Tech Support. If you or your company are not a Microsoft Partner, join now for all these benefits.

.Net Compact Framework 3.5 Redistributable Available for Download
05 February 08 03:09 AM | dsamuilov | with no comments

Yes! It is ready and available for download here! It's been out there for about a month actually, but everything has been so hectic lately that I had no time to mention it or add the link on the BlueKatana website. This package contains the runtimes and libraries for version 3.5 with support for applications developed for .Net CF 3.5, 2.0 and 1.0. Very cool new features such as WCF (Windows Communication Foundation), LINQ, SoundPlayer and many more features. Please have in mind that if you want to develop for version 3.5 then you must use Visual Studio 2008.

South Florida Code Camp 2008 a Success
03 February 08 07:17 AM | dsamuilov | with no comments

Yesterday was a long day, I woke up at 5 AM so that I would make it on time to the Code Camp. Everything went great, I met with Silvia at the event. She is a friend of mine who was also going to the SFCC, chatted for a bit and then went on to the speaker room to make sure that everything was prepared for the marathon I was about to start (4 presentations - 2 in English and 2 in Spanish).

Our friends at http://fladotnet.net did a great Job at organizing this event. We had a great attendance: 617 people registered early in the morning at the event. We had enough time for breakfast and lunch, where we could mingle and talk to everyone there. Here are some pictures:

Commons1 Since I had everything prepared, I went on to the class where I was scheduled to start with my first presentation.

I had prepared the same two presentations both in English and Spanish, which was a little bit easier than just preparing four presentations. My subject this time was focused on preparing an introduction to Windows Mobile aimed at seasoned developers that had no prior experience building apps for that platform. The second one was aimed at people with a little bit more experience with the Windows Mobile platform and we focused on what's new in the .Net Framework 3.5 Commons2and the benefits of using managed code.

It is very refreshing to see how people's faces light up when they realize that not only they can use the same programming language they've been using for years, but also that they don't need to get a new tool. They get it right away and they can start programming as soon as they get back home.

The presentations went almost without a problem, except one minor thing; I forgot to turn off my screen saver with personal pictures of my family, and when I went on for a few minutes without moving to the next Presentation1slide, or I was asked some questions, the picture show would take over... on top of that, I forgot to disable it after the first time it happened (DUH!) and it happened twice in that presentation! Of course, the presentation went on without a problem, but I was a little bit embarrassed because I had forgotten to do that. I promise next time to turn it off ;-)

People enjoyed the demo I created, especially the one that had reusable code that Presentation2they could copy paste onto their apps for using some of the demoed Managed APIs. The one that sparked the most interest was the one where the use of the State and Notification Broker API (SNAPI) was explained and a bunch of "one liner" snippets were demoed.

The event was a complete success, and in the end there were lots of books, T-shirts, goodies, a Zune, a 22-inch monitor, software licenses and a bunch of stuff given away. Everyone got something to take home, and more important everyone was happy at the end of the event.

I thank you all 617 of you for attending the event, and especially to the ones that attended to my presentations. I hope to see you at the next event so you can tell me how you did building your first Windows Mobile applications. I would also like to thank Silvia for taking the pictures attached to this post.

SF Code Camp 2008 - Todo Listo
30 January 08 07:25 AM | dsamuilov | with no comments

Finalmente! Ya termine de preparar el material para el South Florida Code Camp 2008. Esta disponible al lado derecho de esta pagina en bajo el titulo de Links, como SkyDrive (Downloads), ahi encontraran las carpetas publicas del SF Code Camp 2008. Los archivos quedaran ahi por unas semanas hasta que necesite el espacio para otro evento. Si vas a asistir, te vere ahi; si no puedes o si estas lejos de nosotros, por supuesto que puedes bajar y usar los materiales. Hay cuatro presentaciones, dos en español y sus respectivas traducciones al ingles. Cada presentacion se compacto con el codigo de los ejemplos que se van a utilizar durante la presentacion. Solo pasa por arriba de cada archivo para ver el nombre completo y bajar el que estas buscando, ya sea en español o ingles. Disfrutalos!

SF Code Camp 2008
30 January 08 02:58 AM | dsamuilov | with no comments

Finally, I am done with the material for the South Florida Code Camp 2008. It is available for download from this page in the Links section under SkyDrive (Downloads), you will find the files in the public folders for the SF Code Camp 2008. I will leave the files here for a few weeks until I need the space for another event. If you will attend, see you there, if you don't or if you are far away from us, you can surely use the materials and download them. There are four presentations, two in English and their respective translations into Spanish. Each presentation was packed with the code samples that will be used during the presentation. Just hover over the files to see the full name of the file, that way you'll know whether you are downloading the presentation in English or Spanish. Enjoy!

Preparandome para el SF Code Camp
23 January 08 02:09 AM | dsamuilov | with no comments

Estas presentaciones toman bastante tiempo para preparar... Contenido, imagenes, transiciones, los programas para mostrar... espero terminar todo a tiempo para el evento y para que todos disfruten de las presentaciones tanto como yo disfruto de prepararlas. Voy a intentar publicar las presentaciones en la carpeta compartida de SkyDrive para que tengan una oportunidad de ver el contenido de antemano. Si no se anotaron al evento por favor apurense ya que no queda mucho espacio disponible. La pagina web del evento es http://codecamp08.fladotnet.com/ y la registracion para asistir esta en http://www.clicktoattend.com/?id=122048

Los vere ahi!

Preparing for the SF Code Camp
23 January 08 01:04 AM | dsamuilov | with no comments

These presentations take a while to prepare... Content, imaging, transitions, then the code to be used... hopefully I will get everything completed for the event and people enjoy the presentations as much as I enjoy preparing them. I will try to post the presentations in the shared folder before I go to the event so that you have the opportunity to see them beforehand. If you haven't signed up for the event, please hurry up, there aren't that many seats left. The event's website is http://codecamp08.fladotnet.com/ and to register you can go to http://www.clicktoattend.com/?id=122048

See you there!

Visual Studio 2008 Gratis
19 January 08 10:41 PM | dsamuilov | with no comments

Me llama la atencion que solo un pequeño grupo de personas saben de la linea "Express" de productos Visual Studio.

Cuando se lanzo Visual Studio se presento en paralelo la linea de productos "Express" que es gratis. Continuando con la tradicion de SQL Server Express que se distribuye en forma gratuita; Microsoft ha lanzado tambien una linea gratis de sus editores de lenguajes de programacion. Visual Studio es un paquete integrado de desarrollo, varios lenguajes se pueden editar en un mismo ambiente de trabajo. Sin embargo, la linea Express de productos gratuitos se ha lanzado como ambientes de desarrollo separados uno del otro. Visual Basic, Visual C#, Visual C++, Visual Web Developer (todos en su edicion 2008) se pueden conseguir gratis del sitio web de Microsoft. Su funcionalidad es relativamente baja (no incluyen las funciones de trabajo en equipo de sus hermanos mayores) pero estan listos para ayudarte a distribuir soluciones y aplicaciones serias por exactamente $0 de tu presupuesto de software.

Por supuesto que Visual Studio 2008 tiene diferentes versiones en las que se le van agregando mas funcionalidad a medida que el precio del producto sube. Por ejemplo Visual Studio 2008 Standard viene como el siguiente paso logico en funcionalidad en donde se combinan todos los editores de lenguajes de programacion en una sola herramienta. El siguiente paso a eso es el Visual Studio 2008 Professional, seguido por Visual Studio 2008 Team System. Cada version agrega mas funcionalidad sobre la version previa como por ejemplo la capacidad de programar aplicaciones para Windows Mobile en la version profesional. Asi que, si estas buscando programar aplicaciones de escritorio en VB, C#, C++ o aplicaciones web en ASP.Net o inclusive que esas aplicaciones accedan a un SQL Server podras planear de gastar tu presupuesto en otras cosas que no sean software, porque con las herramientas Microsoft lo podes hacer gratis.

Aqui encontraras los editores de programacion gratis:

Visual Studio 2008 Express Edition:

http://www.microsoft.com/express/product/default.aspx

Haz click en el link a continuacion para ver una comparacion entre Visual Studio 2008 Professional Edition y la version Standard

http://msdn2.microsoft.com/en-us/vs2008/products/bb980920.aspx

Free Visual Studio 2008
18 January 08 02:27 AM | dsamuilov | with no comments

It has come to my attention that only a few people know of the existence of the Express line of products in the Visual Studio suite.

When Visual Studio was launched it deployed also as a free "Express" line of products. Continuing with the SQL Server Express tradition that ships free; Microsoft released a free line of their programming language editors. Visual Studio is an integrated development suite, however; their free set of products was released as independent programming language environments. Visual Basic, Visual C#, Visual C++, Visual Web Developer (all in their 2008 edition) are shipping for free from Microsoft. Their functionality is basic, but they are ready to help you deploy some serious applications for exactly $0 of your budget.

Of course, Visual Studio 2008 has different releases that build up more functionality (and are not free). Visual Studio 2008 Standard comes as the next step with a combined IDE for all languages. The next step up is Visual Studio 2008 Professional, followed by Visual Studio 2008 Team System. Each version building up from the previous ones and adding up more functionality such as the ability to build Windows Mobile applications supported on the Professional version. So if you are looking at developing desktop applications (VB, C#, C++), web applications (ASP.Net) even with access to SQL Server you can look into spending your budget on anything other than software, because you can do it for free with Microsoft's tools.

 

Here you will find the tools ready for download:

Visual Studio 2008 Express Edition:

http://www.microsoft.com/express/product/default.aspx

 

Visual Studio 2008 Professional Edition and Standard Edition Product Comparison

http://msdn2.microsoft.com/en-us/vs2008/products/bb980920.aspx